@dxos/react-ui-editor 0.8.2-main.fbd8ed0 → 0.8.2-staging.7ac8446

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 (193) hide show
  1. package/dist/lib/browser/index.mjs +5088 -5521
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/lib/node/index.cjs +4915 -5354
  5. package/dist/lib/node/index.cjs.map +4 -4
  6. package/dist/lib/node/meta.json +1 -1
  7. package/dist/lib/node-esm/index.mjs +5088 -5521
  8. package/dist/lib/node-esm/index.mjs.map +4 -4
  9. package/dist/lib/node-esm/meta.json +1 -1
  10. package/dist/types/src/{components/EditorToolbar/EditorToolbar.stories.d.ts → InputMode.stories.d.ts} +7 -3
  11. package/dist/types/src/InputMode.stories.d.ts.map +1 -0
  12. package/dist/types/src/{stories/TextEditorBasic.stories.d.ts → TextEditor.stories.d.ts} +35 -5
  13. package/dist/types/src/TextEditor.stories.d.ts.map +1 -0
  14. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts +1 -1
  15. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts.map +1 -1
  16. package/dist/types/src/components/EditorToolbar/blocks.d.ts +3 -4
  17. package/dist/types/src/components/EditorToolbar/blocks.d.ts.map +1 -1
  18. package/dist/types/src/components/EditorToolbar/comment.d.ts +3 -4
  19. package/dist/types/src/components/EditorToolbar/comment.d.ts.map +1 -1
  20. package/dist/types/src/components/EditorToolbar/formatting.d.ts +3 -4
  21. package/dist/types/src/components/EditorToolbar/formatting.d.ts.map +1 -1
  22. package/dist/types/src/components/EditorToolbar/headings.d.ts +3 -4
  23. package/dist/types/src/components/EditorToolbar/headings.d.ts.map +1 -1
  24. package/dist/types/src/components/EditorToolbar/lists.d.ts +3 -4
  25. package/dist/types/src/components/EditorToolbar/lists.d.ts.map +1 -1
  26. package/dist/types/src/components/EditorToolbar/util.d.ts +20 -14
  27. package/dist/types/src/components/EditorToolbar/util.d.ts.map +1 -1
  28. package/dist/types/src/components/EditorToolbar/{view-mode.d.ts → viewMode.d.ts} +4 -5
  29. package/dist/types/src/components/EditorToolbar/viewMode.d.ts.map +1 -0
  30. package/dist/types/src/defaults.d.ts +0 -1
  31. package/dist/types/src/defaults.d.ts.map +1 -1
  32. package/dist/types/src/extensions/annotations.d.ts.map +1 -1
  33. package/dist/types/src/extensions/autocomplete.d.ts.map +1 -1
  34. package/dist/types/src/extensions/automerge/automerge.d.ts.map +1 -1
  35. package/dist/types/src/extensions/automerge/automerge.stories.d.ts.map +1 -1
  36. package/dist/types/src/extensions/automerge/cursor.d.ts.map +1 -1
  37. package/dist/types/src/extensions/automerge/defs.d.ts +1 -1
  38. package/dist/types/src/extensions/automerge/defs.d.ts.map +1 -1
  39. package/dist/types/src/extensions/automerge/sync.d.ts.map +1 -1
  40. package/dist/types/src/extensions/automerge/update-automerge.d.ts +1 -1
  41. package/dist/types/src/extensions/automerge/update-automerge.d.ts.map +1 -1
  42. package/dist/types/src/extensions/automerge/update-codemirror.d.ts +1 -1
  43. package/dist/types/src/extensions/automerge/update-codemirror.d.ts.map +1 -1
  44. package/dist/types/src/extensions/awareness/awareness.d.ts.map +1 -1
  45. package/dist/types/src/extensions/blast.d.ts.map +1 -1
  46. package/dist/types/src/extensions/command/command.d.ts +10 -5
  47. package/dist/types/src/extensions/command/command.d.ts.map +1 -1
  48. package/dist/types/src/extensions/command/hint.d.ts +2 -4
  49. package/dist/types/src/extensions/command/hint.d.ts.map +1 -1
  50. package/dist/types/src/extensions/command/index.d.ts +0 -1
  51. package/dist/types/src/extensions/command/index.d.ts.map +1 -1
  52. package/dist/types/src/extensions/command/menu.d.ts +2 -7
  53. package/dist/types/src/extensions/command/menu.d.ts.map +1 -1
  54. package/dist/types/src/extensions/command/preview.d.ts +12 -0
  55. package/dist/types/src/extensions/command/preview.d.ts.map +1 -0
  56. package/dist/types/src/extensions/command/state.d.ts +11 -9
  57. package/dist/types/src/extensions/command/state.d.ts.map +1 -1
  58. package/dist/types/src/extensions/comments.d.ts +7 -9
  59. package/dist/types/src/extensions/comments.d.ts.map +1 -1
  60. package/dist/types/src/extensions/debug.d.ts.map +1 -1
  61. package/dist/types/src/extensions/dnd.d.ts.map +1 -1
  62. package/dist/types/src/extensions/factories.d.ts.map +1 -1
  63. package/dist/types/src/extensions/folding.d.ts.map +1 -1
  64. package/dist/types/src/extensions/index.d.ts +0 -1
  65. package/dist/types/src/extensions/index.d.ts.map +1 -1
  66. package/dist/types/src/extensions/listener.d.ts.map +1 -1
  67. package/dist/types/src/extensions/markdown/bundle.d.ts.map +1 -1
  68. package/dist/types/src/extensions/markdown/changes.d.ts.map +1 -1
  69. package/dist/types/src/extensions/markdown/debug.d.ts.map +1 -1
  70. package/dist/types/src/extensions/markdown/decorate.d.ts +1 -5
  71. package/dist/types/src/extensions/markdown/decorate.d.ts.map +1 -1
  72. package/dist/types/src/extensions/markdown/formatting.d.ts +3 -3
  73. package/dist/types/src/extensions/markdown/formatting.d.ts.map +1 -1
  74. package/dist/types/src/extensions/markdown/highlight.d.ts.map +1 -1
  75. package/dist/types/src/extensions/markdown/image.d.ts.map +1 -1
  76. package/dist/types/src/extensions/markdown/index.d.ts +0 -1
  77. package/dist/types/src/extensions/markdown/index.d.ts.map +1 -1
  78. package/dist/types/src/extensions/markdown/link.d.ts +1 -4
  79. package/dist/types/src/extensions/markdown/link.d.ts.map +1 -1
  80. package/dist/types/src/extensions/markdown/table.d.ts.map +1 -1
  81. package/dist/types/src/extensions/mention.d.ts.map +1 -1
  82. package/dist/types/src/extensions/modes.d.ts +5 -5
  83. package/dist/types/src/extensions/modes.d.ts.map +1 -1
  84. package/dist/types/src/extensions/selection.d.ts.map +1 -1
  85. package/dist/types/src/extensions/typewriter.d.ts.map +1 -1
  86. package/dist/types/src/fragments.d.ts +3 -0
  87. package/dist/types/src/fragments.d.ts.map +1 -0
  88. package/dist/types/src/hooks/index.d.ts +1 -0
  89. package/dist/types/src/hooks/index.d.ts.map +1 -1
  90. package/dist/types/src/hooks/useActionHandler.d.ts +4 -0
  91. package/dist/types/src/hooks/useActionHandler.d.ts.map +1 -0
  92. package/dist/types/src/hooks/useTextEditor.d.ts +1 -2
  93. package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -1
  94. package/dist/types/src/styles/theme.d.ts.map +1 -1
  95. package/dist/types/src/types.d.ts +0 -5
  96. package/dist/types/src/types.d.ts.map +1 -1
  97. package/dist/types/src/util/cursor.d.ts.map +1 -1
  98. package/dist/types/src/util/debug.d.ts.map +1 -1
  99. package/dist/types/src/util/dom.d.ts.map +1 -1
  100. package/dist/types/src/util/facet.d.ts.map +1 -1
  101. package/dist/types/src/util/react.d.ts +1 -6
  102. package/dist/types/src/util/react.d.ts.map +1 -1
  103. package/dist/types/tsconfig.tsbuildinfo +1 -1
  104. package/package.json +27 -37
  105. package/src/InputMode.stories.tsx +124 -0
  106. package/src/TextEditor.stories.tsx +856 -0
  107. package/src/components/EditorToolbar/EditorToolbar.tsx +34 -33
  108. package/src/components/EditorToolbar/blocks.ts +6 -27
  109. package/src/components/EditorToolbar/comment.ts +4 -11
  110. package/src/components/EditorToolbar/formatting.ts +7 -34
  111. package/src/components/EditorToolbar/headings.ts +8 -9
  112. package/src/components/EditorToolbar/lists.ts +7 -26
  113. package/src/components/EditorToolbar/util.ts +17 -17
  114. package/src/components/EditorToolbar/{view-mode.ts → viewMode.ts} +8 -9
  115. package/src/defaults.ts +3 -5
  116. package/src/extensions/automerge/automerge.stories.tsx +17 -11
  117. package/src/extensions/automerge/automerge.test.tsx +4 -4
  118. package/src/extensions/automerge/automerge.ts +2 -2
  119. package/src/extensions/automerge/defs.ts +2 -1
  120. package/src/extensions/automerge/sync.ts +4 -4
  121. package/src/extensions/automerge/update-automerge.ts +1 -1
  122. package/src/extensions/automerge/update-codemirror.ts +4 -3
  123. package/src/extensions/command/command.ts +27 -9
  124. package/src/extensions/command/hint.ts +30 -33
  125. package/src/extensions/command/index.ts +0 -1
  126. package/src/extensions/command/menu.ts +8 -11
  127. package/src/extensions/command/preview.ts +79 -0
  128. package/src/extensions/command/state.ts +61 -41
  129. package/src/extensions/comments.ts +9 -9
  130. package/src/extensions/folding.tsx +1 -1
  131. package/src/extensions/index.ts +0 -1
  132. package/src/extensions/markdown/changes.ts +2 -3
  133. package/src/extensions/markdown/decorate.ts +10 -12
  134. package/src/extensions/markdown/formatting.ts +6 -6
  135. package/src/extensions/markdown/image.ts +11 -12
  136. package/src/extensions/markdown/index.ts +0 -1
  137. package/src/extensions/markdown/link.ts +24 -33
  138. package/src/extensions/markdown/styles.ts +2 -2
  139. package/src/extensions/modes.ts +6 -5
  140. package/src/fragments.ts +19 -0
  141. package/src/hooks/index.ts +1 -0
  142. package/src/hooks/useActionHandler.ts +12 -0
  143. package/src/hooks/useTextEditor.ts +3 -4
  144. package/src/styles/theme.ts +0 -3
  145. package/src/types.ts +0 -7
  146. package/src/util/react.tsx +2 -20
  147. package/dist/lib/browser/testing/index.mjs +0 -67
  148. package/dist/lib/browser/testing/index.mjs.map +0 -7
  149. package/dist/lib/node/testing/index.cjs +0 -101
  150. package/dist/lib/node/testing/index.cjs.map +0 -7
  151. package/dist/lib/node-esm/testing/index.mjs +0 -69
  152. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  153. package/dist/types/src/components/EditorToolbar/EditorToolbar.stories.d.ts.map +0 -1
  154. package/dist/types/src/components/EditorToolbar/image.d.ts +0 -16
  155. package/dist/types/src/components/EditorToolbar/image.d.ts.map +0 -1
  156. package/dist/types/src/components/EditorToolbar/search.d.ts +0 -17
  157. package/dist/types/src/components/EditorToolbar/search.d.ts.map +0 -1
  158. package/dist/types/src/components/EditorToolbar/view-mode.d.ts.map +0 -1
  159. package/dist/types/src/extensions/command/action.d.ts +0 -17
  160. package/dist/types/src/extensions/command/action.d.ts.map +0 -1
  161. package/dist/types/src/extensions/markdown/outliner.d.ts +0 -12
  162. package/dist/types/src/extensions/markdown/outliner.d.ts.map +0 -1
  163. package/dist/types/src/extensions/preview/index.d.ts +0 -2
  164. package/dist/types/src/extensions/preview/index.d.ts.map +0 -1
  165. package/dist/types/src/extensions/preview/preview.d.ts +0 -39
  166. package/dist/types/src/extensions/preview/preview.d.ts.map +0 -1
  167. package/dist/types/src/stories/TextEditorBasic.stories.d.ts.map +0 -1
  168. package/dist/types/src/stories/TextEditorComments.stories.d.ts +0 -13
  169. package/dist/types/src/stories/TextEditorComments.stories.d.ts.map +0 -1
  170. package/dist/types/src/stories/TextEditorPreview.stories.d.ts +0 -13
  171. package/dist/types/src/stories/TextEditorPreview.stories.d.ts.map +0 -1
  172. package/dist/types/src/stories/TextEditorSpecial.stories.d.ts +0 -19
  173. package/dist/types/src/stories/TextEditorSpecial.stories.d.ts.map +0 -1
  174. package/dist/types/src/stories/story-utils.d.ts +0 -53
  175. package/dist/types/src/stories/story-utils.d.ts.map +0 -1
  176. package/dist/types/src/testing/RefPopover.d.ts +0 -21
  177. package/dist/types/src/testing/RefPopover.d.ts.map +0 -1
  178. package/dist/types/src/testing/index.d.ts +0 -2
  179. package/dist/types/src/testing/index.d.ts.map +0 -1
  180. package/src/components/EditorToolbar/EditorToolbar.stories.tsx +0 -90
  181. package/src/components/EditorToolbar/image.ts +0 -16
  182. package/src/components/EditorToolbar/search.ts +0 -19
  183. package/src/extensions/command/action.ts +0 -49
  184. package/src/extensions/markdown/outliner.ts +0 -235
  185. package/src/extensions/preview/index.ts +0 -5
  186. package/src/extensions/preview/preview.ts +0 -271
  187. package/src/stories/TextEditorBasic.stories.tsx +0 -333
  188. package/src/stories/TextEditorComments.stories.tsx +0 -99
  189. package/src/stories/TextEditorPreview.stories.tsx +0 -239
  190. package/src/stories/TextEditorSpecial.stories.tsx +0 -107
  191. package/src/stories/story-utils.tsx +0 -327
  192. package/src/testing/RefPopover.tsx +0 -74
  193. package/src/testing/index.ts +0 -5
