@dxos/react-ui-editor 0.8.4-main.c1de068 → 0.8.4-main.e098934

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 (231) hide show
  1. package/dist/lib/browser/index.mjs +2074 -996
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/lib/browser/testing/index.mjs +71 -1
  5. package/dist/lib/browser/testing/index.mjs.map +4 -4
  6. package/dist/lib/node-esm/index.mjs +2074 -996
  7. package/dist/lib/node-esm/index.mjs.map +4 -4
  8. package/dist/lib/node-esm/meta.json +1 -1
  9. package/dist/lib/node-esm/testing/index.mjs +71 -1
  10. package/dist/lib/node-esm/testing/index.mjs.map +4 -4
  11. package/dist/types/src/components/{Popover → CommandMenu}/CommandMenu.d.ts +10 -6
  12. package/dist/types/src/components/CommandMenu/CommandMenu.d.ts.map +1 -0
  13. package/dist/types/src/components/CommandMenu/index.d.ts +2 -0
  14. package/dist/types/src/components/CommandMenu/index.d.ts.map +1 -0
  15. package/dist/types/src/components/Editor/Editor.d.ts.map +1 -1
  16. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts.map +1 -1
  17. package/dist/types/src/components/EditorToolbar/blocks.d.ts.map +1 -1
  18. package/dist/types/src/components/EditorToolbar/formatting.d.ts.map +1 -1
  19. package/dist/types/src/components/EditorToolbar/headings.d.ts.map +1 -1
  20. package/dist/types/src/components/EditorToolbar/image.d.ts.map +1 -1
  21. package/dist/types/src/components/EditorToolbar/lists.d.ts.map +1 -1
  22. package/dist/types/src/components/EditorToolbar/search.d.ts.map +1 -1
  23. package/dist/types/src/components/EditorToolbar/util.d.ts +2 -2
  24. package/dist/types/src/components/EditorToolbar/util.d.ts.map +1 -1
  25. package/dist/types/src/components/EditorToolbar/view-mode.d.ts +1 -1
  26. package/dist/types/src/components/EditorToolbar/view-mode.d.ts.map +1 -1
  27. package/dist/types/src/components/index.d.ts +1 -1
  28. package/dist/types/src/components/index.d.ts.map +1 -1
  29. package/dist/types/src/defaults.d.ts.map +1 -1
  30. package/dist/types/src/extensions/autocomplete.d.ts +20 -7
  31. package/dist/types/src/extensions/autocomplete.d.ts.map +1 -1
  32. package/dist/types/src/extensions/automerge/automerge.d.ts.map +1 -1
  33. package/dist/types/src/extensions/automerge/automerge.stories.d.ts +9 -18
  34. package/dist/types/src/extensions/automerge/automerge.stories.d.ts.map +1 -1
  35. package/dist/types/src/extensions/automerge/defs.d.ts +1 -1
  36. package/dist/types/src/extensions/automerge/defs.d.ts.map +1 -1
  37. package/dist/types/src/extensions/automerge/sync.d.ts.map +1 -1
  38. package/dist/types/src/extensions/automerge/update-automerge.d.ts.map +1 -1
  39. package/dist/types/src/extensions/autoscroll.d.ts +10 -0
  40. package/dist/types/src/extensions/autoscroll.d.ts.map +1 -0
  41. package/dist/types/src/extensions/command/action.d.ts +1 -1
  42. package/dist/types/src/extensions/command/action.d.ts.map +1 -1
  43. package/dist/types/src/extensions/command/command-menu.d.ts +1 -1
  44. package/dist/types/src/extensions/command/command-menu.d.ts.map +1 -1
  45. package/dist/types/src/extensions/command/command.d.ts.map +1 -1
  46. package/dist/types/src/extensions/command/floating-menu.d.ts.map +1 -1
  47. package/dist/types/src/extensions/command/hint.d.ts +2 -7
  48. package/dist/types/src/extensions/command/hint.d.ts.map +1 -1
  49. package/dist/types/src/extensions/command/state.d.ts +1 -1
  50. package/dist/types/src/extensions/command/state.d.ts.map +1 -1
  51. package/dist/types/src/extensions/command/typeahead.d.ts.map +1 -1
  52. package/dist/types/src/extensions/command/useCommandMenu.d.ts +3 -4
  53. package/dist/types/src/extensions/command/useCommandMenu.d.ts.map +1 -1
  54. package/dist/types/src/extensions/comments.d.ts +1 -1
  55. package/dist/types/src/extensions/comments.d.ts.map +1 -1
  56. package/dist/types/src/extensions/dnd.d.ts.map +1 -1
  57. package/dist/types/src/extensions/factories.d.ts +2 -7
  58. package/dist/types/src/extensions/factories.d.ts.map +1 -1
  59. package/dist/types/src/extensions/index.d.ts +2 -0
  60. package/dist/types/src/extensions/index.d.ts.map +1 -1
  61. package/dist/types/src/extensions/markdown/action.d.ts.map +1 -1
  62. package/dist/types/src/extensions/markdown/bundle.d.ts +8 -2
  63. package/dist/types/src/extensions/markdown/bundle.d.ts.map +1 -1
  64. package/dist/types/src/extensions/markdown/changes.d.ts +1 -1
  65. package/dist/types/src/extensions/markdown/changes.d.ts.map +1 -1
  66. package/dist/types/src/extensions/markdown/decorate.d.ts +9 -1
  67. package/dist/types/src/extensions/markdown/decorate.d.ts.map +1 -1
  68. package/dist/types/src/extensions/markdown/formatting.d.ts +1 -1
  69. package/dist/types/src/extensions/markdown/formatting.d.ts.map +1 -1
  70. package/dist/types/src/extensions/markdown/formatting.test.d.ts.map +1 -1
  71. package/dist/types/src/extensions/markdown/highlight.d.ts.map +1 -1
  72. package/dist/types/src/extensions/markdown/image.d.ts.map +1 -1
  73. package/dist/types/src/extensions/markdown/link.d.ts.map +1 -1
  74. package/dist/types/src/extensions/outliner/outliner.d.ts +1 -1
  75. package/dist/types/src/extensions/outliner/outliner.d.ts.map +1 -1
  76. package/dist/types/src/extensions/outliner/selection.d.ts.map +1 -1
  77. package/dist/types/src/extensions/outliner/tree.d.ts +2 -2
  78. package/dist/types/src/extensions/outliner/tree.d.ts.map +1 -1
  79. package/dist/types/src/extensions/preview/preview.d.ts +3 -6
  80. package/dist/types/src/extensions/preview/preview.d.ts.map +1 -1
  81. package/dist/types/src/extensions/tags/extended-markdown.d.ts +10 -0
  82. package/dist/types/src/extensions/tags/extended-markdown.d.ts.map +1 -0
  83. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts +2 -0
  84. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts.map +1 -0
  85. package/dist/types/src/extensions/tags/index.d.ts +4 -0
  86. package/dist/types/src/extensions/tags/index.d.ts.map +1 -0
  87. package/dist/types/src/extensions/tags/streamer.d.ts +12 -0
  88. package/dist/types/src/extensions/tags/streamer.d.ts.map +1 -0
  89. package/dist/types/src/extensions/tags/xml-tags.d.ts +71 -0
  90. package/dist/types/src/extensions/tags/xml-tags.d.ts.map +1 -0
  91. package/dist/types/src/extensions/tags/xml-util.d.ts +10 -0
  92. package/dist/types/src/extensions/tags/xml-util.d.ts.map +1 -0
  93. package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -1
  94. package/dist/types/src/stories/Command.stories.d.ts +12 -4
  95. package/dist/types/src/stories/Command.stories.d.ts.map +1 -1
  96. package/dist/types/src/stories/CommandMenu.stories.d.ts +10 -3
  97. package/dist/types/src/stories/CommandMenu.stories.d.ts.map +1 -1
  98. package/dist/types/src/stories/Comments.stories.d.ts +21 -9
  99. package/dist/types/src/stories/Comments.stories.d.ts.map +1 -1
  100. package/dist/types/src/stories/EditorToolbar.stories.d.ts +39 -2
  101. package/dist/types/src/stories/EditorToolbar.stories.d.ts.map +1 -1
  102. package/dist/types/src/stories/Experimental.stories.d.ts +22 -12
  103. package/dist/types/src/stories/Experimental.stories.d.ts.map +1 -1
  104. package/dist/types/src/stories/Markdown.stories.d.ts +32 -42
  105. package/dist/types/src/stories/Markdown.stories.d.ts.map +1 -1
  106. package/dist/types/src/stories/Outliner.stories.d.ts +15 -20
  107. package/dist/types/src/stories/Outliner.stories.d.ts.map +1 -1
  108. package/dist/types/src/stories/Preview.stories.d.ts +21 -6
  109. package/dist/types/src/stories/Preview.stories.d.ts.map +1 -1
  110. package/dist/types/src/stories/Tags.stories.d.ts +17 -0
  111. package/dist/types/src/stories/Tags.stories.d.ts.map +1 -0
  112. package/dist/types/src/stories/TextEditor.stories.d.ts +38 -51
  113. package/dist/types/src/stories/TextEditor.stories.d.ts.map +1 -1
  114. package/dist/types/src/stories/components/EditorStory.d.ts +3 -6
  115. package/dist/types/src/stories/components/EditorStory.d.ts.map +1 -1
  116. package/dist/types/src/styles/theme.d.ts.map +1 -1
  117. package/dist/types/src/testing/PreviewPopover.d.ts +20 -0
  118. package/dist/types/src/testing/PreviewPopover.d.ts.map +1 -0
  119. package/dist/types/src/testing/index.d.ts +1 -0
  120. package/dist/types/src/testing/index.d.ts.map +1 -1
  121. package/dist/types/src/testing/util.d.ts +1 -0
  122. package/dist/types/src/testing/util.d.ts.map +1 -1
  123. package/dist/types/src/translations.d.ts +1 -1
  124. package/dist/types/src/types/types.d.ts +1 -1
  125. package/dist/types/src/util/cursor.d.ts.map +1 -1
  126. package/dist/types/src/util/debug.d.ts +1 -1
  127. package/dist/types/src/util/debug.d.ts.map +1 -1
  128. package/dist/types/src/util/decorations.d.ts +4 -0
  129. package/dist/types/src/util/decorations.d.ts.map +1 -0
  130. package/dist/types/src/util/dom.d.ts +2 -12
  131. package/dist/types/src/util/dom.d.ts.map +1 -1
  132. package/dist/types/src/util/domino.d.ts +18 -0
  133. package/dist/types/src/util/domino.d.ts.map +1 -0
  134. package/dist/types/src/util/index.d.ts +2 -0
  135. package/dist/types/src/util/index.d.ts.map +1 -1
  136. package/dist/types/src/util/react.d.ts +1 -1
  137. package/dist/types/src/util/react.d.ts.map +1 -1
  138. package/dist/types/tsconfig.tsbuildinfo +1 -1
  139. package/package.json +57 -51
  140. package/src/components/{Popover → CommandMenu}/CommandMenu.tsx +93 -26
  141. package/src/components/{Popover → CommandMenu}/index.ts +0 -2
  142. package/src/components/Editor/Editor.tsx +1 -1
  143. package/src/components/EditorToolbar/EditorToolbar.tsx +40 -30
  144. package/src/components/EditorToolbar/blocks.ts +21 -24
  145. package/src/components/EditorToolbar/formatting.ts +22 -25
  146. package/src/components/EditorToolbar/headings.ts +10 -5
  147. package/src/components/EditorToolbar/image.ts +8 -4
  148. package/src/components/EditorToolbar/lists.ts +16 -19
  149. package/src/components/EditorToolbar/search.ts +8 -4
  150. package/src/components/EditorToolbar/util.ts +16 -5
  151. package/src/components/EditorToolbar/view-mode.ts +11 -6
  152. package/src/components/index.ts +1 -1
  153. package/src/defaults.ts +5 -2
  154. package/src/extensions/autocomplete.ts +204 -54
  155. package/src/extensions/automerge/automerge.stories.tsx +25 -18
  156. package/src/extensions/automerge/automerge.ts +4 -3
  157. package/src/extensions/automerge/defs.ts +1 -1
  158. package/src/extensions/automerge/sync.ts +1 -1
  159. package/src/extensions/automerge/update-automerge.ts +1 -1
  160. package/src/extensions/autoscroll.ts +157 -0
  161. package/src/extensions/awareness/awareness.ts +2 -2
  162. package/src/extensions/command/action.ts +1 -2
  163. package/src/extensions/command/command-menu.ts +7 -6
  164. package/src/extensions/command/command.ts +3 -3
  165. package/src/extensions/command/floating-menu.ts +10 -15
  166. package/src/extensions/command/hint.ts +2 -1
  167. package/src/extensions/command/placeholder.ts +1 -1
  168. package/src/extensions/command/state.ts +4 -3
  169. package/src/extensions/command/typeahead.ts +2 -2
  170. package/src/extensions/command/useCommandMenu.ts +6 -9
  171. package/src/extensions/comments.ts +18 -13
  172. package/src/extensions/dnd.ts +1 -1
  173. package/src/extensions/factories.ts +9 -21
  174. package/src/extensions/folding.tsx +2 -2
  175. package/src/extensions/index.ts +2 -0
  176. package/src/extensions/markdown/action.ts +2 -1
  177. package/src/extensions/markdown/bundle.ts +25 -3
  178. package/src/extensions/markdown/changes.ts +1 -1
  179. package/src/extensions/markdown/decorate.ts +23 -14
  180. package/src/extensions/markdown/formatting.test.ts +6 -6
  181. package/src/extensions/markdown/formatting.ts +3 -3
  182. package/src/extensions/markdown/highlight.ts +1 -1
  183. package/src/extensions/markdown/image.ts +3 -4
  184. package/src/extensions/markdown/link.ts +3 -0
  185. package/src/extensions/markdown/table.ts +7 -1
  186. package/src/extensions/mention.ts +1 -1
  187. package/src/extensions/outliner/outliner.test.ts +3 -2
  188. package/src/extensions/outliner/outliner.ts +6 -5
  189. package/src/extensions/outliner/selection.ts +1 -1
  190. package/src/extensions/outliner/tree.test.ts +2 -1
  191. package/src/extensions/outliner/tree.ts +2 -2
  192. package/src/extensions/preview/preview.ts +59 -62
  193. package/src/extensions/tags/extended-markdown.test.ts +261 -0
  194. package/src/extensions/tags/extended-markdown.ts +78 -0
  195. package/src/extensions/tags/index.ts +7 -0
  196. package/src/extensions/tags/streamer.ts +244 -0
  197. package/src/extensions/tags/xml-tags.ts +335 -0
  198. package/src/extensions/tags/xml-util.ts +94 -0
  199. package/src/hooks/useTextEditor.ts +3 -15
  200. package/src/stories/Command.stories.tsx +24 -31
  201. package/src/stories/CommandMenu.stories.tsx +28 -29
  202. package/src/stories/Comments.stories.tsx +10 -6
  203. package/src/stories/EditorToolbar.stories.tsx +8 -8
  204. package/src/stories/Experimental.stories.tsx +12 -8
  205. package/src/stories/Markdown.stories.tsx +21 -17
  206. package/src/stories/Outliner.stories.tsx +42 -30
  207. package/src/stories/Preview.stories.tsx +30 -29
  208. package/src/stories/Tags.stories.tsx +81 -0
  209. package/src/stories/TextEditor.stories.tsx +40 -34
  210. package/src/stories/components/EditorStory.tsx +9 -10
  211. package/src/styles/theme.ts +8 -6
  212. package/src/testing/PreviewPopover.tsx +78 -0
  213. package/src/testing/index.ts +1 -0
  214. package/src/testing/util.ts +2 -0
  215. package/src/translations.ts +1 -1
  216. package/src/util/cursor.ts +2 -1
  217. package/src/util/debug.ts +2 -2
  218. package/src/util/decorations.ts +21 -0
  219. package/src/util/dom.ts +5 -27
  220. package/src/util/domino.ts +51 -0
  221. package/src/util/index.ts +2 -0
  222. package/src/util/react.tsx +1 -1
  223. package/dist/types/src/components/Popover/CommandMenu.d.ts.map +0 -1
  224. package/dist/types/src/components/Popover/RefDropdownMenu.d.ts +0 -21
  225. package/dist/types/src/components/Popover/RefDropdownMenu.d.ts.map +0 -1
  226. package/dist/types/src/components/Popover/RefPopover.d.ts +0 -34
  227. package/dist/types/src/components/Popover/RefPopover.d.ts.map +0 -1
  228. package/dist/types/src/components/Popover/index.d.ts +0 -4
  229. package/dist/types/src/components/Popover/index.d.ts.map +0 -1
  230. package/src/components/Popover/RefDropdownMenu.tsx +0 -85
  231. package/src/components/Popover/RefPopover.tsx +0 -99
