@payloadcms/richtext-lexical 3.0.0-beta.107 → 3.0.0-beta.109

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 (259) hide show
  1. package/dist/cell/index.js +1 -1
  2. package/dist/cell/index.js.map +1 -1
  3. package/dist/exports/client/Field-ETCEVZLL.js +2 -0
  4. package/dist/exports/client/Field-ETCEVZLL.js.map +7 -0
  5. package/dist/exports/client/RelationshipComponent-F6JI75HS.js +2 -0
  6. package/dist/exports/client/{RelationshipComponent-Z5SZ5FFT.js.map → RelationshipComponent-F6JI75HS.js.map} +2 -2
  7. package/dist/exports/client/bundled.css +1 -1
  8. package/dist/exports/client/chunk-6LZZDOEO.js +2 -0
  9. package/dist/exports/client/chunk-6LZZDOEO.js.map +7 -0
  10. package/dist/exports/client/chunk-76MVRKRT.js +2 -0
  11. package/dist/exports/client/chunk-76MVRKRT.js.map +7 -0
  12. package/dist/exports/client/{chunk-TXEIKM77.js → chunk-GD6LBQBJ.js} +2 -2
  13. package/dist/exports/client/chunk-GD6LBQBJ.js.map +7 -0
  14. package/dist/exports/client/{chunk-GK7ZKYHL.js → chunk-IIWHHN4J.js} +2 -2
  15. package/dist/exports/client/chunk-IIWHHN4J.js.map +7 -0
  16. package/dist/exports/client/{chunk-PY6JO5OH.js → chunk-JYCJEIVA.js} +2 -2
  17. package/dist/exports/client/{chunk-PY6JO5OH.js.map → chunk-JYCJEIVA.js.map} +2 -2
  18. package/dist/exports/client/{chunk-GTKNWSQW.js → chunk-N2PXHNGO.js} +2 -2
  19. package/dist/exports/client/{chunk-GTKNWSQW.js.map → chunk-N2PXHNGO.js.map} +2 -2
  20. package/dist/exports/client/{chunk-PECDZEZY.js → chunk-YREZUOA6.js} +2 -2
  21. package/dist/exports/client/{chunk-PECDZEZY.js.map → chunk-YREZUOA6.js.map} +2 -2
  22. package/dist/exports/client/component-4IBTSHL5.js +2 -0
  23. package/dist/exports/client/component-4IBTSHL5.js.map +7 -0
  24. package/dist/exports/client/component-6Y2K2RNP.js +2 -0
  25. package/dist/exports/client/component-6Y2K2RNP.js.map +7 -0
  26. package/dist/exports/client/{component-GAX6BHKZ.js → component-GQ5M6NF6.js} +2 -2
  27. package/dist/exports/client/componentInline-XX7FVAIV.js +2 -0
  28. package/dist/exports/client/{componentInline-HAGGWKA7.js.map → componentInline-XX7FVAIV.js.map} +2 -2
  29. package/dist/exports/client/index.js +7 -7
  30. package/dist/exports/client/index.js.map +4 -4
  31. package/dist/features/blockquote/markdownTransformer.js.map +1 -1
  32. package/dist/features/blockquote/server/index.d.ts +1 -1
  33. package/dist/features/blockquote/server/index.d.ts.map +1 -1
  34. package/dist/features/blocks/client/component/BlockContent.js +5 -4
  35. package/dist/features/blocks/client/component/BlockContent.js.map +1 -1
  36. package/dist/features/blocks/client/component/index.d.ts +1 -1
  37. package/dist/features/blocks/client/component/index.d.ts.map +1 -1
  38. package/dist/features/blocks/client/component/index.js +9 -5
  39. package/dist/features/blocks/client/component/index.js.map +1 -1
  40. package/dist/features/blocks/client/componentInline/index.d.ts +1 -1
  41. package/dist/features/blocks/client/componentInline/index.d.ts.map +1 -1
  42. package/dist/features/blocks/client/componentInline/index.js +4 -4
  43. package/dist/features/blocks/client/componentInline/index.js.map +1 -1
  44. package/dist/features/blocks/client/index.d.ts +1 -1
  45. package/dist/features/blocks/client/index.d.ts.map +1 -1
  46. package/dist/features/blocks/client/index.js +21 -11
  47. package/dist/features/blocks/client/index.js.map +1 -1
  48. package/dist/features/blocks/client/nodes/BlocksNode.d.ts +2 -2
  49. package/dist/features/blocks/client/nodes/BlocksNode.d.ts.map +1 -1
  50. package/dist/features/blocks/client/nodes/BlocksNode.js.map +1 -1
  51. package/dist/features/blocks/client/plugin/index.d.ts +2 -2
  52. package/dist/features/blocks/client/plugin/index.d.ts.map +1 -1
  53. package/dist/features/blocks/client/plugin/index.js +4 -4
  54. package/dist/features/blocks/client/plugin/index.js.map +1 -1
  55. package/dist/features/blocks/server/index.d.ts.map +1 -1
  56. package/dist/features/blocks/server/index.js +4 -2
  57. package/dist/features/blocks/server/index.js.map +1 -1
  58. package/dist/features/blocks/server/nodes/BlocksNode.d.ts +10 -4
  59. package/dist/features/blocks/server/nodes/BlocksNode.d.ts.map +1 -1
  60. package/dist/features/blocks/server/nodes/BlocksNode.js.map +1 -1
  61. package/dist/features/blocks/server/nodes/InlineBlocksNode.d.ts +2 -2
  62. package/dist/features/blocks/server/nodes/InlineBlocksNode.d.ts.map +1 -1
  63. package/dist/features/blocks/server/nodes/InlineBlocksNode.js.map +1 -1
  64. package/dist/features/blocks/server/validate.js.map +1 -1
  65. package/dist/features/converters/html/converter/index.js +2 -2
  66. package/dist/features/converters/html/converter/index.js.map +1 -1
  67. package/dist/features/converters/html/field/index.js.map +1 -1
  68. package/dist/features/debug/testRecorder/client/plugin/index.js.map +1 -1
  69. package/dist/features/experimental_table/client/plugins/TableActionMenuPlugin/index.js.map +1 -1
  70. package/dist/features/experimental_table/server/index.js +2 -2
  71. package/dist/features/experimental_table/server/index.js.map +1 -1
  72. package/dist/features/horizontalRule/client/component/index.d.ts +1 -1
  73. package/dist/features/horizontalRule/client/component/index.d.ts.map +1 -1
  74. package/dist/features/horizontalRule/server/nodes/HorizontalRuleNode.d.ts +2 -2
  75. package/dist/features/horizontalRule/server/nodes/HorizontalRuleNode.d.ts.map +1 -1
  76. package/dist/features/horizontalRule/server/nodes/HorizontalRuleNode.js.map +1 -1
  77. package/dist/features/indent/client/index.d.ts.map +1 -1
  78. package/dist/features/indent/client/index.js +2 -1
  79. package/dist/features/indent/client/index.js.map +1 -1
  80. package/dist/features/link/client/index.js +1 -1
  81. package/dist/features/link/client/index.js.map +1 -1
  82. package/dist/features/link/client/plugins/autoLink/index.d.ts +1 -1
  83. package/dist/features/link/client/plugins/autoLink/index.d.ts.map +1 -1
  84. package/dist/features/link/client/plugins/autoLink/index.js.map +1 -1
  85. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.d.ts.map +1 -1
  86. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js +3 -7
  87. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js.map +1 -1
  88. package/dist/features/link/nodes/AutoLinkNode.js +2 -2
  89. package/dist/features/link/nodes/AutoLinkNode.js.map +1 -1
  90. package/dist/features/link/nodes/LinkNode.js +11 -6
  91. package/dist/features/link/nodes/LinkNode.js.map +1 -1
  92. package/dist/features/link/nodes/types.d.ts +3 -3
  93. package/dist/features/link/nodes/types.d.ts.map +1 -1
  94. package/dist/features/link/nodes/types.js.map +1 -1
  95. package/dist/features/link/server/baseFields.d.ts +1 -1
  96. package/dist/features/link/server/baseFields.d.ts.map +1 -1
  97. package/dist/features/link/server/baseFields.js +3 -1
  98. package/dist/features/link/server/baseFields.js.map +1 -1
  99. package/dist/features/link/server/index.d.ts.map +1 -1
  100. package/dist/features/link/server/index.js +2 -2
  101. package/dist/features/link/server/index.js.map +1 -1
  102. package/dist/features/link/server/transformExtraFields.d.ts +1 -1
  103. package/dist/features/link/server/transformExtraFields.d.ts.map +1 -1
  104. package/dist/features/link/server/transformExtraFields.js.map +1 -1
  105. package/dist/features/link/server/validate.js.map +1 -1
  106. package/dist/features/lists/shared/markdown.js.map +1 -1
  107. package/dist/features/migrations/lexicalPluginToLexical/converter/index.d.ts.map +1 -1
  108. package/dist/features/migrations/lexicalPluginToLexical/converter/index.js +1 -0
  109. package/dist/features/migrations/lexicalPluginToLexical/converter/index.js.map +1 -1
  110. package/dist/features/migrations/lexicalPluginToLexical/nodes/unknownConvertedNode/index.d.ts +1 -1
  111. package/dist/features/migrations/lexicalPluginToLexical/nodes/unknownConvertedNode/index.d.ts.map +1 -1
  112. package/dist/features/migrations/lexicalPluginToLexical/nodes/unknownConvertedNode/index.js.map +1 -1
  113. package/dist/features/migrations/slateToLexical/converter/converters/blockquote/converter.js.map +1 -1
  114. package/dist/features/migrations/slateToLexical/converter/converters/heading/converter.js.map +1 -1
  115. package/dist/features/migrations/slateToLexical/converter/converters/link/converter.js.map +1 -1
  116. package/dist/features/migrations/slateToLexical/converter/converters/listItem/converter.js.map +1 -1
  117. package/dist/features/migrations/slateToLexical/converter/converters/orderedList/converter.js.map +1 -1
  118. package/dist/features/migrations/slateToLexical/converter/converters/unknown/converter.js.map +1 -1
  119. package/dist/features/migrations/slateToLexical/converter/converters/unorderedList/converter.js.map +1 -1
  120. package/dist/features/migrations/slateToLexical/converter/index.d.ts.map +1 -1
  121. package/dist/features/migrations/slateToLexical/converter/index.js +1 -0
  122. package/dist/features/migrations/slateToLexical/converter/index.js.map +1 -1
  123. package/dist/features/migrations/slateToLexical/nodes/unknownConvertedNode/index.d.ts +1 -1
  124. package/dist/features/migrations/slateToLexical/nodes/unknownConvertedNode/index.d.ts.map +1 -1
  125. package/dist/features/migrations/slateToLexical/nodes/unknownConvertedNode/index.js.map +1 -1
  126. package/dist/features/paragraph/server/index.d.ts +1 -1
  127. package/dist/features/paragraph/server/index.d.ts.map +1 -1
  128. package/dist/features/relationship/client/components/RelationshipComponent.d.ts.map +1 -1
  129. package/dist/features/relationship/client/components/RelationshipComponent.js +8 -6
  130. package/dist/features/relationship/client/components/RelationshipComponent.js.map +1 -1
  131. package/dist/features/relationship/client/drawer/index.js +3 -3
  132. package/dist/features/relationship/client/drawer/index.js.map +1 -1
  133. package/dist/features/relationship/client/plugins/index.js +1 -1
  134. package/dist/features/relationship/client/plugins/index.js.map +1 -1
  135. package/dist/features/relationship/client/utils/EnabledRelationshipsCondition.js +1 -1
  136. package/dist/features/relationship/client/utils/EnabledRelationshipsCondition.js.map +1 -1
  137. package/dist/features/relationship/server/nodes/RelationshipNode.d.ts +1 -1
  138. package/dist/features/relationship/server/nodes/RelationshipNode.d.ts.map +1 -1
  139. package/dist/features/relationship/server/nodes/RelationshipNode.js.map +1 -1
  140. package/dist/features/toolbars/fixed/client/Toolbar/index.d.ts.map +1 -1
  141. package/dist/features/toolbars/fixed/client/Toolbar/index.js +40 -41
  142. package/dist/features/toolbars/fixed/client/Toolbar/index.js.map +1 -1
  143. package/dist/features/toolbars/inline/client/Toolbar/index.d.ts.map +1 -1
  144. package/dist/features/toolbars/inline/client/Toolbar/index.js +33 -34
  145. package/dist/features/toolbars/inline/client/Toolbar/index.js.map +1 -1
  146. package/dist/features/toolbars/shared/ToolbarButton/index.d.ts.map +1 -1
  147. package/dist/features/toolbars/shared/ToolbarButton/index.js +4 -1
  148. package/dist/features/toolbars/shared/ToolbarButton/index.js.map +1 -1
  149. package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js +1 -1
  150. package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js.map +1 -1
  151. package/dist/features/toolbars/shared/ToolbarDropdown/index.d.ts +3 -4
  152. package/dist/features/toolbars/shared/ToolbarDropdown/index.d.ts.map +1 -1
  153. package/dist/features/toolbars/shared/ToolbarDropdown/index.js +82 -64
  154. package/dist/features/toolbars/shared/ToolbarDropdown/index.js.map +1 -1
  155. package/dist/features/toolbars/types.d.ts +21 -11
  156. package/dist/features/toolbars/types.d.ts.map +1 -1
  157. package/dist/features/toolbars/types.js.map +1 -1
  158. package/dist/features/typesServer.d.ts.map +1 -1
  159. package/dist/features/typesServer.js.map +1 -1
  160. package/dist/features/upload/client/component/index.js +1 -1
  161. package/dist/features/upload/client/component/index.js.map +1 -1
  162. package/dist/features/upload/client/drawer/index.d.ts.map +1 -1
  163. package/dist/features/upload/client/drawer/index.js +2 -0
  164. package/dist/features/upload/client/drawer/index.js.map +1 -1
  165. package/dist/features/upload/client/plugin/index.js +1 -1
  166. package/dist/features/upload/client/plugin/index.js.map +1 -1
  167. package/dist/features/upload/server/feature.server.js +3 -4
  168. package/dist/features/upload/server/feature.server.js.map +1 -1
  169. package/dist/features/upload/server/validate.js.map +1 -1
  170. package/dist/field/Field.d.ts.map +1 -1
  171. package/dist/field/Field.js +11 -11
  172. package/dist/field/Field.js.map +1 -1
  173. package/dist/field/bundled.css +1 -1
  174. package/dist/field/index.js +1 -1
  175. package/dist/field/index.js.map +1 -1
  176. package/dist/index.d.ts.map +1 -1
  177. package/dist/index.js +69 -63
  178. package/dist/index.js.map +1 -1
  179. package/dist/lexical/EditorPlugin.d.ts.map +1 -1
  180. package/dist/lexical/EditorPlugin.js +2 -1
  181. package/dist/lexical/EditorPlugin.js.map +1 -1
  182. package/dist/lexical/LexicalEditor.d.ts +1 -1
  183. package/dist/lexical/LexicalEditor.d.ts.map +1 -1
  184. package/dist/lexical/LexicalEditor.js +5 -5
  185. package/dist/lexical/LexicalEditor.js.map +1 -1
  186. package/dist/lexical/config/client/EditorConfigProvider.d.ts +1 -1
  187. package/dist/lexical/config/client/EditorConfigProvider.d.ts.map +1 -1
  188. package/dist/lexical/config/client/EditorConfigProvider.js +8 -7
  189. package/dist/lexical/config/client/EditorConfigProvider.js.map +1 -1
  190. package/dist/lexical/config/client/sanitize.js +2 -2
  191. package/dist/lexical/config/client/sanitize.js.map +1 -1
  192. package/dist/lexical/config/server/loader.js.map +1 -1
  193. package/dist/lexical/config/server/sanitize.d.ts.map +1 -1
  194. package/dist/lexical/config/server/sanitize.js +11 -11
  195. package/dist/lexical/config/server/sanitize.js.map +1 -1
  196. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.js +2 -2
  197. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.js.map +1 -1
  198. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.d.ts +1 -1
  199. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.d.ts.map +1 -1
  200. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.js.map +1 -1
  201. package/dist/lexical/plugins/SlashMenu/index.d.ts.map +1 -1
  202. package/dist/lexical/plugins/SlashMenu/index.js +9 -6
  203. package/dist/lexical/plugins/SlashMenu/index.js.map +1 -1
  204. package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.d.ts.map +1 -1
  205. package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.js +5 -5
  206. package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.js.map +1 -1
  207. package/dist/lexical/plugins/handles/DraggableBlockPlugin/debounce.d.ts +1 -1
  208. package/dist/lexical/plugins/handles/DraggableBlockPlugin/debounce.d.ts.map +1 -1
  209. package/dist/lexical/plugins/handles/DraggableBlockPlugin/debounce.js +1 -1
  210. package/dist/lexical/plugins/handles/DraggableBlockPlugin/debounce.js.map +1 -1
  211. package/dist/lexical/plugins/handles/DraggableBlockPlugin/getBoundingRectWithoutTransform.js +1 -1
  212. package/dist/lexical/plugins/handles/DraggableBlockPlugin/getBoundingRectWithoutTransform.js.map +1 -1
  213. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.d.ts.map +1 -1
  214. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js +9 -4
  215. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js.map +1 -1
  216. package/dist/lexical/plugins/handles/utils/getNodeCloseToPoint.d.ts.map +1 -1
  217. package/dist/lexical/plugins/handles/utils/getNodeCloseToPoint.js +3 -4
  218. package/dist/lexical/plugins/handles/utils/getNodeCloseToPoint.js.map +1 -1
  219. package/dist/lexical/utils/rect.d.ts +4 -4
  220. package/dist/lexical/utils/setFloatingElemPosition.d.ts +1 -1
  221. package/dist/lexical/utils/setFloatingElemPosition.d.ts.map +1 -1
  222. package/dist/lexical/utils/setFloatingElemPosition.js.map +1 -1
  223. package/dist/populateGraphQL/populate.js +1 -1
  224. package/dist/populateGraphQL/populate.js.map +1 -1
  225. package/dist/populateGraphQL/populateLexicalPopulationPromises.d.ts +1 -1
  226. package/dist/populateGraphQL/populateLexicalPopulationPromises.d.ts.map +1 -1
  227. package/dist/populateGraphQL/populateLexicalPopulationPromises.js +5 -4
  228. package/dist/populateGraphQL/populateLexicalPopulationPromises.js.map +1 -1
  229. package/dist/populateGraphQL/recursivelyPopulateFieldsForGraphQL.js.map +1 -1
  230. package/dist/utilities/fieldsDrawer/DrawerContent.d.ts.map +1 -1
  231. package/dist/utilities/fieldsDrawer/DrawerContent.js +8 -3
  232. package/dist/utilities/fieldsDrawer/DrawerContent.js.map +1 -1
  233. package/dist/utilities/generateComponentMap.d.ts.map +1 -1
  234. package/dist/utilities/generateComponentMap.js +1 -0
  235. package/dist/utilities/generateComponentMap.js.map +1 -1
  236. package/dist/utilities/migrateSlateToLexical/migrateDocumentFieldsRecursively.d.ts +1 -1
  237. package/dist/utilities/migrateSlateToLexical/migrateDocumentFieldsRecursively.d.ts.map +1 -1
  238. package/dist/utilities/migrateSlateToLexical/migrateDocumentFieldsRecursively.js +1 -1
  239. package/dist/utilities/migrateSlateToLexical/migrateDocumentFieldsRecursively.js.map +1 -1
  240. package/dist/utilities/upgradeLexicalData/upgradeDocumentFieldsRecursively.d.ts +1 -1
  241. package/dist/utilities/upgradeLexicalData/upgradeDocumentFieldsRecursively.d.ts.map +1 -1
  242. package/dist/utilities/upgradeLexicalData/upgradeDocumentFieldsRecursively.js.map +1 -1
  243. package/dist/validate/validateNodes.d.ts.map +1 -1
  244. package/dist/validate/validateNodes.js +2 -2
  245. package/dist/validate/validateNodes.js.map +1 -1
  246. package/package.json +13 -13
  247. package/dist/exports/client/Field-EL5TNVZW.js +0 -2
  248. package/dist/exports/client/Field-EL5TNVZW.js.map +0 -7
  249. package/dist/exports/client/RelationshipComponent-Z5SZ5FFT.js +0 -2
  250. package/dist/exports/client/chunk-366OGJYE.js +0 -2
  251. package/dist/exports/client/chunk-366OGJYE.js.map +0 -7
  252. package/dist/exports/client/chunk-GK7ZKYHL.js.map +0 -7
  253. package/dist/exports/client/chunk-TXEIKM77.js.map +0 -7
  254. package/dist/exports/client/component-OVIYSCND.js +0 -2
  255. package/dist/exports/client/component-OVIYSCND.js.map +0 -7
  256. package/dist/exports/client/component-UJILB3MH.js +0 -2
  257. package/dist/exports/client/component-UJILB3MH.js.map +0 -7
  258. package/dist/exports/client/componentInline-HAGGWKA7.js +0 -2
  259. /package/dist/exports/client/{component-GAX6BHKZ.js.map → component-GQ5M6NF6.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"markdownTransformer.js","names":["$createQuoteNode","$isQuoteNode","QuoteNode","$createLineBreakNode","MarkdownTransformer","type","dependencies","export","node","exportChildren","lines","split","output","line","push","join","regExp","replace","parentNode","children","_match","isImport","previousNode","getPreviousSibling","splice","getChildrenSize","select","remove","append"],"sources":["../../../src/features/blockquote/markdownTransformer.ts"],"sourcesContent":["import type { ElementTransformer } from '@lexical/markdown'\n\nimport { $createQuoteNode, $isQuoteNode, QuoteNode } from '@lexical/rich-text'\nimport { $createLineBreakNode } from 'lexical'\n\nexport const MarkdownTransformer: ElementTransformer = {\n type: 'element',\n dependencies: [QuoteNode],\n export: (node, exportChildren) => {\n if (!$isQuoteNode(node)) {\n return null\n }\n\n const lines = exportChildren(node).split('\\n')\n const output = []\n for (const line of lines) {\n output.push('> ' + line)\n }\n return output.join('\\n')\n },\n regExp: /^>\\s/,\n replace: (parentNode, children, _match, isImport) => {\n if (isImport) {\n const previousNode = parentNode.getPreviousSibling()\n if ($isQuoteNode(previousNode)) {\n previousNode.splice(previousNode.getChildrenSize(), 0, [\n $createLineBreakNode(),\n ...children,\n ])\n previousNode.select(0, 0)\n parentNode.remove()\n return\n }\n }\n\n const node = $createQuoteNode()\n node.append(...children)\n parentNode.replace(node)\n node.select(0, 0)\n },\n}\n"],"mappings":"AAEA,SAASA,gBAAgB,EAAEC,YAAY,EAAEC,SAAS,QAAQ;AAC1D,SAASC,oBAAoB,QAAQ;AAErC,OAAO,MAAMC,mBAAA,GAA0C;EACrDC,IAAA,EAAM;EACNC,YAAA,EAAc,CAACJ,SAAA,CAAU;EACzBK,MAAA,EAAQA,CAACC,IAAA,EAAMC,cAAA;IACb,IAAI,CAACR,YAAA,CAAaO,IAAA,GAAO;MACvB,OAAO;IACT;IAEA,MAAME,KAAA,GAAQD,cAAA,CAAeD,IAAA,EAAMG,KAAK,CAAC;IACzC,MAAMC,MAAA,GAAS,EAAE;IACjB,KAAK,MAAMC,IAAA,IAAQH,KAAA,EAAO;MACxBE,MAAA,CAAOE,IAAI,CAAC,OAAOD,IAAA;IACrB;IACA,OAAOD,MAAA,CAAOG,IAAI,CAAC;EACrB;EACAC,MAAA,EAAQ;EACRC,OAAA,EAASA,CAACC,UAAA,EAAYC,QAAA,EAAUC,MAAA,EAAQC,QAAA;IACtC,IAAIA,QAAA,EAAU;MACZ,MAAMC,YAAA,GAAeJ,UAAA,CAAWK,kBAAkB;MAClD,IAAItB,YAAA,CAAaqB,YAAA,GAAe;QAC9BA,YAAA,CAAaE,MAAM,CAACF,YAAA,CAAaG,eAAe,IAAI,GAAG,CACrDtB,oBAAA,I,GACGgB,QAAA,CACJ;QACDG,YAAA,CAAaI,MAAM,CAAC,GAAG;QACvBR,UAAA,CAAWS,MAAM;QACjB;MACF;IACF;IAEA,MAAMnB,IAAA,GAAOR,gBAAA;IACbQ,IAAA,CAAKoB,MAAM,IAAIT,QAAA;IACfD,UAAA,CAAWD,OAAO,CAACT,IAAA;IACnBA,IAAA,CAAKkB,MAAM,CAAC,GAAG;EACjB;AACF","ignoreList":[]}
