@dxos/react-ui-editor 0.8.4-main.dedc0f3 → 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 (58) hide show
  1. package/dist/lib/browser/index.mjs +82 -190
  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 +82 -190
  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/index.d.ts +1 -1
  16. package/dist/types/src/components/index.d.ts.map +1 -1
  17. package/dist/types/src/extensions/autoscroll.d.ts.map +1 -1
  18. package/dist/types/src/extensions/command/action.d.ts.map +1 -1
  19. package/dist/types/src/extensions/command/floating-menu.d.ts.map +1 -1
  20. package/dist/types/src/extensions/command/useCommandMenu.d.ts +1 -2
  21. package/dist/types/src/extensions/command/useCommandMenu.d.ts.map +1 -1
  22. package/dist/types/src/extensions/markdown/link.d.ts.map +1 -1
  23. package/dist/types/src/extensions/preview/preview.d.ts +0 -1
  24. package/dist/types/src/extensions/preview/preview.d.ts.map +1 -1
  25. package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -1
  26. package/dist/types/src/stories/CommandMenu.stories.d.ts.map +1 -1
  27. package/dist/types/src/stories/Outliner.stories.d.ts.map +1 -1
  28. package/dist/types/src/testing/PreviewPopover.d.ts +20 -0
  29. package/dist/types/src/testing/PreviewPopover.d.ts.map +1 -0
  30. package/dist/types/src/testing/index.d.ts +1 -0
  31. package/dist/types/src/testing/index.d.ts.map +1 -1
  32. package/dist/types/tsconfig.tsbuildinfo +1 -1
  33. package/package.json +33 -33
  34. package/src/components/{Popover → CommandMenu}/CommandMenu.tsx +93 -26
  35. package/src/components/{Popover → CommandMenu}/index.ts +0 -2
  36. package/src/components/index.ts +1 -1
  37. package/src/extensions/autoscroll.ts +14 -8
  38. package/src/extensions/command/action.ts +0 -1
  39. package/src/extensions/command/command-menu.ts +1 -1
  40. package/src/extensions/command/floating-menu.ts +9 -14
  41. package/src/extensions/command/useCommandMenu.ts +3 -7
  42. package/src/extensions/markdown/link.ts +3 -0
  43. package/src/extensions/outliner/outliner.ts +1 -1
  44. package/src/extensions/preview/preview.ts +0 -3
  45. package/src/hooks/useTextEditor.ts +0 -12
  46. package/src/stories/CommandMenu.stories.tsx +5 -7
  47. package/src/stories/Outliner.stories.tsx +28 -19
  48. package/src/stories/Preview.stories.tsx +4 -4
  49. package/src/{components/Popover/RefDropdownMenu.tsx → testing/PreviewPopover.tsx} +19 -30
  50. package/src/testing/index.ts +1 -0
  51. package/dist/types/src/components/Popover/CommandMenu.d.ts.map +0 -1
  52. package/dist/types/src/components/Popover/RefDropdownMenu.d.ts +0 -14
  53. package/dist/types/src/components/Popover/RefDropdownMenu.d.ts.map +0 -1
  54. package/dist/types/src/components/Popover/RefPopover.d.ts +0 -37
  55. package/dist/types/src/components/Popover/RefPopover.d.ts.map +0 -1
  56. package/dist/types/src/components/Popover/index.d.ts +0 -4
  57. package/dist/types/src/components/Popover/index.d.ts.map +0 -1
  58. package/src/components/Popover/RefPopover.tsx +0 -117
@@ -6,38 +6,27 @@ import { createContext } from '@radix-ui/react-context';
6
6
  import React, { type PropsWithChildren, type RefObject, useCallback, useEffect, useRef, useState } from 'react';
7
7
 
8
8
  import { addEventListener } from '@dxos/async';
9
- import { type DxAnchor, type DxAnchorActivate } from '@dxos/lit-ui';
10
- import { DropdownMenu } from '@dxos/react-ui';
9
+ import { type DxAnchorActivate, Popover } from '@dxos/react-ui';
11
10
 
12
- import { type PreviewLinkRef, type PreviewLinkTarget, type PreviewLookup } from '../../extensions';
11
+ import { type PreviewLinkRef, type PreviewLinkTarget } from '../extensions';
13
12
 
14
- // TODO(burdon): Move to @dxos/lit-ui
13
+ type PreviewLookup = (link: PreviewLinkRef) => Promise<PreviewLinkTarget | null | undefined>;
15
14
 