@@ -15,7 +15,6 @@ import { image } from './image';
15
15
  import { formattingStyles, bulletListIndentationWidth, orderedListIndentationWidth } from './styles';
16
16
  import { table } from './table';
17
17
  import { theme, type HeadingLevel } from '../../styles';
18
- import { type RenderCallback } from '../../types';
19
18
  import { wrapWithCatch } from '../../util';
20
19
 
21
20
  /**
@@ -46,7 +45,7 @@ class HorizontalRuleWidget extends WidgetType {
46
45
  class LinkButton extends WidgetType {
47
46
  constructor(
48
47
  private readonly url: string,
49
- private readonly render: RenderCallback<{ url: string }>,
48
+ private readonly render: (el: HTMLElement, url: string) => void,
50
49
  ) {
51
50
  super();
52
51
  }
@@ -58,7 +57,7 @@ class LinkButton extends WidgetType {
58
57
  // TODO(burdon): Create icon and link directly without react?
59
58
  override toDOM(view: EditorView) {
60
59
  const el = document.createElement('span');
61
- this.render(el, { url: this.url }, view);
60
+ this.render(el, this.url);
62
61
  return el;
63
62
  }
64
63
  }
@@ -129,10 +128,10 @@ class TextWidget extends WidgetType {
129
128
  }
130
129
 
131
130
  const hide = Decoration.replace({});
132
- const blockQuote = Decoration.line({ class: 'cm-blockquote' });
133
- const fencedCodeLine = Decoration.line({ class: 'cm-code cm-codeblock-line' });
134
- const fencedCodeLineFirst = Decoration.line({ class: mx('cm-code cm-codeblock-line', 'cm-codeblock-start') });
135
- const fencedCodeLineLast = Decoration.line({ class: mx('cm-code cm-codeblock-line', 'cm-codeblock-end') });
131
+ const blockQuote = Decoration.line({ class: mx('cm-blockquote') });
132
+ const fencedCodeLine = Decoration.line({ class: mx('cm-code cm-codeblock-line') });
133
+ const fencedCodeLineFirst = Decoration.line({ class: mx('cm-code cm-codeblock-line', 'cm-codeblock-first') });
134
+ const fencedCodeLineLast = Decoration.line({ class: mx('cm-code cm-codeblock-line', 'cm-codeblock-last') });
136
135
  const commentBlockLine = fencedCodeLine;
137
136
  const commentBlockLineFirst = fencedCodeLineFirst;
138
137
  const commentBlockLineLast = fencedCodeLineLast;
@@ -277,7 +276,7 @@ const buildDecorations = (view: EditorView, options: DecorateOptions, focus: boo
277
276
  // Set indentation.
278
277
  const list = getCurrentListLevel();
279
278
  const width = list.type === 'OrderedList' ? orderedListIndentationWidth : bulletListIndentationWidth;
280
- const offset = (options?.listPaddingLeft ?? 0) + ((list.level ?? 0) + 1) * width;
279
+ const offset = ((list.level ?? 0) + 1) * width;
281
280
  if (node.from === line.to - 1) {
282
281
  // Abort if only the hyphen is typed.
283
282
  return false;
@@ -285,6 +284,7 @@ const buildDecorations = (view: EditorView, options: DecorateOptions, focus: boo
285
284
 
286
285
  // Add line decoration for the continuation indent.
287
286
  // TODO(burdon): Bug if indentation is more than one indentation unit (e.g., 4 spaces) from the previous line.
287
+
288
288
  deco.add(
289
289
  line.from,
290
290
  line.from,
@@ -405,7 +405,7 @@ const buildDecorations = (view: EditorView, options: DecorateOptions, focus: boo
405
405
  }
406
406
 
407
407
  const first = block.from <= node.from;
408
- const last = block.to >= node.to && /```$/.test(state.doc.sliceString(block.from, block.to));
408
+ const last = block.to >= node.to && /^(\s>)*```$/.test(state.doc.sliceString(block.from, block.to));
409
409
  deco.add(block.from, block.from, first ? fencedCodeLineFirst : last ? fencedCodeLineLast : fencedCodeLine);
410
410
 
411
411
  const editing = editingRange(state, node, focus);
@@ -519,9 +519,7 @@ export interface DecorateOptions {
519
519
  */
