@payloadcms/richtext-lexical 3.68.0-internal-debug.2eb12b9 → 3.68.0-internal-debug.dafc24d
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 +13 -5
- package/dist/cell/rscEntry.js.map +1 -1
- package/dist/features/blocks/client/component/BlockContent.js +29 -9
- package/dist/features/blocks/client/component/BlockContent.js.map +1 -1
- package/dist/features/blocks/client/component/components/BlockCollapsible.js +7 -3
- package/dist/features/blocks/client/component/components/BlockCollapsible.js.map +1 -1
- package/dist/features/blocks/client/component/components/BlockEditButton.js +6 -2
- package/dist/features/blocks/client/component/components/BlockEditButton.js.map +1 -1
- package/dist/features/blocks/client/component/components/BlockRemoveButton.js +6 -2
- package/dist/features/blocks/client/component/components/BlockRemoveButton.js.map +1 -1
- package/dist/features/blocks/client/component/index.js +124 -43
- package/dist/features/blocks/client/component/index.js.map +1 -1
- package/dist/features/blocks/client/component/index.scss +188 -0
- package/dist/features/blocks/client/componentInline/components/InlineBlockContainer.js +7 -3
- package/dist/features/blocks/client/componentInline/components/InlineBlockContainer.js.map +1 -1
- package/dist/features/blocks/client/componentInline/components/InlineBlockEditButton.js +6 -2
- package/dist/features/blocks/client/componentInline/components/InlineBlockEditButton.js.map +1 -1
- package/dist/features/blocks/client/componentInline/components/InlineBlockLabel.js +6 -2
- package/dist/features/blocks/client/componentInline/components/InlineBlockLabel.js.map +1 -1
- package/dist/features/blocks/client/componentInline/components/InlineBlockRemoveButton.js +6 -2
- package/dist/features/blocks/client/componentInline/components/InlineBlockRemoveButton.js.map +1 -1
- package/dist/features/blocks/client/componentInline/index.js +118 -37
- package/dist/features/blocks/client/componentInline/index.js.map +1 -1
- package/dist/features/blocks/client/componentInline/index.scss +90 -0
- package/dist/features/blocks/client/getBlockImageComponent.js +7 -3
- package/dist/features/blocks/client/getBlockImageComponent.js.map +1 -1
- package/dist/features/blocks/client/markdown/markdownTransformer.js +1 -0
- package/dist/features/blocks/client/markdown/markdownTransformer.js.map +1 -1
- package/dist/features/blocks/client/nodes/BlocksNode.js +7 -3
- package/dist/features/blocks/client/nodes/BlocksNode.js.map +1 -1
- package/dist/features/blocks/client/nodes/InlineBlocksNode.js +7 -3
- package/dist/features/blocks/client/nodes/InlineBlocksNode.js.map +1 -1
- package/dist/features/blocks/premade/CodeBlock/Component/Block.js +88 -27
- package/dist/features/blocks/premade/CodeBlock/Component/Block.js.map +1 -1
- package/dist/features/blocks/premade/CodeBlock/Component/Code.js +7 -3
- package/dist/features/blocks/premade/CodeBlock/Component/Code.js.map +1 -1
- package/dist/features/blocks/premade/CodeBlock/Component/Collapse/index.js +13 -4
- package/dist/features/blocks/premade/CodeBlock/Component/Collapse/index.js.map +1 -1
- package/dist/features/blocks/premade/CodeBlock/Component/Collapse/index.scss +6 -0
- package/dist/features/blocks/premade/CodeBlock/Component/FloatingCollapse/index.js +19 -6
- package/dist/features/blocks/premade/CodeBlock/Component/FloatingCollapse/index.js.map +1 -1
- package/dist/features/blocks/premade/CodeBlock/Component/FloatingCollapse/index.scss +29 -0
- package/dist/features/blocks/premade/CodeBlock/Component/index.scss +97 -0
- package/dist/features/blocks/server/markdown/markdownTransformer.js +1 -0
- package/dist/features/blocks/server/markdown/markdownTransformer.js.map +1 -1
- package/dist/features/converters/lexicalToJSX/Component/index.js +9 -5
- package/dist/features/converters/lexicalToJSX/Component/index.js.map +1 -1
- package/dist/features/converters/lexicalToJSX/converter/converters/blockquote.js +7 -3
- package/dist/features/converters/lexicalToJSX/converter/converters/blockquote.js.map +1 -1
- package/dist/features/converters/lexicalToJSX/converter/converters/heading.js +7 -3
- package/dist/features/converters/lexicalToJSX/converter/converters/heading.js.map +1 -1
- package/dist/features/converters/lexicalToJSX/converter/converters/horizontalRule.js +6 -2
- package/dist/features/converters/lexicalToJSX/converter/converters/horizontalRule.js.map +1 -1
- package/dist/features/converters/lexicalToJSX/converter/converters/linebreak.js +6 -2
- package/dist/features/converters/lexicalToJSX/converter/converters/linebreak.js.map +1 -1
- package/dist/features/converters/lexicalToJSX/converter/converters/link.js +13 -5
- package/dist/features/converters/lexicalToJSX/converter/converters/link.js.map +1 -1
- package/dist/features/converters/lexicalToJSX/converter/converters/list.js +38 -14
- package/dist/features/converters/lexicalToJSX/converter/converters/list.js.map +1 -1
- package/dist/features/converters/lexicalToJSX/converter/converters/paragraph.js +18 -6
- package/dist/features/converters/lexicalToJSX/converter/converters/paragraph.js.map +1 -1
- package/dist/features/converters/lexicalToJSX/converter/converters/table.js +31 -11
- package/dist/features/converters/lexicalToJSX/converter/converters/table.js.map +1 -1
- package/dist/features/converters/lexicalToJSX/converter/converters/text.js +43 -15
- package/dist/features/converters/lexicalToJSX/converter/converters/text.js.map +1 -1
- package/dist/features/converters/lexicalToJSX/converter/converters/upload.js +31 -11
- package/dist/features/converters/lexicalToJSX/converter/converters/upload.js.map +1 -1
- package/dist/features/converters/lexicalToJSX/converter/index.js +8 -4
- package/dist/features/converters/lexicalToJSX/converter/index.js.map +1 -1
- package/dist/features/debug/jsxConverter/client/plugin/index.js +14 -5
- package/dist/features/debug/jsxConverter/client/plugin/index.js.map +1 -1
- package/dist/features/debug/jsxConverter/client/plugin/style.scss +12 -0
- package/dist/features/debug/testRecorder/client/plugin/index.js +62 -21
- package/dist/features/debug/testRecorder/client/plugin/index.js.map +1 -1
- package/dist/features/debug/testRecorder/client/plugin/index.scss +53 -0
- package/dist/features/debug/treeView/client/plugin/index.js +8 -3
- package/dist/features/debug/treeView/client/plugin/index.js.map +1 -1
- package/dist/features/debug/treeView/client/plugin/index.scss +80 -0
- package/dist/features/experimental_table/client/plugins/TableActionMenuPlugin/index.js +225 -72
- package/dist/features/experimental_table/client/plugins/TableActionMenuPlugin/index.js.map +1 -1
- package/dist/features/experimental_table/client/plugins/TableActionMenuPlugin/index.scss +87 -0
- package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.js +32 -11
- package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.js.map +1 -1
- package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.scss +11 -0
- package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.js +21 -9
- package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.js.map +1 -1
- package/dist/features/experimental_table/client/plugins/TablePlugin/index.js +26 -9
- package/dist/features/experimental_table/client/plugins/TablePlugin/index.js.map +1 -1
- package/dist/features/experimental_table/client/plugins/TablePlugin/index.scss +233 -0
- package/dist/features/horizontalRule/client/plugin/index.js +1 -0
- package/dist/features/horizontalRule/client/plugin/index.js.map +1 -1
- package/dist/features/horizontalRule/client/plugin/index.scss +23 -0
- package/dist/features/indent/client/IndentPlugin.js +6 -2
- package/dist/features/indent/client/IndentPlugin.js.map +1 -1
- package/dist/features/link/client/plugins/autoLink/index.js +3 -0
- package/dist/features/link/client/plugins/autoLink/index.js.map +1 -1
- package/dist/features/link/client/plugins/clickableLink/index.js +6 -2
- package/dist/features/link/client/plugins/clickableLink/index.js.map +1 -1
- package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js +76 -24
- package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js.map +1 -1
- package/dist/features/link/client/plugins/floatingLinkEditor/index.js +8 -3
- package/dist/features/link/client/plugins/floatingLinkEditor/index.js.map +1 -1
- package/dist/features/link/client/plugins/floatingLinkEditor/index.scss +92 -0
- package/dist/features/link/server/baseFields.js +1 -0
- package/dist/features/link/server/baseFields.js.map +1 -1
- package/dist/features/lists/checklist/client/plugin/index.js +6 -2
- package/dist/features/lists/checklist/client/plugin/index.js.map +1 -1
- package/dist/features/lists/plugin/index.js +6 -2
- package/dist/features/lists/plugin/index.js.map +1 -1
- package/dist/features/migrations/lexicalPluginToLexical/nodes/unknownConvertedNode/Component.js +14 -5
- package/dist/features/migrations/lexicalPluginToLexical/nodes/unknownConvertedNode/Component.js.map +1 -1
- package/dist/features/migrations/lexicalPluginToLexical/nodes/unknownConvertedNode/index.js +7 -3
- package/dist/features/migrations/lexicalPluginToLexical/nodes/unknownConvertedNode/index.js.map +1 -1
- package/dist/features/migrations/lexicalPluginToLexical/nodes/unknownConvertedNode/index.scss +16 -0
- package/dist/features/migrations/slateToLexical/nodes/unknownConvertedNode/Component.js +14 -5
- package/dist/features/migrations/slateToLexical/nodes/unknownConvertedNode/Component.js.map +1 -1
- package/dist/features/migrations/slateToLexical/nodes/unknownConvertedNode/index.js +7 -3
- package/dist/features/migrations/slateToLexical/nodes/unknownConvertedNode/index.js.map +1 -1
- package/dist/features/migrations/slateToLexical/nodes/unknownConvertedNode/index.scss +16 -0
- package/dist/features/relationship/client/components/RelationshipComponent.js +56 -19
- package/dist/features/relationship/client/components/RelationshipComponent.js.map +1 -1
- package/dist/features/relationship/client/components/index.scss +95 -0
- package/dist/features/relationship/client/drawer/index.js +18 -6
- package/dist/features/relationship/client/drawer/index.js.map +1 -1
- package/dist/features/relationship/client/nodes/RelationshipNode.js +7 -3
- package/dist/features/relationship/client/nodes/RelationshipNode.js.map +1 -1
- package/dist/features/relationship/client/plugins/index.js +7 -3
- package/dist/features/relationship/client/plugins/index.js.map +1 -1
- package/dist/features/textState/feature.client.js +18 -6
- package/dist/features/textState/feature.client.js.map +1 -1
- package/dist/features/toolbars/fixed/client/Toolbar/index.js +72 -23
- package/dist/features/toolbars/fixed/client/Toolbar/index.js.map +1 -1
- package/dist/features/toolbars/fixed/client/Toolbar/index.scss +113 -0
- package/dist/features/toolbars/inline/client/Toolbar/index.js +72 -23
- package/dist/features/toolbars/inline/client/Toolbar/index.js.map +1 -1
- package/dist/features/toolbars/inline/client/Toolbar/index.scss +58 -0
- package/dist/features/toolbars/shared/ToolbarButton/index.js +8 -3
- package/dist/features/toolbars/shared/ToolbarButton/index.js.map +1 -1
- package/dist/features/toolbars/shared/ToolbarButton/index.scss +46 -0
- package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js +60 -20
- package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js.map +1 -1
- package/dist/features/toolbars/shared/ToolbarDropdown/index.js +37 -12
- package/dist/features/toolbars/shared/ToolbarDropdown/index.js.map +1 -1
- package/dist/features/toolbars/shared/ToolbarDropdown/index.scss +129 -0
- package/dist/features/upload/client/component/index.js +92 -31
- package/dist/features/upload/client/component/index.js.map +1 -1
- package/dist/features/upload/client/component/index.scss +191 -0
- package/dist/features/upload/client/component/pending/index.js +14 -5
- package/dist/features/upload/client/component/pending/index.js.map +1 -1
- package/dist/features/upload/client/drawer/index.js +18 -6
- package/dist/features/upload/client/drawer/index.js.map +1 -1
- package/dist/features/upload/client/nodes/UploadNode.js +12 -4
- package/dist/features/upload/client/nodes/UploadNode.js.map +1 -1
- package/dist/features/upload/client/plugin/index.js +7 -3
- package/dist/features/upload/client/plugin/index.js.map +1 -1
- package/dist/field/Diff/converters/listitem/index.js +37 -12
- package/dist/field/Diff/converters/listitem/index.js.map +1 -1
- package/dist/field/Diff/converters/listitem/index.scss +47 -0
- package/dist/field/Diff/converters/relationship/index.js +37 -12
- package/dist/field/Diff/converters/relationship/index.js.map +1 -1
- package/dist/field/Diff/converters/relationship/index.scss +73 -0
- package/dist/field/Diff/converters/unknown/index.js +31 -10
- package/dist/field/Diff/converters/unknown/index.js.map +1 -1
- package/dist/field/Diff/converters/unknown/index.scss +40 -0
- package/dist/field/Diff/converters/upload/index.js +60 -19
- package/dist/field/Diff/converters/upload/index.js.map +1 -1
- package/dist/field/Diff/converters/upload/index.scss +115 -0
- package/dist/field/Diff/index.js +8 -3
- package/dist/field/Diff/index.js.map +1 -1
- package/dist/field/Diff/index.scss +102 -0
- package/dist/field/Field.js +81 -27
- package/dist/field/Field.js.map +1 -1
- package/dist/field/RenderLexical/index.js +36 -12
- package/dist/field/RenderLexical/index.js.map +1 -1
- package/dist/field/index.js +19 -7
- package/dist/field/index.js.map +1 -1
- package/dist/field/index.scss +41 -0
- package/dist/field/rscEntry.js +7 -3
- package/dist/field/rscEntry.js.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/lexical/EditorPlugin.js +13 -5
- package/dist/lexical/EditorPlugin.js.map +1 -1
- package/dist/lexical/LexicalEditor.js +163 -50
- package/dist/lexical/LexicalEditor.js.map +1 -1
- package/dist/lexical/LexicalEditor.scss +54 -0
- package/dist/lexical/LexicalProvider.js +49 -17
- package/dist/lexical/LexicalProvider.js.map +1 -1
- package/dist/lexical/config/client/EditorConfigProvider.js +7 -3
- package/dist/lexical/config/client/EditorConfigProvider.js.map +1 -1
- package/dist/lexical/plugins/DecoratorPlugin/index.js +1 -0
- package/dist/lexical/plugins/DecoratorPlugin/index.js.map +1 -1
- package/dist/lexical/plugins/DecoratorPlugin/index.scss +13 -0
- package/dist/lexical/plugins/InsertParagraphAtEnd/index.js +20 -7
- package/dist/lexical/plugins/InsertParagraphAtEnd/index.js.map +1 -1
- package/dist/lexical/plugins/InsertParagraphAtEnd/index.scss +54 -0
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js +2 -0
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js.map +1 -1
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.js +7 -3
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.js.map +1 -1
- package/dist/lexical/plugins/SlashMenu/index.js +50 -16
- package/dist/lexical/plugins/SlashMenu/index.js.map +1 -1
- package/dist/lexical/plugins/SlashMenu/index.scss +68 -0
- package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.js +20 -7
- package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.js.map +1 -1
- package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.scss +35 -0
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js +32 -11
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js.map +1 -1
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.scss +80 -0
- package/dist/lexical/theme/EditorTheme.scss +357 -0
- package/dist/lexical/ui/ContentEditable.js +14 -5
- package/dist/lexical/ui/ContentEditable.js.map +1 -1
- package/dist/lexical/ui/ContentEditable.scss +105 -0
- package/dist/lexical/ui/icons/AI/index.js +37 -13
- package/dist/lexical/ui/icons/AI/index.js.map +1 -1
- package/dist/lexical/ui/icons/Add/index.js +19 -7
- package/dist/lexical/ui/icons/Add/index.js.map +1 -1
- package/dist/lexical/ui/icons/AlignCenter/index.js +25 -9
- package/dist/lexical/ui/icons/AlignCenter/index.js.map +1 -1
- package/dist/lexical/ui/icons/AlignJustify/index.js +25 -9
- package/dist/lexical/ui/icons/AlignJustify/index.js.map +1 -1
- package/dist/lexical/ui/icons/AlignLeft/index.js +25 -9
- package/dist/lexical/ui/icons/AlignLeft/index.js.map +1 -1
- package/dist/lexical/ui/icons/AlignRight/index.js +25 -9
- package/dist/lexical/ui/icons/AlignRight/index.js.map +1 -1
- package/dist/lexical/ui/icons/Block/index.js +25 -9
- package/dist/lexical/ui/icons/Block/index.js.map +1 -1
- package/dist/lexical/ui/icons/Blockquote/index.js +13 -5
- package/dist/lexical/ui/icons/Blockquote/index.js.map +1 -1
- package/dist/lexical/ui/icons/Bold/index.js +13 -5
- package/dist/lexical/ui/icons/Bold/index.js.map +1 -1
- package/dist/lexical/ui/icons/Checklist/index.js +19 -7
- package/dist/lexical/ui/icons/Checklist/index.js.map +1 -1
- package/dist/lexical/ui/icons/Code/index.js +19 -7
- package/dist/lexical/ui/icons/Code/index.js.map +1 -1
- package/dist/lexical/ui/icons/CodeBlock/index.js +13 -5
- package/dist/lexical/ui/icons/CodeBlock/index.js.map +1 -1
- package/dist/lexical/ui/icons/Collapse/index.js +13 -5
- package/dist/lexical/ui/icons/Collapse/index.js.map +1 -1
- package/dist/lexical/ui/icons/H1/index.js +13 -5
- package/dist/lexical/ui/icons/H1/index.js.map +1 -1
- package/dist/lexical/ui/icons/H2/index.js +13 -5
- package/dist/lexical/ui/icons/H2/index.js.map +1 -1
- package/dist/lexical/ui/icons/H3/index.js +13 -5
- package/dist/lexical/ui/icons/H3/index.js.map +1 -1
- package/dist/lexical/ui/icons/H4/index.js +13 -5
- package/dist/lexical/ui/icons/H4/index.js.map +1 -1
- package/dist/lexical/ui/icons/H5/index.js +13 -5
- package/dist/lexical/ui/icons/H5/index.js.map +1 -1
- package/dist/lexical/ui/icons/H6/index.js +13 -5
- package/dist/lexical/ui/icons/H6/index.js.map +1 -1
- package/dist/lexical/ui/icons/HorizontalRule/index.js +13 -5
- package/dist/lexical/ui/icons/HorizontalRule/index.js.map +1 -1
- package/dist/lexical/ui/icons/IndentDecrease/index.js +31 -11
- package/dist/lexical/ui/icons/IndentDecrease/index.js.map +1 -1
- package/dist/lexical/ui/icons/IndentIncrease/index.js +31 -11
- package/dist/lexical/ui/icons/IndentIncrease/index.js.map +1 -1
- package/dist/lexical/ui/icons/InlineBlocks/index.js +13 -5
- package/dist/lexical/ui/icons/InlineBlocks/index.js.map +1 -1
- package/dist/lexical/ui/icons/Italic/index.js +13 -5
- package/dist/lexical/ui/icons/Italic/index.js.map +1 -1
- package/dist/lexical/ui/icons/Link/index.js +13 -5
- package/dist/lexical/ui/icons/Link/index.js.map +1 -1
- package/dist/lexical/ui/icons/Meatballs/index.js +25 -9
- package/dist/lexical/ui/icons/Meatballs/index.js.map +1 -1
- package/dist/lexical/ui/icons/OrderedList/index.js +37 -13
- package/dist/lexical/ui/icons/OrderedList/index.js.map +1 -1
- package/dist/lexical/ui/icons/Relationship/index.js +37 -13
- package/dist/lexical/ui/icons/Relationship/index.js.map +1 -1
- package/dist/lexical/ui/icons/Strikethrough/index.js +19 -7
- package/dist/lexical/ui/icons/Strikethrough/index.js.map +1 -1
- package/dist/lexical/ui/icons/Subscript/index.js +13 -5
- package/dist/lexical/ui/icons/Subscript/index.js.map +1 -1
- package/dist/lexical/ui/icons/Superscript/index.js +13 -5
- package/dist/lexical/ui/icons/Superscript/index.js.map +1 -1
- package/dist/lexical/ui/icons/Table/index.js +13 -5
- package/dist/lexical/ui/icons/Table/index.js.map +1 -1
- package/dist/lexical/ui/icons/Text/index.js +13 -5
- package/dist/lexical/ui/icons/Text/index.js.map +1 -1
- package/dist/lexical/ui/icons/TextState/index.js +7 -3
- package/dist/lexical/ui/icons/TextState/index.js.map +1 -1
- package/dist/lexical/ui/icons/Underline/index.js +19 -7
- package/dist/lexical/ui/icons/Underline/index.js.map +1 -1
- package/dist/lexical/ui/icons/UnorderedList/index.js +43 -15
- package/dist/lexical/ui/icons/UnorderedList/index.js.map +1 -1
- package/dist/lexical/ui/icons/Upload/index.js +25 -9
- package/dist/lexical/ui/icons/Upload/index.js.map +1 -1
- package/dist/packages/@lexical/markdown/MarkdownShortcuts.js +2 -0
- package/dist/packages/@lexical/markdown/MarkdownShortcuts.js.map +1 -1
- package/dist/packages/@lexical/markdown/importTextFormatTransformer.js +2 -0
- package/dist/packages/@lexical/markdown/importTextFormatTransformer.js.map +1 -1
- package/dist/packages/@lexical/markdown/importTextMatchTransformer.js +2 -0
- package/dist/packages/@lexical/markdown/importTextMatchTransformer.js.map +1 -1
- package/dist/utilities/fieldsDrawer/Drawer.js +19 -7
- package/dist/utilities/fieldsDrawer/Drawer.js.map +1 -1
- package/dist/utilities/fieldsDrawer/DrawerContent.js +19 -7
- package/dist/utilities/fieldsDrawer/DrawerContent.js.map +1 -1
- package/dist/utilities/fieldsDrawer/useLexicalDocumentDrawer.js +7 -3
- package/dist/utilities/fieldsDrawer/useLexicalDocumentDrawer.js.map +1 -1
- package/dist/utilities/fieldsDrawer/useLexicalListDrawer.js +7 -3
- package/dist/utilities/fieldsDrawer/useLexicalListDrawer.js.map +1 -1
- package/dist/utilities/migrateSlateToLexical/migrateDocumentFieldsRecursively.js +2 -0
- package/dist/utilities/migrateSlateToLexical/migrateDocumentFieldsRecursively.js.map +1 -1
- package/dist/utilities/upgradeLexicalData/upgradeDocumentFieldsRecursively.js +2 -0
- package/dist/utilities/upgradeLexicalData/upgradeDocumentFieldsRecursively.js.map +1 -1
- package/package.json +8 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/features/blocks/client/markdown/markdownTransformer.ts"],"sourcesContent":["import type { ClientBlock } from 'payload'\n\nimport {\n $parseSerializedNode,\n type ElementNode,\n type Klass,\n type LexicalNode,\n type LexicalNodeReplacement,\n type SerializedLexicalNode,\n} from 'lexical'\n\nimport type { Transformer } from '../../../../packages/@lexical/markdown/index.js'\nimport type {\n MultilineElementTransformer,\n TextMatchTransformer,\n} from '../../../../packages/@lexical/markdown/MarkdownTransformers.js'\n\nimport { extractPropsFromJSXPropsString } from '../../../../utilities/jsx/extractPropsFromJSXPropsString.js'\nimport { propsToJSXString } from '../../../../utilities/jsx/jsx.js'\nimport { linesFromStartToContentAndPropsString } from '../../server/markdown/linesFromMatchToContentAndPropsString.js'\nimport { $createBlockNode, $isBlockNode, BlockNode } from '../nodes/BlocksNode.js'\nimport {\n $createInlineBlockNode,\n $isInlineBlockNode,\n InlineBlockNode,\n} from '../nodes/InlineBlocksNode.js'\nimport { getLexicalToMarkdown } from './getLexicalToMarkdown.js'\nimport { getMarkdownToLexical } from './getMarkdownToLexical.js'\n\nfunction createTagRegexes(tagName: string) {\n const escapedTagName = tagName.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n return {\n regExpEnd: new RegExp(`</(${escapedTagName})\\\\s*>|<${escapedTagName}[^>]*?/>`, 'i'),\n regExpStart: new RegExp(`<(${escapedTagName})([^>]*?)\\\\s*(/?)>`, 'i'),\n }\n}\nexport const getBlockMarkdownTransformers = ({\n blocks,\n inlineBlocks,\n}: {\n blocks: ClientBlock[]\n inlineBlocks: ClientBlock[]\n}): ((props: {\n allNodes: Array<Klass<LexicalNode> | LexicalNodeReplacement>\n allTransformers: Transformer[]\n}) => MultilineElementTransformer | TextMatchTransformer)[] => {\n if (!blocks?.length && !inlineBlocks?.length) {\n return []\n }\n let transformers: ((props: {\n allNodes: Array<Klass<LexicalNode> | LexicalNodeReplacement>\n allTransformers: Transformer[]\n }) => MultilineElementTransformer | TextMatchTransformer)[] = []\n\n if (blocks?.length) {\n for (const block of blocks) {\n const transformer = getMarkdownTransformerForBlock(block, false)\n\n if (transformer) {\n transformers = transformers.concat(transformer)\n }\n }\n }\n\n if (inlineBlocks?.length) {\n for (const block of inlineBlocks) {\n const transformer = getMarkdownTransformerForBlock(block, true)\n\n if (transformer) {\n transformers = transformers.concat(transformer)\n }\n }\n }\n\n return transformers\n}\n\nfunction getMarkdownTransformerForBlock(\n block: ClientBlock,\n isInlineBlock: boolean,\n): Array<\n (props: {\n allNodes: Array<Klass<LexicalNode> | LexicalNodeReplacement>\n allTransformers: Transformer[]\n }) => MultilineElementTransformer | TextMatchTransformer\n> | null {\n if (!block.jsx) {\n return null\n }\n const regex = createTagRegexes(block.slug)\n const toReturn: Array<\n (props: {\n allNodes: Array<Klass<LexicalNode> | LexicalNodeReplacement>\n allTransformers: Transformer[]\n }) => MultilineElementTransformer | TextMatchTransformer\n > = []\n\n if (isInlineBlock) {\n toReturn.push(({ allNodes, allTransformers }) => ({\n type: 'text-match',\n dependencies: [InlineBlockNode],\n export: (node) => {\n if (!$isInlineBlockNode(node)) {\n return null\n }\n\n if (node.getFields()?.blockType?.toLowerCase() !== block.slug.toLowerCase()) {\n return null\n }\n\n const nodeFields = node.getFields()\n const lexicalToMarkdown = getLexicalToMarkdown(allNodes, allTransformers)\n\n const exportResult = block.jsx!.export({\n fields: nodeFields,\n lexicalToMarkdown,\n })\n if (exportResult === false) {\n return null\n }\n if (typeof exportResult === 'string') {\n return exportResult\n }\n\n const hasProps = exportResult.props && Object.keys(exportResult.props)?.length > 0\n const props = exportResult.props ?? {}\n\n if (exportResult?.children?.length) {\n return `<${nodeFields.blockType}${hasProps ? ' ' + propsToJSXString({ props }) : ''}>${exportResult.children}</${nodeFields.blockType}>`\n }\n\n return `<${nodeFields.blockType}${hasProps ? ' ' + propsToJSXString({ props }) : ''}/>`\n },\n getEndIndex: (node, match) => {\n const { endlineLastCharIndex } = linesFromStartToContentAndPropsString({\n isEndOptional: false,\n lines: [node.getTextContent()],\n regexpEndRegex: regex.regExpEnd,\n startLineIndex: 0,\n startMatch: match,\n trimChildren: false,\n })\n\n return endlineLastCharIndex\n },\n importRegExp: block.jsx?.customStartRegex ?? regex.regExpStart,\n regExp: /___ignoreignoreignore___/g,\n replace(node, match) {\n const { content, propsString } = linesFromStartToContentAndPropsString({\n isEndOptional: false,\n lines: [node.getTextContent()],\n regexpEndRegex: regex.regExpEnd,\n startLineIndex: 0,\n startMatch: {\n ...match,\n index: 0,\n },\n trimChildren: false,\n })\n\n if (!block?.jsx?.import) {\n // No multiline transformer handled this line successfully\n return\n }\n\n const markdownToLexical = getMarkdownToLexical(allNodes, allTransformers)\n\n const blockFields = block.jsx.import({\n children: content,\n closeMatch: null,\n htmlToLexical: null, // TODO\n markdownToLexical,\n openMatch: match,\n props: propsString\n ? extractPropsFromJSXPropsString({\n propsString,\n })\n : {},\n })\n if (blockFields === false) {\n return\n }\n\n const inlineBlockNode = $createInlineBlockNode({\n blockType: block.slug,\n ...(blockFields as any),\n })\n\n node.replace(inlineBlockNode)\n },\n }))\n\n return toReturn\n }\n\n toReturn.push(({ allNodes, allTransformers }) => ({\n dependencies: [BlockNode],\n export: (node) => {\n if (!$isBlockNode(node)) {\n return null\n }\n\n if (node.getFields()?.blockType?.toLowerCase() !== block.slug.toLowerCase()) {\n return null\n }\n\n const nodeFields = node.getFields()\n const lexicalToMarkdown = getLexicalToMarkdown(allNodes, allTransformers)\n\n const exportResult = block.jsx!.export({\n fields: nodeFields,\n lexicalToMarkdown,\n })\n if (exportResult === false) {\n return null\n }\n if (typeof exportResult === 'string') {\n return exportResult\n }\n\n const hasProps = exportResult.props && Object.keys(exportResult.props)?.length > 0\n const props = exportResult.props ?? {}\n\n if (exportResult?.children?.length) {\n const children = exportResult.children\n let sanitizedChildren = ''\n\n // Ensure it has a leftpad of at least 2 spaces. The data is saved without those spaces, so we can just blindly add it to every child\n if (children.includes('\\n')) {\n for (const child of children.split('\\n')) {\n let sanitizedChild = ''\n if (!block?.jsx?.doNotTrimChildren && child !== '') {\n sanitizedChild = ' '\n }\n sanitizedChild += child + '\\n'\n\n sanitizedChildren += sanitizedChild\n }\n } else {\n sanitizedChildren = (block?.jsx?.doNotTrimChildren ? '' : ' ') + children + '\\n'\n }\n\n return `<${nodeFields.blockType}${hasProps ? ' ' + propsToJSXString({ props }) : ''}>\\n${sanitizedChildren}</${nodeFields.blockType}>`\n }\n\n return `<${nodeFields.blockType}${hasProps ? ' ' + propsToJSXString({ props }) : ''}/>`\n },\n handleImportAfterStartMatch: block.jsx?.customEndRegex\n ? undefined\n : ({ lines, rootNode, startLineIndex, startMatch, transformer }) => {\n const regexpEndRegex: RegExp | undefined =\n typeof transformer.regExpEnd === 'object' && 'regExp' in transformer.regExpEnd\n ? transformer.regExpEnd.regExp\n : transformer.regExpEnd\n\n const isEndOptional =\n transformer.regExpEnd &&\n typeof transformer.regExpEnd === 'object' &&\n 'optional' in transformer.regExpEnd\n ? transformer.regExpEnd.optional\n : !transformer.regExpEnd\n\n const {\n afterEndLine,\n beforeStartLine,\n content: unsanitizedContent,\n endLineIndex,\n propsString,\n } = linesFromStartToContentAndPropsString({\n isEndOptional,\n lines,\n regexpEndRegex,\n startLineIndex,\n startMatch,\n trimChildren: false,\n })\n\n let content = ''\n\n if (block?.jsx?.doNotTrimChildren) {\n content = unsanitizedContent.endsWith('\\n')\n ? unsanitizedContent.slice(0, -1)\n : unsanitizedContent\n } else {\n // Ensure it has a leftpad of at least 2 spaces. The data is saved without those spaces, so we can just blindly add it to every child\n if (unsanitizedContent.includes('\\n')) {\n const split = unsanitizedContent.split('\\n')\n let index = 0\n for (const child of split) {\n index++\n\n if (child.startsWith(' ')) {\n content += child.slice(2)\n } else {\n // If one child is misaligned, skip aligning completely, unless it's just empty\n if (child === '') {\n content += child\n } else {\n content = unsanitizedContent.endsWith('\\n')\n ? unsanitizedContent.slice(0, -1)\n : unsanitizedContent\n break\n }\n }\n\n content += index === split.length ? '' : '\\n'\n }\n } else {\n content =\n (!unsanitizedContent.startsWith(' ')\n ? unsanitizedContent\n : unsanitizedContent.slice(2)) + '\\n'\n }\n }\n\n if (!block?.jsx?.import) {\n // No multiline transformer handled this line successfully\n return [false, startLineIndex]\n }\n\n const markdownToLexical = getMarkdownToLexical(allNodes, allTransformers)\n\n const blockFields = block.jsx.import({\n children: content,\n closeMatch: null,\n htmlToLexical: null, // TODO\n markdownToLexical,\n openMatch: startMatch,\n props: propsString\n ? extractPropsFromJSXPropsString({\n propsString,\n })\n : {},\n })\n if (blockFields === false) {\n return [false, startLineIndex]\n }\n\n const node = $createBlockNode({\n blockType: block.slug,\n ...blockFields,\n } as any)\n\n if (node) {\n // Now handle beforeStartLine and afterEndLine. If those are not empty, we need to add them as text nodes before and after the block node.\n // However, those themselves can contain other markdown matches, so we need to parse them as well.\n // Example where this is needed: \"Hello <InlineCode>inline code</InlineCode> test.\"\n let prevNodes: null | SerializedLexicalNode[] = null\n let nextNodes: null | SerializedLexicalNode[] = null\n // TODO: Might not need this prevNodes and nextNodes handling if inline nodes are handled by textmatch transformers\n\n if (beforeStartLine?.length) {\n prevNodes = markdownToLexical({ markdown: beforeStartLine })?.root?.children ?? []\n\n const firstPrevNode = prevNodes?.[0]\n if (firstPrevNode) {\n rootNode.append($parseSerializedNode(firstPrevNode))\n }\n }\n\n rootNode.append(node)\n\n if (afterEndLine?.length) {\n nextNodes = markdownToLexical({ markdown: afterEndLine })?.root?.children\n const lastChild = rootNode.getChildren()[rootNode.getChildren().length - 1]\n\n const children = ($parseSerializedNode(nextNodes[0]!) as ElementNode)?.getChildren()\n if (children?.length) {\n for (const child of children) {\n ;(lastChild as ElementNode).append(child)\n }\n }\n }\n }\n\n return [true, endLineIndex]\n },\n regExpEnd: block.jsx?.customEndRegex ?? regex.regExpEnd,\n regExpStart: block.jsx?.customStartRegex ?? regex.regExpStart,\n // This replace is ONLY run for ``` code blocks (so any blocks with custom start and end regexes). For others, we use the special JSX handling above:\n type: 'multiline-element',\n replace: (rootNode, children, openMatch, closeMatch, linesInBetween) => {\n if (block?.jsx?.import) {\n if (!linesInBetween) {\n // convert children to linesInBetween\n let line = ''\n if (children) {\n for (const child of children) {\n line += child.getTextContent()\n }\n }\n\n linesInBetween = [line]\n }\n\n let childrenString = ''\n if (block?.jsx?.doNotTrimChildren) {\n childrenString = linesInBetween.join('\\n')\n } else {\n childrenString = linesInBetween.join('\\n').trim()\n }\n\n const propsString = openMatch[1]?.trim()\n\n const markdownToLexical = getMarkdownToLexical(allNodes, allTransformers)\n\n const blockFields = block.jsx.import({\n children: childrenString,\n closeMatch: closeMatch as RegExpMatchArray,\n htmlToLexical: null, // TODO\n markdownToLexical,\n openMatch: openMatch as RegExpMatchArray,\n props: propsString\n ? extractPropsFromJSXPropsString({\n propsString,\n })\n : {},\n })\n if (blockFields === false) {\n return false\n }\n\n const node = $createBlockNode({\n blockType: block.slug,\n ...blockFields,\n } as any)\n\n if (node) {\n rootNode.append(node)\n }\n\n return\n }\n return false // Run next transformer\n },\n }))\n\n return toReturn\n}\n"],"names":["$parseSerializedNode","extractPropsFromJSXPropsString","propsToJSXString","linesFromStartToContentAndPropsString","$createBlockNode","$isBlockNode","BlockNode","$createInlineBlockNode","$isInlineBlockNode","InlineBlockNode","getLexicalToMarkdown","getMarkdownToLexical","createTagRegexes","tagName","escapedTagName","replace","regExpEnd","RegExp","regExpStart","getBlockMarkdownTransformers","blocks","inlineBlocks","length","transformers","block","transformer","getMarkdownTransformerForBlock","concat","isInlineBlock","jsx","regex","slug","toReturn","push","allNodes","allTransformers","type","dependencies","export","node","getFields","blockType","toLowerCase","nodeFields","lexicalToMarkdown","exportResult","fields","hasProps","props","Object","keys","children","getEndIndex","match","endlineLastCharIndex","isEndOptional","lines","getTextContent","regexpEndRegex","startLineIndex","startMatch","trimChildren","importRegExp","customStartRegex","regExp","content","propsString","index","import","markdownToLexical","blockFields","closeMatch","htmlToLexical","openMatch","inlineBlockNode","sanitizedChildren","includes","child","split","sanitizedChild","doNotTrimChildren","handleImportAfterStartMatch","customEndRegex","undefined","rootNode","optional","afterEndLine","beforeStartLine","unsanitizedContent","endLineIndex","endsWith","slice","startsWith","prevNodes","nextNodes","markdown","root","firstPrevNode","append","lastChild","getChildren","linesInBetween","line","childrenString","join","trim"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/features/blocks/client/markdown/markdownTransformer.ts"],"sourcesContent":["import type { ClientBlock } from 'payload'\n\nimport {\n $parseSerializedNode,\n type ElementNode,\n type Klass,\n type LexicalNode,\n type LexicalNodeReplacement,\n type SerializedLexicalNode,\n} from 'lexical'\n\nimport type { Transformer } from '../../../../packages/@lexical/markdown/index.js'\nimport type {\n MultilineElementTransformer,\n TextMatchTransformer,\n} from '../../../../packages/@lexical/markdown/MarkdownTransformers.js'\n\nimport { extractPropsFromJSXPropsString } from '../../../../utilities/jsx/extractPropsFromJSXPropsString.js'\nimport { propsToJSXString } from '../../../../utilities/jsx/jsx.js'\nimport { linesFromStartToContentAndPropsString } from '../../server/markdown/linesFromMatchToContentAndPropsString.js'\nimport { $createBlockNode, $isBlockNode, BlockNode } from '../nodes/BlocksNode.js'\nimport {\n $createInlineBlockNode,\n $isInlineBlockNode,\n InlineBlockNode,\n} from '../nodes/InlineBlocksNode.js'\nimport { getLexicalToMarkdown } from './getLexicalToMarkdown.js'\nimport { getMarkdownToLexical } from './getMarkdownToLexical.js'\n\nfunction createTagRegexes(tagName: string) {\n const escapedTagName = tagName.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n return {\n regExpEnd: new RegExp(`</(${escapedTagName})\\\\s*>|<${escapedTagName}[^>]*?/>`, 'i'),\n regExpStart: new RegExp(`<(${escapedTagName})([^>]*?)\\\\s*(/?)>`, 'i'),\n }\n}\nexport const getBlockMarkdownTransformers = ({\n blocks,\n inlineBlocks,\n}: {\n blocks: ClientBlock[]\n inlineBlocks: ClientBlock[]\n}): ((props: {\n allNodes: Array<Klass<LexicalNode> | LexicalNodeReplacement>\n allTransformers: Transformer[]\n}) => MultilineElementTransformer | TextMatchTransformer)[] => {\n if (!blocks?.length && !inlineBlocks?.length) {\n return []\n }\n let transformers: ((props: {\n allNodes: Array<Klass<LexicalNode> | LexicalNodeReplacement>\n allTransformers: Transformer[]\n }) => MultilineElementTransformer | TextMatchTransformer)[] = []\n\n if (blocks?.length) {\n for (const block of blocks) {\n const transformer = getMarkdownTransformerForBlock(block, false)\n\n if (transformer) {\n transformers = transformers.concat(transformer)\n }\n }\n }\n\n if (inlineBlocks?.length) {\n for (const block of inlineBlocks) {\n const transformer = getMarkdownTransformerForBlock(block, true)\n\n if (transformer) {\n transformers = transformers.concat(transformer)\n }\n }\n }\n\n return transformers\n}\n\nfunction getMarkdownTransformerForBlock(\n block: ClientBlock,\n isInlineBlock: boolean,\n): Array<\n (props: {\n allNodes: Array<Klass<LexicalNode> | LexicalNodeReplacement>\n allTransformers: Transformer[]\n }) => MultilineElementTransformer | TextMatchTransformer\n> | null {\n if (!block.jsx) {\n return null\n }\n const regex = createTagRegexes(block.slug)\n const toReturn: Array<\n (props: {\n allNodes: Array<Klass<LexicalNode> | LexicalNodeReplacement>\n allTransformers: Transformer[]\n }) => MultilineElementTransformer | TextMatchTransformer\n > = []\n\n if (isInlineBlock) {\n toReturn.push(({ allNodes, allTransformers }) => ({\n type: 'text-match',\n dependencies: [InlineBlockNode],\n export: (node) => {\n if (!$isInlineBlockNode(node)) {\n return null\n }\n\n if (node.getFields()?.blockType?.toLowerCase() !== block.slug.toLowerCase()) {\n return null\n }\n\n const nodeFields = node.getFields()\n const lexicalToMarkdown = getLexicalToMarkdown(allNodes, allTransformers)\n\n const exportResult = block.jsx!.export({\n fields: nodeFields,\n lexicalToMarkdown,\n })\n if (exportResult === false) {\n return null\n }\n if (typeof exportResult === 'string') {\n return exportResult\n }\n\n const hasProps = exportResult.props && Object.keys(exportResult.props)?.length > 0\n const props = exportResult.props ?? {}\n\n if (exportResult?.children?.length) {\n return `<${nodeFields.blockType}${hasProps ? ' ' + propsToJSXString({ props }) : ''}>${exportResult.children}</${nodeFields.blockType}>`\n }\n\n return `<${nodeFields.blockType}${hasProps ? ' ' + propsToJSXString({ props }) : ''}/>`\n },\n getEndIndex: (node, match) => {\n const { endlineLastCharIndex } = linesFromStartToContentAndPropsString({\n isEndOptional: false,\n lines: [node.getTextContent()],\n regexpEndRegex: regex.regExpEnd,\n startLineIndex: 0,\n startMatch: match,\n trimChildren: false,\n })\n\n return endlineLastCharIndex\n },\n importRegExp: block.jsx?.customStartRegex ?? regex.regExpStart,\n regExp: /___ignoreignoreignore___/g,\n replace(node, match) {\n const { content, propsString } = linesFromStartToContentAndPropsString({\n isEndOptional: false,\n lines: [node.getTextContent()],\n regexpEndRegex: regex.regExpEnd,\n startLineIndex: 0,\n startMatch: {\n ...match,\n index: 0,\n },\n trimChildren: false,\n })\n\n if (!block?.jsx?.import) {\n // No multiline transformer handled this line successfully\n return\n }\n\n const markdownToLexical = getMarkdownToLexical(allNodes, allTransformers)\n\n const blockFields = block.jsx.import({\n children: content,\n closeMatch: null,\n htmlToLexical: null, // TODO\n markdownToLexical,\n openMatch: match,\n props: propsString\n ? extractPropsFromJSXPropsString({\n propsString,\n })\n : {},\n })\n if (blockFields === false) {\n return\n }\n\n const inlineBlockNode = $createInlineBlockNode({\n blockType: block.slug,\n ...(blockFields as any),\n })\n\n node.replace(inlineBlockNode)\n },\n }))\n\n return toReturn\n }\n\n toReturn.push(({ allNodes, allTransformers }) => ({\n dependencies: [BlockNode],\n export: (node) => {\n if (!$isBlockNode(node)) {\n return null\n }\n\n if (node.getFields()?.blockType?.toLowerCase() !== block.slug.toLowerCase()) {\n return null\n }\n\n const nodeFields = node.getFields()\n const lexicalToMarkdown = getLexicalToMarkdown(allNodes, allTransformers)\n\n const exportResult = block.jsx!.export({\n fields: nodeFields,\n lexicalToMarkdown,\n })\n if (exportResult === false) {\n return null\n }\n if (typeof exportResult === 'string') {\n return exportResult\n }\n\n const hasProps = exportResult.props && Object.keys(exportResult.props)?.length > 0\n const props = exportResult.props ?? {}\n\n if (exportResult?.children?.length) {\n const children = exportResult.children\n let sanitizedChildren = ''\n\n // Ensure it has a leftpad of at least 2 spaces. The data is saved without those spaces, so we can just blindly add it to every child\n if (children.includes('\\n')) {\n for (const child of children.split('\\n')) {\n let sanitizedChild = ''\n if (!block?.jsx?.doNotTrimChildren && child !== '') {\n sanitizedChild = ' '\n }\n sanitizedChild += child + '\\n'\n\n sanitizedChildren += sanitizedChild\n }\n } else {\n sanitizedChildren = (block?.jsx?.doNotTrimChildren ? '' : ' ') + children + '\\n'\n }\n\n return `<${nodeFields.blockType}${hasProps ? ' ' + propsToJSXString({ props }) : ''}>\\n${sanitizedChildren}</${nodeFields.blockType}>`\n }\n\n return `<${nodeFields.blockType}${hasProps ? ' ' + propsToJSXString({ props }) : ''}/>`\n },\n handleImportAfterStartMatch: block.jsx?.customEndRegex\n ? undefined\n : ({ lines, rootNode, startLineIndex, startMatch, transformer }) => {\n const regexpEndRegex: RegExp | undefined =\n typeof transformer.regExpEnd === 'object' && 'regExp' in transformer.regExpEnd\n ? transformer.regExpEnd.regExp\n : transformer.regExpEnd\n\n const isEndOptional =\n transformer.regExpEnd &&\n typeof transformer.regExpEnd === 'object' &&\n 'optional' in transformer.regExpEnd\n ? transformer.regExpEnd.optional\n : !transformer.regExpEnd\n\n const {\n afterEndLine,\n beforeStartLine,\n content: unsanitizedContent,\n endLineIndex,\n propsString,\n } = linesFromStartToContentAndPropsString({\n isEndOptional,\n lines,\n regexpEndRegex,\n startLineIndex,\n startMatch,\n trimChildren: false,\n })\n\n let content = ''\n\n if (block?.jsx?.doNotTrimChildren) {\n content = unsanitizedContent.endsWith('\\n')\n ? unsanitizedContent.slice(0, -1)\n : unsanitizedContent\n } else {\n // Ensure it has a leftpad of at least 2 spaces. The data is saved without those spaces, so we can just blindly add it to every child\n if (unsanitizedContent.includes('\\n')) {\n const split = unsanitizedContent.split('\\n')\n let index = 0\n for (const child of split) {\n index++\n\n if (child.startsWith(' ')) {\n content += child.slice(2)\n } else {\n // If one child is misaligned, skip aligning completely, unless it's just empty\n if (child === '') {\n content += child\n } else {\n content = unsanitizedContent.endsWith('\\n')\n ? unsanitizedContent.slice(0, -1)\n : unsanitizedContent\n break\n }\n }\n\n content += index === split.length ? '' : '\\n'\n }\n } else {\n content =\n (!unsanitizedContent.startsWith(' ')\n ? unsanitizedContent\n : unsanitizedContent.slice(2)) + '\\n'\n }\n }\n\n if (!block?.jsx?.import) {\n // No multiline transformer handled this line successfully\n return [false, startLineIndex]\n }\n\n const markdownToLexical = getMarkdownToLexical(allNodes, allTransformers)\n\n const blockFields = block.jsx.import({\n children: content,\n closeMatch: null,\n htmlToLexical: null, // TODO\n markdownToLexical,\n openMatch: startMatch,\n props: propsString\n ? extractPropsFromJSXPropsString({\n propsString,\n })\n : {},\n })\n if (blockFields === false) {\n return [false, startLineIndex]\n }\n\n const node = $createBlockNode({\n blockType: block.slug,\n ...blockFields,\n } as any)\n\n if (node) {\n // Now handle beforeStartLine and afterEndLine. If those are not empty, we need to add them as text nodes before and after the block node.\n // However, those themselves can contain other markdown matches, so we need to parse them as well.\n // Example where this is needed: \"Hello <InlineCode>inline code</InlineCode> test.\"\n let prevNodes: null | SerializedLexicalNode[] = null\n let nextNodes: null | SerializedLexicalNode[] = null\n // TODO: Might not need this prevNodes and nextNodes handling if inline nodes are handled by textmatch transformers\n\n if (beforeStartLine?.length) {\n prevNodes = markdownToLexical({ markdown: beforeStartLine })?.root?.children ?? []\n\n const firstPrevNode = prevNodes?.[0]\n if (firstPrevNode) {\n rootNode.append($parseSerializedNode(firstPrevNode))\n }\n }\n\n rootNode.append(node)\n\n if (afterEndLine?.length) {\n nextNodes = markdownToLexical({ markdown: afterEndLine })?.root?.children\n const lastChild = rootNode.getChildren()[rootNode.getChildren().length - 1]\n\n const children = ($parseSerializedNode(nextNodes[0]!) as ElementNode)?.getChildren()\n if (children?.length) {\n for (const child of children) {\n ;(lastChild as ElementNode).append(child)\n }\n }\n }\n }\n\n return [true, endLineIndex]\n },\n regExpEnd: block.jsx?.customEndRegex ?? regex.regExpEnd,\n regExpStart: block.jsx?.customStartRegex ?? regex.regExpStart,\n // This replace is ONLY run for ``` code blocks (so any blocks with custom start and end regexes). For others, we use the special JSX handling above:\n type: 'multiline-element',\n replace: (rootNode, children, openMatch, closeMatch, linesInBetween) => {\n if (block?.jsx?.import) {\n if (!linesInBetween) {\n // convert children to linesInBetween\n let line = ''\n if (children) {\n for (const child of children) {\n line += child.getTextContent()\n }\n }\n\n linesInBetween = [line]\n }\n\n let childrenString = ''\n if (block?.jsx?.doNotTrimChildren) {\n childrenString = linesInBetween.join('\\n')\n } else {\n childrenString = linesInBetween.join('\\n').trim()\n }\n\n const propsString = openMatch[1]?.trim()\n\n const markdownToLexical = getMarkdownToLexical(allNodes, allTransformers)\n\n const blockFields = block.jsx.import({\n children: childrenString,\n closeMatch: closeMatch as RegExpMatchArray,\n htmlToLexical: null, // TODO\n markdownToLexical,\n openMatch: openMatch as RegExpMatchArray,\n props: propsString\n ? extractPropsFromJSXPropsString({\n propsString,\n })\n : {},\n })\n if (blockFields === false) {\n return false\n }\n\n const node = $createBlockNode({\n blockType: block.slug,\n ...blockFields,\n } as any)\n\n if (node) {\n rootNode.append(node)\n }\n\n return\n }\n return false // Run next transformer\n },\n }))\n\n return toReturn\n}\n"],"names":["$parseSerializedNode","extractPropsFromJSXPropsString","propsToJSXString","linesFromStartToContentAndPropsString","$createBlockNode","$isBlockNode","BlockNode","$createInlineBlockNode","$isInlineBlockNode","InlineBlockNode","getLexicalToMarkdown","getMarkdownToLexical","createTagRegexes","tagName","escapedTagName","replace","regExpEnd","RegExp","regExpStart","getBlockMarkdownTransformers","blocks","inlineBlocks","length","transformers","block","transformer","getMarkdownTransformerForBlock","concat","isInlineBlock","jsx","regex","slug","toReturn","push","allNodes","allTransformers","type","dependencies","export","node","getFields","blockType","toLowerCase","nodeFields","lexicalToMarkdown","exportResult","fields","hasProps","props","Object","keys","children","getEndIndex","match","endlineLastCharIndex","isEndOptional","lines","getTextContent","regexpEndRegex","startLineIndex","startMatch","trimChildren","importRegExp","customStartRegex","regExp","content","propsString","index","import","markdownToLexical","blockFields","closeMatch","htmlToLexical","openMatch","inlineBlockNode","sanitizedChildren","includes","child","split","sanitizedChild","doNotTrimChildren","handleImportAfterStartMatch","customEndRegex","undefined","rootNode","optional","afterEndLine","beforeStartLine","unsanitizedContent","endLineIndex","endsWith","slice","startsWith","prevNodes","nextNodes","markdown","root","firstPrevNode","append","lastChild","getChildren","linesInBetween","line","childrenString","join","trim"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import {
|
|
2
|
+
import { jsxDEV as _jsxDEV } from "react/jsx-dev-runtime";
|
|
3
3
|
import ObjectID from 'bson-objectid';
|
|
4
4
|
import { $applyNodeReplacement } from 'lexical';
|
|
5
5
|
import React from 'react';
|
|
@@ -28,12 +28,16 @@ export class BlockNode extends ServerBlockNode {
|
|
|
28
28
|
return node;
|
|
29
29
|
}
|
|
30
30
|
decorate(_editor, config) {
|
|
31
|
-
return /*#__PURE__*/
|
|
31
|
+
return /*#__PURE__*/ _jsxDEV(BlockComponent, {
|
|
32
32
|
cacheBuster: this.getCacheBuster(),
|
|
33
33
|
className: config.theme.block ?? 'LexicalEditorTheme__block',
|
|
34
34
|
formData: this.getFields(),
|
|
35
35
|
nodeKey: this.getKey()
|
|
36
|
-
}
|
|
36
|
+
}, void 0, false, {
|
|
37
|
+
fileName: "src/features/blocks/client/nodes/BlocksNode.tsx",
|
|
38
|
+
lineNumber: 43,
|
|
39
|
+
columnNumber: 7
|
|
40
|
+
}, this);
|
|
37
41
|
}
|
|
38
42
|
exportJSON() {
|
|
39
43
|
return super.exportJSON();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/features/blocks/client/nodes/BlocksNode.tsx"],"sourcesContent":["'use client'\nimport ObjectID from 'bson-objectid'\nimport {\n $applyNodeReplacement,\n type EditorConfig,\n type LexicalEditor,\n type LexicalNode,\n} from 'lexical'\nimport React, { type JSX } from 'react'\n\nimport type { BlockFieldsOptionalID, SerializedBlockNode } from '../../server/nodes/BlocksNode.js'\n\nimport { ServerBlockNode } from '../../server/nodes/BlocksNode.js'\nimport { BlockComponent } from '../component/index.js'\n\nexport class BlockNode extends ServerBlockNode {\n static override clone(node: ServerBlockNode): ServerBlockNode {\n return super.clone(node)\n }\n\n static override getType(): string {\n return super.getType()\n }\n\n static override importJSON(serializedNode: SerializedBlockNode): BlockNode {\n if (serializedNode.version === 1) {\n // Convert (version 1 had the fields wrapped in another, unnecessary data property)\n serializedNode = {\n ...serializedNode,\n fields: {\n ...(serializedNode as any).fields.data,\n },\n version: 2,\n }\n }\n const node = $createBlockNode(serializedNode.fields)\n node.setFormat(serializedNode.format)\n return node\n }\n\n override decorate(_editor: LexicalEditor, config: EditorConfig): JSX.Element {\n return (\n <BlockComponent\n cacheBuster={this.getCacheBuster()}\n className={config.theme.block ?? 'LexicalEditorTheme__block'}\n formData={this.getFields()}\n nodeKey={this.getKey()}\n />\n )\n }\n\n override exportJSON(): SerializedBlockNode {\n return super.exportJSON()\n }\n}\n\nexport function $createBlockNode(fields: BlockFieldsOptionalID): BlockNode {\n return $applyNodeReplacement(\n new BlockNode({\n fields: {\n ...fields,\n id: fields?.id || new ObjectID.default().toHexString(),\n },\n }),\n )\n}\n\nexport function $isBlockNode(node: BlockNode | LexicalNode | null | undefined): node is BlockNode {\n return node instanceof BlockNode\n}\n"],"names":["ObjectID","$applyNodeReplacement","React","ServerBlockNode","BlockComponent","BlockNode","clone","node","getType","importJSON","serializedNode","version","fields","data","$createBlockNode","setFormat","format","decorate","_editor","config","cacheBuster","getCacheBuster","className","theme","block","formData","getFields","nodeKey","getKey","exportJSON","id","default","toHexString","$isBlockNode"],"mappings":"AAAA;;AACA,OAAOA,cAAc,gBAAe;AACpC,SACEC,qBAAqB,QAIhB,UAAS;AAChB,OAAOC,WAAyB,QAAO;AAIvC,SAASC,eAAe,QAAQ,mCAAkC;AAClE,SAASC,cAAc,QAAQ,wBAAuB;AAEtD,OAAO,MAAMC,kBAAkBF;IAC7B,OAAgBG,MAAMC,IAAqB,EAAmB;QAC5D,OAAO,KAAK,CAACD,MAAMC;IACrB;IAEA,OAAgBC,UAAkB;QAChC,OAAO,KAAK,CAACA;IACf;IAEA,OAAgBC,WAAWC,cAAmC,EAAa;QACzE,IAAIA,eAAeC,OAAO,KAAK,GAAG;YAChC,mFAAmF;YACnFD,iBAAiB;gBACf,GAAGA,cAAc;gBACjBE,QAAQ;oBACN,GAAG,AAACF,eAAuBE,MAAM,CAACC,IAAI;gBACxC;gBACAF,SAAS;YACX;QACF;QACA,MAAMJ,OAAOO,iBAAiBJ,eAAeE,MAAM;QACnDL,KAAKQ,SAAS,CAACL,eAAeM,MAAM;QACpC,OAAOT;IACT;IAESU,SAASC,OAAsB,EAAEC,MAAoB,EAAe;QAC3E,qBACE,
|
|
1
|
+
{"version":3,"sources":["../../../../../src/features/blocks/client/nodes/BlocksNode.tsx"],"sourcesContent":["'use client'\nimport ObjectID from 'bson-objectid'\nimport {\n $applyNodeReplacement,\n type EditorConfig,\n type LexicalEditor,\n type LexicalNode,\n} from 'lexical'\nimport React, { type JSX } from 'react'\n\nimport type { BlockFieldsOptionalID, SerializedBlockNode } from '../../server/nodes/BlocksNode.js'\n\nimport { ServerBlockNode } from '../../server/nodes/BlocksNode.js'\nimport { BlockComponent } from '../component/index.js'\n\nexport class BlockNode extends ServerBlockNode {\n static override clone(node: ServerBlockNode): ServerBlockNode {\n return super.clone(node)\n }\n\n static override getType(): string {\n return super.getType()\n }\n\n static override importJSON(serializedNode: SerializedBlockNode): BlockNode {\n if (serializedNode.version === 1) {\n // Convert (version 1 had the fields wrapped in another, unnecessary data property)\n serializedNode = {\n ...serializedNode,\n fields: {\n ...(serializedNode as any).fields.data,\n },\n version: 2,\n }\n }\n const node = $createBlockNode(serializedNode.fields)\n node.setFormat(serializedNode.format)\n return node\n }\n\n override decorate(_editor: LexicalEditor, config: EditorConfig): JSX.Element {\n return (\n <BlockComponent\n cacheBuster={this.getCacheBuster()}\n className={config.theme.block ?? 'LexicalEditorTheme__block'}\n formData={this.getFields()}\n nodeKey={this.getKey()}\n />\n )\n }\n\n override exportJSON(): SerializedBlockNode {\n return super.exportJSON()\n }\n}\n\nexport function $createBlockNode(fields: BlockFieldsOptionalID): BlockNode {\n return $applyNodeReplacement(\n new BlockNode({\n fields: {\n ...fields,\n id: fields?.id || new ObjectID.default().toHexString(),\n },\n }),\n )\n}\n\nexport function $isBlockNode(node: BlockNode | LexicalNode | null | undefined): node is BlockNode {\n return node instanceof BlockNode\n}\n"],"names":["ObjectID","$applyNodeReplacement","React","ServerBlockNode","BlockComponent","BlockNode","clone","node","getType","importJSON","serializedNode","version","fields","data","$createBlockNode","setFormat","format","decorate","_editor","config","cacheBuster","getCacheBuster","className","theme","block","formData","getFields","nodeKey","getKey","exportJSON","id","default","toHexString","$isBlockNode"],"mappings":"AAAA;;AACA,OAAOA,cAAc,gBAAe;AACpC,SACEC,qBAAqB,QAIhB,UAAS;AAChB,OAAOC,WAAyB,QAAO;AAIvC,SAASC,eAAe,QAAQ,mCAAkC;AAClE,SAASC,cAAc,QAAQ,wBAAuB;AAEtD,OAAO,MAAMC,kBAAkBF;IAC7B,OAAgBG,MAAMC,IAAqB,EAAmB;QAC5D,OAAO,KAAK,CAACD,MAAMC;IACrB;IAEA,OAAgBC,UAAkB;QAChC,OAAO,KAAK,CAACA;IACf;IAEA,OAAgBC,WAAWC,cAAmC,EAAa;QACzE,IAAIA,eAAeC,OAAO,KAAK,GAAG;YAChC,mFAAmF;YACnFD,iBAAiB;gBACf,GAAGA,cAAc;gBACjBE,QAAQ;oBACN,GAAG,AAACF,eAAuBE,MAAM,CAACC,IAAI;gBACxC;gBACAF,SAAS;YACX;QACF;QACA,MAAMJ,OAAOO,iBAAiBJ,eAAeE,MAAM;QACnDL,KAAKQ,SAAS,CAACL,eAAeM,MAAM;QACpC,OAAOT;IACT;IAESU,SAASC,OAAsB,EAAEC,MAAoB,EAAe;QAC3E,qBACE,QAACf;YACCgB,aAAa,IAAI,CAACC,cAAc;YAChCC,WAAWH,OAAOI,KAAK,CAACC,KAAK,IAAI;YACjCC,UAAU,IAAI,CAACC,SAAS;YACxBC,SAAS,IAAI,CAACC,MAAM;;;;;;IAG1B;IAESC,aAAkC;QACzC,OAAO,KAAK,CAACA;IACf;AACF;AAEA,OAAO,SAASf,iBAAiBF,MAA6B;IAC5D,OAAOX,sBACL,IAAII,UAAU;QACZO,QAAQ;YACN,GAAGA,MAAM;YACTkB,IAAIlB,QAAQkB,MAAM,IAAI9B,SAAS+B,OAAO,GAAGC,WAAW;QACtD;IACF;AAEJ;AAEA,OAAO,SAASC,aAAa1B,IAAgD;IAC3E,OAAOA,gBAAgBF;AACzB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import {
|
|
2
|
+
import { jsxDEV as _jsxDEV } from "react/jsx-dev-runtime";
|
|
3
3
|
import ObjectID from 'bson-objectid';
|
|
4
4
|
import { $applyNodeReplacement } from 'lexical';
|
|
5
5
|
import React from 'react';
|
|
@@ -19,12 +19,16 @@ export class InlineBlockNode extends ServerInlineBlockNode {
|
|
|
19
19
|
return node;
|
|
20
20
|
}
|
|
21
21
|
decorate(_editor, config) {
|
|
22
|
-
return /*#__PURE__*/
|
|
22
|
+
return /*#__PURE__*/ _jsxDEV(InlineBlockComponent, {
|
|
23
23
|
cacheBuster: this.getCacheBuster(),
|
|
24
24
|
className: config.theme.inlineBlock ?? 'LexicalEditorTheme__inlineBlock',
|
|
25
25
|
formData: this.getFields(),
|
|
26
26
|
nodeKey: this.getKey()
|
|
27
|
-
}
|
|
27
|
+
}, void 0, false, {
|
|
28
|
+
fileName: "src/features/blocks/client/nodes/InlineBlocksNode.tsx",
|
|
29
|
+
lineNumber: 40,
|
|
30
|
+
columnNumber: 7
|
|
31
|
+
}, this);
|
|
28
32
|
}
|
|
29
33
|
exportJSON() {
|
|
30
34
|
return super.exportJSON();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/features/blocks/client/nodes/InlineBlocksNode.tsx"],"sourcesContent":["'use client'\nimport ObjectID from 'bson-objectid'\nimport {\n $applyNodeReplacement,\n type EditorConfig,\n type LexicalEditor,\n type LexicalNode,\n} from 'lexical'\nimport React, { type JSX } from 'react'\n\nimport type {\n InlineBlockFields,\n SerializedInlineBlockNode,\n} from '../../server/nodes/InlineBlocksNode.js'\n\nimport { ServerInlineBlockNode } from '../../server/nodes/InlineBlocksNode.js'\n\nconst InlineBlockComponent = React.lazy(() =>\n import('../componentInline/index.js').then((module) => ({\n default: module.InlineBlockComponent,\n })),\n)\n\nexport class InlineBlockNode extends ServerInlineBlockNode {\n static override clone(node: ServerInlineBlockNode): ServerInlineBlockNode {\n return super.clone(node)\n }\n\n static override getType(): string {\n return super.getType()\n }\n\n static override importJSON(serializedNode: SerializedInlineBlockNode): InlineBlockNode {\n const node = $createInlineBlockNode(serializedNode.fields)\n return node\n }\n\n override decorate(_editor: LexicalEditor, config: EditorConfig): JSX.Element {\n return (\n <InlineBlockComponent\n cacheBuster={this.getCacheBuster()}\n className={config.theme.inlineBlock ?? 'LexicalEditorTheme__inlineBlock'}\n formData={this.getFields()}\n nodeKey={this.getKey()}\n />\n )\n }\n\n override exportJSON(): SerializedInlineBlockNode {\n return super.exportJSON()\n }\n}\n\nexport function $createInlineBlockNode(fields: Exclude<InlineBlockFields, 'id'>): InlineBlockNode {\n return $applyNodeReplacement(\n new InlineBlockNode({\n fields: {\n ...fields,\n id: fields?.id || new ObjectID.default().toHexString(),\n },\n }),\n )\n}\n\nexport function $isInlineBlockNode(\n node: InlineBlockNode | LexicalNode | null | undefined,\n): node is InlineBlockNode {\n return node instanceof InlineBlockNode\n}\n"],"names":["ObjectID","$applyNodeReplacement","React","ServerInlineBlockNode","InlineBlockComponent","lazy","then","module","default","InlineBlockNode","clone","node","getType","importJSON","serializedNode","$createInlineBlockNode","fields","decorate","_editor","config","cacheBuster","getCacheBuster","className","theme","inlineBlock","formData","getFields","nodeKey","getKey","exportJSON","id","toHexString","$isInlineBlockNode"],"mappings":"AAAA;;AACA,OAAOA,cAAc,gBAAe;AACpC,SACEC,qBAAqB,QAIhB,UAAS;AAChB,OAAOC,WAAyB,QAAO;AAOvC,SAASC,qBAAqB,QAAQ,yCAAwC;AAE9E,MAAMC,qCAAuBF,MAAMG,IAAI,CAAC,IACtC,MAAM,CAAC,+BAA+BC,IAAI,CAAC,CAACC,SAAY,CAAA;YACtDC,SAASD,OAAOH,oBAAoB;QACtC,CAAA;AAGF,OAAO,MAAMK,wBAAwBN;IACnC,OAAgBO,MAAMC,IAA2B,EAAyB;QACxE,OAAO,KAAK,CAACD,MAAMC;IACrB;IAEA,OAAgBC,UAAkB;QAChC,OAAO,KAAK,CAACA;IACf;IAEA,OAAgBC,WAAWC,cAAyC,EAAmB;QACrF,MAAMH,OAAOI,uBAAuBD,eAAeE,MAAM;QACzD,OAAOL;IACT;IAESM,SAASC,OAAsB,EAAEC,MAAoB,EAAe;QAC3E,qBACE,
|
|
1
|
+
{"version":3,"sources":["../../../../../src/features/blocks/client/nodes/InlineBlocksNode.tsx"],"sourcesContent":["'use client'\nimport ObjectID from 'bson-objectid'\nimport {\n $applyNodeReplacement,\n type EditorConfig,\n type LexicalEditor,\n type LexicalNode,\n} from 'lexical'\nimport React, { type JSX } from 'react'\n\nimport type {\n InlineBlockFields,\n SerializedInlineBlockNode,\n} from '../../server/nodes/InlineBlocksNode.js'\n\nimport { ServerInlineBlockNode } from '../../server/nodes/InlineBlocksNode.js'\n\nconst InlineBlockComponent = React.lazy(() =>\n import('../componentInline/index.js').then((module) => ({\n default: module.InlineBlockComponent,\n })),\n)\n\nexport class InlineBlockNode extends ServerInlineBlockNode {\n static override clone(node: ServerInlineBlockNode): ServerInlineBlockNode {\n return super.clone(node)\n }\n\n static override getType(): string {\n return super.getType()\n }\n\n static override importJSON(serializedNode: SerializedInlineBlockNode): InlineBlockNode {\n const node = $createInlineBlockNode(serializedNode.fields)\n return node\n }\n\n override decorate(_editor: LexicalEditor, config: EditorConfig): JSX.Element {\n return (\n <InlineBlockComponent\n cacheBuster={this.getCacheBuster()}\n className={config.theme.inlineBlock ?? 'LexicalEditorTheme__inlineBlock'}\n formData={this.getFields()}\n nodeKey={this.getKey()}\n />\n )\n }\n\n override exportJSON(): SerializedInlineBlockNode {\n return super.exportJSON()\n }\n}\n\nexport function $createInlineBlockNode(fields: Exclude<InlineBlockFields, 'id'>): InlineBlockNode {\n return $applyNodeReplacement(\n new InlineBlockNode({\n fields: {\n ...fields,\n id: fields?.id || new ObjectID.default().toHexString(),\n },\n }),\n )\n}\n\nexport function $isInlineBlockNode(\n node: InlineBlockNode | LexicalNode | null | undefined,\n): node is InlineBlockNode {\n return node instanceof InlineBlockNode\n}\n"],"names":["ObjectID","$applyNodeReplacement","React","ServerInlineBlockNode","InlineBlockComponent","lazy","then","module","default","InlineBlockNode","clone","node","getType","importJSON","serializedNode","$createInlineBlockNode","fields","decorate","_editor","config","cacheBuster","getCacheBuster","className","theme","inlineBlock","formData","getFields","nodeKey","getKey","exportJSON","id","toHexString","$isInlineBlockNode"],"mappings":"AAAA;;AACA,OAAOA,cAAc,gBAAe;AACpC,SACEC,qBAAqB,QAIhB,UAAS;AAChB,OAAOC,WAAyB,QAAO;AAOvC,SAASC,qBAAqB,QAAQ,yCAAwC;AAE9E,MAAMC,qCAAuBF,MAAMG,IAAI,CAAC,IACtC,MAAM,CAAC,+BAA+BC,IAAI,CAAC,CAACC,SAAY,CAAA;YACtDC,SAASD,OAAOH,oBAAoB;QACtC,CAAA;AAGF,OAAO,MAAMK,wBAAwBN;IACnC,OAAgBO,MAAMC,IAA2B,EAAyB;QACxE,OAAO,KAAK,CAACD,MAAMC;IACrB;IAEA,OAAgBC,UAAkB;QAChC,OAAO,KAAK,CAACA;IACf;IAEA,OAAgBC,WAAWC,cAAyC,EAAmB;QACrF,MAAMH,OAAOI,uBAAuBD,eAAeE,MAAM;QACzD,OAAOL;IACT;IAESM,SAASC,OAAsB,EAAEC,MAAoB,EAAe;QAC3E,qBACE,QAACf;YACCgB,aAAa,IAAI,CAACC,cAAc;YAChCC,WAAWH,OAAOI,KAAK,CAACC,WAAW,IAAI;YACvCC,UAAU,IAAI,CAACC,SAAS;YACxBC,SAAS,IAAI,CAACC,MAAM;;;;;;IAG1B;IAESC,aAAwC;QAC/C,OAAO,KAAK,CAACA;IACf;AACF;AAEA,OAAO,SAASd,uBAAuBC,MAAwC;IAC7E,OAAOf,sBACL,IAAIQ,gBAAgB;QAClBO,QAAQ;YACN,GAAGA,MAAM;YACTc,IAAId,QAAQc,MAAM,IAAI9B,SAASQ,OAAO,GAAGuB,WAAW;QACtD;IACF;AAEJ;AAEA,OAAO,SAASC,mBACdrB,IAAsD;IAEtD,OAAOA,gBAAgBF;AACzB"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import {
|
|
2
|
+
import { jsxDEV as _jsxDEV } from "react/jsx-dev-runtime";
|
|
3
|
+
import './index.scss';
|
|
3
4
|
import { useLexicalEditable } from '@lexical/react/useLexicalEditable';
|
|
4
5
|
import { ChevronIcon, Combobox, CopyToClipboard, PopupList, RenderFields, useForm, useFormFields, useTranslation } from '@payloadcms/ui';
|
|
5
6
|
import React from 'react';
|
|
@@ -34,40 +35,60 @@ export const CodeBlockBlockComponent = (args)=>{
|
|
|
34
35
|
const languageEntries = React.useMemo(()=>{
|
|
35
36
|
return Object.entries(languages).map(([languageCode, languageLabel])=>({
|
|
36
37
|
name: `${languageCode} ${languageLabel}`,
|
|
37
|
-
Component: /*#__PURE__*/
|
|
38
|
+
Component: /*#__PURE__*/ _jsxDEV(PopupList.Button, {
|
|
38
39
|
active: false,
|
|
39
40
|
disabled: false,
|
|
40
41
|
onClick: ()=>{
|
|
41
42
|
setSelectedLanguage(languageCode);
|
|
42
43
|
},
|
|
43
|
-
children: /*#__PURE__*/
|
|
44
|
+
children: /*#__PURE__*/ _jsxDEV("span", {
|
|
44
45
|
className: `${baseClass}__language-code`,
|
|
45
46
|
"data-language": languageCode,
|
|
46
47
|
children: languageLabel
|
|
47
|
-
}
|
|
48
|
-
|
|
48
|
+
}, void 0, false, {
|
|
49
|
+
fileName: "src/features/blocks/premade/CodeBlock/Component/Block.tsx",
|
|
50
|
+
lineNumber: 70,
|
|
51
|
+
columnNumber: 11
|
|
52
|
+
}, this)
|
|
53
|
+
}, void 0, false, {
|
|
54
|
+
fileName: "src/features/blocks/premade/CodeBlock/Component/Block.tsx",
|
|
55
|
+
lineNumber: 63,
|
|
56
|
+
columnNumber: 9
|
|
57
|
+
}, this)
|
|
49
58
|
}));
|
|
50
59
|
}, [
|
|
51
60
|
languages,
|
|
52
61
|
setSelectedLanguage
|
|
53
62
|
]);
|
|
54
|
-
return /*#__PURE__*/
|
|
55
|
-
Actions: /*#__PURE__*/
|
|
63
|
+
return /*#__PURE__*/ _jsxDEV(BlockCollapsible, {
|
|
64
|
+
Actions: /*#__PURE__*/ _jsxDEV("div", {
|
|
56
65
|
className: `${baseClass}__actions`,
|
|
57
66
|
children: [
|
|
58
|
-
/*#__PURE__*/
|
|
59
|
-
button: /*#__PURE__*/
|
|
67
|
+
/*#__PURE__*/ _jsxDEV(Combobox, {
|
|
68
|
+
button: /*#__PURE__*/ _jsxDEV("div", {
|
|
60
69
|
className: `${baseClass}__language-selector-button`,
|
|
61
70
|
"data-selected-language": selectedLanguageField?.value,
|
|
62
71
|
children: [
|
|
63
|
-
/*#__PURE__*/
|
|
72
|
+
/*#__PURE__*/ _jsxDEV("span", {
|
|
64
73
|
children: selectedLanguageLabel
|
|
65
|
-
}
|
|
66
|
-
|
|
74
|
+
}, void 0, false, {
|
|
75
|
+
fileName: "src/features/blocks/premade/CodeBlock/Component/Block.tsx",
|
|
76
|
+
lineNumber: 88,
|
|
77
|
+
columnNumber: 17
|
|
78
|
+
}, void 0),
|
|
79
|
+
/*#__PURE__*/ _jsxDEV(ChevronIcon, {
|
|
67
80
|
className: `${baseClass}__chevron`
|
|
68
|
-
}
|
|
81
|
+
}, void 0, false, {
|
|
82
|
+
fileName: "src/features/blocks/premade/CodeBlock/Component/Block.tsx",
|
|
83
|
+
lineNumber: 89,
|
|
84
|
+
columnNumber: 17
|
|
85
|
+
}, void 0)
|
|
69
86
|
]
|
|
70
|
-
}
|
|
87
|
+
}, void 0, true, {
|
|
88
|
+
fileName: "src/features/blocks/premade/CodeBlock/Component/Block.tsx",
|
|
89
|
+
lineNumber: 84,
|
|
90
|
+
columnNumber: 15
|
|
91
|
+
}, void 0),
|
|
71
92
|
buttonType: "custom",
|
|
72
93
|
className: `${baseClass}__language-selector`,
|
|
73
94
|
disabled: !isEditable,
|
|
@@ -77,25 +98,57 @@ export const CodeBlockBlockComponent = (args)=>{
|
|
|
77
98
|
searchPlaceholder: t('fields:searchForLanguage'),
|
|
78
99
|
showScrollbar: true,
|
|
79
100
|
size: "large"
|
|
80
|
-
}
|
|
81
|
-
|
|
101
|
+
}, void 0, false, {
|
|
102
|
+
fileName: "src/features/blocks/premade/CodeBlock/Component/Block.tsx",
|
|
103
|
+
lineNumber: 82,
|
|
104
|
+
columnNumber: 11
|
|
105
|
+
}, void 0),
|
|
106
|
+
/*#__PURE__*/ _jsxDEV(CopyToClipboard, {
|
|
82
107
|
value: codeField?.value ?? ''
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
|
|
108
|
+
}, void 0, false, {
|
|
109
|
+
fileName: "src/features/blocks/premade/CodeBlock/Component/Block.tsx",
|
|
110
|
+
lineNumber: 102,
|
|
111
|
+
columnNumber: 11
|
|
112
|
+
}, void 0),
|
|
113
|
+
/*#__PURE__*/ _jsxDEV(Collapse, {}, void 0, false, {
|
|
114
|
+
fileName: "src/features/blocks/premade/CodeBlock/Component/Block.tsx",
|
|
115
|
+
lineNumber: 104,
|
|
116
|
+
columnNumber: 11
|
|
117
|
+
}, void 0),
|
|
118
|
+
isEditable && /*#__PURE__*/ _jsxDEV(RemoveButton, {}, void 0, false, {
|
|
119
|
+
fileName: "src/features/blocks/premade/CodeBlock/Component/Block.tsx",
|
|
120
|
+
lineNumber: 106,
|
|
121
|
+
columnNumber: 26
|
|
122
|
+
}, void 0)
|
|
86
123
|
]
|
|
87
|
-
}
|
|
124
|
+
}, void 0, true, {
|
|
125
|
+
fileName: "src/features/blocks/premade/CodeBlock/Component/Block.tsx",
|
|
126
|
+
lineNumber: 81,
|
|
127
|
+
columnNumber: 9
|
|
128
|
+
}, void 0),
|
|
88
129
|
className: baseClass,
|
|
89
130
|
collapsibleProps: {
|
|
90
|
-
AfterCollapsible: /*#__PURE__*/
|
|
131
|
+
AfterCollapsible: /*#__PURE__*/ _jsxDEV(FloatingCollapse, {}, void 0, false, {
|
|
132
|
+
fileName: "src/features/blocks/premade/CodeBlock/Component/Block.tsx",
|
|
133
|
+
lineNumber: 111,
|
|
134
|
+
columnNumber: 27
|
|
135
|
+
}, void 0),
|
|
91
136
|
disableHeaderToggle: true,
|
|
92
137
|
disableToggleIndicator: true
|
|
93
138
|
},
|
|
94
|
-
Pill: /*#__PURE__*/
|
|
139
|
+
Pill: /*#__PURE__*/ _jsxDEV("div", {
|
|
95
140
|
className: `${baseClass}__pill`,
|
|
96
|
-
children: /*#__PURE__*/
|
|
97
|
-
|
|
98
|
-
|
|
141
|
+
children: /*#__PURE__*/ _jsxDEV(CodeBlockIcon, {}, void 0, false, {
|
|
142
|
+
fileName: "src/features/blocks/premade/CodeBlock/Component/Block.tsx",
|
|
143
|
+
lineNumber: 117,
|
|
144
|
+
columnNumber: 11
|
|
145
|
+
}, void 0)
|
|
146
|
+
}, void 0, false, {
|
|
147
|
+
fileName: "src/features/blocks/premade/CodeBlock/Component/Block.tsx",
|
|
148
|
+
lineNumber: 116,
|
|
149
|
+
columnNumber: 9
|
|
150
|
+
}, void 0),
|
|
151
|
+
children: /*#__PURE__*/ _jsxDEV(RenderFields, {
|
|
99
152
|
fields: formSchema,
|
|
100
153
|
forceRender: true,
|
|
101
154
|
parentIndexPath: "",
|
|
@@ -103,8 +156,16 @@ export const CodeBlockBlockComponent = (args)=>{
|
|
|
103
156
|
parentSchemaPath: "",
|
|
104
157
|
permissions: true,
|
|
105
158
|
readOnly: !isEditable
|
|
106
|
-
}
|
|
107
|
-
|
|
159
|
+
}, void 0, false, {
|
|
160
|
+
fileName: "src/features/blocks/premade/CodeBlock/Component/Block.tsx",
|
|
161
|
+
lineNumber: 121,
|
|
162
|
+
columnNumber: 7
|
|
163
|
+
}, this)
|
|
164
|
+
}, void 0, false, {
|
|
165
|
+
fileName: "src/features/blocks/premade/CodeBlock/Component/Block.tsx",
|
|
166
|
+
lineNumber: 79,
|
|
167
|
+
columnNumber: 5
|
|
168
|
+
}, this);
|
|
108
169
|
};
|
|
109
170
|
|
|
110
171
|
//# sourceMappingURL=Block.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/features/blocks/premade/CodeBlock/Component/Block.tsx"],"sourcesContent":["'use client'\nimport type { ComboboxEntry } from '@payloadcms/ui'\nimport type {} from 'payload'\n\nimport './index.scss'\n\nimport { useLexicalEditable } from '@lexical/react/useLexicalEditable'\nimport {\n ChevronIcon,\n Combobox,\n CopyToClipboard,\n PopupList,\n RenderFields,\n useForm,\n useFormFields,\n useTranslation,\n} from '@payloadcms/ui'\nimport React from 'react'\n\nimport type { AdditionalCodeComponentProps } from './Code.js'\n\nimport { CodeBlockIcon } from '../../../../../lexical/ui/icons/CodeBlock/index.js'\nimport { useBlockComponentContext } from '../../../client/component/BlockContent.js'\nimport { Collapse } from './Collapse/index.js'\nimport { defaultLanguages } from './defaultLanguages.js'\nimport { FloatingCollapse } from './FloatingCollapse/index.js'\n\nconst baseClass = 'payload-richtext-code-block'\nexport const CodeBlockBlockComponent: React.FC<Pick<AdditionalCodeComponentProps, 'languages'>> = (\n args,\n) => {\n const { languages: languagesFromProps } = args\n const languages = languagesFromProps || defaultLanguages\n\n const { BlockCollapsible, formSchema, RemoveButton } = useBlockComponentContext()\n const { setModified } = useForm()\n const { t } = useTranslation()\n\n const { codeField } = useFormFields(([fields]) => ({\n codeField: fields?.code,\n }))\n\n const { selectedLanguageField, setSelectedLanguage } = useFormFields(([fields, dispatch]) => ({\n selectedLanguageField: fields?.language,\n setSelectedLanguage: (language: string) => {\n dispatch({\n type: 'UPDATE',\n path: 'language',\n value: language,\n })\n setModified(true)\n },\n }))\n\n const selectedLanguageLabel = languages[selectedLanguageField?.value as keyof typeof languages]\n\n const isEditable = useLexicalEditable()\n\n const languageEntries = React.useMemo<ComboboxEntry[]>(() => {\n return Object.entries(languages).map(([languageCode, languageLabel]) => ({\n name: `${languageCode} ${languageLabel}`,\n Component: (\n <PopupList.Button\n active={false}\n disabled={false}\n onClick={() => {\n setSelectedLanguage(languageCode)\n }}\n >\n <span className={`${baseClass}__language-code`} data-language={languageCode}>\n {languageLabel}\n </span>\n </PopupList.Button>\n ),\n }))\n }, [languages, setSelectedLanguage])\n\n return (\n <BlockCollapsible\n Actions={\n <div className={`${baseClass}__actions`}>\n <Combobox\n button={\n <div\n className={`${baseClass}__language-selector-button`}\n data-selected-language={selectedLanguageField?.value}\n >\n <span>{selectedLanguageLabel}</span>\n <ChevronIcon className={`${baseClass}__chevron`} />\n </div>\n }\n buttonType=\"custom\"\n className={`${baseClass}__language-selector`}\n disabled={!isEditable}\n entries={languageEntries}\n horizontalAlign=\"right\"\n minEntriesForSearch={8}\n searchPlaceholder={t('fields:searchForLanguage')}\n showScrollbar\n size=\"large\"\n />\n <CopyToClipboard value={(codeField?.value as string) ?? ''} />\n\n <Collapse />\n\n {isEditable && <RemoveButton />}\n </div>\n }\n className={baseClass}\n collapsibleProps={{\n AfterCollapsible: <FloatingCollapse />,\n disableHeaderToggle: true,\n disableToggleIndicator: true,\n }}\n Pill={\n <div className={`${baseClass}__pill`}>\n <CodeBlockIcon />\n </div>\n }\n >\n <RenderFields\n fields={formSchema}\n forceRender={true}\n parentIndexPath=\"\"\n parentPath={''}\n parentSchemaPath=\"\"\n permissions={true}\n readOnly={!isEditable}\n />\n </BlockCollapsible>\n )\n}\n"],"names":["useLexicalEditable","ChevronIcon","Combobox","CopyToClipboard","PopupList","RenderFields","useForm","useFormFields","useTranslation","React","CodeBlockIcon","useBlockComponentContext","Collapse","defaultLanguages","FloatingCollapse","baseClass","CodeBlockBlockComponent","args","languages","languagesFromProps","BlockCollapsible","formSchema","RemoveButton","setModified","t","codeField","fields","code","selectedLanguageField","setSelectedLanguage","dispatch","language","type","path","value","selectedLanguageLabel","isEditable","languageEntries","useMemo","Object","entries","map","languageCode","languageLabel","name","Component","Button","active","disabled","onClick","span","className","data-language","Actions","div","button","data-selected-language","buttonType","horizontalAlign","minEntriesForSearch","searchPlaceholder","showScrollbar","size","collapsibleProps","AfterCollapsible","disableHeaderToggle","disableToggleIndicator","Pill","forceRender","parentIndexPath","parentPath","parentSchemaPath","permissions","readOnly"],"mappings":"AAAA;;
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/features/blocks/premade/CodeBlock/Component/Block.tsx"],"sourcesContent":["'use client'\nimport type { ComboboxEntry } from '@payloadcms/ui'\nimport type {} from 'payload'\n\nimport './index.scss'\n\nimport { useLexicalEditable } from '@lexical/react/useLexicalEditable'\nimport {\n ChevronIcon,\n Combobox,\n CopyToClipboard,\n PopupList,\n RenderFields,\n useForm,\n useFormFields,\n useTranslation,\n} from '@payloadcms/ui'\nimport React from 'react'\n\nimport type { AdditionalCodeComponentProps } from './Code.js'\n\nimport { CodeBlockIcon } from '../../../../../lexical/ui/icons/CodeBlock/index.js'\nimport { useBlockComponentContext } from '../../../client/component/BlockContent.js'\nimport { Collapse } from './Collapse/index.js'\nimport { defaultLanguages } from './defaultLanguages.js'\nimport { FloatingCollapse } from './FloatingCollapse/index.js'\n\nconst baseClass = 'payload-richtext-code-block'\nexport const CodeBlockBlockComponent: React.FC<Pick<AdditionalCodeComponentProps, 'languages'>> = (\n args,\n) => {\n const { languages: languagesFromProps } = args\n const languages = languagesFromProps || defaultLanguages\n\n const { BlockCollapsible, formSchema, RemoveButton } = useBlockComponentContext()\n const { setModified } = useForm()\n const { t } = useTranslation()\n\n const { codeField } = useFormFields(([fields]) => ({\n codeField: fields?.code,\n }))\n\n const { selectedLanguageField, setSelectedLanguage } = useFormFields(([fields, dispatch]) => ({\n selectedLanguageField: fields?.language,\n setSelectedLanguage: (language: string) => {\n dispatch({\n type: 'UPDATE',\n path: 'language',\n value: language,\n })\n setModified(true)\n },\n }))\n\n const selectedLanguageLabel = languages[selectedLanguageField?.value as keyof typeof languages]\n\n const isEditable = useLexicalEditable()\n\n const languageEntries = React.useMemo<ComboboxEntry[]>(() => {\n return Object.entries(languages).map(([languageCode, languageLabel]) => ({\n name: `${languageCode} ${languageLabel}`,\n Component: (\n <PopupList.Button\n active={false}\n disabled={false}\n onClick={() => {\n setSelectedLanguage(languageCode)\n }}\n >\n <span className={`${baseClass}__language-code`} data-language={languageCode}>\n {languageLabel}\n </span>\n </PopupList.Button>\n ),\n }))\n }, [languages, setSelectedLanguage])\n\n return (\n <BlockCollapsible\n Actions={\n <div className={`${baseClass}__actions`}>\n <Combobox\n button={\n <div\n className={`${baseClass}__language-selector-button`}\n data-selected-language={selectedLanguageField?.value}\n >\n <span>{selectedLanguageLabel}</span>\n <ChevronIcon className={`${baseClass}__chevron`} />\n </div>\n }\n buttonType=\"custom\"\n className={`${baseClass}__language-selector`}\n disabled={!isEditable}\n entries={languageEntries}\n horizontalAlign=\"right\"\n minEntriesForSearch={8}\n searchPlaceholder={t('fields:searchForLanguage')}\n showScrollbar\n size=\"large\"\n />\n <CopyToClipboard value={(codeField?.value as string) ?? ''} />\n\n <Collapse />\n\n {isEditable && <RemoveButton />}\n </div>\n }\n className={baseClass}\n collapsibleProps={{\n AfterCollapsible: <FloatingCollapse />,\n disableHeaderToggle: true,\n disableToggleIndicator: true,\n }}\n Pill={\n <div className={`${baseClass}__pill`}>\n <CodeBlockIcon />\n </div>\n }\n >\n <RenderFields\n fields={formSchema}\n forceRender={true}\n parentIndexPath=\"\"\n parentPath={''}\n parentSchemaPath=\"\"\n permissions={true}\n readOnly={!isEditable}\n />\n </BlockCollapsible>\n )\n}\n"],"names":["useLexicalEditable","ChevronIcon","Combobox","CopyToClipboard","PopupList","RenderFields","useForm","useFormFields","useTranslation","React","CodeBlockIcon","useBlockComponentContext","Collapse","defaultLanguages","FloatingCollapse","baseClass","CodeBlockBlockComponent","args","languages","languagesFromProps","BlockCollapsible","formSchema","RemoveButton","setModified","t","codeField","fields","code","selectedLanguageField","setSelectedLanguage","dispatch","language","type","path","value","selectedLanguageLabel","isEditable","languageEntries","useMemo","Object","entries","map","languageCode","languageLabel","name","Component","Button","active","disabled","onClick","span","className","data-language","Actions","div","button","data-selected-language","buttonType","horizontalAlign","minEntriesForSearch","searchPlaceholder","showScrollbar","size","collapsibleProps","AfterCollapsible","disableHeaderToggle","disableToggleIndicator","Pill","forceRender","parentIndexPath","parentPath","parentSchemaPath","permissions","readOnly"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import {
|
|
2
|
+
import { jsxDEV as _jsxDEV } from "react/jsx-dev-runtime";
|
|
3
3
|
import { CodeField, useFormFields } from '@payloadcms/ui';
|
|
4
4
|
import React, { useId, useMemo } from 'react';
|
|
5
5
|
import { defaultLanguages } from './defaultLanguages.js';
|
|
@@ -58,7 +58,7 @@ import { defaultLanguages } from './defaultLanguages.js';
|
|
|
58
58
|
instanceId
|
|
59
59
|
]);
|
|
60
60
|
const key = `${field.name}-${language}-${label}`;
|
|
61
|
-
return props && /*#__PURE__*/
|
|
61
|
+
return props && /*#__PURE__*/ _jsxDEV(CodeField, {
|
|
62
62
|
autoComplete: autoComplete,
|
|
63
63
|
field: props,
|
|
64
64
|
forceRender: forceRender,
|
|
@@ -116,7 +116,11 @@ import { defaultLanguages } from './defaultLanguages.js';
|
|
|
116
116
|
renderedBlocks: renderedBlocks,
|
|
117
117
|
schemaPath: schemaPath,
|
|
118
118
|
validate: validate
|
|
119
|
-
}, key
|
|
119
|
+
}, key, false, {
|
|
120
|
+
fileName: "src/features/blocks/premade/CodeBlock/Component/Code.tsx",
|
|
121
|
+
lineNumber: 110,
|
|
122
|
+
columnNumber: 7
|
|
123
|
+
}, this);
|
|
120
124
|
};
|
|
121
125
|
|
|
122
126
|
//# sourceMappingURL=Code.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/features/blocks/premade/CodeBlock/Component/Code.tsx"],"sourcesContent":["'use client'\n\nimport type { CodeFieldClient, CodeFieldClientProps } from 'payload'\n\nimport { CodeField, useFormFields } from '@payloadcms/ui'\nimport React, { useId, useMemo } from 'react'\n\nimport { defaultLanguages } from './defaultLanguages.js'\n\nexport type AdditionalCodeComponentProps = {\n /**\n * @default first key of the `languages` prop\n */\n defaultLanguage?: string\n /**\n * @default all languages supported by Monaco Editor\n */\n languages?: Record<string, string>\n /**\n * Override the name of the block.\n *\n * @default 'Code'\n */\n slug?: string\n /**\n * Configure typescript settings for the editor\n */\n typescript?: {\n /**\n * By default, the editor will not perform semantic validation. This means that\n * while syntax errors will be highlighted, other issues like missing imports or incorrect\n * types will not be.\n *\n * @default false\n */\n enableSemanticValidation?: boolean\n /**\n * Additional types to fetch and include in the editor for autocompletion.\n *\n * For example, to include types for payload, you would set this to\n *\n * [{ url: 'https://unpkg.com/payload@latest/dist/index.d.ts', filePath: 'file:///node_modules/payload/index.d.ts' }]\n */\n fetchTypes?: Array<{\n filePath: string\n url: string\n }>\n /**\n * @default undefined\n */\n paths?: Record<string, string[]>\n /**\n * @default \"ESNext\"\n */\n target?: string\n /**\n * @default ['node_modules/@types']\n */\n typeRoots?: string[]\n }\n}\n\nexport const CodeComponent: React.FC<AdditionalCodeComponentProps & CodeFieldClientProps> = ({\n autoComplete,\n field,\n forceRender,\n languages = defaultLanguages,\n path,\n permissions,\n readOnly,\n renderedBlocks,\n schemaPath,\n typescript,\n validate,\n}) => {\n const languageField = useFormFields(([fields]) => fields['language'])\n\n const language: string =\n (languageField?.value as string) || (languageField?.initialValue as string) || 'typescript'\n\n // unique id per component instance to ensure Monaco creates a distinct model\n // for each TypeScript code block. Using React's useId is SSR-safe and builtin.\n const instanceId = useId()\n\n const label = languages[language]\n\n const props: CodeFieldClient = useMemo<CodeFieldClient>(\n () => ({\n ...field,\n type: 'code',\n admin: {\n ...field.admin,\n editorOptions: {},\n editorProps: {\n // If typescript is set, @monaco-editor/react needs to set the URI to a .ts or .tsx file when it calls createModel().\n // Provide a unique defaultPath per instance so Monaco doesn't reuse the same model\n // across multiple code block instances. We use field.name + instanceId for debugability.\n defaultPath: language === 'ts' ? `file-${field.name}-${instanceId}.tsx` : undefined,\n },\n language,\n },\n }),\n [field, language, instanceId],\n )\n\n const key = `${field.name}-${language}-${label}`\n\n return (\n props && (\n <CodeField\n autoComplete={autoComplete}\n field={props}\n forceRender={forceRender}\n key={key}\n onMount={(_editor, monaco) => {\n monaco.editor.defineTheme('vs-dark', {\n base: 'vs-dark',\n colors: {\n 'editor.background': '#222222',\n },\n inherit: true,\n rules: [],\n })\n\n monaco.editor.defineTheme('vs', {\n base: 'vs',\n colors: {\n 'editor.background': '#f5f5f5',\n },\n inherit: true,\n rules: [],\n })\n monaco.languages.typescript.typescriptDefaults.setCompilerOptions({\n allowNonTsExtensions: true,\n // Set module resolution to NodeJs to enable autocompletion\n allowJs: true,\n allowSyntheticDefaultImports: true,\n esModuleInterop: true,\n jsx: monaco.languages.typescript.JsxEmit.React,\n moduleResolution: monaco.languages.typescript.ModuleResolutionKind.NodeJs,\n noEmit: true,\n paths: typescript?.paths,\n reactNamespace: 'React',\n target: monaco.languages.typescript.ScriptTarget[\n typescript?.target ?? ('ESNext' as any)\n ] as any,\n typeRoots: typescript?.typeRoots ?? ['node_modules/@types'],\n })\n\n monaco.languages.typescript.typescriptDefaults.setDiagnosticsOptions({\n noSemanticValidation: typescript?.enableSemanticValidation ? false : true,\n noSyntaxValidation: false,\n })\n\n const run = async () => {\n if (\n typescript?.fetchTypes &&\n Array.isArray(typescript.fetchTypes) &&\n typescript.fetchTypes.length > 0\n ) {\n await Promise.all(\n typescript.fetchTypes.map(async (type) => {\n const types = await fetch(type.url)\n const typesText = await types.text()\n monaco.languages.typescript.typescriptDefaults.addExtraLib(\n typesText,\n type.filePath,\n )\n }),\n )\n }\n }\n void run()\n }}\n path={path}\n permissions={permissions}\n readOnly={readOnly}\n renderedBlocks={renderedBlocks}\n schemaPath={schemaPath}\n validate={validate}\n />\n )\n )\n}\n"],"names":["CodeField","useFormFields","React","useId","useMemo","defaultLanguages","CodeComponent","autoComplete","field","forceRender","languages","path","permissions","readOnly","renderedBlocks","schemaPath","typescript","validate","languageField","fields","language","value","initialValue","instanceId","label","props","type","admin","editorOptions","editorProps","defaultPath","name","undefined","key","onMount","_editor","monaco","editor","defineTheme","base","colors","inherit","rules","typescriptDefaults","setCompilerOptions","allowNonTsExtensions","allowJs","allowSyntheticDefaultImports","esModuleInterop","jsx","JsxEmit","moduleResolution","ModuleResolutionKind","NodeJs","noEmit","paths","reactNamespace","target","ScriptTarget","typeRoots","setDiagnosticsOptions","noSemanticValidation","enableSemanticValidation","noSyntaxValidation","run","fetchTypes","Array","isArray","length","Promise","all","map","types","fetch","url","typesText","text","addExtraLib","filePath"],"mappings":"AAAA;;AAIA,SAASA,SAAS,EAAEC,aAAa,QAAQ,iBAAgB;AACzD,OAAOC,SAASC,KAAK,EAAEC,OAAO,QAAQ,QAAO;AAE7C,SAASC,gBAAgB,QAAQ,wBAAuB;AAGtD;;GAEC,GAED;;GAEC,GAED;;;;GAIC,GAED;;GAEC,GAEC;;;;;;KAMC,GAED;;;;;;KAMC,GAKD;;KAEC,GAED;;KAEC,GAED;;KAEC,GAKL,OAAO,MAAMC,gBAA+E,CAAC,EAC3FC,YAAY,EACZC,KAAK,EACLC,WAAW,EACXC,YAAYL,gBAAgB,EAC5BM,IAAI,EACJC,WAAW,EACXC,QAAQ,EACRC,cAAc,EACdC,UAAU,EACVC,UAAU,EACVC,QAAQ,EACT;IACC,MAAMC,gBAAgBjB,cAAc,CAAC,CAACkB,OAAO,GAAKA,MAAM,CAAC,WAAW;IAEpE,MAAMC,WACJ,AAACF,eAAeG,SAAqBH,eAAeI,gBAA2B;IAEjF,6EAA6E;IAC7E,+EAA+E;IAC/E,MAAMC,aAAapB;IAEnB,MAAMqB,QAAQd,SAAS,CAACU,SAAS;IAEjC,MAAMK,QAAyBrB,QAC7B,IAAO,CAAA;YACL,GAAGI,KAAK;YACRkB,MAAM;YACNC,OAAO;gBACL,GAAGnB,MAAMmB,KAAK;gBACdC,eAAe,CAAC;gBAChBC,aAAa;oBACX,qHAAqH;oBACrH,mFAAmF;oBACnF,yFAAyF;oBACzFC,aAAaV,aAAa,OAAO,CAAC,KAAK,EAAEZ,MAAMuB,IAAI,CAAC,CAAC,EAAER,WAAW,IAAI,CAAC,GAAGS;gBAC5E;gBACAZ;YACF;QACF,CAAA,GACA;QAACZ;QAAOY;QAAUG;KAAW;IAG/B,MAAMU,MAAM,GAAGzB,MAAMuB,IAAI,CAAC,CAAC,EAAEX,SAAS,CAAC,EAAEI,OAAO;IAEhD,OACEC,uBACE,
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/features/blocks/premade/CodeBlock/Component/Code.tsx"],"sourcesContent":["'use client'\n\nimport type { CodeFieldClient, CodeFieldClientProps } from 'payload'\n\nimport { CodeField, useFormFields } from '@payloadcms/ui'\nimport React, { useId, useMemo } from 'react'\n\nimport { defaultLanguages } from './defaultLanguages.js'\n\nexport type AdditionalCodeComponentProps = {\n /**\n * @default first key of the `languages` prop\n */\n defaultLanguage?: string\n /**\n * @default all languages supported by Monaco Editor\n */\n languages?: Record<string, string>\n /**\n * Override the name of the block.\n *\n * @default 'Code'\n */\n slug?: string\n /**\n * Configure typescript settings for the editor\n */\n typescript?: {\n /**\n * By default, the editor will not perform semantic validation. This means that\n * while syntax errors will be highlighted, other issues like missing imports or incorrect\n * types will not be.\n *\n * @default false\n */\n enableSemanticValidation?: boolean\n /**\n * Additional types to fetch and include in the editor for autocompletion.\n *\n * For example, to include types for payload, you would set this to\n *\n * [{ url: 'https://unpkg.com/payload@latest/dist/index.d.ts', filePath: 'file:///node_modules/payload/index.d.ts' }]\n */\n fetchTypes?: Array<{\n filePath: string\n url: string\n }>\n /**\n * @default undefined\n */\n paths?: Record<string, string[]>\n /**\n * @default \"ESNext\"\n */\n target?: string\n /**\n * @default ['node_modules/@types']\n */\n typeRoots?: string[]\n }\n}\n\nexport const CodeComponent: React.FC<AdditionalCodeComponentProps & CodeFieldClientProps> = ({\n autoComplete,\n field,\n forceRender,\n languages = defaultLanguages,\n path,\n permissions,\n readOnly,\n renderedBlocks,\n schemaPath,\n typescript,\n validate,\n}) => {\n const languageField = useFormFields(([fields]) => fields['language'])\n\n const language: string =\n (languageField?.value as string) || (languageField?.initialValue as string) || 'typescript'\n\n // unique id per component instance to ensure Monaco creates a distinct model\n // for each TypeScript code block. Using React's useId is SSR-safe and builtin.\n const instanceId = useId()\n\n const label = languages[language]\n\n const props: CodeFieldClient = useMemo<CodeFieldClient>(\n () => ({\n ...field,\n type: 'code',\n admin: {\n ...field.admin,\n editorOptions: {},\n editorProps: {\n // If typescript is set, @monaco-editor/react needs to set the URI to a .ts or .tsx file when it calls createModel().\n // Provide a unique defaultPath per instance so Monaco doesn't reuse the same model\n // across multiple code block instances. We use field.name + instanceId for debugability.\n defaultPath: language === 'ts' ? `file-${field.name}-${instanceId}.tsx` : undefined,\n },\n language,\n },\n }),\n [field, language, instanceId],\n )\n\n const key = `${field.name}-${language}-${label}`\n\n return (\n props && (\n <CodeField\n autoComplete={autoComplete}\n field={props}\n forceRender={forceRender}\n key={key}\n onMount={(_editor, monaco) => {\n monaco.editor.defineTheme('vs-dark', {\n base: 'vs-dark',\n colors: {\n 'editor.background': '#222222',\n },\n inherit: true,\n rules: [],\n })\n\n monaco.editor.defineTheme('vs', {\n base: 'vs',\n colors: {\n 'editor.background': '#f5f5f5',\n },\n inherit: true,\n rules: [],\n })\n monaco.languages.typescript.typescriptDefaults.setCompilerOptions({\n allowNonTsExtensions: true,\n // Set module resolution to NodeJs to enable autocompletion\n allowJs: true,\n allowSyntheticDefaultImports: true,\n esModuleInterop: true,\n jsx: monaco.languages.typescript.JsxEmit.React,\n moduleResolution: monaco.languages.typescript.ModuleResolutionKind.NodeJs,\n noEmit: true,\n paths: typescript?.paths,\n reactNamespace: 'React',\n target: monaco.languages.typescript.ScriptTarget[\n typescript?.target ?? ('ESNext' as any)\n ] as any,\n typeRoots: typescript?.typeRoots ?? ['node_modules/@types'],\n })\n\n monaco.languages.typescript.typescriptDefaults.setDiagnosticsOptions({\n noSemanticValidation: typescript?.enableSemanticValidation ? false : true,\n noSyntaxValidation: false,\n })\n\n const run = async () => {\n if (\n typescript?.fetchTypes &&\n Array.isArray(typescript.fetchTypes) &&\n typescript.fetchTypes.length > 0\n ) {\n await Promise.all(\n typescript.fetchTypes.map(async (type) => {\n const types = await fetch(type.url)\n const typesText = await types.text()\n monaco.languages.typescript.typescriptDefaults.addExtraLib(\n typesText,\n type.filePath,\n )\n }),\n )\n }\n }\n void run()\n }}\n path={path}\n permissions={permissions}\n readOnly={readOnly}\n renderedBlocks={renderedBlocks}\n schemaPath={schemaPath}\n validate={validate}\n />\n )\n )\n}\n"],"names":["CodeField","useFormFields","React","useId","useMemo","defaultLanguages","CodeComponent","autoComplete","field","forceRender","languages","path","permissions","readOnly","renderedBlocks","schemaPath","typescript","validate","languageField","fields","language","value","initialValue","instanceId","label","props","type","admin","editorOptions","editorProps","defaultPath","name","undefined","key","onMount","_editor","monaco","editor","defineTheme","base","colors","inherit","rules","typescriptDefaults","setCompilerOptions","allowNonTsExtensions","allowJs","allowSyntheticDefaultImports","esModuleInterop","jsx","JsxEmit","moduleResolution","ModuleResolutionKind","NodeJs","noEmit","paths","reactNamespace","target","ScriptTarget","typeRoots","setDiagnosticsOptions","noSemanticValidation","enableSemanticValidation","noSyntaxValidation","run","fetchTypes","Array","isArray","length","Promise","all","map","types","fetch","url","typesText","text","addExtraLib","filePath"],"mappings":"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"}
|
|
@@ -1,16 +1,25 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { jsxDEV as _jsxDEV } from "react/jsx-dev-runtime";
|
|
2
2
|
import React from 'react';
|
|
3
|
+
import './index.scss';
|
|
3
4
|
const baseClass = 'code-block-collapse-button';
|
|
4
5
|
import { useCollapsible } from '@payloadcms/ui';
|
|
5
6
|
import { CollapseIcon } from '../../../../../../lexical/ui/icons/Collapse/index.js';
|
|
6
7
|
export const Collapse = ()=>{
|
|
7
8
|
const { toggle } = useCollapsible();
|
|
8
|
-
return /*#__PURE__*/
|
|
9
|
+
return /*#__PURE__*/ _jsxDEV("button", {
|
|
9
10
|
className: baseClass,
|
|
10
11
|
onClick: toggle,
|
|
11
12
|
type: "button",
|
|
12
|
-
children: /*#__PURE__*/
|
|
13
|
-
|
|
13
|
+
children: /*#__PURE__*/ _jsxDEV(CollapseIcon, {}, void 0, false, {
|
|
14
|
+
fileName: "src/features/blocks/premade/CodeBlock/Component/Collapse/index.tsx",
|
|
15
|
+
lineNumber: 14,
|
|
16
|
+
columnNumber: 7
|
|
17
|
+
}, this)
|
|
18
|
+
}, void 0, false, {
|
|
19
|
+
fileName: "src/features/blocks/premade/CodeBlock/Component/Collapse/index.tsx",
|
|
20
|
+
lineNumber: 13,
|
|
21
|
+
columnNumber: 5
|
|
22
|
+
}, this);
|
|
14
23
|
};
|
|
15
24
|
|
|
16
25
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../src/features/blocks/premade/CodeBlock/Component/Collapse/index.tsx"],"sourcesContent":["import React from 'react'\n\nimport './index.scss'\n\nconst baseClass = 'code-block-collapse-button'\nimport { useCollapsible } from '@payloadcms/ui'\n\nimport { CollapseIcon } from '../../../../../../lexical/ui/icons/Collapse/index.js'\n\nexport const Collapse: React.FC = () => {\n const { toggle } = useCollapsible()\n return (\n <button className={baseClass} onClick={toggle} type=\"button\">\n <CollapseIcon />\n </button>\n )\n}\n"],"names":["React","baseClass","useCollapsible","CollapseIcon","Collapse","toggle","button","className","onClick","type"],"mappings":";AAAA,OAAOA,WAAW,QAAO;
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/features/blocks/premade/CodeBlock/Component/Collapse/index.tsx"],"sourcesContent":["import React from 'react'\n\nimport './index.scss'\n\nconst baseClass = 'code-block-collapse-button'\nimport { useCollapsible } from '@payloadcms/ui'\n\nimport { CollapseIcon } from '../../../../../../lexical/ui/icons/Collapse/index.js'\n\nexport const Collapse: React.FC = () => {\n const { toggle } = useCollapsible()\n return (\n <button className={baseClass} onClick={toggle} type=\"button\">\n <CollapseIcon />\n </button>\n )\n}\n"],"names":["React","baseClass","useCollapsible","CollapseIcon","Collapse","toggle","button","className","onClick","type"],"mappings":";AAAA,OAAOA,WAAW,QAAO;AAEzB,OAAO,eAAc;AAErB,MAAMC,YAAY;AAClB,SAASC,cAAc,QAAQ,iBAAgB;AAE/C,SAASC,YAAY,QAAQ,uDAAsD;AAEnF,OAAO,MAAMC,WAAqB;IAChC,MAAM,EAAEC,MAAM,EAAE,GAAGH;IACnB,qBACE,QAACI;QAAOC,WAAWN;QAAWO,SAASH;QAAQI,MAAK;kBAClD,cAAA,QAACN;;;;;;;;;;AAGP,EAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { jsxDEV as _jsxDEV } from "react/jsx-dev-runtime";
|
|
2
2
|
import React from 'react';
|
|
3
|
+
import './index.scss';
|
|
3
4
|
const baseClass = 'code-block-floating-collapse-button';
|
|
4
5
|
import { useCollapsible, useTranslation } from '@payloadcms/ui';
|
|
5
6
|
import { CollapseIcon } from '../../../../../../lexical/ui/icons/Collapse/index.js';
|
|
@@ -9,17 +10,29 @@ export const FloatingCollapse = ()=>{
|
|
|
9
10
|
if (!isCollapsed) {
|
|
10
11
|
return null;
|
|
11
12
|
}
|
|
12
|
-
return /*#__PURE__*/
|
|
13
|
+
return /*#__PURE__*/ _jsxDEV("button", {
|
|
13
14
|
className: baseClass,
|
|
14
15
|
onClick: toggle,
|
|
15
16
|
type: "button",
|
|
16
17
|
children: [
|
|
17
|
-
/*#__PURE__*/
|
|
18
|
+
/*#__PURE__*/ _jsxDEV("span", {
|
|
18
19
|
children: t('general:collapse')
|
|
19
|
-
}
|
|
20
|
-
|
|
20
|
+
}, void 0, false, {
|
|
21
|
+
fileName: "src/features/blocks/premade/CodeBlock/Component/FloatingCollapse/index.tsx",
|
|
22
|
+
lineNumber: 20,
|
|
23
|
+
columnNumber: 7
|
|
24
|
+
}, this),
|
|
25
|
+
/*#__PURE__*/ _jsxDEV(CollapseIcon, {}, void 0, false, {
|
|
26
|
+
fileName: "src/features/blocks/premade/CodeBlock/Component/FloatingCollapse/index.tsx",
|
|
27
|
+
lineNumber: 21,
|
|
28
|
+
columnNumber: 7
|
|
29
|
+
}, this)
|
|
21
30
|
]
|
|
22
|
-
}
|
|
31
|
+
}, void 0, true, {
|
|
32
|
+
fileName: "src/features/blocks/premade/CodeBlock/Component/FloatingCollapse/index.tsx",
|
|
33
|
+
lineNumber: 19,
|
|
34
|
+
columnNumber: 5
|
|
35
|
+
}, this);
|
|
23
36
|
};
|
|
24
37
|
|
|
25
38
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../src/features/blocks/premade/CodeBlock/Component/FloatingCollapse/index.tsx"],"sourcesContent":["import React from 'react'\n\nimport './index.scss'\n\nconst baseClass = 'code-block-floating-collapse-button'\nimport { useCollapsible, useTranslation } from '@payloadcms/ui'\n\nimport { CollapseIcon } from '../../../../../../lexical/ui/icons/Collapse/index.js'\n\nexport const FloatingCollapse: React.FC = () => {\n const { isCollapsed, toggle } = useCollapsible()\n const { t } = useTranslation()\n\n if (!isCollapsed) {\n return null\n }\n\n return (\n <button className={baseClass} onClick={toggle} type=\"button\">\n <span>{t('general:collapse')}</span>\n <CollapseIcon />\n </button>\n )\n}\n"],"names":["React","baseClass","useCollapsible","useTranslation","CollapseIcon","FloatingCollapse","isCollapsed","toggle","t","button","className","onClick","type","span"],"mappings":";AAAA,OAAOA,WAAW,QAAO;
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/features/blocks/premade/CodeBlock/Component/FloatingCollapse/index.tsx"],"sourcesContent":["import React from 'react'\n\nimport './index.scss'\n\nconst baseClass = 'code-block-floating-collapse-button'\nimport { useCollapsible, useTranslation } from '@payloadcms/ui'\n\nimport { CollapseIcon } from '../../../../../../lexical/ui/icons/Collapse/index.js'\n\nexport const FloatingCollapse: React.FC = () => {\n const { isCollapsed, toggle } = useCollapsible()\n const { t } = useTranslation()\n\n if (!isCollapsed) {\n return null\n }\n\n return (\n <button className={baseClass} onClick={toggle} type=\"button\">\n <span>{t('general:collapse')}</span>\n <CollapseIcon />\n </button>\n )\n}\n"],"names":["React","baseClass","useCollapsible","useTranslation","CollapseIcon","FloatingCollapse","isCollapsed","toggle","t","button","className","onClick","type","span"],"mappings":";AAAA,OAAOA,WAAW,QAAO;AAEzB,OAAO,eAAc;AAErB,MAAMC,YAAY;AAClB,SAASC,cAAc,EAAEC,cAAc,QAAQ,iBAAgB;AAE/D,SAASC,YAAY,QAAQ,uDAAsD;AAEnF,OAAO,MAAMC,mBAA6B;IACxC,MAAM,EAAEC,WAAW,EAAEC,MAAM,EAAE,GAAGL;IAChC,MAAM,EAAEM,CAAC,EAAE,GAAGL;IAEd,IAAI,CAACG,aAAa;QAChB,OAAO;IACT;IAEA,qBACE,QAACG;QAAOC,WAAWT;QAAWU,SAASJ;QAAQK,MAAK;;0BAClD,QAACC;0BAAML,EAAE;;;;;;0BACT,QAACJ;;;;;;;;;;;AAGP,EAAC"}
|