@@ -1,34 +0,0 @@
1
- import React, { type PropsWithChildren } from 'react';
2
- import { type DxRefTag, type DxRefTagActivate } from '@dxos/lit-ui';
3
- import { type PreviewLinkRef, type PreviewLinkTarget, type PreviewLookup } from '../../extensions';
4
- export type RefPopoverProps = PropsWithChildren<{
5
- modal?: boolean;
6
- open?: boolean;
7
- onOpenChange?: (open: boolean) => void;
8
- onActivate?: (event: DxRefTagActivate) => void;
9
- }>;
10
- export declare const RefPopover: React.ForwardRefExoticComponent<{
11
- modal?: boolean;
12
- open?: boolean;
13
- onOpenChange?: (open: boolean) => void;
14
- onActivate?: (event: DxRefTagActivate) => void;
15
- } & {
16
- children?: React.ReactNode | undefined;
17
- } & React.RefAttributes<DxRefTag | null>>;
18
- type RefPopoverValue = Partial<{
19
- link: PreviewLinkRef;
20
- target: PreviewLinkTarget;
21
- pending: boolean;
22
- }>;
23
- declare const useRefPopover: (consumerName: string) => Partial<{
24
- link: PreviewLinkRef;
25
- target: PreviewLinkTarget;
26
- pending: boolean;
27
- }>;
28
- type PreviewProviderProps = PropsWithChildren<{
29
- onLookup?: PreviewLookup;
30
- }>;
31
- declare const PreviewProvider: ({ children, onLookup }: PreviewProviderProps) => React.JSX.Element;
32
- export { PreviewProvider, useRefPopover };
33
- export type { PreviewProviderProps, RefPopoverValue };
34
- //# sourceMappingURL=RefPopover.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RefPopover.d.ts","sourceRoot":"","sources":["../../../../../src/components/Popover/RefPopover.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,EACZ,KAAK,iBAAiB,EAOvB,MAAM,OAAO,CAAC;AAGf,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGpE,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,iBAAiB,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAInG,MAAM,MAAM,eAAe,GAAG,iBAAiB,CAAC;IAC9C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAChD,CAAC,CAAC;AAEH,eAAO,MAAM,UAAU;YANb,OAAO;WACR,OAAO;mBACC,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI;iBACzB,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI;;;yCAwB/C,CAAC;AAGF,KAAK,eAAe,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,iBAAiB,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC;AAGtG,QAAA,MAAkC,aAAa;UAHR,cAAc;YAAU,iBAAiB;aAAW,OAAO;EAGA,CAAC;AAEnG,KAAK,oBAAoB,GAAG,iBAAiB,CAAC;IAAE,QAAQ,CAAC,EAAE,aAAa,CAAA;CAAE,CAAC,CAAC;AAE5E,QAAA,MAAM,eAAe,GAAI,wBAAwB,oBAAoB,sBAiCpE,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,CAAC;AAE1C,YAAY,EAAE,oBAAoB,EAAE,eAAe,EAAE,CAAC"}
@@ -1,4 +0,0 @@
1
- export * from './CommandMenu';
2
- export * from './RefPopover';
3
- export * from './RefDropdownMenu';
4
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/Popover/index.ts"],"names":[],"mappings":"AAIA,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC"}
@@ -1,85 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { createContext } from '@radix-ui/react-context';
6
- import React, { type PropsWithChildren, useRef, useState, useEffect, useCallback, type RefObject } from 'react';
7
-
8
- import { addEventListener } from '@dxos/async';
9
- import { type DxRefTag, type DxRefTagActivate } from '@dxos/lit-ui';
10
- import { DropdownMenu } from '@dxos/react-ui';
11
-
12
- import { type PreviewLinkRef, type PreviewLinkTarget, type PreviewLookup } from '../../extensions';
13
-
14
- // TODO(burdon): Reconcile this file with RefPopover?
15
-
16
- const customEventOptions = { capture: true, passive: false };
17
-
18
- // Create a context for the dxn value.
19
- type RefDropdownMenuValue = Partial<{
20
- link: PreviewLinkRef;
21
- target: PreviewLinkTarget;
22
- pending: boolean;
23
- }>;
24
-
25
- const REF_DROPDOWN_MENU = 'RefDropdownMenu';
26
- const [RefDropdownMenuContextProvider, useRefDropdownMenu] = createContext<RefDropdownMenuValue>(REF_DROPDOWN_MENU, {});
27
-
28
- type RefDropdownMenuProviderProps = PropsWithChildren<{
29
- onLookup?: PreviewLookup;
30
- }>;
31
-
32
- const RefDropdownMenuProvider = ({ children, onLookup }: RefDropdownMenuProviderProps) => {
33
- const trigger = useRef<DxRefTag | null>(null);
34
- const [value, setValue] = useState<RefDropdownMenuValue>({});
35
- const [rootRef, setRootRef] = useState<HTMLDivElement | null>(null);
36
- const [open, setOpen] = useState(false);
37
-
38
- const handleDxRefTagActivate = useCallback(
39
- (event: DxRefTagActivate) => {
40
- const { refId, label, trigger: dxTrigger } = event;
41
- setValue((value) => ({
42
- ...value,
43
- link: { label, ref: refId },
44
- pending: true,
45
- }));
46
- trigger.current = dxTrigger;
47
- queueMicrotask(() => setOpen(true));
48
- void onLookup?.({ label, ref: refId }).then((target) =>
49
- setValue((value) => ({
50
- ...value,
51
- target: target ?? undefined,
52
- pending: false,
53
- })),
54
- );
55
- },
56
- [onLookup],
57
- );
58
-
59
- useEffect(() => {
60
- if (!rootRef) {
61
- return;
62
- }
63
-
64
- return addEventListener(rootRef, 'dx-ref-tag-activate' as any, handleDxRefTagActivate, customEventOptions);
65
- }, [rootRef]);
66
-
67
- return (
68
- <RefDropdownMenuContextProvider pending={value.pending} link={value.link} target={value.target}>
69
- <DropdownMenu.Root open={open} onOpenChange={setOpen}>
70
- <DropdownMenu.VirtualTrigger virtualRef={trigger as unknown as RefObject<HTMLButtonElement>} />
71
- <div role='none' className='contents' ref={setRootRef}>
72
- {children}
73
- </div>
74
- </DropdownMenu.Root>
75
- </RefDropdownMenuContextProvider>
76
- );
77
- };
78
-
79
- export const RefDropdownMenu = {
80
- Provider: RefDropdownMenuProvider,
81
- };
82
-
83
- export { useRefDropdownMenu };
84
-
85
- export type { RefDropdownMenuProviderProps, RefDropdownMenuValue };
@@ -1,99 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { createContext } from '@radix-ui/react-context';
6
- import React, {
7
- type PropsWithChildren,
8
- useRef,
9
- useState,
10
- useEffect,
11
- useCallback,
12
- type RefObject,
13
- forwardRef,
14
- } from 'react';
15
-
16
- import { addEventListener } from '@dxos/async';
17
- import { type DxRefTag, type DxRefTagActivate } from '@dxos/lit-ui';
18
- import { Popover } from '@dxos/react-ui';
19
-
20
- import { type PreviewLinkRef, type PreviewLinkTarget, type PreviewLookup } from '../../extensions';
21
-
22
- const customEventOptions = { capture: true, passive: false };
23
-
24
- export type RefPopoverProps = PropsWithChildren<{
25
- modal?: boolean;
26
- open?: boolean;
27
- onOpenChange?: (open: boolean) => void;
28
- onActivate?: (event: DxRefTagActivate) => void;
29
- }>;
30
-
31
- export const RefPopover = forwardRef<DxRefTag | null, RefPopoverProps>(
32
- ({ children, open, onOpenChange, modal, onActivate }, ref) => {
33
- const [rootRef, setRootRef] = useState<HTMLDivElement | null>(null);
34
-
35
- useEffect(() => {
36
- if (!rootRef || !onActivate) {
37
- return;
38
- }
39
-
40
- return addEventListener(rootRef, 'dx-ref-tag-activate' as any, onActivate, customEventOptions);
41
- }, [rootRef, onActivate]);
42
-
43
- return (
44
- <Popover.Root open={open} onOpenChange={onOpenChange} modal={modal}>
45
- <Popover.VirtualTrigger virtualRef={ref as unknown as RefObject<HTMLButtonElement>} />
46
- <div role='none' className='contents' ref={setRootRef}>
47
- {children}
48
- </div>
49
- </Popover.Root>
50
- );
51
- },
52
- );
53
-
54
- // Create a context for the dxn value.
55
- type RefPopoverValue = Partial<{ link: PreviewLinkRef; target: PreviewLinkTarget; pending: boolean }>;
56
-
57
- const REF_POPOVER = 'RefPopover';
58
- const [RefPopoverContextProvider, useRefPopover] = createContext<RefPopoverValue>(REF_POPOVER, {});
59
-
60
- type PreviewProviderProps = PropsWithChildren<{ onLookup?: PreviewLookup }>;
61
-
62
- const PreviewProvider = ({ children, onLookup }: PreviewProviderProps) => {
63
- const trigger = useRef<DxRefTag | null>(null);
64
- const [value, setValue] = useState<RefPopoverValue>({});
65
- const [open, setOpen] = useState(false);
66
-
67
- const handleDxRefTagActivate = useCallback(
68
- (event: DxRefTagActivate) => {
69
- const { refId, label, trigger: dxTrigger } = event;
70
- setValue((value) => ({
71
- ...value,
72
- link: { label, ref: refId },
73
- pending: true,
74
- }));
75
- trigger.current = dxTrigger;
76
- queueMicrotask(() => setOpen(true));
77
- void onLookup?.({ label, ref: refId }).then((target) =>
78
- setValue((value) => ({
79
- ...value,
80
- target: target ?? undefined,
81
- pending: false,
82
- })),
83
- );
84
- },
85
- [onLookup],
86
- );
87
-
88
- return (
89
- <RefPopoverContextProvider pending={value.pending} link={value.link} target={value.target}>
90
- <RefPopover ref={trigger} open={open} onOpenChange={setOpen} onActivate={handleDxRefTagActivate}>
91
- {children}
92
- </RefPopover>
93
- </RefPopoverContextProvider>
94
- );
95
- };
96
-
97
- export { PreviewProvider, useRefPopover };
98
-
99
- export type { PreviewProviderProps, RefPopoverValue };