520
520
  selectionChangeDelay?: number;
521
521
  numberedHeadings?: { from: number; to?: number };
522
- renderLinkButton?: RenderCallback<{ url: string }>;
523
- // TODO(burdon): Additional padding for each line.
524
- listPaddingLeft?: number;
522
+ renderLinkButton?: (el: Element, url: string) => void;
525
523
  }
526
524
 
527
525
  export const decorateMarkdown = (options: DecorateOptions = {}) => {
@@ -5,19 +5,19 @@
5
5
  import { snippet } from '@codemirror/autocomplete';
6
6
  import { syntaxTree } from '@codemirror/language';
7
7
  import {
8
- type ChangeSpec,
9
- EditorSelection,
10
8
  type Extension,
11
- type EditorState,
12
- type Line,
13
9
  type StateCommand,
10
+ type EditorState,
11
+ type ChangeSpec,
14
12
  type Text,
13
+ EditorSelection,
14
+ type Line,
15
15
  } from '@codemirror/state';
16
16
  import { EditorView, keymap } from '@codemirror/view';
17
17
  import { type SyntaxNodeRef, type SyntaxNode } from '@lezer/common';
18
18
  import { useMemo } from 'react';
19
19
 
20
- import { type Live } from '@dxos/live-object';
20
+ import { type ReactiveObject } from '@dxos/live-object';
21
21
 
22
22
  import { type EditorToolbarState } from '../../components';
23
23
 
@@ -1250,7 +1250,7 @@ export const getFormatting = (state: EditorState): Formatting => {
1250
1250
  /**
1251
1251
  * Hook provides an extension to compute the current formatting state.
1252
1252
  */
1253
- export const useFormattingState = (state: Live<EditorToolbarState>): Extension => {
1253
+ export const useFormattingState = (state: ReactiveObject<EditorToolbarState>): Extension => {
1254
1254
  return useMemo(
1255
1255
  () =>
1256
1256
  EditorView.updateListener.of((update) => {
@@ -51,6 +51,16 @@ export const image = (_options: ImageOptions = {}): Extension => {
51
51
  ];
52
52
  };
53
53
 
54
+ const preloaded = new Set<string>();
55
+
56
+ const preloadImage = (url: string) => {
57
+ if (!preloaded.has(url)) {
58
+ const img = document.createElement('img');
59
+ img.src = url;
60
+ preloaded.add(url);
61
+ }
62
+ };
63
+
54
64
  const buildDecorations = (from: number, to: number, state: EditorState) => {
55
65
  const decorations: Range<Decoration>[] = [];
56
66
  const cursor = state.selection.main.head;
@@ -84,23 +94,13 @@ const buildDecorations = (from: number, to: number, state: EditorState) => {
84
94
  return decorations;
85
95
  };
86
96
 
87
- const preloaded = new Set<string>();
88
-
89
- const preloadImage = (url: string) => {
90
- if (!preloaded.has(url)) {
91
- const img = document.createElement('img');
92
- img.src = url;
93
- preloaded.add(url);
94
- }
95
- };
96
-
97
97
  class ImageWidget extends WidgetType {
98
98
  constructor(readonly _url: string) {
99
99
  super();
100
100
  }
101
101
 
102
102
  override eq(other: this) {
103
- return this._url === other._url;
103
+ return this._url === (other as any as ImageWidget)._url;
104
104
  }
105
105
 
106
106
  override toDOM(view: EditorView) {
@@ -113,7 +113,6 @@ class ImageWidget extends WidgetType {
113
113
  } else {
114
114
  img.classList.add('cm-loaded-image');
115
115
  }
116
-
117
116
  return img;
118
117
  }
119
118
  }
@@ -10,5 +10,4 @@ export * from './formatting';
10
10
  export * from './highlight';
11
11
  export * from './image';
12
12
  export * from './link';
13
- export * from './outliner';
14
13
  export * from './table';
@@ -9,39 +9,30 @@ import { type SyntaxNode } from '@lezer/common';
9
9
 
10
10
  import { tooltipContent } from '@dxos/react-ui-theme';
11
11
 
12
- import { type RenderCallback } from '../../types';
12
+ export const linkTooltip = (render: (el: HTMLElement, url: string) => void) => {
13
+ return hoverTooltip((view, pos, side) => {
14
+ const syntax = syntaxTree(view.state).resolveInner(pos, side);
15
+ let link = null;
16
+ for (let i = 0, node: SyntaxNode | null = syntax; !link && node && i < 5; node = node.parent, i++) {
17
+ link = node.name === 'Link' ? node : null;
18
+ }
13
19
 
14
- export const linkTooltip = (renderTooltip: RenderCallback<{ url: string }>) => {
15
- return hoverTooltip(
16
- (view, pos, side) => {
17
- const syntax = syntaxTree(view.state).resolveInner(pos, side);
18
- let link = null;
19
- for (let i = 0, node: SyntaxNode | null = syntax; !link && node && i < 5; node = node.parent, i++) {
20
- link = node.name === 'Link' ? node : null;
21
- }
20
+ const url = link && link.getChild('URL');
21
+ if (!url || !link) {
22
+ return null;
23
+ }
22
24
 
23
- const url = link && link.getChild('URL');
24
- if (!url || !link) {
25
- return null;
26
- }
27
-
28
- const urlText = view.state.sliceDoc(url.from, url.to);
29
- return {
30
- pos: link.from,
31
- end: link.to,
32
- // NOTE: Forcing above causes the tooltip to flicker.
33
- // above: true,
34
- create: () => {
35
- const el = document.createElement('div');
36
- el.className = tooltipContent({});
37
- renderTooltip(el, { url: urlText }, view);
38
- return { dom: el, offset: { x: 0, y: 4 } };
39
- },
40
- };
41
- },
42
- {
43
- // NOTE: 0 = default of 300ms.
44
- hoverTime: 1,
45
- },
46
- );
25
+ const urlText = view.state.sliceDoc(url.from, url.to);
26
+ return {
27
+ pos: link.from,
28
+ end: link.to,
29
+ above: true,
30
+ create: () => {
31
+ const el = document.createElement('div');
32
+ el.className = tooltipContent({}, 'pli-2 plb-1');
33
+ render(el, urlText);
34
+ return { dom: el, offset: { x: 0, y: 4 } };
35
+ },
36
+ };
37
+ });
47
38
  };
@@ -59,11 +59,11 @@ export const formattingStyles = EditorView.theme({
59
59
  background: 'var(--dx-cmCodeblock)',
60
60
  paddingInline: '1rem !important',
61
61
  },
62
- '& .cm-codeblock-start': {
62
+ '& .cm-codeblock-first': {
63
63
  borderTopLeftRadius: '.25rem',
64
64
  borderTopRightRadius: '.25rem',
65
65
  },
66
- '& .cm-codeblock-end': {
66
+ '& .cm-codeblock-last': {
67
67
  borderBottomLeftRadius: '.25rem',
68
68
  borderBottomRightRadius: '.25rem',
69
69
  },
@@ -6,17 +6,18 @@ import { type Extension } from '@codemirror/state';
6
6
  import { keymap } from '@codemirror/view';
7
7
  import { vim } from '@replit/codemirror-vim';
8
8
  import { vscodeKeymap } from '@replit/codemirror-vscode-keymap';
9
- import { Schema } from 'effect';
9
+
10
+ import { S } from '@dxos/echo-schema';
10
11
 
11
12
  import { singleValueFacet } from '../util';
12
13
 
13
14
  export const EditorViewModes = ['preview', 'readonly', 'source'] as const;
14
- export const EditorViewMode = Schema.Union(...EditorViewModes.map((mode) => Schema.Literal(mode)));
15
- export type EditorViewMode = Schema.Schema.Type<typeof EditorViewMode>;
15
+ export const EditorViewMode = S.Union(...EditorViewModes.map((mode) => S.Literal(mode)));
16
+ export type EditorViewMode = S.Schema.Type<typeof EditorViewMode>;
16
17
 
17
18
  export const EditorInputModes = ['default', 'vim', 'vscode'] as const;
18
- export const EditorInputMode = Schema.Union(...EditorInputModes.map((mode) => Schema.Literal(mode)));
19
- export type EditorInputMode = Schema.Schema.Type<typeof EditorInputMode>;
19
+ export const EditorInputMode = S.Union(...EditorInputModes.map((mode) => S.Literal(mode)));
20
+ export type EditorInputMode = S.Schema.Type<typeof EditorInputMode>;
20
21
 
21
22
  export type EditorInputConfig = {
22
23
  type?: string;
@@ -0,0 +1,19 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { mx } from '@dxos/react-ui-theme';
6
+
7
+ // TODO(burdon): Move this to a common plugin.
8
+
9
+ export const stackItemContentEditorClassNames = (role?: string) =>
10
+ mx(
11
+ 'attention-surface dx-focus-ring-inset data-[toolbar=disabled]:pbs-2',
12
+ role === 'section' ? '[&_.cm-scroller]:overflow-hidden [&_.cm-scroller]:min-bs-24' : 'min-bs-0',
13
+ );
14
+
15
+ export const stackItemContentToolbarClassNames = (role?: string) =>
16
+ mx(
17
+ 'attention-surface is-full border-be !border-separator',
18
+ role === 'section' && 'sticky block-start-0 z-[1] -mbe-px min-is-0',
19
+ );
@@ -2,4 +2,5 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
+ export * from './useActionHandler';
5
6
  export * from './useTextEditor';
@@ -0,0 +1,12 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import { type EditorView } from '@codemirror/view';
6
+ import { useCallback } from 'react';
7
+
8
+ import { type EditorAction, processEditorPayload } from '../extensions';
9
+
10
+ export const useActionHandler = (view?: EditorView | null) => {
11
+ return useCallback((action: EditorAction) => view && processEditorPayload(view, action.properties), [view]);
12
+ };
@@ -2,7 +2,7 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import { EditorState, type EditorStateConfig, type Text } from '@codemirror/state';
5
+ import { EditorState, type EditorStateConfig } from '@codemirror/state';
6
6
  import { EditorView } from '@codemirror/view';
7
7
  import { useFocusableGroup, type TabsterTypes } from '@fluentui/react-tabster';
8
8
  import {
@@ -43,7 +43,6 @@ export type CursorInfo = {
43
43
 
44
44
  export type UseTextEditorProps = Pick<EditorStateConfig, 'extensions'> & {
45
45
  id?: string;
46
- doc?: Text;
47
46
  initialValue?: string;
48
47
  className?: string;
49
48
  autoFocus?: boolean;
@@ -62,7 +61,7 @@ export const useTextEditor = (
62
61
  props: MaybeProvider<UseTextEditorProps> = {},
63
62
  deps: DependencyList = [],
64
63
  ): UseTextEditor => {
65
- const { id, doc, initialValue, extensions, autoFocus, scrollTo, selection, moveToEndOfLine, debug } =
64
+ const { id, initialValue, extensions, autoFocus, scrollTo, selection, moveToEndOfLine, debug } =
66
65
  useMemo<UseTextEditorProps>(() => getProviderValue(props), deps ?? []);
67
66
 
68
67
  // NOTE: Increments by 2 in strict mode.
@@ -88,7 +87,7 @@ export const useTextEditor = (
88
87
 
89
88
  // https://codemirror.net/docs/ref/#state.EditorStateConfig
90
89
  const state = EditorState.create({
91
- doc: doc ?? initialValue,
90
+ doc: initialValue,
92
91
  // selection: initialSelection,
93
92
  extensions: [
94
93
  id && documentId.of(id),
@@ -119,9 +119,6 @@ export const defaultTheme: ThemeStyles = {
119
119
  '.cm-selectionBackground': {
120
120
  background: 'var(--dx-cmSelection)',
121
121
  },
122
- '&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground': {
123
- background: 'var(--dx-cmFocusedSelection)',
124
- },
125
122
 
126
123
  /**
127
124
  * Search.
package/src/types.ts CHANGED
@@ -2,8 +2,6 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import { type EditorView } from '@codemirror/view';
6
-
7
5
  // Runtime data structure.
8
6
  export type Range = {
9
7
  from: number;
@@ -16,8 +14,3 @@ export type Comment = {
16
14
  id: string;
17
15
  cursor?: string;
18
16
  };
19
-
20
- /**
21
- * Callback that renders into a DOM element within the editor.
22
- */
23
- export type RenderCallback<Props extends object> = (el: HTMLElement, props: Props, view: EditorView) => void;
@@ -2,14 +2,12 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import React, { type FC, type ReactNode } from 'react';
5
+ import React, { type ReactNode } from 'react';
6
6
  import { createRoot } from 'react-dom/client';
7
7
 
8
- import { ThemeProvider, Tooltip } from '@dxos/react-ui';
8
+ import { ThemeProvider } from '@dxos/react-ui';
9
9
  import { defaultTx } from '@dxos/react-ui-theme';
10
10
 
11
- import { type RenderCallback } from '../types';
12
-
13
11
  // TODO(burdon): Factor out.
14
12
 
15
13
  export type ElementOptions = {
@@ -34,19 +32,3 @@ export const renderRoot = <T extends Element>(root: T, node: ReactNode): T => {
34
32
  createRoot(root).render(<ThemeProvider tx={defaultTx}>{node}</ThemeProvider>);
35
33
  return root;
36
34
  };
37
-
38
- /**
39
- * Utility to create a renderer for a React component.
40
- */
41
- export const createRenderer =
42
- <Props extends object>(Component: FC<Props>): RenderCallback<Props> =>
43
- (el, props) => {
44
- renderRoot(
45
- el,
46
- <ThemeProvider tx={defaultTx}>
47
- <Tooltip.Provider>
48
- <Component {...props} />
49
- </Tooltip.Provider>
50
- </ThemeProvider>,
51
- );
52
- };
@@ -1,67 +0,0 @@
1
- // packages/ui/react-ui-editor/src/testing/RefPopover.tsx
2
- import { createContext } from "@radix-ui/react-context";
3
- import React, { useRef, useState, useEffect, useCallback } from "react";
4
- import { addEventListener } from "@dxos/async";
5
- import { Popover } from "@dxos/react-ui";
6
- var customEventOptions = {
7
- capture: true,
8
- passive: false
9
- };
10
- var REF_POPOVER = "RefPopover";
11
- var [RefPopoverContextProvider, useRefPopover] = createContext(REF_POPOVER, {});
12
- var RefPopoverProvider = ({ children, onLookup }) => {
13
- const trigger = useRef(null);
14
- const [value, setValue] = useState({});
15
- const [rootRef, setRootRef] = useState(null);
16
- const [open, setOpen] = useState(false);
17
- const handleDxRefTagActivate = useCallback((event) => {
18
- const { ref, label, trigger: dxTrigger } = event;
19
- setValue((value2) => ({
20
- ...value2,
21
- link: {
22
- label,
23
- ref
24
- },
25
- pending: true
26
- }));
27
- trigger.current = dxTrigger;
28
- queueMicrotask(() => setOpen(true));
29
- void onLookup?.({
30
- label,
31
- ref
32
- }).then((target) => setValue((value2) => ({
33
- ...value2,
34
- target: target ?? void 0,
35
- pending: false
36
- })));
37
- }, [
38
- onLookup
39
- ]);
40
- useEffect(() => {
41
- return rootRef ? addEventListener(rootRef, "dx-ref-tag-activate", handleDxRefTagActivate, customEventOptions) : void 0;
42
- }, [
43
- rootRef
44
- ]);
45
- return /* @__PURE__ */ React.createElement(RefPopoverContextProvider, {
46
- pending: value.pending,
47
- link: value.link,
48
- target: value.target
49
- }, /* @__PURE__ */ React.createElement(Popover.Root, {
50
- open,
51
- onOpenChange: setOpen
52
- }, /* @__PURE__ */ React.createElement(Popover.VirtualTrigger, {
53
- virtualRef: trigger
54
- }), /* @__PURE__ */ React.createElement("div", {
55
- role: "none",
56
- className: "contents",
57
- ref: setRootRef
58
- }, children)));
59
- };
60
- var RefPopover = {
61
- Provider: RefPopoverProvider
62
- };
63
- export {
64
- RefPopover,
65
- useRefPopover
66
- };
67
- //# sourceMappingURL=index.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/testing/RefPopover.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { createContext } from '@radix-ui/react-context';\nimport React, { type PropsWithChildren, useRef, useState, useEffect, useCallback, type RefObject } from 'react';\n\nimport { addEventListener } from '@dxos/async';\nimport { type DxRefTag, type DxRefTagActivate } from '@dxos/lit-ui';\nimport { Popover } from '@dxos/react-ui';\n\nimport { type PreviewLinkRef, type PreviewLinkTarget, type PreviewLookup } from '../extensions';\n\nconst customEventOptions = { capture: true, passive: false };\n\n// Create a context for the dxn value.\ntype RefPopoverValue = Partial<{ link: PreviewLinkRef; target: PreviewLinkTarget; pending: boolean }>;\nconst REF_POPOVER = 'RefPopover';\nconst [RefPopoverContextProvider, useRefPopover] = createContext<RefPopoverValue>(REF_POPOVER, {});\n\ntype RefPopoverProviderProps = PropsWithChildren<{ onLookup?: PreviewLookup }>;\n\nconst RefPopoverProvider = ({ children, onLookup }: RefPopoverProviderProps) => {\n const trigger = useRef<DxRefTag | null>(null);\n const [value, setValue] = useState<RefPopoverValue>({});\n const [rootRef, setRootRef] = useState<HTMLDivElement | null>(null);\n const [open, setOpen] = useState(false);\n\n const handleDxRefTagActivate = useCallback(\n (event: DxRefTagActivate) => {\n const { ref, label, trigger: dxTrigger } = event;\n setValue((value) => ({\n ...value,\n link: { label, ref },\n pending: true,\n }));\n trigger.current = dxTrigger;\n queueMicrotask(() => setOpen(true));\n void onLookup?.({ label, ref }).then((target) =>\n setValue((value) => ({\n ...value,\n target: target ?? undefined,\n pending: false,\n })),\n );\n },\n [onLookup],\n );\n\n useEffect(() => {\n return rootRef\n ? addEventListener(rootRef, 'dx-ref-tag-activate', handleDxRefTagActivate, customEventOptions)\n : undefined;\n }, [rootRef]);\n\n return (\n <RefPopoverContextProvider pending={value.pending} link={value.link} target={value.target}>\n <Popover.Root open={open} onOpenChange={setOpen}>\n <Popover.VirtualTrigger virtualRef={trigger as unknown as RefObject<HTMLButtonElement>} />\n <div role='none' className='contents' ref={setRootRef}>\n {children}\n </div>\n </Popover.Root>\n </RefPopoverContextProvider>\n );\n};\n\nexport const RefPopover = {\n Provider: RefPopoverProvider,\n};\n\nexport { useRefPopover };\n\nexport type { RefPopoverProviderProps, RefPopoverValue };\n"],
5
- "mappings": ";AAIA,SAASA,qBAAqB;AAC9B,OAAOC,SAAiCC,QAAQC,UAAUC,WAAWC,mBAAmC;AAExG,SAASC,wBAAwB;AAEjC,SAASC,eAAe;AAIxB,IAAMC,qBAAqB;EAAEC,SAAS;EAAMC,SAAS;AAAM;AAI3D,IAAMC,cAAc;AACpB,IAAM,CAACC,2BAA2BC,aAAAA,IAAiBC,cAA+BH,aAAa,CAAC,CAAA;AAIhG,IAAMI,qBAAqB,CAAC,EAAEC,UAAUC,SAAQ,MAA2B;AACzE,QAAMC,UAAUC,OAAwB,IAAA;AACxC,QAAM,CAACC,OAAOC,QAAAA,IAAYC,SAA0B,CAAC,CAAA;AACrD,QAAM,CAACC,SAASC,UAAAA,IAAcF,SAAgC,IAAA;AAC9D,QAAM,CAACG,MAAMC,OAAAA,IAAWJ,SAAS,KAAA;AAEjC,QAAMK,yBAAyBC,YAC7B,CAACC,UAAAA;AACC,UAAM,EAAEC,KAAKC,OAAOb,SAASc,UAAS,IAAKH;AAC3CR,aAAS,CAACD,YAAW;MACnB,GAAGA;MACHa,MAAM;QAAEF;QAAOD;MAAI;MACnBI,SAAS;IACX,EAAA;AACAhB,YAAQiB,UAAUH;AAClBI,mBAAe,MAAMV,QAAQ,IAAA,CAAA;AAC7B,SAAKT,WAAW;MAAEc;MAAOD;IAAI,CAAA,EAAGO,KAAK,CAACC,WACpCjB,SAAS,CAACD,YAAW;MACnB,GAAGA;MACHkB,QAAQA,UAAUC;MAClBL,SAAS;IACX,EAAA,CAAA;EAEJ,GACA;IAACjB;GAAS;AAGZuB,YAAU,MAAA;AACR,WAAOjB,UACHkB,iBAAiBlB,SAAS,uBAAuBI,wBAAwBnB,kBAAAA,IACzE+B;EACN,GAAG;IAAChB;GAAQ;AAEZ,SACE,sBAAA,cAACX,2BAAAA;IAA0BsB,SAASd,MAAMc;IAASD,MAAMb,MAAMa;IAAMK,QAAQlB,MAAMkB;KACjF,sBAAA,cAACI,QAAQC,MAAI;IAAClB;IAAYmB,cAAclB;KACtC,sBAAA,cAACgB,QAAQG,gBAAc;IAACC,YAAY5B;MACpC,sBAAA,cAAC6B,OAAAA;IAAIC,MAAK;IAAOC,WAAU;IAAWnB,KAAKN;KACxCR,QAAAA,CAAAA,CAAAA;AAKX;AAEO,IAAMkC,aAAa;EACxBC,UAAUpC;AACZ;",
6
- "names": ["createContext", "React", "useRef", "useState", "useEffect", "useCallback", "addEventListener", "Popover", "customEventOptions", "capture", "passive", "REF_POPOVER", "RefPopoverContextProvider", "useRefPopover", "createContext", "RefPopoverProvider", "children", "onLookup", "trigger", "useRef", "value", "setValue", "useState", "rootRef", "setRootRef", "open", "setOpen", "handleDxRefTagActivate", "useCallback", "event", "ref", "label", "dxTrigger", "link", "pending", "current", "queueMicrotask", "then", "target", "undefined", "useEffect", "addEventListener", "Popover", "Root", "onOpenChange", "VirtualTrigger", "virtualRef", "div", "role", "className", "RefPopover", "Provider"]
7
- }
@@ -1,101 +0,0 @@
1
- "use strict";
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __export = (target, all) => {
9
- for (var name in all)
10
- __defProp(target, name, { get: all[name], enumerable: true });
11
- };
12
- var __copyProps = (to, from, except, desc) => {
13
- if (from && typeof from === "object" || typeof from === "function") {
14
- for (let key of __getOwnPropNames(from))
15
- if (!__hasOwnProp.call(to, key) && key !== except)
16
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
- }
18
- return to;
19
- };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- // If the importer is in node compatibility mode or this is not an ESM
22
- // file that has been converted to a CommonJS file using a Babel-
23
- // compatible transform (i.e. "__esModule" has not been set), then set
24
- // "default" to the CommonJS "module.exports" for node compatibility.
25
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
- mod
27
- ));
28
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var testing_exports = {};
30
- __export(testing_exports, {
31
- RefPopover: () => RefPopover,
32
- useRefPopover: () => useRefPopover
33
- });
34
- module.exports = __toCommonJS(testing_exports);
35
- var import_react_context = require("@radix-ui/react-context");
36
- var import_react = __toESM(require("react"));
37
- var import_async = require("@dxos/async");
38
- var import_react_ui = require("@dxos/react-ui");
39
- var customEventOptions = {
40
- capture: true,
41
- passive: false
42
- };
43
- var REF_POPOVER = "RefPopover";
44
- var [RefPopoverContextProvider, useRefPopover] = (0, import_react_context.createContext)(REF_POPOVER, {});
45
- var RefPopoverProvider = ({ children, onLookup }) => {
46
- const trigger = (0, import_react.useRef)(null);
47
- const [value, setValue] = (0, import_react.useState)({});
48
- const [rootRef, setRootRef] = (0, import_react.useState)(null);
49
- const [open, setOpen] = (0, import_react.useState)(false);
50
- const handleDxRefTagActivate = (0, import_react.useCallback)((event) => {
51
- const { ref, label, trigger: dxTrigger } = event;
52
- setValue((value2) => ({
53
- ...value2,
54
- link: {
55
- label,
56
- ref
57
- },
58
- pending: true
59
- }));
60
- trigger.current = dxTrigger;
61
- queueMicrotask(() => setOpen(true));
62
- void onLookup?.({
63
- label,
64
- ref
65
- }).then((target) => setValue((value2) => ({
66
- ...value2,
67
- target: target ?? void 0,
68
- pending: false
69
- })));
70
- }, [
71
- onLookup
72
- ]);
73
- (0, import_react.useEffect)(() => {
74
- return rootRef ? (0, import_async.addEventListener)(rootRef, "dx-ref-tag-activate", handleDxRefTagActivate, customEventOptions) : void 0;
75
- }, [
76
- rootRef
77
- ]);
78
- return /* @__PURE__ */ import_react.default.createElement(RefPopoverContextProvider, {
79
- pending: value.pending,
80
- link: value.link,
81
- target: value.target
82
- }, /* @__PURE__ */ import_react.default.createElement(import_react_ui.Popover.Root, {
83
- open,
84
- onOpenChange: setOpen
85
- }, /* @__PURE__ */ import_react.default.createElement(import_react_ui.Popover.VirtualTrigger, {
86
- virtualRef: trigger
87
- }), /* @__PURE__ */ import_react.default.createElement("div", {
88
- role: "none",
89
- className: "contents",
90
- ref: setRootRef
91
- }, children)));
92
- };
93
- var RefPopover = {
94
- Provider: RefPopoverProvider
95
- };
96
- // Annotate the CommonJS export names for ESM import in node:
97
- 0 && (module.exports = {
98
- RefPopover,
99
- useRefPopover
100
- });
101
- //# sourceMappingURL=index.cjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/testing/RefPopover.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { createContext } from '@radix-ui/react-context';\nimport React, { type PropsWithChildren, useRef, useState, useEffect, useCallback, type RefObject } from 'react';\n\nimport { addEventListener } from '@dxos/async';\nimport { type DxRefTag, type DxRefTagActivate } from '@dxos/lit-ui';\nimport { Popover } from '@dxos/react-ui';\n\nimport { type PreviewLinkRef, type PreviewLinkTarget, type PreviewLookup } from '../extensions';\n\nconst customEventOptions = { capture: true, passive: false };\n\n// Create a context for the dxn value.\ntype RefPopoverValue = Partial<{ link: PreviewLinkRef; target: PreviewLinkTarget; pending: boolean }>;\nconst REF_POPOVER = 'RefPopover';\nconst [RefPopoverContextProvider, useRefPopover] = createContext<RefPopoverValue>(REF_POPOVER, {});\n\ntype RefPopoverProviderProps = PropsWithChildren<{ onLookup?: PreviewLookup }>;\n\nconst RefPopoverProvider = ({ children, onLookup }: RefPopoverProviderProps) => {\n const trigger = useRef<DxRefTag | null>(null);\n const [value, setValue] = useState<RefPopoverValue>({});\n const [rootRef, setRootRef] = useState<HTMLDivElement | null>(null);\n const [open, setOpen] = useState(false);\n\n const handleDxRefTagActivate = useCallback(\n (event: DxRefTagActivate) => {\n const { ref, label, trigger: dxTrigger } = event;\n setValue((value) => ({\n ...value,\n link: { label, ref },\n pending: true,\n }));\n trigger.current = dxTrigger;\n queueMicrotask(() => setOpen(true));\n void onLookup?.({ label, ref }).then((target) =>\n setValue((value) => ({\n ...value,\n target: target ?? undefined,\n pending: false,\n })),\n );\n },\n [onLookup],\n );\n\n useEffect(() => {\n return rootRef\n ? addEventListener(rootRef, 'dx-ref-tag-activate', handleDxRefTagActivate, customEventOptions)\n : undefined;\n }, [rootRef]);\n\n return (\n <RefPopoverContextProvider pending={value.pending} link={value.link} target={value.target}>\n <Popover.Root open={open} onOpenChange={setOpen}>\n <Popover.VirtualTrigger virtualRef={trigger as unknown as RefObject<HTMLButtonElement>} />\n <div role='none' className='contents' ref={setRootRef}>\n {children}\n </div>\n </Popover.Root>\n </RefPopoverContextProvider>\n );\n};\n\nexport const RefPopover = {\n Provider: RefPopoverProvider,\n};\n\nexport { useRefPopover };\n\nexport type { RefPopoverProviderProps, RefPopoverValue };\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,2BAA8B;AAC9B,mBAAwG;AAExG,mBAAiC;AAEjC,sBAAwB;AAIxB,IAAMA,qBAAqB;EAAEC,SAAS;EAAMC,SAAS;AAAM;AAI3D,IAAMC,cAAc;AACpB,IAAM,CAACC,2BAA2BC,aAAAA,QAAiBC,oCAA+BH,aAAa,CAAC,CAAA;AAIhG,IAAMI,qBAAqB,CAAC,EAAEC,UAAUC,SAAQ,MAA2B;AACzE,QAAMC,cAAUC,qBAAwB,IAAA;AACxC,QAAM,CAACC,OAAOC,QAAAA,QAAYC,uBAA0B,CAAC,CAAA;AACrD,QAAM,CAACC,SAASC,UAAAA,QAAcF,uBAAgC,IAAA;AAC9D,QAAM,CAACG,MAAMC,OAAAA,QAAWJ,uBAAS,KAAA;AAEjC,QAAMK,6BAAyBC,0BAC7B,CAACC,UAAAA;AACC,UAAM,EAAEC,KAAKC,OAAOb,SAASc,UAAS,IAAKH;AAC3CR,aAAS,CAACD,YAAW;MACnB,GAAGA;MACHa,MAAM;QAAEF;QAAOD;MAAI;MACnBI,SAAS;IACX,EAAA;AACAhB,YAAQiB,UAAUH;AAClBI,mBAAe,MAAMV,QAAQ,IAAA,CAAA;AAC7B,SAAKT,WAAW;MAAEc;MAAOD;IAAI,CAAA,EAAGO,KAAK,CAACC,WACpCjB,SAAS,CAACD,YAAW;MACnB,GAAGA;MACHkB,QAAQA,UAAUC;MAClBL,SAAS;IACX,EAAA,CAAA;EAEJ,GACA;IAACjB;GAAS;AAGZuB,8BAAU,MAAA;AACR,WAAOjB,cACHkB,+BAAiBlB,SAAS,uBAAuBI,wBAAwBnB,kBAAAA,IACzE+B;EACN,GAAG;IAAChB;GAAQ;AAEZ,SACE,6BAAAmB,QAAA,cAAC9B,2BAAAA;IAA0BsB,SAASd,MAAMc;IAASD,MAAMb,MAAMa;IAAMK,QAAQlB,MAAMkB;KACjF,6BAAAI,QAAA,cAACC,wBAAQC,MAAI;IAACnB;IAAYoB,cAAcnB;KACtC,6BAAAgB,QAAA,cAACC,wBAAQG,gBAAc;IAACC,YAAY7B;MACpC,6BAAAwB,QAAA,cAACM,OAAAA;IAAIC,MAAK;IAAOC,WAAU;IAAWpB,KAAKN;KACxCR,QAAAA,CAAAA,CAAAA;AAKX;AAEO,IAAMmC,aAAa;EACxBC,UAAUrC;AACZ;",
6
- "names": ["customEventOptions", "capture", "passive", "REF_POPOVER", "RefPopoverContextProvider", "useRefPopover", "createContext", "RefPopoverProvider", "children", "onLookup", "trigger", "useRef", "value", "setValue", "useState", "rootRef", "setRootRef", "open", "setOpen", "handleDxRefTagActivate", "useCallback", "event", "ref", "label", "dxTrigger", "link", "pending", "current", "queueMicrotask", "then", "target", "undefined", "useEffect", "addEventListener", "React", "Popover", "Root", "onOpenChange", "VirtualTrigger", "virtualRef", "div", "role", "className", "RefPopover", "Provider"]
7
- }