@agent-native/toolkit 0.10.2 → 0.10.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dist/design-system/design-system.spec.js +47 -2
  2. package/dist/design-system/design-system.spec.js.map +1 -1
  3. package/dist/editor/SharedRichEditor.d.ts +3 -1
  4. package/dist/editor/SharedRichEditor.d.ts.map +1 -1
  5. package/dist/editor/SharedRichEditor.js +17 -3
  6. package/dist/editor/SharedRichEditor.js.map +1 -1
  7. package/dist/editor/SharedRichEditor.spec.d.ts +2 -0
  8. package/dist/editor/SharedRichEditor.spec.d.ts.map +1 -0
  9. package/dist/editor/SharedRichEditor.spec.js +63 -0
  10. package/dist/editor/SharedRichEditor.spec.js.map +1 -0
  11. package/dist/editor/SlashCommandMenu.d.ts +10 -0
  12. package/dist/editor/SlashCommandMenu.d.ts.map +1 -1
  13. package/dist/editor/SlashCommandMenu.js +54 -2
  14. package/dist/editor/SlashCommandMenu.js.map +1 -1
  15. package/dist/editor/SlashCommandMenu.spec.js +48 -1
  16. package/dist/editor/SlashCommandMenu.spec.js.map +1 -1
  17. package/dist/editor/index.d.ts +1 -1
  18. package/dist/editor/index.d.ts.map +1 -1
  19. package/dist/editor/index.js +1 -1
  20. package/dist/editor/index.js.map +1 -1
  21. package/dist/editor.css +75 -0
  22. package/dist/ui/button.d.ts.map +1 -1
  23. package/dist/ui/button.js +2 -2
  24. package/dist/ui/button.js.map +1 -1
  25. package/package.json +1 -1
  26. package/src/design-system/design-system.spec.tsx +99 -1
  27. package/src/editor/SharedRichEditor.spec.tsx +82 -0
  28. package/src/editor/SharedRichEditor.tsx +23 -2
  29. package/src/editor/SlashCommandMenu.spec.ts +57 -0
  30. package/src/editor/SlashCommandMenu.tsx +68 -2
  31. package/src/editor/index.ts +1 -0
  32. package/src/editor.css +75 -0
  33. package/src/ui/button.tsx +3 -2
@@ -1,10 +1,11 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  // @vitest-environment happy-dom
3
- import { act } from "react";
3
+ import { act, forwardRef } from "react";
4
4
  import { createRoot } from "react-dom/client";
5
5
  import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
6
6
  import { ToolkitProvider } from "../provider.js";
7
7
  import { Button } from "../ui/button.js";
8
+ import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "../ui/dropdown-menu.js";
8
9
  import { ActionButton } from "./components.js";
9
10
  import { defaultDesignSystemComponents } from "./default-adapter.js";
10
11
  import { defineDesignSystem } from "./definition.js";
@@ -104,6 +105,50 @@ describe("design-system contract", () => {
104
105
  });
105
106
  expect(container.querySelector("[data-adapter=legacy]")?.textContent).toBe("Save");
106
107
  });