1
+ {"version":3,"file":"markdownTransformer.js","names":["$createQuoteNode","$isQuoteNode","QuoteNode","$createLineBreakNode","MarkdownTransformer","type","dependencies","export","node","exportChildren","lines","split","output","line","push","join","regExp","replace","parentNode","children","_match","isImport","previousNode","getPreviousSibling","splice","getChildrenSize","select","remove","append"],"sources":["../../../src/features/blockquote/markdownTransformer.ts"],"sourcesContent":["import type { ElementTransformer } from '@lexical/markdown'\n\nimport { $createQuoteNode, $isQuoteNode, QuoteNode } from '@lexical/rich-text'\nimport { $createLineBreakNode } from 'lexical'\n\nexport const MarkdownTransformer: ElementTransformer = {\n type: 'element',\n dependencies: [QuoteNode],\n export: (node, exportChildren) => {\n if (!$isQuoteNode(node)) {\n return null\n }\n\n const lines = exportChildren(node).split('\\n')\n const output: string[] = []\n for (const line of lines) {\n output.push('> ' + line)\n }\n return output.join('\\n')\n },\n regExp: /^>\\s/,\n replace: (parentNode, children, _match, isImport) => {\n if (isImport) {\n const previousNode = parentNode.getPreviousSibling()\n if ($isQuoteNode(previousNode)) {\n previousNode.splice(previousNode.getChildrenSize(), 0, [\n $createLineBreakNode(),\n ...children,\n ])\n previousNode.select(0, 0)\n parentNode.remove()\n return\n }\n }\n\n const node = $createQuoteNode()\n node.append(...children)\n parentNode.replace(node)\n node.select(0, 0)\n },\n}\n"],"mappings":"AAEA,SAASA,gBAAgB,EAAEC,YAAY,EAAEC,SAAS,QAAQ;AAC1D,SAASC,oBAAoB,QAAQ;AAErC,OAAO,MAAMC,mBAAA,GAA0C;EACrDC,IAAA,EAAM;EACNC,YAAA,EAAc,CAACJ,SAAA,CAAU;EACzBK,MAAA,EAAQA,CAACC,IAAA,EAAMC,cAAA;IACb,IAAI,CAACR,YAAA,CAAaO,IAAA,GAAO;MACvB,OAAO;IACT;IAEA,MAAME,KAAA,GAAQD,cAAA,CAAeD,IAAA,EAAMG,KAAK,CAAC;IACzC,MAAMC,MAAA,GAAmB,EAAE;IAC3B,KAAK,MAAMC,IAAA,IAAQH,KAAA,EAAO;MACxBE,MAAA,CAAOE,IAAI,CAAC,OAAOD,IAAA;IACrB;IACA,OAAOD,MAAA,CAAOG,IAAI,CAAC;EACrB;EACAC,MAAA,EAAQ;EACRC,OAAA,EAASA,CAACC,UAAA,EAAYC,QAAA,EAAUC,MAAA,EAAQC,QAAA;IACtC,IAAIA,QAAA,EAAU;MACZ,MAAMC,YAAA,GAAeJ,UAAA,CAAWK,kBAAkB;MAClD,IAAItB,YAAA,CAAaqB,YAAA,GAAe;QAC9BA,YAAA,CAAaE,MAAM,CAACF,YAAA,CAAaG,eAAe,IAAI,GAAG,CACrDtB,oBAAA,I,GACGgB,QAAA,CACJ;QACDG,YAAA,CAAaI,MAAM,CAAC,GAAG;QACvBR,UAAA,CAAWS,MAAM;QACjB;MACF;IACF;IAEA,MAAMnB,IAAA,GAAOR,gBAAA;IACbQ,IAAA,CAAKoB,MAAM,IAAIT,QAAA;IACfD,UAAA,CAAWD,OAAO,CAACT,IAAA;IACnBA,IAAA,CAAKkB,MAAM,CAAC,GAAG;EACjB;AACF","ignoreList":[]}
@@ -3,5 +3,5 @@ import type { Spread } from 'lexical';
3
3
  export type SerializedQuoteNode = Spread<{
4
4
  type: 'quote';
5
5
  }, _SerializedQuoteNode>;
