@payloadcms/richtext-lexical 3.0.2 → 3.0.3-canary.27acdae

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 (211) hide show
  1. package/dist/exports/client/Field-OHQPCDNR.js +2 -0
  2. package/dist/exports/client/Field-OHQPCDNR.js.map +7 -0
  3. package/dist/exports/client/RelationshipComponent-XOQBVKA3.js +2 -0
  4. package/dist/exports/client/RelationshipComponent-XOQBVKA3.js.map +7 -0
  5. package/dist/exports/client/bundled.css +1 -1
  6. package/dist/exports/client/chunk-2L2Z4JHF.js +12 -0
  7. package/dist/exports/client/chunk-2L2Z4JHF.js.map +7 -0
  8. package/dist/exports/client/{chunk-C7S3V4EB.js → chunk-DOK5S7LE.js} +2 -2
  9. package/dist/exports/client/chunk-DOK5S7LE.js.map +7 -0
  10. package/dist/exports/client/chunk-KYPSISKB.js +2 -0
  11. package/dist/exports/client/chunk-KYPSISKB.js.map +7 -0
  12. package/dist/exports/client/chunk-ZTAS32RX.js +2 -0
  13. package/dist/exports/client/{chunk-MI5HS4QX.js.map → chunk-ZTAS32RX.js.map} +3 -3
  14. package/dist/exports/client/{component-H3EYQ5KG.js → component-D6PKVJ2K.js} +2 -2
  15. package/dist/exports/client/component-D6PKVJ2K.js.map +7 -0
  16. package/dist/exports/client/componentInline-EYXL5S2C.js +2 -0
  17. package/dist/exports/client/index.d.ts +3 -0
  18. package/dist/exports/client/index.d.ts.map +1 -1
  19. package/dist/exports/client/index.js +11 -11
  20. package/dist/exports/client/index.js.map +3 -3
  21. package/dist/exports/server/ast/mdx.d.ts.map +1 -1
  22. package/dist/exports/server/ast/mdx.js +6 -0
  23. package/dist/exports/server/ast/mdx.js.map +1 -1
  24. package/dist/features/align/server/i18n.d.ts.map +1 -1
  25. package/dist/features/align/server/i18n.js +6 -0
  26. package/dist/features/align/server/i18n.js.map +1 -1
  27. package/dist/features/blockquote/server/i18n.d.ts.map +1 -1
  28. package/dist/features/blockquote/server/i18n.js +3 -0
  29. package/dist/features/blockquote/server/i18n.js.map +1 -1
  30. package/dist/features/blockquote/server/index.d.ts.map +1 -1
  31. package/dist/features/blockquote/server/index.js +2 -1
  32. package/dist/features/blockquote/server/index.js.map +1 -1
  33. package/dist/features/blocks/client/component/index.d.ts.map +1 -1
  34. package/dist/features/blocks/client/component/index.js +27 -9
  35. package/dist/features/blocks/client/component/index.js.map +1 -1
  36. package/dist/features/blocks/client/componentInline/components/InlineBlockContainer.d.ts +1 -1
  37. package/dist/features/blocks/client/componentInline/components/InlineBlockContainer.d.ts.map +1 -1
  38. package/dist/features/blocks/client/componentInline/components/InlineBlockContainer.js.map +1 -1
  39. package/dist/features/blocks/client/componentInline/index.d.ts.map +1 -1
  40. package/dist/features/blocks/client/componentInline/index.js +27 -7
  41. package/dist/features/blocks/client/componentInline/index.js.map +1 -1
  42. package/dist/features/blocks/client/index.d.ts.map +1 -1
  43. package/dist/features/blocks/client/index.js.map +1 -1
  44. package/dist/features/blocks/server/graphQLPopulationPromise.d.ts.map +1 -1
  45. package/dist/features/blocks/server/graphQLPopulationPromise.js.map +1 -1
  46. package/dist/features/blocks/server/i18n.d.ts.map +1 -1
  47. package/dist/features/blocks/server/i18n.js +9 -0
  48. package/dist/features/blocks/server/i18n.js.map +1 -1
  49. package/dist/features/converters/html/converter/converters/paragraph.d.ts.map +1 -1
  50. package/dist/features/converters/html/converter/converters/paragraph.js +2 -1
  51. package/dist/features/converters/html/converter/converters/paragraph.js.map +1 -1
  52. package/dist/features/converters/html/converter/defaultConverters.d.ts +1 -1
  53. package/dist/features/converters/html/converter/defaultConverters.d.ts.map +1 -1
  54. package/dist/features/converters/html/converter/defaultConverters.js.map +1 -1
  55. package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.d.ts.map +1 -1
  56. package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.js +23 -17
  57. package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.js.map +1 -1
  58. package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.d.ts.map +1 -1
  59. package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.js +4 -2
  60. package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.js.map +1 -1
  61. package/dist/features/experimental_table/client/utils/debounce.d.ts.map +1 -1
  62. package/dist/features/experimental_table/client/utils/debounce.js +3 -0
  63. package/dist/features/experimental_table/client/utils/debounce.js.map +1 -1
  64. package/dist/features/experimental_table/client/utils/useDebounce.d.ts +1 -5
  65. package/dist/features/experimental_table/client/utils/useDebounce.d.ts.map +1 -1
  66. package/dist/features/experimental_table/client/utils/useDebounce.js +40 -10
  67. package/dist/features/experimental_table/client/utils/useDebounce.js.map +1 -1
  68. package/dist/features/heading/server/i18n.d.ts.map +1 -1
  69. package/dist/features/heading/server/i18n.js +3 -0
  70. package/dist/features/heading/server/i18n.js.map +1 -1
  71. package/dist/features/heading/server/index.d.ts.map +1 -1
  72. package/dist/features/heading/server/index.js +2 -1
  73. package/dist/features/heading/server/index.js.map +1 -1
  74. package/dist/features/horizontalRule/server/i18n.d.ts.map +1 -1
  75. package/dist/features/horizontalRule/server/i18n.js +3 -0
  76. package/dist/features/horizontalRule/server/i18n.js.map +1 -1
  77. package/dist/features/indent/server/i18n.d.ts.map +1 -1
  78. package/dist/features/indent/server/i18n.js +4 -0
  79. package/dist/features/indent/server/i18n.js.map +1 -1
  80. package/dist/features/link/server/i18n.d.ts.map +1 -1
  81. package/dist/features/link/server/i18n.js +4 -0
  82. package/dist/features/link/server/i18n.js.map +1 -1
  83. package/dist/features/lists/checklist/server/i18n.d.ts.map +1 -1
  84. package/dist/features/lists/checklist/server/i18n.js +3 -0
  85. package/dist/features/lists/checklist/server/i18n.js.map +1 -1
  86. package/dist/features/lists/checklist/server/index.js.map +1 -1
  87. package/dist/features/lists/orderedList/server/i18n.d.ts.map +1 -1
  88. package/dist/features/lists/orderedList/server/i18n.js +3 -0
  89. package/dist/features/lists/orderedList/server/i18n.js.map +1 -1
  90. package/dist/features/lists/orderedList/server/index.js.map +1 -1
  91. package/dist/features/lists/unorderedList/server/i18n.d.ts.map +1 -1
  92. package/dist/features/lists/unorderedList/server/i18n.js +3 -0
  93. package/dist/features/lists/unorderedList/server/i18n.js.map +1 -1
  94. package/dist/features/lists/unorderedList/server/index.js.map +1 -1
  95. package/dist/features/paragraph/server/i18n.d.ts.map +1 -1
  96. package/dist/features/paragraph/server/i18n.js +4 -0
  97. package/dist/features/paragraph/server/i18n.js.map +1 -1
  98. package/dist/features/relationship/client/components/RelationshipComponent.d.ts.map +1 -1
  99. package/dist/features/relationship/client/components/RelationshipComponent.js +1 -3
  100. package/dist/features/relationship/client/components/RelationshipComponent.js.map +1 -1
  101. package/dist/features/relationship/client/drawer/index.js.map +1 -1
  102. package/dist/features/relationship/server/i18n.d.ts.map +1 -1
  103. package/dist/features/relationship/server/i18n.js +3 -0
  104. package/dist/features/relationship/server/i18n.js.map +1 -1
  105. package/dist/features/relationship/server/nodes/RelationshipNode.d.ts +1 -1
  106. package/dist/features/relationship/server/nodes/RelationshipNode.d.ts.map +1 -1
  107. package/dist/features/relationship/server/nodes/RelationshipNode.js +3 -3
  108. package/dist/features/relationship/server/nodes/RelationshipNode.js.map +1 -1
  109. package/dist/features/toolbars/fixed/client/Toolbar/index.d.ts +2 -2
  110. package/dist/features/toolbars/fixed/client/Toolbar/index.d.ts.map +1 -1
  111. package/dist/features/toolbars/fixed/client/Toolbar/index.js +64 -71
  112. package/dist/features/toolbars/fixed/client/Toolbar/index.js.map +1 -1
  113. package/dist/features/toolbars/inline/client/Toolbar/index.js +31 -51
  114. package/dist/features/toolbars/inline/client/Toolbar/index.js.map +1 -1
  115. package/dist/features/toolbars/shared/ToolbarButton/index.d.ts.map +1 -1
  116. package/dist/features/toolbars/shared/ToolbarButton/index.js +152 -62
  117. package/dist/features/toolbars/shared/ToolbarButton/index.js.map +1 -1
  118. package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.d.ts +1 -1
  119. package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.d.ts.map +1 -1
  120. package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js +4 -2
  121. package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js.map +1 -1
  122. package/dist/features/toolbars/shared/ToolbarDropdown/index.d.ts.map +1 -1
  123. package/dist/features/toolbars/shared/ToolbarDropdown/index.js +8 -20
  124. package/dist/features/toolbars/shared/ToolbarDropdown/index.js.map +1 -1
  125. package/dist/features/toolbars/types.d.ts +9 -0
  126. package/dist/features/toolbars/types.d.ts.map +1 -1
  127. package/dist/features/toolbars/types.js.map +1 -1
  128. package/dist/features/typesClient.d.ts +39 -36
  129. package/dist/features/typesClient.d.ts.map +1 -1
  130. package/dist/features/typesClient.js.map +1 -1
  131. package/dist/features/typesServer.d.ts.map +1 -1
  132. package/dist/features/typesServer.js.map +1 -1
  133. package/dist/features/upload/client/component/index.js.map +1 -1
  134. package/dist/features/upload/client/drawer/index.js.map +1 -1
  135. package/dist/features/upload/client/nodes/UploadNode.d.ts +1 -1
  136. package/dist/features/upload/client/nodes/UploadNode.d.ts.map +1 -1
  137. package/dist/features/upload/client/nodes/UploadNode.js.map +1 -1
  138. package/dist/features/upload/client/plugin/index.d.ts +2 -2
  139. package/dist/features/upload/client/plugin/index.d.ts.map +1 -1
  140. package/dist/features/upload/client/plugin/index.js.map +1 -1
  141. package/dist/features/upload/server/i18n.d.ts.map +1 -1
  142. package/dist/features/upload/server/i18n.js +3 -0
  143. package/dist/features/upload/server/i18n.js.map +1 -1
  144. package/dist/features/upload/server/nodes/UploadNode.d.ts +1 -1
  145. package/dist/features/upload/server/nodes/UploadNode.d.ts.map +1 -1
  146. package/dist/features/upload/server/nodes/UploadNode.js.map +1 -1
  147. package/dist/field/Field.d.ts +1 -1
  148. package/dist/field/Field.d.ts.map +1 -1
  149. package/dist/field/Field.js +2 -1
  150. package/dist/field/Field.js.map +1 -1
  151. package/dist/field/bundled.css +1 -1
  152. package/dist/field/rscEntry.js +1 -1
  153. package/dist/field/rscEntry.js.map +1 -1
  154. package/dist/i18n.d.ts.map +1 -1
  155. package/dist/i18n.js +70 -32
  156. package/dist/i18n.js.map +1 -1
  157. package/dist/index.d.ts.map +1 -1
  158. package/dist/index.js +5 -0
  159. package/dist/index.js.map +1 -1
  160. package/dist/lexical/LexicalProvider.d.ts.map +1 -1
  161. package/dist/lexical/LexicalProvider.js.map +1 -1
  162. package/dist/lexical/config/client/sanitize.js.map +1 -1
  163. package/dist/lexical/config/server/sanitize.d.ts.map +1 -1
  164. package/dist/lexical/config/server/sanitize.js +1 -0
  165. package/dist/lexical/config/server/sanitize.js.map +1 -1
  166. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.d.ts +2 -3
  167. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.d.ts.map +1 -1
  168. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js +139 -89
  169. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js.map +1 -1
  170. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.d.ts +2 -3
  171. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.d.ts.map +1 -1
  172. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.js +4 -7
  173. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.js.map +1 -1
  174. package/dist/lexical/plugins/SlashMenu/index.d.ts.map +1 -1
  175. package/dist/lexical/plugins/SlashMenu/index.js +8 -14
  176. package/dist/lexical/plugins/SlashMenu/index.js.map +1 -1
  177. package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.d.ts.map +1 -1
  178. package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.js +1 -0
  179. package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.js.map +1 -1
  180. package/dist/lexical/plugins/handles/DraggableBlockPlugin/debounce.d.ts +1 -1
  181. package/dist/lexical/plugins/handles/DraggableBlockPlugin/debounce.d.ts.map +1 -1
  182. package/dist/lexical/plugins/handles/DraggableBlockPlugin/debounce.js +1 -1
  183. package/dist/lexical/plugins/handles/DraggableBlockPlugin/debounce.js.map +1 -1
  184. package/dist/utilities/buildInitialState.js +1 -1
  185. package/dist/utilities/buildInitialState.js.map +1 -1
  186. package/dist/utilities/fieldsDrawer/DrawerContent.js.map +1 -1
  187. package/dist/utilities/generateImportMap.d.ts.map +1 -1
  188. package/dist/utilities/generateImportMap.js +4 -1
  189. package/dist/utilities/generateImportMap.js.map +1 -1
  190. package/dist/utilities/jsx/jsx.d.ts.map +1 -1
  191. package/dist/utilities/jsx/jsx.js +1 -0
  192. package/dist/utilities/jsx/jsx.js.map +1 -1
  193. package/dist/utilities/migrateSlateToLexical/index.d.ts.map +1 -1
  194. package/dist/utilities/migrateSlateToLexical/index.js +1 -1
  195. package/dist/utilities/migrateSlateToLexical/index.js.map +1 -1
  196. package/dist/validate/index.d.ts.map +1 -1
  197. package/dist/validate/index.js.map +1 -1
  198. package/package.json +7 -7
  199. package/dist/exports/client/Field-IS3XMKMO.js +0 -2
  200. package/dist/exports/client/Field-IS3XMKMO.js.map +0 -7
  201. package/dist/exports/client/RelationshipComponent-2RT3YXUT.js +0 -2
  202. package/dist/exports/client/RelationshipComponent-2RT3YXUT.js.map +0 -7
  203. package/dist/exports/client/chunk-C7S3V4EB.js.map +0 -7
  204. package/dist/exports/client/chunk-CBUZKU7S.js +0 -12
  205. package/dist/exports/client/chunk-CBUZKU7S.js.map +0 -7
  206. package/dist/exports/client/chunk-MI5HS4QX.js +0 -2
  207. package/dist/exports/client/chunk-U7O7EYCP.js +0 -2
  208. package/dist/exports/client/chunk-U7O7EYCP.js.map +0 -7
  209. package/dist/exports/client/component-H3EYQ5KG.js.map +0 -7
  210. package/dist/exports/client/componentInline-ZGO3K4TA.js +0 -2
  211. /package/dist/exports/client/{componentInline-ZGO3K4TA.js.map → componentInline-EYXL5S2C.js.map} +0 -0