108
+ it.each(["pointer", "Enter", "Space", "ArrowDown"])("preserves Radix menu trigger behavior through a legacy Button override with %s activation", async (activation) => {
109
+ const onOpenChange = vi.fn();
110
+ let buttonRef = null;
111
+ const LegacyButton = forwardRef(({ asChild: _asChild, emphasis: _emphasis, intent: _intent, size: _size, variant: _variant, ...props }, ref) => _jsx("button", { ...props, ref: ref, "data-adapter": "legacy" }));
112
+ await act(async () => {
113
+ root.render(_jsx(ToolkitProvider, { components: { Button: LegacyButton }, designSystem: {}, children: _jsxs(DropdownMenu, { onOpenChange: onOpenChange, children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx(Button, { ref: (node) => {
114
+ buttonRef = node;
115
+ }, children: "Open menu" }) }), _jsx(DropdownMenuContent, { children: _jsx(DropdownMenuItem, { children: "First item" }) })] }) }));
116
+ });
117
+ const trigger = container.querySelector("button");
118
+ expect(trigger).not.toBeNull();
119
+ expect(buttonRef).toBe(trigger);
120
+ expect(trigger?.getAttribute("aria-haspopup")).toBe("menu");
121
+ expect(trigger?.getAttribute("aria-expanded")).toBe("false");
122
+ expect(trigger?.dataset.state).toBe("closed");
123
+ await act(async () => {
124
+ trigger?.focus();
125
+ if (activation === "pointer") {
126
+ trigger?.dispatchEvent(new PointerEvent("pointerdown", {
127
+ bubbles: true,
128
+ button: 0,
129
+ pointerType: "mouse",
130
+ }));
131
+ }
132
+ else {
133
+ const key = activation === "Space" ? " " : activation;
134
+ trigger?.dispatchEvent(new KeyboardEvent("keydown", { bubbles: true, key }));
135
+ }
136
+ await Promise.resolve();
137
+ });
138
+ expect(onOpenChange).toHaveBeenCalledTimes(1);
139
+ expect(onOpenChange).toHaveBeenLastCalledWith(true);
140
+ expect(trigger?.getAttribute("aria-expanded")).toBe("true");
141
+ expect(trigger?.dataset.state).toBe("open");
142
+ expect(document.querySelector("[role=menu]")).not.toBeNull();
143
+ await act(async () => {
144
+ document.activeElement?.dispatchEvent(new KeyboardEvent("keydown", { bubbles: true, key: "Escape" }));
145
+ await Promise.resolve();
146
+ });
147
+ expect(onOpenChange).toHaveBeenCalledTimes(2);
148
+ expect(onOpenChange).toHaveBeenLastCalledWith(false);
149
+ expect(trigger?.getAttribute("aria-expanded")).toBe("false");
150
+ expect(trigger?.dataset.state).toBe("closed");
151
+ });
107
152
  it("isolates a broken customer component and renders the default control", () => {
108
153
  vi.spyOn(console, "error").mockImplementation(() => { });
109
154
  const BrokenActionButton = () => {
@@ -1 +1 @@
1
- {"version":3,"file":"design-system.spec.js","sourceRoot":"","sources":["../../src/design-system/design-system.spec.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"design-system.spec.js","sourceRoot":"","sources":["../../src/design-system/design-system.spec.tsx"],"names":[],"mappings":"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"}
@@ -16,6 +16,8 @@ export interface SharedRichEditorProps {
16
16
  preset?: RichMarkdownEditorPreset;
17
17
  /** Toggle individual base extensions (tables/tasks/link/codeBlock/image). */
18
18
  features?: SharedEditorFeatures;
19
+ /** Show the Notion-style block grip and action menu. Defaults to `true`. */
20
+ dragHandle?: boolean;
19
21
  /**
20
22
  * Injectable image uploader for the shared image block. Used only when
21
23
  * `features.image` is on. Pass `uploadEditorImage` (the framework
@@ -106,5 +108,5 @@ export interface SharedRichEditorProps {
106
108
  * With a `ydoc` it binds the framework collaboration stack; markdown stays the
107
109
  * canonical saved representation while the Y.Doc is transient live state.
108
110
  */
109
- export declare function SharedRichEditor({ value, onChange, onBlur, contentUpdatedAt, editable, dialect, preset, features, onImageUpload, extraExtensions, placeholder, className, editorClassName, ariaLabel, interactive, ydoc, collabSynced, awareness, user, disableHistory, slashItems, buildBubbleItems, getMarkdown, setContent, parseValue, normalizeValue, shouldSeed, initialAppliedUpdatedAt, wrapperClassName, onEditorReady, }: SharedRichEditorProps): import("react").JSX.Element;
111
+ export declare function SharedRichEditor({ value, onChange, onBlur, contentUpdatedAt, editable, dialect, preset, features, dragHandle, onImageUpload, extraExtensions, placeholder, className, editorClassName, ariaLabel, interactive, ydoc, collabSynced, awareness, user, disableHistory, slashItems, buildBubbleItems, getMarkdown, setContent, parseValue, normalizeValue, shouldSeed, initialAppliedUpdatedAt, wrapperClassName, onEditorReady, }: SharedRichEditorProps): import("react").JSX.Element;
110
112
  //# sourceMappingURL=SharedRichEditor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SharedRichEditor.d.ts","sourceRoot":"","sources":["../../src/editor/SharedRichEditor.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SharedRichEditor.d.ts","sourceRoot":"","sources":["../../src/editor/SharedRichEditor.tsx"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import { EditorContent, useEditor } from "@tiptap/react";
3
3
  import { useEffect, useMemo, useRef } from "react";
4
4
  import { cn } from "../utils.js";
5
5
  import { BubbleToolbar } from "./BubbleToolbar.js";
6
+ import { DragHandle } from "./DragHandle.js";
6
7
  import { createSharedEditorExtensions, } from "./extensions.js";
7
8
  import { DEFAULT_SLASH_COMMANDS, filterSlashCommandItems, SlashCommandMenu, } from "./SlashCommandMenu.js";
8
9
  import { useCollabReconcile, getEditorMarkdown, } from "./useCollabReconcile.js";
@@ -17,18 +18,31 @@ import { useCollabReconcile, getEditorMarkdown, } from "./useCollabReconcile.js"
17
18
  * With a `ydoc` it binds the framework collaboration stack; markdown stays the
18
19
  * canonical saved representation while the Y.Doc is transient live state.
19
20
  */
20
- export function SharedRichEditor({ value, onChange, onBlur, contentUpdatedAt, editable = true, dialect = "gfm", preset = "plan", features, onImageUpload = null, extraExtensions, placeholder = "Type '/' for commands...", className, editorClassName, ariaLabel, interactive = editable, ydoc = null, collabSynced = true, awareness = null, user = null, disableHistory = false, slashItems, buildBubbleItems, getMarkdown, setContent, parseValue, normalizeValue, shouldSeed, initialAppliedUpdatedAt, wrapperClassName, onEditorReady, }) {
21
+ export function SharedRichEditor({ value, onChange, onBlur, contentUpdatedAt, editable = true, dialect = "gfm", preset = "plan", features, dragHandle = true, onImageUpload = null, extraExtensions, placeholder = "Type '/' for commands...", className, editorClassName, ariaLabel, interactive = editable, ydoc = null, collabSynced = true, awareness = null, user = null, disableHistory = false, slashItems, buildBubbleItems, getMarkdown, setContent, parseValue, normalizeValue, shouldSeed, initialAppliedUpdatedAt, wrapperClassName, onEditorReady, }) {
21
22
  const readMarkdown = getMarkdown ?? getEditorMarkdown;
22
23
  const onChangeRef = useRef(onChange);
23
24
  const onBlurRef = useRef(onBlur);
24
25
  onChangeRef.current = onChange;
25
26
  onBlurRef.current = onBlur;
27
+ const effectiveExtraExtensions = useMemo(() => {
28
+ const extras = extraExtensions ?? [];
29
+ if (!dragHandle ||
30
+ extras.some((extension) => extension.name === "dragHandle")) {
31
+ return extras;
32
+ }
33
+ return [
34
+ DragHandle.configure({
35
+ wrapperSelector: ".an-rich-md-wrapper",
36
+ }),
37
+ ...extras,
38
+ ];
39
+ }, [dragHandle, extraExtensions]);
26
40
  const extensions = useMemo(() => createSharedEditorExtensions({
27
41
  dialect,
28
42
  preset,
29
43
  placeholder,
30
44
  features,
31
- extraExtensions,
45
+ extraExtensions: effectiveExtraExtensions,
32
46
  onImageUpload,
33
47
  collab: ydoc ? { ydoc, awareness, user } : null,
34
48
  disableHistory,
@@ -43,7 +57,7 @@ export function SharedRichEditor({ value, onChange, onBlur, contentUpdatedAt, ed
43
57
  placeholder,
44
58
  preset,
45
59
  features,
46
- extraExtensions,
60
+ effectiveExtraExtensions,
47
61
  onImageUpload,
48
62
  ydoc,
49
63
  awareness,
@@ -1 +1 @@
1
- {"version":3,"file":"SharedRichEditor.js","sourceRoot":"","sources":["../../src/editor/SharedRichEditor.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SharedRichEditor.js","sourceRoot":"","sources":["../../src/editor/SharedRichEditor.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=SharedRichEditor.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SharedRichEditor.spec.d.ts","sourceRoot":"","sources":["../../src/editor/SharedRichEditor.spec.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,63 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // @vitest-environment happy-dom
3
+ import { act } from "react";
4
+ import { createRoot } from "react-dom/client";
5
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
6
+ import { SharedRichEditor } from "./SharedRichEditor.js";
7
+ describe("SharedRichEditor block controls", () => {
8
+ let container;
9
+ let root;
10
+ beforeEach(() => {
11
+ vi.stubGlobal("IS_REACT_ACT_ENVIRONMENT", true);
12
+ container = document.createElement("div");
13
+ document.body.appendChild(container);
14
+ root = createRoot(container);
15
+ });
16
+ afterEach(() => {
17
+ act(() => root.unmount());
18
+ container.remove();
19
+ vi.restoreAllMocks();
20
+ vi.unstubAllGlobals();
21
+ });
22
+ it("mounts the shared Notion-style block grip by default", async () => {
23
+ await act(async () => {
24
+ root.render(_jsx(SharedRichEditor, { value: "<p>First</p><p>Second</p>", onChange: () => undefined }));
25
+ await new Promise((resolve) => setTimeout(resolve, 10));
26
+ });
27
+ const prose = container.querySelector(".an-rich-md-prose");
28
+ const firstBlock = prose?.firstElementChild;
29
+ for (const [element, rect] of [
30
+ [prose, { left: 0, top: 0, right: 640, bottom: 100 }],
31
+ [firstBlock, { left: 0, top: 0, right: 640, bottom: 24 }],
32
+ ]) {
33
+ if (!element)
34
+ continue;
35
+ Object.defineProperty(element, "getBoundingClientRect", {
36
+ configurable: true,
37
+ value: () => ({
38
+ ...rect,
39
+ x: rect.left,
40
+ y: rect.top,
41
+ width: rect.right - rect.left,
42
+ height: rect.bottom - rect.top,
43
+ toJSON: () => ({}),
44
+ }),
45
+ });
46
+ }
47
+ document.dispatchEvent(new MouseEvent("mousemove", {
48
+ bubbles: true,
49
+ clientX: 8,
50
+ clientY: 8,
51
+ }));
52
+ expect(container.querySelector(".an-rich-md-wrapper")).not.toBeNull();
53
+ expect(container.querySelector(".drag-handle")).not.toBeNull();
54
+ });
55
+ it("allows hosts to opt out when they own block controls", async () => {
56
+ await act(async () => {
57
+ root.render(_jsx(SharedRichEditor, { value: "First", onChange: () => undefined, dragHandle: false }));
58
+ await new Promise((resolve) => setTimeout(resolve, 10));
59
+ });
60
+ expect(container.querySelector(".drag-handle")).toBeNull();
61
+ });
62
+ });
63
+ //# sourceMappingURL=SharedRichEditor.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SharedRichEditor.spec.js","sourceRoot":"","sources":["../../src/editor/SharedRichEditor.spec.tsx"],"names":[],"mappings":"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"}
@@ -15,6 +15,16 @@ export interface SlashCommandItem {
15
15
  requires?: "tables" | "tasks" | "codeBlock";
16
16
  action: (editor: Editor) => void;
17
17
  }
18
+ /**
19
+ * Put the caret inside the block a slash command just created or transformed.
20
+ *
21
+ * Tiptap commands usually preserve a text selection, but commands that replace
22
+ * the current paragraph (notably code blocks and horizontal rules) can leave a
23
+ * node selection or a caret at the following block. Resolving from the slash
24
+ * range keeps the behavior consistent for built-in and app-provided block
25
+ * commands: after selecting a block, typing starts in that block immediately.
26
+ */
27
+ export declare function focusEditorInInsertedBlock(editor: Editor, anchorPosition?: number): void;
18
28
  export interface SlashCommandFeatureFlags {
19
29
  tables?: boolean;
20
30
  tasks?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"SlashCommandMenu.d.ts","sourceRoot":"","sources":["../../src/editor/SlashCommandMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAW5C,OAAO,EAAsB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE7E,2EAA2E;AAC3E,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,WAAW,CAAC;IAC5C,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,SAAS,gBAAgB,EAAE,EAClC,QAAQ,CAAC,EAAE,wBAAwB,GAClC,gBAAgB,EAAE,CAIpB;AAED;;;GAGG;AACH,eAAO,MAAM,sBAAsB,EAAE,gBAAgB,EA8EpD,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,aAAa,GACpB,gBAAgB,CAOlB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,KAAK,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAC5B;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,KAA8B,GAC/B,EAAE,qBAAqB,sCAwKvB"}
1
+ {"version":3,"file":"SlashCommandMenu.d.ts","sourceRoot":"","sources":["../../src/editor/SlashCommandMenu.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAW5C,OAAO,EAAsB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE7E,2EAA2E;AAC3E,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,WAAW,CAAC;IAC5C,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC;AAED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,MAAM,EACd,cAAc,CAAC,EAAE,MAAM,GACtB,IAAI,CA8CN;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,SAAS,gBAAgB,EAAE,EAClC,QAAQ,CAAC,EAAE,wBAAwB,GAClC,gBAAgB,EAAE,CAIpB;AAED;;;GAGG;AACH,eAAO,MAAM,sBAAsB,EAAE,gBAAgB,EA8EpD,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,aAAa,GACpB,gBAAgB,CAOlB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,KAAK,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAC5B;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,KAA8B,GAC/B,EAAE,qBAAqB,sCA6KvB"}
@@ -1,7 +1,53 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { TextSelection } from "@tiptap/pm/state";
2
3
  import { useCallback, useEffect, useMemo, useRef, useState, } from "react";
3
4
  import { cn } from "../utils.js";
4
5
  import { pickAndInsertImage } from "./ImageExtension.js";
6
+ /**
7
+ * Put the caret inside the block a slash command just created or transformed.
8
+ *
9
+ * Tiptap commands usually preserve a text selection, but commands that replace
10
+ * the current paragraph (notably code blocks and horizontal rules) can leave a
11
+ * node selection or a caret at the following block. Resolving from the slash
12
+ * range keeps the behavior consistent for built-in and app-provided block
13
+ * commands: after selecting a block, typing starts in that block immediately.
14
+ */
15
+ export function focusEditorInInsertedBlock(editor, anchorPosition) {
16
+ if (editor.isDestroyed)
17
+ return;
18
+ const { state } = editor;
19
+ const anchor = Math.max(1, Math.min(anchorPosition ?? state.selection.from, state.doc.content.size));
20
+ let containingTextblock = null;
21
+ let nextTextblock = null;
22
+ let previousTextblock = null;
23
+ state.doc.nodesBetween(0, state.doc.content.size, (node, pos) => {
24
+ if (!node.isTextblock)
25
+ return;
26
+ const start = pos + 1;
27
+ const end = pos + node.nodeSize - 1;
28
+ if (anchor >= start && anchor <= end) {
29
+ containingTextblock ??= anchor;
30
+ return;
31
+ }
32
+ if (start > anchor) {
33
+ if (nextTextblock === null || start < nextTextblock) {
34
+ nextTextblock = start;
35
+ }
36
+ return;
37
+ }
38
+ if (previousTextblock === null || start > previousTextblock) {
39
+ previousTextblock = Math.min(anchor, end);
40
+ }
41
+ });
42
+ const target = containingTextblock ?? nextTextblock ?? previousTextblock;
43
+ if (target === null) {
44
+ editor.commands.focus();
45
+ return;
46
+ }
47
+ const transaction = state.tr.setSelection(TextSelection.create(state.doc, Math.max(1, Math.min(target, state.doc.content.size))));
48
+ editor.view.dispatch(transaction.scrollIntoView());
49
+ editor.view.focus();
50
+ }
5
51
  export function filterSlashCommandItems(items, features) {
6
52
  return items.filter((item) => !item.requires || features?.[item.requires] !== false);
7
53
  }
@@ -127,13 +173,19 @@ export function SlashCommandMenu({ editor, items = DEFAULT_SLASH_COMMANDS, }) {
127
173
  const executeCommand = useCallback((command) => {
128
174
  if (slashPosRef.current !== null) {
129
175
  const { from } = editor.state.selection;
176
+ const anchorPosition = slashPosRef.current;
130
177
  editor
131
178
  .chain()
132
179
  .focus()
133
- .deleteRange({ from: slashPosRef.current, to: from })
180
+ .deleteRange({ from: anchorPosition, to: from })
134
181
  .run();
182
+ command.action(editor);
183
+ focusEditorInInsertedBlock(editor, anchorPosition);
184
+ }
185
+ else {
186
+ command.action(editor);
187
+ focusEditorInInsertedBlock(editor);
135
188
  }
136
- command.action(editor);
137
189
  close();
138
190
  }, [close, editor]);
139
191
  useEffect(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"SlashCommandMenu.js","sourceRoot":"","sources":["../../src/editor/SlashCommandMenu.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SlashCommandMenu.js","sourceRoot":"","sources":["../../src/editor/SlashCommandMenu.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EACL,WAAW,EACX,SAAS,EACT,OAAO,EACP,MAAM,EACN,QAAQ,GAET,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAsB,MAAM,qBAAqB,CAAC;AAkB7E;;;;;;;;GAQG;AACH,MAAM,UAAU,0BAA0B,CACxC,MAAc,EACd,cAAuB;IAEvB,IAAI,MAAM,CAAC,WAAW;QAAE,OAAO;IAE/B,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IACzB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CACrB,CAAC,EACD,IAAI,CAAC,GAAG,CAAC,cAAc,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CACzE,CAAC;IACF,IAAI,mBAAmB,GAAkB,IAAI,CAAC;IAC9C,IAAI,aAAa,GAAkB,IAAI,CAAC;IACxC,IAAI,iBAAiB,GAAkB,IAAI,CAAC;IAE5C,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QAC9D,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO;QAE9B,MAAM,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC;QACtB,MAAM,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QACpC,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;YACrC,mBAAmB,KAAK,MAAM,CAAC;YAC/B,OAAO;QACT,CAAC;QACD,IAAI,KAAK,GAAG,MAAM,EAAE,CAAC;YACnB,IAAI,aAAa,KAAK,IAAI,IAAI,KAAK,GAAG,aAAa,EAAE,CAAC;gBACpD,aAAa,GAAG,KAAK,CAAC;YACxB,CAAC;YACD,OAAO;QACT,CAAC;QACD,IAAI,iBAAiB,KAAK,IAAI,IAAI,KAAK,GAAG,iBAAiB,EAAE,CAAC;YAC5D,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,mBAAmB,IAAI,aAAa,IAAI,iBAAiB,CAAC;IACzE,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACxB,OAAO;IACT,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,EAAE,CAAC,YAAY,CACvC,aAAa,CAAC,MAAM,CAClB,KAAK,CAAC,GAAG,EACT,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CACtD,CACF,CAAC;IACF,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC,CAAC;IACnD,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AACtB,CAAC;AAQD,MAAM,UAAU,uBAAuB,CACrC,KAAkC,EAClC,QAAmC;IAEnC,OAAO,KAAK,CAAC,MAAM,CACjB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,QAAQ,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,CAChE,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAuB;IACxD;QACE,KAAK,EAAE,MAAM;QACb,WAAW,EAAE,kBAAkB;QAC/B,IAAI,EAAE,GAAG;QACT,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE;KAChE;IACD;QACE,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,eAAe;QAC5B,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CACjB,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE;KAC3D;IACD;QACE,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,iBAAiB;QAC9B,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CACjB,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE;KAC3D;IACD;QACE,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,YAAY;QACzB,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CACjB,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE;KAC3D;IACD;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,gBAAgB;QAC7B,IAAI,EAAE,GAAG;QACT,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,gBAAgB,EAAE,CAAC,GAAG,EAAE;KACpE;IACD;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,cAAc;QAC3B,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,iBAAiB,EAAE,CAAC,GAAG,EAAE;KACrE;IACD;QACE,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,iBAAiB;QAC9B,IAAI,EAAE,IAAI;QACV,QAAQ,EAAE,OAAO;QACjB,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,cAAc,EAAE,CAAC,GAAG,EAAE;KAClE;IACD;QACE,KAAK,EAAE,OAAO;QACd,WAAW,EAAE,aAAa;QAC1B,IAAI,EAAE,GAAG;QACT,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,gBAAgB,EAAE,CAAC,GAAG,EAAE;KACpE;IACD;QACE,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,cAAc;QAC3B,IAAI,EAAE,IAAI;QACV,QAAQ,EAAE,WAAW;QACrB,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,eAAe,EAAE,CAAC,GAAG,EAAE;KACnE;IACD;QACE,KAAK,EAAE,SAAS;QAChB,WAAW,EAAE,iBAAiB;QAC9B,IAAI,EAAE,GAAG;QACT,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,iBAAiB,EAAE,CAAC,GAAG,EAAE;KACrE;IACD;QACE,KAAK,EAAE,OAAO;QACd,WAAW,EAAE,sBAAsB;QACnC,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,QAAQ;QAClB,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CACjB,MAAM;aACH,KAAK,EAAE;aACP,KAAK,EAAE;aACP,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;aACtD,GAAG,EAAE;KACX;CACF,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAAqB;IAErB,OAAO;QACL,KAAK,EAAE,OAAO;QACd,WAAW,EAAE,iBAAiB;QAC9B,IAAI,EAAE,KAAK;QACX,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC;KAC5D,CAAC;AACJ,CAAC;AAQD;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAC/B,MAAM,EACN,KAAK,GAAG,sBAAsB,GACR;IACtB,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACvC,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAI9B,IAAI,CAAC,CAAC;IAChB,MAAM,OAAO,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAC7C,MAAM,eAAe,GAAG,MAAM,CAAoB,IAAI,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG,MAAM,CAAgB,IAAI,CAAC,CAAC;IAEhD,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,EAAE;QACpC,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAC5C,OAAO,KAAK,CAAC,MAAM,CACjB,CAAC,GAAG,EAAE,EAAE,CACN,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;YACjD,GAAG,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;YACvD,GAAG,CAAC,UAAU,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAC1D,CAAC;IACJ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAEnB,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7B,SAAS,CAAC,KAAK,CAAC,CAAC;QACjB,QAAQ,CAAC,EAAE,CAAC,CAAC;QACb,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC;IAC7B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,cAAc,GAAG,WAAW,CAChC,CAAC,OAAyB,EAAE,EAAE;QAC5B,IAAI,WAAW,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YACjC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;YACxC,MAAM,cAAc,GAAG,WAAW,CAAC,OAAO,CAAC;YAC3C,MAAM;iBACH,KAAK,EAAE;iBACP,KAAK,EAAE;iBACP,WAAW,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;iBAC/C,GAAG,EAAE,CAAC;YACT,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACvB,0BAA0B,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACvB,0BAA0B,CAAC,MAAM,CAAC,CAAC;QACrC,CAAC;QACD,KAAK,EAAE,CAAC;IACV,CAAC,EACD,CAAC,KAAK,EAAE,MAAM,CAAC,CAChB,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,aAAa,GAAG,CAAC,KAAoB,EAAE,EAAE;YAC7C,IAAI,CAAC,MAAM;gBAAE,OAAO;YACpB,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE,CAAC;gBAC9B,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO;gBAC1C,gBAAgB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;YACrE,CAAC;iBAAM,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;gBACnC,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO;gBAC1C,gBAAgB,CACd,CAAC,KAAK,EAAE,EAAE,CACR,CAAC,KAAK,GAAG,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAClE,CAAC;YACJ,CAAC;iBAAM,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;gBACjC,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM,OAAO,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;gBAChD,IAAI,OAAO;oBAAE,cAAc,CAAC,OAAO,CAAC,CAAC;YACvC,CAAC;iBAAM,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;gBAClC,KAAK,EAAE,CAAC;YACV,CAAC;QACH,CAAC,CAAC;QACF,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;QAC1D,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;IAC5E,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;IAErE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;QAC7B,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC;QACrC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI;YAAE,OAAO;QAE3B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;QAC/B,MAAM,UAAU,GAAG,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC;QAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC;QAClC,MAAM,aAAa,GAAG,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC;QAErD,IAAI,OAAO,GAAG,UAAU,EAAE,CAAC;YACzB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;QAC3B,CAAC;aAAM,IAAI,UAAU,GAAG,aAAa,EAAE,CAAC;YACtC,IAAI,CAAC,SAAS,GAAG,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC;QAClD,CAAC;IACH,CAAC,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;IAErD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,iBAAiB,GAAG,GAAG,EAAE;YAC7B,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;YACzB,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC;YACjC,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,CACtC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,EACtB,IAAI,EACJ,IAAI,CACL,CAAC;YACF,MAAM,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;YAC1D,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,IAAI,MAAM;oBAAE,KAAK,EAAE,CAAC;gBACpB,OAAO;YACT,CAAC;YAED,MAAM,UAAU,GAAG,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YAC/C,WAAW,CAAC,OAAO,GAAG,UAAU,CAAC;YACjC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;YACxB,gBAAgB,CAAC,CAAC,CAAC,CAAC;YACpB,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,UAAU,GAAG,GAAG,CAAC;YACvB,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;YACtD,MAAM,MAAM,GAAG,UAAU,GAAG,UAAU,IAAI,MAAM,CAAC,GAAG,GAAG,UAAU,CAAC;YAClE,WAAW,CAAC;gBACV,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;gBAC5C,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC;gBACpD,MAAM;aACP,CAAC,CAAC;YACH,SAAS,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC,CAAC;QAEF,MAAM,CAAC,EAAE,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;QAC5C,OAAO,GAAG,EAAE;YACV,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;QAC/C,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAE5B,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEvE,OAAO,CACL,eACE,GAAG,EAAE,OAAO,EACZ,SAAS,EAAC,uBAAuB,EACjC,KAAK,EACH;YACE,QAAQ,EAAE,OAAO;YACjB,GAAG,CAAC,QAAQ,CAAC,MAAM;gBACjB,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,WAAW,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAC,EAAE;gBACnD,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC;YAC1B,IAAI,EAAE,QAAQ,CAAC,IAAI;SACH,4CAIpB,cAAK,SAAS,EAAC,0BAA0B,uBAAa,EACrD,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CACxC,kBAEE,GAAG,EAAE,KAAK,KAAK,aAAa,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,EAC1D,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,EAAE,CACX,uBAAuB,EACvB,KAAK,KAAK,aAAa,IAAI,+BAA+B,CAC3D,EACD,YAAY,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAC3C,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAC9C,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,aAEtC,eAAM,SAAS,EAAC,uBAAuB,YAAE,OAAO,CAAC,IAAI,GAAQ,EAC7D,gBAAM,SAAS,EAAC,uBAAuB,aACrC,eAAM,SAAS,EAAC,wBAAwB,YAAE,OAAO,CAAC,KAAK,GAAQ,EAC/D,eAAM,SAAS,EAAC,8BAA8B,YAC3C,OAAO,CAAC,WAAW,GACf,IACF,KAjBF,OAAO,CAAC,KAAK,CAkBX,CACV,CAAC,IACE,CACP,CAAC;AACJ,CAAC"}
@@ -1,5 +1,8 @@
1
+ // @vitest-environment happy-dom
2
+ import { Editor } from "@tiptap/core";
3
+ import StarterKit from "@tiptap/starter-kit";
1
4
  import { describe, expect, it } from "vitest";
2
- import { DEFAULT_SLASH_COMMANDS, filterSlashCommandItems, } from "./SlashCommandMenu.js";
5
+ import { DEFAULT_SLASH_COMMANDS, filterSlashCommandItems, focusEditorInInsertedBlock, } from "./SlashCommandMenu.js";
3
6
  describe("filterSlashCommandItems", () => {
4
7
  it("hides commands whose editor extensions are disabled", () => {
5
8
  const commands = filterSlashCommandItems(DEFAULT_SLASH_COMMANDS, {
@@ -17,4 +20,48 @@ describe("filterSlashCommandItems", () => {
17
20
  expect(commands.map((command) => command.title)).not.toContain("To-do list");
18
21
  });
19
22
  });
23
+ describe("focusEditorInInsertedBlock", () => {
24
+ it.each([
25
+ ["Text", "paragraph", "paragraph"],
26
+ ["Heading 1", "heading", "heading"],
27
+ ["Bulleted list", "bulletList", "paragraph"],
28
+ ["Numbered list", "orderedList", "paragraph"],
29
+ ["Quote", "blockquote", "paragraph"],
30
+ ["Code block", "codeBlock", "codeBlock"],
31
+ ])("leaves the caret inside the %s block instead of after it", (title, activeNode, parentNode) => {
32
+ const element = document.createElement("div");
33
+ document.body.appendChild(element);
34
+ const editor = new Editor({
35
+ element,
36
+ extensions: [StarterKit],
37
+ content: {
38
+ type: "doc",
39
+ content: [
40
+ {
41
+ type: "paragraph",
42
+ content: [{ type: "text", text: "/code" }],
43
+ },
44
+ ],
45
+ },
46
+ });
47
+ try {
48
+ const slashRange = { from: 1, to: 6 };
49
+ editor.commands.setTextSelection(slashRange);
50
+ editor.chain().focus().deleteRange(slashRange).run();
51
+ const command = DEFAULT_SLASH_COMMANDS.find((item) => item.title === title);
52
+ if (!command)
53
+ throw new Error(`Missing slash command: ${title}`);
54
+ command.action(editor);
55
+ focusEditorInInsertedBlock(editor, slashRange.from);
56
+ expect(editor.isActive(activeNode)).toBe(true);
57
+ expect(editor.state.selection.$from.parent.type.name).toBe(parentNode);
58
+ expect(editor.state.selection.from).toBeLessThanOrEqual(editor.state.selection.$from.end());
59
+ expect(editor.isFocused).toBe(true);
60
+ }
61
+ finally {
62
+ editor.destroy();
63
+ element.remove();
64
+ }
65
+ });
66
+ });
20
67
  //# sourceMappingURL=SlashCommandMenu.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SlashCommandMenu.spec.js","sourceRoot":"","sources":["../../src/editor/SlashCommandMenu.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EACL,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAE/B,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,QAAQ,GAAG,uBAAuB,CAAC,sBAAsB,EAAE;YAC/D,SAAS,EAAE,KAAK;YAChB,MAAM,EAAE,KAAK;YACb,KAAK,EAAE,KAAK;SACb,CAAC,CAAC;QAEH,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAC1D,MAAM,CAAC,eAAe,CAAC,CAAC,YAAY,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAC9D,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,QAAQ,GAAG,uBAAuB,CAAC,sBAAsB,EAAE;YAC/D,KAAK,EAAE,KAAK;SACb,CAAC,CAAC;QAEH,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CACtD,MAAM,CAAC,eAAe,CAAC,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAChD,CAAC;QACF,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAC5D,YAAY,CACb,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"SlashCommandMenu.spec.js","sourceRoot":"","sources":["../../src/editor/SlashCommandMenu.spec.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  export { createSharedEditorExtensions, MARKDOWN_DIALECT_CONFIG, type RichMarkdownDialect, type RichMarkdownEditorPreset, type RichMarkdownCollabUser, type SharedEditorCollab, type SharedEditorFeatures, type CreateSharedEditorExtensionsOptions, } from "./extensions.js";
2
2
  export { useCollabReconcile, getEditorMarkdown, RICH_MARKDOWN_PROGRAMMATIC_TRANSACTION, type UseCollabReconcileOptions, type UseCollabReconcileResult, } from "./useCollabReconcile.js";
3
3
  export { applyDocSurgically, defaultParseValue, diffTopLevel, type TopLevelDiff, } from "./surgical-apply.js";
4
- export { SlashCommandMenu, DEFAULT_SLASH_COMMANDS, createImageSlashCommand, filterSlashCommandItems, type SlashCommandItem, type SlashCommandMenuProps, type SlashCommandFeatureFlags, } from "./SlashCommandMenu.js";
4
+ export { SlashCommandMenu, DEFAULT_SLASH_COMMANDS, createImageSlashCommand, filterSlashCommandItems, focusEditorInInsertedBlock, type SlashCommandItem, type SlashCommandMenuProps, type SlashCommandFeatureFlags, } from "./SlashCommandMenu.js";
5
5
  export { SharedImage, createImageExtension, pickAndInsertImage, type ImageUploadFn, type SharedImageOptions, } from "./ImageExtension.js";
6
6
  export { BubbleToolbar, buildDefaultBubbleItems, type BubbleToolbarItem, type BubbleToolbarProps, } from "./BubbleToolbar.js";
7
7
  export { SharedRichEditor, type SharedRichEditorProps, } from "./SharedRichEditor.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/editor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,uBAAuB,EACvB,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,mCAAmC,GACzC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,sCAAsC,EACtC,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,GAC9B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,KAAK,YAAY,GAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,GAC9B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,kBAAkB,EAClB,KAAK,aAAa,EAClB,KAAK,kBAAkB,GACxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,aAAa,EACb,uBAAuB,EACvB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,gBAAgB,EAChB,KAAK,qBAAqB,GAC3B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,0BAA0B,GAChC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,kBAAkB,EAClB,4BAA4B,EAC5B,KAAK,uBAAuB,EAC5B,KAAK,mCAAmC,GACzC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EACL,UAAU,EACV,oCAAoC,EACpC,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,GACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,yBAAyB,EACzB,qBAAqB,EACrB,oBAAoB,EACpB,KAAK,8BAA8B,EACnC,KAAK,2BAA2B,EAChC,KAAK,sBAAsB,EAC3B,KAAK,+BAA+B,EACpC,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,GAC/B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,4BAA4B,EAC5B,gCAAgC,EAChC,+BAA+B,EAC/B,KAAK,mCAAmC,EACxC,KAAK,0BAA0B,EAC/B,KAAK,sBAAsB,GAC5B,MAAM,4BAA4B,CAAC;AACpC,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/editor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,uBAAuB,EACvB,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,mCAAmC,GACzC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,sCAAsC,EACtC,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,GAC9B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,KAAK,YAAY,GAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,0BAA0B,EAC1B,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,GAC9B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,kBAAkB,EAClB,KAAK,aAAa,EAClB,KAAK,kBAAkB,GACxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,aAAa,EACb,uBAAuB,EACvB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,gBAAgB,EAChB,KAAK,qBAAqB,GAC3B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,0BAA0B,GAChC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,kBAAkB,EAClB,4BAA4B,EAC5B,KAAK,uBAAuB,EAC5B,KAAK,mCAAmC,GACzC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EACL,UAAU,EACV,oCAAoC,EACpC,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,GACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,yBAAyB,EACzB,qBAAqB,EACrB,oBAAoB,EACpB,KAAK,8BAA8B,EACnC,KAAK,2BAA2B,EAChC,KAAK,sBAAsB,EAC3B,KAAK,+BAA+B,EACpC,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,GAC/B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,4BAA4B,EAC5B,gCAAgC,EAChC,+BAA+B,EAC/B,KAAK,mCAAmC,EACxC,KAAK,0BAA0B,EAC/B,KAAK,sBAAsB,GAC5B,MAAM,4BAA4B,CAAC;AACpC,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC"}
@@ -1,7 +1,7 @@
1
1
  export { createSharedEditorExtensions, MARKDOWN_DIALECT_CONFIG, } from "./extensions.js";
2
2
  export { useCollabReconcile, getEditorMarkdown, RICH_MARKDOWN_PROGRAMMATIC_TRANSACTION, } from "./useCollabReconcile.js";
3
3
  export { applyDocSurgically, defaultParseValue, diffTopLevel, } from "./surgical-apply.js";
4
- export { SlashCommandMenu, DEFAULT_SLASH_COMMANDS, createImageSlashCommand, filterSlashCommandItems, } from "./SlashCommandMenu.js";
4
+ export { SlashCommandMenu, DEFAULT_SLASH_COMMANDS, createImageSlashCommand, filterSlashCommandItems, focusEditorInInsertedBlock, } from "./SlashCommandMenu.js";
5
5
  export { SharedImage, createImageExtension, pickAndInsertImage, } from "./ImageExtension.js";
6
6
  export { BubbleToolbar, buildDefaultBubbleItems, } from "./BubbleToolbar.js";
7
7
  export { SharedRichEditor, } from "./SharedRichEditor.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/editor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,uBAAuB,GAOxB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,sCAAsC,GAGvC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,GAEb,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,GAIxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,kBAAkB,GAGnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,aAAa,EACb,uBAAuB,GAGxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,gBAAgB,GAEjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,mBAAmB,EACnB,sBAAsB,GAIvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,kBAAkB,EAClB,4BAA4B,GAG7B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EACL,UAAU,EACV,oCAAoC,GAIrC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,yBAAyB,EACzB,qBAAqB,EACrB,oBAAoB,GASrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,4BAA4B,EAC5B,gCAAgC,EAChC,+BAA+B,GAIhC,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/editor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,uBAAuB,GAOxB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,sCAAsC,GAGvC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,GAEb,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,0BAA0B,GAI3B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,kBAAkB,GAGnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,aAAa,EACb,uBAAuB,GAGxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,gBAAgB,GAEjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,mBAAmB,EACnB,sBAAsB,GAIvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,kBAAkB,EAClB,4BAA4B,GAG7B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EACL,UAAU,EACV,oCAAoC,GAIrC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,yBAAyB,EACzB,qBAAqB,EACrB,oBAAoB,GASrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,4BAA4B,EAC5B,gCAAgC,EAChC,+BAA+B,GAIhC,MAAM,4BAA4B,CAAC"}
package/dist/editor.css CHANGED
@@ -8,6 +8,81 @@
8
8
  cursor: default;
9
9
  }
10
10
 
11
+ /* Shared Notion-style block controls. Apps can override the color tokens, but
12
+ every SharedRichEditor gets a usable grip/menu without app-local CSS. */
13
+ .drag-handle {
14
+ position: absolute;
15
+ display: none;
16
+ width: 24px;
17
+ height: 24px;
18
+ align-items: center;
19
+ justify-content: center;
20
+ border-radius: 4px;
21
+ color: hsl(var(--muted-foreground) / 0.45);
22
+ cursor: grab;
23
+ user-select: none;
24
+ touch-action: none;
25
+ z-index: 10;
26
+ }
27
+
28
+ .drag-handle:hover,
29
+ .drag-handle:focus-visible {
30
+ background: hsl(var(--muted));
31
+ color: hsl(var(--muted-foreground));
32
+ outline: none;
33
+ }
34
+
35
+ .drag-handle:active {
36
+ cursor: grabbing;
37
+ }
38
+
39
+ .notion-editor-is-dragging,
40
+ .notion-editor-is-dragging * {
41
+ cursor: grabbing !important;
42
+ }
43
+
44
+ .notion-block--dragging {
45
+ opacity: 0.35;
46
+ transition: opacity 0.12s ease;
47
+ }
48
+
49
+ .notion-drag-preview {
50
+ position: fixed;
51
+ top: 0;
52
+ left: 0;
53
+ z-index: 9999;
54
+ max-width: min(720px, calc(100vw - 48px));
55
+ overflow: hidden;
56
+ background: transparent !important;
57
+ box-shadow: none;
58
+ opacity: 0.55;
59
+ pointer-events: none;
60
+ will-change: transform;
61
+ }
62
+
63
+ .notion-drag-preview > * {
64
+ margin: 0 !important;
65
+ max-height: 180px;
66
+ overflow: hidden;
67
+ }
68
+
69
+ .notion-drag-preview,
70
+ .notion-drag-preview * {
71
+ background: transparent !important;
72
+ background-color: transparent !important;
73
+ }
74
+
75
+ .notion-drop-indicator {
76
+ position: absolute;
77
+ z-index: 60;
78
+ height: 3px;
79
+ border-radius: 999px;
80
+ background: hsl(var(--ring));
81
+ box-shadow: 0 0 0 1px hsl(var(--background));
82
+ pointer-events: none;
83
+ transform: translateY(-1px);
84
+ }
85
+
11
86
  .an-rich-md-loading {
12
87
  min-height: 7rem;
13
88
  }
@@ -1 +1 @@
1
- {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../src/ui/button.tsx"],"names":[],"mappings":"AACA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,KAAK,EACV,oBAAoB,EACpB,kBAAkB,EACnB,MAAM,2BAA2B,CAAC;AAInC,QAAA,MAAM,cAAc;;;8EA2BnB,CAAC;AAEF,MAAM,WAAW,WACf,SACE,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAC7C,YAAY,CAAC,OAAO,cAAc,CAAC;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,iFAAiF;IACjF,QAAQ,CAAC,EAAE,oBAAoB,CAAC;CACjC;AAED,QAAA,MAAM,UAAU,uFAsBf,CAAC;AAKF,QAAA,MAAM,MAAM,uFAgFX,CAAC;AAGF,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../src/ui/button.tsx"],"names":[],"mappings":"AACA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,KAAK,EACV,oBAAoB,EACpB,kBAAkB,EACnB,MAAM,2BAA2B,CAAC;AAInC,QAAA,MAAM,cAAc;;;8EA2BnB,CAAC;AAEF,MAAM,WAAW,WACf,SACE,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAC7C,YAAY,CAAC,OAAO,cAAc,CAAC;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,iFAAiF;IACjF,QAAQ,CAAC,EAAE,oBAAoB,CAAC;CACjC;AAED,QAAA,MAAM,UAAU,uFAsBf,CAAC;AAKF,QAAA,MAAM,MAAM,uFAiFX,CAAC;AAGF,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC"}
package/dist/ui/button.js CHANGED
@@ -2,7 +2,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { Slot } from "@radix-ui/react-slot";
3
3
  import { cva } from "class-variance-authority";
4
4
  import * as React from "react";
5
- import { LegacyButtonRenderContext, useDesignSystemComponent, } from "../design-system/context.js";
5
+ import { LegacyButtonRenderContext, useDesignSystem, } from "../design-system/context.js";
6
6
  import { DesignSystemErrorBoundary } from "../design-system/error-boundary.js";
7
7
  import { useToolkitComponent } from "../provider.js";
8
8
  import { cn } from "../utils.js";
@@ -35,7 +35,7 @@ const ButtonBase = React.forwardRef(({ className, variant, size, asChild = false
35
35
  ButtonBase.displayName = "ButtonBase";
36
36
  const ButtonOverrideRenderContext = React.createContext(false);
37
37
  const Button = React.forwardRef(({ variant, size, asChild = false, intent, emphasis, ...props }, ref) => {
38
- const DesignSystemActionButton = useDesignSystemComponent("ActionButton");
38
+ const DesignSystemActionButton = useDesignSystem()?.components?.ActionButton;
39
39
  const Override = useToolkitComponent("Button");
40
40
  const isRenderingOverride = React.useContext(ButtonOverrideRenderContext);
41
41
  const isRenderingLegacyButton = React.useContext(LegacyButtonRenderContext);
@@ -1 +1 @@
1
- {"version":3,"file":"button.js","sourceRoot":"","sources":["../../src/ui/button.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"button.js","sourceRoot":"","sources":["../../src/ui/button.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-native/toolkit",
3
- "version": "0.10.2",
3
+ "version": "0.10.4",
4
4
  "description": "Reusable app-building UI and helpers for Agent-Native apps.",
5
5
  "homepage": "https://github.com/BuilderIO/agent-native#readme",
6
6
  "bugs": {
@@ -1,11 +1,17 @@
1
1
  // @vitest-environment happy-dom
2
2
 
3
- import { act, type ComponentProps } from "react";
3
+ import { act, forwardRef, type ComponentProps } from "react";
4
4
  import { createRoot, type Root } from "react-dom/client";
5
5
  import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
6
6
 
7
7
  import { ToolkitProvider } from "../provider.js";
8
8
  import { Button } from "../ui/button.js";
9
+ import {
10
+ DropdownMenu,
11
+ DropdownMenuContent,
12
+ DropdownMenuItem,
13
+ DropdownMenuTrigger,
14
+ } from "../ui/dropdown-menu.js";
9
15
  import { ActionButton } from "./components.js";
10
16
  import { defaultDesignSystemComponents } from "./default-adapter.js";
11
17
  import { defineDesignSystem } from "./definition.js";
@@ -157,6 +163,98 @@ describe("design-system contract", () => {
157
163
  );
158
164
  });
159
165
 
166
+ it.each(["pointer", "Enter", "Space", "ArrowDown"])(
167
+ "preserves Radix menu trigger behavior through a legacy Button override with %s activation",
168
+ async (activation) => {
169
+ const onOpenChange = vi.fn();
170
+ let buttonRef: HTMLButtonElement | null = null;
171
+ const LegacyButton = forwardRef<
172
+ HTMLButtonElement,
173
+ ComponentProps<typeof Button>
174
+ >(
175
+ (
176
+ {
177
+ asChild: _asChild,
178
+ emphasis: _emphasis,
179
+ intent: _intent,
180
+ size: _size,
181
+ variant: _variant,
182
+ ...props
183
+ },
184
+ ref,
185
+ ) => <button {...props} ref={ref} data-adapter="legacy" />,
186
+ );
187
+
188
+ await act(async () => {
189
+ root.render(
190
+ <ToolkitProvider
191
+ components={{ Button: LegacyButton }}
192
+ designSystem={{}}
193
+ >
194
+ <DropdownMenu onOpenChange={onOpenChange}>
195
+ <DropdownMenuTrigger asChild>
196
+ <Button
197
+ ref={(node) => {
198
+ buttonRef = node;
199
+ }}
200
+ >
201
+ Open menu
202
+ </Button>
203
+ </DropdownMenuTrigger>
204
+ <DropdownMenuContent>
205
+ <DropdownMenuItem>First item</DropdownMenuItem>
206
+ </DropdownMenuContent>
207
+ </DropdownMenu>
208
+ </ToolkitProvider>,
209
+ );
210
+ });
211
+
212
+ const trigger = container.querySelector<HTMLButtonElement>("button");
213
+ expect(trigger).not.toBeNull();
214
+ expect(buttonRef).toBe(trigger);
215
+ expect(trigger?.getAttribute("aria-haspopup")).toBe("menu");
216
+ expect(trigger?.getAttribute("aria-expanded")).toBe("false");
217
+ expect(trigger?.dataset.state).toBe("closed");
218
+
219
+ await act(async () => {
220
+ trigger?.focus();
221
+ if (activation === "pointer") {
222
+ trigger?.dispatchEvent(
223
+ new PointerEvent("pointerdown", {
224
+ bubbles: true,
225
+ button: 0,
226
+ pointerType: "mouse",
227
+ }),
228
+ );
229
+ } else {
230
+ const key = activation === "Space" ? " " : activation;
231
+ trigger?.dispatchEvent(
232
+ new KeyboardEvent("keydown", { bubbles: true, key }),
233
+ );
234
+ }
235
+ await Promise.resolve();
236
+ });
237
+
238
+ expect(onOpenChange).toHaveBeenCalledTimes(1);
239
+ expect(onOpenChange).toHaveBeenLastCalledWith(true);
240
+ expect(trigger?.getAttribute("aria-expanded")).toBe("true");
241
+ expect(trigger?.dataset.state).toBe("open");
242
+ expect(document.querySelector("[role=menu]")).not.toBeNull();
243
+
244
+ await act(async () => {
245
+ document.activeElement?.dispatchEvent(
246
+ new KeyboardEvent("keydown", { bubbles: true, key: "Escape" }),
247
+ );
248
+ await Promise.resolve();
249
+ });
250
+
251
+ expect(onOpenChange).toHaveBeenCalledTimes(2);
252
+ expect(onOpenChange).toHaveBeenLastCalledWith(false);
253
+ expect(trigger?.getAttribute("aria-expanded")).toBe("false");
254
+ expect(trigger?.dataset.state).toBe("closed");
255
+ },
256
+ );
257
+
160
258
  it("isolates a broken customer component and renders the default control", () => {
161
259
  vi.spyOn(console, "error").mockImplementation(() => {});
162
260
  const BrokenActionButton = () => {
@@ -0,0 +1,82 @@
1
+ // @vitest-environment happy-dom
2
+
3
+ import { act } from "react";
4
+ import { createRoot, type Root } from "react-dom/client";
5
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
6
+
7
+ import { SharedRichEditor } from "./SharedRichEditor.js";
8
+
9
+ describe("SharedRichEditor block controls", () => {
10
+ let container: HTMLDivElement;
11
+ let root: Root;
12
+
13
+ beforeEach(() => {
14
+ vi.stubGlobal("IS_REACT_ACT_ENVIRONMENT", true);
15
+ container = document.createElement("div");
16
+ document.body.appendChild(container);
17
+ root = createRoot(container);
18
+ });
19
+
20
+ afterEach(() => {
21
+ act(() => root.unmount());
22
+ container.remove();
23
+ vi.restoreAllMocks();
24
+ vi.unstubAllGlobals();
25
+ });
26
+
27
+ it("mounts the shared Notion-style block grip by default", async () => {
28
+ await act(async () => {
29
+ root.render(
30
+ <SharedRichEditor
31
+ value="<p>First</p><p>Second</p>"
32
+ onChange={() => undefined}
33
+ />,
34
+ );
35
+ await new Promise((resolve) => setTimeout(resolve, 10));
36
+ });
37
+
38
+ const prose = container.querySelector<HTMLElement>(".an-rich-md-prose");
39
+ const firstBlock = prose?.firstElementChild;
40
+ for (const [element, rect] of [
41
+ [prose, { left: 0, top: 0, right: 640, bottom: 100 }],
42
+ [firstBlock, { left: 0, top: 0, right: 640, bottom: 24 }],
43
+ ] as const) {
44
+ if (!element) continue;
45
+ Object.defineProperty(element, "getBoundingClientRect", {
46
+ configurable: true,
47
+ value: () => ({
48
+ ...rect,
49
+ x: rect.left,
50
+ y: rect.top,
51
+ width: rect.right - rect.left,
52
+ height: rect.bottom - rect.top,
53
+ toJSON: () => ({}),
54
+ }),
55
+ });
56
+ }
57
+ document.dispatchEvent(
58
+ new MouseEvent("mousemove", {
59
+ bubbles: true,
60
+ clientX: 8,
61
+ clientY: 8,
62
+ }),
63
+ );
64
+ expect(container.querySelector(".an-rich-md-wrapper")).not.toBeNull();
65
+ expect(container.querySelector(".drag-handle")).not.toBeNull();
66
+ });
67
+
68
+ it("allows hosts to opt out when they own block controls", async () => {
69
+ await act(async () => {
70
+ root.render(
71
+ <SharedRichEditor
72
+ value="First"
73
+ onChange={() => undefined}
74
+ dragHandle={false}
75
+ />,
76
+ );
77
+ await new Promise((resolve) => setTimeout(resolve, 10));
78
+ });
79
+
80
+ expect(container.querySelector(".drag-handle")).toBeNull();
81
+ });
82
+ });
@@ -6,6 +6,7 @@ import type { Doc as YDoc } from "yjs";
6
6
 
7
7
  import { cn } from "../utils.js";
8
8
  import { BubbleToolbar, type BubbleToolbarItem } from "./BubbleToolbar.js";
9
+ import { DragHandle } from "./DragHandle.js";
9
10
  import {
10
11
  createSharedEditorExtensions,
11
12
  type RichMarkdownDialect,
@@ -37,6 +38,8 @@ export interface SharedRichEditorProps {
37
38
  preset?: RichMarkdownEditorPreset;
38
39
  /** Toggle individual base extensions (tables/tasks/link/codeBlock/image). */
39
40
  features?: SharedEditorFeatures;
41
+ /** Show the Notion-style block grip and action menu. Defaults to `true`. */
42
+ dragHandle?: boolean;
40
43
  /**
41
44
  * Injectable image uploader for the shared image block. Used only when
42
45
  * `features.image` is on. Pass `uploadEditorImage` (the framework
@@ -141,6 +144,7 @@ export function SharedRichEditor({
141
144
  dialect = "gfm",
142
145
  preset = "plan",
143
146
  features,
147
+ dragHandle = true,
144
148
  onImageUpload = null,
145
149
  extraExtensions,
146
150
  placeholder = "Type '/' for commands...",
@@ -170,6 +174,23 @@ export function SharedRichEditor({
170
174
  onChangeRef.current = onChange;
171
175
  onBlurRef.current = onBlur;
172
176
 
177
+ const effectiveExtraExtensions = useMemo(() => {
178
+ const extras = extraExtensions ?? [];
179
+ if (
180
+ !dragHandle ||
181
+ extras.some((extension) => extension.name === "dragHandle")
182
+ ) {
183
+ return extras;
184
+ }
185
+
186
+ return [
187
+ DragHandle.configure({
188
+ wrapperSelector: ".an-rich-md-wrapper",
189
+ }),
190
+ ...extras,
191
+ ];
192
+ }, [dragHandle, extraExtensions]);
193
+
173
194
  const extensions = useMemo(
174
195
  () =>
175
196
  createSharedEditorExtensions({
@@ -177,7 +198,7 @@ export function SharedRichEditor({
177
198
  preset,
178
199
  placeholder,
179
200
  features,
180
- extraExtensions,
201
+ extraExtensions: effectiveExtraExtensions,
181
202
  onImageUpload,
182
203
  collab: ydoc ? { ydoc, awareness, user } : null,
183
204
  disableHistory,
@@ -192,7 +213,7 @@ export function SharedRichEditor({
192
213
  placeholder,
193
214
  preset,
194
215
  features,
195
- extraExtensions,
216
+ effectiveExtraExtensions,
196
217
  onImageUpload,
197
218
  ydoc,
198
219
  awareness,
@@ -1,8 +1,13 @@
1
+ // @vitest-environment happy-dom
2
+
3
+ import { Editor } from "@tiptap/core";
4
+ import StarterKit from "@tiptap/starter-kit";
1
5
  import { describe, expect, it } from "vitest";
2
6
 
3
7
  import {
4
8
  DEFAULT_SLASH_COMMANDS,
5
9
  filterSlashCommandItems,
10
+ focusEditorInInsertedBlock,
6
11
  } from "./SlashCommandMenu.js";
7
12
 
8
13
  describe("filterSlashCommandItems", () => {
@@ -31,3 +36,55 @@ describe("filterSlashCommandItems", () => {
31
36
  );
32
37
  });
33
38
  });
39
+
40
+ describe("focusEditorInInsertedBlock", () => {
41
+ it.each([
42
+ ["Text", "paragraph", "paragraph"],
43
+ ["Heading 1", "heading", "heading"],
44
+ ["Bulleted list", "bulletList", "paragraph"],
45
+ ["Numbered list", "orderedList", "paragraph"],
46
+ ["Quote", "blockquote", "paragraph"],
47
+ ["Code block", "codeBlock", "codeBlock"],
48
+ ])(
49
+ "leaves the caret inside the %s block instead of after it",
50
+ (title, activeNode, parentNode) => {
51
+ const element = document.createElement("div");
52
+ document.body.appendChild(element);
53
+ const editor = new Editor({
54
+ element,
55
+ extensions: [StarterKit],
56
+ content: {
57
+ type: "doc",
58
+ content: [
59
+ {
60
+ type: "paragraph",
61
+ content: [{ type: "text", text: "/code" }],
62
+ },
63
+ ],
64
+ },
65
+ });
66
+
67
+ try {
68
+ const slashRange = { from: 1, to: 6 };
69
+ editor.commands.setTextSelection(slashRange);
70
+ editor.chain().focus().deleteRange(slashRange).run();
71
+ const command = DEFAULT_SLASH_COMMANDS.find(
72
+ (item) => item.title === title,
73
+ );
74
+ if (!command) throw new Error(`Missing slash command: ${title}`);
75
+ command.action(editor);
76
+ focusEditorInInsertedBlock(editor, slashRange.from);
77
+
78
+ expect(editor.isActive(activeNode)).toBe(true);
79
+ expect(editor.state.selection.$from.parent.type.name).toBe(parentNode);
80
+ expect(editor.state.selection.from).toBeLessThanOrEqual(
81
+ editor.state.selection.$from.end(),
82
+ );
83
+ expect(editor.isFocused).toBe(true);
84
+ } finally {
85
+ editor.destroy();
86
+ element.remove();
87
+ }
88
+ },
89
+ );
90
+ });
@@ -1,3 +1,4 @@
1
+ import { TextSelection } from "@tiptap/pm/state";
1
2
  import type { Editor } from "@tiptap/react";
2
3
  import {
3
4
  useCallback,
@@ -27,6 +28,66 @@ export interface SlashCommandItem {
27
28
  action: (editor: Editor) => void;
28
29
  }
29
30
 
31
+ /**
32
+ * Put the caret inside the block a slash command just created or transformed.
33
+ *
34
+ * Tiptap commands usually preserve a text selection, but commands that replace
35
+ * the current paragraph (notably code blocks and horizontal rules) can leave a
36
+ * node selection or a caret at the following block. Resolving from the slash
37
+ * range keeps the behavior consistent for built-in and app-provided block
38
+ * commands: after selecting a block, typing starts in that block immediately.
39
+ */
40
+ export function focusEditorInInsertedBlock(
41
+ editor: Editor,
42
+ anchorPosition?: number,
43
+ ): void {
44
+ if (editor.isDestroyed) return;
45
+
46
+ const { state } = editor;
47
+ const anchor = Math.max(
48
+ 1,
49
+ Math.min(anchorPosition ?? state.selection.from, state.doc.content.size),
50
+ );
51
+ let containingTextblock: number | null = null;
52
+ let nextTextblock: number | null = null;
53
+ let previousTextblock: number | null = null;
54
+
55
+ state.doc.nodesBetween(0, state.doc.content.size, (node, pos) => {
56
+ if (!node.isTextblock) return;
57
+
58
+ const start = pos + 1;
59
+ const end = pos + node.nodeSize - 1;
60
+ if (anchor >= start && anchor <= end) {
61
+ containingTextblock ??= anchor;
62
+ return;
63
+ }
64
+ if (start > anchor) {
65
+ if (nextTextblock === null || start < nextTextblock) {
66
+ nextTextblock = start;
67
+ }
68
+ return;
69
+ }
70
+ if (previousTextblock === null || start > previousTextblock) {
71
+ previousTextblock = Math.min(anchor, end);
72
+ }
73
+ });
74
+
75
+ const target = containingTextblock ?? nextTextblock ?? previousTextblock;
76
+ if (target === null) {
77
+ editor.commands.focus();
78
+ return;
79
+ }
80
+
81
+ const transaction = state.tr.setSelection(
82
+ TextSelection.create(
83
+ state.doc,
84
+ Math.max(1, Math.min(target, state.doc.content.size)),
85
+ ),
86
+ );
87
+ editor.view.dispatch(transaction.scrollIntoView());
88
+ editor.view.focus();
89
+ }
90
+
30
91
  export interface SlashCommandFeatureFlags {
31
92
  tables?: boolean;
32
93
  tasks?: boolean;
@@ -192,13 +253,18 @@ export function SlashCommandMenu({
192
253
  (command: SlashCommandItem) => {
193
254
  if (slashPosRef.current !== null) {
194
255
  const { from } = editor.state.selection;
256
+ const anchorPosition = slashPosRef.current;
195
257
  editor
196
258
  .chain()
197
259
  .focus()
198
- .deleteRange({ from: slashPosRef.current, to: from })
260
+ .deleteRange({ from: anchorPosition, to: from })
199
261
  .run();
262
+ command.action(editor);
263
+ focusEditorInInsertedBlock(editor, anchorPosition);
264
+ } else {
265
+ command.action(editor);
266
+ focusEditorInInsertedBlock(editor);
200
267
  }
201
- command.action(editor);
202
268
  close();
203
269
  },
204
270
  [close, editor],
@@ -26,6 +26,7 @@ export {
26
26
  DEFAULT_SLASH_COMMANDS,
27
27
  createImageSlashCommand,
28
28
  filterSlashCommandItems,
29
+ focusEditorInInsertedBlock,
29
30
  type SlashCommandItem,
30
31
  type SlashCommandMenuProps,
31
32
  type SlashCommandFeatureFlags,
package/src/editor.css CHANGED
@@ -8,6 +8,81 @@
8
8
  cursor: default;
9
9
  }
10
10
 
11
+ /* Shared Notion-style block controls. Apps can override the color tokens, but
12
+ every SharedRichEditor gets a usable grip/menu without app-local CSS. */
13
+ .drag-handle {
14
+ position: absolute;
15
+ display: none;
16
+ width: 24px;
17
+ height: 24px;
18
+ align-items: center;
19
+ justify-content: center;
20
+ border-radius: 4px;
21
+ color: hsl(var(--muted-foreground) / 0.45);
22
+ cursor: grab;
23
+ user-select: none;
24
+ touch-action: none;
25
+ z-index: 10;
26
+ }
27
+
28
+ .drag-handle:hover,
29
+ .drag-handle:focus-visible {
30
+ background: hsl(var(--muted));
31
+ color: hsl(var(--muted-foreground));
32
+ outline: none;
33
+ }
34
+
35
+ .drag-handle:active {
36
+ cursor: grabbing;
37
+ }
38
+
39
+ .notion-editor-is-dragging,
40
+ .notion-editor-is-dragging * {
41
+ cursor: grabbing !important;
42
+ }
43
+
44
+ .notion-block--dragging {
45
+ opacity: 0.35;
46
+ transition: opacity 0.12s ease;
47
+ }
48
+
49
+ .notion-drag-preview {
50
+ position: fixed;
51
+ top: 0;
52
+ left: 0;
53
+ z-index: 9999;
54
+ max-width: min(720px, calc(100vw - 48px));
55
+ overflow: hidden;
56
+ background: transparent !important;
57
+ box-shadow: none;
58
+ opacity: 0.55;
59
+ pointer-events: none;
60
+ will-change: transform;
61
+ }
62
+
63
+ .notion-drag-preview > * {
64
+ margin: 0 !important;
65
+ max-height: 180px;
66
+ overflow: hidden;
67
+ }
68
+
69
+ .notion-drag-preview,
70
+ .notion-drag-preview * {
71
+ background: transparent !important;
72
+ background-color: transparent !important;
73
+ }
74
+
75
+ .notion-drop-indicator {
76
+ position: absolute;
77
+ z-index: 60;
78
+ height: 3px;
79
+ border-radius: 999px;
80
+ background: hsl(var(--ring));
81
+ box-shadow: 0 0 0 1px hsl(var(--background));
82
+ pointer-events: none;
83
+ transform: translateY(-1px);
84
+ }
85
+
11
86
  .an-rich-md-loading {
12
87
  min-height: 7rem;
13
88
  }
package/src/ui/button.tsx CHANGED
@@ -4,7 +4,7 @@ import * as React from "react";
4
4
 
5
5
  import {
6
6
  LegacyButtonRenderContext,
7
- useDesignSystemComponent,
7
+ useDesignSystem,
8
8
  } from "../design-system/context.js";
9
9
  import { DesignSystemErrorBoundary } from "../design-system/error-boundary.js";
10
10
  import type {
@@ -83,7 +83,8 @@ const ButtonOverrideRenderContext = React.createContext(false);
83
83
 
84
84
  const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
85
85
  ({ variant, size, asChild = false, intent, emphasis, ...props }, ref) => {
86
- const DesignSystemActionButton = useDesignSystemComponent("ActionButton");
86
+ const DesignSystemActionButton =
87
+ useDesignSystem()?.components?.ActionButton;
87
88
  const Override = useToolkitComponent("Button");
88
89
  const isRenderingOverride = React.useContext(ButtonOverrideRenderContext);
89
90
  const isRenderingLegacyButton = React.useContext(LegacyButtonRenderContext);