@payloadcms/richtext-lexical 4.0.0-internal.a0ef1b8 → 4.0.0-internal.a7ca468

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 (571) hide show
  1. package/LICENSE.md +1 -1
  2. package/dist/exports/client/Field-F22V5L4V.js +2 -0
  3. package/dist/exports/client/Field-F22V5L4V.js.map +7 -0
  4. package/dist/exports/client/bundled.css +1 -1
  5. package/dist/exports/client/chunk-43E5QYAA.js +2 -0
  6. package/dist/exports/client/chunk-43E5QYAA.js.map +7 -0
  7. package/dist/exports/client/chunk-ESITTE3C.js +2 -0
  8. package/dist/exports/client/chunk-ESITTE3C.js.map +7 -0
  9. package/dist/exports/client/chunk-LN6VX25I.js +2 -0
  10. package/dist/exports/client/chunk-LN6VX25I.js.map +7 -0
  11. package/dist/exports/client/component-D5QLYS7W.js +2 -0
  12. package/dist/exports/client/component-D5QLYS7W.js.map +7 -0
  13. package/dist/exports/client/componentInline-H24N7GUG.js +2 -0
  14. package/dist/exports/client/index.d.ts +1 -3
  15. package/dist/exports/client/index.d.ts.map +1 -1
  16. package/dist/exports/client/index.js +27 -28
  17. package/dist/exports/client/index.js.map +4 -4
  18. package/dist/features/align/client/toolbarAlignGroup.d.ts.map +1 -1
  19. package/dist/features/blockquote/client/index.js +2 -2
  20. package/dist/features/blockquote/client/index.js.map +1 -1
  21. package/dist/features/blockquote/server/index.js +2 -2
  22. package/dist/features/blockquote/server/index.js.map +1 -1
  23. package/dist/features/blocks/client/component/index.css +2 -2
  24. package/dist/features/blocks/client/component/index.d.ts.map +1 -1
  25. package/dist/features/blocks/client/component/index.js +2 -1
  26. package/dist/features/blocks/client/component/index.js.map +1 -1
  27. package/dist/features/blocks/client/componentInline/components/InlineBlockContainer.d.ts.map +1 -1
  28. package/dist/features/blocks/client/componentInline/index.css +8 -8
  29. package/dist/features/blocks/client/componentInline/index.d.ts.map +1 -1
  30. package/dist/features/blocks/client/componentInline/index.js +2 -1
  31. package/dist/features/blocks/client/componentInline/index.js.map +1 -1
  32. package/dist/features/blocks/client/getBlockImageComponent.d.ts +1 -1
  33. package/dist/features/blocks/client/index.d.ts.map +1 -1
  34. package/dist/features/blocks/client/index.js +4 -2
  35. package/dist/features/blocks/client/index.js.map +1 -1
  36. package/dist/features/blocks/client/markdown/getLexicalToMarkdown.d.ts +1 -1
  37. package/dist/features/blocks/client/markdown/getLexicalToMarkdown.d.ts.map +1 -1
  38. package/dist/features/blocks/client/markdown/getLexicalToMarkdown.js +1 -1
  39. package/dist/features/blocks/client/markdown/getLexicalToMarkdown.js.map +1 -1
  40. package/dist/features/blocks/client/markdown/getMarkdownToLexical.d.ts +1 -1
  41. package/dist/features/blocks/client/markdown/getMarkdownToLexical.d.ts.map +1 -1
  42. package/dist/features/blocks/client/markdown/getMarkdownToLexical.js +5 -2
  43. package/dist/features/blocks/client/markdown/getMarkdownToLexical.js.map +1 -1
  44. package/dist/features/blocks/client/markdown/markdownTransformer.d.ts +1 -2
  45. package/dist/features/blocks/client/markdown/markdownTransformer.d.ts.map +1 -1
  46. package/dist/features/blocks/client/markdown/markdownTransformer.js.map +1 -1
  47. package/dist/features/blocks/client/nodes/BlocksNode.d.ts.map +1 -1
  48. package/dist/features/blocks/client/nodes/InlineBlocksNode.d.ts.map +1 -1
  49. package/dist/features/blocks/premade/CodeBlock/Component/Collapse/index.css +1 -1
  50. package/dist/features/blocks/premade/CodeBlock/Component/FloatingCollapse/index.css +2 -4
  51. package/dist/features/blocks/premade/CodeBlock/Component/index.css +5 -5
  52. package/dist/features/blocks/server/graphQLPopulationPromise.d.ts.map +1 -1
  53. package/dist/features/blocks/server/index.d.ts.map +1 -1
  54. package/dist/features/blocks/server/index.js +6 -8
  55. package/dist/features/blocks/server/index.js.map +1 -1
  56. package/dist/features/blocks/server/markdown/markdownTransformer.d.ts +1 -1
  57. package/dist/features/blocks/server/markdown/markdownTransformer.d.ts.map +1 -1
  58. package/dist/features/blocks/server/markdown/markdownTransformer.js.map +1 -1
  59. package/dist/features/blocks/server/nodes/BlocksNode.d.ts.map +1 -1
  60. package/dist/features/blocks/server/nodes/InlineBlocksNode.d.ts.map +1 -1
  61. package/dist/features/blocks/server/schema.d.ts.map +1 -1
  62. package/dist/features/blocks/server/schema.js +3 -2
  63. package/dist/features/blocks/server/schema.js.map +1 -1
  64. package/dist/features/blocks/server/validate.d.ts.map +1 -1
  65. package/dist/features/converters/htmlToLexical/index.d.ts.map +1 -1
  66. package/dist/features/converters/lexicalToHtml/shared/cssColors.d.ts.map +1 -1
  67. package/dist/features/converters/lexicalToMarkdown/index.d.ts.map +1 -1
  68. package/dist/features/converters/lexicalToMarkdown/index.js +1 -1
  69. package/dist/features/converters/lexicalToMarkdown/index.js.map +1 -1
  70. package/dist/features/converters/markdownToLexical/index.d.ts.map +1 -1
  71. package/dist/features/converters/markdownToLexical/index.js +5 -2
  72. package/dist/features/converters/markdownToLexical/index.js.map +1 -1
  73. package/dist/features/debug/jsxConverter/client/plugin/style.css +2 -2
  74. package/dist/features/debug/testRecorder/client/plugin/index.css +0 -1
  75. package/dist/features/format/bold/feature.client.js +1 -1
  76. package/dist/features/format/bold/feature.client.js.map +1 -1
  77. package/dist/features/format/bold/feature.server.d.ts.map +1 -1
  78. package/dist/features/format/bold/feature.server.js +1 -1
  79. package/dist/features/format/bold/feature.server.js.map +1 -1
  80. package/dist/features/format/inlineCode/feature.client.js +1 -1
  81. package/dist/features/format/inlineCode/feature.client.js.map +1 -1
  82. package/dist/features/format/inlineCode/feature.server.d.ts.map +1 -1
  83. package/dist/features/format/inlineCode/feature.server.js +1 -1
  84. package/dist/features/format/inlineCode/feature.server.js.map +1 -1
  85. package/dist/features/format/italic/feature.client.js +1 -1
  86. package/dist/features/format/italic/feature.client.js.map +1 -1
  87. package/dist/features/format/italic/feature.server.d.ts.map +1 -1
  88. package/dist/features/format/italic/feature.server.js +1 -1
  89. package/dist/features/format/italic/feature.server.js.map +1 -1
  90. package/dist/features/format/shared/toolbarFormatGroup.d.ts.map +1 -1
  91. package/dist/features/format/strikethrough/feature.client.js +1 -1
  92. package/dist/features/format/strikethrough/feature.client.js.map +1 -1
  93. package/dist/features/format/strikethrough/feature.server.d.ts.map +1 -1
  94. package/dist/features/format/strikethrough/feature.server.js +1 -1
  95. package/dist/features/format/strikethrough/feature.server.js.map +1 -1
  96. package/dist/features/heading/client/index.js +2 -2
  97. package/dist/features/heading/client/index.js.map +1 -1
  98. package/dist/features/heading/markdownTransformer.d.ts +2 -2
  99. package/dist/features/heading/markdownTransformer.d.ts.map +1 -1
  100. package/dist/features/heading/markdownTransformer.js +6 -19
  101. package/dist/features/heading/markdownTransformer.js.map +1 -1
  102. package/dist/features/heading/server/index.js +2 -2
  103. package/dist/features/heading/server/index.js.map +1 -1
  104. package/dist/features/heading/server/schema.d.ts.map +1 -1
  105. package/dist/features/horizontalRule/client/index.js +2 -2
  106. package/dist/features/horizontalRule/client/index.js.map +1 -1
  107. package/dist/features/horizontalRule/client/markdownTransformer.d.ts +2 -2
  108. package/dist/features/horizontalRule/client/markdownTransformer.d.ts.map +1 -1
  109. package/dist/features/horizontalRule/client/markdownTransformer.js +1 -1
  110. package/dist/features/horizontalRule/client/markdownTransformer.js.map +1 -1
  111. package/dist/features/horizontalRule/client/nodes/HorizontalRuleNode.d.ts +1 -1
  112. package/dist/features/horizontalRule/client/nodes/HorizontalRuleNode.d.ts.map +1 -1
  113. package/dist/features/horizontalRule/client/nodes/HorizontalRuleNode.js +1 -1
  114. package/dist/features/horizontalRule/client/nodes/HorizontalRuleNode.js.map +1 -1
  115. package/dist/features/horizontalRule/client/plugin/index.css +2 -2
  116. package/dist/features/horizontalRule/server/index.js +2 -2
  117. package/dist/features/horizontalRule/server/index.js.map +1 -1
  118. package/dist/features/horizontalRule/server/markdownTransformer.d.ts +2 -2
  119. package/dist/features/horizontalRule/server/markdownTransformer.d.ts.map +1 -1
  120. package/dist/features/horizontalRule/server/markdownTransformer.js +1 -1
  121. package/dist/features/horizontalRule/server/markdownTransformer.js.map +1 -1
  122. package/dist/features/horizontalRule/server/nodes/HorizontalRuleNode.d.ts +1 -1
  123. package/dist/features/horizontalRule/server/nodes/HorizontalRuleNode.d.ts.map +1 -1
  124. package/dist/features/horizontalRule/server/nodes/HorizontalRuleNode.js +1 -1
  125. package/dist/features/horizontalRule/server/nodes/HorizontalRuleNode.js.map +1 -1
  126. package/dist/features/indent/client/toolbarIndentGroup.d.ts.map +1 -1
  127. package/dist/features/link/client/index.js +2 -2
  128. package/dist/features/link/client/index.js.map +1 -1
  129. package/dist/features/link/client/plugins/autoLink/index.d.ts.map +1 -1
  130. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js +3 -3
  131. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js.map +1 -1
  132. package/dist/features/link/client/plugins/floatingLinkEditor/index.css +7 -12
  133. package/dist/features/link/markdownTransformer.d.ts +4 -4
  134. package/dist/features/link/markdownTransformer.d.ts.map +1 -1
  135. package/dist/features/link/markdownTransformer.js +2 -2
  136. package/dist/features/link/markdownTransformer.js.map +1 -1
  137. package/dist/features/link/markdownTransformer.spec.js +10 -10
  138. package/dist/features/link/markdownTransformer.spec.js.map +1 -1
  139. package/dist/features/link/nodes/AutoLinkNode.d.ts +1 -1
  140. package/dist/features/link/nodes/AutoLinkNode.d.ts.map +1 -1
  141. package/dist/features/link/nodes/AutoLinkNode.js.map +1 -1
  142. package/dist/features/link/nodes/LinkNode.d.ts +1 -1
  143. package/dist/features/link/nodes/LinkNode.d.ts.map +1 -1
  144. package/dist/features/link/nodes/LinkNode.js.map +1 -1
  145. package/dist/features/link/server/baseFields.d.ts.map +1 -1
  146. package/dist/features/link/server/baseFields.js.map +1 -1
  147. package/dist/features/link/server/graphQLPopulationPromise.d.ts.map +1 -1
  148. package/dist/features/link/server/index.js +4 -4
  149. package/dist/features/link/server/index.js.map +1 -1
  150. package/dist/features/link/server/schema.d.ts.map +1 -1
  151. package/dist/features/link/server/schema.js +4 -2
  152. package/dist/features/link/server/schema.js.map +1 -1
  153. package/dist/features/link/server/validate.d.ts.map +1 -1
  154. package/dist/features/lists/checklist/client/index.js +1 -1
  155. package/dist/features/lists/checklist/client/index.js.map +1 -1
  156. package/dist/features/lists/checklist/server/index.js +1 -1
  157. package/dist/features/lists/checklist/server/index.js.map +1 -1
  158. package/dist/features/lists/orderedList/client/index.js +1 -1
  159. package/dist/features/lists/orderedList/client/index.js.map +1 -1
  160. package/dist/features/lists/orderedList/server/index.js +1 -1
  161. package/dist/features/lists/orderedList/server/index.js.map +1 -1
  162. package/dist/features/lists/unorderedList/client/index.js +1 -1
  163. package/dist/features/lists/unorderedList/client/index.js.map +1 -1
  164. package/dist/features/lists/unorderedList/server/index.js +1 -1
  165. package/dist/features/lists/unorderedList/server/index.js.map +1 -1
  166. package/dist/features/relationship/client/drawer/index.d.ts.map +1 -1
  167. package/dist/features/relationship/client/nodes/RelationshipNode.d.ts.map +1 -1
  168. package/dist/features/relationship/client/utils/useEnabledRelationships.d.ts.map +1 -1
  169. package/dist/features/relationship/server/graphQLPopulationPromise.d.ts.map +1 -1
  170. package/dist/features/relationship/server/nodes/RelationshipNode.d.ts.map +1 -1
  171. package/dist/features/relationship/server/schema.d.ts +3 -3
  172. package/dist/features/relationship/server/schema.d.ts.map +1 -1
  173. package/dist/features/relationship/server/schema.js +22 -5
  174. package/dist/features/relationship/server/schema.js.map +1 -1
  175. package/dist/features/relationship/shared/filterEnabledRelationshipCollections.d.ts.map +1 -1
  176. package/dist/features/shared/toolbar/addDropdownGroup.d.ts.map +1 -1
  177. package/dist/features/shared/toolbar/featureButtonsGroup.d.ts.map +1 -1
  178. package/dist/features/shared/toolbar/textDropdownGroup.d.ts.map +1 -1
  179. package/dist/features/table/client/index.d.ts.map +1 -0
  180. package/dist/features/{experimental_table → table}/client/index.js +2 -2
  181. package/dist/features/table/client/index.js.map +1 -0
  182. package/dist/features/table/client/plugins/TableActionMenuPlugin/index.d.ts.map +1 -0
  183. package/dist/features/table/client/plugins/TableActionMenuPlugin/index.js.map +1 -0
  184. package/dist/features/table/client/plugins/TableCellResizerPlugin/index.d.ts.map +1 -0
  185. package/dist/features/table/client/plugins/TableCellResizerPlugin/index.js.map +1 -0
  186. package/dist/features/table/client/plugins/TableHoverActionsPlugin/index.d.ts.map +1 -0
  187. package/dist/features/table/client/plugins/TableHoverActionsPlugin/index.js.map +1 -0
  188. package/dist/features/table/client/plugins/TablePlugin/TableGridPopup/index.d.ts.map +1 -0
  189. package/dist/features/table/client/plugins/TablePlugin/TableGridPopup/index.js.map +1 -0
  190. package/dist/features/table/client/plugins/TablePlugin/index.d.ts.map +1 -0
  191. package/dist/features/table/client/plugins/TablePlugin/index.js.map +1 -0
  192. package/dist/features/table/client/utils/debounce.d.ts.map +1 -0
  193. package/dist/features/table/client/utils/debounce.js.map +1 -0
  194. package/dist/features/table/client/utils/useDebounce.d.ts.map +1 -0
  195. package/dist/features/table/client/utils/useDebounce.js.map +1 -0
  196. package/dist/features/table/markdownTransformer.d.ts +5 -0
  197. package/dist/features/table/markdownTransformer.d.ts.map +1 -0
  198. package/dist/features/{experimental_table → table}/markdownTransformer.js +6 -3
  199. package/dist/features/table/markdownTransformer.js.map +1 -0
  200. package/dist/features/table/server/index.d.ts +3 -0
  201. package/dist/features/table/server/index.d.ts.map +1 -0
  202. package/dist/features/{experimental_table → table}/server/index.js +6 -6
  203. package/dist/features/table/server/index.js.map +1 -0
  204. package/dist/features/table/server/schema.d.ts.map +1 -0
  205. package/dist/features/table/server/schema.js.map +1 -0
  206. package/dist/features/textState/feature.client.js +1 -1
  207. package/dist/features/textState/feature.client.js.map +1 -1
  208. package/dist/features/toolbars/fixed/client/Toolbar/index.css +4 -6
  209. package/dist/features/toolbars/inline/client/Toolbar/index.css +2 -14
  210. package/dist/features/toolbars/shared/ToolbarButton/index.d.ts.map +1 -1
  211. package/dist/features/toolbars/shared/ToolbarDropdown/index.css +8 -14
  212. package/dist/features/toolbars/shared/ToolbarDropdown/index.d.ts.map +1 -1
  213. package/dist/features/toolbars/shared/ToolbarDropdown/index.js.map +1 -1
  214. package/dist/features/toolbars/shared/useToolbarStates.d.ts.map +1 -1
  215. package/dist/features/toolbars/shared/useToolbarStates.js +3 -1
  216. package/dist/features/toolbars/shared/useToolbarStates.js.map +1 -1
  217. package/dist/features/typesClient.d.ts +1 -1
  218. package/dist/features/typesClient.d.ts.map +1 -1
  219. package/dist/features/typesClient.js.map +1 -1
  220. package/dist/features/typesServer.d.ts +3 -3
  221. package/dist/features/typesServer.d.ts.map +1 -1
  222. package/dist/features/typesServer.js.map +1 -1
  223. package/dist/features/upload/client/component/index.css +9 -9
  224. package/dist/features/upload/client/component/index.js +2 -1
  225. package/dist/features/upload/client/component/index.js.map +1 -1
  226. package/dist/features/upload/client/drawer/index.d.ts.map +1 -1
  227. package/dist/features/upload/client/nodes/UploadNode.d.ts.map +1 -1
  228. package/dist/features/upload/client/plugin/index.js +5 -5
  229. package/dist/features/upload/client/plugin/index.js.map +1 -1
  230. package/dist/features/upload/server/graphQLPopulationPromise.d.ts.map +1 -1
  231. package/dist/features/upload/server/index.js +4 -4
  232. package/dist/features/upload/server/index.js.map +1 -1
  233. package/dist/features/upload/server/markdownTransformer.d.ts +2 -2
  234. package/dist/features/upload/server/markdownTransformer.d.ts.map +1 -1
  235. package/dist/features/upload/server/markdownTransformer.js +1 -1
  236. package/dist/features/upload/server/markdownTransformer.js.map +1 -1
  237. package/dist/features/upload/server/nodes/UploadNode.d.ts.map +1 -1
  238. package/dist/features/upload/server/schema.d.ts +4 -4
  239. package/dist/features/upload/server/schema.d.ts.map +1 -1
  240. package/dist/features/upload/server/schema.js +26 -6
  241. package/dist/features/upload/server/schema.js.map +1 -1
  242. package/dist/features/upload/server/validate.d.ts.map +1 -1
  243. package/dist/field/Diff/converters/unknown/index.css +1 -1
  244. package/dist/field/Field.d.ts.map +1 -1
  245. package/dist/field/Field.js +18 -15
  246. package/dist/field/Field.js.map +1 -1
  247. package/dist/field/ViewSelector.css +1 -1
  248. package/dist/field/bundled.css +1 -1
  249. package/dist/field/index.css +14 -11
  250. package/dist/i18n.d.ts.map +1 -1
  251. package/dist/i18n.js +68 -0
  252. package/dist/i18n.js.map +1 -1
  253. package/dist/index.d.ts +3 -3
  254. package/dist/index.d.ts.map +1 -1
  255. package/dist/index.js +11 -54
  256. package/dist/index.js.map +1 -1
  257. package/dist/lexical/LexicalEditor.css +18 -18
  258. package/dist/lexical/LexicalEditor.d.ts.map +1 -1
  259. package/dist/lexical/LexicalEditor.js +2 -36
  260. package/dist/lexical/LexicalEditor.js.map +1 -1
  261. package/dist/lexical/LexicalProvider.d.ts.map +1 -1
  262. package/dist/lexical/LexicalProvider.js +7 -22
  263. package/dist/lexical/LexicalProvider.js.map +1 -1
  264. package/dist/lexical/config/client/EditorConfigProvider.d.ts.map +1 -1
  265. package/dist/lexical/config/client/sanitize.d.ts.map +1 -1
  266. package/dist/lexical/config/server/loader.d.ts +1 -1
  267. package/dist/lexical/config/server/loader.d.ts.map +1 -1
  268. package/dist/lexical/config/server/loader.js +2 -2
  269. package/dist/lexical/config/server/loader.js.map +1 -1
  270. package/dist/lexical/config/server/sanitize.d.ts +1 -1
  271. package/dist/lexical/config/server/sanitize.d.ts.map +1 -1
  272. package/dist/lexical/config/server/sanitize.js +2 -2
  273. package/dist/lexical/config/server/sanitize.js.map +1 -1
  274. package/dist/lexical/plugins/DecoratorPlugin/index.css +1 -1
  275. package/dist/lexical/plugins/DecoratorPlugin/index.js.map +1 -1
  276. package/dist/lexical/plugins/InsertParagraphAtEnd/index.css +16 -24
  277. package/dist/lexical/plugins/InsertParagraphAtEnd/index.d.ts.map +1 -1
  278. package/dist/lexical/plugins/InsertParagraphAtEnd/index.js +27 -14
  279. package/dist/lexical/plugins/InsertParagraphAtEnd/index.js.map +1 -1
  280. package/dist/lexical/plugins/MarkdownShortcut/index.d.ts.map +1 -1
  281. package/dist/lexical/plugins/MarkdownShortcut/index.js +1 -1
  282. package/dist/lexical/plugins/MarkdownShortcut/index.js.map +1 -1
  283. package/dist/lexical/plugins/NodeViewOverridePlugin/index.d.ts.map +1 -1
  284. package/dist/lexical/plugins/NodeViewOverridePlugin/index.js +21 -0
  285. package/dist/lexical/plugins/NodeViewOverridePlugin/index.js.map +1 -1
  286. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.d.ts +0 -1
  287. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.d.ts.map +1 -1
  288. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js +1 -20
  289. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js.map +1 -1
  290. package/dist/lexical/plugins/SlashMenu/index.css +1 -6
  291. package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.css +1 -1
  292. package/dist/lexical/plugins/handles/DraggableBlockPlugin/debounce.d.ts.map +1 -1
  293. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.css +4 -3
  294. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js +1 -1
  295. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js.map +1 -1
  296. package/dist/lexical/plugins/handles/utils/calculateDistanceFromScrollerElem.d.ts.map +1 -1
  297. package/dist/lexical/theme/EditorTheme.css +18 -19
  298. package/dist/lexical/ui/ContentEditable.css +22 -17
  299. package/dist/lexical/utils/markdown/convertFromMarkdownString.d.ts +17 -0
  300. package/dist/lexical/utils/markdown/convertFromMarkdownString.d.ts.map +1 -0
  301. package/dist/lexical/utils/markdown/convertFromMarkdownString.js +27 -0
  302. package/dist/lexical/utils/markdown/convertFromMarkdownString.js.map +1 -0
  303. package/dist/lexical/utils/markdown/convertFromMarkdownString.spec.js +88 -0
  304. package/dist/lexical/utils/markdown/convertFromMarkdownString.spec.js.map +1 -0
  305. package/dist/lexical/utils/markdown/createBlockNode.d.ts +2 -2
  306. package/dist/lexical/utils/markdown/createBlockNode.d.ts.map +1 -1
  307. package/dist/lexical/utils/markdown/createBlockNode.js.map +1 -1
  308. package/dist/lexical/utils/markdown/normalizeMarkdown.d.ts +25 -0
  309. package/dist/lexical/utils/markdown/normalizeMarkdown.d.ts.map +1 -0
  310. package/dist/lexical/utils/markdown/normalizeMarkdown.js +91 -0
  311. package/dist/lexical/utils/markdown/normalizeMarkdown.js.map +1 -0
  312. package/dist/lexical/utils/nodeFormat.d.ts.map +1 -1
  313. package/dist/lexical/utils/point.d.ts.map +1 -1
  314. package/dist/lexical/utils/rect.d.ts.map +1 -1
  315. package/dist/lexical-proxy/@lexical-markdown.d.ts +1 -1
  316. package/dist/lexical-proxy/@lexical-markdown.d.ts.map +1 -1
  317. package/dist/lexical-proxy/@lexical-markdown.js +1 -1
  318. package/dist/lexical-proxy/@lexical-markdown.js.map +1 -1
  319. package/dist/lexical-proxy/@lexical-react/ExtensionComponent.d.ts +2 -0
  320. package/dist/lexical-proxy/@lexical-react/ExtensionComponent.d.ts.map +1 -0
  321. package/dist/lexical-proxy/@lexical-react/ExtensionComponent.js +2 -0
  322. package/dist/lexical-proxy/@lexical-react/ExtensionComponent.js.map +1 -0
  323. package/dist/lexical-proxy/@lexical-react/LexicalExtensionComposer.d.ts +2 -0
  324. package/dist/lexical-proxy/@lexical-react/LexicalExtensionComposer.d.ts.map +1 -0
  325. package/dist/lexical-proxy/@lexical-react/LexicalExtensionComposer.js +2 -0
  326. package/dist/lexical-proxy/@lexical-react/LexicalExtensionComposer.js.map +1 -0
  327. package/dist/lexical-proxy/@lexical-react/LexicalExtensionEditorComposer.d.ts +2 -0
  328. package/dist/lexical-proxy/@lexical-react/LexicalExtensionEditorComposer.d.ts.map +1 -0
  329. package/dist/lexical-proxy/@lexical-react/LexicalExtensionEditorComposer.js +2 -0
  330. package/dist/lexical-proxy/@lexical-react/LexicalExtensionEditorComposer.js.map +1 -0
  331. package/dist/lexical-proxy/@lexical-react/LexicalSelectionAlwaysOnDisplay.d.ts +2 -0
  332. package/dist/lexical-proxy/@lexical-react/LexicalSelectionAlwaysOnDisplay.d.ts.map +1 -0
  333. package/dist/lexical-proxy/@lexical-react/LexicalSelectionAlwaysOnDisplay.js +2 -0
  334. package/dist/lexical-proxy/@lexical-react/LexicalSelectionAlwaysOnDisplay.js.map +1 -0
  335. package/dist/lexical-proxy/@lexical-react/ReactExtension.d.ts +2 -0
  336. package/dist/lexical-proxy/@lexical-react/ReactExtension.d.ts.map +1 -0
  337. package/dist/lexical-proxy/@lexical-react/ReactExtension.js +2 -0
  338. package/dist/lexical-proxy/@lexical-react/ReactExtension.js.map +1 -0
  339. package/dist/lexical-proxy/@lexical-react/ReactPluginHostExtension.d.ts +2 -0
  340. package/dist/lexical-proxy/@lexical-react/ReactPluginHostExtension.d.ts.map +1 -0
  341. package/dist/lexical-proxy/@lexical-react/ReactPluginHostExtension.js +2 -0
  342. package/dist/lexical-proxy/@lexical-react/ReactPluginHostExtension.js.map +1 -0
  343. package/dist/lexical-proxy/@lexical-react/ReactProviderExtension.d.ts +2 -0
  344. package/dist/lexical-proxy/@lexical-react/ReactProviderExtension.d.ts.map +1 -0
  345. package/dist/lexical-proxy/@lexical-react/ReactProviderExtension.js +2 -0
  346. package/dist/lexical-proxy/@lexical-react/ReactProviderExtension.js.map +1 -0
  347. package/dist/lexical-proxy/@lexical-react/TreeViewExtension.d.ts +2 -0
  348. package/dist/lexical-proxy/@lexical-react/TreeViewExtension.d.ts.map +1 -0
  349. package/dist/lexical-proxy/@lexical-react/TreeViewExtension.js +2 -0
  350. package/dist/lexical-proxy/@lexical-react/TreeViewExtension.js.map +1 -0
  351. package/dist/lexical-proxy/@lexical-react/useExtensionComponent.d.ts +2 -0
  352. package/dist/lexical-proxy/@lexical-react/useExtensionComponent.d.ts.map +1 -0
  353. package/dist/lexical-proxy/@lexical-react/useExtensionComponent.js +2 -0
  354. package/dist/lexical-proxy/@lexical-react/useExtensionComponent.js.map +1 -0
  355. package/dist/lexical-proxy/@lexical-react/useExtensionSignalValue.d.ts +2 -0
  356. package/dist/lexical-proxy/@lexical-react/useExtensionSignalValue.d.ts.map +1 -0
  357. package/dist/lexical-proxy/@lexical-react/useExtensionSignalValue.js +2 -0
  358. package/dist/lexical-proxy/@lexical-react/useExtensionSignalValue.js.map +1 -0
  359. package/dist/lexical-proxy/@lexical-react/useLexicalAriaLiveRegion.d.ts +2 -0
  360. package/dist/lexical-proxy/@lexical-react/useLexicalAriaLiveRegion.d.ts.map +1 -0
  361. package/dist/lexical-proxy/@lexical-react/useLexicalAriaLiveRegion.js +2 -0
  362. package/dist/lexical-proxy/@lexical-react/useLexicalAriaLiveRegion.js.map +1 -0
  363. package/dist/lexical-proxy/@lexical-react/useLexicalFocusManagerRef.d.ts +2 -0
  364. package/dist/lexical-proxy/@lexical-react/useLexicalFocusManagerRef.d.ts.map +1 -0
  365. package/dist/lexical-proxy/@lexical-react/useLexicalFocusManagerRef.js +2 -0
  366. package/dist/lexical-proxy/@lexical-react/useLexicalFocusManagerRef.js.map +1 -0
  367. package/dist/lexical-proxy/@lexical-react/useLexicalFocusTrapRef.d.ts +2 -0
  368. package/dist/lexical-proxy/@lexical-react/useLexicalFocusTrapRef.d.ts.map +1 -0
  369. package/dist/lexical-proxy/@lexical-react/useLexicalFocusTrapRef.js +2 -0
  370. package/dist/lexical-proxy/@lexical-react/useLexicalFocusTrapRef.js.map +1 -0
  371. package/dist/lexical-proxy/@lexical-react/useLexicalRovingTabIndexRef.d.ts +2 -0
  372. package/dist/lexical-proxy/@lexical-react/useLexicalRovingTabIndexRef.d.ts.map +1 -0
  373. package/dist/lexical-proxy/@lexical-react/useLexicalRovingTabIndexRef.js +2 -0
  374. package/dist/lexical-proxy/@lexical-react/useLexicalRovingTabIndexRef.js.map +1 -0
  375. package/dist/lexical-proxy/@lexical-react/useLexicalSlotRef.d.ts +2 -0
  376. package/dist/lexical-proxy/@lexical-react/useLexicalSlotRef.d.ts.map +1 -0
  377. package/dist/lexical-proxy/@lexical-react/useLexicalSlotRef.js +2 -0
  378. package/dist/lexical-proxy/@lexical-react/useLexicalSlotRef.js.map +1 -0
  379. package/dist/populateGraphQL/populateLexicalPopulationPromises.d.ts.map +1 -1
  380. package/dist/populateGraphQL/recursivelyPopulateFieldsForGraphQL.d.ts.map +1 -1
  381. package/dist/types/index.d.ts +1 -1
  382. package/dist/types/index.d.ts.map +1 -1
  383. package/dist/types/index.js.map +1 -1
  384. package/dist/types/jsonSchemaHelpers.d.ts.map +1 -1
  385. package/dist/types/nodeTypes.d.ts +1 -1
  386. package/dist/types/nodeTypes.d.ts.map +1 -1
  387. package/dist/types/nodeTypes.js.map +1 -1
  388. package/dist/types/schema.d.ts.map +1 -1
  389. package/dist/types/schema.js +12 -5
  390. package/dist/types/schema.js.map +1 -1
  391. package/dist/utilities/applyBaseFilterToFields.d.ts.map +1 -1
  392. package/dist/utilities/applyBaseFilterToFields.js +1 -2
  393. package/dist/utilities/applyBaseFilterToFields.js.map +1 -1
  394. package/dist/utilities/createServerFeature.d.ts +1 -1
  395. package/dist/utilities/createServerFeature.d.ts.map +1 -1
  396. package/dist/utilities/createServerFeature.js +2 -2
  397. package/dist/utilities/createServerFeature.js.map +1 -1
  398. package/dist/utilities/editorConfigFactory.d.ts +6 -6
  399. package/dist/utilities/editorConfigFactory.d.ts.map +1 -1
  400. package/dist/utilities/editorConfigFactory.js +9 -9
  401. package/dist/utilities/editorConfigFactory.js.map +1 -1
  402. package/dist/utilities/fieldsDrawer/index.css +4 -4
  403. package/dist/utilities/fieldsDrawer/useDrawerSubmit.d.ts +1 -1
  404. package/dist/utilities/fieldsDrawer/useDrawerSubmit.d.ts.map +1 -1
  405. package/dist/utilities/fieldsDrawer/useLexicalDocumentDrawer.d.ts.map +1 -1
  406. package/dist/utilities/fieldsDrawer/useLexicalDrawer.d.ts.map +1 -1
  407. package/dist/utilities/fieldsDrawer/useLexicalListDrawer.d.ts.map +1 -1
  408. package/dist/utilities/generateImportMap.d.ts +1 -1
  409. package/dist/utilities/generateImportMap.d.ts.map +1 -1
  410. package/dist/utilities/generateImportMap.js +3 -7
  411. package/dist/utilities/generateImportMap.js.map +1 -1
  412. package/dist/utilities/generateSchemaMap.d.ts +1 -1
  413. package/dist/utilities/generateSchemaMap.d.ts.map +1 -1
  414. package/dist/utilities/getDefaultSanitizedEditorConfig.d.ts +2 -2
  415. package/dist/utilities/getDefaultSanitizedEditorConfig.d.ts.map +1 -1
  416. package/dist/utilities/getDefaultSanitizedEditorConfig.js +6 -17
  417. package/dist/utilities/getDefaultSanitizedEditorConfig.js.map +1 -1
  418. package/dist/utilities/recurseNodeTree.d.ts.map +1 -1
  419. package/dist/utilities/upgradeLexicalData/upgradeDocumentFieldsRecursively.d.ts.map +1 -1
  420. package/dist/utilities/upgradeLexicalData/upgradeDocumentFieldsRecursively.js +1 -1
  421. package/dist/utilities/upgradeLexicalData/upgradeDocumentFieldsRecursively.js.map +1 -1
  422. package/dist/utilities/useLexicalFeature.d.ts.map +1 -1
  423. package/dist/validate/index.d.ts.map +1 -1
  424. package/package.json +94 -26
  425. package/dist/@types/assets.d.js +0 -2
  426. package/dist/@types/assets.d.js.map +0 -1
  427. package/dist/exports/client/Field-VYBSMSRY.js +0 -2
  428. package/dist/exports/client/Field-VYBSMSRY.js.map +0 -7
  429. package/dist/exports/client/chunk-LH634DPU.js +0 -12
  430. package/dist/exports/client/chunk-LH634DPU.js.map +0 -7
  431. package/dist/exports/client/chunk-UD4DQ4AK.js +0 -2
  432. package/dist/exports/client/chunk-UD4DQ4AK.js.map +0 -7
  433. package/dist/exports/client/chunk-ZYXHC5CY.js +0 -2
  434. package/dist/exports/client/chunk-ZYXHC5CY.js.map +0 -7
  435. package/dist/exports/client/component-PHZQBOJE.js +0 -2
  436. package/dist/exports/client/component-PHZQBOJE.js.map +0 -7
  437. package/dist/exports/client/componentInline-R3EPNYWF.js +0 -2
  438. package/dist/exports/server/rsc.browser.d.ts +0 -11
  439. package/dist/exports/server/rsc.browser.d.ts.map +0 -1
  440. package/dist/exports/server/rsc.browser.js +0 -10
  441. package/dist/exports/server/rsc.browser.js.map +0 -1
  442. package/dist/features/blockquote/markdownTransformer.d.ts +0 -3
  443. package/dist/features/blockquote/markdownTransformer.d.ts.map +0 -1
  444. package/dist/features/blockquote/markdownTransformer.js +0 -33
  445. package/dist/features/blockquote/markdownTransformer.js.map +0 -1
  446. package/dist/features/experimental_table/client/index.d.ts.map +0 -1
  447. package/dist/features/experimental_table/client/index.js.map +0 -1
  448. package/dist/features/experimental_table/client/plugins/TableActionMenuPlugin/index.d.ts.map +0 -1
  449. package/dist/features/experimental_table/client/plugins/TableActionMenuPlugin/index.js.map +0 -1
  450. package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.d.ts.map +0 -1
  451. package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.js.map +0 -1
  452. package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.d.ts.map +0 -1
  453. package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.js.map +0 -1
  454. package/dist/features/experimental_table/client/plugins/TablePlugin/TableGridPopup/index.d.ts.map +0 -1
  455. package/dist/features/experimental_table/client/plugins/TablePlugin/TableGridPopup/index.js.map +0 -1
  456. package/dist/features/experimental_table/client/plugins/TablePlugin/index.d.ts.map +0 -1
  457. package/dist/features/experimental_table/client/plugins/TablePlugin/index.js.map +0 -1
  458. package/dist/features/experimental_table/client/utils/debounce.d.ts.map +0 -1
  459. package/dist/features/experimental_table/client/utils/debounce.js.map +0 -1
  460. package/dist/features/experimental_table/client/utils/useDebounce.d.ts.map +0 -1
  461. package/dist/features/experimental_table/client/utils/useDebounce.js.map +0 -1
  462. package/dist/features/experimental_table/markdownTransformer.d.ts +0 -5
  463. package/dist/features/experimental_table/markdownTransformer.d.ts.map +0 -1
  464. package/dist/features/experimental_table/markdownTransformer.js.map +0 -1
  465. package/dist/features/experimental_table/server/index.d.ts +0 -3
  466. package/dist/features/experimental_table/server/index.d.ts.map +0 -1
  467. package/dist/features/experimental_table/server/index.js.map +0 -1
  468. package/dist/features/experimental_table/server/schema.d.ts.map +0 -1
  469. package/dist/features/experimental_table/server/schema.js.map +0 -1
  470. package/dist/features/format/bold/markdownTransformers.d.ts +0 -6
  471. package/dist/features/format/bold/markdownTransformers.d.ts.map +0 -1
  472. package/dist/features/format/bold/markdownTransformers.js +0 -23
  473. package/dist/features/format/bold/markdownTransformers.js.map +0 -1
  474. package/dist/features/format/inlineCode/markdownTransformers.d.ts +0 -3
  475. package/dist/features/format/inlineCode/markdownTransformers.d.ts.map +0 -1
  476. package/dist/features/format/inlineCode/markdownTransformers.js +0 -6
  477. package/dist/features/format/inlineCode/markdownTransformers.js.map +0 -1
  478. package/dist/features/format/italic/markdownTransformers.d.ts +0 -4
  479. package/dist/features/format/italic/markdownTransformers.d.ts.map +0 -1
  480. package/dist/features/format/italic/markdownTransformers.js +0 -12
  481. package/dist/features/format/italic/markdownTransformers.js.map +0 -1
  482. package/dist/features/format/strikethrough/markdownTransformers.d.ts +0 -3
  483. package/dist/features/format/strikethrough/markdownTransformers.d.ts.map +0 -1
  484. package/dist/features/format/strikethrough/markdownTransformers.js +0 -6
  485. package/dist/features/format/strikethrough/markdownTransformers.js.map +0 -1
  486. package/dist/features/lists/checklist/markdownTransformers.d.ts +0 -3
  487. package/dist/features/lists/checklist/markdownTransformers.d.ts.map +0 -1
  488. package/dist/features/lists/checklist/markdownTransformers.js +0 -12
  489. package/dist/features/lists/checklist/markdownTransformers.js.map +0 -1
  490. package/dist/features/lists/orderedList/markdownTransformer.d.ts +0 -3
  491. package/dist/features/lists/orderedList/markdownTransformer.d.ts.map +0 -1
  492. package/dist/features/lists/orderedList/markdownTransformer.js +0 -12
  493. package/dist/features/lists/orderedList/markdownTransformer.js.map +0 -1
  494. package/dist/features/lists/shared/markdown.d.ts +0 -6
  495. package/dist/features/lists/shared/markdown.d.ts.map +0 -1
  496. package/dist/features/lists/shared/markdown.js +0 -57
  497. package/dist/features/lists/shared/markdown.js.map +0 -1
  498. package/dist/features/lists/unorderedList/markdownTransformer.d.ts +0 -3
  499. package/dist/features/lists/unorderedList/markdownTransformer.d.ts.map +0 -1
  500. package/dist/features/lists/unorderedList/markdownTransformer.js +0 -12
  501. package/dist/features/lists/unorderedList/markdownTransformer.js.map +0 -1
  502. package/dist/field/clientEntry.d.ts +0 -29
  503. package/dist/field/clientEntry.d.ts.map +0 -1
  504. package/dist/field/clientEntry.js +0 -86
  505. package/dist/field/clientEntry.js.map +0 -1
  506. package/dist/lexical/utils/guard.d.ts +0 -5
  507. package/dist/lexical/utils/guard.d.ts.map +0 -1
  508. package/dist/lexical/utils/guard.js +0 -9
  509. package/dist/lexical/utils/guard.js.map +0 -1
  510. package/dist/lexical-proxy/@lexical-react/LexicalContextMenuPlugin.d.ts +0 -2
  511. package/dist/lexical-proxy/@lexical-react/LexicalContextMenuPlugin.d.ts.map +0 -1
  512. package/dist/lexical-proxy/@lexical-react/LexicalContextMenuPlugin.js +0 -2
  513. package/dist/lexical-proxy/@lexical-react/LexicalContextMenuPlugin.js.map +0 -1
  514. package/dist/packages/@lexical/markdown/MarkdownExport.d.ts +0 -14
  515. package/dist/packages/@lexical/markdown/MarkdownExport.d.ts.map +0 -1
  516. package/dist/packages/@lexical/markdown/MarkdownExport.js +0 -213
  517. package/dist/packages/@lexical/markdown/MarkdownExport.js.map +0 -1
  518. package/dist/packages/@lexical/markdown/MarkdownImport.d.ts +0 -19
  519. package/dist/packages/@lexical/markdown/MarkdownImport.d.ts.map +0 -1
  520. package/dist/packages/@lexical/markdown/MarkdownImport.js +0 -198
  521. package/dist/packages/@lexical/markdown/MarkdownImport.js.map +0 -1
  522. package/dist/packages/@lexical/markdown/MarkdownShortcuts.d.ts +0 -11
  523. package/dist/packages/@lexical/markdown/MarkdownShortcuts.d.ts.map +0 -1
  524. package/dist/packages/@lexical/markdown/MarkdownShortcuts.js +0 -304
  525. package/dist/packages/@lexical/markdown/MarkdownShortcuts.js.map +0 -1
  526. package/dist/packages/@lexical/markdown/MarkdownTransformers.d.ts +0 -147
  527. package/dist/packages/@lexical/markdown/MarkdownTransformers.d.ts.map +0 -1
  528. package/dist/packages/@lexical/markdown/MarkdownTransformers.js +0 -268
  529. package/dist/packages/@lexical/markdown/MarkdownTransformers.js.map +0 -1
  530. package/dist/packages/@lexical/markdown/importTextFormatTransformer.d.ts +0 -22
  531. package/dist/packages/@lexical/markdown/importTextFormatTransformer.d.ts.map +0 -1
  532. package/dist/packages/@lexical/markdown/importTextFormatTransformer.js +0 -91
  533. package/dist/packages/@lexical/markdown/importTextFormatTransformer.js.map +0 -1
  534. package/dist/packages/@lexical/markdown/importTextMatchTransformer.d.ts +0 -21
  535. package/dist/packages/@lexical/markdown/importTextMatchTransformer.d.ts.map +0 -1
  536. package/dist/packages/@lexical/markdown/importTextMatchTransformer.js +0 -54
  537. package/dist/packages/@lexical/markdown/importTextMatchTransformer.js.map +0 -1
  538. package/dist/packages/@lexical/markdown/importTextTransformers.d.ts +0 -18
  539. package/dist/packages/@lexical/markdown/importTextTransformers.d.ts.map +0 -1
  540. package/dist/packages/@lexical/markdown/importTextTransformers.js +0 -54
  541. package/dist/packages/@lexical/markdown/importTextTransformers.js.map +0 -1
  542. package/dist/packages/@lexical/markdown/index.d.ts +0 -29
  543. package/dist/packages/@lexical/markdown/index.d.ts.map +0 -1
  544. package/dist/packages/@lexical/markdown/index.js +0 -39
  545. package/dist/packages/@lexical/markdown/index.js.map +0 -1
  546. package/dist/packages/@lexical/markdown/utils.d.ts +0 -34
  547. package/dist/packages/@lexical/markdown/utils.d.ts.map +0 -1
  548. package/dist/packages/@lexical/markdown/utils.js +0 -267
  549. package/dist/packages/@lexical/markdown/utils.js.map +0 -1
  550. /package/dist/exports/client/{componentInline-R3EPNYWF.js.map → componentInline-H24N7GUG.js.map} +0 -0
  551. /package/dist/features/{experimental_table → table}/client/index.d.ts +0 -0
  552. /package/dist/features/{experimental_table → table}/client/plugins/TableActionMenuPlugin/index.css +0 -0
  553. /package/dist/features/{experimental_table → table}/client/plugins/TableActionMenuPlugin/index.d.ts +0 -0
  554. /package/dist/features/{experimental_table → table}/client/plugins/TableActionMenuPlugin/index.js +0 -0
  555. /package/dist/features/{experimental_table → table}/client/plugins/TableCellResizerPlugin/index.css +0 -0
  556. /package/dist/features/{experimental_table → table}/client/plugins/TableCellResizerPlugin/index.d.ts +0 -0
  557. /package/dist/features/{experimental_table → table}/client/plugins/TableCellResizerPlugin/index.js +0 -0
  558. /package/dist/features/{experimental_table → table}/client/plugins/TableHoverActionsPlugin/index.d.ts +0 -0
  559. /package/dist/features/{experimental_table → table}/client/plugins/TableHoverActionsPlugin/index.js +0 -0
  560. /package/dist/features/{experimental_table → table}/client/plugins/TablePlugin/TableGridPopup/index.css +0 -0
  561. /package/dist/features/{experimental_table → table}/client/plugins/TablePlugin/TableGridPopup/index.d.ts +0 -0
  562. /package/dist/features/{experimental_table → table}/client/plugins/TablePlugin/TableGridPopup/index.js +0 -0
  563. /package/dist/features/{experimental_table → table}/client/plugins/TablePlugin/index.css +0 -0
  564. /package/dist/features/{experimental_table → table}/client/plugins/TablePlugin/index.d.ts +0 -0
  565. /package/dist/features/{experimental_table → table}/client/plugins/TablePlugin/index.js +0 -0
  566. /package/dist/features/{experimental_table → table}/client/utils/debounce.d.ts +0 -0
  567. /package/dist/features/{experimental_table → table}/client/utils/debounce.js +0 -0
  568. /package/dist/features/{experimental_table → table}/client/utils/useDebounce.d.ts +0 -0
  569. /package/dist/features/{experimental_table → table}/client/utils/useDebounce.js +0 -0
  570. /package/dist/features/{experimental_table → table}/server/schema.d.ts +0 -0
  571. /package/dist/features/{experimental_table → table}/server/schema.js +0 -0
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/features/blocks/client/componentInline/index.tsx", "../../../src/features/blocks/client/nodes/InlineBlocksNode.tsx", "../../../src/features/blocks/server/nodes/InlineBlocksNode.tsx"],
4
- "sourcesContent": ["'use client'\n\nimport type { BlocksFieldClient, ClientBlock, Data, FormState } from 'payload'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { useLexicalEditable } from '@lexical/react/useLexicalEditable'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n Button,\n Drawer,\n EditDepthProvider,\n Form,\n formatDrawerSlug,\n RenderFields,\n ShimmerEffect,\n useConfig,\n useDocumentForm,\n useDocumentInfo,\n useEditDepth,\n useServerFunctions,\n useTranslation,\n} from '@payloadcms/ui'\nimport { abortAndIgnore } from '@payloadcms/ui/shared'\nimport { $getNodeByKey, SKIP_DOM_SELECTION_TAG } from 'lexical'\n\nimport './index.css'\nimport '../../../../utilities/fieldsDrawer/index.css'\n\nimport { deepCopyObjectSimpleWithoutReactComponents, reduceFieldsToValues } from 'payload/shared'\nimport React, { createContext, useCallback, useEffect, useMemo, useRef } from 'react'\nimport { v4 as uuid } from 'uuid'\n\nimport type { ViewMapInlineBlockComponentProps } from '../../../../types/index.js'\nimport type { InlineBlockFields } from '../../server/schema.js'\nimport type { BlockComponentProps } from '../component/index.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport {\n RegisterFormSubmit,\n useDrawerSubmit,\n} from '../../../../utilities/fieldsDrawer/useDrawerSubmit.js'\nimport { useLexicalDrawer } from '../../../../utilities/fieldsDrawer/useLexicalDrawer.js'\nimport { $isInlineBlockNode } from '../nodes/InlineBlocksNode.js'\n\nexport type InlineBlockComponentProps<\n TFormData extends Record<string, unknown> = InlineBlockFields,\n> = {\n readonly CustomBlock?: React.FC<ViewMapInlineBlockComponentProps>\n readonly CustomLabel?: React.FC<ViewMapInlineBlockComponentProps>\n} & Pick<BlockComponentProps<TFormData>, 'cacheBuster' | 'className' | 'formData' | 'nodeKey'>\n\nexport type InlineBlockComponentContextType = {\n EditButton?: React.FC\n initialState: false | FormState | undefined\n InlineBlockContainer?: React.FC<{ children: React.ReactNode }>\n Label?: React.FC\n nodeKey?: string\n RemoveButton?: React.FC\n}\n\nconst InlineBlockComponentContext = createContext<InlineBlockComponentContextType>({\n initialState: false,\n})\n\nexport const useInlineBlockComponentContext = () => React.use(InlineBlockComponentContext)\n\nexport const InlineBlockComponent: React.FC<InlineBlockComponentProps<InlineBlockFields>> = (\n props,\n) => {\n const {\n cacheBuster,\n className: baseClass,\n CustomBlock: CustomBlockFromProps,\n CustomLabel: CustomLabelFromProps,\n formData,\n nodeKey,\n } = props\n\n const [editor] = useLexicalComposerContext()\n const isEditable = useLexicalEditable()\n const { i18n, t } = useTranslation<object, string>()\n const {\n createdInlineBlock,\n fieldProps: { featureClientSchemaMap, initialLexicalFormState, schemaPath },\n setCreatedInlineBlock,\n uuid: uuidFromContext,\n } = useEditorConfigContext()\n const { fields: parentDocumentFields } = useDocumentForm()\n\n const { getFormState } = useServerFunctions()\n const editDepth = useEditDepth()\n const firstTimeDrawer = useRef(false)\n\n const [initialState, setInitialState] = React.useState<false | FormState | undefined>(() => {\n // Initial form state that was calculated server-side. May have stale values\n const cachedFormState = initialLexicalFormState?.[formData.id]?.formState\n if (!cachedFormState) {\n return false\n }\n\n // Merge current formData values into the cached form state\n // This ensures that when the component remounts (e.g., due to view changes), we don't lose user edits\n return Object.fromEntries(\n Object.entries(cachedFormState).map(([fieldName, fieldState]) => [\n fieldName,\n fieldName in formData\n ? {\n ...fieldState,\n initialValue: formData[fieldName],\n value: formData[fieldName],\n }\n : fieldState,\n ]),\n )\n })\n\n const hasMounted = useRef(false)\n const prevCacheBuster = useRef(cacheBuster)\n useEffect(() => {\n if (hasMounted.current) {\n if (prevCacheBuster.current !== cacheBuster) {\n setInitialState(false)\n }\n prevCacheBuster.current = cacheBuster\n } else {\n hasMounted.current = true\n }\n }, [cacheBuster])\n\n const [formUuid] = React.useState(() => uuid())\n\n // Server-rendered custom components (from admin.components, NOT viewMap).\n // When viewMap components exist, we render them directly with formData instead.\n const [CustomLabel, setCustomLabel] = React.useState<React.ReactNode | undefined>(() => {\n if (CustomLabelFromProps) {\n return undefined\n }\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n return initialState?.['_components']?.customComponents?.BlockLabel ?? undefined\n })\n\n const [CustomBlock, setCustomBlock] = React.useState<React.ReactNode | undefined>(() => {\n if (CustomBlockFromProps) {\n return undefined\n }\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n return initialState?.['_components']?.customComponents?.Block ?? undefined\n })\n\n const resolvedCustomBlock = useMemo(() => {\n if (CustomBlockFromProps) {\n return (\n <CustomBlockFromProps\n className={baseClass}\n formData={formData}\n isEditor={true}\n isJSXConverter={false}\n nodeKey={nodeKey}\n // eslint-disable-next-line react-compiler/react-compiler -- intentionally passed as a prop for custom block components to call\n useInlineBlockComponentContext={useInlineBlockComponentContext}\n />\n )\n }\n return CustomBlock\n }, [CustomBlockFromProps, baseClass, formData, nodeKey, CustomBlock])\n\n const resolvedCustomLabel = useMemo(() => {\n if (CustomLabelFromProps) {\n return (\n <CustomLabelFromProps\n className={baseClass}\n formData={formData}\n isEditor={true}\n isJSXConverter={false}\n nodeKey={nodeKey}\n // eslint-disable-next-line react-compiler/react-compiler -- intentionally passed as a prop for custom block components to call\n useInlineBlockComponentContext={useInlineBlockComponentContext}\n />\n )\n }\n return CustomLabel\n }, [CustomLabelFromProps, baseClass, formData, nodeKey, CustomLabel])\n\n const drawerSlug = formatDrawerSlug({\n slug: `lexical-inlineBlocks-create-${uuidFromContext}-${formData.id}`,\n depth: editDepth,\n })\n const { toggleDrawer } = useLexicalDrawer(drawerSlug, true)\n\n const inlineBlockElemElemRef = useRef<HTMLDivElement | null>(null)\n const { id, collectionSlug, getDocPreferences, globalSlug } = useDocumentInfo()\n const { config } = useConfig()\n\n const componentMapRenderedBlockPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_inline_blocks.${formData.blockType}`\n\n const clientSchemaMap = featureClientSchemaMap['blocks']\n\n const blocksField: BlocksFieldClient | undefined = clientSchemaMap?.[\n componentMapRenderedBlockPath\n ]?.[0] as BlocksFieldClient | undefined\n\n const clientBlock: ClientBlock | undefined = blocksField?.blockReferences\n ? typeof blocksField?.blockReferences?.[0] === 'string'\n ? config.blocksMap[blocksField?.blockReferences?.[0]]\n : blocksField?.blockReferences?.[0]\n : blocksField?.blocks?.[0]\n\n const clientBlockFields = clientBlock?.fields ?? []\n\n // Open drawer on \"mount\"\n useEffect(() => {\n if (!firstTimeDrawer.current && createdInlineBlock?.getKey() === nodeKey) {\n // > 2 because they always have \"id\" and \"blockName\" fields\n if (clientBlockFields.length > 2) {\n toggleDrawer()\n }\n setCreatedInlineBlock?.(undefined)\n firstTimeDrawer.current = true\n }\n }, [clientBlockFields.length, createdInlineBlock, nodeKey, setCreatedInlineBlock, toggleDrawer])\n\n const removeInlineBlock = useCallback(() => {\n editor.update(() => {\n $getNodeByKey(nodeKey)?.remove()\n })\n }, [editor, nodeKey])\n\n const blockDisplayName = clientBlock?.labels?.singular\n ? getTranslation(clientBlock?.labels.singular, i18n)\n : clientBlock?.slug\n\n const onChangeAbortControllerRef = useRef(new AbortController())\n const schemaFieldsPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_inline_blocks.${clientBlock?.slug}.fields`\n\n // Initial state for newly created blocks\n useEffect(() => {\n const abortController = new AbortController()\n\n const awaitInitialState = async () => {\n /*\n * This will only run if a new block is created. For all existing blocks that are loaded when the document is loaded, or when the form is saved,\n * this is not run, as the lexical field RSC will fetch the state server-side and pass it to the client. That way, we avoid unnecessary client-side\n * requests. Though for newly created blocks, we need to fetch the state client-side, as the server doesn't know about the block yet.\n */\n const { state } = await getFormState({\n id,\n collectionSlug,\n data: formData,\n docPermissions: { fields: true },\n docPreferences: await getDocPreferences(),\n documentFormState: deepCopyObjectSimpleWithoutReactComponents(parentDocumentFields, {\n excludeFiles: true,\n }),\n globalSlug,\n initialBlockData: formData,\n initialBlockFormState: formData,\n operation: 'update',\n readOnly: !isEditable,\n renderAllFields: true,\n schemaPath: schemaFieldsPath,\n signal: abortController.signal,\n })\n\n if (state) {\n const newFormStateData: InlineBlockFields = reduceFieldsToValues(\n deepCopyObjectSimpleWithoutReactComponents(state, { excludeFiles: true }),\n true,\n ) as InlineBlockFields\n\n // Things like default values may come back from the server => update the node with the new data\n editor.update(\n () => {\n const node = $getNodeByKey(nodeKey)\n if (node && $isInlineBlockNode(node)) {\n const newData = newFormStateData\n newData.blockType = formData.blockType\n\n node.setFields(newData, true)\n }\n },\n // Without this, the outer editor's reconciler resets DOM selection\n // back into its own root, kicking focus out of any nested richText.\n { tag: SKIP_DOM_SELECTION_TAG },\n )\n\n setInitialState(state)\n if (!CustomLabelFromProps) {\n setCustomLabel(state['_components']?.customComponents?.BlockLabel)\n }\n if (!CustomBlockFromProps) {\n setCustomBlock(state['_components']?.customComponents?.Block)\n }\n }\n }\n\n if (formData && !initialState) {\n void awaitInitialState()\n }\n\n return () => {\n abortAndIgnore(abortController)\n }\n }, [\n getFormState,\n editor,\n nodeKey,\n isEditable,\n CustomLabelFromProps,\n CustomBlockFromProps,\n schemaFieldsPath,\n id,\n formData,\n initialState,\n collectionSlug,\n globalSlug,\n getDocPreferences,\n parentDocumentFields,\n ])\n\n /**\n * HANDLE ONCHANGE\n */\n const onChange = useCallback(\n async ({ formState: prevFormState, submit }: { formState: FormState; submit?: boolean }) => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n\n const controller = new AbortController()\n onChangeAbortControllerRef.current = controller\n\n const { state } = await getFormState({\n id,\n collectionSlug,\n docPermissions: {\n fields: true,\n },\n docPreferences: await getDocPreferences(),\n documentFormState: deepCopyObjectSimpleWithoutReactComponents(parentDocumentFields, {\n excludeFiles: true,\n }),\n formState: prevFormState,\n globalSlug,\n initialBlockFormState: prevFormState,\n operation: 'update',\n readOnly: !isEditable,\n renderAllFields: submit ? true : false,\n schemaPath: schemaFieldsPath,\n signal: controller.signal,\n })\n\n if (!state) {\n return prevFormState\n }\n\n if (submit) {\n if (!CustomLabelFromProps) {\n setCustomLabel(state['_components']?.customComponents?.BlockLabel)\n }\n if (!CustomBlockFromProps) {\n setCustomBlock(state['_components']?.customComponents?.Block)\n }\n }\n\n return state\n },\n [\n getFormState,\n id,\n collectionSlug,\n getDocPreferences,\n parentDocumentFields,\n globalSlug,\n isEditable,\n schemaFieldsPath,\n CustomBlockFromProps,\n CustomLabelFromProps,\n ],\n )\n // cleanup effect\n useEffect(() => {\n const isStateOutOfSync = (formData: InlineBlockFields, initialState: FormState) => {\n return Object.keys(initialState).some(\n (key) => initialState[key] && formData[key] !== initialState[key].value,\n )\n }\n\n return () => {\n // If the component is unmounted (either via removeInlineBlock or via lexical itself) and the form state got changed before,\n // we need to reset the initial state to force a re-fetch of the initial state when it gets mounted again (e.g. via lexical history undo).\n // Otherwise it would use an outdated initial state.\n if (initialState && isStateOutOfSync(formData, initialState)) {\n setInitialState(false)\n }\n abortAndIgnore(onChangeAbortControllerRef.current)\n }\n }, [formData, initialState])\n\n /**\n * HANDLE FORM SUBMIT\n */\n const onFormSubmit = useCallback(\n (formState: FormState, newData: Data) => {\n newData.blockType = formData.blockType\n\n editor.update(\n () => {\n const node = $getNodeByKey(nodeKey)\n if (node && $isInlineBlockNode(node)) {\n node.setFields(newData as InlineBlockFields, true)\n }\n },\n // Without this, the outer editor's reconciler resets DOM selection\n // back into its own root, kicking focus out of any nested richText.\n { tag: SKIP_DOM_SELECTION_TAG },\n )\n },\n [editor, nodeKey, formData],\n )\n\n const { headerActions, submitRef } = useDrawerSubmit()\n\n const RemoveButton = useMemo(\n () => () => (\n <Button\n buttonStyle=\"ghost\"\n className={`${baseClass}__removeButton`}\n disabled={!isEditable}\n icon=\"x\"\n onClick={(e) => {\n e.preventDefault()\n e.stopPropagation()\n removeInlineBlock()\n }}\n round\n size=\"medium\"\n tooltip={t('lexical:blocks:inlineBlocks:remove', { label: blockDisplayName })}\n />\n ),\n [baseClass, blockDisplayName, isEditable, removeInlineBlock, t],\n )\n\n const EditButton = useMemo(\n () => () => (\n <Button\n buttonStyle=\"ghost\"\n className={`${baseClass}__editButton`}\n disabled={!isEditable}\n el=\"button\"\n icon=\"edit\"\n onClick={() => {\n toggleDrawer()\n }}\n round\n size=\"medium\"\n tooltip={t('lexical:blocks:inlineBlocks:edit', { label: blockDisplayName })}\n />\n ),\n [baseClass, blockDisplayName, isEditable, t, toggleDrawer],\n )\n\n const InlineBlockContainer = useMemo(\n () =>\n ({ children, className }: { children: React.ReactNode; className?: string }) => (\n <div\n className={[`${baseClass}__container`, baseClass + '-' + formData.blockType, className]\n .filter(Boolean)\n .join(' ')}\n {...(isEditable\n ? {\n onClick: () => toggleDrawer(),\n onKeyDown: (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n toggleDrawer()\n }\n },\n role: 'button',\n tabIndex: 0,\n }\n : {})}\n ref={inlineBlockElemElemRef}\n >\n {children}\n </div>\n ),\n [baseClass, formData.blockType, isEditable, toggleDrawer],\n )\n\n const Label = useMemo(() => {\n if (resolvedCustomLabel) {\n return () => resolvedCustomLabel\n } else {\n return () => (\n <div>{clientBlock?.labels ? getTranslation(clientBlock?.labels.singular, i18n) : ''}</div>\n )\n }\n }, [resolvedCustomLabel, clientBlock?.labels, i18n])\n\n if (!clientBlock) {\n return (\n <InlineBlockContainer className={`${baseClass}-not-found`}>\n <span>Error: Block '{formData.blockType}' not found</span>\n {isEditable ? (\n <div className={`${baseClass}__actions`}>\n <RemoveButton />\n </div>\n ) : null}\n </InlineBlockContainer>\n )\n }\n\n return (\n <Form\n beforeSubmit={[\n async ({ formState }) => {\n // This is only called when form is submitted from drawer\n return await onChange({ formState, submit: true })\n },\n ]}\n disableValidationOnSubmit\n el=\"div\"\n fields={clientBlock?.fields}\n initialState={initialState || {}}\n onChange={[onChange]}\n onSubmit={(formState, data) => {\n onFormSubmit(formState, data)\n toggleDrawer()\n }}\n uuid={formUuid}\n >\n <EditDepthProvider>\n <Drawer\n className={''}\n headerActions={headerActions}\n slug={drawerSlug}\n title={t(`lexical:blocks:inlineBlocks:${formData?.id ? 'edit' : 'create'}`, {\n label: blockDisplayName ?? t('lexical:blocks:inlineBlocks:label'),\n })}\n >\n {initialState ? (\n <div className=\"fields-drawer\">\n <RenderFields\n fields={clientBlock?.fields}\n forceRender\n parentIndexPath=\"\"\n parentPath=\"\" // See Blocks feature path for details as for why this is empty\n parentSchemaPath={schemaFieldsPath}\n permissions={true}\n readOnly={!isEditable}\n />\n <RegisterFormSubmit submitRef={submitRef} />\n </div>\n ) : null}\n </Drawer>\n </EditDepthProvider>\n {resolvedCustomBlock ? (\n <InlineBlockComponentContext\n value={{\n EditButton,\n initialState,\n InlineBlockContainer,\n Label,\n nodeKey,\n RemoveButton,\n }}\n >\n {resolvedCustomBlock}\n </InlineBlockComponentContext>\n ) : (\n <InlineBlockContainer>\n {initialState ? <Label /> : <ShimmerEffect height=\"15px\" width=\"40px\" />}\n {isEditable ? (\n <div className={`${baseClass}__actions`}>\n <RemoveButton />\n </div>\n ) : null}\n </InlineBlockContainer>\n )}\n </Form>\n )\n}\n", "'use client'\nimport ObjectID from 'bson-objectid'\nimport {\n $applyNodeReplacement,\n type EditorConfig,\n type LexicalEditor,\n type LexicalNode,\n} from 'lexical'\nimport React, { type JSX } from 'react'\n\nimport type { ViewMapInlineBlockComponentProps } from '../../../../types/index.js'\nimport type { InlineBlockFields, SerializedInlineBlockNode } from '../../server/schema.js'\n\nimport { ServerInlineBlockNode } from '../../server/nodes/InlineBlocksNode.js'\n\nconst InlineBlockComponent = React.lazy(() =>\n import('../componentInline/index.js').then((module) => ({\n default: module.InlineBlockComponent,\n })),\n)\n\nexport type InlineBlockDecorateFunction = (\n editor: LexicalEditor,\n config: EditorConfig,\n CustomBlock?: React.FC<ViewMapInlineBlockComponentProps>,\n CustomLabel?: React.FC<ViewMapInlineBlockComponentProps>,\n) => JSX.Element\n\nexport class InlineBlockNode extends ServerInlineBlockNode {\n static override clone(node: ServerInlineBlockNode): ServerInlineBlockNode {\n return super.clone(node)\n }\n\n static override getType(): string {\n return super.getType()\n }\n\n static override importJSON(serializedNode: SerializedInlineBlockNode): InlineBlockNode {\n const node = $createInlineBlockNode(serializedNode.fields)\n return node\n }\n\n override decorate(\n ...[_editor, config, CustomBlock, CustomLabel]: Parameters<InlineBlockDecorateFunction>\n ): ReturnType<InlineBlockDecorateFunction> {\n return (\n <InlineBlockComponent\n cacheBuster={this.getCacheBuster()}\n className={config.theme.inlineBlock ?? 'LexicalEditorTheme__inlineBlock'}\n CustomBlock={CustomBlock}\n CustomLabel={CustomLabel}\n formData={this.getFields()}\n nodeKey={this.getKey()}\n />\n )\n }\n\n override exportJSON(): SerializedInlineBlockNode {\n return super.exportJSON()\n }\n}\n\nexport function $createInlineBlockNode(fields: Exclude<InlineBlockFields, 'id'>): InlineBlockNode {\n return $applyNodeReplacement(\n new InlineBlockNode({\n fields: {\n ...fields,\n id: fields?.id || new ObjectID.default().toHexString(),\n },\n }),\n )\n}\n\nexport function $isInlineBlockNode(\n node: InlineBlockNode | LexicalNode | null | undefined,\n): node is InlineBlockNode {\n return node instanceof InlineBlockNode\n}\n", "import type {\n DOMConversionMap,\n DOMExportOutput,\n EditorConfig,\n LexicalEditor,\n LexicalNode,\n NodeKey,\n} from 'lexical'\nimport type React from 'react'\nimport type { JSX } from 'react'\n\nimport { addClassNamesToElement } from '@lexical/utils'\nimport ObjectID from 'bson-objectid'\nimport { $applyNodeReplacement, DecoratorNode } from 'lexical'\n\nimport type { InlineBlockFields, SerializedInlineBlockNode } from '../schema.js'\n\nexport class ServerInlineBlockNode extends DecoratorNode<null | React.ReactElement> {\n __cacheBuster: number\n __fields: InlineBlockFields\n\n constructor({\n cacheBuster,\n fields,\n key,\n }: {\n cacheBuster?: number\n fields: InlineBlockFields\n key?: NodeKey\n }) {\n super(key)\n this.__fields = fields\n this.__cacheBuster = cacheBuster || 0\n }\n\n static override clone(node: ServerInlineBlockNode): ServerInlineBlockNode {\n return new this({\n cacheBuster: node.__cacheBuster,\n fields: node.__fields,\n key: node.__key,\n })\n }\n\n static override getType(): string {\n return 'inlineBlock'\n }\n\n static override importDOM(): DOMConversionMap<HTMLDivElement> | null {\n return {}\n }\n\n static override importJSON(serializedNode: SerializedInlineBlockNode): ServerInlineBlockNode {\n const node = $createServerInlineBlockNode(serializedNode.fields)\n return node\n }\n\n static isInline(): false {\n return false\n }\n\n canIndent() {\n return true\n }\n\n override createDOM(config?: EditorConfig): HTMLElement {\n const element = document.createElement('span')\n addClassNamesToElement(element, config?.theme?.inlineBlock)\n return element\n }\n\n override decorate(editor: LexicalEditor, config: EditorConfig): JSX.Element | null {\n return null\n }\n\n override exportDOM(): DOMExportOutput {\n const element = document.createElement('span')\n element.classList.add('inline-block-container')\n\n const text = document.createTextNode(this.getTextContent())\n element.append(text)\n return { element }\n }\n\n override exportJSON(): SerializedInlineBlockNode {\n return {\n type: 'inlineBlock',\n fields: this.getFields(),\n version: 1,\n }\n }\n\n getCacheBuster(): number {\n return this.getLatest().__cacheBuster\n }\n\n getFields(): InlineBlockFields {\n return this.getLatest().__fields\n }\n\n override getTextContent(): string {\n return `Block Field`\n }\n\n override isInline() {\n return true\n }\n\n setFields(fields: InlineBlockFields, preventFormStateUpdate?: boolean): void {\n const writable = this.getWritable()\n writable.__fields = fields\n if (!preventFormStateUpdate) {\n writable.__cacheBuster++\n }\n }\n\n override updateDOM(): boolean {\n return false\n }\n}\n\nexport function $createServerInlineBlockNode(\n fields: Exclude<InlineBlockFields, 'id'>,\n): ServerInlineBlockNode {\n return $applyNodeReplacement(\n new ServerInlineBlockNode({\n fields: {\n ...fields,\n id: fields?.id || new ObjectID.default().toHexString(),\n },\n }),\n )\n}\n\nexport function $isServerInlineBlockNode(\n node: LexicalNode | null | ServerInlineBlockNode | undefined,\n): node is ServerInlineBlockNode {\n return node instanceof ServerInlineBlockNode\n}\n"],
5
- "mappings": "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",
6
- "names": ["useLexicalComposerContext", "useLexicalEditable", "getTranslation", "Button", "Drawer", "EditDepthProvider", "Form", "formatDrawerSlug", "RenderFields", "ShimmerEffect", "useConfig", "useDocumentForm", "useDocumentInfo", "useEditDepth", "useServerFunctions", "useTranslation", "abortAndIgnore", "$getNodeByKey", "SKIP_DOM_SELECTION_TAG", "deepCopyObjectSimpleWithoutReactComponents", "reduceFieldsToValues", "React", "createContext", "useCallback", "useEffect", "useMemo", "useRef", "ObjectID", "$applyNodeReplacement", "React", "addClassNamesToElement", "ObjectID", "$applyNodeReplacement", "DecoratorNode", "ServerInlineBlockNode", "__cacheBuster", "__fields", "constructor", "cacheBuster", "fields", "key", "clone", "node", "__key", "getType", "importDOM", "importJSON", "serializedNode", "$createServerInlineBlockNode", "isInline", "canIndent", "createDOM", "config", "element", "document", "createElement", "theme", "inlineBlock", "decorate", "editor", "exportDOM", "classList", "add", "text", "createTextNode", "getTextContent", "append", "exportJSON", "type", "getFields", "version", "getCacheBuster", "getLatest", "setFields", "preventFormStateUpdate", "writable", "getWritable", "updateDOM", "id", "default", "toHexString", "InlineBlockComponent", "React", "lazy", "then", "module", "default", "InlineBlockNode", "ServerInlineBlockNode", "clone", "node", "getType", "importJSON", "serializedNode", "$createInlineBlockNode", "fields", "decorate", "_editor", "config", "CustomBlock", "CustomLabel", "_jsx", "cacheBuster", "getCacheBuster", "className", "theme", "inlineBlock", "formData", "getFields", "nodeKey", "getKey", "exportJSON", "$applyNodeReplacement", "id", "ObjectID", "toHexString", "$isInlineBlockNode", "InlineBlockComponentContext", "createContext", "$isInlineBlockNode", "initialState", "React", "InlineBlockComponent", "props", "cacheBuster", "baseClass", "CustomBlockFromProps", "className", "CustomBlock", "CustomLabel", "formData", "nodeKey", "useLexicalEditable", "i18n", "t", "createdInlineBlock", "fieldProps", "featureClientSchemaMap", "uuidFromContext", "setCreatedInlineBlock", "useEditorConfigContext", "useDocumentForm", "fields", "getFormState", "useServerFunctions", "useRef", "editDepth", "useEditDepth", "setInitialState", "useState", "cachedFormState", "fieldName", "fieldState", "fromEntries", "entries", "initialValue", "prevCacheBuster", "useEffect", "hasMounted", "current", "formUuid", "uuid", "setCustomLabel", "CustomLabelFromProps", "customComponents", "BlockLabel", "resolvedCustomBlock", "useMemo", "isEditor", "useInlineBlockComponentContext", "resolvedCustomLabel", "drawerSlug", "depth", "toggleDrawer", "useLexicalDrawer", "id", "collectionSlug", "getDocPreferences", "globalSlug", "config", "useConfig", "componentMapRenderedBlockPath", "clientSchemaMap", "blocksField", "clientBlockFields", "firstTimeDrawer", "removeInlineBlock", "useCallback", "editor", "length", "$getNodeByKey", "blockDisplayName", "clientBlock", "getTranslation", "labels", "singular", "schemaFieldsPath", "abortController", "state", "data", "docPermissions", "deepCopyObjectSimpleWithoutReactComponents", "parentDocumentFields", "docPreferences", "documentFormState", "initialBlockData", "initialBlockFormState", "operation", "readOnly", "isEditable", "renderAllFields", "signal", "newFormStateData", "reduceFieldsToValues", "node", "newData", "SKIP_DOM_SELECTION_TAG", "setCustomBlock", "awaitInitialState", "abortAndIgnore", "submit", "formState", "controller", "onChangeAbortControllerRef", "excludeFiles", "prevFormState", "state_0", "isStateOutOfSync", "formData_0", "initialState_0", "key", "Object", "onFormSubmit", "blockType", "node_0", "tag", "headerActions", "submitRef", "useDrawerSubmit", "RemoveButton", "buttonStyle", "disabled", "e", "icon", "onClick", "round", "size", "tooltip", "label", "EditButton", "_jsx", "Button", "el", "InlineBlockContainer", "e_0", "onKeyDown", "role", "tabIndex", "children", "ref", "inlineBlockElemElemRef", "formState_0", "beforeSubmit", "onChange", "disableValidationOnSubmit", "onSubmit", "EditDepthProvider", "Drawer", "slug", "title", "_jsxs", "RenderFields", "forceRender", "parentIndexPath", "parentPath", "parentSchemaPath", "RegisterFormSubmit", "value", "Label", "height", "width"]
7
- }
@@ -1,2 +0,0 @@
1
- "use client";import{a as E,b as U}from"./chunk-UD4DQ4AK.js";import{c as y}from"./chunk-5VIL27GI.js";import{a as L}from"./chunk-WSAPGI3Z.js";import{b as g}from"./chunk-RJ5MAOKZ.js";import{jsx as a,jsxs as f}from"react/jsx-runtime";import{useLexicalComposerContext as ae}from"@lexical/react/LexicalComposerContext.js";import{useLexicalEditable as oe}from"@lexical/react/useLexicalEditable";import{getTranslation as P}from"@payloadcms/translations";import{Button as h,formatDrawerSlug as le,Pill as se,Thumbnail as ie,useConfig as re,useEditDepth as ne,usePayloadAPI as de,useTranslation as ce}from"@payloadcms/ui";import{$getNodeByKey as T,$getSelection as ue,$isNodeSelection as me,$isRangeSelection as pe}from"lexical";import{formatAdminURL as ge,isImage as fe}from"payload/shared";import{useCallback as _,useEffect as F,useId as he,useReducer as _e,useRef as we,useState as I}from"react";var j={depth:0},Te=k=>{let{className:e,data:{fields:z,relationTo:w,value:c},format:A,nodeKey:l}=k;if(typeof c=="object")throw new Error("Upload value should be a string or number. The Lexical Upload component should not receive the populated value object.");let{config:{routes:{api:B},serverURL:K},getEntityConfig:M}=re(),b=we(null),{uuid:O}=g(),W=ne(),[s]=ae(),{editorConfig:H,fieldProps:{schemaPath:q}}=g(),u=oe(),{i18n:D,t:n}=ce(),[S,m]=I(!1),[$,G]=_e(o=>o+1,0),[i]=I(()=>M({collectionSlug:w})),J=he(),x=le({slug:"lexical-upload-drawer-"+O+J,depth:W}),{toggleDrawer:Q}=y(x,!0),{closeDocumentDrawer:C,DocumentDrawer:V,DocumentDrawerToggler:X}=L({id:c,collectionSlug:i.slug}),[{data:t},{setParams:v}]=de(ge({apiRoute:B,path:`/${i.slug}/${c}`,serverURL:K}),{initialParams:j}),N=t?.thumbnailURL||t?.url;F(()=>s.registerUpdateListener(({editorState:o})=>{o.read(()=>{let r=ue();if(me(r))m(r.has(l));else if(pe(r)){let d=r.getNodes();m(d.some(p=>p.getKey()===l))}else m(!1)})}),[s,l]),F(()=>{let o=b.current?.closest(`.${e}`);o&&o.classList.toggle(`${e}--selected`,S)},[S,e]);let Y=_(()=>{s.update(()=>{T(l)?.remove()})},[s,l]),Z=_(o=>{v({...j,cacheBust:$}),G(),C()},[v,$,C]),R=H?.resolvedFeatureMap?.get("upload")?.sanitizedClientFeatureProps.collections?.[i.slug]?.hasExtraFields,ee=_((o,r)=>{s.update(()=>{let d=T(l);if(d){let p={...d.getData(),fields:r};d.setData(p)}})},[s,l]),te=N&&t?.width&&t?.height?t.width>t.height?"landscape":"portrait":"landscape";return f("div",{className:`${e}__contents ${e}__contents--${te}`,"data-align":A||void 0,"data-filename":t?.filename,ref:b,children:[a("div",{className:`${e}__card`,children:f("div",{className:`${e}__media`,children:[a(ie,{collectionSlug:w,fileSrc:fe(t?.mimeType)?N:null,height:t?.height,size:"none",width:t?.width}),u&&f("div",{className:`${e}__floater`,"data-theme":"dark",children:[a(se,{className:`${e}__collectionLabel`,pillStyle:"dark",size:"small",children:P(i.labels.singular,D)}),a(X,{className:`${e}__doc-drawer-toggler`,children:a("span",{className:`${e}__filename`,children:t?.filename||n("general:untitled")})}),R?a(h,{buttonStyle:"ghost",className:`${e}__upload-drawer-toggler`,disabled:!u,el:"button",icon:"write",onClick:Q,round:!0,size:"medium",tooltip:n("fields:editRelationship")}):null,a("div",{className:`${e}__divider`}),a(h,{buttonStyle:"ghost",className:`${e}__swap-drawer-toggler`,disabled:!u,el:"button",icon:"swap",onClick:()=>{s.dispatchCommand(U,{replace:{nodeKey:l}})},round:!0,size:"medium",tooltip:n("fields:swapUpload")}),a(h,{buttonStyle:"ghost",className:`${e}__removeButton`,disabled:!u,icon:"x",onClick:o=>{o.preventDefault(),Y()},round:!0,size:"medium",tooltip:n("fields:removeUpload")})]})]})}),c?a(V,{onSave:Z}):null,R?a(E,{data:z,drawerSlug:x,drawerTitle:n("general:editLabel",{label:P(i.labels.singular,D)}),featureKey:"upload",handleDrawerSubmit:ee,schemaPath:q,schemaPathSuffix:i.slug}):null]})};export{Te as UploadComponent};
2
- //# sourceMappingURL=component-PHZQBOJE.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/features/upload/client/component/index.tsx"],
4
- "sourcesContent": ["'use client'\nimport type { ClientCollectionConfig, Data, FormState, JsonObject } from 'payload'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { useLexicalEditable } from '@lexical/react/useLexicalEditable'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n Button,\n formatDrawerSlug,\n Pill,\n Thumbnail,\n useConfig,\n useEditDepth,\n usePayloadAPI,\n useTranslation,\n} from '@payloadcms/ui'\nimport {\n $getNodeByKey,\n $getSelection,\n $isNodeSelection,\n $isRangeSelection,\n type ElementFormatType,\n} from 'lexical'\nimport { formatAdminURL, isImage } from 'payload/shared'\nimport React, { useCallback, useEffect, useId, useReducer, useRef, useState } from 'react'\n\nimport type { BaseClientFeatureProps } from '../../../typesClient.js'\nimport type { UploadData } from '../../server/schema.js'\nimport type { UploadFeaturePropsClient } from '../index.js'\nimport type { UploadNode } from '../nodes/UploadNode.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport { FieldsDrawer } from '../../../../utilities/fieldsDrawer/Drawer.js'\nimport { useLexicalDocumentDrawer } from '../../../../utilities/fieldsDrawer/useLexicalDocumentDrawer.js'\nimport { useLexicalDrawer } from '../../../../utilities/fieldsDrawer/useLexicalDrawer.js'\nimport { INSERT_UPLOAD_WITH_DRAWER_COMMAND } from '../drawer/commands.js'\nimport './index.css'\n\nconst initialParams = {\n depth: 0,\n}\n\nexport type ElementProps = {\n className: string\n data: UploadData\n format?: ElementFormatType\n nodeKey: string\n}\n\nexport const UploadComponent: React.FC<ElementProps> = (props) => {\n const {\n className: baseClass,\n data: { fields, relationTo, value },\n format,\n nodeKey,\n } = props\n\n if (typeof value === 'object') {\n throw new Error(\n 'Upload value should be a string or number. The Lexical Upload component should not receive the populated value object.',\n )\n }\n\n const {\n config: {\n routes: { api },\n serverURL,\n },\n getEntityConfig,\n } = useConfig()\n const uploadRef = useRef<HTMLDivElement | null>(null)\n const { uuid } = useEditorConfigContext()\n const editDepth = useEditDepth()\n const [editor] = useLexicalComposerContext()\n\n const {\n editorConfig,\n fieldProps: { schemaPath },\n } = useEditorConfigContext()\n const isEditable = useLexicalEditable()\n const { i18n, t } = useTranslation()\n const [isSelected, setIsSelected] = useState(false)\n const [cacheBust, dispatchCacheBust] = useReducer((state) => state + 1, 0)\n const [relatedCollection] = useState<ClientCollectionConfig>(() =>\n getEntityConfig({ collectionSlug: relationTo }),\n )\n\n const componentID = useId()\n\n const extraFieldsDrawerSlug = formatDrawerSlug({\n slug: `lexical-upload-drawer-` + uuid + componentID, // There can be multiple upload components, each with their own drawer, in one single editor => separate them by componentID\n depth: editDepth,\n })\n\n // Need to use hook to initialize useEffect that restores cursor position\n const { toggleDrawer } = useLexicalDrawer(extraFieldsDrawerSlug, true)\n\n const { closeDocumentDrawer, DocumentDrawer, DocumentDrawerToggler } = useLexicalDocumentDrawer({\n id: value,\n collectionSlug: relatedCollection.slug,\n })\n\n // Get the referenced document\n const [{ data }, { setParams }] = usePayloadAPI(\n formatAdminURL({ apiRoute: api, path: `/${relatedCollection.slug}/${value}`, serverURL }),\n { initialParams },\n )\n\n const thumbnailSRC = data?.thumbnailURL || data?.url\n\n useEffect(() => {\n return editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n const selection = $getSelection()\n\n if ($isNodeSelection(selection)) {\n setIsSelected(selection.has(nodeKey))\n } else if ($isRangeSelection(selection)) {\n const nodes = selection.getNodes()\n setIsSelected(nodes.some((node) => node.getKey() === nodeKey))\n } else {\n setIsSelected(false)\n }\n })\n })\n }, [editor, nodeKey])\n\n useEffect(() => {\n const outerEl = uploadRef.current?.closest(`.${baseClass}`)\n\n if (outerEl) {\n outerEl.classList.toggle(`${baseClass}--selected`, isSelected)\n }\n }, [isSelected, baseClass])\n\n const removeUpload = useCallback(() => {\n editor.update(() => {\n $getNodeByKey(nodeKey)?.remove()\n })\n }, [editor, nodeKey])\n\n const updateUpload = useCallback(\n (_data: Data) => {\n setParams({\n ...initialParams,\n cacheBust, // do this to get the usePayloadAPI to re-fetch the data even though the URL string hasn't changed\n })\n\n dispatchCacheBust()\n closeDocumentDrawer()\n },\n [setParams, cacheBust, closeDocumentDrawer],\n )\n\n const hasExtraFields = (\n editorConfig?.resolvedFeatureMap?.get('upload')\n ?.sanitizedClientFeatureProps as BaseClientFeatureProps<UploadFeaturePropsClient>\n ).collections?.[relatedCollection.slug]?.hasExtraFields\n\n const onExtraFieldsDrawerSubmit = useCallback(\n (_: FormState, data: JsonObject) => {\n // Update lexical node (with key nodeKey) with new data\n editor.update(() => {\n const uploadNode: null | UploadNode = $getNodeByKey(nodeKey)\n if (uploadNode) {\n const newData: UploadData = {\n ...uploadNode.getData(),\n fields: data,\n }\n uploadNode.setData(newData)\n }\n })\n },\n [editor, nodeKey],\n )\n\n const aspectRatio =\n thumbnailSRC && data?.width && data?.height\n ? data.width > data.height\n ? 'landscape'\n : 'portrait'\n : 'landscape'\n\n return (\n <div\n className={`${baseClass}__contents ${baseClass}__contents--${aspectRatio}`}\n data-align={format || undefined}\n data-filename={data?.filename}\n ref={uploadRef}\n >\n <div className={`${baseClass}__card`}>\n <div className={`${baseClass}__media`}>\n <Thumbnail\n collectionSlug={relationTo}\n fileSrc={isImage(data?.mimeType) ? thumbnailSRC : null}\n height={data?.height}\n size=\"none\"\n width={data?.width}\n />\n\n {isEditable && (\n <div className={`${baseClass}__floater`} data-theme=\"dark\">\n <Pill className={`${baseClass}__collectionLabel`} pillStyle=\"dark\" size=\"small\">\n {getTranslation(relatedCollection.labels.singular, i18n)}\n </Pill>\n\n <DocumentDrawerToggler className={`${baseClass}__doc-drawer-toggler`}>\n <span className={`${baseClass}__filename`}>\n {data?.filename || t('general:untitled')}\n </span>\n </DocumentDrawerToggler>\n\n {hasExtraFields ? (\n <Button\n buttonStyle=\"ghost\"\n className={`${baseClass}__upload-drawer-toggler`}\n disabled={!isEditable}\n el=\"button\"\n icon=\"write\"\n onClick={toggleDrawer}\n round\n size=\"medium\"\n tooltip={t('fields:editRelationship')}\n />\n ) : null}\n\n <div className={`${baseClass}__divider`} />\n\n <Button\n buttonStyle=\"ghost\"\n className={`${baseClass}__swap-drawer-toggler`}\n disabled={!isEditable}\n el=\"button\"\n icon=\"swap\"\n onClick={() => {\n editor.dispatchCommand(INSERT_UPLOAD_WITH_DRAWER_COMMAND, {\n replace: { nodeKey },\n })\n }}\n round\n size=\"medium\"\n tooltip={t('fields:swapUpload')}\n />\n\n <Button\n buttonStyle=\"ghost\"\n className={`${baseClass}__removeButton`}\n disabled={!isEditable}\n icon=\"x\"\n onClick={(e) => {\n e.preventDefault()\n removeUpload()\n }}\n round\n size=\"medium\"\n tooltip={t('fields:removeUpload')}\n />\n </div>\n )}\n </div>\n </div>\n\n {value ? <DocumentDrawer onSave={updateUpload} /> : null}\n {hasExtraFields ? (\n <FieldsDrawer\n data={fields}\n drawerSlug={extraFieldsDrawerSlug}\n drawerTitle={t('general:editLabel', {\n label: getTranslation(relatedCollection.labels.singular, i18n),\n })}\n featureKey=\"upload\"\n handleDrawerSubmit={onExtraFieldsDrawerSubmit}\n schemaPath={schemaPath}\n schemaPathSuffix={relatedCollection.slug}\n />\n ) : null}\n </div>\n )\n}\n"],
5
- "mappings": "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",
6
- "names": ["useLexicalComposerContext", "useLexicalEditable", "getTranslation", "Button", "formatDrawerSlug", "Pill", "Thumbnail", "useConfig", "useEditDepth", "usePayloadAPI", "useTranslation", "$getNodeByKey", "$getSelection", "$isNodeSelection", "$isRangeSelection", "formatAdminURL", "isImage", "useCallback", "useEffect", "useId", "useReducer", "useRef", "useState", "initialParams", "UploadComponent", "props", "baseClass", "className", "data", "fields", "relationTo", "format", "nodeKey", "value", "config", "routes", "serverURL", "getEntityConfig", "useConfig", "useRef", "uploadRef", "uuid", "useEditorConfigContext", "editDepth", "useLexicalComposerContext", "editorConfig", "fieldProps", "isEditable", "i18n", "t", "useTranslation", "setIsSelected", "useState", "isSelected", "dispatchCacheBust", "state", "cacheBust", "useReducer", "relatedCollection", "collectionSlug", "componentID", "useId", "formatDrawerSlug", "extraFieldsDrawerSlug", "slug", "toggleDrawer", "useLexicalDrawer", "closeDocumentDrawer", "DocumentDrawer", "DocumentDrawerToggler", "useLexicalDocumentDrawer", "id", "setParams", "usePayloadAPI", "apiRoute", "api", "path", "thumbnailSRC", "useEffect", "editor", "editorState", "$getSelection", "$isNodeSelection", "selection", "nodes", "$isRangeSelection", "getNodes", "node", "outerEl", "removeUpload", "useCallback", "_data", "updateUpload", "hasExtraFields", "resolvedFeatureMap", "update", "$getNodeByKey", "uploadNode", "newData", "aspectRatio", "ref", "_jsx", "_jsxs", "Thumbnail", "fileSrc", "isImage", "height", "size", "width", "Pill", "pillStyle", "getTranslation", "labels", "buttonStyle", "disabled", "el", "icon", "onClick", "round", "tooltip", "INSERT_UPLOAD_WITH_DRAWER_COMMAND", "dispatchCommand", "replace", "Button", "e", "preventDefault", "onSave", "drawerSlug", "drawerTitle", "featureKey", "onExtraFieldsDrawerSubmit", "handleDrawerSubmit", "schemaPath", "schemaPathSuffix"]
7
- }
@@ -1,2 +0,0 @@
1
- "use client";import{a,b}from"./chunk-ZYXHC5CY.js";import"./chunk-5VIL27GI.js";import"./chunk-RJ5MAOKZ.js";export{b as InlineBlockComponent,a as useInlineBlockComponentContext};
2
- //# sourceMappingURL=componentInline-R3EPNYWF.js.map
@@ -1,11 +0,0 @@
1
- /**
2
- * Browser-condition stub for `@payloadcms/richtext-lexical/rsc`.
3
- *
4
- * Bundlers serving the client graph load this file via the `"browser"` export
5
- * condition in `package.json`. The real implementations rely on server-only
6
- * APIs and must never be evaluated in a browser context.
7
- */
8
- export declare const RscEntryLexicalCell: () => null;
9
- export declare const LexicalDiffComponent: () => null;
10
- export declare const RscEntryLexicalField: () => null;
11
- //# sourceMappingURL=rsc.browser.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rsc.browser.d.ts","sourceRoot":"","sources":["../../../src/exports/server/rsc.browser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,eAAO,MAAM,mBAAmB,YAAa,CAAA;AAC7C,eAAO,MAAM,oBAAoB,YAAa,CAAA;AAC9C,eAAO,MAAM,oBAAoB,YAAa,CAAA"}
@@ -1,10 +0,0 @@
1
- /**
2
- * Browser-condition stub for `@payloadcms/richtext-lexical/rsc`.
3
- *
4
- * Bundlers serving the client graph load this file via the `"browser"` export
5
- * condition in `package.json`. The real implementations rely on server-only
6
- * APIs and must never be evaluated in a browser context.
7
- */export const RscEntryLexicalCell = () => null;
8
- export const LexicalDiffComponent = () => null;
9
- export const RscEntryLexicalField = () => null;
10
- //# sourceMappingURL=rsc.browser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rsc.browser.js","names":["RscEntryLexicalCell","LexicalDiffComponent","RscEntryLexicalField"],"sources":["../../../src/exports/server/rsc.browser.ts"],"sourcesContent":["/**\n * Browser-condition stub for `@payloadcms/richtext-lexical/rsc`.\n *\n * Bundlers serving the client graph load this file via the `\"browser\"` export\n * condition in `package.json`. The real implementations rely on server-only\n * APIs and must never be evaluated in a browser context.\n */\n\nexport const RscEntryLexicalCell = () => null\nexport const LexicalDiffComponent = () => null\nexport const RscEntryLexicalField = () => null\n"],"mappings":"AAAA;;;;;;GAQA,OAAO,MAAMA,mBAAA,GAAsBA,CAAA,KAAM;AACzC,OAAO,MAAMC,oBAAA,GAAuBA,CAAA,KAAM;AAC1C,OAAO,MAAMC,oBAAA,GAAuBA,CAAA,KAAM","ignoreList":[]}
@@ -1,3 +0,0 @@
1
- import type { ElementTransformer } from '../../packages/@lexical/markdown/index.js';
2
- export declare const MarkdownTransformer: ElementTransformer;
3
- //# sourceMappingURL=markdownTransformer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"markdownTransformer.d.ts","sourceRoot":"","sources":["../../../src/features/blockquote/markdownTransformer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAA;AAEnF,eAAO,MAAM,mBAAmB,EAAE,kBAgCjC,CAAA"}
@@ -1,33 +0,0 @@
1
- import { $createQuoteNode, $isQuoteNode, QuoteNode } from '@lexical/rich-text';
2
- export const MarkdownTransformer = {
3
- type: 'element',
4
- dependencies: [QuoteNode],
5
- export: (node, exportChildren) => {
6
- if (!$isQuoteNode(node)) {
7
- return null;
8
- }
9
- const lines = exportChildren(node).split('\n');
10
- const output = [];
11
- for (const line of lines) {
12
- output.push('> ' + line);
13
- }
14
- return output.join('\n');
15
- },
16
- regExp: /^>\s/,
17
- replace: (parentNode, children, _match, isImport) => {
18
- if (isImport) {
19
- const previousNode = parentNode.getPreviousSibling();
20
- if ($isQuoteNode(previousNode)) {
21
- previousNode.splice(previousNode.getChildrenSize(), 0, [...children]);
22
- previousNode.select(0, 0);
23
- parentNode.remove();
24
- return;
25
- }
26
- }
27
- const node = $createQuoteNode();
28
- node.append(...children);
29
- parentNode.replace(node);
30
- node.select(0, 0);
31
- }
32
- };
33
- //# sourceMappingURL=markdownTransformer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"markdownTransformer.js","names":["$createQuoteNode","$isQuoteNode","QuoteNode","MarkdownTransformer","type","dependencies","export","node","exportChildren","lines","split","output","line","push","join","regExp","replace","parentNode","children","_match","isImport","previousNode","getPreviousSibling","splice","getChildrenSize","select","remove","append"],"sources":["../../../src/features/blockquote/markdownTransformer.ts"],"sourcesContent":["import { $createQuoteNode, $isQuoteNode, QuoteNode } from '@lexical/rich-text'\n\nimport type { ElementTransformer } from '../../packages/@lexical/markdown/index.js'\n\nexport const MarkdownTransformer: ElementTransformer = {\n type: 'element',\n dependencies: [QuoteNode],\n export: (node, exportChildren) => {\n if (!$isQuoteNode(node)) {\n return null\n }\n\n const lines = exportChildren(node).split('\\n')\n const output: string[] = []\n for (const line of lines) {\n output.push('> ' + line)\n }\n return output.join('\\n')\n },\n regExp: /^>\\s/,\n replace: (parentNode, children, _match, isImport) => {\n if (isImport) {\n const previousNode = parentNode.getPreviousSibling()\n if ($isQuoteNode(previousNode)) {\n previousNode.splice(previousNode.getChildrenSize(), 0, [...children])\n previousNode.select(0, 0)\n parentNode.remove()\n return\n }\n }\n\n const node = $createQuoteNode()\n node.append(...children)\n parentNode.replace(node)\n node.select(0, 0)\n },\n}\n"],"mappings":"AAAA,SAASA,gBAAgB,EAAEC,YAAY,EAAEC,SAAS,QAAQ;AAI1D,OAAO,MAAMC,mBAAA,GAA0C;EACrDC,IAAA,EAAM;EACNC,YAAA,EAAc,CAACH,SAAA,CAAU;EACzBI,MAAA,EAAQA,CAACC,IAAA,EAAMC,cAAA;IACb,IAAI,CAACP,YAAA,CAAaM,IAAA,GAAO;MACvB,OAAO;IACT;IAEA,MAAME,KAAA,GAAQD,cAAA,CAAeD,IAAA,EAAMG,KAAK,CAAC;IACzC,MAAMC,MAAA,GAAmB,EAAE;IAC3B,KAAK,MAAMC,IAAA,IAAQH,KAAA,EAAO;MACxBE,MAAA,CAAOE,IAAI,CAAC,OAAOD,IAAA;IACrB;IACA,OAAOD,MAAA,CAAOG,IAAI,CAAC;EACrB;EACAC,MAAA,EAAQ;EACRC,OAAA,EAASA,CAACC,UAAA,EAAYC,QAAA,EAAUC,MAAA,EAAQC,QAAA;IACtC,IAAIA,QAAA,EAAU;MACZ,MAAMC,YAAA,GAAeJ,UAAA,CAAWK,kBAAkB;MAClD,IAAIrB,YAAA,CAAaoB,YAAA,GAAe;QAC9BA,YAAA,CAAaE,MAAM,CAACF,YAAA,CAAaG,eAAe,IAAI,GAAG,C,GAAIN,QAAA,CAAS;QACpEG,YAAA,CAAaI,MAAM,CAAC,GAAG;QACvBR,UAAA,CAAWS,MAAM;QACjB;MACF;IACF;IAEA,MAAMnB,IAAA,GAAOP,gBAAA;IACbO,IAAA,CAAKoB,MAAM,IAAIT,QAAA;IACfD,UAAA,CAAWD,OAAO,CAACT,IAAA;IACnBA,IAAA,CAAKkB,MAAM,CAAC,GAAG;EACjB;AACF","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/features/experimental_table/client/index.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,kBAAkB,8EAmD7B,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":["TableCellNode","TableNode","TableRowNode","TableIcon","createClientFeature","slashMenuBasicGroupWithItems","toolbarAddDropdownGroupWithItems","TableMarkdownTransformer","TableActionMenuPlugin","TableCellResizerPlugin","TableHoverActionsPlugin","OPEN_TABLE_DRAWER_COMMAND","TableContext","TablePlugin","TableFeatureClient","markdownTransformers","nodes","plugins","Component","position","providers","slashMenu","groups","Icon","key","keywords","label","onSelect","editor","dispatchCommand","toolbarFixed","ChildComponent"],"sources":["../../../../src/features/experimental_table/client/index.ts"],"sourcesContent":["'use client'\n\nimport { TableCellNode, TableNode, TableRowNode } from '@lexical/table'\n\nimport { TableIcon } from '../../../lexical/ui/icons/Table/index.js'\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { slashMenuBasicGroupWithItems } from '../../shared/slashMenu/basicGroup.js'\nimport { toolbarAddDropdownGroupWithItems } from '../../shared/toolbar/addDropdownGroup.js'\nimport { TableMarkdownTransformer } from '../markdownTransformer.js'\nimport { TableActionMenuPlugin } from './plugins/TableActionMenuPlugin/index.js'\nimport { TableCellResizerPlugin } from './plugins/TableCellResizerPlugin/index.js'\nimport { TableHoverActionsPlugin } from './plugins/TableHoverActionsPlugin/index.js'\nimport {\n OPEN_TABLE_DRAWER_COMMAND,\n TableContext,\n TablePlugin,\n} from './plugins/TablePlugin/index.js'\n\nexport const TableFeatureClient = createClientFeature({\n markdownTransformers: [TableMarkdownTransformer],\n nodes: [TableNode, TableCellNode, TableRowNode],\n plugins: [\n {\n Component: TablePlugin,\n position: 'normal',\n },\n {\n Component: TableCellResizerPlugin,\n position: 'normal',\n },\n {\n Component: TableActionMenuPlugin,\n position: 'floatingAnchorElem',\n },\n {\n Component: TableHoverActionsPlugin,\n position: 'floatingAnchorElem',\n },\n ],\n providers: [TableContext],\n slashMenu: {\n groups: [\n slashMenuBasicGroupWithItems([\n {\n Icon: TableIcon,\n key: 'table',\n keywords: ['table'],\n label: 'Table',\n onSelect: ({ editor }) => {\n editor.dispatchCommand(OPEN_TABLE_DRAWER_COMMAND, {})\n },\n },\n ]),\n ],\n },\n toolbarFixed: {\n groups: [\n toolbarAddDropdownGroupWithItems([\n {\n ChildComponent: TableIcon,\n key: 'table',\n label: 'Table',\n onSelect: ({ editor }) => {\n editor.dispatchCommand(OPEN_TABLE_DRAWER_COMMAND, {})\n },\n },\n ]),\n ],\n },\n})\n"],"mappings":"AAAA;;AAEA,SAASA,aAAa,EAAEC,SAAS,EAAEC,YAAY,QAAQ;AAEvD,SAASC,SAAS,QAAQ;AAC1B,SAASC,mBAAmB,QAAQ;AACpC,SAASC,4BAA4B,QAAQ;AAC7C,SAASC,gCAAgC,QAAQ;AACjD,SAASC,wBAAwB,QAAQ;AACzC,SAASC,qBAAqB,QAAQ;AACtC,SAASC,sBAAsB,QAAQ;AACvC,SAASC,uBAAuB,QAAQ;AACxC,SACEC,yBAAyB,EACzBC,YAAY,EACZC,WAAW,QACN;AAEP,OAAO,MAAMC,kBAAA,GAAqBV,mBAAA,CAAoB;EACpDW,oBAAA,EAAsB,CAACR,wBAAA,CAAyB;EAChDS,KAAA,EAAO,CAACf,SAAA,EAAWD,aAAA,EAAeE,YAAA,CAAa;EAC/Ce,OAAA,EAAS,CACP;IACEC,SAAA,EAAWL,WAAA;IACXM,QAAA,EAAU;EACZ,GACA;IACED,SAAA,EAAWT,sBAAA;IACXU,QAAA,EAAU;EACZ,GACA;IACED,SAAA,EAAWV,qBAAA;IACXW,QAAA,EAAU;EACZ,GACA;IACED,SAAA,EAAWR,uBAAA;IACXS,QAAA,EAAU;EACZ,EACD;EACDC,SAAA,EAAW,CAACR,YAAA,CAAa;EACzBS,SAAA,EAAW;IACTC,MAAA,EAAQ,CACNjB,4BAAA,CAA6B,CAC3B;MACEkB,IAAA,EAAMpB,SAAA;MACNqB,GAAA,EAAK;MACLC,QAAA,EAAU,CAAC,QAAQ;MACnBC,KAAA,EAAO;MACPC,QAAA,EAAUA,CAAC;QAAEC;MAAM,CAAE;QACnBA,MAAA,CAAOC,eAAe,CAAClB,yBAAA,EAA2B,CAAC;MACrD;IACF,EACD;EAEL;EACAmB,YAAA,EAAc;IACZR,MAAA,EAAQ,CACNhB,gCAAA,CAAiC,CAC/B;MACEyB,cAAA,EAAgB5B,SAAA;MAChBqB,GAAA,EAAK;MACLE,KAAA,EAAO;MACPC,QAAA,EAAUA,CAAC;QAAEC;MAAM,CAAE;QACnBA,MAAA,CAAOC,eAAe,CAAClB,yBAAA,EAA2B,CAAC;MACrD;IACF,EACD;EAEL;AACF","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/features/experimental_table/client/plugins/TableActionMenuPlugin/index.tsx"],"names":[],"mappings":"AA6CA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAA;AAE3E,OAAO,aAAa,CAAA;AA6oBpB,eAAO,MAAM,qBAAqB,EAAE,yBAQnC,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","useLexicalEditable","$computeTableMapSkipCellCheck","$deleteTableColumnAtSelection","$deleteTableRowAtSelection","$getNodeTriplet","$getTableCellNodeFromLexicalNode","$getTableColumnIndexFromTableCellNode","$getTableNodeFromLexicalNodeOrThrow","$getTableRowIndexFromTableCellNode","$insertTableColumnAtSelection","$insertTableRowAtSelection","$isTableCellNode","$isTableSelection","$mergeCells","$unmergeCell","getTableElement","getTableObserverFromTableElement","TableCellHeaderStates","TableCellNode","mergeRegister","useScrollInfo","$getSelection","$isElementNode","$isRangeSelection","$isTextNode","$setSelection","COMMAND_PRIORITY_CRITICAL","getDOMSelection","isDOMNode","SELECTION_CHANGE_COMMAND","React","useCallback","useEffect","useRef","useState","createPortal","MeatballsIcon","computeSelectionCount","selection","selectionShape","getShape","columns","toX","fromX","rows","toY","fromY","$canUnmerge","isCollapsed","anchor","is","focus","cell","__colSpan","__rowSpan","$selectLastDescendant","node","lastDescendant","getLastDescendant","select","selectEnd","selectNext","TableActionMenu","cellMerge","contextRef","onClose","setIsMenuOpen","tableCellNode","_tableCellNode","editor","dropDownRef","updateTableCellNode","selectionCounts","updateSelectionCounts","canMergeCells","setCanMergeCells","canUnmergeCell","setCanUnmergeCell","y","registerMutationListener","nodeMutations","nodeUpdated","get","getKey","getEditorState","read","getLatest","skipInitialization","currentSelectionCounts","menuButtonElement","current","dropDownElement","rootElement","getRootElement","rootEleRect","getBoundingClientRect","menuButtonRect","style","opacity","dropDownElementRect","margin","leftPosition","right","width","window","innerWidth","position","left","pageXOffset","topPosition","top","height","innerHeight","bottom","handleClickOutside","event","target","contains","addEventListener","removeEventListener","clearTableSelection","update","isAttached","tableNode","tableElement","getElementByKey","Error","tableObserver","$clearHighlight","markDirty","mergeTableCellsAtSelection","nodes","getNodes","tableCells","filter","targetCell","unmergeTableCellsAtSelection","insertTableRowAtSelection","shouldInsertAfter","i","insertTableColumnAtSelection","deleteTableRowAtSelection","deleteTableAtSelection","remove","deleteTableColumnAtSelection","toggleTableRowIsHeader","tableRowIndex","gridMap","rowCells","Set","newStyle","getHeaderStyles","ROW","col","length","mapCell","has","add","setHeaderStyles","toggleTableColumnIsHeader","tableColumnIndex","columnCells","COLUMN","row","toggleRowStriping","setRowStriping","getRowStriping","toggleFirstColumnFreeze","setFrozenColumns","getFrozenColumns","mergeCellButton","_jsx","className","onClick","type","_jsxs","e","stopPropagation","ref","Fragment","__headerState","document","body","TableCellActionMenuContainer","anchorElem","menuButtonRef","menuRootRef","isMenuOpen","setTableMenuCellNode","$moveMenu","menu","nativeSelection","_window","activeElement","disable","classList","tableCellParentNodeDOM","anchorNode","tableCellNodeFromSelection","getNode","enabled","isSelecting","toggle","tableCellRect","anchorRect","transform","timeoutId","undefined","callback","delayedCallback","setTimeout","registerUpdateListener","registerCommand","registerRootListener","prevRootElement","clearTimeout","prevTableCellDOM","TableActionMenuPlugin","t0","$","isEditable","t1"],"sources":["../../../../../../src/features/experimental_table/client/plugins/TableActionMenuPlugin/index.tsx"],"sourcesContent":["'use client'\n\nimport type { TableObserver, TableSelection } from '@lexical/table'\nimport type { ElementNode } from 'lexical'\nimport type { JSX } from 'react'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { useLexicalEditable } from '@lexical/react/useLexicalEditable'\nimport {\n $computeTableMapSkipCellCheck,\n $deleteTableColumnAtSelection,\n $deleteTableRowAtSelection,\n $getNodeTriplet,\n $getTableCellNodeFromLexicalNode,\n $getTableColumnIndexFromTableCellNode,\n $getTableNodeFromLexicalNodeOrThrow,\n $getTableRowIndexFromTableCellNode,\n $insertTableColumnAtSelection,\n $insertTableRowAtSelection,\n $isTableCellNode,\n $isTableSelection,\n $mergeCells,\n $unmergeCell,\n getTableElement,\n getTableObserverFromTableElement,\n TableCellHeaderStates,\n TableCellNode,\n} from '@lexical/table'\nimport { mergeRegister } from '@lexical/utils'\nimport { useScrollInfo } from '@payloadcms/ui'\nimport {\n $getSelection,\n $isElementNode,\n $isRangeSelection,\n $isTextNode,\n $setSelection,\n COMMAND_PRIORITY_CRITICAL,\n getDOMSelection,\n isDOMNode,\n SELECTION_CHANGE_COMMAND,\n} from 'lexical'\nimport * as React from 'react'\nimport { useCallback, useEffect, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport type { PluginComponentWithAnchor } from '../../../../typesClient.js'\n\nimport './index.css'\nimport { MeatballsIcon } from '../../../../../lexical/ui/icons/Meatballs/index.js'\n\nfunction computeSelectionCount(selection: TableSelection): {\n columns: number\n rows: number\n} {\n const selectionShape = selection.getShape()\n return {\n columns: selectionShape.toX - selectionShape.fromX + 1,\n rows: selectionShape.toY - selectionShape.fromY + 1,\n }\n}\n\nfunction $canUnmerge(): boolean {\n const selection = $getSelection()\n if (\n ($isRangeSelection(selection) && !selection.isCollapsed()) ||\n ($isTableSelection(selection) && !selection.anchor.is(selection.focus)) ||\n (!$isRangeSelection(selection) && !$isTableSelection(selection))\n ) {\n return false\n }\n const [cell] = $getNodeTriplet(selection.anchor)\n return cell.__colSpan > 1 || cell.__rowSpan > 1\n}\n\nfunction $selectLastDescendant(node: ElementNode): void {\n const lastDescendant = node.getLastDescendant()\n if ($isTextNode(lastDescendant)) {\n lastDescendant.select()\n } else if ($isElementNode(lastDescendant)) {\n lastDescendant.selectEnd()\n } else if (lastDescendant !== null) {\n lastDescendant.selectNext()\n }\n}\n\ntype TableCellActionMenuProps = Readonly<{\n cellMerge: boolean\n contextRef: { current: HTMLElement | null }\n onClose: () => void\n setIsMenuOpen: (isOpen: boolean) => void\n tableCellNode: TableCellNode\n}>\n\nfunction TableActionMenu({\n cellMerge,\n contextRef,\n onClose,\n setIsMenuOpen,\n tableCellNode: _tableCellNode,\n}: TableCellActionMenuProps) {\n const [editor] = useLexicalComposerContext()\n const dropDownRef = useRef<HTMLDivElement | null>(null)\n const [tableCellNode, updateTableCellNode] = useState(_tableCellNode)\n const [selectionCounts, updateSelectionCounts] = useState({\n columns: 1,\n rows: 1,\n })\n const [canMergeCells, setCanMergeCells] = useState(false)\n const [canUnmergeCell, setCanUnmergeCell] = useState(false)\n const { y } = useScrollInfo()\n\n useEffect(() => {\n return editor.registerMutationListener(\n TableCellNode,\n (nodeMutations) => {\n const nodeUpdated = nodeMutations.get(tableCellNode.getKey()) === 'updated'\n\n if (nodeUpdated) {\n editor.getEditorState().read(() => {\n updateTableCellNode(tableCellNode.getLatest())\n })\n }\n },\n { skipInitialization: true },\n )\n }, [editor, tableCellNode])\n\n useEffect(() => {\n editor.getEditorState().read(() => {\n const selection = $getSelection()\n // Merge cells\n if ($isTableSelection(selection)) {\n const currentSelectionCounts = computeSelectionCount(selection)\n updateSelectionCounts(computeSelectionCount(selection))\n\n setCanMergeCells(currentSelectionCounts.columns > 1 || currentSelectionCounts.rows > 1)\n }\n // Unmerge cell\n setCanUnmergeCell($canUnmerge())\n })\n }, [editor])\n\n useEffect(() => {\n const menuButtonElement = contextRef.current\n const dropDownElement = dropDownRef.current\n const rootElement = editor.getRootElement()\n\n if (menuButtonElement != null && dropDownElement != null && rootElement != null) {\n const rootEleRect = rootElement.getBoundingClientRect()\n const menuButtonRect = menuButtonElement.getBoundingClientRect()\n dropDownElement.style.opacity = '1'\n const dropDownElementRect = dropDownElement.getBoundingClientRect()\n const margin = 5\n let leftPosition = menuButtonRect.right + margin\n if (\n leftPosition + dropDownElementRect.width > window.innerWidth ||\n leftPosition + dropDownElementRect.width > rootEleRect.right\n ) {\n const position = menuButtonRect.left - dropDownElementRect.width - margin\n leftPosition = (position < 0 ? margin : position) + window.pageXOffset\n }\n dropDownElement.style.left = `${leftPosition + window.pageXOffset}px`\n\n let topPosition = menuButtonRect.top\n if (topPosition + dropDownElementRect.height > window.innerHeight) {\n const position = menuButtonRect.bottom - dropDownElementRect.height\n topPosition = position < 0 ? margin : position\n }\n dropDownElement.style.top = `${topPosition}px`\n }\n }, [contextRef, dropDownRef, editor, y])\n\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (\n dropDownRef.current != null &&\n contextRef.current != null &&\n isDOMNode(event.target) &&\n !dropDownRef.current.contains(event.target) &&\n !contextRef.current.contains(event.target)\n ) {\n setIsMenuOpen(false)\n }\n }\n\n window.addEventListener('click', handleClickOutside)\n\n return () => window.removeEventListener('click', handleClickOutside)\n }, [setIsMenuOpen, contextRef])\n\n const clearTableSelection = useCallback(() => {\n editor.update(() => {\n if (tableCellNode.isAttached()) {\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n const tableElement = getTableElement(tableNode, editor.getElementByKey(tableNode.getKey()))\n\n if (tableElement === null) {\n throw new Error('Expected to find tableElement in DOM')\n }\n\n const tableObserver = getTableObserverFromTableElement(tableElement)\n if (tableObserver !== null) {\n tableObserver.$clearHighlight()\n }\n\n tableNode.markDirty()\n updateTableCellNode(tableCellNode.getLatest())\n }\n\n $setSelection(null)\n })\n }, [editor, tableCellNode])\n\n const mergeTableCellsAtSelection = () => {\n editor.update(() => {\n const selection = $getSelection()\n if (!$isTableSelection(selection)) {\n return\n }\n const nodes = selection.getNodes()\n const tableCells = nodes.filter($isTableCellNode)\n const targetCell = $mergeCells(tableCells)\n\n if (targetCell) {\n $selectLastDescendant(targetCell)\n onClose()\n }\n })\n }\n\n const unmergeTableCellsAtSelection = () => {\n editor.update(() => {\n $unmergeCell()\n })\n }\n\n const insertTableRowAtSelection = useCallback(\n (shouldInsertAfter: boolean) => {\n editor.update(() => {\n for (let i = 0; i < selectionCounts.rows; i++) {\n $insertTableRowAtSelection(shouldInsertAfter)\n }\n onClose()\n })\n },\n [editor, onClose, selectionCounts.rows],\n )\n\n const insertTableColumnAtSelection = useCallback(\n (shouldInsertAfter: boolean) => {\n editor.update(() => {\n for (let i = 0; i < selectionCounts.columns; i++) {\n $insertTableColumnAtSelection(shouldInsertAfter)\n }\n onClose()\n })\n },\n [editor, onClose, selectionCounts.columns],\n )\n\n const deleteTableRowAtSelection = useCallback(() => {\n editor.update(() => {\n $deleteTableRowAtSelection()\n onClose()\n })\n }, [editor, onClose])\n\n const deleteTableAtSelection = useCallback(() => {\n editor.update(() => {\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n tableNode.remove()\n\n clearTableSelection()\n onClose()\n })\n }, [editor, tableCellNode, clearTableSelection, onClose])\n\n const deleteTableColumnAtSelection = useCallback(() => {\n editor.update(() => {\n $deleteTableColumnAtSelection()\n onClose()\n })\n }, [editor, onClose])\n\n const toggleTableRowIsHeader = useCallback(() => {\n editor.update(() => {\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n\n const tableRowIndex = $getTableRowIndexFromTableCellNode(tableCellNode)\n\n const [gridMap] = $computeTableMapSkipCellCheck(tableNode, null, null)\n\n const rowCells = new Set<TableCellNode>()\n\n const newStyle = tableCellNode.getHeaderStyles() ^ TableCellHeaderStates.ROW\n if (gridMap[tableRowIndex]) {\n for (let col = 0; col < gridMap[tableRowIndex].length; col++) {\n const mapCell = gridMap[tableRowIndex][col]\n\n if (!mapCell?.cell) {\n continue\n }\n\n if (!rowCells.has(mapCell.cell)) {\n rowCells.add(mapCell.cell)\n mapCell.cell.setHeaderStyles(newStyle, TableCellHeaderStates.ROW)\n }\n }\n }\n\n clearTableSelection()\n onClose()\n })\n }, [editor, tableCellNode, clearTableSelection, onClose])\n\n const toggleTableColumnIsHeader = useCallback(() => {\n editor.update(() => {\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n\n const tableColumnIndex = $getTableColumnIndexFromTableCellNode(tableCellNode)\n\n const [gridMap] = $computeTableMapSkipCellCheck(tableNode, null, null)\n\n const columnCells = new Set<TableCellNode>()\n\n const newStyle = tableCellNode.getHeaderStyles() ^ TableCellHeaderStates.COLUMN\n if (gridMap) {\n for (let row = 0; row < gridMap.length; row++) {\n const mapCell = gridMap?.[row]?.[tableColumnIndex]\n\n if (!mapCell?.cell) {\n continue\n }\n\n if (!columnCells.has(mapCell.cell)) {\n columnCells.add(mapCell.cell)\n mapCell.cell.setHeaderStyles(newStyle, TableCellHeaderStates.COLUMN)\n }\n }\n }\n\n clearTableSelection()\n onClose()\n })\n }, [editor, tableCellNode, clearTableSelection, onClose])\n\n const toggleRowStriping = useCallback(() => {\n editor.update(() => {\n if (tableCellNode.isAttached()) {\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n if (tableNode) {\n tableNode.setRowStriping(!tableNode.getRowStriping())\n }\n }\n\n clearTableSelection()\n onClose()\n })\n }, [editor, tableCellNode, clearTableSelection, onClose])\n\n const toggleFirstColumnFreeze = useCallback(() => {\n editor.update(() => {\n if (tableCellNode.isAttached()) {\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n if (tableNode) {\n tableNode.setFrozenColumns(tableNode.getFrozenColumns() === 0 ? 1 : 0)\n }\n }\n clearTableSelection()\n onClose()\n })\n }, [editor, tableCellNode, clearTableSelection, onClose])\n\n let mergeCellButton: JSX.Element | null = null\n if (cellMerge) {\n if (canMergeCells) {\n mergeCellButton = (\n <button\n className=\"item\"\n data-test-id=\"table-merge-cells\"\n onClick={() => mergeTableCellsAtSelection()}\n type=\"button\"\n >\n <span className=\"text\">Merge cells</span>\n </button>\n )\n } else if (canUnmergeCell) {\n mergeCellButton = (\n <button\n className=\"item\"\n data-test-id=\"table-unmerge-cells\"\n onClick={() => unmergeTableCellsAtSelection()}\n type=\"button\"\n >\n <span className=\"text\">Unmerge cells</span>\n </button>\n )\n }\n }\n\n return createPortal(\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions,jsx-a11y/click-events-have-key-events\n <div\n className=\"table-action-menu-dropdown\"\n onClick={(e) => {\n e.stopPropagation()\n }}\n ref={dropDownRef}\n >\n {mergeCellButton ? (\n <React.Fragment>\n {mergeCellButton}\n <hr />\n </React.Fragment>\n ) : null}\n\n <button\n className=\"item\"\n data-test-id=\"table-row-striping\"\n onClick={() => toggleRowStriping()}\n type=\"button\"\n >\n <span className=\"text\">Toggle row striping</span>\n </button>\n <button\n className=\"item\"\n data-test-id=\"table-freeze-first-column\"\n onClick={() => toggleFirstColumnFreeze()}\n type=\"button\"\n >\n <span className=\"text\">Toggle first column freeze</span>\n </button>\n <button\n className=\"item\"\n data-test-id=\"table-insert-row-above\"\n onClick={() => insertTableRowAtSelection(false)}\n type=\"button\"\n >\n <span className=\"text\">\n Insert {selectionCounts.rows === 1 ? 'row' : `${selectionCounts.rows} rows`} above\n </span>\n </button>\n <button\n className=\"item\"\n data-test-id=\"table-insert-row-below\"\n onClick={() => insertTableRowAtSelection(true)}\n type=\"button\"\n >\n <span className=\"text\">\n Insert {selectionCounts.rows === 1 ? 'row' : `${selectionCounts.rows} rows`} below\n </span>\n </button>\n <hr />\n <button\n className=\"item\"\n data-test-id=\"table-insert-column-before\"\n onClick={() => insertTableColumnAtSelection(false)}\n type=\"button\"\n >\n <span className=\"text\">\n Insert {selectionCounts.columns === 1 ? 'column' : `${selectionCounts.columns} columns`}{' '}\n left\n </span>\n </button>\n <button\n className=\"item\"\n data-test-id=\"table-insert-column-after\"\n onClick={() => insertTableColumnAtSelection(true)}\n type=\"button\"\n >\n <span className=\"text\">\n Insert {selectionCounts.columns === 1 ? 'column' : `${selectionCounts.columns} columns`}{' '}\n right\n </span>\n </button>\n <hr />\n <button\n className=\"item\"\n data-test-id=\"table-delete-columns\"\n onClick={() => deleteTableColumnAtSelection()}\n type=\"button\"\n >\n <span className=\"text\">Delete column</span>\n </button>\n <button\n className=\"item\"\n data-test-id=\"table-delete-rows\"\n onClick={() => deleteTableRowAtSelection()}\n type=\"button\"\n >\n <span className=\"text\">Delete row</span>\n </button>\n <button\n className=\"item\"\n data-test-id=\"table-delete\"\n onClick={() => deleteTableAtSelection()}\n type=\"button\"\n >\n <span className=\"text\">Delete table</span>\n </button>\n <hr />\n <button\n className=\"item\"\n data-test-id=\"table-row-header\"\n onClick={() => toggleTableRowIsHeader()}\n type=\"button\"\n >\n <span className=\"text\">\n {(tableCellNode.__headerState & TableCellHeaderStates.ROW) === TableCellHeaderStates.ROW\n ? 'Remove'\n : 'Add'}{' '}\n row header\n </span>\n </button>\n <button\n className=\"item\"\n data-test-id=\"table-column-header\"\n onClick={() => toggleTableColumnIsHeader()}\n type=\"button\"\n >\n <span className=\"text\">\n {(tableCellNode.__headerState & TableCellHeaderStates.COLUMN) ===\n TableCellHeaderStates.COLUMN\n ? 'Remove'\n : 'Add'}{' '}\n column header\n </span>\n </button>\n </div>,\n document.body,\n )\n}\n\nfunction TableCellActionMenuContainer({\n anchorElem,\n cellMerge,\n}: {\n anchorElem: HTMLElement\n cellMerge: boolean\n}): JSX.Element {\n const [editor] = useLexicalComposerContext()\n\n const menuButtonRef = useRef<HTMLDivElement | null>(null)\n const menuRootRef = useRef<HTMLButtonElement | null>(null)\n const [isMenuOpen, setIsMenuOpen] = useState(false)\n\n const [tableCellNode, setTableMenuCellNode] = useState<null | TableCellNode>(null)\n\n const $moveMenu = useCallback(() => {\n const menu = menuButtonRef.current\n const selection = $getSelection()\n const nativeSelection = getDOMSelection(editor._window)\n const activeElement = document.activeElement\n function disable() {\n if (menu) {\n menu.classList.remove('table-cell-action-button-container--active')\n menu.classList.add('table-cell-action-button-container--inactive')\n }\n setTableMenuCellNode(null)\n }\n\n if (selection == null || menu == null) {\n return disable()\n }\n\n const rootElement = editor.getRootElement()\n let tableObserver: null | TableObserver = null\n let tableCellParentNodeDOM: HTMLElement | null = null\n\n if (\n $isRangeSelection(selection) &&\n rootElement !== null &&\n nativeSelection !== null &&\n rootElement.contains(nativeSelection.anchorNode)\n ) {\n const tableCellNodeFromSelection = $getTableCellNodeFromLexicalNode(\n selection.anchor.getNode(),\n )\n\n if (tableCellNodeFromSelection == null) {\n return disable()\n }\n\n tableCellParentNodeDOM = editor.getElementByKey(tableCellNodeFromSelection.getKey())\n\n if (tableCellParentNodeDOM == null || !tableCellNodeFromSelection.isAttached()) {\n return disable()\n }\n\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNodeFromSelection)\n const tableElement = getTableElement(tableNode, editor.getElementByKey(tableNode.getKey()))\n\n if (tableElement === null) {\n throw new Error('TableActionMenu: Expected to find tableElement in DOM')\n }\n\n tableObserver = getTableObserverFromTableElement(tableElement)\n setTableMenuCellNode(tableCellNodeFromSelection)\n } else if ($isTableSelection(selection)) {\n const anchorNode = $getTableCellNodeFromLexicalNode(selection.anchor.getNode())\n if (!$isTableCellNode(anchorNode)) {\n throw new Error('TableSelection anchorNode must be a TableCellNode')\n }\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(anchorNode)\n const tableElement = getTableElement(tableNode, editor.getElementByKey(tableNode.getKey()))\n\n if (tableElement === null) {\n throw new Error('TableActionMenu: Expected to find tableElement in DOM')\n }\n\n tableObserver = getTableObserverFromTableElement(tableElement)\n tableCellParentNodeDOM = editor.getElementByKey(anchorNode.getKey())\n } else if (!activeElement) {\n return disable()\n }\n if (tableObserver === null || tableCellParentNodeDOM === null) {\n return disable()\n }\n const enabled = !tableObserver || !tableObserver.isSelecting\n menu.classList.toggle('table-cell-action-button-container--active', enabled)\n menu.classList.toggle('table-cell-action-button-container--inactive', !enabled)\n if (enabled) {\n const tableCellRect = tableCellParentNodeDOM.getBoundingClientRect()\n const anchorRect = anchorElem.getBoundingClientRect()\n const top = tableCellRect.top - anchorRect.top\n const left = tableCellRect.right - anchorRect.left\n menu.style.transform = `translate(${left}px, ${top}px)`\n }\n }, [editor, anchorElem])\n\n useEffect(() => {\n // We call the $moveMenu callback every time the selection changes,\n // once up front, and once after each pointerup\n let timeoutId: ReturnType<typeof setTimeout> | undefined = undefined\n const callback = () => {\n timeoutId = undefined\n editor.getEditorState().read($moveMenu)\n }\n const delayedCallback = () => {\n if (timeoutId === undefined) {\n timeoutId = setTimeout(callback, 0)\n }\n return false\n }\n return mergeRegister(\n editor.registerUpdateListener(delayedCallback),\n editor.registerCommand(SELECTION_CHANGE_COMMAND, delayedCallback, COMMAND_PRIORITY_CRITICAL),\n editor.registerRootListener((rootElement, prevRootElement) => {\n if (prevRootElement) {\n prevRootElement.removeEventListener('pointerup', delayedCallback)\n }\n if (rootElement) {\n rootElement.addEventListener('pointerup', delayedCallback)\n delayedCallback()\n }\n }),\n () => clearTimeout(timeoutId),\n )\n })\n\n const prevTableCellDOM = useRef(tableCellNode)\n\n useEffect(() => {\n if (prevTableCellDOM.current !== tableCellNode) {\n setIsMenuOpen(false)\n }\n\n prevTableCellDOM.current = tableCellNode\n }, [prevTableCellDOM, tableCellNode])\n\n return (\n <div className=\"table-cell-action-button-container\" ref={menuButtonRef}>\n {tableCellNode != null && (\n <React.Fragment>\n <button\n className=\"table-cell-action-button\"\n onClick={(e) => {\n e.stopPropagation()\n setIsMenuOpen(!isMenuOpen)\n }}\n ref={menuRootRef}\n type=\"button\"\n >\n <MeatballsIcon />\n </button>\n {isMenuOpen && (\n <TableActionMenu\n cellMerge={cellMerge}\n contextRef={menuRootRef}\n onClose={() => setIsMenuOpen(false)}\n setIsMenuOpen={setIsMenuOpen}\n tableCellNode={tableCellNode}\n />\n )}\n </React.Fragment>\n )}\n </div>\n )\n}\n\nexport const TableActionMenuPlugin: PluginComponentWithAnchor = ({ anchorElem }) => {\n const isEditable = useLexicalEditable()\n return createPortal(\n isEditable ? (\n <TableCellActionMenuContainer anchorElem={anchorElem ?? document.body} cellMerge />\n ) : null,\n anchorElem ?? document.body,\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAMA,SAASC,yBAAyB,QAAQ;AAC1C,SAASC,kBAAkB,QAAQ;AACnC,SACEC,6BAA6B,EAC7BC,6BAA6B,EAC7BC,0BAA0B,EAC1BC,eAAe,EACfC,gCAAgC,EAChCC,qCAAqC,EACrCC,mCAAmC,EACnCC,kCAAkC,EAClCC,6BAA6B,EAC7BC,0BAA0B,EAC1BC,gBAAgB,EAChBC,iBAAiB,EACjBC,WAAW,EACXC,YAAY,EACZC,eAAe,EACfC,gCAAgC,EAChCC,qBAAqB,EACrBC,aAAa,QACR;AACP,SAASC,aAAa,QAAQ;AAC9B,SAASC,aAAa,QAAQ;AAC9B,SACEC,aAAa,EACbC,cAAc,EACdC,iBAAiB,EACjBC,WAAW,EACXC,aAAa,EACbC,yBAAyB,EACzBC,eAAe,EACfC,SAAS,EACTC,wBAAwB,QACnB;AACP,YAAYC,KAAA,MAAW;AACvB,SAASC,WAAW,EAAEC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ;AACzD,SAASC,YAAY,QAAQ;AAI7B,OAAO;AACP,SAASC,aAAa,QAAQ;AAE9B,SAASC,sBAAsBC,SAAyB;EAItD,MAAMC,cAAA,GAAiBD,SAAA,CAAUE,QAAQ;EACzC,OAAO;IACLC,OAAA,EAASF,cAAA,CAAeG,GAAG,GAAGH,cAAA,CAAeI,KAAK,GAAG;IACrDC,IAAA,EAAML,cAAA,CAAeM,GAAG,GAAGN,cAAA,CAAeO,KAAK,GAAG;EACpD;AACF;AAEA,SAASC,YAAA;EACP,MAAMT,SAAA,GAAYjB,aAAA;EAClB,IACEE,iBAAC,CAAkBe,SAAA,KAAc,CAACA,SAAA,CAAUU,WAAW,MACtDpC,iBAAA,CAAkB0B,SAAA,KAAc,CAACA,SAAA,CAAUW,MAAM,CAACC,EAAE,CAACZ,SAAA,CAAUa,KAAK,KACpE,CAAC5B,iBAAA,CAAkBe,SAAA,KAAc,CAAC1B,iBAAA,CAAkB0B,SAAA,GACrD;IACA,OAAO;EACT;EACA,MAAM,CAACc,IAAA,CAAK,GAAGhD,eAAA,CAAgBkC,SAAA,CAAUW,MAAM;EAC/C,OAAOG,IAAA,CAAKC,SAAS,GAAG,KAAKD,IAAA,CAAKE,SAAS,GAAG;AAChD;AAEA,SAASC,sBAAsBC,IAAiB;EAC9C,MAAMC,cAAA,GAAiBD,IAAA,CAAKE,iBAAiB;EAC7C,IAAIlC,WAAA,CAAYiC,cAAA,GAAiB;IAC/BA,cAAA,CAAeE,MAAM;EACvB,OAAO,IAAIrC,cAAA,CAAemC,cAAA,GAAiB;IACzCA,cAAA,CAAeG,SAAS;EAC1B,OAAO,IAAIH,cAAA,KAAmB,MAAM;IAClCA,cAAA,CAAeI,UAAU;EAC3B;AACF;AAUA,SAASC,gBAAgB;EACvBC,SAAS;EACTC,UAAU;EACVC,OAAO;EACPC,aAAa;EACbC,aAAA,EAAeC;AAAc,CACJ;EACzB,MAAM,CAACC,MAAA,CAAO,GAAGtE,yBAAA;EACjB,MAAMuE,WAAA,GAAcrC,MAAA,CAA8B;EAClD,MAAM,CAACkC,aAAA,EAAeI,mBAAA,CAAoB,GAAGrC,QAAA,CAASkC,cAAA;EACtD,MAAM,CAACI,eAAA,EAAiBC,qBAAA,CAAsB,GAAGvC,QAAA,CAAS;IACxDO,OAAA,EAAS;IACTG,IAAA,EAAM;EACR;EACA,MAAM,CAAC8B,aAAA,EAAeC,gBAAA,CAAiB,GAAGzC,QAAA,CAAS;EACnD,MAAM,CAAC0C,cAAA,EAAgBC,iBAAA,CAAkB,GAAG3C,QAAA,CAAS;EACrD,MAAM;IAAE4C;EAAC,CAAE,GAAG1D,aAAA;EAEdY,SAAA,CAAU;IACR,OAAOqC,MAAA,CAAOU,wBAAwB,CACpC7D,aAAA,EACC8D,aAAA;MACC,MAAMC,WAAA,GAAcD,aAAA,CAAcE,GAAG,CAACf,aAAA,CAAcgB,MAAM,QAAQ;MAElE,IAAIF,WAAA,EAAa;QACfZ,MAAA,CAAOe,cAAc,GAAGC,IAAI,CAAC;UAC3Bd,mBAAA,CAAoBJ,aAAA,CAAcmB,SAAS;QAC7C;MACF;IACF,GACA;MAAEC,kBAAA,EAAoB;IAAK;EAE/B,GAAG,CAAClB,MAAA,EAAQF,aAAA,CAAc;EAE1BnC,SAAA,CAAU;IACRqC,MAAA,CAAOe,cAAc,GAAGC,IAAI,CAAC;MAC3B,MAAM/C,SAAA,GAAYjB,aAAA;MAClB;MACA,IAAIT,iBAAA,CAAkB0B,SAAA,GAAY;QAChC,MAAMkD,sBAAA,GAAyBnD,qBAAA,CAAsBC,SAAA;QACrDmC,qBAAA,CAAsBpC,qBAAA,CAAsBC,SAAA;QAE5CqC,gBAAA,CAAiBa,sBAAA,CAAuB/C,OAAO,GAAG,KAAK+C,sBAAA,CAAuB5C,IAAI,GAAG;MACvF;MACA;MACAiC,iBAAA,CAAkB9B,WAAA;IACpB;EACF,GAAG,CAACsB,MAAA,CAAO;EAEXrC,SAAA,CAAU;IACR,MAAMyD,iBAAA,GAAoBzB,UAAA,CAAW0B,OAAO;IAC5C,MAAMC,eAAA,GAAkBrB,WAAA,CAAYoB,OAAO;IAC3C,MAAME,WAAA,GAAcvB,MAAA,CAAOwB,cAAc;IAEzC,IAAIJ,iBAAA,IAAqB,QAAQE,eAAA,IAAmB,QAAQC,WAAA,IAAe,MAAM;MAC/E,MAAME,WAAA,GAAcF,WAAA,CAAYG,qBAAqB;MACrD,MAAMC,cAAA,GAAiBP,iBAAA,CAAkBM,qBAAqB;MAC9DJ,eAAA,CAAgBM,KAAK,CAACC,OAAO,GAAG;MAChC,MAAMC,mBAAA,GAAsBR,eAAA,CAAgBI,qBAAqB;MACjE,MAAMK,MAAA,GAAS;MACf,IAAIC,YAAA,GAAeL,cAAA,CAAeM,KAAK,GAAGF,MAAA;MAC1C,IACEC,YAAA,GAAeF,mBAAA,CAAoBI,KAAK,GAAGC,MAAA,CAAOC,UAAU,IAC5DJ,YAAA,GAAeF,mBAAA,CAAoBI,KAAK,GAAGT,WAAA,CAAYQ,KAAK,EAC5D;QACA,MAAMI,QAAA,GAAWV,cAAA,CAAeW,IAAI,GAAGR,mBAAA,CAAoBI,KAAK,GAAGH,MAAA;QACnEC,YAAA,GAAe,CAACK,QAAA,GAAW,IAAIN,MAAA,GAASM,QAAO,IAAKF,MAAA,CAAOI,WAAW;MACxE;MACAjB,eAAA,CAAgBM,KAAK,CAACU,IAAI,GAAG,GAAGN,YAAA,GAAeG,MAAA,CAAOI,WAAW,IAAI;MAErE,IAAIC,WAAA,GAAcb,cAAA,CAAec,GAAG;MACpC,IAAID,WAAA,GAAcV,mBAAA,CAAoBY,MAAM,GAAGP,MAAA,CAAOQ,WAAW,EAAE;QACjE,MAAMN,UAAA,GAAWV,cAAA,CAAeiB,MAAM,GAAGd,mBAAA,CAAoBY,MAAM;QACnEF,WAAA,GAAcH,UAAA,GAAW,IAAIN,MAAA,GAASM,UAAA;MACxC;MACAf,eAAA,CAAgBM,KAAK,CAACa,GAAG,GAAG,GAAGD,WAAA,IAAe;IAChD;EACF,GAAG,CAAC7C,UAAA,EAAYM,WAAA,EAAaD,MAAA,EAAQS,CAAA,CAAE;EAEvC9C,SAAA,CAAU;IACR,SAASkF,mBAAmBC,KAAiB;MAC3C,IACE7C,WAAA,CAAYoB,OAAO,IAAI,QACvB1B,UAAA,CAAW0B,OAAO,IAAI,QACtB9D,SAAA,CAAUuF,KAAA,CAAMC,MAAM,KACtB,CAAC9C,WAAA,CAAYoB,OAAO,CAAC2B,QAAQ,CAACF,KAAA,CAAMC,MAAM,KAC1C,CAACpD,UAAA,CAAW0B,OAAO,CAAC2B,QAAQ,CAACF,KAAA,CAAMC,MAAM,GACzC;QACAlD,aAAA,CAAc;MAChB;IACF;IAEAsC,MAAA,CAAOc,gBAAgB,CAAC,SAASJ,kBAAA;IAEjC,OAAO,MAAMV,MAAA,CAAOe,mBAAmB,CAAC,SAASL,kBAAA;EACnD,GAAG,CAAChD,aAAA,EAAeF,UAAA,CAAW;EAE9B,MAAMwD,mBAAA,GAAsBzF,WAAA,CAAY;IACtCsC,MAAA,CAAOoD,MAAM,CAAC;MACZ,IAAItD,aAAA,CAAcuD,UAAU,IAAI;QAC9B,MAAMC,SAAA,GAAYpH,mCAAA,CAAoC4D,aAAA;QACtD,MAAMyD,YAAA,GAAe7G,eAAA,CAAgB4G,SAAA,EAAWtD,MAAA,CAAOwD,eAAe,CAACF,SAAA,CAAUxC,MAAM;QAEvF,IAAIyC,YAAA,KAAiB,MAAM;UACzB,MAAM,IAAIE,KAAA,CAAM;QAClB;QAEA,MAAMC,aAAA,GAAgB/G,gCAAA,CAAiC4G,YAAA;QACvD,IAAIG,aAAA,KAAkB,MAAM;UAC1BA,aAAA,CAAcC,eAAe;QAC/B;QAEAL,SAAA,CAAUM,SAAS;QACnB1D,mBAAA,CAAoBJ,aAAA,CAAcmB,SAAS;MAC7C;MAEA7D,aAAA,CAAc;IAChB;EACF,GAAG,CAAC4C,MAAA,EAAQF,aAAA,CAAc;EAE1B,MAAM+D,0BAAA,GAA6BA,CAAA;IACjC7D,MAAA,CAAOoD,MAAM,CAAC;MACZ,MAAMnF,WAAA,GAAYjB,aAAA;MAClB,IAAI,CAACT,iBAAA,CAAkB0B,WAAA,GAAY;QACjC;MACF;MACA,MAAM6F,KAAA,GAAQ7F,WAAA,CAAU8F,QAAQ;MAChC,MAAMC,UAAA,GAAaF,KAAA,CAAMG,MAAM,CAAC3H,gBAAA;MAChC,MAAM4H,UAAA,GAAa1H,WAAA,CAAYwH,UAAA;MAE/B,IAAIE,UAAA,EAAY;QACdhF,qBAAA,CAAsBgF,UAAA;QACtBtE,OAAA;MACF;IACF;EACF;EAEA,MAAMuE,4BAAA,GAA+BA,CAAA;IACnCnE,MAAA,CAAOoD,MAAM,CAAC;MACZ3G,YAAA;IACF;EACF;EAEA,MAAM2H,yBAAA,GAA4B1G,WAAA,CAC/B2G,iBAAA;IACCrE,MAAA,CAAOoD,MAAM,CAAC;MACZ,KAAK,IAAIkB,CAAA,GAAI,GAAGA,CAAA,GAAInE,eAAA,CAAgB5B,IAAI,EAAE+F,CAAA,IAAK;QAC7CjI,0BAAA,CAA2BgI,iBAAA;MAC7B;MACAzE,OAAA;IACF;EACF,GACA,CAACI,MAAA,EAAQJ,OAAA,EAASO,eAAA,CAAgB5B,IAAI,CAAC;EAGzC,MAAMgG,4BAAA,GAA+B7G,WAAA,CAClC2G,mBAAA;IACCrE,MAAA,CAAOoD,MAAM,CAAC;MACZ,KAAK,IAAIkB,GAAA,GAAI,GAAGA,GAAA,GAAInE,eAAA,CAAgB/B,OAAO,EAAEkG,GAAA,IAAK;QAChDlI,6BAAA,CAA8BiI,mBAAA;MAChC;MACAzE,OAAA;IACF;EACF,GACA,CAACI,MAAA,EAAQJ,OAAA,EAASO,eAAA,CAAgB/B,OAAO,CAAC;EAG5C,MAAMoG,yBAAA,GAA4B9G,WAAA,CAAY;IAC5CsC,MAAA,CAAOoD,MAAM,CAAC;MACZtH,0BAAA;MACA8D,OAAA;IACF;EACF,GAAG,CAACI,MAAA,EAAQJ,OAAA,CAAQ;EAEpB,MAAM6E,sBAAA,GAAyB/G,WAAA,CAAY;IACzCsC,MAAA,CAAOoD,MAAM,CAAC;MACZ,MAAME,WAAA,GAAYpH,mCAAA,CAAoC4D,aAAA;MACtDwD,WAAA,CAAUoB,MAAM;MAEhBvB,mBAAA;MACAvD,OAAA;IACF;EACF,GAAG,CAACI,MAAA,EAAQF,aAAA,EAAeqD,mBAAA,EAAqBvD,OAAA,CAAQ;EAExD,MAAM+E,4BAAA,GAA+BjH,WAAA,CAAY;IAC/CsC,MAAA,CAAOoD,MAAM,CAAC;MACZvH,6BAAA;MACA+D,OAAA;IACF;EACF,GAAG,CAACI,MAAA,EAAQJ,OAAA,CAAQ;EAEpB,MAAMgF,sBAAA,GAAyBlH,WAAA,CAAY;IACzCsC,MAAA,CAAOoD,MAAM,CAAC;MACZ,MAAME,WAAA,GAAYpH,mCAAA,CAAoC4D,aAAA;MAEtD,MAAM+E,aAAA,GAAgB1I,kCAAA,CAAmC2D,aAAA;MAEzD,MAAM,CAACgF,OAAA,CAAQ,GAAGlJ,6BAAA,CAA8B0H,WAAA,EAAW,MAAM;MAEjE,MAAMyB,QAAA,GAAW,IAAIC,GAAA;MAErB,MAAMC,QAAA,GAAWnF,aAAA,CAAcoF,eAAe,KAAKtI,qBAAA,CAAsBuI,GAAG;MAC5E,IAAIL,OAAO,CAACD,aAAA,CAAc,EAAE;QAC1B,KAAK,IAAIO,GAAA,GAAM,GAAGA,GAAA,GAAMN,OAAO,CAACD,aAAA,CAAc,CAACQ,MAAM,EAAED,GAAA,IAAO;UAC5D,MAAME,OAAA,GAAUR,OAAO,CAACD,aAAA,CAAc,CAACO,GAAA,CAAI;UAE3C,IAAI,CAACE,OAAA,EAASvG,IAAA,EAAM;YAClB;UACF;UAEA,IAAI,CAACgG,QAAA,CAASQ,GAAG,CAACD,OAAA,CAAQvG,IAAI,GAAG;YAC/BgG,QAAA,CAASS,GAAG,CAACF,OAAA,CAAQvG,IAAI;YACzBuG,OAAA,CAAQvG,IAAI,CAAC0G,eAAe,CAACR,QAAA,EAAUrI,qBAAA,CAAsBuI,GAAG;UAClE;QACF;MACF;MAEAhC,mBAAA;MACAvD,OAAA;IACF;EACF,GAAG,CAACI,MAAA,EAAQF,aAAA,EAAeqD,mBAAA,EAAqBvD,OAAA,CAAQ;EAExD,MAAM8F,yBAAA,GAA4BhI,WAAA,CAAY;IAC5CsC,MAAA,CAAOoD,MAAM,CAAC;MACZ,MAAME,WAAA,GAAYpH,mCAAA,CAAoC4D,aAAA;MAEtD,MAAM6F,gBAAA,GAAmB1J,qCAAA,CAAsC6D,aAAA;MAE/D,MAAM,CAACgF,SAAA,CAAQ,GAAGlJ,6BAAA,CAA8B0H,WAAA,EAAW,MAAM;MAEjE,MAAMsC,WAAA,GAAc,IAAIZ,GAAA;MAExB,MAAMC,UAAA,GAAWnF,aAAA,CAAcoF,eAAe,KAAKtI,qBAAA,CAAsBiJ,MAAM;MAC/E,IAAIf,SAAA,EAAS;QACX,KAAK,IAAIgB,GAAA,GAAM,GAAGA,GAAA,GAAMhB,SAAA,CAAQO,MAAM,EAAES,GAAA,IAAO;UAC7C,MAAMR,SAAA,GAAUR,SAAA,GAAUgB,GAAA,CAAI,GAAGH,gBAAA,CAAiB;UAElD,IAAI,CAACL,SAAA,EAASvG,IAAA,EAAM;YAClB;UACF;UAEA,IAAI,CAAC6G,WAAA,CAAYL,GAAG,CAACD,SAAA,CAAQvG,IAAI,GAAG;YAClC6G,WAAA,CAAYJ,GAAG,CAACF,SAAA,CAAQvG,IAAI;YAC5BuG,SAAA,CAAQvG,IAAI,CAAC0G,eAAe,CAACR,UAAA,EAAUrI,qBAAA,CAAsBiJ,MAAM;UACrE;QACF;MACF;MAEA1C,mBAAA;MACAvD,OAAA;IACF;EACF,GAAG,CAACI,MAAA,EAAQF,aAAA,EAAeqD,mBAAA,EAAqBvD,OAAA,CAAQ;EAExD,MAAMmG,iBAAA,GAAoBrI,WAAA,CAAY;IACpCsC,MAAA,CAAOoD,MAAM,CAAC;MACZ,IAAItD,aAAA,CAAcuD,UAAU,IAAI;QAC9B,MAAMC,WAAA,GAAYpH,mCAAA,CAAoC4D,aAAA;QACtD,IAAIwD,WAAA,EAAW;UACbA,WAAA,CAAU0C,cAAc,CAAC,CAAC1C,WAAA,CAAU2C,cAAc;QACpD;MACF;MAEA9C,mBAAA;MACAvD,OAAA;IACF;EACF,GAAG,CAACI,MAAA,EAAQF,aAAA,EAAeqD,mBAAA,EAAqBvD,OAAA,CAAQ;EAExD,MAAMsG,uBAAA,GAA0BxI,WAAA,CAAY;IAC1CsC,MAAA,CAAOoD,MAAM,CAAC;MACZ,IAAItD,aAAA,CAAcuD,UAAU,IAAI;QAC9B,MAAMC,WAAA,GAAYpH,mCAAA,CAAoC4D,aAAA;QACtD,IAAIwD,WAAA,EAAW;UACbA,WAAA,CAAU6C,gBAAgB,CAAC7C,WAAA,CAAU8C,gBAAgB,OAAO,IAAI,IAAI;QACtE;MACF;MACAjD,mBAAA;MACAvD,OAAA;IACF;EACF,GAAG,CAACI,MAAA,EAAQF,aAAA,EAAeqD,mBAAA,EAAqBvD,OAAA,CAAQ;EAExD,IAAIyG,eAAA,GAAsC;EAC1C,IAAI3G,SAAA,EAAW;IACb,IAAIW,aAAA,EAAe;MACjBgG,eAAA,gBACEC,IAAA,CAAC;QACCC,SAAA,EAAU;QACV,gBAAa;QACbC,OAAA,EAASA,CAAA,KAAM3C,0BAAA;QACf4C,IAAA,EAAK;kBAEL,aAAAH,IAAA,CAAC;UAAKC,SAAA,EAAU;oBAAO;;;IAG7B,OAAO,IAAIhG,cAAA,EAAgB;MACzB8F,eAAA,gBACEC,IAAA,CAAC;QACCC,SAAA,EAAU;QACV,gBAAa;QACbC,OAAA,EAASA,CAAA,KAAMrC,4BAAA;QACfsC,IAAA,EAAK;kBAEL,aAAAH,IAAA,CAAC;UAAKC,SAAA,EAAU;oBAAO;;;IAG7B;EACF;EAEA,oBAAOzI,YAAA;EACL;;EACA4I,KAAA,CAAC;IACCH,SAAA,EAAU;IACVC,OAAA,EAAUG,CAAA;MACRA,CAAA,CAAEC,eAAe;IACnB;IACAC,GAAA,EAAK5G,WAAA;eAEJoG,eAAA,gBACCK,KAAA,CAACjJ,KAAA,CAAMqJ,QAAQ;iBACZT,eAAA,E,aACDC,IAAA,CAAC;SAED,M,aAEJA,IAAA,CAAC;MACCC,SAAA,EAAU;MACV,gBAAa;MACbC,OAAA,EAASA,CAAA,KAAMT,iBAAA;MACfU,IAAA,EAAK;gBAEL,aAAAH,IAAA,CAAC;QAAKC,SAAA,EAAU;kBAAO;;qBAEzBD,IAAA,CAAC;MACCC,SAAA,EAAU;MACV,gBAAa;MACbC,OAAA,EAASA,CAAA,KAAMN,uBAAA;MACfO,IAAA,EAAK;gBAEL,aAAAH,IAAA,CAAC;QAAKC,SAAA,EAAU;kBAAO;;qBAEzBD,IAAA,CAAC;MACCC,SAAA,EAAU;MACV,gBAAa;MACbC,OAAA,EAASA,CAAA,KAAMpC,yBAAA,CAA0B;MACzCqC,IAAA,EAAK;gBAEL,aAAAC,KAAA,CAAC;QAAKH,SAAA,EAAU;mBAAO,WACbpG,eAAA,CAAgB5B,IAAI,KAAK,IAAI,QAAQ,GAAG4B,eAAA,CAAgB5B,IAAI,OAAO,EAAC;;qBAGhF+H,IAAA,CAAC;MACCC,SAAA,EAAU;MACV,gBAAa;MACbC,OAAA,EAASA,CAAA,KAAMpC,yBAAA,CAA0B;MACzCqC,IAAA,EAAK;gBAEL,aAAAC,KAAA,CAAC;QAAKH,SAAA,EAAU;mBAAO,WACbpG,eAAA,CAAgB5B,IAAI,KAAK,IAAI,QAAQ,GAAG4B,eAAA,CAAgB5B,IAAI,OAAO,EAAC;;qBAGhF+H,IAAA,CAAC,W,aACDA,IAAA,CAAC;MACCC,SAAA,EAAU;MACV,gBAAa;MACbC,OAAA,EAASA,CAAA,KAAMjC,4BAAA,CAA6B;MAC5CkC,IAAA,EAAK;gBAEL,aAAAC,KAAA,CAAC;QAAKH,SAAA,EAAU;mBAAO,WACbpG,eAAA,CAAgB/B,OAAO,KAAK,IAAI,WAAW,GAAG+B,eAAA,CAAgB/B,OAAO,UAAU,EAAE,KAAI;;qBAIjGkI,IAAA,CAAC;MACCC,SAAA,EAAU;MACV,gBAAa;MACbC,OAAA,EAASA,CAAA,KAAMjC,4BAAA,CAA6B;MAC5CkC,IAAA,EAAK;gBAEL,aAAAC,KAAA,CAAC;QAAKH,SAAA,EAAU;mBAAO,WACbpG,eAAA,CAAgB/B,OAAO,KAAK,IAAI,WAAW,GAAG+B,eAAA,CAAgB/B,OAAO,UAAU,EAAE,KAAI;;qBAIjGkI,IAAA,CAAC,W,aACDA,IAAA,CAAC;MACCC,SAAA,EAAU;MACV,gBAAa;MACbC,OAAA,EAASA,CAAA,KAAM7B,4BAAA;MACf8B,IAAA,EAAK;gBAEL,aAAAH,IAAA,CAAC;QAAKC,SAAA,EAAU;kBAAO;;qBAEzBD,IAAA,CAAC;MACCC,SAAA,EAAU;MACV,gBAAa;MACbC,OAAA,EAASA,CAAA,KAAMhC,yBAAA;MACfiC,IAAA,EAAK;gBAEL,aAAAH,IAAA,CAAC;QAAKC,SAAA,EAAU;kBAAO;;qBAEzBD,IAAA,CAAC;MACCC,SAAA,EAAU;MACV,gBAAa;MACbC,OAAA,EAASA,CAAA,KAAM/B,sBAAA;MACfgC,IAAA,EAAK;gBAEL,aAAAH,IAAA,CAAC;QAAKC,SAAA,EAAU;kBAAO;;qBAEzBD,IAAA,CAAC,W,aACDA,IAAA,CAAC;MACCC,SAAA,EAAU;MACV,gBAAa;MACbC,OAAA,EAASA,CAAA,KAAM5B,sBAAA;MACf6B,IAAA,EAAK;gBAEL,aAAAC,KAAA,CAAC;QAAKH,SAAA,EAAU;mBACZ,CAAAzG,aAAA,CAAciH,aAAa,GAAGnK,qBAAA,CAAsBuI,GAAG,MAAMvI,qBAAA,CAAsBuI,GAAG,GACpF,WACA,OAAO,KAAI;;qBAInBmB,IAAA,CAAC;MACCC,SAAA,EAAU;MACV,gBAAa;MACbC,OAAA,EAASA,CAAA,KAAMd,yBAAA;MACfe,IAAA,EAAK;gBAEL,aAAAC,KAAA,CAAC;QAAKH,SAAA,EAAU;mBACZ,CAAAzG,aAAA,CAAciH,aAAa,GAAGnK,qBAAA,CAAsBiJ,MAAM,MAC5DjJ,qBAAA,CAAsBiJ,MAAM,GACxB,WACA,OAAO,KAAI;;;MAKrBmB,QAAA,CAASC,IAAI;AAEjB;AAEA,SAASC,6BAA6B;EACpCC,UAAU;EACVzH;AAAS,CAIV;EACC,MAAM,CAACM,MAAA,CAAO,GAAGtE,yBAAA;EAEjB,MAAM0L,aAAA,GAAgBxJ,MAAA,CAA8B;EACpD,MAAMyJ,WAAA,GAAczJ,MAAA,CAAiC;EACrD,MAAM,CAAC0J,UAAA,EAAYzH,aAAA,CAAc,GAAGhC,QAAA,CAAS;EAE7C,MAAM,CAACiC,aAAA,EAAeyH,oBAAA,CAAqB,GAAG1J,QAAA,CAA+B;EAE7E,MAAM2J,SAAA,GAAY9J,WAAA,CAAY;IAC5B,MAAM+J,IAAA,GAAOL,aAAA,CAAc/F,OAAO;IAClC,MAAMpD,SAAA,GAAYjB,aAAA;IAClB,MAAM0K,eAAA,GAAkBpK,eAAA,CAAgB0C,MAAA,CAAO2H,OAAO;IACtD,MAAMC,aAAA,GAAgBZ,QAAA,CAASY,aAAa;IAC5C,SAASC,QAAA;MACP,IAAIJ,IAAA,EAAM;QACRA,IAAA,CAAKK,SAAS,CAACpD,MAAM,CAAC;QACtB+C,IAAA,CAAKK,SAAS,CAACtC,GAAG,CAAC;MACrB;MACA+B,oBAAA,CAAqB;IACvB;IAEA,IAAItJ,SAAA,IAAa,QAAQwJ,IAAA,IAAQ,MAAM;MACrC,OAAOI,OAAA;IACT;IAEA,MAAMtG,WAAA,GAAcvB,MAAA,CAAOwB,cAAc;IACzC,IAAIkC,aAAA,GAAsC;IAC1C,IAAIqE,sBAAA,GAA6C;IAEjD,IACE7K,iBAAA,CAAkBe,SAAA,KAClBsD,WAAA,KAAgB,QAChBmG,eAAA,KAAoB,QACpBnG,WAAA,CAAYyB,QAAQ,CAAC0E,eAAA,CAAgBM,UAAU,GAC/C;MACA,MAAMC,0BAAA,GAA6BjM,gCAAA,CACjCiC,SAAA,CAAUW,MAAM,CAACsJ,OAAO;MAG1B,IAAID,0BAAA,IAA8B,MAAM;QACtC,OAAOJ,OAAA;MACT;MAEAE,sBAAA,GAAyB/H,MAAA,CAAOwD,eAAe,CAACyE,0BAAA,CAA2BnH,MAAM;MAEjF,IAAIiH,sBAAA,IAA0B,QAAQ,CAACE,0BAAA,CAA2B5E,UAAU,IAAI;QAC9E,OAAOwE,OAAA;MACT;MAEA,MAAMvE,SAAA,GAAYpH,mCAAA,CAAoC+L,0BAAA;MACtD,MAAM1E,YAAA,GAAe7G,eAAA,CAAgB4G,SAAA,EAAWtD,MAAA,CAAOwD,eAAe,CAACF,SAAA,CAAUxC,MAAM;MAEvF,IAAIyC,YAAA,KAAiB,MAAM;QACzB,MAAM,IAAIE,KAAA,CAAM;MAClB;MAEAC,aAAA,GAAgB/G,gCAAA,CAAiC4G,YAAA;MACjDgE,oBAAA,CAAqBU,0BAAA;IACvB,OAAO,IAAI1L,iBAAA,CAAkB0B,SAAA,GAAY;MACvC,MAAM+J,UAAA,GAAahM,gCAAA,CAAiCiC,SAAA,CAAUW,MAAM,CAACsJ,OAAO;MAC5E,IAAI,CAAC5L,gBAAA,CAAiB0L,UAAA,GAAa;QACjC,MAAM,IAAIvE,KAAA,CAAM;MAClB;MACA,MAAMH,WAAA,GAAYpH,mCAAA,CAAoC8L,UAAA;MACtD,MAAMzE,cAAA,GAAe7G,eAAA,CAAgB4G,WAAA,EAAWtD,MAAA,CAAOwD,eAAe,CAACF,WAAA,CAAUxC,MAAM;MAEvF,IAAIyC,cAAA,KAAiB,MAAM;QACzB,MAAM,IAAIE,KAAA,CAAM;MAClB;MAEAC,aAAA,GAAgB/G,gCAAA,CAAiC4G,cAAA;MACjDwE,sBAAA,GAAyB/H,MAAA,CAAOwD,eAAe,CAACwE,UAAA,CAAWlH,MAAM;IACnE,OAAO,IAAI,CAAC8G,aAAA,EAAe;MACzB,OAAOC,OAAA;IACT;IACA,IAAInE,aAAA,KAAkB,QAAQqE,sBAAA,KAA2B,MAAM;MAC7D,OAAOF,OAAA;IACT;IACA,MAAMM,OAAA,GAAU,CAACzE,aAAA,IAAiB,CAACA,aAAA,CAAc0E,WAAW;IAC5DX,IAAA,CAAKK,SAAS,CAACO,MAAM,CAAC,8CAA8CF,OAAA;IACpEV,IAAA,CAAKK,SAAS,CAACO,MAAM,CAAC,gDAAgD,CAACF,OAAA;IACvE,IAAIA,OAAA,EAAS;MACX,MAAMG,aAAA,GAAgBP,sBAAA,CAAuBrG,qBAAqB;MAClE,MAAM6G,UAAA,GAAapB,UAAA,CAAWzF,qBAAqB;MACnD,MAAMe,GAAA,GAAM6F,aAAA,CAAc7F,GAAG,GAAG8F,UAAA,CAAW9F,GAAG;MAC9C,MAAMH,IAAA,GAAOgG,aAAA,CAAcrG,KAAK,GAAGsG,UAAA,CAAWjG,IAAI;MAClDmF,IAAA,CAAK7F,KAAK,CAAC4G,SAAS,GAAG,aAAalG,IAAA,OAAWG,GAAA,KAAQ;IACzD;EACF,GAAG,CAACzC,MAAA,EAAQmH,UAAA,CAAW;EAEvBxJ,SAAA,CAAU;IACR;IACA;IACA,IAAI8K,SAAA,GAAuDC,SAAA;IAC3D,MAAMC,QAAA,GAAWA,CAAA;MACfF,SAAA,GAAYC,SAAA;MACZ1I,MAAA,CAAOe,cAAc,GAAGC,IAAI,CAACwG,SAAA;IAC/B;IACA,MAAMoB,eAAA,GAAkBA,CAAA;MACtB,IAAIH,SAAA,KAAcC,SAAA,EAAW;QAC3BD,SAAA,GAAYI,UAAA,CAAWF,QAAA,EAAU;MACnC;MACA,OAAO;IACT;IACA,OAAO7L,aAAA,CACLkD,MAAA,CAAO8I,sBAAsB,CAACF,eAAA,GAC9B5I,MAAA,CAAO+I,eAAe,CAACvL,wBAAA,EAA0BoL,eAAA,EAAiBvL,yBAAA,GAClE2C,MAAA,CAAOgJ,oBAAoB,CAAC,CAACzH,aAAA,EAAa0H,eAAA;MACxC,IAAIA,eAAA,EAAiB;QACnBA,eAAA,CAAgB/F,mBAAmB,CAAC,aAAa0F,eAAA;MACnD;MACA,IAAIrH,aAAA,EAAa;QACfA,aAAA,CAAY0B,gBAAgB,CAAC,aAAa2F,eAAA;QAC1CA,eAAA;MACF;IACF,IACA,MAAMM,YAAA,CAAaT,SAAA;EAEvB;EAEA,MAAMU,gBAAA,GAAmBvL,MAAA,CAAOkC,aAAA;EAEhCnC,SAAA,CAAU;IACR,IAAIwL,gBAAA,CAAiB9H,OAAO,KAAKvB,aAAA,EAAe;MAC9CD,aAAA,CAAc;IAChB;IAEAsJ,gBAAA,CAAiB9H,OAAO,GAAGvB,aAAA;EAC7B,GAAG,CAACqJ,gBAAA,EAAkBrJ,aAAA,CAAc;EAEpC,oBACEwG,IAAA,CAAC;IAAIC,SAAA,EAAU;IAAqCM,GAAA,EAAKO,aAAA;cACtDtH,aAAA,IAAiB,qBAChB4G,KAAA,CAACjJ,KAAA,CAAMqJ,QAAQ;8BACbR,IAAA,CAAC;QACCC,SAAA,EAAU;QACVC,OAAA,EAAUG,CAAA;UACRA,CAAA,CAAEC,eAAe;UACjB/G,aAAA,CAAc,CAACyH,UAAA;QACjB;QACAT,GAAA,EAAKQ,WAAA;QACLZ,IAAA,EAAK;kBAEL,aAAAH,IAAA,CAACvI,aAAA;UAEFuJ,UAAA,iBACChB,IAAA,CAAC7G,eAAA;QACCC,SAAA,EAAWA,SAAA;QACXC,UAAA,EAAY0H,WAAA;QACZzH,OAAA,EAASA,CAAA,KAAMC,aAAA,CAAc;QAC7BA,aAAA,EAAeA,aAAA;QACfC,aAAA,EAAeA;;;;AAO7B;AAEA,OAAO,MAAMsJ,qBAAA,GAAmDC,EAAA;EAAA,MAAAC,CAAA,GAAA7N,EAAA;EAAC;IAAA0L;EAAA,IAAAkC,EAAc;EAC7E,MAAAE,UAAA,GAAmB5N,kBAAA;EAAA,IAAA6N,EAAA;EAAA,IAAAF,CAAA,QAAAnC,UAAA,IAAAmC,CAAA,QAAAC,UAAA;IACZC,EAAA,GAAA1L,YAAA,CACLyL,UAAA,GACEjD,IAAA,CAAAY,4BAAA;MAAAC,UAAA,EAA0CA,UAAA,IAAAH,QAAA,CAAAC,IAA2B;MAAAvH,SAAA;IAAA,C,QACnE,EACJyH,UAAA,IAAAH,QAAA,CAAAC,IAA2B;IAAAqC,CAAA,MAAAnC,UAAA;IAAAmC,CAAA,MAAAC,UAAA;IAAAD,CAAA,MAAAE,EAAA;EAAA;IAAAA,EAAA,GAAAF,CAAA;EAAA;EAAA,OAJtBE,EAIsB;AAAA,CAE/B","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/features/experimental_table/client/plugins/TableCellResizerPlugin/index.tsx"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAEjE,OAAO,aAAa,CAAA;AAqZpB,eAAO,MAAM,sBAAsB,EAAE,eAQpC,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","useLexicalEditable","$computeTableMapSkipCellCheck","$getTableNodeFromLexicalNodeOrThrow","$getTableRowIndexFromTableCellNode","$isTableCellNode","$isTableRowNode","getDOMCellFromTarget","getTableElement","TableNode","calculateZoomLevel","mergeRegister","$getNearestNodeFromDOMNode","isHTMLElement","SKIP_SCROLL_INTO_VIEW_TAG","React","useCallback","useEffect","useMemo","useRef","useState","createPortal","useEditorConfigContext","MIN_ROW_HEIGHT","MIN_COLUMN_WIDTH","TableCellResizer","editor","targetRef","resizerRef","tableRectRef","hasTable","setHasTable","editorConfig","mouseStartPosRef","mouseCurrentPos","updateMouseCurrentPos","activeCell","updateActiveCell","isMouseDown","updateIsMouseDown","draggingDirection","updateDraggingDirection","resetState","current","isMouseDownOnEvent","event","buttons","tableKeys","Set","registerMutationListener","nodeMutations","nodeKey","mutation","delete","add","size","registerNodeTransform","tableNode","getColWidths","numColumns","getColumnCount","columnWidth","setColWidths","Array","fill","onMouseMove","target","x","clientX","y","clientY","contains","cell","getEditorState","read","tableCellNode","elem","Error","tableElement","getElementByKey","getKey","getBoundingClientRect","onMouseDown","onMouseUp","removeRootListener","registerRootListener","rootElement","prevRootElement","removeEventListener","addEventListener","isHeightChanging","direction","updateRowHeight","heightChange","update","baseRowIndex","tableRows","getChildren","isFullRowMerge","getColSpan","tableRowIndex","getRowSpan","length","tableRow","height","getHeight","undefined","rowCells","Math","min","map","getCellNodeHeight","Infinity","newHeight","max","setHeight","tag","activeEditor","domCellNode","clientHeight","getCellColumnIndex","tableMap","columnIndex","forEach","row","columnIndexInner","updateColumnWidth","widthChange","colWidths","width","newColWidths","newWidth","mouseUpHandler","handler","preventDefault","stopPropagation","zoom","document","toggleResize","resizerStyles","setResizerStyles","bottom","left","right","top","zoneWidth","styles","backgroundColor","cursor","window","scrollX","scrollY","tableRect","_jsx","ref","_jsxs","Fragment","className","lexical","theme","tableCellResizer","style","TableCellResizerPlugin","$","isEditable","t0"],"sources":["../../../../../../src/features/experimental_table/client/plugins/TableCellResizerPlugin/index.tsx"],"sourcesContent":["'use client'\n\nimport type { TableCellNode, TableDOMCell, TableMapType } from '@lexical/table'\nimport type { LexicalEditor, NodeKey } from 'lexical'\nimport type { JSX, MouseEventHandler } from 'react'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { useLexicalEditable } from '@lexical/react/useLexicalEditable'\nimport {\n $computeTableMapSkipCellCheck,\n $getTableNodeFromLexicalNodeOrThrow,\n $getTableRowIndexFromTableCellNode,\n $isTableCellNode,\n $isTableRowNode,\n getDOMCellFromTarget,\n getTableElement,\n TableNode,\n} from '@lexical/table'\nimport { calculateZoomLevel, mergeRegister } from '@lexical/utils'\nimport { $getNearestNodeFromDOMNode, isHTMLElement, SKIP_SCROLL_INTO_VIEW_TAG } from 'lexical'\nimport * as React from 'react'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport type { PluginComponent } from '../../../../typesClient.js'\n\nimport './index.css'\nimport { useEditorConfigContext } from '../../../../../lexical/config/client/EditorConfigProvider.js'\n\ntype MousePosition = {\n x: number\n y: number\n}\n\ntype MouseDraggingDirection = 'bottom' | 'right'\n\nconst MIN_ROW_HEIGHT = 33\nconst MIN_COLUMN_WIDTH = 92\n\nfunction TableCellResizer({ editor }: { editor: LexicalEditor }): JSX.Element {\n const targetRef = useRef<HTMLElement | null>(null)\n const resizerRef = useRef<HTMLDivElement | null>(null)\n const tableRectRef = useRef<ClientRect | null>(null)\n const [hasTable, setHasTable] = useState(false)\n const editorConfig = useEditorConfigContext()\n\n const mouseStartPosRef = useRef<MousePosition | null>(null)\n const [mouseCurrentPos, updateMouseCurrentPos] = useState<MousePosition | null>(null)\n\n const [activeCell, updateActiveCell] = useState<null | TableDOMCell>(null)\n const [isMouseDown, updateIsMouseDown] = useState<boolean>(false)\n const [draggingDirection, updateDraggingDirection] = useState<MouseDraggingDirection | null>(null)\n\n const resetState = useCallback(() => {\n updateActiveCell(null)\n targetRef.current = null\n updateDraggingDirection(null)\n mouseStartPosRef.current = null\n tableRectRef.current = null\n }, [])\n\n const isMouseDownOnEvent = (event: MouseEvent) => {\n return (event.buttons & 1) === 1\n }\n\n useEffect(() => {\n const tableKeys = new Set<NodeKey>()\n return mergeRegister(\n editor.registerMutationListener(TableNode, (nodeMutations) => {\n for (const [nodeKey, mutation] of nodeMutations) {\n if (mutation === 'destroyed') {\n tableKeys.delete(nodeKey)\n } else {\n tableKeys.add(nodeKey)\n }\n }\n setHasTable(tableKeys.size > 0)\n }),\n editor.registerNodeTransform(TableNode, (tableNode) => {\n if (tableNode.getColWidths()) {\n return tableNode\n }\n\n const numColumns = tableNode.getColumnCount()\n const columnWidth = MIN_COLUMN_WIDTH\n\n tableNode.setColWidths(Array(numColumns).fill(columnWidth))\n return tableNode\n }),\n )\n }, [editor])\n\n useEffect(() => {\n if (!hasTable) {\n return\n }\n\n const onMouseMove = (event: MouseEvent) => {\n const target = event.target\n if (!isHTMLElement(target)) {\n return\n }\n\n if (draggingDirection) {\n updateMouseCurrentPos({\n x: event.clientX,\n y: event.clientY,\n })\n return\n }\n updateIsMouseDown(isMouseDownOnEvent(event))\n if (resizerRef.current && resizerRef.current.contains(target)) {\n return\n }\n\n if (targetRef.current !== target) {\n targetRef.current = target\n const cell = getDOMCellFromTarget(target)\n\n if (cell && activeCell !== cell) {\n editor.getEditorState().read(\n () => {\n const tableCellNode = $getNearestNodeFromDOMNode(cell.elem)\n\n if (!tableCellNode) {\n throw new Error('TableCellResizer: Table cell node not found.')\n }\n\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n const tableElement = getTableElement(\n tableNode,\n editor.getElementByKey(tableNode.getKey()),\n )\n if (!tableElement) {\n throw new Error('TableCellResizer: Table element not found.')\n }\n\n targetRef.current = target\n tableRectRef.current = tableElement.getBoundingClientRect()\n updateActiveCell(cell)\n },\n { editor },\n )\n } else if (cell == null) {\n resetState()\n }\n }\n }\n\n const onMouseDown = (event: MouseEvent) => {\n updateIsMouseDown(true)\n }\n\n const onMouseUp = (event: MouseEvent) => {\n updateIsMouseDown(false)\n }\n\n const removeRootListener = editor.registerRootListener((rootElement, prevRootElement) => {\n prevRootElement?.removeEventListener('mousemove', onMouseMove)\n prevRootElement?.removeEventListener('mousedown', onMouseDown)\n prevRootElement?.removeEventListener('mouseup', onMouseUp)\n rootElement?.addEventListener('mousemove', onMouseMove)\n rootElement?.addEventListener('mousedown', onMouseDown)\n rootElement?.addEventListener('mouseup', onMouseUp)\n })\n\n return () => {\n removeRootListener()\n }\n }, [activeCell, draggingDirection, editor, hasTable, resetState])\n\n const isHeightChanging = (direction: MouseDraggingDirection) => {\n if (direction === 'bottom') {\n return true\n }\n return false\n }\n\n const updateRowHeight = useCallback(\n (heightChange: number) => {\n if (!activeCell) {\n throw new Error('TableCellResizer: Expected active cell.')\n }\n\n editor.update(\n () => {\n const tableCellNode = $getNearestNodeFromDOMNode(activeCell.elem)\n if (!$isTableCellNode(tableCellNode)) {\n throw new Error('TableCellResizer: Table cell node not found.')\n }\n\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n\n const baseRowIndex = $getTableRowIndexFromTableCellNode(tableCellNode)\n const tableRows = tableNode.getChildren()\n\n // Determine if this is a full row merge by checking colspan\n const isFullRowMerge = tableCellNode.getColSpan() === tableNode.getColumnCount()\n\n // For full row merges, apply to first row. For partial merges, apply to last row\n const tableRowIndex = isFullRowMerge\n ? baseRowIndex\n : baseRowIndex + tableCellNode.getRowSpan() - 1\n\n if (tableRowIndex >= tableRows.length || tableRowIndex < 0) {\n throw new Error('Expected table cell to be inside of table row.')\n }\n\n const tableRow = tableRows[tableRowIndex]\n\n if (!$isTableRowNode(tableRow)) {\n throw new Error('Expected table row')\n }\n\n let height = tableRow.getHeight()\n if (height === undefined) {\n const rowCells = tableRow.getChildren<TableCellNode>()\n height = Math.min(\n ...rowCells.map((cell) => getCellNodeHeight(cell, editor) ?? Infinity),\n )\n }\n\n const newHeight = Math.max(height + heightChange, MIN_ROW_HEIGHT)\n tableRow.setHeight(newHeight)\n },\n { tag: SKIP_SCROLL_INTO_VIEW_TAG },\n )\n },\n [activeCell, editor],\n )\n\n const getCellNodeHeight = (\n cell: TableCellNode,\n activeEditor: LexicalEditor,\n ): number | undefined => {\n const domCellNode = activeEditor.getElementByKey(cell.getKey())\n return domCellNode?.clientHeight\n }\n\n const getCellColumnIndex = (tableCellNode: TableCellNode, tableMap: TableMapType) => {\n let columnIndex: number | undefined\n tableMap.forEach((row) => {\n row.forEach((cell, columnIndexInner) => {\n if (cell.cell === tableCellNode) {\n columnIndex = columnIndexInner\n }\n })\n })\n return columnIndex\n }\n\n const updateColumnWidth = useCallback(\n (widthChange: number) => {\n if (!activeCell) {\n throw new Error('TableCellResizer: Expected active cell.')\n }\n editor.update(\n () => {\n const tableCellNode = $getNearestNodeFromDOMNode(activeCell.elem)\n if (!$isTableCellNode(tableCellNode)) {\n throw new Error('TableCellResizer: Table cell node not found.')\n }\n\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n const [tableMap] = $computeTableMapSkipCellCheck(tableNode, null, null)\n const columnIndex = getCellColumnIndex(tableCellNode, tableMap)\n if (columnIndex === undefined) {\n throw new Error('TableCellResizer: Table column not found.')\n }\n\n const colWidths = tableNode.getColWidths()\n if (!colWidths) {\n return\n }\n const width = colWidths[columnIndex]\n if (width === undefined) {\n return\n }\n const newColWidths = [...colWidths]\n const newWidth = Math.max(width + widthChange, MIN_COLUMN_WIDTH)\n newColWidths[columnIndex] = newWidth\n tableNode.setColWidths(newColWidths)\n },\n { tag: SKIP_SCROLL_INTO_VIEW_TAG },\n )\n },\n [activeCell, editor],\n )\n\n const mouseUpHandler = useCallback(\n (direction: MouseDraggingDirection) => {\n const handler = (event: MouseEvent) => {\n event.preventDefault()\n event.stopPropagation()\n\n if (!activeCell) {\n throw new Error('TableCellResizer: Expected active cell.')\n }\n\n if (mouseStartPosRef.current) {\n const { x, y } = mouseStartPosRef.current\n\n if (activeCell === null) {\n return\n }\n const zoom = calculateZoomLevel(event.target as Element)\n\n if (isHeightChanging(direction)) {\n const heightChange = (event.clientY - y) / zoom\n updateRowHeight(heightChange)\n } else {\n const widthChange = (event.clientX - x) / zoom\n updateColumnWidth(widthChange)\n }\n\n resetState()\n document.removeEventListener('mouseup', handler)\n }\n }\n return handler\n },\n [activeCell, resetState, updateColumnWidth, updateRowHeight],\n )\n\n const toggleResize = useCallback(\n (direction: MouseDraggingDirection): MouseEventHandler<HTMLDivElement> =>\n (event) => {\n event.preventDefault()\n event.stopPropagation()\n\n if (!activeCell) {\n throw new Error('TableCellResizer: Expected active cell.')\n }\n\n mouseStartPosRef.current = {\n x: event.clientX,\n y: event.clientY,\n }\n updateMouseCurrentPos(mouseStartPosRef.current)\n updateDraggingDirection(direction)\n\n document.addEventListener('mouseup', mouseUpHandler(direction))\n },\n [activeCell, mouseUpHandler],\n )\n\n const [resizerStyles, setResizerStyles] = useState<{\n bottom?: null | React.CSSProperties\n left?: null | React.CSSProperties\n right?: null | React.CSSProperties\n top?: null | React.CSSProperties\n }>({\n bottom: null,\n left: null,\n right: null,\n top: null,\n })\n\n useEffect(() => {\n if (activeCell) {\n const { height, left, top, width } = activeCell.elem.getBoundingClientRect()\n const zoom = calculateZoomLevel(activeCell.elem)\n const zoneWidth = 10 // Pixel width of the zone where you can drag the edge\n const styles = {\n bottom: {\n backgroundColor: 'none',\n cursor: 'row-resize',\n height: `${zoneWidth}px`,\n left: `${window.scrollX + left}px`,\n top: `${window.scrollY + top + height - zoneWidth / 2}px`,\n width: `${width}px`,\n },\n right: {\n backgroundColor: 'none',\n cursor: 'col-resize',\n height: `${height}px`,\n left: `${window.scrollX + left + width - zoneWidth / 2}px`,\n top: `${window.scrollY + top}px`,\n width: `${zoneWidth}px`,\n },\n }\n\n const tableRect = tableRectRef.current\n\n if (draggingDirection && mouseCurrentPos && tableRect) {\n if (isHeightChanging(draggingDirection)) {\n styles[draggingDirection].left = `${window.scrollX + tableRect.left}px`\n styles[draggingDirection].top = `${window.scrollY + mouseCurrentPos.y / zoom}px`\n styles[draggingDirection].height = '3px'\n styles[draggingDirection].width = `${tableRect.width}px`\n } else {\n styles[draggingDirection].top = `${window.scrollY + tableRect.top}px`\n styles[draggingDirection].left = `${window.scrollX + mouseCurrentPos.x / zoom}px`\n styles[draggingDirection].width = '3px'\n styles[draggingDirection].height = `${tableRect.height}px`\n }\n\n styles[draggingDirection].backgroundColor = '#adf'\n }\n\n setResizerStyles(styles)\n } else {\n setResizerStyles({\n bottom: null,\n left: null,\n right: null,\n top: null,\n })\n }\n }, [activeCell, draggingDirection, mouseCurrentPos])\n\n return (\n <div ref={resizerRef}>\n {activeCell != null && !isMouseDown && (\n <React.Fragment>\n <div\n className={`${editorConfig.editorConfig.lexical.theme.tableCellResizer} TableCellResizer__ui`}\n onMouseDown={toggleResize('right')}\n style={resizerStyles.right || undefined}\n />\n <div\n className={`${editorConfig.editorConfig.lexical.theme.tableCellResizer} TableCellResizer__ui`}\n onMouseDown={toggleResize('bottom')}\n style={resizerStyles.bottom || undefined}\n />\n </React.Fragment>\n )}\n </div>\n )\n}\n\nexport const TableCellResizerPlugin: PluginComponent = () => {\n const [editor] = useLexicalComposerContext()\n const isEditable = useLexicalEditable()\n\n return useMemo(\n () => (isEditable ? createPortal(<TableCellResizer editor={editor} />, document.body) : null),\n [editor, isEditable],\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AA+Q9B,wBAAgB,uBAAuB,CAAC,EACtC,UAA0B,GAC3B,EAAE;IACD,UAAU,CAAC,EAAE,WAAW,CAAA;CACzB,GAAG,IAAI,GAAG,KAAK,CAAC,WAAW,CAQ3B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","useLexicalEditable","$getTableAndElementByKey","$getTableColumnIndexFromTableCellNode","$getTableRowIndexFromTableCellNode","$insertTableColumnAtSelection","$insertTableRowAtSelection","$isTableCellNode","$isTableNode","getTableElement","TableNode","$findMatchingParent","mergeRegister","$getNearestNodeFromDOMNode","isHTMLElement","useEffect","useMemo","useRef","useState","React","createPortal","useEditorConfigContext","useDebounce","BUTTON_WIDTH_PX","TableHoverActionsContainer","anchorElem","editor","isEditable","editorConfig","isShownRow","setShownRow","isShownColumn","setShownColumn","shouldListenMouseMove","setShouldListenMouseMove","position","setPosition","tableSetRef","Set","tableCellDOMNodeRef","debouncedOnMouseMove","event","isOutside","tableDOMNode","getMouseInfo","lexical","current","hoveredRowNode","hoveredColumnNode","tableDOMElement","getEditorState","read","maybeTableCell","table","node","getElementByKey","getKey","rowCount","getChildrenSize","colCount","getChildAtIndex","rowIndex","colIndex","tableContainerElement","parentElement","bottom","tableElemBottom","height","tableElemHeight","left","tableElemLeft","right","tableElemRight","width","tableElemWidth","y","tableElemY","getBoundingClientRect","tableHasScroll","classList","contains","scrollWidth","clientWidth","editorElemLeft","editorElemY","offsetLeft","top","offsetWidth","tableResizeObserver","ResizeObserver","document","addEventListener","removeEventListener","registerMutationListener","mutations","resetObserver","key","type","add","delete","disconnect","tableKey","tableElement","observe","size","skipInitialization","insertAction","insertRow","update","maybeTableNode","selectEnd","_jsxs","_Fragment","_jsx","className","theme","tableAddRows","onClick","style","tableAddColumns","target","closest","tableCell","tableCellResizer","TableHoverActionsPlugin","t0","$","t1","undefined","body","t2"],"sources":["../../../../../../src/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.tsx"],"sourcesContent":["'use client'\n\nimport type { TableCellNode, TableRowNode } from '@lexical/table'\nimport type { EditorConfig, NodeKey } from 'lexical'\nimport type { JSX } from 'react'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { useLexicalEditable } from '@lexical/react/useLexicalEditable'\nimport {\n $getTableAndElementByKey,\n $getTableColumnIndexFromTableCellNode,\n $getTableRowIndexFromTableCellNode,\n $insertTableColumnAtSelection,\n $insertTableRowAtSelection,\n $isTableCellNode,\n $isTableNode,\n getTableElement,\n TableNode,\n} from '@lexical/table'\nimport { $findMatchingParent, mergeRegister } from '@lexical/utils'\nimport { $getNearestNodeFromDOMNode, isHTMLElement } from 'lexical'\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport * as React from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { useEditorConfigContext } from '../../../../../lexical/config/client/EditorConfigProvider.js'\nimport { useDebounce } from '../../utils/useDebounce.js'\n\nconst BUTTON_WIDTH_PX = 16\n\nfunction TableHoverActionsContainer({\n anchorElem,\n}: {\n anchorElem: HTMLElement\n}): JSX.Element | null {\n const [editor] = useLexicalComposerContext()\n const isEditable = useLexicalEditable()\n\n const editorConfig = useEditorConfigContext()\n const [isShownRow, setShownRow] = useState<boolean>(false)\n const [isShownColumn, setShownColumn] = useState<boolean>(false)\n const [shouldListenMouseMove, setShouldListenMouseMove] = useState<boolean>(false)\n const [position, setPosition] = useState({})\n const tableSetRef = useRef<Set<NodeKey>>(new Set())\n const tableCellDOMNodeRef = useRef<HTMLElement | null>(null)\n\n const debouncedOnMouseMove = useDebounce(\n (event: MouseEvent) => {\n const { isOutside, tableDOMNode } = getMouseInfo(event, editorConfig.editorConfig?.lexical)\n\n if (isOutside) {\n setShownRow(false)\n setShownColumn(false)\n return\n }\n\n if (!tableDOMNode) {\n return\n }\n\n tableCellDOMNodeRef.current = tableDOMNode\n\n let hoveredRowNode: null | TableCellNode = null\n let hoveredColumnNode: null | TableCellNode = null\n let tableDOMElement: HTMLElement | null = null\n\n editor.getEditorState().read(\n () => {\n const maybeTableCell = $getNearestNodeFromDOMNode(tableDOMNode)\n\n if ($isTableCellNode(maybeTableCell)) {\n const table = $findMatchingParent(maybeTableCell, (node) => $isTableNode(node))\n if (!$isTableNode(table)) {\n return\n }\n\n tableDOMElement = getTableElement(table, editor.getElementByKey(table.getKey()))\n\n if (tableDOMElement) {\n const rowCount = table.getChildrenSize()\n const colCount = (table.getChildAtIndex(0) as TableRowNode)?.getChildrenSize()\n\n const rowIndex = $getTableRowIndexFromTableCellNode(maybeTableCell)\n const colIndex = $getTableColumnIndexFromTableCellNode(maybeTableCell)\n\n if (rowIndex === rowCount - 1) {\n hoveredRowNode = maybeTableCell\n } else if (colIndex === colCount - 1) {\n hoveredColumnNode = maybeTableCell\n }\n }\n }\n },\n { editor },\n )\n\n if (!tableDOMElement) {\n return\n }\n\n // this is the scrollable div container of the table (in case of overflow)\n const tableContainerElement = (tableDOMElement as HTMLTableElement).parentElement\n\n if (!tableContainerElement) {\n return\n }\n\n const {\n bottom: tableElemBottom,\n height: tableElemHeight,\n left: tableElemLeft,\n right: tableElemRight,\n width: tableElemWidth,\n y: tableElemY,\n } = (tableDOMElement as HTMLTableElement).getBoundingClientRect()\n\n let tableHasScroll = false\n if (\n tableContainerElement &&\n tableContainerElement.classList.contains('LexicalEditorTheme__tableScrollableWrapper')\n ) {\n tableHasScroll = tableContainerElement.scrollWidth > tableContainerElement.clientWidth\n }\n\n const { left: editorElemLeft, y: editorElemY } = anchorElem.getBoundingClientRect()\n\n if (hoveredRowNode) {\n setShownColumn(false)\n setShownRow(true)\n setPosition({\n height: BUTTON_WIDTH_PX,\n left:\n tableHasScroll && tableContainerElement\n ? tableContainerElement.offsetLeft\n : tableElemLeft - editorElemLeft,\n top: tableElemBottom - editorElemY + 5,\n width:\n tableHasScroll && tableContainerElement\n ? tableContainerElement.offsetWidth\n : tableElemWidth,\n })\n } else if (hoveredColumnNode) {\n setShownColumn(true)\n setShownRow(false)\n setPosition({\n height: tableElemHeight,\n left: tableElemRight - editorElemLeft + 5,\n top: tableElemY - editorElemY,\n width: BUTTON_WIDTH_PX,\n })\n }\n },\n 50,\n 250,\n )\n\n // Hide the buttons on any table dimensions change to prevent last row cells\n // overlap behind the 'Add Row' button when text entry changes cell height\n const tableResizeObserver = useMemo(() => {\n return new ResizeObserver(() => {\n setShownRow(false)\n setShownColumn(false)\n })\n }, [])\n\n useEffect(() => {\n if (!shouldListenMouseMove) {\n return\n }\n\n document.addEventListener('mousemove', debouncedOnMouseMove)\n\n return () => {\n setShownRow(false)\n setShownColumn(false)\n\n document.removeEventListener('mousemove', debouncedOnMouseMove)\n }\n }, [shouldListenMouseMove, debouncedOnMouseMove])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerMutationListener(\n TableNode,\n (mutations) => {\n editor.getEditorState().read(\n () => {\n let resetObserver = false\n for (const [key, type] of mutations) {\n switch (type) {\n case 'created': {\n tableSetRef.current.add(key)\n resetObserver = true\n break\n }\n case 'destroyed': {\n tableSetRef.current.delete(key)\n resetObserver = true\n break\n }\n default:\n break\n }\n }\n if (resetObserver) {\n // Reset resize observers\n tableResizeObserver.disconnect()\n for (const tableKey of tableSetRef.current) {\n const { tableElement } = $getTableAndElementByKey(tableKey)\n tableResizeObserver.observe(tableElement)\n }\n setShouldListenMouseMove(tableSetRef.current.size > 0)\n }\n },\n { editor },\n )\n },\n { skipInitialization: false },\n ),\n )\n }, [editor, tableResizeObserver])\n\n const insertAction = (insertRow: boolean) => {\n editor.update(() => {\n if (tableCellDOMNodeRef.current) {\n const maybeTableNode = $getNearestNodeFromDOMNode(tableCellDOMNodeRef.current)\n maybeTableNode?.selectEnd()\n if (insertRow) {\n $insertTableRowAtSelection()\n setShownRow(false)\n } else {\n $insertTableColumnAtSelection()\n setShownColumn(false)\n }\n }\n })\n }\n\n if (!isEditable) {\n return null\n }\n\n return (\n <>\n {isShownRow && (\n <button\n aria-label=\"Add Row\"\n className={editorConfig.editorConfig.lexical.theme.tableAddRows}\n onClick={() => insertAction(true)}\n style={{ ...position }}\n type=\"button\"\n />\n )}\n {isShownColumn && (\n <button\n aria-label=\"Add Column\"\n className={editorConfig.editorConfig.lexical.theme.tableAddColumns}\n onClick={() => insertAction(false)}\n style={{ ...position }}\n type=\"button\"\n />\n )}\n </>\n )\n}\n\nfunction getMouseInfo(\n event: MouseEvent,\n editorConfig: EditorConfig,\n): {\n isOutside: boolean\n tableDOMNode: HTMLElement | null\n} {\n const target = event.target\n\n if (isHTMLElement(target)) {\n const tableDOMNode = target.closest<HTMLElement>(\n `td.${editorConfig.theme.tableCell}, th.${editorConfig.theme.tableCell}`,\n )\n\n const isOutside = !(\n tableDOMNode ||\n target.closest<HTMLElement>(`button.${editorConfig.theme.tableAddRows}`) ||\n target.closest<HTMLElement>(`button.${editorConfig.theme.tableAddColumns}`) ||\n target.closest<HTMLElement>(`div.${editorConfig.theme.tableCellResizer}`)\n )\n\n return { isOutside, tableDOMNode }\n } else {\n return { isOutside: true, tableDOMNode: null }\n }\n}\n\nexport function TableHoverActionsPlugin({\n anchorElem = document.body,\n}: {\n anchorElem?: HTMLElement\n}): null | React.ReactPortal {\n const isEditable = useLexicalEditable()\n\n if (!isEditable) {\n return null\n }\n\n return createPortal(<TableHoverActionsContainer anchorElem={anchorElem} />, anchorElem)\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/features/experimental_table/client/plugins/TablePlugin/TableGridPopup/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAG5C,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,aAAa,CAAA;AAuBpB,KAAK,mBAAmB,GAAG;IACzB,UAAU,EAAE,WAAW,GAAG,IAAI,CAAA;IAC9B,MAAM,EAAE,aAAa,CAAA;IACrB,MAAM,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9C,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;CAC/C,CAAA;AAED,wBAAgB,cAAc,CAAC,EAC7B,UAAU,EACV,MAAM,EAAE,OAAO,EACf,MAAM,EACN,OAAO,EACP,QAAQ,EACR,QAAQ,GACT,EAAE,mBAAmB,4BAgLrB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":["useCallback","useEffect","useRef","useState","React","createPortal","GRID_COLUMNS","GRID_ROWS","ColumnsIcon","_jsxs","fill","height","viewBox","width","xmlns","_jsx","rx","stroke","x","y","RowsIcon","TableGridPopup","anchorElem","editor","_editor","isOpen","onClose","onInsert","position","hoverCol","setHoverCol","hoverRow","setHoverRow","inputCols","setInputCols","inputRows","setInputRows","focusedInput","setFocusedInput","popupRef","colsInputRef","rowsInputRef","effectiveCols","parseInt","effectiveRows","handleKeyDown","e","key","preventDefault","stopPropagation","cols","rows","document","addEventListener","removeEventListener","handleCellClick","col","row","handleCellMouseEnter","handleGridMouseLeave","cells","isInSelection","isHovered","className","push","onClick","onKeyDown","onMouseEnter","role","tabIndex","showTooltip","Fragment","ref","style","transform","left","top","min","onBlur","onChange","target","value","onFocus","placeholder","String","type","onMouseLeave"],"sources":["../../../../../../../src/features/experimental_table/client/plugins/TablePlugin/TableGridPopup/index.tsx"],"sourcesContent":["'use client'\n\nimport type { LexicalEditor } from 'lexical'\n\nimport { useCallback, useEffect, useRef, useState } from 'react'\nimport * as React from 'react'\nimport { createPortal } from 'react-dom'\n\nimport './index.css'\n\nconst GRID_COLUMNS = 10\nconst GRID_ROWS = 7\n\nfunction ColumnsIcon() {\n return (\n <svg fill=\"none\" height=\"12\" viewBox=\"0 0 12 12\" width=\"12\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect height=\"9\" rx=\"1\" stroke=\"currentColor\" width=\"3\" x=\"1.5\" y=\"1.5\" />\n <rect height=\"9\" rx=\"1\" stroke=\"currentColor\" width=\"3\" x=\"7.5\" y=\"1.5\" />\n </svg>\n )\n}\n\nfunction RowsIcon() {\n return (\n <svg fill=\"none\" height=\"12\" viewBox=\"0 0 12 12\" width=\"12\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect height=\"3\" rx=\"1\" stroke=\"currentColor\" width=\"9\" x=\"1.5\" y=\"1.5\" />\n <rect height=\"3\" rx=\"1\" stroke=\"currentColor\" width=\"9\" x=\"1.5\" y=\"7.5\" />\n </svg>\n )\n}\n\ntype TableGridPopupProps = {\n anchorElem: HTMLElement | null\n editor: LexicalEditor\n isOpen: boolean\n onClose: () => void\n onInsert: (cols: number, rows: number) => void\n position: { left: number; top: number } | null\n}\n\nexport function TableGridPopup({\n anchorElem,\n editor: _editor,\n isOpen,\n onClose,\n onInsert,\n position,\n}: TableGridPopupProps) {\n const [hoverCol, setHoverCol] = useState(0)\n const [hoverRow, setHoverRow] = useState(0)\n const [inputCols, setInputCols] = useState('')\n const [inputRows, setInputRows] = useState('')\n const [focusedInput, setFocusedInput] = useState<'cols' | 'rows' | null>(null)\n const popupRef = useRef<HTMLDivElement>(null)\n const colsInputRef = useRef<HTMLInputElement>(null)\n const rowsInputRef = useRef<HTMLInputElement>(null)\n\n const effectiveCols = hoverCol > 0 ? hoverCol : inputCols ? parseInt(inputCols, 10) || 0 : 5\n const effectiveRows = hoverRow > 0 ? hoverRow : inputRows ? parseInt(inputRows, 10) || 0 : 5\n\n useEffect(() => {\n if (!isOpen) {\n setHoverCol(0)\n setHoverRow(0)\n setInputCols('')\n setInputRows('')\n setFocusedInput(null)\n }\n }, [isOpen])\n\n useEffect(() => {\n if (!isOpen) {\n return\n }\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n e.preventDefault()\n e.stopPropagation()\n onClose()\n }\n if (e.key === 'Enter' && focusedInput) {\n e.preventDefault()\n const cols = parseInt(inputCols, 10)\n const rows = parseInt(inputRows, 10)\n if (cols > 0 && rows > 0) {\n onInsert(cols, rows)\n }\n }\n }\n document.addEventListener('keydown', handleKeyDown, true)\n return () => document.removeEventListener('keydown', handleKeyDown, true)\n }, [isOpen, onClose, onInsert, focusedInput, inputCols, inputRows])\n\n const handleCellClick = useCallback(\n (col: number, row: number) => {\n if (col > 0 && row > 0) {\n onInsert(col, row)\n }\n },\n [onInsert],\n )\n\n const handleCellMouseEnter = useCallback((col: number, row: number) => {\n setHoverCol(col)\n setHoverRow(row)\n }, [])\n\n const handleGridMouseLeave = useCallback(() => {\n setHoverCol(0)\n setHoverRow(0)\n }, [])\n\n if (!isOpen || !position || !anchorElem) {\n return null\n }\n\n const cells: React.ReactNode[] = []\n for (let row = 1; row <= GRID_ROWS; row++) {\n for (let col = 1; col <= GRID_COLUMNS; col++) {\n const isInSelection = col <= effectiveCols && row <= effectiveRows\n const isHovered = col <= hoverCol && row <= hoverRow\n let className = 'table-grid-popup__cell'\n if (isInSelection && isHovered) {\n className += ' table-grid-popup__cell--hover'\n } else if (isInSelection) {\n className += ' table-grid-popup__cell--selected'\n }\n\n cells.push(\n <div\n aria-label={`${col} columns, ${row} rows`}\n className={className}\n key={`${row}-${col}`}\n onClick={() => handleCellClick(col, row)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handleCellClick(col, row)\n }\n }}\n onMouseEnter={() => handleCellMouseEnter(col, row)}\n role=\"button\"\n tabIndex={-1}\n />,\n )\n }\n }\n\n const showTooltip = hoverCol > 0 && hoverRow > 0\n\n return createPortal(\n <React.Fragment>\n {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions */}\n <div className=\"table-grid-popup__backdrop\" onClick={onClose} />\n <div\n className=\"table-grid-popup\"\n ref={popupRef}\n style={{\n transform: `translate(${position.left}px, ${position.top}px)`,\n }}\n >\n <div className=\"table-grid-popup__content\">\n <div className=\"table-grid-popup__header\">\n <div\n className={`table-grid-popup__input-group${focusedInput === 'cols' ? ' table-grid-popup__input-group--focused' : ''}`}\n >\n <div className=\"table-grid-popup__input-icon\">\n <ColumnsIcon />\n </div>\n <input\n aria-label=\"Columns\"\n className=\"table-grid-popup__input\"\n min={1}\n onBlur={() => setFocusedInput(null)}\n onChange={(e) => setInputCols(e.target.value)}\n onFocus={() => setFocusedInput('cols')}\n placeholder={hoverCol > 0 ? String(hoverCol) : '5'}\n ref={colsInputRef}\n type=\"number\"\n value={inputCols}\n />\n </div>\n <span className=\"table-grid-popup__separator\">×</span>\n <div\n className={`table-grid-popup__input-group${focusedInput === 'rows' ? ' table-grid-popup__input-group--focused' : ''}`}\n >\n <div className=\"table-grid-popup__input-icon\">\n <RowsIcon />\n </div>\n <input\n aria-label=\"Rows\"\n className=\"table-grid-popup__input\"\n min={1}\n onBlur={() => setFocusedInput(null)}\n onChange={(e) => setInputRows(e.target.value)}\n onFocus={() => setFocusedInput('rows')}\n placeholder={hoverRow > 0 ? String(hoverRow) : '5'}\n ref={rowsInputRef}\n type=\"number\"\n value={inputRows}\n />\n </div>\n </div>\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */}\n <div className=\"table-grid-popup__grid\" onMouseLeave={handleGridMouseLeave}>\n {cells}\n {showTooltip && (\n <div\n className=\"table-grid-popup__tooltip\"\n style={{\n left: `calc(${((hoverCol - 0.5) / GRID_COLUMNS) * 100}%)`,\n top: `calc(${((hoverRow - 1) / GRID_ROWS) * 100}%)`,\n }}\n >\n {effectiveCols} × {effectiveRows}\n </div>\n )}\n </div>\n </div>\n </div>\n </React.Fragment>,\n anchorElem,\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/features/experimental_table/client/plugins/TablePlugin/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,kBAAkB,EAClB,KAAK,EACL,cAAc,EACd,aAAa,EACb,WAAW,EACZ,MAAM,SAAS,CAAA;AAChB,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAchC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAGjE,OAAO,aAAa,CAAA;AAEpB,MAAM,MAAM,gBAAgB,GAAG;IAC7B,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAA;IACzC,iBAAiB,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAAA;IAC1D,GAAG,EAAE,CACH,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,EACzC,iBAAiB,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,KACvD,IAAI,CAAA;CACV,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC;IACtC,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAA;IACzC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,KAAK,IAAI,CAAA;IACtD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,kBAAkB,CAAA;CAC3B,CAAC,CAAA;AAEF,eAAO,MAAM,yBAAyB,EAAE,cAAc,CAAC,EAAE,CAExD,CAAA;AAED,eAAO,MAAM,WAAW,iCAMtB,CAAA;AAEF,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAA;CAAE,eAwBnE;AAED,eAAO,MAAM,WAAW,EAAE,eA4HzB,CAAA"}