@payloadcms/richtext-lexical 3.2.3-canary.2d2e7d5 → 3.2.3-canary.673b4b5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/dist/exports/client/bundled.css +1 -1
  2. package/dist/exports/client/{chunk-YSJURFKK.js → chunk-H6YVKFZN.js} +2 -2
  3. package/dist/exports/client/chunk-H6YVKFZN.js.map +7 -0
  4. package/dist/exports/client/componentInline-WMS3WMBA.js +2 -0
  5. package/dist/exports/client/index.d.ts +4 -0
  6. package/dist/exports/client/index.d.ts.map +1 -1
  7. package/dist/exports/client/index.js +11 -11
  8. package/dist/exports/client/index.js.map +4 -4
  9. package/dist/features/align/server/i18n.d.ts.map +1 -1
  10. package/dist/features/align/server/i18n.js +6 -0
  11. package/dist/features/align/server/i18n.js.map +1 -1
  12. package/dist/features/blockquote/server/i18n.d.ts.map +1 -1
  13. package/dist/features/blockquote/server/i18n.js +3 -0
  14. package/dist/features/blockquote/server/i18n.js.map +1 -1
  15. package/dist/features/blocks/WrapperBlockNode.d.ts +1151 -0
  16. package/dist/features/blocks/WrapperBlockNode.d.ts.map +1 -0
  17. package/dist/features/blocks/WrapperBlockNode.js +113 -0
  18. package/dist/features/blocks/WrapperBlockNode.js.map +1 -0
  19. package/dist/features/blocks/client/component/index.d.ts +1 -1
  20. package/dist/features/blocks/client/component/index.d.ts.map +1 -1
  21. package/dist/features/blocks/client/component/index.js.map +1 -1
  22. package/dist/features/blocks/client/componentInline/index.d.ts +1 -1
  23. package/dist/features/blocks/client/componentInline/index.d.ts.map +1 -1
  24. package/dist/features/blocks/client/componentInline/index.js.map +1 -1
  25. package/dist/features/blocks/client/index.d.ts.map +1 -1
  26. package/dist/features/blocks/client/index.js +65 -4
  27. package/dist/features/blocks/client/index.js.map +1 -1
  28. package/dist/features/blocks/client/nodes/BlocksNode.d.ts +2 -2
  29. package/dist/features/blocks/client/nodes/BlocksNode.d.ts.map +1 -1
  30. package/dist/features/blocks/client/nodes/BlocksNode.js +1 -1
  31. package/dist/features/blocks/client/nodes/BlocksNode.js.map +1 -1
  32. package/dist/features/blocks/client/nodes/InlineBlocksNode.d.ts +2 -2
  33. package/dist/features/blocks/client/nodes/InlineBlocksNode.d.ts.map +1 -1
  34. package/dist/features/blocks/client/nodes/InlineBlocksNode.js +1 -1
  35. package/dist/features/blocks/client/nodes/InlineBlocksNode.js.map +1 -1
  36. package/dist/features/blocks/client/plugin/commands.d.ts +12 -1
  37. package/dist/features/blocks/client/plugin/commands.d.ts.map +1 -1
  38. package/dist/features/blocks/client/plugin/commands.js +2 -0
  39. package/dist/features/blocks/client/plugin/commands.js.map +1 -1
  40. package/dist/features/blocks/client/plugin/index.d.ts +1 -1
  41. package/dist/features/blocks/client/plugin/index.d.ts.map +1 -1
  42. package/dist/features/blocks/client/plugin/index.js +30 -35
  43. package/dist/features/blocks/client/plugin/index.js.map +1 -1
  44. package/dist/features/blocks/client/plugin/wrapperBlocks/BlockEditor/index.d.ts +23 -0
  45. package/dist/features/blocks/client/plugin/wrapperBlocks/BlockEditor/index.d.ts.map +1 -0
  46. package/dist/features/blocks/client/plugin/wrapperBlocks/BlockEditor/index.js +330 -0
  47. package/dist/features/blocks/client/plugin/wrapperBlocks/BlockEditor/index.js.map +1 -0
  48. package/dist/features/blocks/client/plugin/wrapperBlocks/BlockEditor/useLexicalFormState.d.ts +22 -0
  49. package/dist/features/blocks/client/plugin/wrapperBlocks/BlockEditor/useLexicalFormState.d.ts.map +1 -0
  50. package/dist/features/blocks/client/plugin/wrapperBlocks/BlockEditor/useLexicalFormState.js +169 -0
  51. package/dist/features/blocks/client/plugin/wrapperBlocks/BlockEditor/useLexicalFormState.js.map +1 -0
  52. package/dist/features/blocks/client/plugin/wrapperBlocks/components/WrapperBlockContainer.d.ts +5 -0
  53. package/dist/features/blocks/client/plugin/wrapperBlocks/components/WrapperBlockContainer.d.ts.map +1 -0
  54. package/dist/features/blocks/client/plugin/wrapperBlocks/components/WrapperBlockContainer.js +28 -0
  55. package/dist/features/blocks/client/plugin/wrapperBlocks/components/WrapperBlockContainer.js.map +1 -0
  56. package/dist/features/blocks/client/plugin/wrapperBlocks/components/WrapperBlockEditButton.d.ts +3 -0
  57. package/dist/features/blocks/client/plugin/wrapperBlocks/components/WrapperBlockEditButton.d.ts.map +1 -0
  58. package/dist/features/blocks/client/plugin/wrapperBlocks/components/WrapperBlockEditButton.js +22 -0
  59. package/dist/features/blocks/client/plugin/wrapperBlocks/components/WrapperBlockEditButton.js.map +1 -0
  60. package/dist/features/blocks/client/plugin/wrapperBlocks/components/WrapperBlockLabel.d.ts +3 -0
  61. package/dist/features/blocks/client/plugin/wrapperBlocks/components/WrapperBlockLabel.d.ts.map +1 -0
  62. package/dist/features/blocks/client/plugin/wrapperBlocks/components/WrapperBlockLabel.js +22 -0
  63. package/dist/features/blocks/client/plugin/wrapperBlocks/components/WrapperBlockLabel.js.map +1 -0
  64. package/dist/features/blocks/client/plugin/wrapperBlocks/components/WrapperBlockRemoveButton.d.ts +3 -0
  65. package/dist/features/blocks/client/plugin/wrapperBlocks/components/WrapperBlockRemoveButton.d.ts.map +1 -0
  66. package/dist/features/blocks/client/plugin/wrapperBlocks/components/WrapperBlockRemoveButton.js +22 -0
  67. package/dist/features/blocks/client/plugin/wrapperBlocks/components/WrapperBlockRemoveButton.js.map +1 -0
  68. package/dist/features/blocks/client/plugin/wrapperBlocks/index.d.ts +9 -0
  69. package/dist/features/blocks/client/plugin/wrapperBlocks/index.d.ts.map +1 -0
  70. package/dist/features/blocks/client/plugin/wrapperBlocks/index.js +111 -0
  71. package/dist/features/blocks/client/plugin/wrapperBlocks/index.js.map +1 -0
  72. package/dist/features/blocks/server/graphQLPopulationPromise.d.ts +4 -3
  73. package/dist/features/blocks/server/graphQLPopulationPromise.d.ts.map +1 -1
  74. package/dist/features/blocks/server/graphQLPopulationPromise.js.map +1 -1
  75. package/dist/features/blocks/server/i18n.d.ts.map +1 -1
  76. package/dist/features/blocks/server/i18n.js +144 -33
  77. package/dist/features/blocks/server/i18n.js.map +1 -1
  78. package/dist/features/blocks/server/index.d.ts +5 -1
  79. package/dist/features/blocks/server/index.d.ts.map +1 -1
  80. package/dist/features/blocks/server/index.js +82 -2
  81. package/dist/features/blocks/server/index.js.map +1 -1
  82. package/dist/features/blocks/server/markdownTransformer.js +2 -2
  83. package/dist/features/blocks/server/markdownTransformer.js.map +1 -1
  84. package/dist/features/blocks/server/nodes/{BlocksNode.d.ts → BlockNode.d.ts} +2 -2
  85. package/dist/features/blocks/server/nodes/BlockNode.d.ts.map +1 -0
  86. package/dist/features/blocks/server/nodes/{BlocksNode.js → BlockNode.js} +1 -1
  87. package/dist/features/blocks/server/nodes/BlockNode.js.map +1 -0
  88. package/dist/features/blocks/server/nodes/{InlineBlocksNode.d.ts → InlineBlockNode.d.ts} +1 -1
  89. package/dist/features/blocks/server/nodes/InlineBlockNode.d.ts.map +1 -0
  90. package/dist/features/blocks/server/nodes/{InlineBlocksNode.js → InlineBlockNode.js} +1 -1
  91. package/dist/features/blocks/server/nodes/InlineBlockNode.js.map +1 -0
  92. package/dist/features/blocks/server/validate.d.ts +4 -3
  93. package/dist/features/blocks/server/validate.d.ts.map +1 -1
  94. package/dist/features/blocks/server/validate.js.map +1 -1
  95. package/dist/features/heading/server/i18n.d.ts.map +1 -1
  96. package/dist/features/heading/server/i18n.js +3 -0
  97. package/dist/features/heading/server/i18n.js.map +1 -1
  98. package/dist/features/horizontalRule/server/i18n.d.ts.map +1 -1
  99. package/dist/features/horizontalRule/server/i18n.js +3 -0
  100. package/dist/features/horizontalRule/server/i18n.js.map +1 -1
  101. package/dist/features/indent/server/i18n.d.ts.map +1 -1
  102. package/dist/features/indent/server/i18n.js +4 -0
  103. package/dist/features/indent/server/i18n.js.map +1 -1
  104. package/dist/features/link/server/i18n.d.ts.map +1 -1
  105. package/dist/features/link/server/i18n.js +4 -0
  106. package/dist/features/link/server/i18n.js.map +1 -1
  107. package/dist/features/lists/checklist/server/i18n.d.ts.map +1 -1
  108. package/dist/features/lists/checklist/server/i18n.js +3 -0
  109. package/dist/features/lists/checklist/server/i18n.js.map +1 -1
  110. package/dist/features/lists/orderedList/server/i18n.d.ts.map +1 -1
  111. package/dist/features/lists/orderedList/server/i18n.js +3 -0
  112. package/dist/features/lists/orderedList/server/i18n.js.map +1 -1
  113. package/dist/features/lists/unorderedList/server/i18n.d.ts.map +1 -1
  114. package/dist/features/lists/unorderedList/server/i18n.js +3 -0
  115. package/dist/features/lists/unorderedList/server/i18n.js.map +1 -1
  116. package/dist/features/paragraph/server/i18n.d.ts.map +1 -1
  117. package/dist/features/paragraph/server/i18n.js +4 -0
  118. package/dist/features/paragraph/server/i18n.js.map +1 -1
  119. package/dist/features/relationship/server/i18n.d.ts.map +1 -1
  120. package/dist/features/relationship/server/i18n.js +3 -0
  121. package/dist/features/relationship/server/i18n.js.map +1 -1
  122. package/dist/features/typesClient.d.ts +3 -2
  123. package/dist/features/typesClient.d.ts.map +1 -1
  124. package/dist/features/typesClient.js.map +1 -1
  125. package/dist/features/typesServer.d.ts +8 -1
  126. package/dist/features/typesServer.d.ts.map +1 -1
  127. package/dist/features/typesServer.js.map +1 -1
  128. package/dist/features/upload/server/i18n.d.ts.map +1 -1
  129. package/dist/features/upload/server/i18n.js +3 -0
  130. package/dist/features/upload/server/i18n.js.map +1 -1
  131. package/dist/field/bundled.css +1 -1
  132. package/dist/field/index.d.ts.map +1 -1
  133. package/dist/field/index.js +19 -16
  134. package/dist/field/index.js.map +1 -1
  135. package/dist/field/rscEntry.js +2 -0
  136. package/dist/field/rscEntry.js.map +1 -1
  137. package/dist/i18n.d.ts.map +1 -1
  138. package/dist/i18n.js +6 -0
  139. package/dist/i18n.js.map +1 -1
  140. package/dist/index.d.ts +3 -2
  141. package/dist/index.d.ts.map +1 -1
  142. package/dist/index.js.map +1 -1
  143. package/dist/lexical/config/client/loader.d.ts +2 -1
  144. package/dist/lexical/config/client/loader.d.ts.map +1 -1
  145. package/dist/lexical/config/client/loader.js +2 -0
  146. package/dist/lexical/config/client/loader.js.map +1 -1
  147. package/dist/nodeTypes.d.ts +2 -2
  148. package/dist/nodeTypes.d.ts.map +1 -1
  149. package/dist/nodeTypes.js.map +1 -1
  150. package/dist/types.d.ts +1 -0
  151. package/dist/types.d.ts.map +1 -1
  152. package/dist/types.js.map +1 -1
  153. package/dist/utilities/createClientFeature.d.ts +1 -0
  154. package/dist/utilities/createClientFeature.d.ts.map +1 -1
  155. package/dist/utilities/createClientFeature.js +2 -0
  156. package/dist/utilities/createClientFeature.js.map +1 -1
  157. package/dist/utilities/generateImportMap.d.ts.map +1 -1
  158. package/dist/utilities/generateImportMap.js +5 -2
  159. package/dist/utilities/generateImportMap.js.map +1 -1
  160. package/dist/utilities/initLexicalFeatures.d.ts +1 -0
  161. package/dist/utilities/initLexicalFeatures.d.ts.map +1 -1
  162. package/dist/utilities/initLexicalFeatures.js +18 -1
  163. package/dist/utilities/initLexicalFeatures.js.map +1 -1
  164. package/package.json +6 -6
  165. package/dist/exports/client/chunk-YSJURFKK.js.map +0 -7
  166. package/dist/exports/client/componentInline-OK3ZQ6YQ.js +0 -2
  167. package/dist/features/blocks/server/nodes/BlocksNode.d.ts.map +0 -1
  168. package/dist/features/blocks/server/nodes/BlocksNode.js.map +0 -1
  169. package/dist/features/blocks/server/nodes/InlineBlocksNode.d.ts.map +0 -1
  170. package/dist/features/blocks/server/nodes/InlineBlocksNode.js.map +0 -1
  171. /package/dist/exports/client/{componentInline-OK3ZQ6YQ.js.map → componentInline-WMS3WMBA.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["getTranslation","BlockIcon","InlineBlocksIcon","createClientFeature","BlockNode","InlineBlockNode","INSERT_BLOCK_COMMAND","INSERT_INLINE_BLOCK_COMMAND","BlocksPlugin","BlocksFeatureClient","featureClientSchemaMap","props","schemaPath","schemaMapRenderedBlockPathPrefix","schemaMapRenderedInlineBlockPathPrefix","clientSchema","blocksFields","Object","entries","filter","key","startsWith","replace","includes","map","value","inlineBlocksFields","clientBlocks","field","blocks","clientInlineBlocks","nodes","plugins","Component","position","sanitizedClientFeatureProps","slashMenu","groups","length","items","block","Icon","slug","keywords","label","i18n","blockDisplayName","labels","singular","onSelect","editor","dispatchCommand","blockName","blockType","t","inlineBlock","Boolean","toolbarFixed","type","ChildComponent","index","isActive","undefined","order"],"sources":["../../../../src/features/blocks/client/index.tsx"],"sourcesContent":["'use client'\n\nimport type { I18nClient } from '@payloadcms/translations'\nimport type { BlocksFieldClient, ClientBlock } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\n\nimport type {\n SlashMenuGroup,\n SlashMenuItem,\n} from '../../../lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.js'\nimport type { ToolbarGroup, ToolbarGroupItem } from '../../toolbars/types.js'\n\nimport { BlockIcon } from '../../../lexical/ui/icons/Block/index.js'\nimport { InlineBlocksIcon } from '../../../lexical/ui/icons/InlineBlocks/index.js'\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { BlockNode } from './nodes/BlocksNode.js'\nimport { InlineBlockNode } from './nodes/InlineBlocksNode.js'\nimport { INSERT_BLOCK_COMMAND, INSERT_INLINE_BLOCK_COMMAND } from './plugin/commands.js'\nimport { BlocksPlugin } from './plugin/index.js'\n\nexport const BlocksFeatureClient = createClientFeature(\n ({ featureClientSchemaMap, props, schemaPath }) => {\n const schemaMapRenderedBlockPathPrefix = `${schemaPath}.lexical_internal_feature.blocks.lexical_blocks`\n const schemaMapRenderedInlineBlockPathPrefix = `${schemaPath}.lexical_internal_feature.blocks.lexical_inline_blocks`\n const clientSchema = featureClientSchemaMap['blocks']\n\n const blocksFields: BlocksFieldClient[] = Object.entries(clientSchema)\n .filter(\n ([key]) =>\n key.startsWith(schemaMapRenderedBlockPathPrefix + '.') &&\n !key.replace(schemaMapRenderedBlockPathPrefix + '.', '').includes('.'),\n )\n .map(([key, value]) => value[0] as BlocksFieldClient)\n\n const inlineBlocksFields: BlocksFieldClient[] = Object.entries(clientSchema)\n .filter(\n ([key]) =>\n key.startsWith(schemaMapRenderedInlineBlockPathPrefix + '.') &&\n !key.replace(schemaMapRenderedInlineBlockPathPrefix + '.', '').includes('.'),\n )\n .map(([key, value]) => value[0] as BlocksFieldClient)\n\n const clientBlocks: ClientBlock[] = blocksFields.map((field) => {\n return field.blocks[0]\n })\n\n const clientInlineBlocks: ClientBlock[] = inlineBlocksFields.map((field) => {\n return field.blocks[0]\n })\n\n return {\n nodes: [BlockNode, InlineBlockNode],\n plugins: [\n {\n Component: BlocksPlugin,\n position: 'normal',\n },\n ],\n sanitizedClientFeatureProps: props,\n slashMenu: {\n groups: [\n clientBlocks?.length\n ? {\n items: clientBlocks.map((block) => {\n return {\n Icon: BlockIcon,\n key: 'block-' + block.slug,\n keywords: ['block', 'blocks', block.slug],\n label: ({ i18n }) => {\n const blockDisplayName = block?.labels?.singular\n ? getTranslation(block.labels.singular, i18n)\n : block?.slug\n\n return blockDisplayName\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INSERT_BLOCK_COMMAND, {\n blockName: '',\n blockType: block.slug,\n })\n },\n } as SlashMenuItem\n }),\n key: 'blocks',\n label: ({ i18n }: { i18n: I18nClient<object, 'lexical:blocks:label'> }) => {\n return i18n.t('lexical:blocks:label')\n },\n }\n : null,\n clientInlineBlocks?.length\n ? {\n items: clientInlineBlocks.map((inlineBlock) => {\n return {\n Icon: InlineBlocksIcon,\n key: 'inlineBlocks-' + inlineBlock.slug,\n keywords: ['inlineBlock', 'inline block', inlineBlock.slug],\n label: ({ i18n }) => {\n const blockDisplayName = inlineBlock?.labels?.singular\n ? getTranslation(inlineBlock.labels.singular, i18n)\n : inlineBlock?.slug\n\n return blockDisplayName\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INSERT_INLINE_BLOCK_COMMAND, {\n blockName: '',\n blockType: inlineBlock.slug,\n })\n },\n } as SlashMenuItem\n }),\n key: 'inlineBlocks',\n label: ({\n i18n,\n }: {\n i18n: I18nClient<object, 'lexical:blocks:inlineBlocks:label'>\n }) => {\n return i18n.t('lexical:blocks:inlineBlocks:label')\n },\n }\n : null,\n ].filter(Boolean) as SlashMenuGroup[],\n },\n toolbarFixed: {\n groups: [\n clientBlocks.length\n ? {\n type: 'dropdown',\n ChildComponent: BlockIcon,\n items: clientBlocks.map((block, index) => {\n return {\n ChildComponent: BlockIcon,\n isActive: undefined, // At this point, we would be inside a sub-richtext-editor. And at this point this will be run against the focused sub-editor, not the parent editor which has the actual block. Thus, no point in running this\n key: 'block-' + block.slug,\n label: ({ i18n }) => {\n const blockDisplayName = block?.labels?.singular\n ? getTranslation(block.labels.singular, i18n)\n : block?.slug\n\n return blockDisplayName\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INSERT_BLOCK_COMMAND, {\n blockName: '',\n blockType: block.slug,\n })\n },\n order: index,\n } as ToolbarGroupItem\n }),\n key: 'blocks',\n order: 20,\n }\n : null,\n clientInlineBlocks?.length\n ? {\n type: 'dropdown',\n ChildComponent: InlineBlocksIcon,\n items: clientInlineBlocks.map((inlineBlock, index) => {\n return {\n ChildComponent: InlineBlocksIcon,\n isActive: undefined,\n key: 'inlineBlock-' + inlineBlock.slug,\n label: ({ i18n }) => {\n const blockDisplayName = inlineBlock?.labels?.singular\n ? getTranslation(inlineBlock.labels.singular, i18n)\n : inlineBlock?.slug\n\n return blockDisplayName\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INSERT_INLINE_BLOCK_COMMAND, {\n blockName: '',\n blockType: inlineBlock.slug,\n })\n },\n order: index,\n } as ToolbarGroupItem\n }),\n key: 'inlineBlocks',\n order: 25,\n }\n : null,\n ].filter(Boolean) as ToolbarGroup[],\n },\n }\n },\n)\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["getTranslation","withMergedProps","BlockIcon","InlineBlocksIcon","createClientFeature","getWrapperBlockNode","BlockNode","InlineBlockNode","INSERT_BLOCK_COMMAND","INSERT_INLINE_BLOCK_COMMAND","INSERT_WRAPPER_BLOCK_COMMAND","BlocksPlugin","WrapperBlocksPlugin","BlocksFeatureClient","featureClientImportMap","featureClientSchemaMap","props","schemaPath","schemaMapRenderedBlockPathPrefix","schemaMapRenderedInlineBlockPathPrefix","schemaMapRenderedWrapperBlockPathPrefix","clientSchema","blocksFields","Object","entries","filter","key","startsWith","replace","includes","map","value","inlineBlocksFields","wrapperBlocksFields","clientBlocks","field","blocks","clientInlineBlocks","clientWrapperBlocks","domMap","length","block","slug","$createWrapperBlockNode","$isWrapperBlockNode","WrapperBlockNode","wrapperBlockToolbarGroup","type","ChildComponent","items","wrapperBlock","index","isActive","undefined","label","i18n","blockDisplayName","labels","singular","onSelect","editor","dispatchCommand","blockName","blockType","order","nodes","Boolean","plugins","Component","position","sanitizeServerOnlyProps","toMergeIntoProps","sanitizedClientFeatureProps","slashMenu","groups","Icon","keywords","t","inlineBlock","toolbarFixed","toolbarInline"],"sources":["../../../../src/features/blocks/client/index.tsx"],"sourcesContent":["'use client'\n\nimport type { I18nClient } from '@payloadcms/translations'\nimport type { Klass, LexicalNode } from 'lexical'\nimport type { BlocksFieldClient, ClientBlock } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { withMergedProps } from '@payloadcms/ui/shared'\n\nimport type {\n SlashMenuGroup,\n SlashMenuItem,\n} from '../../../lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.js'\nimport type { ToolbarGroup, ToolbarGroupItem } from '../../toolbars/types.js'\nimport type { ClientFeature } from '../../typesClient.js'\n\nimport { BlockIcon } from '../../../lexical/ui/icons/Block/index.js'\nimport { InlineBlocksIcon } from '../../../lexical/ui/icons/InlineBlocks/index.js'\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { type DOMMap, getWrapperBlockNode } from '../WrapperBlockNode.js'\nimport { BlockNode } from './nodes/BlocksNode.js'\nimport { InlineBlockNode } from './nodes/InlineBlocksNode.js'\nimport {\n INSERT_BLOCK_COMMAND,\n INSERT_INLINE_BLOCK_COMMAND,\n INSERT_WRAPPER_BLOCK_COMMAND,\n} from './plugin/commands.js'\nimport { BlocksPlugin } from './plugin/index.js'\nimport { WrapperBlocksPlugin } from './plugin/wrapperBlocks/index.js'\n\nexport const BlocksFeatureClient = createClientFeature(\n ({ featureClientImportMap, featureClientSchemaMap, props, schemaPath }) => {\n const schemaMapRenderedBlockPathPrefix = `${schemaPath}.lexical_internal_feature.blocks.lexical_blocks`\n const schemaMapRenderedInlineBlockPathPrefix = `${schemaPath}.lexical_internal_feature.blocks.lexical_inline_blocks`\n const schemaMapRenderedWrapperBlockPathPrefix = `${schemaPath}.lexical_internal_feature.blocks.lexical_wrapper_blocks`\n\n const clientSchema = featureClientSchemaMap['blocks']\n\n const blocksFields: BlocksFieldClient[] = Object.entries(clientSchema)\n .filter(\n ([key]) =>\n key.startsWith(schemaMapRenderedBlockPathPrefix + '.') &&\n !key.replace(schemaMapRenderedBlockPathPrefix + '.', '').includes('.'),\n )\n .map(([key, value]) => value[0] as BlocksFieldClient)\n\n const inlineBlocksFields: BlocksFieldClient[] = Object.entries(clientSchema)\n .filter(\n ([key]) =>\n key.startsWith(schemaMapRenderedInlineBlockPathPrefix + '.') &&\n !key.replace(schemaMapRenderedInlineBlockPathPrefix + '.', '').includes('.'),\n )\n .map(([key, value]) => value[0] as BlocksFieldClient)\n\n const wrapperBlocksFields: BlocksFieldClient[] = Object.entries(clientSchema)\n .filter(\n ([key]) =>\n key.startsWith(schemaMapRenderedWrapperBlockPathPrefix + '.') &&\n !key.replace(schemaMapRenderedWrapperBlockPathPrefix + '.', '').includes('.'),\n )\n .map(([key, value]) => value[0] as BlocksFieldClient)\n\n const clientBlocks: ClientBlock[] = blocksFields.map((field) => {\n return field.blocks[0]\n })\n\n const clientInlineBlocks: ClientBlock[] = inlineBlocksFields.map((field) => {\n return field.blocks[0]\n })\n\n const clientWrapperBlocks: ClientBlock[] = wrapperBlocksFields.map((field) => {\n return field.blocks[0]\n })\n\n const domMap: DOMMap = {}\n\n if (clientWrapperBlocks.length) {\n for (const block of clientWrapperBlocks) {\n domMap[block.slug] = featureClientImportMap[`blocks.${block.slug}`]\n }\n }\n\n const { $createWrapperBlockNode, $isWrapperBlockNode, WrapperBlockNode } =\n getWrapperBlockNode(domMap)\n\n const wrapperBlockToolbarGroup: null | ToolbarGroup = clientWrapperBlocks?.length\n ? {\n type: 'dropdown',\n ChildComponent: InlineBlocksIcon, // TODO: Change icon\n items: clientWrapperBlocks.map((wrapperBlock, index) => {\n return {\n ChildComponent: InlineBlocksIcon, // TODO: Change icon\n isActive: undefined,\n key: 'wrapperBlock-' + wrapperBlock.slug,\n label: ({ i18n }) => {\n const blockDisplayName = wrapperBlock?.labels?.singular\n ? getTranslation(wrapperBlock.labels.singular, i18n)\n : wrapperBlock?.slug\n\n return blockDisplayName\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INSERT_WRAPPER_BLOCK_COMMAND, {\n blockName: '',\n blockType: wrapperBlock.slug,\n })\n },\n order: index,\n } as ToolbarGroupItem\n }),\n key: 'wrapperBlocks',\n order: 25,\n }\n : null\n\n return {\n nodes: [\n clientBlocks?.length ? BlockNode : null,\n clientInlineBlocks?.length ? InlineBlockNode : null,\n clientWrapperBlocks?.length ? WrapperBlockNode : null,\n ].filter(Boolean) as Array<Klass<LexicalNode>>,\n plugins: [\n {\n Component: BlocksPlugin,\n position: 'normal',\n },\n clientWrapperBlocks?.length\n ? {\n Component: withMergedProps<any, any>({\n Component: WrapperBlocksPlugin,\n sanitizeServerOnlyProps: false,\n toMergeIntoProps: {\n $createWrapperBlockNode,\n $isWrapperBlockNode,\n },\n }),\n position: 'floatingAnchorElem',\n }\n : null,\n ].filter(Boolean) as ClientFeature<any>['plugins'],\n sanitizedClientFeatureProps: props,\n slashMenu: {\n groups: [\n clientBlocks?.length\n ? {\n items: clientBlocks.map((block) => {\n return {\n Icon: BlockIcon,\n key: 'block-' + block.slug,\n keywords: ['block', 'blocks', block.slug],\n label: ({ i18n }) => {\n const blockDisplayName = block?.labels?.singular\n ? getTranslation(block.labels.singular, i18n)\n : block?.slug\n\n return blockDisplayName\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INSERT_BLOCK_COMMAND, {\n blockName: '',\n blockType: block.slug,\n })\n },\n } as SlashMenuItem\n }),\n key: 'blocks',\n label: ({ i18n }: { i18n: I18nClient<object, 'lexical:blocks:label'> }) => {\n return i18n.t('lexical:blocks:label')\n },\n }\n : null,\n clientInlineBlocks?.length\n ? {\n items: clientInlineBlocks.map((inlineBlock) => {\n return {\n Icon: InlineBlocksIcon,\n key: 'inlineBlocks-' + inlineBlock.slug,\n keywords: ['inlineBlock', 'inline block', inlineBlock.slug],\n label: ({ i18n }) => {\n const blockDisplayName = inlineBlock?.labels?.singular\n ? getTranslation(inlineBlock.labels.singular, i18n)\n : inlineBlock?.slug\n\n return blockDisplayName\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INSERT_INLINE_BLOCK_COMMAND, {\n blockName: '',\n blockType: inlineBlock.slug,\n })\n },\n } as SlashMenuItem\n }),\n key: 'inlineBlocks',\n label: ({\n i18n,\n }: {\n i18n: I18nClient<object, 'lexical:blocks:inlineBlocks:label'>\n }) => {\n return i18n.t('lexical:blocks:inlineBlocks:label')\n },\n }\n : null,\n ].filter(Boolean) as SlashMenuGroup[],\n },\n toolbarFixed: {\n groups: [\n clientBlocks.length\n ? {\n type: 'dropdown',\n ChildComponent: BlockIcon,\n items: clientBlocks.map((block, index) => {\n return {\n ChildComponent: BlockIcon,\n isActive: undefined, // At this point, we would be inside a sub-richtext-editor. And at this point this will be run against the focused sub-editor, not the parent editor which has the actual block. Thus, no point in running this\n key: 'block-' + block.slug,\n label: ({ i18n }) => {\n const blockDisplayName = block?.labels?.singular\n ? getTranslation(block.labels.singular, i18n)\n : block?.slug\n\n return blockDisplayName\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INSERT_BLOCK_COMMAND, {\n blockName: '',\n blockType: block.slug,\n })\n },\n order: index,\n } as ToolbarGroupItem\n }),\n key: 'blocks',\n order: 20,\n }\n : null,\n clientInlineBlocks?.length\n ? {\n type: 'dropdown',\n ChildComponent: InlineBlocksIcon,\n items: clientInlineBlocks.map((inlineBlock, index) => {\n return {\n ChildComponent: InlineBlocksIcon,\n isActive: undefined,\n key: 'inlineBlock-' + inlineBlock.slug,\n label: ({ i18n }) => {\n const blockDisplayName = inlineBlock?.labels?.singular\n ? getTranslation(inlineBlock.labels.singular, i18n)\n : inlineBlock?.slug\n\n return blockDisplayName\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INSERT_INLINE_BLOCK_COMMAND, {\n blockName: '',\n blockType: inlineBlock.slug,\n })\n },\n order: index,\n } as ToolbarGroupItem\n }),\n key: 'inlineBlocks',\n order: 25,\n }\n : null,\n wrapperBlockToolbarGroup,\n ].filter(Boolean) as ToolbarGroup[],\n },\n toolbarInline: {\n groups: [wrapperBlockToolbarGroup].filter(Boolean) as ToolbarGroup[],\n },\n }\n },\n)\n"],"mappings":"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","ignoreList":[]}
@@ -1,7 +1,7 @@
1
1
  import type { EditorConfig, LexicalEditor, LexicalNode } from 'lexical';
2
2
  import { type JSX } from 'react';
3
- import type { BlockFieldsOptionalID, SerializedBlockNode } from '../../server/nodes/BlocksNode.js';
4
- import { ServerBlockNode } from '../../server/nodes/BlocksNode.js';
3
+ import type { BlockFieldsOptionalID, SerializedBlockNode } from '../../server/nodes/BlockNode.js';
4
+ import { ServerBlockNode } from '../../server/nodes/BlockNode.js';
5
5
  export declare class BlockNode extends ServerBlockNode {
6
6
  static clone(node: ServerBlockNode): ServerBlockNode;
7
7
  static getType(): string;
@@ -1 +1 @@
1
- {"version":3,"file":"BlocksNode.d.ts","sourceRoot":"","sources":["../../../../../src/features/blocks/client/nodes/BlocksNode.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAGvE,OAAc,EAAE,KAAK,GAAG,EAAE,MAAM,OAAO,CAAA;AAEvC,OAAO,KAAK,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AAElG,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAA;AAGlE,qBAAa,SAAU,SAAQ,eAAe;IAC5C,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,eAAe,GAAG,eAAe;IAIpD,MAAM,CAAC,OAAO,IAAI,MAAM;IAIxB,MAAM,CAAC,UAAU,CAAC,cAAc,EAAE,mBAAmB,GAAG,SAAS;IAgBjE,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,GAAG,GAAG,CAAC,OAAO;IAIlE,UAAU,IAAI,mBAAmB;CAGlC;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,qBAAqB,GAAG,SAAS,CAOzE;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,GAAG,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,IAAI,SAAS,CAEhG"}
1
+ {"version":3,"file":"BlocksNode.d.ts","sourceRoot":"","sources":["../../../../../src/features/blocks/client/nodes/BlocksNode.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAGvE,OAAc,EAAE,KAAK,GAAG,EAAE,MAAM,OAAO,CAAA;AAEvC,OAAO,KAAK,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAA;AAEjG,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AAGjE,qBAAa,SAAU,SAAQ,eAAe;IAC5C,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,eAAe,GAAG,eAAe;IAIpD,MAAM,CAAC,OAAO,IAAI,MAAM;IAIxB,MAAM,CAAC,UAAU,CAAC,cAAc,EAAE,mBAAmB,GAAG,SAAS;IAgBjE,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,GAAG,GAAG,CAAC,OAAO;IAIlE,UAAU,IAAI,mBAAmB;CAGlC;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,qBAAqB,GAAG,SAAS,CAOzE;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,GAAG,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,IAAI,SAAS,CAEhG"}
@@ -3,7 +3,7 @@
3
3
  import { jsx as _jsx } from "react/jsx-runtime";
4
4
  import ObjectID from 'bson-objectid';
5
5
  import React from 'react';
6
- import { ServerBlockNode } from '../../server/nodes/BlocksNode.js';
6
+ import { ServerBlockNode } from '../../server/nodes/BlockNode.js';
7
7
  import { BlockComponent } from '../component/index.js';
8
8
  export class BlockNode extends ServerBlockNode {
9
9
  static clone(node) {
@@ -1 +1 @@
1
- {"version":3,"file":"BlocksNode.js","names":["ObjectID","React","ServerBlockNode","BlockComponent","BlockNode","clone","node","getType","importJSON","serializedNode","version","fields","data","$createBlockNode","setFormat","format","decorate","editor","config","_jsx","formData","getFields","nodeKey","getKey","exportJSON","id","default","toHexString","$isBlockNode"],"sources":["../../../../../src/features/blocks/client/nodes/BlocksNode.tsx"],"sourcesContent":["'use client'\nimport type { EditorConfig, LexicalEditor, LexicalNode } from 'lexical'\n\nimport ObjectID from 'bson-objectid'\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 clone(node: ServerBlockNode): ServerBlockNode {\n return super.clone(node)\n }\n\n static getType(): string {\n return super.getType()\n }\n\n static 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 decorate(editor: LexicalEditor, config: EditorConfig): JSX.Element {\n return <BlockComponent formData={this.getFields()} nodeKey={this.getKey()} />\n }\n\n exportJSON(): SerializedBlockNode {\n return super.exportJSON()\n }\n}\n\nexport function $createBlockNode(fields: BlockFieldsOptionalID): BlockNode {\n return new BlockNode({\n fields: {\n ...fields,\n id: fields?.id || new ObjectID.default().toHexString(),\n },\n })\n}\n\nexport function $isBlockNode(node: BlockNode | LexicalNode | null | undefined): node is BlockNode {\n return node instanceof BlockNode\n}\n"],"mappings":"AAAA;;;AAGA,OAAOA,QAAA,MAAc;AACrB,OAAOC,KAAA,MAAyB;AAIhC,SAASC,eAAe,QAAQ;AAChC,SAASC,cAAc,QAAQ;AAE/B,OAAO,MAAMC,SAAA,SAAkBF,eAAA;EAC7B,OAAOG,MAAMC,IAAqB,EAAmB;IACnD,OAAO,KAAK,CAACD,KAAA,CAAMC,IAAA;EACrB;EAEA,OAAOC,QAAA,EAAkB;IACvB,OAAO,KAAK,CAACA,OAAA;EACf;EAEA,OAAOC,WAAWC,cAAmC,EAAa;IAChE,IAAIA,cAAA,CAAeC,OAAO,KAAK,GAAG;MAChC;MACAD,cAAA,GAAiB;QACf,GAAGA,cAAc;QACjBE,MAAA,EAAQ;UACN,GAAGF,cAAC,CAAuBE,MAAM,CAACC;QACpC;QACAF,OAAA,EAAS;MACX;IACF;IACA,MAAMJ,IAAA,GAAOO,gBAAA,CAAiBJ,cAAA,CAAeE,MAAM;IACnDL,IAAA,CAAKQ,SAAS,CAACL,cAAA,CAAeM,MAAM;IACpC,OAAOT,IAAA;EACT;EAEAU,SAASC,MAAqB,EAAEC,MAAoB,EAAe;IACjE,oBAAOC,IAAA,CAAChB,cAAA;MAAeiB,QAAA,EAAU,IAAI,CAACC,SAAS;MAAIC,OAAA,EAAS,IAAI,CAACC,MAAM;;EACzE;EAEAC,WAAA,EAAkC;IAChC,OAAO,KAAK,CAACA,UAAA;EACf;AACF;AAEA,OAAO,SAASX,iBAAiBF,MAA6B;EAC5D,OAAO,IAAIP,SAAA,CAAU;IACnBO,MAAA,EAAQ;MACN,GAAGA,MAAM;MACTc,EAAA,EAAId,MAAA,EAAQc,EAAA,IAAM,IAAIzB,QAAA,CAAS0B,OAAO,GAAGC,WAAW;IACtD;EACF;AACF;AAEA,OAAO,SAASC,aAAatB,IAAgD;EAC3E,OAAOA,IAAA,YAAgBF,SAAA;AACzB","ignoreList":[]}
1
+ {"version":3,"file":"BlocksNode.js","names":["ObjectID","React","ServerBlockNode","BlockComponent","BlockNode","clone","node","getType","importJSON","serializedNode","version","fields","data","$createBlockNode","setFormat","format","decorate","editor","config","_jsx","formData","getFields","nodeKey","getKey","exportJSON","id","default","toHexString","$isBlockNode"],"sources":["../../../../../src/features/blocks/client/nodes/BlocksNode.tsx"],"sourcesContent":["'use client'\nimport type { EditorConfig, LexicalEditor, LexicalNode } from 'lexical'\n\nimport ObjectID from 'bson-objectid'\nimport React, { type JSX } from 'react'\n\nimport type { BlockFieldsOptionalID, SerializedBlockNode } from '../../server/nodes/BlockNode.js'\n\nimport { ServerBlockNode } from '../../server/nodes/BlockNode.js'\nimport { BlockComponent } from '../component/index.js'\n\nexport class BlockNode extends ServerBlockNode {\n static clone(node: ServerBlockNode): ServerBlockNode {\n return super.clone(node)\n }\n\n static getType(): string {\n return super.getType()\n }\n\n static 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 decorate(editor: LexicalEditor, config: EditorConfig): JSX.Element {\n return <BlockComponent formData={this.getFields()} nodeKey={this.getKey()} />\n }\n\n exportJSON(): SerializedBlockNode {\n return super.exportJSON()\n }\n}\n\nexport function $createBlockNode(fields: BlockFieldsOptionalID): BlockNode {\n return new BlockNode({\n fields: {\n ...fields,\n id: fields?.id || new ObjectID.default().toHexString(),\n },\n })\n}\n\nexport function $isBlockNode(node: BlockNode | LexicalNode | null | undefined): node is BlockNode {\n return node instanceof BlockNode\n}\n"],"mappings":"AAAA;;;AAGA,OAAOA,QAAA,MAAc;AACrB,OAAOC,KAAA,MAAyB;AAIhC,SAASC,eAAe,QAAQ;AAChC,SAASC,cAAc,QAAQ;AAE/B,OAAO,MAAMC,SAAA,SAAkBF,eAAA;EAC7B,OAAOG,MAAMC,IAAqB,EAAmB;IACnD,OAAO,KAAK,CAACD,KAAA,CAAMC,IAAA;EACrB;EAEA,OAAOC,QAAA,EAAkB;IACvB,OAAO,KAAK,CAACA,OAAA;EACf;EAEA,OAAOC,WAAWC,cAAmC,EAAa;IAChE,IAAIA,cAAA,CAAeC,OAAO,KAAK,GAAG;MAChC;MACAD,cAAA,GAAiB;QACf,GAAGA,cAAc;QACjBE,MAAA,EAAQ;UACN,GAAGF,cAAC,CAAuBE,MAAM,CAACC;QACpC;QACAF,OAAA,EAAS;MACX;IACF;IACA,MAAMJ,IAAA,GAAOO,gBAAA,CAAiBJ,cAAA,CAAeE,MAAM;IACnDL,IAAA,CAAKQ,SAAS,CAACL,cAAA,CAAeM,MAAM;IACpC,OAAOT,IAAA;EACT;EAEAU,SAASC,MAAqB,EAAEC,MAAoB,EAAe;IACjE,oBAAOC,IAAA,CAAChB,cAAA;MAAeiB,QAAA,EAAU,IAAI,CAACC,SAAS;MAAIC,OAAA,EAAS,IAAI,CAACC,MAAM;;EACzE;EAEAC,WAAA,EAAkC;IAChC,OAAO,KAAK,CAACA,UAAA;EACf;AACF;AAEA,OAAO,SAASX,iBAAiBF,MAA6B;EAC5D,OAAO,IAAIP,SAAA,CAAU;IACnBO,MAAA,EAAQ;MACN,GAAGA,MAAM;MACTc,EAAA,EAAId,MAAA,EAAQc,EAAA,IAAM,IAAIzB,QAAA,CAAS0B,OAAO,GAAGC,WAAW;IACtD;EACF;AACF;AAEA,OAAO,SAASC,aAAatB,IAAgD;EAC3E,OAAOA,IAAA,YAAgBF,SAAA;AACzB","ignoreList":[]}
@@ -1,7 +1,7 @@
1
1
  import type { EditorConfig, LexicalEditor, LexicalNode } from 'lexical';
2
2
  import { type JSX } from 'react';
3
- import type { InlineBlockFields, SerializedInlineBlockNode } from '../../server/nodes/InlineBlocksNode.js';
4
- import { ServerInlineBlockNode } from '../../server/nodes/InlineBlocksNode.js';
3
+ import type { InlineBlockFields, SerializedInlineBlockNode } from '../../server/nodes/InlineBlockNode.js';
4
+ import { ServerInlineBlockNode } from '../../server/nodes/InlineBlockNode.js';
5
5
  export declare class InlineBlockNode extends ServerInlineBlockNode {
6
6
  static clone(node: ServerInlineBlockNode): ServerInlineBlockNode;
7
7
  static getType(): string;
@@ -1 +1 @@
1
- {"version":3,"file":"InlineBlocksNode.d.ts","sourceRoot":"","sources":["../../../../../src/features/blocks/client/nodes/InlineBlocksNode.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAGvE,OAAc,EAAE,KAAK,GAAG,EAAE,MAAM,OAAO,CAAA;AAEvC,OAAO,KAAK,EACV,iBAAiB,EACjB,yBAAyB,EAC1B,MAAM,wCAAwC,CAAA;AAE/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAA;AAQ9E,qBAAa,eAAgB,SAAQ,qBAAqB;IACxD,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,qBAAqB,GAAG,qBAAqB;IAIhE,MAAM,CAAC,OAAO,IAAI,MAAM;IAIxB,MAAM,CAAC,UAAU,CAAC,cAAc,EAAE,yBAAyB,GAAG,eAAe;IAK7E,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,GAAG,GAAG,CAAC,OAAO;IAIlE,UAAU,IAAI,yBAAyB;CAGxC;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,GAAG,eAAe,CAOhG;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,eAAe,GAAG,WAAW,GAAG,IAAI,GAAG,SAAS,GACrD,IAAI,IAAI,eAAe,CAEzB"}
1
+ {"version":3,"file":"InlineBlocksNode.d.ts","sourceRoot":"","sources":["../../../../../src/features/blocks/client/nodes/InlineBlocksNode.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAGvE,OAAc,EAAE,KAAK,GAAG,EAAE,MAAM,OAAO,CAAA;AAEvC,OAAO,KAAK,EACV,iBAAiB,EACjB,yBAAyB,EAC1B,MAAM,uCAAuC,CAAA;AAE9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAA;AAQ7E,qBAAa,eAAgB,SAAQ,qBAAqB;IACxD,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,qBAAqB,GAAG,qBAAqB;IAIhE,MAAM,CAAC,OAAO,IAAI,MAAM;IAIxB,MAAM,CAAC,UAAU,CAAC,cAAc,EAAE,yBAAyB,GAAG,eAAe;IAK7E,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,GAAG,GAAG,CAAC,OAAO;IAIlE,UAAU,IAAI,yBAAyB;CAGxC;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,GAAG,eAAe,CAOhG;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,eAAe,GAAG,WAAW,GAAG,IAAI,GAAG,SAAS,GACrD,IAAI,IAAI,eAAe,CAEzB"}
@@ -3,7 +3,7 @@
3
3
  import { jsx as _jsx } from "react/jsx-runtime";
4
4
  import ObjectID from 'bson-objectid';
5
5
  import React from 'react';
6
- import { ServerInlineBlockNode } from '../../server/nodes/InlineBlocksNode.js';
6
+ import { ServerInlineBlockNode } from '../../server/nodes/InlineBlockNode.js';
7
7
  const InlineBlockComponent = /*#__PURE__*/React.lazy(() => import('../componentInline/index.js').then(module => ({
8
8
  default: module.InlineBlockComponent
9
9
  })));
@@ -1 +1 @@
1
- {"version":3,"file":"InlineBlocksNode.js","names":["ObjectID","React","ServerInlineBlockNode","InlineBlockComponent","lazy","then","module","default","InlineBlockNode","clone","node","getType","importJSON","serializedNode","$createInlineBlockNode","fields","decorate","editor","config","_jsx","formData","getFields","nodeKey","getKey","exportJSON","id","toHexString","$isInlineBlockNode"],"sources":["../../../../../src/features/blocks/client/nodes/InlineBlocksNode.tsx"],"sourcesContent":["'use client'\nimport type { EditorConfig, LexicalEditor, LexicalNode } from 'lexical'\n\nimport ObjectID from 'bson-objectid'\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 clone(node: ServerInlineBlockNode): ServerInlineBlockNode {\n return super.clone(node)\n }\n\n static getType(): string {\n return super.getType()\n }\n\n static importJSON(serializedNode: SerializedInlineBlockNode): InlineBlockNode {\n const node = $createInlineBlockNode(serializedNode.fields)\n return node\n }\n\n decorate(editor: LexicalEditor, config: EditorConfig): JSX.Element {\n return <InlineBlockComponent formData={this.getFields()} nodeKey={this.getKey()} />\n }\n\n exportJSON(): SerializedInlineBlockNode {\n return super.exportJSON()\n }\n}\n\nexport function $createInlineBlockNode(fields: Exclude<InlineBlockFields, 'id'>): InlineBlockNode {\n return new InlineBlockNode({\n fields: {\n ...fields,\n id: fields?.id || new ObjectID.default().toHexString(),\n },\n })\n}\n\nexport function $isInlineBlockNode(\n node: InlineBlockNode | LexicalNode | null | undefined,\n): node is InlineBlockNode {\n return node instanceof InlineBlockNode\n}\n"],"mappings":"AAAA;;;AAGA,OAAOA,QAAA,MAAc;AACrB,OAAOC,KAAA,MAAyB;AAOhC,SAASC,qBAAqB,QAAQ;AAEtC,MAAMC,oBAAA,gBAAuBF,KAAA,CAAMG,IAAI,CAAC,MACtC,MAAM,CAAC,+BAA+BC,IAAI,CAAEC,MAAA,KAAY;EACtDC,OAAA,EAASD,MAAA,CAAOH;AAClB;AAGF,OAAO,MAAMK,eAAA,SAAwBN,qBAAA;EACnC,OAAOO,MAAMC,IAA2B,EAAyB;IAC/D,OAAO,KAAK,CAACD,KAAA,CAAMC,IAAA;EACrB;EAEA,OAAOC,QAAA,EAAkB;IACvB,OAAO,KAAK,CAACA,OAAA;EACf;EAEA,OAAOC,WAAWC,cAAyC,EAAmB;IAC5E,MAAMH,IAAA,GAAOI,sBAAA,CAAuBD,cAAA,CAAeE,MAAM;IACzD,OAAOL,IAAA;EACT;EAEAM,SAASC,MAAqB,EAAEC,MAAoB,EAAe;IACjE,oBAAOC,IAAA,CAAChB,oBAAA;MAAqBiB,QAAA,EAAU,IAAI,CAACC,SAAS;MAAIC,OAAA,EAAS,IAAI,CAACC,MAAM;;EAC/E;EAEAC,WAAA,EAAwC;IACtC,OAAO,KAAK,CAACA,UAAA;EACf;AACF;AAEA,OAAO,SAASV,uBAAuBC,MAAwC;EAC7E,OAAO,IAAIP,eAAA,CAAgB;IACzBO,MAAA,EAAQ;MACN,GAAGA,MAAM;MACTU,EAAA,EAAIV,MAAA,EAAQU,EAAA,IAAM,IAAIzB,QAAA,CAASO,OAAO,GAAGmB,WAAW;IACtD;EACF;AACF;AAEA,OAAO,SAASC,mBACdjB,IAAsD;EAEtD,OAAOA,IAAA,YAAgBF,eAAA;AACzB","ignoreList":[]}
1
+ {"version":3,"file":"InlineBlocksNode.js","names":["ObjectID","React","ServerInlineBlockNode","InlineBlockComponent","lazy","then","module","default","InlineBlockNode","clone","node","getType","importJSON","serializedNode","$createInlineBlockNode","fields","decorate","editor","config","_jsx","formData","getFields","nodeKey","getKey","exportJSON","id","toHexString","$isInlineBlockNode"],"sources":["../../../../../src/features/blocks/client/nodes/InlineBlocksNode.tsx"],"sourcesContent":["'use client'\nimport type { EditorConfig, LexicalEditor, LexicalNode } from 'lexical'\n\nimport ObjectID from 'bson-objectid'\nimport React, { type JSX } from 'react'\n\nimport type {\n InlineBlockFields,\n SerializedInlineBlockNode,\n} from '../../server/nodes/InlineBlockNode.js'\n\nimport { ServerInlineBlockNode } from '../../server/nodes/InlineBlockNode.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 clone(node: ServerInlineBlockNode): ServerInlineBlockNode {\n return super.clone(node)\n }\n\n static getType(): string {\n return super.getType()\n }\n\n static importJSON(serializedNode: SerializedInlineBlockNode): InlineBlockNode {\n const node = $createInlineBlockNode(serializedNode.fields)\n return node\n }\n\n decorate(editor: LexicalEditor, config: EditorConfig): JSX.Element {\n return <InlineBlockComponent formData={this.getFields()} nodeKey={this.getKey()} />\n }\n\n exportJSON(): SerializedInlineBlockNode {\n return super.exportJSON()\n }\n}\n\nexport function $createInlineBlockNode(fields: Exclude<InlineBlockFields, 'id'>): InlineBlockNode {\n return new InlineBlockNode({\n fields: {\n ...fields,\n id: fields?.id || new ObjectID.default().toHexString(),\n },\n })\n}\n\nexport function $isInlineBlockNode(\n node: InlineBlockNode | LexicalNode | null | undefined,\n): node is InlineBlockNode {\n return node instanceof InlineBlockNode\n}\n"],"mappings":"AAAA;;;AAGA,OAAOA,QAAA,MAAc;AACrB,OAAOC,KAAA,MAAyB;AAOhC,SAASC,qBAAqB,QAAQ;AAEtC,MAAMC,oBAAA,gBAAuBF,KAAA,CAAMG,IAAI,CAAC,MACtC,MAAM,CAAC,+BAA+BC,IAAI,CAAEC,MAAA,KAAY;EACtDC,OAAA,EAASD,MAAA,CAAOH;AAClB;AAGF,OAAO,MAAMK,eAAA,SAAwBN,qBAAA;EACnC,OAAOO,MAAMC,IAA2B,EAAyB;IAC/D,OAAO,KAAK,CAACD,KAAA,CAAMC,IAAA;EACrB;EAEA,OAAOC,QAAA,EAAkB;IACvB,OAAO,KAAK,CAACA,OAAA;EACf;EAEA,OAAOC,WAAWC,cAAyC,EAAmB;IAC5E,MAAMH,IAAA,GAAOI,sBAAA,CAAuBD,cAAA,CAAeE,MAAM;IACzD,OAAOL,IAAA;EACT;EAEAM,SAASC,MAAqB,EAAEC,MAAoB,EAAe;IACjE,oBAAOC,IAAA,CAAChB,oBAAA;MAAqBiB,QAAA,EAAU,IAAI,CAACC,SAAS;MAAIC,OAAA,EAAS,IAAI,CAACC,MAAM;;EAC/E;EAEAC,WAAA,EAAwC;IACtC,OAAO,KAAK,CAACA,UAAA;EACf;AACF;AAEA,OAAO,SAASV,uBAAuBC,MAAwC;EAC7E,OAAO,IAAIP,eAAA,CAAgB;IACzBO,MAAA,EAAQ;MACN,GAAGA,MAAM;MACTU,EAAA,EAAIV,MAAA,EAAQU,EAAA,IAAM,IAAIzB,QAAA,CAASO,OAAO,GAAGmB,WAAW;IACtD;EACF;AACF;AAEA,OAAO,SAASC,mBACdjB,IAAsD;EAEtD,OAAOA,IAAA,YAAgBF,eAAA;AACzB","ignoreList":[]}
@@ -1,5 +1,16 @@
1
- import type { LexicalCommand } from 'lexical';
1
+ import type { LexicalCommand, LexicalNode } from 'lexical';
2
+ import type { WrapperBlockFields } from '../../WrapperBlockNode.js';
2
3
  import type { InsertBlockPayload } from './index.js';
3
4
  export declare const INSERT_BLOCK_COMMAND: LexicalCommand<InsertBlockPayload>;
4
5
  export declare const INSERT_INLINE_BLOCK_COMMAND: LexicalCommand<Partial<InsertBlockPayload>>;
6
+ export declare const INSERT_WRAPPER_BLOCK_COMMAND: LexicalCommand<Partial<null | WrapperBlockFields>>;
7
+ export type WrapperBlockPayload = {
8
+ fields: WrapperBlockFields;
9
+ selectedNodes?: LexicalNode[];
10
+ /**
11
+ * The text content of the WrapperBlock node - will be displayed in the drawer
12
+ */
13
+ text: null | string;
14
+ };
15
+ export declare const TOGGLE_WRAPPER_BLOCK_WITH_MODAL_COMMAND: LexicalCommand<null | WrapperBlockPayload>;
5
16
  //# sourceMappingURL=commands.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../../../src/features/blocks/client/plugin/commands.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAI7C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAEpD,eAAO,MAAM,oBAAoB,EAAE,cAAc,CAAC,kBAAkB,CAC7B,CAAA;AAEvC,eAAO,MAAM,2BAA2B,EAAE,cAAc,CAAC,OAAO,CAAC,kBAAkB,CAAC,CACtC,CAAA"}
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../../../src/features/blocks/client/plugin/commands.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAI1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AACnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAEpD,eAAO,MAAM,oBAAoB,EAAE,cAAc,CAAC,kBAAkB,CAC7B,CAAA;AAEvC,eAAO,MAAM,2BAA2B,EAAE,cAAc,CAAC,OAAO,CAAC,kBAAkB,CAAC,CACtC,CAAA;AAE9C,eAAO,MAAM,4BAA4B,EAAE,cAAc,CAAC,OAAO,CAAC,IAAI,GAAG,kBAAkB,CAAC,CAC7C,CAAA;AAE/C,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,kBAAkB,CAAA;IAE1B,aAAa,CAAC,EAAE,WAAW,EAAE,CAAA;IAC7B;;OAEG;IACH,IAAI,EAAE,IAAI,GAAG,MAAM,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,uCAAuC,EAAE,cAAc,CAAC,IAAI,GAAG,mBAAmB,CACrC,CAAA"}
@@ -3,4 +3,6 @@
3
3
  import { createCommand } from 'lexical';
4
4
  export const INSERT_BLOCK_COMMAND = createCommand('INSERT_BLOCK_COMMAND');
5
5
  export const INSERT_INLINE_BLOCK_COMMAND = createCommand('INSERT_INLINE_BLOCK_COMMAND');
6
+ export const INSERT_WRAPPER_BLOCK_COMMAND = createCommand('INSERT_WRAPPER_BLOCK_COMMAND');
7
+ export const TOGGLE_WRAPPER_BLOCK_WITH_MODAL_COMMAND = createCommand('TOGGLE_WRAPPER_BLOCK_WITH_MODAL_COMMAND');
6
8
  //# sourceMappingURL=commands.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"commands.js","names":["createCommand","INSERT_BLOCK_COMMAND","INSERT_INLINE_BLOCK_COMMAND"],"sources":["../../../../../src/features/blocks/client/plugin/commands.ts"],"sourcesContent":["'use client'\nimport type { LexicalCommand } from 'lexical'\n\nimport { createCommand } from 'lexical'\n\nimport type { InsertBlockPayload } from './index.js'\n\nexport const INSERT_BLOCK_COMMAND: LexicalCommand<InsertBlockPayload> =\n createCommand('INSERT_BLOCK_COMMAND')\n\nexport const INSERT_INLINE_BLOCK_COMMAND: LexicalCommand<Partial<InsertBlockPayload>> =\n createCommand('INSERT_INLINE_BLOCK_COMMAND')\n"],"mappings":"AAAA;;AAGA,SAASA,aAAa,QAAQ;AAI9B,OAAO,MAAMC,oBAAA,GACXD,aAAA,CAAc;AAEhB,OAAO,MAAME,2BAAA,GACXF,aAAA,CAAc","ignoreList":[]}
1
+ {"version":3,"file":"commands.js","names":["createCommand","INSERT_BLOCK_COMMAND","INSERT_INLINE_BLOCK_COMMAND","INSERT_WRAPPER_BLOCK_COMMAND","TOGGLE_WRAPPER_BLOCK_WITH_MODAL_COMMAND"],"sources":["../../../../../src/features/blocks/client/plugin/commands.ts"],"sourcesContent":["'use client'\nimport type { LexicalCommand, LexicalNode } from 'lexical'\n\nimport { createCommand } from 'lexical'\n\nimport type { WrapperBlockFields } from '../../WrapperBlockNode.js'\nimport type { InsertBlockPayload } from './index.js'\n\nexport const INSERT_BLOCK_COMMAND: LexicalCommand<InsertBlockPayload> =\n createCommand('INSERT_BLOCK_COMMAND')\n\nexport const INSERT_INLINE_BLOCK_COMMAND: LexicalCommand<Partial<InsertBlockPayload>> =\n createCommand('INSERT_INLINE_BLOCK_COMMAND')\n\nexport const INSERT_WRAPPER_BLOCK_COMMAND: LexicalCommand<Partial<null | WrapperBlockFields>> =\n createCommand('INSERT_WRAPPER_BLOCK_COMMAND')\n\nexport type WrapperBlockPayload = {\n fields: WrapperBlockFields\n\n selectedNodes?: LexicalNode[]\n /**\n * The text content of the WrapperBlock node - will be displayed in the drawer\n */\n text: null | string\n}\n\nexport const TOGGLE_WRAPPER_BLOCK_WITH_MODAL_COMMAND: LexicalCommand<null | WrapperBlockPayload> =\n createCommand('TOGGLE_WRAPPER_BLOCK_WITH_MODAL_COMMAND')\n"],"mappings":"AAAA;;AAGA,SAASA,aAAa,QAAQ;AAK9B,OAAO,MAAMC,oBAAA,GACXD,aAAA,CAAc;AAEhB,OAAO,MAAME,2BAAA,GACXF,aAAA,CAAc;AAEhB,OAAO,MAAMG,4BAAA,GACXH,aAAA,CAAc;AAYhB,OAAO,MAAMI,uCAAA,GACXJ,aAAA,CAAc","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  import type { PluginComponent } from '../../../typesClient.js';
2
- import type { BlockFieldsOptionalID } from '../../server/nodes/BlocksNode.js';
2
+ import type { BlockFieldsOptionalID } from '../../server/nodes/BlockNode.js';
3
3
  export type InsertBlockPayload = BlockFieldsOptionalID;
4
4
  export declare const BlocksPlugin: PluginComponent;
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/blocks/client/plugin/index.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,KAAK,EAAe,qBAAqB,EAAE,MAAM,kCAAkC,CAAA;AAQ1F,MAAM,MAAM,kBAAkB,GAAG,qBAAqB,CAAA;AAEtD,eAAO,MAAM,YAAY,EAAE,eAoF1B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/blocks/client/plugin/index.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,KAAK,EAAe,qBAAqB,EAAE,MAAM,iCAAiC,CAAA;AAQzF,MAAM,MAAM,kBAAkB,GAAG,qBAAqB,CAAA;AAEtD,eAAO,MAAM,YAAY,EAAE,eAgF1B,CAAA"}
@@ -8,7 +8,7 @@ import { $createParagraphNode, $getNodeByKey, $getPreviousSelection, $getSelecti
8
8
  import { useEffect, useState } from 'react';
9
9
  import { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js';
10
10
  import { useLexicalDrawer } from '../../../../utilities/fieldsDrawer/useLexicalDrawer.js';
11
- import { $createBlockNode, BlockNode } from '../nodes/BlocksNode.js';
11
+ import { $createBlockNode } from '../nodes/BlocksNode.js';
12
12
  import { $createInlineBlockNode, $isInlineBlockNode } from '../nodes/InlineBlocksNode.js';
13
13
  import { INSERT_BLOCK_COMMAND, INSERT_INLINE_BLOCK_COMMAND } from './commands.js';
14
14
  export const BlocksPlugin = () => {
@@ -38,44 +38,39 @@ export const BlocksPlugin = () => {
38
38
  } = useLexicalDrawer(drawerSlug, true);
39
39
  let t2;
40
40
  if ($[3] !== editor || $[4] !== targetNodeKey) {
41
- t2 = () => {
42
- if (!editor.hasNodes([BlockNode])) {
43
- throw new Error("BlocksPlugin: BlocksNode not registered on editor");
44
- }
45
- return mergeRegister(editor.registerCommand(INSERT_BLOCK_COMMAND, payload => {
46
- editor.update(() => {
47
- const selection = $getSelection() || $getPreviousSelection();
48
- if ($isRangeSelection(selection)) {
49
- const blockNode = $createBlockNode(payload);
50
- $insertNodeToNearestRoot(blockNode);
51
- const {
52
- focus
53
- } = selection;
54
- const focusNode = focus.getNode();
55
- if ($isParagraphNode(focusNode) && focusNode.getTextContentSize() === 0 && focusNode.getParentOrThrow().getChildren().filter(node => $isParagraphNode(node)).length > 1) {
56
- focusNode.remove();
57
- }
58
- }
59
- });
60
- return true;
61
- }, COMMAND_PRIORITY_EDITOR), editor.registerCommand(INSERT_INLINE_BLOCK_COMMAND, fields => {
62
- if (targetNodeKey) {
63
- const node_0 = $getNodeByKey(targetNodeKey);
64
- if (!node_0 || !$isInlineBlockNode(node_0)) {
65
- return false;
41
+ t2 = () => mergeRegister(editor.registerCommand(INSERT_BLOCK_COMMAND, payload => {
42
+ editor.update(() => {
43
+ const selection = $getSelection() || $getPreviousSelection();
44
+ if ($isRangeSelection(selection)) {
45
+ const blockNode = $createBlockNode(payload);
46
+ $insertNodeToNearestRoot(blockNode);
47
+ const {
48
+ focus
49
+ } = selection;
50
+ const focusNode = focus.getNode();
51
+ if ($isParagraphNode(focusNode) && focusNode.getTextContentSize() === 0 && focusNode.getParentOrThrow().getChildren().filter(node => $isParagraphNode(node)).length > 1) {
52
+ focusNode.remove();
66
53
  }
67
- node_0.setFields(fields);
68
- setTargetNodeKey(null);
69
- return true;
70
54
  }
71
- const inlineBlockNode = $createInlineBlockNode(fields);
72
- $insertNodes([inlineBlockNode]);
73
- if ($isRootOrShadowRoot(inlineBlockNode.getParentOrThrow())) {
74
- $wrapNodeInElement(inlineBlockNode, $createParagraphNode).selectEnd();
55
+ });
56
+ return true;
57
+ }, COMMAND_PRIORITY_EDITOR), editor.registerCommand(INSERT_INLINE_BLOCK_COMMAND, fields => {
58
+ if (targetNodeKey) {
59
+ const node_0 = $getNodeByKey(targetNodeKey);
60
+ if (!node_0 || !$isInlineBlockNode(node_0)) {
61
+ return false;
75
62
  }
63
+ node_0.setFields(fields);
64
+ setTargetNodeKey(null);
76
65
  return true;
77
- }, COMMAND_PRIORITY_EDITOR));
78
- };
66
+ }
67
+ const inlineBlockNode = $createInlineBlockNode(fields);
68
+ $insertNodes([inlineBlockNode]);
69
+ if ($isRootOrShadowRoot(inlineBlockNode.getParentOrThrow())) {
70
+ $wrapNodeInElement(inlineBlockNode, $createParagraphNode).selectEnd();
71
+ }
72
+ return true;
73
+ }, COMMAND_PRIORITY_EDITOR));
79
74
  $[3] = editor;
80
75
  $[4] = targetNodeKey;
81
76
  $[5] = t2;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","$insertNodeToNearestRoot","$wrapNodeInElement","mergeRegister","formatDrawerSlug","useEditDepth","$createParagraphNode","$getNodeByKey","$getPreviousSelection","$getSelection","$insertNodes","$isParagraphNode","$isRangeSelection","$isRootOrShadowRoot","COMMAND_PRIORITY_EDITOR","useEffect","useState","useEditorConfigContext","useLexicalDrawer","$createBlockNode","BlockNode","$createInlineBlockNode","$isInlineBlockNode","INSERT_BLOCK_COMMAND","INSERT_INLINE_BLOCK_COMMAND","BlocksPlugin","$","editor","targetNodeKey","setTargetNodeKey","uuid","editDepth","t0","t1","slug","depth","drawerSlug","toggleDrawer","t2","hasNodes","Error","registerCommand","payload","update","selection","blockNode","focus","focusNode","getNode","getTextContentSize","getParentOrThrow","getChildren","filter","node","length","remove","fields","node_0","setFields","inlineBlockNode","selectEnd","t3"],"sources":["../../../../../src/features/blocks/client/plugin/index.tsx"],"sourcesContent":["'use client'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { $insertNodeToNearestRoot, $wrapNodeInElement, mergeRegister } from '@lexical/utils'\nimport { formatDrawerSlug, useEditDepth } from '@payloadcms/ui'\nimport {\n $createParagraphNode,\n $getNodeByKey,\n $getPreviousSelection,\n $getSelection,\n $insertNodes,\n $isParagraphNode,\n $isRangeSelection,\n $isRootOrShadowRoot,\n COMMAND_PRIORITY_EDITOR,\n} from 'lexical'\nimport { useEffect, useState } from 'react'\n\nimport type { PluginComponent } from '../../../typesClient.js'\nimport type { BlockFields, BlockFieldsOptionalID } from '../../server/nodes/BlocksNode.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport { useLexicalDrawer } from '../../../../utilities/fieldsDrawer/useLexicalDrawer.js'\nimport { $createBlockNode, BlockNode } from '../nodes/BlocksNode.js'\nimport { $createInlineBlockNode, $isInlineBlockNode } from '../nodes/InlineBlocksNode.js'\nimport { INSERT_BLOCK_COMMAND, INSERT_INLINE_BLOCK_COMMAND } from './commands.js'\n\nexport type InsertBlockPayload = BlockFieldsOptionalID\n\nexport const BlocksPlugin: PluginComponent = () => {\n const [editor] = useLexicalComposerContext()\n\n const [targetNodeKey, setTargetNodeKey] = useState<null | string>(null)\n\n const { uuid } = useEditorConfigContext()\n const editDepth = useEditDepth()\n\n const drawerSlug = formatDrawerSlug({\n slug: `lexical-inlineBlocks-create-` + uuid,\n depth: editDepth,\n })\n\n const { toggleDrawer } = useLexicalDrawer(drawerSlug, true)\n\n useEffect(() => {\n if (!editor.hasNodes([BlockNode])) {\n throw new Error('BlocksPlugin: BlocksNode not registered on editor')\n }\n\n return mergeRegister(\n editor.registerCommand<InsertBlockPayload>(\n INSERT_BLOCK_COMMAND,\n (payload: InsertBlockPayload) => {\n editor.update(() => {\n const selection = $getSelection() || $getPreviousSelection()\n\n if ($isRangeSelection(selection)) {\n const blockNode = $createBlockNode(payload)\n // Insert blocks node BEFORE potentially removing focusNode, as $insertNodeToNearestRoot errors if the focusNode doesn't exist\n $insertNodeToNearestRoot(blockNode)\n\n const { focus } = selection\n const focusNode = focus.getNode()\n\n // First, delete currently selected node if it's an empty paragraph and if there are sufficient\n // paragraph nodes (more than 1) left in the parent node, so that we don't \"trap\" the user\n if (\n $isParagraphNode(focusNode) &&\n focusNode.getTextContentSize() === 0 &&\n focusNode\n .getParentOrThrow()\n .getChildren()\n .filter((node) => $isParagraphNode(node)).length > 1\n ) {\n focusNode.remove()\n }\n }\n })\n\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n ),\n editor.registerCommand(\n INSERT_INLINE_BLOCK_COMMAND,\n (fields) => {\n if (targetNodeKey) {\n const node = $getNodeByKey(targetNodeKey)\n\n if (!node || !$isInlineBlockNode(node)) {\n return false\n }\n\n node.setFields(fields as BlockFields)\n\n setTargetNodeKey(null)\n return true\n }\n\n const inlineBlockNode = $createInlineBlockNode(fields as BlockFields)\n $insertNodes([inlineBlockNode])\n if ($isRootOrShadowRoot(inlineBlockNode.getParentOrThrow())) {\n $wrapNodeInElement(inlineBlockNode, $createParagraphNode).selectEnd()\n }\n\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n ),\n )\n }, [editor, targetNodeKey, toggleDrawer])\n\n return null\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","$insertNodeToNearestRoot","$wrapNodeInElement","mergeRegister","formatDrawerSlug","useEditDepth","$createParagraphNode","$getNodeByKey","$getPreviousSelection","$getSelection","$insertNodes","$isParagraphNode","$isRangeSelection","$isRootOrShadowRoot","COMMAND_PRIORITY_EDITOR","useEffect","useState","useEditorConfigContext","useLexicalDrawer","$createBlockNode","$createInlineBlockNode","$isInlineBlockNode","INSERT_BLOCK_COMMAND","INSERT_INLINE_BLOCK_COMMAND","BlocksPlugin","$","editor","targetNodeKey","setTargetNodeKey","uuid","editDepth","t0","t1","slug","depth","drawerSlug","toggleDrawer","t2","registerCommand","payload","update","selection","blockNode","focus","focusNode","getNode","getTextContentSize","getParentOrThrow","getChildren","filter","node","length","remove","fields","node_0","setFields","inlineBlockNode","selectEnd","t3"],"sources":["../../../../../src/features/blocks/client/plugin/index.tsx"],"sourcesContent":["'use client'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { $insertNodeToNearestRoot, $wrapNodeInElement, mergeRegister } from '@lexical/utils'\nimport { formatDrawerSlug, useEditDepth } from '@payloadcms/ui'\nimport {\n $createParagraphNode,\n $getNodeByKey,\n $getPreviousSelection,\n $getSelection,\n $insertNodes,\n $isParagraphNode,\n $isRangeSelection,\n $isRootOrShadowRoot,\n COMMAND_PRIORITY_EDITOR,\n} from 'lexical'\nimport { useEffect, useState } from 'react'\n\nimport type { PluginComponent } from '../../../typesClient.js'\nimport type { BlockFields, BlockFieldsOptionalID } from '../../server/nodes/BlockNode.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport { useLexicalDrawer } from '../../../../utilities/fieldsDrawer/useLexicalDrawer.js'\nimport { $createBlockNode } from '../nodes/BlocksNode.js'\nimport { $createInlineBlockNode, $isInlineBlockNode } from '../nodes/InlineBlocksNode.js'\nimport { INSERT_BLOCK_COMMAND, INSERT_INLINE_BLOCK_COMMAND } from './commands.js'\n\nexport type InsertBlockPayload = BlockFieldsOptionalID\n\nexport const BlocksPlugin: PluginComponent = () => {\n const [editor] = useLexicalComposerContext()\n\n const [targetNodeKey, setTargetNodeKey] = useState<null | string>(null)\n\n const { uuid } = useEditorConfigContext()\n const editDepth = useEditDepth()\n\n const drawerSlug = formatDrawerSlug({\n slug: `lexical-inlineBlocks-create-` + uuid,\n depth: editDepth,\n })\n\n const { toggleDrawer } = useLexicalDrawer(drawerSlug, true)\n\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand<InsertBlockPayload>(\n INSERT_BLOCK_COMMAND,\n (payload: InsertBlockPayload) => {\n editor.update(() => {\n const selection = $getSelection() || $getPreviousSelection()\n\n if ($isRangeSelection(selection)) {\n const blockNode = $createBlockNode(payload)\n // Insert blocks node BEFORE potentially removing focusNode, as $insertNodeToNearestRoot errors if the focusNode doesn't exist\n $insertNodeToNearestRoot(blockNode)\n\n const { focus } = selection\n const focusNode = focus.getNode()\n\n // First, delete currently selected node if it's an empty paragraph and if there are sufficient\n // paragraph nodes (more than 1) left in the parent node, so that we don't \"trap\" the user\n if (\n $isParagraphNode(focusNode) &&\n focusNode.getTextContentSize() === 0 &&\n focusNode\n .getParentOrThrow()\n .getChildren()\n .filter((node) => $isParagraphNode(node)).length > 1\n ) {\n focusNode.remove()\n }\n }\n })\n\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n ),\n editor.registerCommand(\n INSERT_INLINE_BLOCK_COMMAND,\n (fields) => {\n if (targetNodeKey) {\n const node = $getNodeByKey(targetNodeKey)\n\n if (!node || !$isInlineBlockNode(node)) {\n return false\n }\n\n node.setFields(fields as BlockFields)\n\n setTargetNodeKey(null)\n return true\n }\n\n const inlineBlockNode = $createInlineBlockNode(fields as BlockFields)\n $insertNodes([inlineBlockNode])\n if ($isRootOrShadowRoot(inlineBlockNode.getParentOrThrow())) {\n $wrapNodeInElement(inlineBlockNode, $createParagraphNode).selectEnd()\n }\n\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n ),\n )\n }, [editor, targetNodeKey, toggleDrawer])\n\n return null\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,23 @@
1
+ import type { FormState } from 'payload';
2
+ import React from 'react';
3
+ import type { WrapperBlockFields, WrapperBlockNodeType } from '../../../../WrapperBlockNode.js';
4
+ import type { AdditionalWrapperBlocksPluginArgs } from '../index.js';
5
+ type WrapperBlockComponentContextType = {
6
+ EditButton?: React.FC;
7
+ formData: ({
8
+ text: string;
9
+ } & WrapperBlockFields) | undefined;
10
+ initialState: false | FormState | undefined;
11
+ Label?: React.FC;
12
+ RemoveButton?: React.FC;
13
+ WrapperBlockContainer?: React.FC<{
14
+ children: React.ReactNode;
15
+ }>;
16
+ wrapperBlockNode?: WrapperBlockNodeType;
17
+ };
18
+ export declare const useWrapperBlockComponentContext: () => WrapperBlockComponentContextType;
19
+ export declare function BlockEditor({ $createWrapperBlockNode, $isWrapperBlockNode, anchorElem, }: {
20
+ anchorElem: HTMLElement;
21
+ } & AdditionalWrapperBlocksPluginArgs): React.ReactNode;
22
+ export {};
23
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/features/blocks/client/plugin/wrapperBlocks/BlockEditor/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAkC,SAAS,EAAE,MAAM,SAAS,CAAA;AA2BxE,OAAO,KAA2E,MAAM,OAAO,CAAA;AAG/F,OAAO,KAAK,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;AAC/F,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,aAAa,CAAA;AAYpE,KAAK,gCAAgC,GAAG;IACtC,UAAU,CAAC,EAAE,KAAK,CAAC,EAAE,CAAA;IACrB,QAAQ,EAAE,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,kBAAkB,CAAC,GAAG,SAAS,CAAA;IAC7D,YAAY,EAAE,KAAK,GAAG,SAAS,GAAG,SAAS,CAAA;IAC3C,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,CAAA;IAChB,YAAY,CAAC,EAAE,KAAK,CAAC,EAAE,CAAA;IACvB,qBAAqB,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;QAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE,CAAC,CAAA;IAC/D,gBAAgB,CAAC,EAAE,oBAAoB,CAAA;CACxC,CAAA;AAOD,eAAO,MAAM,+BAA+B,wCAAuD,CAAA;AAEnG,wBAAgB,WAAW,CAAC,EAC1B,uBAAuB,EACvB,mBAAmB,EACnB,UAAU,GACX,EAAE;IAAE,UAAU,EAAE,WAAW,CAAA;CAAE,GAAG,iCAAiC,GAAG,KAAK,CAAC,SAAS,CAqYnF"}