@@ -114,6 +115,7 @@ export const TableFloatingToolbar = withRef
(
ref={ref}
asChild
onOpenAutoFocus={(e) => e.preventDefault()}
+ contentEditable={false}
{...props}
>
(
({ children, className, ...props }, ref) => {
- const { editor, element } = props;
+ const { element } = props;
const readOnly = useReadOnly();
const selected = useSelected();
- const isSelectionAreaVisible = editor.useOption(
- BlockSelectionPlugin,
- 'isSelectionAreaVisible'
- );
+ const editor = useEditorRef();
+ const { useOption } = useEditorPlugin(BlockSelectionPlugin);
+ const isSelectionAreaVisible = useOption?.('isSelectionAreaVisible');
const { isDragging, previewRef, handleRef } = useDraggable({
canDropNode: ({ dragEntry, dropEntry }) =>
@@ -29,6 +35,13 @@ export const TableRowElement = withRef(
),
element,
type: element.type,
+ onDropHandler: (_, { dragItem }) => {
+ const dragElement = (dragItem as any).element;
+
+ if (dragElement) {
+ editor.tf.select(dragElement);
+ }
+ },
});
return (
@@ -39,50 +52,38 @@ export const TableRowElement = withRef(
data-selected={selected ? 'true' : undefined}
{...props}
>
- {children}
-
{!readOnly && !isSelectionAreaVisible && (
- <>
-
+
+
- >
+ |
)}
+
+ {children}
);
}
);
-function RowDragHandle({
- dragRef,
- isDragging,
-}: {
- dragRef: React.Ref;
- isDragging: boolean;
-}) {
+function RowDragHandle({ dragRef }: { dragRef: React.Ref }) {
+ const editor = useEditorRef();
+ const element = useElement();
+
return (
- {
+ editor.tf.select(element);
+ }}
>
-
- |
+
+
);
}
@@ -92,15 +93,11 @@ function DropLine() {
if (!dropLine) return null;
return (
-
-
- |
+
);
}
diff --git a/apps/www/src/registry/default/plate-ui/turn-into-dropdown-menu.tsx b/apps/www/src/registry/default/plate-ui/turn-into-dropdown-menu.tsx
index ea087dee59..d46a9a02c8 100644
--- a/apps/www/src/registry/default/plate-ui/turn-into-dropdown-menu.tsx
+++ b/apps/www/src/registry/default/plate-ui/turn-into-dropdown-menu.tsx
@@ -132,7 +132,12 @@ export function TurnIntoDropdownMenu(props: DropdownMenuProps) {
return (
-
+
{selectedItem.label}
diff --git a/packages/ai/src/react/ai-chat/withAIChat.ts b/packages/ai/src/react/ai-chat/withAIChat.ts
index ef009d91a0..14c4428025 100644
--- a/packages/ai/src/react/ai-chat/withAIChat.ts
+++ b/packages/ai/src/react/ai-chat/withAIChat.ts
@@ -27,7 +27,7 @@ export const withAIChat: OverrideEditor = ({
return {
transforms: {
- insertText(text) {
+ insertText(text, options) {
const { triggerPreviousCharPattern, triggerQuery } = getOptions();
const fn = () => {
@@ -60,7 +60,7 @@ export const withAIChat: OverrideEditor = ({
if (fn()) return;
- return insertText(text);
+ return insertText(text, options);
},
normalizeNode(entry) {
diff --git a/packages/ai/src/react/copilot/withCopilot.ts b/packages/ai/src/react/copilot/withCopilot.ts
index dc18043550..c1a0aa6a10 100644
--- a/packages/ai/src/react/copilot/withCopilot.ts
+++ b/packages/ai/src/react/copilot/withCopilot.ts
@@ -47,7 +47,7 @@ export const withCopilot: OverrideEditor = ({
apply(operation);
},
- insertText(text) {
+ insertText(text, options) {
const suggestionText = getOptions().suggestionText;
// When using IME input, it's possible to enter two characters at once.
@@ -63,7 +63,7 @@ export const withCopilot: OverrideEditor = ({
return;
}
- insertText(text);
+ insertText(text, options);
},
redo() {
diff --git a/packages/alignment/src/react/useAlignDropdownMenu.ts b/packages/alignment/src/react/useAlignDropdownMenu.ts
index 156c999322..2f141b3e68 100644
--- a/packages/alignment/src/react/useAlignDropdownMenu.ts
+++ b/packages/alignment/src/react/useAlignDropdownMenu.ts
@@ -1,43 +1,23 @@
-import { isDefined } from '@udecode/plate';
-import { useEditorRef, useEditorSelector } from '@udecode/plate/react';
+import { useEditorRef, useSelectionFragmentProp } from '@udecode/plate/react';
-import { type Alignment, BaseAlignPlugin, setAlign } from '../index';
+import { type Alignment, setAlign } from '../index';
-export const useAlignDropdownMenuState = () => {
- const value: Alignment = useEditorSelector((editor) => {
- let commonAlignment: string | undefined;
- const codeBlockEntries = editor.api.nodes({
- match: (n) => editor.api.isBlock(n),
- });
- const nodes = Array.from(codeBlockEntries);
- nodes.forEach(([node]) => {
- const align: string = (node[BaseAlignPlugin.key] as string) || 'start';
-
- if (!isDefined(commonAlignment)) {
- commonAlignment = align;
- } else if (commonAlignment !== align) {
- commonAlignment = undefined;
- }
- });
-
- if (isDefined(commonAlignment)) {
- const nodeValue = commonAlignment;
-
- if (nodeValue === 'left') return 'left';
- if (nodeValue === 'center') return 'center';
- if (nodeValue === 'right') return 'right';
- if (nodeValue === 'end') return 'end';
- if (nodeValue === 'justify') return 'justify';
- }
-
- return 'start';
- }, []);
+/** @deprecated */
+export const useAlignDropdownMenuState = ({
+ structuralTypes,
+}: { structuralTypes?: string[] } = {}) => {
+ const value = useSelectionFragmentProp({
+ defaultValue: 'start',
+ getProp: (node) => node.align,
+ structuralTypes,
+ });
return {
- value,
+ value: value as Alignment,
};
};
+/** @deprecated */
export const useAlignDropdownMenu = ({
value,
}: ReturnType) => {
diff --git a/packages/autoformat/src/lib/withAutoformat.ts b/packages/autoformat/src/lib/withAutoformat.ts
index fa1e407b7a..033d30fe75 100644
--- a/packages/autoformat/src/lib/withAutoformat.ts
+++ b/packages/autoformat/src/lib/withAutoformat.ts
@@ -17,8 +17,8 @@ export const withAutoformat: OverrideEditor = ({
}) => {
return {
transforms: {
- insertText(text) {
- if (!editor.api.isCollapsed()) return insertText(text);
+ insertText(text, options) {
+ if (!editor.api.isCollapsed()) return insertText(text, options);
for (const rule of getOptions().rules!) {
const { insertTrigger, mode = 'text', query } = rule;
@@ -41,7 +41,7 @@ export const withAutoformat: OverrideEditor = ({
}
}
- insertText(text);
+ insertText(text, options);
},
},
};
diff --git a/packages/combobox/src/lib/withTriggerCombobox.ts b/packages/combobox/src/lib/withTriggerCombobox.ts
index 51805f2ad0..5a8f9b3a9e 100644
--- a/packages/combobox/src/lib/withTriggerCombobox.ts
+++ b/packages/combobox/src/lib/withTriggerCombobox.ts
@@ -25,7 +25,7 @@ export const withTriggerCombobox: OverrideEditor<
return {
transforms: {
- insertText(text) {
+ insertText(text, options) {
const {
createComboboxInput,
triggerPreviousCharPattern,
@@ -33,11 +33,12 @@ export const withTriggerCombobox: OverrideEditor<
} = getOptions();
if (
+ options?.at ||
!editor.selection ||
!matchesTrigger(text) ||
(triggerQuery && !triggerQuery(editor as SlateEditor))
) {
- return insertText(text);
+ return insertText(text, options);
}
// Make sure an input is created at the beginning of line or after a whitespace
@@ -53,10 +54,10 @@ export const withTriggerCombobox: OverrideEditor<
? createComboboxInput(text)
: { children: [{ text: '' }], type };
- return editor.tf.insertNodes(inputNode);
+ return editor.tf.insertNodes(inputNode, options);
}
- return insertText(text);
+ return insertText(text, options);
},
},
};
diff --git a/packages/link/src/lib/withLink.ts b/packages/link/src/lib/withLink.ts
index 19279a6a27..ffe22c4516 100644
--- a/packages/link/src/lib/withLink.ts
+++ b/packages/link/src/lib/withLink.ts
@@ -132,12 +132,12 @@ export const withLink: OverrideEditor = ({
insertData(data);
},
- insertText(text) {
+ insertText(text, options) {
if (text === ' ' && editor.api.isCollapsed()) {
wrapLink();
}
- insertText(text);
+ insertText(text, options);
},
normalizeNode([node, path]) {
diff --git a/packages/suggestion/src/lib/withSuggestion.ts b/packages/suggestion/src/lib/withSuggestion.ts
index 6c1dcb01b2..8f872685a9 100644
--- a/packages/suggestion/src/lib/withSuggestion.ts
+++ b/packages/suggestion/src/lib/withSuggestion.ts
@@ -95,14 +95,14 @@ export const withSuggestion: OverrideEditor = ({
insertFragment(fragment);
},
- insertText(text) {
+ insertText(text, options) {
if (getOptions().isSuggesting) {
insertTextSuggestion(editor, text);
return;
}
- insertText(text);
+ insertText(text, options);
},
normalizeNode(entry) {
diff --git a/packages/table/src/lib/withInsertTextTable.ts b/packages/table/src/lib/withInsertTextTable.ts
index 66de296149..c644b55046 100644
--- a/packages/table/src/lib/withInsertTextTable.ts
+++ b/packages/table/src/lib/withInsertTextTable.ts
@@ -8,7 +8,7 @@ export const withInsertTextTable: OverrideEditor = ({
tf: { insertText },
}) => ({
transforms: {
- insertText(text) {
+ insertText(text, options) {
if (editor.api.isExpanded()) {
const entry = getTableAbove(editor, {
at: editor.selection?.anchor,
@@ -27,7 +27,7 @@ export const withInsertTextTable: OverrideEditor = ({
}
}
- insertText(text);
+ insertText(text, options);
},
},
});