@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.
- package/dist/exports/client/Field-OHQPCDNR.js +2 -0
- package/dist/exports/client/Field-OHQPCDNR.js.map +7 -0
- package/dist/exports/client/RelationshipComponent-XOQBVKA3.js +2 -0
- package/dist/exports/client/RelationshipComponent-XOQBVKA3.js.map +7 -0
- package/dist/exports/client/bundled.css +1 -1
- package/dist/exports/client/chunk-2L2Z4JHF.js +12 -0
- package/dist/exports/client/chunk-2L2Z4JHF.js.map +7 -0
- package/dist/exports/client/{chunk-C7S3V4EB.js → chunk-DOK5S7LE.js} +2 -2
- package/dist/exports/client/chunk-DOK5S7LE.js.map +7 -0
- package/dist/exports/client/chunk-KYPSISKB.js +2 -0
- package/dist/exports/client/chunk-KYPSISKB.js.map +7 -0
- package/dist/exports/client/chunk-ZTAS32RX.js +2 -0
- package/dist/exports/client/{chunk-MI5HS4QX.js.map → chunk-ZTAS32RX.js.map} +3 -3
- package/dist/exports/client/{component-H3EYQ5KG.js → component-D6PKVJ2K.js} +2 -2
- package/dist/exports/client/component-D6PKVJ2K.js.map +7 -0
- package/dist/exports/client/componentInline-EYXL5S2C.js +2 -0
- package/dist/exports/client/index.d.ts +3 -0
- package/dist/exports/client/index.d.ts.map +1 -1
- package/dist/exports/client/index.js +11 -11
- package/dist/exports/client/index.js.map +3 -3
- package/dist/exports/server/ast/mdx.d.ts.map +1 -1
- package/dist/exports/server/ast/mdx.js +6 -0
- package/dist/exports/server/ast/mdx.js.map +1 -1
- package/dist/features/align/server/i18n.d.ts.map +1 -1
- package/dist/features/align/server/i18n.js +6 -0
- package/dist/features/align/server/i18n.js.map +1 -1
- package/dist/features/blockquote/server/i18n.d.ts.map +1 -1
- package/dist/features/blockquote/server/i18n.js +3 -0
- package/dist/features/blockquote/server/i18n.js.map +1 -1
- package/dist/features/blockquote/server/index.d.ts.map +1 -1
- package/dist/features/blockquote/server/index.js +2 -1
- package/dist/features/blockquote/server/index.js.map +1 -1
- package/dist/features/blocks/client/component/index.d.ts.map +1 -1
- package/dist/features/blocks/client/component/index.js +27 -9
- package/dist/features/blocks/client/component/index.js.map +1 -1
- package/dist/features/blocks/client/componentInline/components/InlineBlockContainer.d.ts +1 -1
- package/dist/features/blocks/client/componentInline/components/InlineBlockContainer.d.ts.map +1 -1
- package/dist/features/blocks/client/componentInline/components/InlineBlockContainer.js.map +1 -1
- package/dist/features/blocks/client/componentInline/index.d.ts.map +1 -1
- package/dist/features/blocks/client/componentInline/index.js +27 -7
- package/dist/features/blocks/client/componentInline/index.js.map +1 -1
- package/dist/features/blocks/client/index.d.ts.map +1 -1
- package/dist/features/blocks/client/index.js.map +1 -1
- package/dist/features/blocks/server/graphQLPopulationPromise.d.ts.map +1 -1
- package/dist/features/blocks/server/graphQLPopulationPromise.js.map +1 -1
- package/dist/features/blocks/server/i18n.d.ts.map +1 -1
- package/dist/features/blocks/server/i18n.js +9 -0
- package/dist/features/blocks/server/i18n.js.map +1 -1
- package/dist/features/converters/html/converter/converters/paragraph.d.ts.map +1 -1
- package/dist/features/converters/html/converter/converters/paragraph.js +2 -1
- package/dist/features/converters/html/converter/converters/paragraph.js.map +1 -1
- package/dist/features/converters/html/converter/defaultConverters.d.ts +1 -1
- package/dist/features/converters/html/converter/defaultConverters.d.ts.map +1 -1
- package/dist/features/converters/html/converter/defaultConverters.js.map +1 -1
- package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.d.ts.map +1 -1
- package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.js +23 -17
- package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.js.map +1 -1
- package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.d.ts.map +1 -1
- package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.js +4 -2
- package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.js.map +1 -1
- package/dist/features/experimental_table/client/utils/debounce.d.ts.map +1 -1
- package/dist/features/experimental_table/client/utils/debounce.js +3 -0
- package/dist/features/experimental_table/client/utils/debounce.js.map +1 -1
- package/dist/features/experimental_table/client/utils/useDebounce.d.ts +1 -5
- package/dist/features/experimental_table/client/utils/useDebounce.d.ts.map +1 -1
- package/dist/features/experimental_table/client/utils/useDebounce.js +40 -10
- package/dist/features/experimental_table/client/utils/useDebounce.js.map +1 -1
- package/dist/features/heading/server/i18n.d.ts.map +1 -1
- package/dist/features/heading/server/i18n.js +3 -0
- package/dist/features/heading/server/i18n.js.map +1 -1
- package/dist/features/heading/server/index.d.ts.map +1 -1
- package/dist/features/heading/server/index.js +2 -1
- package/dist/features/heading/server/index.js.map +1 -1
- package/dist/features/horizontalRule/server/i18n.d.ts.map +1 -1
- package/dist/features/horizontalRule/server/i18n.js +3 -0
- package/dist/features/horizontalRule/server/i18n.js.map +1 -1
- package/dist/features/indent/server/i18n.d.ts.map +1 -1
- package/dist/features/indent/server/i18n.js +4 -0
- package/dist/features/indent/server/i18n.js.map +1 -1
- package/dist/features/link/server/i18n.d.ts.map +1 -1
- package/dist/features/link/server/i18n.js +4 -0
- package/dist/features/link/server/i18n.js.map +1 -1
- package/dist/features/lists/checklist/server/i18n.d.ts.map +1 -1
- package/dist/features/lists/checklist/server/i18n.js +3 -0
- package/dist/features/lists/checklist/server/i18n.js.map +1 -1
- package/dist/features/lists/checklist/server/index.js.map +1 -1
- package/dist/features/lists/orderedList/server/i18n.d.ts.map +1 -1
- package/dist/features/lists/orderedList/server/i18n.js +3 -0
- package/dist/features/lists/orderedList/server/i18n.js.map +1 -1
- package/dist/features/lists/orderedList/server/index.js.map +1 -1
- package/dist/features/lists/unorderedList/server/i18n.d.ts.map +1 -1
- package/dist/features/lists/unorderedList/server/i18n.js +3 -0
- package/dist/features/lists/unorderedList/server/i18n.js.map +1 -1
- package/dist/features/lists/unorderedList/server/index.js.map +1 -1
- package/dist/features/paragraph/server/i18n.d.ts.map +1 -1
- package/dist/features/paragraph/server/i18n.js +4 -0
- package/dist/features/paragraph/server/i18n.js.map +1 -1
- package/dist/features/relationship/client/components/RelationshipComponent.d.ts.map +1 -1
- package/dist/features/relationship/client/components/RelationshipComponent.js +1 -3
- package/dist/features/relationship/client/components/RelationshipComponent.js.map +1 -1
- package/dist/features/relationship/client/drawer/index.js.map +1 -1
- package/dist/features/relationship/server/i18n.d.ts.map +1 -1
- package/dist/features/relationship/server/i18n.js +3 -0
- package/dist/features/relationship/server/i18n.js.map +1 -1
- package/dist/features/relationship/server/nodes/RelationshipNode.d.ts +1 -1
- package/dist/features/relationship/server/nodes/RelationshipNode.d.ts.map +1 -1
- package/dist/features/relationship/server/nodes/RelationshipNode.js +3 -3
- package/dist/features/relationship/server/nodes/RelationshipNode.js.map +1 -1
- package/dist/features/toolbars/fixed/client/Toolbar/index.d.ts +2 -2
- package/dist/features/toolbars/fixed/client/Toolbar/index.d.ts.map +1 -1
- package/dist/features/toolbars/fixed/client/Toolbar/index.js +64 -71
- package/dist/features/toolbars/fixed/client/Toolbar/index.js.map +1 -1
- package/dist/features/toolbars/inline/client/Toolbar/index.js +31 -51
- package/dist/features/toolbars/inline/client/Toolbar/index.js.map +1 -1
- package/dist/features/toolbars/shared/ToolbarButton/index.d.ts.map +1 -1
- package/dist/features/toolbars/shared/ToolbarButton/index.js +152 -62
- package/dist/features/toolbars/shared/ToolbarButton/index.js.map +1 -1
- package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.d.ts +1 -1
- package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.d.ts.map +1 -1
- package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js +4 -2
- package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js.map +1 -1
- package/dist/features/toolbars/shared/ToolbarDropdown/index.d.ts.map +1 -1
- package/dist/features/toolbars/shared/ToolbarDropdown/index.js +8 -20
- package/dist/features/toolbars/shared/ToolbarDropdown/index.js.map +1 -1
- package/dist/features/toolbars/types.d.ts +9 -0
- package/dist/features/toolbars/types.d.ts.map +1 -1
- package/dist/features/toolbars/types.js.map +1 -1
- package/dist/features/typesClient.d.ts +39 -36
- package/dist/features/typesClient.d.ts.map +1 -1
- package/dist/features/typesClient.js.map +1 -1
- package/dist/features/typesServer.d.ts.map +1 -1
- package/dist/features/typesServer.js.map +1 -1
- package/dist/features/upload/client/component/index.js.map +1 -1
- package/dist/features/upload/client/drawer/index.js.map +1 -1
- package/dist/features/upload/client/nodes/UploadNode.d.ts +1 -1
- package/dist/features/upload/client/nodes/UploadNode.d.ts.map +1 -1
- package/dist/features/upload/client/nodes/UploadNode.js.map +1 -1
- package/dist/features/upload/client/plugin/index.d.ts +2 -2
- package/dist/features/upload/client/plugin/index.d.ts.map +1 -1
- package/dist/features/upload/client/plugin/index.js.map +1 -1
- package/dist/features/upload/server/i18n.d.ts.map +1 -1
- package/dist/features/upload/server/i18n.js +3 -0
- package/dist/features/upload/server/i18n.js.map +1 -1
- package/dist/features/upload/server/nodes/UploadNode.d.ts +1 -1
- package/dist/features/upload/server/nodes/UploadNode.d.ts.map +1 -1
- package/dist/features/upload/server/nodes/UploadNode.js.map +1 -1
- package/dist/field/Field.d.ts +1 -1
- package/dist/field/Field.d.ts.map +1 -1
- package/dist/field/Field.js +2 -1
- package/dist/field/Field.js.map +1 -1
- package/dist/field/bundled.css +1 -1
- package/dist/field/rscEntry.js +1 -1
- package/dist/field/rscEntry.js.map +1 -1
- package/dist/i18n.d.ts.map +1 -1
- package/dist/i18n.js +70 -32
- package/dist/i18n.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/lexical/LexicalProvider.d.ts.map +1 -1
- package/dist/lexical/LexicalProvider.js.map +1 -1
- package/dist/lexical/config/client/sanitize.js.map +1 -1
- package/dist/lexical/config/server/sanitize.d.ts.map +1 -1
- package/dist/lexical/config/server/sanitize.js +1 -0
- package/dist/lexical/config/server/sanitize.js.map +1 -1
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.d.ts +2 -3
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.d.ts.map +1 -1
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js +139 -89
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js.map +1 -1
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.d.ts +2 -3
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.d.ts.map +1 -1
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.js +4 -7
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.js.map +1 -1
- package/dist/lexical/plugins/SlashMenu/index.d.ts.map +1 -1
- package/dist/lexical/plugins/SlashMenu/index.js +8 -14
- package/dist/lexical/plugins/SlashMenu/index.js.map +1 -1
- package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.d.ts.map +1 -1
- package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.js +1 -0
- package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.js.map +1 -1
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/debounce.d.ts +1 -1
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/debounce.d.ts.map +1 -1
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/debounce.js +1 -1
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/debounce.js.map +1 -1
- package/dist/utilities/buildInitialState.js +1 -1
- package/dist/utilities/buildInitialState.js.map +1 -1
- package/dist/utilities/fieldsDrawer/DrawerContent.js.map +1 -1
- package/dist/utilities/generateImportMap.d.ts.map +1 -1
- package/dist/utilities/generateImportMap.js +4 -1
- package/dist/utilities/generateImportMap.js.map +1 -1
- package/dist/utilities/jsx/jsx.d.ts.map +1 -1
- package/dist/utilities/jsx/jsx.js +1 -0
- package/dist/utilities/jsx/jsx.js.map +1 -1
- package/dist/utilities/migrateSlateToLexical/index.d.ts.map +1 -1
- package/dist/utilities/migrateSlateToLexical/index.js +1 -1
- package/dist/utilities/migrateSlateToLexical/index.js.map +1 -1
- package/dist/validate/index.d.ts.map +1 -1
- package/dist/validate/index.js.map +1 -1
- package/package.json +7 -7
- package/dist/exports/client/Field-IS3XMKMO.js +0 -2
- package/dist/exports/client/Field-IS3XMKMO.js.map +0 -7
- package/dist/exports/client/RelationshipComponent-2RT3YXUT.js +0 -2
- package/dist/exports/client/RelationshipComponent-2RT3YXUT.js.map +0 -7
- package/dist/exports/client/chunk-C7S3V4EB.js.map +0 -7
- package/dist/exports/client/chunk-CBUZKU7S.js +0 -12
- package/dist/exports/client/chunk-CBUZKU7S.js.map +0 -7
- package/dist/exports/client/chunk-MI5HS4QX.js +0 -2
- package/dist/exports/client/chunk-U7O7EYCP.js +0 -2
- package/dist/exports/client/chunk-U7O7EYCP.js.map +0 -7
- package/dist/exports/client/component-H3EYQ5KG.js.map +0 -7
- package/dist/exports/client/componentInline-ZGO3K4TA.js +0 -2
- /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,
|
|
102
|
-
const $ = _c(
|
|
101
|
+
export function useDynamicPositioning(resolution, targetElementRef, onReposition, onVisibilityChange) {
|
|
102
|
+
const $ = _c(12);
|
|
103
103
|
const [editor] = useLexicalComposerContext();
|
|
104
104
|
let t0;
|
|
105
|
-
|
|
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.
|
|
139
|
+
resizeObserver.disconnect();
|
|
140
140
|
window.removeEventListener("resize", onReposition);
|
|
141
141
|
document.removeEventListener("scroll", handleScroll, true);
|
|
142
142
|
};
|
|
143
143
|
}
|
|
144
144
|
};
|
|
145
|
-
|
|
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
|
-
|
|
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
|
-
|
|
204
|
-
|
|
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
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
const
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
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
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
containerDiv.
|
|
351
|
-
|
|
352
|
-
containerDiv.style.
|
|
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
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
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
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
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
|
-
|
|
392
|
-
|
|
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
|
|
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,
|
|
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,
|
|
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(
|
|
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
|
|
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] =
|
|
243
|
-
$[30] = t7;
|
|
240
|
+
$[29] = t7;
|
|
244
241
|
} else {
|
|
245
|
-
t7 = $[
|
|
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":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lexical/plugins/SlashMenu/index.tsx"],"names":[],"mappings":"
|
|
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"}
|