16
- //
17
- // Context
18
- //
19
-
20
- type RefDropdownMenuValue = Partial<{
15
+ type PreviewPopoverValue = Partial<{
21
16
  link: PreviewLinkRef;
22
17
  target: PreviewLinkTarget;
23
18
  pending: boolean;
24
19
  }>;
25
20
 
26
- const [RefDropdownMenuContextProvider, useRefDropdownMenu] = createContext<RefDropdownMenuValue>('RefDropdownMenu', {});
21
+ const [PreviewPopoverContextProvider, usePreviewPopover] = createContext<PreviewPopoverValue>('PreviewPopover', {});
27
22
 
28
- //
29
- // Context Provider
30
- // NOTE: This is handled by the preview-plugin.
31
- //
32
-
33
- type RefDropdownMenuProviderProps = PropsWithChildren<{
23
+ type PopoverLookupProviderProps = PropsWithChildren<{
34
24
  onLookup?: PreviewLookup;
35
25
  }>;
36
26
 
37
- const RefDropdownMenuProvider = ({ children, onLookup }: RefDropdownMenuProviderProps) => {
38
- const trigger = useRef<DxAnchor | null>(null);
39
- const [value, setValue] = useState<RefDropdownMenuValue>({});
40
- const [rootRef, setRootRef] = useState<HTMLDivElement | null>(null);
27
+ const PreviewPopoverProvider = ({ children, onLookup }: PopoverLookupProviderProps) => {
28
+ const trigger = useRef<HTMLElement | null>(null);
29
+ const [value, setValue] = useState<PreviewPopoverValue>({});
41
30
  const [open, setOpen] = useState(false);
42
31
 
43
32
  const handleDxAnchorActivate = useCallback(
@@ -61,8 +50,9 @@ const RefDropdownMenuProvider = ({ children, onLookup }: RefDropdownMenuProvider
61
50
  [onLookup],
62
51
  );
63
52
 
53
+ const [rootRef, setRootRef] = useState<HTMLDivElement | null>(null);
64
54
  useEffect(() => {
65
- if (!rootRef) {
55
+ if (!rootRef || !handleDxAnchorActivate) {
66
56
  return;
67
57
  }
68
58
 
@@ -70,20 +60,19 @@ const RefDropdownMenuProvider = ({ children, onLookup }: RefDropdownMenuProvider
70
60
  capture: true,
71
61
  passive: false,
72
62
  });
73
- }, [rootRef]);
63
+ }, [rootRef, handleDxAnchorActivate]);
74
64
 
75
65
  return (
76
- <RefDropdownMenuContextProvider pending={value.pending} link={value.link} target={value.target}>
77
- <DropdownMenu.Root open={open} onOpenChange={setOpen}>
78
- <DropdownMenu.VirtualTrigger virtualRef={trigger as unknown as RefObject<HTMLButtonElement>} />
66
+ <PreviewPopoverContextProvider pending={value.pending} link={value.link} target={value.target}>
67
+ <Popover.Root open={open} onOpenChange={setOpen}>
68
+ <Popover.VirtualTrigger virtualRef={trigger as unknown as RefObject<HTMLButtonElement>} />
79
69
  <div role='none' className='contents' ref={setRootRef}>
80
70
  {children}
81
71
  </div>
82
- </DropdownMenu.Root>
83
- </RefDropdownMenuContextProvider>
72
+ </Popover.Root>
73
+ </PreviewPopoverContextProvider>
84
74
  );
85
75
  };
76
+ export { PreviewPopoverProvider, usePreviewPopover };
86
77
 
87
- export { RefDropdownMenuProvider };
88
-
89
- export type { RefDropdownMenuProviderProps, RefDropdownMenuValue };
78
+ export type { PopoverLookupProviderProps, PreviewPopoverValue };
@@ -3,3 +3,4 @@
3
3
  //
4
4
 
5
5
  export * from './util';
6
+ export * from './PreviewPopover';
@@ -1 +0,0 @@
1
- {"version":3,"file":"CommandMenu.d.ts","sourceRoot":"","sources":["../../../../../src/components/Popover/CommandMenu.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAmD,MAAM,OAAO,CAAC;AAExE,OAAO,EAAQ,KAAK,KAAK,EAA+D,MAAM,gBAAgB,CAAC;AAC/G,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAI/C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,KAAK,EAAE,eAAe,EAAE,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;CACnE,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;CAC3C,CAAC;AAGF,eAAO,MAAM,WAAW,GAAI,mCAAmC,gBAAgB,sBAyB9E,CAAC;AAiEF,eAAO,MAAM,OAAO,GAAI,QAAQ,gBAAgB,EAAE,EAAE,KAAK,MAAM,KAAG,eAAe,GAAG,SAEnF,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,QAAQ,gBAAgB,EAAE,EAAE,KAAK,MAAM,KAAG,eAIrE,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,QAAQ,gBAAgB,EAAE,EAAE,KAAK,MAAM,KAAG,eAIzE,CAAC;AAEF,eAAO,MAAM,WAAW,GACtB,QAAQ,gBAAgB,EAAE,EAC1B,QAAQ,CAAC,IAAI,EAAE,eAAe,KAAK,OAAO,KACzC,gBAAgB,EAKlB,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,MAAM,UAAU,EAAE,MAAM,MAAM,EAAE,QAAQ,MAAM,SAK5E,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,MAAM,UAAU,EAAE,MAAM,MAAM,EAAE,QAAQ,MAAM,SAW/E,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,gBA6E/B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,gBA2B/B,CAAC"}
@@ -1,14 +0,0 @@
1
- import React, { type PropsWithChildren } from 'react';
2
- import { type PreviewLinkRef, type PreviewLinkTarget, type PreviewLookup } from '../../extensions';
3
- type RefDropdownMenuValue = Partial<{
4
- link: PreviewLinkRef;
5
- target: PreviewLinkTarget;
6
- pending: boolean;
7
- }>;
8
- type RefDropdownMenuProviderProps = PropsWithChildren<{
9
- onLookup?: PreviewLookup;
10
- }>;
11
- declare const RefDropdownMenuProvider: ({ children, onLookup }: RefDropdownMenuProviderProps) => React.JSX.Element;
12
- export { RefDropdownMenuProvider };
13
- export type { RefDropdownMenuProviderProps, RefDropdownMenuValue };
14
- //# sourceMappingURL=RefDropdownMenu.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RefDropdownMenu.d.ts","sourceRoot":"","sources":["../../../../../src/components/Popover/RefDropdownMenu.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,EAAE,KAAK,iBAAiB,EAA4D,MAAM,OAAO,CAAC;AAMhH,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,iBAAiB,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAQnG,KAAK,oBAAoB,GAAG,OAAO,CAAC;IAClC,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC,CAAC;AASH,KAAK,4BAA4B,GAAG,iBAAiB,CAAC;IACpD,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B,CAAC,CAAC;AAEH,QAAA,MAAM,uBAAuB,GAAI,wBAAwB,4BAA4B,sBAgDpF,CAAC;AAEF,OAAO,EAAE,uBAAuB,EAAE,CAAC;AAEnC,YAAY,EAAE,4BAA4B,EAAE,oBAAoB,EAAE,CAAC"}
@@ -1,37 +0,0 @@
1
- import React, { type PropsWithChildren } from 'react';
2
- import { type DxAnchor, type DxAnchorActivate } from '@dxos/lit-ui';
3
- import { type PreviewLinkRef, type PreviewLinkTarget, type PreviewLookup } from '../../extensions';
4
- type RefPopoverValue = Partial<{
5
- link: PreviewLinkRef;
6
- target: PreviewLinkTarget;
7
- pending: boolean;
8
- }>;
9
- declare const useRefPopover: (consumerName: string) => Partial<{
10
- link: PreviewLinkRef;
11
- target: PreviewLinkTarget;
12
- pending: boolean;
13
- }>;
14
- type PreviewProviderProps = PropsWithChildren<{
15
- onLookup?: PreviewLookup;
16
- }>;
17
- declare const PreviewProvider: ({ children, onLookup }: PreviewProviderProps) => React.JSX.Element;
18
- type RefPopoverProps = PropsWithChildren<{
19
- modal?: boolean;
20
- open?: boolean;
21
- onOpenChange?: (open: boolean) => void;
22
- onActivate?: (event: DxAnchorActivate) => void;
23
- }>;
24
- /**
25
- * Wraps components that contain <dx-anchor> elements?
26
- */
27
- declare const RefPopover: React.ForwardRefExoticComponent<{
28
- modal?: boolean;
29
- open?: boolean;
30
- onOpenChange?: (open: boolean) => void;
31
- onActivate?: (event: DxAnchorActivate) => void;
32
- } & {
33
- children?: React.ReactNode | undefined;
34
- } & React.RefAttributes<DxAnchor | null>>;
35
- export { RefPopover, PreviewProvider, useRefPopover };
36
- export type { RefPopoverProps, PreviewProviderProps, RefPopoverValue };
37
- //# 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;AAQnG,KAAK,eAAe,GAAG,OAAO,CAAC;IAC7B,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC,CAAC;AAEH,QAAA,MAAkC,aAAa;UALvC,cAAc;YACZ,iBAAiB;aAChB,OAAO;EAGiF,CAAC;AAMpG,KAAK,oBAAoB,GAAG,iBAAiB,CAAC;IAC5C,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B,CAAC,CAAC;AAEH,QAAA,MAAM,eAAe,GAAI,wBAAwB,oBAAoB,sBAiCpE,CAAC;AAMF,KAAK,eAAe,GAAG,iBAAiB,CAAC;IACvC,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;;GAEG;AACH,QAAA,MAAM,UAAU;YATN,OAAO;WACR,OAAO;mBACC,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI;iBACzB,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI;;;yCA0B/C,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,aAAa,EAAE,CAAC;AAEtD,YAAY,EAAE,eAAe,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,117 +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
- type RefObject,
9
- forwardRef,
10
- useCallback,
11
- useEffect,
12
- useRef,
13
- useState,
14
- } from 'react';
15
-
16
- import { addEventListener } from '@dxos/async';
17
- import { type DxAnchor, type DxAnchorActivate } from '@dxos/lit-ui';
18
- import { Popover } from '@dxos/react-ui';
19
-
20
- import { type PreviewLinkRef, type PreviewLinkTarget, type PreviewLookup } from '../../extensions';
21
-
22
- // TODO(burdon): Move to @dxos/lit-ui
23
-
24
- //
25
- // Context
26
- //
27
-
28
- type RefPopoverValue = Partial<{
29
- link: PreviewLinkRef;
30
- target: PreviewLinkTarget;
31
- pending: boolean;
32
- }>;
33
-
34
- const [RefPopoverContextProvider, useRefPopover] = createContext<RefPopoverValue>('RefPopover', {});
35
-
36
- //
37
- // ContextProvider
38
- //
39
-
40
- type PreviewProviderProps = PropsWithChildren<{
41
- onLookup?: PreviewLookup;
42
- }>;
43
-
44
- const PreviewProvider = ({ children, onLookup }: PreviewProviderProps) => {
45
- const trigger = useRef<DxAnchor | null>(null);
46
- const [value, setValue] = useState<RefPopoverValue>({});
47
- const [open, setOpen] = useState(false);
48
-
49
- const handleDxAnchorActivate = useCallback(
50
- (event: DxAnchorActivate) => {
51
- const { refId, label, trigger: dxTrigger } = event;
52
- setValue((value) => ({
53
- ...value,
54
- link: { label, ref: refId },
55
- pending: true,
56
- }));
57
- trigger.current = dxTrigger;
58
- queueMicrotask(() => setOpen(true));
59
- void onLookup?.({ label, ref: refId }).then((target) =>
60
- setValue((value) => ({
61
- ...value,
62
- target: target ?? undefined,
63
- pending: false,
64
- })),
65
- );
66
- },
67
- [onLookup],
68
- );
69
-
70
- return (
71
- <RefPopoverContextProvider pending={value.pending} link={value.link} target={value.target}>
72
- <RefPopover ref={trigger} open={open} onOpenChange={setOpen} onActivate={handleDxAnchorActivate}>
73
- {children}
74
- </RefPopover>
75
- </RefPopoverContextProvider>
76
- );
77
- };
78
-
79
- //
80
- // Popover
81
- //
82
-
83
- type RefPopoverProps = PropsWithChildren<{
84
- modal?: boolean;
85
- open?: boolean;
86
- onOpenChange?: (open: boolean) => void;
87
- onActivate?: (event: DxAnchorActivate) => void;
88
- }>;
89
-
90
- /**
91
- * Wraps components that contain <dx-anchor> elements?
92
- */
93
- const RefPopover = forwardRef<DxAnchor | null, RefPopoverProps>(
94
- ({ children, open, onOpenChange, modal, onActivate }, ref) => {
95
- const [rootRef, setRootRef] = useState<HTMLDivElement | null>(null);
96
- useEffect(() => {
97
- if (!rootRef || !onActivate) {
98
- return;
99
- }
100
-
101
- return addEventListener(rootRef, 'dx-anchor-activate' as any, onActivate, { capture: true, passive: false });
102
- }, [rootRef, onActivate]);
103
-
104
- return (
105
- <Popover.Root open={open} onOpenChange={onOpenChange} modal={modal}>
106
- <Popover.VirtualTrigger virtualRef={ref as unknown as RefObject<HTMLButtonElement>} />
107
- <div role='none' className='contents' ref={setRootRef}>
108
- {children}
109
- </div>
110
- </Popover.Root>
111
- );
112
- },
113
- );
114
-
115
- export { RefPopover, PreviewProvider, useRefPopover };
116
-
117
- export type { RefPopoverProps, PreviewProviderProps, RefPopoverValue };