@@ -98,13 +98,13 @@ function isTriggerVisibleInNearestScrollContainer(targetElement, containerElemen
98
98
  return tRect.top > cRect.top && tRect.top < cRect.bottom;
99
99
  }
100
100
  // Reposition the menu on scroll, window resize, and element resize.
101
- export function useDynamicPositioning(resolution, targetElement, onReposition, onVisibilityChange) {
102
- const $ = _c(7);
101
+ export function useDynamicPositioning(resolution, targetElementRef, onReposition, onVisibilityChange) {
102
+ const $ = _c(12);
103
103
  const [editor] = useLexicalComposerContext();
104
104
  let t0;
105
- let t1;
106
- if ($[0] !== targetElement || $[1] !== resolution || $[2] !== editor || $[3] !== onReposition || $[4] !== onVisibilityChange) {
105
+ if ($[0] !== targetElementRef.current || $[1] !== resolution || $[2] !== editor || $[3] !== onReposition || $[4] !== onVisibilityChange) {
107
106
  t0 = () => {
107
+ const targetElement = targetElementRef.current;
108
108
  if (targetElement != null && resolution != null) {
109
109
  const rootElement = editor.getRootElement();
110
110
  const rootScrollParent = rootElement != null ? getScrollParent(rootElement, false) : document.body;
@@ -136,23 +136,32 @@ export function useDynamicPositioning(resolution, targetElement, onReposition, o
136
136
  });
137
137
  resizeObserver.observe(targetElement);
138
138
  return () => {
139
- resizeObserver.unobserve(targetElement);
139
+ resizeObserver.disconnect();
140
140
  window.removeEventListener("resize", onReposition);
141
141
  document.removeEventListener("scroll", handleScroll, true);
142
142
  };
143
143
  }
144
144
  };
145
- t1 = [targetElement, editor, onVisibilityChange, onReposition, resolution];
146
- $[0] = targetElement;
145
+ $[0] = targetElementRef.current;
147
146
  $[1] = resolution;
148
147
  $[2] = editor;
149
148
  $[3] = onReposition;
150
149
  $[4] = onVisibilityChange;
151
150
  $[5] = t0;
152
- $[6] = t1;
153
151
  } else {
154
152
  t0 = $[5];
155
- t1 = $[6];
153
+ }
154
+ let t1;
155
+ if ($[6] !== editor || $[7] !== onVisibilityChange || $[8] !== onReposition || $[9] !== resolution || $[10] !== targetElementRef) {
156
+ t1 = [editor, onVisibilityChange, onReposition, resolution, targetElementRef];
157
+ $[6] = editor;
158
+ $[7] = onVisibilityChange;
159
+ $[8] = onReposition;
160
+ $[9] = resolution;
161
+ $[10] = targetElementRef;
162
+ $[11] = t1;
163
+ } else {
164
+ t1 = $[11];
156
165
  }
157
166
  useEffect(t0, t1);
158
167
  }
@@ -164,7 +173,6 @@ export function LexicalMenu({
164
173
  // groups filtering is already handled in SlashMenu/index.tsx. Thus, groups always contains the matching items.
165
174
  groups,
166
175
  menuRenderFn,
167
- onSelectItem,
168
176
  resolution,
169
177
  shouldSplitNodeWithQuery = false
170
178
  }) {
@@ -192,16 +200,20 @@ export function LexicalMenu({
192
200
  setSelectedItemKeyToFirstMatchingItem();
193
201
  }, [matchingString, setSelectedItemKeyToFirstMatchingItem]);
194
202
  const selectItemAndCleanUp = useCallback(selectedItem => {
203
+ close();
195
204
  editor.update(() => {
196
205
  const textNodeContainingQuery = resolution.match != null && shouldSplitNodeWithQuery ? $splitNodeContainingQuery(resolution.match) : null;
197
206
  if (textNodeContainingQuery) {
198
207
  textNodeContainingQuery.remove();
199
208
  }
200
- }, {
201
- discrete: true
202
209
  });
203
- onSelectItem(selectedItem, close, resolution.match ? resolution.match.matchingString : '');
204
- }, [editor, shouldSplitNodeWithQuery, resolution.match, onSelectItem, close]);
210
+ setTimeout(() => {
211
+ selectedItem.onSelect({
212
+ editor,
213
+ queryString: resolution.match ? resolution.match.matchingString : ''
214
+ });
215
+ }, 0);
216
+ }, [editor, shouldSplitNodeWithQuery, resolution.match, close]);
205
217
  useEffect(() => {
206
218
  return () => {
207
219
  const rootElem_0 = editor.getRootElement();
@@ -308,88 +320,126 @@ export function LexicalMenu({
308
320
  return menuRenderFn(anchorElementRef, listItemProps, resolution.match ? resolution.match.matchingString : '');
309
321
  }
310
322
  export function useMenuAnchorRef(anchorElem, resolution, setResolution, className) {
323
+ const $ = _c(14);
311
324
  const [editor] = useLexicalComposerContext();
312
- const anchorElementRef = useRef(CAN_USE_DOM ? document.createElement('div') : null);
313
- const positionMenu = useCallback(() => {
314
- if (anchorElementRef.current === null || parent === undefined) {
315
- return;
316
- }
317
- const rootElement = editor.getRootElement();
318
- const containerDiv = anchorElementRef.current;
319
- const VERTICAL_OFFSET = 32;
320
- const menuEle = containerDiv.firstChild;
321
- if (rootElement !== null && resolution !== null) {
322
- const {
323
- height,
324
- width
325
- } = resolution.getRect();
326
- let {
327
- left,
328
- top
329
- } = resolution.getRect();
330
- const rawTop = top;
331
- top -= anchorElem.getBoundingClientRect().top + window.scrollY;
332
- left -= anchorElem.getBoundingClientRect().left + window.scrollX;
333
- containerDiv.style.left = `${left + window.scrollX}px`;
334
- containerDiv.style.height = `${height}px`;
335
- containerDiv.style.width = `${width}px`;
336
- if (menuEle !== null) {
337
- const menuRect = menuEle.getBoundingClientRect();
338
- const menuHeight = menuRect.height;
339
- const menuWidth = menuRect.width;
340
- const rootElementRect = rootElement.getBoundingClientRect();
341
- if (left + menuWidth > rootElementRect.right) {
342
- containerDiv.style.left = `${rootElementRect.right - menuWidth + window.scrollX}px`;
325
+ let t0;
326
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
327
+ t0 = CAN_USE_DOM ? document.createElement("div") : null;
328
+ $[0] = t0;
329
+ } else {
330
+ t0 = $[0];
331
+ }
332
+ const anchorElementRef = useRef(t0);
333
+ let t1;
334
+ if ($[1] !== editor || $[2] !== resolution || $[3] !== anchorElem || $[4] !== className) {
335
+ t1 = () => {
336
+ if (anchorElementRef.current === null || parent === undefined) {
337
+ return;
338
+ }
339
+ const rootElement = editor.getRootElement();
340
+ const containerDiv = anchorElementRef.current;
341
+ const menuEle = containerDiv.firstChild;
342
+ if (rootElement !== null && resolution !== null) {
343
+ const {
344
+ height,
345
+ width
346
+ } = resolution.getRect();
347
+ let {
348
+ left,
349
+ top
350
+ } = resolution.getRect();
351
+ const rawTop = top;
352
+ top = top - (anchorElem.getBoundingClientRect().top + window.scrollY);
353
+ left = left - (anchorElem.getBoundingClientRect().left + window.scrollX);
354
+ containerDiv.style.left = `${left + window.scrollX}px`;
355
+ containerDiv.style.height = `${height}px`;
356
+ containerDiv.style.width = `${width}px`;
357
+ if (menuEle !== null) {
358
+ const menuRect = menuEle.getBoundingClientRect();
359
+ const menuHeight = menuRect.height;
360
+ const menuWidth = menuRect.width;
361
+ const rootElementRect = rootElement.getBoundingClientRect();
362
+ if (left + menuWidth > rootElementRect.right) {
363
+ containerDiv.style.left = `${rootElementRect.right - menuWidth + window.scrollX}px`;
364
+ }
365
+ const wouldGoOffBottomOfScreen = rawTop + menuHeight + 32 > window.innerHeight;
366
+ const wouldGoOffTopOfScreen = rawTop < 0;
367
+ if (wouldGoOffBottomOfScreen && !wouldGoOffTopOfScreen) {
368
+ containerDiv.style.top = `${top + 32 - menuHeight + window.scrollY - (height + 24)}px`;
369
+ } else {
370
+ containerDiv.style.top = `${top + window.scrollY + 32}px`;
371
+ }
343
372
  }
344
- const wouldGoOffBottomOfScreen = rawTop + menuHeight + VERTICAL_OFFSET > window.innerHeight;
345
- //const wouldGoOffBottomOfContainer = top + menuHeight > rootElementRect.bottom
346
- const wouldGoOffTopOfScreen = rawTop < 0;
347
- // Position slash menu above the cursor instead of below (default) if it would otherwise go off the bottom of the screen.
348
- if (wouldGoOffBottomOfScreen && !wouldGoOffTopOfScreen) {
349
- const margin = 24;
350
- containerDiv.style.top = `${top + VERTICAL_OFFSET - menuHeight + window.scrollY - (height + margin)}px`;
351
- } else {
352
- containerDiv.style.top = `${top + window.scrollY + VERTICAL_OFFSET}px`;
373
+ if (!containerDiv.isConnected) {
374
+ if (className != null) {
375
+ containerDiv.className = className;
376
+ }
377
+ containerDiv.setAttribute("aria-label", "Slash menu");
378
+ containerDiv.setAttribute("id", "slash-menu");
379
+ containerDiv.setAttribute("role", "listbox");
380
+ containerDiv.style.display = "block";
381
+ containerDiv.style.position = "absolute";
382
+ anchorElem.append(containerDiv);
353
383
  }
384
+ anchorElementRef.current = containerDiv;
385
+ rootElement.setAttribute("aria-controls", "slash-menu");
354
386
  }
355
- if (!containerDiv.isConnected) {
356
- if (className != null) {
357
- containerDiv.className = className;
358
- }
359
- containerDiv.setAttribute('aria-label', 'Slash menu');
360
- containerDiv.setAttribute('id', 'slash-menu');
361
- containerDiv.setAttribute('role', 'listbox');
362
- containerDiv.style.display = 'block';
363
- containerDiv.style.position = 'absolute';
364
- anchorElem.append(containerDiv);
387
+ };
388
+ $[1] = editor;
389
+ $[2] = resolution;
390
+ $[3] = anchorElem;
391
+ $[4] = className;
392
+ $[5] = t1;
393
+ } else {
394
+ t1 = $[5];
395
+ }
396
+ const positionMenu = t1;
397
+ let t2;
398
+ let t3;
399
+ if ($[6] !== editor || $[7] !== resolution || $[8] !== positionMenu) {
400
+ t2 = () => {
401
+ const rootElement_0 = editor.getRootElement();
402
+ if (resolution !== null) {
403
+ positionMenu();
404
+ return () => {
405
+ if (rootElement_0 !== null) {
406
+ rootElement_0.removeAttribute("aria-controls");
407
+ }
408
+ const containerDiv_0 = anchorElementRef.current;
409
+ if (containerDiv_0 !== null && containerDiv_0.isConnected) {
410
+ containerDiv_0.remove();
411
+ }
412
+ };
365
413
  }
366
- anchorElementRef.current = containerDiv;
367
- rootElement.setAttribute('aria-controls', 'slash-menu');
368
- }
369
- }, [editor, resolution, className, anchorElem]);
370
- useEffect(() => {
371
- const rootElement_0 = editor.getRootElement();
372
- if (resolution !== null) {
373
- positionMenu();
374
- return () => {
375
- if (rootElement_0 !== null) {
376
- rootElement_0.removeAttribute('aria-controls');
377
- }
378
- const containerDiv_0 = anchorElementRef.current;
379
- if (containerDiv_0 !== null && containerDiv_0.isConnected) {
380
- containerDiv_0.remove();
414
+ };
415
+ t3 = [editor, positionMenu, resolution];
416
+ $[6] = editor;
417
+ $[7] = resolution;
418
+ $[8] = positionMenu;
419
+ $[9] = t2;
420
+ $[10] = t3;
421
+ } else {
422
+ t2 = $[9];
423
+ t3 = $[10];
424
+ }
425
+ useEffect(t2, t3);
426
+ let t4;
427
+ if ($[11] !== resolution || $[12] !== setResolution) {
428
+ t4 = isInView => {
429
+ if (resolution !== null) {
430
+ if (!isInView) {
431
+ setResolution(null);
381
432
  }
382
- };
383
- }
384
- }, [editor, positionMenu, resolution]);
385
- const onVisibilityChange = useCallback(isInView => {
386
- if (resolution !== null) {
387
- if (!isInView) {
388
- setResolution(null);
389
433
  }
390
- }
391
- }, [resolution, setResolution]);
392
- useDynamicPositioning(resolution, anchorElementRef.current, positionMenu, onVisibilityChange);
434
+ };
435
+ $[11] = resolution;
436
+ $[12] = setResolution;
437
+ $[13] = t4;
438
+ } else {
439
+ t4 = $[13];
440
+ }
441
+ const onVisibilityChange = t4;
442
+ useDynamicPositioning(resolution, anchorElementRef, positionMenu, onVisibilityChange);
393
443
  return anchorElementRef;
394
444
  }
395
445
  //# sourceMappingURL=LexicalMenu.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LexicalMenu.js","names":["c","_c","useLexicalComposerContext","mergeRegister","$getSelection","$isRangeSelection","COMMAND_PRIORITY_LOW","createCommand","KEY_ARROW_DOWN_COMMAND","KEY_ARROW_UP_COMMAND","KEY_ENTER_COMMAND","KEY_ESCAPE_COMMAND","KEY_TAB_COMMAND","useCallback","useEffect","useLayoutEffect","useMemo","useRef","useState","CAN_USE_DOM","baseClass","scrollIntoViewIfNeeded","target","typeaheadContainerNode","document","getElementById","typeaheadRect","getBoundingClientRect","top","height","window","innerHeight","scrollIntoView","block","getFullMatchOffset","documentText","entryText","offset","triggerOffset","i","length","substring","$splitNodeContainingQuery","match","selection","isCollapsed","anchor","type","anchorNode","getNode","isSimpleText","selectionOffset","textContent","getTextContent","slice","characterOffset","replaceableString","queryOffset","matchingString","startOffset","newNode","splitText","getScrollParent","element","includeHidden","style","getComputedStyle","excludeStaticParent","position","overflowRegex","body","parent1","parentElement","test","overflow","overflowY","overflowX","isTriggerVisibleInNearestScrollContainer","targetElement","containerElement","tRect","cRect","bottom","useDynamicPositioning","resolution","onReposition","onVisibilityChange","$","editor","t0","t1","rootElement","getRootElement","rootScrollParent","ticking","previousIsInView","handleScroll","requestAnimationFrame","isInView","resizeObserver","ResizeObserver","addEventListener","capture","passive","observe","unobserve","removeEventListener","SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND","LexicalMenu","anchorElementRef","close","groups","menuRenderFn","onSelectItem","shouldSplitNodeWithQuery","selectedItemKey","setSelectedItemKey","updateSelectedItem","item","rootElem","setAttribute","key","setSelectedItemKeyToFirstMatchingItem","allItems","flatMap","group","items","firstMatchingItem","selectItemAndCleanUp","selectedItem","update","textNodeContainingQuery","remove","discrete","removeAttribute","registerCommand","ref","current","payload","event","selectedIndex","findIndex","newSelectedIndex","newSelectedItem","dispatchCommand","index","preventDefault","stopImmediatePropagation","find","listItemProps","useMenuAnchorRef","anchorElem","setResolution","className","createElement","positionMenu","parent","undefined","containerDiv","VERTICAL_OFFSET","menuEle","firstChild","width","getRect","left","rawTop","scrollY","scrollX","menuRect","menuHeight","menuWidth","rootElementRect","right","wouldGoOffBottomOfScreen","wouldGoOffTopOfScreen","margin","isConnected","display","append"],"sources":["../../../../../src/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.tsx"],"sourcesContent":["'use client'\nimport type { LexicalCommand, LexicalEditor, TextNode } from 'lexical'\nimport type { JSX, ReactPortal, RefObject } from 'react'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { mergeRegister } from '@lexical/utils'\nimport {\n $getSelection,\n $isRangeSelection,\n COMMAND_PRIORITY_LOW,\n createCommand,\n KEY_ARROW_DOWN_COMMAND,\n KEY_ARROW_UP_COMMAND,\n KEY_ENTER_COMMAND,\n KEY_ESCAPE_COMMAND,\n KEY_TAB_COMMAND,\n} from 'lexical'\nimport { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'\n\nimport type { MenuTextMatch } from '../useMenuTriggerMatch.js'\nimport type { SlashMenuGroupInternal, SlashMenuItem, SlashMenuItemInternal } from './types.js'\n\nimport { CAN_USE_DOM } from '../../../utils/canUseDOM.js'\n\nexport type MenuResolution = {\n getRect: () => DOMRect\n match?: MenuTextMatch\n}\n\nconst baseClass = 'slash-menu-popup'\n\nexport type MenuRenderFn = (\n anchorElementRef: RefObject<HTMLElement | null>,\n itemProps: {\n groups: Array<SlashMenuGroupInternal>\n selectedItemKey: null | string\n selectItemAndCleanUp: (selectedItem: SlashMenuItem) => void\n setSelectedItemKey: (itemKey: string) => void\n },\n matchingString: null | string,\n) => JSX.Element | null | ReactPortal\n\nconst scrollIntoViewIfNeeded = (target: HTMLElement) => {\n const typeaheadContainerNode = document.getElementById('slash-menu')\n if (!typeaheadContainerNode) {\n return\n }\n\n const typeaheadRect = typeaheadContainerNode.getBoundingClientRect()\n\n if (typeaheadRect.top + typeaheadRect.height > window.innerHeight) {\n typeaheadContainerNode.scrollIntoView({\n block: 'center',\n })\n }\n\n if (typeaheadRect.top < 0) {\n typeaheadContainerNode.scrollIntoView({\n block: 'center',\n })\n }\n\n target.scrollIntoView({ block: 'nearest' })\n}\n\n/**\n * Walk backwards along user input and forward through entity title to try\n * and replace more of the user's text with entity.\n */\nfunction getFullMatchOffset(documentText: string, entryText: string, offset: number) {\n let triggerOffset = offset\n for (let i = triggerOffset; i <= entryText.length; i++) {\n if (documentText.substring(documentText.length - i) === entryText.substring(0, i)) {\n triggerOffset = i\n }\n }\n return triggerOffset\n}\n\n/**\n * Split Lexical TextNode and return a new TextNode only containing matched text.\n * Common use cases include: removing the node, replacing with a new node.\n */\nfunction $splitNodeContainingQuery(match: MenuTextMatch): null | TextNode {\n const selection = $getSelection()\n if (!$isRangeSelection(selection) || !selection.isCollapsed()) {\n return null\n }\n const anchor = selection.anchor\n if (anchor.type !== 'text') {\n return null\n }\n const anchorNode = anchor.getNode()\n if (!anchorNode.isSimpleText()) {\n return null\n }\n const selectionOffset = anchor.offset\n const textContent = anchorNode.getTextContent().slice(0, selectionOffset)\n const characterOffset = match.replaceableString.length\n const queryOffset = getFullMatchOffset(textContent, match.matchingString, characterOffset)\n const startOffset = selectionOffset - queryOffset\n if (startOffset < 0) {\n return null\n }\n let newNode\n if (startOffset === 0) {\n ;[newNode] = anchorNode.splitText(selectionOffset)\n } else {\n ;[, newNode] = anchorNode.splitText(startOffset, selectionOffset)\n }\n\n return newNode\n}\n\n// Got from https://stackoverflow.com/a/42543908/2013580\nexport function getScrollParent(\n element: HTMLElement,\n includeHidden: boolean,\n): HTMLBodyElement | HTMLElement {\n let style = getComputedStyle(element)\n const excludeStaticParent = style.position === 'absolute'\n const overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/\n if (style.position === 'fixed') {\n return document.body\n }\n for (let parent: HTMLElement | null = element; (parent = parent.parentElement); ) {\n style = getComputedStyle(parent)\n if (excludeStaticParent && style.position === 'static') {\n continue\n }\n if (overflowRegex.test(style.overflow + style.overflowY + style.overflowX)) {\n return parent\n }\n }\n return document.body\n}\n\nfunction isTriggerVisibleInNearestScrollContainer(\n targetElement: HTMLElement,\n containerElement: HTMLElement,\n): boolean {\n const tRect = targetElement.getBoundingClientRect()\n const cRect = containerElement.getBoundingClientRect()\n return tRect.top > cRect.top && tRect.top < cRect.bottom\n}\n\n// Reposition the menu on scroll, window resize, and element resize.\nexport function useDynamicPositioning(\n resolution: MenuResolution | null,\n targetElement: HTMLElement | null,\n onReposition: () => void,\n onVisibilityChange?: (isInView: boolean) => void,\n) {\n const [editor] = useLexicalComposerContext()\n useEffect(() => {\n if (targetElement != null && resolution != null) {\n const rootElement = editor.getRootElement()\n const rootScrollParent =\n rootElement != null ? getScrollParent(rootElement, false) : document.body\n let ticking = false\n let previousIsInView = isTriggerVisibleInNearestScrollContainer(\n targetElement,\n rootScrollParent,\n )\n const handleScroll = function () {\n if (!ticking) {\n window.requestAnimationFrame(function () {\n onReposition()\n ticking = false\n })\n ticking = true\n }\n const isInView = isTriggerVisibleInNearestScrollContainer(targetElement, rootScrollParent)\n if (isInView !== previousIsInView) {\n previousIsInView = isInView\n if (onVisibilityChange != null) {\n onVisibilityChange(isInView)\n }\n }\n }\n const resizeObserver = new ResizeObserver(onReposition)\n window.addEventListener('resize', onReposition)\n document.addEventListener('scroll', handleScroll, {\n capture: true,\n passive: true,\n })\n resizeObserver.observe(targetElement)\n return () => {\n resizeObserver.unobserve(targetElement)\n window.removeEventListener('resize', onReposition)\n document.removeEventListener('scroll', handleScroll, true)\n }\n }\n }, [targetElement, editor, onVisibilityChange, onReposition, resolution])\n}\n\nexport const SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND: LexicalCommand<{\n index: number\n item: SlashMenuItemInternal\n}> = createCommand('SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND')\n\nexport function LexicalMenu({\n anchorElementRef,\n close,\n editor,\n // groups filtering is already handled in SlashMenu/index.tsx. Thus, groups always contains the matching items.\n groups,\n menuRenderFn,\n onSelectItem,\n resolution,\n shouldSplitNodeWithQuery = false,\n}: {\n anchorElementRef: RefObject<HTMLElement | null>\n close: () => void\n editor: LexicalEditor\n groups: Array<SlashMenuGroupInternal>\n menuRenderFn: MenuRenderFn\n onSelectItem: (item: SlashMenuItem, closeMenu: () => void, matchingString: string) => void\n resolution: MenuResolution\n shouldSplitNodeWithQuery?: boolean\n}): JSX.Element | null {\n const [selectedItemKey, setSelectedItemKey] = useState<null | string>(null)\n\n const matchingString = (resolution.match && resolution.match.matchingString) || ''\n\n const updateSelectedItem = useCallback(\n (item: SlashMenuItem) => {\n const rootElem = editor.getRootElement()\n if (rootElem !== null) {\n rootElem.setAttribute('aria-activedescendant', `${baseClass}__item-${item.key}`)\n setSelectedItemKey(item.key)\n }\n },\n [editor],\n )\n\n const setSelectedItemKeyToFirstMatchingItem = useCallback(() => {\n // set selected item to the first of the matching ones\n if (groups !== null && matchingString != null) {\n // groups filtering is already handled in SlashMenu/index.tsx. Thus, groups always contains the matching items.\n const allItems = groups.flatMap((group) => group.items)\n\n if (allItems.length) {\n const firstMatchingItem = allItems[0]\n updateSelectedItem(firstMatchingItem)\n }\n }\n }, [groups, updateSelectedItem, matchingString])\n\n useEffect(() => {\n setSelectedItemKeyToFirstMatchingItem()\n }, [matchingString, setSelectedItemKeyToFirstMatchingItem])\n\n const selectItemAndCleanUp = useCallback(\n (selectedItem: SlashMenuItem) => {\n editor.update(\n () => {\n const textNodeContainingQuery =\n resolution.match != null && shouldSplitNodeWithQuery\n ? $splitNodeContainingQuery(resolution.match)\n : null\n\n if (textNodeContainingQuery) {\n textNodeContainingQuery.remove()\n }\n },\n { discrete: true },\n )\n onSelectItem(selectedItem, close, resolution.match ? resolution.match.matchingString : '')\n },\n [editor, shouldSplitNodeWithQuery, resolution.match, onSelectItem, close],\n )\n\n useEffect(() => {\n return () => {\n const rootElem = editor.getRootElement()\n if (rootElem !== null) {\n rootElem.removeAttribute('aria-activedescendant')\n }\n }\n }, [editor])\n\n useLayoutEffect(() => {\n if (groups === null) {\n setSelectedItemKey(null)\n } else if (selectedItemKey === null) {\n setSelectedItemKeyToFirstMatchingItem()\n }\n }, [groups, selectedItemKey, updateSelectedItem, setSelectedItemKeyToFirstMatchingItem])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand(\n SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND,\n ({ item }) => {\n if (item.ref && item.ref.current != null) {\n scrollIntoViewIfNeeded(item.ref.current)\n return true\n }\n\n return false\n },\n COMMAND_PRIORITY_LOW,\n ),\n )\n }, [editor, updateSelectedItem])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand<KeyboardEvent>(\n KEY_ARROW_DOWN_COMMAND,\n (payload) => {\n const event = payload\n if (groups !== null && groups.length && selectedItemKey !== null) {\n const allItems = groups.flatMap((group) => group.items)\n const selectedIndex = allItems.findIndex((item) => item.key === selectedItemKey)\n\n const newSelectedIndex = selectedIndex !== allItems.length - 1 ? selectedIndex + 1 : 0\n\n const newSelectedItem = allItems[newSelectedIndex]\n\n updateSelectedItem(newSelectedItem)\n if (newSelectedItem.ref != null && newSelectedItem.ref.current) {\n editor.dispatchCommand(SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND, {\n index: newSelectedIndex,\n item: newSelectedItem,\n })\n }\n event.preventDefault()\n event.stopImmediatePropagation()\n }\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand<KeyboardEvent>(\n KEY_ARROW_UP_COMMAND,\n (payload) => {\n const event = payload\n if (groups !== null && groups.length && selectedItemKey !== null) {\n const allItems = groups.flatMap((group) => group.items)\n const selectedIndex = allItems.findIndex((item) => item.key === selectedItemKey)\n\n const newSelectedIndex = selectedIndex !== 0 ? selectedIndex - 1 : allItems.length - 1\n\n const newSelectedItem = allItems[newSelectedIndex]\n\n updateSelectedItem(newSelectedItem)\n if (newSelectedItem.ref != null && newSelectedItem.ref.current) {\n scrollIntoViewIfNeeded(newSelectedItem.ref.current)\n }\n event.preventDefault()\n event.stopImmediatePropagation()\n }\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand<KeyboardEvent>(\n KEY_ESCAPE_COMMAND,\n (payload) => {\n const event = payload\n event.preventDefault()\n event.stopImmediatePropagation()\n close()\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand<KeyboardEvent>(\n KEY_TAB_COMMAND,\n (payload) => {\n const event = payload\n\n if (groups === null || selectedItemKey === null) {\n return false\n }\n const allItems = groups.flatMap((group) => group.items)\n const selectedItem = allItems.find((item) => item.key === selectedItemKey)\n if (!selectedItem) {\n return false\n }\n\n event.preventDefault()\n event.stopImmediatePropagation()\n selectItemAndCleanUp(selectedItem)\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand(\n KEY_ENTER_COMMAND,\n (event: KeyboardEvent | null) => {\n if (groups === null || selectedItemKey === null) {\n return false\n }\n const allItems = groups.flatMap((group) => group.items)\n const selectedItem = allItems.find((item) => item.key === selectedItemKey)\n if (!selectedItem) {\n return false\n }\n\n if (event !== null) {\n event.preventDefault()\n event.stopImmediatePropagation()\n }\n selectItemAndCleanUp(selectedItem)\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n )\n }, [selectItemAndCleanUp, close, editor, groups, selectedItemKey, updateSelectedItem])\n\n const listItemProps = useMemo(\n () => ({\n groups,\n selectedItemKey,\n selectItemAndCleanUp,\n setSelectedItemKey,\n }),\n [selectItemAndCleanUp, selectedItemKey, groups],\n )\n\n return menuRenderFn(\n anchorElementRef,\n listItemProps,\n resolution.match ? resolution.match.matchingString : '',\n )\n}\n\nexport function useMenuAnchorRef(\n anchorElem: HTMLElement,\n resolution: MenuResolution | null,\n setResolution: (r: MenuResolution | null) => void,\n className?: string,\n): RefObject<HTMLElement | null> {\n const [editor] = useLexicalComposerContext()\n const anchorElementRef = useRef<HTMLElement | null>(\n CAN_USE_DOM ? document.createElement('div') : null,\n )\n const positionMenu = useCallback(() => {\n if (anchorElementRef.current === null || parent === undefined) {\n return\n }\n const rootElement = editor.getRootElement()\n const containerDiv = anchorElementRef.current\n\n const VERTICAL_OFFSET = 32\n\n const menuEle = containerDiv.firstChild as Element\n if (rootElement !== null && resolution !== null) {\n const { height, width } = resolution.getRect()\n let { left, top } = resolution.getRect()\n\n const rawTop = top\n top -= anchorElem.getBoundingClientRect().top + window.scrollY\n left -= anchorElem.getBoundingClientRect().left + window.scrollX\n containerDiv.style.left = `${left + window.scrollX}px`\n containerDiv.style.height = `${height}px`\n containerDiv.style.width = `${width}px`\n if (menuEle !== null) {\n const menuRect = menuEle.getBoundingClientRect()\n const menuHeight = menuRect.height\n const menuWidth = menuRect.width\n\n const rootElementRect = rootElement.getBoundingClientRect()\n\n if (left + menuWidth > rootElementRect.right) {\n containerDiv.style.left = `${rootElementRect.right - menuWidth + window.scrollX}px`\n }\n\n const wouldGoOffBottomOfScreen = rawTop + menuHeight + VERTICAL_OFFSET > window.innerHeight\n //const wouldGoOffBottomOfContainer = top + menuHeight > rootElementRect.bottom\n const wouldGoOffTopOfScreen = rawTop < 0\n\n // Position slash menu above the cursor instead of below (default) if it would otherwise go off the bottom of the screen.\n if (wouldGoOffBottomOfScreen && !wouldGoOffTopOfScreen) {\n const margin = 24\n containerDiv.style.top = `${\n top + VERTICAL_OFFSET - menuHeight + window.scrollY - (height + margin)\n }px`\n } else {\n containerDiv.style.top = `${top + window.scrollY + VERTICAL_OFFSET}px`\n }\n }\n\n if (!containerDiv.isConnected) {\n if (className != null) {\n containerDiv.className = className\n }\n containerDiv.setAttribute('aria-label', 'Slash menu')\n containerDiv.setAttribute('id', 'slash-menu')\n containerDiv.setAttribute('role', 'listbox')\n containerDiv.style.display = 'block'\n containerDiv.style.position = 'absolute'\n anchorElem.append(containerDiv)\n }\n anchorElementRef.current = containerDiv\n rootElement.setAttribute('aria-controls', 'slash-menu')\n }\n }, [editor, resolution, className, anchorElem])\n\n useEffect(() => {\n const rootElement = editor.getRootElement()\n if (resolution !== null) {\n positionMenu()\n return () => {\n if (rootElement !== null) {\n rootElement.removeAttribute('aria-controls')\n }\n\n const containerDiv = anchorElementRef.current\n if (containerDiv !== null && containerDiv.isConnected) {\n containerDiv.remove()\n }\n }\n }\n }, [editor, positionMenu, resolution])\n\n const onVisibilityChange = useCallback(\n (isInView: boolean) => {\n if (resolution !== null) {\n if (!isInView) {\n setResolution(null)\n }\n }\n },\n [resolution, setResolution],\n )\n\n useDynamicPositioning(resolution, anchorElementRef.current, positionMenu, onVisibilityChange)\n\n return anchorElementRef\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"LexicalMenu.js","names":["c","_c","useLexicalComposerContext","mergeRegister","$getSelection","$isRangeSelection","COMMAND_PRIORITY_LOW","createCommand","KEY_ARROW_DOWN_COMMAND","KEY_ARROW_UP_COMMAND","KEY_ENTER_COMMAND","KEY_ESCAPE_COMMAND","KEY_TAB_COMMAND","useCallback","useEffect","useLayoutEffect","useMemo","useRef","useState","CAN_USE_DOM","baseClass","scrollIntoViewIfNeeded","target","typeaheadContainerNode","document","getElementById","typeaheadRect","getBoundingClientRect","top","height","window","innerHeight","scrollIntoView","block","getFullMatchOffset","documentText","entryText","offset","triggerOffset","i","length","substring","$splitNodeContainingQuery","match","selection","isCollapsed","anchor","type","anchorNode","getNode","isSimpleText","selectionOffset","textContent","getTextContent","slice","characterOffset","replaceableString","queryOffset","matchingString","startOffset","newNode","splitText","getScrollParent","element","includeHidden","style","getComputedStyle","excludeStaticParent","position","overflowRegex","body","parent1","parentElement","test","overflow","overflowY","overflowX","isTriggerVisibleInNearestScrollContainer","targetElement","containerElement","tRect","cRect","bottom","useDynamicPositioning","resolution","targetElementRef","onReposition","onVisibilityChange","$","editor","t0","current","rootElement","getRootElement","rootScrollParent","ticking","previousIsInView","handleScroll","requestAnimationFrame","isInView","resizeObserver","ResizeObserver","addEventListener","capture","passive","observe","disconnect","removeEventListener","t1","SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND","LexicalMenu","anchorElementRef","close","groups","menuRenderFn","shouldSplitNodeWithQuery","selectedItemKey","setSelectedItemKey","updateSelectedItem","item","rootElem","setAttribute","key","setSelectedItemKeyToFirstMatchingItem","allItems","flatMap","group","items","firstMatchingItem","selectItemAndCleanUp","selectedItem","update","textNodeContainingQuery","remove","setTimeout","onSelect","queryString","removeAttribute","registerCommand","ref","payload","event","selectedIndex","findIndex","newSelectedIndex","newSelectedItem","dispatchCommand","index","preventDefault","stopImmediatePropagation","find","listItemProps","useMenuAnchorRef","anchorElem","setResolution","className","Symbol","for","createElement","parent","undefined","containerDiv","menuEle","firstChild","width","getRect","left","rawTop","scrollY","scrollX","menuRect","menuHeight","menuWidth","rootElementRect","right","wouldGoOffBottomOfScreen","wouldGoOffTopOfScreen","isConnected","display","append","positionMenu","t2","t3","rootElement_0","containerDiv_0","t4"],"sources":["../../../../../src/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.tsx"],"sourcesContent":["'use client'\nimport type { LexicalCommand, LexicalEditor, TextNode } from 'lexical'\nimport type { JSX, ReactPortal, RefObject } from 'react'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { mergeRegister } from '@lexical/utils'\nimport {\n $getSelection,\n $isRangeSelection,\n COMMAND_PRIORITY_LOW,\n createCommand,\n KEY_ARROW_DOWN_COMMAND,\n KEY_ARROW_UP_COMMAND,\n KEY_ENTER_COMMAND,\n KEY_ESCAPE_COMMAND,\n KEY_TAB_COMMAND,\n} from 'lexical'\nimport { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'\n\nimport type { MenuTextMatch } from '../useMenuTriggerMatch.js'\nimport type { SlashMenuGroupInternal, SlashMenuItem, SlashMenuItemInternal } from './types.js'\n\nimport { CAN_USE_DOM } from '../../../utils/canUseDOM.js'\n\nexport type MenuResolution = {\n getRect: () => DOMRect\n match?: MenuTextMatch\n}\n\nconst baseClass = 'slash-menu-popup'\n\nexport type MenuRenderFn = (\n anchorElementRef: RefObject<HTMLElement | null>,\n itemProps: {\n groups: Array<SlashMenuGroupInternal>\n selectedItemKey: null | string\n selectItemAndCleanUp: (selectedItem: SlashMenuItem) => void\n setSelectedItemKey: (itemKey: string) => void\n },\n matchingString: null | string,\n) => JSX.Element | null | ReactPortal\n\nconst scrollIntoViewIfNeeded = (target: HTMLElement) => {\n const typeaheadContainerNode = document.getElementById('slash-menu')\n if (!typeaheadContainerNode) {\n return\n }\n\n const typeaheadRect = typeaheadContainerNode.getBoundingClientRect()\n\n if (typeaheadRect.top + typeaheadRect.height > window.innerHeight) {\n typeaheadContainerNode.scrollIntoView({\n block: 'center',\n })\n }\n\n if (typeaheadRect.top < 0) {\n typeaheadContainerNode.scrollIntoView({\n block: 'center',\n })\n }\n\n target.scrollIntoView({ block: 'nearest' })\n}\n\n/**\n * Walk backwards along user input and forward through entity title to try\n * and replace more of the user's text with entity.\n */\nfunction getFullMatchOffset(documentText: string, entryText: string, offset: number) {\n let triggerOffset = offset\n for (let i = triggerOffset; i <= entryText.length; i++) {\n if (documentText.substring(documentText.length - i) === entryText.substring(0, i)) {\n triggerOffset = i\n }\n }\n return triggerOffset\n}\n\n/**\n * Split Lexical TextNode and return a new TextNode only containing matched text.\n * Common use cases include: removing the node, replacing with a new node.\n */\nfunction $splitNodeContainingQuery(match: MenuTextMatch): null | TextNode {\n const selection = $getSelection()\n if (!$isRangeSelection(selection) || !selection.isCollapsed()) {\n return null\n }\n const anchor = selection.anchor\n if (anchor.type !== 'text') {\n return null\n }\n const anchorNode = anchor.getNode()\n if (!anchorNode.isSimpleText()) {\n return null\n }\n const selectionOffset = anchor.offset\n const textContent = anchorNode.getTextContent().slice(0, selectionOffset)\n const characterOffset = match.replaceableString.length\n const queryOffset = getFullMatchOffset(textContent, match.matchingString, characterOffset)\n const startOffset = selectionOffset - queryOffset\n if (startOffset < 0) {\n return null\n }\n let newNode\n if (startOffset === 0) {\n ;[newNode] = anchorNode.splitText(selectionOffset)\n } else {\n ;[, newNode] = anchorNode.splitText(startOffset, selectionOffset)\n }\n\n return newNode\n}\n\n// Got from https://stackoverflow.com/a/42543908/2013580\nexport function getScrollParent(\n element: HTMLElement,\n includeHidden: boolean,\n): HTMLBodyElement | HTMLElement {\n let style = getComputedStyle(element)\n const excludeStaticParent = style.position === 'absolute'\n const overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/\n if (style.position === 'fixed') {\n return document.body\n }\n for (let parent: HTMLElement | null = element; (parent = parent.parentElement); ) {\n style = getComputedStyle(parent)\n if (excludeStaticParent && style.position === 'static') {\n continue\n }\n if (overflowRegex.test(style.overflow + style.overflowY + style.overflowX)) {\n return parent\n }\n }\n return document.body\n}\n\nfunction isTriggerVisibleInNearestScrollContainer(\n targetElement: HTMLElement,\n containerElement: HTMLElement,\n): boolean {\n const tRect = targetElement.getBoundingClientRect()\n const cRect = containerElement.getBoundingClientRect()\n return tRect.top > cRect.top && tRect.top < cRect.bottom\n}\n\n// Reposition the menu on scroll, window resize, and element resize.\nexport function useDynamicPositioning(\n resolution: MenuResolution | null,\n targetElementRef: RefObject<HTMLElement | null>,\n onReposition: () => void,\n onVisibilityChange?: (isInView: boolean) => void,\n) {\n const [editor] = useLexicalComposerContext()\n useEffect(() => {\n const targetElement = targetElementRef.current\n if (targetElement != null && resolution != null) {\n const rootElement = editor.getRootElement()\n const rootScrollParent =\n rootElement != null ? getScrollParent(rootElement, false) : document.body\n let ticking = false\n let previousIsInView = isTriggerVisibleInNearestScrollContainer(\n targetElement,\n rootScrollParent,\n )\n const handleScroll = function () {\n if (!ticking) {\n window.requestAnimationFrame(function () {\n onReposition()\n ticking = false\n })\n ticking = true\n }\n const isInView = isTriggerVisibleInNearestScrollContainer(targetElement, rootScrollParent)\n if (isInView !== previousIsInView) {\n previousIsInView = isInView\n if (onVisibilityChange != null) {\n onVisibilityChange(isInView)\n }\n }\n }\n const resizeObserver = new ResizeObserver(onReposition)\n window.addEventListener('resize', onReposition)\n document.addEventListener('scroll', handleScroll, {\n capture: true,\n passive: true,\n })\n resizeObserver.observe(targetElement)\n return () => {\n resizeObserver.disconnect()\n window.removeEventListener('resize', onReposition)\n document.removeEventListener('scroll', handleScroll, true)\n }\n }\n }, [editor, onVisibilityChange, onReposition, resolution, targetElementRef])\n}\n\nexport const SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND: LexicalCommand<{\n index: number\n item: SlashMenuItemInternal\n}> = createCommand('SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND')\n\nexport function LexicalMenu({\n anchorElementRef,\n close,\n editor,\n // groups filtering is already handled in SlashMenu/index.tsx. Thus, groups always contains the matching items.\n groups,\n menuRenderFn,\n resolution,\n shouldSplitNodeWithQuery = false,\n}: {\n anchorElementRef: RefObject<HTMLElement | null>\n close: () => void\n editor: LexicalEditor\n groups: Array<SlashMenuGroupInternal>\n menuRenderFn: MenuRenderFn\n resolution: MenuResolution\n shouldSplitNodeWithQuery?: boolean\n}): JSX.Element | null {\n const [selectedItemKey, setSelectedItemKey] = useState<null | string>(null)\n\n const matchingString = (resolution.match && resolution.match.matchingString) || ''\n\n const updateSelectedItem = useCallback(\n (item: SlashMenuItem) => {\n const rootElem = editor.getRootElement()\n if (rootElem !== null) {\n rootElem.setAttribute('aria-activedescendant', `${baseClass}__item-${item.key}`)\n setSelectedItemKey(item.key)\n }\n },\n [editor],\n )\n\n const setSelectedItemKeyToFirstMatchingItem = useCallback(() => {\n // set selected item to the first of the matching ones\n if (groups !== null && matchingString != null) {\n // groups filtering is already handled in SlashMenu/index.tsx. Thus, groups always contains the matching items.\n const allItems = groups.flatMap((group) => group.items)\n\n if (allItems.length) {\n const firstMatchingItem = allItems[0]\n updateSelectedItem(firstMatchingItem)\n }\n }\n }, [groups, updateSelectedItem, matchingString])\n\n useEffect(() => {\n setSelectedItemKeyToFirstMatchingItem()\n }, [matchingString, setSelectedItemKeyToFirstMatchingItem])\n\n const selectItemAndCleanUp = useCallback(\n (selectedItem: SlashMenuItem) => {\n close()\n\n editor.update(() => {\n const textNodeContainingQuery =\n resolution.match != null && shouldSplitNodeWithQuery\n ? $splitNodeContainingQuery(resolution.match)\n : null\n\n if (textNodeContainingQuery) {\n textNodeContainingQuery.remove()\n }\n })\n\n setTimeout(() => {\n selectedItem.onSelect({\n editor,\n queryString: resolution.match ? resolution.match.matchingString : '',\n })\n }, 0)\n },\n [editor, shouldSplitNodeWithQuery, resolution.match, close],\n )\n\n useEffect(() => {\n return () => {\n const rootElem = editor.getRootElement()\n if (rootElem !== null) {\n rootElem.removeAttribute('aria-activedescendant')\n }\n }\n }, [editor])\n\n useLayoutEffect(() => {\n if (groups === null) {\n setSelectedItemKey(null)\n } else if (selectedItemKey === null) {\n setSelectedItemKeyToFirstMatchingItem()\n }\n }, [groups, selectedItemKey, updateSelectedItem, setSelectedItemKeyToFirstMatchingItem])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand(\n SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND,\n ({ item }) => {\n if (item.ref && item.ref.current != null) {\n scrollIntoViewIfNeeded(item.ref.current)\n return true\n }\n\n return false\n },\n COMMAND_PRIORITY_LOW,\n ),\n )\n }, [editor, updateSelectedItem])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand<KeyboardEvent>(\n KEY_ARROW_DOWN_COMMAND,\n (payload) => {\n const event = payload\n if (groups !== null && groups.length && selectedItemKey !== null) {\n const allItems = groups.flatMap((group) => group.items)\n const selectedIndex = allItems.findIndex((item) => item.key === selectedItemKey)\n\n const newSelectedIndex = selectedIndex !== allItems.length - 1 ? selectedIndex + 1 : 0\n\n const newSelectedItem = allItems[newSelectedIndex]\n\n updateSelectedItem(newSelectedItem)\n if (newSelectedItem.ref != null && newSelectedItem.ref.current) {\n editor.dispatchCommand(SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND, {\n index: newSelectedIndex,\n item: newSelectedItem,\n })\n }\n event.preventDefault()\n event.stopImmediatePropagation()\n }\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand<KeyboardEvent>(\n KEY_ARROW_UP_COMMAND,\n (payload) => {\n const event = payload\n if (groups !== null && groups.length && selectedItemKey !== null) {\n const allItems = groups.flatMap((group) => group.items)\n const selectedIndex = allItems.findIndex((item) => item.key === selectedItemKey)\n\n const newSelectedIndex = selectedIndex !== 0 ? selectedIndex - 1 : allItems.length - 1\n\n const newSelectedItem = allItems[newSelectedIndex]\n\n updateSelectedItem(newSelectedItem)\n if (newSelectedItem.ref != null && newSelectedItem.ref.current) {\n scrollIntoViewIfNeeded(newSelectedItem.ref.current)\n }\n event.preventDefault()\n event.stopImmediatePropagation()\n }\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand<KeyboardEvent>(\n KEY_ESCAPE_COMMAND,\n (payload) => {\n const event = payload\n event.preventDefault()\n event.stopImmediatePropagation()\n close()\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand<KeyboardEvent>(\n KEY_TAB_COMMAND,\n (payload) => {\n const event = payload\n\n if (groups === null || selectedItemKey === null) {\n return false\n }\n const allItems = groups.flatMap((group) => group.items)\n const selectedItem = allItems.find((item) => item.key === selectedItemKey)\n if (!selectedItem) {\n return false\n }\n\n event.preventDefault()\n event.stopImmediatePropagation()\n selectItemAndCleanUp(selectedItem)\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand(\n KEY_ENTER_COMMAND,\n (event: KeyboardEvent | null) => {\n if (groups === null || selectedItemKey === null) {\n return false\n }\n const allItems = groups.flatMap((group) => group.items)\n const selectedItem = allItems.find((item) => item.key === selectedItemKey)\n if (!selectedItem) {\n return false\n }\n\n if (event !== null) {\n event.preventDefault()\n event.stopImmediatePropagation()\n }\n selectItemAndCleanUp(selectedItem)\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n )\n }, [selectItemAndCleanUp, close, editor, groups, selectedItemKey, updateSelectedItem])\n\n const listItemProps = useMemo(\n () => ({\n groups,\n selectedItemKey,\n selectItemAndCleanUp,\n setSelectedItemKey,\n }),\n [selectItemAndCleanUp, selectedItemKey, groups],\n )\n\n return menuRenderFn(\n anchorElementRef,\n listItemProps,\n resolution.match ? resolution.match.matchingString : '',\n )\n}\n\nexport function useMenuAnchorRef(\n anchorElem: HTMLElement,\n resolution: MenuResolution | null,\n setResolution: (r: MenuResolution | null) => void,\n className?: string,\n): RefObject<HTMLElement | null> {\n const [editor] = useLexicalComposerContext()\n const anchorElementRef = useRef<HTMLElement | null>(\n CAN_USE_DOM ? document.createElement('div') : null,\n )\n const positionMenu = useCallback(() => {\n if (anchorElementRef.current === null || parent === undefined) {\n return\n }\n const rootElement = editor.getRootElement()\n const containerDiv = anchorElementRef.current\n\n const VERTICAL_OFFSET = 32\n\n const menuEle = containerDiv.firstChild as Element\n if (rootElement !== null && resolution !== null) {\n const { height, width } = resolution.getRect()\n let { left, top } = resolution.getRect()\n\n const rawTop = top\n top -= anchorElem.getBoundingClientRect().top + window.scrollY\n left -= anchorElem.getBoundingClientRect().left + window.scrollX\n containerDiv.style.left = `${left + window.scrollX}px`\n containerDiv.style.height = `${height}px`\n containerDiv.style.width = `${width}px`\n if (menuEle !== null) {\n const menuRect = menuEle.getBoundingClientRect()\n const menuHeight = menuRect.height\n const menuWidth = menuRect.width\n\n const rootElementRect = rootElement.getBoundingClientRect()\n\n if (left + menuWidth > rootElementRect.right) {\n containerDiv.style.left = `${rootElementRect.right - menuWidth + window.scrollX}px`\n }\n\n const wouldGoOffBottomOfScreen = rawTop + menuHeight + VERTICAL_OFFSET > window.innerHeight\n //const wouldGoOffBottomOfContainer = top + menuHeight > rootElementRect.bottom\n const wouldGoOffTopOfScreen = rawTop < 0\n\n // Position slash menu above the cursor instead of below (default) if it would otherwise go off the bottom of the screen.\n if (wouldGoOffBottomOfScreen && !wouldGoOffTopOfScreen) {\n const margin = 24\n containerDiv.style.top = `${\n top + VERTICAL_OFFSET - menuHeight + window.scrollY - (height + margin)\n }px`\n } else {\n containerDiv.style.top = `${top + window.scrollY + VERTICAL_OFFSET}px`\n }\n }\n\n if (!containerDiv.isConnected) {\n if (className != null) {\n containerDiv.className = className\n }\n containerDiv.setAttribute('aria-label', 'Slash menu')\n containerDiv.setAttribute('id', 'slash-menu')\n containerDiv.setAttribute('role', 'listbox')\n containerDiv.style.display = 'block'\n containerDiv.style.position = 'absolute'\n anchorElem.append(containerDiv)\n }\n anchorElementRef.current = containerDiv\n rootElement.setAttribute('aria-controls', 'slash-menu')\n }\n }, [editor, resolution, className, anchorElem])\n\n useEffect(() => {\n const rootElement = editor.getRootElement()\n if (resolution !== null) {\n positionMenu()\n return () => {\n if (rootElement !== null) {\n rootElement.removeAttribute('aria-controls')\n }\n\n const containerDiv = anchorElementRef.current\n if (containerDiv !== null && containerDiv.isConnected) {\n containerDiv.remove()\n }\n }\n }\n }, [editor, positionMenu, resolution])\n\n const onVisibilityChange = useCallback(\n (isInView: boolean) => {\n if (resolution !== null) {\n if (!isInView) {\n setResolution(null)\n }\n }\n },\n [resolution, setResolution],\n )\n\n useDynamicPositioning(resolution, anchorElementRef, positionMenu, onVisibilityChange)\n\n return anchorElementRef\n}\n"],"mappings":"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","ignoreList":[]}
@@ -2,7 +2,7 @@ import type { LexicalCommand, ParagraphNode } from 'lexical';
2
2
  import { type JSX } from 'react';
3
3
  import type { MenuTextMatch, TriggerFn } from '../useMenuTriggerMatch.js';
4
4
  import type { MenuRenderFn, MenuResolution } from './LexicalMenu.js';
5
- import type { SlashMenuGroupInternal, SlashMenuItem } from './types.js';
5
+ import type { SlashMenuGroupInternal } from './types.js';
6
6
  export declare const PUNCTUATION = "\\.,\\+\\*\\?\\$\\@\\|#{}\\(\\)\\^\\-\\[\\]\\\\/!%'\"~=<>_:;";
7
7
  export { useDynamicPositioning } from './LexicalMenu.js';
8
8
  export type TypeaheadMenuPluginProps = {
@@ -13,12 +13,11 @@ export type TypeaheadMenuPluginProps = {
13
13
  onClose?: () => void;
14
14
  onOpen?: (resolution: MenuResolution) => void;
15
15
  onQueryChange: (matchingString: null | string) => void;
16
- onSelectItem: (item: SlashMenuItem, closeMenu: () => void, matchingString: string) => void;
17
16
  triggerFn: TriggerFn;
18
17
  };
19
18
  export declare const ENABLE_SLASH_MENU_COMMAND: LexicalCommand<{
20
19
  node: ParagraphNode;
21
20
  }>;
22
- export declare function LexicalTypeaheadMenuPlugin({ anchorClassName, anchorElem, groups, menuRenderFn, onClose, onOpen, onQueryChange, onSelectItem, triggerFn, }: TypeaheadMenuPluginProps): JSX.Element | null;
21
+ export declare function LexicalTypeaheadMenuPlugin({ anchorClassName, anchorElem, groups, menuRenderFn, onClose, onOpen, onQueryChange, triggerFn, }: TypeaheadMenuPluginProps): JSX.Element | null;
23
22
  export type { MenuRenderFn, MenuResolution, MenuTextMatch, TriggerFn };
24
23
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,cAAc,EAEd,aAAa,EAGd,MAAM,SAAS,CAAA;AAWhB,OAAO,EAAE,KAAK,GAAG,EAAoC,MAAM,OAAO,CAAA;AAGlE,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACpE,OAAO,KAAK,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAIvE,eAAO,MAAM,WAAW,iEAAiE,CAAA;AA2EzF,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AAExD,MAAM,MAAM,wBAAwB,GAAG;IACrC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,UAAU,EAAE,WAAW,CAAA;IACvB,MAAM,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAA;IACrC,YAAY,EAAE,YAAY,CAAA;IAC1B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,KAAK,IAAI,CAAA;IAC7C,aAAa,EAAE,CAAC,cAAc,EAAE,IAAI,GAAG,MAAM,KAAK,IAAI,CAAA;IACtD,YAAY,EAAE,CAAC,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,IAAI,EAAE,cAAc,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1F,SAAS,EAAE,SAAS,CAAA;CACrB,CAAA;AAED,eAAO,MAAM,yBAAyB,EAAE,cAAc,CAAC;IACrD,IAAI,EAAE,aAAa,CAAA;CACpB,CAA8C,CAAA;AAE/C,wBAAgB,0BAA0B,CAAC,EACzC,eAAe,EACf,UAAU,EACV,MAAM,EACN,YAAY,EACZ,OAAO,EACP,MAAM,EACN,aAAa,EACb,YAAY,EACZ,SAAS,GACV,EAAE,wBAAwB,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAyH/C;AAED,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,SAAS,EAAE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAiB,aAAa,EAAkB,MAAM,SAAS,CAAA;AAW3F,OAAO,EAAE,KAAK,GAAG,EAAoC,MAAM,OAAO,CAAA;AAGlE,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACpE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AAIxD,eAAO,MAAM,WAAW,iEAAiE,CAAA;AA2EzF,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AAExD,MAAM,MAAM,wBAAwB,GAAG;IACrC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,UAAU,EAAE,WAAW,CAAA;IACvB,MAAM,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAA;IACrC,YAAY,EAAE,YAAY,CAAA;IAC1B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,KAAK,IAAI,CAAA;IAC7C,aAAa,EAAE,CAAC,cAAc,EAAE,IAAI,GAAG,MAAM,KAAK,IAAI,CAAA;IACtD,SAAS,EAAE,SAAS,CAAA;CACrB,CAAA;AAED,eAAO,MAAM,yBAAyB,EAAE,cAAc,CAAC;IACrD,IAAI,EAAE,aAAa,CAAA;CACpB,CAA8C,CAAA;AAE/C,wBAAgB,0BAA0B,CAAC,EACzC,eAAe,EACf,UAAU,EACV,MAAM,EACN,YAAY,EACZ,OAAO,EACP,MAAM,EACN,aAAa,EACb,SAAS,GACV,EAAE,wBAAwB,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAwH/C;AAED,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,SAAS,EAAE,CAAA"}
@@ -77,7 +77,7 @@ function startTransition(callback) {
77
77
  export { useDynamicPositioning } from './LexicalMenu.js';
78
78
  export const ENABLE_SLASH_MENU_COMMAND = createCommand('ENABLE_SLASH_MENU_COMMAND');
79
79
  export function LexicalTypeaheadMenuPlugin(t0) {
80
- const $ = _c(31);
80
+ const $ = _c(30);
81
81
  const {
82
82
  anchorClassName,
83
83
  anchorElem,
@@ -86,7 +86,6 @@ export function LexicalTypeaheadMenuPlugin(t0) {
86
86
  onClose,
87
87
  onOpen,
88
88
  onQueryChange,
89
- onSelectItem,
90
89
  triggerFn
91
90
  } = t0;
92
91
  const [editor] = useLexicalComposerContext();
@@ -222,14 +221,13 @@ export function LexicalTypeaheadMenuPlugin(t0) {
222
221
  }
223
222
  useEffect(t5, t6);
224
223
  let t7;
225
- if ($[23] !== anchorElementRef || $[24] !== resolution || $[25] !== editor || $[26] !== closeTypeahead || $[27] !== groups || $[28] !== menuRenderFn || $[29] !== onSelectItem) {
224
+ if ($[23] !== anchorElementRef || $[24] !== resolution || $[25] !== editor || $[26] !== closeTypeahead || $[27] !== groups || $[28] !== menuRenderFn) {
226
225
  t7 = anchorElementRef.current === null || resolution === null || editor === null ? null : _jsx(LexicalMenu, {
227
226
  anchorElementRef,
228
227
  close: closeTypeahead,
229
228
  editor,
230
229
  groups,
231
230
  menuRenderFn,
232
- onSelectItem,
233
231
  resolution,
234
232
  shouldSplitNodeWithQuery: true
235
233
  });
@@ -239,10 +237,9 @@ export function LexicalTypeaheadMenuPlugin(t0) {
239
237
  $[26] = closeTypeahead;
240
238
  $[27] = groups;
241
239
  $[28] = menuRenderFn;
242
- $[29] = onSelectItem;
243
- $[30] = t7;
240
+ $[29] = t7;
244
241
  } else {
245
- t7 = $[30];
242
+ t7 = $[29];
246
243
  }
247
244
  return t7;
248
245
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","mergeRegister","$getSelection","$isRangeSelection","$isTextNode","COMMAND_PRIORITY_LOW","createCommand","useCallback","useEffect","useState","React","LexicalMenu","useMenuAnchorRef","PUNCTUATION","getTextUpToAnchor","selection","anchor","type","anchorNode","getNode","isSimpleText","anchorOffset","offset","getTextContent","slice","tryToPositionRange","leadOffset","range","editorWindow","domSelection","getSelection","isCollapsed","startOffset","endOffset","setStart","setEnd","error","getQueryTextForSearch","editor","text","getEditorState","read","isSelectionOnEntityBoundary","prevSibling","getPreviousSibling","isTextEntity","startTransition","callback","useDynamicPositioning","ENABLE_SLASH_MENU_COMMAND","LexicalTypeaheadMenuPlugin","t0","$","anchorClassName","anchorElem","groups","menuRenderFn","onClose","onOpen","onQueryChange","onSelectItem","triggerFn","resolution","setResolution","anchorElementRef","t1","closeTypeahead","t2","res","openTypeahead","t3","t4","registerCommand","t5","node","match","matchingString","replaceableString","_window","window","document","createRange","isRangePositioned","getRect","getBoundingClientRect","updateListener","editorWindow_0","range_0","undefined","match_0","query","isRangePositioned_0","removeUpdateListener","registerUpdateListener","t6","t7","current","_jsx","close","shouldSplitNodeWithQuery"],"sources":["../../../../../src/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.tsx"],"sourcesContent":["'use client'\nimport type {\n LexicalCommand,\n LexicalEditor,\n ParagraphNode,\n RangeSelection,\n TextNode,\n} from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { mergeRegister } from '@lexical/utils'\nimport {\n $getSelection,\n $isRangeSelection,\n $isTextNode,\n COMMAND_PRIORITY_LOW,\n createCommand,\n} from 'lexical'\nimport { type JSX, useCallback, useEffect, useState } from 'react'\nimport * as React from 'react'\n\nimport type { MenuTextMatch, TriggerFn } from '../useMenuTriggerMatch.js'\nimport type { MenuRenderFn, MenuResolution } from './LexicalMenu.js'\nimport type { SlashMenuGroupInternal, SlashMenuItem } from './types.js'\n\nimport { LexicalMenu, useMenuAnchorRef } from './LexicalMenu.js'\n\nexport const PUNCTUATION = '\\\\.,\\\\+\\\\*\\\\?\\\\$\\\\@\\\\|#{}\\\\(\\\\)\\\\^\\\\-\\\\[\\\\]\\\\\\\\/!%\\'\"~=<>_:;'\n\nfunction getTextUpToAnchor(selection: RangeSelection): null | string {\n const anchor = selection.anchor\n if (anchor.type !== 'text') {\n return null\n }\n const anchorNode = anchor.getNode()\n if (!anchorNode.isSimpleText()) {\n return null\n }\n const anchorOffset = anchor.offset\n return anchorNode.getTextContent().slice(0, anchorOffset)\n}\n\nfunction tryToPositionRange(leadOffset: number, range: Range, editorWindow: Window): boolean {\n const domSelection = editorWindow.getSelection()\n if (domSelection === null || !domSelection.isCollapsed) {\n return false\n }\n const anchorNode = domSelection.anchorNode\n const startOffset = leadOffset\n const endOffset = domSelection.anchorOffset\n\n if (anchorNode == null || endOffset == null) {\n return false\n }\n\n try {\n range.setStart(anchorNode, startOffset)\n // if endOffset is 0, positioning the range for when you click the plus button to open the slash menu will fial\n range.setEnd(anchorNode, endOffset > 1 ? endOffset : 1)\n } catch (error) {\n return false\n }\n\n return true\n}\n\nfunction getQueryTextForSearch(editor: LexicalEditor): string | undefined {\n let text\n editor.getEditorState().read(() => {\n const selection = $getSelection()\n if (!$isRangeSelection(selection)) {\n return\n }\n text = getTextUpToAnchor(selection)\n })\n return text\n}\n\nfunction isSelectionOnEntityBoundary(editor: LexicalEditor, offset: number): boolean {\n if (offset !== 0) {\n return false\n }\n return editor.getEditorState().read(() => {\n const selection = $getSelection()\n if ($isRangeSelection(selection)) {\n const anchor = selection.anchor\n const anchorNode = anchor.getNode()\n const prevSibling = anchorNode.getPreviousSibling()\n return $isTextNode(prevSibling) && prevSibling.isTextEntity()\n }\n return false\n })\n}\n\nfunction startTransition(callback: () => void) {\n if (React.startTransition) {\n React.startTransition(callback)\n } else {\n callback()\n }\n}\n\nexport { useDynamicPositioning } from './LexicalMenu.js'\n\nexport type TypeaheadMenuPluginProps = {\n anchorClassName?: string\n anchorElem: HTMLElement\n groups: Array<SlashMenuGroupInternal>\n menuRenderFn: MenuRenderFn\n onClose?: () => void\n onOpen?: (resolution: MenuResolution) => void\n onQueryChange: (matchingString: null | string) => void\n onSelectItem: (item: SlashMenuItem, closeMenu: () => void, matchingString: string) => void\n triggerFn: TriggerFn\n}\n\nexport const ENABLE_SLASH_MENU_COMMAND: LexicalCommand<{\n node: ParagraphNode\n}> = createCommand('ENABLE_SLASH_MENU_COMMAND')\n\nexport function LexicalTypeaheadMenuPlugin({\n anchorClassName,\n anchorElem,\n groups,\n menuRenderFn,\n onClose,\n onOpen,\n onQueryChange,\n onSelectItem,\n triggerFn,\n}: TypeaheadMenuPluginProps): JSX.Element | null {\n const [editor] = useLexicalComposerContext()\n const [resolution, setResolution] = useState<MenuResolution | null>(null)\n const anchorElementRef = useMenuAnchorRef(anchorElem, resolution, setResolution, anchorClassName)\n\n const closeTypeahead = useCallback(() => {\n setResolution(null)\n if (onClose != null && resolution !== null) {\n onClose()\n }\n }, [onClose, resolution])\n\n const openTypeahead = useCallback(\n (res: MenuResolution) => {\n setResolution(res)\n if (onOpen != null && resolution === null) {\n onOpen(res)\n }\n },\n [onOpen, resolution],\n )\n\n // This is mainly used for the AddBlockHandlePlugin, so that the slash menu can be opened from there\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand(\n ENABLE_SLASH_MENU_COMMAND,\n ({ node }) => {\n editor.getEditorState().read(() => {\n const match: MenuTextMatch = {\n leadOffset: 0,\n matchingString: '',\n replaceableString: '',\n }\n if (!isSelectionOnEntityBoundary(editor, match.leadOffset)) {\n if (node !== null) {\n const editorWindow = editor._window ?? window\n const range = editorWindow.document.createRange()\n\n const isRangePositioned = tryToPositionRange(match.leadOffset, range, editorWindow)\n if (isRangePositioned !== null) {\n startTransition(() =>\n openTypeahead({\n getRect: () => {\n return range.getBoundingClientRect()\n },\n match,\n }),\n )\n }\n\n return\n }\n }\n })\n\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n )\n }, [editor, openTypeahead])\n\n useEffect(() => {\n const updateListener = () => {\n editor.getEditorState().read(() => {\n const editorWindow = editor._window ?? window\n const range = editorWindow.document.createRange()\n const selection = $getSelection()\n const text = getQueryTextForSearch(editor)\n\n if (\n !$isRangeSelection(selection) ||\n !selection.isCollapsed() ||\n text === undefined ||\n range === null\n ) {\n closeTypeahead()\n return\n }\n\n const match = triggerFn({ editor, query: text })\n onQueryChange(match ? match.matchingString : null)\n\n if (match !== null && !isSelectionOnEntityBoundary(editor, match.leadOffset)) {\n const isRangePositioned = tryToPositionRange(match.leadOffset, range, editorWindow)\n if (isRangePositioned !== null) {\n startTransition(() =>\n openTypeahead({\n getRect: () => {\n return range.getBoundingClientRect()\n },\n match,\n }),\n )\n return\n }\n }\n closeTypeahead()\n })\n }\n\n const removeUpdateListener = editor.registerUpdateListener(updateListener)\n\n return () => {\n removeUpdateListener()\n }\n }, [editor, triggerFn, onQueryChange, resolution, closeTypeahead, openTypeahead])\n\n return anchorElementRef.current === null || resolution === null || editor === null ? null : (\n <LexicalMenu\n anchorElementRef={anchorElementRef}\n close={closeTypeahead}\n editor={editor}\n groups={groups}\n menuRenderFn={menuRenderFn}\n onSelectItem={onSelectItem}\n resolution={resolution}\n shouldSplitNodeWithQuery\n />\n )\n}\n\nexport type { MenuRenderFn, MenuResolution, MenuTextMatch, TriggerFn }\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","mergeRegister","$getSelection","$isRangeSelection","$isTextNode","COMMAND_PRIORITY_LOW","createCommand","useCallback","useEffect","useState","React","LexicalMenu","useMenuAnchorRef","PUNCTUATION","getTextUpToAnchor","selection","anchor","type","anchorNode","getNode","isSimpleText","anchorOffset","offset","getTextContent","slice","tryToPositionRange","leadOffset","range","editorWindow","domSelection","getSelection","isCollapsed","startOffset","endOffset","setStart","setEnd","error","getQueryTextForSearch","editor","text","getEditorState","read","isSelectionOnEntityBoundary","prevSibling","getPreviousSibling","isTextEntity","startTransition","callback","useDynamicPositioning","ENABLE_SLASH_MENU_COMMAND","LexicalTypeaheadMenuPlugin","t0","$","anchorClassName","anchorElem","groups","menuRenderFn","onClose","onOpen","onQueryChange","triggerFn","resolution","setResolution","anchorElementRef","t1","closeTypeahead","t2","res","openTypeahead","t3","t4","registerCommand","t5","node","match","matchingString","replaceableString","_window","window","document","createRange","isRangePositioned","getRect","getBoundingClientRect","updateListener","editorWindow_0","range_0","undefined","match_0","query","isRangePositioned_0","removeUpdateListener","registerUpdateListener","t6","t7","current","_jsx","close","shouldSplitNodeWithQuery"],"sources":["../../../../../src/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.tsx"],"sourcesContent":["'use client'\nimport type { LexicalCommand, LexicalEditor, ParagraphNode, RangeSelection } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { mergeRegister } from '@lexical/utils'\nimport {\n $getSelection,\n $isRangeSelection,\n $isTextNode,\n COMMAND_PRIORITY_LOW,\n createCommand,\n} from 'lexical'\nimport { type JSX, useCallback, useEffect, useState } from 'react'\nimport * as React from 'react'\n\nimport type { MenuTextMatch, TriggerFn } from '../useMenuTriggerMatch.js'\nimport type { MenuRenderFn, MenuResolution } from './LexicalMenu.js'\nimport type { SlashMenuGroupInternal } from './types.js'\n\nimport { LexicalMenu, useMenuAnchorRef } from './LexicalMenu.js'\n\nexport const PUNCTUATION = '\\\\.,\\\\+\\\\*\\\\?\\\\$\\\\@\\\\|#{}\\\\(\\\\)\\\\^\\\\-\\\\[\\\\]\\\\\\\\/!%\\'\"~=<>_:;'\n\nfunction getTextUpToAnchor(selection: RangeSelection): null | string {\n const anchor = selection.anchor\n if (anchor.type !== 'text') {\n return null\n }\n const anchorNode = anchor.getNode()\n if (!anchorNode.isSimpleText()) {\n return null\n }\n const anchorOffset = anchor.offset\n return anchorNode.getTextContent().slice(0, anchorOffset)\n}\n\nfunction tryToPositionRange(leadOffset: number, range: Range, editorWindow: Window): boolean {\n const domSelection = editorWindow.getSelection()\n if (domSelection === null || !domSelection.isCollapsed) {\n return false\n }\n const anchorNode = domSelection.anchorNode\n const startOffset = leadOffset\n const endOffset = domSelection.anchorOffset\n\n if (anchorNode == null || endOffset == null) {\n return false\n }\n\n try {\n range.setStart(anchorNode, startOffset)\n // if endOffset is 0, positioning the range for when you click the plus button to open the slash menu will fial\n range.setEnd(anchorNode, endOffset > 1 ? endOffset : 1)\n } catch (error) {\n return false\n }\n\n return true\n}\n\nfunction getQueryTextForSearch(editor: LexicalEditor): string | undefined {\n let text\n editor.getEditorState().read(() => {\n const selection = $getSelection()\n if (!$isRangeSelection(selection)) {\n return\n }\n text = getTextUpToAnchor(selection)\n })\n return text\n}\n\nfunction isSelectionOnEntityBoundary(editor: LexicalEditor, offset: number): boolean {\n if (offset !== 0) {\n return false\n }\n return editor.getEditorState().read(() => {\n const selection = $getSelection()\n if ($isRangeSelection(selection)) {\n const anchor = selection.anchor\n const anchorNode = anchor.getNode()\n const prevSibling = anchorNode.getPreviousSibling()\n return $isTextNode(prevSibling) && prevSibling.isTextEntity()\n }\n return false\n })\n}\n\nfunction startTransition(callback: () => void) {\n if (React.startTransition) {\n React.startTransition(callback)\n } else {\n callback()\n }\n}\n\nexport { useDynamicPositioning } from './LexicalMenu.js'\n\nexport type TypeaheadMenuPluginProps = {\n anchorClassName?: string\n anchorElem: HTMLElement\n groups: Array<SlashMenuGroupInternal>\n menuRenderFn: MenuRenderFn\n onClose?: () => void\n onOpen?: (resolution: MenuResolution) => void\n onQueryChange: (matchingString: null | string) => void\n triggerFn: TriggerFn\n}\n\nexport const ENABLE_SLASH_MENU_COMMAND: LexicalCommand<{\n node: ParagraphNode\n}> = createCommand('ENABLE_SLASH_MENU_COMMAND')\n\nexport function LexicalTypeaheadMenuPlugin({\n anchorClassName,\n anchorElem,\n groups,\n menuRenderFn,\n onClose,\n onOpen,\n onQueryChange,\n triggerFn,\n}: TypeaheadMenuPluginProps): JSX.Element | null {\n const [editor] = useLexicalComposerContext()\n const [resolution, setResolution] = useState<MenuResolution | null>(null)\n const anchorElementRef = useMenuAnchorRef(anchorElem, resolution, setResolution, anchorClassName)\n\n const closeTypeahead = useCallback(() => {\n setResolution(null)\n if (onClose != null && resolution !== null) {\n onClose()\n }\n }, [onClose, resolution])\n\n const openTypeahead = useCallback(\n (res: MenuResolution) => {\n setResolution(res)\n if (onOpen != null && resolution === null) {\n onOpen(res)\n }\n },\n [onOpen, resolution],\n )\n\n // This is mainly used for the AddBlockHandlePlugin, so that the slash menu can be opened from there\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand(\n ENABLE_SLASH_MENU_COMMAND,\n ({ node }) => {\n editor.getEditorState().read(() => {\n const match: MenuTextMatch = {\n leadOffset: 0,\n matchingString: '',\n replaceableString: '',\n }\n if (!isSelectionOnEntityBoundary(editor, match.leadOffset)) {\n if (node !== null) {\n const editorWindow = editor._window ?? window\n const range = editorWindow.document.createRange()\n\n const isRangePositioned = tryToPositionRange(match.leadOffset, range, editorWindow)\n if (isRangePositioned !== null) {\n startTransition(() =>\n openTypeahead({\n getRect: () => {\n return range.getBoundingClientRect()\n },\n match,\n }),\n )\n }\n\n return\n }\n }\n })\n\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n )\n }, [editor, openTypeahead])\n\n useEffect(() => {\n const updateListener = () => {\n editor.getEditorState().read(() => {\n const editorWindow = editor._window ?? window\n const range = editorWindow.document.createRange()\n const selection = $getSelection()\n const text = getQueryTextForSearch(editor)\n\n if (\n !$isRangeSelection(selection) ||\n !selection.isCollapsed() ||\n text === undefined ||\n range === null\n ) {\n closeTypeahead()\n return\n }\n\n const match = triggerFn({ editor, query: text })\n onQueryChange(match ? match.matchingString : null)\n\n if (match !== null && !isSelectionOnEntityBoundary(editor, match.leadOffset)) {\n const isRangePositioned = tryToPositionRange(match.leadOffset, range, editorWindow)\n if (isRangePositioned !== null) {\n startTransition(() =>\n openTypeahead({\n getRect: () => {\n return range.getBoundingClientRect()\n },\n match,\n }),\n )\n return\n }\n }\n closeTypeahead()\n })\n }\n\n const removeUpdateListener = editor.registerUpdateListener(updateListener)\n\n return () => {\n removeUpdateListener()\n }\n }, [editor, triggerFn, onQueryChange, resolution, closeTypeahead, openTypeahead])\n\n return anchorElementRef.current === null || resolution === null || editor === null ? null : (\n <LexicalMenu\n anchorElementRef={anchorElementRef}\n close={closeTypeahead}\n editor={editor}\n groups={groups}\n menuRenderFn={menuRenderFn}\n resolution={resolution}\n shouldSplitNodeWithQuery\n />\n )\n}\n\nexport type { MenuRenderFn, MenuResolution, MenuTextMatch, TriggerFn }\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAGA,SAASC,yBAAyB,QAAQ;AAC1C,SAASC,aAAa,QAAQ;AAC9B,SACEC,aAAa,EACbC,iBAAiB,EACjBC,WAAW,EACXC,oBAAoB,EACpBC,aAAa,QACR;AACP,SAAmBC,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ;AAC3D,YAAYC,KAAA,MAAW;AAMvB,SAASC,WAAW,EAAEC,gBAAgB,QAAQ;AAE9C,OAAO,MAAMC,WAAA,GAAc;AAE3B,SAASC,kBAAkBC,SAAyB;EAClD,MAAMC,MAAA,GAASD,SAAA,CAAUC,MAAM;EAC/B,IAAIA,MAAA,CAAOC,IAAI,KAAK,QAAQ;IAC1B,OAAO;EACT;EACA,MAAMC,UAAA,GAAaF,MAAA,CAAOG,OAAO;EACjC,IAAI,CAACD,UAAA,CAAWE,YAAY,IAAI;IAC9B,OAAO;EACT;EACA,MAAMC,YAAA,GAAeL,MAAA,CAAOM,MAAM;EAClC,OAAOJ,UAAA,CAAWK,cAAc,GAAGC,KAAK,CAAC,GAAGH,YAAA;AAC9C;AAEA,SAASI,mBAAmBC,UAAkB,EAAEC,KAAY,EAAEC,YAAoB;EAChF,MAAMC,YAAA,GAAeD,YAAA,CAAaE,YAAY;EAC9C,IAAID,YAAA,KAAiB,QAAQ,CAACA,YAAA,CAAaE,WAAW,EAAE;IACtD,OAAO;EACT;EACA,MAAMb,UAAA,GAAaW,YAAA,CAAaX,UAAU;EAC1C,MAAMc,WAAA,GAAcN,UAAA;EACpB,MAAMO,SAAA,GAAYJ,YAAA,CAAaR,YAAY;EAE3C,IAAIH,UAAA,IAAc,QAAQe,SAAA,IAAa,MAAM;IAC3C,OAAO;EACT;EAEA,IAAI;IACFN,KAAA,CAAMO,QAAQ,CAAChB,UAAA,EAAYc,WAAA;IAC3B;IACAL,KAAA,CAAMQ,MAAM,CAACjB,UAAA,EAAYe,SAAA,GAAY,IAAIA,SAAA,GAAY;EACvD,EAAE,OAAOG,KAAA,EAAO;IACd,OAAO;EACT;EAEA,OAAO;AACT;AAEA,SAASC,sBAAsBC,MAAqB;EAClD,IAAIC,IAAA;EACJD,MAAA,CAAOE,cAAc,GAAGC,IAAI,CAAC;IAC3B,MAAM1B,SAAA,GAAYb,aAAA;IAClB,IAAI,CAACC,iBAAA,CAAkBY,SAAA,GAAY;MACjC;IACF;IACAwB,IAAA,GAAOzB,iBAAA,CAAkBC,SAAA;EAC3B;EACA,OAAOwB,IAAA;AACT;AAEA,SAASG,4BAA4BJ,MAAqB,EAAEhB,MAAc;EACxE,IAAIA,MAAA,KAAW,GAAG;IAChB,OAAO;EACT;EACA,OAAOgB,MAAA,CAAOE,cAAc,GAAGC,IAAI,CAAC;IAClC,MAAM1B,SAAA,GAAYb,aAAA;IAClB,IAAIC,iBAAA,CAAkBY,SAAA,GAAY;MAChC,MAAMC,MAAA,GAASD,SAAA,CAAUC,MAAM;MAC/B,MAAME,UAAA,GAAaF,MAAA,CAAOG,OAAO;MACjC,MAAMwB,WAAA,GAAczB,UAAA,CAAW0B,kBAAkB;MACjD,OAAOxC,WAAA,CAAYuC,WAAA,KAAgBA,WAAA,CAAYE,YAAY;IAC7D;IACA,OAAO;EACT;AACF;AAEA,SAASC,gBAAgBC,QAAoB;EAC3C,IAAIrC,KAAA,CAAMoC,eAAe,EAAE;IACzBpC,KAAA,CAAMoC,eAAe,CAACC,QAAA;EACxB,OAAO;IACLA,QAAA;EACF;AACF;AAEA,SAASC,qBAAqB,QAAQ;AAatC,OAAO,MAAMC,yBAAA,GAER3C,aAAA,CAAc;AAEnB,OAAO,SAAA4C,2BAAAC,EAAA;EAAA,MAAAC,CAAA,GAAArD,EAAA;EAAoC;IAAAsD,eAAA;IAAAC,UAAA;IAAAC,MAAA;IAAAC,YAAA;IAAAC,OAAA;IAAAC,MAAA;IAAAC,aAAA;IAAAC;EAAA,IAAAT,EAShB;EACzB,OAAAb,MAAA,IAAiBtC,yBAAA;EACjB,OAAA6D,UAAA,EAAAC,aAAA,IAAoCrD,QAAA,KAAgC;EACpE,MAAAsD,gBAAA,GAAyBnD,gBAAA,CAAiB0C,UAAA,EAAYO,UAAA,EAAYC,aAAA,EAAeT,eAAA;EAAA,IAAAW,EAAA;EAAA,IAAAZ,CAAA,QAAAK,OAAA,IAAAL,CAAA,QAAAS,UAAA;IAE9CG,EAAA,GAAAA,CAAA;MACjCF,aAAA,KAAc;MAAA,IACVL,OAAA,QAAW,IAAQI,UAAA,SAAe;QACpCJ,OAAA;MAAA;IAAA;IAEJL,CAAA,MAAAK,OAAA;IAAAL,CAAA,MAAAS,UAAA;IAAAT,CAAA,MAAAY,EAAA;EAAA;IAAAA,EAAA,GAAAZ,CAAA;EAAA;EALA,MAAAa,cAAA,GAAuBD,EAKC;EAAA,IAAAE,EAAA;EAAA,IAAAd,CAAA,QAAAM,MAAA,IAAAN,CAAA,QAAAS,UAAA;IAGtBK,EAAA,GAAAC,GAAA;MACEL,aAAA,CAAcK,GAAA;MAAA,IACVT,MAAA,QAAU,IAAQG,UAAA,SAAe;QACnCH,MAAA,CAAOS,GAAA;MAAA;IAAA;IAEXf,CAAA,MAAAM,MAAA;IAAAN,CAAA,MAAAS,UAAA;IAAAT,CAAA,MAAAc,EAAA;EAAA;IAAAA,EAAA,GAAAd,CAAA;EAAA;EANF,MAAAgB,aAAA,GAAsBF,EAOA;EAAA,IAAAG,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAlB,CAAA,QAAAd,MAAA,IAAAc,CAAA,QAAAgB,aAAA;IAIZC,EAAA,GAAAA,CAAA,KACDpE,aAAA,CACLqC,MAAA,CAAAiC,eAAA,CAAAtB,yBAAA,EAAAuB,EAAA;MAEG;QAAAC;MAAA,IAAAD,EAAQ;MACPlC,MAAA,CAAAE,cAAA,CAAqB,EAAAC,IAAA;QACnB,MAAAiC,KAAA;UAAAhD,UAAA;UAAAiD,cAAA,EAEkB;UAAAC,iBAAA,EACG;QAAA;QACrB,KACKlC,2BAAA,CAA4BJ,MAAA,EAAQoC,KAAA,CAAAhD,UAAgB;UAAA,IACnD+C,IAAA,SAAS;YACX,MAAA7C,YAAA,GAAqBU,MAAA,CAAAuC,OAAA,IAAAC,MAAkB;YACvC,MAAAnD,KAAA,GAAcC,YAAA,CAAAmD,QAAA,CAAAC,WAAA,CAAiC;YAE/C,MAAAC,iBAAA,GAA0BxD,kBAAA,CAAmBiD,KAAA,CAAAhD,UAAA,EAAkBC,KAAA,EAAOC,YAAA;YAAA,IAClEqD,iBAAA,SAAsB;cACxBnC,eAAA,OACEsB,aAAA;gBAAAc,OAAA,EAAAA,CAAA,KAEWvD,KAAA,CAAAwD,qBAAA,CAA2B;gBAAAT;cAAA,CAGtC;YAAA;YAAA;UAAA;QAAA;MAAA,CAOV;MAAA;IAAA,GAAArE,oBAIF;IAGHiE,EAAA,IAAChC,MAAA,EAAQ8B,aAAA;IAAchB,CAAA,MAAAd,MAAA;IAAAc,CAAA,MAAAgB,aAAA;IAAAhB,CAAA,MAAAiB,EAAA;IAAAjB,CAAA,MAAAkB,EAAA;EAAA;IAAAD,EAAA,GAAAjB,CAAA;IAAAkB,EAAA,GAAAlB,CAAA;EAAA;EAtC1B5C,SAAA,CAAU6D,EAsCV,EAAGC,EAAuB;EAAA,IAAAE,EAAA;EAAA,IAAApB,CAAA,SAAAd,MAAA,IAAAc,CAAA,SAAAa,cAAA,IAAAb,CAAA,SAAAQ,SAAA,IAAAR,CAAA,SAAAO,aAAA,IAAAP,CAAA,SAAAgB,aAAA;IAEhBI,EAAA,GAAAA,CAAA;MACR,MAAAY,cAAA,GAAAA,CAAA;QACE9C,MAAA,CAAAE,cAAA,CAAqB,EAAAC,IAAA;UACnB,MAAA4C,cAAA,GAAqB/C,MAAA,CAAAuC,OAAA,IAAAC,MAAkB;UACvC,MAAAQ,OAAA,GAAc1D,cAAA,CAAAmD,QAAA,CAAAC,WAAA,CAAiC;UAC/C,MAAAjE,SAAA,GAAkBb,aAAA;UAClB,MAAAqC,IAAA,GAAaF,qBAAA,CAAsBC,MAAA;UAAA,IAGjC,CAACnC,iBAAA,CAAkBY,SAAA,MAClBA,SAAA,CAAAgB,WAAA,CAAqB,KACtBQ,IAAA,KAAAgD,SAAS,IACT5D,OAAA,SAAU;YAEVsC,cAAA;YAAA;UAAA;UAIF,MAAAuB,OAAA,GAAc5B,SAAA;YAAAtB,MAAA;YAAAmD,KAAA,EAA2BlD;UAAA,CAAK;UAC9CoB,aAAA,CAAce,OAAA,GAAQA,OAAA,CAAAC,cAAA,OAAuB;UAAA,IAEzCD,OAAA,SAAU,KAAShC,2BAAA,CAA4BJ,MAAA,EAAQoC,OAAA,CAAAhD,UAAgB;YACzE,MAAAgE,mBAAA,GAA0BjE,kBAAA,CAAmBiD,OAAA,CAAAhD,UAAA,EAAkBC,OAAA,EAAOC,cAAA;YAAA,IAClEqD,mBAAA,SAAsB;cACxBnC,eAAA,OACEsB,aAAA;gBAAAc,OAAA,EAAAA,CAAA,KAEWvD,OAAA,CAAAwD,qBAAA,CAA2B;gBAAAT,KAAA,EAEpCA;cAAA,CACF;cAAA;YAAA;UAAA;UAKNT,cAAA;QAAA,CACF;MAAA;MAGF,MAAA0B,oBAAA,GAA6BrD,MAAA,CAAAsD,sBAAA,CAA8BR,cAAA;MAAA;QAGzDO,oBAAA;MAAA;IAAA;IAEJvC,CAAA,OAAAd,MAAA;IAAAc,CAAA,OAAAa,cAAA;IAAAb,CAAA,OAAAQ,SAAA;IAAAR,CAAA,OAAAO,aAAA;IAAAP,CAAA,OAAAgB,aAAA;IAAAhB,CAAA,OAAAoB,EAAA;EAAA;IAAAA,EAAA,GAAApB,CAAA;EAAA;EAAA,IAAAyC,EAAA;EAAA,IAAAzC,CAAA,SAAAd,MAAA,IAAAc,CAAA,SAAAQ,SAAA,IAAAR,CAAA,SAAAO,aAAA,IAAAP,CAAA,SAAAS,UAAA,IAAAT,CAAA,SAAAa,cAAA,IAAAb,CAAA,SAAAgB,aAAA;IAAGyB,EAAA,IAACvD,MAAA,EAAQsB,SAAA,EAAWD,aAAA,EAAeE,UAAA,EAAYI,cAAA,EAAgBG,aAAA;IAAchB,CAAA,OAAAd,MAAA;IAAAc,CAAA,OAAAQ,SAAA;IAAAR,CAAA,OAAAO,aAAA;IAAAP,CAAA,OAAAS,UAAA;IAAAT,CAAA,OAAAa,cAAA;IAAAb,CAAA,OAAAgB,aAAA;IAAAhB,CAAA,OAAAyC,EAAA;EAAA;IAAAA,EAAA,GAAAzC,CAAA;EAAA;EA5ChF5C,SAAA,CAAUgE,EA4CV,EAAGqB,EAA6E;EAAA,IAAAC,EAAA;EAAA,IAAA1C,CAAA,SAAAW,gBAAA,IAAAX,CAAA,SAAAS,UAAA,IAAAT,CAAA,SAAAd,MAAA,IAAAc,CAAA,SAAAa,cAAA,IAAAb,CAAA,SAAAG,MAAA,IAAAH,CAAA,SAAAI,YAAA;IAEzEsC,EAAA,GAAA/B,gBAAA,CAAAgC,OAAA,SAA6B,IAAQlC,UAAA,SAAe,IAAQvB,MAAA,SAAW,UAC5E0D,IAAA,CAAArF,WAAA;MAAAoD,gBAAA;MAAAkC,KAAA,EAEShC,cAAA;MAAA3B,MAAA;MAAAiB,MAAA;MAAAC,YAAA;MAAAK,UAAA;MAAAqC,wBAAA;IAAA,C;;;;;;;;;;;SAHJJ,E","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lexical/plugins/SlashMenu/index.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAW9B,OAAO,cAAc,CAAA;AA+DrB,wBAAgB,eAAe,CAAC,EAC9B,UAA0B,GAC3B,EAAE;IACD,UAAU,CAAC,EAAE,WAAW,CAAA;CACzB,GAAG,KAAK,CAAC,YAAY,CAoKrB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lexical/plugins/SlashMenu/index.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAW9B,OAAO,cAAc,CAAA;AA+DrB,wBAAgB,eAAe,CAAC,EAC9B,UAA0B,GAC3B,EAAE;IACD,UAAU,CAAC,EAAE,WAAW,CAAA;CACzB,GAAG,KAAK,CAAC,YAAY,CA6JrB"}