@payloadcms/richtext-lexical 4.0.0-internal.f851106 → 4.0.0-internal.f980c7c

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 (626) hide show
  1. package/dist/exports/client/Field-334JNLRF.js +2 -0
  2. package/dist/exports/client/Field-334JNLRF.js.map +7 -0
  3. package/dist/exports/client/{RelationshipComponent-YCPAKOL7.js → RelationshipComponent-TVK6I4W4.js} +2 -2
  4. package/dist/exports/client/chunk-BEKGION5.js +2 -0
  5. package/dist/exports/client/chunk-BEKGION5.js.map +7 -0
  6. package/dist/exports/client/{chunk-WSAPGI3Z.js → chunk-EA5BHQ2T.js} +1 -1
  7. package/dist/exports/client/{chunk-WSAPGI3Z.js.map → chunk-EA5BHQ2T.js.map} +1 -1
  8. package/dist/exports/client/chunk-FAJJXXCW.js +2 -0
  9. package/dist/exports/client/chunk-FAJJXXCW.js.map +7 -0
  10. package/dist/exports/client/{chunk-5VIL27GI.js → chunk-IYBYNEKX.js} +1 -1
  11. package/dist/exports/client/{chunk-5VIL27GI.js.map → chunk-IYBYNEKX.js.map} +1 -1
  12. package/dist/exports/client/chunk-SE5IITBK.js +2 -0
  13. package/dist/exports/client/chunk-SE5IITBK.js.map +7 -0
  14. package/dist/exports/client/component-QENB4QTS.js +2 -0
  15. package/dist/exports/client/component-QENB4QTS.js.map +7 -0
  16. package/dist/exports/client/componentInline-AU7IBNY7.js +2 -0
  17. package/dist/exports/client/index.d.ts +1 -1
  18. package/dist/exports/client/index.d.ts.map +1 -1
  19. package/dist/exports/client/index.js +26 -26
  20. package/dist/exports/client/index.js.map +4 -4
  21. package/dist/features/align/client/index.js.map +1 -1
  22. package/dist/features/blocks/client/component/BlockContent.js.map +1 -1
  23. package/dist/features/blocks/client/component/BlockReordering/index.d.ts +11 -0
  24. package/dist/features/blocks/client/component/BlockReordering/index.d.ts.map +1 -0
  25. package/dist/features/blocks/client/component/BlockReordering/index.js +18 -0
  26. package/dist/features/blocks/client/component/BlockReordering/index.js.map +1 -0
  27. package/dist/features/blocks/client/component/components/BlockCollapsible.js.map +1 -1
  28. package/dist/features/blocks/client/component/components/BlockEditButton.js.map +1 -1
  29. package/dist/features/blocks/client/component/components/BlockRemoveButton.js.map +1 -1
  30. package/dist/features/blocks/client/component/index.d.ts +0 -6
  31. package/dist/features/blocks/client/component/index.d.ts.map +1 -1
  32. package/dist/features/blocks/client/component/index.js +199 -109
  33. package/dist/features/blocks/client/component/index.js.map +1 -1
  34. package/dist/features/blocks/client/component/useBlockReordering.d.ts +16 -0
  35. package/dist/features/blocks/client/component/useBlockReordering.d.ts.map +1 -0
  36. package/dist/features/blocks/client/component/useBlockReordering.js +178 -0
  37. package/dist/features/blocks/client/component/useBlockReordering.js.map +1 -0
  38. package/dist/features/blocks/client/componentInline/components/InlineBlockContainer.js.map +1 -1
  39. package/dist/features/blocks/client/componentInline/components/InlineBlockEditButton.js.map +1 -1
  40. package/dist/features/blocks/client/componentInline/components/InlineBlockLabel.js.map +1 -1
  41. package/dist/features/blocks/client/componentInline/components/InlineBlockRemoveButton.js.map +1 -1
  42. package/dist/features/blocks/client/componentInline/index.css +0 -1
  43. package/dist/features/blocks/client/componentInline/index.d.ts.map +1 -1
  44. package/dist/features/blocks/client/componentInline/index.js +32 -30
  45. package/dist/features/blocks/client/componentInline/index.js.map +1 -1
  46. package/dist/features/blocks/client/getCachedFormStateIfDataMatches.d.ts +9 -0
  47. package/dist/features/blocks/client/getCachedFormStateIfDataMatches.d.ts.map +1 -0
  48. package/dist/features/blocks/client/getCachedFormStateIfDataMatches.js +95 -0
  49. package/dist/features/blocks/client/getCachedFormStateIfDataMatches.js.map +1 -0
  50. package/dist/features/blocks/client/nodes/BlocksNode.d.ts.map +1 -1
  51. package/dist/features/blocks/client/nodes/BlocksNode.js +0 -10
  52. package/dist/features/blocks/client/nodes/BlocksNode.js.map +1 -1
  53. package/dist/features/blocks/client/plugin/index.js.map +1 -1
  54. package/dist/features/blocks/premade/CodeBlock/Component/Block.js +121 -78
  55. package/dist/features/blocks/premade/CodeBlock/Component/Block.js.map +1 -1
  56. package/dist/features/blocks/premade/CodeBlock/Component/Code.js +142 -87
  57. package/dist/features/blocks/premade/CodeBlock/Component/Code.js.map +1 -1
  58. package/dist/features/blocks/server/index.js +2 -2
  59. package/dist/features/blocks/server/index.js.map +1 -1
  60. package/dist/features/blocks/server/nodes/BlocksNode.d.ts.map +1 -1
  61. package/dist/features/blocks/server/nodes/BlocksNode.js +1 -12
  62. package/dist/features/blocks/server/nodes/BlocksNode.js.map +1 -1
  63. package/dist/features/blocks/server/nodes/InlineBlocksNode.js +2 -2
  64. package/dist/features/blocks/server/nodes/InlineBlocksNode.js.map +1 -1
  65. package/dist/features/blocks/server/schema.d.ts +2 -0
  66. package/dist/features/blocks/server/schema.d.ts.map +1 -1
  67. package/dist/features/blocks/server/schema.js +7 -9
  68. package/dist/features/blocks/server/schema.js.map +1 -1
  69. package/dist/features/blocks/server/validate.js +1 -1
  70. package/dist/features/blocks/server/validate.js.map +1 -1
  71. package/dist/features/converters/lexicalToHtml/async/converters/heading.js +1 -1
  72. package/dist/features/converters/lexicalToHtml/async/converters/heading.js.map +1 -1
  73. package/dist/features/converters/lexicalToHtml/async/converters/list.d.ts.map +1 -1
  74. package/dist/features/converters/lexicalToHtml/async/converters/list.js +4 -3
  75. package/dist/features/converters/lexicalToHtml/async/converters/list.js.map +1 -1
  76. package/dist/features/converters/lexicalToHtml/async/converters/table.d.ts.map +1 -1
  77. package/dist/features/converters/lexicalToHtml/async/converters/table.js +6 -4
  78. package/dist/features/converters/lexicalToHtml/async/converters/table.js.map +1 -1
  79. package/dist/features/converters/lexicalToHtml/async/converters/upload.d.ts.map +1 -1
  80. package/dist/features/converters/lexicalToHtml/async/converters/upload.js +5 -4
  81. package/dist/features/converters/lexicalToHtml/async/converters/upload.js.map +1 -1
  82. package/dist/features/converters/lexicalToHtml/shared/findConverterForNode.d.ts.map +1 -1
  83. package/dist/features/converters/lexicalToHtml/shared/findConverterForNode.js +3 -2
  84. package/dist/features/converters/lexicalToHtml/shared/findConverterForNode.js.map +1 -1
  85. package/dist/features/converters/lexicalToHtml/sync/converters/heading.js +1 -1
  86. package/dist/features/converters/lexicalToHtml/sync/converters/heading.js.map +1 -1
  87. package/dist/features/converters/lexicalToHtml/sync/converters/list.d.ts.map +1 -1
  88. package/dist/features/converters/lexicalToHtml/sync/converters/list.js +4 -3
  89. package/dist/features/converters/lexicalToHtml/sync/converters/list.js.map +1 -1
  90. package/dist/features/converters/lexicalToHtml/sync/converters/table.d.ts.map +1 -1
  91. package/dist/features/converters/lexicalToHtml/sync/converters/table.js +6 -4
  92. package/dist/features/converters/lexicalToHtml/sync/converters/table.js.map +1 -1
  93. package/dist/features/converters/lexicalToHtml/sync/converters/upload.d.ts.map +1 -1
  94. package/dist/features/converters/lexicalToHtml/sync/converters/upload.js +5 -4
  95. package/dist/features/converters/lexicalToHtml/sync/converters/upload.js.map +1 -1
  96. package/dist/features/converters/lexicalToHtml/sync/types.d.ts.map +1 -1
  97. package/dist/features/converters/lexicalToHtml/sync/types.js.map +1 -1
  98. package/dist/features/converters/lexicalToJSX/converter/converters/heading.d.ts.map +1 -1
  99. package/dist/features/converters/lexicalToJSX/converter/converters/heading.js +2 -1
  100. package/dist/features/converters/lexicalToJSX/converter/converters/heading.js.map +1 -1
  101. package/dist/features/converters/lexicalToJSX/converter/converters/list.d.ts.map +1 -1
  102. package/dist/features/converters/lexicalToJSX/converter/converters/list.js +2 -1
  103. package/dist/features/converters/lexicalToJSX/converter/converters/list.js.map +1 -1
  104. package/dist/features/converters/lexicalToJSX/converter/converters/table.d.ts.map +1 -1
  105. package/dist/features/converters/lexicalToJSX/converter/converters/table.js +3 -2
  106. package/dist/features/converters/lexicalToJSX/converter/converters/table.js.map +1 -1
  107. package/dist/features/converters/lexicalToJSX/converter/converters/upload.d.ts.map +1 -1
  108. package/dist/features/converters/lexicalToJSX/converter/converters/upload.js +4 -5
  109. package/dist/features/converters/lexicalToJSX/converter/converters/upload.js.map +1 -1
  110. package/dist/features/converters/utilities/payloadPopulateFn.d.ts.map +1 -1
  111. package/dist/features/converters/utilities/payloadPopulateFn.js +4 -2
  112. package/dist/features/converters/utilities/payloadPopulateFn.js.map +1 -1
  113. package/dist/features/debug/jsxConverter/client/plugin/index.js.map +1 -1
  114. package/dist/features/debug/testRecorder/client/plugin/index.css +0 -1
  115. package/dist/features/debug/testRecorder/client/plugin/index.js.map +1 -1
  116. package/dist/features/debug/treeView/client/plugin/index.js.map +1 -1
  117. package/dist/features/heading/client/index.js.map +1 -1
  118. package/dist/features/heading/constants.d.ts +2 -0
  119. package/dist/features/heading/constants.d.ts.map +1 -0
  120. package/dist/features/heading/constants.js +2 -0
  121. package/dist/features/heading/constants.js.map +1 -0
  122. package/dist/features/heading/server/index.d.ts.map +1 -1
  123. package/dist/features/heading/server/index.js +5 -1
  124. package/dist/features/heading/server/index.js.map +1 -1
  125. package/dist/features/heading/server/validate.d.ts +6 -0
  126. package/dist/features/heading/server/validate.d.ts.map +1 -0
  127. package/dist/features/heading/server/validate.js +15 -0
  128. package/dist/features/heading/server/validate.js.map +1 -0
  129. package/dist/features/horizontalRule/client/nodes/HorizontalRuleNode.d.ts +12 -2
  130. package/dist/features/horizontalRule/client/nodes/HorizontalRuleNode.d.ts.map +1 -1
  131. package/dist/features/horizontalRule/client/nodes/HorizontalRuleNode.js +18 -1
  132. package/dist/features/horizontalRule/client/nodes/HorizontalRuleNode.js.map +1 -1
  133. package/dist/features/horizontalRule/client/plugin/index.js.map +1 -1
  134. package/dist/features/horizontalRule/server/nodes/HorizontalRuleNode.d.ts +1 -1
  135. package/dist/features/horizontalRule/server/nodes/HorizontalRuleNode.d.ts.map +1 -1
  136. package/dist/features/horizontalRule/server/nodes/HorizontalRuleNode.js +3 -3
  137. package/dist/features/horizontalRule/server/nodes/HorizontalRuleNode.js.map +1 -1
  138. package/dist/features/horizontalRule/server/schema.d.ts +1 -0
  139. package/dist/features/horizontalRule/server/schema.d.ts.map +1 -1
  140. package/dist/features/horizontalRule/server/schema.js +6 -5
  141. package/dist/features/horizontalRule/server/schema.js.map +1 -1
  142. package/dist/features/indent/client/IndentPlugin.d.ts.map +1 -1
  143. package/dist/features/indent/client/IndentPlugin.js +122 -1
  144. package/dist/features/indent/client/IndentPlugin.js.map +1 -1
  145. package/dist/features/indent/client/index.d.ts.map +1 -1
  146. package/dist/features/indent/client/index.js +0 -2
  147. package/dist/features/indent/client/index.js.map +1 -1
  148. package/dist/features/indent/server/i18n.d.ts.map +1 -1
  149. package/dist/features/indent/server/i18n.js +74 -37
  150. package/dist/features/indent/server/i18n.js.map +1 -1
  151. package/dist/features/link/client/plugins/autoLink/index.js.map +1 -1
  152. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.d.ts.map +1 -1
  153. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js +20 -9
  154. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js.map +1 -1
  155. package/dist/features/link/client/plugins/floatingLinkEditor/index.css +0 -2
  156. package/dist/features/link/client/plugins/link/index.js.map +1 -1
  157. package/dist/features/link/markdownTransformer.js +2 -2
  158. package/dist/features/link/markdownTransformer.js.map +1 -1
  159. package/dist/features/link/nodes/AutoLinkNode.d.ts +1 -1
  160. package/dist/features/link/nodes/AutoLinkNode.d.ts.map +1 -1
  161. package/dist/features/link/nodes/AutoLinkNode.js +2 -10
  162. package/dist/features/link/nodes/AutoLinkNode.js.map +1 -1
  163. package/dist/features/link/nodes/LinkNode.d.ts +1 -1
  164. package/dist/features/link/nodes/LinkNode.d.ts.map +1 -1
  165. package/dist/features/link/nodes/LinkNode.js +2 -15
  166. package/dist/features/link/nodes/LinkNode.js.map +1 -1
  167. package/dist/features/link/server/baseFields.js.map +1 -1
  168. package/dist/features/link/server/index.js +2 -2
  169. package/dist/features/link/server/index.js.map +1 -1
  170. package/dist/features/link/server/validate.js +1 -1
  171. package/dist/features/link/server/validate.js.map +1 -1
  172. package/dist/features/lists/checklist/server/index.d.ts.map +1 -1
  173. package/dist/features/lists/checklist/server/index.js +5 -2
  174. package/dist/features/lists/checklist/server/index.js.map +1 -1
  175. package/dist/features/lists/orderedList/server/index.d.ts.map +1 -1
  176. package/dist/features/lists/orderedList/server/index.js +5 -2
  177. package/dist/features/lists/orderedList/server/index.js.map +1 -1
  178. package/dist/features/lists/shared/constants.d.ts +2 -0
  179. package/dist/features/lists/shared/constants.d.ts.map +1 -0
  180. package/dist/features/lists/shared/constants.js +2 -0
  181. package/dist/features/lists/shared/constants.js.map +1 -0
  182. package/dist/features/lists/shared/schema.d.ts.map +1 -1
  183. package/dist/features/lists/shared/schema.js.map +1 -1
  184. package/dist/features/lists/shared/validate.d.ts +5 -0
  185. package/dist/features/lists/shared/validate.d.ts.map +1 -0
  186. package/dist/features/lists/shared/validate.js +15 -0
  187. package/dist/features/lists/shared/validate.js.map +1 -0
  188. package/dist/features/lists/unorderedList/server/index.d.ts.map +1 -1
  189. package/dist/features/lists/unorderedList/server/index.js +5 -2
  190. package/dist/features/lists/unorderedList/server/index.js.map +1 -1
  191. package/dist/features/relationship/client/components/index.css +3 -6
  192. package/dist/features/relationship/client/drawer/index.js.map +1 -1
  193. package/dist/features/relationship/client/index.d.ts +2 -2
  194. package/dist/features/relationship/client/index.d.ts.map +1 -1
  195. package/dist/features/relationship/client/index.js.map +1 -1
  196. package/dist/features/relationship/client/nodes/RelationshipNode.d.ts.map +1 -1
  197. package/dist/features/relationship/client/nodes/RelationshipNode.js +0 -3
  198. package/dist/features/relationship/client/nodes/RelationshipNode.js.map +1 -1
  199. package/dist/features/relationship/client/plugins/index.d.ts +2 -2
  200. package/dist/features/relationship/client/plugins/index.d.ts.map +1 -1
  201. package/dist/features/relationship/client/plugins/index.js +27 -31
  202. package/dist/features/relationship/client/plugins/index.js.map +1 -1
  203. package/dist/features/relationship/client/utils/useEnabledRelationships.d.ts +2 -4
  204. package/dist/features/relationship/client/utils/useEnabledRelationships.d.ts.map +1 -1
  205. package/dist/features/relationship/client/utils/useEnabledRelationships.js +53 -20
  206. package/dist/features/relationship/client/utils/useEnabledRelationships.js.map +1 -1
  207. package/dist/features/relationship/server/graphQLPopulationPromise.d.ts +2 -2
  208. package/dist/features/relationship/server/graphQLPopulationPromise.d.ts.map +1 -1
  209. package/dist/features/relationship/server/graphQLPopulationPromise.js +2 -2
  210. package/dist/features/relationship/server/graphQLPopulationPromise.js.map +1 -1
  211. package/dist/features/relationship/server/index.d.ts +8 -1
  212. package/dist/features/relationship/server/index.d.ts.map +1 -1
  213. package/dist/features/relationship/server/index.js +28 -11
  214. package/dist/features/relationship/server/index.js.map +1 -1
  215. package/dist/features/relationship/server/nodes/RelationshipNode.d.ts.map +1 -1
  216. package/dist/features/relationship/server/nodes/RelationshipNode.js +1 -5
  217. package/dist/features/relationship/server/nodes/RelationshipNode.js.map +1 -1
  218. package/dist/features/relationship/server/schema.d.ts +3 -2
  219. package/dist/features/relationship/server/schema.d.ts.map +1 -1
  220. package/dist/features/relationship/server/schema.js +9 -12
  221. package/dist/features/relationship/server/schema.js.map +1 -1
  222. package/dist/features/relationship/shared/filterEnabledRelationshipCollections.d.ts +1 -6
  223. package/dist/features/relationship/shared/filterEnabledRelationshipCollections.d.ts.map +1 -1
  224. package/dist/features/relationship/shared/filterEnabledRelationshipCollections.js +1 -5
  225. package/dist/features/relationship/shared/filterEnabledRelationshipCollections.js.map +1 -1
  226. package/dist/features/table/client/index.d.ts.map +1 -0
  227. package/dist/features/table/client/index.js.map +1 -0
  228. package/dist/features/table/client/plugins/TableActionMenuPlugin/computeSelectionCount.d.ts +8 -0
  229. package/dist/features/table/client/plugins/TableActionMenuPlugin/computeSelectionCount.d.ts.map +1 -0
  230. package/dist/features/table/client/plugins/TableActionMenuPlugin/computeSelectionCount.js +19 -0
  231. package/dist/features/table/client/plugins/TableActionMenuPlugin/computeSelectionCount.js.map +1 -0
  232. package/dist/features/{experimental_table → table}/client/plugins/TableActionMenuPlugin/index.css +1 -2
  233. package/dist/features/table/client/plugins/TableActionMenuPlugin/index.d.ts.map +1 -0
  234. package/dist/features/{experimental_table → table}/client/plugins/TableActionMenuPlugin/index.js +17 -44
  235. package/dist/features/table/client/plugins/TableActionMenuPlugin/index.js.map +1 -0
  236. package/dist/features/table/client/plugins/TableCellResizerPlugin/index.d.ts.map +1 -0
  237. package/dist/features/{experimental_table → table}/client/plugins/TableCellResizerPlugin/index.js +48 -25
  238. package/dist/features/table/client/plugins/TableCellResizerPlugin/index.js.map +1 -0
  239. package/dist/features/table/client/plugins/TableHoverActionsPlugin/index.d.ts.map +1 -0
  240. package/dist/features/table/client/plugins/TableHoverActionsPlugin/index.js.map +1 -0
  241. package/dist/features/{experimental_table → table}/client/plugins/TablePlugin/TableGridPopup/index.css +0 -3
  242. package/dist/features/table/client/plugins/TablePlugin/TableGridPopup/index.d.ts.map +1 -0
  243. package/dist/features/table/client/plugins/TablePlugin/TableGridPopup/index.js.map +1 -0
  244. package/dist/features/table/client/plugins/TablePlugin/index.d.ts.map +1 -0
  245. package/dist/features/{experimental_table → table}/client/plugins/TablePlugin/index.js +54 -18
  246. package/dist/features/table/client/plugins/TablePlugin/index.js.map +1 -0
  247. package/dist/features/table/client/utils/debounce.d.ts.map +1 -0
  248. package/dist/features/table/client/utils/debounce.js.map +1 -0
  249. package/dist/features/table/client/utils/useDebounce.d.ts.map +1 -0
  250. package/dist/features/table/client/utils/useDebounce.js.map +1 -0
  251. package/dist/features/table/markdownTransformer.d.ts.map +1 -0
  252. package/dist/features/table/markdownTransformer.js.map +1 -0
  253. package/dist/features/table/server/index.d.ts +3 -0
  254. package/dist/features/table/server/index.d.ts.map +1 -0
  255. package/dist/features/{experimental_table → table}/server/index.js +7 -5
  256. package/dist/features/table/server/index.js.map +1 -0
  257. package/dist/features/table/server/schema.d.ts.map +1 -0
  258. package/dist/features/table/server/schema.js.map +1 -0
  259. package/dist/features/table/server/validate.d.ts +4 -0
  260. package/dist/features/table/server/validate.d.ts.map +1 -0
  261. package/dist/features/table/server/validate.js +15 -0
  262. package/dist/features/table/server/validate.js.map +1 -0
  263. package/dist/features/textState/defaultColors.js +1 -1
  264. package/dist/features/textState/defaultColors.js.map +1 -1
  265. package/dist/features/toolbars/fixed/client/Toolbar/horizontalWheelScroll.d.ts +8 -0
  266. package/dist/features/toolbars/fixed/client/Toolbar/horizontalWheelScroll.d.ts.map +1 -0
  267. package/dist/features/toolbars/fixed/client/Toolbar/horizontalWheelScroll.js +80 -0
  268. package/dist/features/toolbars/fixed/client/Toolbar/horizontalWheelScroll.js.map +1 -0
  269. package/dist/features/toolbars/fixed/client/Toolbar/index.css +78 -6
  270. package/dist/features/toolbars/fixed/client/Toolbar/index.d.ts.map +1 -1
  271. package/dist/features/toolbars/fixed/client/Toolbar/index.js +145 -71
  272. package/dist/features/toolbars/fixed/client/Toolbar/index.js.map +1 -1
  273. package/dist/features/toolbars/inline/client/Toolbar/index.css +0 -1
  274. package/dist/features/toolbars/inline/client/Toolbar/index.d.ts.map +1 -1
  275. package/dist/features/toolbars/inline/client/Toolbar/index.js +84 -37
  276. package/dist/features/toolbars/inline/client/Toolbar/index.js.map +1 -1
  277. package/dist/features/toolbars/shared/ToolbarButton/index.d.ts.map +1 -1
  278. package/dist/features/toolbars/shared/ToolbarButton/index.js +27 -2
  279. package/dist/features/toolbars/shared/ToolbarButton/index.js.map +1 -1
  280. package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.d.ts.map +1 -1
  281. package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js +199 -81
  282. package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js.map +1 -1
  283. package/dist/features/toolbars/shared/ToolbarDropdown/index.css +16 -14
  284. package/dist/features/toolbars/shared/ToolbarDropdown/index.d.ts.map +1 -1
  285. package/dist/features/toolbars/shared/ToolbarDropdown/index.js +22 -6
  286. package/dist/features/toolbars/shared/ToolbarDropdown/index.js.map +1 -1
  287. package/dist/features/toolbars/shared/useToolbarKeyboardNavigation.d.ts +5 -0
  288. package/dist/features/toolbars/shared/useToolbarKeyboardNavigation.d.ts.map +1 -0
  289. package/dist/features/toolbars/shared/useToolbarKeyboardNavigation.js +109 -0
  290. package/dist/features/toolbars/shared/useToolbarKeyboardNavigation.js.map +1 -0
  291. package/dist/features/typesServer.d.ts +17 -12
  292. package/dist/features/typesServer.d.ts.map +1 -1
  293. package/dist/features/typesServer.js.map +1 -1
  294. package/dist/features/upload/client/component/index.css +0 -2
  295. package/dist/features/upload/client/component/index.js +2 -1
  296. package/dist/features/upload/client/component/index.js.map +1 -1
  297. package/dist/features/upload/client/drawer/index.js.map +1 -1
  298. package/dist/features/upload/client/index.d.ts +3 -2
  299. package/dist/features/upload/client/index.d.ts.map +1 -1
  300. package/dist/features/upload/client/index.js.map +1 -1
  301. package/dist/features/upload/client/nodes/UploadNode.d.ts.map +1 -1
  302. package/dist/features/upload/client/nodes/UploadNode.js +0 -7
  303. package/dist/features/upload/client/nodes/UploadNode.js.map +1 -1
  304. package/dist/features/upload/client/plugin/index.d.ts.map +1 -1
  305. package/dist/features/upload/client/plugin/index.js +50 -53
  306. package/dist/features/upload/client/plugin/index.js.map +1 -1
  307. package/dist/features/upload/server/graphQLPopulationPromise.d.ts +2 -2
  308. package/dist/features/upload/server/graphQLPopulationPromise.d.ts.map +1 -1
  309. package/dist/features/upload/server/graphQLPopulationPromise.js +1 -1
  310. package/dist/features/upload/server/graphQLPopulationPromise.js.map +1 -1
  311. package/dist/features/upload/server/index.d.ts +7 -3
  312. package/dist/features/upload/server/index.d.ts.map +1 -1
  313. package/dist/features/upload/server/index.js +20 -16
  314. package/dist/features/upload/server/index.js.map +1 -1
  315. package/dist/features/upload/server/nodes/UploadNode.d.ts.map +1 -1
  316. package/dist/features/upload/server/nodes/UploadNode.js +1 -9
  317. package/dist/features/upload/server/nodes/UploadNode.js.map +1 -1
  318. package/dist/features/upload/server/schema.d.ts +4 -16
  319. package/dist/features/upload/server/schema.d.ts.map +1 -1
  320. package/dist/features/upload/server/schema.js +8 -10
  321. package/dist/features/upload/server/schema.js.map +1 -1
  322. package/dist/features/upload/server/validate.d.ts +2 -2
  323. package/dist/features/upload/server/validate.d.ts.map +1 -1
  324. package/dist/features/upload/server/validate.js +4 -1
  325. package/dist/features/upload/server/validate.js.map +1 -1
  326. package/dist/field/Diff/converters/listitem/index.d.ts.map +1 -1
  327. package/dist/field/Diff/converters/listitem/index.js +2 -1
  328. package/dist/field/Diff/converters/listitem/index.js.map +1 -1
  329. package/dist/field/Diff/converters/relationship/index.css +0 -1
  330. package/dist/field/Diff/converters/unknown/index.css +0 -1
  331. package/dist/field/Diff/converters/upload/index.css +0 -1
  332. package/dist/field/Diff/converters/upload/index.js.map +1 -1
  333. package/dist/field/Diff/index.css +0 -2
  334. package/dist/field/Diff/index.d.ts +3 -2
  335. package/dist/field/Diff/index.d.ts.map +1 -1
  336. package/dist/field/Diff/index.js +4 -2
  337. package/dist/field/Diff/index.js.map +1 -1
  338. package/dist/field/Field.d.ts.map +1 -1
  339. package/dist/field/Field.js +8 -1
  340. package/dist/field/Field.js.map +1 -1
  341. package/dist/field/RenderLexical/index.d.ts +3 -1
  342. package/dist/field/RenderLexical/index.d.ts.map +1 -1
  343. package/dist/field/RenderLexical/index.js +23 -23
  344. package/dist/field/RenderLexical/index.js.map +1 -1
  345. package/dist/field/ViewSelector.d.ts.map +1 -1
  346. package/dist/field/ViewSelector.js +13 -4
  347. package/dist/field/ViewSelector.js.map +1 -1
  348. package/dist/field/bundled.css +1 -1
  349. package/dist/field/index.css +10 -11
  350. package/dist/field/index.js.map +1 -1
  351. package/dist/field/rscEntry.d.ts +2 -2
  352. package/dist/field/rscEntry.d.ts.map +1 -1
  353. package/dist/field/rscEntry.js.map +1 -1
  354. package/dist/i18n.d.ts.map +1 -1
  355. package/dist/i18n.js +112 -0
  356. package/dist/i18n.js.map +1 -1
  357. package/dist/index.d.ts +5 -5
  358. package/dist/index.d.ts.map +1 -1
  359. package/dist/index.js +27 -5
  360. package/dist/index.js.map +1 -1
  361. package/dist/lexical/LexicalEditor.css +30 -21
  362. package/dist/lexical/LexicalEditor.d.ts.map +1 -1
  363. package/dist/lexical/LexicalEditor.js +61 -64
  364. package/dist/lexical/LexicalEditor.js.map +1 -1
  365. package/dist/lexical/config/server/loader.d.ts +1 -1
  366. package/dist/lexical/config/server/loader.d.ts.map +1 -1
  367. package/dist/lexical/config/server/loader.js +2 -2
  368. package/dist/lexical/config/server/loader.js.map +1 -1
  369. package/dist/lexical/config/server/sanitize.d.ts +1 -1
  370. package/dist/lexical/config/server/sanitize.d.ts.map +1 -1
  371. package/dist/lexical/config/server/sanitize.js +2 -2
  372. package/dist/lexical/config/server/sanitize.js.map +1 -1
  373. package/dist/lexical/plugins/ClipboardPlugin/index.js.map +1 -1
  374. package/dist/lexical/plugins/DecoratorPlugin/index.d.ts.map +1 -1
  375. package/dist/lexical/plugins/DecoratorPlugin/index.js +24 -21
  376. package/dist/lexical/plugins/DecoratorPlugin/index.js.map +1 -1
  377. package/dist/lexical/plugins/InsertParagraphAtEnd/index.css +18 -25
  378. package/dist/lexical/plugins/InsertParagraphAtEnd/index.d.ts.map +1 -1
  379. package/dist/lexical/plugins/InsertParagraphAtEnd/index.js +27 -14
  380. package/dist/lexical/plugins/InsertParagraphAtEnd/index.js.map +1 -1
  381. package/dist/lexical/plugins/MarkdownShortcut/index.js.map +1 -1
  382. package/dist/lexical/plugins/NodeViewOverridePlugin/index.js.map +1 -1
  383. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.d.ts +0 -1
  384. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.d.ts.map +1 -1
  385. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js +236 -108
  386. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js.map +1 -1
  387. package/dist/lexical/plugins/SlashMenu/index.css +0 -2
  388. package/dist/lexical/plugins/SlashMenu/useMenuTriggerMatch.js.map +1 -1
  389. package/dist/lexical/plugins/TextPlugin/index.js.map +1 -1
  390. package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.css +1 -0
  391. package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.js +2 -2
  392. package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.js.map +1 -1
  393. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.css +17 -0
  394. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.d.ts.map +1 -1
  395. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js +139 -37
  396. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js.map +1 -1
  397. package/dist/lexical/plugins/handles/DraggableBlockPlugin/moveBlock.d.ts +7 -0
  398. package/dist/lexical/plugins/handles/DraggableBlockPlugin/moveBlock.d.ts.map +1 -0
  399. package/dist/lexical/plugins/handles/DraggableBlockPlugin/moveBlock.js +15 -0
  400. package/dist/lexical/plugins/handles/DraggableBlockPlugin/moveBlock.js.map +1 -0
  401. package/dist/lexical/plugins/handles/DraggableBlockPlugin/useKeyboardReordering.d.ts +7 -0
  402. package/dist/lexical/plugins/handles/DraggableBlockPlugin/useKeyboardReordering.d.ts.map +1 -0
  403. package/dist/lexical/plugins/handles/DraggableBlockPlugin/useKeyboardReordering.js +62 -0
  404. package/dist/lexical/plugins/handles/DraggableBlockPlugin/useKeyboardReordering.js.map +1 -0
  405. package/dist/lexical/plugins/handles/utils/setHandlePosition.d.ts.map +1 -1
  406. package/dist/lexical/plugins/handles/utils/setHandlePosition.js +2 -0
  407. package/dist/lexical/plugins/handles/utils/setHandlePosition.js.map +1 -1
  408. package/dist/lexical/theme/EditorTheme.css +0 -2
  409. package/dist/lexical/ui/ContentEditable.css +16 -15
  410. package/dist/lexical/ui/ContentEditable.d.ts +2 -1
  411. package/dist/lexical/ui/ContentEditable.d.ts.map +1 -1
  412. package/dist/lexical/ui/ContentEditable.js +32 -11
  413. package/dist/lexical/ui/ContentEditable.js.map +1 -1
  414. package/dist/lexical/ui/icons/H3/index.d.ts.map +1 -1
  415. package/dist/lexical/ui/icons/H3/index.js +13 -6
  416. package/dist/lexical/ui/icons/H3/index.js.map +1 -1
  417. package/dist/lexical/ui/icons/H4/index.d.ts.map +1 -1
  418. package/dist/lexical/ui/icons/H4/index.js +13 -6
  419. package/dist/lexical/ui/icons/H4/index.js.map +1 -1
  420. package/dist/lexical/ui/icons/H5/index.d.ts.map +1 -1
  421. package/dist/lexical/ui/icons/H5/index.js +13 -6
  422. package/dist/lexical/ui/icons/H5/index.js.map +1 -1
  423. package/dist/lexical/ui/icons/H6/index.d.ts.map +1 -1
  424. package/dist/lexical/ui/icons/H6/index.js +13 -6
  425. package/dist/lexical/ui/icons/H6/index.js.map +1 -1
  426. package/dist/lexical/utils/nodeFormat.d.ts.map +1 -1
  427. package/dist/lexical/utils/nodeFormat.js +0 -2
  428. package/dist/lexical/utils/nodeFormat.js.map +1 -1
  429. package/dist/lexical/utils/url.d.ts.map +1 -1
  430. package/dist/lexical/utils/url.js +1 -1
  431. package/dist/lexical/utils/url.js.map +1 -1
  432. package/dist/lexical-proxy/@lexical-react/ExtensionComponent.d.ts +2 -0
  433. package/dist/lexical-proxy/@lexical-react/ExtensionComponent.d.ts.map +1 -0
  434. package/dist/lexical-proxy/@lexical-react/ExtensionComponent.js +2 -0
  435. package/dist/lexical-proxy/@lexical-react/ExtensionComponent.js.map +1 -0
  436. package/dist/lexical-proxy/@lexical-react/LexicalExtensionComposer.d.ts +2 -0
  437. package/dist/lexical-proxy/@lexical-react/LexicalExtensionComposer.d.ts.map +1 -0
  438. package/dist/lexical-proxy/@lexical-react/LexicalExtensionComposer.js +2 -0
  439. package/dist/lexical-proxy/@lexical-react/LexicalExtensionComposer.js.map +1 -0
  440. package/dist/lexical-proxy/@lexical-react/LexicalExtensionEditorComposer.d.ts +2 -0
  441. package/dist/lexical-proxy/@lexical-react/LexicalExtensionEditorComposer.d.ts.map +1 -0
  442. package/dist/lexical-proxy/@lexical-react/LexicalExtensionEditorComposer.js +2 -0
  443. package/dist/lexical-proxy/@lexical-react/LexicalExtensionEditorComposer.js.map +1 -0
  444. package/dist/lexical-proxy/@lexical-react/LexicalSelectionAlwaysOnDisplay.d.ts +2 -0
  445. package/dist/lexical-proxy/@lexical-react/LexicalSelectionAlwaysOnDisplay.d.ts.map +1 -0
  446. package/dist/lexical-proxy/@lexical-react/LexicalSelectionAlwaysOnDisplay.js +2 -0
  447. package/dist/lexical-proxy/@lexical-react/LexicalSelectionAlwaysOnDisplay.js.map +1 -0
  448. package/dist/lexical-proxy/@lexical-react/ReactExtension.d.ts +2 -0
  449. package/dist/lexical-proxy/@lexical-react/ReactExtension.d.ts.map +1 -0
  450. package/dist/lexical-proxy/@lexical-react/ReactExtension.js +2 -0
  451. package/dist/lexical-proxy/@lexical-react/ReactExtension.js.map +1 -0
  452. package/dist/lexical-proxy/@lexical-react/ReactPluginHostExtension.d.ts +2 -0
  453. package/dist/lexical-proxy/@lexical-react/ReactPluginHostExtension.d.ts.map +1 -0
  454. package/dist/lexical-proxy/@lexical-react/ReactPluginHostExtension.js +2 -0
  455. package/dist/lexical-proxy/@lexical-react/ReactPluginHostExtension.js.map +1 -0
  456. package/dist/lexical-proxy/@lexical-react/ReactProviderExtension.d.ts +2 -0
  457. package/dist/lexical-proxy/@lexical-react/ReactProviderExtension.d.ts.map +1 -0
  458. package/dist/lexical-proxy/@lexical-react/ReactProviderExtension.js +2 -0
  459. package/dist/lexical-proxy/@lexical-react/ReactProviderExtension.js.map +1 -0
  460. package/dist/lexical-proxy/@lexical-react/TreeViewExtension.d.ts +2 -0
  461. package/dist/lexical-proxy/@lexical-react/TreeViewExtension.d.ts.map +1 -0
  462. package/dist/lexical-proxy/@lexical-react/TreeViewExtension.js +2 -0
  463. package/dist/lexical-proxy/@lexical-react/TreeViewExtension.js.map +1 -0
  464. package/dist/lexical-proxy/@lexical-react/useExtensionComponent.d.ts +2 -0
  465. package/dist/lexical-proxy/@lexical-react/useExtensionComponent.d.ts.map +1 -0
  466. package/dist/lexical-proxy/@lexical-react/useExtensionComponent.js +2 -0
  467. package/dist/lexical-proxy/@lexical-react/useExtensionComponent.js.map +1 -0
  468. package/dist/lexical-proxy/@lexical-react/useExtensionSignalValue.d.ts +2 -0
  469. package/dist/lexical-proxy/@lexical-react/useExtensionSignalValue.d.ts.map +1 -0
  470. package/dist/lexical-proxy/@lexical-react/useExtensionSignalValue.js +2 -0
  471. package/dist/lexical-proxy/@lexical-react/useExtensionSignalValue.js.map +1 -0
  472. package/dist/lexical-proxy/@lexical-react/useLexicalAriaLiveRegion.d.ts +2 -0
  473. package/dist/lexical-proxy/@lexical-react/useLexicalAriaLiveRegion.d.ts.map +1 -0
  474. package/dist/lexical-proxy/@lexical-react/useLexicalAriaLiveRegion.js +2 -0
  475. package/dist/lexical-proxy/@lexical-react/useLexicalAriaLiveRegion.js.map +1 -0
  476. package/dist/lexical-proxy/@lexical-react/useLexicalFocusManagerRef.d.ts +2 -0
  477. package/dist/lexical-proxy/@lexical-react/useLexicalFocusManagerRef.d.ts.map +1 -0
  478. package/dist/lexical-proxy/@lexical-react/useLexicalFocusManagerRef.js +2 -0
  479. package/dist/lexical-proxy/@lexical-react/useLexicalFocusManagerRef.js.map +1 -0
  480. package/dist/lexical-proxy/@lexical-react/useLexicalFocusTrapRef.d.ts +2 -0
  481. package/dist/lexical-proxy/@lexical-react/useLexicalFocusTrapRef.d.ts.map +1 -0
  482. package/dist/lexical-proxy/@lexical-react/useLexicalFocusTrapRef.js +2 -0
  483. package/dist/lexical-proxy/@lexical-react/useLexicalFocusTrapRef.js.map +1 -0
  484. package/dist/lexical-proxy/@lexical-react/useLexicalRovingTabIndexRef.d.ts +2 -0
  485. package/dist/lexical-proxy/@lexical-react/useLexicalRovingTabIndexRef.d.ts.map +1 -0
  486. package/dist/lexical-proxy/@lexical-react/useLexicalRovingTabIndexRef.js +2 -0
  487. package/dist/lexical-proxy/@lexical-react/useLexicalRovingTabIndexRef.js.map +1 -0
  488. package/dist/lexical-proxy/@lexical-react/useLexicalSlotRef.d.ts +2 -0
  489. package/dist/lexical-proxy/@lexical-react/useLexicalSlotRef.d.ts.map +1 -0
  490. package/dist/lexical-proxy/@lexical-react/useLexicalSlotRef.js +2 -0
  491. package/dist/lexical-proxy/@lexical-react/useLexicalSlotRef.js.map +1 -0
  492. package/dist/populateGraphQL/populate.js.map +1 -1
  493. package/dist/presets/llmInstructions.d.ts +2 -0
  494. package/dist/presets/llmInstructions.d.ts.map +1 -0
  495. package/dist/presets/llmInstructions.js +13 -0
  496. package/dist/presets/llmInstructions.js.map +1 -0
  497. package/dist/types/builtInNodes.d.ts +1 -1
  498. package/dist/types/builtInNodes.d.ts.map +1 -1
  499. package/dist/types/builtInNodes.js +8 -3
  500. package/dist/types/builtInNodes.js.map +1 -1
  501. package/dist/types/index.d.ts +4 -7
  502. package/dist/types/index.d.ts.map +1 -1
  503. package/dist/types/index.js.map +1 -1
  504. package/dist/types/jsonSchemaHelpers.d.ts +5 -1
  505. package/dist/types/jsonSchemaHelpers.d.ts.map +1 -1
  506. package/dist/types/jsonSchemaHelpers.js +7 -2
  507. package/dist/types/jsonSchemaHelpers.js.map +1 -1
  508. package/dist/types/nodeTypes.d.ts +6 -1
  509. package/dist/types/nodeTypes.d.ts.map +1 -1
  510. package/dist/types/nodeTypes.js.map +1 -1
  511. package/dist/utilities/buildEditorState.d.ts.map +1 -1
  512. package/dist/utilities/buildEditorState.js.map +1 -1
  513. package/dist/utilities/buildInitialState.d.ts +3 -2
  514. package/dist/utilities/buildInitialState.d.ts.map +1 -1
  515. package/dist/utilities/buildInitialState.js +1 -0
  516. package/dist/utilities/buildInitialState.js.map +1 -1
  517. package/dist/utilities/createServerFeature.d.ts +1 -1
  518. package/dist/utilities/createServerFeature.d.ts.map +1 -1
  519. package/dist/utilities/createServerFeature.js +2 -2
  520. package/dist/utilities/createServerFeature.js.map +1 -1
  521. package/dist/utilities/editorConfigFactory.d.ts +6 -6
  522. package/dist/utilities/editorConfigFactory.d.ts.map +1 -1
  523. package/dist/utilities/editorConfigFactory.js +9 -9
  524. package/dist/utilities/editorConfigFactory.js.map +1 -1
  525. package/dist/utilities/fieldsDrawer/Drawer.js +36 -36
  526. package/dist/utilities/fieldsDrawer/Drawer.js.map +1 -1
  527. package/dist/utilities/fieldsDrawer/DrawerContent.d.ts.map +1 -1
  528. package/dist/utilities/fieldsDrawer/DrawerContent.js +6 -9
  529. package/dist/utilities/fieldsDrawer/DrawerContent.js.map +1 -1
  530. package/dist/utilities/fieldsDrawer/useDrawerSubmit.js.map +1 -1
  531. package/dist/utilities/fieldsDrawer/useLexicalDocumentDrawer.js.map +1 -1
  532. package/dist/utilities/fieldsDrawer/useLexicalDrawer.js.map +1 -1
  533. package/dist/utilities/fieldsDrawer/useLexicalListDrawer.js.map +1 -1
  534. package/dist/utilities/generateImportMap.d.ts +2 -2
  535. package/dist/utilities/generateImportMap.d.ts.map +1 -1
  536. package/dist/utilities/generateImportMap.js.map +1 -1
  537. package/dist/utilities/getDefaultSanitizedEditorConfig.d.ts +2 -2
  538. package/dist/utilities/getDefaultSanitizedEditorConfig.d.ts.map +1 -1
  539. package/dist/utilities/getDefaultSanitizedEditorConfig.js +6 -17
  540. package/dist/utilities/getDefaultSanitizedEditorConfig.js.map +1 -1
  541. package/dist/utilities/initLexicalFeatures.d.ts.map +1 -1
  542. package/dist/utilities/initLexicalFeatures.js +38 -4
  543. package/dist/utilities/initLexicalFeatures.js.map +1 -1
  544. package/dist/utilities/upgradeLexicalData/index.js +6 -3
  545. package/dist/utilities/upgradeLexicalData/index.js.map +1 -1
  546. package/dist/utilities/useLexicalFeature.js +15 -6
  547. package/dist/utilities/useLexicalFeature.js.map +1 -1
  548. package/dist/utilities/useRunDeprioritized.js.map +1 -1
  549. package/dist/validate/hasText.d.ts +2 -2
  550. package/dist/validate/hasText.d.ts.map +1 -1
  551. package/dist/validate/hasText.js.map +1 -1
  552. package/dist/validate/index.d.ts +1 -1
  553. package/dist/validate/index.d.ts.map +1 -1
  554. package/package.json +125 -54
  555. package/dist/dependencyChecker.spec.js +0 -16
  556. package/dist/dependencyChecker.spec.js.map +0 -1
  557. package/dist/exports/client/Field-QGSHF22S.js +0 -2
  558. package/dist/exports/client/Field-QGSHF22S.js.map +0 -7
  559. package/dist/exports/client/bundled.css +0 -1
  560. package/dist/exports/client/chunk-ESITTE3C.js +0 -2
  561. package/dist/exports/client/chunk-ESITTE3C.js.map +0 -7
  562. package/dist/exports/client/chunk-UD4DQ4AK.js +0 -2
  563. package/dist/exports/client/chunk-UD4DQ4AK.js.map +0 -7
  564. package/dist/exports/client/chunk-X3D4LZS7.js +0 -2
  565. package/dist/exports/client/chunk-X3D4LZS7.js.map +0 -7
  566. package/dist/exports/client/component-PHZQBOJE.js +0 -2
  567. package/dist/exports/client/component-PHZQBOJE.js.map +0 -7
  568. package/dist/exports/client/componentInline-H24N7GUG.js +0 -2
  569. package/dist/features/blocks/client/component/removeEmptyArrayValues.d.ts +0 -11
  570. package/dist/features/blocks/client/component/removeEmptyArrayValues.d.ts.map +0 -1
  571. package/dist/features/blocks/client/component/removeEmptyArrayValues.js +0 -20
  572. package/dist/features/blocks/client/component/removeEmptyArrayValues.js.map +0 -1
  573. package/dist/features/converters/lexicalToPlaintext/convertLexicalToPlaintext.spec.js +0 -180
  574. package/dist/features/converters/lexicalToPlaintext/convertLexicalToPlaintext.spec.js.map +0 -1
  575. package/dist/features/experimental_table/client/index.d.ts.map +0 -1
  576. package/dist/features/experimental_table/client/index.js.map +0 -1
  577. package/dist/features/experimental_table/client/plugins/TableActionMenuPlugin/index.d.ts.map +0 -1
  578. package/dist/features/experimental_table/client/plugins/TableActionMenuPlugin/index.js.map +0 -1
  579. package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.d.ts.map +0 -1
  580. package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.js.map +0 -1
  581. package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.d.ts.map +0 -1
  582. package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.js.map +0 -1
  583. package/dist/features/experimental_table/client/plugins/TablePlugin/TableGridPopup/index.d.ts.map +0 -1
  584. package/dist/features/experimental_table/client/plugins/TablePlugin/TableGridPopup/index.js.map +0 -1
  585. package/dist/features/experimental_table/client/plugins/TablePlugin/index.d.ts.map +0 -1
  586. package/dist/features/experimental_table/client/plugins/TablePlugin/index.js.map +0 -1
  587. package/dist/features/experimental_table/client/utils/debounce.d.ts.map +0 -1
  588. package/dist/features/experimental_table/client/utils/debounce.js.map +0 -1
  589. package/dist/features/experimental_table/client/utils/useDebounce.d.ts.map +0 -1
  590. package/dist/features/experimental_table/client/utils/useDebounce.js.map +0 -1
  591. package/dist/features/experimental_table/markdownTransformer.d.ts.map +0 -1
  592. package/dist/features/experimental_table/markdownTransformer.js.map +0 -1
  593. package/dist/features/experimental_table/server/index.d.ts +0 -3
  594. package/dist/features/experimental_table/server/index.d.ts.map +0 -1
  595. package/dist/features/experimental_table/server/index.js.map +0 -1
  596. package/dist/features/experimental_table/server/schema.d.ts.map +0 -1
  597. package/dist/features/experimental_table/server/schema.js.map +0 -1
  598. package/dist/features/link/markdownTransformer.spec.js +0 -195
  599. package/dist/features/link/markdownTransformer.spec.js.map +0 -1
  600. package/dist/lexical/utils/markdown/convertFromMarkdownString.spec.js +0 -88
  601. package/dist/lexical/utils/markdown/convertFromMarkdownString.spec.js.map +0 -1
  602. package/dist/lexical/utils/url.spec.js +0 -114
  603. package/dist/lexical/utils/url.spec.js.map +0 -1
  604. package/dist/utilities/jsx/jsx.spec.js +0 -178
  605. package/dist/utilities/jsx/jsx.spec.js.map +0 -1
  606. /package/dist/exports/client/{RelationshipComponent-YCPAKOL7.js.map → RelationshipComponent-TVK6I4W4.js.map} +0 -0
  607. /package/dist/exports/client/{componentInline-H24N7GUG.js.map → componentInline-AU7IBNY7.js.map} +0 -0
  608. /package/dist/features/{experimental_table → table}/client/index.d.ts +0 -0
  609. /package/dist/features/{experimental_table → table}/client/index.js +0 -0
  610. /package/dist/features/{experimental_table → table}/client/plugins/TableActionMenuPlugin/index.d.ts +0 -0
  611. /package/dist/features/{experimental_table → table}/client/plugins/TableCellResizerPlugin/index.css +0 -0
  612. /package/dist/features/{experimental_table → table}/client/plugins/TableCellResizerPlugin/index.d.ts +0 -0
  613. /package/dist/features/{experimental_table → table}/client/plugins/TableHoverActionsPlugin/index.d.ts +0 -0
  614. /package/dist/features/{experimental_table → table}/client/plugins/TableHoverActionsPlugin/index.js +0 -0
  615. /package/dist/features/{experimental_table → table}/client/plugins/TablePlugin/TableGridPopup/index.d.ts +0 -0
  616. /package/dist/features/{experimental_table → table}/client/plugins/TablePlugin/TableGridPopup/index.js +0 -0
  617. /package/dist/features/{experimental_table → table}/client/plugins/TablePlugin/index.css +0 -0
  618. /package/dist/features/{experimental_table → table}/client/plugins/TablePlugin/index.d.ts +0 -0
  619. /package/dist/features/{experimental_table → table}/client/utils/debounce.d.ts +0 -0
  620. /package/dist/features/{experimental_table → table}/client/utils/debounce.js +0 -0
  621. /package/dist/features/{experimental_table → table}/client/utils/useDebounce.d.ts +0 -0
  622. /package/dist/features/{experimental_table → table}/client/utils/useDebounce.js +0 -0
  623. /package/dist/features/{experimental_table → table}/markdownTransformer.d.ts +0 -0
  624. /package/dist/features/{experimental_table → table}/markdownTransformer.js +0 -0
  625. /package/dist/features/{experimental_table → table}/server/schema.d.ts +0 -0
  626. /package/dist/features/{experimental_table → table}/server/schema.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","$createParagraphNode","$createTextNode","$getRoot","getDOMSelection","React","useCallback","useEffect","useLayoutEffect","useRef","useState","IS_APPLE","copy","text","textArea","document","createElement","value","style","position","opacity","body","appendChild","focus","select","result","execCommand","console","log","error","removeChild","download","filename","a","setAttribute","encodeURIComponent","display","click","formatStep","step","formatOneStep","name","x","y","anchorPath","toString","anchorOffset","focusPath","focusOffset","formattedStep","count","join","isSelectAll","event","key","toLowerCase","metaKey","ctrlKey","sanitizeSelection","selection","anchorNode","focusNode","getPathFromNodeToEditor","node","rootElement","currentNode","path","undefined","unshift","Array","from","parentNode","childNodes","indexOf","keyPresses","Set","useTestRecorder","editor","steps","setSteps","isRecording","setIsRecording","setCurrentInnerHTML","templatedTest","setTemplatedTest","previousSelectionRef","skipNextSelectionChangeRef","preRef","getCurrentEditor","generateTestContent","getRootElement","browserSelection","_window","contains","map","pushStep","currentSteps","currentIndex","length","lastStep","slice","onKeyDown","has","onKeyUp","registerRootListener","prevRootElement","removeEventListener","addEventListener","current","scrollTo","scrollHeight","testContent","removeUpdateListener","registerUpdateListener","dirtyElements","dirtyLeaves","editorState","currentSelection","_selection","previousSelection","skipNextSelectionChange","size","innerHTML","toggleEditorSelection","currentEditor","update","root","clear","append","currentIsRecording","onSnapshotClick","onCopyClick","onDownloadClick","button","_jsx","className","id","onClick","e","preventDefault","title","type","output","_jsxs","ref","TestRecorderPlugin","$","testRecorderButton","testRecorderOutput","t0","Fragment","children"],"sources":["../../../../../../src/features/debug/testRecorder/client/plugin/index.tsx"],"sourcesContent":["'use client'\nimport type { BaseSelection, LexicalEditor } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { $createParagraphNode, $createTextNode, $getRoot, getDOMSelection } from 'lexical'\nimport * as React from 'react'\nimport { type JSX, useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react'\n\nimport type { PluginComponent } from '../../../../typesClient.js'\n\nimport { IS_APPLE } from '../../../../../lexical/utils/environment.js'\nimport './index.css'\n\nconst copy = (text: null | string) => {\n const textArea = document.createElement('textarea')\n textArea.value = text || ''\n textArea.style.position = 'absolute'\n textArea.style.opacity = '0'\n document.body?.appendChild(textArea)\n textArea.focus()\n textArea.select()\n try {\n const result = document.execCommand('copy')\n // eslint-disable-next-line no-console\n console.log(result)\n } catch (error) {\n console.error(error)\n }\n document.body?.removeChild(textArea)\n}\n\nconst download = (filename: string, text: null | string) => {\n const a = document.createElement('a')\n a.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text || ''))\n a.setAttribute('download', filename)\n a.style.display = 'none'\n document.body?.appendChild(a)\n a.click()\n document.body?.removeChild(a)\n}\n\nconst formatStep = (step: Step) => {\n const formatOneStep = (name: string, value: Step['value']) => {\n switch (name) {\n case 'click': {\n return ` await page.mouse.click(${value.x}, ${value.y});`\n }\n case 'keydown': {\n return ` await page.keyboard.keydown('${value}');`\n }\n case 'keyup': {\n return ` await page.keyboard.keyup('${value}');`\n }\n case 'press': {\n return ` await page.keyboard.press('${value}');`\n }\n case 'selectAll': {\n return ` await selectAll(page);`\n }\n case 'snapshot': {\n return ` await assertHTMLSnapshot(page);\n await assertSelection(page, {\n anchorPath: [${value.anchorPath.toString()}],\n anchorOffset: ${value.anchorOffset},\n focusPath: [${value.focusPath.toString()}],\n focusOffset: ${value.focusOffset},\n });\n`\n }\n case 'type': {\n return ` await page.keyboard.type('${value}');`\n }\n default:\n return ``\n }\n }\n const formattedStep = formatOneStep(step.name, step.value)\n switch (step.count) {\n case 1:\n return formattedStep\n case 2:\n return [formattedStep, formattedStep].join(`\\n`)\n default:\n return ` await repeat(${step.count}, async () => {\n ${formattedStep}\n );`\n }\n}\n\nexport function isSelectAll(event: KeyboardEvent): boolean {\n return event.key.toLowerCase() === 'a' && (IS_APPLE ? event.metaKey : event.ctrlKey)\n}\n\n// stolen from LexicalSelection-test\nfunction sanitizeSelection(selection: Selection) {\n const { anchorNode, focusNode } = selection\n let { anchorOffset, focusOffset } = selection\n if (anchorOffset !== 0) {\n anchorOffset--\n }\n if (focusOffset !== 0) {\n focusOffset--\n }\n return { anchorNode, anchorOffset, focusNode, focusOffset }\n}\n\nfunction getPathFromNodeToEditor(node: Node, rootElement: HTMLElement | null) {\n let currentNode: Node | null | undefined = node\n const path: number[] = []\n while (currentNode !== rootElement) {\n if (currentNode !== null && currentNode !== undefined) {\n path.unshift(\n Array.from(currentNode?.parentNode?.childNodes ?? []).indexOf(currentNode as ChildNode),\n )\n }\n currentNode = currentNode?.parentNode\n }\n return path\n}\n\nconst keyPresses = new Set([\n 'ArrowDown',\n 'ArrowLeft',\n 'ArrowRight',\n 'ArrowUp',\n 'Backspace',\n 'Delete',\n 'Enter',\n 'Escape',\n])\n\ntype Step = {\n count: number\n name: string\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any\n}\n\ntype Steps = Step[]\n\nfunction useTestRecorder(editor: LexicalEditor): [JSX.Element, JSX.Element | null] {\n const [steps, setSteps] = useState<Steps>([])\n const [isRecording, setIsRecording] = useState(false)\n const [, setCurrentInnerHTML] = useState('')\n const [templatedTest, setTemplatedTest] = useState('')\n const previousSelectionRef = useRef<BaseSelection | null>(null)\n const skipNextSelectionChangeRef = useRef(false)\n const preRef = useRef<HTMLPreElement>(null)\n\n const getCurrentEditor = useCallback(() => {\n return editor\n }, [editor])\n\n const generateTestContent = useCallback(() => {\n const rootElement = editor.getRootElement()\n const browserSelection = getDOMSelection(editor._window)\n\n if (\n rootElement == null ||\n browserSelection == null ||\n browserSelection.anchorNode == null ||\n browserSelection.focusNode == null ||\n !rootElement.contains(browserSelection.anchorNode) ||\n !rootElement.contains(browserSelection.focusNode)\n ) {\n return null\n }\n\n return `\nimport {\n initializeE2E,\n assertHTMLSnapshot,\n assertSelection,\n repeat,\n} from '../utils';\nimport {selectAll} from '../keyboardShortcuts';\nimport { RangeSelection } from 'lexical';\nimport { NodeSelection } from 'lexical';\n\ndescribe('Test case', () => {\n initializeE2E((e2e) => {\n it('Should pass this test', async () => {\n const {page} = e2e;\n\n await page.focus('div[contenteditable=\"true\"]');\n${steps.map(formatStep).join(`\\n`)}\n });\n});\n `\n }, [editor, steps])\n\n // just a wrapper around inserting new actions so that we can\n // coalesce some actions like insertText/moveNativeSelection\n const pushStep = useCallback(\n (name: string, value: Step['value']) => {\n setSteps((currentSteps) => {\n // trying to group steps\n const currentIndex = steps.length - 1\n const lastStep = steps[currentIndex]\n if (lastStep) {\n if (lastStep.name === name) {\n if (name === 'type') {\n // for typing events we just append the text\n return [\n ...steps.slice(0, currentIndex),\n { ...lastStep, value: lastStep.value + value },\n ]\n } else {\n // for other events we bump the counter if their values are the same\n if (lastStep.value === value) {\n return [...steps.slice(0, currentIndex), { ...lastStep, count: lastStep.count + 1 }]\n }\n }\n }\n }\n // could not group, just append a new one\n return [...currentSteps, { name, count: 1, value }]\n })\n },\n [steps, setSteps],\n )\n\n useLayoutEffect(() => {\n const onKeyDown = (event: KeyboardEvent) => {\n if (!isRecording) {\n return\n }\n const key = event.key\n if (isSelectAll(event)) {\n pushStep('selectAll', '')\n } else if (keyPresses.has(key)) {\n pushStep('press', event.key)\n } else if ([...key].length > 1) {\n pushStep('keydown', event.key)\n } else {\n pushStep('type', event.key)\n }\n }\n\n const onKeyUp = (event: KeyboardEvent) => {\n if (!isRecording) {\n return\n }\n const key = event.key\n if (!keyPresses.has(key) && [...key].length > 1) {\n pushStep('keyup', event.key)\n }\n }\n\n return editor.registerRootListener(\n (rootElement: HTMLElement | null, prevRootElement: HTMLElement | null) => {\n if (prevRootElement !== null) {\n prevRootElement.removeEventListener('keydown', onKeyDown)\n prevRootElement.removeEventListener('keyup', onKeyUp)\n }\n if (rootElement !== null) {\n rootElement.addEventListener('keydown', onKeyDown)\n rootElement.addEventListener('keyup', onKeyUp)\n }\n },\n )\n }, [editor, isRecording, pushStep])\n\n useLayoutEffect(() => {\n if (preRef.current) {\n preRef.current.scrollTo(0, preRef.current.scrollHeight)\n }\n }, [generateTestContent])\n\n useEffect(() => {\n if (steps) {\n const testContent = generateTestContent()\n if (testContent !== null) {\n setTemplatedTest(testContent)\n }\n if (preRef.current) {\n preRef.current.scrollTo(0, preRef.current.scrollHeight)\n }\n }\n }, [generateTestContent, steps])\n\n useEffect(() => {\n const removeUpdateListener = editor.registerUpdateListener(\n ({ dirtyElements, dirtyLeaves, editorState }) => {\n if (!isRecording) {\n return\n }\n const currentSelection = editorState._selection\n const previousSelection = previousSelectionRef.current\n const skipNextSelectionChange = skipNextSelectionChangeRef.current\n if (previousSelection !== currentSelection) {\n if (dirtyLeaves.size === 0 && dirtyElements.size === 0 && !skipNextSelectionChange) {\n const browserSelection = getDOMSelection(editor._window)\n if (\n browserSelection &&\n (browserSelection.anchorNode == null || browserSelection.focusNode == null)\n ) {\n return\n }\n }\n previousSelectionRef.current = currentSelection\n }\n skipNextSelectionChangeRef.current = false\n const testContent = generateTestContent()\n if (testContent !== null) {\n setTemplatedTest(testContent)\n }\n },\n )\n return removeUpdateListener\n }, [editor, generateTestContent, isRecording, pushStep])\n\n // save innerHTML\n useEffect(() => {\n if (!isRecording) {\n return\n }\n const removeUpdateListener = editor.registerUpdateListener(() => {\n const rootElement = editor.getRootElement()\n if (rootElement !== null) {\n setCurrentInnerHTML(rootElement?.innerHTML)\n }\n })\n return removeUpdateListener\n }, [editor, isRecording])\n\n // clear editor and start recording\n const toggleEditorSelection = useCallback(\n (currentEditor: LexicalEditor) => {\n if (!isRecording) {\n currentEditor.update(() => {\n const root = $getRoot()\n root.clear()\n const text = $createTextNode()\n root.append($createParagraphNode().append(text))\n text.select()\n })\n setSteps([])\n }\n setIsRecording((currentIsRecording) => !currentIsRecording)\n },\n [isRecording],\n )\n\n const onSnapshotClick = useCallback(() => {\n if (!isRecording) {\n return\n }\n const browserSelection = getDOMSelection(editor._window)\n if (\n browserSelection === null ||\n browserSelection.anchorNode == null ||\n browserSelection.focusNode == null\n ) {\n return\n }\n const { anchorNode, anchorOffset, focusNode, focusOffset } = sanitizeSelection(browserSelection)\n const rootElement = getCurrentEditor().getRootElement()\n let anchorPath\n if (anchorNode !== null) {\n anchorPath = getPathFromNodeToEditor(anchorNode, rootElement)\n }\n let focusPath\n if (focusNode !== null) {\n focusPath = getPathFromNodeToEditor(focusNode, rootElement)\n }\n pushStep('snapshot', {\n anchorNode,\n anchorOffset,\n anchorPath,\n focusNode,\n focusOffset,\n focusPath,\n })\n }, [pushStep, isRecording, getCurrentEditor])\n\n const onCopyClick = useCallback(() => {\n copy(generateTestContent())\n }, [generateTestContent])\n\n const onDownloadClick = useCallback(() => {\n download('test.js', generateTestContent())\n }, [generateTestContent])\n\n const button = (\n <button\n className={`editor-dev-button ${isRecording ? 'active' : ''}`}\n id=\"test-recorder-button\"\n onClick={(e) => {\n toggleEditorSelection(getCurrentEditor())\n e.preventDefault()\n }}\n title={isRecording ? 'Disable test recorder' : 'Enable test recorder'}\n type=\"button\"\n >\n {isRecording ? 'Disable test recorder' : 'Enable test recorder'}\n </button>\n )\n const output = isRecording ? (\n <div className=\"test-recorder-output\">\n <div className=\"test-recorder-toolbar\">\n <button\n className=\"test-recorder-button\"\n id=\"test-recorder-button-snapshot\"\n onClick={(e) => {\n onSnapshotClick()\n e.preventDefault()\n }}\n title=\"Insert snapshot\"\n type=\"button\"\n >\n Insert Snapshot\n </button>\n <button\n className=\"test-recorder-button\"\n id=\"test-recorder-button-copy\"\n onClick={(e) => {\n onCopyClick()\n e.preventDefault()\n }}\n title=\"Copy to clipboard\"\n type=\"button\"\n >\n Copy\n </button>\n <button\n className=\"test-recorder-button\"\n id=\"test-recorder-button-download\"\n onClick={(e) => {\n onDownloadClick()\n e.preventDefault()\n }}\n title=\"Download as a file\"\n type=\"button\"\n >\n Download\n </button>\n </div>\n <pre id=\"test-recorder\" ref={preRef}>\n {templatedTest}\n </pre>\n </div>\n ) : null\n\n return [button, output]\n}\nexport const TestRecorderPlugin: PluginComponent<undefined> = () => {\n const [editor] = useLexicalComposerContext()\n const [testRecorderButton, testRecorderOutput] = useTestRecorder(editor)\n\n return (\n <React.Fragment>\n <p>HI</p>\n {testRecorderButton}\n {testRecorderOutput}\n <p>DONE</p>\n </React.Fragment>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","$createParagraphNode","$createTextNode","$getRoot","getDOMSelection","React","useCallback","useEffect","useLayoutEffect","useRef","useState","IS_APPLE","copy","text","textArea","document","createElement","value","style","position","opacity","body","appendChild","focus","select","result","execCommand","console","log","error","removeChild","download","filename","a","setAttribute","encodeURIComponent","display","click","formatStep","step","formatOneStep","name","x","y","anchorPath","toString","anchorOffset","focusPath","focusOffset","formattedStep","count","join","isSelectAll","event","key","toLowerCase","metaKey","ctrlKey","sanitizeSelection","selection","anchorNode","focusNode","getPathFromNodeToEditor","node","rootElement","currentNode","path","undefined","unshift","Array","from","parentNode","childNodes","indexOf","keyPresses","Set","useTestRecorder","editor","steps","setSteps","isRecording","setIsRecording","setCurrentInnerHTML","templatedTest","setTemplatedTest","previousSelectionRef","skipNextSelectionChangeRef","preRef","getCurrentEditor","generateTestContent","getRootElement","browserSelection","_window","contains","map","pushStep","currentSteps","currentIndex","length","lastStep","slice","onKeyDown","has","onKeyUp","registerRootListener","prevRootElement","removeEventListener","addEventListener","current","scrollTo","scrollHeight","testContent","removeUpdateListener","registerUpdateListener","dirtyElements","dirtyLeaves","editorState","currentSelection","_selection","previousSelection","skipNextSelectionChange","size","innerHTML","toggleEditorSelection","currentEditor","update","root","clear","append","currentIsRecording","onSnapshotClick","onCopyClick","onDownloadClick","button","_jsx","className","id","onClick","e","preventDefault","title","type","output","_jsxs","ref","TestRecorderPlugin","$","testRecorderButton","testRecorderOutput","t0","Fragment","children"],"sources":["../../../../../../src/features/debug/testRecorder/client/plugin/index.tsx"],"sourcesContent":["'use client'\nimport type { BaseSelection, LexicalEditor } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { $createParagraphNode, $createTextNode, $getRoot, getDOMSelection } from 'lexical'\nimport * as React from 'react'\nimport { type JSX, useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react'\n\nimport type { PluginComponent } from '../../../../typesClient.js'\n\nimport { IS_APPLE } from '../../../../../lexical/utils/environment.js'\nimport './index.css'\n\nconst copy = (text: null | string) => {\n const textArea = document.createElement('textarea')\n textArea.value = text || ''\n textArea.style.position = 'absolute'\n textArea.style.opacity = '0'\n document.body?.appendChild(textArea)\n textArea.focus()\n textArea.select()\n try {\n const result = document.execCommand('copy')\n // eslint-disable-next-line no-console\n console.log(result)\n } catch (error) {\n console.error(error)\n }\n document.body?.removeChild(textArea)\n}\n\nconst download = (filename: string, text: null | string) => {\n const a = document.createElement('a')\n a.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text || ''))\n a.setAttribute('download', filename)\n a.style.display = 'none'\n document.body?.appendChild(a)\n a.click()\n document.body?.removeChild(a)\n}\n\nconst formatStep = (step: Step) => {\n const formatOneStep = (name: string, value: Step['value']) => {\n switch (name) {\n case 'click': {\n return ` await page.mouse.click(${value.x}, ${value.y});`\n }\n case 'keydown': {\n return ` await page.keyboard.keydown('${value}');`\n }\n case 'keyup': {\n return ` await page.keyboard.keyup('${value}');`\n }\n case 'press': {\n return ` await page.keyboard.press('${value}');`\n }\n case 'selectAll': {\n return ` await selectAll(page);`\n }\n case 'snapshot': {\n return ` await assertHTMLSnapshot(page);\n await assertSelection(page, {\n anchorPath: [${value.anchorPath.toString()}],\n anchorOffset: ${value.anchorOffset},\n focusPath: [${value.focusPath.toString()}],\n focusOffset: ${value.focusOffset},\n });\n`\n }\n case 'type': {\n return ` await page.keyboard.type('${value}');`\n }\n default:\n return ``\n }\n }\n const formattedStep = formatOneStep(step.name, step.value)\n switch (step.count) {\n case 1:\n return formattedStep\n case 2:\n return [formattedStep, formattedStep].join(`\\n`)\n default:\n return ` await repeat(${step.count}, async () => {\n ${formattedStep}\n );`\n }\n}\n\nexport function isSelectAll(event: KeyboardEvent): boolean {\n return event.key.toLowerCase() === 'a' && (IS_APPLE ? event.metaKey : event.ctrlKey)\n}\n\n// stolen from LexicalSelection-test\nfunction sanitizeSelection(selection: Selection) {\n const { anchorNode, focusNode } = selection\n let { anchorOffset, focusOffset } = selection\n if (anchorOffset !== 0) {\n anchorOffset--\n }\n if (focusOffset !== 0) {\n focusOffset--\n }\n return { anchorNode, anchorOffset, focusNode, focusOffset }\n}\n\nfunction getPathFromNodeToEditor(node: Node, rootElement: HTMLElement | null) {\n let currentNode: Node | null | undefined = node\n const path: number[] = []\n while (currentNode !== rootElement) {\n if (currentNode !== null && currentNode !== undefined) {\n path.unshift(\n Array.from(currentNode?.parentNode?.childNodes ?? []).indexOf(currentNode as ChildNode),\n )\n }\n currentNode = currentNode?.parentNode\n }\n return path\n}\n\nconst keyPresses = new Set([\n 'ArrowDown',\n 'ArrowLeft',\n 'ArrowRight',\n 'ArrowUp',\n 'Backspace',\n 'Delete',\n 'Enter',\n 'Escape',\n])\n\ntype Step = {\n count: number\n name: string\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any\n}\n\ntype Steps = Step[]\n\nfunction useTestRecorder(editor: LexicalEditor): [JSX.Element, JSX.Element | null] {\n const [steps, setSteps] = useState<Steps>([])\n const [isRecording, setIsRecording] = useState(false)\n const [, setCurrentInnerHTML] = useState('')\n const [templatedTest, setTemplatedTest] = useState('')\n const previousSelectionRef = useRef<BaseSelection | null>(null)\n const skipNextSelectionChangeRef = useRef(false)\n const preRef = useRef<HTMLPreElement>(null)\n\n const getCurrentEditor = useCallback(() => {\n return editor\n }, [editor])\n\n const generateTestContent = useCallback(() => {\n const rootElement = editor.getRootElement()\n const browserSelection = getDOMSelection(editor._window)\n\n if (\n rootElement == null ||\n browserSelection == null ||\n browserSelection.anchorNode == null ||\n browserSelection.focusNode == null ||\n !rootElement.contains(browserSelection.anchorNode) ||\n !rootElement.contains(browserSelection.focusNode)\n ) {\n return null\n }\n\n return `\nimport {\n initializeE2E,\n assertHTMLSnapshot,\n assertSelection,\n repeat,\n} from '../utils';\nimport {selectAll} from '../keyboardShortcuts';\nimport { RangeSelection } from 'lexical';\nimport { NodeSelection } from 'lexical';\n\ndescribe('Test case', () => {\n initializeE2E((e2e) => {\n it('Should pass this test', async () => {\n const {page} = e2e;\n\n await page.focus('div[contenteditable=\"true\"]');\n${steps.map(formatStep).join(`\\n`)}\n });\n});\n `\n }, [editor, steps])\n\n // just a wrapper around inserting new actions so that we can\n // coalesce some actions like insertText/moveNativeSelection\n const pushStep = useCallback(\n (name: string, value: Step['value']) => {\n setSteps((currentSteps) => {\n // trying to group steps\n const currentIndex = steps.length - 1\n const lastStep = steps[currentIndex]\n if (lastStep) {\n if (lastStep.name === name) {\n if (name === 'type') {\n // for typing events we just append the text\n return [\n ...steps.slice(0, currentIndex),\n { ...lastStep, value: lastStep.value + value },\n ]\n } else {\n // for other events we bump the counter if their values are the same\n if (lastStep.value === value) {\n return [...steps.slice(0, currentIndex), { ...lastStep, count: lastStep.count + 1 }]\n }\n }\n }\n }\n // could not group, just append a new one\n return [...currentSteps, { name, count: 1, value }]\n })\n },\n [steps, setSteps],\n )\n\n useLayoutEffect(() => {\n const onKeyDown = (event: KeyboardEvent) => {\n if (!isRecording) {\n return\n }\n const key = event.key\n if (isSelectAll(event)) {\n pushStep('selectAll', '')\n } else if (keyPresses.has(key)) {\n pushStep('press', event.key)\n } else if ([...key].length > 1) {\n pushStep('keydown', event.key)\n } else {\n pushStep('type', event.key)\n }\n }\n\n const onKeyUp = (event: KeyboardEvent) => {\n if (!isRecording) {\n return\n }\n const key = event.key\n if (!keyPresses.has(key) && [...key].length > 1) {\n pushStep('keyup', event.key)\n }\n }\n\n return editor.registerRootListener(\n (rootElement: HTMLElement | null, prevRootElement: HTMLElement | null) => {\n if (prevRootElement !== null) {\n prevRootElement.removeEventListener('keydown', onKeyDown)\n prevRootElement.removeEventListener('keyup', onKeyUp)\n }\n if (rootElement !== null) {\n rootElement.addEventListener('keydown', onKeyDown)\n rootElement.addEventListener('keyup', onKeyUp)\n }\n },\n )\n }, [editor, isRecording, pushStep])\n\n useLayoutEffect(() => {\n if (preRef.current) {\n preRef.current.scrollTo(0, preRef.current.scrollHeight)\n }\n }, [generateTestContent])\n\n useEffect(() => {\n if (steps) {\n const testContent = generateTestContent()\n if (testContent !== null) {\n setTemplatedTest(testContent)\n }\n if (preRef.current) {\n preRef.current.scrollTo(0, preRef.current.scrollHeight)\n }\n }\n }, [generateTestContent, steps])\n\n useEffect(() => {\n const removeUpdateListener = editor.registerUpdateListener(\n ({ dirtyElements, dirtyLeaves, editorState }) => {\n if (!isRecording) {\n return\n }\n const currentSelection = editorState._selection\n const previousSelection = previousSelectionRef.current\n const skipNextSelectionChange = skipNextSelectionChangeRef.current\n if (previousSelection !== currentSelection) {\n if (dirtyLeaves.size === 0 && dirtyElements.size === 0 && !skipNextSelectionChange) {\n const browserSelection = getDOMSelection(editor._window)\n if (\n browserSelection &&\n (browserSelection.anchorNode == null || browserSelection.focusNode == null)\n ) {\n return\n }\n }\n previousSelectionRef.current = currentSelection\n }\n skipNextSelectionChangeRef.current = false\n const testContent = generateTestContent()\n if (testContent !== null) {\n setTemplatedTest(testContent)\n }\n },\n )\n return removeUpdateListener\n }, [editor, generateTestContent, isRecording, pushStep])\n\n // save innerHTML\n useEffect(() => {\n if (!isRecording) {\n return\n }\n const removeUpdateListener = editor.registerUpdateListener(() => {\n const rootElement = editor.getRootElement()\n if (rootElement !== null) {\n setCurrentInnerHTML(rootElement?.innerHTML)\n }\n })\n return removeUpdateListener\n }, [editor, isRecording])\n\n // clear editor and start recording\n const toggleEditorSelection = useCallback(\n (currentEditor: LexicalEditor) => {\n if (!isRecording) {\n currentEditor.update(() => {\n const root = $getRoot()\n root.clear()\n const text = $createTextNode()\n root.append($createParagraphNode().append(text))\n text.select()\n })\n setSteps([])\n }\n setIsRecording((currentIsRecording) => !currentIsRecording)\n },\n [isRecording],\n )\n\n const onSnapshotClick = useCallback(() => {\n if (!isRecording) {\n return\n }\n const browserSelection = getDOMSelection(editor._window)\n if (\n browserSelection === null ||\n browserSelection.anchorNode == null ||\n browserSelection.focusNode == null\n ) {\n return\n }\n const { anchorNode, anchorOffset, focusNode, focusOffset } = sanitizeSelection(browserSelection)\n const rootElement = getCurrentEditor().getRootElement()\n let anchorPath\n if (anchorNode !== null) {\n anchorPath = getPathFromNodeToEditor(anchorNode, rootElement)\n }\n let focusPath\n if (focusNode !== null) {\n focusPath = getPathFromNodeToEditor(focusNode, rootElement)\n }\n pushStep('snapshot', {\n anchorNode,\n anchorOffset,\n anchorPath,\n focusNode,\n focusOffset,\n focusPath,\n })\n }, [pushStep, isRecording, getCurrentEditor])\n\n const onCopyClick = useCallback(() => {\n copy(generateTestContent())\n }, [generateTestContent])\n\n const onDownloadClick = useCallback(() => {\n download('test.js', generateTestContent())\n }, [generateTestContent])\n\n const button = (\n <button\n className={`editor-dev-button ${isRecording ? 'active' : ''}`}\n id=\"test-recorder-button\"\n onClick={(e) => {\n toggleEditorSelection(getCurrentEditor())\n e.preventDefault()\n }}\n title={isRecording ? 'Disable test recorder' : 'Enable test recorder'}\n type=\"button\"\n >\n {isRecording ? 'Disable test recorder' : 'Enable test recorder'}\n </button>\n )\n const output = isRecording ? (\n <div className=\"test-recorder-output\">\n <div className=\"test-recorder-toolbar\">\n <button\n className=\"test-recorder-button\"\n id=\"test-recorder-button-snapshot\"\n onClick={(e) => {\n onSnapshotClick()\n e.preventDefault()\n }}\n title=\"Insert snapshot\"\n type=\"button\"\n >\n Insert Snapshot\n </button>\n <button\n className=\"test-recorder-button\"\n id=\"test-recorder-button-copy\"\n onClick={(e) => {\n onCopyClick()\n e.preventDefault()\n }}\n title=\"Copy to clipboard\"\n type=\"button\"\n >\n Copy\n </button>\n <button\n className=\"test-recorder-button\"\n id=\"test-recorder-button-download\"\n onClick={(e) => {\n onDownloadClick()\n e.preventDefault()\n }}\n title=\"Download as a file\"\n type=\"button\"\n >\n Download\n </button>\n </div>\n <pre id=\"test-recorder\" ref={preRef}>\n {templatedTest}\n </pre>\n </div>\n ) : null\n\n return [button, output]\n}\nexport const TestRecorderPlugin: PluginComponent<undefined> = () => {\n const [editor] = useLexicalComposerContext()\n const [testRecorderButton, testRecorderOutput] = useTestRecorder(editor)\n\n return (\n <React.Fragment>\n <p>HI</p>\n {testRecorderButton}\n {testRecorderOutput}\n <p>DONE</p>\n </React.Fragment>\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAGA,SAASC,yBAAyB,QAAQ;AAC1C,SAASC,oBAAoB,EAAEC,eAAe,EAAEC,QAAQ,EAAEC,eAAe,QAAQ;AACjF,YAAYC,KAAA,MAAW;AACvB,SAAmBC,WAAW,EAAEC,SAAS,EAAEC,eAAe,EAAEC,MAAM,EAAEC,QAAQ,QAAQ;AAIpF,SAASC,QAAQ,QAAQ;AACzB,OAAO;AAEP,MAAMC,IAAA,GAAQC,IAAA;EACZ,MAAMC,QAAA,GAAWC,QAAA,CAASC,aAAa,CAAC;EACxCF,QAAA,CAASG,KAAK,GAAGJ,IAAA,IAAQ;EACzBC,QAAA,CAASI,KAAK,CAACC,QAAQ,GAAG;EAC1BL,QAAA,CAASI,KAAK,CAACE,OAAO,GAAG;EACzBL,QAAA,CAASM,IAAI,EAAEC,WAAA,CAAYR,QAAA;EAC3BA,QAAA,CAASS,KAAK;EACdT,QAAA,CAASU,MAAM;EACf,IAAI;IACF,MAAMC,MAAA,GAASV,QAAA,CAASW,WAAW,CAAC;IACpC;IACAC,OAAA,CAAQC,GAAG,CAACH,MAAA;EACd,EAAE,OAAOI,KAAA,EAAO;IACdF,OAAA,CAAQE,KAAK,CAACA,KAAA;EAChB;EACAd,QAAA,CAASM,IAAI,EAAES,WAAA,CAAYhB,QAAA;AAC7B;AAEA,MAAMiB,QAAA,GAAWA,CAACC,QAAA,EAAkBnB,IAAA;EAClC,MAAMoB,CAAA,GAAIlB,QAAA,CAASC,aAAa,CAAC;EACjCiB,CAAA,CAAEC,YAAY,CAAC,QAAQ,mCAAmCC,kBAAA,CAAmBtB,IAAA,IAAQ;EACrFoB,CAAA,CAAEC,YAAY,CAAC,YAAYF,QAAA;EAC3BC,CAAA,CAAEf,KAAK,CAACkB,OAAO,GAAG;EAClBrB,QAAA,CAASM,IAAI,EAAEC,WAAA,CAAYW,CAAA;EAC3BA,CAAA,CAAEI,KAAK;EACPtB,QAAA,CAASM,IAAI,EAAES,WAAA,CAAYG,CAAA;AAC7B;AAEA,MAAMK,UAAA,GAAcC,IAAA;EAClB,MAAMC,aAAA,GAAgBA,CAACC,IAAA,EAAcxB,KAAA;IACnC,QAAQwB,IAAA;MACN,KAAK;QAAS;UACZ,OAAO,gCAAgCxB,KAAA,CAAMyB,CAAC,KAAKzB,KAAA,CAAM0B,CAAC,IAAI;QAChE;MACA,KAAK;QAAW;UACd,OAAO,sCAAsC1B,KAAA,KAAU;QACzD;MACA,KAAK;QAAS;UACZ,OAAO,oCAAoCA,KAAA,KAAU;QACvD;MACA,KAAK;QAAS;UACZ,OAAO,oCAAoCA,KAAA,KAAU;QACvD;MACA,KAAK;QAAa;UAChB,OAAO,8BAA8B;QACvC;MACA,KAAK;QAAY;UACf,OAAO;;uBAEQA,KAAA,CAAM2B,UAAU,CAACC,QAAQ;wBACxB5B,KAAA,CAAM6B,YAAY;sBACpB7B,KAAA,CAAM8B,SAAS,CAACF,QAAQ;uBACvB5B,KAAA,CAAM+B,WAAW;;AAExC,CAAC;QACK;MACA,KAAK;QAAQ;UACX,OAAO,mCAAmC/B,KAAA,KAAU;QACtD;MACA;QACE,OAAO,EAAE;IACb;EACF;EACA,MAAMgC,aAAA,GAAgBT,aAAA,CAAcD,IAAA,CAAKE,IAAI,EAAEF,IAAA,CAAKtB,KAAK;EACzD,QAAQsB,IAAA,CAAKW,KAAK;IAChB,KAAK;MACH,OAAOD,aAAA;IACT,KAAK;MACH,OAAO,CAACA,aAAA,EAAeA,aAAA,CAAc,CAACE,IAAI,CAAC,IAAI;IACjD;MACE,OAAO,sBAAsBZ,IAAA,CAAKW,KAAK;IACzCD,aAAA;SACK;EACP;AACF;AAEA,OAAO,SAASG,YAAYC,KAAoB;EAC9C,OAAOA,KAAA,CAAMC,GAAG,CAACC,WAAW,OAAO,QAAQ5C,QAAA,GAAW0C,KAAA,CAAMG,OAAO,GAAGH,KAAA,CAAMI,OAAO,CAAD;AACpF;AAEA;AACA,SAASC,kBAAkBC,SAAoB;EAC7C,MAAM;IAAEC,UAAU;IAAEC;EAAS,CAAE,GAAGF,SAAA;EAClC,IAAI;IAAEb,YAAY;IAAEE;EAAW,CAAE,GAAGW,SAAA;EACpC,IAAIb,YAAA,KAAiB,GAAG;IACtBA,YAAA;EACF;EACA,IAAIE,WAAA,KAAgB,GAAG;IACrBA,WAAA;EACF;EACA,OAAO;IAAEY,UAAA;IAAYd,YAAA;IAAce,SAAA;IAAWb;EAAY;AAC5D;AAEA,SAASc,wBAAwBC,IAAU,EAAEC,WAA+B;EAC1E,IAAIC,WAAA,GAAuCF,IAAA;EAC3C,MAAMG,IAAA,GAAiB,EAAE;EACzB,OAAOD,WAAA,KAAgBD,WAAA,EAAa;IAClC,IAAIC,WAAA,KAAgB,QAAQA,WAAA,KAAgBE,SAAA,EAAW;MACrDD,IAAA,CAAKE,OAAO,CACVC,KAAA,CAAMC,IAAI,CAACL,WAAA,EAAaM,UAAA,EAAYC,UAAA,IAAc,EAAE,EAAEC,OAAO,CAACR,WAAA;IAElE;IACAA,WAAA,GAAcA,WAAA,EAAaM,UAAA;EAC7B;EACA,OAAOL,IAAA;AACT;AAEA,MAAMQ,UAAA,GAAa,IAAIC,GAAA,CAAI,CACzB,aACA,aACA,cACA,WACA,aACA,UACA,SACA,SACD;AAWD,SAASC,gBAAgBC,MAAqB;EAC5C,MAAM,CAACC,KAAA,EAAOC,QAAA,CAAS,GAAGrE,QAAA,CAAgB,EAAE;EAC5C,MAAM,CAACsE,WAAA,EAAaC,cAAA,CAAe,GAAGvE,QAAA,CAAS;EAC/C,MAAM,GAAGwE,mBAAA,CAAoB,GAAGxE,QAAA,CAAS;EACzC,MAAM,CAACyE,aAAA,EAAeC,gBAAA,CAAiB,GAAG1E,QAAA,CAAS;EACnD,MAAM2E,oBAAA,GAAuB5E,MAAA,CAA6B;EAC1D,MAAM6E,0BAAA,GAA6B7E,MAAA,CAAO;EAC1C,MAAM8E,MAAA,GAAS9E,MAAA,CAAuB;EAEtC,MAAM+E,gBAAA,GAAmBlF,WAAA,CAAY;IACnC,OAAOuE,MAAA;EACT,GAAG,CAACA,MAAA,CAAO;EAEX,MAAMY,mBAAA,GAAsBnF,WAAA,CAAY;IACtC,MAAM0D,WAAA,GAAca,MAAA,CAAOa,cAAc;IACzC,MAAMC,gBAAA,GAAmBvF,eAAA,CAAgByE,MAAA,CAAOe,OAAO;IAEvD,IACE5B,WAAA,IAAe,QACf2B,gBAAA,IAAoB,QACpBA,gBAAA,CAAiB/B,UAAU,IAAI,QAC/B+B,gBAAA,CAAiB9B,SAAS,IAAI,QAC9B,CAACG,WAAA,CAAY6B,QAAQ,CAACF,gBAAA,CAAiB/B,UAAU,KACjD,CAACI,WAAA,CAAY6B,QAAQ,CAACF,gBAAA,CAAiB9B,SAAS,GAChD;MACA,OAAO;IACT;IAEA,OAAO;;;;;;;;;;;;;;;;;AAiBX,EAAEiB,KAAA,CAAMgB,GAAG,CAACxD,UAAA,EAAYa,IAAI,CAAC,IAAI;;;KAG5B;EACH,GAAG,CAAC0B,MAAA,EAAQC,KAAA,CAAM;EAElB;EACA;EACA,MAAMiB,QAAA,GAAWzF,WAAA,CACf,CAACmC,IAAA,EAAcxB,KAAA;IACb8D,QAAA,CAAUiB,YAAA;MACR;MACA,MAAMC,YAAA,GAAenB,KAAA,CAAMoB,MAAM,GAAG;MACpC,MAAMC,QAAA,GAAWrB,KAAK,CAACmB,YAAA,CAAa;MACpC,IAAIE,QAAA,EAAU;QACZ,IAAIA,QAAA,CAAS1D,IAAI,KAAKA,IAAA,EAAM;UAC1B,IAAIA,IAAA,KAAS,QAAQ;YACnB;YACA,OAAO,C,GACFqC,KAAA,CAAMsB,KAAK,CAAC,GAAGH,YAAA,GAClB;cAAE,GAAGE,QAAQ;cAAElF,KAAA,EAAOkF,QAAA,CAASlF,KAAK,GAAGA;YAAM,EAC9C;UACH,OAAO;YACL;YACA,IAAIkF,QAAA,CAASlF,KAAK,KAAKA,KAAA,EAAO;cAC5B,OAAO,C,GAAI6D,KAAA,CAAMsB,KAAK,CAAC,GAAGH,YAAA,GAAe;gBAAE,GAAGE,QAAQ;gBAAEjD,KAAA,EAAOiD,QAAA,CAASjD,KAAK,GAAG;cAAE,EAAE;YACtF;UACF;QACF;MACF;MACA;MACA,OAAO,C,GAAI8C,YAAA,EAAc;QAAEvD,IAAA;QAAMS,KAAA,EAAO;QAAGjC;MAAM,EAAE;IACrD;EACF,GACA,CAAC6D,KAAA,EAAOC,QAAA,CAAS;EAGnBvE,eAAA,CAAgB;IACd,MAAM6F,SAAA,GAAahD,KAAA;MACjB,IAAI,CAAC2B,WAAA,EAAa;QAChB;MACF;MACA,MAAM1B,GAAA,GAAMD,KAAA,CAAMC,GAAG;MACrB,IAAIF,WAAA,CAAYC,KAAA,GAAQ;QACtB0C,QAAA,CAAS,aAAa;MACxB,OAAO,IAAIrB,UAAA,CAAW4B,GAAG,CAAChD,GAAA,GAAM;QAC9ByC,QAAA,CAAS,SAAS1C,KAAA,CAAMC,GAAG;MAC7B,OAAO,IAAI,C,GAAIA,GAAA,CAAI,CAAC4C,MAAM,GAAG,GAAG;QAC9BH,QAAA,CAAS,WAAW1C,KAAA,CAAMC,GAAG;MAC/B,OAAO;QACLyC,QAAA,CAAS,QAAQ1C,KAAA,CAAMC,GAAG;MAC5B;IACF;IAEA,MAAMiD,OAAA,GAAWlD,OAAA;MACf,IAAI,CAAC2B,WAAA,EAAa;QAChB;MACF;MACA,MAAM1B,KAAA,GAAMD,OAAA,CAAMC,GAAG;MACrB,IAAI,CAACoB,UAAA,CAAW4B,GAAG,CAAChD,KAAA,KAAQ,C,GAAIA,KAAA,CAAI,CAAC4C,MAAM,GAAG,GAAG;QAC/CH,QAAA,CAAS,SAAS1C,OAAA,CAAMC,GAAG;MAC7B;IACF;IAEA,OAAOuB,MAAA,CAAO2B,oBAAoB,CAChC,CAACxC,aAAA,EAAiCyC,eAAA;MAChC,IAAIA,eAAA,KAAoB,MAAM;QAC5BA,eAAA,CAAgBC,mBAAmB,CAAC,WAAWL,SAAA;QAC/CI,eAAA,CAAgBC,mBAAmB,CAAC,SAASH,OAAA;MAC/C;MACA,IAAIvC,aAAA,KAAgB,MAAM;QACxBA,aAAA,CAAY2C,gBAAgB,CAAC,WAAWN,SAAA;QACxCrC,aAAA,CAAY2C,gBAAgB,CAAC,SAASJ,OAAA;MACxC;IACF;EAEJ,GAAG,CAAC1B,MAAA,EAAQG,WAAA,EAAae,QAAA,CAAS;EAElCvF,eAAA,CAAgB;IACd,IAAI+E,MAAA,CAAOqB,OAAO,EAAE;MAClBrB,MAAA,CAAOqB,OAAO,CAACC,QAAQ,CAAC,GAAGtB,MAAA,CAAOqB,OAAO,CAACE,YAAY;IACxD;EACF,GAAG,CAACrB,mBAAA,CAAoB;EAExBlF,SAAA,CAAU;IACR,IAAIuE,KAAA,EAAO;MACT,MAAMiC,WAAA,GAActB,mBAAA;MACpB,IAAIsB,WAAA,KAAgB,MAAM;QACxB3B,gBAAA,CAAiB2B,WAAA;MACnB;MACA,IAAIxB,MAAA,CAAOqB,OAAO,EAAE;QAClBrB,MAAA,CAAOqB,OAAO,CAACC,QAAQ,CAAC,GAAGtB,MAAA,CAAOqB,OAAO,CAACE,YAAY;MACxD;IACF;EACF,GAAG,CAACrB,mBAAA,EAAqBX,KAAA,CAAM;EAE/BvE,SAAA,CAAU;IACR,MAAMyG,oBAAA,GAAuBnC,MAAA,CAAOoC,sBAAsB,CACxD,CAAC;MAAEC,aAAa;MAAEC,WAAW;MAAEC;IAAW,CAAE;MAC1C,IAAI,CAACpC,WAAA,EAAa;QAChB;MACF;MACA,MAAMqC,gBAAA,GAAmBD,WAAA,CAAYE,UAAU;MAC/C,MAAMC,iBAAA,GAAoBlC,oBAAA,CAAqBuB,OAAO;MACtD,MAAMY,uBAAA,GAA0BlC,0BAAA,CAA2BsB,OAAO;MAClE,IAAIW,iBAAA,KAAsBF,gBAAA,EAAkB;QAC1C,IAAIF,WAAA,CAAYM,IAAI,KAAK,KAAKP,aAAA,CAAcO,IAAI,KAAK,KAAK,CAACD,uBAAA,EAAyB;UAClF,MAAM7B,kBAAA,GAAmBvF,eAAA,CAAgByE,MAAA,CAAOe,OAAO;UACvD,IACED,kBAAA,KACCA,kBAAA,CAAiB/B,UAAU,IAAI,QAAQ+B,kBAAA,CAAiB9B,SAAS,IAAI,IAAG,GACzE;YACA;UACF;QACF;QACAwB,oBAAA,CAAqBuB,OAAO,GAAGS,gBAAA;MACjC;MACA/B,0BAAA,CAA2BsB,OAAO,GAAG;MACrC,MAAMG,aAAA,GAActB,mBAAA;MACpB,IAAIsB,aAAA,KAAgB,MAAM;QACxB3B,gBAAA,CAAiB2B,aAAA;MACnB;IACF;IAEF,OAAOC,oBAAA;EACT,GAAG,CAACnC,MAAA,EAAQY,mBAAA,EAAqBT,WAAA,EAAae,QAAA,CAAS;EAEvD;EACAxF,SAAA,CAAU;IACR,IAAI,CAACyE,WAAA,EAAa;MAChB;IACF;IACA,MAAMgC,sBAAA,GAAuBnC,MAAA,CAAOoC,sBAAsB,CAAC;MACzD,MAAMjD,aAAA,GAAca,MAAA,CAAOa,cAAc;MACzC,IAAI1B,aAAA,KAAgB,MAAM;QACxBkB,mBAAA,CAAoBlB,aAAA,EAAa0D,SAAA;MACnC;IACF;IACA,OAAOV,sBAAA;EACT,GAAG,CAACnC,MAAA,EAAQG,WAAA,CAAY;EAExB;EACA,MAAM2C,qBAAA,GAAwBrH,WAAA,CAC3BsH,aAAA;IACC,IAAI,CAAC5C,WAAA,EAAa;MAChB4C,aAAA,CAAcC,MAAM,CAAC;QACnB,MAAMC,IAAA,GAAO3H,QAAA;QACb2H,IAAA,CAAKC,KAAK;QACV,MAAMlH,IAAA,GAAOX,eAAA;QACb4H,IAAA,CAAKE,MAAM,CAAC/H,oBAAA,GAAuB+H,MAAM,CAACnH,IAAA;QAC1CA,IAAA,CAAKW,MAAM;MACb;MACAuD,QAAA,CAAS,EAAE;IACb;IACAE,cAAA,CAAgBgD,kBAAA,IAAuB,CAACA,kBAAA;EAC1C,GACA,CAACjD,WAAA,CAAY;EAGf,MAAMkD,eAAA,GAAkB5H,WAAA,CAAY;IAClC,IAAI,CAAC0E,WAAA,EAAa;MAChB;IACF;IACA,MAAMW,kBAAA,GAAmBvF,eAAA,CAAgByE,MAAA,CAAOe,OAAO;IACvD,IACED,kBAAA,KAAqB,QACrBA,kBAAA,CAAiB/B,UAAU,IAAI,QAC/B+B,kBAAA,CAAiB9B,SAAS,IAAI,MAC9B;MACA;IACF;IACA,MAAM;MAAED,UAAU;MAAEd,YAAY;MAAEe,SAAS;MAAEb;IAAW,CAAE,GAAGU,iBAAA,CAAkBiC,kBAAA;IAC/E,MAAM3B,aAAA,GAAcwB,gBAAA,GAAmBE,cAAc;IACrD,IAAI9C,UAAA;IACJ,IAAIgB,UAAA,KAAe,MAAM;MACvBhB,UAAA,GAAakB,uBAAA,CAAwBF,UAAA,EAAYI,aAAA;IACnD;IACA,IAAIjB,SAAA;IACJ,IAAIc,SAAA,KAAc,MAAM;MACtBd,SAAA,GAAYe,uBAAA,CAAwBD,SAAA,EAAWG,aAAA;IACjD;IACA+B,QAAA,CAAS,YAAY;MACnBnC,UAAA;MACAd,YAAA;MACAF,UAAA;MACAiB,SAAA;MACAb,WAAA;MACAD;IACF;EACF,GAAG,CAACgD,QAAA,EAAUf,WAAA,EAAaQ,gBAAA,CAAiB;EAE5C,MAAM2C,WAAA,GAAc7H,WAAA,CAAY;IAC9BM,IAAA,CAAK6E,mBAAA;EACP,GAAG,CAACA,mBAAA,CAAoB;EAExB,MAAM2C,eAAA,GAAkB9H,WAAA,CAAY;IAClCyB,QAAA,CAAS,WAAW0D,mBAAA;EACtB,GAAG,CAACA,mBAAA,CAAoB;EAExB,MAAM4C,MAAA,gBACJC,IAAA,CAAC;IACCC,SAAA,EAAW,qBAAqBvD,WAAA,GAAc,WAAW,IAAI;IAC7DwD,EAAA,EAAG;IACHC,OAAA,EAAUC,CAAA;MACRf,qBAAA,CAAsBnC,gBAAA;MACtBkD,CAAA,CAAEC,cAAc;IAClB;IACAC,KAAA,EAAO5D,WAAA,GAAc,0BAA0B;IAC/C6D,IAAA,EAAK;cAEJ7D,WAAA,GAAc,0BAA0B;;EAG7C,MAAM8D,MAAA,GAAS9D,WAAA,gBACb+D,KAAA,CAAC;IAAIR,SAAA,EAAU;4BACbQ,KAAA,CAAC;MAAIR,SAAA,EAAU;8BACbD,IAAA,CAAC;QACCC,SAAA,EAAU;QACVC,EAAA,EAAG;QACHC,OAAA,EAAUC,GAAA;UACRR,eAAA;UACAQ,GAAA,CAAEC,cAAc;QAClB;QACAC,KAAA,EAAM;QACNC,IAAA,EAAK;kBACN;uBAGDP,IAAA,CAAC;QACCC,SAAA,EAAU;QACVC,EAAA,EAAG;QACHC,OAAA,EAAUC,GAAA;UACRP,WAAA;UACAO,GAAA,CAAEC,cAAc;QAClB;QACAC,KAAA,EAAM;QACNC,IAAA,EAAK;kBACN;uBAGDP,IAAA,CAAC;QACCC,SAAA,EAAU;QACVC,EAAA,EAAG;QACHC,OAAA,EAAUC,GAAA;UACRN,eAAA;UACAM,GAAA,CAAEC,cAAc;QAClB;QACAC,KAAA,EAAM;QACNC,IAAA,EAAK;kBACN;;qBAIHP,IAAA,CAAC;MAAIE,EAAA,EAAG;MAAgBQ,GAAA,EAAKzD,MAAA;gBAC1BJ;;OAGH;EAEJ,OAAO,CAACkD,MAAA,EAAQS,MAAA,CAAO;AACzB;AACA,OAAO,MAAMG,kBAAA,GAAiDA,CAAA;EAAA,MAAAC,CAAA,GAAAnJ,EAAA;EAC5D,OAAA8E,MAAA,IAAiB7E,yBAAA;EACjB,OAAAmJ,kBAAA,EAAAC,kBAAA,IAAiDxE,eAAA,CAAgBC,MAAA;EAAA,IAAAwE,EAAA;EAAA,IAAAH,CAAA,QAAAC,kBAAA,IAAAD,CAAA,QAAAE,kBAAA;IAG/DC,EAAA,GAAAN,KAAA,CAAC1I,KAAA,CAAAiJ,QAAc;MAAAC,QAAA,E,CACbjB,IAAA,CAAC;QAAAiB,QAAA,EAAE;UACFJ,kBAAA,EACAC,kBAAA,EACDd,IAAA,CAAC;QAAAiB,QAAA,EAAE;;;;;;;;;SAJLF,E;CAOJ","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","TreeView","React","TreeViewPlugin","$","editor","t0","_jsx","timeTravelButtonClassName","timeTravelPanelButtonClassName","timeTravelPanelClassName","timeTravelPanelSliderClassName","treeTypeButtonClassName","viewClassName"],"sources":["../../../../../../src/features/debug/treeView/client/plugin/index.tsx"],"sourcesContent":["'use client'\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { TreeView } from '@lexical/react/LexicalTreeView.js'\nimport * as React from 'react'\n\nimport type { PluginComponent } from '../../../../typesClient.js'\n\nimport './index.css'\n\nexport const TreeViewPlugin: PluginComponent<undefined> = () => {\n const [editor] = useLexicalComposerContext()\n return (\n <TreeView\n editor={editor}\n timeTravelButtonClassName=\"debug-timetravel-button\"\n timeTravelPanelButtonClassName=\"debug-timetravel-panel-button\"\n timeTravelPanelClassName=\"debug-timetravel-panel\"\n timeTravelPanelSliderClassName=\"debug-timetravel-panel-slider\"\n treeTypeButtonClassName=\"debug-treetype-button\"\n viewClassName=\"tree-view-output\"\n />\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AACA,SAASC,yBAAyB,QAAQ;AAC1C,SAASC,QAAQ,QAAQ;AACzB,YAAYC,KAAA,MAAW;AAIvB,OAAO;AAEP,OAAO,MAAMC,cAAA,GAA6CA,CAAA;EAAA,MAAAC,CAAA,GAAAL,EAAA;EACxD,OAAAM,MAAA,IAAiBL,yBAAA;EAAA,IAAAM,EAAA;EAAA,IAAAF,CAAA,QAAAC,MAAA;IAEfC,EAAA,GAAAC,IAAA,CAAAN,QAAA;MAAAI,MAAA;MAAAG,yBAAA,EAE4B;MAAAC,8BAAA,EACK;MAAAC,wBAAA,EACN;MAAAC,8BAAA,EACM;MAAAC,uBAAA,EACP;MAAAC,aAAA,EACV;IAAA,C;;;;;;SAPhBP,E;CAUJ","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","TreeView","React","TreeViewPlugin","$","editor","t0","_jsx","timeTravelButtonClassName","timeTravelPanelButtonClassName","timeTravelPanelClassName","timeTravelPanelSliderClassName","treeTypeButtonClassName","viewClassName"],"sources":["../../../../../../src/features/debug/treeView/client/plugin/index.tsx"],"sourcesContent":["'use client'\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { TreeView } from '@lexical/react/LexicalTreeView.js'\nimport * as React from 'react'\n\nimport type { PluginComponent } from '../../../../typesClient.js'\n\nimport './index.css'\n\nexport const TreeViewPlugin: PluginComponent<undefined> = () => {\n const [editor] = useLexicalComposerContext()\n return (\n <TreeView\n editor={editor}\n timeTravelButtonClassName=\"debug-timetravel-button\"\n timeTravelPanelButtonClassName=\"debug-timetravel-panel-button\"\n timeTravelPanelClassName=\"debug-timetravel-panel\"\n timeTravelPanelSliderClassName=\"debug-timetravel-panel-slider\"\n treeTypeButtonClassName=\"debug-treetype-button\"\n viewClassName=\"tree-view-output\"\n />\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AACA,SAASC,yBAAyB,QAAQ;AAC1C,SAASC,QAAQ,QAAQ;AACzB,YAAYC,KAAA,MAAW;AAIvB,OAAO;AAEP,OAAO,MAAMC,cAAA,GAA6CA,CAAA;EAAA,MAAAC,CAAA,GAAAL,EAAA;EACxD,OAAAM,MAAA,IAAiBL,yBAAA;EAAA,IAAAM,EAAA;EAAA,IAAAF,CAAA,QAAAC,MAAA;IAEfC,EAAA,GAAAC,IAAA,CAACN,QAAA;MAAAI,MAAA;MAAAG,yBAAA,EAE2B;MAAAC,8BAAA,EACK;MAAAC,wBAAA,EACN;MAAAC,8BAAA,EACM;MAAAC,uBAAA,EACP;MAAAC,aAAA,EACV;;;;;;;SAPhBP,E;CAUJ","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","$createHeadingNode","$isHeadingNode","HeadingNode","$setBlocksType","$getSelection","$isRangeSelection","useEffect","H1Icon","H2Icon","H3Icon","H4Icon","H5Icon","H6Icon","createClientFeature","slashMenuBasicGroupWithItems","toolbarTextDropdownGroupWithItems","PAYLOAD_HEADING","$setHeading","headingSize","selection","iconImports","h1","h2","h3","h4","h5","h6","HeadingFeatureClient","props","enabledHeadingSizes","toolbarGroups","map","i","ChildComponent","isActive","node","getNodes","getTag","parent","getParent","key","label","i18n","t","headingLevel","charAt","onSelect","editor","update","order","markdownTransformers","nodes","plugins","Component","HeadingPlugin","position","sanitizedClientFeatureProps","slashMenu","groups","length","Icon","keywords","toolbarFixed","toolbarInline","t0","$","clientProps","t1","t2","undefined","t3","at","lowestAllowed","t4","t5","registerNodeTransform","includes","setTag"],"sources":["../../../../src/features/heading/client/index.tsx"],"sourcesContent":["'use client'\n\nimport type { HeadingTagType } from '@lexical/rich-text'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { $createHeadingNode, $isHeadingNode, HeadingNode } from '@lexical/rich-text'\nimport { $setBlocksType } from '@lexical/selection'\nimport { $getSelection, $isRangeSelection } from 'lexical'\nimport { useEffect } from 'react'\n\nimport type { ToolbarGroup } from '../../toolbars/types.js'\nimport type { PluginComponent } from '../../typesClient.js'\nimport type { HeadingFeatureProps } from '../server/index.js'\n\nimport { H1Icon } from '../../../lexical/ui/icons/H1/index.js'\nimport { H2Icon } from '../../../lexical/ui/icons/H2/index.js'\nimport { H3Icon } from '../../../lexical/ui/icons/H3/index.js'\nimport { H4Icon } from '../../../lexical/ui/icons/H4/index.js'\nimport { H5Icon } from '../../../lexical/ui/icons/H5/index.js'\nimport { H6Icon } from '../../../lexical/ui/icons/H6/index.js'\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { slashMenuBasicGroupWithItems } from '../../shared/slashMenu/basicGroup.js'\nimport { toolbarTextDropdownGroupWithItems } from '../../shared/toolbar/textDropdownGroup.js'\nimport { PAYLOAD_HEADING } from '../markdownTransformer.js'\n\nconst $setHeading = (headingSize: HeadingTagType) => {\n const selection = $getSelection()\n $setBlocksType(selection, () => $createHeadingNode(headingSize))\n}\n\nconst iconImports = {\n h1: H1Icon,\n h2: H2Icon,\n h3: H3Icon,\n h4: H4Icon,\n h5: H5Icon,\n h6: H6Icon,\n}\n\nexport const HeadingFeatureClient = createClientFeature<HeadingFeatureProps>(({ props }) => {\n const { enabledHeadingSizes = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] } = props\n\n const toolbarGroups: ToolbarGroup[] = [\n toolbarTextDropdownGroupWithItems(\n enabledHeadingSizes.map((headingSize, i) => {\n return {\n ChildComponent: iconImports[headingSize],\n isActive: ({ selection }) => {\n if (!$isRangeSelection(selection)) {\n return false\n }\n for (const node of selection.getNodes()) {\n if ($isHeadingNode(node) && node.getTag() === headingSize) {\n continue\n }\n\n const parent = node.getParent()\n if ($isHeadingNode(parent) && parent.getTag() === headingSize) {\n continue\n }\n\n return false\n }\n return true\n },\n key: headingSize,\n label: ({ i18n }) => {\n return i18n.t('lexical:heading:label', { headingLevel: headingSize.charAt(1) })\n },\n onSelect: ({ editor }) => {\n editor.update(() => {\n $setHeading(headingSize)\n })\n },\n order: i + 2,\n }\n }),\n ),\n ]\n\n return {\n markdownTransformers: [PAYLOAD_HEADING(enabledHeadingSizes)],\n nodes: [HeadingNode],\n plugins: [\n {\n Component: HeadingPlugin,\n position: 'normal',\n },\n ],\n sanitizedClientFeatureProps: props,\n slashMenu: {\n groups: enabledHeadingSizes?.length\n ? [\n slashMenuBasicGroupWithItems(\n enabledHeadingSizes.map((headingSize) => {\n return {\n Icon: iconImports[headingSize],\n key: `heading-${headingSize.charAt(1)}`,\n keywords: ['heading', headingSize],\n label: ({ i18n }) => {\n return i18n.t('lexical:heading:label', {\n headingLevel: headingSize.charAt(1),\n })\n },\n onSelect: ({ editor }) => {\n editor.update(() => {\n $setHeading(headingSize)\n })\n },\n }\n }),\n ),\n ]\n : [],\n },\n toolbarFixed: {\n groups: enabledHeadingSizes?.length ? toolbarGroups : [],\n },\n toolbarInline: {\n groups: enabledHeadingSizes?.length ? toolbarGroups : [],\n },\n }\n})\n\nconst HeadingPlugin: PluginComponent<HeadingFeatureProps> = ({ clientProps }) => {\n const { enabledHeadingSizes = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] } = clientProps\n const lowestAllowed = enabledHeadingSizes.at(-1)\n const [editor] = useLexicalComposerContext()\n\n useEffect(() => {\n if (!lowestAllowed || enabledHeadingSizes.length === 6) {\n return\n }\n return editor.registerNodeTransform(HeadingNode, (node) => {\n if (!enabledHeadingSizes.includes(node.getTag())) {\n node.setTag(lowestAllowed)\n }\n })\n }, [editor, enabledHeadingSizes, lowestAllowed])\n\n return null\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","$createHeadingNode","$isHeadingNode","HeadingNode","$setBlocksType","$getSelection","$isRangeSelection","useEffect","H1Icon","H2Icon","H3Icon","H4Icon","H5Icon","H6Icon","createClientFeature","slashMenuBasicGroupWithItems","toolbarTextDropdownGroupWithItems","PAYLOAD_HEADING","$setHeading","headingSize","selection","iconImports","h1","h2","h3","h4","h5","h6","HeadingFeatureClient","props","enabledHeadingSizes","toolbarGroups","map","i","ChildComponent","isActive","node","getNodes","getTag","parent","getParent","key","label","i18n","t","headingLevel","charAt","onSelect","editor","update","order","markdownTransformers","nodes","plugins","Component","HeadingPlugin","position","sanitizedClientFeatureProps","slashMenu","groups","length","Icon","keywords","toolbarFixed","toolbarInline","t0","$","clientProps","t1","t2","undefined","t3","at","lowestAllowed","t4","t5","registerNodeTransform","includes","setTag"],"sources":["../../../../src/features/heading/client/index.tsx"],"sourcesContent":["'use client'\n\nimport type { HeadingTagType } from '@lexical/rich-text'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { $createHeadingNode, $isHeadingNode, HeadingNode } from '@lexical/rich-text'\nimport { $setBlocksType } from '@lexical/selection'\nimport { $getSelection, $isRangeSelection } from 'lexical'\nimport { useEffect } from 'react'\n\nimport type { ToolbarGroup } from '../../toolbars/types.js'\nimport type { PluginComponent } from '../../typesClient.js'\nimport type { HeadingFeatureProps } from '../server/index.js'\n\nimport { H1Icon } from '../../../lexical/ui/icons/H1/index.js'\nimport { H2Icon } from '../../../lexical/ui/icons/H2/index.js'\nimport { H3Icon } from '../../../lexical/ui/icons/H3/index.js'\nimport { H4Icon } from '../../../lexical/ui/icons/H4/index.js'\nimport { H5Icon } from '../../../lexical/ui/icons/H5/index.js'\nimport { H6Icon } from '../../../lexical/ui/icons/H6/index.js'\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { slashMenuBasicGroupWithItems } from '../../shared/slashMenu/basicGroup.js'\nimport { toolbarTextDropdownGroupWithItems } from '../../shared/toolbar/textDropdownGroup.js'\nimport { PAYLOAD_HEADING } from '../markdownTransformer.js'\n\nconst $setHeading = (headingSize: HeadingTagType) => {\n const selection = $getSelection()\n $setBlocksType(selection, () => $createHeadingNode(headingSize))\n}\n\nconst iconImports = {\n h1: H1Icon,\n h2: H2Icon,\n h3: H3Icon,\n h4: H4Icon,\n h5: H5Icon,\n h6: H6Icon,\n}\n\nexport const HeadingFeatureClient = createClientFeature<HeadingFeatureProps>(({ props }) => {\n const { enabledHeadingSizes = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] } = props\n\n const toolbarGroups: ToolbarGroup[] = [\n toolbarTextDropdownGroupWithItems(\n enabledHeadingSizes.map((headingSize, i) => {\n return {\n ChildComponent: iconImports[headingSize],\n isActive: ({ selection }) => {\n if (!$isRangeSelection(selection)) {\n return false\n }\n for (const node of selection.getNodes()) {\n if ($isHeadingNode(node) && node.getTag() === headingSize) {\n continue\n }\n\n const parent = node.getParent()\n if ($isHeadingNode(parent) && parent.getTag() === headingSize) {\n continue\n }\n\n return false\n }\n return true\n },\n key: headingSize,\n label: ({ i18n }) => {\n return i18n.t('lexical:heading:label', { headingLevel: headingSize.charAt(1) })\n },\n onSelect: ({ editor }) => {\n editor.update(() => {\n $setHeading(headingSize)\n })\n },\n order: i + 2,\n }\n }),\n ),\n ]\n\n return {\n markdownTransformers: [PAYLOAD_HEADING(enabledHeadingSizes)],\n nodes: [HeadingNode],\n plugins: [\n {\n Component: HeadingPlugin,\n position: 'normal',\n },\n ],\n sanitizedClientFeatureProps: props,\n slashMenu: {\n groups: enabledHeadingSizes?.length\n ? [\n slashMenuBasicGroupWithItems(\n enabledHeadingSizes.map((headingSize) => {\n return {\n Icon: iconImports[headingSize],\n key: `heading-${headingSize.charAt(1)}`,\n keywords: ['heading', headingSize],\n label: ({ i18n }) => {\n return i18n.t('lexical:heading:label', {\n headingLevel: headingSize.charAt(1),\n })\n },\n onSelect: ({ editor }) => {\n editor.update(() => {\n $setHeading(headingSize)\n })\n },\n }\n }),\n ),\n ]\n : [],\n },\n toolbarFixed: {\n groups: enabledHeadingSizes?.length ? toolbarGroups : [],\n },\n toolbarInline: {\n groups: enabledHeadingSizes?.length ? toolbarGroups : [],\n },\n }\n})\n\nconst HeadingPlugin: PluginComponent<HeadingFeatureProps> = ({ clientProps }) => {\n const { enabledHeadingSizes = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] } = clientProps\n const lowestAllowed = enabledHeadingSizes.at(-1)\n const [editor] = useLexicalComposerContext()\n\n useEffect(() => {\n if (!lowestAllowed || enabledHeadingSizes.length === 6) {\n return\n }\n return editor.registerNodeTransform(HeadingNode, (node) => {\n if (!enabledHeadingSizes.includes(node.getTag())) {\n node.setTag(lowestAllowed)\n }\n })\n }, [editor, enabledHeadingSizes, lowestAllowed])\n\n return null\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export declare const ALLOWED_HEADING_TAGS: Set<string>;
2
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/features/heading/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,aAAgD,CAAA"}
@@ -0,0 +1,2 @@
1
+ export const ALLOWED_HEADING_TAGS = new Set(['h1', 'h2', 'h3', 'h4', 'h5', 'h6']);
2
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","names":["ALLOWED_HEADING_TAGS","Set"],"sources":["../../../src/features/heading/constants.ts"],"sourcesContent":["export const ALLOWED_HEADING_TAGS = new Set(['h1', 'h2', 'h3', 'h4', 'h5', 'h6'])\n"],"mappings":"AAAA,OAAO,MAAMA,oBAAA,GAAuB,IAAIC,GAAA,CAAI,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,KAAK","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/features/heading/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAUxD,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAExD,MAAM,MAAM,mBAAmB,GAAG;IAChC,mBAAmB,CAAC,EAAE,cAAc,EAAE,CAAA;CACvC,CAAA;AAED,eAAO,MAAM,cAAc,6HA8BzB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/features/heading/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAWxD,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAExD,MAAM,MAAM,mBAAmB,GAAG;IAChC,mBAAmB,CAAC,EAAE,cAAc,EAAE,CAAA;CACvC,CAAA;AAED,eAAO,MAAM,cAAc,6HA+BzB,CAAA"}
@@ -4,6 +4,7 @@ import { createNode } from '../../typeUtilities.js';
4
4
  import { PAYLOAD_HEADING } from '../markdownTransformer.js';
5
5
  import { i18n } from './i18n.js';
6
6
  import { createHeadingJSONSchema } from './schema.js';
7
+ import { headingValidation } from './validate.js';
7
8
  export const HeadingFeature = createServerFeature({
8
9
  feature: ({
9
10
  props
@@ -22,7 +23,10 @@ export const HeadingFeature = createServerFeature({
22
23
  markdownTransformers: enabledHeadingSizes.length > 0 ? [PAYLOAD_HEADING(enabledHeadingSizes)] : [],
23
24
  nodes: [createNode({
24
25
  jsonSchema: createHeadingJSONSchema(enabledHeadingSizes),
25
- node: HeadingNode
26
+ node: HeadingNode,
27
+ validations: [headingValidation({
28
+ enabledHeadingSizes
29
+ })]
26
30
  })],
27
31
  sanitizedServerFeatureProps: props
28
32
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["HeadingNode","createServerFeature","createNode","PAYLOAD_HEADING","i18n","createHeadingJSONSchema","HeadingFeature","feature","props","enabledHeadingSizes","sort","ClientFeature","clientFeatureProps","markdownTransformers","length","nodes","jsonSchema","node","sanitizedServerFeatureProps","key"],"sources":["../../../../src/features/heading/server/index.ts"],"sourcesContent":["import type { HeadingTagType } from '@lexical/rich-text'\n\nimport { HeadingNode } from '@lexical/rich-text'\n\nimport { createServerFeature } from '../../../utilities/createServerFeature.js'\nimport { createNode } from '../../typeUtilities.js'\nimport { PAYLOAD_HEADING } from '../markdownTransformer.js'\nimport { i18n } from './i18n.js'\nimport { createHeadingJSONSchema } from './schema.js'\n\nexport type { SerializedHeadingNode } from './schema.js'\n\nexport type HeadingFeatureProps = {\n enabledHeadingSizes?: HeadingTagType[]\n}\n\nexport const HeadingFeature = createServerFeature<\n HeadingFeatureProps,\n HeadingFeatureProps,\n HeadingFeatureProps\n>({\n feature: ({ props }) => {\n if (!props) {\n props = {}\n }\n\n const { enabledHeadingSizes = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] } = props\n\n enabledHeadingSizes.sort()\n\n return {\n ClientFeature: '@payloadcms/richtext-lexical/client#HeadingFeatureClient',\n clientFeatureProps: props,\n i18n,\n markdownTransformers:\n enabledHeadingSizes.length > 0 ? [PAYLOAD_HEADING(enabledHeadingSizes)] : [],\n nodes: [\n createNode({\n jsonSchema: createHeadingJSONSchema(enabledHeadingSizes),\n node: HeadingNode,\n }),\n ],\n sanitizedServerFeatureProps: props,\n }\n },\n key: 'heading',\n})\n"],"mappings":"AAEA,SAASA,WAAW,QAAQ;AAE5B,SAASC,mBAAmB,QAAQ;AACpC,SAASC,UAAU,QAAQ;AAC3B,SAASC,eAAe,QAAQ;AAChC,SAASC,IAAI,QAAQ;AACrB,SAASC,uBAAuB,QAAQ;AAQxC,OAAO,MAAMC,cAAA,GAAiBL,mBAAA,CAI5B;EACAM,OAAA,EAASA,CAAC;IAAEC;EAAK,CAAE;IACjB,IAAI,CAACA,KAAA,EAAO;MACVA,KAAA,GAAQ,CAAC;IACX;IAEA,MAAM;MAAEC,mBAAA,GAAsB,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM;IAAK,CAAE,GAAGD,KAAA;IAEvEC,mBAAA,CAAoBC,IAAI;IAExB,OAAO;MACLC,aAAA,EAAe;MACfC,kBAAA,EAAoBJ,KAAA;MACpBJ,IAAA;MACAS,oBAAA,EACEJ,mBAAA,CAAoBK,MAAM,GAAG,IAAI,CAACX,eAAA,CAAgBM,mBAAA,EAAqB,GAAG,EAAE;MAC9EM,KAAA,EAAO,CACLb,UAAA,CAAW;QACTc,UAAA,EAAYX,uBAAA,CAAwBI,mBAAA;QACpCQ,IAAA,EAAMjB;MACR,GACD;MACDkB,2BAAA,EAA6BV;IAC/B;EACF;EACAW,GAAA,EAAK;AACP","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["HeadingNode","createServerFeature","createNode","PAYLOAD_HEADING","i18n","createHeadingJSONSchema","headingValidation","HeadingFeature","feature","props","enabledHeadingSizes","sort","ClientFeature","clientFeatureProps","markdownTransformers","length","nodes","jsonSchema","node","validations","sanitizedServerFeatureProps","key"],"sources":["../../../../src/features/heading/server/index.ts"],"sourcesContent":["import type { HeadingTagType } from '@lexical/rich-text'\n\nimport { HeadingNode } from '@lexical/rich-text'\n\nimport { createServerFeature } from '../../../utilities/createServerFeature.js'\nimport { createNode } from '../../typeUtilities.js'\nimport { PAYLOAD_HEADING } from '../markdownTransformer.js'\nimport { i18n } from './i18n.js'\nimport { createHeadingJSONSchema } from './schema.js'\nimport { headingValidation } from './validate.js'\n\nexport type { SerializedHeadingNode } from './schema.js'\n\nexport type HeadingFeatureProps = {\n enabledHeadingSizes?: HeadingTagType[]\n}\n\nexport const HeadingFeature = createServerFeature<\n HeadingFeatureProps,\n HeadingFeatureProps,\n HeadingFeatureProps\n>({\n feature: ({ props }) => {\n if (!props) {\n props = {}\n }\n\n const { enabledHeadingSizes = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] } = props\n\n enabledHeadingSizes.sort()\n\n return {\n ClientFeature: '@payloadcms/richtext-lexical/client#HeadingFeatureClient',\n clientFeatureProps: props,\n i18n,\n markdownTransformers:\n enabledHeadingSizes.length > 0 ? [PAYLOAD_HEADING(enabledHeadingSizes)] : [],\n nodes: [\n createNode({\n jsonSchema: createHeadingJSONSchema(enabledHeadingSizes),\n node: HeadingNode,\n validations: [headingValidation({ enabledHeadingSizes })],\n }),\n ],\n sanitizedServerFeatureProps: props,\n }\n },\n key: 'heading',\n})\n"],"mappings":"AAEA,SAASA,WAAW,QAAQ;AAE5B,SAASC,mBAAmB,QAAQ;AACpC,SAASC,UAAU,QAAQ;AAC3B,SAASC,eAAe,QAAQ;AAChC,SAASC,IAAI,QAAQ;AACrB,SAASC,uBAAuB,QAAQ;AACxC,SAASC,iBAAiB,QAAQ;AAQlC,OAAO,MAAMC,cAAA,GAAiBN,mBAAA,CAI5B;EACAO,OAAA,EAASA,CAAC;IAAEC;EAAK,CAAE;IACjB,IAAI,CAACA,KAAA,EAAO;MACVA,KAAA,GAAQ,CAAC;IACX;IAEA,MAAM;MAAEC,mBAAA,GAAsB,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM;IAAK,CAAE,GAAGD,KAAA;IAEvEC,mBAAA,CAAoBC,IAAI;IAExB,OAAO;MACLC,aAAA,EAAe;MACfC,kBAAA,EAAoBJ,KAAA;MACpBL,IAAA;MACAU,oBAAA,EACEJ,mBAAA,CAAoBK,MAAM,GAAG,IAAI,CAACZ,eAAA,CAAgBO,mBAAA,EAAqB,GAAG,EAAE;MAC9EM,KAAA,EAAO,CACLd,UAAA,CAAW;QACTe,UAAA,EAAYZ,uBAAA,CAAwBK,mBAAA;QACpCQ,IAAA,EAAMlB,WAAA;QACNmB,WAAA,EAAa,CAACb,iBAAA,CAAkB;UAAEI;QAAoB;MACxD,GACD;MACDU,2BAAA,EAA6BX;IAC/B;EACF;EACAY,GAAA,EAAK;AACP","ignoreList":[]}
@@ -0,0 +1,6 @@
1
+ import type { HeadingTagType, SerializedHeadingNode } from '@lexical/rich-text';
2
+ import type { NodeValidation } from '../../typesServer.js';
3
+ export declare const headingValidation: ({ enabledHeadingSizes, }: {
4
+ enabledHeadingSizes: HeadingTagType[];
5
+ }) => NodeValidation<SerializedHeadingNode>;
6
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../../src/features/heading/server/validate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAE/E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAI1D,eAAO,MAAM,iBAAiB,6BAE3B;IACD,mBAAmB,EAAE,cAAc,EAAE,CAAA;CACtC,KAAG,cAAc,CAAC,qBAAqB,CAcvC,CAAA"}
@@ -0,0 +1,15 @@
1
+ import { ALLOWED_HEADING_TAGS } from '../constants.js';
2
+ export const headingValidation = ({
3
+ enabledHeadingSizes
4
+ }) => {
5
+ const allowedHeadingTags = new Set(enabledHeadingSizes.filter(tag => ALLOWED_HEADING_TAGS.has(tag)));
6
+ return ({
7
+ node
8
+ }) => {
9
+ if (allowedHeadingTags.has(node.tag)) {
10
+ return true;
11
+ }
12
+ return allowedHeadingTags.size > 0 ? `Heading tag must be one of ${Array.from(allowedHeadingTags).join(', ')}.` : 'Headings are not enabled.';
13
+ };
14
+ };
15
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","names":["ALLOWED_HEADING_TAGS","headingValidation","enabledHeadingSizes","allowedHeadingTags","Set","filter","tag","has","node","size","Array","from","join"],"sources":["../../../../src/features/heading/server/validate.ts"],"sourcesContent":["import type { HeadingTagType, SerializedHeadingNode } from '@lexical/rich-text'\n\nimport type { NodeValidation } from '../../typesServer.js'\n\nimport { ALLOWED_HEADING_TAGS } from '../constants.js'\n\nexport const headingValidation = ({\n enabledHeadingSizes,\n}: {\n enabledHeadingSizes: HeadingTagType[]\n}): NodeValidation<SerializedHeadingNode> => {\n const allowedHeadingTags = new Set(\n enabledHeadingSizes.filter((tag) => ALLOWED_HEADING_TAGS.has(tag)),\n )\n\n return ({ node }) => {\n if (allowedHeadingTags.has(node.tag)) {\n return true\n }\n\n return allowedHeadingTags.size > 0\n ? `Heading tag must be one of ${Array.from(allowedHeadingTags).join(', ')}.`\n : 'Headings are not enabled.'\n }\n}\n"],"mappings":"AAIA,SAASA,oBAAoB,QAAQ;AAErC,OAAO,MAAMC,iBAAA,GAAoBA,CAAC;EAChCC;AAAmB,CAGpB;EACC,MAAMC,kBAAA,GAAqB,IAAIC,GAAA,CAC7BF,mBAAA,CAAoBG,MAAM,CAAEC,GAAA,IAAQN,oBAAA,CAAqBO,GAAG,CAACD,GAAA;EAG/D,OAAO,CAAC;IAAEE;EAAI,CAAE;IACd,IAAIL,kBAAA,CAAmBI,GAAG,CAACC,IAAA,CAAKF,GAAG,GAAG;MACpC,OAAO;IACT;IAEA,OAAOH,kBAAA,CAAmBM,IAAI,GAAG,IAC7B,8BAA8BC,KAAA,CAAMC,IAAI,CAACR,kBAAA,EAAoBS,IAAI,CAAC,QAAQ,GAC1E;EACN;AACF","ignoreList":[]}
@@ -1,13 +1,23 @@
1
- import type { LexicalNode, SerializedLexicalNode } from 'lexical';
1
+ import type { DOMConversionMap, LexicalNode, SerializedLexicalNode } from 'lexical';
2
2
  import type { SerializedHorizontalRuleNode } from '../../server/schema.js';
3
3
  import { HorizontalRuleServerNode } from '../../server/nodes/HorizontalRuleNode.js';
4
4
  export declare class HorizontalRuleNode extends HorizontalRuleServerNode {
5
5
  static clone(node: HorizontalRuleServerNode): HorizontalRuleServerNode;
6
6
  static getType(): string;
7
+ /**
8
+ * Defines what happens if you copy an hr element from another page and paste it into the lexical editor
9
+ *
10
+ * This also determines the behavior of lexical's internal HTML -> Lexical converter
11
+ *
12
+ * Overrides the server implementation so pasting an `<hr>` creates the client
13
+ * {@link HorizontalRuleNode} the editor registered, instead of the server-only
14
+ * `HorizontalRuleServerNode` (which fails lexical's node class identity check).
15
+ */
16
+ static importDOM(): DOMConversionMap | null;
7
17
  /**
8
18
  * The data for this node is stored serialized as JSON. This is the "load function" of that node: it takes the saved data and converts it into a node.
9
19
  */
10
- static importJSON(serializedNode: SerializedHorizontalRuleNode): HorizontalRuleNode;
20
+ static importJSON(_serializedNode: Record<string, unknown> & SerializedHorizontalRuleNode): HorizontalRuleNode;
11
21
  /**
12
22
  * Allows you to render a React component within whatever createDOM returns.
13
23
  */
@@ -1 +1 @@
1
- {"version":3,"file":"HorizontalRuleNode.d.ts","sourceRoot":"","sources":["../../../../../src/features/horizontalRule/client/nodes/HorizontalRuleNode.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAuB,WAAW,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAKtF,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAA;AAE1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAA;AAEnF,qBAAa,kBAAmB,SAAQ,wBAAwB;IAC9D,OAAgB,KAAK,CAAC,IAAI,EAAE,wBAAwB,GAAG,wBAAwB,CAE9E;IAED,OAAgB,OAAO,IAAI,MAAM,CAEhC;IAED;;OAEG;IACH,OAAgB,UAAU,CAAC,cAAc,EAAE,4BAA4B,GAAG,kBAAkB,CAE3F;IAED;;OAEG;IACM,QAAQ,SAEhB;IAEQ,UAAU,IAAI,qBAAqB,CAE3C;CACF;AAMD,wBAAgB,yBAAyB,IAAI,kBAAkB,CAE9D;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GACnC,IAAI,IAAI,kBAAkB,CAE5B"}
1
+ {"version":3,"file":"HorizontalRuleNode.d.ts","sourceRoot":"","sources":["../../../../../src/features/horizontalRule/client/nodes/HorizontalRuleNode.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAEhB,WAAW,EACX,qBAAqB,EACtB,MAAM,SAAS,CAAA;AAKhB,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAA;AAE1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAA;AAEnF,qBAAa,kBAAmB,SAAQ,wBAAwB;IAC9D,OAAgB,KAAK,CAAC,IAAI,EAAE,wBAAwB,GAAG,wBAAwB,CAE9E;IAED,OAAgB,OAAO,IAAI,MAAM,CAEhC;IAED;;;;;;;;OAQG;IACH,OAAgB,SAAS,IAAI,gBAAgB,GAAG,IAAI,CAOnD;IAED;;OAEG;IACH,OAAgB,UAAU,CACxB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,4BAA4B,GACtE,kBAAkB,CAEpB;IAED;;OAEG;IACM,QAAQ,SAEhB;IAEQ,UAAU,IAAI,qBAAqB,CAE3C;CACF;AAMD,wBAAgB,yBAAyB,IAAI,kBAAkB,CAE9D;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GACnC,IAAI,IAAI,kBAAkB,CAE5B"}
@@ -11,9 +11,26 @@ export class HorizontalRuleNode extends HorizontalRuleServerNode {
11
11
  return super.getType();
12
12
  }
13
13
  /**
14
+ * Defines what happens if you copy an hr element from another page and paste it into the lexical editor
15
+ *
16
+ * This also determines the behavior of lexical's internal HTML -> Lexical converter
17
+ *
18
+ * Overrides the server implementation so pasting an `<hr>` creates the client
19
+ * {@link HorizontalRuleNode} the editor registered, instead of the server-only
20
+ * `HorizontalRuleServerNode` (which fails lexical's node class identity check).
21
+ */
22
+ static importDOM() {
23
+ return {
24
+ hr: () => ({
25
+ conversion: $convertHorizontalRuleElement,
26
+ priority: 0
27
+ })
28
+ };
29
+ }
30
+ /**
14
31
  * The data for this node is stored serialized as JSON. This is the "load function" of that node: it takes the saved data and converts it into a node.
15
32
  */
16
- static importJSON(serializedNode) {
33
+ static importJSON(_serializedNode) {
17
34
  return $createHorizontalRuleNode();
18
35
  }
19
36
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"HorizontalRuleNode.js","names":["$applyNodeReplacement","React","HorizontalRuleServerNode","HorizontalRuleNode","clone","node","getType","importJSON","serializedNode","$createHorizontalRuleNode","decorate","exportJSON","$convertHorizontalRuleElement","$isHorizontalRuleNode"],"sources":["../../../../../src/features/horizontalRule/client/nodes/HorizontalRuleNode.tsx"],"sourcesContent":["'use client'\nimport type { DOMConversionOutput, LexicalNode, SerializedLexicalNode } from 'lexical'\n\nimport { $applyNodeReplacement } from 'lexical'\nimport * as React from 'react'\n\nimport type { SerializedHorizontalRuleNode } from '../../server/schema.js'\n\nimport { HorizontalRuleServerNode } from '../../server/nodes/HorizontalRuleNode.js'\n\nexport class HorizontalRuleNode extends HorizontalRuleServerNode {\n static override clone(node: HorizontalRuleServerNode): HorizontalRuleServerNode {\n return super.clone(node)\n }\n\n static override getType(): string {\n return super.getType()\n }\n\n /**\n * The data for this node is stored serialized as JSON. This is the \"load function\" of that node: it takes the saved data and converts it into a node.\n */\n static override importJSON(serializedNode: SerializedHorizontalRuleNode): HorizontalRuleNode {\n return $createHorizontalRuleNode()\n }\n\n /**\n * Allows you to render a React component within whatever createDOM returns.\n */\n override decorate() {\n return null\n }\n\n override exportJSON(): SerializedLexicalNode {\n return super.exportJSON()\n }\n}\n\nfunction $convertHorizontalRuleElement(): DOMConversionOutput {\n return { node: $createHorizontalRuleNode() }\n}\n\nexport function $createHorizontalRuleNode(): HorizontalRuleNode {\n return $applyNodeReplacement(new HorizontalRuleNode())\n}\n\nexport function $isHorizontalRuleNode(\n node: LexicalNode | null | undefined,\n): node is HorizontalRuleNode {\n return node instanceof HorizontalRuleNode\n}\n"],"mappings":"AAAA;;AAGA,SAASA,qBAAqB,QAAQ;AACtC,YAAYC,KAAA,MAAW;AAIvB,SAASC,wBAAwB,QAAQ;AAEzC,OAAO,MAAMC,kBAAA,SAA2BD,wBAAA;EACtC,OAAgBE,MAAMC,IAA8B,EAA4B;IAC9E,OAAO,KAAK,CAACD,KAAA,CAAMC,IAAA;EACrB;EAEA,OAAgBC,QAAA,EAAkB;IAChC,OAAO,KAAK,CAACA,OAAA;EACf;EAEA;;;EAGA,OAAgBC,WAAWC,cAA4C,EAAsB;IAC3F,OAAOC,yBAAA;EACT;EAEA;;;EAGAC,QAASA,CAAA,EAAW;IAClB,OAAO;EACT;EAESC,WAAA,EAAoC;IAC3C,OAAO,KAAK,CAACA,UAAA;EACf;AACF;AAEA,SAASC,8BAAA;EACP,OAAO;IAAEP,IAAA,EAAMI,yBAAA;EAA4B;AAC7C;AAEA,OAAO,SAASA,0BAAA;EACd,OAAOT,qBAAA,CAAsB,IAAIG,kBAAA;AACnC;AAEA,OAAO,SAASU,sBACdR,IAAoC;EAEpC,OAAOA,IAAA,YAAgBF,kBAAA;AACzB","ignoreList":[]}
1
+ {"version":3,"file":"HorizontalRuleNode.js","names":["$applyNodeReplacement","React","HorizontalRuleServerNode","HorizontalRuleNode","clone","node","getType","importDOM","hr","conversion","$convertHorizontalRuleElement","priority","importJSON","_serializedNode","$createHorizontalRuleNode","decorate","exportJSON","$isHorizontalRuleNode"],"sources":["../../../../../src/features/horizontalRule/client/nodes/HorizontalRuleNode.tsx"],"sourcesContent":["'use client'\nimport type {\n DOMConversionMap,\n DOMConversionOutput,\n LexicalNode,\n SerializedLexicalNode,\n} from 'lexical'\n\nimport { $applyNodeReplacement } from 'lexical'\nimport * as React from 'react'\n\nimport type { SerializedHorizontalRuleNode } from '../../server/schema.js'\n\nimport { HorizontalRuleServerNode } from '../../server/nodes/HorizontalRuleNode.js'\n\nexport class HorizontalRuleNode extends HorizontalRuleServerNode {\n static override clone(node: HorizontalRuleServerNode): HorizontalRuleServerNode {\n return super.clone(node)\n }\n\n static override getType(): string {\n return super.getType()\n }\n\n /**\n * Defines what happens if you copy an hr element from another page and paste it into the lexical editor\n *\n * This also determines the behavior of lexical's internal HTML -> Lexical converter\n *\n * Overrides the server implementation so pasting an `<hr>` creates the client\n * {@link HorizontalRuleNode} the editor registered, instead of the server-only\n * `HorizontalRuleServerNode` (which fails lexical's node class identity check).\n */\n static override importDOM(): DOMConversionMap | null {\n return {\n hr: () => ({\n conversion: $convertHorizontalRuleElement,\n priority: 0,\n }),\n }\n }\n\n /**\n * The data for this node is stored serialized as JSON. This is the \"load function\" of that node: it takes the saved data and converts it into a node.\n */\n static override importJSON(\n _serializedNode: Record<string, unknown> & SerializedHorizontalRuleNode,\n ): HorizontalRuleNode {\n return $createHorizontalRuleNode()\n }\n\n /**\n * Allows you to render a React component within whatever createDOM returns.\n */\n override decorate() {\n return null\n }\n\n override exportJSON(): SerializedLexicalNode {\n return super.exportJSON()\n }\n}\n\nfunction $convertHorizontalRuleElement(): DOMConversionOutput {\n return { node: $createHorizontalRuleNode() }\n}\n\nexport function $createHorizontalRuleNode(): HorizontalRuleNode {\n return $applyNodeReplacement(new HorizontalRuleNode())\n}\n\nexport function $isHorizontalRuleNode(\n node: LexicalNode | null | undefined,\n): node is HorizontalRuleNode {\n return node instanceof HorizontalRuleNode\n}\n"],"mappings":"AAAA;;AAQA,SAASA,qBAAqB,QAAQ;AACtC,YAAYC,KAAA,MAAW;AAIvB,SAASC,wBAAwB,QAAQ;AAEzC,OAAO,MAAMC,kBAAA,SAA2BD,wBAAA;EACtC,OAAgBE,MAAMC,IAA8B,EAA4B;IAC9E,OAAO,KAAK,CAACD,KAAA,CAAMC,IAAA;EACrB;EAEA,OAAgBC,QAAA,EAAkB;IAChC,OAAO,KAAK,CAACA,OAAA;EACf;EAEA;;;;;;;;;EASA,OAAgBC,UAAA,EAAqC;IACnD,OAAO;MACLC,EAAA,EAAIA,CAAA,MAAO;QACTC,UAAA,EAAYC,6BAAA;QACZC,QAAA,EAAU;MACZ;IACF;EACF;EAEA;;;EAGA,OAAgBC,WACdC,eAAuE,EACnD;IACpB,OAAOC,yBAAA;EACT;EAEA;;;EAGAC,QAASA,CAAA,EAAW;IAClB,OAAO;EACT;EAESC,WAAA,EAAoC;IAC3C,OAAO,KAAK,CAACA,UAAA;EACf;AACF;AAEA,SAASN,8BAAA;EACP,OAAO;IAAEL,IAAA,EAAMS,yBAAA;EAA4B;AAC7C;AAEA,OAAO,SAASA,0BAAA;EACd,OAAOd,qBAAA,CAAsB,IAAIG,kBAAA;AACnC;AAEA,OAAO,SAASc,sBACdZ,IAAoC;EAEpC,OAAOA,IAAA,YAAgBF,kBAAA;AACzB","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","$findMatchingParent","$insertNodeToNearestRoot","$getRoot","$getSelection","$isRangeSelection","$isRootOrShadowRoot","COMMAND_PRIORITY_EDITOR","useEffect","INSERT_HORIZONTAL_RULE_COMMAND","$createHorizontalRuleNode","$isHorizontalRuleNode","HR_SELECTED_CLASS","HorizontalRulePlugin","$","editor","t0","t1","unregisterCommand","registerCommand","_temp","unregisterUpdateListener","registerUpdateListener","t2","editorState","read","root","children","getChildren","selection_0","hrEntries","i","length","child","element","getElementByKey","getKey","push","index","selection","isCollapsed","element_0","classList","remove","anchorNode","anchor","getNode","focusNode_0","focus","anchorTopLevel","_temp2","focusTopLevel","focusNode","_temp3","anchorIdx","indexOf","focusIdx","startIdx","Math","min","endIdx","max","element_1","add","type","horizontalRuleNode","n","getParent","n_0"],"sources":["../../../../../src/features/horizontalRule/client/plugin/index.tsx"],"sourcesContent":["'use client'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { $findMatchingParent, $insertNodeToNearestRoot } from '@lexical/utils'\nimport {\n $getRoot,\n $getSelection,\n $isRangeSelection,\n $isRootOrShadowRoot,\n COMMAND_PRIORITY_EDITOR,\n} from 'lexical'\nimport { useEffect } from 'react'\n\nimport type { PluginComponent } from '../../../typesClient.js'\n\nimport { INSERT_HORIZONTAL_RULE_COMMAND } from '../../server/nodes/HorizontalRuleNode.js'\nimport { $createHorizontalRuleNode, $isHorizontalRuleNode } from '../nodes/HorizontalRuleNode.js'\nimport './index.css'\n\nconst HR_SELECTED_CLASS = 'LexicalEditorTheme__hrSelected'\n\n/**\n * Registers the INSERT_HORIZONTAL_RULE_COMMAND lexical command and defines the behavior for when it is called.\n */\nexport const HorizontalRulePlugin: PluginComponent<undefined> = () => {\n const [editor] = useLexicalComposerContext()\n\n useEffect(() => {\n const unregisterCommand = editor.registerCommand(\n INSERT_HORIZONTAL_RULE_COMMAND,\n (type) => {\n const selection = $getSelection()\n\n if (!$isRangeSelection(selection)) {\n return false\n }\n\n const focusNode = selection.focus.getNode()\n\n if (focusNode !== null) {\n const horizontalRuleNode = $createHorizontalRuleNode()\n $insertNodeToNearestRoot(horizontalRuleNode)\n }\n\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n )\n\n const unregisterUpdateListener = editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n const root = $getRoot()\n const children = root.getChildren()\n const selection = $getSelection()\n\n // Collect all HR nodes and their elements\n const hrEntries: Array<{ element: HTMLElement; index: number }> = []\n for (let i = 0; i < children.length; i++) {\n const child = children[i]\n if ($isHorizontalRuleNode(child)) {\n const element = editor.getElementByKey(child.getKey())\n if (element) {\n hrEntries.push({ element, index: i })\n }\n }\n }\n\n if (hrEntries.length === 0) {\n return\n }\n\n if (!$isRangeSelection(selection) || selection.isCollapsed()) {\n // Remove range-selection highlighting from all HRs\n for (const { element } of hrEntries) {\n element.classList.remove(HR_SELECTED_CLASS)\n }\n return\n }\n\n const anchorNode = selection.anchor.getNode()\n const focusNode = selection.focus.getNode()\n\n const anchorTopLevel =\n $findMatchingParent(anchorNode, (n) => $isRootOrShadowRoot(n.getParent())) || anchorNode\n const focusTopLevel =\n $findMatchingParent(focusNode, (n) => $isRootOrShadowRoot(n.getParent())) || focusNode\n\n const anchorIdx = children.indexOf(anchorTopLevel)\n const focusIdx = children.indexOf(focusTopLevel)\n\n if (anchorIdx === -1 || focusIdx === -1) {\n return\n }\n\n const startIdx = Math.min(anchorIdx, focusIdx)\n const endIdx = Math.max(anchorIdx, focusIdx)\n\n for (const { element, index } of hrEntries) {\n if (index >= startIdx && index <= endIdx) {\n element.classList.add(HR_SELECTED_CLASS)\n } else {\n element.classList.remove(HR_SELECTED_CLASS)\n }\n }\n })\n })\n\n return () => {\n unregisterCommand()\n unregisterUpdateListener()\n }\n }, [editor])\n\n return null\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","$findMatchingParent","$insertNodeToNearestRoot","$getRoot","$getSelection","$isRangeSelection","$isRootOrShadowRoot","COMMAND_PRIORITY_EDITOR","useEffect","INSERT_HORIZONTAL_RULE_COMMAND","$createHorizontalRuleNode","$isHorizontalRuleNode","HR_SELECTED_CLASS","HorizontalRulePlugin","$","editor","t0","t1","unregisterCommand","registerCommand","_temp","unregisterUpdateListener","registerUpdateListener","t2","editorState","read","root","children","getChildren","selection_0","hrEntries","i","length","child","element","getElementByKey","getKey","push","index","selection","isCollapsed","element_0","classList","remove","anchorNode","anchor","getNode","focusNode_0","focus","anchorTopLevel","_temp2","focusTopLevel","focusNode","_temp3","anchorIdx","indexOf","focusIdx","startIdx","Math","min","endIdx","max","element_1","add","type","horizontalRuleNode","n","getParent","n_0"],"sources":["../../../../../src/features/horizontalRule/client/plugin/index.tsx"],"sourcesContent":["'use client'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { $findMatchingParent, $insertNodeToNearestRoot } from '@lexical/utils'\nimport {\n $getRoot,\n $getSelection,\n $isRangeSelection,\n $isRootOrShadowRoot,\n COMMAND_PRIORITY_EDITOR,\n} from 'lexical'\nimport { useEffect } from 'react'\n\nimport type { PluginComponent } from '../../../typesClient.js'\n\nimport { INSERT_HORIZONTAL_RULE_COMMAND } from '../../server/nodes/HorizontalRuleNode.js'\nimport { $createHorizontalRuleNode, $isHorizontalRuleNode } from '../nodes/HorizontalRuleNode.js'\nimport './index.css'\n\nconst HR_SELECTED_CLASS = 'LexicalEditorTheme__hrSelected'\n\n/**\n * Registers the INSERT_HORIZONTAL_RULE_COMMAND lexical command and defines the behavior for when it is called.\n */\nexport const HorizontalRulePlugin: PluginComponent<undefined> = () => {\n const [editor] = useLexicalComposerContext()\n\n useEffect(() => {\n const unregisterCommand = editor.registerCommand(\n INSERT_HORIZONTAL_RULE_COMMAND,\n (type) => {\n const selection = $getSelection()\n\n if (!$isRangeSelection(selection)) {\n return false\n }\n\n const focusNode = selection.focus.getNode()\n\n if (focusNode !== null) {\n const horizontalRuleNode = $createHorizontalRuleNode()\n $insertNodeToNearestRoot(horizontalRuleNode)\n }\n\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n )\n\n const unregisterUpdateListener = editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n const root = $getRoot()\n const children = root.getChildren()\n const selection = $getSelection()\n\n // Collect all HR nodes and their elements\n const hrEntries: Array<{ element: HTMLElement; index: number }> = []\n for (let i = 0; i < children.length; i++) {\n const child = children[i]\n if ($isHorizontalRuleNode(child)) {\n const element = editor.getElementByKey(child.getKey())\n if (element) {\n hrEntries.push({ element, index: i })\n }\n }\n }\n\n if (hrEntries.length === 0) {\n return\n }\n\n if (!$isRangeSelection(selection) || selection.isCollapsed()) {\n // Remove range-selection highlighting from all HRs\n for (const { element } of hrEntries) {\n element.classList.remove(HR_SELECTED_CLASS)\n }\n return\n }\n\n const anchorNode = selection.anchor.getNode()\n const focusNode = selection.focus.getNode()\n\n const anchorTopLevel =\n $findMatchingParent(anchorNode, (n) => $isRootOrShadowRoot(n.getParent())) || anchorNode\n const focusTopLevel =\n $findMatchingParent(focusNode, (n) => $isRootOrShadowRoot(n.getParent())) || focusNode\n\n const anchorIdx = children.indexOf(anchorTopLevel)\n const focusIdx = children.indexOf(focusTopLevel)\n\n if (anchorIdx === -1 || focusIdx === -1) {\n return\n }\n\n const startIdx = Math.min(anchorIdx, focusIdx)\n const endIdx = Math.max(anchorIdx, focusIdx)\n\n for (const { element, index } of hrEntries) {\n if (index >= startIdx && index <= endIdx) {\n element.classList.add(HR_SELECTED_CLASS)\n } else {\n element.classList.remove(HR_SELECTED_CLASS)\n }\n }\n })\n })\n\n return () => {\n unregisterCommand()\n unregisterUpdateListener()\n }\n }, [editor])\n\n return null\n}\n"],"mappings":"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","ignoreList":[]}
@@ -22,7 +22,7 @@ export declare class HorizontalRuleServerNode extends DecoratorNode<null | React
22
22
  /**
23
23
  * The data for this node is stored serialized as JSON. This is the "load function" of that node: it takes the saved data and converts it into a node.
24
24
  */
25
- static importJSON(serializedNode: SerializedHorizontalRuleNode): HorizontalRuleServerNode;
25
+ static importJSON(_serializedNode: Record<string, unknown> & SerializedHorizontalRuleNode): HorizontalRuleServerNode;
26
26
  /**
27
27
  * Determines how the hr element is rendered in the lexical editor. This is only the "initial" / "outer" HTML element.
28
28
  */
@@ -1 +1 @@
1
- {"version":3,"file":"HorizontalRuleNode.d.ts","sourceRoot":"","sources":["../../../../../src/features/horizontalRule/server/nodes/HorizontalRuleNode.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAEhB,eAAe,EACf,YAAY,EACZ,cAAc,EACd,WAAW,EACX,qBAAqB,EACtB,MAAM,SAAS,CAAA;AAChB,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAA;AAGnC,OAAO,EAAwC,aAAa,EAAE,MAAM,SAAS,CAAA;AAE7E,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAA;AAEhE,eAAO,MAAM,8BAA8B,EAAE,cAAc,CAAC,IAAI,CAE/D,CAAA;AAED;;;;;;GAMG;AACH,qBAAa,wBAAyB,SAAQ,aAAa,CAAC,IAAI,GAAG,KAAK,CAAC,YAAY,CAAC;IACpF,OAAgB,KAAK,CAAC,IAAI,EAAE,wBAAwB,GAAG,wBAAwB,CAE9E;IAED,OAAgB,OAAO,IAAI,MAAM,CAEhC;IAED;;;;OAIG;IACH,OAAgB,SAAS,IAAI,gBAAgB,GAAG,IAAI,CAOnD;IAED;;OAEG;IACH,OAAgB,UAAU,CACxB,cAAc,EAAE,4BAA4B,GAC3C,wBAAwB,CAE1B;IAED;;OAEG;IACM,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,WAAW,CAIpD;IAEQ,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,YAAY,CAE7C;IAED;;;;OAIG;IACM,SAAS,IAAI,eAAe,CAEpC;IACD;;OAEG;IACM,UAAU,IAAI,qBAAqB,CAK3C;IAEQ,cAAc,IAAI,MAAM,CAEhC;IAEQ,QAAQ,IAAI,KAAK,CAEzB;IAEQ,SAAS,IAAI,OAAO,CAE5B;CACF;AAMD,wBAAgB,+BAA+B,IAAI,wBAAwB,CAE1E;AAED,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GACnC,IAAI,IAAI,wBAAwB,CAElC"}
1
+ {"version":3,"file":"HorizontalRuleNode.d.ts","sourceRoot":"","sources":["../../../../../src/features/horizontalRule/server/nodes/HorizontalRuleNode.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAEhB,eAAe,EACf,YAAY,EACZ,cAAc,EACd,WAAW,EACX,qBAAqB,EACtB,MAAM,SAAS,CAAA;AAChB,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAA;AAGnC,OAAO,EAAwC,aAAa,EAAE,MAAM,SAAS,CAAA;AAE7E,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAA;AAEhE,eAAO,MAAM,8BAA8B,EAAE,cAAc,CAAC,IAAI,CAE/D,CAAA;AAED;;;;;;GAMG;AACH,qBAAa,wBAAyB,SAAQ,aAAa,CAAC,IAAI,GAAG,KAAK,CAAC,YAAY,CAAC;IACpF,OAAgB,KAAK,CAAC,IAAI,EAAE,wBAAwB,GAAG,wBAAwB,CAE9E;IAED,OAAgB,OAAO,IAAI,MAAM,CAEhC;IAED;;;;OAIG;IACH,OAAgB,SAAS,IAAI,gBAAgB,GAAG,IAAI,CAOnD;IAED;;OAEG;IACH,OAAgB,UAAU,CACxB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,4BAA4B,GACtE,wBAAwB,CAE1B;IAED;;OAEG;IACM,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,WAAW,CAIpD;IAEQ,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,YAAY,CAE7C;IAED;;;;OAIG;IACM,SAAS,IAAI,eAAe,CAEpC;IACD;;OAEG;IACM,UAAU,IAAI,qBAAqB,CAK3C;IAEQ,cAAc,IAAI,MAAM,CAEhC;IAEQ,QAAQ,IAAI,KAAK,CAEzB;IAEQ,SAAS,IAAI,OAAO,CAE5B;CACF;AAMD,wBAAgB,+BAA+B,IAAI,wBAAwB,CAE1E;AAED,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GACnC,IAAI,IAAI,wBAAwB,CAElC"}
@@ -31,7 +31,7 @@ export class HorizontalRuleServerNode extends DecoratorNode {
31
31
  /**
32
32
  * The data for this node is stored serialized as JSON. This is the "load function" of that node: it takes the saved data and converts it into a node.
33
33
  */
34
- static importJSON(serializedNode) {
34
+ static importJSON(_serializedNode) {
35
35
  return $createHorizontalRuleServerNode();
36
36
  }
37
37
  /**
@@ -60,8 +60,8 @@ export class HorizontalRuleServerNode extends DecoratorNode {
60
60
  */
61
61
  exportJSON() {
62
62
  return {
63
- type: 'horizontalrule',
64
- version: 1
63
+ ...super.exportJSON(),
64
+ type: 'horizontalrule'
65
65
  };
66
66
  }
67
67
  getTextContent() {
@@ -1 +1 @@
1
- {"version":3,"file":"HorizontalRuleNode.js","names":["addClassNamesToElement","$applyNodeReplacement","createCommand","DecoratorNode","INSERT_HORIZONTAL_RULE_COMMAND","HorizontalRuleServerNode","clone","node","__key","getType","importDOM","hr","conversion","$convertHorizontalRuleElement","priority","importJSON","serializedNode","$createHorizontalRuleServerNode","createDOM","config","element","document","createElement","theme","decorate","exportDOM","exportJSON","type","version","getTextContent","isInline","updateDOM","$isHorizontalRuleServerNode"],"sources":["../../../../../src/features/horizontalRule/server/nodes/HorizontalRuleNode.tsx"],"sourcesContent":["import type {\n DOMConversionMap,\n DOMConversionOutput,\n DOMExportOutput,\n EditorConfig,\n LexicalCommand,\n LexicalNode,\n SerializedLexicalNode,\n} from 'lexical'\nimport type * as React from 'react'\n\nimport { addClassNamesToElement } from '@lexical/utils'\nimport { $applyNodeReplacement, createCommand, DecoratorNode } from 'lexical'\n\nimport type { SerializedHorizontalRuleNode } from '../schema.js'\n\nexport const INSERT_HORIZONTAL_RULE_COMMAND: LexicalCommand<void> = createCommand(\n 'INSERT_HORIZONTAL_RULE_COMMAND',\n)\n\n/**\n * This node is a DecoratorNode. DecoratorNodes allow you to render React components in the editor.\n *\n * They need both createDom and decorate functions. createDom => outside of the html. decorate => React Component inside of the html.\n *\n * If we used DecoratorBlockNode instead, we would only need a decorate method\n */\nexport class HorizontalRuleServerNode extends DecoratorNode<null | React.ReactElement> {\n static override clone(node: HorizontalRuleServerNode): HorizontalRuleServerNode {\n return new this(node.__key)\n }\n\n static override getType(): string {\n return 'horizontalrule'\n }\n\n /**\n * Defines what happens if you copy an hr element from another page and paste it into the lexical editor\n *\n * This also determines the behavior of lexical's internal HTML -> Lexical converter\n */\n static override importDOM(): DOMConversionMap | null {\n return {\n hr: () => ({\n conversion: $convertHorizontalRuleElement,\n priority: 0,\n }),\n }\n }\n\n /**\n * The data for this node is stored serialized as JSON. This is the \"load function\" of that node: it takes the saved data and converts it into a node.\n */\n static override importJSON(\n serializedNode: SerializedHorizontalRuleNode,\n ): HorizontalRuleServerNode {\n return $createHorizontalRuleServerNode()\n }\n\n /**\n * Determines how the hr element is rendered in the lexical editor. This is only the \"initial\" / \"outer\" HTML element.\n */\n override createDOM(config: EditorConfig): HTMLElement {\n const element = document.createElement('hr')\n addClassNamesToElement(element, config.theme.hr)\n return element\n }\n\n override decorate(): null | React.ReactElement {\n return null\n }\n\n /**\n * Opposite of importDOM, this function defines what happens when you copy an hr element from the lexical editor and paste it into another page.\n *\n * This also determines the behavior of lexical's internal Lexical -> HTML converter\n */\n override exportDOM(): DOMExportOutput {\n return { element: document.createElement('hr') }\n }\n /**\n * Opposite of importJSON. This determines what data is saved in the database / in the lexical editor state.\n */\n override exportJSON(): SerializedLexicalNode {\n return {\n type: 'horizontalrule',\n version: 1,\n }\n }\n\n override getTextContent(): string {\n return '\\n'\n }\n\n override isInline(): false {\n return false\n }\n\n override updateDOM(): boolean {\n return false\n }\n}\n\nfunction $convertHorizontalRuleElement(): DOMConversionOutput {\n return { node: $createHorizontalRuleServerNode() }\n}\n\nexport function $createHorizontalRuleServerNode(): HorizontalRuleServerNode {\n return $applyNodeReplacement(new HorizontalRuleServerNode())\n}\n\nexport function $isHorizontalRuleServerNode(\n node: LexicalNode | null | undefined,\n): node is HorizontalRuleServerNode {\n return node instanceof HorizontalRuleServerNode\n}\n"],"mappings":"AAWA,SAASA,sBAAsB,QAAQ;AACvC,SAASC,qBAAqB,EAAEC,aAAa,EAAEC,aAAa,QAAQ;AAIpE,OAAO,MAAMC,8BAAA,GAAuDF,aAAA,CAClE;AAGF;;;;;;;AAOA,OAAO,MAAMG,wBAAA,SAAiCF,aAAA;EAC5C,OAAgBG,MAAMC,IAA8B,EAA4B;IAC9E,OAAO,IAAI,IAAI,CAACA,IAAA,CAAKC,KAAK;EAC5B;EAEA,OAAgBC,QAAA,EAAkB;IAChC,OAAO;EACT;EAEA;;;;;EAKA,OAAgBC,UAAA,EAAqC;IACnD,OAAO;MACLC,EAAA,EAAIA,CAAA,MAAO;QACTC,UAAA,EAAYC,6BAAA;QACZC,QAAA,EAAU;MACZ;IACF;EACF;EAEA;;;EAGA,OAAgBC,WACdC,cAA4C,EAClB;IAC1B,OAAOC,+BAAA;EACT;EAEA;;;EAGAC,SAASA,CAAUC,MAAoB,EAAe;IACpD,MAAMC,OAAA,GAAUC,QAAA,CAASC,aAAa,CAAC;IACvCtB,sBAAA,CAAuBoB,OAAA,EAASD,MAAA,CAAOI,KAAK,CAACZ,EAAE;IAC/C,OAAOS,OAAA;EACT;EAESI,SAAA,EAAsC;IAC7C,OAAO;EACT;EAEA;;;;;EAKAC,SAASA,CAAA,EAA6B;IACpC,OAAO;MAAEL,OAAA,EAASC,QAAA,CAASC,aAAa,CAAC;IAAM;EACjD;EACA;;;EAGAI,UAASA,CAAA,EAAoC;IAC3C,OAAO;MACLC,IAAA,EAAM;MACNC,OAAA,EAAS;IACX;EACF;EAESC,eAAA,EAAyB;IAChC,OAAO;EACT;EAESC,SAAA,EAAkB;IACzB,OAAO;EACT;EAESC,UAAA,EAAqB;IAC5B,OAAO;EACT;AACF;AAEA,SAASlB,8BAAA;EACP,OAAO;IAAEN,IAAA,EAAMU,+BAAA;EAAkC;AACnD;AAEA,OAAO,SAASA,gCAAA;EACd,OAAOhB,qBAAA,CAAsB,IAAII,wBAAA;AACnC;AAEA,OAAO,SAAS2B,4BACdzB,IAAoC;EAEpC,OAAOA,IAAA,YAAgBF,wBAAA;AACzB","ignoreList":[]}
1
+ {"version":3,"file":"HorizontalRuleNode.js","names":["addClassNamesToElement","$applyNodeReplacement","createCommand","DecoratorNode","INSERT_HORIZONTAL_RULE_COMMAND","HorizontalRuleServerNode","clone","node","__key","getType","importDOM","hr","conversion","$convertHorizontalRuleElement","priority","importJSON","_serializedNode","$createHorizontalRuleServerNode","createDOM","config","element","document","createElement","theme","decorate","exportDOM","exportJSON","type","getTextContent","isInline","updateDOM","$isHorizontalRuleServerNode"],"sources":["../../../../../src/features/horizontalRule/server/nodes/HorizontalRuleNode.tsx"],"sourcesContent":["import type {\n DOMConversionMap,\n DOMConversionOutput,\n DOMExportOutput,\n EditorConfig,\n LexicalCommand,\n LexicalNode,\n SerializedLexicalNode,\n} from 'lexical'\nimport type * as React from 'react'\n\nimport { addClassNamesToElement } from '@lexical/utils'\nimport { $applyNodeReplacement, createCommand, DecoratorNode } from 'lexical'\n\nimport type { SerializedHorizontalRuleNode } from '../schema.js'\n\nexport const INSERT_HORIZONTAL_RULE_COMMAND: LexicalCommand<void> = createCommand(\n 'INSERT_HORIZONTAL_RULE_COMMAND',\n)\n\n/**\n * This node is a DecoratorNode. DecoratorNodes allow you to render React components in the editor.\n *\n * They need both createDom and decorate functions. createDom => outside of the html. decorate => React Component inside of the html.\n *\n * If we used DecoratorBlockNode instead, we would only need a decorate method\n */\nexport class HorizontalRuleServerNode extends DecoratorNode<null | React.ReactElement> {\n static override clone(node: HorizontalRuleServerNode): HorizontalRuleServerNode {\n return new this(node.__key)\n }\n\n static override getType(): string {\n return 'horizontalrule'\n }\n\n /**\n * Defines what happens if you copy an hr element from another page and paste it into the lexical editor\n *\n * This also determines the behavior of lexical's internal HTML -> Lexical converter\n */\n static override importDOM(): DOMConversionMap | null {\n return {\n hr: () => ({\n conversion: $convertHorizontalRuleElement,\n priority: 0,\n }),\n }\n }\n\n /**\n * The data for this node is stored serialized as JSON. This is the \"load function\" of that node: it takes the saved data and converts it into a node.\n */\n static override importJSON(\n _serializedNode: Record<string, unknown> & SerializedHorizontalRuleNode,\n ): HorizontalRuleServerNode {\n return $createHorizontalRuleServerNode()\n }\n\n /**\n * Determines how the hr element is rendered in the lexical editor. This is only the \"initial\" / \"outer\" HTML element.\n */\n override createDOM(config: EditorConfig): HTMLElement {\n const element = document.createElement('hr')\n addClassNamesToElement(element, config.theme.hr)\n return element\n }\n\n override decorate(): null | React.ReactElement {\n return null\n }\n\n /**\n * Opposite of importDOM, this function defines what happens when you copy an hr element from the lexical editor and paste it into another page.\n *\n * This also determines the behavior of lexical's internal Lexical -> HTML converter\n */\n override exportDOM(): DOMExportOutput {\n return { element: document.createElement('hr') }\n }\n /**\n * Opposite of importJSON. This determines what data is saved in the database / in the lexical editor state.\n */\n override exportJSON(): SerializedLexicalNode {\n return {\n ...super.exportJSON(),\n type: 'horizontalrule',\n }\n }\n\n override getTextContent(): string {\n return '\\n'\n }\n\n override isInline(): false {\n return false\n }\n\n override updateDOM(): boolean {\n return false\n }\n}\n\nfunction $convertHorizontalRuleElement(): DOMConversionOutput {\n return { node: $createHorizontalRuleServerNode() }\n}\n\nexport function $createHorizontalRuleServerNode(): HorizontalRuleServerNode {\n return $applyNodeReplacement(new HorizontalRuleServerNode())\n}\n\nexport function $isHorizontalRuleServerNode(\n node: LexicalNode | null | undefined,\n): node is HorizontalRuleServerNode {\n return node instanceof HorizontalRuleServerNode\n}\n"],"mappings":"AAWA,SAASA,sBAAsB,QAAQ;AACvC,SAASC,qBAAqB,EAAEC,aAAa,EAAEC,aAAa,QAAQ;AAIpE,OAAO,MAAMC,8BAAA,GAAuDF,aAAA,CAClE;AAGF;;;;;;;AAOA,OAAO,MAAMG,wBAAA,SAAiCF,aAAA;EAC5C,OAAgBG,MAAMC,IAA8B,EAA4B;IAC9E,OAAO,IAAI,IAAI,CAACA,IAAA,CAAKC,KAAK;EAC5B;EAEA,OAAgBC,QAAA,EAAkB;IAChC,OAAO;EACT;EAEA;;;;;EAKA,OAAgBC,UAAA,EAAqC;IACnD,OAAO;MACLC,EAAA,EAAIA,CAAA,MAAO;QACTC,UAAA,EAAYC,6BAAA;QACZC,QAAA,EAAU;MACZ;IACF;EACF;EAEA;;;EAGA,OAAgBC,WACdC,eAAuE,EAC7C;IAC1B,OAAOC,+BAAA;EACT;EAEA;;;EAGAC,SAASA,CAAUC,MAAoB,EAAe;IACpD,MAAMC,OAAA,GAAUC,QAAA,CAASC,aAAa,CAAC;IACvCtB,sBAAA,CAAuBoB,OAAA,EAASD,MAAA,CAAOI,KAAK,CAACZ,EAAE;IAC/C,OAAOS,OAAA;EACT;EAESI,SAAA,EAAsC;IAC7C,OAAO;EACT;EAEA;;;;;EAKAC,SAASA,CAAA,EAA6B;IACpC,OAAO;MAAEL,OAAA,EAASC,QAAA,CAASC,aAAa,CAAC;IAAM;EACjD;EACA;;;EAGAI,UAASA,CAAA,EAAoC;IAC3C,OAAO;MACL,GAAG,KAAK,CAACA,UAAA,EAAY;MACrBC,IAAA,EAAM;IACR;EACF;EAESC,eAAA,EAAyB;IAChC,OAAO;EACT;EAESC,SAAA,EAAkB;IACzB,OAAO;EACT;EAESC,UAAA,EAAqB;IAC5B,OAAO;EACT;AACF;AAEA,SAASjB,8BAAA;EACP,OAAO;IAAEN,IAAA,EAAMU,+BAAA;EAAkC;AACnD;AAEA,OAAO,SAASA,gCAAA;EACd,OAAOhB,qBAAA,CAAsB,IAAII,wBAAA;AACnC;AAEA,OAAO,SAAS0B,4BACdxB,IAAoC;EAEpC,OAAOA,IAAA,YAAgBF,wBAAA;AACzB","ignoreList":[]}
@@ -1,6 +1,7 @@
1
1
  import type { JSONSchemaFn } from '../../typesServer.js';
2
2
  export interface SerializedHorizontalRuleNode {
3
3
  type: 'horizontalrule';
4
+ /** @deprecated Ignored when loading. Typed as required only to match Lexical's types: rich text sent through the API, CLI or MCP may not contain it. */
4
5
  version: number;
5
6
  }
6
7
  export declare const horizontalRuleNodeJSONSchema: JSONSchemaFn;
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/features/horizontalRule/server/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAExD,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,gBAAgB,CAAA;IACtB,OAAO,EAAE,MAAM,CAAA;CAChB;AAQD,eAAO,MAAM,4BAA4B,EAAE,YAY1C,CAAA"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/features/horizontalRule/server/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAIxD,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,gBAAgB,CAAA;IACtB,wJAAwJ;IACxJ,OAAO,EAAE,MAAM,CAAA;CAChB;AASD,eAAO,MAAM,4BAA4B,EAAE,YAY1C,CAAA"}
@@ -1,5 +1,8 @@
1
- /** MUST stay byte-for-byte in sync with the runtime `SerializedHorizontalRuleNode` declared above. */const SERIALIZED_HORIZONTAL_RULE_NODE_TS = `export interface SerializedHorizontalRuleNode {
1
+ import { versionSchema } from '../../../types/jsonSchemaHelpers.js';
2
+ /** MUST stay byte-for-byte in sync with the runtime `SerializedHorizontalRuleNode` declared above. */
3
+ const SERIALIZED_HORIZONTAL_RULE_NODE_TS = `export interface SerializedHorizontalRuleNode {
2
4
  type: 'horizontalrule';
5
+ /** @deprecated Ignored when loading. Typed as required only to match Lexical's types: rich text sent through the API, CLI or MCP may not contain it. */
3
6
  version: number;
4
7
  }`;
5
8
  export const horizontalRuleNodeJSONSchema = ({
@@ -14,11 +17,9 @@ export const horizontalRuleNodeJSONSchema = ({
14
17
  type: 'string',
15
18
  const: 'horizontalrule'
16
19
  },
17
- version: {
18
- type: 'integer'
19
- }
20
+ version: versionSchema
20
21
  },
21
- required: ['type', 'version'],
22
+ required: ['type'],
22
23
  tsType: 'SerializedHorizontalRuleNode'
23
24
  };
24
25
  };
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","names":["SERIALIZED_HORIZONTAL_RULE_NODE_TS","horizontalRuleNodeJSONSchema","typeStringDefinitions","add","type","additionalProperties","properties","const","version","required","tsType"],"sources":["../../../../src/features/horizontalRule/server/schema.ts"],"sourcesContent":["import type { JSONSchemaFn } from '../../typesServer.js'\n\nexport interface SerializedHorizontalRuleNode {\n type: 'horizontalrule'\n version: number\n}\n\n/** MUST stay byte-for-byte in sync with the runtime `SerializedHorizontalRuleNode` declared above. */\nconst SERIALIZED_HORIZONTAL_RULE_NODE_TS = `export interface SerializedHorizontalRuleNode {\n type: 'horizontalrule';\n version: number;\n}`\n\nexport const horizontalRuleNodeJSONSchema: JSONSchemaFn = ({ typeStringDefinitions }) => {\n typeStringDefinitions.add(SERIALIZED_HORIZONTAL_RULE_NODE_TS)\n return {\n type: 'object',\n additionalProperties: false,\n properties: {\n type: { type: 'string', const: 'horizontalrule' },\n version: { type: 'integer' },\n },\n required: ['type', 'version'],\n tsType: 'SerializedHorizontalRuleNode',\n }\n}\n"],"mappings":"AAOA,sGACA,MAAMA,kCAAA,GAAqC;;;EAGzC;AAEF,OAAO,MAAMC,4BAAA,GAA6CA,CAAC;EAAEC;AAAqB,CAAE;EAClFA,qBAAA,CAAsBC,GAAG,CAACH,kCAAA;EAC1B,OAAO;IACLI,IAAA,EAAM;IACNC,oBAAA,EAAsB;IACtBC,UAAA,EAAY;MACVF,IAAA,EAAM;QAAEA,IAAA,EAAM;QAAUG,KAAA,EAAO;MAAiB;MAChDC,OAAA,EAAS;QAAEJ,IAAA,EAAM;MAAU;IAC7B;IACAK,QAAA,EAAU,CAAC,QAAQ,UAAU;IAC7BC,MAAA,EAAQ;EACV;AACF","ignoreList":[]}
1
+ {"version":3,"file":"schema.js","names":["versionSchema","SERIALIZED_HORIZONTAL_RULE_NODE_TS","horizontalRuleNodeJSONSchema","typeStringDefinitions","add","type","additionalProperties","properties","const","version","required","tsType"],"sources":["../../../../src/features/horizontalRule/server/schema.ts"],"sourcesContent":["import type { JSONSchemaFn } from '../../typesServer.js'\n\nimport { versionSchema } from '../../../types/jsonSchemaHelpers.js'\n\nexport interface SerializedHorizontalRuleNode {\n type: 'horizontalrule'\n /** @deprecated Ignored when loading. Typed as required only to match Lexical's types: rich text sent through the API, CLI or MCP may not contain it. */\n version: number\n}\n\n/** MUST stay byte-for-byte in sync with the runtime `SerializedHorizontalRuleNode` declared above. */\nconst SERIALIZED_HORIZONTAL_RULE_NODE_TS = `export interface SerializedHorizontalRuleNode {\n type: 'horizontalrule';\n /** @deprecated Ignored when loading. Typed as required only to match Lexical's types: rich text sent through the API, CLI or MCP may not contain it. */\n version: number;\n}`\n\nexport const horizontalRuleNodeJSONSchema: JSONSchemaFn = ({ typeStringDefinitions }) => {\n typeStringDefinitions.add(SERIALIZED_HORIZONTAL_RULE_NODE_TS)\n return {\n type: 'object',\n additionalProperties: false,\n properties: {\n type: { type: 'string', const: 'horizontalrule' },\n version: versionSchema,\n },\n required: ['type'],\n tsType: 'SerializedHorizontalRuleNode',\n }\n}\n"],"mappings":"AAEA,SAASA,aAAa,QAAQ;AAQ9B;AACA,MAAMC,kCAAA,GAAqC;;;;EAIzC;AAEF,OAAO,MAAMC,4BAAA,GAA6CA,CAAC;EAAEC;AAAqB,CAAE;EAClFA,qBAAA,CAAsBC,GAAG,CAACH,kCAAA;EAC1B,OAAO;IACLI,IAAA,EAAM;IACNC,oBAAA,EAAsB;IACtBC,UAAA,EAAY;MACVF,IAAA,EAAM;QAAEA,IAAA,EAAM;QAAUG,KAAA,EAAO;MAAiB;MAChDC,OAAA,EAAST;IACX;IACAU,QAAA,EAAU,CAAC,OAAO;IAClBC,MAAA,EAAQ;EACV;AACF","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"IndentPlugin.d.ts","sourceRoot":"","sources":["../../../../src/features/indent/client/IndentPlugin.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAE5D,eAAO,MAAM,YAAY,EAAE,eAAe,CAAC,kBAAkB,CAmE5D,CAAA"}
1
+ {"version":3,"file":"IndentPlugin.d.ts","sourceRoot":"","sources":["../../../../src/features/indent/client/IndentPlugin.tsx"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAE5D,eAAO,MAAM,YAAY,EAAE,eAAe,CAAC,kBAAkB,CAmO5D,CAAA"}