@payloadcms/richtext-lexical 4.0.0-internal.d3909a9 → 4.0.0-internal.d7d662c
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-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-PNNCA5KZ.js +2 -0
- package/dist/exports/client/{chunk-UH7ALTP6.js.map → chunk-PNNCA5KZ.js.map} +2 -2
- package/dist/exports/client/{chunk-4JYWPIBB.js → chunk-SE5IITBK.js} +2 -2
- package/dist/exports/client/chunk-SE5IITBK.js.map +7 -0
- package/dist/exports/client/{component-ELXHSW52.js → component-5IIPDLZR.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 +3 -3
- 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 +3 -2
- 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.js +2 -2
- package/dist/features/blocks/client/componentInline/index.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/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/link/client/plugins/autoLink/index.js.map +1 -1
- package/dist/features/link/client/plugins/link/index.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/toolbars/fixed/client/Toolbar/horizontalWheelScroll.js.map +1 -1
- package/dist/features/toolbars/fixed/client/Toolbar/index.js +126 -70
- package/dist/features/toolbars/fixed/client/Toolbar/index.js.map +1 -1
- package/dist/features/toolbars/inline/client/Toolbar/index.js +67 -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.js +100 -70
- package/dist/features/toolbars/shared/useToolbarKeyboardNavigation.js.map +1 -1
- 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/i18n.d.ts.map +1 -1
- package/dist/i18n.js +44 -0
- package/dist/i18n.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 +7 -10
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/useKeyboardReordering.js.map +1 -1
- package/dist/lexical/ui/ContentEditable.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/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/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 +9 -9
- package/dist/exports/client/Field-ZK6DB4T2.js +0 -2
- package/dist/exports/client/Field-ZK6DB4T2.js.map +0 -7
- package/dist/exports/client/chunk-3LRZDIIG.js +0 -2
- package/dist/exports/client/chunk-4JYWPIBB.js.map +0 -7
- package/dist/exports/client/chunk-UH7ALTP6.js +0 -2
- package/dist/exports/client/componentInline-HCGJ5ZFN.js +0 -2
- /package/dist/exports/client/{RelationshipComponent-YCPAKOL7.js.map → RelationshipComponent-TVK6I4W4.js.map} +0 -0
- /package/dist/exports/client/{component-ELXHSW52.js.map → component-5IIPDLZR.js.map} +0 -0
- /package/dist/exports/client/{componentInline-HCGJ5ZFN.js.map → componentInline-AU7IBNY7.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["useLexicalComposerContext","eventFiles","useTranslation","$getNearestNodeFromDOMNode","$getNodeByKey","isHTMLElement","React","useEffect","useId","useRef","useState","createPortal","useEditorConfigContext","Point","calculateDistanceFromScrollerElem","getNodeCloseToPoint","getTopLevelNodeKeys","isOnHandleElement","setHandlePosition","getBoundingClientRectWithoutTransform","setTargetLine","useKeyboardReordering","DRAGGABLE_BLOCK_MENU_CLASSNAME","DRAG_DATA_FORMAT","prevIndex","Infinity","getCurrentIndex","keysLength","Math","floor","setDragImage","dataTransfer","draggableBlockElem","transform","style","setTimeout","hideTargetLine","targetLineElem","lastTargetBlockElem","opacity","marginBottom","marginTop","useDraggableBlockMenu","editor","anchorElem","isEditable","scrollerElem","parentElement","instructionsID","t","menuRef","targetLineRef","debugHighlightRef","isDraggingBlockRef","highlightTimersRef","setDraggableBlockElem","lastTargetBlock","setLastTargetBlock","editorConfig","blockHandleHorizontalOffset","admin","hideGutter","onDocumentMouseMove","event","target","distanceFromScrollerElem","pageX","pageY","topLevelNodeKeys","blockElem","_draggableBlockElem","foundAtIndex","isFoundNodeEmptyParagraph","cache_threshold","horizontalOffset","point","x","y","startIndex","length","useEdgeAsDefault","verbose","document","addEventListener","removeEventListener","current","onDragover","isFileTransfer","targetBlockElem","fuzzy","preventDefault","dropEffect","isBelow","willStayInSamePosition","getBoundingClientRect","width","boundingBox","elem","onDrop","dragData","getData","update","draggedNode","targetNode","height","targetBlockElemHeight","top","targetBlockElemTop","mouseY","window","scrollY","insertAfter","insertBefore","remove","allPrevHighlighters","querySelectorAll","forEach","highlighter","newInsertedElem","getElementByKey","getKey","highlightTimer","newInsertedElemRect","highlightElem","createElement","className","backgroundColor","transition","zIndex","pointerEvents","boxSizing","borderRadius","position","body","appendChild","left","fadeTimer","removeTimer","push","clearTimeout","onDragStart","effectAllowed","nodeKey","node","setData","onDragEnd","_jsxs","Fragment","id","_jsx","draggable","ref","type","DraggableBlockPlugin","t0","t1","undefined","_editable"],"sources":["../../../../../src/lexical/plugins/handles/DraggableBlockPlugin/index.tsx"],"sourcesContent":["'use client'\nimport type { LexicalEditor } from 'lexical'\nimport type { DragEvent as ReactDragEvent } from 'react'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { eventFiles } from '@lexical/rich-text'\nimport { useTranslation } from '@payloadcms/ui'\nimport { $getNearestNodeFromDOMNode, $getNodeByKey, isHTMLElement } from 'lexical'\nimport * as React from 'react'\nimport { useEffect, useId, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { useEditorConfigContext } from '../../../config/client/EditorConfigProvider.js'\nimport { Point } from '../../../utils/point.js'\nimport { calculateDistanceFromScrollerElem } from '../utils/calculateDistanceFromScrollerElem.js'\nimport { getNodeCloseToPoint } from '../utils/getNodeCloseToPoint.js'\nimport { getTopLevelNodeKeys } from '../utils/getTopLevelNodeKeys.js'\nimport { isOnHandleElement } from '../utils/isOnHandleElement.js'\nimport { setHandlePosition } from '../utils/setHandlePosition.js'\nimport { getBoundingClientRectWithoutTransform } from './getBoundingRectWithoutTransform.js'\nimport './index.css'\nimport { setTargetLine } from './setTargetLine.js'\nimport { useKeyboardReordering } from './useKeyboardReordering.js'\n\nconst DRAGGABLE_BLOCK_MENU_CLASSNAME = 'draggable-block-menu'\nconst DRAG_DATA_FORMAT = 'application/x-lexical-drag-block'\n\nlet prevIndex = Infinity\n\nfunction getCurrentIndex(keysLength: number): number {\n if (keysLength === 0) {\n return Infinity\n }\n if (prevIndex >= 0 && prevIndex < keysLength) {\n return prevIndex\n }\n\n return Math.floor(keysLength / 2)\n}\n\nfunction setDragImage(dataTransfer: DataTransfer, draggableBlockElem: HTMLElement) {\n const { transform } = draggableBlockElem.style\n\n // Remove dragImage borders\n dataTransfer.setDragImage(draggableBlockElem, 0, 0)\n\n setTimeout(() => {\n draggableBlockElem.style.transform = transform\n })\n}\n\nfunction hideTargetLine(\n targetLineElem: HTMLElement | null,\n lastTargetBlockElem: HTMLElement | null,\n) {\n if (targetLineElem) {\n targetLineElem.style.opacity = '0'\n }\n if (lastTargetBlockElem) {\n lastTargetBlockElem.style.opacity = ''\n // Delete marginBottom and marginTop values we set\n lastTargetBlockElem.style.marginBottom = ''\n lastTargetBlockElem.style.marginTop = ''\n //lastTargetBlock.style.border = 'none'\n }\n}\n\nfunction useDraggableBlockMenu(\n editor: LexicalEditor,\n anchorElem: HTMLElement,\n isEditable: boolean,\n): React.ReactElement {\n const scrollerElem = anchorElem.parentElement\n const instructionsID = useId()\n const { t } = useTranslation()\n\n useKeyboardReordering({ editor, instructionsID })\n\n const menuRef = useRef<HTMLButtonElement>(null)\n const targetLineRef = useRef<HTMLDivElement>(null)\n const debugHighlightRef = useRef<HTMLDivElement>(null)\n const isDraggingBlockRef = useRef<boolean>(false)\n const highlightTimersRef = useRef<ReturnType<typeof setTimeout>[]>([])\n const [draggableBlockElem, setDraggableBlockElem] = useState<HTMLElement | null>(null)\n const [lastTargetBlock, setLastTargetBlock] = useState<{\n boundingBox?: DOMRect\n elem: HTMLElement | null\n isBelow: boolean\n } | null>(null)\n\n const { editorConfig } = useEditorConfigContext()\n\n const blockHandleHorizontalOffset = editorConfig?.admin?.hideGutter ? -44 : -8\n\n useEffect(() => {\n /**\n * Handles positioning of the drag handle\n */\n function onDocumentMouseMove(event: MouseEvent) {\n const target = event.target\n if (!isHTMLElement(target)) {\n return\n }\n\n const distanceFromScrollerElem = calculateDistanceFromScrollerElem(\n scrollerElem,\n event.pageX,\n event.pageY,\n target,\n )\n if (distanceFromScrollerElem === -1) {\n setDraggableBlockElem(null)\n return\n }\n\n if (isOnHandleElement(target, DRAGGABLE_BLOCK_MENU_CLASSNAME)) {\n return\n }\n\n const topLevelNodeKeys = getTopLevelNodeKeys(editor)\n\n const {\n blockElem: _draggableBlockElem,\n foundAtIndex,\n isFoundNodeEmptyParagraph,\n } = getNodeCloseToPoint({\n anchorElem,\n cache_threshold: 0,\n editor,\n horizontalOffset: -distanceFromScrollerElem,\n point: new Point(event.x, event.y),\n startIndex: getCurrentIndex(topLevelNodeKeys.length),\n useEdgeAsDefault: false,\n verbose: false,\n })\n\n prevIndex = foundAtIndex\n\n //if (DEBUG && _draggableBlockElem) {\n //targetBlockElem.style.border = '3px solid red'\n // highlightElemOriginalPosition(debugHighlightRef, _draggableBlockElem, anchorElem)\n //}\n\n if (!_draggableBlockElem && !isFoundNodeEmptyParagraph) {\n return\n }\n\n if (draggableBlockElem !== _draggableBlockElem) {\n setDraggableBlockElem(_draggableBlockElem)\n }\n }\n\n // Since the draggableBlockElem is outside the actual editor, we need to listen to the document\n // to be able to detect when the mouse is outside the editor and respect a buffer around\n // the scrollerElem to avoid the draggableBlockElem disappearing too early.\n document?.addEventListener('mousemove', onDocumentMouseMove)\n\n return () => {\n document?.removeEventListener('mousemove', onDocumentMouseMove)\n }\n }, [scrollerElem, anchorElem, editor, draggableBlockElem])\n\n useEffect(() => {\n if (menuRef.current) {\n setHandlePosition(\n draggableBlockElem,\n menuRef.current,\n anchorElem,\n blockHandleHorizontalOffset,\n )\n }\n }, [anchorElem, draggableBlockElem, blockHandleHorizontalOffset])\n\n useEffect(() => {\n function onDragover(event: DragEvent): boolean {\n if (!isDraggingBlockRef.current) {\n return false\n }\n const [isFileTransfer] = eventFiles(event)\n if (isFileTransfer) {\n return false\n }\n\n const { pageY, target } = event\n if (!isHTMLElement(target)) {\n return false\n }\n\n const distanceFromScrollerElem = calculateDistanceFromScrollerElem(\n scrollerElem,\n event.pageX,\n event.pageY,\n target,\n 100,\n 50,\n )\n\n const topLevelNodeKeys = getTopLevelNodeKeys(editor)\n\n const {\n blockElem: targetBlockElem,\n foundAtIndex,\n isFoundNodeEmptyParagraph,\n } = getNodeCloseToPoint({\n anchorElem,\n editor,\n fuzzy: true,\n horizontalOffset: -distanceFromScrollerElem,\n point: new Point(event.x, event.y),\n startIndex: getCurrentIndex(topLevelNodeKeys.length),\n useEdgeAsDefault: true,\n verbose: true,\n })\n\n prevIndex = foundAtIndex\n\n const targetLineElem = targetLineRef.current\n // targetBlockElem === null shouldn't happen\n if (targetBlockElem === null || targetLineElem === null) {\n return false\n }\n\n // Always prevent default and set dropEffect during drag to maintain the move cursor\n event.preventDefault()\n event.dataTransfer!.dropEffect = 'move'\n\n if (draggableBlockElem !== targetBlockElem) {\n const { isBelow, willStayInSamePosition } = setTargetLine(\n editorConfig?.admin?.hideGutter ? '0px' : 'var(--spacer-5)',\n blockHandleHorizontalOffset +\n (editorConfig?.admin?.hideGutter\n ? (menuRef?.current?.getBoundingClientRect()?.width ?? 0)\n : -(menuRef?.current?.getBoundingClientRect()?.width ?? 0)),\n targetLineElem,\n targetBlockElem,\n lastTargetBlock!,\n pageY,\n anchorElem,\n event,\n debugHighlightRef,\n isFoundNodeEmptyParagraph,\n )\n\n if (!willStayInSamePosition) {\n setLastTargetBlock({\n boundingBox: targetBlockElem.getBoundingClientRect(),\n elem: targetBlockElem,\n isBelow,\n })\n }\n } else if (lastTargetBlock?.elem) {\n hideTargetLine(targetLineElem, lastTargetBlock.elem)\n setLastTargetBlock({\n boundingBox: targetBlockElem.getBoundingClientRect(),\n elem: targetBlockElem,\n isBelow: false,\n })\n }\n\n return true\n }\n\n function onDrop(event: DragEvent): boolean {\n if (!isDraggingBlockRef.current) {\n return false\n }\n const [isFileTransfer] = eventFiles(event)\n if (isFileTransfer) {\n return false\n }\n const { dataTransfer, pageY, target } = event\n const dragData = dataTransfer?.getData(DRAG_DATA_FORMAT) || ''\n\n editor.update(() => {\n const draggedNode = $getNodeByKey(dragData)\n if (!draggedNode) {\n return false\n }\n if (!isHTMLElement(target)) {\n return false\n }\n const distanceFromScrollerElem = calculateDistanceFromScrollerElem(\n scrollerElem,\n event.pageX,\n event.pageY,\n target,\n 100,\n 50,\n )\n\n const { blockElem: targetBlockElem, isFoundNodeEmptyParagraph } = getNodeCloseToPoint({\n anchorElem,\n editor,\n fuzzy: true,\n horizontalOffset: -distanceFromScrollerElem,\n point: new Point(event.x, event.y),\n useEdgeAsDefault: true,\n })\n\n if (!targetBlockElem) {\n return false\n }\n const targetNode = $getNearestNodeFromDOMNode(targetBlockElem)\n if (!targetNode) {\n return false\n }\n if (targetNode === draggedNode) {\n return true\n }\n\n const { height: targetBlockElemHeight, top: targetBlockElemTop } =\n getBoundingClientRectWithoutTransform(targetBlockElem)\n\n const mouseY = pageY\n const isBelow = mouseY >= targetBlockElemTop + targetBlockElemHeight / 2 + window.scrollY\n\n if (!isFoundNodeEmptyParagraph) {\n if (isBelow) {\n // below targetBlockElem\n targetNode.insertAfter(draggedNode)\n } else {\n // above targetBlockElem\n targetNode.insertBefore(draggedNode)\n }\n } else {\n //\n targetNode.insertBefore(draggedNode)\n targetNode.remove()\n }\n\n /*\n if (pageY >= targetBlockElemTop + targetBlockElemHeight / 2) {\n targetNode.insertAfter(draggedNode)\n } else {\n targetNode.insertBefore(draggedNode)\n }*/\n if (draggableBlockElem !== null) {\n setDraggableBlockElem(null)\n }\n\n // find all previous elements with lexical-block-highlighter class and remove them\n const allPrevHighlighters = document.querySelectorAll('.lexical-block-highlighter')\n allPrevHighlighters.forEach((highlighter) => {\n highlighter.remove()\n })\n\n const newInsertedElem = editor.getElementByKey(draggedNode.getKey())\n const highlightTimer = setTimeout(() => {\n // add new temp html element to newInsertedElem with the same height and width and the class block-selected\n // to highlight the new inserted element\n const newInsertedElemRect = newInsertedElem?.getBoundingClientRect()\n if (!newInsertedElemRect) {\n return\n }\n const highlightElem = document.createElement('div')\n highlightElem.className = 'lexical-block-highlighter'\n\n highlightElem.style.backgroundColor = 'var(--color-bg-inverse)'\n highlightElem.style.transition = 'opacity 0.5s ease-in-out'\n highlightElem.style.zIndex = '1'\n highlightElem.style.pointerEvents = 'none'\n highlightElem.style.boxSizing = 'border-box'\n highlightElem.style.borderRadius = '4px'\n highlightElem.style.position = 'absolute'\n document.body.appendChild(highlightElem)\n\n highlightElem.style.opacity = '0.1'\n\n highlightElem.style.height = `${newInsertedElemRect.height + 8}px`\n highlightElem.style.width = `${newInsertedElemRect.width + 8}px`\n highlightElem.style.top = `${newInsertedElemRect.top + window.scrollY - 4}px`\n highlightElem.style.left = `${newInsertedElemRect.left - 4}px`\n\n const fadeTimer = setTimeout(() => {\n highlightElem.style.opacity = '0'\n const removeTimer = setTimeout(() => {\n highlightElem.remove()\n }, 500)\n highlightTimersRef.current.push(removeTimer)\n }, 1000)\n highlightTimersRef.current.push(fadeTimer)\n }, 120)\n highlightTimersRef.current.push(highlightTimer)\n })\n\n return true\n }\n\n // register onDragover event listeners:\n document.addEventListener('dragover', onDragover)\n // register onDrop event listeners:\n document.addEventListener('drop', onDrop)\n\n return () => {\n document.removeEventListener('dragover', onDragover)\n document.removeEventListener('drop', onDrop)\n highlightTimersRef.current.forEach(clearTimeout)\n highlightTimersRef.current = []\n }\n }, [\n scrollerElem,\n blockHandleHorizontalOffset,\n anchorElem,\n editor,\n lastTargetBlock,\n draggableBlockElem,\n editorConfig?.admin?.hideGutter,\n ])\n\n function onDragStart(event: ReactDragEvent<HTMLButtonElement>): void {\n const dataTransfer = event.dataTransfer\n if (!dataTransfer || !draggableBlockElem) {\n return\n }\n setDragImage(dataTransfer, draggableBlockElem)\n dataTransfer.effectAllowed = 'move'\n let nodeKey = ''\n editor.update(() => {\n const node = $getNearestNodeFromDOMNode(draggableBlockElem)\n if (node) {\n nodeKey = node.getKey()\n }\n })\n isDraggingBlockRef.current = true\n dataTransfer.setData(DRAG_DATA_FORMAT, nodeKey)\n }\n\n function onDragEnd(): void {\n isDraggingBlockRef.current = false\n if (lastTargetBlock?.elem) {\n hideTargetLine(targetLineRef.current, lastTargetBlock?.elem)\n }\n }\n\n return createPortal(\n <React.Fragment>\n <span className=\"sr-only\" id={instructionsID}>\n {t('general:moveUp')}: Alt + Shift + ↑. {t('general:moveDown')}: Alt + Shift + ↓.\n </span>\n <button\n aria-label=\"Drag to move\"\n className=\"icon draggable-block-menu\"\n draggable\n onDragEnd={onDragEnd}\n onDragStart={onDragStart}\n ref={menuRef}\n type=\"button\"\n >\n <div className={isEditable ? 'icon' : ''} />\n </button>\n <div className=\"draggable-block-target-line\" ref={targetLineRef} />\n <div className=\"debug-highlight\" ref={debugHighlightRef} />\n </React.Fragment>,\n anchorElem,\n )\n}\n\nexport function DraggableBlockPlugin({\n anchorElem = document.body,\n}: {\n anchorElem?: HTMLElement\n}): React.ReactElement {\n const [editor] = useLexicalComposerContext()\n return useDraggableBlockMenu(editor, anchorElem, editor._editable)\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["useLexicalComposerContext","eventFiles","Popup","PopupList","useTranslation","$getNearestNodeFromDOMNode","$getNodeByKey","isHTMLElement","React","useCallback","useEffect","useId","useRef","useState","createPortal","useEditorConfigContext","Point","calculateDistanceFromScrollerElem","getNodeCloseToPoint","getTopLevelNodeKeys","isOnHandleElement","setHandlePosition","getBoundingClientRectWithoutTransform","$moveBlock","setTargetLine","useKeyboardReordering","DRAGGABLE_BLOCK_MENU_CLASSNAME","DRAG_DATA_FORMAT","prevIndex","Infinity","getCurrentIndex","keysLength","Math","floor","setDragImage","dataTransfer","draggableBlockElem","transform","style","setTimeout","hideTargetLine","targetLineElem","lastTargetBlockElem","opacity","marginBottom","marginTop","useDraggableBlockMenu","editor","anchorElem","isEditable","scrollerElem","parentElement","instructionsID","t","menuRef","isMenuOpenRef","targetLineRef","debugHighlightRef","isDraggingBlockRef","highlightTimersRef","setDraggableBlockElem","lastTargetBlock","setLastTargetBlock","editorConfig","blockHandleHorizontalOffset","admin","hideGutter","onDocumentMouseMove","event","target","current","distanceFromScrollerElem","pageX","pageY","topLevelNodeKeys","blockElem","_draggableBlockElem","foundAtIndex","isFoundNodeEmptyParagraph","cache_threshold","horizontalOffset","point","x","y","startIndex","length","useEdgeAsDefault","verbose","onDocumentPointerDown","pointerType","document","addEventListener","removeEventListener","onDragover","isFileTransfer","targetBlockElem","fuzzy","preventDefault","dropEffect","isBelow","willStayInSamePosition","getBoundingClientRect","width","boundingBox","elem","onDrop","dragData","getData","update","draggedNode","targetNode","height","targetBlockElemHeight","top","targetBlockElemTop","mouseY","window","scrollY","insertAfter","insertBefore","remove","allPrevHighlighters","querySelectorAll","forEach","highlighter","newInsertedElem","getElementByKey","getKey","highlightTimer","newInsertedElemRect","highlightElem","createElement","className","backgroundColor","transition","zIndex","pointerEvents","boxSizing","borderRadius","position","body","appendChild","left","fadeTimer","removeTimer","push","clearTimeout","startDrag","effectAllowed","read","node","getTopLevelElement","setData","onDragEnd","onHeaderDragStart","handle","HTMLElement","closest","getRootElement","contains","dataset","sortableId","moveBlock","direction","onUpdate","_jsxs","Fragment","id","_jsx","ref","caret","disabled","onToggleClose","onToggleOpen","popupType","render","close","ButtonGroup","map","Button","onClick","renderButton","active","_active","buttonProps","draggable","onDragStart","type","DraggableBlockPlugin","t0","t1","undefined","_editable"],"sources":["../../../../../src/lexical/plugins/handles/DraggableBlockPlugin/index.tsx"],"sourcesContent":["'use client'\nimport type { LexicalEditor } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { eventFiles } from '@lexical/rich-text'\nimport { Popup, PopupList, useTranslation } from '@payloadcms/ui'\nimport { $getNearestNodeFromDOMNode, $getNodeByKey, isHTMLElement } from 'lexical'\nimport * as React from 'react'\nimport { useCallback, useEffect, useId, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { useEditorConfigContext } from '../../../config/client/EditorConfigProvider.js'\nimport { Point } from '../../../utils/point.js'\nimport { calculateDistanceFromScrollerElem } from '../utils/calculateDistanceFromScrollerElem.js'\nimport { getNodeCloseToPoint } from '../utils/getNodeCloseToPoint.js'\nimport { getTopLevelNodeKeys } from '../utils/getTopLevelNodeKeys.js'\nimport { isOnHandleElement } from '../utils/isOnHandleElement.js'\nimport { setHandlePosition } from '../utils/setHandlePosition.js'\nimport { getBoundingClientRectWithoutTransform } from './getBoundingRectWithoutTransform.js'\nimport './index.css'\nimport { $moveBlock } from './moveBlock.js'\nimport { setTargetLine } from './setTargetLine.js'\nimport { useKeyboardReordering } from './useKeyboardReordering.js'\n\nconst DRAGGABLE_BLOCK_MENU_CLASSNAME = 'draggable-block-menu'\nconst DRAG_DATA_FORMAT = 'application/x-lexical-drag-block'\n\nlet prevIndex = Infinity\n\nfunction getCurrentIndex(keysLength: number): number {\n if (keysLength === 0) {\n return Infinity\n }\n if (prevIndex >= 0 && prevIndex < keysLength) {\n return prevIndex\n }\n\n return Math.floor(keysLength / 2)\n}\n\nfunction setDragImage(dataTransfer: DataTransfer, draggableBlockElem: HTMLElement) {\n const { transform } = draggableBlockElem.style\n\n // Remove dragImage borders\n dataTransfer.setDragImage(draggableBlockElem, 0, 0)\n\n setTimeout(() => {\n draggableBlockElem.style.transform = transform\n })\n}\n\nfunction hideTargetLine(\n targetLineElem: HTMLElement | null,\n lastTargetBlockElem: HTMLElement | null,\n) {\n if (targetLineElem) {\n targetLineElem.style.opacity = '0'\n }\n if (lastTargetBlockElem) {\n lastTargetBlockElem.style.opacity = ''\n // Delete marginBottom and marginTop values we set\n lastTargetBlockElem.style.marginBottom = ''\n lastTargetBlockElem.style.marginTop = ''\n //lastTargetBlock.style.border = 'none'\n }\n}\n\nfunction useDraggableBlockMenu(\n editor: LexicalEditor,\n anchorElem: HTMLElement,\n isEditable: boolean,\n): React.ReactElement {\n const scrollerElem = anchorElem.parentElement\n const instructionsID = useId()\n const { t } = useTranslation()\n\n useKeyboardReordering({ editor, instructionsID })\n\n const menuRef = useRef<HTMLDivElement>(null)\n const isMenuOpenRef = useRef(false)\n const targetLineRef = useRef<HTMLDivElement>(null)\n const debugHighlightRef = useRef<HTMLDivElement>(null)\n const isDraggingBlockRef = useRef<boolean>(false)\n const highlightTimersRef = useRef<ReturnType<typeof setTimeout>[]>([])\n const [draggableBlockElem, setDraggableBlockElem] = useState<HTMLElement | null>(null)\n const [lastTargetBlock, setLastTargetBlock] = useState<{\n boundingBox?: DOMRect\n elem: HTMLElement | null\n isBelow: boolean\n } | null>(null)\n\n const { editorConfig } = useEditorConfigContext()\n\n const blockHandleHorizontalOffset = editorConfig?.admin?.hideGutter ? -44 : -8\n\n useEffect(() => {\n /**\n * Handles positioning of the drag handle\n */\n function onDocumentMouseMove(event: MouseEvent) {\n const target = event.target\n if (isMenuOpenRef.current || !isHTMLElement(target)) {\n return\n }\n\n const distanceFromScrollerElem = calculateDistanceFromScrollerElem(\n scrollerElem,\n event.pageX,\n event.pageY,\n target,\n )\n if (distanceFromScrollerElem === -1) {\n setDraggableBlockElem(null)\n return\n }\n\n if (isOnHandleElement(target, DRAGGABLE_BLOCK_MENU_CLASSNAME)) {\n return\n }\n\n const topLevelNodeKeys = getTopLevelNodeKeys(editor)\n\n const {\n blockElem: _draggableBlockElem,\n foundAtIndex,\n isFoundNodeEmptyParagraph,\n } = getNodeCloseToPoint({\n anchorElem,\n cache_threshold: 0,\n editor,\n horizontalOffset: -distanceFromScrollerElem,\n point: new Point(event.x, event.y),\n startIndex: getCurrentIndex(topLevelNodeKeys.length),\n useEdgeAsDefault: false,\n verbose: false,\n })\n\n prevIndex = foundAtIndex\n\n //if (DEBUG && _draggableBlockElem) {\n //targetBlockElem.style.border = '3px solid red'\n // highlightElemOriginalPosition(debugHighlightRef, _draggableBlockElem, anchorElem)\n //}\n\n if (!_draggableBlockElem && !isFoundNodeEmptyParagraph) {\n return\n }\n\n if (draggableBlockElem !== _draggableBlockElem) {\n setDraggableBlockElem(_draggableBlockElem)\n }\n }\n\n // Since the draggableBlockElem is outside the actual editor, we need to listen to the document\n // to be able to detect when the mouse is outside the editor and respect a buffer around\n // the scrollerElem to avoid the draggableBlockElem disappearing too early.\n const onDocumentPointerDown = (event: PointerEvent) => {\n if (event.pointerType === 'touch' || event.pointerType === 'pen') {\n onDocumentMouseMove(event)\n }\n }\n\n document?.addEventListener('mousemove', onDocumentMouseMove)\n document?.addEventListener('pointerdown', onDocumentPointerDown)\n\n return () => {\n document?.removeEventListener('mousemove', onDocumentMouseMove)\n document?.removeEventListener('pointerdown', onDocumentPointerDown)\n }\n }, [scrollerElem, anchorElem, editor, draggableBlockElem])\n\n useEffect(() => {\n if (menuRef.current) {\n setHandlePosition(\n draggableBlockElem,\n menuRef.current,\n anchorElem,\n blockHandleHorizontalOffset,\n )\n }\n }, [anchorElem, draggableBlockElem, blockHandleHorizontalOffset])\n\n useEffect(() => {\n function onDragover(event: DragEvent): boolean {\n if (!isDraggingBlockRef.current) {\n return false\n }\n const [isFileTransfer] = eventFiles(event)\n if (isFileTransfer) {\n return false\n }\n\n const { pageY, target } = event\n if (!isHTMLElement(target)) {\n return false\n }\n\n const distanceFromScrollerElem = calculateDistanceFromScrollerElem(\n scrollerElem,\n event.pageX,\n event.pageY,\n target,\n 100,\n 50,\n )\n\n const topLevelNodeKeys = getTopLevelNodeKeys(editor)\n\n const {\n blockElem: targetBlockElem,\n foundAtIndex,\n isFoundNodeEmptyParagraph,\n } = getNodeCloseToPoint({\n anchorElem,\n editor,\n fuzzy: true,\n horizontalOffset: -distanceFromScrollerElem,\n point: new Point(event.x, event.y),\n startIndex: getCurrentIndex(topLevelNodeKeys.length),\n useEdgeAsDefault: true,\n verbose: true,\n })\n\n prevIndex = foundAtIndex\n\n const targetLineElem = targetLineRef.current\n // targetBlockElem === null shouldn't happen\n if (targetBlockElem === null || targetLineElem === null) {\n return false\n }\n\n // Always prevent default and set dropEffect during drag to maintain the move cursor\n event.preventDefault()\n event.dataTransfer!.dropEffect = 'move'\n\n if (draggableBlockElem !== targetBlockElem) {\n const { isBelow, willStayInSamePosition } = setTargetLine(\n editorConfig?.admin?.hideGutter ? '0px' : 'var(--spacer-5)',\n blockHandleHorizontalOffset +\n (editorConfig?.admin?.hideGutter\n ? (menuRef?.current?.getBoundingClientRect()?.width ?? 0)\n : -(menuRef?.current?.getBoundingClientRect()?.width ?? 0)),\n targetLineElem,\n targetBlockElem,\n lastTargetBlock!,\n pageY,\n anchorElem,\n event,\n debugHighlightRef,\n isFoundNodeEmptyParagraph,\n )\n\n if (!willStayInSamePosition) {\n setLastTargetBlock({\n boundingBox: targetBlockElem.getBoundingClientRect(),\n elem: targetBlockElem,\n isBelow,\n })\n }\n } else if (lastTargetBlock?.elem) {\n hideTargetLine(targetLineElem, lastTargetBlock.elem)\n setLastTargetBlock({\n boundingBox: targetBlockElem.getBoundingClientRect(),\n elem: targetBlockElem,\n isBelow: false,\n })\n }\n\n return true\n }\n\n function onDrop(event: DragEvent): boolean {\n if (!isDraggingBlockRef.current) {\n return false\n }\n const [isFileTransfer] = eventFiles(event)\n if (isFileTransfer) {\n return false\n }\n const { dataTransfer, pageY, target } = event\n const dragData = dataTransfer?.getData(DRAG_DATA_FORMAT) || ''\n\n editor.update(() => {\n const draggedNode = $getNodeByKey(dragData)\n if (!draggedNode) {\n return false\n }\n if (!isHTMLElement(target)) {\n return false\n }\n const distanceFromScrollerElem = calculateDistanceFromScrollerElem(\n scrollerElem,\n event.pageX,\n event.pageY,\n target,\n 100,\n 50,\n )\n\n const { blockElem: targetBlockElem, isFoundNodeEmptyParagraph } = getNodeCloseToPoint({\n anchorElem,\n editor,\n fuzzy: true,\n horizontalOffset: -distanceFromScrollerElem,\n point: new Point(event.x, event.y),\n useEdgeAsDefault: true,\n })\n\n if (!targetBlockElem) {\n return false\n }\n const targetNode = $getNearestNodeFromDOMNode(targetBlockElem)\n if (!targetNode) {\n return false\n }\n if (targetNode === draggedNode) {\n return true\n }\n\n const { height: targetBlockElemHeight, top: targetBlockElemTop } =\n getBoundingClientRectWithoutTransform(targetBlockElem)\n\n const mouseY = pageY\n const isBelow = mouseY >= targetBlockElemTop + targetBlockElemHeight / 2 + window.scrollY\n\n if (!isFoundNodeEmptyParagraph) {\n if (isBelow) {\n // below targetBlockElem\n targetNode.insertAfter(draggedNode)\n } else {\n // above targetBlockElem\n targetNode.insertBefore(draggedNode)\n }\n } else {\n //\n targetNode.insertBefore(draggedNode)\n targetNode.remove()\n }\n\n /*\n if (pageY >= targetBlockElemTop + targetBlockElemHeight / 2) {\n targetNode.insertAfter(draggedNode)\n } else {\n targetNode.insertBefore(draggedNode)\n }*/\n if (draggableBlockElem !== null) {\n setDraggableBlockElem(null)\n }\n\n // find all previous elements with lexical-block-highlighter class and remove them\n const allPrevHighlighters = document.querySelectorAll('.lexical-block-highlighter')\n allPrevHighlighters.forEach((highlighter) => {\n highlighter.remove()\n })\n\n const newInsertedElem = editor.getElementByKey(draggedNode.getKey())\n const highlightTimer = setTimeout(() => {\n // add new temp html element to newInsertedElem with the same height and width and the class block-selected\n // to highlight the new inserted element\n const newInsertedElemRect = newInsertedElem?.getBoundingClientRect()\n if (!newInsertedElemRect) {\n return\n }\n const highlightElem = document.createElement('div')\n highlightElem.className = 'lexical-block-highlighter'\n\n highlightElem.style.backgroundColor = 'var(--color-bg-inverse)'\n highlightElem.style.transition = 'opacity 0.5s ease-in-out'\n highlightElem.style.zIndex = '1'\n highlightElem.style.pointerEvents = 'none'\n highlightElem.style.boxSizing = 'border-box'\n highlightElem.style.borderRadius = '4px'\n highlightElem.style.position = 'absolute'\n document.body.appendChild(highlightElem)\n\n highlightElem.style.opacity = '0.1'\n\n highlightElem.style.height = `${newInsertedElemRect.height + 8}px`\n highlightElem.style.width = `${newInsertedElemRect.width + 8}px`\n highlightElem.style.top = `${newInsertedElemRect.top + window.scrollY - 4}px`\n highlightElem.style.left = `${newInsertedElemRect.left - 4}px`\n\n const fadeTimer = setTimeout(() => {\n highlightElem.style.opacity = '0'\n const removeTimer = setTimeout(() => {\n highlightElem.remove()\n }, 500)\n highlightTimersRef.current.push(removeTimer)\n }, 1000)\n highlightTimersRef.current.push(fadeTimer)\n }, 120)\n highlightTimersRef.current.push(highlightTimer)\n })\n\n return true\n }\n\n // register onDragover event listeners:\n document.addEventListener('dragover', onDragover)\n // register onDrop event listeners:\n document.addEventListener('drop', onDrop)\n\n return () => {\n document.removeEventListener('dragover', onDragover)\n document.removeEventListener('drop', onDrop)\n highlightTimersRef.current.forEach(clearTimeout)\n highlightTimersRef.current = []\n }\n }, [\n scrollerElem,\n blockHandleHorizontalOffset,\n anchorElem,\n editor,\n lastTargetBlock,\n draggableBlockElem,\n editorConfig?.admin?.hideGutter,\n ])\n\n const startDrag = useCallback(\n ({\n blockElem,\n dataTransfer,\n }: {\n blockElem: HTMLElement | null\n dataTransfer: DataTransfer | null\n }) => {\n if (!editor.isEditable() || !dataTransfer || !blockElem) {\n return\n }\n\n setDragImage(dataTransfer, blockElem)\n dataTransfer.effectAllowed = 'move'\n editor.read(() => {\n const node = $getNearestNodeFromDOMNode(blockElem)?.getTopLevelElement()\n\n if (node) {\n isDraggingBlockRef.current = true\n dataTransfer.setData(DRAG_DATA_FORMAT, node.getKey())\n }\n })\n },\n [editor],\n )\n\n const onDragEnd = useCallback(() => {\n isDraggingBlockRef.current = false\n if (lastTargetBlock?.elem) {\n hideTargetLine(targetLineRef.current, lastTargetBlock.elem)\n }\n }, [lastTargetBlock])\n\n useEffect(() => {\n const onHeaderDragStart = (event: DragEvent) => {\n const handle =\n event.target instanceof HTMLElement\n ? event.target.closest<HTMLElement>('.collapsible__drag[draggable=\"true\"]')\n : null\n\n if (!handle || !editor.getRootElement()?.contains(handle)) {\n return\n }\n\n const blockElem = editor.getElementByKey(handle.dataset.sortableId ?? '')\n\n if (blockElem) {\n setDraggableBlockElem(blockElem)\n startDrag({ blockElem, dataTransfer: event.dataTransfer })\n }\n }\n\n document.addEventListener('dragstart', onHeaderDragStart)\n document.addEventListener('dragend', onDragEnd)\n return () => {\n document.removeEventListener('dragstart', onHeaderDragStart)\n document.removeEventListener('dragend', onDragEnd)\n }\n }, [editor, startDrag, onDragEnd])\n\n function moveBlock({ direction }: { direction: -1 | 1 }) {\n if (!editor.isEditable() || !draggableBlockElem) {\n return\n }\n\n editor.update(\n () => {\n const node = $getNearestNodeFromDOMNode(draggableBlockElem)?.getTopLevelElement()\n\n if (node) {\n $moveBlock({ direction, node })\n }\n },\n {\n onUpdate: () => {\n if (menuRef.current) {\n setHandlePosition(\n draggableBlockElem,\n menuRef.current,\n anchorElem,\n blockHandleHorizontalOffset,\n )\n }\n },\n },\n )\n }\n\n return createPortal(\n <React.Fragment>\n <span className=\"sr-only\" id={instructionsID}>\n {t('general:moveUp')}: Alt + Shift + ↑. {t('general:moveDown')}: Alt + Shift + ↓.\n </span>\n <div className=\"draggable-block-menu\" ref={menuRef}>\n <Popup\n caret={false}\n disabled={!isEditable}\n onToggleClose={() => {\n isMenuOpenRef.current = false\n }}\n onToggleOpen={() => {\n isMenuOpenRef.current = true\n }}\n popupType=\"menu\"\n render={({ close }) => (\n <PopupList.ButtonGroup>\n {([-1, 1] as const).map((direction) => (\n <PopupList.Button\n key={direction}\n onClick={() => {\n moveBlock({ direction })\n close()\n }}\n >\n {t(direction === -1 ? 'general:moveUp' : 'general:moveDown')}\n </PopupList.Button>\n ))}\n </PopupList.ButtonGroup>\n )}\n renderButton={({ active: _active, ...buttonProps }) => (\n <button\n {...buttonProps}\n aria-label={t('general:dragToMove')}\n className=\"draggable-block-menu__button\"\n disabled={!isEditable}\n draggable={isEditable}\n onDragEnd={onDragEnd}\n onDragStart={(event) =>\n startDrag({ blockElem: draggableBlockElem, dataTransfer: event.dataTransfer })\n }\n type=\"button\"\n >\n <div className={isEditable ? 'icon' : ''} />\n </button>\n )}\n />\n </div>\n <div className=\"draggable-block-target-line\" ref={targetLineRef} />\n <div className=\"debug-highlight\" ref={debugHighlightRef} />\n </React.Fragment>,\n anchorElem,\n )\n}\n\nexport function DraggableBlockPlugin({\n anchorElem = document.body,\n}: {\n anchorElem?: HTMLElement\n}): React.ReactElement {\n const [editor] = useLexicalComposerContext()\n return useDraggableBlockMenu(editor, anchorElem, editor._editable)\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { LexicalNode } from 'lexical';
|
|
2
|
+
/** Move a top-level block one position within a Lexical update. */
|
|
3
|
+
export declare function $moveBlock({ direction, node }: {
|
|
4
|
+
direction: -1 | 1;
|
|
5
|
+
node: LexicalNode;
|
|
6
|
+
}): LexicalNode;
|
|
7
|
+
//# sourceMappingURL=moveBlock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"moveBlock.d.ts","sourceRoot":"","sources":["../../../../../src/lexical/plugins/handles/DraggableBlockPlugin/moveBlock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAE1C,mEAAmE;AACnE,wBAAgB,UAAU,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE;IAAE,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IAAC,IAAI,EAAE,WAAW,CAAA;CAAE,eAYvF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** Move a top-level block one position within a Lexical update. */export function $moveBlock({
|
|
2
|
+
direction,
|
|
3
|
+
node
|
|
4
|
+
}) {
|
|
5
|
+
const sibling = direction === -1 ? node.getPreviousSibling() : node.getNextSibling();
|
|
6
|
+
if (sibling) {
|
|
7
|
+
if (direction === -1) {
|
|
8
|
+
sibling.insertBefore(node);
|
|
9
|
+
} else {
|
|
10
|
+
sibling.insertAfter(node);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
return node;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=moveBlock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"moveBlock.js","names":["$moveBlock","direction","node","sibling","getPreviousSibling","getNextSibling","insertBefore","insertAfter"],"sources":["../../../../../src/lexical/plugins/handles/DraggableBlockPlugin/moveBlock.ts"],"sourcesContent":["import type { LexicalNode } from 'lexical'\n\n/** Move a top-level block one position within a Lexical update. */\nexport function $moveBlock({ direction, node }: { direction: -1 | 1; node: LexicalNode }) {\n const sibling = direction === -1 ? node.getPreviousSibling() : node.getNextSibling()\n\n if (sibling) {\n if (direction === -1) {\n sibling.insertBefore(node)\n } else {\n sibling.insertAfter(node)\n }\n }\n\n return node\n}\n"],"mappings":"AAEA,mEACA,OAAO,SAASA,WAAW;EAAEC,SAAS;EAAEC;AAAI,CAA4C;EACtF,MAAMC,OAAA,GAAUF,SAAA,KAAc,CAAC,IAAIC,IAAA,CAAKE,kBAAkB,KAAKF,IAAA,CAAKG,cAAc;EAElF,IAAIF,OAAA,EAAS;IACX,IAAIF,SAAA,KAAc,CAAC,GAAG;MACpBE,OAAA,CAAQG,YAAY,CAACJ,IAAA;IACvB,OAAO;MACLC,OAAA,CAAQI,WAAW,CAACL,IAAA;IACtB;EACF;EAEA,OAAOA,IAAA;AACT","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useKeyboardReordering.d.ts","sourceRoot":"","sources":["../../../../../src/lexical/plugins/handles/DraggableBlockPlugin/useKeyboardReordering.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"useKeyboardReordering.d.ts","sourceRoot":"","sources":["../../../../../src/lexical/plugins/handles/DraggableBlockPlugin/useKeyboardReordering.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAgB5C,qFAAqF;AACrF,wBAAgB,qBAAqB,CAAC,EACpC,MAAM,EACN,cAAc,GACf,EAAE;IACD,MAAM,EAAE,aAAa,CAAA;IACrB,cAAc,EAAE,MAAM,CAAA;CACvB,QAyEA"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { mergeRegister } from '@lexical/utils';
|
|
2
|
-
import { $getSelection, $isNodeSelection, $isRangeSelection, COMMAND_PRIORITY_HIGH, KEY_ARROW_DOWN_COMMAND, KEY_ARROW_UP_COMMAND } from 'lexical';
|
|
2
|
+
import { $getSelection, $isNodeSelection, $isRangeSelection, COMMAND_PRIORITY_HIGH, KEY_ARROW_DOWN_COMMAND, KEY_ARROW_UP_COMMAND, KEY_DOWN_COMMAND } from 'lexical';
|
|
3
3
|
import { useEffect } from 'react';
|
|
4
|
+
import { $moveBlock } from './moveBlock.js';
|
|
4
5
|
/** Move the current top-level line, including decorator nodes, without a pointer. */
|
|
5
6
|
export function useKeyboardReordering({
|
|
6
7
|
editor,
|
|
@@ -21,17 +22,13 @@ export function useKeyboardReordering({
|
|
|
21
22
|
return false;
|
|
22
23
|
}
|
|
23
24
|
event.preventDefault();
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
} else {
|
|
29
|
-
sibling.insertAfter(node);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
25
|
+
$moveBlock({
|
|
26
|
+
direction,
|
|
27
|
+
node
|
|
28
|
+
});
|
|
32
29
|
return true;
|
|
33
30
|
};
|
|
34
|
-
return mergeRegister(editor.registerCommand(KEY_ARROW_UP_COMMAND, event => $moveLine({
|
|
31
|
+
return mergeRegister(editor.registerCommand(KEY_DOWN_COMMAND, event => event.target instanceof HTMLElement && Boolean(event.target.closest('.draggable-block-menu')), COMMAND_PRIORITY_HIGH), editor.registerCommand(KEY_ARROW_UP_COMMAND, event => $moveLine({
|
|
35
32
|
direction: -1,
|
|
36
33
|
event
|
|
37
34
|
}), COMMAND_PRIORITY_HIGH), editor.registerCommand(KEY_ARROW_DOWN_COMMAND, event => $moveLine({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useKeyboardReordering.js","names":["mergeRegister","$getSelection","$isNodeSelection","$isRangeSelection","COMMAND_PRIORITY_HIGH","KEY_ARROW_DOWN_COMMAND","KEY_ARROW_UP_COMMAND","useEffect","useKeyboardReordering","editor","instructionsID","$moveLine","direction","event","isEditable","altKey","shiftKey","ctrlKey","metaKey","selection","selectedNode","isCollapsed","anchor","getNode","getNodes","length","node","getTopLevelElement","preventDefault","
|
|
1
|
+
{"version":3,"file":"useKeyboardReordering.js","names":["mergeRegister","$getSelection","$isNodeSelection","$isRangeSelection","COMMAND_PRIORITY_HIGH","KEY_ARROW_DOWN_COMMAND","KEY_ARROW_UP_COMMAND","KEY_DOWN_COMMAND","useEffect","$moveBlock","useKeyboardReordering","editor","instructionsID","$moveLine","direction","event","isEditable","altKey","shiftKey","ctrlKey","metaKey","selection","selectedNode","isCollapsed","anchor","getNode","getNodes","length","node","getTopLevelElement","preventDefault","registerCommand","target","HTMLElement","Boolean","closest","restore","unregister","registerRootListener","root","description","getAttribute","setAttribute","filter","join","removeAttribute"],"sources":["../../../../../src/lexical/plugins/handles/DraggableBlockPlugin/useKeyboardReordering.ts"],"sourcesContent":["import type { LexicalEditor } from 'lexical'\n\nimport { mergeRegister } from '@lexical/utils'\nimport {\n $getSelection,\n $isNodeSelection,\n $isRangeSelection,\n COMMAND_PRIORITY_HIGH,\n KEY_ARROW_DOWN_COMMAND,\n KEY_ARROW_UP_COMMAND,\n KEY_DOWN_COMMAND,\n} from 'lexical'\nimport { useEffect } from 'react'\n\nimport { $moveBlock } from './moveBlock.js'\n\n/** Move the current top-level line, including decorator nodes, without a pointer. */\nexport function useKeyboardReordering({\n editor,\n instructionsID,\n}: {\n editor: LexicalEditor\n instructionsID: string\n}) {\n useEffect(() => {\n const $moveLine = ({ direction, event }: { direction: -1 | 1; event: KeyboardEvent }) => {\n if (\n !editor.isEditable() ||\n !event.altKey ||\n !event.shiftKey ||\n event.ctrlKey ||\n event.metaKey\n ) {\n return false\n }\n const selection = $getSelection()\n const selectedNode =\n $isRangeSelection(selection) && selection.isCollapsed()\n ? selection.anchor.getNode()\n : $isNodeSelection(selection) && selection.getNodes().length === 1\n ? selection.getNodes()[0]\n : null\n const node = selectedNode?.getTopLevelElement()\n\n if (!node) {\n return false\n }\n event.preventDefault()\n $moveBlock({ direction, node })\n return true\n }\n\n return mergeRegister(\n editor.registerCommand(\n KEY_DOWN_COMMAND,\n (event) =>\n event.target instanceof HTMLElement &&\n Boolean(event.target.closest('.draggable-block-menu')),\n COMMAND_PRIORITY_HIGH,\n ),\n editor.registerCommand(\n KEY_ARROW_UP_COMMAND,\n (event) => $moveLine({ direction: -1, event }),\n COMMAND_PRIORITY_HIGH,\n ),\n editor.registerCommand(\n KEY_ARROW_DOWN_COMMAND,\n (event) => $moveLine({ direction: 1, event }),\n COMMAND_PRIORITY_HIGH,\n ),\n )\n }, [editor])\n\n useEffect(() => {\n let restore: (() => void) | undefined\n const unregister = editor.registerRootListener((root) => {\n restore?.()\n if (!root) {\n return\n }\n const description = root.getAttribute('aria-describedby')\n root.setAttribute('aria-describedby', [description, instructionsID].filter(Boolean).join(' '))\n restore = () => {\n if (description === null) {\n root.removeAttribute('aria-describedby')\n } else {\n root.setAttribute('aria-describedby', description)\n }\n }\n })\n\n return () => {\n unregister()\n restore?.()\n }\n }, [editor, instructionsID])\n}\n"],"mappings":"AAEA,SAASA,aAAa,QAAQ;AAC9B,SACEC,aAAa,EACbC,gBAAgB,EAChBC,iBAAiB,EACjBC,qBAAqB,EACrBC,sBAAsB,EACtBC,oBAAoB,EACpBC,gBAAgB,QACX;AACP,SAASC,SAAS,QAAQ;AAE1B,SAASC,UAAU,QAAQ;AAE3B;AACA,OAAO,SAASC,sBAAsB;EACpCC,MAAM;EACNC;AAAc,CAIf;EACCJ,SAAA,CAAU;IACR,MAAMK,SAAA,GAAYA,CAAC;MAAEC,SAAS;MAAEC;IAAK,CAA+C;MAClF,IACE,CAACJ,MAAA,CAAOK,UAAU,MAClB,CAACD,KAAA,CAAME,MAAM,IACb,CAACF,KAAA,CAAMG,QAAQ,IACfH,KAAA,CAAMI,OAAO,IACbJ,KAAA,CAAMK,OAAO,EACb;QACA,OAAO;MACT;MACA,MAAMC,SAAA,GAAYpB,aAAA;MAClB,MAAMqB,YAAA,GACJnB,iBAAA,CAAkBkB,SAAA,KAAcA,SAAA,CAAUE,WAAW,KACjDF,SAAA,CAAUG,MAAM,CAACC,OAAO,KACxBvB,gBAAA,CAAiBmB,SAAA,KAAcA,SAAA,CAAUK,QAAQ,GAAGC,MAAM,KAAK,IAC7DN,SAAA,CAAUK,QAAQ,EAAE,CAAC,EAAE,GACvB;MACR,MAAME,IAAA,GAAON,YAAA,EAAcO,kBAAA;MAE3B,IAAI,CAACD,IAAA,EAAM;QACT,OAAO;MACT;MACAb,KAAA,CAAMe,cAAc;MACpBrB,UAAA,CAAW;QAAEK,SAAA;QAAWc;MAAK;MAC7B,OAAO;IACT;IAEA,OAAO5B,aAAA,CACLW,MAAA,CAAOoB,eAAe,CACpBxB,gBAAA,EACCQ,KAAA,IACCA,KAAA,CAAMiB,MAAM,YAAYC,WAAA,IACxBC,OAAA,CAAQnB,KAAA,CAAMiB,MAAM,CAACG,OAAO,CAAC,2BAC/B/B,qBAAA,GAEFO,MAAA,CAAOoB,eAAe,CACpBzB,oBAAA,EACCS,KAAA,IAAUF,SAAA,CAAU;MAAEC,SAAA,EAAW,CAAC;MAAGC;IAAM,IAC5CX,qBAAA,GAEFO,MAAA,CAAOoB,eAAe,CACpB1B,sBAAA,EACCU,KAAA,IAAUF,SAAA,CAAU;MAAEC,SAAA,EAAW;MAAGC;IAAM,IAC3CX,qBAAA;EAGN,GAAG,CAACO,MAAA,CAAO;EAEXH,SAAA,CAAU;IACR,IAAI4B,OAAA;IACJ,MAAMC,UAAA,GAAa1B,MAAA,CAAO2B,oBAAoB,CAAEC,IAAA;MAC9CH,OAAA;MACA,IAAI,CAACG,IAAA,EAAM;QACT;MACF;MACA,MAAMC,WAAA,GAAcD,IAAA,CAAKE,YAAY,CAAC;MACtCF,IAAA,CAAKG,YAAY,CAAC,oBAAoB,CAACF,WAAA,EAAa5B,cAAA,CAAe,CAAC+B,MAAM,CAACT,OAAA,EAASU,IAAI,CAAC;MACzFR,OAAA,GAAUA,CAAA;QACR,IAAII,WAAA,KAAgB,MAAM;UACxBD,IAAA,CAAKM,eAAe,CAAC;QACvB,OAAO;UACLN,IAAA,CAAKG,YAAY,CAAC,oBAAoBF,WAAA;QACxC;MACF;IACF;IAEA,OAAO;MACLH,UAAA;MACAD,OAAA;IACF;EACF,GAAG,CAACzB,MAAA,EAAQC,cAAA,CAAe;AAC7B","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContentEditable.js","names":["c","_c","useLexicalComposerContext","ContentEditable","useLexicalEditable","getTranslation","useTranslation","React","useEditorConfigContext","LexicalContentEditable","t0","$","className","editorConfig","instructionsID","fieldProps","i18n","t","t1","getTheme","isEditable","t2","admin","placeholder","field","label","required","theme","_jsx","undefined","children"],"sources":["../../../src/lexical/ui/ContentEditable.tsx"],"sourcesContent":["'use client'\nimport type { JSX } from 'react'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { ContentEditable } from '@lexical/react/LexicalContentEditable.js'\nimport { useLexicalEditable } from '@lexical/react/useLexicalEditable'\nimport { getTranslation } from '@payloadcms/translations'\nimport { useTranslation } from '@payloadcms/ui'\n\nimport './ContentEditable.css'\n\nimport * as React from 'react'\n\nimport type { SanitizedClientEditorConfig } from '../config/types.js'\n\nimport { useEditorConfigContext } from '../config/client/EditorConfigProvider.js'\n\nexport function LexicalContentEditable({\n className,\n editorConfig,\n instructionsID,\n}: {\n className?: string\n editorConfig: SanitizedClientEditorConfig\n instructionsID?: string\n}): JSX.Element {\n const { fieldProps } = useEditorConfigContext()\n const { i18n, t } = useTranslation<{}, string>()\n const [_, { getTheme }] = useLexicalComposerContext()\n const isEditable = useLexicalEditable()\n const theme = getTheme()\n return (\n <ContentEditable\n aria-describedby={instructionsID}\n aria-label={getTranslation(fieldProps.field.label || '', i18n)}\n aria-required={fieldProps.field.required || undefined}\n className={className ?? 'ContentEditable__root'}\n {...(isEditable\n ? {\n 'aria-placeholder': t('lexical:general:placeholder'),\n placeholder: (\n <p className={theme?.placeholder}>\n {editorConfig?.admin?.placeholder ?? t('lexical:general:placeholder')}\n </p>\n ),\n }\n : { placeholder: null })}\n />\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAGA,SAASC,yBAAyB,QAAQ;AAC1C,SAASC,eAAe,QAAQ;AAChC,SAASC,kBAAkB,QAAQ;AACnC,SAASC,cAAc,QAAQ;AAC/B,SAASC,cAAc,QAAQ;AAE/B,OAAO;AAEP,YAAYC,KAAA,MAAW;AAIvB,SAASC,sBAAsB,QAAQ;AAEvC,OAAO,SAAAC,uBAAAC,EAAA;EAAA,MAAAC,CAAA,GAAAV,EAAA;EAAgC;IAAAW,SAAA;IAAAC,YAAA;IAAAC;EAAA,IAAAJ,EAQtC;EACC;IAAAK;EAAA,IAAuBP,sBAAA;EACvB;IAAAQ,IAAA;IAAAC;EAAA,IAAoBX,cAAA;EACpB,SAAAY,EAAA,IAA0BhB,yBAAA;EAAhB;IAAAiB;EAAA,IAAAD,EAAY;EACtB,MAAAE,UAAA,GAAmBhB,kBAAA;EAAA,IAAAiB,EAAA;EAAA,IAAAV,CAAA,QAAAC,SAAA,IAAAD,CAAA,QAAAE,YAAA,EAAAS,KAAA,EAAAC,WAAA,IAAAZ,CAAA,QAAAI,UAAA,CAAAS,KAAA,CAAAC,KAAA,IAAAd,CAAA,QAAAI,UAAA,CAAAS,KAAA,CAAAE,QAAA,IAAAf,CAAA,QAAAQ,QAAA,IAAAR,CAAA,QAAAK,IAAA,IAAAL,CAAA,QAAAG,cAAA,IAAAH,CAAA,QAAAS,UAAA,IAAAT,CAAA,QAAAM,CAAA;IACnB,MAAAU,KAAA,GAAcR,QAAA;IAEZE,EAAA,GAAAO,IAAA,
|
|
1
|
+
{"version":3,"file":"ContentEditable.js","names":["c","_c","useLexicalComposerContext","ContentEditable","useLexicalEditable","getTranslation","useTranslation","React","useEditorConfigContext","LexicalContentEditable","t0","$","className","editorConfig","instructionsID","fieldProps","i18n","t","t1","getTheme","isEditable","t2","admin","placeholder","field","label","required","theme","_jsx","undefined","children"],"sources":["../../../src/lexical/ui/ContentEditable.tsx"],"sourcesContent":["'use client'\nimport type { JSX } from 'react'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { ContentEditable } from '@lexical/react/LexicalContentEditable.js'\nimport { useLexicalEditable } from '@lexical/react/useLexicalEditable'\nimport { getTranslation } from '@payloadcms/translations'\nimport { useTranslation } from '@payloadcms/ui'\n\nimport './ContentEditable.css'\n\nimport * as React from 'react'\n\nimport type { SanitizedClientEditorConfig } from '../config/types.js'\n\nimport { useEditorConfigContext } from '../config/client/EditorConfigProvider.js'\n\nexport function LexicalContentEditable({\n className,\n editorConfig,\n instructionsID,\n}: {\n className?: string\n editorConfig: SanitizedClientEditorConfig\n instructionsID?: string\n}): JSX.Element {\n const { fieldProps } = useEditorConfigContext()\n const { i18n, t } = useTranslation<{}, string>()\n const [_, { getTheme }] = useLexicalComposerContext()\n const isEditable = useLexicalEditable()\n const theme = getTheme()\n return (\n <ContentEditable\n aria-describedby={instructionsID}\n aria-label={getTranslation(fieldProps.field.label || '', i18n)}\n aria-required={fieldProps.field.required || undefined}\n className={className ?? 'ContentEditable__root'}\n {...(isEditable\n ? {\n 'aria-placeholder': t('lexical:general:placeholder'),\n placeholder: (\n <p className={theme?.placeholder}>\n {editorConfig?.admin?.placeholder ?? t('lexical:general:placeholder')}\n </p>\n ),\n }\n : { placeholder: null })}\n />\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAGA,SAASC,yBAAyB,QAAQ;AAC1C,SAASC,eAAe,QAAQ;AAChC,SAASC,kBAAkB,QAAQ;AACnC,SAASC,cAAc,QAAQ;AAC/B,SAASC,cAAc,QAAQ;AAE/B,OAAO;AAEP,YAAYC,KAAA,MAAW;AAIvB,SAASC,sBAAsB,QAAQ;AAEvC,OAAO,SAAAC,uBAAAC,EAAA;EAAA,MAAAC,CAAA,GAAAV,EAAA;EAAgC;IAAAW,SAAA;IAAAC,YAAA;IAAAC;EAAA,IAAAJ,EAQtC;EACC;IAAAK;EAAA,IAAuBP,sBAAA;EACvB;IAAAQ,IAAA;IAAAC;EAAA,IAAoBX,cAAA;EACpB,SAAAY,EAAA,IAA0BhB,yBAAA;EAAhB;IAAAiB;EAAA,IAAAD,EAAY;EACtB,MAAAE,UAAA,GAAmBhB,kBAAA;EAAA,IAAAiB,EAAA;EAAA,IAAAV,CAAA,QAAAC,SAAA,IAAAD,CAAA,QAAAE,YAAA,EAAAS,KAAA,EAAAC,WAAA,IAAAZ,CAAA,QAAAI,UAAA,CAAAS,KAAA,CAAAC,KAAA,IAAAd,CAAA,QAAAI,UAAA,CAAAS,KAAA,CAAAE,QAAA,IAAAf,CAAA,QAAAQ,QAAA,IAAAR,CAAA,QAAAK,IAAA,IAAAL,CAAA,QAAAG,cAAA,IAAAH,CAAA,QAAAS,UAAA,IAAAT,CAAA,QAAAM,CAAA;IACnB,MAAAU,KAAA,GAAcR,QAAA;IAEZE,EAAA,GAAAO,IAAA,CAACzB,eAAA;MAAA,oBACmBW,cAAA;MAAA,cACNT,cAAA,CAAeU,UAAA,CAAAS,KAAgB,CAAAC,KAAU,IAA1B,EAA0B,EAAIT,IAAA;MAAA,iBAC1CD,UAAA,CAAAS,KAAgB,CAAAE,QAAa,IAA7BG,SAA6B;MAAAjB,SAAA,EACjCA,SAAa,IAAb,uBAAa;MAAA,IACnBQ,UAAA;QAAA,oBAEqBH,CAAA,CAAE;QAAAM,WAAA,EAEpBK,IAAA,CAAC;UAAAhB,SAAA,EAAae,KAAA,EAAAJ,WAAO;UAAAO,QAAA,EAClBjB,YAAA,EAAAS,KAAqB,EAAAC,WAAiB,IAAFN,CAAA,CAAE;;MAIzB,CAAC,GATpB;QAAAG,WAAA,EASc;MAAK,CAAC;;;;;;;;;;;;;;;SAd3BC,E","ignoreList":[]}
|
|
@@ -12,7 +12,7 @@ import { useDrawerSubmit } from './useDrawerSubmit.js';
|
|
|
12
12
|
* be used if you provide your field schema inside the `generateSchemaMap` prop of your feature.server.ts.
|
|
13
13
|
*/
|
|
14
14
|
export const FieldsDrawer = t0 => {
|
|
15
|
-
const $ = _c(
|
|
15
|
+
const $ = _c(18);
|
|
16
16
|
const {
|
|
17
17
|
className,
|
|
18
18
|
data,
|
|
@@ -32,30 +32,29 @@ export const FieldsDrawer = t0 => {
|
|
|
32
32
|
headerActions,
|
|
33
33
|
submitRef
|
|
34
34
|
} = useDrawerSubmit();
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
t3 = _jsx(EditDepthProvider, {
|
|
35
|
+
let t1;
|
|
36
|
+
if ($[0] !== className || $[1] !== closeModal || $[2] !== data || $[3] !== drawerSlug || $[4] !== drawerTitle || $[5] !== featureKey || $[6] !== fieldMapOverride || $[7] !== handleDrawerSubmit || $[8] !== headerActions || $[9] !== schemaFieldsPathOverride || $[10] !== schemaPath || $[11] !== schemaPathSuffix || $[12] !== submitRef) {
|
|
37
|
+
let t2;
|
|
38
|
+
if ($[14] !== closeModal || $[15] !== drawerSlug || $[16] !== handleDrawerSubmit) {
|
|
39
|
+
t2 = (args, args2) => {
|
|
40
|
+
closeModal(drawerSlug);
|
|
41
|
+
setTimeout(() => {
|
|
42
|
+
handleDrawerSubmit(args, args2);
|
|
43
|
+
}, 1);
|
|
44
|
+
};
|
|
45
|
+
$[14] = closeModal;
|
|
46
|
+
$[15] = drawerSlug;
|
|
47
|
+
$[16] = handleDrawerSubmit;
|
|
48
|
+
$[17] = t2;
|
|
49
|
+
} else {
|
|
50
|
+
t2 = $[17];
|
|
51
|
+
}
|
|
52
|
+
t1 = _jsx(EditDepthProvider, {
|
|
54
53
|
children: _jsx(Drawer, {
|
|
55
54
|
className,
|
|
56
55
|
headerActions,
|
|
57
56
|
slug: drawerSlug,
|
|
58
|
-
title:
|
|
57
|
+
title: drawerTitle ?? "",
|
|
59
58
|
children: _jsx(DrawerContent, {
|
|
60
59
|
data,
|
|
61
60
|
featureKey,
|
|
@@ -68,22 +67,23 @@ export const FieldsDrawer = t0 => {
|
|
|
68
67
|
})
|
|
69
68
|
})
|
|
70
69
|
});
|
|
71
|
-
$[
|
|
72
|
-
$[
|
|
73
|
-
$[
|
|
74
|
-
$[
|
|
75
|
-
$[
|
|
76
|
-
$[
|
|
77
|
-
$[
|
|
78
|
-
$[
|
|
79
|
-
$[
|
|
80
|
-
$[
|
|
81
|
-
$[
|
|
82
|
-
$[
|
|
83
|
-
$[
|
|
70
|
+
$[0] = className;
|
|
71
|
+
$[1] = closeModal;
|
|
72
|
+
$[2] = data;
|
|
73
|
+
$[3] = drawerSlug;
|
|
74
|
+
$[4] = drawerTitle;
|
|
75
|
+
$[5] = featureKey;
|
|
76
|
+
$[6] = fieldMapOverride;
|
|
77
|
+
$[7] = handleDrawerSubmit;
|
|
78
|
+
$[8] = headerActions;
|
|
79
|
+
$[9] = schemaFieldsPathOverride;
|
|
80
|
+
$[10] = schemaPath;
|
|
81
|
+
$[11] = schemaPathSuffix;
|
|
82
|
+
$[12] = submitRef;
|
|
83
|
+
$[13] = t1;
|
|
84
84
|
} else {
|
|
85
|
-
|
|
85
|
+
t1 = $[13];
|
|
86
86
|
}
|
|
87
|
-
return
|
|
87
|
+
return t1;
|
|
88
88
|
};
|
|
89
89
|
//# sourceMappingURL=Drawer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Drawer.js","names":["c","_c","Drawer","EditDepthProvider","useModal","React","DrawerContent","useDrawerSubmit","FieldsDrawer","t0","$","className","data","drawerSlug","drawerTitle","featureKey","fieldMapOverride","handleDrawerSubmit","schemaFieldsPathOverride","schemaPath","schemaPathSuffix","closeModal","headerActions","submitRef","t1","t2","args","args2","setTimeout","
|
|
1
|
+
{"version":3,"file":"Drawer.js","names":["c","_c","Drawer","EditDepthProvider","useModal","React","DrawerContent","useDrawerSubmit","FieldsDrawer","t0","$","className","data","drawerSlug","drawerTitle","featureKey","fieldMapOverride","handleDrawerSubmit","schemaFieldsPathOverride","schemaPath","schemaPathSuffix","closeModal","headerActions","submitRef","t1","t2","args","args2","setTimeout","_jsx","children","slug","title"],"sources":["../../../src/utilities/fieldsDrawer/Drawer.tsx"],"sourcesContent":["'use client'\nimport type { ClientField, Data, FormState, JsonObject } from 'payload'\n\nimport { Drawer, EditDepthProvider, useModal } from '@payloadcms/ui'\nimport React from 'react'\n\nimport { DrawerContent } from './DrawerContent.js'\nimport { useDrawerSubmit } from './useDrawerSubmit.js'\n\nexport type FieldsDrawerProps = {\n readonly className?: string\n readonly data?: Data\n readonly drawerSlug: string\n readonly drawerTitle?: string\n readonly featureKey: string\n readonly fieldMapOverride?: ClientField[]\n readonly handleDrawerSubmit: (fields: FormState, data: JsonObject) => void\n readonly schemaFieldsPathOverride?: string\n readonly schemaPath: string\n readonly schemaPathSuffix?: string\n}\n\n/**\n * This FieldsDrawer component can be used to easily create a Drawer that contains a form with fields within your feature.\n * The fields are taken directly from the schema map based on your `featureKey` and `schemaPathSuffix`. Thus, this can only\n * be used if you provide your field schema inside the `generateSchemaMap` prop of your feature.server.ts.\n */\nexport const FieldsDrawer: React.FC<FieldsDrawerProps> = ({\n className,\n data,\n drawerSlug,\n drawerTitle,\n featureKey,\n fieldMapOverride,\n handleDrawerSubmit,\n schemaFieldsPathOverride,\n schemaPath,\n schemaPathSuffix,\n}) => {\n const { closeModal } = useModal()\n const { headerActions, submitRef } = useDrawerSubmit()\n\n // The Drawer only renders its children (and itself) if it's open. Thus, by extracting the main content\n // to DrawerContent, this should be faster\n return (\n <EditDepthProvider>\n <Drawer\n className={className}\n headerActions={headerActions}\n slug={drawerSlug}\n title={drawerTitle ?? ''}\n >\n <DrawerContent\n data={data}\n featureKey={featureKey}\n fieldMapOverride={fieldMapOverride}\n handleDrawerSubmit={(args, args2) => {\n // Simply close drawer - no need for useLexicalDrawer here as at this point,\n // we don't need to restore the cursor position. This is handled by the useEffect in useLexicalDrawer.\n closeModal(drawerSlug)\n\n // Actual drawer submit logic needs to be triggered after the drawer is closed.\n // That's because the lexical selection / cursor restore logic that is striggerer by\n // `useLexicalDrawer` neeeds to be triggered before any editor.update calls that may happen\n // in the `handleDrawerSubmit` function.\n setTimeout(() => {\n handleDrawerSubmit(args, args2)\n }, 1)\n }}\n schemaFieldsPathOverride={schemaFieldsPathOverride}\n schemaPath={schemaPath}\n schemaPathSuffix={schemaPathSuffix}\n submitRef={submitRef}\n />\n </Drawer>\n </EditDepthProvider>\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAGA,SAASC,MAAM,EAAEC,iBAAiB,EAAEC,QAAQ,QAAQ;AACpD,OAAOC,KAAA,MAAW;AAElB,SAASC,aAAa,QAAQ;AAC9B,SAASC,eAAe,QAAQ;AAehC;;;;;AAKA,OAAO,MAAMC,YAAA,GAA4CC,EAAA;EAAA,MAAAC,CAAA,GAAAT,EAAA;EAAC;IAAAU,SAAA;IAAAC,IAAA;IAAAC,UAAA;IAAAC,WAAA;IAAAC,UAAA;IAAAC,gBAAA;IAAAC,kBAAA;IAAAC,wBAAA;IAAAC,UAAA;IAAAC;EAAA,IAAAX,EAWzD;EACC;IAAAY;EAAA,IAAuBjB,QAAA;EACvB;IAAAkB,aAAA;IAAAC;EAAA,IAAqChB,eAAA;EAAA,IAAAiB,EAAA;EAAA,IAAAd,CAAA,QAAAC,SAAA,IAAAD,CAAA,QAAAW,UAAA,IAAAX,CAAA,QAAAE,IAAA,IAAAF,CAAA,QAAAG,UAAA,IAAAH,CAAA,QAAAI,WAAA,IAAAJ,CAAA,QAAAK,UAAA,IAAAL,CAAA,QAAAM,gBAAA,IAAAN,CAAA,QAAAO,kBAAA,IAAAP,CAAA,QAAAY,aAAA,IAAAZ,CAAA,QAAAQ,wBAAA,IAAAR,CAAA,SAAAS,UAAA,IAAAT,CAAA,SAAAU,gBAAA,IAAAV,CAAA,SAAAa,SAAA;IAAA,IAAAE,EAAA;IAAA,IAAAf,CAAA,SAAAW,UAAA,IAAAX,CAAA,SAAAG,UAAA,IAAAH,CAAA,SAAAO,kBAAA;MAgBTQ,EAAA,GAAAA,CAAAC,IAAA,EAAAC,KAAA;QAGlBN,UAAA,CAAWR,UAAA;QAMXe,UAAA,CAAW;UACTX,kBAAA,CAAmBS,IAAA,EAAMC,KAAA;QAAA,CAC3B,EAAG;MAAA,CACL;MAAAjB,CAAA,OAAAW,UAAA;MAAAX,CAAA,OAAAG,UAAA;MAAAH,CAAA,OAAAO,kBAAA;MAAAP,CAAA,OAAAe,EAAA;IAAA;MAAAA,EAAA,GAAAf,CAAA;IAAA;IAvBNc,EAAA,GAAAK,IAAA,CAAC1B,iBAAA;MAAA2B,QAAA,EACCD,IAAA,CAAC3B,MAAA;QAAAS,SAAA;QAAAW,aAAA;QAAAS,IAAA,EAGOlB,UAAA;QAAAmB,KAAA,EACClB,WAAe,IAAf,EAAe;QAAAgB,QAAA,EAEtBD,IAAA,CAACvB,aAAA;UAAAM,IAAA;UAAAG,UAAA;UAAAC,gBAAA;UAAAC,kBAAA,EAIqBQ,EAYpB;UAAAP,wBAAA;UAAAC,UAAA;UAAAC,gBAAA;UAAAG;;;;;;;;;;;;;;;;;;;;;SAvBNC,E;CAgCJ","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDrawerSubmit.js","names":["c","_c","useForm","useTranslation","useEffect","useMemo","useRef","useDrawerSubmit","$","t","submitRef","t0","t1","Symbol","for","current","t2","label","onClick","style","headerActions","t3","RegisterFormSubmit","submit"],"sources":["../../../src/utilities/fieldsDrawer/useDrawerSubmit.ts"],"sourcesContent":["'use client'\nimport type { FC } from 'react'\nimport type React from 'react'\n\nimport { useForm, useTranslation } from '@payloadcms/ui'\nimport { useEffect, useMemo, useRef } from 'react'\n\n/**\n * Shared logic for drawers that render their submit button in the drawer header.\n *\n * The header's `onClick` is defined outside the `Form` provider, so it cannot call\n * `useForm().submit()` directly. This hook owns a ref to the form's `submit` function,\n * which is populated from inside the form via `<RegisterFormSubmit submitRef={submitRef} />`.\n *\n * Returns the `headerActions` array to spread onto a `Drawer` and the `submitRef`\n * to pass to `RegisterFormSubmit`.\n */\nexport const useDrawerSubmit = () => {\n const { t } = useTranslation()\n const submitRef = useRef<(() => void) | null>(null)\n\n const headerActions = useMemo(\n () => [\n {\n label: t('fields:saveChanges'),\n onClick: () => submitRef.current?.(),\n style: 'primary' as const,\n },\n ],\n [t],\n )\n\n return { headerActions, submitRef }\n}\n\n/**\n * Mounts inside a `<Form>` to populate `submitRef` (from `useDrawerSubmit`) with the form's\n * `submit` function, allowing drawer header actions rendered outside the form's React tree\n * to trigger submission.\n */\nexport const RegisterFormSubmit: FC<{\n submitRef: React.RefObject<(() => void) | null>\n}> = ({ submitRef }) => {\n const { submit } = useForm()\n\n useEffect(() => {\n submitRef.current = () => void submit()\n return () => {\n submitRef.current = null\n }\n }, [submit, submitRef])\n\n return null\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;AAIA,SAASC,OAAO,EAAEC,cAAc,QAAQ;AACxC,SAASC,SAAS,EAAEC,OAAO,EAAEC,MAAM,QAAQ;AAE3C;;;;;;;;;;AAUA,OAAO,MAAMC,eAAA,GAAkBA,CAAA;EAAA,MAAAC,CAAA,GAAAP,EAAA;EAC7B;IAAAQ;EAAA,IAAcN,cAAA;EACd,MAAAO,SAAA,GAAkBJ,MAAA,
|
|
1
|
+
{"version":3,"file":"useDrawerSubmit.js","names":["c","_c","useForm","useTranslation","useEffect","useMemo","useRef","useDrawerSubmit","$","t","submitRef","t0","t1","Symbol","for","current","t2","label","onClick","style","headerActions","t3","RegisterFormSubmit","submit"],"sources":["../../../src/utilities/fieldsDrawer/useDrawerSubmit.ts"],"sourcesContent":["'use client'\nimport type { FC } from 'react'\nimport type React from 'react'\n\nimport { useForm, useTranslation } from '@payloadcms/ui'\nimport { useEffect, useMemo, useRef } from 'react'\n\n/**\n * Shared logic for drawers that render their submit button in the drawer header.\n *\n * The header's `onClick` is defined outside the `Form` provider, so it cannot call\n * `useForm().submit()` directly. This hook owns a ref to the form's `submit` function,\n * which is populated from inside the form via `<RegisterFormSubmit submitRef={submitRef} />`.\n *\n * Returns the `headerActions` array to spread onto a `Drawer` and the `submitRef`\n * to pass to `RegisterFormSubmit`.\n */\nexport const useDrawerSubmit = () => {\n const { t } = useTranslation()\n const submitRef = useRef<(() => void) | null>(null)\n\n const headerActions = useMemo(\n () => [\n {\n label: t('fields:saveChanges'),\n onClick: () => submitRef.current?.(),\n style: 'primary' as const,\n },\n ],\n [t],\n )\n\n return { headerActions, submitRef }\n}\n\n/**\n * Mounts inside a `<Form>` to populate `submitRef` (from `useDrawerSubmit`) with the form's\n * `submit` function, allowing drawer header actions rendered outside the form's React tree\n * to trigger submission.\n */\nexport const RegisterFormSubmit: FC<{\n submitRef: React.RefObject<(() => void) | null>\n}> = ({ submitRef }) => {\n const { submit } = useForm()\n\n useEffect(() => {\n submitRef.current = () => void submit()\n return () => {\n submitRef.current = null\n }\n }, [submit, submitRef])\n\n return null\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;AAIA,SAASC,OAAO,EAAEC,cAAc,QAAQ;AACxC,SAASC,SAAS,EAAEC,OAAO,EAAEC,MAAM,QAAQ;AAE3C;;;;;;;;;;AAUA,OAAO,MAAMC,eAAA,GAAkBA,CAAA;EAAA,MAAAC,CAAA,GAAAP,EAAA;EAC7B;IAAAQ;EAAA,IAAcN,cAAA;EACd,MAAAO,SAAA,GAAkBJ,MAAA,CAA4B;EAAA,IAAAK,EAAA;EAAA,IAAAH,CAAA,QAAAC,CAAA;IAKjCE,EAAA,GAAAF,CAAA,CAAE;IAAAD,CAAA,MAAAC,CAAA;IAAAD,CAAA,MAAAG,EAAA;EAAA;IAAAA,EAAA,GAAAH,CAAA;EAAA;EAAA,IAAAI,EAAA;EAAA,IAAAJ,CAAA,QAAAK,MAAA,CAAAC,GAAA;IACAF,EAAA,GAAAA,CAAA,KAAMF,SAAA,CAAAK,OAAiB;IAAAP,CAAA,MAAAI,EAAA;EAAA;IAAAA,EAAA,GAAAJ,CAAA;EAAA;EAAA,IAAAQ,EAAA;EAAA,IAAAR,CAAA,QAAAG,EAAA;IAH9BK,EAAA,IACJ;MAAAC,KAAA,EACSN,EAAE;MAAAO,OAAA,EACAN,EAAuB;MAAAO,KAAA,EACzB;IACT,EACD;IAAAX,CAAA,MAAAG,EAAA;IAAAH,CAAA,MAAAQ,EAAA;EAAA;IAAAA,EAAA,GAAAR,CAAA;EAAA;EAPH,MAAAY,aAAA,GACQJ,EAML;EACE,IAAAK,EAAA;EAAA,IAAAb,CAAA,QAAAY,aAAA;IAGEC,EAAA;MAAAD,aAAA;MAAAV;IAA2B;IAAAF,CAAA,MAAAY,aAAA;IAAAZ,CAAA,MAAAa,EAAA;EAAA;IAAAA,EAAA,GAAAb,CAAA;EAAA;EAAA,OAA3Ba,EAA2B;AAAA,CACpC;AAEA;;;;;AAKA,OAAO,MAAMC,kBAAA,GAERX,EAAA;EAAA,MAAAH,CAAA,GAAAP,EAAA;EAAC;IAAAS;EAAA,IAAAC,EAAa;EACjB;IAAAY;EAAA,IAAmBrB,OAAA;EAAA,IAAAU,EAAA;EAAA,IAAAI,EAAA;EAAA,IAAAR,CAAA,QAAAe,MAAA,IAAAf,CAAA,QAAAE,SAAA;IAETE,EAAA,GAAAA,CAAA;MACRF,SAAA,CAAAK,OAAA,GAAoB,MAAM,KAAKQ,MAAA,EAAd;MAAA,OACV;QACLb,SAAA,CAAAK,OAAA,GAAoB,IAAH;MAAA,CACnB;IAAA,CACF;IAAGC,EAAA,IAACO,MAAA,EAAQb,SAAA,CAAU;IAAAF,CAAA,MAAAe,MAAA;IAAAf,CAAA,MAAAE,SAAA;IAAAF,CAAA,MAAAI,EAAA;IAAAJ,CAAA,MAAAQ,EAAA;EAAA;IAAAJ,EAAA,GAAAJ,CAAA;IAAAQ,EAAA,GAAAR,CAAA;EAAA;EALtBJ,SAAA,CAAUQ,EAKV,EAAGI,EAAmB;EAAA,OAEf;AAAA,CACT","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLexicalDocumentDrawer.js","names":["c","_c","useLexicalComposerContext","useDocumentDrawer","useModal","$getPreviousSelection","$getSelection","$setSelection","useCallback","useEffect","useState","useLexicalDocumentDrawer","args","$","editor","selectionState","setSelectionState","wasOpen","setWasOpen","DocumentDrawer","DocumentDrawerToggler","t0","closeDrawer","drawerSlug","documentDrawerSlug","openDrawer","modalState","t1","read","selection","storeSelection","t2","update","clone","discrete","skipTransforms","restoreSelection","t3","closeDocumentDrawer","t4","t5","thisModalState","isOpen","setTimeout","t6","openDocumentDrawer","t7","props","_jsx","onClick","t8"],"sources":["../../../src/utilities/fieldsDrawer/useLexicalDocumentDrawer.tsx"],"sourcesContent":["'use client'\nimport type { UseDocumentDrawer } from '@payloadcms/ui'\nimport type { BaseSelection } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { useDocumentDrawer, useModal } from '@payloadcms/ui'\nimport { $getPreviousSelection, $getSelection, $setSelection } from 'lexical'\nimport { useCallback, useEffect, useState } from 'react'\n\n/**\n *\n * Wrapper around useDocumentDrawer that restores and saves selection state (cursor position) when opening and closing the drawer.\n * By default, the lexical cursor position may be lost when opening a drawer and clicking somewhere on that drawer.\n */\nexport const useLexicalDocumentDrawer = (\n args: Parameters<UseDocumentDrawer>[0],\n): {\n closeDocumentDrawer: () => void\n DocumentDrawer: ReturnType<UseDocumentDrawer>[0]\n documentDrawerSlug: string\n DocumentDrawerToggler: ReturnType<UseDocumentDrawer>[1]\n openDocumentDrawer: () => void\n} => {\n const [editor] = useLexicalComposerContext()\n const [selectionState, setSelectionState] = useState<BaseSelection | null>(null)\n const [wasOpen, setWasOpen] = useState<boolean>(false)\n\n const [\n DocumentDrawer,\n DocumentDrawerToggler,\n { closeDrawer: closeDrawer, drawerSlug: documentDrawerSlug, openDrawer },\n ] = useDocumentDrawer(args)\n const { modalState } = useModal()\n\n const storeSelection = useCallback(() => {\n editor.read(() => {\n const selection = $getSelection() ?? $getPreviousSelection()\n setSelectionState(selection)\n })\n setWasOpen(true)\n }, [editor])\n\n const restoreSelection = useCallback(() => {\n if (selectionState) {\n editor.update(\n () => {\n $setSelection(selectionState.clone())\n },\n { discrete: true, skipTransforms: true },\n )\n }\n }, [editor, selectionState])\n\n const closeDocumentDrawer = () => {\n //restoreSelection() // Should already be stored by the useEffect below\n closeDrawer()\n }\n\n // We need to handle drawer closing via a useEffect, as toggleDrawer / closeDrawer will not be triggered if the drawer\n // is closed by clicking outside of the drawer. This useEffect will handle everything.\n useEffect(() => {\n if (!wasOpen) {\n return\n }\n\n const thisModalState = modalState[documentDrawerSlug]\n // Exists in modalState (thus has opened at least once before) and is closed\n if (thisModalState && !thisModalState?.isOpen) {\n setWasOpen(false)\n setTimeout(() => {\n restoreSelection()\n }, 1)\n }\n }, [modalState, documentDrawerSlug, restoreSelection, wasOpen])\n\n const openDocumentDrawer = useCallback(() => {\n storeSelection()\n openDrawer()\n }, [storeSelection, openDrawer])\n\n return {\n closeDocumentDrawer,\n DocumentDrawer,\n documentDrawerSlug,\n DocumentDrawerToggler: (props) => <DocumentDrawerToggler {...props} onClick={storeSelection} />,\n openDocumentDrawer,\n }\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAIA,SAASC,yBAAyB,QAAQ;AAC1C,SAASC,iBAAiB,EAAEC,QAAQ,QAAQ;AAC5C,SAASC,qBAAqB,EAAEC,aAAa,EAAEC,aAAa,QAAQ;AACpE,SAASC,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ;AAEjD;;;;;AAKA,OAAO,MAAMC,wBAAA,GAA2BC,IAAA;EAAA,MAAAC,CAAA,GAAAZ,EAAA;EAStC,OAAAa,MAAA,IAAiBZ,yBAAA;EACjB,OAAAa,cAAA,EAAAC,iBAAA,IAA4CN,QAAA,
|
|
1
|
+
{"version":3,"file":"useLexicalDocumentDrawer.js","names":["c","_c","useLexicalComposerContext","useDocumentDrawer","useModal","$getPreviousSelection","$getSelection","$setSelection","useCallback","useEffect","useState","useLexicalDocumentDrawer","args","$","editor","selectionState","setSelectionState","wasOpen","setWasOpen","DocumentDrawer","DocumentDrawerToggler","t0","closeDrawer","drawerSlug","documentDrawerSlug","openDrawer","modalState","t1","read","selection","storeSelection","t2","update","clone","discrete","skipTransforms","restoreSelection","t3","closeDocumentDrawer","t4","t5","thisModalState","isOpen","setTimeout","t6","openDocumentDrawer","t7","props","_jsx","onClick","t8"],"sources":["../../../src/utilities/fieldsDrawer/useLexicalDocumentDrawer.tsx"],"sourcesContent":["'use client'\nimport type { UseDocumentDrawer } from '@payloadcms/ui'\nimport type { BaseSelection } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { useDocumentDrawer, useModal } from '@payloadcms/ui'\nimport { $getPreviousSelection, $getSelection, $setSelection } from 'lexical'\nimport { useCallback, useEffect, useState } from 'react'\n\n/**\n *\n * Wrapper around useDocumentDrawer that restores and saves selection state (cursor position) when opening and closing the drawer.\n * By default, the lexical cursor position may be lost when opening a drawer and clicking somewhere on that drawer.\n */\nexport const useLexicalDocumentDrawer = (\n args: Parameters<UseDocumentDrawer>[0],\n): {\n closeDocumentDrawer: () => void\n DocumentDrawer: ReturnType<UseDocumentDrawer>[0]\n documentDrawerSlug: string\n DocumentDrawerToggler: ReturnType<UseDocumentDrawer>[1]\n openDocumentDrawer: () => void\n} => {\n const [editor] = useLexicalComposerContext()\n const [selectionState, setSelectionState] = useState<BaseSelection | null>(null)\n const [wasOpen, setWasOpen] = useState<boolean>(false)\n\n const [\n DocumentDrawer,\n DocumentDrawerToggler,\n { closeDrawer: closeDrawer, drawerSlug: documentDrawerSlug, openDrawer },\n ] = useDocumentDrawer(args)\n const { modalState } = useModal()\n\n const storeSelection = useCallback(() => {\n editor.read(() => {\n const selection = $getSelection() ?? $getPreviousSelection()\n setSelectionState(selection)\n })\n setWasOpen(true)\n }, [editor])\n\n const restoreSelection = useCallback(() => {\n if (selectionState) {\n editor.update(\n () => {\n $setSelection(selectionState.clone())\n },\n { discrete: true, skipTransforms: true },\n )\n }\n }, [editor, selectionState])\n\n const closeDocumentDrawer = () => {\n //restoreSelection() // Should already be stored by the useEffect below\n closeDrawer()\n }\n\n // We need to handle drawer closing via a useEffect, as toggleDrawer / closeDrawer will not be triggered if the drawer\n // is closed by clicking outside of the drawer. This useEffect will handle everything.\n useEffect(() => {\n if (!wasOpen) {\n return\n }\n\n const thisModalState = modalState[documentDrawerSlug]\n // Exists in modalState (thus has opened at least once before) and is closed\n if (thisModalState && !thisModalState?.isOpen) {\n setWasOpen(false)\n setTimeout(() => {\n restoreSelection()\n }, 1)\n }\n }, [modalState, documentDrawerSlug, restoreSelection, wasOpen])\n\n const openDocumentDrawer = useCallback(() => {\n storeSelection()\n openDrawer()\n }, [storeSelection, openDrawer])\n\n return {\n closeDocumentDrawer,\n DocumentDrawer,\n documentDrawerSlug,\n DocumentDrawerToggler: (props) => <DocumentDrawerToggler {...props} onClick={storeSelection} />,\n openDocumentDrawer,\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLexicalDrawer.js","names":["c","_c","useLexicalComposerContext","useModal","$getPreviousSelection","$getSelection","$setSelection","useCallback","useEffect","useState","useLexicalDrawer","slug","restoreLate","$","editor","selectionState","setSelectionState","wasOpen","setWasOpen","closeModal","closeBaseModal","modalState","toggleModal","toggleBaseModal","t0","read","selection","storeSelection","t1","update","clone","discrete","skipTransforms","restoreSelection","t2","closeDrawer","isModalOpen","isOpen","t3","toggleDrawer","t4","t5","thisModalState","setTimeout","t6"],"sources":["../../../src/utilities/fieldsDrawer/useLexicalDrawer.tsx"],"sourcesContent":["'use client'\nimport type { BaseSelection } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { useModal } from '@payloadcms/ui'\nimport { $getPreviousSelection, $getSelection, $setSelection } from 'lexical'\nimport { useCallback, useEffect, useState } from 'react'\n\n/**\n *\n * Wrapper around useModal that restores and saves selection state (cursor position) when opening and closing the drawer.\n * By default, the lexical cursor position may be lost when opening a drawer and clicking somewhere on that drawer.\n */\nexport const useLexicalDrawer = (slug: string, restoreLate?: boolean) => {\n const [editor] = useLexicalComposerContext()\n const [selectionState, setSelectionState] = useState<BaseSelection | null>(null)\n const [wasOpen, setWasOpen] = useState<boolean>(false)\n\n const { closeModal: closeBaseModal, modalState, toggleModal: toggleBaseModal } = useModal()\n\n const storeSelection = useCallback(() => {\n editor.read(() => {\n const selection = $getSelection() ?? $getPreviousSelection()\n setSelectionState(selection)\n })\n }, [editor])\n\n const restoreSelection = useCallback(() => {\n if (selectionState) {\n editor.update(\n () => {\n $setSelection(selectionState.clone())\n },\n { discrete: true, skipTransforms: true },\n )\n }\n }, [editor, selectionState])\n\n const closeDrawer = useCallback(() => {\n //restoreSelection() // Should already be stored by the useEffect below\n closeBaseModal(slug)\n }, [closeBaseModal, slug])\n const isModalOpen = modalState?.[slug]?.isOpen\n\n const toggleDrawer = useCallback(() => {\n if (!isModalOpen) {\n storeSelection()\n } else {\n restoreSelection()\n }\n setWasOpen(true)\n toggleBaseModal(slug)\n }, [slug, storeSelection, toggleBaseModal, restoreSelection, isModalOpen])\n\n // We need to handle drawer closing via a useEffect, as toggleDrawer / closeDrawer will not be triggered if the drawer\n // is closed by clicking outside of the drawer. This useEffect will handle everything.\n useEffect(() => {\n if (!wasOpen) {\n return\n }\n\n const thisModalState = modalState[slug]\n // Exists in modalState (thus has opened at least once before) and is closed\n if (thisModalState && !thisModalState?.isOpen) {\n setWasOpen(false)\n\n if (restoreLate) {\n // restoreLate is used for upload extra field drawers. For some reason, the selection is not restored if we call restoreSelection immediately.\n setTimeout(() => {\n restoreSelection()\n }, 0)\n } else {\n restoreSelection()\n }\n }\n }, [modalState, slug, restoreSelection, wasOpen, restoreLate])\n\n return {\n closeDrawer,\n toggleDrawer,\n }\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;AAGA,SAASC,yBAAyB,QAAQ;AAC1C,SAASC,QAAQ,QAAQ;AACzB,SAASC,qBAAqB,EAAEC,aAAa,EAAEC,aAAa,QAAQ;AACpE,SAASC,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ;AAEjD;;;;;AAKA,OAAO,MAAMC,gBAAA,GAAmBA,CAAAC,IAAA,EAAAC,WAAA;EAAA,MAAAC,CAAA,GAAAZ,EAAA;EAC9B,OAAAa,MAAA,IAAiBZ,yBAAA;EACjB,OAAAa,cAAA,EAAAC,iBAAA,IAA4CP,QAAA,
|
|
1
|
+
{"version":3,"file":"useLexicalDrawer.js","names":["c","_c","useLexicalComposerContext","useModal","$getPreviousSelection","$getSelection","$setSelection","useCallback","useEffect","useState","useLexicalDrawer","slug","restoreLate","$","editor","selectionState","setSelectionState","wasOpen","setWasOpen","closeModal","closeBaseModal","modalState","toggleModal","toggleBaseModal","t0","read","selection","storeSelection","t1","update","clone","discrete","skipTransforms","restoreSelection","t2","closeDrawer","isModalOpen","isOpen","t3","toggleDrawer","t4","t5","thisModalState","setTimeout","t6"],"sources":["../../../src/utilities/fieldsDrawer/useLexicalDrawer.tsx"],"sourcesContent":["'use client'\nimport type { BaseSelection } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { useModal } from '@payloadcms/ui'\nimport { $getPreviousSelection, $getSelection, $setSelection } from 'lexical'\nimport { useCallback, useEffect, useState } from 'react'\n\n/**\n *\n * Wrapper around useModal that restores and saves selection state (cursor position) when opening and closing the drawer.\n * By default, the lexical cursor position may be lost when opening a drawer and clicking somewhere on that drawer.\n */\nexport const useLexicalDrawer = (slug: string, restoreLate?: boolean) => {\n const [editor] = useLexicalComposerContext()\n const [selectionState, setSelectionState] = useState<BaseSelection | null>(null)\n const [wasOpen, setWasOpen] = useState<boolean>(false)\n\n const { closeModal: closeBaseModal, modalState, toggleModal: toggleBaseModal } = useModal()\n\n const storeSelection = useCallback(() => {\n editor.read(() => {\n const selection = $getSelection() ?? $getPreviousSelection()\n setSelectionState(selection)\n })\n }, [editor])\n\n const restoreSelection = useCallback(() => {\n if (selectionState) {\n editor.update(\n () => {\n $setSelection(selectionState.clone())\n },\n { discrete: true, skipTransforms: true },\n )\n }\n }, [editor, selectionState])\n\n const closeDrawer = useCallback(() => {\n //restoreSelection() // Should already be stored by the useEffect below\n closeBaseModal(slug)\n }, [closeBaseModal, slug])\n const isModalOpen = modalState?.[slug]?.isOpen\n\n const toggleDrawer = useCallback(() => {\n if (!isModalOpen) {\n storeSelection()\n } else {\n restoreSelection()\n }\n setWasOpen(true)\n toggleBaseModal(slug)\n }, [slug, storeSelection, toggleBaseModal, restoreSelection, isModalOpen])\n\n // We need to handle drawer closing via a useEffect, as toggleDrawer / closeDrawer will not be triggered if the drawer\n // is closed by clicking outside of the drawer. This useEffect will handle everything.\n useEffect(() => {\n if (!wasOpen) {\n return\n }\n\n const thisModalState = modalState[slug]\n // Exists in modalState (thus has opened at least once before) and is closed\n if (thisModalState && !thisModalState?.isOpen) {\n setWasOpen(false)\n\n if (restoreLate) {\n // restoreLate is used for upload extra field drawers. For some reason, the selection is not restored if we call restoreSelection immediately.\n setTimeout(() => {\n restoreSelection()\n }, 0)\n } else {\n restoreSelection()\n }\n }\n }, [modalState, slug, restoreSelection, wasOpen, restoreLate])\n\n return {\n closeDrawer,\n toggleDrawer,\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLexicalListDrawer.js","names":["c","_c","useLexicalComposerContext","useListDrawer","useModal","$getNodeByKey","$getPreviousSelection","$getRoot","$getSelection","$isRangeSelection","$setSelection","useCallback","useEffect","useState","useLexicalListDrawer","args","$","editor","selectionState","setSelectionState","wasOpen","setWasOpen","BaseListDrawer","BaseListDrawerToggler","t0","closeDrawer","baseCloseDrawer","drawerSlug","listDrawerSlug","isDrawerOpen","openDrawer","baseOpenDrawer","modalState","t1","Symbol","for","selection","$storeSelection","t2","update","anchor","focus","key","clone","selectEnd","discrete","skipTransforms","restoreSelection","t3","closeListDrawer","t4","t5","thisModalState","isOpen","setTimeout","t6","props","_jsx","onClick","t7","t8","isListDrawerOpen","ListDrawer","ListDrawerToggler"],"sources":["../../../src/utilities/fieldsDrawer/useLexicalListDrawer.tsx"],"sourcesContent":["'use client'\nimport type { UseListDrawer } from '@payloadcms/ui'\nimport type { BaseSelection } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { useListDrawer, useModal } from '@payloadcms/ui'\nimport {\n $getNodeByKey,\n $getPreviousSelection,\n $getRoot,\n $getSelection,\n $isRangeSelection,\n $setSelection,\n} from 'lexical'\nimport { useCallback, useEffect, useState } from 'react'\n\n/**\n *\n * Wrapper around useListDrawer that restores and saves selection state (cursor position) when opening and closing the drawer.\n * By default, the lexical cursor position may be lost when opening a drawer and clicking somewhere on that drawer.\n */\nexport const useLexicalListDrawer = (\n args: Parameters<UseListDrawer>[0],\n): {\n closeListDrawer: () => void\n isListDrawerOpen: boolean\n ListDrawer: ReturnType<UseListDrawer>[0]\n listDrawerSlug: string\n ListDrawerToggler: ReturnType<UseListDrawer>[1]\n openListDrawer: (selection?: BaseSelection) => void\n} => {\n const [editor] = useLexicalComposerContext()\n const [selectionState, setSelectionState] = useState<BaseSelection | null>(null)\n const [wasOpen, setWasOpen] = useState<boolean>(false)\n\n const [\n BaseListDrawer,\n BaseListDrawerToggler,\n {\n closeDrawer: baseCloseDrawer,\n drawerSlug: listDrawerSlug,\n isDrawerOpen,\n openDrawer: baseOpenDrawer,\n },\n ] = useListDrawer(args)\n const { modalState } = useModal()\n\n const $storeSelection = useCallback(() => {\n // editor.read() causes an error here when creating a new upload node from the slash menu. It seems like we can omit it here though, as all\n // invocations of that functions are wrapped in editor.read() or editor.update() somewhere in the call stack.\n const selection = $getSelection() ?? $getPreviousSelection()\n setSelectionState(selection)\n }, [])\n\n const restoreSelection = useCallback(() => {\n if (selectionState) {\n editor.update(\n () => {\n if ($isRangeSelection(selectionState)) {\n const { anchor, focus } = selectionState\n if ($getNodeByKey(anchor.key) && $getNodeByKey(focus.key)) {\n $setSelection(selectionState.clone())\n }\n } else {\n // not ideal, but better than losing the selection. Try to set the selection\n // in a valid place if you remove selected nodes!\n $getRoot().selectEnd()\n }\n },\n { discrete: true, skipTransforms: true },\n )\n }\n }, [editor, selectionState])\n\n const closeListDrawer = () => {\n //restoreSelection() // Should already be stored by the useEffect below\n baseCloseDrawer()\n }\n\n // We need to handle drawer closing via a useEffect, as toggleDrawer / closeDrawer will not be triggered if the drawer\n // is closed by clicking outside of the drawer. This useEffect will handle everything.\n useEffect(() => {\n if (!wasOpen) {\n return\n }\n\n const thisModalState = modalState[listDrawerSlug]\n // Exists in modalState (thus has opened at least once before) and is closed\n if (thisModalState && !thisModalState?.isOpen) {\n setWasOpen(false)\n setTimeout(() => {\n restoreSelection()\n }, 1)\n }\n }, [modalState, listDrawerSlug, restoreSelection, wasOpen])\n\n return {\n closeListDrawer,\n isListDrawerOpen: isDrawerOpen,\n ListDrawer: BaseListDrawer,\n listDrawerSlug,\n ListDrawerToggler: (props) => (\n <BaseListDrawerToggler\n {...props}\n onClick={() => {\n $storeSelection()\n }}\n />\n ),\n openListDrawer: () => {\n $storeSelection()\n baseOpenDrawer()\n setWasOpen(true)\n },\n }\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAIA,SAASC,yBAAyB,QAAQ;AAC1C,SAASC,aAAa,EAAEC,QAAQ,QAAQ;AACxC,SACEC,aAAa,EACbC,qBAAqB,EACrBC,QAAQ,EACRC,aAAa,EACbC,iBAAiB,EACjBC,aAAa,QACR;AACP,SAASC,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ;AAEjD;;;;;AAKA,OAAO,MAAMC,oBAAA,GAAuBC,IAAA;EAAA,MAAAC,CAAA,GAAAf,EAAA;EAUlC,OAAAgB,MAAA,IAAiBf,yBAAA;EACjB,OAAAgB,cAAA,EAAAC,iBAAA,IAA4CN,QAAA,
|
|
1
|
+
{"version":3,"file":"useLexicalListDrawer.js","names":["c","_c","useLexicalComposerContext","useListDrawer","useModal","$getNodeByKey","$getPreviousSelection","$getRoot","$getSelection","$isRangeSelection","$setSelection","useCallback","useEffect","useState","useLexicalListDrawer","args","$","editor","selectionState","setSelectionState","wasOpen","setWasOpen","BaseListDrawer","BaseListDrawerToggler","t0","closeDrawer","baseCloseDrawer","drawerSlug","listDrawerSlug","isDrawerOpen","openDrawer","baseOpenDrawer","modalState","t1","Symbol","for","selection","$storeSelection","t2","update","anchor","focus","key","clone","selectEnd","discrete","skipTransforms","restoreSelection","t3","closeListDrawer","t4","t5","thisModalState","isOpen","setTimeout","t6","props","_jsx","onClick","t7","t8","isListDrawerOpen","ListDrawer","ListDrawerToggler"],"sources":["../../../src/utilities/fieldsDrawer/useLexicalListDrawer.tsx"],"sourcesContent":["'use client'\nimport type { UseListDrawer } from '@payloadcms/ui'\nimport type { BaseSelection } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { useListDrawer, useModal } from '@payloadcms/ui'\nimport {\n $getNodeByKey,\n $getPreviousSelection,\n $getRoot,\n $getSelection,\n $isRangeSelection,\n $setSelection,\n} from 'lexical'\nimport { useCallback, useEffect, useState } from 'react'\n\n/**\n *\n * Wrapper around useListDrawer that restores and saves selection state (cursor position) when opening and closing the drawer.\n * By default, the lexical cursor position may be lost when opening a drawer and clicking somewhere on that drawer.\n */\nexport const useLexicalListDrawer = (\n args: Parameters<UseListDrawer>[0],\n): {\n closeListDrawer: () => void\n isListDrawerOpen: boolean\n ListDrawer: ReturnType<UseListDrawer>[0]\n listDrawerSlug: string\n ListDrawerToggler: ReturnType<UseListDrawer>[1]\n openListDrawer: (selection?: BaseSelection) => void\n} => {\n const [editor] = useLexicalComposerContext()\n const [selectionState, setSelectionState] = useState<BaseSelection | null>(null)\n const [wasOpen, setWasOpen] = useState<boolean>(false)\n\n const [\n BaseListDrawer,\n BaseListDrawerToggler,\n {\n closeDrawer: baseCloseDrawer,\n drawerSlug: listDrawerSlug,\n isDrawerOpen,\n openDrawer: baseOpenDrawer,\n },\n ] = useListDrawer(args)\n const { modalState } = useModal()\n\n const $storeSelection = useCallback(() => {\n // editor.read() causes an error here when creating a new upload node from the slash menu. It seems like we can omit it here though, as all\n // invocations of that functions are wrapped in editor.read() or editor.update() somewhere in the call stack.\n const selection = $getSelection() ?? $getPreviousSelection()\n setSelectionState(selection)\n }, [])\n\n const restoreSelection = useCallback(() => {\n if (selectionState) {\n editor.update(\n () => {\n if ($isRangeSelection(selectionState)) {\n const { anchor, focus } = selectionState\n if ($getNodeByKey(anchor.key) && $getNodeByKey(focus.key)) {\n $setSelection(selectionState.clone())\n }\n } else {\n // not ideal, but better than losing the selection. Try to set the selection\n // in a valid place if you remove selected nodes!\n $getRoot().selectEnd()\n }\n },\n { discrete: true, skipTransforms: true },\n )\n }\n }, [editor, selectionState])\n\n const closeListDrawer = () => {\n //restoreSelection() // Should already be stored by the useEffect below\n baseCloseDrawer()\n }\n\n // We need to handle drawer closing via a useEffect, as toggleDrawer / closeDrawer will not be triggered if the drawer\n // is closed by clicking outside of the drawer. This useEffect will handle everything.\n useEffect(() => {\n if (!wasOpen) {\n return\n }\n\n const thisModalState = modalState[listDrawerSlug]\n // Exists in modalState (thus has opened at least once before) and is closed\n if (thisModalState && !thisModalState?.isOpen) {\n setWasOpen(false)\n setTimeout(() => {\n restoreSelection()\n }, 1)\n }\n }, [modalState, listDrawerSlug, restoreSelection, wasOpen])\n\n return {\n closeListDrawer,\n isListDrawerOpen: isDrawerOpen,\n ListDrawer: BaseListDrawer,\n listDrawerSlug,\n ListDrawerToggler: (props) => (\n <BaseListDrawerToggler\n {...props}\n onClick={() => {\n $storeSelection()\n }}\n />\n ),\n openListDrawer: () => {\n $storeSelection()\n baseOpenDrawer()\n setWasOpen(true)\n },\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initLexicalFeatures.d.ts","sourceRoot":"","sources":["../../src/utilities/initLexicalFeatures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAE1D,OAAO,EAAE,KAAK,oBAAoB,EAAE,KAAK,cAAc,EAAE,KAAK,OAAO,EAAE,MAAM,SAAS,CAAA;AAOtF,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAA;AAC7E,OAAO,KAAK,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAA;AAC1F,KAAK,IAAI,GAAG;IACV,oBAAoB,EAAE,oBAAoB,CAAA;IAC1C,cAAc,EAAE,cAAc,CAAA;IAC9B,IAAI,EAAE,UAAU,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;IAChB,qBAAqB,EAAE,2BAA2B,CAAA;IAClD,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,GAAG;IAC/C,cAAc,EAAE,yBAAyB,CAAC,gBAAgB,CAAC,CAAA;IAC3D,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC3C,sBAAsB,EAAE,sBAAsB,CAAA;CAC/C,
|
|
1
|
+
{"version":3,"file":"initLexicalFeatures.d.ts","sourceRoot":"","sources":["../../src/utilities/initLexicalFeatures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAE1D,OAAO,EAAE,KAAK,oBAAoB,EAAE,KAAK,cAAc,EAAE,KAAK,OAAO,EAAE,MAAM,SAAS,CAAA;AAOtF,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAA;AAC7E,OAAO,KAAK,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAA;AAC1F,KAAK,IAAI,GAAG;IACV,oBAAoB,EAAE,oBAAoB,CAAA;IAC1C,cAAc,EAAE,cAAc,CAAA;IAC9B,IAAI,EAAE,UAAU,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;IAChB,qBAAqB,EAAE,2BAA2B,CAAA;IAClD,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,GAAG;IAC/C,cAAc,EAAE,yBAAyB,CAAC,gBAAgB,CAAC,CAAA;IAC3D,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC3C,sBAAsB,EAAE,sBAAsB,CAAA;CAC/C,CA6FA"}
|