6
- export declare const BlockquoteFeature: import("../../typesServer.js").FeatureProviderProviderServer<undefined, undefined, any>;
6
+ export declare const BlockquoteFeature: import("../../typesServer.js").FeatureProviderProviderServer<undefined, undefined, null>;
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/features/blockquote/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,IAAI,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AACrF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAUrC,MAAM,MAAM,mBAAmB,GAAG,MAAM,CACtC;IACE,IAAI,EAAE,OAAO,CAAA;CACd,EACD,oBAAoB,CACrB,CAAA;AAED,eAAO,MAAM,iBAAiB,yFA8C5B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/features/blockquote/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,IAAI,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AACrF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAUrC,MAAM,MAAM,mBAAmB,GAAG,MAAM,CACtC;IACE,IAAI,EAAE,OAAO,CAAA;CACd,EACD,oBAAoB,CACrB,CAAA;AAED,eAAO,MAAM,iBAAiB,0FA8C5B,CAAA"}
@@ -7,6 +7,7 @@ import { Button, Collapsible, ErrorPill, Pill, RenderComponent, RenderFields, Se
7
7
  import { dequal } from 'dequal/lite';
8
8
  import { $getNodeByKey } from 'lexical';
9
9
  import React, { useCallback } from 'react';
10
+ import { $isBlockNode } from '../nodes/BlocksNode.js';
10
11
  import { FormSavePlugin } from './FormSavePlugin.js';
11
12
  // Recursively remove all undefined values from even being present in formData, as they will
12
13
  // cause isDeepEqual to return false if, for example, formData has a key that fields.data
@@ -87,7 +88,7 @@ export const BlockContent = props => {
87
88
  setTimeout(() => {
88
89
  editor.update(() => {
89
90
  const node = $getNodeByKey(nodeKey);
90
- if (node) {
91
+ if (node && $isBlockNode(node)) {
91
92
  formData = newFormData;
92
93
  node.setFields(newFormData);
93
94
  }
@@ -127,7 +128,7 @@ export const BlockContent = props => {
127
128
  }, [getDocPreferences, field.name, setDocFieldPreferences, formData.id]);
128
129
  const removeBlock = useCallback(() => {
129
130
  editor.update(() => {
130
- $getNodeByKey(nodeKey).remove();
131
+ $getNodeByKey(nodeKey)?.remove();
131
132
  });
132
133
  }, [editor, nodeKey]);
133
134
  return /*#__PURE__*/_jsxs(React.Fragment, {
@@ -146,10 +147,10 @@ export const BlockContent = props => {
146
147
  children: [/*#__PURE__*/_jsx(Pill, {
147
148
  className: `${baseClass}__block-pill ${baseClass}__block-pill-${formData?.blockType}`,
148
149
  pillStyle: "white",
149
- children: typeof clientBlock?.labels.singular === 'string' ? getTranslation(clientBlock?.labels.singular, i18n) : clientBlock.slug
150
+ children: typeof clientBlock?.labels?.singular === 'string' ? getTranslation(clientBlock?.labels.singular, i18n) : clientBlock.slug
150
151
  }), /*#__PURE__*/_jsx(SectionTitle, {
151
152
  path: "blockName",
152
- readOnly: field?.admin?.readOnly
153
+ readOnly: field?.admin?.readOnly || false
153
154
  }), fieldHasErrors && /*#__PURE__*/_jsx(ErrorPill, {
154
155
  count: errorCount,
155
156
  i18n: i18n,
@@ -1 +1 @@
1
- {"version":3,"file":"BlockContent.js","names":["useLexicalComposerContext","getTranslation","Button","Collapsible","ErrorPill","Pill","RenderComponent","RenderFields","SectionTitle","useDocumentInfo","useFormSubmitted","useTranslation","dequal","$getNodeByKey","React","useCallback","FormSavePlugin","removeUndefinedAndNullAndEmptyArraysRecursively","obj","key","value","Array","isArray","length","undefined","BlockContent","props","baseClass","clientBlock","field","formSchema","nodeKey","schemaPath","formData","i18n","editor","getDocPreferences","setDocFieldPreferences","isCollapsed","setIsCollapsed","useState","initialState","then","currentDocPreferences","currentFieldPreferences","fields","name","collapsedArray","collapsed","includes","id","hasSubmitted","errorCount","setErrorCount","fieldHasErrors","classNames","filter","Boolean","join","onFormChange","fullFieldsWithValues","newFormData","blockType","setTimeout","update","node","setFields","rowErrorCount","formField","Object","values","valid","onCollapsedChange","changedCollapsed","newCollapsed","push","splice","indexOf","hello","removeBlock","remove","_jsxs","Fragment","_jsx","className","collapsibleStyle","header","admin","components","Label","clientProps","blockKind","mappedComponent","pillStyle","labels","singular","slug","path","readOnly","count","withMessage","isEditable","buttonStyle","disabled","icon","onClick","e","preventDefault","round","tooltip","onToggle","incomingCollapsedState","forceRender","margins","onChange"],"sources":["../../../../../src/features/blocks/client/component/BlockContent.tsx"],"sourcesContent":["'use client'\nimport type { ClientBlock, ClientField, CollapsedPreferences, FormState } from 'payload'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n Button,\n Collapsible,\n ErrorPill,\n Pill,\n RenderComponent,\n RenderFields,\n SectionTitle,\n useDocumentInfo,\n useFormSubmitted,\n useTranslation,\n} from '@payloadcms/ui'\nimport { dequal } from 'dequal/lite'\nimport { $getNodeByKey } from 'lexical'\nimport React, { useCallback } from 'react'\n\nimport type { LexicalRichTextFieldProps } from '../../../../types.js'\nimport type { BlockFields } from '../../server/nodes/BlocksNode.js'\nimport type { BlockNode } from '../nodes/BlocksNode.js'\n\nimport { FormSavePlugin } from './FormSavePlugin.js'\n\ntype Props = {\n baseClass: string\n clientBlock: ClientBlock\n field: LexicalRichTextFieldProps['field']\n formData: BlockFields\n formSchema: ClientField[]\n nodeKey: string\n path: string\n schemaPath: string\n}\n\n// Recursively remove all undefined values from even being present in formData, as they will\n// cause isDeepEqual to return false if, for example, formData has a key that fields.data\n// does not have, even if it's undefined.\n// Currently, this happens if a block has another sub-blocks field. Inside formData, that sub-blocks field has an undefined blockName property.\n// Inside of fields.data however, that sub-blocks blockName property does not exist at all.\nfunction removeUndefinedAndNullAndEmptyArraysRecursively(obj: object) {\n for (const key in obj) {\n const value = obj[key]\n if (Array.isArray(value) && !value?.length) {\n delete obj[key]\n } else if (value && typeof value === 'object') {\n removeUndefinedAndNullAndEmptyArraysRecursively(value)\n } else if (value === undefined || value === null) {\n delete obj[key]\n }\n }\n}\n\n/**\n * The actual content of the Block. This should be INSIDE a Form component,\n * scoped to the block. All format operations in here are thus scoped to the block's form, and\n * not the whole document.\n */\nexport const BlockContent: React.FC<Props> = (props) => {\n const { baseClass, clientBlock, field, formSchema, nodeKey, schemaPath } = props\n let { formData } = props\n\n const { i18n } = useTranslation()\n const [editor] = useLexicalComposerContext()\n // Used for saving collapsed to preferences (and gettin' it from there again)\n // Remember, these preferences are scoped to the whole document, not just this form. This\n // is important to consider for the data path used in setDocFieldPreferences\n const { getDocPreferences, setDocFieldPreferences } = useDocumentInfo()\n\n const [isCollapsed, setIsCollapsed] = React.useState<boolean>(() => {\n let initialState = false\n\n void getDocPreferences().then((currentDocPreferences) => {\n const currentFieldPreferences = currentDocPreferences?.fields[field.name]\n\n const collapsedArray = currentFieldPreferences?.collapsed\n\n if (collapsedArray && collapsedArray.includes(formData.id)) {\n initialState = true\n setIsCollapsed(true)\n }\n })\n return initialState\n })\n\n const hasSubmitted = useFormSubmitted()\n\n const [errorCount, setErrorCount] = React.useState(0)\n\n const fieldHasErrors = hasSubmitted && errorCount > 0\n\n const classNames = [\n `${baseClass}__row`,\n fieldHasErrors ? `${baseClass}__row--has-errors` : `${baseClass}__row--no-errors`,\n ]\n .filter(Boolean)\n .join(' ')\n\n const onFormChange = useCallback(\n ({\n fullFieldsWithValues,\n newFormData,\n }: {\n fullFieldsWithValues: FormState\n newFormData: BlockFields\n }) => {\n newFormData.id = formData.id\n newFormData.blockType = formData.blockType\n\n removeUndefinedAndNullAndEmptyArraysRecursively(newFormData)\n removeUndefinedAndNullAndEmptyArraysRecursively(formData)\n\n // Only update if the data has actually changed. Otherwise, we may be triggering an unnecessary value change,\n // which would trigger the \"Leave without saving\" dialog unnecessarily\n if (!dequal(formData, newFormData)) {\n // Running this in the next tick in the meantime fixes this issue: https://github.com/payloadcms/payload/issues/4108\n // I don't know why. When this is called immediately, it might focus out of a nested lexical editor field if an update is made there.\n // My hypothesis is that the nested editor might not have fully finished its update cycle yet. By updating in the next tick, we\n // ensure that the nested editor has finished its update cycle before we update the block node.\n setTimeout(() => {\n editor.update(() => {\n const node: BlockNode = $getNodeByKey(nodeKey)\n if (node) {\n formData = newFormData\n node.setFields(newFormData)\n }\n })\n }, 0)\n }\n\n // update error count\n if (hasSubmitted) {\n let rowErrorCount = 0\n for (const formField of Object.values(fullFieldsWithValues)) {\n if (formField?.valid === false) {\n rowErrorCount++\n }\n }\n setErrorCount(rowErrorCount)\n }\n },\n [editor, nodeKey, hasSubmitted, formData],\n )\n\n const onCollapsedChange = useCallback(\n (changedCollapsed: boolean) => {\n void getDocPreferences().then((currentDocPreferences) => {\n const currentFieldPreferences = currentDocPreferences?.fields[field.name]\n\n const collapsedArray = currentFieldPreferences?.collapsed\n\n const newCollapsed: CollapsedPreferences =\n collapsedArray && collapsedArray?.length ? collapsedArray : []\n\n if (changedCollapsed) {\n if (!newCollapsed.includes(formData.id)) {\n newCollapsed.push(formData.id)\n }\n } else {\n if (newCollapsed.includes(formData.id)) {\n newCollapsed.splice(newCollapsed.indexOf(formData.id), 1)\n }\n }\n\n setDocFieldPreferences(field.name, {\n collapsed: newCollapsed,\n hello: 'hi',\n })\n })\n },\n [getDocPreferences, field.name, setDocFieldPreferences, formData.id],\n )\n\n const removeBlock = useCallback(() => {\n editor.update(() => {\n $getNodeByKey(nodeKey).remove()\n })\n }, [editor, nodeKey])\n\n return (\n <React.Fragment>\n <Collapsible\n className={classNames}\n collapsibleStyle={fieldHasErrors ? 'error' : 'default'}\n header={\n clientBlock?.admin?.components?.Label ? (\n <RenderComponent\n clientProps={{ blockKind: 'lexicalBlock', formData }}\n mappedComponent={clientBlock.admin.components.Label}\n />\n ) : (\n <div className={`${baseClass}__block-header`}>\n <div>\n <Pill\n className={`${baseClass}__block-pill ${baseClass}__block-pill-${formData?.blockType}`}\n pillStyle=\"white\"\n >\n {typeof clientBlock?.labels.singular === 'string'\n ? getTranslation(clientBlock?.labels.singular, i18n)\n : clientBlock.slug}\n </Pill>\n <SectionTitle path=\"blockName\" readOnly={field?.admin?.readOnly} />\n {fieldHasErrors && <ErrorPill count={errorCount} i18n={i18n} withMessage />}\n </div>\n {editor.isEditable() && (\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__removeButton`}\n disabled={field?.admin?.readOnly}\n icon=\"x\"\n onClick={(e) => {\n e.preventDefault()\n removeBlock()\n }}\n round\n tooltip=\"Remove Block\"\n />\n )}\n </div>\n )\n }\n isCollapsed={isCollapsed}\n key={0}\n onToggle={(incomingCollapsedState) => {\n onCollapsedChange(incomingCollapsedState)\n setIsCollapsed(incomingCollapsedState)\n }}\n >\n <RenderFields\n className={`${baseClass}__fields`}\n fields={formSchema}\n forceRender\n margins=\"small\"\n path=\"\" // Leaving path empty makes it so field values are not prefixed / scoped by the entire schemaPath. e.g. we can access \"myField\" instead of \"someLexicalField.feature.blocks.someArrayB\" // TODO: Could there be any implications leaving path different than schemaPath?\n readOnly={false}\n schemaPath={schemaPath} // Having the correct schemaPath here allows sub-fields (like array > addRow) to run correct form-state calls and retrieve their needed form state from the server\n />\n </Collapsible>\n\n <FormSavePlugin onChange={onFormChange} />\n </React.Fragment>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"BlockContent.js","names":["useLexicalComposerContext","getTranslation","Button","Collapsible","ErrorPill","Pill","RenderComponent","RenderFields","SectionTitle","useDocumentInfo","useFormSubmitted","useTranslation","dequal","$getNodeByKey","React","useCallback","$isBlockNode","FormSavePlugin","removeUndefinedAndNullAndEmptyArraysRecursively","obj","key","value","Array","isArray","length","undefined","BlockContent","props","baseClass","clientBlock","field","formSchema","nodeKey","schemaPath","formData","i18n","editor","getDocPreferences","setDocFieldPreferences","isCollapsed","setIsCollapsed","useState","initialState","then","currentDocPreferences","currentFieldPreferences","fields","name","collapsedArray","collapsed","includes","id","hasSubmitted","errorCount","setErrorCount","fieldHasErrors","classNames","filter","Boolean","join","onFormChange","fullFieldsWithValues","newFormData","blockType","setTimeout","update","node","setFields","rowErrorCount","formField","Object","values","valid","onCollapsedChange","changedCollapsed","newCollapsed","push","splice","indexOf","hello","removeBlock","remove","_jsxs","Fragment","_jsx","className","collapsibleStyle","header","admin","components","Label","clientProps","blockKind","mappedComponent","pillStyle","labels","singular","slug","path","readOnly","count","withMessage","isEditable","buttonStyle","disabled","icon","onClick","e","preventDefault","round","tooltip","onToggle","incomingCollapsedState","forceRender","margins","onChange"],"sources":["../../../../../src/features/blocks/client/component/BlockContent.tsx"],"sourcesContent":["'use client'\nimport type { ClientBlock, ClientField, CollapsedPreferences, FormState } from 'payload'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n Button,\n Collapsible,\n ErrorPill,\n Pill,\n RenderComponent,\n RenderFields,\n SectionTitle,\n useDocumentInfo,\n useFormSubmitted,\n useTranslation,\n} from '@payloadcms/ui'\nimport { dequal } from 'dequal/lite'\nimport { $getNodeByKey } from 'lexical'\nimport React, { useCallback } from 'react'\n\nimport type { LexicalRichTextFieldProps } from '../../../../types.js'\nimport type { BlockFields } from '../../server/nodes/BlocksNode.js'\n\nimport { $isBlockNode } from '../nodes/BlocksNode.js'\nimport { FormSavePlugin } from './FormSavePlugin.js'\n\ntype Props = {\n baseClass: string\n clientBlock: ClientBlock\n field: LexicalRichTextFieldProps['field']\n formData: BlockFields\n formSchema: ClientField[]\n nodeKey: string\n path: string\n schemaPath: string\n}\n\n// Recursively remove all undefined values from even being present in formData, as they will\n// cause isDeepEqual to return false if, for example, formData has a key that fields.data\n// does not have, even if it's undefined.\n// Currently, this happens if a block has another sub-blocks field. Inside formData, that sub-blocks field has an undefined blockName property.\n// Inside of fields.data however, that sub-blocks blockName property does not exist at all.\nfunction removeUndefinedAndNullAndEmptyArraysRecursively(obj: object) {\n for (const key in obj) {\n const value = obj[key]\n if (Array.isArray(value) && !value?.length) {\n delete obj[key]\n } else if (value && typeof value === 'object') {\n removeUndefinedAndNullAndEmptyArraysRecursively(value)\n } else if (value === undefined || value === null) {\n delete obj[key]\n }\n }\n}\n\n/**\n * The actual content of the Block. This should be INSIDE a Form component,\n * scoped to the block. All format operations in here are thus scoped to the block's form, and\n * not the whole document.\n */\nexport const BlockContent: React.FC<Props> = (props) => {\n const { baseClass, clientBlock, field, formSchema, nodeKey, schemaPath } = props\n let { formData } = props\n\n const { i18n } = useTranslation()\n const [editor] = useLexicalComposerContext()\n // Used for saving collapsed to preferences (and gettin' it from there again)\n // Remember, these preferences are scoped to the whole document, not just this form. This\n // is important to consider for the data path used in setDocFieldPreferences\n const { getDocPreferences, setDocFieldPreferences } = useDocumentInfo()\n\n const [isCollapsed, setIsCollapsed] = React.useState<boolean>(() => {\n let initialState = false\n\n void getDocPreferences().then((currentDocPreferences) => {\n const currentFieldPreferences = currentDocPreferences?.fields[field.name]\n\n const collapsedArray = currentFieldPreferences?.collapsed\n\n if (collapsedArray && collapsedArray.includes(formData.id)) {\n initialState = true\n setIsCollapsed(true)\n }\n })\n return initialState\n })\n\n const hasSubmitted = useFormSubmitted()\n\n const [errorCount, setErrorCount] = React.useState(0)\n\n const fieldHasErrors = hasSubmitted && errorCount > 0\n\n const classNames = [\n `${baseClass}__row`,\n fieldHasErrors ? `${baseClass}__row--has-errors` : `${baseClass}__row--no-errors`,\n ]\n .filter(Boolean)\n .join(' ')\n\n const onFormChange = useCallback(\n ({\n fullFieldsWithValues,\n newFormData,\n }: {\n fullFieldsWithValues: FormState\n newFormData: BlockFields\n }) => {\n newFormData.id = formData.id\n newFormData.blockType = formData.blockType\n\n removeUndefinedAndNullAndEmptyArraysRecursively(newFormData)\n removeUndefinedAndNullAndEmptyArraysRecursively(formData)\n\n // Only update if the data has actually changed. Otherwise, we may be triggering an unnecessary value change,\n // which would trigger the \"Leave without saving\" dialog unnecessarily\n if (!dequal(formData, newFormData)) {\n // Running this in the next tick in the meantime fixes this issue: https://github.com/payloadcms/payload/issues/4108\n // I don't know why. When this is called immediately, it might focus out of a nested lexical editor field if an update is made there.\n // My hypothesis is that the nested editor might not have fully finished its update cycle yet. By updating in the next tick, we\n // ensure that the nested editor has finished its update cycle before we update the block node.\n setTimeout(() => {\n editor.update(() => {\n const node = $getNodeByKey(nodeKey)\n if (node && $isBlockNode(node)) {\n formData = newFormData\n node.setFields(newFormData)\n }\n })\n }, 0)\n }\n\n // update error count\n if (hasSubmitted) {\n let rowErrorCount = 0\n for (const formField of Object.values(fullFieldsWithValues)) {\n if (formField?.valid === false) {\n rowErrorCount++\n }\n }\n setErrorCount(rowErrorCount)\n }\n },\n [editor, nodeKey, hasSubmitted, formData],\n )\n\n const onCollapsedChange = useCallback(\n (changedCollapsed: boolean) => {\n void getDocPreferences().then((currentDocPreferences) => {\n const currentFieldPreferences = currentDocPreferences?.fields[field.name]\n\n const collapsedArray = currentFieldPreferences?.collapsed\n\n const newCollapsed: CollapsedPreferences =\n collapsedArray && collapsedArray?.length ? collapsedArray : []\n\n if (changedCollapsed) {\n if (!newCollapsed.includes(formData.id)) {\n newCollapsed.push(formData.id)\n }\n } else {\n if (newCollapsed.includes(formData.id)) {\n newCollapsed.splice(newCollapsed.indexOf(formData.id), 1)\n }\n }\n\n setDocFieldPreferences(field.name, {\n collapsed: newCollapsed,\n hello: 'hi',\n })\n })\n },\n [getDocPreferences, field.name, setDocFieldPreferences, formData.id],\n )\n\n const removeBlock = useCallback(() => {\n editor.update(() => {\n $getNodeByKey(nodeKey)?.remove()\n })\n }, [editor, nodeKey])\n\n return (\n <React.Fragment>\n <Collapsible\n className={classNames}\n collapsibleStyle={fieldHasErrors ? 'error' : 'default'}\n header={\n clientBlock?.admin?.components?.Label ? (\n <RenderComponent\n clientProps={{ blockKind: 'lexicalBlock', formData }}\n mappedComponent={clientBlock.admin.components.Label}\n />\n ) : (\n <div className={`${baseClass}__block-header`}>\n <div>\n <Pill\n className={`${baseClass}__block-pill ${baseClass}__block-pill-${formData?.blockType}`}\n pillStyle=\"white\"\n >\n {typeof clientBlock?.labels?.singular === 'string'\n ? getTranslation(clientBlock?.labels.singular, i18n)\n : clientBlock.slug}\n </Pill>\n <SectionTitle path=\"blockName\" readOnly={field?.admin?.readOnly || false} />\n {fieldHasErrors && <ErrorPill count={errorCount} i18n={i18n} withMessage />}\n </div>\n {editor.isEditable() && (\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__removeButton`}\n disabled={field?.admin?.readOnly}\n icon=\"x\"\n onClick={(e) => {\n e.preventDefault()\n removeBlock()\n }}\n round\n tooltip=\"Remove Block\"\n />\n )}\n </div>\n )\n }\n isCollapsed={isCollapsed}\n key={0}\n onToggle={(incomingCollapsedState) => {\n onCollapsedChange(incomingCollapsedState)\n setIsCollapsed(incomingCollapsedState)\n }}\n >\n <RenderFields\n className={`${baseClass}__fields`}\n fields={formSchema}\n forceRender\n margins=\"small\"\n path=\"\" // Leaving path empty makes it so field values are not prefixed / scoped by the entire schemaPath. e.g. we can access \"myField\" instead of \"someLexicalField.feature.blocks.someArrayB\" // TODO: Could there be any implications leaving path different than schemaPath?\n readOnly={false}\n schemaPath={schemaPath} // Having the correct schemaPath here allows sub-fields (like array > addRow) to run correct form-state calls and retrieve their needed form state from the server\n />\n </Collapsible>\n\n <FormSavePlugin onChange={onFormChange} />\n </React.Fragment>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -4,7 +4,7 @@ import './index.scss';
4
4
  type Props = {
5
5
  readonly children?: React.ReactNode;
6
6
  readonly formData: BlockFields;
7
- readonly nodeKey?: string;
7
+ readonly nodeKey: string;
8
8
  };
9
9
  export declare const BlockComponent: React.FC<Props>;
10
10
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/blocks/client/component/index.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAoD,MAAM,OAAO,CAAA;AASxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAA;AAInE,OAAO,cAAc,CAAA;AAErB,KAAK,KAAK,GAAG;IACX,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACnC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAA;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAC1B,CAAA;AAED,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAsJ1C,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/blocks/client/component/index.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAoD,MAAM,OAAO,CAAA;AASxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAA;AAInE,OAAO,cAAc,CAAA;AAErB,KAAK,KAAK,GAAG;IACX,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACnC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAA;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAsJ1C,CAAA"}
@@ -36,12 +36,14 @@ export const BlockComponent = props => {
36
36
  } = useEditorConfigContext();
37
37
  const schemaFieldsPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_blocks.lexical_blocks.${formData.blockType}`;
38
38
  const componentMapRenderedBlockPath = `lexical_internal_feature.blocks.fields.lexical_blocks`;
39
- const blocksField = richTextComponentMap.get(componentMapRenderedBlockPath)[0];
39
+ const blocksField = richTextComponentMap?.get(componentMapRenderedBlockPath)[0];
40
40
  const clientBlock = blocksField.blocks.find(block => block.slug === formData.blockType);
41
41
  // Field Schema
42
42
  useEffect(() => {
43
43
  const awaitInitialState = async () => {
44
- const state = await getFormState({
44
+ const {
45
+ state
46
+ } = await getFormState({
45
47
  apiRoute: config.routes.api,
46
48
  body: {
47
49
  id,
@@ -69,7 +71,9 @@ export const BlockComponent = props => {
69
71
  const onChange = useCallback(async ({
70
72
  formState: prevFormState
71
73
  }) => {
72
- const formState = await getFormState({
74
+ const {
75
+ state: formState
76
+ } = await getFormState({
73
77
  apiRoute: config.routes.api,
74
78
  body: {
75
79
  id,
@@ -125,10 +129,10 @@ export const BlockComponent = props => {
125
129
  children: [/*#__PURE__*/_jsx(Pill, {
126
130
  className: `${baseClass}__block-pill ${baseClass}__block-pill-${formData?.blockType}`,
127
131
  pillStyle: "white",
128
- children: clientBlock && typeof clientBlock.labels.singular === 'string' ? getTranslation(clientBlock.labels.singular, i18n) : clientBlock.slug
132
+ children: clientBlock && typeof clientBlock.labels?.singular === 'string' ? getTranslation(clientBlock.labels.singular, i18n) : clientBlock?.slug
129
133
  }), /*#__PURE__*/_jsx(SectionTitle, {
130
134
  path: "blockName",
131
- readOnly: parentLexicalRichTextField?.admin?.readOnly
135
+ readOnly: parentLexicalRichTextField?.admin?.readOnly || false
132
136
  })]
133
137
  })
134
138
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["Collapsible","Form","Pill","RenderComponent","SectionTitle","ShimmerEffect","useConfig","useDocumentInfo","useFieldProps","useFormSubmitted","useTranslation","React","useCallback","useEffect","useMemo","useState","baseClass","getTranslation","getFormState","v4","uuid","useEditorConfigContext","BlockContent","BlockComponent","props","formData","nodeKey","config","submitted","id","path","schemaPath","field","parentLexicalRichTextField","initialState","setInitialState","richTextComponentMap","schemaFieldsPath","blockType","componentMapRenderedBlockPath","blocksField","get","clientBlock","blocks","find","block","slug","awaitInitialState","state","apiRoute","routes","api","body","data","operation","serverURL","blockName","initialValue","passesCondition","valid","value","onChange","formState","prevFormState","i18n","classNames","filter","Boolean","join","formContent","_jsx","beforeSubmit","fields","formSchema","className","collapsibleStyle","header","admin","components","Label","clientProps","blockKind","mappedComponent","_jsxs","pillStyle","labels","singular","readOnly","height"],"sources":["../../../../../src/features/blocks/client/component/index.tsx"],"sourcesContent":["'use client'\n\nimport type { FormProps } from '@payloadcms/ui'\n\nimport {\n Collapsible,\n Form,\n Pill,\n RenderComponent,\n SectionTitle,\n ShimmerEffect,\n useConfig,\n useDocumentInfo,\n useFieldProps,\n useFormSubmitted,\n useTranslation,\n} from '@payloadcms/ui'\nimport React, { useCallback, useEffect, useMemo, useState } from 'react'\n\nconst baseClass = 'lexical-block'\nimport type { BlocksFieldClient, FormState } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { getFormState } from '@payloadcms/ui/shared'\nimport { v4 as uuid } from 'uuid'\n\nimport type { BlockFields } from '../../server/nodes/BlocksNode.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport { BlockContent } from './BlockContent.js'\nimport './index.scss'\n\ntype Props = {\n readonly children?: React.ReactNode\n readonly formData: BlockFields\n readonly nodeKey?: string\n}\n\nexport const BlockComponent: React.FC<Props> = (props) => {\n const { formData, nodeKey } = props\n const { config } = useConfig()\n const submitted = useFormSubmitted()\n const { id } = useDocumentInfo()\n const { path, schemaPath } = useFieldProps()\n const { field: parentLexicalRichTextField } = useEditorConfigContext()\n\n const [initialState, setInitialState] = useState<false | FormState>(false)\n const {\n field: { richTextComponentMap },\n } = useEditorConfigContext()\n\n const schemaFieldsPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_blocks.lexical_blocks.${formData.blockType}`\n\n const componentMapRenderedBlockPath = `lexical_internal_feature.blocks.fields.lexical_blocks`\n const blocksField: BlocksFieldClient = richTextComponentMap.get(componentMapRenderedBlockPath)[0]\n\n const clientBlock = blocksField.blocks.find((block) => block.slug === formData.blockType)\n\n // Field Schema\n useEffect(() => {\n const awaitInitialState = async () => {\n const state = await getFormState({\n apiRoute: config.routes.api,\n body: {\n id,\n data: formData,\n operation: 'update',\n schemaPath: schemaFieldsPath,\n },\n serverURL: config.serverURL,\n })\n\n if (state) {\n state.blockName = {\n initialValue: '',\n passesCondition: true,\n valid: true,\n value: formData.blockName,\n }\n\n setInitialState(state)\n }\n }\n\n if (formData) {\n void awaitInitialState()\n }\n }, [config.routes.api, config.serverURL, schemaFieldsPath, id]) // DO NOT ADD FORMDATA HERE! Adding formData will kick you out of sub block editors while writing.\n\n const onChange: FormProps['onChange'][0] = useCallback(\n async ({ formState: prevFormState }) => {\n const formState = await getFormState({\n apiRoute: config.routes.api,\n body: {\n id,\n formState: prevFormState,\n operation: 'update',\n schemaPath: schemaFieldsPath,\n },\n serverURL: config.serverURL,\n })\n\n formState.blockName = {\n initialValue: '',\n passesCondition: true,\n valid: true,\n value: formData.blockName,\n }\n\n return formState\n },\n\n [config.routes.api, config.serverURL, id, schemaFieldsPath, formData.blockName],\n )\n const { i18n } = useTranslation()\n\n const classNames = [`${baseClass}__row`, `${baseClass}__row--no-errors`].filter(Boolean).join(' ')\n\n // Memoized Form JSX\n const formContent = useMemo(() => {\n return clientBlock && initialState !== false ? (\n <Form\n beforeSubmit={[onChange]}\n fields={clientBlock.fields}\n initialState={initialState}\n onChange={[onChange]}\n submitted={submitted}\n uuid={uuid()}\n >\n <BlockContent\n baseClass={baseClass}\n clientBlock={clientBlock}\n field={parentLexicalRichTextField}\n formData={formData}\n formSchema={clientBlock.fields}\n nodeKey={nodeKey}\n path={`${path}.lexical_internal_feature.blocks.${formData.blockType}`}\n schemaPath={schemaFieldsPath}\n />\n </Form>\n ) : (\n <Collapsible\n className={classNames}\n collapsibleStyle=\"default\"\n header={\n clientBlock?.admin?.components?.Label ? (\n <RenderComponent\n clientProps={{ blockKind: 'lexicalBlock', formData }}\n mappedComponent={clientBlock.admin.components.Label}\n />\n ) : (\n <div className={`${baseClass}__block-header`}>\n <div>\n <Pill\n className={`${baseClass}__block-pill ${baseClass}__block-pill-${formData?.blockType}`}\n pillStyle=\"white\"\n >\n {clientBlock && typeof clientBlock.labels.singular === 'string'\n ? getTranslation(clientBlock.labels.singular, i18n)\n : clientBlock.slug}\n </Pill>\n <SectionTitle\n path=\"blockName\"\n readOnly={parentLexicalRichTextField?.admin?.readOnly}\n />\n </div>\n </div>\n )\n }\n key={0}\n >\n <ShimmerEffect height=\"35vh\" />\n </Collapsible>\n )\n }, [\n clientBlock,\n initialState,\n onChange,\n submitted,\n parentLexicalRichTextField,\n nodeKey,\n path,\n schemaFieldsPath,\n classNames,\n i18n,\n ])\n\n return <div className={baseClass + ' ' + baseClass + '-' + formData.blockType}>{formContent}</div>\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["Collapsible","Form","Pill","RenderComponent","SectionTitle","ShimmerEffect","useConfig","useDocumentInfo","useFieldProps","useFormSubmitted","useTranslation","React","useCallback","useEffect","useMemo","useState","baseClass","getTranslation","getFormState","v4","uuid","useEditorConfigContext","BlockContent","BlockComponent","props","formData","nodeKey","config","submitted","id","path","schemaPath","field","parentLexicalRichTextField","initialState","setInitialState","richTextComponentMap","schemaFieldsPath","blockType","componentMapRenderedBlockPath","blocksField","get","clientBlock","blocks","find","block","slug","awaitInitialState","state","apiRoute","routes","api","body","data","operation","serverURL","blockName","initialValue","passesCondition","valid","value","onChange","formState","prevFormState","i18n","classNames","filter","Boolean","join","formContent","_jsx","beforeSubmit","fields","formSchema","className","collapsibleStyle","header","admin","components","Label","clientProps","blockKind","mappedComponent","_jsxs","pillStyle","labels","singular","readOnly","height"],"sources":["../../../../../src/features/blocks/client/component/index.tsx"],"sourcesContent":["'use client'\n\nimport {\n Collapsible,\n Form,\n Pill,\n RenderComponent,\n SectionTitle,\n ShimmerEffect,\n useConfig,\n useDocumentInfo,\n useFieldProps,\n useFormSubmitted,\n useTranslation,\n} from '@payloadcms/ui'\nimport React, { useCallback, useEffect, useMemo, useState } from 'react'\n\nconst baseClass = 'lexical-block'\nimport type { BlocksFieldClient, FormState } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { getFormState } from '@payloadcms/ui/shared'\nimport { v4 as uuid } from 'uuid'\n\nimport type { BlockFields } from '../../server/nodes/BlocksNode.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport { BlockContent } from './BlockContent.js'\nimport './index.scss'\n\ntype Props = {\n readonly children?: React.ReactNode\n readonly formData: BlockFields\n readonly nodeKey: string\n}\n\nexport const BlockComponent: React.FC<Props> = (props) => {\n const { formData, nodeKey } = props\n const { config } = useConfig()\n const submitted = useFormSubmitted()\n const { id } = useDocumentInfo()\n const { path, schemaPath } = useFieldProps()\n const { field: parentLexicalRichTextField } = useEditorConfigContext()\n\n const [initialState, setInitialState] = useState<false | FormState>(false)\n const {\n field: { richTextComponentMap },\n } = useEditorConfigContext()\n\n const schemaFieldsPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_blocks.lexical_blocks.${formData.blockType}`\n\n const componentMapRenderedBlockPath = `lexical_internal_feature.blocks.fields.lexical_blocks`\n const blocksField: BlocksFieldClient = richTextComponentMap?.get(componentMapRenderedBlockPath)[0]\n\n const clientBlock = blocksField.blocks.find((block) => block.slug === formData.blockType)\n\n // Field Schema\n useEffect(() => {\n const awaitInitialState = async () => {\n const { state } = await getFormState({\n apiRoute: config.routes.api,\n body: {\n id,\n data: formData,\n operation: 'update',\n schemaPath: schemaFieldsPath,\n },\n serverURL: config.serverURL,\n })\n\n if (state) {\n state.blockName = {\n initialValue: '',\n passesCondition: true,\n valid: true,\n value: formData.blockName,\n }\n\n setInitialState(state)\n }\n }\n\n if (formData) {\n void awaitInitialState()\n }\n }, [config.routes.api, config.serverURL, schemaFieldsPath, id]) // DO NOT ADD FORMDATA HERE! Adding formData will kick you out of sub block editors while writing.\n\n const onChange = useCallback(\n async ({ formState: prevFormState }) => {\n const { state: formState } = await getFormState({\n apiRoute: config.routes.api,\n body: {\n id,\n formState: prevFormState,\n operation: 'update',\n schemaPath: schemaFieldsPath,\n },\n serverURL: config.serverURL,\n })\n\n formState.blockName = {\n initialValue: '',\n passesCondition: true,\n valid: true,\n value: formData.blockName,\n }\n\n return formState\n },\n\n [config.routes.api, config.serverURL, id, schemaFieldsPath, formData.blockName],\n )\n const { i18n } = useTranslation()\n\n const classNames = [`${baseClass}__row`, `${baseClass}__row--no-errors`].filter(Boolean).join(' ')\n\n // Memoized Form JSX\n const formContent = useMemo(() => {\n return clientBlock && initialState !== false ? (\n <Form\n beforeSubmit={[onChange]}\n fields={clientBlock.fields}\n initialState={initialState}\n onChange={[onChange]}\n submitted={submitted}\n uuid={uuid()}\n >\n <BlockContent\n baseClass={baseClass}\n clientBlock={clientBlock}\n field={parentLexicalRichTextField}\n formData={formData}\n formSchema={clientBlock.fields}\n nodeKey={nodeKey}\n path={`${path}.lexical_internal_feature.blocks.${formData.blockType}`}\n schemaPath={schemaFieldsPath}\n />\n </Form>\n ) : (\n <Collapsible\n className={classNames}\n collapsibleStyle=\"default\"\n header={\n clientBlock?.admin?.components?.Label ? (\n <RenderComponent\n clientProps={{ blockKind: 'lexicalBlock', formData }}\n mappedComponent={clientBlock.admin.components.Label}\n />\n ) : (\n <div className={`${baseClass}__block-header`}>\n <div>\n <Pill\n className={`${baseClass}__block-pill ${baseClass}__block-pill-${formData?.blockType}`}\n pillStyle=\"white\"\n >\n {clientBlock && typeof clientBlock.labels?.singular === 'string'\n ? getTranslation(clientBlock.labels.singular, i18n)\n : clientBlock?.slug}\n </Pill>\n <SectionTitle\n path=\"blockName\"\n readOnly={parentLexicalRichTextField?.admin?.readOnly || false}\n />\n </div>\n </div>\n )\n }\n key={0}\n >\n <ShimmerEffect height=\"35vh\" />\n </Collapsible>\n )\n }, [\n clientBlock,\n initialState,\n onChange,\n submitted,\n parentLexicalRichTextField,\n nodeKey,\n path,\n schemaFieldsPath,\n classNames,\n i18n,\n ])\n\n return <div className={baseClass + ' ' + baseClass + '-' + formData.blockType}>{formContent}</div>\n}\n"],"mappings":"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","ignoreList":[]}
@@ -3,7 +3,7 @@ import type { InlineBlockFields } from '../nodes/InlineBlocksNode.js';
3
3
  import './index.scss';
4
4
  type Props = {
5
5
  readonly formData: InlineBlockFields;
6
- readonly nodeKey?: string;
6
+ readonly nodeKey: string;
7
7
  };
8
8
  export declare const InlineBlockComponent: React.FC<Props>;
9
9
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/blocks/client/componentInline/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAyC,MAAM,OAAO,CAAA;AAoB7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAKrE,OAAO,cAAc,CAAA;AAErB,KAAK,KAAK,GAAG;IACX,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAA;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAC1B,CAAA;AAED,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA+HhD,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/blocks/client/componentInline/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAyC,MAAM,OAAO,CAAA;AAoB7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAKrE,OAAO,cAAc,CAAA;AAErB,KAAK,KAAK,GAAG;IACX,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAA;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA+HhD,CAAA"}
@@ -33,11 +33,11 @@ export const InlineBlockComponent = props => {
33
33
  }
34
34
  } = useEditorConfigContext();
35
35
  const componentMapRenderedBlockPath = `lexical_internal_feature.blocks.fields.lexical_inline_blocks`;
36
- const blocksField = richTextComponentMap.get(componentMapRenderedBlockPath)[0];
36
+ const blocksField = richTextComponentMap?.get(componentMapRenderedBlockPath)[0];
37
37
  const clientBlock = blocksField.blocks.find(block => block.slug === formData.blockType);
38
38
  const removeInlineBlock = useCallback(() => {
39
39
  editor.update(() => {
40
- $getNodeByKey(nodeKey).remove();
40
+ $getNodeByKey(nodeKey)?.remove();
41
41
  });
42
42
  }, [editor, nodeKey]);
43
43
  const $onDelete = useCallback(event => {
@@ -70,7 +70,7 @@ export const InlineBlockComponent = props => {
70
70
  useEffect(() => {
71
71
  return mergeRegister(editor.registerCommand(CLICK_COMMAND, onClick, COMMAND_PRIORITY_LOW), editor.registerCommand(KEY_DELETE_COMMAND, $onDelete, COMMAND_PRIORITY_LOW), editor.registerCommand(KEY_BACKSPACE_COMMAND, $onDelete, COMMAND_PRIORITY_LOW));
72
72
  }, [clearSelection, editor, isSelected, nodeKey, $onDelete, setSelected, onClick]);
73
- const blockDisplayName = clientBlock?.labels?.singular ? getTranslation(clientBlock.labels.singular, i18n) : clientBlock.slug;
73
+ const blockDisplayName = clientBlock?.labels?.singular ? getTranslation(clientBlock.labels.singular, i18n) : clientBlock?.slug;
74
74
  return /*#__PURE__*/_jsxs("div", {
75
75
  className: [baseClass, baseClass + '-' + formData.blockType, isSelected && `${baseClass}--selected`].filter(Boolean).join(' '),
76
76
  ref: inlineBlockElemElemRef,
@@ -81,7 +81,7 @@ export const InlineBlockComponent = props => {
81
81
  },
82
82
  mappedComponent: clientBlock.admin.components.Label
83
83
  }) : /*#__PURE__*/_jsx("div", {
84
- children: getTranslation(clientBlock.labels?.singular, i18n)
84
+ children: getTranslation(clientBlock.labels.singular, i18n)
85
85
  }), editor.isEditable() && /*#__PURE__*/_jsxs("div", {
86
86
  className: `${baseClass}__actions`,
87
87
  children: [/*#__PURE__*/_jsx(Button, {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["React","useCallback","useEffect","useRef","baseClass","useLexicalComposerContext","useLexicalNodeSelection","mergeRegister","getTranslation","Button","RenderComponent","useTranslation","$getNodeByKey","$getSelection","$isNodeSelection","CLICK_COMMAND","COMMAND_PRIORITY_LOW","KEY_BACKSPACE_COMMAND","KEY_DELETE_COMMAND","useEditorConfigContext","$isInlineBlockNode","OPEN_INLINE_BLOCK_DRAWER_COMMAND","InlineBlockComponent","props","formData","nodeKey","editor","i18n","t","field","inlineBlockElemElemRef","isSelected","setSelected","clearSelection","richTextComponentMap","componentMapRenderedBlockPath","blocksField","get","clientBlock","blocks","find","block","slug","blockType","removeInlineBlock","update","remove","$onDelete","event","preventDefault","node","onClick","payload","target","current","contains","shiftKey","registerCommand","blockDisplayName","labels","singular","_jsxs","className","filter","Boolean","join","ref","admin","components","Label","_jsx","clientProps","blockKind","mappedComponent","isEditable","buttonStyle","disabled","readOnly","el","icon","dispatchCommand","fields","round","size","tooltip","label","e"],"sources":["../../../../../src/features/blocks/client/componentInline/index.tsx"],"sourcesContent":["'use client'\n\nimport React, { useCallback, useEffect, useRef } from 'react'\nconst baseClass = 'inline-block'\n\nimport type { BlocksFieldClient } from 'payload'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { useLexicalNodeSelection } from '@lexical/react/useLexicalNodeSelection'\nimport { mergeRegister } from '@lexical/utils'\nimport { getTranslation } from '@payloadcms/translations'\nimport { Button, RenderComponent, useTranslation } from '@payloadcms/ui'\nimport {\n $getNodeByKey,\n $getSelection,\n $isNodeSelection,\n CLICK_COMMAND,\n COMMAND_PRIORITY_LOW,\n KEY_BACKSPACE_COMMAND,\n KEY_DELETE_COMMAND,\n} from 'lexical'\n\nimport type { InlineBlockFields } from '../nodes/InlineBlocksNode.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport { $isInlineBlockNode } from '../nodes/InlineBlocksNode.js'\nimport { OPEN_INLINE_BLOCK_DRAWER_COMMAND } from '../plugin/commands.js'\nimport './index.scss'\n\ntype Props = {\n readonly formData: InlineBlockFields\n readonly nodeKey?: string\n}\n\nexport const InlineBlockComponent: React.FC<Props> = (props) => {\n const { formData, nodeKey } = props\n const [editor] = useLexicalComposerContext()\n const { i18n, t } = useTranslation<object, string>()\n const { field } = useEditorConfigContext()\n const inlineBlockElemElemRef = useRef<HTMLDivElement | null>(null)\n const [isSelected, setSelected, clearSelection] = useLexicalNodeSelection(nodeKey)\n\n const {\n field: { richTextComponentMap },\n } = useEditorConfigContext()\n\n const componentMapRenderedBlockPath = `lexical_internal_feature.blocks.fields.lexical_inline_blocks`\n const blocksField: BlocksFieldClient = richTextComponentMap.get(componentMapRenderedBlockPath)[0]\n const clientBlock = blocksField.blocks.find((block) => block.slug === formData.blockType)\n\n const removeInlineBlock = useCallback(() => {\n editor.update(() => {\n $getNodeByKey(nodeKey).remove()\n })\n }, [editor, nodeKey])\n\n const $onDelete = useCallback(\n (event: KeyboardEvent) => {\n if (isSelected && $isNodeSelection($getSelection())) {\n event.preventDefault()\n const node = $getNodeByKey(nodeKey)\n if ($isInlineBlockNode(node)) {\n node.remove()\n return true\n }\n }\n return false\n },\n [isSelected, nodeKey],\n )\n const onClick = useCallback(\n (payload: MouseEvent) => {\n const event = payload\n // Check if inlineBlockElemElemRef.target or anything WITHIN inlineBlockElemElemRef.target was clicked\n if (\n event.target === inlineBlockElemElemRef.current ||\n inlineBlockElemElemRef.current?.contains(event.target as Node)\n ) {\n if (event.shiftKey) {\n setSelected(!isSelected)\n } else {\n if (!isSelected) {\n clearSelection()\n setSelected(true)\n }\n }\n return true\n }\n\n return false\n },\n [isSelected, setSelected, clearSelection],\n )\n\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand<MouseEvent>(CLICK_COMMAND, onClick, COMMAND_PRIORITY_LOW),\n\n editor.registerCommand(KEY_DELETE_COMMAND, $onDelete, COMMAND_PRIORITY_LOW),\n editor.registerCommand(KEY_BACKSPACE_COMMAND, $onDelete, COMMAND_PRIORITY_LOW),\n )\n }, [clearSelection, editor, isSelected, nodeKey, $onDelete, setSelected, onClick])\n\n const blockDisplayName = clientBlock?.labels?.singular\n ? getTranslation(clientBlock.labels.singular, i18n)\n : clientBlock.slug\n\n return (\n <div\n className={[\n baseClass,\n baseClass + '-' + formData.blockType,\n isSelected && `${baseClass}--selected`,\n ]\n .filter(Boolean)\n .join(' ')}\n ref={inlineBlockElemElemRef}\n >\n {clientBlock?.admin?.components?.Label ? (\n <RenderComponent\n clientProps={{ blockKind: 'lexicalInlineBlock', formData }}\n mappedComponent={clientBlock.admin.components.Label}\n />\n ) : (\n <div>{getTranslation(clientBlock.labels?.singular, i18n)}</div>\n )}\n {editor.isEditable() && (\n <div className={`${baseClass}__actions`}>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__editButton`}\n disabled={field?.admin?.readOnly}\n el=\"div\"\n icon=\"edit\"\n onClick={() => {\n editor.dispatchCommand(OPEN_INLINE_BLOCK_DRAWER_COMMAND, {\n fields: formData,\n nodeKey,\n })\n }}\n round\n size=\"small\"\n tooltip={t('lexical:blocks:inlineBlocks:edit', { label: blockDisplayName })}\n />\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__removeButton`}\n disabled={field?.admin?.readOnly}\n icon=\"x\"\n onClick={(e) => {\n e.preventDefault()\n removeInlineBlock()\n }}\n round\n size=\"small\"\n tooltip={t('lexical:blocks:inlineBlocks:remove', { label: blockDisplayName })}\n />\n </div>\n )}\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["React","useCallback","useEffect","useRef","baseClass","useLexicalComposerContext","useLexicalNodeSelection","mergeRegister","getTranslation","Button","RenderComponent","useTranslation","$getNodeByKey","$getSelection","$isNodeSelection","CLICK_COMMAND","COMMAND_PRIORITY_LOW","KEY_BACKSPACE_COMMAND","KEY_DELETE_COMMAND","useEditorConfigContext","$isInlineBlockNode","OPEN_INLINE_BLOCK_DRAWER_COMMAND","InlineBlockComponent","props","formData","nodeKey","editor","i18n","t","field","inlineBlockElemElemRef","isSelected","setSelected","clearSelection","richTextComponentMap","componentMapRenderedBlockPath","blocksField","get","clientBlock","blocks","find","block","slug","blockType","removeInlineBlock","update","remove","$onDelete","event","preventDefault","node","onClick","payload","target","current","contains","shiftKey","registerCommand","blockDisplayName","labels","singular","_jsxs","className","filter","Boolean","join","ref","admin","components","Label","_jsx","clientProps","blockKind","mappedComponent","isEditable","buttonStyle","disabled","readOnly","el","icon","dispatchCommand","fields","round","size","tooltip","label","e"],"sources":["../../../../../src/features/blocks/client/componentInline/index.tsx"],"sourcesContent":["'use client'\n\nimport React, { useCallback, useEffect, useRef } from 'react'\nconst baseClass = 'inline-block'\n\nimport type { BlocksFieldClient } from 'payload'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { useLexicalNodeSelection } from '@lexical/react/useLexicalNodeSelection'\nimport { mergeRegister } from '@lexical/utils'\nimport { getTranslation } from '@payloadcms/translations'\nimport { Button, RenderComponent, useTranslation } from '@payloadcms/ui'\nimport {\n $getNodeByKey,\n $getSelection,\n $isNodeSelection,\n CLICK_COMMAND,\n COMMAND_PRIORITY_LOW,\n KEY_BACKSPACE_COMMAND,\n KEY_DELETE_COMMAND,\n} from 'lexical'\n\nimport type { InlineBlockFields } from '../nodes/InlineBlocksNode.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport { $isInlineBlockNode } from '../nodes/InlineBlocksNode.js'\nimport { OPEN_INLINE_BLOCK_DRAWER_COMMAND } from '../plugin/commands.js'\nimport './index.scss'\n\ntype Props = {\n readonly formData: InlineBlockFields\n readonly nodeKey: string\n}\n\nexport const InlineBlockComponent: React.FC<Props> = (props) => {\n const { formData, nodeKey } = props\n const [editor] = useLexicalComposerContext()\n const { i18n, t } = useTranslation<object, string>()\n const { field } = useEditorConfigContext()\n const inlineBlockElemElemRef = useRef<HTMLDivElement | null>(null)\n const [isSelected, setSelected, clearSelection] = useLexicalNodeSelection(nodeKey)\n\n const {\n field: { richTextComponentMap },\n } = useEditorConfigContext()\n\n const componentMapRenderedBlockPath = `lexical_internal_feature.blocks.fields.lexical_inline_blocks`\n const blocksField: BlocksFieldClient = richTextComponentMap?.get(componentMapRenderedBlockPath)[0]\n const clientBlock = blocksField.blocks.find((block) => block.slug === formData.blockType)\n\n const removeInlineBlock = useCallback(() => {\n editor.update(() => {\n $getNodeByKey(nodeKey)?.remove()\n })\n }, [editor, nodeKey])\n\n const $onDelete = useCallback(\n (event: KeyboardEvent) => {\n if (isSelected && $isNodeSelection($getSelection())) {\n event.preventDefault()\n const node = $getNodeByKey(nodeKey)\n if ($isInlineBlockNode(node)) {\n node.remove()\n return true\n }\n }\n return false\n },\n [isSelected, nodeKey],\n )\n const onClick = useCallback(\n (payload: MouseEvent) => {\n const event = payload\n // Check if inlineBlockElemElemRef.target or anything WITHIN inlineBlockElemElemRef.target was clicked\n if (\n event.target === inlineBlockElemElemRef.current ||\n inlineBlockElemElemRef.current?.contains(event.target as Node)\n ) {\n if (event.shiftKey) {\n setSelected(!isSelected)\n } else {\n if (!isSelected) {\n clearSelection()\n setSelected(true)\n }\n }\n return true\n }\n\n return false\n },\n [isSelected, setSelected, clearSelection],\n )\n\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand<MouseEvent>(CLICK_COMMAND, onClick, COMMAND_PRIORITY_LOW),\n\n editor.registerCommand(KEY_DELETE_COMMAND, $onDelete, COMMAND_PRIORITY_LOW),\n editor.registerCommand(KEY_BACKSPACE_COMMAND, $onDelete, COMMAND_PRIORITY_LOW),\n )\n }, [clearSelection, editor, isSelected, nodeKey, $onDelete, setSelected, onClick])\n\n const blockDisplayName = clientBlock?.labels?.singular\n ? getTranslation(clientBlock.labels.singular, i18n)\n : clientBlock?.slug\n\n return (\n <div\n className={[\n baseClass,\n baseClass + '-' + formData.blockType,\n isSelected && `${baseClass}--selected`,\n ]\n .filter(Boolean)\n .join(' ')}\n ref={inlineBlockElemElemRef}\n >\n {clientBlock?.admin?.components?.Label ? (\n <RenderComponent\n clientProps={{ blockKind: 'lexicalInlineBlock', formData }}\n mappedComponent={clientBlock.admin.components.Label}\n />\n ) : (\n <div>{getTranslation(clientBlock!.labels!.singular, i18n)}</div>\n )}\n {editor.isEditable() && (\n <div className={`${baseClass}__actions`}>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__editButton`}\n disabled={field?.admin?.readOnly}\n el=\"div\"\n icon=\"edit\"\n onClick={() => {\n editor.dispatchCommand(OPEN_INLINE_BLOCK_DRAWER_COMMAND, {\n fields: formData,\n nodeKey,\n })\n }}\n round\n size=\"small\"\n tooltip={t('lexical:blocks:inlineBlocks:edit', { label: blockDisplayName })}\n />\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__removeButton`}\n disabled={field?.admin?.readOnly}\n icon=\"x\"\n onClick={(e) => {\n e.preventDefault()\n removeInlineBlock()\n }}\n round\n size=\"small\"\n tooltip={t('lexical:blocks:inlineBlocks:remove', { label: blockDisplayName })}\n />\n </div>\n )}\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -2,5 +2,5 @@ export type BlocksFeatureClientProps = {
2
2
  clientBlockSlugs: string[];
3
3
  clientInlineBlockSlugs: string[];
4
4
  };
5
- export declare const BlocksFeatureClient: import("../../typesClient.js").FeatureProviderProviderClient<BlocksFeatureClientProps, BlocksFeatureClientProps>;
5
+ export declare const BlocksFeatureClient: import("../../typesClient.js").FeatureProviderProviderClient<BlocksFeatureClientProps, UnSanitizedClientProps>;
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/features/blocks/client/index.tsx"],"names":[],"mappings":"AAiBA,MAAM,MAAM,wBAAwB,GAAG;IACrC,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAC1B,sBAAsB,EAAE,MAAM,EAAE,CAAA;CACjC,CAAA;AAED,eAAO,MAAM,mBAAmB,kHA0K7B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/features/blocks/client/index.tsx"],"names":[],"mappings":"AAiBA,MAAM,MAAM,wBAAwB,GAAG;IACrC,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAC1B,sBAAsB,EAAE,MAAM,EAAE,CAAA;CACjC,CAAA;AAED,eAAO,MAAM,mBAAmB,gHAsL7B,CAAA"}
@@ -8,6 +8,7 @@ import { BlockNode } from './nodes/BlocksNode.js';
8
8
  import { InlineBlockNode } from './nodes/InlineBlocksNode.js';
9
9
  import { INSERT_BLOCK_COMMAND, OPEN_INLINE_BLOCK_DRAWER_COMMAND } from './plugin/commands.js';
10
10
  import { BlocksPlugin } from './plugin/index.js';
11
+ // @ts-expect-error - TODO: fix this
11
12
  export const BlocksFeatureClient = createClientFeature(({
12
13
  props
13
14
  }) => ({
@@ -28,17 +29,19 @@ export const BlocksFeatureClient = createClientFeature(({
28
29
  i18n,
29
30
  richTextComponentMap
30
31
  }) => {
32
+ if (!richTextComponentMap) {
33
+ return blockSlug;
34
+ }
31
35
  const componentMapRenderedBlockPath = `lexical_internal_feature.blocks.fields.lexical_blocks`;
32
- const blocksField = richTextComponentMap.get(componentMapRenderedBlockPath)[0];
36
+ const blocksField = richTextComponentMap.get(componentMapRenderedBlockPath)?.[0];
33
37
  const clientBlock = blocksField.blocks.find(_block => _block.slug === blockSlug);
34
- const blockDisplayName = clientBlock.labels.singular ? getTranslation(clientBlock.labels.singular, i18n) : clientBlock.slug;
38
+ const blockDisplayName = clientBlock?.labels?.singular ? getTranslation(clientBlock.labels.singular, i18n) : clientBlock?.slug;
35
39
  return blockDisplayName;
36
40
  },
37
41
  onSelect: ({
38
42
  editor
39
43
  }) => {
40
44
  editor.dispatchCommand(INSERT_BLOCK_COMMAND, {
41
- id: null,
42
45
  blockName: '',
43
46
  blockType: blockSlug
44
47
  });
@@ -61,10 +64,13 @@ export const BlocksFeatureClient = createClientFeature(({
61
64
  i18n,
62
65
  richTextComponentMap
63
66
  }) => {
67
+ if (!richTextComponentMap) {
68
+ return inlineBlockSlug;
69
+ }
64
70
  const componentMapRenderedBlockPath = `lexical_internal_feature.blocks.fields.lexical_inline_blocks`;
65
- const blocksField = richTextComponentMap.get(componentMapRenderedBlockPath)[0];
71
+ const blocksField = richTextComponentMap.get(componentMapRenderedBlockPath)?.[0];
66
72
  const clientBlock = blocksField.blocks.find(_block => _block.slug === inlineBlockSlug);
67
- const blockDisplayName = clientBlock.labels.singular ? getTranslation(clientBlock.labels.singular, i18n) : clientBlock.slug;
73
+ const blockDisplayName = clientBlock?.labels?.singular ? getTranslation(clientBlock.labels.singular, i18n) : clientBlock?.slug;
68
74
  return blockDisplayName;
69
75
  },
70
76
  onSelect: ({
@@ -72,7 +78,6 @@ export const BlocksFeatureClient = createClientFeature(({
72
78
  }) => {
73
79
  editor.dispatchCommand(OPEN_INLINE_BLOCK_DRAWER_COMMAND, {
74
80
  fields: {
75
- id: null,
76
81
  blockName: '',
77
82
  blockType: inlineBlockSlug
78
83
  }
@@ -101,17 +106,19 @@ export const BlocksFeatureClient = createClientFeature(({
101
106
  i18n,
102
107
  richTextComponentMap
103
108
  }) => {
109
+ if (!richTextComponentMap) {
110
+ return blockSlug;
111
+ }
104
112
  const componentMapRenderedBlockPath = `lexical_internal_feature.blocks.fields.lexical_blocks`;
105
- const blocksField = richTextComponentMap.get(componentMapRenderedBlockPath)[0];
113
+ const blocksField = richTextComponentMap.get(componentMapRenderedBlockPath)?.[0];
106
114
  const clientBlock = blocksField.blocks.find(_block => _block.slug === blockSlug);
107
- const blockDisplayName = clientBlock.labels.singular ? getTranslation(clientBlock.labels.singular, i18n) : clientBlock.slug;
115
+ const blockDisplayName = clientBlock?.labels?.singular ? getTranslation(clientBlock.labels.singular, i18n) : clientBlock?.slug;
108
116
  return blockDisplayName;
109
117
  },
110
118
  onSelect: ({
111
119
  editor
112
120
  }) => {
113
121
  editor.dispatchCommand(INSERT_BLOCK_COMMAND, {
114
- id: null,
115
122
  blockName: '',
116
123
  blockType: blockSlug
117
124
  });
@@ -133,10 +140,13 @@ export const BlocksFeatureClient = createClientFeature(({
133
140
  i18n,
134
141
  richTextComponentMap
135
142
  }) => {
143
+ if (!richTextComponentMap) {
144
+ return inlineBlockSlug;
145
+ }
136
146
  const componentMapRenderedBlockPath = `lexical_internal_feature.blocks.fields.lexical_inline_blocks`;
137
- const blocksField = richTextComponentMap.get(componentMapRenderedBlockPath)[0];
147
+ const blocksField = richTextComponentMap.get(componentMapRenderedBlockPath)?.[0];
138
148
  const clientBlock = blocksField.blocks.find(_block => _block.slug === inlineBlockSlug);
139
- const blockDisplayName = clientBlock.labels.singular ? getTranslation(clientBlock.labels.singular, i18n) : clientBlock.slug;
149
+ const blockDisplayName = clientBlock?.labels?.singular ? getTranslation(clientBlock.labels.singular, i18n) : clientBlock?.slug;
140
150
  return blockDisplayName;
141
151
  },
142
152
  onSelect: ({
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["getTranslation","BlockIcon","InlineBlocksIcon","createClientFeature","BlockNode","InlineBlockNode","INSERT_BLOCK_COMMAND","OPEN_INLINE_BLOCK_DRAWER_COMMAND","BlocksPlugin","BlocksFeatureClient","props","nodes","plugins","Component","position","sanitizedClientFeatureProps","slashMenu","groups","clientBlockSlugs","length","items","map","blockSlug","Icon","key","keywords","label","i18n","richTextComponentMap","componentMapRenderedBlockPath","blocksField","get","clientBlock","blocks","find","_block","slug","blockDisplayName","labels","singular","onSelect","editor","dispatchCommand","id","blockName","blockType","t","clientInlineBlockSlugs","inlineBlockSlug","fields","filter","Boolean","toolbarFixed","type","ChildComponent","index","isActive","undefined","order"],"sources":["../../../../src/features/blocks/client/index.tsx"],"sourcesContent":["'use client'\n\nimport type { BlocksFieldClient } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\n\nimport type { SlashMenuItem } 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, OPEN_INLINE_BLOCK_DRAWER_COMMAND } from './plugin/commands.js'\nimport { BlocksPlugin } from './plugin/index.js'\n\nexport type BlocksFeatureClientProps = {\n clientBlockSlugs: string[]\n clientInlineBlockSlugs: string[]\n}\n\nexport const BlocksFeatureClient = createClientFeature<BlocksFeatureClientProps>(({ props }) => ({\n nodes: [BlockNode, InlineBlockNode],\n plugins: [\n {\n Component: BlocksPlugin,\n position: 'normal',\n },\n ],\n sanitizedClientFeatureProps: props,\n slashMenu: {\n groups: [\n props.clientBlockSlugs?.length\n ? {\n items: props.clientBlockSlugs.map((blockSlug) => {\n return {\n Icon: BlockIcon,\n key: 'block-' + blockSlug,\n keywords: ['block', 'blocks', blockSlug],\n label: ({ i18n, richTextComponentMap }) => {\n const componentMapRenderedBlockPath = `lexical_internal_feature.blocks.fields.lexical_blocks`\n const blocksField: BlocksFieldClient = richTextComponentMap.get(\n componentMapRenderedBlockPath,\n )[0]\n\n const clientBlock = blocksField.blocks.find((_block) => _block.slug === blockSlug)\n\n const blockDisplayName = clientBlock.labels.singular\n ? getTranslation(clientBlock.labels.singular, i18n)\n : clientBlock.slug\n\n return blockDisplayName\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INSERT_BLOCK_COMMAND, {\n id: null,\n blockName: '',\n blockType: blockSlug,\n })\n },\n } as SlashMenuItem\n }),\n key: 'blocks',\n label: ({ i18n }) => {\n return i18n.t('lexical:blocks:label')\n },\n }\n : null,\n props.clientInlineBlockSlugs?.length\n ? {\n items: props.clientInlineBlockSlugs.map((inlineBlockSlug) => {\n return {\n Icon: InlineBlocksIcon,\n key: 'inlineBlocks-' + inlineBlockSlug,\n keywords: ['inlineBlock', 'inline block', inlineBlockSlug],\n label: ({ i18n, richTextComponentMap }) => {\n const componentMapRenderedBlockPath = `lexical_internal_feature.blocks.fields.lexical_inline_blocks`\n\n const blocksField: BlocksFieldClient = richTextComponentMap.get(\n componentMapRenderedBlockPath,\n )[0]\n\n const clientBlock = blocksField.blocks.find(\n (_block) => _block.slug === inlineBlockSlug,\n )\n\n const blockDisplayName = clientBlock.labels.singular\n ? getTranslation(clientBlock.labels.singular, i18n)\n : clientBlock.slug\n\n return blockDisplayName\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(OPEN_INLINE_BLOCK_DRAWER_COMMAND, {\n fields: {\n id: null,\n blockName: '',\n blockType: inlineBlockSlug,\n },\n })\n },\n } as SlashMenuItem\n }),\n key: 'inlineBlocks',\n label: ({ i18n }) => {\n return i18n.t('lexical:blocks:inlineBlocks:label')\n },\n }\n : null,\n ].filter(Boolean),\n },\n toolbarFixed: {\n groups: [\n props.clientBlockSlugs?.length\n ? {\n type: 'dropdown',\n ChildComponent: BlockIcon,\n items: props.clientBlockSlugs.map((blockSlug, 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-' + blockSlug,\n label: ({ i18n, richTextComponentMap }) => {\n const componentMapRenderedBlockPath = `lexical_internal_feature.blocks.fields.lexical_blocks`\n const blocksField: BlocksFieldClient = richTextComponentMap.get(\n componentMapRenderedBlockPath,\n )[0]\n\n const clientBlock = blocksField.blocks.find((_block) => _block.slug === blockSlug)\n\n const blockDisplayName = clientBlock.labels.singular\n ? getTranslation(clientBlock.labels.singular, i18n)\n : clientBlock.slug\n\n return blockDisplayName\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INSERT_BLOCK_COMMAND, {\n id: null,\n blockName: '',\n blockType: blockSlug,\n })\n },\n order: index,\n } as ToolbarGroupItem\n }),\n key: 'blocks',\n order: 20,\n }\n : null,\n props.clientInlineBlockSlugs?.length\n ? {\n type: 'dropdown',\n ChildComponent: InlineBlocksIcon,\n items: props.clientInlineBlockSlugs.map((inlineBlockSlug, index) => {\n return {\n ChildComponent: InlineBlocksIcon,\n isActive: undefined,\n key: 'inlineBlock-' + inlineBlockSlug,\n label: ({ i18n, richTextComponentMap }) => {\n const componentMapRenderedBlockPath = `lexical_internal_feature.blocks.fields.lexical_inline_blocks`\n const blocksField: BlocksFieldClient = richTextComponentMap.get(\n componentMapRenderedBlockPath,\n )[0]\n\n const clientBlock = blocksField.blocks.find(\n (_block) => _block.slug === inlineBlockSlug,\n )\n\n const blockDisplayName = clientBlock.labels.singular\n ? getTranslation(clientBlock.labels.singular, i18n)\n : clientBlock.slug\n\n return blockDisplayName\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(OPEN_INLINE_BLOCK_DRAWER_COMMAND, {\n fields: {\n blockType: inlineBlockSlug,\n },\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"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["getTranslation","BlockIcon","InlineBlocksIcon","createClientFeature","BlockNode","InlineBlockNode","INSERT_BLOCK_COMMAND","OPEN_INLINE_BLOCK_DRAWER_COMMAND","BlocksPlugin","BlocksFeatureClient","props","nodes","plugins","Component","position","sanitizedClientFeatureProps","slashMenu","groups","clientBlockSlugs","length","items","map","blockSlug","Icon","key","keywords","label","i18n","richTextComponentMap","componentMapRenderedBlockPath","blocksField","get","clientBlock","blocks","find","_block","slug","blockDisplayName","labels","singular","onSelect","editor","dispatchCommand","blockName","blockType","t","clientInlineBlockSlugs","inlineBlockSlug","fields","filter","Boolean","toolbarFixed","type","ChildComponent","index","isActive","undefined","order"],"sources":["../../../../src/features/blocks/client/index.tsx"],"sourcesContent":["'use client'\n\nimport type { BlocksFieldClient } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\n\nimport type { SlashMenuItem } 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, OPEN_INLINE_BLOCK_DRAWER_COMMAND } from './plugin/commands.js'\nimport { BlocksPlugin } from './plugin/index.js'\n\nexport type BlocksFeatureClientProps = {\n clientBlockSlugs: string[]\n clientInlineBlockSlugs: string[]\n}\n// @ts-expect-error - TODO: fix this\nexport const BlocksFeatureClient = createClientFeature<BlocksFeatureClientProps>(({ props }) => ({\n nodes: [BlockNode, InlineBlockNode],\n plugins: [\n {\n Component: BlocksPlugin,\n position: 'normal',\n },\n ],\n sanitizedClientFeatureProps: props,\n slashMenu: {\n groups: [\n props.clientBlockSlugs?.length\n ? {\n items: props.clientBlockSlugs.map((blockSlug) => {\n return {\n Icon: BlockIcon,\n key: 'block-' + blockSlug,\n keywords: ['block', 'blocks', blockSlug],\n label: ({ i18n, richTextComponentMap }) => {\n if (!richTextComponentMap) {\n return blockSlug\n }\n\n const componentMapRenderedBlockPath = `lexical_internal_feature.blocks.fields.lexical_blocks`\n const blocksField: BlocksFieldClient = richTextComponentMap.get(\n componentMapRenderedBlockPath,\n )?.[0]\n\n const clientBlock = blocksField.blocks.find((_block) => _block.slug === blockSlug)\n\n const blockDisplayName = clientBlock?.labels?.singular\n ? getTranslation(clientBlock.labels.singular, i18n)\n : clientBlock?.slug\n\n return blockDisplayName\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INSERT_BLOCK_COMMAND, {\n blockName: '',\n blockType: blockSlug,\n })\n },\n } as SlashMenuItem\n }),\n key: 'blocks',\n label: ({ i18n }) => {\n return i18n.t('lexical:blocks:label')\n },\n }\n : null,\n props.clientInlineBlockSlugs?.length\n ? {\n items: props.clientInlineBlockSlugs.map((inlineBlockSlug) => {\n return {\n Icon: InlineBlocksIcon,\n key: 'inlineBlocks-' + inlineBlockSlug,\n keywords: ['inlineBlock', 'inline block', inlineBlockSlug],\n label: ({ i18n, richTextComponentMap }) => {\n if (!richTextComponentMap) {\n return inlineBlockSlug\n }\n\n const componentMapRenderedBlockPath = `lexical_internal_feature.blocks.fields.lexical_inline_blocks`\n\n const blocksField: BlocksFieldClient = richTextComponentMap.get(\n componentMapRenderedBlockPath,\n )?.[0]\n\n const clientBlock = blocksField.blocks.find(\n (_block) => _block.slug === inlineBlockSlug,\n )\n\n const blockDisplayName = clientBlock?.labels?.singular\n ? getTranslation(clientBlock.labels.singular, i18n)\n : clientBlock?.slug\n\n return blockDisplayName\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(OPEN_INLINE_BLOCK_DRAWER_COMMAND, {\n fields: {\n blockName: '',\n blockType: inlineBlockSlug,\n },\n })\n },\n } as SlashMenuItem\n }),\n key: 'inlineBlocks',\n label: ({ i18n }) => {\n return i18n.t('lexical:blocks:inlineBlocks:label')\n },\n }\n : null,\n ].filter(Boolean),\n },\n toolbarFixed: {\n groups: [\n props.clientBlockSlugs?.length\n ? {\n type: 'dropdown',\n ChildComponent: BlockIcon,\n items: props.clientBlockSlugs.map((blockSlug, 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-' + blockSlug,\n label: ({ i18n, richTextComponentMap }) => {\n if (!richTextComponentMap) {\n return blockSlug\n }\n const componentMapRenderedBlockPath = `lexical_internal_feature.blocks.fields.lexical_blocks`\n const blocksField: BlocksFieldClient = richTextComponentMap.get(\n componentMapRenderedBlockPath,\n )?.[0]\n\n const clientBlock = blocksField.blocks.find((_block) => _block.slug === blockSlug)\n\n const blockDisplayName = clientBlock?.labels?.singular\n ? getTranslation(clientBlock.labels.singular, i18n)\n : clientBlock?.slug\n\n return blockDisplayName\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INSERT_BLOCK_COMMAND, {\n blockName: '',\n blockType: blockSlug,\n })\n },\n order: index,\n } as ToolbarGroupItem\n }),\n key: 'blocks',\n order: 20,\n }\n : null,\n props.clientInlineBlockSlugs?.length\n ? {\n type: 'dropdown',\n ChildComponent: InlineBlocksIcon,\n items: props.clientInlineBlockSlugs.map((inlineBlockSlug, index) => {\n return {\n ChildComponent: InlineBlocksIcon,\n isActive: undefined,\n key: 'inlineBlock-' + inlineBlockSlug,\n label: ({ i18n, richTextComponentMap }) => {\n if (!richTextComponentMap) {\n return inlineBlockSlug\n }\n\n const componentMapRenderedBlockPath = `lexical_internal_feature.blocks.fields.lexical_inline_blocks`\n const blocksField: BlocksFieldClient = richTextComponentMap.get(\n componentMapRenderedBlockPath,\n )?.[0]\n\n const clientBlock = blocksField.blocks.find(\n (_block) => _block.slug === inlineBlockSlug,\n )\n\n const blockDisplayName = clientBlock?.labels?.singular\n ? getTranslation(clientBlock.labels.singular, i18n)\n : clientBlock?.slug\n\n return blockDisplayName\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(OPEN_INLINE_BLOCK_DRAWER_COMMAND, {\n fields: {\n blockType: inlineBlockSlug,\n },\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"],"mappings":"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","ignoreList":[]}
@@ -1,6 +1,6 @@
1
1
  import type { EditorConfig, LexicalEditor, LexicalNode } from 'lexical';
2
2
  import { type JSX } from 'react';
3
- import type { BlockFields, SerializedBlockNode } from '../../server/nodes/BlocksNode.js';
3
+ import type { BlockFieldsOptionalID, SerializedBlockNode } from '../../server/nodes/BlocksNode.js';
4
4
  import { ServerBlockNode } from '../../server/nodes/BlocksNode.js';
5
5
  export declare class BlockNode extends ServerBlockNode {
6
6
  static clone(node: ServerBlockNode): ServerBlockNode;
@@ -9,6 +9,6 @@ export declare class BlockNode extends ServerBlockNode {
9
9
  decorate(editor: LexicalEditor, config: EditorConfig): JSX.Element;
10
10
  exportJSON(): SerializedBlockNode;
11
11
  }
12
- export declare function $createBlockNode(fields: Exclude<BlockFields, 'id'>): BlockNode;
12
+ export declare function $createBlockNode(fields: BlockFieldsOptionalID): BlockNode;
13
13
  export declare function $isBlockNode(node: BlockNode | LexicalNode | null | undefined): node is BlockNode;
14
14
  //# sourceMappingURL=BlocksNode.d.ts.map
@@ -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,WAAW,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AAExF,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAA;AAQlE,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,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,SAAS,CAO9E;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,EAEV,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,kCAAkC,CAAA;AAEzC,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAA;AAQlE,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 +1 @@
1
- {"version":3,"file":"BlocksNode.js","names":["ObjectID","React","ServerBlockNode","BlockComponent","lazy","then","module","default","BlockNode","clone","node","getType","importJSON","serializedNode","version","fields","data","$createBlockNode","setFormat","format","decorate","editor","config","_jsx","formData","getFields","nodeKey","getKey","exportJSON","id","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 { BlockFields, SerializedBlockNode } from '../../server/nodes/BlocksNode.js'\n\nimport { ServerBlockNode } from '../../server/nodes/BlocksNode.js'\n\nconst BlockComponent = React.lazy(() =>\n import('../component/index.js').then((module) => ({\n default: module.BlockComponent,\n })),\n)\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: Exclude<BlockFields, 'id'>): 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;AAEhC,MAAMC,cAAA,gBAAiBF,KAAA,CAAMG,IAAI,CAAC,MAChC,MAAM,CAAC,yBAAyBC,IAAI,CAAEC,MAAA,KAAY;EAChDC,OAAA,EAASD,MAAA,CAAOH;AAClB;AAGF,OAAO,MAAMK,SAAA,SAAkBN,eAAA;EAC7B,OAAOO,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,CAACpB,cAAA;MAAeqB,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,MAAkC;EACjE,OAAO,IAAIP,SAAA,CAAU;IACnBO,MAAA,EAAQ;MACN,GAAGA,MAAM;MACTc,EAAA,EAAId,MAAA,EAAQc,EAAA,IAAM,IAAI7B,QAAA,CAASO,OAAO,GAAGuB,WAAW;IACtD;EACF;AACF;AAEA,OAAO,SAASC,aAAarB,IAAgD;EAC3E,OAAOA,IAAA,YAAgBF,SAAA;AACzB","ignoreList":[]}
1
+ {"version":3,"file":"BlocksNode.js","names":["ObjectID","React","ServerBlockNode","BlockComponent","lazy","then","module","default","BlockNode","clone","node","getType","importJSON","serializedNode","version","fields","data","$createBlockNode","setFormat","format","decorate","editor","config","_jsx","formData","getFields","nodeKey","getKey","exportJSON","id","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 {\n BlockFields,\n BlockFieldsOptionalID,\n SerializedBlockNode,\n} from '../../server/nodes/BlocksNode.js'\n\nimport { ServerBlockNode } from '../../server/nodes/BlocksNode.js'\n\nconst BlockComponent = React.lazy(() =>\n import('../component/index.js').then((module) => ({\n default: module.BlockComponent,\n })),\n)\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;AAQhC,SAASC,eAAe,QAAQ;AAEhC,MAAMC,cAAA,gBAAiBF,KAAA,CAAMG,IAAI,CAAC,MAChC,MAAM,CAAC,yBAAyBC,IAAI,CAAEC,MAAA,KAAY;EAChDC,OAAA,EAASD,MAAA,CAAOH;AAClB;AAGF,OAAO,MAAMK,SAAA,SAAkBN,eAAA;EAC7B,OAAOO,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,CAACpB,cAAA;MAAeqB,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,IAAI7B,QAAA,CAASO,OAAO,GAAGuB,WAAW;IACtD;EACF;AACF;AAEA,OAAO,SAASC,aAAarB,IAAgD;EAC3E,OAAOA,IAAA,YAAgBF,SAAA;AACzB","ignoreList":[]}