@payloadcms/richtext-lexical 3.0.0-beta.96 → 3.0.0-beta.97

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/dist/exports/client/Field-MPDY6IHA.js +2 -0
  2. package/dist/exports/client/Field-MPDY6IHA.js.map +7 -0
  3. package/dist/exports/client/{RelationshipComponent-EZORSGUZ.js → RelationshipComponent-CPYVT3XN.js} +2 -2
  4. package/dist/exports/client/bundled.css +1 -1
  5. package/dist/exports/client/{chunk-TD7O23AB.js → chunk-BR57XNHD.js} +2 -2
  6. package/dist/exports/client/{chunk-TD7O23AB.js.map → chunk-BR57XNHD.js.map} +1 -1
  7. package/dist/exports/client/{chunk-UJDWBQ2K.js → chunk-EPEFKP5H.js} +2 -2
  8. package/dist/exports/client/{chunk-UJDWBQ2K.js.map → chunk-EPEFKP5H.js.map} +1 -1
  9. package/dist/exports/client/chunk-GK7ZKYHL.js +2 -0
  10. package/dist/exports/client/chunk-GK7ZKYHL.js.map +7 -0
  11. package/dist/exports/client/{chunk-OLSILJA6.js → chunk-MFAXC4ZA.js} +2 -2
  12. package/dist/exports/client/{chunk-OLSILJA6.js.map → chunk-MFAXC4ZA.js.map} +2 -2
  13. package/dist/exports/client/{chunk-V2LKLT2F.js → chunk-PECDZEZY.js} +3 -3
  14. package/dist/exports/client/{chunk-V2LKLT2F.js.map → chunk-PECDZEZY.js.map} +3 -3
  15. package/dist/exports/client/{chunk-YL453UOS.js → chunk-XIBMVIFW.js} +2 -2
  16. package/dist/exports/client/{chunk-YL453UOS.js.map → chunk-XIBMVIFW.js.map} +1 -1
  17. package/dist/exports/client/{component-2YLEVOFH.js → component-3EGTURAI.js} +2 -2
  18. package/dist/exports/client/{component-2YLEVOFH.js.map → component-3EGTURAI.js.map} +1 -1
  19. package/dist/exports/client/{component-7RAP75FW.js → component-BRCRMQID.js} +2 -2
  20. package/dist/exports/client/{component-7RAP75FW.js.map → component-BRCRMQID.js.map} +1 -1
  21. package/dist/exports/client/{component-LLWMZU6K.js → component-GAX6BHKZ.js} +2 -2
  22. package/dist/exports/client/{componentInline-YSHGRL2J.js → componentInline-RETIC4OV.js} +2 -2
  23. package/dist/exports/client/index.d.ts +2 -2
  24. package/dist/exports/client/index.d.ts.map +1 -1
  25. package/dist/exports/client/index.js +5 -5
  26. package/dist/exports/client/index.js.map +4 -4
  27. package/dist/features/blocks/client/component/index.js.map +1 -1
  28. package/dist/features/blocks/client/plugin/index.js.map +1 -1
  29. package/dist/features/blocks/server/index.js +25 -25
  30. package/dist/features/blocks/server/index.js.map +1 -1
  31. package/dist/features/blocks/server/nodes/BlocksNode.d.ts +1 -1
  32. package/dist/features/blocks/server/nodes/BlocksNode.d.ts.map +1 -1
  33. package/dist/features/blocks/server/nodes/BlocksNode.js.map +1 -1
  34. package/dist/features/blocks/server/nodes/InlineBlocksNode.d.ts +1 -1
  35. package/dist/features/blocks/server/nodes/InlineBlocksNode.d.ts.map +1 -1
  36. package/dist/features/blocks/server/nodes/InlineBlocksNode.js.map +1 -1
  37. package/dist/features/converters/html/converter/index.d.ts +5 -5
  38. package/dist/features/converters/html/converter/index.d.ts.map +1 -1
  39. package/dist/features/converters/html/converter/index.js.map +1 -1
  40. package/dist/features/converters/html/converter/types.d.ts +1 -1
  41. package/dist/features/converters/html/converter/types.d.ts.map +1 -1
  42. package/dist/features/converters/html/converter/types.js.map +1 -1
  43. package/dist/features/experimental_table/client/plugins/TableActionMenuPlugin/index.js +1 -1
  44. package/dist/features/experimental_table/client/plugins/TableActionMenuPlugin/index.js.map +1 -1
  45. package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.js.map +1 -1
  46. package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.d.ts +1 -1
  47. package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.d.ts.map +1 -1
  48. package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.js.map +1 -1
  49. package/dist/features/experimental_table/client/plugins/TablePlugin/index.js.map +1 -1
  50. package/dist/features/experimental_table/client/utils/debounce.js +4 -4
  51. package/dist/features/experimental_table/client/utils/debounce.js.map +1 -1
  52. package/dist/features/experimental_table/client/utils/useDebounce.js.map +1 -1
  53. package/dist/features/horizontalRule/server/nodes/HorizontalRuleNode.d.ts.map +1 -1
  54. package/dist/features/horizontalRule/server/nodes/HorizontalRuleNode.js +1 -1
  55. package/dist/features/horizontalRule/server/nodes/HorizontalRuleNode.js.map +1 -1
  56. package/dist/features/link/client/index.js +1 -1
  57. package/dist/features/link/client/index.js.map +1 -1
  58. package/dist/features/link/client/plugins/floatingLinkEditor/index.d.ts.map +1 -1
  59. package/dist/features/link/client/plugins/floatingLinkEditor/index.js.map +1 -1
  60. package/dist/features/link/nodes/LinkNode.d.ts.map +1 -1
  61. package/dist/features/link/nodes/LinkNode.js +1 -1
  62. package/dist/features/link/nodes/LinkNode.js.map +1 -1
  63. package/dist/features/relationship/client/nodes/RelationshipNode.d.ts +1 -1
  64. package/dist/features/relationship/client/nodes/RelationshipNode.d.ts.map +1 -1
  65. package/dist/features/relationship/client/nodes/RelationshipNode.js.map +1 -1
  66. package/dist/features/relationship/server/nodes/RelationshipNode.d.ts +1 -1
  67. package/dist/features/relationship/server/nodes/RelationshipNode.d.ts.map +1 -1
  68. package/dist/features/relationship/server/nodes/RelationshipNode.js.map +1 -1
  69. package/dist/features/toolbars/fixed/client/Toolbar/index.js +1 -1
  70. package/dist/features/toolbars/fixed/client/Toolbar/index.js.map +1 -1
  71. package/dist/features/toolbars/inline/client/Toolbar/index.js +1 -1
  72. package/dist/features/toolbars/inline/client/Toolbar/index.js.map +1 -1
  73. package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.d.ts +2 -2
  74. package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.d.ts.map +1 -1
  75. package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js +1 -1
  76. package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js.map +1 -1
  77. package/dist/features/toolbars/shared/ToolbarDropdown/index.d.ts +2 -2
  78. package/dist/features/toolbars/shared/ToolbarDropdown/index.d.ts.map +1 -1
  79. package/dist/features/toolbars/shared/ToolbarDropdown/index.js +6 -6
  80. package/dist/features/toolbars/shared/ToolbarDropdown/index.js.map +1 -1
  81. package/dist/features/typesClient.d.ts +6 -6
  82. package/dist/features/typesClient.d.ts.map +1 -1
  83. package/dist/features/typesClient.js.map +1 -1
  84. package/dist/features/typesServer.d.ts +8 -8
  85. package/dist/features/typesServer.d.ts.map +1 -1
  86. package/dist/features/typesServer.js.map +1 -1
  87. package/dist/features/upload/client/component/index.js.map +1 -1
  88. package/dist/features/upload/client/nodes/UploadNode.d.ts.map +1 -1
  89. package/dist/features/upload/client/nodes/UploadNode.js +1 -1
  90. package/dist/features/upload/client/nodes/UploadNode.js.map +1 -1
  91. package/dist/field/Field.js +1 -1
  92. package/dist/field/Field.js.map +1 -1
  93. package/dist/field/bundled.css +1 -1
  94. package/dist/field/index.js +1 -1
  95. package/dist/field/index.js.map +1 -1
  96. package/dist/index.d.ts +2 -2
  97. package/dist/index.d.ts.map +1 -1
  98. package/dist/index.js +3 -3
  99. package/dist/index.js.map +1 -1
  100. package/dist/lexical/LexicalEditor.d.ts.map +1 -1
  101. package/dist/lexical/LexicalEditor.js +5 -5
  102. package/dist/lexical/LexicalEditor.js.map +1 -1
  103. package/dist/lexical/LexicalProvider.js +1 -1
  104. package/dist/lexical/LexicalProvider.js.map +1 -1
  105. package/dist/lexical/config/client/EditorConfigProvider.d.ts +1 -1
  106. package/dist/lexical/config/client/EditorConfigProvider.d.ts.map +1 -1
  107. package/dist/lexical/config/client/EditorConfigProvider.js +1 -1
  108. package/dist/lexical/config/client/EditorConfigProvider.js.map +1 -1
  109. package/dist/lexical/config/client/sanitize.js +1 -1
  110. package/dist/lexical/config/client/sanitize.js.map +1 -1
  111. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.d.ts +3 -3
  112. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.d.ts.map +1 -1
  113. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js +2 -2
  114. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js.map +1 -1
  115. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.d.ts +1 -1
  116. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.d.ts.map +1 -1
  117. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.js.map +1 -1
  118. package/dist/lexical/plugins/SlashMenu/index.d.ts.map +1 -1
  119. package/dist/lexical/plugins/SlashMenu/index.js +1 -1
  120. package/dist/lexical/plugins/SlashMenu/index.js.map +1 -1
  121. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js.map +1 -1
  122. package/dist/lexical/plugins/handles/utils/getNodeCloseToPoint.js.map +1 -1
  123. package/dist/lexical/utils/nodeFormat.d.ts +2 -2
  124. package/dist/lexical/utils/nodeFormat.d.ts.map +1 -1
  125. package/dist/lexical/utils/nodeFormat.js.map +1 -1
  126. package/dist/lexical/utils/rect.d.ts.map +1 -1
  127. package/dist/lexical/utils/rect.js.map +1 -1
  128. package/dist/utilities/fieldsDrawer/DrawerContent.js.map +1 -1
  129. package/dist/validate/index.js +1 -1
  130. package/dist/validate/index.js.map +1 -1
  131. package/dist/validate/validateNodes.d.ts +2 -2
  132. package/dist/validate/validateNodes.d.ts.map +1 -1
  133. package/dist/validate/validateNodes.js +2 -2
  134. package/dist/validate/validateNodes.js.map +1 -1
  135. package/package.json +7 -7
  136. package/dist/exports/client/Field-E27BVLS5.js +0 -2
  137. package/dist/exports/client/Field-E27BVLS5.js.map +0 -7
  138. package/dist/exports/client/chunk-ZH3MUMBJ.js +0 -2
  139. package/dist/exports/client/chunk-ZH3MUMBJ.js.map +0 -7
  140. /package/dist/exports/client/{RelationshipComponent-EZORSGUZ.js.map → RelationshipComponent-CPYVT3XN.js.map} +0 -0
  141. /package/dist/exports/client/{component-LLWMZU6K.js.map → component-GAX6BHKZ.js.map} +0 -0
  142. /package/dist/exports/client/{componentInline-YSHGRL2J.js.map → componentInline-RETIC4OV.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useLexicalComposerContext","eventFiles","$getNearestNodeFromDOMNode","$getNodeByKey","React","useEffect","useRef","useState","createPortal","useEditorConfigContext","isHTMLElement","Point","calculateDistanceFromScrollerElem","getNodeCloseToPoint","getTopLevelNodeKeys","isOnHandleElement","setHandlePosition","getBoundingClientRectWithoutTransform","setTargetLine","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","menuRef","targetLineRef","debugHighlightRef","isDraggingBlockRef","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","isBelow","willStayInSamePosition","getBoundingClientRect","width","preventDefault","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","newInsertedElemRect","highlightElem","createElement","className","backgroundColor","transition","zIndex","pointerEvents","boxSizing","borderRadius","position","body","appendChild","left","onDragStart","nodeKey","node","setData","onDragEnd","_jsxs","Fragment","_jsx","draggable","ref","DraggableBlockPlugin","_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 { $getNearestNodeFromDOMNode, $getNodeByKey } from 'lexical'\nimport * as React from 'react'\nimport { useEffect, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { useEditorConfigContext } from '../../../config/client/EditorConfigProvider.js'\nimport { isHTMLElement } from '../../../utils/guard.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.scss'\nimport { setTargetLine } from './setTargetLine.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\n const menuRef = useRef<HTMLDivElement>(null)\n const targetLineRef = useRef<HTMLDivElement>(null)\n const debugHighlightRef = useRef<HTMLDivElement>(null)\n const isDraggingBlockRef = useRef<boolean>(false)\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)\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 if (draggableBlockElem !== targetBlockElem) {\n const { isBelow, willStayInSamePosition } = setTargetLine(\n editorConfig?.admin?.hideGutter ? '0px' : '3rem',\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 // Prevent default event to be able to trigger onDrop events\n // Calling preventDefault() adds the green plus icon to the cursor,\n // indicating that the drop is allowed.\n event.preventDefault()\n\n if (!willStayInSamePosition) {\n setLastTargetBlock({\n boundingBox: targetBlockElem.getBoundingClientRect(),\n elem: targetBlockElem,\n isBelow,\n })\n }\n } else {\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 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\n const highlightElem = document.createElement('div')\n highlightElem.className = 'lexical-block-highlighter'\n\n highlightElem.style.backgroundColor = 'var(--theme-elevation-1000'\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 setTimeout(() => {\n highlightElem.style.opacity = '0'\n setTimeout(() => {\n highlightElem.remove()\n }, 500)\n }, 1000)\n }, 120)\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 }\n }, [\n scrollerElem,\n blockHandleHorizontalOffset,\n anchorElem,\n editor,\n lastTargetBlock,\n draggableBlockElem,\n editorConfig?.admin?.hideGutter,\n ])\n\n function onDragStart(event: ReactDragEvent<HTMLDivElement>): void {\n const dataTransfer = event.dataTransfer\n if (!dataTransfer || !draggableBlockElem) {\n return\n }\n setDragImage(dataTransfer, draggableBlockElem)\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 hideTargetLine(targetLineRef.current, lastTargetBlock?.elem)\n }\n\n return createPortal(\n <React.Fragment>\n <div\n className=\"icon draggable-block-menu\"\n draggable\n onDragEnd={onDragEnd}\n onDragStart={onDragStart}\n ref={menuRef}\n >\n <div className={isEditable ? 'icon' : ''} />\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":[]}
1
+ {"version":3,"file":"index.js","names":["useLexicalComposerContext","eventFiles","$getNearestNodeFromDOMNode","$getNodeByKey","React","useEffect","useRef","useState","createPortal","useEditorConfigContext","isHTMLElement","Point","calculateDistanceFromScrollerElem","getNodeCloseToPoint","getTopLevelNodeKeys","isOnHandleElement","setHandlePosition","getBoundingClientRectWithoutTransform","setTargetLine","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","menuRef","targetLineRef","debugHighlightRef","isDraggingBlockRef","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","isBelow","willStayInSamePosition","getBoundingClientRect","width","preventDefault","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","newInsertedElemRect","highlightElem","createElement","className","backgroundColor","transition","zIndex","pointerEvents","boxSizing","borderRadius","position","body","appendChild","left","onDragStart","nodeKey","node","setData","onDragEnd","_jsxs","Fragment","_jsx","draggable","ref","DraggableBlockPlugin","_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 { $getNearestNodeFromDOMNode, $getNodeByKey } from 'lexical'\nimport * as React from 'react'\nimport { useEffect, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { useEditorConfigContext } from '../../../config/client/EditorConfigProvider.js'\nimport { isHTMLElement } from '../../../utils/guard.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.scss'\nimport { setTargetLine } from './setTargetLine.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\n const menuRef = useRef<HTMLDivElement>(null)\n const targetLineRef = useRef<HTMLDivElement>(null)\n const debugHighlightRef = useRef<HTMLDivElement>(null)\n const isDraggingBlockRef = useRef<boolean>(false)\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)\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 if (draggableBlockElem !== targetBlockElem) {\n const { isBelow, willStayInSamePosition } = setTargetLine(\n editorConfig?.admin?.hideGutter ? '0px' : '3rem',\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 // Prevent default event to be able to trigger onDrop events\n // Calling preventDefault() adds the green plus icon to the cursor,\n // indicating that the drop is allowed.\n event.preventDefault()\n\n if (!willStayInSamePosition) {\n setLastTargetBlock({\n boundingBox: targetBlockElem.getBoundingClientRect(),\n elem: targetBlockElem,\n isBelow,\n })\n }\n } else {\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 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\n const highlightElem = document.createElement('div')\n highlightElem.className = 'lexical-block-highlighter'\n\n highlightElem.style.backgroundColor = 'var(--theme-elevation-1000'\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 setTimeout(() => {\n highlightElem.style.opacity = '0'\n setTimeout(() => {\n highlightElem.remove()\n }, 500)\n }, 1000)\n }, 120)\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 }\n }, [\n scrollerElem,\n blockHandleHorizontalOffset,\n anchorElem,\n editor,\n lastTargetBlock,\n draggableBlockElem,\n editorConfig?.admin?.hideGutter,\n ])\n\n function onDragStart(event: ReactDragEvent<HTMLDivElement>): void {\n const dataTransfer = event.dataTransfer\n if (!dataTransfer || !draggableBlockElem) {\n return\n }\n setDragImage(dataTransfer, draggableBlockElem)\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 hideTargetLine(targetLineRef.current, lastTargetBlock?.elem)\n }\n\n return createPortal(\n <React.Fragment>\n <div\n className=\"icon draggable-block-menu\"\n draggable\n onDragEnd={onDragEnd}\n onDragStart={onDragStart}\n ref={menuRef}\n >\n <div className={isEditable ? 'icon' : ''} />\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":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"getNodeCloseToPoint.js","names":["$getNodeByKey","Point","Rect","getBoundingClientRectWithoutTransform","getCollapsedMargins","getTopLevelNodeKeys","Downward","Upward","Indeterminate","cache","props","result","isPointClose","previous","current","threshold","dx","x","dy","y","getNodeCloseToPoint","anchorElem","cache_threshold","editor","fuzzy","horizontalOffset","point","startIndex","useEdgeAsDefault","verbose","anchorElementRect","getBoundingClientRect","topLevelNodeKeys","closestBlockElem","blockElem","blockNode","distance","Infinity","foundAtIndex","isFoundNodeEmptyParagraph","getEditorState","read","firstNode","lastNode","getElementByKey","length","firstNodeRect","lastNodeRect","top","bottom","index","direction","key","elem","domRect","fromDOMRect","marginBottom","marginTop","rect","generateNewRect","left","right","isOnBottomSide","isOnTopSide","distanceFromPoint","getType","getTextContent","returnEmptyParagraphs"],"sources":["../../../../../src/lexical/plugins/handles/utils/getNodeCloseToPoint.ts"],"sourcesContent":["'use client'\nimport type { LexicalEditor, LexicalNode } from 'lexical'\n\nimport { $getNodeByKey } from 'lexical'\n\nimport { Point } from '../../../utils/point.js'\nimport { Rect } from '../../../utils/rect.js'\nimport { getBoundingClientRectWithoutTransform } from '../DraggableBlockPlugin/getBoundingRectWithoutTransform.js'\nimport { getCollapsedMargins } from '../utils/getCollapsedMargins.js'\nimport { getTopLevelNodeKeys } from '../utils/getTopLevelNodeKeys.js'\n\n// Directions\nconst Downward = 1\nconst Upward = -1\nconst Indeterminate = 0\n\ntype Props = {\n anchorElem: HTMLElement\n cache_threshold?: number\n editor: LexicalEditor\n /** fuzzy makes the search not exact. If no exact match found, find the closes node instead of returning null */\n fuzzy?: boolean\n horizontalOffset?: number\n point: Point\n /**\n * By default, empty paragraphs are not returned. Set this to true to return empty paragraphs. @default false\n */\n returnEmptyParagraphs?: boolean\n /**\n * The index to start searching from. It can be a considerable performance optimization to start searching from the index of the\n * previously found node, as the node is likely to be close to the next node.\n */\n startIndex?: number\n useEdgeAsDefault?: boolean\n verbose?: boolean\n}\n\ntype Output = {\n blockElem: HTMLElement | null\n blockNode: LexicalNode | null\n foundAtIndex: number\n isFoundNodeEmptyParagraph: boolean\n}\n\nconst cache = {\n props: null as Props | null,\n result: null as Output | null,\n}\n\nfunction isPointClose(previous: Point, current: Point, threshold: number = 20): boolean {\n const dx = previous.x - current.x\n const dy = previous.y - current.y\n return dx * dx + dy * dy <= threshold * threshold\n}\n\nexport function getNodeCloseToPoint(props: Props): Output {\n const {\n anchorElem,\n cache_threshold = 20,\n editor,\n fuzzy = false,\n horizontalOffset = 0,\n point: { x, y },\n startIndex = 0,\n useEdgeAsDefault = false,\n verbose = false,\n } = props\n\n // Use cache\n if (\n cache_threshold > 0 &&\n cache.props &&\n cache.result &&\n cache.props.fuzzy === props.fuzzy &&\n cache.props.horizontalOffset === props.horizontalOffset &&\n cache.props.useEdgeAsDefault === props.useEdgeAsDefault &&\n isPointClose(cache.props.point, props.point, cache_threshold)\n ) {\n return cache.result\n }\n\n const anchorElementRect = anchorElem.getBoundingClientRect()\n const topLevelNodeKeys = getTopLevelNodeKeys(editor)\n\n const closestBlockElem: {\n blockElem: HTMLElement | null\n blockNode: LexicalNode | null\n distance: number\n foundAtIndex: number\n isFoundNodeEmptyParagraph: boolean\n } = {\n blockElem: null,\n blockNode: null,\n distance: Infinity,\n foundAtIndex: -1,\n isFoundNodeEmptyParagraph: false,\n }\n\n // Return null if matching block element is the first or last node\n editor.getEditorState().read(() => {\n if (useEdgeAsDefault) {\n const [firstNode, lastNode] = [\n editor.getElementByKey(topLevelNodeKeys[0]),\n editor.getElementByKey(topLevelNodeKeys[topLevelNodeKeys.length - 1]),\n ]\n\n const [firstNodeRect, lastNodeRect] = [\n getBoundingClientRectWithoutTransform(firstNode),\n getBoundingClientRectWithoutTransform(lastNode),\n ]\n\n if (firstNodeRect && lastNodeRect) {\n if (y < firstNodeRect.top) {\n closestBlockElem.blockElem = firstNode\n closestBlockElem.distance = firstNodeRect.top - y\n closestBlockElem.blockNode = $getNodeByKey(topLevelNodeKeys[0])\n closestBlockElem.foundAtIndex = 0\n } else if (y > lastNodeRect.bottom) {\n closestBlockElem.distance = y - lastNodeRect.bottom\n closestBlockElem.blockNode = $getNodeByKey(topLevelNodeKeys[topLevelNodeKeys.length - 1])\n closestBlockElem.blockElem = lastNode\n closestBlockElem.foundAtIndex = topLevelNodeKeys.length - 1\n }\n\n if (closestBlockElem?.blockElem) {\n return {\n blockElem: null,\n isFoundNodeEmptyParagraph: false,\n } as Output\n }\n }\n }\n\n // Find matching block element\n let index = startIndex\n let direction = Indeterminate\n\n while (index >= 0 && index < topLevelNodeKeys.length) {\n const key = topLevelNodeKeys[index]\n const elem = editor.getElementByKey(key)\n if (elem === null) {\n break\n }\n const point = new Point(x + horizontalOffset, y)\n //const domRect = Rect.fromDOM(elem)\n // Do not consider transform of blocks when calculating distance\n const domRect = Rect.fromDOMRect(getBoundingClientRectWithoutTransform(elem))\n\n const { marginBottom, marginTop } = getCollapsedMargins(elem)\n\n const rect = domRect.generateNewRect({\n bottom: domRect.bottom + marginBottom,\n left: anchorElementRect.left,\n right: anchorElementRect.right,\n top: domRect.top - marginTop,\n })\n\n const { distance, isOnBottomSide, isOnTopSide } = rect.distanceFromPoint(point)\n\n if (distance === 0) {\n closestBlockElem.blockElem = elem\n closestBlockElem.blockNode = $getNodeByKey(key)\n closestBlockElem.foundAtIndex = index\n closestBlockElem.distance = distance\n\n // Check if blockNode is an empty text node\n if (\n closestBlockElem.blockNode &&\n closestBlockElem.blockNode.getType() === 'paragraph' &&\n closestBlockElem.blockNode.getTextContent() === ''\n ) {\n if (!fuzzy && !props.returnEmptyParagraphs) {\n closestBlockElem.blockElem = null\n closestBlockElem.blockNode = null\n }\n\n closestBlockElem.isFoundNodeEmptyParagraph = true\n }\n break\n } else if (fuzzy) {\n if (distance < closestBlockElem.distance) {\n closestBlockElem.blockElem = elem\n closestBlockElem.blockNode = $getNodeByKey(key)\n closestBlockElem.distance = distance\n closestBlockElem.foundAtIndex = index\n }\n }\n\n if (direction === Indeterminate) {\n if (isOnTopSide) {\n direction = Upward\n } else if (isOnBottomSide) {\n direction = Downward\n } else {\n // stop search block element\n direction = Infinity\n }\n }\n\n index += direction\n }\n })\n\n // Store in cache before returning\n cache.props = props\n cache.result = {\n blockElem: closestBlockElem.blockElem,\n blockNode: closestBlockElem.blockNode,\n foundAtIndex: closestBlockElem.foundAtIndex,\n isFoundNodeEmptyParagraph: closestBlockElem.isFoundNodeEmptyParagraph,\n }\n\n return {\n blockElem: closestBlockElem.blockElem,\n blockNode: closestBlockElem.blockNode,\n foundAtIndex: closestBlockElem.foundAtIndex,\n isFoundNodeEmptyParagraph: closestBlockElem.isFoundNodeEmptyParagraph,\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"getNodeCloseToPoint.js","names":["$getNodeByKey","Point","Rect","getBoundingClientRectWithoutTransform","getCollapsedMargins","getTopLevelNodeKeys","Downward","Upward","Indeterminate","cache","props","result","isPointClose","previous","current","threshold","dx","x","dy","y","getNodeCloseToPoint","anchorElem","cache_threshold","editor","fuzzy","horizontalOffset","point","startIndex","useEdgeAsDefault","verbose","anchorElementRect","getBoundingClientRect","topLevelNodeKeys","closestBlockElem","blockElem","blockNode","distance","Infinity","foundAtIndex","isFoundNodeEmptyParagraph","getEditorState","read","firstNode","lastNode","getElementByKey","length","firstNodeRect","lastNodeRect","top","bottom","index","direction","key","elem","domRect","fromDOMRect","marginBottom","marginTop","rect","generateNewRect","left","right","isOnBottomSide","isOnTopSide","distanceFromPoint","getType","getTextContent","returnEmptyParagraphs"],"sources":["../../../../../src/lexical/plugins/handles/utils/getNodeCloseToPoint.ts"],"sourcesContent":["'use client'\nimport type { LexicalEditor, LexicalNode } from 'lexical'\n\nimport { $getNodeByKey } from 'lexical'\n\nimport { Point } from '../../../utils/point.js'\nimport { Rect } from '../../../utils/rect.js'\nimport { getBoundingClientRectWithoutTransform } from '../DraggableBlockPlugin/getBoundingRectWithoutTransform.js'\nimport { getCollapsedMargins } from '../utils/getCollapsedMargins.js'\nimport { getTopLevelNodeKeys } from '../utils/getTopLevelNodeKeys.js'\n\n// Directions\nconst Downward = 1\nconst Upward = -1\nconst Indeterminate = 0\n\ntype Props = {\n anchorElem: HTMLElement\n cache_threshold?: number\n editor: LexicalEditor\n /** fuzzy makes the search not exact. If no exact match found, find the closes node instead of returning null */\n fuzzy?: boolean\n horizontalOffset?: number\n point: Point\n /**\n * By default, empty paragraphs are not returned. Set this to true to return empty paragraphs. @default false\n */\n returnEmptyParagraphs?: boolean\n /**\n * The index to start searching from. It can be a considerable performance optimization to start searching from the index of the\n * previously found node, as the node is likely to be close to the next node.\n */\n startIndex?: number\n useEdgeAsDefault?: boolean\n verbose?: boolean\n}\n\ntype Output = {\n blockElem: HTMLElement | null\n blockNode: LexicalNode | null\n foundAtIndex: number\n isFoundNodeEmptyParagraph: boolean\n}\n\nconst cache = {\n props: null as null | Props,\n result: null as null | Output,\n}\n\nfunction isPointClose(previous: Point, current: Point, threshold: number = 20): boolean {\n const dx = previous.x - current.x\n const dy = previous.y - current.y\n return dx * dx + dy * dy <= threshold * threshold\n}\n\nexport function getNodeCloseToPoint(props: Props): Output {\n const {\n anchorElem,\n cache_threshold = 20,\n editor,\n fuzzy = false,\n horizontalOffset = 0,\n point: { x, y },\n startIndex = 0,\n useEdgeAsDefault = false,\n verbose = false,\n } = props\n\n // Use cache\n if (\n cache_threshold > 0 &&\n cache.props &&\n cache.result &&\n cache.props.fuzzy === props.fuzzy &&\n cache.props.horizontalOffset === props.horizontalOffset &&\n cache.props.useEdgeAsDefault === props.useEdgeAsDefault &&\n isPointClose(cache.props.point, props.point, cache_threshold)\n ) {\n return cache.result\n }\n\n const anchorElementRect = anchorElem.getBoundingClientRect()\n const topLevelNodeKeys = getTopLevelNodeKeys(editor)\n\n const closestBlockElem: {\n blockElem: HTMLElement | null\n blockNode: LexicalNode | null\n distance: number\n foundAtIndex: number\n isFoundNodeEmptyParagraph: boolean\n } = {\n blockElem: null,\n blockNode: null,\n distance: Infinity,\n foundAtIndex: -1,\n isFoundNodeEmptyParagraph: false,\n }\n\n // Return null if matching block element is the first or last node\n editor.getEditorState().read(() => {\n if (useEdgeAsDefault) {\n const [firstNode, lastNode] = [\n editor.getElementByKey(topLevelNodeKeys[0]),\n editor.getElementByKey(topLevelNodeKeys[topLevelNodeKeys.length - 1]),\n ]\n\n const [firstNodeRect, lastNodeRect] = [\n getBoundingClientRectWithoutTransform(firstNode),\n getBoundingClientRectWithoutTransform(lastNode),\n ]\n\n if (firstNodeRect && lastNodeRect) {\n if (y < firstNodeRect.top) {\n closestBlockElem.blockElem = firstNode\n closestBlockElem.distance = firstNodeRect.top - y\n closestBlockElem.blockNode = $getNodeByKey(topLevelNodeKeys[0])\n closestBlockElem.foundAtIndex = 0\n } else if (y > lastNodeRect.bottom) {\n closestBlockElem.distance = y - lastNodeRect.bottom\n closestBlockElem.blockNode = $getNodeByKey(topLevelNodeKeys[topLevelNodeKeys.length - 1])\n closestBlockElem.blockElem = lastNode\n closestBlockElem.foundAtIndex = topLevelNodeKeys.length - 1\n }\n\n if (closestBlockElem?.blockElem) {\n return {\n blockElem: null,\n isFoundNodeEmptyParagraph: false,\n } as Output\n }\n }\n }\n\n // Find matching block element\n let index = startIndex\n let direction = Indeterminate\n\n while (index >= 0 && index < topLevelNodeKeys.length) {\n const key = topLevelNodeKeys[index]\n const elem = editor.getElementByKey(key)\n if (elem === null) {\n break\n }\n const point = new Point(x + horizontalOffset, y)\n //const domRect = Rect.fromDOM(elem)\n // Do not consider transform of blocks when calculating distance\n const domRect = Rect.fromDOMRect(getBoundingClientRectWithoutTransform(elem))\n\n const { marginBottom, marginTop } = getCollapsedMargins(elem)\n\n const rect = domRect.generateNewRect({\n bottom: domRect.bottom + marginBottom,\n left: anchorElementRect.left,\n right: anchorElementRect.right,\n top: domRect.top - marginTop,\n })\n\n const { distance, isOnBottomSide, isOnTopSide } = rect.distanceFromPoint(point)\n\n if (distance === 0) {\n closestBlockElem.blockElem = elem\n closestBlockElem.blockNode = $getNodeByKey(key)\n closestBlockElem.foundAtIndex = index\n closestBlockElem.distance = distance\n\n // Check if blockNode is an empty text node\n if (\n closestBlockElem.blockNode &&\n closestBlockElem.blockNode.getType() === 'paragraph' &&\n closestBlockElem.blockNode.getTextContent() === ''\n ) {\n if (!fuzzy && !props.returnEmptyParagraphs) {\n closestBlockElem.blockElem = null\n closestBlockElem.blockNode = null\n }\n\n closestBlockElem.isFoundNodeEmptyParagraph = true\n }\n break\n } else if (fuzzy) {\n if (distance < closestBlockElem.distance) {\n closestBlockElem.blockElem = elem\n closestBlockElem.blockNode = $getNodeByKey(key)\n closestBlockElem.distance = distance\n closestBlockElem.foundAtIndex = index\n }\n }\n\n if (direction === Indeterminate) {\n if (isOnTopSide) {\n direction = Upward\n } else if (isOnBottomSide) {\n direction = Downward\n } else {\n // stop search block element\n direction = Infinity\n }\n }\n\n index += direction\n }\n })\n\n // Store in cache before returning\n cache.props = props\n cache.result = {\n blockElem: closestBlockElem.blockElem,\n blockNode: closestBlockElem.blockNode,\n foundAtIndex: closestBlockElem.foundAtIndex,\n isFoundNodeEmptyParagraph: closestBlockElem.isFoundNodeEmptyParagraph,\n }\n\n return {\n blockElem: closestBlockElem.blockElem,\n blockNode: closestBlockElem.blockNode,\n foundAtIndex: closestBlockElem.foundAtIndex,\n isFoundNodeEmptyParagraph: closestBlockElem.isFoundNodeEmptyParagraph,\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -32,8 +32,8 @@ export declare const NON_BREAKING_SPACE = "\u00A0";
32
32
  export declare const DOUBLE_LINE_BREAK = "\n\n";
33
33
  export declare const RTL_REGEX: RegExp;
34
34
  export declare const LTR_REGEX: RegExp;
35
- export declare const TEXT_TYPE_TO_FORMAT: Record<TextFormatType | string, number>;
36
- export declare const DETAIL_TYPE_TO_DETAIL: Record<TextDetailType | string, number>;
35
+ export declare const TEXT_TYPE_TO_FORMAT: Record<string | TextFormatType, number>;
36
+ export declare const DETAIL_TYPE_TO_DETAIL: Record<string | TextDetailType, number>;
37
37
  export declare const ELEMENT_TYPE_TO_FORMAT: Record<Exclude<ElementFormatType, ''>, number>;
38
38
  export declare const ELEMENT_FORMAT_TO_TYPE: Record<number, ElementFormatType>;
39
39
  export declare const TEXT_MODE_TO_TYPE: Record<TextModeType, 0 | 1 | 2>;
@@ -1 +1 @@
1
- {"version":3,"file":"nodeFormat.d.ts","sourceRoot":"","sources":["../../../src/lexical/utils/nodeFormat.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAC9E,MAAM,MAAM,cAAc,GAAG,eAAe,GAAG,YAAY,CAAA;AAG3D,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;CA+Bb,CAAA;AAEV,eAAO,MAAM,iBAAiB,QAQL,CAAA;AAGzB,eAAO,MAAM,kBAAkB,WAAW,CAAA;AAE1C,eAAO,MAAM,iBAAiB,SAAS,CAAA;AAYvC,eAAO,MAAM,SAAS,QAA8C,CAAA;AAEpE,eAAO,MAAM,SAAS,QAA8C,CAAA;AAEpE,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,cAAc,GAAG,MAAM,EAAE,MAAM,CASvE,CAAA;AAED,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,cAAc,GAAG,MAAM,EAAE,MAAM,CAGzE,CAAA;AAED,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,EAAE,MAAM,CAOjF,CAAA;AAED,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAOpE,CAAA;AAED,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAI7D,CAAA;AAED,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAI1D,CAAA"}
1
+ {"version":3,"file":"nodeFormat.d.ts","sourceRoot":"","sources":["../../../src/lexical/utils/nodeFormat.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAC9E,MAAM,MAAM,cAAc,GAAG,eAAe,GAAG,YAAY,CAAA;AAG3D,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;CA+Bb,CAAA;AAEV,eAAO,MAAM,iBAAiB,QAQL,CAAA;AAGzB,eAAO,MAAM,kBAAkB,WAAW,CAAA;AAE1C,eAAO,MAAM,iBAAiB,SAAS,CAAA;AAYvC,eAAO,MAAM,SAAS,QAA8C,CAAA;AAEpE,eAAO,MAAM,SAAS,QAA8C,CAAA;AAEpE,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,GAAG,cAAc,EAAE,MAAM,CASvE,CAAA;AAED,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,GAAG,cAAc,EAAE,MAAM,CAGzE,CAAA;AAED,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,EAAE,MAAM,CAOjF,CAAA;AAED,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAOpE,CAAA;AAED,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAI7D,CAAA;AAED,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAI1D,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"nodeFormat.js","names":["NodeFormat","DOM_ELEMENT_TYPE","DOM_TEXT_TYPE","NO_DIRTY_NODES","HAS_DIRTY_NODES","FULL_RECONCILE","IS_NORMAL","IS_TOKEN","IS_SEGMENTED","IS_INERT","IS_BOLD","IS_ITALIC","IS_STRIKETHROUGH","IS_UNDERLINE","IS_CODE","IS_SUBSCRIPT","IS_SUPERSCRIPT","IS_HIGHLIGHT","IS_DIRECTIONLESS","IS_UNMERGEABLE","IS_ALIGN_LEFT","IS_ALIGN_CENTER","IS_ALIGN_RIGHT","IS_ALIGN_JUSTIFY","IS_ALIGN_START","IS_ALIGN_END","IS_ALL_FORMATTING","NON_BREAKING_SPACE","DOUBLE_LINE_BREAK","RTL","LTR","RTL_REGEX","RegExp","LTR_REGEX","TEXT_TYPE_TO_FORMAT","bold","code","highlight","italic","strikethrough","subscript","superscript","underline","DETAIL_TYPE_TO_DETAIL","directionless","unmergeable","ELEMENT_TYPE_TO_FORMAT","center","end","justify","left","right","start","ELEMENT_FORMAT_TO_TYPE","TEXT_MODE_TO_TYPE","normal","segmented","token","TEXT_TYPE_TO_MODE"],"sources":["../../../src/lexical/utils/nodeFormat.ts"],"sourcesContent":["/* eslint-disable perfectionist/sort-objects */\n/* eslint-disable regexp/no-obscure-range */\n/* eslint-disable @typescript-eslint/no-redundant-type-constituents */\n/* eslint-disable regexp/no-misleading-unicode-character */\n//This copy-and-pasted from lexical here: https://github.com/facebook/lexical/blob/c2ceee223f46543d12c574e62155e619f9a18a5d/packages/lexical/src/LexicalConstants.ts\n\nimport type { ElementFormatType, TextFormatType, TextModeType } from 'lexical'\nexport type TextDetailType = 'directionless' | 'unmergable'\n\n// DOM\nexport const NodeFormat = {\n DOM_ELEMENT_TYPE: 1,\n DOM_TEXT_TYPE: 3,\n // Reconciling\n NO_DIRTY_NODES: 0,\n HAS_DIRTY_NODES: 1,\n FULL_RECONCILE: 2,\n // Text node modes\n IS_NORMAL: 0,\n IS_TOKEN: 1,\n IS_SEGMENTED: 2,\n IS_INERT: 3,\n // Text node formatting\n IS_BOLD: 1,\n IS_ITALIC: 1 << 1,\n IS_STRIKETHROUGH: 1 << 2,\n IS_UNDERLINE: 1 << 3,\n IS_CODE: 1 << 4,\n IS_SUBSCRIPT: 1 << 5,\n IS_SUPERSCRIPT: 1 << 6,\n IS_HIGHLIGHT: 1 << 7,\n // Text node details\n IS_DIRECTIONLESS: 1,\n IS_UNMERGEABLE: 1 << 1,\n // Element node formatting\n IS_ALIGN_LEFT: 1,\n IS_ALIGN_CENTER: 2,\n IS_ALIGN_RIGHT: 3,\n IS_ALIGN_JUSTIFY: 4,\n IS_ALIGN_START: 5,\n IS_ALIGN_END: 6,\n} as const\n\nexport const IS_ALL_FORMATTING =\n NodeFormat.IS_BOLD |\n NodeFormat.IS_ITALIC |\n NodeFormat.IS_STRIKETHROUGH |\n NodeFormat.IS_UNDERLINE |\n NodeFormat.IS_CODE |\n NodeFormat.IS_SUBSCRIPT |\n NodeFormat.IS_SUPERSCRIPT |\n NodeFormat.IS_HIGHLIGHT\n\n// Reconciliation\nexport const NON_BREAKING_SPACE = '\\u00A0'\n\nexport const DOUBLE_LINE_BREAK = '\\n\\n'\n\n// For FF, we need to use a non-breaking space, or it gets composition\n// in a stuck state.\n\nconst RTL = '\\u0591-\\u07FF\\uFB1D-\\uFDFD\\uFE70-\\uFEFC'\nconst LTR =\n 'A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6' +\n '\\u00F8-\\u02B8\\u0300-\\u0590\\u0800-\\u1FFF\\u200E\\u2C00-\\uFB1C' +\n '\\uFE00-\\uFE6F\\uFEFD-\\uFFFF'\n\n// eslint-disable-next-line no-misleading-character-class\nexport const RTL_REGEX = new RegExp('^[^' + LTR + ']*[' + RTL + ']')\n// eslint-disable-next-line no-misleading-character-class\nexport const LTR_REGEX = new RegExp('^[^' + RTL + ']*[' + LTR + ']')\n\nexport const TEXT_TYPE_TO_FORMAT: Record<TextFormatType | string, number> = {\n bold: NodeFormat.IS_BOLD,\n code: NodeFormat.IS_CODE,\n highlight: NodeFormat.IS_HIGHLIGHT,\n italic: NodeFormat.IS_ITALIC,\n strikethrough: NodeFormat.IS_STRIKETHROUGH,\n subscript: NodeFormat.IS_SUBSCRIPT,\n superscript: NodeFormat.IS_SUPERSCRIPT,\n underline: NodeFormat.IS_UNDERLINE,\n}\n\nexport const DETAIL_TYPE_TO_DETAIL: Record<TextDetailType | string, number> = {\n directionless: NodeFormat.IS_DIRECTIONLESS,\n unmergeable: NodeFormat.IS_UNMERGEABLE,\n}\n\nexport const ELEMENT_TYPE_TO_FORMAT: Record<Exclude<ElementFormatType, ''>, number> = {\n center: NodeFormat.IS_ALIGN_CENTER,\n end: NodeFormat.IS_ALIGN_END,\n justify: NodeFormat.IS_ALIGN_JUSTIFY,\n left: NodeFormat.IS_ALIGN_LEFT,\n right: NodeFormat.IS_ALIGN_RIGHT,\n start: NodeFormat.IS_ALIGN_START,\n}\n\nexport const ELEMENT_FORMAT_TO_TYPE: Record<number, ElementFormatType> = {\n [NodeFormat.IS_ALIGN_CENTER]: 'center',\n [NodeFormat.IS_ALIGN_END]: 'end',\n [NodeFormat.IS_ALIGN_JUSTIFY]: 'justify',\n [NodeFormat.IS_ALIGN_LEFT]: 'left',\n [NodeFormat.IS_ALIGN_RIGHT]: 'right',\n [NodeFormat.IS_ALIGN_START]: 'start',\n}\n\nexport const TEXT_MODE_TO_TYPE: Record<TextModeType, 0 | 1 | 2> = {\n normal: NodeFormat.IS_NORMAL,\n segmented: NodeFormat.IS_SEGMENTED,\n token: NodeFormat.IS_TOKEN,\n}\n\nexport const TEXT_TYPE_TO_MODE: Record<number, TextModeType> = {\n [NodeFormat.IS_NORMAL]: 'normal',\n [NodeFormat.IS_SEGMENTED]: 'segmented',\n [NodeFormat.IS_TOKEN]: 'token',\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"nodeFormat.js","names":["NodeFormat","DOM_ELEMENT_TYPE","DOM_TEXT_TYPE","NO_DIRTY_NODES","HAS_DIRTY_NODES","FULL_RECONCILE","IS_NORMAL","IS_TOKEN","IS_SEGMENTED","IS_INERT","IS_BOLD","IS_ITALIC","IS_STRIKETHROUGH","IS_UNDERLINE","IS_CODE","IS_SUBSCRIPT","IS_SUPERSCRIPT","IS_HIGHLIGHT","IS_DIRECTIONLESS","IS_UNMERGEABLE","IS_ALIGN_LEFT","IS_ALIGN_CENTER","IS_ALIGN_RIGHT","IS_ALIGN_JUSTIFY","IS_ALIGN_START","IS_ALIGN_END","IS_ALL_FORMATTING","NON_BREAKING_SPACE","DOUBLE_LINE_BREAK","RTL","LTR","RTL_REGEX","RegExp","LTR_REGEX","TEXT_TYPE_TO_FORMAT","bold","code","highlight","italic","strikethrough","subscript","superscript","underline","DETAIL_TYPE_TO_DETAIL","directionless","unmergeable","ELEMENT_TYPE_TO_FORMAT","center","end","justify","left","right","start","ELEMENT_FORMAT_TO_TYPE","TEXT_MODE_TO_TYPE","normal","segmented","token","TEXT_TYPE_TO_MODE"],"sources":["../../../src/lexical/utils/nodeFormat.ts"],"sourcesContent":["/* eslint-disable perfectionist/sort-objects */\n/* eslint-disable regexp/no-obscure-range */\n/* eslint-disable @typescript-eslint/no-redundant-type-constituents */\n/* eslint-disable regexp/no-misleading-unicode-character */\n//This copy-and-pasted from lexical here: https://github.com/facebook/lexical/blob/c2ceee223f46543d12c574e62155e619f9a18a5d/packages/lexical/src/LexicalConstants.ts\n\nimport type { ElementFormatType, TextFormatType, TextModeType } from 'lexical'\nexport type TextDetailType = 'directionless' | 'unmergable'\n\n// DOM\nexport const NodeFormat = {\n DOM_ELEMENT_TYPE: 1,\n DOM_TEXT_TYPE: 3,\n // Reconciling\n NO_DIRTY_NODES: 0,\n HAS_DIRTY_NODES: 1,\n FULL_RECONCILE: 2,\n // Text node modes\n IS_NORMAL: 0,\n IS_TOKEN: 1,\n IS_SEGMENTED: 2,\n IS_INERT: 3,\n // Text node formatting\n IS_BOLD: 1,\n IS_ITALIC: 1 << 1,\n IS_STRIKETHROUGH: 1 << 2,\n IS_UNDERLINE: 1 << 3,\n IS_CODE: 1 << 4,\n IS_SUBSCRIPT: 1 << 5,\n IS_SUPERSCRIPT: 1 << 6,\n IS_HIGHLIGHT: 1 << 7,\n // Text node details\n IS_DIRECTIONLESS: 1,\n IS_UNMERGEABLE: 1 << 1,\n // Element node formatting\n IS_ALIGN_LEFT: 1,\n IS_ALIGN_CENTER: 2,\n IS_ALIGN_RIGHT: 3,\n IS_ALIGN_JUSTIFY: 4,\n IS_ALIGN_START: 5,\n IS_ALIGN_END: 6,\n} as const\n\nexport const IS_ALL_FORMATTING =\n NodeFormat.IS_BOLD |\n NodeFormat.IS_ITALIC |\n NodeFormat.IS_STRIKETHROUGH |\n NodeFormat.IS_UNDERLINE |\n NodeFormat.IS_CODE |\n NodeFormat.IS_SUBSCRIPT |\n NodeFormat.IS_SUPERSCRIPT |\n NodeFormat.IS_HIGHLIGHT\n\n// Reconciliation\nexport const NON_BREAKING_SPACE = '\\u00A0'\n\nexport const DOUBLE_LINE_BREAK = '\\n\\n'\n\n// For FF, we need to use a non-breaking space, or it gets composition\n// in a stuck state.\n\nconst RTL = '\\u0591-\\u07FF\\uFB1D-\\uFDFD\\uFE70-\\uFEFC'\nconst LTR =\n 'A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6' +\n '\\u00F8-\\u02B8\\u0300-\\u0590\\u0800-\\u1FFF\\u200E\\u2C00-\\uFB1C' +\n '\\uFE00-\\uFE6F\\uFEFD-\\uFFFF'\n\n// eslint-disable-next-line no-misleading-character-class\nexport const RTL_REGEX = new RegExp('^[^' + LTR + ']*[' + RTL + ']')\n// eslint-disable-next-line no-misleading-character-class\nexport const LTR_REGEX = new RegExp('^[^' + RTL + ']*[' + LTR + ']')\n\nexport const TEXT_TYPE_TO_FORMAT: Record<string | TextFormatType, number> = {\n bold: NodeFormat.IS_BOLD,\n code: NodeFormat.IS_CODE,\n highlight: NodeFormat.IS_HIGHLIGHT,\n italic: NodeFormat.IS_ITALIC,\n strikethrough: NodeFormat.IS_STRIKETHROUGH,\n subscript: NodeFormat.IS_SUBSCRIPT,\n superscript: NodeFormat.IS_SUPERSCRIPT,\n underline: NodeFormat.IS_UNDERLINE,\n}\n\nexport const DETAIL_TYPE_TO_DETAIL: Record<string | TextDetailType, number> = {\n directionless: NodeFormat.IS_DIRECTIONLESS,\n unmergeable: NodeFormat.IS_UNMERGEABLE,\n}\n\nexport const ELEMENT_TYPE_TO_FORMAT: Record<Exclude<ElementFormatType, ''>, number> = {\n center: NodeFormat.IS_ALIGN_CENTER,\n end: NodeFormat.IS_ALIGN_END,\n justify: NodeFormat.IS_ALIGN_JUSTIFY,\n left: NodeFormat.IS_ALIGN_LEFT,\n right: NodeFormat.IS_ALIGN_RIGHT,\n start: NodeFormat.IS_ALIGN_START,\n}\n\nexport const ELEMENT_FORMAT_TO_TYPE: Record<number, ElementFormatType> = {\n [NodeFormat.IS_ALIGN_CENTER]: 'center',\n [NodeFormat.IS_ALIGN_END]: 'end',\n [NodeFormat.IS_ALIGN_JUSTIFY]: 'justify',\n [NodeFormat.IS_ALIGN_LEFT]: 'left',\n [NodeFormat.IS_ALIGN_RIGHT]: 'right',\n [NodeFormat.IS_ALIGN_START]: 'start',\n}\n\nexport const TEXT_MODE_TO_TYPE: Record<TextModeType, 0 | 1 | 2> = {\n normal: NodeFormat.IS_NORMAL,\n segmented: NodeFormat.IS_SEGMENTED,\n token: NodeFormat.IS_TOKEN,\n}\n\nexport const TEXT_TYPE_TO_MODE: Record<number, TextModeType> = {\n [NodeFormat.IS_NORMAL]: 'normal',\n [NodeFormat.IS_SEGMENTED]: 'segmented',\n [NodeFormat.IS_TOKEN]: 'token',\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"rect.d.ts","sourceRoot":"","sources":["../../../src/lexical/utils/rect.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,KAAK,EAAW,MAAM,YAAY,CAAA;AAEhD,UAAU,mBAAmB;IAC3B,MAAM,EAAE;QACN,cAAc,EAAE,OAAO,CAAA;QACvB,YAAY,EAAE,OAAO,CAAA;QACrB,aAAa,EAAE,OAAO,CAAA;QACtB,WAAW,EAAE,OAAO,CAAA;KACrB,CAAA;IACD,MAAM,EAAE,OAAO,CAAA;CAChB;AAED,qBAAa,IAAI;IACf,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAEhC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAE9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAE/B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAQ;gBAEjB,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAWpE,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI;IAKtC,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAK1C,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/E,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/E,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,GAAG,IAAI;IAMpD,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,GAAG,mBAAmB;IAE9C,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,IAAI,GAAG,OAAO;IAqCrD,iBAAiB,CAAC,KAAK,EAAE,KAAK,GAAG;QACtC,QAAQ,EAAE,MAAM,CAAA;QAChB,cAAc,EAAE,OAAO,CAAA;QACvB,YAAY,EAAE,OAAO,CAAA;QACrB,aAAa,EAAE,OAAO,CAAA;QACtB,WAAW,EAAE,OAAO,CAAA;KACrB;IA2CM,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,IAAI,GAAG,OAAO;IAMnD,eAAe,CAAC,EACrB,MAAoB,EACpB,IAAgB,EAChB,KAAkB,EAClB,GAAc,GACf;;;;;KAAA,GAAG,IAAI;IAID,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO;IAU1C,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,GAAG,IAAI,MAAM,CAEhB;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;CACF"}
1
+ {"version":3,"file":"rect.d.ts","sourceRoot":"","sources":["../../../src/lexical/utils/rect.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,KAAK,KAAK,EAAE,MAAM,YAAY,CAAA;AAEhD,UAAU,mBAAmB;IAC3B,MAAM,EAAE;QACN,cAAc,EAAE,OAAO,CAAA;QACvB,YAAY,EAAE,OAAO,CAAA;QACrB,aAAa,EAAE,OAAO,CAAA;QACtB,WAAW,EAAE,OAAO,CAAA;KACrB,CAAA;IACD,MAAM,EAAE,OAAO,CAAA;CAChB;AAED,qBAAa,IAAI;IACf,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAEhC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAE9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAE/B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAQ;gBAEjB,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAWpE,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI;IAKtC,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAK1C,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/E,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/E,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,GAAG,IAAI;IAMpD,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,GAAG,mBAAmB;IAE9C,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,IAAI,GAAG,OAAO;IAqCrD,iBAAiB,CAAC,KAAK,EAAE,KAAK,GAAG;QACtC,QAAQ,EAAE,MAAM,CAAA;QAChB,cAAc,EAAE,OAAO,CAAA;QACvB,YAAY,EAAE,OAAO,CAAA;QACrB,aAAa,EAAE,OAAO,CAAA;QACtB,WAAW,EAAE,OAAO,CAAA;KACrB;IA2CM,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,IAAI,GAAG,OAAO;IAMnD,eAAe,CAAC,EACrB,MAAoB,EACpB,IAAgB,EAChB,KAAkB,EAClB,GAAc,GACf;;;;;KAAA,GAAG,IAAI;IAID,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO;IAU1C,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,GAAG,IAAI,MAAM,CAEhB;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"rect.js","names":["isPoint","Rect","_bottom","_left","_right","_top","constructor","left","top","right","bottom","physicTop","physicBottom","physicLeft","physicRight","fromDOM","dom","height","width","getBoundingClientRect","fromLWTH","fromDOMRect","domRect","fromLTRB","fromPoints","startPoint","endPoint","x","y","contains","target","isOnTopSide","isOnBottomSide","isOnLeftSide","isOnRightSide","result","reason","distanceFromPoint","point","containsResult","distance","dx","dy","Math","sqrt","equals","generateNewRect","intersectsWith","rect","h1","x1","y1","w1","h2","x2","y2","w2","maxX","maxY","minX","minY","abs"],"sources":["../../../src/lexical/utils/rect.ts"],"sourcesContent":["'use client'\nimport { type Point, isPoint } from './point.js'\n\ninterface ContainsPointReturn {\n reason: {\n isOnBottomSide: boolean\n isOnLeftSide: boolean\n isOnRightSide: boolean\n isOnTopSide: boolean\n }\n result: boolean\n}\n\nexport class Rect {\n private readonly _bottom: number\n\n private readonly _left: number\n\n private readonly _right: number\n\n private readonly _top: number\n\n constructor(left: number, top: number, right: number, bottom: number) {\n const [physicTop, physicBottom] = top <= bottom ? [top, bottom] : [bottom, top]\n\n const [physicLeft, physicRight] = left <= right ? [left, right] : [right, left]\n\n this._top = physicTop\n this._right = physicRight\n this._left = physicLeft\n this._bottom = physicBottom\n }\n\n static fromDOM(dom: HTMLElement): Rect {\n const { height, left, top, width } = dom.getBoundingClientRect()\n return Rect.fromLWTH(left, width, top, height)\n }\n\n static fromDOMRect(domRect: DOMRect): Rect {\n const { height, left, top, width } = domRect\n return Rect.fromLWTH(left, width, top, height)\n }\n\n static fromLTRB(left: number, top: number, right: number, bottom: number): Rect {\n return new Rect(left, top, right, bottom)\n }\n\n static fromLWTH(left: number, width: number, top: number, height: number): Rect {\n return new Rect(left, top, left + width, top + height)\n }\n\n static fromPoints(startPoint: Point, endPoint: Point): Rect {\n const { x: left, y: top } = startPoint\n const { x: right, y: bottom } = endPoint\n return Rect.fromLTRB(left, top, right, bottom)\n }\n\n public contains({ x, y }: Point): ContainsPointReturn\n\n public contains({ bottom, left, right, top }: Rect): boolean\n\n public contains(target: Point | Rect): ContainsPointReturn | boolean {\n if (isPoint(target)) {\n const { x, y } = target\n\n const isOnTopSide = y < this._top\n const isOnBottomSide = y > this._bottom\n const isOnLeftSide = x < this._left\n const isOnRightSide = x > this._right\n\n const result = !isOnTopSide && !isOnBottomSide && !isOnLeftSide && !isOnRightSide\n\n return {\n reason: {\n isOnBottomSide,\n isOnLeftSide,\n isOnRightSide,\n isOnTopSide,\n },\n result,\n }\n }\n const { bottom, left, right, top } = target\n\n return (\n top >= this._top &&\n top <= this._bottom &&\n bottom >= this._top &&\n bottom <= this._bottom &&\n left >= this._left &&\n left <= this._right &&\n right >= this._left &&\n right <= this._right\n )\n }\n\n public distanceFromPoint(point: Point): {\n distance: number\n isOnBottomSide: boolean\n isOnLeftSide: boolean\n isOnRightSide: boolean\n isOnTopSide: boolean\n } {\n const containsResult = this.contains(point)\n if (containsResult.result) {\n return {\n distance: 0,\n isOnBottomSide: containsResult.reason.isOnBottomSide,\n isOnLeftSide: containsResult.reason.isOnLeftSide,\n isOnRightSide: containsResult.reason.isOnRightSide,\n isOnTopSide: containsResult.reason.isOnTopSide,\n }\n }\n\n let dx = 0 // Horizontal distance to the closest edge\n let dy = 0 // Vertical distance to the closest edge\n\n // If the point is to the left of the rectangle\n if (point.x < this._left) {\n dx = this._left - point.x\n }\n // If the point is to the right of the rectangle\n else if (point.x > this._right) {\n dx = point.x - this._right\n }\n\n // If the point is above the rectangle\n if (point.y < this._top) {\n dy = this._top - point.y\n }\n // If the point is below the rectangle\n else if (point.y > this._bottom) {\n dy = point.y - this._bottom\n }\n\n // Use the Pythagorean theorem to calculate the distance\n return {\n distance: Math.sqrt(dx * dx + dy * dy),\n isOnBottomSide: point.y > this._bottom,\n isOnLeftSide: point.x < this._left,\n isOnRightSide: point.x > this._right,\n isOnTopSide: point.y < this._top,\n }\n }\n\n public equals({ bottom, left, right, top }: Rect): boolean {\n return (\n top === this._top && bottom === this._bottom && left === this._left && right === this._right\n )\n }\n\n public generateNewRect({\n bottom = this.bottom,\n left = this.left,\n right = this.right,\n top = this.top,\n }): Rect {\n return new Rect(left, top, right, bottom)\n }\n\n public intersectsWith(rect: Rect): boolean {\n const { height: h1, left: x1, top: y1, width: w1 } = rect\n const { height: h2, left: x2, top: y2, width: w2 } = this\n const maxX = x1 + w1 >= x2 + w2 ? x1 + w1 : x2 + w2\n const maxY = y1 + h1 >= y2 + h2 ? y1 + h1 : y2 + h2\n const minX = x1 <= x2 ? x1 : x2\n const minY = y1 <= y2 ? y1 : y2\n return maxX - minX <= w1 + w2 && maxY - minY <= h1 + h2\n }\n\n get bottom(): number {\n return this._bottom\n }\n\n get height(): number {\n return Math.abs(this._bottom - this._top)\n }\n\n get left(): number {\n return this._left\n }\n\n get right(): number {\n return this._right\n }\n\n get top(): number {\n return this._top\n }\n\n get width(): number {\n return Math.abs(this._left - this._right)\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"rect.js","names":["isPoint","Rect","_bottom","_left","_right","_top","constructor","left","top","right","bottom","physicTop","physicBottom","physicLeft","physicRight","fromDOM","dom","height","width","getBoundingClientRect","fromLWTH","fromDOMRect","domRect","fromLTRB","fromPoints","startPoint","endPoint","x","y","contains","target","isOnTopSide","isOnBottomSide","isOnLeftSide","isOnRightSide","result","reason","distanceFromPoint","point","containsResult","distance","dx","dy","Math","sqrt","equals","generateNewRect","intersectsWith","rect","h1","x1","y1","w1","h2","x2","y2","w2","maxX","maxY","minX","minY","abs"],"sources":["../../../src/lexical/utils/rect.ts"],"sourcesContent":["'use client'\nimport { isPoint, type Point } from './point.js'\n\ninterface ContainsPointReturn {\n reason: {\n isOnBottomSide: boolean\n isOnLeftSide: boolean\n isOnRightSide: boolean\n isOnTopSide: boolean\n }\n result: boolean\n}\n\nexport class Rect {\n private readonly _bottom: number\n\n private readonly _left: number\n\n private readonly _right: number\n\n private readonly _top: number\n\n constructor(left: number, top: number, right: number, bottom: number) {\n const [physicTop, physicBottom] = top <= bottom ? [top, bottom] : [bottom, top]\n\n const [physicLeft, physicRight] = left <= right ? [left, right] : [right, left]\n\n this._top = physicTop\n this._right = physicRight\n this._left = physicLeft\n this._bottom = physicBottom\n }\n\n static fromDOM(dom: HTMLElement): Rect {\n const { height, left, top, width } = dom.getBoundingClientRect()\n return Rect.fromLWTH(left, width, top, height)\n }\n\n static fromDOMRect(domRect: DOMRect): Rect {\n const { height, left, top, width } = domRect\n return Rect.fromLWTH(left, width, top, height)\n }\n\n static fromLTRB(left: number, top: number, right: number, bottom: number): Rect {\n return new Rect(left, top, right, bottom)\n }\n\n static fromLWTH(left: number, width: number, top: number, height: number): Rect {\n return new Rect(left, top, left + width, top + height)\n }\n\n static fromPoints(startPoint: Point, endPoint: Point): Rect {\n const { x: left, y: top } = startPoint\n const { x: right, y: bottom } = endPoint\n return Rect.fromLTRB(left, top, right, bottom)\n }\n\n public contains({ x, y }: Point): ContainsPointReturn\n\n public contains({ bottom, left, right, top }: Rect): boolean\n\n public contains(target: Point | Rect): boolean | ContainsPointReturn {\n if (isPoint(target)) {\n const { x, y } = target\n\n const isOnTopSide = y < this._top\n const isOnBottomSide = y > this._bottom\n const isOnLeftSide = x < this._left\n const isOnRightSide = x > this._right\n\n const result = !isOnTopSide && !isOnBottomSide && !isOnLeftSide && !isOnRightSide\n\n return {\n reason: {\n isOnBottomSide,\n isOnLeftSide,\n isOnRightSide,\n isOnTopSide,\n },\n result,\n }\n }\n const { bottom, left, right, top } = target\n\n return (\n top >= this._top &&\n top <= this._bottom &&\n bottom >= this._top &&\n bottom <= this._bottom &&\n left >= this._left &&\n left <= this._right &&\n right >= this._left &&\n right <= this._right\n )\n }\n\n public distanceFromPoint(point: Point): {\n distance: number\n isOnBottomSide: boolean\n isOnLeftSide: boolean\n isOnRightSide: boolean\n isOnTopSide: boolean\n } {\n const containsResult = this.contains(point)\n if (containsResult.result) {\n return {\n distance: 0,\n isOnBottomSide: containsResult.reason.isOnBottomSide,\n isOnLeftSide: containsResult.reason.isOnLeftSide,\n isOnRightSide: containsResult.reason.isOnRightSide,\n isOnTopSide: containsResult.reason.isOnTopSide,\n }\n }\n\n let dx = 0 // Horizontal distance to the closest edge\n let dy = 0 // Vertical distance to the closest edge\n\n // If the point is to the left of the rectangle\n if (point.x < this._left) {\n dx = this._left - point.x\n }\n // If the point is to the right of the rectangle\n else if (point.x > this._right) {\n dx = point.x - this._right\n }\n\n // If the point is above the rectangle\n if (point.y < this._top) {\n dy = this._top - point.y\n }\n // If the point is below the rectangle\n else if (point.y > this._bottom) {\n dy = point.y - this._bottom\n }\n\n // Use the Pythagorean theorem to calculate the distance\n return {\n distance: Math.sqrt(dx * dx + dy * dy),\n isOnBottomSide: point.y > this._bottom,\n isOnLeftSide: point.x < this._left,\n isOnRightSide: point.x > this._right,\n isOnTopSide: point.y < this._top,\n }\n }\n\n public equals({ bottom, left, right, top }: Rect): boolean {\n return (\n top === this._top && bottom === this._bottom && left === this._left && right === this._right\n )\n }\n\n public generateNewRect({\n bottom = this.bottom,\n left = this.left,\n right = this.right,\n top = this.top,\n }): Rect {\n return new Rect(left, top, right, bottom)\n }\n\n public intersectsWith(rect: Rect): boolean {\n const { height: h1, left: x1, top: y1, width: w1 } = rect\n const { height: h2, left: x2, top: y2, width: w2 } = this\n const maxX = x1 + w1 >= x2 + w2 ? x1 + w1 : x2 + w2\n const maxY = y1 + h1 >= y2 + h2 ? y1 + h1 : y2 + h2\n const minX = x1 <= x2 ? x1 : x2\n const minY = y1 <= y2 ? y1 : y2\n return maxX - minX <= w1 + w2 && maxY - minY <= h1 + h2\n }\n\n get bottom(): number {\n return this._bottom\n }\n\n get height(): number {\n return Math.abs(this._bottom - this._top)\n }\n\n get left(): number {\n return this._left\n }\n\n get right(): number {\n return this._right\n }\n\n get top(): number {\n return this._top\n }\n\n get width(): number {\n return Math.abs(this._left - this._right)\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"DrawerContent.js","names":["c","_c","Form","FormSubmit","RenderFields","useConfig","useDocumentInfo","useFieldProps","useTranslation","getFormState","React","useCallback","useEffect","useState","v4","uuid","useEditorConfigContext","DrawerContent","t0","$","data","featureKey","fieldMapOverride","handleDrawerSubmit","schemaFieldsPathOverride","schemaPathSuffix","t","id","schemaPath","config","initialState","setInitialState","field","t1","richTextComponentMap","componentMapRenderedFieldsPath","schemaFieldsPath","t2","get","fields","t3","awaitInitialState","state","apiRoute","routes","api","body","operation","serverURL","t4","t5","t6","formState","prevFormState","onChange","t7","Array","isArray","t8","_jsxs","beforeSubmit","disableValidationOnSubmit","onSubmit","children","_jsx","forceRender","path","readOnly"],"sources":["../../../src/utilities/fieldsDrawer/DrawerContent.tsx"],"sourcesContent":["'use client'\nimport type { FormProps } from '@payloadcms/ui'\nimport type { ClientField, FormState } from 'payload'\n\nimport {\n Form,\n FormSubmit,\n RenderFields,\n useConfig,\n useDocumentInfo,\n useFieldProps,\n useTranslation,\n} from '@payloadcms/ui'\nimport { getFormState } from '@payloadcms/ui/shared'\nimport React, { useCallback, useEffect, useState } from 'react'\nimport { v4 as uuid } from 'uuid'\n\nimport type { FieldsDrawerProps } from './Drawer.js'\n\nimport { useEditorConfigContext } from '../../lexical/config/client/EditorConfigProvider.js'\n\nexport const DrawerContent: React.FC<Omit<FieldsDrawerProps, 'drawerSlug' | 'drawerTitle'>> = ({\n data,\n featureKey,\n fieldMapOverride,\n handleDrawerSubmit,\n schemaFieldsPathOverride,\n schemaPathSuffix,\n}) => {\n const { t } = useTranslation()\n const { id } = useDocumentInfo()\n const { schemaPath } = useFieldProps()\n const { config } = useConfig()\n const [initialState, setInitialState] = useState<FormState | false>(false)\n const {\n field: { richTextComponentMap },\n } = useEditorConfigContext()\n\n const componentMapRenderedFieldsPath = `lexical_internal_feature.${featureKey}.fields${schemaPathSuffix ? `.${schemaPathSuffix}` : ''}`\n const schemaFieldsPath =\n schemaFieldsPathOverride ??\n `${schemaPath}.lexical_internal_feature.${featureKey}${schemaPathSuffix ? `.${schemaPathSuffix}` : ''}`\n\n const fields: any =\n fieldMapOverride ?? (richTextComponentMap.get(componentMapRenderedFieldsPath) as ClientField[]) // Field Schema\n\n useEffect(() => {\n const awaitInitialState = async () => {\n const state = await getFormState({\n apiRoute: config.routes.api,\n body: {\n id,\n data: data ?? {},\n operation: 'update',\n schemaPath: schemaFieldsPath,\n },\n serverURL: config.serverURL,\n }) // Form State\n\n setInitialState(state)\n }\n\n void awaitInitialState()\n }, [config.routes.api, config.serverURL, schemaFieldsPath, id, data])\n\n const onChange: FormProps['onChange'][0] = useCallback(\n async ({ formState: prevFormState }) => {\n return await getFormState({\n apiRoute: config.routes.api,\n body: {\n id,\n formState: prevFormState,\n operation: 'update',\n schemaPath: schemaFieldsPath,\n },\n serverURL: config.serverURL,\n })\n },\n\n [config.routes.api, config.serverURL, schemaFieldsPath, id],\n )\n\n if (initialState === false) {\n return null\n }\n\n return (\n <Form\n beforeSubmit={[onChange]}\n disableValidationOnSubmit\n fields={Array.isArray(fields) ? fields : []}\n initialState={initialState}\n onChange={[onChange]}\n onSubmit={handleDrawerSubmit}\n uuid={uuid()}\n >\n <RenderFields\n fields={Array.isArray(fields) ? fields : []}\n forceRender\n path=\"\" // See Blocks feature path for details as for why this is empty\n readOnly={false}\n schemaPath={schemaFieldsPath}\n />\n\n <FormSubmit>{t('fields:saveChanges')}</FormSubmit>\n </Form>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"DrawerContent.js","names":["c","_c","Form","FormSubmit","RenderFields","useConfig","useDocumentInfo","useFieldProps","useTranslation","getFormState","React","useCallback","useEffect","useState","v4","uuid","useEditorConfigContext","DrawerContent","t0","$","data","featureKey","fieldMapOverride","handleDrawerSubmit","schemaFieldsPathOverride","schemaPathSuffix","t","id","schemaPath","config","initialState","setInitialState","field","t1","richTextComponentMap","componentMapRenderedFieldsPath","schemaFieldsPath","t2","get","fields","t3","awaitInitialState","state","apiRoute","routes","api","body","operation","serverURL","t4","t5","t6","formState","prevFormState","onChange","t7","Array","isArray","t8","_jsxs","beforeSubmit","disableValidationOnSubmit","onSubmit","children","_jsx","forceRender","path","readOnly"],"sources":["../../../src/utilities/fieldsDrawer/DrawerContent.tsx"],"sourcesContent":["'use client'\nimport type { FormProps } from '@payloadcms/ui'\nimport type { ClientField, FormState } from 'payload'\n\nimport {\n Form,\n FormSubmit,\n RenderFields,\n useConfig,\n useDocumentInfo,\n useFieldProps,\n useTranslation,\n} from '@payloadcms/ui'\nimport { getFormState } from '@payloadcms/ui/shared'\nimport React, { useCallback, useEffect, useState } from 'react'\nimport { v4 as uuid } from 'uuid'\n\nimport type { FieldsDrawerProps } from './Drawer.js'\n\nimport { useEditorConfigContext } from '../../lexical/config/client/EditorConfigProvider.js'\n\nexport const DrawerContent: React.FC<Omit<FieldsDrawerProps, 'drawerSlug' | 'drawerTitle'>> = ({\n data,\n featureKey,\n fieldMapOverride,\n handleDrawerSubmit,\n schemaFieldsPathOverride,\n schemaPathSuffix,\n}) => {\n const { t } = useTranslation()\n const { id } = useDocumentInfo()\n const { schemaPath } = useFieldProps()\n const { config } = useConfig()\n const [initialState, setInitialState] = useState<false | FormState>(false)\n const {\n field: { richTextComponentMap },\n } = useEditorConfigContext()\n\n const componentMapRenderedFieldsPath = `lexical_internal_feature.${featureKey}.fields${schemaPathSuffix ? `.${schemaPathSuffix}` : ''}`\n const schemaFieldsPath =\n schemaFieldsPathOverride ??\n `${schemaPath}.lexical_internal_feature.${featureKey}${schemaPathSuffix ? `.${schemaPathSuffix}` : ''}`\n\n const fields: any =\n fieldMapOverride ?? (richTextComponentMap.get(componentMapRenderedFieldsPath) as ClientField[]) // Field Schema\n\n useEffect(() => {\n const awaitInitialState = async () => {\n const state = await getFormState({\n apiRoute: config.routes.api,\n body: {\n id,\n data: data ?? {},\n operation: 'update',\n schemaPath: schemaFieldsPath,\n },\n serverURL: config.serverURL,\n }) // Form State\n\n setInitialState(state)\n }\n\n void awaitInitialState()\n }, [config.routes.api, config.serverURL, schemaFieldsPath, id, data])\n\n const onChange: FormProps['onChange'][0] = useCallback(\n async ({ formState: prevFormState }) => {\n return await getFormState({\n apiRoute: config.routes.api,\n body: {\n id,\n formState: prevFormState,\n operation: 'update',\n schemaPath: schemaFieldsPath,\n },\n serverURL: config.serverURL,\n })\n },\n\n [config.routes.api, config.serverURL, schemaFieldsPath, id],\n )\n\n if (initialState === false) {\n return null\n }\n\n return (\n <Form\n beforeSubmit={[onChange]}\n disableValidationOnSubmit\n fields={Array.isArray(fields) ? fields : []}\n initialState={initialState}\n onChange={[onChange]}\n onSubmit={handleDrawerSubmit}\n uuid={uuid()}\n >\n <RenderFields\n fields={Array.isArray(fields) ? fields : []}\n forceRender\n path=\"\" // See Blocks feature path for details as for why this is empty\n readOnly={false}\n schemaPath={schemaFieldsPath}\n />\n\n <FormSubmit>{t('fields:saveChanges')}</FormSubmit>\n </Form>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -36,8 +36,8 @@ export const richTextValidateHOC = ({
36
36
  const rootNodes = value?.root?.children;
37
37
  if (rootNodes && Array.isArray(rootNodes) && rootNodes?.length) {
38
38
  return await validateNodes({
39
- nodeValidations: editorConfig.features.validations,
40
39
  nodes: rootNodes,
40
+ nodeValidations: editorConfig.features.validations,
41
41
  validation: {
42
42
  options,
43
43
  value
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["validateNodes","richTextValidateHOC","editorConfig","richTextValidate","value","options","req","t","required","hasChildren","root","children","length","hasOnlyEmptyParagraph","type","paragraphNode","paragraphNodeChild","rootNodes","Array","isArray","nodeValidations","features","validations","nodes","validation"],"sources":["../../src/validate/index.ts"],"sourcesContent":["import type { SerializedEditorState, SerializedParagraphNode } from 'lexical'\nimport type { RichTextField, Validate } from 'payload'\n\nimport type { SanitizedServerEditorConfig } from '../lexical/config/types.js'\n\nimport { validateNodes } from './validateNodes.js'\n\nexport const richTextValidateHOC = ({\n editorConfig,\n}: {\n editorConfig: SanitizedServerEditorConfig\n}) => {\n const richTextValidate: Validate<SerializedEditorState, unknown, unknown, RichTextField> = async (\n value,\n options,\n ) => {\n const {\n req: { t },\n required,\n } = options\n\n if (required) {\n const hasChildren = !!value?.root?.children?.length\n\n let hasOnlyEmptyParagraph = false\n if (value?.root?.children?.length === 1) {\n if (value?.root?.children[0]?.type === 'paragraph') {\n const paragraphNode = value?.root?.children[0] as SerializedParagraphNode\n if (paragraphNode?.children?.length === 0) {\n hasOnlyEmptyParagraph = true\n } else if (paragraphNode?.children?.length === 1) {\n const paragraphNodeChild = paragraphNode?.children[0]\n if (paragraphNodeChild.type === 'text') {\n if (!paragraphNodeChild?.['text']?.length) {\n hasOnlyEmptyParagraph = true\n }\n }\n }\n }\n }\n\n if (!hasChildren || hasOnlyEmptyParagraph) {\n return t('validation:required')\n }\n }\n\n // Traverse through nodes and validate them. Just like a node can hook into the population process (e.g. link or relationship nodes),\n // they can also hook into the validation process. E.g. a block node probably has fields with validation rules.\n\n const rootNodes = value?.root?.children\n if (rootNodes && Array.isArray(rootNodes) && rootNodes?.length) {\n return await validateNodes({\n nodeValidations: editorConfig.features.validations,\n nodes: rootNodes,\n validation: {\n options,\n value,\n },\n })\n }\n\n return true\n }\n\n return richTextValidate\n}\n"],"mappings":"AAKA,SAASA,aAAa,QAAQ;AAE9B,OAAO,MAAMC,mBAAA,GAAsBA,CAAC;EAClCC;AAAY,CAGb;EACC,MAAMC,gBAAA,GAAqF,MAAAA,CACzFC,KAAA,EACAC,OAAA;IAEA,MAAM;MACJC,GAAA,EAAK;QAAEC;MAAC,CAAE;MACVC;IAAQ,CACT,GAAGH,OAAA;IAEJ,IAAIG,QAAA,EAAU;MACZ,MAAMC,WAAA,GAAc,CAAC,CAACL,KAAA,EAAOM,IAAA,EAAMC,QAAA,EAAUC,MAAA;MAE7C,IAAIC,qBAAA,GAAwB;MAC5B,IAAIT,KAAA,EAAOM,IAAA,EAAMC,QAAA,EAAUC,MAAA,KAAW,GAAG;QACvC,IAAIR,KAAA,EAAOM,IAAA,EAAMC,QAAQ,CAAC,EAAE,EAAEG,IAAA,KAAS,aAAa;UAClD,MAAMC,aAAA,GAAgBX,KAAA,EAAOM,IAAA,EAAMC,QAAQ,CAAC,EAAE;UAC9C,IAAII,aAAA,EAAeJ,QAAA,EAAUC,MAAA,KAAW,GAAG;YACzCC,qBAAA,GAAwB;UAC1B,OAAO,IAAIE,aAAA,EAAeJ,QAAA,EAAUC,MAAA,KAAW,GAAG;YAChD,MAAMI,kBAAA,GAAqBD,aAAA,EAAeJ,QAAQ,CAAC,EAAE;YACrD,IAAIK,kBAAA,CAAmBF,IAAI,KAAK,QAAQ;cACtC,IAAI,CAACE,kBAAA,GAAqB,OAAO,EAAEJ,MAAA,EAAQ;gBACzCC,qBAAA,GAAwB;cAC1B;YACF;UACF;QACF;MACF;MAEA,IAAI,CAACJ,WAAA,IAAeI,qBAAA,EAAuB;QACzC,OAAON,CAAA,CAAE;MACX;IACF;IAEA;IACA;IAEA,MAAMU,SAAA,GAAYb,KAAA,EAAOM,IAAA,EAAMC,QAAA;IAC/B,IAAIM,SAAA,IAAaC,KAAA,CAAMC,OAAO,CAACF,SAAA,KAAcA,SAAA,EAAWL,MAAA,EAAQ;MAC9D,OAAO,MAAMZ,aAAA,CAAc;QACzBoB,eAAA,EAAiBlB,YAAA,CAAamB,QAAQ,CAACC,WAAW;QAClDC,KAAA,EAAON,SAAA;QACPO,UAAA,EAAY;UACVnB,OAAA;UACAD;QACF;MACF;IACF;IAEA,OAAO;EACT;EAEA,OAAOD,gBAAA;AACT","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["validateNodes","richTextValidateHOC","editorConfig","richTextValidate","value","options","req","t","required","hasChildren","root","children","length","hasOnlyEmptyParagraph","type","paragraphNode","paragraphNodeChild","rootNodes","Array","isArray","nodes","nodeValidations","features","validations","validation"],"sources":["../../src/validate/index.ts"],"sourcesContent":["import type { SerializedEditorState, SerializedParagraphNode } from 'lexical'\nimport type { RichTextField, Validate } from 'payload'\n\nimport type { SanitizedServerEditorConfig } from '../lexical/config/types.js'\n\nimport { validateNodes } from './validateNodes.js'\n\nexport const richTextValidateHOC = ({\n editorConfig,\n}: {\n editorConfig: SanitizedServerEditorConfig\n}) => {\n const richTextValidate: Validate<SerializedEditorState, unknown, unknown, RichTextField> = async (\n value,\n options,\n ) => {\n const {\n req: { t },\n required,\n } = options\n\n if (required) {\n const hasChildren = !!value?.root?.children?.length\n\n let hasOnlyEmptyParagraph = false\n if (value?.root?.children?.length === 1) {\n if (value?.root?.children[0]?.type === 'paragraph') {\n const paragraphNode = value?.root?.children[0] as SerializedParagraphNode\n if (paragraphNode?.children?.length === 0) {\n hasOnlyEmptyParagraph = true\n } else if (paragraphNode?.children?.length === 1) {\n const paragraphNodeChild = paragraphNode?.children[0]\n if (paragraphNodeChild.type === 'text') {\n if (!paragraphNodeChild?.['text']?.length) {\n hasOnlyEmptyParagraph = true\n }\n }\n }\n }\n }\n\n if (!hasChildren || hasOnlyEmptyParagraph) {\n return t('validation:required')\n }\n }\n\n // Traverse through nodes and validate them. Just like a node can hook into the population process (e.g. link or relationship nodes),\n // they can also hook into the validation process. E.g. a block node probably has fields with validation rules.\n\n const rootNodes = value?.root?.children\n if (rootNodes && Array.isArray(rootNodes) && rootNodes?.length) {\n return await validateNodes({\n nodes: rootNodes,\n nodeValidations: editorConfig.features.validations,\n validation: {\n options,\n value,\n },\n })\n }\n\n return true\n }\n\n return richTextValidate\n}\n"],"mappings":"AAKA,SAASA,aAAa,QAAQ;AAE9B,OAAO,MAAMC,mBAAA,GAAsBA,CAAC;EAClCC;AAAY,CAGb;EACC,MAAMC,gBAAA,GAAqF,MAAAA,CACzFC,KAAA,EACAC,OAAA;IAEA,MAAM;MACJC,GAAA,EAAK;QAAEC;MAAC,CAAE;MACVC;IAAQ,CACT,GAAGH,OAAA;IAEJ,IAAIG,QAAA,EAAU;MACZ,MAAMC,WAAA,GAAc,CAAC,CAACL,KAAA,EAAOM,IAAA,EAAMC,QAAA,EAAUC,MAAA;MAE7C,IAAIC,qBAAA,GAAwB;MAC5B,IAAIT,KAAA,EAAOM,IAAA,EAAMC,QAAA,EAAUC,MAAA,KAAW,GAAG;QACvC,IAAIR,KAAA,EAAOM,IAAA,EAAMC,QAAQ,CAAC,EAAE,EAAEG,IAAA,KAAS,aAAa;UAClD,MAAMC,aAAA,GAAgBX,KAAA,EAAOM,IAAA,EAAMC,QAAQ,CAAC,EAAE;UAC9C,IAAII,aAAA,EAAeJ,QAAA,EAAUC,MAAA,KAAW,GAAG;YACzCC,qBAAA,GAAwB;UAC1B,OAAO,IAAIE,aAAA,EAAeJ,QAAA,EAAUC,MAAA,KAAW,GAAG;YAChD,MAAMI,kBAAA,GAAqBD,aAAA,EAAeJ,QAAQ,CAAC,EAAE;YACrD,IAAIK,kBAAA,CAAmBF,IAAI,KAAK,QAAQ;cACtC,IAAI,CAACE,kBAAA,GAAqB,OAAO,EAAEJ,MAAA,EAAQ;gBACzCC,qBAAA,GAAwB;cAC1B;YACF;UACF;QACF;MACF;MAEA,IAAI,CAACJ,WAAA,IAAeI,qBAAA,EAAuB;QACzC,OAAON,CAAA,CAAE;MACX;IACF;IAEA;IACA;IAEA,MAAMU,SAAA,GAAYb,KAAA,EAAOM,IAAA,EAAMC,QAAA;IAC/B,IAAIM,SAAA,IAAaC,KAAA,CAAMC,OAAO,CAACF,SAAA,KAAcA,SAAA,EAAWL,MAAA,EAAQ;MAC9D,OAAO,MAAMZ,aAAA,CAAc;QACzBoB,KAAA,EAAOH,SAAA;QACPI,eAAA,EAAiBnB,YAAA,CAAaoB,QAAQ,CAACC,WAAW;QAClDC,UAAA,EAAY;UACVnB,OAAA;UACAD;QACF;MACF;IACF;IAEA,OAAO;EACT;EAEA,OAAOD,gBAAA;AACT","ignoreList":[]}
@@ -1,9 +1,9 @@
1
1
  import type { SerializedEditorState, SerializedLexicalNode } from 'lexical';
2
2
  import type { RichTextField, ValidateOptions } from 'payload';
3
3
  import type { NodeValidation } from '../features/typesServer.js';
4
- export declare function validateNodes({ nodeValidations, nodes, validation: validationFromProps, }: {
5
- nodeValidations: Map<string, Array<NodeValidation>>;
4
+ export declare function validateNodes({ nodes, nodeValidations, validation: validationFromProps, }: {
6
5
  nodes: SerializedLexicalNode[];
6
+ nodeValidations: Map<string, Array<NodeValidation>>;
7
7
  validation: {
8
8
  options: ValidateOptions<unknown, unknown, RichTextField, SerializedEditorState>;
9
9
  value: SerializedEditorState;
@@ -1 +1 @@
1
- {"version":3,"file":"validateNodes.d.ts","sourceRoot":"","sources":["../../src/validate/validateNodes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAC3E,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAE7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAEhE,wBAAsB,aAAa,CAAC,EAClC,eAAe,EACf,KAAK,EACL,UAAU,EAAE,mBAAmB,GAChC,EAAE;IACD,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,CAAA;IACnD,KAAK,EAAE,qBAAqB,EAAE,CAAA;IAC9B,UAAU,EAAE;QACV,OAAO,EAAE,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,qBAAqB,CAAC,CAAA;QAChF,KAAK,EAAE,qBAAqB,CAAA;KAC7B,CAAA;CACF,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmCzB"}
1
+ {"version":3,"file":"validateNodes.d.ts","sourceRoot":"","sources":["../../src/validate/validateNodes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAC3E,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAE7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAEhE,wBAAsB,aAAa,CAAC,EAClC,KAAK,EACL,eAAe,EACf,UAAU,EAAE,mBAAmB,GAChC,EAAE;IACD,KAAK,EAAE,qBAAqB,EAAE,CAAA;IAC9B,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,CAAA;IACnD,UAAU,EAAE;QACV,OAAO,EAAE,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,qBAAqB,CAAC,CAAA;QAChF,KAAK,EAAE,qBAAqB,CAAA;KAC7B,CAAA;CACF,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmCzB"}
@@ -1,6 +1,6 @@
1
1
  export async function validateNodes({
2
- nodeValidations,
3
2
  nodes,
3
+ nodeValidations,
4
4
  validation: validationFromProps
5
5
  }) {
6
6
  for (const node of nodes) {
@@ -21,8 +21,8 @@ export async function validateNodes({
21
21
  // Validate node's children
22
22
  if ('children' in node && node?.children) {
23
23
  const childrenValidationResult = await validateNodes({
24
- nodeValidations,
25
24
  nodes: node.children,
25
+ nodeValidations,
26
26
  validation: validationFromProps
27
27
  });
28
28
  if (childrenValidationResult !== true) {
@@ -1 +1 @@
1
- {"version":3,"file":"validateNodes.js","names":["validateNodes","nodeValidations","nodes","validation","validationFromProps","node","has","type","validations","get","validationResult","children","childrenValidationResult"],"sources":["../../src/validate/validateNodes.ts"],"sourcesContent":["import type { SerializedEditorState, SerializedLexicalNode } from 'lexical'\nimport type { RichTextField, ValidateOptions } from 'payload'\n\nimport type { NodeValidation } from '../features/typesServer.js'\n\nexport async function validateNodes({\n nodeValidations,\n nodes,\n validation: validationFromProps,\n}: {\n nodeValidations: Map<string, Array<NodeValidation>>\n nodes: SerializedLexicalNode[]\n validation: {\n options: ValidateOptions<unknown, unknown, RichTextField, SerializedEditorState>\n value: SerializedEditorState\n }\n}): Promise<string | true> {\n for (const node of nodes) {\n // Validate node\n if (\n nodeValidations &&\n typeof nodeValidations?.has === 'function' &&\n nodeValidations?.has(node.type)\n ) {\n const validations = nodeValidations.get(node.type)\n for (const validation of validations) {\n const validationResult = await validation({\n node,\n nodeValidations,\n validation: validationFromProps,\n })\n if (validationResult !== true) {\n return `${node.type} node failed to validate: ${validationResult}`\n }\n }\n }\n\n // Validate node's children\n if ('children' in node && node?.children) {\n const childrenValidationResult = await validateNodes({\n nodeValidations,\n nodes: node.children as SerializedLexicalNode[],\n validation: validationFromProps,\n })\n if (childrenValidationResult !== true) {\n return childrenValidationResult\n }\n }\n }\n\n return true\n}\n"],"mappings":"AAKA,OAAO,eAAeA,cAAc;EAClCC,eAAe;EACfC,KAAK;EACLC,UAAA,EAAYC;AAAmB,CAQhC;EACC,KAAK,MAAMC,IAAA,IAAQH,KAAA,EAAO;IACxB;IACA,IACED,eAAA,IACA,OAAOA,eAAA,EAAiBK,GAAA,KAAQ,cAChCL,eAAA,EAAiBK,GAAA,CAAID,IAAA,CAAKE,IAAI,GAC9B;MACA,MAAMC,WAAA,GAAcP,eAAA,CAAgBQ,GAAG,CAACJ,IAAA,CAAKE,IAAI;MACjD,KAAK,MAAMJ,UAAA,IAAcK,WAAA,EAAa;QACpC,MAAME,gBAAA,GAAmB,MAAMP,UAAA,CAAW;UACxCE,IAAA;UACAJ,eAAA;UACAE,UAAA,EAAYC;QACd;QACA,IAAIM,gBAAA,KAAqB,MAAM;UAC7B,OAAO,GAAGL,IAAA,CAAKE,IAAI,6BAA6BG,gBAAA,EAAkB;QACpE;MACF;IACF;IAEA;IACA,IAAI,cAAcL,IAAA,IAAQA,IAAA,EAAMM,QAAA,EAAU;MACxC,MAAMC,wBAAA,GAA2B,MAAMZ,aAAA,CAAc;QACnDC,eAAA;QACAC,KAAA,EAAOG,IAAA,CAAKM,QAAQ;QACpBR,UAAA,EAAYC;MACd;MACA,IAAIQ,wBAAA,KAA6B,MAAM;QACrC,OAAOA,wBAAA;MACT;IACF;EACF;EAEA,OAAO;AACT","ignoreList":[]}
1
+ {"version":3,"file":"validateNodes.js","names":["validateNodes","nodes","nodeValidations","validation","validationFromProps","node","has","type","validations","get","validationResult","children","childrenValidationResult"],"sources":["../../src/validate/validateNodes.ts"],"sourcesContent":["import type { SerializedEditorState, SerializedLexicalNode } from 'lexical'\nimport type { RichTextField, ValidateOptions } from 'payload'\n\nimport type { NodeValidation } from '../features/typesServer.js'\n\nexport async function validateNodes({\n nodes,\n nodeValidations,\n validation: validationFromProps,\n}: {\n nodes: SerializedLexicalNode[]\n nodeValidations: Map<string, Array<NodeValidation>>\n validation: {\n options: ValidateOptions<unknown, unknown, RichTextField, SerializedEditorState>\n value: SerializedEditorState\n }\n}): Promise<string | true> {\n for (const node of nodes) {\n // Validate node\n if (\n nodeValidations &&\n typeof nodeValidations?.has === 'function' &&\n nodeValidations?.has(node.type)\n ) {\n const validations = nodeValidations.get(node.type)\n for (const validation of validations) {\n const validationResult = await validation({\n node,\n nodeValidations,\n validation: validationFromProps,\n })\n if (validationResult !== true) {\n return `${node.type} node failed to validate: ${validationResult}`\n }\n }\n }\n\n // Validate node's children\n if ('children' in node && node?.children) {\n const childrenValidationResult = await validateNodes({\n nodes: node.children as SerializedLexicalNode[],\n nodeValidations,\n validation: validationFromProps,\n })\n if (childrenValidationResult !== true) {\n return childrenValidationResult\n }\n }\n }\n\n return true\n}\n"],"mappings":"AAKA,OAAO,eAAeA,cAAc;EAClCC,KAAK;EACLC,eAAe;EACfC,UAAA,EAAYC;AAAmB,CAQhC;EACC,KAAK,MAAMC,IAAA,IAAQJ,KAAA,EAAO;IACxB;IACA,IACEC,eAAA,IACA,OAAOA,eAAA,EAAiBI,GAAA,KAAQ,cAChCJ,eAAA,EAAiBI,GAAA,CAAID,IAAA,CAAKE,IAAI,GAC9B;MACA,MAAMC,WAAA,GAAcN,eAAA,CAAgBO,GAAG,CAACJ,IAAA,CAAKE,IAAI;MACjD,KAAK,MAAMJ,UAAA,IAAcK,WAAA,EAAa;QACpC,MAAME,gBAAA,GAAmB,MAAMP,UAAA,CAAW;UACxCE,IAAA;UACAH,eAAA;UACAC,UAAA,EAAYC;QACd;QACA,IAAIM,gBAAA,KAAqB,MAAM;UAC7B,OAAO,GAAGL,IAAA,CAAKE,IAAI,6BAA6BG,gBAAA,EAAkB;QACpE;MACF;IACF;IAEA;IACA,IAAI,cAAcL,IAAA,IAAQA,IAAA,EAAMM,QAAA,EAAU;MACxC,MAAMC,wBAAA,GAA2B,MAAMZ,aAAA,CAAc;QACnDC,KAAA,EAAOI,IAAA,CAAKM,QAAQ;QACpBT,eAAA;QACAC,UAAA,EAAYC;MACd;MACA,IAAIQ,wBAAA,KAA6B,MAAM;QACrC,OAAOA,wBAAA;MACT;IACF;EACF;EAEA,OAAO;AACT","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payloadcms/richtext-lexical",
3
- "version": "3.0.0-beta.96",
3
+ "version": "3.0.0-beta.97",
4
4
  "description": "The officially supported Lexical richtext adapter for Payload",
5
5
  "homepage": "https://payloadcms.com",
6
6
  "repository": {
@@ -56,8 +56,8 @@
56
56
  "lexical": "0.17.0",
57
57
  "react-error-boundary": "4.0.13",
58
58
  "uuid": "10.0.0",
59
- "@payloadcms/translations": "3.0.0-beta.96",
60
- "@payloadcms/ui": "3.0.0-beta.96"
59
+ "@payloadcms/translations": "3.0.0-beta.97",
60
+ "@payloadcms/ui": "3.0.0-beta.97"
61
61
  },
62
62
  "devDependencies": {
63
63
  "@babel/cli": "^7.24.5",
@@ -77,8 +77,8 @@
77
77
  "esbuild-sass-plugin": "3.3.1",
78
78
  "eslint-plugin-react-compiler": "0.0.0-experimental-72f06b2-20240822",
79
79
  "swc-plugin-transform-remove-imports": "1.15.0",
80
- "@payloadcms/eslint-config": "3.0.0-beta.59",
81
- "payload": "3.0.0-beta.96"
80
+ "payload": "3.0.0-beta.97",
81
+ "@payloadcms/eslint-config": "3.0.0-beta.59"
82
82
  },
83
83
  "peerDependencies": {
84
84
  "@faceless-ui/modal": "3.0.0-beta.2",
@@ -96,8 +96,8 @@
96
96
  "lexical": "0.17.0",
97
97
  "react": "^19.0.0 || ^19.0.0-rc-06d0b89e-20240801",
98
98
  "react-dom": "^19.0.0 || ^19.0.0-rc-06d0b89e-20240801",
99
- "@payloadcms/next": "3.0.0-beta.96",
100
- "payload": "3.0.0-beta.96"
99
+ "@payloadcms/next": "3.0.0-beta.97",
100
+ "payload": "3.0.0-beta.97"
101
101
  },
102
102
  "engines": {
103
103
  "node": "^18.20.2 || >=20.9.0"
@@ -1,2 +0,0 @@
1
- "use client";import{a as ue,b as pe,c as ge,d as he,e as z,f as I,h as ye}from"./chunk-ZH3MUMBJ.js";import{a as fe,b as T}from"./chunk-OLSILJA6.js";import{jsx as j,jsxs as me}from"react/jsx-runtime";import{FieldDescription as Yt,FieldError as Ut,FieldLabel as Vt,useField as qt,useFieldProps as Jt,withCondition as Qt}from"@payloadcms/ui";import{useCallback as Xt}from"react";import{ErrorBoundary as Zt}from"react-error-boundary";import{jsx as A}from"react/jsx-runtime";import{LexicalComposer as Wt}from"@lexical/react/LexicalComposer.js";import*as qe from"react";import{useMemo as Ve}from"react";import{c as Bt}from"react/compiler-runtime";import{jsx as P,jsxs as J}from"react/jsx-runtime";import{useLexicalComposerContext as Mt}from"@lexical/react/LexicalComposerContext.js";import{LexicalErrorBoundary as It}from"@lexical/react/LexicalErrorBoundary.js";import{HistoryPlugin as At}from"@lexical/react/LexicalHistoryPlugin.js";import{OnChangePlugin as Ft}from"@lexical/react/LexicalOnChangePlugin.js";import{RichTextPlugin as Dt}from"@lexical/react/LexicalRichTextPlugin.js";import{TabIndentationPlugin as Ot}from"@lexical/react/LexicalTabIndentationPlugin.js";import{BLUR_COMMAND as _t,COMMAND_PRIORITY_LOW as Ge,FOCUS_COMMAND as Ht}from"lexical";import*as U from"react";import{useEffect as We,useState as Ye}from"react";import{jsx as xe}from"react/jsx-runtime";import"react";var _=({anchorElem:t,clientProps:e,plugin:o})=>o.position==="floatingAnchorElem"?o.Component&&xe(o.Component,{anchorElem:t,clientProps:e}):o.Component&&xe(o.Component,{clientProps:e});import{c as Xe}from"react/compiler-runtime";import{jsx as Ze}from"react/jsx-runtime";import{MarkdownShortcutPlugin as et}from"@lexical/react/LexicalMarkdownShortcutPlugin.js";import"react";var Ee=()=>{let t=Xe(2),{editorConfig:e}=T(),o;return t[0]!==e.features.markdownTransformers?(o=Ze(et,{transformers:e.features.markdownTransformers}),t[0]=e.features.markdownTransformers,t[1]=o):o=t[1],o};import{jsx as K,jsxs as Ne}from"react/jsx-runtime";import{useLexicalComposerContext as ot}from"@lexical/react/LexicalComposerContext.js";import{useFieldProps as Pe,useTranslation as we}from"@payloadcms/ui";import{useCallback as Ce,useMemo as nt,useState as rt}from"react";import"react";import*as ke from"react-dom";import{c as tt}from"react/compiler-runtime";import"react";function be(t,e){let o=tt(4),{maxLength:l,minLength:r}=e,m=l===void 0?75:l,p=r===void 0?1:r,a;return o[0]!==t||o[1]!==m||o[2]!==p?(a=u=>{let{query:g}=u,E="[^"+t+pe+"\\s]",s=new RegExp("(^|\\s|\\()(["+t+"]((?:"+E+"){0,"+m+"}))$").exec(g);if(s!==null){let n=s[1],y=s[3];if(y.length>=p)return{leadOffset:s.index+n.length,matchingString:y,replaceableString:s[2]}}return null},o[0]=t,o[1]=m,o[2]=p,o[3]=a):a=o[3],a}var L="slash-menu-popup";function it({isSelected:t,item:e,onClick:o,onMouseEnter:l}){let{field:{richTextComponentMap:r}}=T(),{schemaPath:m}=Pe(),{i18n:p}=we(),a=`${L}__item ${L}__item-${e.key}`;t&&(a+=` ${L}__item--selected`);let u=e.key;return e.label&&(u=typeof e.label=="function"?e.label({i18n:p,richTextComponentMap:r,schemaPath:m}):e.label),u.length>25&&(u=u.substring(0,25)+"..."),Ne("button",{"aria-selected":t,className:a,id:L+"__item-"+e.key,onClick:o,onMouseEnter:l,ref:g=>{e.ref={current:g}},role:"option",tabIndex:-1,type:"button",children:[e?.Icon&&K(e.Icon,{}),K("span",{className:`${L}__item-text`,children:u})]},e.key)}function Re({anchorElem:t=document.body}){let[e]=ot(),[o,l]=rt(null),{editorConfig:r}=T(),{i18n:m}=we(),{field:{richTextComponentMap:p}}=T(),{schemaPath:a}=Pe(),u=be("/",{minLength:0}),g=Ce(()=>{let s=[];for(let n of r.features.slashMenu.dynamicGroups){let y=n({editor:e,queryString:o});s=s.concat(y)}return s},[e,o,r?.features]),E=nt(()=>{let s=[];for(let n of r?.features.slashMenu.groups??[])s.push(n);if(o){s=s.map(y=>{let h=y.items.filter(c=>{let f=c.key;return c.label&&(f=typeof c.label=="function"?c.label({i18n:m,richTextComponentMap:p,schemaPath:a}):c.label),new RegExp(o,"gi").exec(f)?!0:c.keywords!=null?c.keywords.some(i=>new RegExp(o,"gi").exec(i)):!1});return h.length?{...y,items:h}:null}),s=s.filter(y=>y!=null);let n=g();for(let y of n){let h=s.find(c=>c.key===y.key);h?s=s.filter(c=>c.key!==y.key):h={...y,items:[]},h?.items?.length&&(h.items=h.items.concat(h.items)),s.push(h)}}return s},[g,o,r?.features,m]),d=Ce((s,n,y,h)=>{n&&e.update(()=>{n.remove()}),s.onSelect({editor:e,queryString:h}),y()},[e]);return K(he,{anchorElem:t,groups:E,menuRenderFn:(s,{selectItemAndCleanUp:n,selectedItemKey:y,setSelectedItemKey:h})=>s.current&&E.length?ke.createPortal(K("div",{className:L,children:E.map(c=>{let f=c.key;return c.label&&(f=typeof c.label=="function"?c.label({i18n:m,richTextComponentMap:p,schemaPath:a}):c.label),Ne("div",{className:`${L}__group ${L}__group-${c.key}`,children:[K("div",{className:`${L}__group-title`,children:f}),c.items.map((i,x)=>K(it,{index:x,isSelected:y===i.key,item:i,onClick:()=>{h(i.key),n(i)},onMouseEnter:()=>{h(i.key)}},i.key))]},c.key)})}),s.current):null,onQueryChange:l,onSelectItem:d,triggerFn:u})}import{jsx as ce}from"react/jsx-runtime";import{useLexicalComposerContext as mt}from"@lexical/react/LexicalComposerContext.js";import{$createParagraphNode as ut}from"lexical";import*as Le from"react";import{useCallback as ft,useEffect as ve,useRef as pt,useState as gt}from"react";import{createPortal as ht}from"react-dom";var G=(t,e,o,l,r=50,m=25)=>{let p=0;if(t&&!t.contains(l)){let{bottom:a,left:u,right:g,top:E}=t.getBoundingClientRect(),d=E+window.scrollY,s=a+window.scrollY;if(o<d-m||o>s+m||e<u-r||e>g+r)return-1;(e<u||e>g)&&(p=e<u?e-u:e-g)}return p};import{$getNodeByKey as Z}from"lexical";function W(t){let e=t.getBoundingClientRect(),o=getComputedStyle(t).getPropertyValue("transform");if(!o||o==="none")return e;let l=o.split(",").pop();return e.y=e.y-Number(l.replace(")","")),e}function X(t){let e=(u,g)=>u?parseFloat(window.getComputedStyle(u)[g]):0,{marginBottom:o,marginTop:l}=window.getComputedStyle(t),r=e(t.previousElementSibling,"marginBottom"),m=e(t.nextElementSibling,"marginTop"),p=Math.max(parseFloat(l),r);return{marginBottom:Math.max(parseFloat(o),m),marginTop:p}}import{$getRoot as st}from"lexical";function H(t){return t.getEditorState().read(()=>st().getChildrenKeys())}var lt=1,at=-1,Te=0,B={props:null,result:null};function ct(t,e,o=20){let l=t.x-e.x,r=t.y-e.y;return l*l+r*r<=o*o}function Y(t){let{anchorElem:e,cache_threshold:o=20,editor:l,fuzzy:r=!1,horizontalOffset:m=0,point:{x:p,y:a},startIndex:u=0,useEdgeAsDefault:g=!1,verbose:E=!1}=t;if(o>0&&B.props&&B.result&&B.props.fuzzy===t.fuzzy&&B.props.horizontalOffset===t.horizontalOffset&&B.props.useEdgeAsDefault===t.useEdgeAsDefault&&ct(B.props.point,t.point,o))return B.result;let d=e.getBoundingClientRect(),s=H(l),n={blockElem:null,blockNode:null,distance:1/0,foundAtIndex:-1,isFoundNodeEmptyParagraph:!1};return l.getEditorState().read(()=>{if(g){let[c,f]=[l.getElementByKey(s[0]),l.getElementByKey(s[s.length-1])],[i,x]=[W(c),W(f)];if(i&&x&&(a<i.top?(n.blockElem=c,n.distance=i.top-a,n.blockNode=Z(s[0]),n.foundAtIndex=0):a>x.bottom&&(n.distance=a-x.bottom,n.blockNode=Z(s[s.length-1]),n.blockElem=f,n.foundAtIndex=s.length-1),n?.blockElem))return{blockElem:null,isFoundNodeEmptyParagraph:!1}}let y=u,h=Te;for(;y>=0&&y<s.length;){let c=s[y],f=l.getElementByKey(c);if(f===null)break;let i=new I(p+m,a),x=ye.fromDOMRect(W(f)),{marginBottom:b,marginTop:C}=X(f),w=x.generateNewRect({bottom:x.bottom+b,left:d.left,right:d.right,top:x.top-C}),{distance:R,isOnBottomSide:N,isOnTopSide:F}=w.distanceFromPoint(i);if(R===0){n.blockElem=f,n.blockNode=Z(c),n.foundAtIndex=y,n.distance=R,n.blockNode&&n.blockNode.getType()==="paragraph"&&n.blockNode.getTextContent()===""&&(!r&&!t.returnEmptyParagraphs&&(n.blockElem=null,n.blockNode=null),n.isFoundNodeEmptyParagraph=!0);break}else r&&R<n.distance&&(n.blockElem=f,n.blockNode=Z(c),n.distance=R,n.foundAtIndex=y);h===Te&&(F?h=at:N?h=lt:h=1/0),y+=h}}),B.props=t,B.result={blockElem:n.blockElem,blockNode:n.blockNode,foundAtIndex:n.foundAtIndex,isFoundNodeEmptyParagraph:n.isFoundNodeEmptyParagraph},{blockElem:n.blockElem,blockNode:n.blockNode,foundAtIndex:n.foundAtIndex,isFoundNodeEmptyParagraph:n.isFoundNodeEmptyParagraph}}function ee(t,e){return!!t.closest(`.${e}`)}var dt=["IMG","INPUT","TEXTAREA","SELECT","BUTTON","VIDEO","OBJECT","EMBED","IFRAME","HR"];function Se(t){if(!t||dt.includes(t.tagName)||t.offsetHeight===0||t.offsetWidth===0)return!1;let e=window.getComputedStyle(t);return!(e.display==="table-cell"||e.position==="absolute"||e.visibility==="hidden"||e.opacity==="0")}function te(t,e,o,l=0){if(!t){e.style.opacity="0",e.style.transform="translate(-10000px, -10000px)";return}let r=t.getBoundingClientRect(),m=window.getComputedStyle(t),p=e.getBoundingClientRect(),a=o.getBoundingClientRect(),u;if(["lexical-block","lexical-upload","lexical-relationship"].some(d=>t.firstElementChild?.classList.contains(d)))u=r.top+8-a.top;else{let d=Se(t)?parseInt(m.lineHeight,10):0;u=r.top+(d-p.height)/2-a.top}let E=l;e.style.opacity="1",e.style.transform=`translate(${E}px, ${u}px)`}var yt="add-block-menu",oe=1/0;function xt(t){return t===0?1/0:oe>=0&&oe<t?oe:Math.floor(t/2)}function Et(t,e,o){let l=e.parentElement,{editorConfig:r}=T(),m=r?.admin?.hideGutter?-24:12,p=pt(null),[a,u]=gt(null);ve(()=>{function E(d){let s=d.target;if(!z(s))return;let n=G(l,d.pageX,d.pageY,s);if(n===-1){u(null);return}if(ee(s,yt))return;let y=H(t),{blockElem:h,blockNode:c,foundAtIndex:f}=Y({anchorElem:e,cache_threshold:0,editor:t,horizontalOffset:-n,point:new I(d.x,d.y),returnEmptyParagraphs:!0,startIndex:xt(y.length),useEdgeAsDefault:!1});oe=f,h&&(a?.node!==c||a?.elem!==h)&&u({elem:h,node:c})}return document?.addEventListener("mousemove",E),()=>{document?.removeEventListener("mousemove",E)}},[l,e,t,a]),ve(()=>{p.current&&a?.node&&te(a?.elem,p.current,e,m)},[e,a,m]);let g=ft(E=>{let d=a;d?.node&&(t.update(()=>{let s=!0;if((d.node.getType()!=="paragraph"||d.node.getTextContent()!=="")&&(s=!1),!s){let n=ut();d.node.insertAfter(n),setTimeout(()=>{d={elem:t.getElementByKey(n.getKey()),node:n},u(d)},0)}}),setTimeout(()=>{t.update(()=>{t.focus(),d.node&&"select"in d.node&&typeof d.node.select=="function"&&d.node.select()})},1),setTimeout(()=>{t.dispatchCommand(ge,{node:d.node})},2),E.stopPropagation(),E.preventDefault())},[t,a]);return ht(ce(Le.Fragment,{children:ce("button",{className:"icon add-block-menu",onClick:E=>{g(E)},ref:p,type:"button",children:ce("div",{className:o?"icon":""})})}),e)}function Be({anchorElem:t=document.body}){let[e]=mt();return Et(e,t,e._editable)}import{jsx as ne,jsxs as Ct}from"react/jsx-runtime";import{useLexicalComposerContext as Nt}from"@lexical/react/LexicalComposerContext.js";import{eventFiles as Ae}from"@lexical/rich-text";import{$getNearestNodeFromDOMNode as Fe,$getNodeByKey as Pt}from"lexical";import*as $e from"react";import{useEffect as de,useRef as re,useState as De}from"react";import{createPortal as wt}from"react-dom";var Me=0,bt=-24;var $=0;function Ie(t,e,o,l,r,m,p,a,u,g=!1){let{height:E,top:d}=l.getBoundingClientRect(),{top:s,width:n}=p.getBoundingClientRect(),{marginBottom:y,marginTop:h}=X(l),c=d,f=m>=d+E/2+window.scrollY,i=!1;if(r?.elem)if(l!==r?.elem)(f&&r?.elem&&r?.elem===l.nextElementSibling||!f&&r?.elem&&r?.elem===l.previousElementSibling)&&($++,$<200&&(i=!0));else{$++;let w=r?.boundingBox?.y,R=l.getBoundingClientRect().y;(f===r?.isBelow&&w===R||$<200)&&(i=!1)}if(i)return{isBelow:f,willStayInSamePosition:i};g?c+=E/2:f?c+=E+y/2:c-=h/2;let x=0;g||(f?x=-Me:x=Me);let b=c-s+x,C=bt-e;return o.style.width=`calc(${n}px - ${t})`,o.style.opacity=".8",o.style.transform=`translate(${C}px, calc(${b}px - 2px))`,r.elem.style.opacity="",r?.elem===l?f?r.elem.style.marginTop="":r.elem.style.marginBottom="":(r.elem.style.marginBottom="",r.elem.style.marginTop=""),$=0,{isBelow:f,willStayInSamePosition:i}}var kt="draggable-block-menu",Oe="application/x-lexical-drag-block",q=1/0;function _e(t){return t===0?1/0:q>=0&&q<t?q:Math.floor(t/2)}function Rt(t,e){let{transform:o}=e.style;t.setDragImage(e,0,0),setTimeout(()=>{e.style.transform=o})}function He(t,e){t&&(t.style.opacity="0"),e&&(e.style.opacity="",e.style.marginBottom="",e.style.marginTop="")}function Tt(t,e,o){let l=e.parentElement,r=re(null),m=re(null),p=re(null),a=re(!1),[u,g]=De(null),[E,d]=De(null),{editorConfig:s}=T(),n=s?.admin?.hideGutter?-44:-8;de(()=>{function c(f){let i=f.target;if(!z(i))return;let x=G(l,f.pageX,f.pageY,i);if(x===-1){g(null);return}if(ee(i,kt))return;let b=H(t),{blockElem:C,foundAtIndex:w,isFoundNodeEmptyParagraph:R}=Y({anchorElem:e,cache_threshold:0,editor:t,horizontalOffset:-x,point:new I(f.x,f.y),startIndex:_e(b.length),useEdgeAsDefault:!1,verbose:!1});q=w,!(!C&&!R)&&u!==C&&g(C)}return document?.addEventListener("mousemove",c),()=>{document?.removeEventListener("mousemove",c)}},[l,e,t,u]),de(()=>{r.current&&te(u,r.current,e,n)},[e,u,n]),de(()=>{function c(i){if(!a.current)return!1;let[x]=Ae(i);if(x)return!1;let{pageY:b,target:C}=i;if(!z(C))return!1;let w=G(l,i.pageX,i.pageY,C,100,50),R=H(t),{blockElem:N,foundAtIndex:F,isFoundNodeEmptyParagraph:D}=Y({anchorElem:e,editor:t,fuzzy:!0,horizontalOffset:-w,point:new I(i.x,i.y),startIndex:_e(R.length),useEdgeAsDefault:!0,verbose:!0});q=F;let S=m.current;if(N===null||S===null)return!1;if(u!==N){let{isBelow:v,willStayInSamePosition:V}=Ie(s?.admin?.hideGutter?"0px":"3rem",n+(s?.admin?.hideGutter?r?.current?.getBoundingClientRect()?.width??0:-(r?.current?.getBoundingClientRect()?.width??0)),S,N,E,b,e,i,p,D);i.preventDefault(),V||d({boundingBox:N.getBoundingClientRect(),elem:N,isBelow:v})}else He(S,E?.elem),d({boundingBox:N.getBoundingClientRect(),elem:N,isBelow:!1});return!0}function f(i){if(!a.current)return!1;let[x]=Ae(i);if(x)return!1;let{dataTransfer:b,pageY:C,target:w}=i,R=b?.getData(Oe)||"";return t.update(()=>{let N=Pt(R);if(!N||!z(w))return!1;let F=G(l,i.pageX,i.pageY,w,100,50),{blockElem:D,isFoundNodeEmptyParagraph:S}=Y({anchorElem:e,editor:t,fuzzy:!0,horizontalOffset:-F,point:new I(i.x,i.y),useEdgeAsDefault:!0});if(!D)return!1;let v=Fe(D);if(!v)return!1;if(v===N)return!0;let{height:V,top:se}=W(D),ae=C>=se+V/2+window.scrollY;S?(v.insertBefore(N),v.remove()):ae?v.insertAfter(N):v.insertBefore(N),u!==null&&g(null),document.querySelectorAll(".lexical-block-highlighter").forEach(M=>{M.remove()});let O=t.getElementByKey(N.getKey());setTimeout(()=>{let M=O.getBoundingClientRect(),k=document.createElement("div");k.className="lexical-block-highlighter",k.style.backgroundColor="var(--theme-elevation-1000",k.style.transition="opacity 0.5s ease-in-out",k.style.zIndex="1",k.style.pointerEvents="none",k.style.boxSizing="border-box",k.style.borderRadius="4px",k.style.position="absolute",document.body.appendChild(k),k.style.opacity="0.1",k.style.height=`${M.height+8}px`,k.style.width=`${M.width+8}px`,k.style.top=`${M.top+window.scrollY-4}px`,k.style.left=`${M.left-4}px`,setTimeout(()=>{k.style.opacity="0",setTimeout(()=>{k.remove()},500)},1e3)},120)}),!0}return document.addEventListener("dragover",c),document.addEventListener("drop",f),()=>{document.removeEventListener("dragover",c),document.removeEventListener("drop",f)}},[l,n,e,t,E,u,s?.admin?.hideGutter]);function y(c){let f=c.dataTransfer;if(!f||!u)return;Rt(f,u);let i="";t.update(()=>{let x=Fe(u);x&&(i=x.getKey())}),a.current=!0,f.setData(Oe,i)}function h(){a.current=!1,He(m.current,E?.elem)}return wt(Ct($e.Fragment,{children:[ne("div",{className:"icon draggable-block-menu",draggable:!0,onDragEnd:h,onDragStart:y,ref:r,children:ne("div",{className:o?"icon":""})}),ne("div",{className:"draggable-block-target-line",ref:m}),ne("div",{className:"debug-highlight",ref:p})]}),e)}function je({anchorElem:t=document.body}){let[e]=Nt();return Tt(e,t,e._editable)}import{c as St}from"react/compiler-runtime";import{jsx as ze}from"react/jsx-runtime";import{ContentEditable as vt}from"@lexical/react/LexicalContentEditable.js";import{useTranslation as Lt}from"@payloadcms/ui";import"react";function Ke(t){let e=St(3),{className:o}=t,{t:l}=Lt(),r;return e[0]!==l||e[1]!==o?(r=ze(vt,{"aria-placeholder":l("lexical:general:placeholder"),className:o??"ContentEditable__root",placeholder:ze("p",{className:"editor-placeholder",children:l("lexical:general:placeholder")})}),e[0]=l,e[1]=o,e[2]=r):r=e[2],r}var Ue=t=>{let e=Bt(22),{editorConfig:o,editorContainerRef:l,onChange:r}=t,m=T(),[p]=Mt(),[a,u]=Ye(null),g;e[0]===Symbol.for("react.memo_cache_sentinel")?(g=i=>{i!==null&&u(i)},e[0]=g):g=e[0];let E=g,d,s;e[1]!==m||e[2]!==p?(d=()=>{if(!m?.uuid){console.error("Lexical Editor must be used within an EditorConfigProvider");return}m?.parentEditor?.uuid&&m.parentEditor?.registerChild(m.uuid,m);let i=()=>{m.focusEditor(m)},x=()=>{m.blurEditor(m)},b=p.registerCommand(Ht,()=>(i(),!0),Ge),C=p.registerCommand(_t,()=>(x(),!0),Ge);return()=>{b(),C(),m.parentEditor?.unregisterChild?.(m.uuid)}},s=[p,m],e[1]=m,e[2]=p,e[3]=d,e[4]=s):(d=e[3],s=e[4]),We(d,s);let[n,y]=Ye(!1),h,c;e[5]!==n?(h=()=>{let i=()=>{let x=window.matchMedia("(max-width: 768px)").matches;x!==n&&y(x)};return i(),window.addEventListener("resize",i),()=>{window.removeEventListener("resize",i)}},c=[n],e[5]=n,e[6]=h,e[7]=c):(h=e[6],c=e[7]),We(h,c);let f;if(e[8]!==o.features||e[9]!==r||e[10]!==a||e[11]!==n||e[12]!==p||e[13]!==l){let i;e[15]!==r?(i=(b,C,w)=>{(!w.has("focus")||w.size>1)&&r?.(b,C,w)},e[15]=r,e[16]=i):i=e[16];let x;e[17]!==a||e[18]!==n||e[19]!==p||e[20]!==o?(x=a&&J(U.Fragment,{children:[!n&&p.isEditable()&&J(U.Fragment,{children:[P(je,{anchorElem:a}),P(Be,{anchorElem:a})]}),o.features.plugins.map(b=>{if(b.position==="floatingAnchorElem"&&!(b.desktopOnly===!0&&n))return P(_,{anchorElem:a,clientProps:b.clientProps,plugin:b},b.key)}),p.isEditable()&&P(U.Fragment,{children:P(Re,{anchorElem:a})})]}),e[17]=a,e[18]=n,e[19]=p,e[20]=o,e[21]=x):x=e[21],f=J(U.Fragment,{children:[o.features.plugins.map($t),J("div",{className:"editor-container",ref:l,children:[o.features.plugins.map(jt),P(Dt,{ErrorBoundary:It,contentEditable:P("div",{className:"editor-scroller",children:P("div",{className:"editor",ref:E,children:P(Ke,{})})})}),P(Ft,{ignoreSelectionChange:!0,onChange:i}),x,p.isEditable()&&J(U.Fragment,{children:[P(At,{}),o?.features?.markdownTransformers?.length>0&&P(Ee,{})]}),P(Ot,{}),o.features.plugins.map(zt),o.features.plugins.map(Kt)]}),o.features.plugins.map(Gt)]}),e[8]=o.features,e[9]=r,e[10]=a,e[11]=n,e[12]=p,e[13]=l,e[14]=f}else f=e[14];return f};function $t(t){if(t.position==="aboveContainer")return P(_,{clientProps:t.clientProps,plugin:t},t.key)}function jt(t){if(t.position==="top")return P(_,{clientProps:t.clientProps,plugin:t},t.key)}function zt(t){if(t.position==="normal")return P(_,{clientProps:t.clientProps,plugin:t},t.key)}function Kt(t){if(t.position==="bottom")return P(_,{clientProps:t.clientProps,plugin:t},t.key)}function Gt(t){if(t.position==="belowContainer")return P(_,{clientProps:t.clientProps,plugin:t},t.key)}var Je=({children:t,providers:e})=>{if(!e?.length)return t;let o=e[0];return e.length>1?A(o,{children:A(Je,{providers:e.slice(1),children:t})}):A(o,{children:t})},Qe=t=>{let{editorConfig:e,field:o,onChange:l,path:r,readOnly:m,value:p}=t,a=T(),u=qe.useRef(null),g=Ve(()=>{let d=p;return e?.features?.hooks?.load?.length&&e.features.hooks.load.forEach(s=>{d=s({incomingEditorState:d})}),d},[e,p]),E=Ve(()=>{if(g&&typeof g!="object")throw new Error("The value passed to the Lexical editor is not an object. This is not supported. Please remove the data from the field and start again. This is the value that was passed in: "+JSON.stringify(g));if(g&&Array.isArray(g)&&!("root"in g))throw new Error("You have tried to pass in data from the old Slate editor to the new Lexical editor. The data structure is different, thus you will have to migrate your data. We offer a one-line migration script which migrates all your rich text fields: https://payloadcms.com/docs/beta/lexical/migration#migration-via-migration-script-recommended");if(g&&"jsonContent"in g)throw new Error("You have tried to pass in data from payload-plugin-lexical. The data structure is different, thus you will have to migrate your data. Migration guide: https://payloadcms.com/docs/beta/lexical/migration#migrating-from-payload-plugin-lexical");return{editable:m!==!0,editorState:g!=null?JSON.stringify(g):void 0,namespace:e.lexical.namespace,nodes:[...ue({editorConfig:e})],onError:d=>{throw d},theme:e.lexical.theme}},[e,g,m]);return E?A(Wt,{initialConfig:E,children:A(fe,{editorConfig:e,editorContainerRef:u,field:o,parentContext:a,children:A(Je,{providers:e.features.providers,children:A(Ue,{editorConfig:e,editorContainerRef:u,onChange:l})})})},r):A("p",{children:"Loading..."})};import"./bundled.css";var ie="rich-text-lexical",eo=t=>{let{descriptionProps:e,editorConfig:o,errorProps:l,field:{name:r,_path:m,admin:{className:p,components:{Description:a,Error:u,Label:g},readOnly:E,style:d,width:s}={},label:n,required:y},field:h,labelProps:c,readOnly:f,validate:i}=t,x=f||E,b=Xt((Q,O)=>{if(typeof i=="function")return i(Q,{...O,props:t,required:y})},[i,y]),{path:C,readOnly:w}=Jt(),R=qt({path:C??m??r,validate:b}),{formInitializing:N,formProcessing:F,initialValue:D,path:S,setValue:v,showError:V,value:se}=R,le=x||w||F||N,ae=[ie,"field-type",p,V&&"error",le&&`${ie}--read-only`,o?.admin?.hideGutter!==!0?`${ie}--show-gutter`:null].filter(Boolean).join(" ");return me("div",{className:ae,style:{...d,width:s},children:[j(Ut,{CustomError:u,field:h,path:S,...l||{},alignCaret:"left"}),j(Vt,{Label:g,field:h,label:n,required:y,...c||{}}),me("div",{className:`${ie}__wrap`,children:[j(Zt,{fallbackRender:to,onReset:()=>{},children:j(Qe,{editorConfig:o,field:h,onChange:Q=>{let O=Q.toJSON();o?.features?.hooks?.save?.length&&o.features.hooks.save.forEach(M=>{O=M({incomingEditorState:O})}),v(O)},path:S,readOnly:le,value:se},JSON.stringify({initialValue:D,path:S}))}),j(Yt,{Description:a,field:h,...e||{}})]})]},S)};function to({error:t}){return me("div",{className:"errorBoundary",role:"alert",children:[j("p",{children:"Something went wrong:"}),j("pre",{style:{color:"red"},children:t.message})]})}var ar=Qt(eo);export{ar as RichText};
2
- //# sourceMappingURL=Field-E27BVLS5.js.map