@payloadcms/richtext-lexical 4.0.0-internal.ea6e8f8 → 4.0.0-internal.ee5d8bd
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-334JNLRF.js +2 -0
- package/dist/exports/client/Field-334JNLRF.js.map +7 -0
- package/dist/exports/client/{RelationshipComponent-YCPAKOL7.js → RelationshipComponent-TVK6I4W4.js} +2 -2
- package/dist/exports/client/chunk-BEKGION5.js +2 -0
- package/dist/exports/client/chunk-BEKGION5.js.map +7 -0
- package/dist/exports/client/{chunk-WSAPGI3Z.js → chunk-EA5BHQ2T.js} +1 -1
- package/dist/exports/client/{chunk-WSAPGI3Z.js.map → chunk-EA5BHQ2T.js.map} +1 -1
- package/dist/exports/client/chunk-FAJJXXCW.js +2 -0
- package/dist/exports/client/{chunk-3LRZDIIG.js.map → chunk-FAJJXXCW.js.map} +2 -2
- package/dist/exports/client/{chunk-5VIL27GI.js → chunk-IYBYNEKX.js} +1 -1
- package/dist/exports/client/{chunk-5VIL27GI.js.map → chunk-IYBYNEKX.js.map} +1 -1
- package/dist/exports/client/chunk-SE5IITBK.js +2 -0
- package/dist/exports/client/chunk-SE5IITBK.js.map +7 -0
- package/dist/exports/client/{component-6DQLENIE.js → component-QENB4QTS.js} +2 -2
- package/dist/exports/client/componentInline-AU7IBNY7.js +2 -0
- package/dist/exports/client/index.js +26 -26
- package/dist/exports/client/index.js.map +4 -4
- package/dist/features/align/client/index.js.map +1 -1
- package/dist/features/blocks/client/component/BlockContent.js.map +1 -1
- package/dist/features/blocks/client/component/components/BlockCollapsible.js.map +1 -1
- package/dist/features/blocks/client/component/components/BlockEditButton.js.map +1 -1
- package/dist/features/blocks/client/component/components/BlockRemoveButton.js.map +1 -1
- package/dist/features/blocks/client/component/index.d.ts.map +1 -1
- package/dist/features/blocks/client/component/index.js +38 -16
- package/dist/features/blocks/client/component/index.js.map +1 -1
- package/dist/features/blocks/client/componentInline/components/InlineBlockContainer.js.map +1 -1
- package/dist/features/blocks/client/componentInline/components/InlineBlockEditButton.js.map +1 -1
- package/dist/features/blocks/client/componentInline/components/InlineBlockLabel.js.map +1 -1
- package/dist/features/blocks/client/componentInline/components/InlineBlockRemoveButton.js.map +1 -1
- package/dist/features/blocks/client/componentInline/index.d.ts.map +1 -1
- package/dist/features/blocks/client/componentInline/index.js +5 -11
- package/dist/features/blocks/client/componentInline/index.js.map +1 -1
- package/dist/features/blocks/client/getCachedFormStateIfDataMatches.js.map +1 -1
- package/dist/features/blocks/client/plugin/index.js.map +1 -1
- package/dist/features/blocks/premade/CodeBlock/Component/Block.js +121 -78
- package/dist/features/blocks/premade/CodeBlock/Component/Block.js.map +1 -1
- package/dist/features/blocks/premade/CodeBlock/Component/Code.js +142 -87
- package/dist/features/blocks/premade/CodeBlock/Component/Code.js.map +1 -1
- package/dist/features/converters/lexicalToHtml/sync/types.d.ts.map +1 -1
- package/dist/features/converters/lexicalToHtml/sync/types.js.map +1 -1
- package/dist/features/debug/jsxConverter/client/plugin/index.js.map +1 -1
- package/dist/features/debug/testRecorder/client/plugin/index.js.map +1 -1
- package/dist/features/debug/treeView/client/plugin/index.js.map +1 -1
- package/dist/features/heading/client/index.js.map +1 -1
- package/dist/features/horizontalRule/client/plugin/index.js.map +1 -1
- package/dist/features/indent/client/index.d.ts.map +1 -1
- package/dist/features/indent/client/index.js +0 -2
- package/dist/features/indent/client/index.js.map +1 -1
- package/dist/features/indent/server/i18n.d.ts.map +1 -1
- package/dist/features/indent/server/i18n.js.map +1 -1
- package/dist/features/link/client/plugins/autoLink/index.js.map +1 -1
- package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.d.ts.map +1 -1
- package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js +10 -2
- package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js.map +1 -1
- package/dist/features/link/client/plugins/link/index.js.map +1 -1
- package/dist/features/link/markdownTransformer.js +2 -2
- package/dist/features/link/markdownTransformer.js.map +1 -1
- package/dist/features/link/server/baseFields.js.map +1 -1
- package/dist/features/lists/shared/schema.d.ts.map +1 -1
- package/dist/features/lists/shared/schema.js.map +1 -1
- package/dist/features/relationship/client/drawer/index.js.map +1 -1
- package/dist/features/relationship/client/plugins/index.js.map +1 -1
- package/dist/features/relationship/client/utils/useEnabledRelationships.js.map +1 -1
- package/dist/features/table/client/plugins/TableActionMenuPlugin/index.css +1 -1
- package/dist/features/table/client/plugins/TableActionMenuPlugin/index.js.map +1 -1
- package/dist/features/table/client/plugins/TableCellResizerPlugin/index.js +6 -6
- package/dist/features/table/client/plugins/TableCellResizerPlugin/index.js.map +1 -1
- package/dist/features/table/client/plugins/TableHoverActionsPlugin/index.js.map +1 -1
- package/dist/features/table/client/plugins/TablePlugin/index.js +54 -18
- package/dist/features/table/client/plugins/TablePlugin/index.js.map +1 -1
- package/dist/features/table/client/utils/useDebounce.js.map +1 -1
- package/dist/features/textState/defaultColors.js +1 -1
- package/dist/features/textState/defaultColors.js.map +1 -1
- package/dist/features/toolbars/fixed/client/Toolbar/horizontalWheelScroll.js.map +1 -1
- package/dist/features/toolbars/fixed/client/Toolbar/index.d.ts.map +1 -1
- package/dist/features/toolbars/fixed/client/Toolbar/index.js +141 -70
- package/dist/features/toolbars/fixed/client/Toolbar/index.js.map +1 -1
- package/dist/features/toolbars/inline/client/Toolbar/index.d.ts.map +1 -1
- package/dist/features/toolbars/inline/client/Toolbar/index.js +82 -35
- 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 +26 -2
- package/dist/features/toolbars/shared/ToolbarButton/index.js.map +1 -1
- package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js +137 -72
- 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 +22 -6
- package/dist/features/toolbars/shared/ToolbarDropdown/index.js.map +1 -1
- package/dist/features/toolbars/shared/useToolbarKeyboardNavigation.d.ts +5 -0
- package/dist/features/toolbars/shared/useToolbarKeyboardNavigation.d.ts.map +1 -0
- package/dist/features/toolbars/shared/useToolbarKeyboardNavigation.js +109 -0
- package/dist/features/toolbars/shared/useToolbarKeyboardNavigation.js.map +1 -0
- package/dist/features/upload/client/drawer/index.js.map +1 -1
- package/dist/features/upload/client/plugin/index.js.map +1 -1
- package/dist/field/RenderLexical/index.js.map +1 -1
- package/dist/field/ViewSelector.js +12 -4
- package/dist/field/ViewSelector.js.map +1 -1
- package/dist/field/bundled.css +1 -1
- package/dist/field/index.js.map +1 -1
- package/dist/field/rscEntry.d.ts +2 -2
- package/dist/field/rscEntry.d.ts.map +1 -1
- package/dist/field/rscEntry.js.map +1 -1
- package/dist/i18n.d.ts.map +1 -1
- package/dist/i18n.js +44 -0
- package/dist/i18n.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lexical/LexicalEditor.js.map +1 -1
- package/dist/lexical/plugins/ClipboardPlugin/index.js.map +1 -1
- package/dist/lexical/plugins/DecoratorPlugin/index.js.map +1 -1
- package/dist/lexical/plugins/InsertParagraphAtEnd/index.js.map +1 -1
- package/dist/lexical/plugins/MarkdownShortcut/index.js.map +1 -1
- package/dist/lexical/plugins/NodeViewOverridePlugin/index.js.map +1 -1
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js +234 -87
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js.map +1 -1
- package/dist/lexical/plugins/SlashMenu/useMenuTriggerMatch.js.map +1 -1
- package/dist/lexical/plugins/TextPlugin/index.js.map +1 -1
- package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.js.map +1 -1
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.css +16 -0
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.d.ts.map +1 -1
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js +126 -38
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js.map +1 -1
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/moveBlock.d.ts +7 -0
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/moveBlock.d.ts.map +1 -0
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/moveBlock.js +15 -0
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/moveBlock.js.map +1 -0
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/useKeyboardReordering.d.ts.map +1 -1
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/useKeyboardReordering.js +9 -12
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/useKeyboardReordering.js.map +1 -1
- package/dist/lexical/ui/ContentEditable.d.ts.map +1 -1
- package/dist/lexical/ui/ContentEditable.js +16 -9
- package/dist/lexical/ui/ContentEditable.js.map +1 -1
- package/dist/lexical/utils/nodeFormat.d.ts.map +1 -1
- package/dist/lexical/utils/nodeFormat.js +0 -2
- package/dist/lexical/utils/nodeFormat.js.map +1 -1
- package/dist/lexical/utils/url.d.ts.map +1 -1
- package/dist/lexical/utils/url.js +1 -1
- package/dist/lexical/utils/url.js.map +1 -1
- package/dist/populateGraphQL/populate.d.ts.map +1 -1
- package/dist/populateGraphQL/populate.js +1 -2
- package/dist/populateGraphQL/populate.js.map +1 -1
- package/dist/types/index.d.ts +1 -4
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/utilities/buildEditorState.d.ts.map +1 -1
- package/dist/utilities/buildEditorState.js.map +1 -1
- package/dist/utilities/fieldsDrawer/Drawer.js +36 -36
- package/dist/utilities/fieldsDrawer/Drawer.js.map +1 -1
- package/dist/utilities/fieldsDrawer/DrawerContent.d.ts.map +1 -1
- package/dist/utilities/fieldsDrawer/DrawerContent.js +6 -9
- package/dist/utilities/fieldsDrawer/DrawerContent.js.map +1 -1
- package/dist/utilities/fieldsDrawer/useDrawerSubmit.js.map +1 -1
- package/dist/utilities/fieldsDrawer/useLexicalDocumentDrawer.js.map +1 -1
- package/dist/utilities/fieldsDrawer/useLexicalDrawer.js.map +1 -1
- package/dist/utilities/fieldsDrawer/useLexicalListDrawer.js.map +1 -1
- package/dist/utilities/generateImportMap.d.ts +2 -2
- package/dist/utilities/generateImportMap.d.ts.map +1 -1
- package/dist/utilities/generateImportMap.js.map +1 -1
- package/dist/utilities/initLexicalFeatures.d.ts.map +1 -1
- package/dist/utilities/initLexicalFeatures.js +38 -4
- package/dist/utilities/initLexicalFeatures.js.map +1 -1
- package/dist/utilities/useLexicalFeature.js +15 -6
- package/dist/utilities/useLexicalFeature.js.map +1 -1
- package/dist/utilities/useRunDeprioritized.js.map +1 -1
- package/package.json +32 -35
- package/dist/exports/client/Field-MT4FK3IP.js +0 -2
- package/dist/exports/client/Field-MT4FK3IP.js.map +0 -7
- package/dist/exports/client/chunk-3LRZDIIG.js +0 -2
- package/dist/exports/client/chunk-E6LSRRP2.js +0 -2
- package/dist/exports/client/chunk-E6LSRRP2.js.map +0 -7
- package/dist/exports/client/chunk-ZQX5HXUL.js +0 -2
- package/dist/exports/client/chunk-ZQX5HXUL.js.map +0 -7
- package/dist/exports/client/componentInline-HNE5G4TE.js +0 -2
- /package/dist/exports/client/{RelationshipComponent-YCPAKOL7.js.map → RelationshipComponent-TVK6I4W4.js.map} +0 -0
- /package/dist/exports/client/{component-6DQLENIE.js.map → component-QENB4QTS.js.map} +0 -0
- /package/dist/exports/client/{componentInline-HNE5G4TE.js.map → componentInline-AU7IBNY7.js.map} +0 -0
|
@@ -137,95 +137,182 @@ export function useDynamicPositioning(resolution, targetElementRef, onReposition
|
|
|
137
137
|
useEffect(t0, t1);
|
|
138
138
|
}
|
|
139
139
|
export const SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND = createCommand('SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND');
|
|
140
|
-
export function LexicalMenu({
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
140
|
+
export function LexicalMenu(t0) {
|
|
141
|
+
const $ = _c(50);
|
|
142
|
+
const {
|
|
143
|
+
anchorElementRef,
|
|
144
|
+
close,
|
|
145
|
+
editor,
|
|
146
|
+
groups,
|
|
147
|
+
menuRenderFn,
|
|
148
|
+
resolution,
|
|
149
|
+
shouldSplitNodeWithQuery: t1
|
|
150
|
+
} = t0;
|
|
151
|
+
const shouldSplitNodeWithQuery = t1 === undefined ? false : t1;
|
|
150
152
|
const [selectedItemKey, setSelectedItemKey] = useState(null);
|
|
151
|
-
const matchingString = resolution.match && resolution.match.matchingString ||
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
rootElem.
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
const setSelectedItemKeyToFirstMatchingItem = useCallback(() => {
|
|
160
|
-
// set selected item to the first of the matching ones
|
|
161
|
-
if (groups !== null && matchingString != null) {
|
|
162
|
-
// groups filtering is already handled in SlashMenu/index.tsx. Thus, groups always contains the matching items.
|
|
163
|
-
const allItems = groups.flatMap(group => group.items);
|
|
164
|
-
if (allItems.length) {
|
|
165
|
-
const firstMatchingItem = allItems[0];
|
|
166
|
-
updateSelectedItem(firstMatchingItem);
|
|
153
|
+
const matchingString = resolution.match && resolution.match.matchingString || "";
|
|
154
|
+
let t2;
|
|
155
|
+
if ($[0] !== editor) {
|
|
156
|
+
t2 = item => {
|
|
157
|
+
const rootElem = editor.getRootElement();
|
|
158
|
+
if (rootElem !== null) {
|
|
159
|
+
rootElem.setAttribute("aria-activedescendant", `${baseClass}__item-${item.key}`);
|
|
160
|
+
setSelectedItemKey(item.key);
|
|
167
161
|
}
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
162
|
+
};
|
|
163
|
+
$[0] = editor;
|
|
164
|
+
$[1] = t2;
|
|
165
|
+
} else {
|
|
166
|
+
t2 = $[1];
|
|
167
|
+
}
|
|
168
|
+
const updateSelectedItem = t2;
|
|
169
|
+
let t3;
|
|
170
|
+
if ($[2] !== groups || $[3] !== matchingString || $[4] !== updateSelectedItem) {
|
|
171
|
+
t3 = () => {
|
|
172
|
+
if (groups !== null && matchingString != null) {
|
|
173
|
+
const allItems = groups.flatMap(_temp);
|
|
174
|
+
if (allItems.length) {
|
|
175
|
+
const firstMatchingItem = allItems[0];
|
|
176
|
+
updateSelectedItem(firstMatchingItem);
|
|
177
|
+
}
|
|
179
178
|
}
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
179
|
+
};
|
|
180
|
+
$[2] = groups;
|
|
181
|
+
$[3] = matchingString;
|
|
182
|
+
$[4] = updateSelectedItem;
|
|
183
|
+
$[5] = t3;
|
|
184
|
+
} else {
|
|
185
|
+
t3 = $[5];
|
|
186
|
+
}
|
|
187
|
+
const setSelectedItemKeyToFirstMatchingItem = t3;
|
|
188
|
+
let t4;
|
|
189
|
+
if ($[6] !== setSelectedItemKeyToFirstMatchingItem) {
|
|
190
|
+
t4 = () => {
|
|
191
|
+
setSelectedItemKeyToFirstMatchingItem();
|
|
192
|
+
};
|
|
193
|
+
$[6] = setSelectedItemKeyToFirstMatchingItem;
|
|
194
|
+
$[7] = t4;
|
|
195
|
+
} else {
|
|
196
|
+
t4 = $[7];
|
|
197
|
+
}
|
|
198
|
+
let t5;
|
|
199
|
+
if ($[8] !== matchingString || $[9] !== setSelectedItemKeyToFirstMatchingItem) {
|
|
200
|
+
t5 = [matchingString, setSelectedItemKeyToFirstMatchingItem];
|
|
201
|
+
$[8] = matchingString;
|
|
202
|
+
$[9] = setSelectedItemKeyToFirstMatchingItem;
|
|
203
|
+
$[10] = t5;
|
|
204
|
+
} else {
|
|
205
|
+
t5 = $[10];
|
|
206
|
+
}
|
|
207
|
+
useEffect(t4, t5);
|
|
208
|
+
let t6;
|
|
209
|
+
if ($[11] !== close || $[12] !== editor || $[13] !== resolution.match || $[14] !== shouldSplitNodeWithQuery) {
|
|
210
|
+
t6 = selectedItem => {
|
|
211
|
+
close();
|
|
187
212
|
editor.update(() => {
|
|
188
|
-
|
|
189
|
-
|
|
213
|
+
const textNodeContainingQuery = resolution.match != null && shouldSplitNodeWithQuery ? $splitNodeContainingQuery(resolution.match) : null;
|
|
214
|
+
if (textNodeContainingQuery) {
|
|
215
|
+
textNodeContainingQuery.remove();
|
|
190
216
|
}
|
|
191
217
|
});
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
218
|
+
setTimeout(() => {
|
|
219
|
+
let selection;
|
|
220
|
+
editor.read(() => {
|
|
221
|
+
selection = $getSelection()?.clone();
|
|
222
|
+
});
|
|
223
|
+
editor.update(() => {
|
|
224
|
+
if (selection) {
|
|
225
|
+
$setSelection(selection);
|
|
226
|
+
}
|
|
227
|
+
});
|
|
228
|
+
selectedItem.onSelect({
|
|
229
|
+
editor,
|
|
230
|
+
queryString: resolution.match ? resolution.match.matchingString : ""
|
|
231
|
+
});
|
|
232
|
+
}, 0);
|
|
233
|
+
};
|
|
234
|
+
$[11] = close;
|
|
235
|
+
$[12] = editor;
|
|
236
|
+
$[13] = resolution.match;
|
|
237
|
+
$[14] = shouldSplitNodeWithQuery;
|
|
238
|
+
$[15] = t6;
|
|
239
|
+
} else {
|
|
240
|
+
t6 = $[15];
|
|
241
|
+
}
|
|
242
|
+
const selectItemAndCleanUp = t6;
|
|
243
|
+
let t7;
|
|
244
|
+
let t8;
|
|
245
|
+
if ($[16] !== editor) {
|
|
246
|
+
t7 = () => () => {
|
|
200
247
|
const rootElem_0 = editor.getRootElement();
|
|
201
248
|
if (rootElem_0 !== null) {
|
|
202
|
-
rootElem_0.removeAttribute(
|
|
249
|
+
rootElem_0.removeAttribute("aria-activedescendant");
|
|
203
250
|
}
|
|
204
251
|
};
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
}
|
|
213
|
-
useEffect(
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
if (
|
|
218
|
-
|
|
219
|
-
|
|
252
|
+
t8 = [editor];
|
|
253
|
+
$[16] = editor;
|
|
254
|
+
$[17] = t7;
|
|
255
|
+
$[18] = t8;
|
|
256
|
+
} else {
|
|
257
|
+
t7 = $[17];
|
|
258
|
+
t8 = $[18];
|
|
259
|
+
}
|
|
260
|
+
useEffect(t7, t8);
|
|
261
|
+
let t9;
|
|
262
|
+
if ($[19] !== groups || $[20] !== selectedItemKey || $[21] !== setSelectedItemKeyToFirstMatchingItem) {
|
|
263
|
+
t9 = () => {
|
|
264
|
+
if (groups === null) {
|
|
265
|
+
setSelectedItemKey(null);
|
|
266
|
+
} else {
|
|
267
|
+
if (selectedItemKey === null) {
|
|
268
|
+
setSelectedItemKeyToFirstMatchingItem();
|
|
269
|
+
}
|
|
220
270
|
}
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
271
|
+
};
|
|
272
|
+
$[19] = groups;
|
|
273
|
+
$[20] = selectedItemKey;
|
|
274
|
+
$[21] = setSelectedItemKeyToFirstMatchingItem;
|
|
275
|
+
$[22] = t9;
|
|
276
|
+
} else {
|
|
277
|
+
t9 = $[22];
|
|
278
|
+
}
|
|
279
|
+
let t10;
|
|
280
|
+
if ($[23] !== groups || $[24] !== selectedItemKey || $[25] !== setSelectedItemKeyToFirstMatchingItem || $[26] !== updateSelectedItem) {
|
|
281
|
+
t10 = [groups, selectedItemKey, updateSelectedItem, setSelectedItemKeyToFirstMatchingItem];
|
|
282
|
+
$[23] = groups;
|
|
283
|
+
$[24] = selectedItemKey;
|
|
284
|
+
$[25] = setSelectedItemKeyToFirstMatchingItem;
|
|
285
|
+
$[26] = updateSelectedItem;
|
|
286
|
+
$[27] = t10;
|
|
287
|
+
} else {
|
|
288
|
+
t10 = $[27];
|
|
289
|
+
}
|
|
290
|
+
useLayoutEffect(t9, t10);
|
|
291
|
+
let t11;
|
|
292
|
+
if ($[28] !== editor) {
|
|
293
|
+
t11 = () => mergeRegister(editor.registerCommand(SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND, _temp2, COMMAND_PRIORITY_LOW));
|
|
294
|
+
$[28] = editor;
|
|
295
|
+
$[29] = t11;
|
|
296
|
+
} else {
|
|
297
|
+
t11 = $[29];
|
|
298
|
+
}
|
|
299
|
+
let t12;
|
|
300
|
+
if ($[30] !== editor || $[31] !== updateSelectedItem) {
|
|
301
|
+
t12 = [editor, updateSelectedItem];
|
|
302
|
+
$[30] = editor;
|
|
303
|
+
$[31] = updateSelectedItem;
|
|
304
|
+
$[32] = t12;
|
|
305
|
+
} else {
|
|
306
|
+
t12 = $[32];
|
|
307
|
+
}
|
|
308
|
+
useEffect(t11, t12);
|
|
309
|
+
let t13;
|
|
310
|
+
let t14;
|
|
311
|
+
if ($[33] !== close || $[34] !== editor || $[35] !== groups || $[36] !== selectItemAndCleanUp || $[37] !== selectedItemKey || $[38] !== updateSelectedItem) {
|
|
312
|
+
t13 = () => mergeRegister(editor.registerCommand(KEY_ARROW_DOWN_COMMAND, payload => {
|
|
226
313
|
const event = payload;
|
|
227
314
|
if (groups !== null && groups.length && selectedItemKey !== null) {
|
|
228
|
-
const allItems_0 = groups.flatMap(
|
|
315
|
+
const allItems_0 = groups.flatMap(_temp3);
|
|
229
316
|
const selectedIndex = allItems_0.findIndex(item_1 => item_1.key === selectedItemKey);
|
|
230
317
|
const newSelectedIndex = selectedIndex !== allItems_0.length - 1 ? selectedIndex + 1 : 0;
|
|
231
318
|
const newSelectedItem = allItems_0[newSelectedIndex];
|
|
@@ -246,7 +333,7 @@ export function LexicalMenu({
|
|
|
246
333
|
}, COMMAND_PRIORITY_NORMAL), editor.registerCommand(KEY_ARROW_UP_COMMAND, payload_0 => {
|
|
247
334
|
const event_0 = payload_0;
|
|
248
335
|
if (groups !== null && groups.length && selectedItemKey !== null) {
|
|
249
|
-
const allItems_1 = groups.flatMap(
|
|
336
|
+
const allItems_1 = groups.flatMap(_temp4);
|
|
250
337
|
const selectedIndex_0 = allItems_1.findIndex(item_2 => item_2.key === selectedItemKey);
|
|
251
338
|
const newSelectedIndex_0 = selectedIndex_0 !== 0 ? selectedIndex_0 - 1 : allItems_1.length - 1;
|
|
252
339
|
const newSelectedItem_0 = allItems_1[newSelectedIndex_0];
|
|
@@ -272,7 +359,7 @@ export function LexicalMenu({
|
|
|
272
359
|
if (groups === null || selectedItemKey === null) {
|
|
273
360
|
return false;
|
|
274
361
|
}
|
|
275
|
-
const allItems_2 = groups.flatMap(
|
|
362
|
+
const allItems_2 = groups.flatMap(_temp5);
|
|
276
363
|
const selectedItem_0 = allItems_2.find(item_3 => item_3.key === selectedItemKey);
|
|
277
364
|
if (!selectedItem_0) {
|
|
278
365
|
return false;
|
|
@@ -285,7 +372,7 @@ export function LexicalMenu({
|
|
|
285
372
|
if (groups === null || selectedItemKey === null) {
|
|
286
373
|
return false;
|
|
287
374
|
}
|
|
288
|
-
const allItems_3 = groups.flatMap(
|
|
375
|
+
const allItems_3 = groups.flatMap(_temp6);
|
|
289
376
|
const selectedItem_1 = allItems_3.find(item_4 => item_4.key === selectedItemKey);
|
|
290
377
|
if (!selectedItem_1) {
|
|
291
378
|
return false;
|
|
@@ -297,14 +384,74 @@ export function LexicalMenu({
|
|
|
297
384
|
selectItemAndCleanUp(selectedItem_1);
|
|
298
385
|
return true;
|
|
299
386
|
}, COMMAND_PRIORITY_NORMAL));
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
selectItemAndCleanUp
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
387
|
+
t14 = [selectItemAndCleanUp, close, editor, groups, selectedItemKey, updateSelectedItem];
|
|
388
|
+
$[33] = close;
|
|
389
|
+
$[34] = editor;
|
|
390
|
+
$[35] = groups;
|
|
391
|
+
$[36] = selectItemAndCleanUp;
|
|
392
|
+
$[37] = selectedItemKey;
|
|
393
|
+
$[38] = updateSelectedItem;
|
|
394
|
+
$[39] = t13;
|
|
395
|
+
$[40] = t14;
|
|
396
|
+
} else {
|
|
397
|
+
t13 = $[39];
|
|
398
|
+
t14 = $[40];
|
|
399
|
+
}
|
|
400
|
+
useEffect(t13, t14);
|
|
401
|
+
let t15;
|
|
402
|
+
if ($[41] !== groups || $[42] !== selectItemAndCleanUp || $[43] !== selectedItemKey) {
|
|
403
|
+
t15 = {
|
|
404
|
+
groups,
|
|
405
|
+
selectedItemKey,
|
|
406
|
+
selectItemAndCleanUp,
|
|
407
|
+
setSelectedItemKey
|
|
408
|
+
};
|
|
409
|
+
$[41] = groups;
|
|
410
|
+
$[42] = selectItemAndCleanUp;
|
|
411
|
+
$[43] = selectedItemKey;
|
|
412
|
+
$[44] = t15;
|
|
413
|
+
} else {
|
|
414
|
+
t15 = $[44];
|
|
415
|
+
}
|
|
416
|
+
const listItemProps = t15;
|
|
417
|
+
const t16 = resolution.match ? resolution.match.matchingString : "";
|
|
418
|
+
let t17;
|
|
419
|
+
if ($[45] !== anchorElementRef || $[46] !== listItemProps || $[47] !== menuRenderFn || $[48] !== t16) {
|
|
420
|
+
t17 = menuRenderFn(anchorElementRef, listItemProps, t16);
|
|
421
|
+
$[45] = anchorElementRef;
|
|
422
|
+
$[46] = listItemProps;
|
|
423
|
+
$[47] = menuRenderFn;
|
|
424
|
+
$[48] = t16;
|
|
425
|
+
$[49] = t17;
|
|
426
|
+
} else {
|
|
427
|
+
t17 = $[49];
|
|
428
|
+
}
|
|
429
|
+
return t17;
|
|
430
|
+
}
|
|
431
|
+
function _temp6(group_3) {
|
|
432
|
+
return group_3.items;
|
|
433
|
+
}
|
|
434
|
+
function _temp5(group_2) {
|
|
435
|
+
return group_2.items;
|
|
436
|
+
}
|
|
437
|
+
function _temp4(group_1) {
|
|
438
|
+
return group_1.items;
|
|
439
|
+
}
|
|
440
|
+
function _temp3(group_0) {
|
|
441
|
+
return group_0.items;
|
|
442
|
+
}
|
|
443
|
+
function _temp2(t0) {
|
|
444
|
+
const {
|
|
445
|
+
item: item_0
|
|
446
|
+
} = t0;
|
|
447
|
+
if (item_0.ref && item_0.ref.current != null) {
|
|
448
|
+
scrollIntoViewIfNeeded(item_0.ref.current);
|
|
449
|
+
return true;
|
|
450
|
+
}
|
|
451
|
+
return false;
|
|
452
|
+
}
|
|
453
|
+
function _temp(group) {
|
|
454
|
+
return group.items;
|
|
308
455
|
}
|
|
309
456
|
function setContainerDivAttributes(containerDiv, className) {
|
|
310
457
|
if (className != null) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LexicalMenu.js","names":["c","_c","useLexicalComposerContext","getScrollParent","mergeRegister","$getSelection","$isRangeSelection","$setSelection","COMMAND_PRIORITY_LOW","COMMAND_PRIORITY_NORMAL","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","isTriggerVisibleInNearestScrollContainer","targetElement","containerElement","tRect","cRect","bottom","useDynamicPositioning","resolution","targetElementRef","onReposition","onVisibilityChange","$","editor","t0","t1","current","rootElement","getRootElement","rootScrollParent","body","ticking","previousIsInView","handleScroll","requestAnimationFrame","isInView","resizeObserver","ResizeObserver","addEventListener","capture","passive","observe","disconnect","removeEventListener","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","read","clone","onSelect","queryString","removeAttribute","registerCommand","ref","payload","event","selectedIndex","findIndex","newSelectedIndex","newSelectedItem","dispatchCommand","index","preventDefault","stopImmediatePropagation","find","listItemProps","setContainerDivAttributes","containerDiv","className","style","display","position","useMenuAnchorRef","anchorElem","setResolution","Symbol","for","createElement","parent","undefined","menuEle","firstChild","width","getRect","left","rawTop","scrollY","scrollX","menuRect","menuHeight","menuWidth","rootElementRect","isRTL","dir","documentElement","anchorRect","leftBoundary","Math","max","right","newLeft","wouldGoOffBottomOfScreen","wouldGoOffTopOfScreen","isConnected","append","positionMenu","t2","t3","rootElement_0","containerDiv_0","t4"],"sources":["../../../../../src/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.tsx"],"sourcesContent":["'use client'\nimport type { BaseSelection, LexicalCommand, LexicalEditor, TextNode } from 'lexical'\nimport type { JSX, ReactPortal, RefObject } from 'react'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { getScrollParent, mergeRegister } from '@lexical/utils'\nimport {\n $getSelection,\n $isRangeSelection,\n $setSelection,\n COMMAND_PRIORITY_LOW,\n COMMAND_PRIORITY_NORMAL,\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): TextNode | undefined {\n const selection = $getSelection()\n if (!$isRangeSelection(selection) || !selection.isCollapsed()) {\n return\n }\n const anchor = selection.anchor\n if (anchor.type !== 'text') {\n return\n }\n const anchorNode = anchor.getNode()\n if (!anchorNode.isSimpleText()) {\n return\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\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\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 // Needed in Firefox. See https://github.com/payloadcms/payload/issues/10724\n let selection: BaseSelection | undefined\n editor.read(() => {\n selection = $getSelection()?.clone()\n })\n editor.update(() => {\n if (selection) {\n $setSelection(selection)\n }\n })\n\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 if (!newSelectedItem) {\n return false\n }\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_NORMAL,\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 if (!newSelectedItem) {\n return false\n }\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_NORMAL,\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_NORMAL,\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_NORMAL,\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_NORMAL,\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\nfunction setContainerDivAttributes(containerDiv: HTMLElement, className?: string) {\n if (className != null) {\n containerDiv.className = className\n }\n containerDiv.setAttribute('aria-label', 'Slash menu')\n containerDiv.setAttribute('role', 'listbox')\n containerDiv.style.display = 'block'\n containerDiv.style.position = 'absolute'\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 const isRTL = document.dir === 'rtl' || document.documentElement.dir === 'rtl'\n const anchorRect = anchorElem.getBoundingClientRect()\n const leftBoundary = Math.max(0, rootElementRect.left)\n\n if (!isRTL && left + menuWidth > rootElementRect.right) {\n containerDiv.style.left = `${rootElementRect.right - menuWidth + window.scrollX}px`\n } else if (isRTL && menuRect.left < leftBoundary) {\n const newLeft = leftBoundary + menuWidth - anchorRect.left\n containerDiv.style.left = `${newLeft + 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 setContainerDivAttributes(containerDiv, className)\n anchorElem.append(containerDiv)\n }\n containerDiv.setAttribute('id', 'slash-menu')\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 containerDiv.removeAttribute('id')\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":[]}
|
|
1
|
+
{"version":3,"file":"LexicalMenu.js","names":["c","_c","useLexicalComposerContext","getScrollParent","mergeRegister","$getSelection","$isRangeSelection","$setSelection","COMMAND_PRIORITY_LOW","COMMAND_PRIORITY_NORMAL","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","isTriggerVisibleInNearestScrollContainer","targetElement","containerElement","tRect","cRect","bottom","useDynamicPositioning","resolution","targetElementRef","onReposition","onVisibilityChange","$","editor","t0","t1","current","rootElement","getRootElement","rootScrollParent","body","ticking","previousIsInView","handleScroll","requestAnimationFrame","isInView","resizeObserver","ResizeObserver","addEventListener","capture","passive","observe","disconnect","removeEventListener","SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND","LexicalMenu","anchorElementRef","close","groups","menuRenderFn","shouldSplitNodeWithQuery","undefined","selectedItemKey","setSelectedItemKey","t2","item","rootElem","setAttribute","key","updateSelectedItem","t3","allItems","flatMap","_temp","firstMatchingItem","setSelectedItemKeyToFirstMatchingItem","t4","t5","t6","selectedItem","update","textNodeContainingQuery","remove","setTimeout","read","clone","onSelect","queryString","selectItemAndCleanUp","t7","t8","rootElem_0","removeAttribute","t9","t10","t11","registerCommand","_temp2","t12","t13","t14","payload","event","allItems_0","_temp3","selectedIndex","findIndex","item_1","newSelectedIndex","newSelectedItem","ref","dispatchCommand","index","preventDefault","stopImmediatePropagation","payload_0","event_0","allItems_1","_temp4","selectedIndex_0","item_2","newSelectedIndex_0","newSelectedItem_0","payload_1","event_1","payload_2","event_2","allItems_2","_temp5","selectedItem_0","find","item_3","event_3","allItems_3","_temp6","selectedItem_1","item_4","t15","listItemProps","t16","t17","group_3","group","items","group_2","group_1","group_0","item_0","setContainerDivAttributes","containerDiv","className","style","display","position","useMenuAnchorRef","anchorElem","setResolution","Symbol","for","createElement","parent","menuEle","firstChild","width","getRect","left","rawTop","scrollY","scrollX","menuRect","menuHeight","menuWidth","rootElementRect","isRTL","dir","documentElement","anchorRect","leftBoundary","Math","max","right","newLeft","wouldGoOffBottomOfScreen","wouldGoOffTopOfScreen","isConnected","append","positionMenu","rootElement_0","containerDiv_0"],"sources":["../../../../../src/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.tsx"],"sourcesContent":["'use client'\nimport type { BaseSelection, LexicalCommand, LexicalEditor, TextNode } from 'lexical'\nimport type { JSX, ReactPortal, RefObject } from 'react'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { getScrollParent, mergeRegister } from '@lexical/utils'\nimport {\n $getSelection,\n $isRangeSelection,\n $setSelection,\n COMMAND_PRIORITY_LOW,\n COMMAND_PRIORITY_NORMAL,\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): TextNode | undefined {\n const selection = $getSelection()\n if (!$isRangeSelection(selection) || !selection.isCollapsed()) {\n return\n }\n const anchor = selection.anchor\n if (anchor.type !== 'text') {\n return\n }\n const anchorNode = anchor.getNode()\n if (!anchorNode.isSimpleText()) {\n return\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\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\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 // Needed in Firefox. See https://github.com/payloadcms/payload/issues/10724\n let selection: BaseSelection | undefined\n editor.read(() => {\n selection = $getSelection()?.clone()\n })\n editor.update(() => {\n if (selection) {\n $setSelection(selection)\n }\n })\n\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 if (!newSelectedItem) {\n return false\n }\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_NORMAL,\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 if (!newSelectedItem) {\n return false\n }\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_NORMAL,\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_NORMAL,\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_NORMAL,\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_NORMAL,\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\nfunction setContainerDivAttributes(containerDiv: HTMLElement, className?: string) {\n if (className != null) {\n containerDiv.className = className\n }\n containerDiv.setAttribute('aria-label', 'Slash menu')\n containerDiv.setAttribute('role', 'listbox')\n containerDiv.style.display = 'block'\n containerDiv.style.position = 'absolute'\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 const isRTL = document.dir === 'rtl' || document.documentElement.dir === 'rtl'\n const anchorRect = anchorElem.getBoundingClientRect()\n const leftBoundary = Math.max(0, rootElementRect.left)\n\n if (!isRTL && left + menuWidth > rootElementRect.right) {\n containerDiv.style.left = `${rootElementRect.right - menuWidth + window.scrollX}px`\n } else if (isRTL && menuRect.left < leftBoundary) {\n const newLeft = leftBoundary + menuWidth - anchorRect.left\n containerDiv.style.left = `${newLeft + 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 setContainerDivAttributes(containerDiv, className)\n anchorElem.append(containerDiv)\n }\n containerDiv.setAttribute('id', 'slash-menu')\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 containerDiv.removeAttribute('id')\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":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMenuTriggerMatch.js","names":["c","_c","useCallback","PUNCTUATION","useMenuTriggerMatch","trigger","t0","$","maxLength","t1","minLength","t2","undefined","t3","t4","query","validChars","TypeaheadTriggerRegex","RegExp","match","exec","maybeLeadingWhitespace","matchingString","length","leadOffset","index","replaceableString"],"sources":["../../../../src/lexical/plugins/SlashMenu/useMenuTriggerMatch.ts"],"sourcesContent":["'use client'\nimport type { LexicalEditor } from 'lexical'\n\nimport { useCallback } from 'react'\n\nimport { PUNCTUATION } from './LexicalTypeaheadMenuPlugin/index.js'\n\nexport type TriggerFn = ({\n editor,\n query,\n}: {\n editor: LexicalEditor\n /** The query string is the POTENTIAL trigger AND the text after the trigger text. */\n query: string\n}) => MenuTextMatch | null\n\nexport type MenuTextMatch = {\n leadOffset: number\n matchingString: string\n replaceableString: string\n}\n\n/**\n * Returns a function which checks if the trigger (e.g. '/') is present in the query and, if so, returns the matching string (text after the trigger)\n */\nexport function useMenuTriggerMatch(\n /**\n * Text which triggers the menu. Everything after this text will be used as the query.\n */\n trigger: string,\n { maxLength = 75, minLength = 1 }: { maxLength?: number; minLength?: number },\n): TriggerFn {\n return useCallback(\n ({ query }) => {\n const validChars = '[^' + trigger + PUNCTUATION + '\\\\s]'\n const TypeaheadTriggerRegex = new RegExp(\n '(^|\\\\s|\\\\()(' +\n '[' +\n trigger +\n ']' +\n '((?:' +\n validChars +\n '){0,' +\n maxLength +\n '})' +\n ')$',\n )\n const match = TypeaheadTriggerRegex.exec(query)\n if (match !== null) {\n const maybeLeadingWhitespace = match[1]!\n\n /**\n * matchingString is only the text AFTER the trigger text. (So everything after the /)\n */\n const matchingString = match[3]!\n\n if (matchingString.length >= minLength) {\n return {\n leadOffset: match.index + maybeLeadingWhitespace.length,\n matchingString,\n replaceableString: match[2]!, // replaceableString is the trigger text + the matching string\n }\n }\n }\n return null\n },\n [maxLength, minLength, trigger],\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;AAGA,SAASC,WAAW,QAAQ;AAE5B,SAASC,WAAW,QAAQ;AAiB5B;;;AAGA,OAAO,SAAAC,oBAAAC,OAAA,EAAAC,EAAA;EAAA,MAAAC,CAAA,GAAAN,EAAA;EAKL;IAAAO,SAAA,EAAAC,EAAA;IAAAC,SAAA,EAAAC;EAAA,IAAAL,EAA6E;EAA3E,MAAAE,SAAA,GAAAC,EAAc,
|
|
1
|
+
{"version":3,"file":"useMenuTriggerMatch.js","names":["c","_c","useCallback","PUNCTUATION","useMenuTriggerMatch","trigger","t0","$","maxLength","t1","minLength","t2","undefined","t3","t4","query","validChars","TypeaheadTriggerRegex","RegExp","match","exec","maybeLeadingWhitespace","matchingString","length","leadOffset","index","replaceableString"],"sources":["../../../../src/lexical/plugins/SlashMenu/useMenuTriggerMatch.ts"],"sourcesContent":["'use client'\nimport type { LexicalEditor } from 'lexical'\n\nimport { useCallback } from 'react'\n\nimport { PUNCTUATION } from './LexicalTypeaheadMenuPlugin/index.js'\n\nexport type TriggerFn = ({\n editor,\n query,\n}: {\n editor: LexicalEditor\n /** The query string is the POTENTIAL trigger AND the text after the trigger text. */\n query: string\n}) => MenuTextMatch | null\n\nexport type MenuTextMatch = {\n leadOffset: number\n matchingString: string\n replaceableString: string\n}\n\n/**\n * Returns a function which checks if the trigger (e.g. '/') is present in the query and, if so, returns the matching string (text after the trigger)\n */\nexport function useMenuTriggerMatch(\n /**\n * Text which triggers the menu. Everything after this text will be used as the query.\n */\n trigger: string,\n { maxLength = 75, minLength = 1 }: { maxLength?: number; minLength?: number },\n): TriggerFn {\n return useCallback(\n ({ query }) => {\n const validChars = '[^' + trigger + PUNCTUATION + '\\\\s]'\n const TypeaheadTriggerRegex = new RegExp(\n '(^|\\\\s|\\\\()(' +\n '[' +\n trigger +\n ']' +\n '((?:' +\n validChars +\n '){0,' +\n maxLength +\n '})' +\n ')$',\n )\n const match = TypeaheadTriggerRegex.exec(query)\n if (match !== null) {\n const maybeLeadingWhitespace = match[1]!\n\n /**\n * matchingString is only the text AFTER the trigger text. (So everything after the /)\n */\n const matchingString = match[3]!\n\n if (matchingString.length >= minLength) {\n return {\n leadOffset: match.index + maybeLeadingWhitespace.length,\n matchingString,\n replaceableString: match[2]!, // replaceableString is the trigger text + the matching string\n }\n }\n }\n return null\n },\n [maxLength, minLength, trigger],\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;AAGA,SAASC,WAAW,QAAQ;AAE5B,SAASC,WAAW,QAAQ;AAiB5B;;;AAGA,OAAO,SAAAC,oBAAAC,OAAA,EAAAC,EAAA;EAAA,MAAAC,CAAA,GAAAN,EAAA;EAKL;IAAAO,SAAA,EAAAC,EAAA;IAAAC,SAAA,EAAAC;EAAA,IAAAL,EAA6E;EAA3E,MAAAE,SAAA,GAAAC,EAAc,KAAdG,SAAc,GAAd,EAAc,GAAdH,EAAc;EAAE,MAAAC,SAAA,GAAAC,EAAa,KAAbC,SAAa,GAAb,CAAa,GAAbD,EAAa;EAAA,IAAAE,EAAA;EAAA,IAAAN,CAAA,QAAAC,SAAA,IAAAD,CAAA,QAAAG,SAAA,IAAAH,CAAA,QAAAF,OAAA;IAG7BQ,EAAA,GAAAC,EAAA;MAAC;QAAAC;MAAA,IAAAD,EAAS;MACR,MAAAE,UAAA,GAAmB,OAAOX,OAAA,GAAUF,WAAA,GAAc;MAClD,MAAAc,qBAAA,GAA8B,IAAIC,MAAA,CAChC,eACE,GACAb,OAAA,GACA,MACA,SACAW,UAAA,GACA,SACAR,SAAA,GACA,OACA;MAEJ,MAAAW,KAAA,GAAcF,qBAAA,CAAAG,IAA0B,CAACL,KAAA;MACzC,IAAII,KAAA,KAAU;QACZ,MAAAE,sBAAA,GAA+BF,KAAK,GAAG;QAKvC,MAAAG,cAAA,GAAuBH,KAAK,GAAG;QAE/B,IAAIG,cAAA,CAAAC,MAAqB,IAAIb,SAAA;UAAA,OACpB;YAAAc,UAAA,EACOL,KAAA,CAAAM,KAAW,GAAGJ,sBAAA,CAAAE,MAA6B;YAAAD,cAAA;YAAAI,iBAAA,EAEpCP,KAAK;UAC1B;QAAA;MACF;MACF,OACO;IAAA,CACT;IAAAZ,CAAA,MAAAC,SAAA;IAAAD,CAAA,MAAAG,SAAA;IAAAH,CAAA,MAAAF,OAAA;IAAAE,CAAA,MAAAM,EAAA;EAAA;IAAAA,EAAA,GAAAN,CAAA;EAAA;EAAA,OAjCKM,EAkC0B;AAAA","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","TEXT_TYPE_TO_FORMAT","TextNode","useEffect","TextPlugin","t0","$","features","editor","t1","enabledFormats","disabledFormats","getDisabledFormats","length","registerNodeTransform","textNode","forEach","disabledFormat","hasFormat","toggleFormat","t2","allFormats","Object","keys","enabledSet","Set","filter","format","has"],"sources":["../../../../src/lexical/plugins/TextPlugin/index.tsx"],"sourcesContent":["'use client'\nimport type { TextFormatType } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { TEXT_TYPE_TO_FORMAT, TextNode } from 'lexical'\nimport { useEffect } from 'react'\n\nimport type { SanitizedClientFeatures } from '../../../features/typesClient.js'\n\nexport function TextPlugin({ features }: { features: SanitizedClientFeatures }) {\n const [editor] = useLexicalComposerContext()\n\n useEffect(() => {\n const disabledFormats = getDisabledFormats(features.enabledFormats)\n if (disabledFormats.length === 0) {\n return\n }\n // Ideally override the TextNode with our own TextNode (changing its setFormat or toggleFormat methods),\n // would be more performant. If we find a noticeable perf regression we can switch to that option.\n // Overriding the FORMAT_TEXT_COMMAND and PASTE_COMMAND commands is not an option I considered because\n // there might be other forms of mutation that we might not be considering. For example:\n // browser extensions or Payload/Lexical plugins that have their own commands.\n return editor.registerNodeTransform(TextNode, (textNode) => {\n disabledFormats.forEach((disabledFormat) => {\n if (textNode.hasFormat(disabledFormat)) {\n textNode.toggleFormat(disabledFormat)\n }\n })\n })\n }, [editor, features])\n\n return null\n}\n\nfunction getDisabledFormats(enabledFormats: TextFormatType[]): TextFormatType[] {\n const allFormats = Object.keys(TEXT_TYPE_TO_FORMAT) as TextFormatType[]\n const enabledSet = new Set(enabledFormats)\n\n return allFormats.filter((format) => !enabledSet.has(format))\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;AAGA,SAASC,yBAAyB,QAAQ;AAC1C,SAASC,mBAAmB,EAAEC,QAAQ,QAAQ;AAC9C,SAASC,SAAS,QAAQ;AAI1B,OAAO,SAAAC,WAAAC,EAAA;EAAA,MAAAC,CAAA,GAAAP,EAAA;EAAoB;IAAAQ;EAAA,IAAAF,EAAmD;EAC5E,OAAAG,MAAA,IAAiBR,yBAAA;EAAA,IAAAS,EAAA;EAAA,IAAAH,CAAA,QAAAE,MAAA,IAAAF,CAAA,QAAAC,QAAA,CAAAG,cAAA;IAEPD,EAAA,GAAAA,CAAA;MACR,MAAAE,eAAA,GAAwBC,kBAAA,CAAmBL,QAAA,CAAAG,cAAuB;
|
|
1
|
+
{"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","TEXT_TYPE_TO_FORMAT","TextNode","useEffect","TextPlugin","t0","$","features","editor","t1","enabledFormats","disabledFormats","getDisabledFormats","length","registerNodeTransform","textNode","forEach","disabledFormat","hasFormat","toggleFormat","t2","allFormats","Object","keys","enabledSet","Set","filter","format","has"],"sources":["../../../../src/lexical/plugins/TextPlugin/index.tsx"],"sourcesContent":["'use client'\nimport type { TextFormatType } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { TEXT_TYPE_TO_FORMAT, TextNode } from 'lexical'\nimport { useEffect } from 'react'\n\nimport type { SanitizedClientFeatures } from '../../../features/typesClient.js'\n\nexport function TextPlugin({ features }: { features: SanitizedClientFeatures }) {\n const [editor] = useLexicalComposerContext()\n\n useEffect(() => {\n const disabledFormats = getDisabledFormats(features.enabledFormats)\n if (disabledFormats.length === 0) {\n return\n }\n // Ideally override the TextNode with our own TextNode (changing its setFormat or toggleFormat methods),\n // would be more performant. If we find a noticeable perf regression we can switch to that option.\n // Overriding the FORMAT_TEXT_COMMAND and PASTE_COMMAND commands is not an option I considered because\n // there might be other forms of mutation that we might not be considering. For example:\n // browser extensions or Payload/Lexical plugins that have their own commands.\n return editor.registerNodeTransform(TextNode, (textNode) => {\n disabledFormats.forEach((disabledFormat) => {\n if (textNode.hasFormat(disabledFormat)) {\n textNode.toggleFormat(disabledFormat)\n }\n })\n })\n }, [editor, features])\n\n return null\n}\n\nfunction getDisabledFormats(enabledFormats: TextFormatType[]): TextFormatType[] {\n const allFormats = Object.keys(TEXT_TYPE_TO_FORMAT) as TextFormatType[]\n const enabledSet = new Set(enabledFormats)\n\n return allFormats.filter((format) => !enabledSet.has(format))\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;AAGA,SAASC,yBAAyB,QAAQ;AAC1C,SAASC,mBAAmB,EAAEC,QAAQ,QAAQ;AAC9C,SAASC,SAAS,QAAQ;AAI1B,OAAO,SAAAC,WAAAC,EAAA;EAAA,MAAAC,CAAA,GAAAP,EAAA;EAAoB;IAAAQ;EAAA,IAAAF,EAAmD;EAC5E,OAAAG,MAAA,IAAiBR,yBAAA;EAAA,IAAAS,EAAA;EAAA,IAAAH,CAAA,QAAAE,MAAA,IAAAF,CAAA,QAAAC,QAAA,CAAAG,cAAA;IAEPD,EAAA,GAAAA,CAAA;MACR,MAAAE,eAAA,GAAwBC,kBAAA,CAAmBL,QAAA,CAAAG,cAAuB;MAClE,IAAIC,eAAA,CAAAE,MAAsB,KAAK;QAAA;MAAA;MAE/B,OAMOL,MAAA,CAAAM,qBAA4B,CAACZ,QAAA,EAAUa,QAAA;QAC5CJ,eAAA,CAAAK,OAAuB,CAACC,cAAA;UACtB,IAAIF,QAAA,CAAAG,SAAkB,CAACD,cAAA;YACrBF,QAAA,CAAAI,YAAqB,CAACF,cAAA;UAAA;QACxB,CACF;MAAA,CACF;IAAA,CACF;IAAAX,CAAA,MAAAE,MAAA;IAAAF,CAAA,MAAAC,QAAA,CAAAG,cAAA;IAAAJ,CAAA,MAAAG,EAAA;EAAA;IAAAA,EAAA,GAAAH,CAAA;EAAA;EAAA,IAAAc,EAAA;EAAA,IAAAd,CAAA,QAAAE,MAAA,IAAAF,CAAA,QAAAC,QAAA;IAAGa,EAAA,IAACZ,MAAA,EAAQD,QAAA,CAAS;IAAAD,CAAA,MAAAE,MAAA;IAAAF,CAAA,MAAAC,QAAA;IAAAD,CAAA,MAAAc,EAAA;EAAA;IAAAA,EAAA,GAAAd,CAAA;EAAA;EAjBrBH,SAAA,CAAUM,EAiBV,EAAGW,EAAkB;EAAA,OAEd;AAAA;AAGT,SAASR,mBAAmBF,cAAgC;EAC1D,MAAMW,UAAA,GAAaC,MAAA,CAAOC,IAAI,CAACtB,mBAAA;EAC/B,MAAMuB,UAAA,GAAa,IAAIC,GAAA,CAAIf,cAAA;EAE3B,OAAOW,UAAA,CAAWK,MAAM,CAAEC,MAAA,IAAW,CAACH,UAAA,CAAWI,GAAG,CAACD,MAAA;AACvD","ignoreList":[]}
|