@payloadcms/richtext-lexical 3.68.0-internal-debug.591ab42 → 3.68.0-internal-debug.e9b66ee
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cell/rscEntry.js +2 -21
- package/dist/cell/rscEntry.js.map +1 -1
- package/dist/features/blocks/client/component/BlockContent.js +13 -48
- package/dist/features/blocks/client/component/BlockContent.js.map +1 -1
- package/dist/features/blocks/client/component/components/BlockCollapsible.js +1 -10
- package/dist/features/blocks/client/component/components/BlockCollapsible.js.map +1 -1
- package/dist/features/blocks/client/component/components/BlockEditButton.js +1 -7
- package/dist/features/blocks/client/component/components/BlockEditButton.js.map +1 -1
- package/dist/features/blocks/client/component/components/BlockRemoveButton.js +1 -7
- package/dist/features/blocks/client/component/components/BlockRemoveButton.js.map +1 -1
- package/dist/features/blocks/client/component/index.js +81 -247
- package/dist/features/blocks/client/component/index.js.map +1 -1
- package/dist/features/blocks/client/componentInline/components/InlineBlockContainer.js +1 -9
- package/dist/features/blocks/client/componentInline/components/InlineBlockContainer.js.map +1 -1
- package/dist/features/blocks/client/componentInline/components/InlineBlockEditButton.js +1 -7
- package/dist/features/blocks/client/componentInline/components/InlineBlockEditButton.js.map +1 -1
- package/dist/features/blocks/client/componentInline/components/InlineBlockLabel.js +1 -7
- package/dist/features/blocks/client/componentInline/components/InlineBlockLabel.js.map +1 -1
- package/dist/features/blocks/client/componentInline/components/InlineBlockRemoveButton.js +1 -7
- package/dist/features/blocks/client/componentInline/components/InlineBlockRemoveButton.js.map +1 -1
- package/dist/features/blocks/client/componentInline/index.js +68 -217
- package/dist/features/blocks/client/componentInline/index.js.map +1 -1
- package/dist/features/blocks/client/getBlockImageComponent.js +4 -15
- package/dist/features/blocks/client/getBlockImageComponent.js.map +1 -1
- package/dist/features/blocks/client/nodes/BlocksNode.js +1 -12
- package/dist/features/blocks/client/nodes/BlocksNode.js.map +1 -1
- package/dist/features/blocks/client/nodes/InlineBlocksNode.js +2 -12
- package/dist/features/blocks/client/nodes/InlineBlocksNode.js.map +1 -1
- package/dist/features/blocks/premade/CodeBlock/Component/Block.js +26 -127
- package/dist/features/blocks/premade/CodeBlock/Component/Block.js.map +1 -1
- package/dist/features/blocks/premade/CodeBlock/Component/Code.js +49 -65
- package/dist/features/blocks/premade/CodeBlock/Component/Code.js.map +1 -1
- package/dist/features/blocks/premade/CodeBlock/Component/Collapse/index.js +3 -16
- package/dist/features/blocks/premade/CodeBlock/Component/Collapse/index.js.map +1 -1
- package/dist/features/blocks/premade/CodeBlock/Component/FloatingCollapse/index.js +4 -25
- package/dist/features/blocks/premade/CodeBlock/Component/FloatingCollapse/index.js.map +1 -1
- package/dist/features/blocks/server/nodes/BlocksNode.js.map +1 -1
- package/dist/features/blocks/server/nodes/InlineBlocksNode.js.map +1 -1
- package/dist/features/converters/lexicalToJSX/Component/index.js +2 -13
- package/dist/features/converters/lexicalToJSX/Component/index.js.map +1 -1
- package/dist/features/converters/lexicalToJSX/converter/converters/blockquote.js +1 -8
- package/dist/features/converters/lexicalToJSX/converter/converters/blockquote.js.map +1 -1
- package/dist/features/converters/lexicalToJSX/converter/converters/heading.js +1 -8
- package/dist/features/converters/lexicalToJSX/converter/converters/heading.js.map +1 -1
- package/dist/features/converters/lexicalToJSX/converter/converters/horizontalRule.js +1 -6
- package/dist/features/converters/lexicalToJSX/converter/converters/horizontalRule.js.map +1 -1
- package/dist/features/converters/lexicalToJSX/converter/converters/linebreak.js +1 -6
- package/dist/features/converters/lexicalToJSX/converter/converters/linebreak.js.map +1 -1
- package/dist/features/converters/lexicalToJSX/converter/converters/link.js +10 -19
- package/dist/features/converters/lexicalToJSX/converter/converters/link.js.map +1 -1
- package/dist/features/converters/lexicalToJSX/converter/converters/list.js +16 -63
- package/dist/features/converters/lexicalToJSX/converter/converters/list.js.map +1 -1
- package/dist/features/converters/lexicalToJSX/converter/converters/paragraph.js +4 -19
- package/dist/features/converters/lexicalToJSX/converter/converters/paragraph.js.map +1 -1
- package/dist/features/converters/lexicalToJSX/converter/converters/table.js +12 -45
- package/dist/features/converters/lexicalToJSX/converter/converters/table.js.map +1 -1
- package/dist/features/converters/lexicalToJSX/converter/converters/text.js +11 -57
- package/dist/features/converters/lexicalToJSX/converter/converters/text.js.map +1 -1
- package/dist/features/converters/lexicalToJSX/converter/converters/upload.js +7 -46
- package/dist/features/converters/lexicalToJSX/converter/converters/upload.js.map +1 -1
- package/dist/features/converters/lexicalToJSX/converter/index.js +5 -12
- package/dist/features/converters/lexicalToJSX/converter/index.js.map +1 -1
- package/dist/features/debug/jsxConverter/client/plugin/index.js +3 -16
- package/dist/features/debug/jsxConverter/client/plugin/index.js.map +1 -1
- package/dist/features/debug/testRecorder/client/plugin/index.js +38 -113
- package/dist/features/debug/testRecorder/client/plugin/index.js.map +1 -1
- package/dist/features/debug/treeView/client/plugin/index.js +1 -15
- package/dist/features/debug/treeView/client/plugin/index.js.map +1 -1
- package/dist/features/experimental_table/client/plugins/TableActionMenuPlugin/index.js +79 -357
- package/dist/features/experimental_table/client/plugins/TableActionMenuPlugin/index.js.map +1 -1
- package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.js +7 -41
- package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.js.map +1 -1
- package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.js +9 -39
- package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.js.map +1 -1
- package/dist/features/experimental_table/client/plugins/TablePlugin/index.js +28 -59
- package/dist/features/experimental_table/client/plugins/TablePlugin/index.js.map +1 -1
- package/dist/features/horizontalRule/client/nodes/HorizontalRuleNode.js +0 -1
- package/dist/features/horizontalRule/client/nodes/HorizontalRuleNode.js.map +1 -1
- package/dist/features/indent/client/IndentPlugin.js +1 -6
- package/dist/features/indent/client/IndentPlugin.js.map +1 -1
- package/dist/features/link/client/plugins/clickableLink/index.js +1 -7
- package/dist/features/link/client/plugins/clickableLink/index.js.map +1 -1
- package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js +59 -151
- package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js.map +1 -1
- package/dist/features/link/client/plugins/floatingLinkEditor/index.js +1 -9
- package/dist/features/link/client/plugins/floatingLinkEditor/index.js.map +1 -1
- package/dist/features/link/nodes/LinkNode.js.map +1 -1
- package/dist/features/lists/checklist/client/plugin/index.js +1 -7
- package/dist/features/lists/checklist/client/plugin/index.js.map +1 -1
- package/dist/features/lists/plugin/index.js +1 -7
- package/dist/features/lists/plugin/index.js.map +1 -1
- package/dist/features/migrations/lexicalPluginToLexical/nodes/unknownConvertedNode/Component.js +3 -18
- package/dist/features/migrations/lexicalPluginToLexical/nodes/unknownConvertedNode/Component.js.map +1 -1
- package/dist/features/migrations/lexicalPluginToLexical/nodes/unknownConvertedNode/index.js +2 -9
- package/dist/features/migrations/lexicalPluginToLexical/nodes/unknownConvertedNode/index.js.map +1 -1
- package/dist/features/migrations/slateToLexical/nodes/unknownConvertedNode/Component.js +3 -18
- package/dist/features/migrations/slateToLexical/nodes/unknownConvertedNode/Component.js.map +1 -1
- package/dist/features/migrations/slateToLexical/nodes/unknownConvertedNode/index.js +2 -9
- package/dist/features/migrations/slateToLexical/nodes/unknownConvertedNode/index.js.map +1 -1
- package/dist/features/relationship/client/components/RelationshipComponent.js +31 -100
- package/dist/features/relationship/client/components/RelationshipComponent.js.map +1 -1
- package/dist/features/relationship/client/drawer/index.js +4 -21
- package/dist/features/relationship/client/drawer/index.js.map +1 -1
- package/dist/features/relationship/client/nodes/RelationshipNode.js +2 -12
- package/dist/features/relationship/client/nodes/RelationshipNode.js.map +1 -1
- package/dist/features/relationship/client/plugins/index.js +1 -8
- package/dist/features/relationship/client/plugins/index.js.map +1 -1
- package/dist/features/relationship/server/nodes/RelationshipNode.js.map +1 -1
- package/dist/features/textState/feature.client.js +5 -22
- package/dist/features/textState/feature.client.js.map +1 -1
- package/dist/features/toolbars/fixed/client/Toolbar/index.js +27 -123
- package/dist/features/toolbars/fixed/client/Toolbar/index.js.map +1 -1
- package/dist/features/toolbars/inline/client/Toolbar/index.js +18 -111
- package/dist/features/toolbars/inline/client/Toolbar/index.js.map +1 -1
- package/dist/features/toolbars/shared/ToolbarButton/index.js +4 -14
- package/dist/features/toolbars/shared/ToolbarButton/index.js.map +1 -1
- package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js +56 -135
- package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js.map +1 -1
- package/dist/features/toolbars/shared/ToolbarDropdown/index.js +16 -70
- package/dist/features/toolbars/shared/ToolbarDropdown/index.js.map +1 -1
- package/dist/features/upload/client/component/index.js +43 -167
- package/dist/features/upload/client/component/index.js.map +1 -1
- package/dist/features/upload/client/component/pending/index.js +3 -16
- package/dist/features/upload/client/component/pending/index.js.map +1 -1
- package/dist/features/upload/client/drawer/index.js +4 -21
- package/dist/features/upload/client/drawer/index.js.map +1 -1
- package/dist/features/upload/client/nodes/UploadNode.js +3 -17
- package/dist/features/upload/client/nodes/UploadNode.js.map +1 -1
- package/dist/features/upload/client/plugin/index.js +2 -9
- package/dist/features/upload/client/plugin/index.js.map +1 -1
- package/dist/features/upload/server/nodes/UploadNode.js.map +1 -1
- package/dist/field/Diff/converters/listitem/index.js +11 -54
- package/dist/field/Diff/converters/listitem/index.js.map +1 -1
- package/dist/field/Diff/converters/relationship/index.js +18 -60
- package/dist/field/Diff/converters/relationship/index.js.map +1 -1
- package/dist/field/Diff/converters/unknown/index.js +7 -42
- package/dist/field/Diff/converters/unknown/index.js.map +1 -1
- package/dist/field/Diff/converters/upload/index.js +21 -91
- package/dist/field/Diff/converters/upload/index.js.map +1 -1
- package/dist/field/Diff/index.js +4 -17
- package/dist/field/Diff/index.js.map +1 -1
- package/dist/field/Field.js +25 -124
- package/dist/field/Field.js.map +1 -1
- package/dist/field/RenderLexical/index.js +15 -47
- package/dist/field/RenderLexical/index.js.map +1 -1
- package/dist/field/index.js +5 -24
- package/dist/field/index.js.map +1 -1
- package/dist/field/rscEntry.js +1 -9
- package/dist/field/rscEntry.js.map +1 -1
- package/dist/lexical/EditorPlugin.js +2 -17
- package/dist/lexical/EditorPlugin.js.map +1 -1
- package/dist/lexical/LexicalEditor.js +69 -232
- package/dist/lexical/LexicalEditor.js.map +1 -1
- package/dist/lexical/LexicalProvider.js +13 -64
- package/dist/lexical/LexicalProvider.js.map +1 -1
- package/dist/lexical/config/client/EditorConfigProvider.js +2 -11
- package/dist/lexical/config/client/EditorConfigProvider.js.map +1 -1
- package/dist/lexical/plugins/InsertParagraphAtEnd/index.js +5 -28
- package/dist/lexical/plugins/InsertParagraphAtEnd/index.js.map +1 -1
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.js +1 -14
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.js.map +1 -1
- package/dist/lexical/plugins/SlashMenu/index.js +31 -98
- package/dist/lexical/plugins/SlashMenu/index.js.map +1 -1
- package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.js +7 -27
- package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.js.map +1 -1
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js +7 -45
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js.map +1 -1
- package/dist/lexical/ui/ContentEditable.js +3 -18
- package/dist/lexical/ui/ContentEditable.js.map +1 -1
- package/dist/lexical/ui/icons/AI/index.js +10 -58
- package/dist/lexical/ui/icons/AI/index.js.map +1 -1
- package/dist/lexical/ui/icons/Add/index.js +4 -31
- package/dist/lexical/ui/icons/Add/index.js.map +1 -1
- package/dist/lexical/ui/icons/AlignCenter/index.js +5 -45
- package/dist/lexical/ui/icons/AlignCenter/index.js.map +1 -1
- package/dist/lexical/ui/icons/AlignJustify/index.js +5 -45
- package/dist/lexical/ui/icons/AlignJustify/index.js.map +1 -1
- package/dist/lexical/ui/icons/AlignLeft/index.js +5 -45
- package/dist/lexical/ui/icons/AlignLeft/index.js.map +1 -1
- package/dist/lexical/ui/icons/AlignRight/index.js +5 -45
- package/dist/lexical/ui/icons/AlignRight/index.js.map +1 -1
- package/dist/lexical/ui/icons/Block/index.js +5 -54
- package/dist/lexical/ui/icons/Block/index.js.map +1 -1
- package/dist/lexical/ui/icons/Blockquote/index.js +3 -24
- package/dist/lexical/ui/icons/Blockquote/index.js.map +1 -1
- package/dist/lexical/ui/icons/Bold/index.js +3 -24
- package/dist/lexical/ui/icons/Bold/index.js.map +1 -1
- package/dist/lexical/ui/icons/Checklist/index.js +4 -39
- package/dist/lexical/ui/icons/Checklist/index.js.map +1 -1
- package/dist/lexical/ui/icons/Code/index.js +4 -34
- package/dist/lexical/ui/icons/Code/index.js.map +1 -1
- package/dist/lexical/ui/icons/CodeBlock/index.js +3 -22
- package/dist/lexical/ui/icons/CodeBlock/index.js.map +1 -1
- package/dist/lexical/ui/icons/Collapse/index.js +3 -23
- package/dist/lexical/ui/icons/Collapse/index.js.map +1 -1
- package/dist/lexical/ui/icons/H1/index.js +3 -24
- package/dist/lexical/ui/icons/H1/index.js.map +1 -1
- package/dist/lexical/ui/icons/H2/index.js +3 -24
- package/dist/lexical/ui/icons/H2/index.js.map +1 -1
- package/dist/lexical/ui/icons/H3/index.js +3 -24
- package/dist/lexical/ui/icons/H3/index.js.map +1 -1
- package/dist/lexical/ui/icons/H4/index.js +3 -24
- package/dist/lexical/ui/icons/H4/index.js.map +1 -1
- package/dist/lexical/ui/icons/H5/index.js +3 -24
- package/dist/lexical/ui/icons/H5/index.js.map +1 -1
- package/dist/lexical/ui/icons/H6/index.js +3 -24
- package/dist/lexical/ui/icons/H6/index.js.map +1 -1
- package/dist/lexical/ui/icons/HorizontalRule/index.js +3 -27
- package/dist/lexical/ui/icons/HorizontalRule/index.js.map +1 -1
- package/dist/lexical/ui/icons/IndentDecrease/index.js +6 -53
- package/dist/lexical/ui/icons/IndentDecrease/index.js.map +1 -1
- package/dist/lexical/ui/icons/IndentIncrease/index.js +6 -53
- package/dist/lexical/ui/icons/IndentIncrease/index.js.map +1 -1
- package/dist/lexical/ui/icons/InlineBlocks/index.js +3 -26
- package/dist/lexical/ui/icons/InlineBlocks/index.js.map +1 -1
- package/dist/lexical/ui/icons/Italic/index.js +3 -24
- package/dist/lexical/ui/icons/Italic/index.js.map +1 -1
- package/dist/lexical/ui/icons/Link/index.js +3 -25
- package/dist/lexical/ui/icons/Link/index.js.map +1 -1
- package/dist/lexical/ui/icons/Meatballs/index.js +5 -39
- package/dist/lexical/ui/icons/Meatballs/index.js.map +1 -1
- package/dist/lexical/ui/icons/OrderedList/index.js +7 -61
- package/dist/lexical/ui/icons/OrderedList/index.js.map +1 -1
- package/dist/lexical/ui/icons/Relationship/index.js +10 -58
- package/dist/lexical/ui/icons/Relationship/index.js.map +1 -1
- package/dist/lexical/ui/icons/Strikethrough/index.js +4 -34
- package/dist/lexical/ui/icons/Strikethrough/index.js.map +1 -1
- package/dist/lexical/ui/icons/Subscript/index.js +3 -24
- package/dist/lexical/ui/icons/Subscript/index.js.map +1 -1
- package/dist/lexical/ui/icons/Superscript/index.js +3 -24
- package/dist/lexical/ui/icons/Superscript/index.js.map +1 -1
- package/dist/lexical/ui/icons/Table/index.js +3 -24
- package/dist/lexical/ui/icons/Table/index.js.map +1 -1
- package/dist/lexical/ui/icons/Text/index.js +3 -24
- package/dist/lexical/ui/icons/Text/index.js.map +1 -1
- package/dist/lexical/ui/icons/TextState/index.js +12 -18
- package/dist/lexical/ui/icons/TextState/index.js.map +1 -1
- package/dist/lexical/ui/icons/Underline/index.js +4 -34
- package/dist/lexical/ui/icons/Underline/index.js.map +1 -1
- package/dist/lexical/ui/icons/UnorderedList/index.js +8 -81
- package/dist/lexical/ui/icons/UnorderedList/index.js.map +1 -1
- package/dist/lexical/ui/icons/Upload/index.js +5 -48
- package/dist/lexical/ui/icons/Upload/index.js.map +1 -1
- package/dist/lexical/utils/point.js.map +1 -1
- package/dist/lexical/utils/rect.js.map +1 -1
- package/dist/utilities/fieldsDrawer/Drawer.js +16 -41
- package/dist/utilities/fieldsDrawer/Drawer.js.map +1 -1
- package/dist/utilities/fieldsDrawer/DrawerContent.js +10 -42
- package/dist/utilities/fieldsDrawer/DrawerContent.js.map +1 -1
- package/dist/utilities/fieldsDrawer/useLexicalDocumentDrawer.js +1 -9
- package/dist/utilities/fieldsDrawer/useLexicalDocumentDrawer.js.map +1 -1
- package/dist/utilities/fieldsDrawer/useLexicalListDrawer.js +3 -11
- package/dist/utilities/fieldsDrawer/useLexicalListDrawer.js.map +1 -1
- package/package.json +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"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"],"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"],"mappings":"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"}
|
|
1
|
+
{"version":3,"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"],"names":["isPoint","Rect","_bottom","_left","_right","_top","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"],"mappings":"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"}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { jsxDEV as _jsxDEV } from "react/jsx-dev-runtime";
|
|
3
2
|
import { Drawer, EditDepthProvider, useModal } from '@payloadcms/ui';
|
|
4
|
-
import React from 'react';
|
|
5
3
|
import { DrawerContent } from './DrawerContent.js';
|
|
6
4
|
/**
|
|
7
5
|
* This FieldsDrawer component can be used to easily create a Drawer that contains a form with fields within your feature.
|
|
@@ -11,45 +9,22 @@ import { DrawerContent } from './DrawerContent.js';
|
|
|
11
9
|
const { closeModal } = useModal();
|
|
12
10
|
// The Drawer only renders its children (and itself) if it's open. Thus, by extracting the main content
|
|
13
11
|
// to DrawerContent, this should be faster
|
|
14
|
-
return
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
// in the `handleDrawerSubmit` function.
|
|
31
|
-
setTimeout(()=>{
|
|
32
|
-
handleDrawerSubmit(args, args2);
|
|
33
|
-
}, 1);
|
|
34
|
-
},
|
|
35
|
-
schemaFieldsPathOverride: schemaFieldsPathOverride,
|
|
36
|
-
schemaPath: schemaPath,
|
|
37
|
-
schemaPathSuffix: schemaPathSuffix
|
|
38
|
-
}, void 0, false, {
|
|
39
|
-
fileName: "src/utilities/fieldsDrawer/Drawer.tsx",
|
|
40
|
-
lineNumber: 45,
|
|
41
|
-
columnNumber: 9
|
|
42
|
-
}, this)
|
|
43
|
-
}, void 0, false, {
|
|
44
|
-
fileName: "src/utilities/fieldsDrawer/Drawer.tsx",
|
|
45
|
-
lineNumber: 44,
|
|
46
|
-
columnNumber: 7
|
|
47
|
-
}, this)
|
|
48
|
-
}, void 0, false, {
|
|
49
|
-
fileName: "src/utilities/fieldsDrawer/Drawer.tsx",
|
|
50
|
-
lineNumber: 43,
|
|
51
|
-
columnNumber: 5
|
|
52
|
-
}, this);
|
|
12
|
+
return <EditDepthProvider>
|
|
13
|
+
<Drawer className={className} slug={drawerSlug} title={drawerTitle ?? ''}>
|
|
14
|
+
<DrawerContent data={data} featureKey={featureKey} fieldMapOverride={fieldMapOverride} handleDrawerSubmit={(args, args2)=>{
|
|
15
|
+
// Simply close drawer - no need for useLexicalDrawer here as at this point,
|
|
16
|
+
// we don't need to restore the cursor position. This is handled by the useEffect in useLexicalDrawer.
|
|
17
|
+
closeModal(drawerSlug);
|
|
18
|
+
// Actual drawer submit logic needs to be triggered after the drawer is closed.
|
|
19
|
+
// That's because the lexical selection / cursor restore logic that is striggerer by
|
|
20
|
+
// `useLexicalDrawer` neeeds to be triggered before any editor.update calls that may happen
|
|
21
|
+
// in the `handleDrawerSubmit` function.
|
|
22
|
+
setTimeout(()=>{
|
|
23
|
+
handleDrawerSubmit(args, args2);
|
|
24
|
+
}, 1);
|
|
25
|
+
}} schemaFieldsPathOverride={schemaFieldsPathOverride} schemaPath={schemaPath} schemaPathSuffix={schemaPathSuffix}/>
|
|
26
|
+
</Drawer>
|
|
27
|
+
</EditDepthProvider>;
|
|
53
28
|
};
|
|
54
29
|
|
|
55
30
|
//# sourceMappingURL=Drawer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/utilities/fieldsDrawer/Drawer.tsx"],"sourcesContent":["'use client'\nimport type { ClientField, Data, FormState, JsonObject } from 'payload'\n\nimport { Drawer, EditDepthProvider, useModal } from '@payloadcms/ui'\nimport React from 'react'\n\nimport { DrawerContent } from './DrawerContent.js'\n\nexport type FieldsDrawerProps = {\n readonly className?: string\n readonly data?: Data\n readonly drawerSlug: string\n readonly drawerTitle?: string\n readonly featureKey: string\n readonly fieldMapOverride?: ClientField[]\n readonly handleDrawerSubmit: (fields: FormState, data: JsonObject) => void\n readonly schemaFieldsPathOverride?: string\n readonly schemaPath: string\n readonly schemaPathSuffix?: string\n}\n\n/**\n * This FieldsDrawer component can be used to easily create a Drawer that contains a form with fields within your feature.\n * The fields are taken directly from the schema map based on your `featureKey` and `schemaPathSuffix`. Thus, this can only\n * be used if you provide your field schema inside the `generateSchemaMap` prop of your feature.server.ts.\n */\nexport const FieldsDrawer: React.FC<FieldsDrawerProps> = ({\n className,\n data,\n drawerSlug,\n drawerTitle,\n featureKey,\n fieldMapOverride,\n handleDrawerSubmit,\n schemaFieldsPathOverride,\n schemaPath,\n schemaPathSuffix,\n}) => {\n const { closeModal } = useModal()\n // The Drawer only renders its children (and itself) if it's open. Thus, by extracting the main content\n // to DrawerContent, this should be faster\n return (\n <EditDepthProvider>\n <Drawer className={className} slug={drawerSlug} title={drawerTitle ?? ''}>\n <DrawerContent\n data={data}\n featureKey={featureKey}\n fieldMapOverride={fieldMapOverride}\n handleDrawerSubmit={(args, args2) => {\n // Simply close drawer - no need for useLexicalDrawer here as at this point,\n // we don't need to restore the cursor position. This is handled by the useEffect in useLexicalDrawer.\n closeModal(drawerSlug)\n\n // Actual drawer submit logic needs to be triggered after the drawer is closed.\n // That's because the lexical selection / cursor restore logic that is striggerer by\n // `useLexicalDrawer` neeeds to be triggered before any editor.update calls that may happen\n // in the `handleDrawerSubmit` function.\n setTimeout(() => {\n handleDrawerSubmit(args, args2)\n }, 1)\n }}\n schemaFieldsPathOverride={schemaFieldsPathOverride}\n schemaPath={schemaPath}\n schemaPathSuffix={schemaPathSuffix}\n />\n </Drawer>\n </EditDepthProvider>\n )\n}\n"],"names":["Drawer","EditDepthProvider","useModal","
|
|
1
|
+
{"version":3,"sources":["../../../src/utilities/fieldsDrawer/Drawer.tsx"],"sourcesContent":["'use client'\nimport type { ClientField, Data, FormState, JsonObject } from 'payload'\n\nimport { Drawer, EditDepthProvider, useModal } from '@payloadcms/ui'\nimport React from 'react'\n\nimport { DrawerContent } from './DrawerContent.js'\n\nexport type FieldsDrawerProps = {\n readonly className?: string\n readonly data?: Data\n readonly drawerSlug: string\n readonly drawerTitle?: string\n readonly featureKey: string\n readonly fieldMapOverride?: ClientField[]\n readonly handleDrawerSubmit: (fields: FormState, data: JsonObject) => void\n readonly schemaFieldsPathOverride?: string\n readonly schemaPath: string\n readonly schemaPathSuffix?: string\n}\n\n/**\n * This FieldsDrawer component can be used to easily create a Drawer that contains a form with fields within your feature.\n * The fields are taken directly from the schema map based on your `featureKey` and `schemaPathSuffix`. Thus, this can only\n * be used if you provide your field schema inside the `generateSchemaMap` prop of your feature.server.ts.\n */\nexport const FieldsDrawer: React.FC<FieldsDrawerProps> = ({\n className,\n data,\n drawerSlug,\n drawerTitle,\n featureKey,\n fieldMapOverride,\n handleDrawerSubmit,\n schemaFieldsPathOverride,\n schemaPath,\n schemaPathSuffix,\n}) => {\n const { closeModal } = useModal()\n // The Drawer only renders its children (and itself) if it's open. Thus, by extracting the main content\n // to DrawerContent, this should be faster\n return (\n <EditDepthProvider>\n <Drawer className={className} slug={drawerSlug} title={drawerTitle ?? ''}>\n <DrawerContent\n data={data}\n featureKey={featureKey}\n fieldMapOverride={fieldMapOverride}\n handleDrawerSubmit={(args, args2) => {\n // Simply close drawer - no need for useLexicalDrawer here as at this point,\n // we don't need to restore the cursor position. This is handled by the useEffect in useLexicalDrawer.\n closeModal(drawerSlug)\n\n // Actual drawer submit logic needs to be triggered after the drawer is closed.\n // That's because the lexical selection / cursor restore logic that is striggerer by\n // `useLexicalDrawer` neeeds to be triggered before any editor.update calls that may happen\n // in the `handleDrawerSubmit` function.\n setTimeout(() => {\n handleDrawerSubmit(args, args2)\n }, 1)\n }}\n schemaFieldsPathOverride={schemaFieldsPathOverride}\n schemaPath={schemaPath}\n schemaPathSuffix={schemaPathSuffix}\n />\n </Drawer>\n </EditDepthProvider>\n )\n}\n"],"names":["Drawer","EditDepthProvider","useModal","DrawerContent","FieldsDrawer","className","data","drawerSlug","drawerTitle","featureKey","fieldMapOverride","handleDrawerSubmit","schemaFieldsPathOverride","schemaPath","schemaPathSuffix","closeModal","slug","title","args","args2","setTimeout"],"mappings":"AAAA;AAGA,SAASA,MAAM,EAAEC,iBAAiB,EAAEC,QAAQ,QAAQ,iBAAgB;AAGpE,SAASC,aAAa,QAAQ,qBAAoB;AAelD;;;;CAIC,GACD,OAAO,MAAMC,eAA4C,CAAC,EACxDC,SAAS,EACTC,IAAI,EACJC,UAAU,EACVC,WAAW,EACXC,UAAU,EACVC,gBAAgB,EAChBC,kBAAkB,EAClBC,wBAAwB,EACxBC,UAAU,EACVC,gBAAgB,EACjB;IACC,MAAM,EAAEC,UAAU,EAAE,GAAGb;IACvB,uGAAuG;IACvG,0CAA0C;IAC1C,QACGD,kBAAkB;MACjB,CAACD,OAAOK,WAAWA,WAAWW,MAAMT,YAAYU,OAAOT,eAAe,IAAI;QACxE,CAACL,cACCG,MAAMA,MACNG,YAAYA,YACZC,kBAAkBA,kBAClBC,oBAAoB,CAACO,MAAMC;QACzB,4EAA4E;QAC5E,sGAAsG;QACtGJ,WAAWR;QAEX,+EAA+E;QAC/E,oFAAoF;QACpF,2FAA2F;QAC3F,wCAAwC;QACxCa,WAAW;YACTT,mBAAmBO,MAAMC;QAC3B,GAAG;IACL,GACAP,0BAA0BA,0BAC1BC,YAAYA,YACZC,kBAAkBA,mBAClB;MACJ,EAAEd,OAAO;IACX,EAAEC;AAEN,EAAC"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { jsxDEV as _jsxDEV } from "react/jsx-dev-runtime";
|
|
3
2
|
import { useLexicalEditable } from '@lexical/react/useLexicalEditable';
|
|
4
3
|
import { Form, FormSubmit, RenderFields, useDocumentForm, useDocumentInfo, useServerFunctions, useTranslation } from '@payloadcms/ui';
|
|
5
4
|
import { abortAndIgnore } from '@payloadcms/ui/shared';
|
|
6
5
|
import { deepCopyObjectSimpleWithoutReactComponents } from 'payload/shared';
|
|
7
|
-
import
|
|
6
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
8
7
|
import { v4 as uuid } from 'uuid';
|
|
9
8
|
import { useEditorConfigContext } from '../../lexical/config/client/EditorConfigProvider.js';
|
|
10
9
|
export const DrawerContent = ({ data, featureKey, fieldMapOverride, handleDrawerSubmit, schemaFieldsPathOverride, schemaPath, schemaPathSuffix })=>{
|
|
@@ -99,46 +98,15 @@ export const DrawerContent = ({ data, featureKey, fieldMapOverride, handleDrawer
|
|
|
99
98
|
if (initialState === false) {
|
|
100
99
|
return null;
|
|
101
100
|
}
|
|
102
|
-
return
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
],
|
|
112
|
-
onSubmit: handleDrawerSubmit,
|
|
113
|
-
uuid: uuid(),
|
|
114
|
-
children: [
|
|
115
|
-
/*#__PURE__*/ _jsxDEV(RenderFields, {
|
|
116
|
-
fields: Array.isArray(fields) ? fields : [],
|
|
117
|
-
forceRender: true,
|
|
118
|
-
parentIndexPath: "",
|
|
119
|
-
parentPath: "",
|
|
120
|
-
// See Blocks feature path for details as for why this is empty
|
|
121
|
-
parentSchemaPath: schemaFieldsPath,
|
|
122
|
-
permissions: true,
|
|
123
|
-
readOnly: !isEditable
|
|
124
|
-
}, void 0, false, {
|
|
125
|
-
fileName: "src/utilities/fieldsDrawer/DrawerContent.tsx",
|
|
126
|
-
lineNumber: 158,
|
|
127
|
-
columnNumber: 7
|
|
128
|
-
}, this),
|
|
129
|
-
/*#__PURE__*/ _jsxDEV(FormSubmit, {
|
|
130
|
-
children: t('fields:saveChanges')
|
|
131
|
-
}, void 0, false, {
|
|
132
|
-
fileName: "src/utilities/fieldsDrawer/DrawerContent.tsx",
|
|
133
|
-
lineNumber: 167,
|
|
134
|
-
columnNumber: 7
|
|
135
|
-
}, this)
|
|
136
|
-
]
|
|
137
|
-
}, void 0, true, {
|
|
138
|
-
fileName: "src/utilities/fieldsDrawer/DrawerContent.tsx",
|
|
139
|
-
lineNumber: 149,
|
|
140
|
-
columnNumber: 5
|
|
141
|
-
}, this);
|
|
101
|
+
return <Form beforeSubmit={[
|
|
102
|
+
onChange
|
|
103
|
+
]} disableValidationOnSubmit fields={Array.isArray(fields) ? fields : []} initialState={initialState} onChange={[
|
|
104
|
+
onChange
|
|
105
|
+
]} onSubmit={handleDrawerSubmit} uuid={uuid()}>
|
|
106
|
+
<RenderFields fields={Array.isArray(fields) ? fields : []} forceRender parentIndexPath="" parentPath=// See Blocks feature path for details as for why this is empty
|
|
107
|
+
"" parentSchemaPath={schemaFieldsPath} permissions={true} readOnly={!isEditable}/>
|
|
108
|
+
<FormSubmit>{t('fields:saveChanges')}</FormSubmit>
|
|
109
|
+
</Form>;
|
|
142
110
|
};
|
|
143
111
|
|
|
144
112
|
//# sourceMappingURL=DrawerContent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/utilities/fieldsDrawer/DrawerContent.tsx"],"sourcesContent":["'use client'\nimport type { FormState } from 'payload'\n\nimport { useLexicalEditable } from '@lexical/react/useLexicalEditable'\nimport {\n Form,\n FormSubmit,\n RenderFields,\n useDocumentForm,\n useDocumentInfo,\n useServerFunctions,\n useTranslation,\n} from '@payloadcms/ui'\nimport { abortAndIgnore } from '@payloadcms/ui/shared'\nimport { deepCopyObjectSimpleWithoutReactComponents } from 'payload/shared'\nimport React, { useCallback, useEffect, useRef, 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 schemaPath,\n schemaPathSuffix,\n}) => {\n const { t } = useTranslation()\n const { id, collectionSlug, getDocPreferences, globalSlug } = useDocumentInfo()\n const { fields: parentDocumentFields } = useDocumentForm()\n const isEditable = useLexicalEditable()\n\n const onChangeAbortControllerRef = useRef(new AbortController())\n\n const [initialState, setInitialState] = useState<false | FormState | undefined>(false)\n\n const {\n fieldProps: { featureClientSchemaMap },\n } = useEditorConfigContext()\n\n const { getFormState } = useServerFunctions()\n\n const schemaFieldsPath =\n schemaFieldsPathOverride ??\n `${schemaPath}.lexical_internal_feature.${featureKey}${schemaPathSuffix ? `.${schemaPathSuffix}` : ''}`\n\n const fields: any = fieldMapOverride ?? featureClientSchemaMap[featureKey]?.[schemaFieldsPath] // Field Schema\n\n useEffect(() => {\n const controller = new AbortController()\n\n const awaitInitialState = async () => {\n const { state } = await getFormState({\n id,\n collectionSlug,\n data: data ?? {},\n docPermissions: {\n fields: true,\n },\n docPreferences: await getDocPreferences(),\n documentFormState: deepCopyObjectSimpleWithoutReactComponents(parentDocumentFields),\n globalSlug,\n initialBlockData: data,\n operation: 'update',\n readOnly: !isEditable,\n renderAllFields: true,\n schemaPath: schemaFieldsPath,\n signal: controller.signal,\n })\n\n setInitialState(state)\n }\n\n void awaitInitialState()\n\n return () => {\n abortAndIgnore(controller)\n }\n }, [\n schemaFieldsPath,\n id,\n data,\n getFormState,\n collectionSlug,\n isEditable,\n globalSlug,\n getDocPreferences,\n parentDocumentFields,\n ])\n\n const onChange = useCallback(\n async ({ formState: prevFormState }: { formState: FormState }) => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n\n const controller = new AbortController()\n onChangeAbortControllerRef.current = controller\n\n const { state } = await getFormState({\n id,\n collectionSlug,\n docPermissions: {\n fields: true,\n },\n docPreferences: await getDocPreferences(),\n documentFormState: deepCopyObjectSimpleWithoutReactComponents(parentDocumentFields),\n formState: prevFormState,\n globalSlug,\n initialBlockFormState: prevFormState,\n operation: 'update',\n readOnly: !isEditable,\n schemaPath: schemaFieldsPath,\n signal: controller.signal,\n })\n\n if (!state) {\n return prevFormState\n }\n\n return state\n },\n [\n getFormState,\n id,\n isEditable,\n collectionSlug,\n getDocPreferences,\n parentDocumentFields,\n globalSlug,\n schemaFieldsPath,\n ],\n )\n\n // cleanup effect\n useEffect(() => {\n return () => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n }\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 parentIndexPath=\"\"\n parentPath=\"\" // See Blocks feature path for details as for why this is empty\n parentSchemaPath={schemaFieldsPath}\n permissions={true}\n readOnly={!isEditable}\n />\n <FormSubmit>{t('fields:saveChanges')}</FormSubmit>\n </Form>\n )\n}\n"],"names":["useLexicalEditable","Form","FormSubmit","RenderFields","useDocumentForm","useDocumentInfo","useServerFunctions","useTranslation","abortAndIgnore","deepCopyObjectSimpleWithoutReactComponents","
|
|
1
|
+
{"version":3,"sources":["../../../src/utilities/fieldsDrawer/DrawerContent.tsx"],"sourcesContent":["'use client'\nimport type { FormState } from 'payload'\n\nimport { useLexicalEditable } from '@lexical/react/useLexicalEditable'\nimport {\n Form,\n FormSubmit,\n RenderFields,\n useDocumentForm,\n useDocumentInfo,\n useServerFunctions,\n useTranslation,\n} from '@payloadcms/ui'\nimport { abortAndIgnore } from '@payloadcms/ui/shared'\nimport { deepCopyObjectSimpleWithoutReactComponents } from 'payload/shared'\nimport React, { useCallback, useEffect, useRef, 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 schemaPath,\n schemaPathSuffix,\n}) => {\n const { t } = useTranslation()\n const { id, collectionSlug, getDocPreferences, globalSlug } = useDocumentInfo()\n const { fields: parentDocumentFields } = useDocumentForm()\n const isEditable = useLexicalEditable()\n\n const onChangeAbortControllerRef = useRef(new AbortController())\n\n const [initialState, setInitialState] = useState<false | FormState | undefined>(false)\n\n const {\n fieldProps: { featureClientSchemaMap },\n } = useEditorConfigContext()\n\n const { getFormState } = useServerFunctions()\n\n const schemaFieldsPath =\n schemaFieldsPathOverride ??\n `${schemaPath}.lexical_internal_feature.${featureKey}${schemaPathSuffix ? `.${schemaPathSuffix}` : ''}`\n\n const fields: any = fieldMapOverride ?? featureClientSchemaMap[featureKey]?.[schemaFieldsPath] // Field Schema\n\n useEffect(() => {\n const controller = new AbortController()\n\n const awaitInitialState = async () => {\n const { state } = await getFormState({\n id,\n collectionSlug,\n data: data ?? {},\n docPermissions: {\n fields: true,\n },\n docPreferences: await getDocPreferences(),\n documentFormState: deepCopyObjectSimpleWithoutReactComponents(parentDocumentFields),\n globalSlug,\n initialBlockData: data,\n operation: 'update',\n readOnly: !isEditable,\n renderAllFields: true,\n schemaPath: schemaFieldsPath,\n signal: controller.signal,\n })\n\n setInitialState(state)\n }\n\n void awaitInitialState()\n\n return () => {\n abortAndIgnore(controller)\n }\n }, [\n schemaFieldsPath,\n id,\n data,\n getFormState,\n collectionSlug,\n isEditable,\n globalSlug,\n getDocPreferences,\n parentDocumentFields,\n ])\n\n const onChange = useCallback(\n async ({ formState: prevFormState }: { formState: FormState }) => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n\n const controller = new AbortController()\n onChangeAbortControllerRef.current = controller\n\n const { state } = await getFormState({\n id,\n collectionSlug,\n docPermissions: {\n fields: true,\n },\n docPreferences: await getDocPreferences(),\n documentFormState: deepCopyObjectSimpleWithoutReactComponents(parentDocumentFields),\n formState: prevFormState,\n globalSlug,\n initialBlockFormState: prevFormState,\n operation: 'update',\n readOnly: !isEditable,\n schemaPath: schemaFieldsPath,\n signal: controller.signal,\n })\n\n if (!state) {\n return prevFormState\n }\n\n return state\n },\n [\n getFormState,\n id,\n isEditable,\n collectionSlug,\n getDocPreferences,\n parentDocumentFields,\n globalSlug,\n schemaFieldsPath,\n ],\n )\n\n // cleanup effect\n useEffect(() => {\n return () => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n }\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 parentIndexPath=\"\"\n parentPath=\"\" // See Blocks feature path for details as for why this is empty\n parentSchemaPath={schemaFieldsPath}\n permissions={true}\n readOnly={!isEditable}\n />\n <FormSubmit>{t('fields:saveChanges')}</FormSubmit>\n </Form>\n )\n}\n"],"names":["useLexicalEditable","Form","FormSubmit","RenderFields","useDocumentForm","useDocumentInfo","useServerFunctions","useTranslation","abortAndIgnore","deepCopyObjectSimpleWithoutReactComponents","useCallback","useEffect","useRef","useState","v4","uuid","useEditorConfigContext","DrawerContent","data","featureKey","fieldMapOverride","handleDrawerSubmit","schemaFieldsPathOverride","schemaPath","schemaPathSuffix","t","id","collectionSlug","getDocPreferences","globalSlug","fields","parentDocumentFields","isEditable","onChangeAbortControllerRef","AbortController","initialState","setInitialState","fieldProps","featureClientSchemaMap","getFormState","schemaFieldsPath","controller","awaitInitialState","state","docPermissions","docPreferences","documentFormState","initialBlockData","operation","readOnly","renderAllFields","signal","onChange","formState","prevFormState","current","initialBlockFormState","beforeSubmit","disableValidationOnSubmit","Array","isArray","onSubmit","forceRender","parentIndexPath","parentPath","parentSchemaPath","permissions"],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { jsxDEV as _jsxDEV } from "react/jsx-dev-runtime";
|
|
3
2
|
import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
|
|
4
3
|
import { useDocumentDrawer, useModal } from '@payloadcms/ui';
|
|
5
4
|
import { $getPreviousSelection, $getSelection, $setSelection } from 'lexical';
|
|
@@ -64,14 +63,7 @@ import { useCallback, useEffect, useState } from 'react';
|
|
|
64
63
|
closeDocumentDrawer,
|
|
65
64
|
DocumentDrawer,
|
|
66
65
|
documentDrawerSlug,
|
|
67
|
-
DocumentDrawerToggler: (props)
|
|
68
|
-
...props,
|
|
69
|
-
onClick: storeSelection
|
|
70
|
-
}, void 0, false, {
|
|
71
|
-
fileName: "src/utilities/fieldsDrawer/useLexicalDocumentDrawer.tsx",
|
|
72
|
-
lineNumber: 79,
|
|
73
|
-
columnNumber: 39
|
|
74
|
-
}, this)
|
|
66
|
+
DocumentDrawerToggler: (props)=><DocumentDrawerToggler {...props} onClick={storeSelection}/>
|
|
75
67
|
};
|
|
76
68
|
};
|
|
77
69
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/utilities/fieldsDrawer/useLexicalDocumentDrawer.tsx"],"sourcesContent":["'use client'\nimport type { UseDocumentDrawer } from '@payloadcms/ui'\nimport type { BaseSelection } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { useDocumentDrawer, useModal } from '@payloadcms/ui'\nimport { $getPreviousSelection, $getSelection, $setSelection } from 'lexical'\nimport { useCallback, useEffect, useState } from 'react'\n\n/**\n *\n * Wrapper around useDocumentDrawer that restores and saves selection state (cursor position) when opening and closing the drawer.\n * By default, the lexical cursor position may be lost when opening a drawer and clicking somewhere on that drawer.\n */\nexport const useLexicalDocumentDrawer = (\n args: Parameters<UseDocumentDrawer>[0],\n): {\n closeDocumentDrawer: () => void\n DocumentDrawer: ReturnType<UseDocumentDrawer>[0]\n documentDrawerSlug: string\n DocumentDrawerToggler: ReturnType<UseDocumentDrawer>[1]\n} => {\n const [editor] = useLexicalComposerContext()\n const [selectionState, setSelectionState] = useState<BaseSelection | null>(null)\n const [wasOpen, setWasOpen] = useState<boolean>(false)\n\n const [\n DocumentDrawer,\n DocumentDrawerToggler,\n { closeDrawer: closeDrawer, drawerSlug: documentDrawerSlug },\n ] = useDocumentDrawer(args)\n const { modalState } = useModal()\n\n const storeSelection = useCallback(() => {\n editor.read(() => {\n const selection = $getSelection() ?? $getPreviousSelection()\n setSelectionState(selection)\n })\n setWasOpen(true)\n }, [editor])\n\n const restoreSelection = useCallback(() => {\n if (selectionState) {\n editor.update(\n () => {\n $setSelection(selectionState.clone())\n },\n { discrete: true, skipTransforms: true },\n )\n }\n }, [editor, selectionState])\n\n const closeDocumentDrawer = () => {\n //restoreSelection() // Should already be stored by the useEffect below\n closeDrawer()\n }\n\n // We need to handle drawer closing via a useEffect, as toggleDrawer / closeDrawer will not be triggered if the drawer\n // is closed by clicking outside of the drawer. This useEffect will handle everything.\n useEffect(() => {\n if (!wasOpen) {\n return\n }\n\n const thisModalState = modalState[documentDrawerSlug]\n // Exists in modalState (thus has opened at least once before) and is closed\n if (thisModalState && !thisModalState?.isOpen) {\n setWasOpen(false)\n setTimeout(() => {\n restoreSelection()\n }, 1)\n }\n }, [modalState, documentDrawerSlug, restoreSelection, wasOpen])\n\n return {\n closeDocumentDrawer,\n DocumentDrawer,\n documentDrawerSlug,\n DocumentDrawerToggler: (props) => <DocumentDrawerToggler {...props} onClick={storeSelection} />,\n }\n}\n"],"names":["useLexicalComposerContext","useDocumentDrawer","useModal","$getPreviousSelection","$getSelection","$setSelection","useCallback","useEffect","useState","useLexicalDocumentDrawer","args","editor","selectionState","setSelectionState","wasOpen","setWasOpen","DocumentDrawer","DocumentDrawerToggler","closeDrawer","drawerSlug","documentDrawerSlug","modalState","storeSelection","read","selection","restoreSelection","update","clone","discrete","skipTransforms","closeDocumentDrawer","thisModalState","isOpen","setTimeout","props","onClick"],"mappings":"AAAA
|
|
1
|
+
{"version":3,"sources":["../../../src/utilities/fieldsDrawer/useLexicalDocumentDrawer.tsx"],"sourcesContent":["'use client'\nimport type { UseDocumentDrawer } from '@payloadcms/ui'\nimport type { BaseSelection } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { useDocumentDrawer, useModal } from '@payloadcms/ui'\nimport { $getPreviousSelection, $getSelection, $setSelection } from 'lexical'\nimport { useCallback, useEffect, useState } from 'react'\n\n/**\n *\n * Wrapper around useDocumentDrawer that restores and saves selection state (cursor position) when opening and closing the drawer.\n * By default, the lexical cursor position may be lost when opening a drawer and clicking somewhere on that drawer.\n */\nexport const useLexicalDocumentDrawer = (\n args: Parameters<UseDocumentDrawer>[0],\n): {\n closeDocumentDrawer: () => void\n DocumentDrawer: ReturnType<UseDocumentDrawer>[0]\n documentDrawerSlug: string\n DocumentDrawerToggler: ReturnType<UseDocumentDrawer>[1]\n} => {\n const [editor] = useLexicalComposerContext()\n const [selectionState, setSelectionState] = useState<BaseSelection | null>(null)\n const [wasOpen, setWasOpen] = useState<boolean>(false)\n\n const [\n DocumentDrawer,\n DocumentDrawerToggler,\n { closeDrawer: closeDrawer, drawerSlug: documentDrawerSlug },\n ] = useDocumentDrawer(args)\n const { modalState } = useModal()\n\n const storeSelection = useCallback(() => {\n editor.read(() => {\n const selection = $getSelection() ?? $getPreviousSelection()\n setSelectionState(selection)\n })\n setWasOpen(true)\n }, [editor])\n\n const restoreSelection = useCallback(() => {\n if (selectionState) {\n editor.update(\n () => {\n $setSelection(selectionState.clone())\n },\n { discrete: true, skipTransforms: true },\n )\n }\n }, [editor, selectionState])\n\n const closeDocumentDrawer = () => {\n //restoreSelection() // Should already be stored by the useEffect below\n closeDrawer()\n }\n\n // We need to handle drawer closing via a useEffect, as toggleDrawer / closeDrawer will not be triggered if the drawer\n // is closed by clicking outside of the drawer. This useEffect will handle everything.\n useEffect(() => {\n if (!wasOpen) {\n return\n }\n\n const thisModalState = modalState[documentDrawerSlug]\n // Exists in modalState (thus has opened at least once before) and is closed\n if (thisModalState && !thisModalState?.isOpen) {\n setWasOpen(false)\n setTimeout(() => {\n restoreSelection()\n }, 1)\n }\n }, [modalState, documentDrawerSlug, restoreSelection, wasOpen])\n\n return {\n closeDocumentDrawer,\n DocumentDrawer,\n documentDrawerSlug,\n DocumentDrawerToggler: (props) => <DocumentDrawerToggler {...props} onClick={storeSelection} />,\n }\n}\n"],"names":["useLexicalComposerContext","useDocumentDrawer","useModal","$getPreviousSelection","$getSelection","$setSelection","useCallback","useEffect","useState","useLexicalDocumentDrawer","args","editor","selectionState","setSelectionState","wasOpen","setWasOpen","DocumentDrawer","DocumentDrawerToggler","closeDrawer","drawerSlug","documentDrawerSlug","modalState","storeSelection","read","selection","restoreSelection","update","clone","discrete","skipTransforms","closeDocumentDrawer","thisModalState","isOpen","setTimeout","props","onClick"],"mappings":"AAAA;AAIA,SAASA,yBAAyB,QAAQ,wCAAuC;AACjF,SAASC,iBAAiB,EAAEC,QAAQ,QAAQ,iBAAgB;AAC5D,SAASC,qBAAqB,EAAEC,aAAa,EAAEC,aAAa,QAAQ,UAAS;AAC7E,SAASC,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,QAAO;AAExD;;;;CAIC,GACD,OAAO,MAAMC,2BAA2B,CACtCC;IAOA,MAAM,CAACC,OAAO,GAAGX;IACjB,MAAM,CAACY,gBAAgBC,kBAAkB,GAAGL,SAA+B;IAC3E,MAAM,CAACM,SAASC,WAAW,GAAGP,SAAkB;IAEhD,MAAM,CACJQ,gBACAC,uBACA,EAAEC,aAAaA,WAAW,EAAEC,YAAYC,kBAAkB,EAAE,CAC7D,GAAGnB,kBAAkBS;IACtB,MAAM,EAAEW,UAAU,EAAE,GAAGnB;IAEvB,MAAMoB,iBAAiBhB,YAAY;QACjCK,OAAOY,IAAI,CAAC;YACV,MAAMC,YAAYpB,mBAAmBD;YACrCU,kBAAkBW;QACpB;QACAT,WAAW;IACb,GAAG;QAACJ;KAAO;IAEX,MAAMc,mBAAmBnB,YAAY;QACnC,IAAIM,gBAAgB;YAClBD,OAAOe,MAAM,CACX;gBACErB,cAAcO,eAAee,KAAK;YACpC,GACA;gBAAEC,UAAU;gBAAMC,gBAAgB;YAAK;QAE3C;IACF,GAAG;QAAClB;QAAQC;KAAe;IAE3B,MAAMkB,sBAAsB;QAC1B,uEAAuE;QACvEZ;IACF;IAEA,sHAAsH;IACtH,sFAAsF;IACtFX,UAAU;QACR,IAAI,CAACO,SAAS;YACZ;QACF;QAEA,MAAMiB,iBAAiBV,UAAU,CAACD,mBAAmB;QACrD,4EAA4E;QAC5E,IAAIW,kBAAkB,CAACA,gBAAgBC,QAAQ;YAC7CjB,WAAW;YACXkB,WAAW;gBACTR;YACF,GAAG;QACL;IACF,GAAG;QAACJ;QAAYD;QAAoBK;QAAkBX;KAAQ;IAE9D,OAAO;QACLgB;QACAd;QACAI;QACAH,uBAAuB,CAACiB,SAAWjB,uBAAuB,GAAGiB,KAAK,EAAEC,SAASb;IAC/E;AACF,EAAC"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { jsxDEV as _jsxDEV } from "react/jsx-dev-runtime";
|
|
3
2
|
import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
|
|
4
3
|
import { useListDrawer, useModal } from '@payloadcms/ui';
|
|
5
4
|
import { $getNodeByKey, $getPreviousSelection, $getRoot, $getSelection, $isRangeSelection, $setSelection } from 'lexical';
|
|
@@ -71,16 +70,9 @@ import { useCallback, useEffect, useState } from 'react';
|
|
|
71
70
|
isListDrawerOpen: isDrawerOpen,
|
|
72
71
|
ListDrawer: BaseListDrawer,
|
|
73
72
|
listDrawerSlug,
|
|
74
|
-
ListDrawerToggler: (props)
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
$storeSelection();
|
|
78
|
-
}
|
|
79
|
-
}, void 0, false, {
|
|
80
|
-
fileName: "src/utilities/fieldsDrawer/useLexicalListDrawer.tsx",
|
|
81
|
-
lineNumber: 103,
|
|
82
|
-
columnNumber: 7
|
|
83
|
-
}, this),
|
|
73
|
+
ListDrawerToggler: (props)=><BaseListDrawerToggler {...props} onClick={()=>{
|
|
74
|
+
$storeSelection();
|
|
75
|
+
}}/>,
|
|
84
76
|
openListDrawer: ()=>{
|
|
85
77
|
$storeSelection();
|
|
86
78
|
baseOpenDrawer();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/utilities/fieldsDrawer/useLexicalListDrawer.tsx"],"sourcesContent":["'use client'\nimport type { UseListDrawer } from '@payloadcms/ui'\nimport type { BaseSelection } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { useListDrawer, useModal } from '@payloadcms/ui'\nimport {\n $getNodeByKey,\n $getPreviousSelection,\n $getRoot,\n $getSelection,\n $isRangeSelection,\n $setSelection,\n} from 'lexical'\nimport { useCallback, useEffect, useState } from 'react'\n\n/**\n *\n * Wrapper around useListDrawer that restores and saves selection state (cursor position) when opening and closing the drawer.\n * By default, the lexical cursor position may be lost when opening a drawer and clicking somewhere on that drawer.\n */\nexport const useLexicalListDrawer = (\n args: Parameters<UseListDrawer>[0],\n): {\n closeListDrawer: () => void\n isListDrawerOpen: boolean\n ListDrawer: ReturnType<UseListDrawer>[0]\n listDrawerSlug: string\n ListDrawerToggler: ReturnType<UseListDrawer>[1]\n openListDrawer: (selection?: BaseSelection) => void\n} => {\n const [editor] = useLexicalComposerContext()\n const [selectionState, setSelectionState] = useState<BaseSelection | null>(null)\n const [wasOpen, setWasOpen] = useState<boolean>(false)\n\n const [\n BaseListDrawer,\n BaseListDrawerToggler,\n {\n closeDrawer: baseCloseDrawer,\n drawerSlug: listDrawerSlug,\n isDrawerOpen,\n openDrawer: baseOpenDrawer,\n },\n ] = useListDrawer(args)\n const { modalState } = useModal()\n\n const $storeSelection = useCallback(() => {\n // editor.read() causes an error here when creating a new upload node from the slash menu. It seems like we can omit it here though, as all\n // invocations of that functions are wrapped in editor.read() or editor.update() somewhere in the call stack.\n const selection = $getSelection() ?? $getPreviousSelection()\n setSelectionState(selection)\n }, [])\n\n const restoreSelection = useCallback(() => {\n if (selectionState) {\n editor.update(\n () => {\n if ($isRangeSelection(selectionState)) {\n const { anchor, focus } = selectionState\n if ($getNodeByKey(anchor.key) && $getNodeByKey(focus.key)) {\n $setSelection(selectionState.clone())\n }\n } else {\n // not ideal, but better than losing the selection. Try to set the selection\n // in a valid place if you remove selected nodes!\n $getRoot().selectEnd()\n }\n },\n { discrete: true, skipTransforms: true },\n )\n }\n }, [editor, selectionState])\n\n const closeListDrawer = () => {\n //restoreSelection() // Should already be stored by the useEffect below\n baseCloseDrawer()\n }\n\n // We need to handle drawer closing via a useEffect, as toggleDrawer / closeDrawer will not be triggered if the drawer\n // is closed by clicking outside of the drawer. This useEffect will handle everything.\n useEffect(() => {\n if (!wasOpen) {\n return\n }\n\n const thisModalState = modalState[listDrawerSlug]\n // Exists in modalState (thus has opened at least once before) and is closed\n if (thisModalState && !thisModalState?.isOpen) {\n setWasOpen(false)\n setTimeout(() => {\n restoreSelection()\n }, 1)\n }\n }, [modalState, listDrawerSlug, restoreSelection, wasOpen])\n\n return {\n closeListDrawer,\n isListDrawerOpen: isDrawerOpen,\n ListDrawer: BaseListDrawer,\n listDrawerSlug,\n ListDrawerToggler: (props) => (\n <BaseListDrawerToggler\n {...props}\n onClick={() => {\n $storeSelection()\n }}\n />\n ),\n openListDrawer: () => {\n $storeSelection()\n baseOpenDrawer()\n setWasOpen(true)\n },\n }\n}\n"],"names":["useLexicalComposerContext","useListDrawer","useModal","$getNodeByKey","$getPreviousSelection","$getRoot","$getSelection","$isRangeSelection","$setSelection","useCallback","useEffect","useState","useLexicalListDrawer","args","editor","selectionState","setSelectionState","wasOpen","setWasOpen","BaseListDrawer","BaseListDrawerToggler","closeDrawer","baseCloseDrawer","drawerSlug","listDrawerSlug","isDrawerOpen","openDrawer","baseOpenDrawer","modalState","$storeSelection","selection","restoreSelection","update","anchor","focus","key","clone","selectEnd","discrete","skipTransforms","closeListDrawer","thisModalState","isOpen","setTimeout","isListDrawerOpen","ListDrawer","ListDrawerToggler","props","onClick","openListDrawer"],"mappings":"AAAA
|
|
1
|
+
{"version":3,"sources":["../../../src/utilities/fieldsDrawer/useLexicalListDrawer.tsx"],"sourcesContent":["'use client'\nimport type { UseListDrawer } from '@payloadcms/ui'\nimport type { BaseSelection } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { useListDrawer, useModal } from '@payloadcms/ui'\nimport {\n $getNodeByKey,\n $getPreviousSelection,\n $getRoot,\n $getSelection,\n $isRangeSelection,\n $setSelection,\n} from 'lexical'\nimport { useCallback, useEffect, useState } from 'react'\n\n/**\n *\n * Wrapper around useListDrawer that restores and saves selection state (cursor position) when opening and closing the drawer.\n * By default, the lexical cursor position may be lost when opening a drawer and clicking somewhere on that drawer.\n */\nexport const useLexicalListDrawer = (\n args: Parameters<UseListDrawer>[0],\n): {\n closeListDrawer: () => void\n isListDrawerOpen: boolean\n ListDrawer: ReturnType<UseListDrawer>[0]\n listDrawerSlug: string\n ListDrawerToggler: ReturnType<UseListDrawer>[1]\n openListDrawer: (selection?: BaseSelection) => void\n} => {\n const [editor] = useLexicalComposerContext()\n const [selectionState, setSelectionState] = useState<BaseSelection | null>(null)\n const [wasOpen, setWasOpen] = useState<boolean>(false)\n\n const [\n BaseListDrawer,\n BaseListDrawerToggler,\n {\n closeDrawer: baseCloseDrawer,\n drawerSlug: listDrawerSlug,\n isDrawerOpen,\n openDrawer: baseOpenDrawer,\n },\n ] = useListDrawer(args)\n const { modalState } = useModal()\n\n const $storeSelection = useCallback(() => {\n // editor.read() causes an error here when creating a new upload node from the slash menu. It seems like we can omit it here though, as all\n // invocations of that functions are wrapped in editor.read() or editor.update() somewhere in the call stack.\n const selection = $getSelection() ?? $getPreviousSelection()\n setSelectionState(selection)\n }, [])\n\n const restoreSelection = useCallback(() => {\n if (selectionState) {\n editor.update(\n () => {\n if ($isRangeSelection(selectionState)) {\n const { anchor, focus } = selectionState\n if ($getNodeByKey(anchor.key) && $getNodeByKey(focus.key)) {\n $setSelection(selectionState.clone())\n }\n } else {\n // not ideal, but better than losing the selection. Try to set the selection\n // in a valid place if you remove selected nodes!\n $getRoot().selectEnd()\n }\n },\n { discrete: true, skipTransforms: true },\n )\n }\n }, [editor, selectionState])\n\n const closeListDrawer = () => {\n //restoreSelection() // Should already be stored by the useEffect below\n baseCloseDrawer()\n }\n\n // We need to handle drawer closing via a useEffect, as toggleDrawer / closeDrawer will not be triggered if the drawer\n // is closed by clicking outside of the drawer. This useEffect will handle everything.\n useEffect(() => {\n if (!wasOpen) {\n return\n }\n\n const thisModalState = modalState[listDrawerSlug]\n // Exists in modalState (thus has opened at least once before) and is closed\n if (thisModalState && !thisModalState?.isOpen) {\n setWasOpen(false)\n setTimeout(() => {\n restoreSelection()\n }, 1)\n }\n }, [modalState, listDrawerSlug, restoreSelection, wasOpen])\n\n return {\n closeListDrawer,\n isListDrawerOpen: isDrawerOpen,\n ListDrawer: BaseListDrawer,\n listDrawerSlug,\n ListDrawerToggler: (props) => (\n <BaseListDrawerToggler\n {...props}\n onClick={() => {\n $storeSelection()\n }}\n />\n ),\n openListDrawer: () => {\n $storeSelection()\n baseOpenDrawer()\n setWasOpen(true)\n },\n }\n}\n"],"names":["useLexicalComposerContext","useListDrawer","useModal","$getNodeByKey","$getPreviousSelection","$getRoot","$getSelection","$isRangeSelection","$setSelection","useCallback","useEffect","useState","useLexicalListDrawer","args","editor","selectionState","setSelectionState","wasOpen","setWasOpen","BaseListDrawer","BaseListDrawerToggler","closeDrawer","baseCloseDrawer","drawerSlug","listDrawerSlug","isDrawerOpen","openDrawer","baseOpenDrawer","modalState","$storeSelection","selection","restoreSelection","update","anchor","focus","key","clone","selectEnd","discrete","skipTransforms","closeListDrawer","thisModalState","isOpen","setTimeout","isListDrawerOpen","ListDrawer","ListDrawerToggler","props","onClick","openListDrawer"],"mappings":"AAAA;AAIA,SAASA,yBAAyB,QAAQ,wCAAuC;AACjF,SAASC,aAAa,EAAEC,QAAQ,QAAQ,iBAAgB;AACxD,SACEC,aAAa,EACbC,qBAAqB,EACrBC,QAAQ,EACRC,aAAa,EACbC,iBAAiB,EACjBC,aAAa,QACR,UAAS;AAChB,SAASC,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,QAAO;AAExD;;;;CAIC,GACD,OAAO,MAAMC,uBAAuB,CAClCC;IASA,MAAM,CAACC,OAAO,GAAGd;IACjB,MAAM,CAACe,gBAAgBC,kBAAkB,GAAGL,SAA+B;IAC3E,MAAM,CAACM,SAASC,WAAW,GAAGP,SAAkB;IAEhD,MAAM,CACJQ,gBACAC,uBACA,EACEC,aAAaC,eAAe,EAC5BC,YAAYC,cAAc,EAC1BC,YAAY,EACZC,YAAYC,cAAc,EAC3B,CACF,GAAG1B,cAAcY;IAClB,MAAM,EAAEe,UAAU,EAAE,GAAG1B;IAEvB,MAAM2B,kBAAkBpB,YAAY;QAClC,2IAA2I;QAC3I,6GAA6G;QAC7G,MAAMqB,YAAYxB,mBAAmBF;QACrCY,kBAAkBc;IACpB,GAAG,EAAE;IAEL,MAAMC,mBAAmBtB,YAAY;QACnC,IAAIM,gBAAgB;YAClBD,OAAOkB,MAAM,CACX;gBACE,IAAIzB,kBAAkBQ,iBAAiB;oBACrC,MAAM,EAAEkB,MAAM,EAAEC,KAAK,EAAE,GAAGnB;oBAC1B,IAAIZ,cAAc8B,OAAOE,GAAG,KAAKhC,cAAc+B,MAAMC,GAAG,GAAG;wBACzD3B,cAAcO,eAAeqB,KAAK;oBACpC;gBACF,OAAO;oBACL,4EAA4E;oBAC5E,iDAAiD;oBACjD/B,WAAWgC,SAAS;gBACtB;YACF,GACA;gBAAEC,UAAU;gBAAMC,gBAAgB;YAAK;QAE3C;IACF,GAAG;QAACzB;QAAQC;KAAe;IAE3B,MAAMyB,kBAAkB;QACtB,uEAAuE;QACvElB;IACF;IAEA,sHAAsH;IACtH,sFAAsF;IACtFZ,UAAU;QACR,IAAI,CAACO,SAAS;YACZ;QACF;QAEA,MAAMwB,iBAAiBb,UAAU,CAACJ,eAAe;QACjD,4EAA4E;QAC5E,IAAIiB,kBAAkB,CAACA,gBAAgBC,QAAQ;YAC7CxB,WAAW;YACXyB,WAAW;gBACTZ;YACF,GAAG;QACL;IACF,GAAG;QAACH;QAAYJ;QAAgBO;QAAkBd;KAAQ;IAE1D,OAAO;QACLuB;QACAI,kBAAkBnB;QAClBoB,YAAY1B;QACZK;QACAsB,mBAAmB,CAACC,SACjB3B,uBACE,GAAG2B,KAAK,EACTC,SAAS;gBACPnB;YACF;QAGJoB,gBAAgB;YACdpB;YACAF;YACAT,WAAW;QACb;IACF;AACF,EAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@payloadcms/richtext-lexical",
|
|
3
|
-
"version": "3.68.0-internal-debug.
|
|
3
|
+
"version": "3.68.0-internal-debug.e9b66ee",
|
|
4
4
|
"description": "The officially supported Lexical richtext adapter for Payload",
|
|
5
5
|
"homepage": "https://payloadcms.com",
|
|
6
6
|
"repository": {
|
|
@@ -374,8 +374,8 @@
|
|
|
374
374
|
"react-error-boundary": "4.1.2",
|
|
375
375
|
"ts-essentials": "10.0.3",
|
|
376
376
|
"uuid": "10.0.0",
|
|
377
|
-
"@payloadcms/translations": "3.68.0-internal-debug.
|
|
378
|
-
"@payloadcms/ui": "3.68.0-internal-debug.
|
|
377
|
+
"@payloadcms/translations": "3.68.0-internal-debug.e9b66ee",
|
|
378
|
+
"@payloadcms/ui": "3.68.0-internal-debug.e9b66ee"
|
|
379
379
|
},
|
|
380
380
|
"devDependencies": {
|
|
381
381
|
"@babel/cli": "7.27.2",
|
|
@@ -393,17 +393,17 @@
|
|
|
393
393
|
"babel-plugin-transform-remove-imports": "^1.8.0",
|
|
394
394
|
"esbuild": "0.25.5",
|
|
395
395
|
"esbuild-sass-plugin": "3.3.1",
|
|
396
|
-
"swc-plugin-transform-remove-imports": "
|
|
396
|
+
"swc-plugin-transform-remove-imports": "8.3.0",
|
|
397
397
|
"@payloadcms/eslint-config": "3.28.0",
|
|
398
|
-
"payload": "3.68.0-internal-debug.
|
|
398
|
+
"payload": "3.68.0-internal-debug.e9b66ee"
|
|
399
399
|
},
|
|
400
400
|
"peerDependencies": {
|
|
401
401
|
"@faceless-ui/modal": "3.0.0",
|
|
402
402
|
"@faceless-ui/scroll-info": "2.0.0",
|
|
403
403
|
"react": "^19.0.1 || ^19.1.2 || ^19.2.1",
|
|
404
404
|
"react-dom": "^19.0.1 || ^19.1.2 || ^19.2.1",
|
|
405
|
-
"
|
|
406
|
-
"
|
|
405
|
+
"@payloadcms/next": "3.68.0-internal-debug.e9b66ee",
|
|
406
|
+
"payload": "3.68.0-internal-debug.e9b66ee"
|
|
407
407
|
},
|
|
408
408
|
"engines": {
|
|
409
409
|
"node": "^18.20.2 || >=20.9.0"
|