@payloadcms/richtext-lexical 3.29.0-canary.5 → 3.29.0-canary.7

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 (435) hide show
  1. package/dist/exports/client/Field-5SZDDPZE.js +2 -0
  2. package/dist/exports/client/Field-5SZDDPZE.js.map +7 -0
  3. package/dist/exports/client/bundled.css +1 -1
  4. package/dist/exports/client/index.js +10 -10
  5. package/dist/exports/client/index.js.map +3 -3
  6. package/dist/exports/html/index.d.ts +15 -15
  7. package/dist/exports/html/index.d.ts.map +1 -1
  8. package/dist/exports/html/index.js +13 -13
  9. package/dist/exports/html/index.js.map +1 -1
  10. package/dist/exports/html-async/index.d.ts +15 -15
  11. package/dist/exports/html-async/index.d.ts.map +1 -1
  12. package/dist/exports/html-async/index.js +13 -13
  13. package/dist/exports/html-async/index.js.map +1 -1
  14. package/dist/exports/plaintext/index.d.ts +3 -0
  15. package/dist/exports/plaintext/index.d.ts.map +1 -0
  16. package/dist/exports/plaintext/index.js +2 -0
  17. package/dist/exports/plaintext/index.js.map +1 -0
  18. package/dist/exports/react/index.d.ts +15 -15
  19. package/dist/exports/react/index.d.ts.map +1 -1
  20. package/dist/exports/react/index.js +14 -14
  21. package/dist/exports/react/index.js.map +1 -1
  22. package/dist/features/blockquote/server/index.js +1 -1
  23. package/dist/features/blockquote/server/index.js.map +1 -1
  24. package/dist/features/blocks/server/linesFromMatchToContentAndPropsString.d.ts.map +1 -1
  25. package/dist/features/blocks/server/linesFromMatchToContentAndPropsString.js +1 -1
  26. package/dist/features/blocks/server/linesFromMatchToContentAndPropsString.js.map +1 -1
  27. package/dist/features/converters/htmlToLexical/index.d.ts.map +1 -1
  28. package/dist/features/converters/htmlToLexical/index.js +0 -1
  29. package/dist/features/converters/htmlToLexical/index.js.map +1 -1
  30. package/dist/features/converters/lexicalToHtml/async/converters/blockquote.d.ts.map +1 -0
  31. package/dist/features/converters/lexicalToHtml/async/converters/blockquote.js.map +1 -0
  32. package/dist/features/converters/lexicalToHtml/async/converters/heading.d.ts.map +1 -0
  33. package/dist/features/converters/lexicalToHtml/async/converters/heading.js.map +1 -0
  34. package/dist/features/converters/lexicalToHtml/async/converters/horizontalRule.d.ts.map +1 -0
  35. package/dist/features/converters/lexicalToHtml/async/converters/horizontalRule.js.map +1 -0
  36. package/dist/features/converters/lexicalToHtml/async/converters/linebreak.d.ts.map +1 -0
  37. package/dist/features/converters/lexicalToHtml/async/converters/linebreak.js.map +1 -0
  38. package/dist/features/converters/lexicalToHtml/async/converters/link.d.ts.map +1 -0
  39. package/dist/features/converters/{html → lexicalToHtml}/async/converters/link.js +4 -12
  40. package/dist/features/converters/lexicalToHtml/async/converters/link.js.map +1 -0
  41. package/dist/features/converters/lexicalToHtml/async/converters/list.d.ts.map +1 -0
  42. package/dist/features/converters/{html → lexicalToHtml}/async/converters/list.js +1 -1
  43. package/dist/features/converters/lexicalToHtml/async/converters/list.js.map +1 -0
  44. package/dist/features/converters/lexicalToHtml/async/converters/paragraph.d.ts.map +1 -0
  45. package/dist/features/converters/lexicalToHtml/async/converters/paragraph.js.map +1 -0
  46. package/dist/features/converters/lexicalToHtml/async/converters/tab.d.ts.map +1 -0
  47. package/dist/features/converters/lexicalToHtml/async/converters/tab.js.map +1 -0
  48. package/dist/features/converters/lexicalToHtml/async/converters/table.d.ts.map +1 -0
  49. package/dist/features/converters/lexicalToHtml/async/converters/table.js.map +1 -0
  50. package/dist/features/converters/lexicalToHtml/async/converters/text.d.ts.map +1 -0
  51. package/dist/features/converters/lexicalToHtml/async/converters/text.js.map +1 -0
  52. package/dist/features/converters/lexicalToHtml/async/converters/upload.d.ts.map +1 -0
  53. package/dist/features/converters/lexicalToHtml/async/converters/upload.js.map +1 -0
  54. package/dist/features/converters/lexicalToHtml/async/defaultConverters.d.ts.map +1 -0
  55. package/dist/features/converters/lexicalToHtml/async/defaultConverters.js.map +1 -0
  56. package/dist/features/converters/lexicalToHtml/async/field/index.d.ts.map +1 -0
  57. package/dist/features/converters/{html → lexicalToHtml}/async/field/index.js +11 -11
  58. package/dist/features/converters/lexicalToHtml/async/field/index.js.map +1 -0
  59. package/dist/features/converters/lexicalToHtml/async/index.d.ts.map +1 -0
  60. package/dist/features/converters/lexicalToHtml/async/index.js.map +1 -0
  61. package/dist/features/converters/lexicalToHtml/async/types.d.ts.map +1 -0
  62. package/dist/features/converters/lexicalToHtml/async/types.js.map +1 -0
  63. package/dist/features/converters/lexicalToHtml/shared/findConverterForNode.d.ts.map +1 -0
  64. package/dist/features/converters/lexicalToHtml/shared/findConverterForNode.js.map +1 -0
  65. package/dist/features/converters/lexicalToHtml/shared/types.d.ts.map +1 -0
  66. package/dist/features/converters/lexicalToHtml/shared/types.js.map +1 -0
  67. package/dist/features/converters/lexicalToHtml/sync/converters/blockquote.d.ts.map +1 -0
  68. package/dist/features/converters/lexicalToHtml/sync/converters/blockquote.js.map +1 -0
  69. package/dist/features/converters/lexicalToHtml/sync/converters/heading.d.ts.map +1 -0
  70. package/dist/features/converters/lexicalToHtml/sync/converters/heading.js.map +1 -0
  71. package/dist/features/converters/lexicalToHtml/sync/converters/horizontalRule.d.ts.map +1 -0
  72. package/dist/features/converters/lexicalToHtml/sync/converters/horizontalRule.js.map +1 -0
  73. package/dist/features/converters/lexicalToHtml/sync/converters/linebreak.d.ts.map +1 -0
  74. package/dist/features/converters/lexicalToHtml/sync/converters/linebreak.js.map +1 -0
  75. package/dist/features/converters/lexicalToHtml/sync/converters/link.d.ts.map +1 -0
  76. package/dist/features/converters/{html → lexicalToHtml}/sync/converters/link.js +4 -12
  77. package/dist/features/converters/lexicalToHtml/sync/converters/link.js.map +1 -0
  78. package/dist/features/converters/lexicalToHtml/sync/converters/list.d.ts.map +1 -0
  79. package/dist/features/converters/{html → lexicalToHtml}/sync/converters/list.js +1 -1
  80. package/dist/features/converters/lexicalToHtml/sync/converters/list.js.map +1 -0
  81. package/dist/features/converters/lexicalToHtml/sync/converters/paragraph.d.ts.map +1 -0
  82. package/dist/features/converters/lexicalToHtml/sync/converters/paragraph.js.map +1 -0
  83. package/dist/features/converters/lexicalToHtml/sync/converters/tab.d.ts.map +1 -0
  84. package/dist/features/converters/lexicalToHtml/sync/converters/tab.js.map +1 -0
  85. package/dist/features/converters/lexicalToHtml/sync/converters/table.d.ts.map +1 -0
  86. package/dist/features/converters/lexicalToHtml/sync/converters/table.js.map +1 -0
  87. package/dist/features/converters/lexicalToHtml/sync/converters/text.d.ts.map +1 -0
  88. package/dist/features/converters/lexicalToHtml/sync/converters/text.js.map +1 -0
  89. package/dist/features/converters/lexicalToHtml/sync/converters/upload.d.ts.map +1 -0
  90. package/dist/features/converters/lexicalToHtml/sync/converters/upload.js.map +1 -0
  91. package/dist/features/converters/lexicalToHtml/sync/defaultConverters.d.ts.map +1 -0
  92. package/dist/features/converters/lexicalToHtml/sync/defaultConverters.js.map +1 -0
  93. package/dist/features/converters/lexicalToHtml/sync/index.d.ts.map +1 -0
  94. package/dist/features/converters/lexicalToHtml/sync/index.js.map +1 -0
  95. package/dist/features/converters/lexicalToHtml/sync/types.d.ts.map +1 -0
  96. package/dist/features/converters/lexicalToHtml/sync/types.js.map +1 -0
  97. package/dist/features/converters/lexicalToHtml_deprecated/converter/converters/linebreak.d.ts.map +1 -0
  98. package/dist/features/converters/lexicalToHtml_deprecated/converter/converters/linebreak.js.map +1 -0
  99. package/dist/features/converters/lexicalToHtml_deprecated/converter/converters/paragraph.d.ts.map +1 -0
  100. package/dist/features/converters/lexicalToHtml_deprecated/converter/converters/paragraph.js.map +1 -0
  101. package/dist/features/converters/lexicalToHtml_deprecated/converter/converters/tab.d.ts.map +1 -0
  102. package/dist/features/converters/lexicalToHtml_deprecated/converter/converters/tab.js.map +1 -0
  103. package/dist/features/converters/lexicalToHtml_deprecated/converter/converters/text.d.ts.map +1 -0
  104. package/dist/features/converters/lexicalToHtml_deprecated/converter/converters/text.js.map +1 -0
  105. package/dist/features/converters/lexicalToHtml_deprecated/converter/defaultConverters.d.ts.map +1 -0
  106. package/dist/features/converters/lexicalToHtml_deprecated/converter/defaultConverters.js.map +1 -0
  107. package/dist/features/converters/lexicalToHtml_deprecated/converter/index.d.ts.map +1 -0
  108. package/dist/features/converters/lexicalToHtml_deprecated/converter/index.js.map +1 -0
  109. package/dist/features/converters/lexicalToHtml_deprecated/converter/types.d.ts.map +1 -0
  110. package/dist/features/converters/lexicalToHtml_deprecated/converter/types.js.map +1 -0
  111. package/dist/features/converters/lexicalToHtml_deprecated/field/index.d.ts.map +1 -0
  112. package/dist/features/converters/lexicalToHtml_deprecated/field/index.js.map +1 -0
  113. package/dist/features/converters/lexicalToHtml_deprecated/index.d.ts.map +1 -0
  114. package/dist/features/converters/lexicalToHtml_deprecated/index.js.map +1 -0
  115. package/dist/features/converters/lexicalToJSX/Component/index.d.ts.map +1 -0
  116. package/dist/features/converters/lexicalToJSX/Component/index.js.map +1 -0
  117. package/dist/features/converters/lexicalToJSX/converter/converters/blockquote.d.ts.map +1 -0
  118. package/dist/features/converters/lexicalToJSX/converter/converters/blockquote.js.map +1 -0
  119. package/dist/features/converters/lexicalToJSX/converter/converters/heading.d.ts.map +1 -0
  120. package/dist/features/converters/lexicalToJSX/converter/converters/heading.js.map +1 -0
  121. package/dist/features/converters/lexicalToJSX/converter/converters/horizontalRule.d.ts.map +1 -0
  122. package/dist/features/converters/lexicalToJSX/converter/converters/horizontalRule.js.map +1 -0
  123. package/dist/features/converters/lexicalToJSX/converter/converters/linebreak.d.ts.map +1 -0
  124. package/dist/features/converters/lexicalToJSX/converter/converters/linebreak.js.map +1 -0
  125. package/dist/features/converters/lexicalToJSX/converter/converters/link.d.ts.map +1 -0
  126. package/dist/features/converters/lexicalToJSX/converter/converters/link.js.map +1 -0
  127. package/dist/features/converters/lexicalToJSX/converter/converters/list.d.ts.map +1 -0
  128. package/dist/features/converters/lexicalToJSX/converter/converters/list.js.map +1 -0
  129. package/dist/features/converters/lexicalToJSX/converter/converters/paragraph.d.ts.map +1 -0
  130. package/dist/features/converters/lexicalToJSX/converter/converters/paragraph.js.map +1 -0
  131. package/dist/features/converters/lexicalToJSX/converter/converters/tab.d.ts.map +1 -0
  132. package/dist/features/converters/lexicalToJSX/converter/converters/tab.js.map +1 -0
  133. package/dist/features/converters/lexicalToJSX/converter/converters/table.d.ts.map +1 -0
  134. package/dist/features/converters/lexicalToJSX/converter/converters/table.js.map +1 -0
  135. package/dist/features/converters/lexicalToJSX/converter/converters/text.d.ts.map +1 -0
  136. package/dist/features/converters/lexicalToJSX/converter/converters/text.js.map +1 -0
  137. package/dist/features/converters/lexicalToJSX/converter/converters/upload.d.ts.map +1 -0
  138. package/dist/features/converters/lexicalToJSX/converter/converters/upload.js.map +1 -0
  139. package/dist/features/converters/lexicalToJSX/converter/defaultConverters.d.ts.map +1 -0
  140. package/dist/features/converters/lexicalToJSX/converter/defaultConverters.js.map +1 -0
  141. package/dist/features/converters/lexicalToJSX/converter/index.d.ts.map +1 -0
  142. package/dist/features/converters/lexicalToJSX/converter/index.js.map +1 -0
  143. package/dist/features/converters/lexicalToJSX/converter/types.d.ts.map +1 -0
  144. package/dist/features/converters/lexicalToJSX/converter/types.js.map +1 -0
  145. package/dist/features/converters/lexicalToMarkdown/index.d.ts +7 -0
  146. package/dist/features/converters/lexicalToMarkdown/index.d.ts.map +1 -0
  147. package/dist/features/converters/lexicalToMarkdown/index.js +24 -0
  148. package/dist/features/converters/lexicalToMarkdown/index.js.map +1 -0
  149. package/dist/features/converters/lexicalToPlaintext/convertLexicalToPlaintext.spec.js +84 -0
  150. package/dist/features/converters/lexicalToPlaintext/convertLexicalToPlaintext.spec.js.map +1 -0
  151. package/dist/features/converters/lexicalToPlaintext/shared/findConverterForNode.d.ts +7 -0
  152. package/dist/features/converters/lexicalToPlaintext/shared/findConverterForNode.d.ts.map +1 -0
  153. package/dist/features/converters/lexicalToPlaintext/shared/findConverterForNode.js +15 -0
  154. package/dist/features/converters/lexicalToPlaintext/shared/findConverterForNode.js.map +1 -0
  155. package/dist/features/converters/lexicalToPlaintext/shared/types.d.ts +5 -0
  156. package/dist/features/converters/lexicalToPlaintext/shared/types.d.ts.map +1 -0
  157. package/dist/features/converters/lexicalToPlaintext/shared/types.js +2 -0
  158. package/dist/features/converters/lexicalToPlaintext/shared/types.js.map +1 -0
  159. package/dist/features/converters/lexicalToPlaintext/sync/index.d.ts +22 -0
  160. package/dist/features/converters/lexicalToPlaintext/sync/index.d.ts.map +1 -0
  161. package/dist/features/converters/lexicalToPlaintext/sync/index.js +79 -0
  162. package/dist/features/converters/lexicalToPlaintext/sync/index.js.map +1 -0
  163. package/dist/features/converters/lexicalToPlaintext/sync/types.d.ts +60 -0
  164. package/dist/features/converters/lexicalToPlaintext/sync/types.d.ts.map +1 -0
  165. package/dist/features/converters/lexicalToPlaintext/sync/types.js +2 -0
  166. package/dist/features/converters/lexicalToPlaintext/sync/types.js.map +1 -0
  167. package/dist/features/converters/markdownToLexical/index.d.ts +8 -0
  168. package/dist/features/converters/markdownToLexical/index.d.ts.map +1 -0
  169. package/dist/features/converters/markdownToLexical/index.js +21 -0
  170. package/dist/features/converters/markdownToLexical/index.js.map +1 -0
  171. package/dist/features/converters/utilities/payloadPopulateFn.d.ts +1 -1
  172. package/dist/features/converters/utilities/payloadPopulateFn.d.ts.map +1 -1
  173. package/dist/features/converters/utilities/payloadPopulateFn.js.map +1 -1
  174. package/dist/features/converters/utilities/restPopulateFn.d.ts +1 -1
  175. package/dist/features/converters/utilities/restPopulateFn.d.ts.map +1 -1
  176. package/dist/features/converters/utilities/restPopulateFn.js.map +1 -1
  177. package/dist/features/experimental_table/client/plugins/TableActionMenuPlugin/index.js +3 -3
  178. package/dist/features/experimental_table/client/plugins/TableActionMenuPlugin/index.js.map +1 -1
  179. package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.d.ts +1 -0
  180. package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.d.ts.map +1 -1
  181. package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.js +5 -1
  182. package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.js.map +1 -1
  183. package/dist/features/experimental_table/server/index.js +1 -1
  184. package/dist/features/experimental_table/server/index.js.map +1 -1
  185. package/dist/features/heading/server/index.js +1 -1
  186. package/dist/features/heading/server/index.js.map +1 -1
  187. package/dist/features/indent/client/IndentPlugin.d.ts.map +1 -1
  188. package/dist/features/indent/client/IndentPlugin.js +26 -6
  189. package/dist/features/indent/client/IndentPlugin.js.map +1 -1
  190. package/dist/features/indent/client/index.d.ts +2 -1
  191. package/dist/features/indent/client/index.d.ts.map +1 -1
  192. package/dist/features/indent/client/index.js +41 -19
  193. package/dist/features/indent/client/index.js.map +1 -1
  194. package/dist/features/indent/server/index.d.ts +7 -0
  195. package/dist/features/indent/server/index.d.ts.map +1 -1
  196. package/dist/features/indent/server/index.js.map +1 -1
  197. package/dist/features/link/server/index.d.ts.map +1 -1
  198. package/dist/features/link/server/index.js +3 -7
  199. package/dist/features/link/server/index.js.map +1 -1
  200. package/dist/features/lists/htmlConverter.d.ts +1 -1
  201. package/dist/features/lists/htmlConverter.d.ts.map +1 -1
  202. package/dist/features/lists/htmlConverter.js +1 -1
  203. package/dist/features/lists/htmlConverter.js.map +1 -1
  204. package/dist/features/typesServer.d.ts +1 -1
  205. package/dist/features/typesServer.d.ts.map +1 -1
  206. package/dist/features/typesServer.js.map +1 -1
  207. package/dist/field/Field.d.ts.map +1 -1
  208. package/dist/field/Field.js +2 -3
  209. package/dist/field/Field.js.map +1 -1
  210. package/dist/field/bundled.css +1 -1
  211. package/dist/index.d.ts +13 -11
  212. package/dist/index.d.ts.map +1 -1
  213. package/dist/index.js +12 -10
  214. package/dist/index.js.map +1 -1
  215. package/dist/nodeTypes.d.ts +1 -1
  216. package/dist/nodeTypes.d.ts.map +1 -1
  217. package/dist/nodeTypes.js.map +1 -1
  218. package/package.json +24 -19
  219. package/dist/exports/client/Field-IUDF2DGI.js +0 -2
  220. package/dist/exports/client/Field-IUDF2DGI.js.map +0 -7
  221. package/dist/features/converters/html/async/converters/blockquote.d.ts.map +0 -1
  222. package/dist/features/converters/html/async/converters/blockquote.js.map +0 -1
  223. package/dist/features/converters/html/async/converters/heading.d.ts.map +0 -1
  224. package/dist/features/converters/html/async/converters/heading.js.map +0 -1
  225. package/dist/features/converters/html/async/converters/horizontalRule.d.ts.map +0 -1
  226. package/dist/features/converters/html/async/converters/horizontalRule.js.map +0 -1
  227. package/dist/features/converters/html/async/converters/linebreak.d.ts.map +0 -1
  228. package/dist/features/converters/html/async/converters/linebreak.js.map +0 -1
  229. package/dist/features/converters/html/async/converters/link.d.ts.map +0 -1
  230. package/dist/features/converters/html/async/converters/link.js.map +0 -1
  231. package/dist/features/converters/html/async/converters/list.d.ts.map +0 -1
  232. package/dist/features/converters/html/async/converters/list.js.map +0 -1
  233. package/dist/features/converters/html/async/converters/paragraph.d.ts.map +0 -1
  234. package/dist/features/converters/html/async/converters/paragraph.js.map +0 -1
  235. package/dist/features/converters/html/async/converters/tab.d.ts.map +0 -1
  236. package/dist/features/converters/html/async/converters/tab.js.map +0 -1
  237. package/dist/features/converters/html/async/converters/table.d.ts.map +0 -1
  238. package/dist/features/converters/html/async/converters/table.js.map +0 -1
  239. package/dist/features/converters/html/async/converters/text.d.ts.map +0 -1
  240. package/dist/features/converters/html/async/converters/text.js.map +0 -1
  241. package/dist/features/converters/html/async/converters/upload.d.ts.map +0 -1
  242. package/dist/features/converters/html/async/converters/upload.js.map +0 -1
  243. package/dist/features/converters/html/async/defaultConverters.d.ts.map +0 -1
  244. package/dist/features/converters/html/async/defaultConverters.js.map +0 -1
  245. package/dist/features/converters/html/async/field/index.d.ts.map +0 -1
  246. package/dist/features/converters/html/async/field/index.js.map +0 -1
  247. package/dist/features/converters/html/async/index.d.ts.map +0 -1
  248. package/dist/features/converters/html/async/index.js.map +0 -1
  249. package/dist/features/converters/html/async/types.d.ts.map +0 -1
  250. package/dist/features/converters/html/async/types.js.map +0 -1
  251. package/dist/features/converters/html/shared/findConverterForNode.d.ts.map +0 -1
  252. package/dist/features/converters/html/shared/findConverterForNode.js.map +0 -1
  253. package/dist/features/converters/html/shared/types.d.ts.map +0 -1
  254. package/dist/features/converters/html/shared/types.js.map +0 -1
  255. package/dist/features/converters/html/sync/converters/blockquote.d.ts.map +0 -1
  256. package/dist/features/converters/html/sync/converters/blockquote.js.map +0 -1
  257. package/dist/features/converters/html/sync/converters/heading.d.ts.map +0 -1
  258. package/dist/features/converters/html/sync/converters/heading.js.map +0 -1
  259. package/dist/features/converters/html/sync/converters/horizontalRule.d.ts.map +0 -1
  260. package/dist/features/converters/html/sync/converters/horizontalRule.js.map +0 -1
  261. package/dist/features/converters/html/sync/converters/linebreak.d.ts.map +0 -1
  262. package/dist/features/converters/html/sync/converters/linebreak.js.map +0 -1
  263. package/dist/features/converters/html/sync/converters/link.d.ts.map +0 -1
  264. package/dist/features/converters/html/sync/converters/link.js.map +0 -1
  265. package/dist/features/converters/html/sync/converters/list.d.ts.map +0 -1
  266. package/dist/features/converters/html/sync/converters/list.js.map +0 -1
  267. package/dist/features/converters/html/sync/converters/paragraph.d.ts.map +0 -1
  268. package/dist/features/converters/html/sync/converters/paragraph.js.map +0 -1
  269. package/dist/features/converters/html/sync/converters/tab.d.ts.map +0 -1
  270. package/dist/features/converters/html/sync/converters/tab.js.map +0 -1
  271. package/dist/features/converters/html/sync/converters/table.d.ts.map +0 -1
  272. package/dist/features/converters/html/sync/converters/table.js.map +0 -1
  273. package/dist/features/converters/html/sync/converters/text.d.ts.map +0 -1
  274. package/dist/features/converters/html/sync/converters/text.js.map +0 -1
  275. package/dist/features/converters/html/sync/converters/upload.d.ts.map +0 -1
  276. package/dist/features/converters/html/sync/converters/upload.js.map +0 -1
  277. package/dist/features/converters/html/sync/defaultConverters.d.ts.map +0 -1
  278. package/dist/features/converters/html/sync/defaultConverters.js.map +0 -1
  279. package/dist/features/converters/html/sync/index.d.ts.map +0 -1
  280. package/dist/features/converters/html/sync/index.js.map +0 -1
  281. package/dist/features/converters/html/sync/types.d.ts.map +0 -1
  282. package/dist/features/converters/html/sync/types.js.map +0 -1
  283. package/dist/features/converters/html_deprecated/converter/converters/linebreak.d.ts.map +0 -1
  284. package/dist/features/converters/html_deprecated/converter/converters/linebreak.js.map +0 -1
  285. package/dist/features/converters/html_deprecated/converter/converters/paragraph.d.ts.map +0 -1
  286. package/dist/features/converters/html_deprecated/converter/converters/paragraph.js.map +0 -1
  287. package/dist/features/converters/html_deprecated/converter/converters/tab.d.ts.map +0 -1
  288. package/dist/features/converters/html_deprecated/converter/converters/tab.js.map +0 -1
  289. package/dist/features/converters/html_deprecated/converter/converters/text.d.ts.map +0 -1
  290. package/dist/features/converters/html_deprecated/converter/converters/text.js.map +0 -1
  291. package/dist/features/converters/html_deprecated/converter/defaultConverters.d.ts.map +0 -1
  292. package/dist/features/converters/html_deprecated/converter/defaultConverters.js.map +0 -1
  293. package/dist/features/converters/html_deprecated/converter/index.d.ts.map +0 -1
  294. package/dist/features/converters/html_deprecated/converter/index.js.map +0 -1
  295. package/dist/features/converters/html_deprecated/converter/types.d.ts.map +0 -1
  296. package/dist/features/converters/html_deprecated/converter/types.js.map +0 -1
  297. package/dist/features/converters/html_deprecated/field/index.d.ts.map +0 -1
  298. package/dist/features/converters/html_deprecated/field/index.js.map +0 -1
  299. package/dist/features/converters/html_deprecated/index.d.ts.map +0 -1
  300. package/dist/features/converters/html_deprecated/index.js.map +0 -1
  301. package/dist/features/converters/jsx/Component/index.d.ts.map +0 -1
  302. package/dist/features/converters/jsx/Component/index.js.map +0 -1
  303. package/dist/features/converters/jsx/converter/converters/blockquote.d.ts.map +0 -1
  304. package/dist/features/converters/jsx/converter/converters/blockquote.js.map +0 -1
  305. package/dist/features/converters/jsx/converter/converters/heading.d.ts.map +0 -1
  306. package/dist/features/converters/jsx/converter/converters/heading.js.map +0 -1
  307. package/dist/features/converters/jsx/converter/converters/horizontalRule.d.ts.map +0 -1
  308. package/dist/features/converters/jsx/converter/converters/horizontalRule.js.map +0 -1
  309. package/dist/features/converters/jsx/converter/converters/linebreak.d.ts.map +0 -1
  310. package/dist/features/converters/jsx/converter/converters/linebreak.js.map +0 -1
  311. package/dist/features/converters/jsx/converter/converters/link.d.ts.map +0 -1
  312. package/dist/features/converters/jsx/converter/converters/link.js.map +0 -1
  313. package/dist/features/converters/jsx/converter/converters/list.d.ts.map +0 -1
  314. package/dist/features/converters/jsx/converter/converters/list.js.map +0 -1
  315. package/dist/features/converters/jsx/converter/converters/paragraph.d.ts.map +0 -1
  316. package/dist/features/converters/jsx/converter/converters/paragraph.js.map +0 -1
  317. package/dist/features/converters/jsx/converter/converters/tab.d.ts.map +0 -1
  318. package/dist/features/converters/jsx/converter/converters/tab.js.map +0 -1
  319. package/dist/features/converters/jsx/converter/converters/table.d.ts.map +0 -1
  320. package/dist/features/converters/jsx/converter/converters/table.js.map +0 -1
  321. package/dist/features/converters/jsx/converter/converters/text.d.ts.map +0 -1
  322. package/dist/features/converters/jsx/converter/converters/text.js.map +0 -1
  323. package/dist/features/converters/jsx/converter/converters/upload.d.ts.map +0 -1
  324. package/dist/features/converters/jsx/converter/converters/upload.js.map +0 -1
  325. package/dist/features/converters/jsx/converter/defaultConverters.d.ts.map +0 -1
  326. package/dist/features/converters/jsx/converter/defaultConverters.js.map +0 -1
  327. package/dist/features/converters/jsx/converter/index.d.ts.map +0 -1
  328. package/dist/features/converters/jsx/converter/index.js.map +0 -1
  329. package/dist/features/converters/jsx/converter/types.d.ts.map +0 -1
  330. package/dist/features/converters/jsx/converter/types.js.map +0 -1
  331. /package/dist/features/converters/{html → lexicalToHtml}/async/converters/blockquote.d.ts +0 -0
  332. /package/dist/features/converters/{html → lexicalToHtml}/async/converters/blockquote.js +0 -0
  333. /package/dist/features/converters/{html → lexicalToHtml}/async/converters/heading.d.ts +0 -0
  334. /package/dist/features/converters/{html → lexicalToHtml}/async/converters/heading.js +0 -0
  335. /package/dist/features/converters/{html → lexicalToHtml}/async/converters/horizontalRule.d.ts +0 -0
  336. /package/dist/features/converters/{html → lexicalToHtml}/async/converters/horizontalRule.js +0 -0
  337. /package/dist/features/converters/{html → lexicalToHtml}/async/converters/linebreak.d.ts +0 -0
  338. /package/dist/features/converters/{html → lexicalToHtml}/async/converters/linebreak.js +0 -0
  339. /package/dist/features/converters/{html → lexicalToHtml}/async/converters/link.d.ts +0 -0
  340. /package/dist/features/converters/{html → lexicalToHtml}/async/converters/list.d.ts +0 -0
  341. /package/dist/features/converters/{html → lexicalToHtml}/async/converters/paragraph.d.ts +0 -0
  342. /package/dist/features/converters/{html → lexicalToHtml}/async/converters/paragraph.js +0 -0
  343. /package/dist/features/converters/{html → lexicalToHtml}/async/converters/tab.d.ts +0 -0
  344. /package/dist/features/converters/{html → lexicalToHtml}/async/converters/tab.js +0 -0
  345. /package/dist/features/converters/{html → lexicalToHtml}/async/converters/table.d.ts +0 -0
  346. /package/dist/features/converters/{html → lexicalToHtml}/async/converters/table.js +0 -0
  347. /package/dist/features/converters/{html → lexicalToHtml}/async/converters/text.d.ts +0 -0
  348. /package/dist/features/converters/{html → lexicalToHtml}/async/converters/text.js +0 -0
  349. /package/dist/features/converters/{html → lexicalToHtml}/async/converters/upload.d.ts +0 -0
  350. /package/dist/features/converters/{html → lexicalToHtml}/async/converters/upload.js +0 -0
  351. /package/dist/features/converters/{html → lexicalToHtml}/async/defaultConverters.d.ts +0 -0
  352. /package/dist/features/converters/{html → lexicalToHtml}/async/defaultConverters.js +0 -0
  353. /package/dist/features/converters/{html → lexicalToHtml}/async/field/index.d.ts +0 -0
  354. /package/dist/features/converters/{html → lexicalToHtml}/async/index.d.ts +0 -0
  355. /package/dist/features/converters/{html → lexicalToHtml}/async/index.js +0 -0
  356. /package/dist/features/converters/{html → lexicalToHtml}/async/types.d.ts +0 -0
  357. /package/dist/features/converters/{html → lexicalToHtml}/async/types.js +0 -0
  358. /package/dist/features/converters/{html → lexicalToHtml}/shared/findConverterForNode.d.ts +0 -0
  359. /package/dist/features/converters/{html → lexicalToHtml}/shared/findConverterForNode.js +0 -0
  360. /package/dist/features/converters/{html → lexicalToHtml}/shared/types.d.ts +0 -0
  361. /package/dist/features/converters/{html → lexicalToHtml}/shared/types.js +0 -0
  362. /package/dist/features/converters/{html → lexicalToHtml}/sync/converters/blockquote.d.ts +0 -0
  363. /package/dist/features/converters/{html → lexicalToHtml}/sync/converters/blockquote.js +0 -0
  364. /package/dist/features/converters/{html → lexicalToHtml}/sync/converters/heading.d.ts +0 -0
  365. /package/dist/features/converters/{html → lexicalToHtml}/sync/converters/heading.js +0 -0
  366. /package/dist/features/converters/{html → lexicalToHtml}/sync/converters/horizontalRule.d.ts +0 -0
  367. /package/dist/features/converters/{html → lexicalToHtml}/sync/converters/horizontalRule.js +0 -0
  368. /package/dist/features/converters/{html → lexicalToHtml}/sync/converters/linebreak.d.ts +0 -0
  369. /package/dist/features/converters/{html → lexicalToHtml}/sync/converters/linebreak.js +0 -0
  370. /package/dist/features/converters/{html → lexicalToHtml}/sync/converters/link.d.ts +0 -0
  371. /package/dist/features/converters/{html → lexicalToHtml}/sync/converters/list.d.ts +0 -0
  372. /package/dist/features/converters/{html → lexicalToHtml}/sync/converters/paragraph.d.ts +0 -0
  373. /package/dist/features/converters/{html → lexicalToHtml}/sync/converters/paragraph.js +0 -0
  374. /package/dist/features/converters/{html → lexicalToHtml}/sync/converters/tab.d.ts +0 -0
  375. /package/dist/features/converters/{html → lexicalToHtml}/sync/converters/tab.js +0 -0
  376. /package/dist/features/converters/{html → lexicalToHtml}/sync/converters/table.d.ts +0 -0
  377. /package/dist/features/converters/{html → lexicalToHtml}/sync/converters/table.js +0 -0
  378. /package/dist/features/converters/{html → lexicalToHtml}/sync/converters/text.d.ts +0 -0
  379. /package/dist/features/converters/{html → lexicalToHtml}/sync/converters/text.js +0 -0
  380. /package/dist/features/converters/{html → lexicalToHtml}/sync/converters/upload.d.ts +0 -0
  381. /package/dist/features/converters/{html → lexicalToHtml}/sync/converters/upload.js +0 -0
  382. /package/dist/features/converters/{html → lexicalToHtml}/sync/defaultConverters.d.ts +0 -0
  383. /package/dist/features/converters/{html → lexicalToHtml}/sync/defaultConverters.js +0 -0
  384. /package/dist/features/converters/{html → lexicalToHtml}/sync/index.d.ts +0 -0
  385. /package/dist/features/converters/{html → lexicalToHtml}/sync/index.js +0 -0
  386. /package/dist/features/converters/{html → lexicalToHtml}/sync/types.d.ts +0 -0
  387. /package/dist/features/converters/{html → lexicalToHtml}/sync/types.js +0 -0
  388. /package/dist/features/converters/{html_deprecated → lexicalToHtml_deprecated}/converter/converters/linebreak.d.ts +0 -0
  389. /package/dist/features/converters/{html_deprecated → lexicalToHtml_deprecated}/converter/converters/linebreak.js +0 -0
  390. /package/dist/features/converters/{html_deprecated → lexicalToHtml_deprecated}/converter/converters/paragraph.d.ts +0 -0
  391. /package/dist/features/converters/{html_deprecated → lexicalToHtml_deprecated}/converter/converters/paragraph.js +0 -0
  392. /package/dist/features/converters/{html_deprecated → lexicalToHtml_deprecated}/converter/converters/tab.d.ts +0 -0
  393. /package/dist/features/converters/{html_deprecated → lexicalToHtml_deprecated}/converter/converters/tab.js +0 -0
  394. /package/dist/features/converters/{html_deprecated → lexicalToHtml_deprecated}/converter/converters/text.d.ts +0 -0
  395. /package/dist/features/converters/{html_deprecated → lexicalToHtml_deprecated}/converter/converters/text.js +0 -0
  396. /package/dist/features/converters/{html_deprecated → lexicalToHtml_deprecated}/converter/defaultConverters.d.ts +0 -0
  397. /package/dist/features/converters/{html_deprecated → lexicalToHtml_deprecated}/converter/defaultConverters.js +0 -0
  398. /package/dist/features/converters/{html_deprecated → lexicalToHtml_deprecated}/converter/index.d.ts +0 -0
  399. /package/dist/features/converters/{html_deprecated → lexicalToHtml_deprecated}/converter/index.js +0 -0
  400. /package/dist/features/converters/{html_deprecated → lexicalToHtml_deprecated}/converter/types.d.ts +0 -0
  401. /package/dist/features/converters/{html_deprecated → lexicalToHtml_deprecated}/converter/types.js +0 -0
  402. /package/dist/features/converters/{html_deprecated → lexicalToHtml_deprecated}/field/index.d.ts +0 -0
  403. /package/dist/features/converters/{html_deprecated → lexicalToHtml_deprecated}/field/index.js +0 -0
  404. /package/dist/features/converters/{html_deprecated → lexicalToHtml_deprecated}/index.d.ts +0 -0
  405. /package/dist/features/converters/{html_deprecated → lexicalToHtml_deprecated}/index.js +0 -0
  406. /package/dist/features/converters/{jsx → lexicalToJSX}/Component/index.d.ts +0 -0
  407. /package/dist/features/converters/{jsx → lexicalToJSX}/Component/index.js +0 -0
  408. /package/dist/features/converters/{jsx → lexicalToJSX}/converter/converters/blockquote.d.ts +0 -0
  409. /package/dist/features/converters/{jsx → lexicalToJSX}/converter/converters/blockquote.js +0 -0
  410. /package/dist/features/converters/{jsx → lexicalToJSX}/converter/converters/heading.d.ts +0 -0
  411. /package/dist/features/converters/{jsx → lexicalToJSX}/converter/converters/heading.js +0 -0
  412. /package/dist/features/converters/{jsx → lexicalToJSX}/converter/converters/horizontalRule.d.ts +0 -0
  413. /package/dist/features/converters/{jsx → lexicalToJSX}/converter/converters/horizontalRule.js +0 -0
  414. /package/dist/features/converters/{jsx → lexicalToJSX}/converter/converters/linebreak.d.ts +0 -0
  415. /package/dist/features/converters/{jsx → lexicalToJSX}/converter/converters/linebreak.js +0 -0
  416. /package/dist/features/converters/{jsx → lexicalToJSX}/converter/converters/link.d.ts +0 -0
  417. /package/dist/features/converters/{jsx → lexicalToJSX}/converter/converters/link.js +0 -0
  418. /package/dist/features/converters/{jsx → lexicalToJSX}/converter/converters/list.d.ts +0 -0
  419. /package/dist/features/converters/{jsx → lexicalToJSX}/converter/converters/list.js +0 -0
  420. /package/dist/features/converters/{jsx → lexicalToJSX}/converter/converters/paragraph.d.ts +0 -0
  421. /package/dist/features/converters/{jsx → lexicalToJSX}/converter/converters/paragraph.js +0 -0
  422. /package/dist/features/converters/{jsx → lexicalToJSX}/converter/converters/tab.d.ts +0 -0
  423. /package/dist/features/converters/{jsx → lexicalToJSX}/converter/converters/tab.js +0 -0
  424. /package/dist/features/converters/{jsx → lexicalToJSX}/converter/converters/table.d.ts +0 -0
  425. /package/dist/features/converters/{jsx → lexicalToJSX}/converter/converters/table.js +0 -0
  426. /package/dist/features/converters/{jsx → lexicalToJSX}/converter/converters/text.d.ts +0 -0
  427. /package/dist/features/converters/{jsx → lexicalToJSX}/converter/converters/text.js +0 -0
  428. /package/dist/features/converters/{jsx → lexicalToJSX}/converter/converters/upload.d.ts +0 -0
  429. /package/dist/features/converters/{jsx → lexicalToJSX}/converter/converters/upload.js +0 -0
  430. /package/dist/features/converters/{jsx → lexicalToJSX}/converter/defaultConverters.d.ts +0 -0
  431. /package/dist/features/converters/{jsx → lexicalToJSX}/converter/defaultConverters.js +0 -0
  432. /package/dist/features/converters/{jsx → lexicalToJSX}/converter/index.d.ts +0 -0
  433. /package/dist/features/converters/{jsx → lexicalToJSX}/converter/index.js +0 -0
  434. /package/dist/features/converters/{jsx → lexicalToJSX}/converter/types.d.ts +0 -0
  435. /package/dist/features/converters/{jsx → lexicalToJSX}/converter/types.js +0 -0
@@ -0,0 +1,60 @@
1
+ import type { SerializedLexicalNode } from 'lexical';
2
+ import type { DefaultNodeTypes, SerializedBlockNode, SerializedInlineBlockNode } from '../../../../nodeTypes.js';
3
+ import type { SerializedLexicalNodeWithParent } from '../shared/types.js';
4
+ export type PlaintextConverter<T extends {
5
+ [key: string]: any;
6
+ type?: string;
7
+ } = SerializedLexicalNode> = ((args: {
8
+ childIndex: number;
9
+ converters: PlaintextConverters;
10
+ node: T;
11
+ nodesToPlaintext: (args: {
12
+ converters?: PlaintextConverters;
13
+ nodes: SerializedLexicalNode[];
14
+ parent?: SerializedLexicalNodeWithParent;
15
+ }) => string[];
16
+ parent: SerializedLexicalNodeWithParent;
17
+ }) => string) | string;
18
+ export type DefaultPlaintextNodeTypes = DefaultNodeTypes | SerializedBlockNode<{
19
+ blockName?: null | string;
20
+ blockType: string;
21
+ }> | SerializedInlineBlockNode<{
22
+ blockName?: null | string;
23
+ blockType: string;
24
+ }>;
25
+ export type PlaintextConverters<T extends {
26
+ [key: string]: any;
27
+ type?: string;
28
+ } = DefaultPlaintextNodeTypes> = {
29
+ [key: string]: {
30
+ [blockSlug: string]: PlaintextConverter<any>;
31
+ } | PlaintextConverter<any> | undefined;
32
+ } & {
33
+ [nodeType in Exclude<NonNullable<T['type']>, 'block' | 'inlineBlock'>]?: PlaintextConverter<Extract<T, {
34
+ type: nodeType;
35
+ }>>;
36
+ } & {
37
+ blocks?: {
38
+ [K in Extract<Extract<T, {
39
+ type: 'block';
40
+ }> extends SerializedBlockNode<infer B> ? B extends {
41
+ blockType: string;
42
+ } ? B['blockType'] : never : never, string>]?: PlaintextConverter<Extract<T, {
43
+ type: 'block';
44
+ }> extends SerializedBlockNode<infer B> ? SerializedBlockNode<Extract<B, {
45
+ blockType: K;
46
+ }>> : SerializedBlockNode>;
47
+ };
48
+ inlineBlocks?: {
49
+ [K in Extract<Extract<T, {
50
+ type: 'inlineBlock';
51
+ }> extends SerializedInlineBlockNode<infer B> ? B extends {
52
+ blockType: string;
53
+ } ? B['blockType'] : never : never, string>]?: PlaintextConverter<Extract<T, {
54
+ type: 'inlineBlock';
55
+ }> extends SerializedInlineBlockNode<infer B> ? SerializedInlineBlockNode<Extract<B, {
56
+ blockType: K;
57
+ }>> : SerializedInlineBlockNode>;
58
+ };
59
+ };
60
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/features/converters/lexicalToPlaintext/sync/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../../../src/features/converters/lexicalToPlaintext/sync/types.ts"],"sourcesContent":["import type { SerializedLexicalNode } from 'lexical'\n\nimport type {\n DefaultNodeTypes,\n SerializedBlockNode,\n SerializedInlineBlockNode,\n} from '../../../../nodeTypes.js'\nimport type { SerializedLexicalNodeWithParent } from '../shared/types.js'\n\nexport type PlaintextConverter<\n T extends { [key: string]: any; type?: string } = SerializedLexicalNode,\n> =\n | ((args: {\n childIndex: number\n converters: PlaintextConverters\n node: T\n nodesToPlaintext: (args: {\n converters?: PlaintextConverters\n nodes: SerializedLexicalNode[]\n parent?: SerializedLexicalNodeWithParent\n }) => string[]\n parent: SerializedLexicalNodeWithParent\n }) => string)\n | string\n\nexport type DefaultPlaintextNodeTypes =\n | DefaultNodeTypes\n | SerializedBlockNode<{ blockName?: null | string; blockType: string }> // need these to ensure types for blocks and inlineBlocks work if no generics are provided\n | SerializedInlineBlockNode<{ blockName?: null | string; blockType: string }>\n\nexport type PlaintextConverters<\n T extends { [key: string]: any; type?: string } = DefaultPlaintextNodeTypes,\n> = {\n [key: string]:\n | {\n [blockSlug: string]: PlaintextConverter<any>\n }\n | PlaintextConverter<any>\n | undefined\n} & {\n [nodeType in Exclude<NonNullable<T['type']>, 'block' | 'inlineBlock'>]?: PlaintextConverter<\n Extract<T, { type: nodeType }>\n >\n} & {\n blocks?: {\n [K in Extract<\n Extract<T, { type: 'block' }> extends SerializedBlockNode<infer B>\n ? B extends { blockType: string }\n ? B['blockType']\n : never\n : never,\n string\n >]?: PlaintextConverter<\n Extract<T, { type: 'block' }> extends SerializedBlockNode<infer B>\n ? SerializedBlockNode<Extract<B, { blockType: K }>>\n : SerializedBlockNode\n >\n }\n inlineBlocks?: {\n [K in Extract<\n Extract<T, { type: 'inlineBlock' }> extends SerializedInlineBlockNode<infer B>\n ? B extends { blockType: string }\n ? B['blockType']\n : never\n : never,\n string\n >]?: PlaintextConverter<\n Extract<T, { type: 'inlineBlock' }> extends SerializedInlineBlockNode<infer B>\n ? SerializedInlineBlockNode<Extract<B, { blockType: K }>>\n : SerializedInlineBlockNode\n >\n }\n}\n"],"mappings":"AA8BA","ignoreList":[]}
@@ -0,0 +1,8 @@
1
+ import type { SerializedLexicalNode } from 'lexical';
2
+ import type { SanitizedServerEditorConfig } from '../../../lexical/config/types.js';
3
+ import type { DefaultNodeTypes, TypedEditorState } from '../../../nodeTypes.js';
4
+ export declare const convertMarkdownToLexical: <TNodeTypes extends SerializedLexicalNode = DefaultNodeTypes>({ editorConfig, markdown, }: {
5
+ editorConfig: SanitizedServerEditorConfig;
6
+ markdown: string;
7
+ }) => TypedEditorState<TNodeTypes>;
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/features/converters/markdownToLexical/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAIpD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAA;AACnF,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAK/E,eAAO,MAAM,wBAAwB,GACnC,UAAU,SAAS,qBAAqB,kDAIvC;IACD,YAAY,EAAE,2BAA2B,CAAA;IACzC,QAAQ,EAAE,MAAM,CAAA;CACjB,KAAG,gBAAgB,CAAC,UAAU,CAiB9B,CAAA"}
@@ -0,0 +1,21 @@
1
+ import { createHeadlessEditor } from '@lexical/headless';
2
+ import { getEnabledNodes } from '../../../lexical/nodes/index.js';
3
+ import { $convertFromMarkdownString } from '../../../packages/@lexical/markdown/index.js';
4
+ export const convertMarkdownToLexical = ({
5
+ editorConfig,
6
+ markdown
7
+ }) => {
8
+ const headlessEditor = createHeadlessEditor({
9
+ nodes: getEnabledNodes({
10
+ editorConfig
11
+ })
12
+ });
13
+ headlessEditor.update(() => {
14
+ $convertFromMarkdownString(markdown, editorConfig.features.markdownTransformers);
15
+ }, {
16
+ discrete: true
17
+ });
18
+ const editorJSON = headlessEditor.getEditorState().toJSON();
19
+ return editorJSON;
20
+ };
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["createHeadlessEditor","getEnabledNodes","$convertFromMarkdownString","convertMarkdownToLexical","editorConfig","markdown","headlessEditor","nodes","update","features","markdownTransformers","discrete","editorJSON","getEditorState","toJSON"],"sources":["../../../../src/features/converters/markdownToLexical/index.ts"],"sourcesContent":["import type { SerializedLexicalNode } from 'lexical'\n\nimport { createHeadlessEditor } from '@lexical/headless'\n\nimport type { SanitizedServerEditorConfig } from '../../../lexical/config/types.js'\nimport type { DefaultNodeTypes, TypedEditorState } from '../../../nodeTypes.js'\n\nimport { getEnabledNodes } from '../../../lexical/nodes/index.js'\nimport { $convertFromMarkdownString } from '../../../packages/@lexical/markdown/index.js'\n\nexport const convertMarkdownToLexical = <\n TNodeTypes extends SerializedLexicalNode = DefaultNodeTypes,\n>({\n editorConfig,\n markdown,\n}: {\n editorConfig: SanitizedServerEditorConfig\n markdown: string\n}): TypedEditorState<TNodeTypes> => {\n const headlessEditor = createHeadlessEditor({\n nodes: getEnabledNodes({\n editorConfig,\n }),\n })\n\n headlessEditor.update(\n () => {\n $convertFromMarkdownString(markdown, editorConfig.features.markdownTransformers)\n },\n { discrete: true },\n )\n\n const editorJSON = headlessEditor.getEditorState().toJSON()\n\n return editorJSON as TypedEditorState<TNodeTypes>\n}\n"],"mappings":"AAEA,SAASA,oBAAoB,QAAQ;AAKrC,SAASC,eAAe,QAAQ;AAChC,SAASC,0BAA0B,QAAQ;AAE3C,OAAO,MAAMC,wBAAA,GAA2BA,CAEtC;EACAC,YAAY;EACZC;AAAQ,CAIT;EACC,MAAMC,cAAA,GAAiBN,oBAAA,CAAqB;IAC1CO,KAAA,EAAON,eAAA,CAAgB;MACrBG;IACF;EACF;EAEAE,cAAA,CAAeE,MAAM,CACnB;IACEN,0BAAA,CAA2BG,QAAA,EAAUD,YAAA,CAAaK,QAAQ,CAACC,oBAAoB;EACjF,GACA;IAAEC,QAAA,EAAU;EAAK;EAGnB,MAAMC,UAAA,GAAaN,cAAA,CAAeO,cAAc,GAAGC,MAAM;EAEzD,OAAOF,UAAA;AACT","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  import { type Payload, type PayloadRequest, type TypedLocale } from 'payload';
2
- import type { HTMLPopulateFn } from '../html/async/types.js';
2
+ import type { HTMLPopulateFn } from '../lexicalToHtml/async/types.js';
3
3
  export declare const getPayloadPopulateFn: (args: {
4
4
  currentDepth: number;
5
5
  depth: number;
@@ -1 +1 @@
1
- {"version":3,"file":"payloadPopulateFn.d.ts","sourceRoot":"","sources":["../../../../src/features/converters/utilities/payloadPopulateFn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,SAAS,CAAA;AAE7F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAI5D,eAAO,MAAM,oBAAoB,EAAE,CACjC,IAAI,EAAE;IACJ,YAAY,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,WAAW,CAAA;IAEpB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,GAAG,CACA;IACE;;OAEG;IACH,OAAO,EAAE,OAAO,CAAA;IAChB;;;OAGG;IACH,GAAG,CAAC,EAAE,KAAK,CAAA;CACZ,GACD;IACE;;OAEG;IACH,OAAO,CAAC,EAAE,KAAK,CAAA;IACf;;;OAGG;IACH,GAAG,EAAE,cAAc,CAAA;CACpB,CACJ,KACE,OAAO,CAAC,cAAc,CAyC1B,CAAA"}
1
+ {"version":3,"file":"payloadPopulateFn.d.ts","sourceRoot":"","sources":["../../../../src/features/converters/utilities/payloadPopulateFn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,SAAS,CAAA;AAE7F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAIrE,eAAO,MAAM,oBAAoB,EAAE,CACjC,IAAI,EAAE;IACJ,YAAY,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,WAAW,CAAA;IAEpB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,GAAG,CACA;IACE;;OAEG;IACH,OAAO,EAAE,OAAO,CAAA;IAChB;;;OAGG;IACH,GAAG,CAAC,EAAE,KAAK,CAAA;CACZ,GACD;IACE;;OAEG;IACH,OAAO,CAAC,EAAE,KAAK,CAAA;IACf;;;OAGG;IACH,GAAG,EAAE,cAAc,CAAA;CACpB,CACJ,KACE,OAAO,CAAC,cAAc,CAyC1B,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"payloadPopulateFn.js","names":["createLocalReq","populate","getPayloadPopulateFn","currentDepth","depth","draft","overrideAccess","payload","req","showHiddenFields","reqToUse","undefined","Error","populateFn","id","collectionSlug","select","dataContainer","data","key","value"],"sources":["../../../../src/features/converters/utilities/payloadPopulateFn.ts"],"sourcesContent":["import { createLocalReq, type Payload, type PayloadRequest, type TypedLocale } from 'payload'\n\nimport type { HTMLPopulateFn } from '../html/async/types.js'\n\nimport { populate } from '../../../populateGraphQL/populate.js'\n\nexport const getPayloadPopulateFn: (\n args: {\n currentDepth: number\n depth: number\n draft?: boolean\n locale?: TypedLocale\n\n overrideAccess?: boolean\n showHiddenFields?: boolean\n } & (\n | {\n /**\n * This payload property will only be used if req is undefined. If localization is enabled, you must pass `req` instead.\n */\n payload: Payload\n /**\n * When the converter is called, req CAN be passed in depending on where it's run.\n * If this is undefined and config is passed through, lexical will create a new req object for you.\n */\n req?: never\n }\n | {\n /**\n * This payload property will only be used if req is undefined. If localization is enabled, you must pass `req` instead.\n */\n payload?: never\n /**\n * When the converter is called, req CAN be passed in depending on where it's run.\n * If this is undefined and config is passed through, lexical will create a new req object for you.\n */\n req: PayloadRequest\n }\n ),\n) => Promise<HTMLPopulateFn> = async ({\n currentDepth,\n depth,\n draft,\n overrideAccess,\n payload,\n req,\n showHiddenFields,\n}) => {\n let reqToUse: PayloadRequest | undefined = req\n if (req === undefined && payload) {\n reqToUse = await createLocalReq({}, payload)\n }\n\n if (!reqToUse) {\n throw new Error('No req or payload provided')\n }\n\n const populateFn: HTMLPopulateFn = async ({ id, collectionSlug, select }) => {\n const dataContainer: {\n value?: any\n } = {}\n\n await populate({\n id,\n collectionSlug,\n currentDepth,\n data: dataContainer,\n depth,\n draft: draft ?? false,\n key: 'value',\n overrideAccess: overrideAccess ?? true,\n req: reqToUse,\n select,\n showHiddenFields: showHiddenFields ?? false,\n })\n\n return dataContainer.value\n }\n\n return populateFn\n}\n"],"mappings":"AAAA,SAASA,cAAc,QAA6D;AAIpF,SAASC,QAAQ,QAAQ;AAEzB,OAAO,MAAMC,oBAAA,GAiCkB,MAAAA,CAAO;EACpCC,YAAY;EACZC,KAAK;EACLC,KAAK;EACLC,cAAc;EACdC,OAAO;EACPC,GAAG;EACHC;AAAgB,CACjB;EACC,IAAIC,QAAA,GAAuCF,GAAA;EAC3C,IAAIA,GAAA,KAAQG,SAAA,IAAaJ,OAAA,EAAS;IAChCG,QAAA,GAAW,MAAMV,cAAA,CAAe,CAAC,GAAGO,OAAA;EACtC;EAEA,IAAI,CAACG,QAAA,EAAU;IACb,MAAM,IAAIE,KAAA,CAAM;EAClB;EAEA,MAAMC,UAAA,GAA6B,MAAAA,CAAO;IAAEC,EAAE;IAAEC,cAAc;IAAEC;EAAM,CAAE;IACtE,MAAMC,aAAA,GAEF,CAAC;IAEL,MAAMhB,QAAA,CAAS;MACba,EAAA;MACAC,cAAA;MACAZ,YAAA;MACAe,IAAA,EAAMD,aAAA;MACNb,KAAA;MACAC,KAAA,EAAOA,KAAA,IAAS;MAChBc,GAAA,EAAK;MACLb,cAAA,EAAgBA,cAAA,IAAkB;MAClCE,GAAA,EAAKE,QAAA;MACLM,MAAA;MACAP,gBAAA,EAAkBA,gBAAA,IAAoB;IACxC;IAEA,OAAOQ,aAAA,CAAcG,KAAK;EAC5B;EAEA,OAAOP,UAAA;AACT","ignoreList":[]}
1
+ {"version":3,"file":"payloadPopulateFn.js","names":["createLocalReq","populate","getPayloadPopulateFn","currentDepth","depth","draft","overrideAccess","payload","req","showHiddenFields","reqToUse","undefined","Error","populateFn","id","collectionSlug","select","dataContainer","data","key","value"],"sources":["../../../../src/features/converters/utilities/payloadPopulateFn.ts"],"sourcesContent":["import { createLocalReq, type Payload, type PayloadRequest, type TypedLocale } from 'payload'\n\nimport type { HTMLPopulateFn } from '../lexicalToHtml/async/types.js'\n\nimport { populate } from '../../../populateGraphQL/populate.js'\n\nexport const getPayloadPopulateFn: (\n args: {\n currentDepth: number\n depth: number\n draft?: boolean\n locale?: TypedLocale\n\n overrideAccess?: boolean\n showHiddenFields?: boolean\n } & (\n | {\n /**\n * This payload property will only be used if req is undefined. If localization is enabled, you must pass `req` instead.\n */\n payload: Payload\n /**\n * When the converter is called, req CAN be passed in depending on where it's run.\n * If this is undefined and config is passed through, lexical will create a new req object for you.\n */\n req?: never\n }\n | {\n /**\n * This payload property will only be used if req is undefined. If localization is enabled, you must pass `req` instead.\n */\n payload?: never\n /**\n * When the converter is called, req CAN be passed in depending on where it's run.\n * If this is undefined and config is passed through, lexical will create a new req object for you.\n */\n req: PayloadRequest\n }\n ),\n) => Promise<HTMLPopulateFn> = async ({\n currentDepth,\n depth,\n draft,\n overrideAccess,\n payload,\n req,\n showHiddenFields,\n}) => {\n let reqToUse: PayloadRequest | undefined = req\n if (req === undefined && payload) {\n reqToUse = await createLocalReq({}, payload)\n }\n\n if (!reqToUse) {\n throw new Error('No req or payload provided')\n }\n\n const populateFn: HTMLPopulateFn = async ({ id, collectionSlug, select }) => {\n const dataContainer: {\n value?: any\n } = {}\n\n await populate({\n id,\n collectionSlug,\n currentDepth,\n data: dataContainer,\n depth,\n draft: draft ?? false,\n key: 'value',\n overrideAccess: overrideAccess ?? true,\n req: reqToUse,\n select,\n showHiddenFields: showHiddenFields ?? false,\n })\n\n return dataContainer.value\n }\n\n return populateFn\n}\n"],"mappings":"AAAA,SAASA,cAAc,QAA6D;AAIpF,SAASC,QAAQ,QAAQ;AAEzB,OAAO,MAAMC,oBAAA,GAiCkB,MAAAA,CAAO;EACpCC,YAAY;EACZC,KAAK;EACLC,KAAK;EACLC,cAAc;EACdC,OAAO;EACPC,GAAG;EACHC;AAAgB,CACjB;EACC,IAAIC,QAAA,GAAuCF,GAAA;EAC3C,IAAIA,GAAA,KAAQG,SAAA,IAAaJ,OAAA,EAAS;IAChCG,QAAA,GAAW,MAAMV,cAAA,CAAe,CAAC,GAAGO,OAAA;EACtC;EAEA,IAAI,CAACG,QAAA,EAAU;IACb,MAAM,IAAIE,KAAA,CAAM;EAClB;EAEA,MAAMC,UAAA,GAA6B,MAAAA,CAAO;IAAEC,EAAE;IAAEC,cAAc;IAAEC;EAAM,CAAE;IACtE,MAAMC,aAAA,GAEF,CAAC;IAEL,MAAMhB,QAAA,CAAS;MACba,EAAA;MACAC,cAAA;MACAZ,YAAA;MACAe,IAAA,EAAMD,aAAA;MACNb,KAAA;MACAC,KAAA,EAAOA,KAAA,IAAS;MAChBc,GAAA,EAAK;MACLb,cAAA,EAAgBA,cAAA,IAAkB;MAClCE,GAAA,EAAKE,QAAA;MACLM,MAAA;MACAP,gBAAA,EAAkBA,gBAAA,IAAoB;IACxC;IAEA,OAAOQ,aAAA,CAAcG,KAAK;EAC5B;EAEA,OAAOP,UAAA;AACT","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- import type { HTMLPopulateFn } from '../html/async/types.js';
1
+ import type { HTMLPopulateFn } from '../lexicalToHtml/async/types.js';
2
2
  export declare const getRestPopulateFn: (args: {
3
3
  /**
4
4
  * E.g. `http://localhost:3000/api`
@@ -1 +1 @@
1
- {"version":3,"file":"restPopulateFn.d.ts","sourceRoot":"","sources":["../../../../src/features/converters/utilities/restPopulateFn.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAE5D,eAAO,MAAM,iBAAiB,EAAE,CAAC,IAAI,EAAE;IACrC;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,KAAK,cAoBL,CAAA"}
1
+ {"version":3,"file":"restPopulateFn.d.ts","sourceRoot":"","sources":["../../../../src/features/converters/utilities/restPopulateFn.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAErE,eAAO,MAAM,iBAAiB,EAAE,CAAC,IAAI,EAAE;IACrC;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,KAAK,cAoBL,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"restPopulateFn.js","names":["stringify","getRestPopulateFn","apiURL","depth","draft","locale","populateFn","id","collectionSlug","select","query","addQueryPrefix","res","fetch","credentials","headers","Accept","method","then","json"],"sources":["../../../../src/features/converters/utilities/restPopulateFn.ts"],"sourcesContent":["import { stringify } from 'qs-esm'\n\nimport type { HTMLPopulateFn } from '../html/async/types.js'\n\nexport const getRestPopulateFn: (args: {\n /**\n * E.g. `http://localhost:3000/api`\n */\n apiURL: string\n depth?: number\n draft?: boolean\n locale?: string\n}) => HTMLPopulateFn = ({ apiURL, depth, draft, locale }) => {\n const populateFn: HTMLPopulateFn = async ({ id, collectionSlug, select }) => {\n const query = stringify(\n { depth: depth ?? 0, draft: draft ?? false, locale, select },\n { addQueryPrefix: true },\n )\n\n const res = await fetch(`${apiURL}/${collectionSlug}/${id}${query}`, {\n credentials: 'include',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n method: 'GET',\n }).then((res) => res.json())\n\n return res\n }\n\n return populateFn\n}\n"],"mappings":"AAAA,SAASA,SAAS,QAAQ;AAI1B,OAAO,MAAMC,iBAAA,GAQUA,CAAC;EAAEC,MAAM;EAAEC,KAAK;EAAEC,KAAK;EAAEC;AAAM,CAAE;EACtD,MAAMC,UAAA,GAA6B,MAAAA,CAAO;IAAEC,EAAE;IAAEC,cAAc;IAAEC;EAAM,CAAE;IACtE,MAAMC,KAAA,GAAQV,SAAA,CACZ;MAAEG,KAAA,EAAOA,KAAA,IAAS;MAAGC,KAAA,EAAOA,KAAA,IAAS;MAAOC,MAAA;MAAQI;IAAO,GAC3D;MAAEE,cAAA,EAAgB;IAAK;IAGzB,MAAMC,GAAA,GAAM,MAAMC,KAAA,CAAM,GAAGX,MAAA,IAAUM,cAAA,IAAkBD,EAAA,GAAKG,KAAA,EAAO,EAAE;MACnEI,WAAA,EAAa;MACbC,OAAA,EAAS;QACPC,MAAA,EAAQ;QACR,gBAAgB;MAClB;MACAC,MAAA,EAAQ;IACV,GAAGC,IAAI,CAAEN,GAAA,IAAQA,GAAA,CAAIO,IAAI;IAEzB,OAAOP,GAAA;EACT;EAEA,OAAON,UAAA;AACT","ignoreList":[]}
1
+ {"version":3,"file":"restPopulateFn.js","names":["stringify","getRestPopulateFn","apiURL","depth","draft","locale","populateFn","id","collectionSlug","select","query","addQueryPrefix","res","fetch","credentials","headers","Accept","method","then","json"],"sources":["../../../../src/features/converters/utilities/restPopulateFn.ts"],"sourcesContent":["import { stringify } from 'qs-esm'\n\nimport type { HTMLPopulateFn } from '../lexicalToHtml/async/types.js'\n\nexport const getRestPopulateFn: (args: {\n /**\n * E.g. `http://localhost:3000/api`\n */\n apiURL: string\n depth?: number\n draft?: boolean\n locale?: string\n}) => HTMLPopulateFn = ({ apiURL, depth, draft, locale }) => {\n const populateFn: HTMLPopulateFn = async ({ id, collectionSlug, select }) => {\n const query = stringify(\n { depth: depth ?? 0, draft: draft ?? false, locale, select },\n { addQueryPrefix: true },\n )\n\n const res = await fetch(`${apiURL}/${collectionSlug}/${id}${query}`, {\n credentials: 'include',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n method: 'GET',\n }).then((res) => res.json())\n\n return res\n }\n\n return populateFn\n}\n"],"mappings":"AAAA,SAASA,SAAS,QAAQ;AAI1B,OAAO,MAAMC,iBAAA,GAQUA,CAAC;EAAEC,MAAM;EAAEC,KAAK;EAAEC,KAAK;EAAEC;AAAM,CAAE;EACtD,MAAMC,UAAA,GAA6B,MAAAA,CAAO;IAAEC,EAAE;IAAEC,cAAc;IAAEC;EAAM,CAAE;IACtE,MAAMC,KAAA,GAAQV,SAAA,CACZ;MAAEG,KAAA,EAAOA,KAAA,IAAS;MAAGC,KAAA,EAAOA,KAAA,IAAS;MAAOC,MAAA;MAAQI;IAAO,GAC3D;MAAEE,cAAA,EAAgB;IAAK;IAGzB,MAAMC,GAAA,GAAM,MAAMC,KAAA,CAAM,GAAGX,MAAA,IAAUM,cAAA,IAAkBD,EAAA,GAAKG,KAAA,EAAO,EAAE;MACnEI,WAAA,EAAa;MACbC,OAAA,EAAS;QACPC,MAAA,EAAQ;QACR,gBAAgB;MAClB;MACAC,MAAA,EAAQ;IACV,GAAGC,IAAI,CAAEN,GAAA,IAAQA,GAAA,CAAIO,IAAI;IAEzB,OAAOP,GAAA;EACT;EAEA,OAAON,UAAA;AACT","ignoreList":[]}
@@ -557,7 +557,7 @@ function TableCellActionMenuContainer({
557
557
  }, [editor, anchorElem]);
558
558
  useEffect(() => {
559
559
  // We call the $moveMenu callback every time the selection changes,
560
- // once up front, and once after each mouseUp
560
+ // once up front, and once after each pointerup
561
561
  let timeoutId = undefined;
562
562
  const callback = () => {
563
563
  timeoutId = undefined;
@@ -571,10 +571,10 @@ function TableCellActionMenuContainer({
571
571
  };
572
572
  return mergeRegister(editor.registerUpdateListener(delayedCallback), editor.registerCommand(SELECTION_CHANGE_COMMAND, delayedCallback, COMMAND_PRIORITY_CRITICAL), editor.registerRootListener((rootElement_0, prevRootElement) => {
573
573
  if (prevRootElement) {
574
- prevRootElement.removeEventListener('mouseup', delayedCallback);
574
+ prevRootElement.removeEventListener('pointerup', delayedCallback);
575
575
  }
576
576
  if (rootElement_0) {
577
- rootElement_0.addEventListener('mouseup', delayedCallback);
577
+ rootElement_0.addEventListener('pointerup', delayedCallback);
578
578
  delayedCallback();
579
579
  }
580
580
  }), () => clearTimeout(timeoutId));
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","useLexicalEditable","$computeTableMapSkipCellCheck","$deleteTableColumn__EXPERIMENTAL","$deleteTableRow__EXPERIMENTAL","$getNodeTriplet","$getTableCellNodeFromLexicalNode","$getTableColumnIndexFromTableCellNode","$getTableNodeFromLexicalNodeOrThrow","$getTableRowIndexFromTableCellNode","$insertTableColumn__EXPERIMENTAL","$insertTableRow__EXPERIMENTAL","$isTableCellNode","$isTableSelection","$unmergeCell","getTableElement","getTableObserverFromTableElement","TableCellHeaderStates","TableCellNode","mergeRegister","useScrollInfo","$createParagraphNode","$getRoot","$getSelection","$isElementNode","$isParagraphNode","$isRangeSelection","$isTextNode","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","$cellContainsEmptyParagraph","getChildrenSize","firstChild","getFirstChildOrThrow","isEmpty","$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","rootNode","selectStart","mergeTableCellsAtSelection","nodes","getNodes","tableCells","filter","length","gridMap","minRow","Infinity","maxRow","minCol","maxCol","processedCells","Set","row","mapCell","cellKey","has","some","add","cellStartRow","startRow","cellStartCol","startColumn","cellRowSpan","cellColSpan","Math","min","max","totalRowSpan","totalColSpan","targetCellMap","targetCell","setColSpan","setRowSpan","seenCells","col","currentCell","key","append","getChildren","remove","unmergeTableCellsAtSelection","insertTableRowAtSelection","shouldInsertAfter","i","insertTableColumnAtSelection","deleteTableRowAtSelection","deleteTableAtSelection","deleteTableColumnAtSelection","toggleTableRowIsHeader","tableRowIndex","rowCells","newStyle","getHeaderStyles","ROW","setHeaderStyles","toggleTableColumnIsHeader","tableColumnIndex","columnCells","COLUMN","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 $deleteTableColumn__EXPERIMENTAL,\n $deleteTableRow__EXPERIMENTAL,\n $getNodeTriplet,\n $getTableCellNodeFromLexicalNode,\n $getTableColumnIndexFromTableCellNode,\n $getTableNodeFromLexicalNodeOrThrow,\n $getTableRowIndexFromTableCellNode,\n $insertTableColumn__EXPERIMENTAL,\n $insertTableRow__EXPERIMENTAL,\n $isTableCellNode,\n $isTableSelection,\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 $createParagraphNode,\n $getRoot,\n $getSelection,\n $isElementNode,\n $isParagraphNode,\n $isRangeSelection,\n $isTextNode,\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.scss'\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 $cellContainsEmptyParagraph(cell: TableCellNode): boolean {\n if (cell.getChildrenSize() !== 1) {\n return false\n }\n const firstChild = cell.getFirstChildOrThrow()\n if (!$isParagraphNode(firstChild) || !firstChild.isEmpty()) {\n return false\n }\n return true\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 const rootNode = $getRoot()\n rootNode.selectStart()\n })\n }, [editor, tableCellNode])\n\n const mergeTableCellsAtSelection = () => {\n editor.update(() => {\n const selection = $getSelection()\n if ($isTableSelection(selection)) {\n // Get all selected cells and compute the total area\n const nodes = selection.getNodes()\n const tableCells = nodes.filter($isTableCellNode)\n\n if (tableCells.length === 0) {\n return\n }\n\n // Find the table node\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCells[0] as TableCellNode)\n const [gridMap] = $computeTableMapSkipCellCheck(tableNode, null, null)\n\n // Find the boundaries of the selection including merged cells\n let minRow = Infinity\n let maxRow = -Infinity\n let minCol = Infinity\n let maxCol = -Infinity\n\n // First pass: find the actual boundaries considering merged cells\n const processedCells = new Set()\n for (const row of gridMap) {\n for (const mapCell of row) {\n if (!mapCell || !mapCell.cell) {\n continue\n }\n\n const cellKey = mapCell.cell.getKey()\n if (processedCells.has(cellKey)) {\n continue\n }\n\n if (tableCells.some((cell) => cell.is(mapCell.cell))) {\n processedCells.add(cellKey)\n // Get the actual position of this cell in the grid\n const cellStartRow = mapCell.startRow\n const cellStartCol = mapCell.startColumn\n const cellRowSpan = mapCell.cell.__rowSpan || 1\n const cellColSpan = mapCell.cell.__colSpan || 1\n\n // Update boundaries considering the cell's actual position and span\n minRow = Math.min(minRow, cellStartRow)\n maxRow = Math.max(maxRow, cellStartRow + cellRowSpan - 1)\n minCol = Math.min(minCol, cellStartCol)\n maxCol = Math.max(maxCol, cellStartCol + cellColSpan - 1)\n }\n }\n }\n\n // Validate boundaries\n if (minRow === Infinity || minCol === Infinity) {\n return\n }\n\n // The total span of the merged cell\n const totalRowSpan = maxRow - minRow + 1\n const totalColSpan = maxCol - minCol + 1\n\n // Use the top-left cell as the target cell\n const targetCellMap = gridMap?.[minRow]?.[minCol]\n if (!targetCellMap?.cell) {\n return\n }\n const targetCell = targetCellMap.cell\n\n // Set the spans for the target cell\n targetCell.setColSpan(totalColSpan)\n targetCell.setRowSpan(totalRowSpan)\n\n // Move content from other cells to the target cell\n const seenCells = new Set([targetCell.getKey()])\n\n // Second pass: merge content and remove other cells\n for (let row = minRow; row <= maxRow; row++) {\n for (let col = minCol; col <= maxCol; col++) {\n const mapCell = gridMap?.[row]?.[col]\n if (!mapCell?.cell) {\n continue\n }\n\n const currentCell = mapCell.cell\n const key = currentCell.getKey()\n\n if (!seenCells.has(key)) {\n seenCells.add(key)\n const isEmpty = $cellContainsEmptyParagraph(currentCell)\n if (!isEmpty) {\n targetCell.append(...currentCell.getChildren())\n }\n currentCell.remove()\n }\n }\n }\n\n // Ensure target cell has content\n if (targetCell.getChildrenSize() === 0) {\n targetCell.append($createParagraphNode())\n }\n\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 $insertTableRow__EXPERIMENTAL(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 $insertTableColumn__EXPERIMENTAL(shouldInsertAfter)\n }\n onClose()\n })\n },\n [editor, onClose, selectionCounts.columns],\n )\n\n const deleteTableRowAtSelection = useCallback(() => {\n editor.update(() => {\n $deleteTableRow__EXPERIMENTAL()\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 $deleteTableColumn__EXPERIMENTAL()\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 mouseUp\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('mouseup', delayedCallback)\n }\n if (rootElement) {\n rootElement.addEventListener('mouseup', 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":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","useLexicalEditable","$computeTableMapSkipCellCheck","$deleteTableColumn__EXPERIMENTAL","$deleteTableRow__EXPERIMENTAL","$getNodeTriplet","$getTableCellNodeFromLexicalNode","$getTableColumnIndexFromTableCellNode","$getTableNodeFromLexicalNodeOrThrow","$getTableRowIndexFromTableCellNode","$insertTableColumn__EXPERIMENTAL","$insertTableRow__EXPERIMENTAL","$isTableCellNode","$isTableSelection","$unmergeCell","getTableElement","getTableObserverFromTableElement","TableCellHeaderStates","TableCellNode","mergeRegister","useScrollInfo","$createParagraphNode","$getRoot","$getSelection","$isElementNode","$isParagraphNode","$isRangeSelection","$isTextNode","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","$cellContainsEmptyParagraph","getChildrenSize","firstChild","getFirstChildOrThrow","isEmpty","$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","rootNode","selectStart","mergeTableCellsAtSelection","nodes","getNodes","tableCells","filter","length","gridMap","minRow","Infinity","maxRow","minCol","maxCol","processedCells","Set","row","mapCell","cellKey","has","some","add","cellStartRow","startRow","cellStartCol","startColumn","cellRowSpan","cellColSpan","Math","min","max","totalRowSpan","totalColSpan","targetCellMap","targetCell","setColSpan","setRowSpan","seenCells","col","currentCell","key","append","getChildren","remove","unmergeTableCellsAtSelection","insertTableRowAtSelection","shouldInsertAfter","i","insertTableColumnAtSelection","deleteTableRowAtSelection","deleteTableAtSelection","deleteTableColumnAtSelection","toggleTableRowIsHeader","tableRowIndex","rowCells","newStyle","getHeaderStyles","ROW","setHeaderStyles","toggleTableColumnIsHeader","tableColumnIndex","columnCells","COLUMN","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 $deleteTableColumn__EXPERIMENTAL,\n $deleteTableRow__EXPERIMENTAL,\n $getNodeTriplet,\n $getTableCellNodeFromLexicalNode,\n $getTableColumnIndexFromTableCellNode,\n $getTableNodeFromLexicalNodeOrThrow,\n $getTableRowIndexFromTableCellNode,\n $insertTableColumn__EXPERIMENTAL,\n $insertTableRow__EXPERIMENTAL,\n $isTableCellNode,\n $isTableSelection,\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 $createParagraphNode,\n $getRoot,\n $getSelection,\n $isElementNode,\n $isParagraphNode,\n $isRangeSelection,\n $isTextNode,\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.scss'\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 $cellContainsEmptyParagraph(cell: TableCellNode): boolean {\n if (cell.getChildrenSize() !== 1) {\n return false\n }\n const firstChild = cell.getFirstChildOrThrow()\n if (!$isParagraphNode(firstChild) || !firstChild.isEmpty()) {\n return false\n }\n return true\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 const rootNode = $getRoot()\n rootNode.selectStart()\n })\n }, [editor, tableCellNode])\n\n const mergeTableCellsAtSelection = () => {\n editor.update(() => {\n const selection = $getSelection()\n if ($isTableSelection(selection)) {\n // Get all selected cells and compute the total area\n const nodes = selection.getNodes()\n const tableCells = nodes.filter($isTableCellNode)\n\n if (tableCells.length === 0) {\n return\n }\n\n // Find the table node\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCells[0] as TableCellNode)\n const [gridMap] = $computeTableMapSkipCellCheck(tableNode, null, null)\n\n // Find the boundaries of the selection including merged cells\n let minRow = Infinity\n let maxRow = -Infinity\n let minCol = Infinity\n let maxCol = -Infinity\n\n // First pass: find the actual boundaries considering merged cells\n const processedCells = new Set()\n for (const row of gridMap) {\n for (const mapCell of row) {\n if (!mapCell || !mapCell.cell) {\n continue\n }\n\n const cellKey = mapCell.cell.getKey()\n if (processedCells.has(cellKey)) {\n continue\n }\n\n if (tableCells.some((cell) => cell.is(mapCell.cell))) {\n processedCells.add(cellKey)\n // Get the actual position of this cell in the grid\n const cellStartRow = mapCell.startRow\n const cellStartCol = mapCell.startColumn\n const cellRowSpan = mapCell.cell.__rowSpan || 1\n const cellColSpan = mapCell.cell.__colSpan || 1\n\n // Update boundaries considering the cell's actual position and span\n minRow = Math.min(minRow, cellStartRow)\n maxRow = Math.max(maxRow, cellStartRow + cellRowSpan - 1)\n minCol = Math.min(minCol, cellStartCol)\n maxCol = Math.max(maxCol, cellStartCol + cellColSpan - 1)\n }\n }\n }\n\n // Validate boundaries\n if (minRow === Infinity || minCol === Infinity) {\n return\n }\n\n // The total span of the merged cell\n const totalRowSpan = maxRow - minRow + 1\n const totalColSpan = maxCol - minCol + 1\n\n // Use the top-left cell as the target cell\n const targetCellMap = gridMap?.[minRow]?.[minCol]\n if (!targetCellMap?.cell) {\n return\n }\n const targetCell = targetCellMap.cell\n\n // Set the spans for the target cell\n targetCell.setColSpan(totalColSpan)\n targetCell.setRowSpan(totalRowSpan)\n\n // Move content from other cells to the target cell\n const seenCells = new Set([targetCell.getKey()])\n\n // Second pass: merge content and remove other cells\n for (let row = minRow; row <= maxRow; row++) {\n for (let col = minCol; col <= maxCol; col++) {\n const mapCell = gridMap?.[row]?.[col]\n if (!mapCell?.cell) {\n continue\n }\n\n const currentCell = mapCell.cell\n const key = currentCell.getKey()\n\n if (!seenCells.has(key)) {\n seenCells.add(key)\n const isEmpty = $cellContainsEmptyParagraph(currentCell)\n if (!isEmpty) {\n targetCell.append(...currentCell.getChildren())\n }\n currentCell.remove()\n }\n }\n }\n\n // Ensure target cell has content\n if (targetCell.getChildrenSize() === 0) {\n targetCell.append($createParagraphNode())\n }\n\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 $insertTableRow__EXPERIMENTAL(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 $insertTableColumn__EXPERIMENTAL(shouldInsertAfter)\n }\n onClose()\n })\n },\n [editor, onClose, selectionCounts.columns],\n )\n\n const deleteTableRowAtSelection = useCallback(() => {\n editor.update(() => {\n $deleteTableRow__EXPERIMENTAL()\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 $deleteTableColumn__EXPERIMENTAL()\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,gCAAgC,EAChCC,6BAA6B,EAC7BC,eAAe,EACfC,gCAAgC,EAChCC,qCAAqC,EACrCC,mCAAmC,EACnCC,kCAAkC,EAClCC,gCAAgC,EAChCC,6BAA6B,EAC7BC,gBAAgB,EAChBC,iBAAiB,EACjBC,YAAY,EACZC,eAAe,EACfC,gCAAgC,EAChCC,qBAAqB,EACrBC,aAAa,QACR;AACP,SAASC,aAAa,QAAQ;AAC9B,SAASC,aAAa,QAAQ;AAC9B,SACEC,oBAAoB,EACpBC,QAAQ,EACRC,aAAa,EACbC,cAAc,EACdC,gBAAgB,EAChBC,iBAAiB,EACjBC,WAAW,EACXC,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;AAK7B,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,IACEG,iBAAC,CAAkBc,SAAA,KAAc,CAACA,SAAA,CAAUU,WAAW,MACtDrC,iBAAA,CAAkB2B,SAAA,KAAc,CAACA,SAAA,CAAUW,MAAM,CAACC,EAAE,CAACZ,SAAA,CAAUa,KAAK,KACpE,CAAC3B,iBAAA,CAAkBc,SAAA,KAAc,CAAC3B,iBAAA,CAAkB2B,SAAA,GACrD;IACA,OAAO;EACT;EACA,MAAM,CAACc,IAAA,CAAK,GAAGjD,eAAA,CAAgBmC,SAAA,CAAUW,MAAM;EAC/C,OAAOG,IAAA,CAAKC,SAAS,GAAG,KAAKD,IAAA,CAAKE,SAAS,GAAG;AAChD;AAEA,SAASC,4BAA4BH,IAAmB;EACtD,IAAIA,IAAA,CAAKI,eAAe,OAAO,GAAG;IAChC,OAAO;EACT;EACA,MAAMC,UAAA,GAAaL,IAAA,CAAKM,oBAAoB;EAC5C,IAAI,CAACnC,gBAAA,CAAiBkC,UAAA,KAAe,CAACA,UAAA,CAAWE,OAAO,IAAI;IAC1D,OAAO;EACT;EACA,OAAO;AACT;AAEA,SAASC,sBAAsBC,IAAiB;EAC9C,MAAMC,cAAA,GAAiBD,IAAA,CAAKE,iBAAiB;EAC7C,IAAItC,WAAA,CAAYqC,cAAA,GAAiB;IAC/BA,cAAA,CAAeE,MAAM;EACvB,OAAO,IAAI1C,cAAA,CAAewC,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,GAAG5E,yBAAA;EACjB,MAAM6E,WAAA,GAAc1C,MAAA,CAA8B;EAClD,MAAM,CAACuC,aAAA,EAAeI,mBAAA,CAAoB,GAAG1C,QAAA,CAASuC,cAAA;EACtD,MAAM,CAACI,eAAA,EAAiBC,qBAAA,CAAsB,GAAG5C,QAAA,CAAS;IACxDO,OAAA,EAAS;IACTG,IAAA,EAAM;EACR;EACA,MAAM,CAACmC,aAAA,EAAeC,gBAAA,CAAiB,GAAG9C,QAAA,CAAS;EACnD,MAAM,CAAC+C,cAAA,EAAgBC,iBAAA,CAAkB,GAAGhD,QAAA,CAAS;EACrD,MAAM;IAAEiD;EAAC,CAAE,GAAGjE,aAAA;EAEdc,SAAA,CAAU;IACR,OAAO0C,MAAA,CAAOU,wBAAwB,CACpCpE,aAAA,EACCqE,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;EAE1BxC,SAAA,CAAU;IACR0C,MAAA,CAAOe,cAAc,GAAGC,IAAI,CAAC;MAC3B,MAAMpD,SAAA,GAAYjB,aAAA;MAClB;MACA,IAAIV,iBAAA,CAAkB2B,SAAA,GAAY;QAChC,MAAMuD,sBAAA,GAAyBxD,qBAAA,CAAsBC,SAAA;QACrDwC,qBAAA,CAAsBzC,qBAAA,CAAsBC,SAAA;QAE5C0C,gBAAA,CAAiBa,sBAAA,CAAuBpD,OAAO,GAAG,KAAKoD,sBAAA,CAAuBjD,IAAI,GAAG;MACvF;MACA;MACAsC,iBAAA,CAAkBnC,WAAA;IACpB;EACF,GAAG,CAAC2B,MAAA,CAAO;EAEX1C,SAAA,CAAU;IACR,MAAM8D,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;EAEvCnD,SAAA,CAAU;IACR,SAASuF,mBAAmBC,KAAiB;MAC3C,IACE7C,WAAA,CAAYoB,OAAO,IAAI,QACvB1B,UAAA,CAAW0B,OAAO,IAAI,QACtBnE,SAAA,CAAU4F,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,GAAsB9F,WAAA,CAAY;IACtC2C,MAAA,CAAOoD,MAAM,CAAC;MACZ,IAAItD,aAAA,CAAcuD,UAAU,IAAI;QAC9B,MAAMC,SAAA,GAAY1H,mCAAA,CAAoCkE,aAAA;QACtD,MAAMyD,YAAA,GAAepH,eAAA,CAAgBmH,SAAA,EAAWtD,MAAA,CAAOwD,eAAe,CAACF,SAAA,CAAUxC,MAAM;QAEvF,IAAIyC,YAAA,KAAiB,MAAM;UACzB,MAAM,IAAIE,KAAA,CAAM;QAClB;QAEA,MAAMC,aAAA,GAAgBtH,gCAAA,CAAiCmH,YAAA;QACvD,IAAIG,aAAA,KAAkB,MAAM;UAC1BA,aAAA,CAAcC,eAAe;QAC/B;QAEAL,SAAA,CAAUM,SAAS;QACnB1D,mBAAA,CAAoBJ,aAAA,CAAcmB,SAAS;MAC7C;MAEA,MAAM4C,QAAA,GAAWnH,QAAA;MACjBmH,QAAA,CAASC,WAAW;IACtB;EACF,GAAG,CAAC9D,MAAA,EAAQF,aAAA,CAAc;EAE1B,MAAMiE,0BAAA,GAA6BA,CAAA;IACjC/D,MAAA,CAAOoD,MAAM,CAAC;MACZ,MAAMxF,WAAA,GAAYjB,aAAA;MAClB,IAAIV,iBAAA,CAAkB2B,WAAA,GAAY;QAChC;QACA,MAAMoG,KAAA,GAAQpG,WAAA,CAAUqG,QAAQ;QAChC,MAAMC,UAAA,GAAaF,KAAA,CAAMG,MAAM,CAACnI,gBAAA;QAEhC,IAAIkI,UAAA,CAAWE,MAAM,KAAK,GAAG;UAC3B;QACF;QAEA;QACA,MAAMd,WAAA,GAAY1H,mCAAA,CAAoCsI,UAAU,CAAC,EAAE;QACnE,MAAM,CAACG,OAAA,CAAQ,GAAG/I,6BAAA,CAA8BgI,WAAA,EAAW,MAAM;QAEjE;QACA,IAAIgB,MAAA,GAASC,QAAA;QACb,IAAIC,MAAA,GAAS,CAACD,QAAA;QACd,IAAIE,MAAA,GAASF,QAAA;QACb,IAAIG,MAAA,GAAS,CAACH,QAAA;QAEd;QACA,MAAMI,cAAA,GAAiB,IAAIC,GAAA;QAC3B,KAAK,MAAMC,GAAA,IAAOR,OAAA,EAAS;UACzB,KAAK,MAAMS,OAAA,IAAWD,GAAA,EAAK;YACzB,IAAI,CAACC,OAAA,IAAW,CAACA,OAAA,CAAQpG,IAAI,EAAE;cAC7B;YACF;YAEA,MAAMqG,OAAA,GAAUD,OAAA,CAAQpG,IAAI,CAACoC,MAAM;YACnC,IAAI6D,cAAA,CAAeK,GAAG,CAACD,OAAA,GAAU;cAC/B;YACF;YAEA,IAAIb,UAAA,CAAWe,IAAI,CAAEvG,IAAA,IAASA,IAAA,CAAKF,EAAE,CAACsG,OAAA,CAAQpG,IAAI,IAAI;cACpDiG,cAAA,CAAeO,GAAG,CAACH,OAAA;cACnB;cACA,MAAMI,YAAA,GAAeL,OAAA,CAAQM,QAAQ;cACrC,MAAMC,YAAA,GAAeP,OAAA,CAAQQ,WAAW;cACxC,MAAMC,WAAA,GAAcT,OAAA,CAAQpG,IAAI,CAACE,SAAS,IAAI;cAC9C,MAAM4G,WAAA,GAAcV,OAAA,CAAQpG,IAAI,CAACC,SAAS,IAAI;cAE9C;cACA2F,MAAA,GAASmB,IAAA,CAAKC,GAAG,CAACpB,MAAA,EAAQa,YAAA;cAC1BX,MAAA,GAASiB,IAAA,CAAKE,GAAG,CAACnB,MAAA,EAAQW,YAAA,GAAeI,WAAA,GAAc;cACvDd,MAAA,GAASgB,IAAA,CAAKC,GAAG,CAACjB,MAAA,EAAQY,YAAA;cAC1BX,MAAA,GAASe,IAAA,CAAKE,GAAG,CAACjB,MAAA,EAAQW,YAAA,GAAeG,WAAA,GAAc;YACzD;UACF;QACF;QAEA;QACA,IAAIlB,MAAA,KAAWC,QAAA,IAAYE,MAAA,KAAWF,QAAA,EAAU;UAC9C;QACF;QAEA;QACA,MAAMqB,YAAA,GAAepB,MAAA,GAASF,MAAA,GAAS;QACvC,MAAMuB,YAAA,GAAenB,MAAA,GAASD,MAAA,GAAS;QAEvC;QACA,MAAMqB,aAAA,GAAgBzB,OAAA,GAAUC,MAAA,CAAO,GAAGG,MAAA,CAAO;QACjD,IAAI,CAACqB,aAAA,EAAepH,IAAA,EAAM;UACxB;QACF;QACA,MAAMqH,UAAA,GAAaD,aAAA,CAAcpH,IAAI;QAErC;QACAqH,UAAA,CAAWC,UAAU,CAACH,YAAA;QACtBE,UAAA,CAAWE,UAAU,CAACL,YAAA;QAEtB;QACA,MAAMM,SAAA,GAAY,IAAItB,GAAA,CAAI,CAACmB,UAAA,CAAWjF,MAAM,GAAG;QAE/C;QACA,KAAK,IAAI+D,KAAA,GAAMP,MAAA,EAAQO,KAAA,IAAOL,MAAA,EAAQK,KAAA,IAAO;UAC3C,KAAK,IAAIsB,GAAA,GAAM1B,MAAA,EAAQ0B,GAAA,IAAOzB,MAAA,EAAQyB,GAAA,IAAO;YAC3C,MAAMrB,SAAA,GAAUT,OAAA,GAAUQ,KAAA,CAAI,GAAGsB,GAAA,CAAI;YACrC,IAAI,CAACrB,SAAA,EAASpG,IAAA,EAAM;cAClB;YACF;YAEA,MAAM0H,WAAA,GAActB,SAAA,CAAQpG,IAAI;YAChC,MAAM2H,GAAA,GAAMD,WAAA,CAAYtF,MAAM;YAE9B,IAAI,CAACoF,SAAA,CAAUlB,GAAG,CAACqB,GAAA,GAAM;cACvBH,SAAA,CAAUhB,GAAG,CAACmB,GAAA;cACd,MAAMpH,OAAA,GAAUJ,2BAAA,CAA4BuH,WAAA;cAC5C,IAAI,CAACnH,OAAA,EAAS;gBACZ8G,UAAA,CAAWO,MAAM,IAAIF,WAAA,CAAYG,WAAW;cAC9C;cACAH,WAAA,CAAYI,MAAM;YACpB;UACF;QACF;QAEA;QACA,IAAIT,UAAA,CAAWjH,eAAe,OAAO,GAAG;UACtCiH,UAAA,CAAWO,MAAM,CAAC7J,oBAAA;QACpB;QAEAyC,qBAAA,CAAsB6G,UAAA;QACtBnG,OAAA;MACF;IACF;EACF;EAEA,MAAM6G,4BAAA,GAA+BA,CAAA;IACnCzG,MAAA,CAAOoD,MAAM,CAAC;MACZlH,YAAA;IACF;EACF;EAEA,MAAMwK,yBAAA,GAA4BrJ,WAAA,CAC/BsJ,iBAAA;IACC3G,MAAA,CAAOoD,MAAM,CAAC;MACZ,KAAK,IAAIwD,CAAA,GAAI,GAAGA,CAAA,GAAIzG,eAAA,CAAgBjC,IAAI,EAAE0I,CAAA,IAAK;QAC7C7K,6BAAA,CAA8B4K,iBAAA;MAChC;MACA/G,OAAA;IACF;EACF,GACA,CAACI,MAAA,EAAQJ,OAAA,EAASO,eAAA,CAAgBjC,IAAI,CAAC;EAGzC,MAAM2I,4BAAA,GAA+BxJ,WAAA,CAClCsJ,mBAAA;IACC3G,MAAA,CAAOoD,MAAM,CAAC;MACZ,KAAK,IAAIwD,GAAA,GAAI,GAAGA,GAAA,GAAIzG,eAAA,CAAgBpC,OAAO,EAAE6I,GAAA,IAAK;QAChD9K,gCAAA,CAAiC6K,mBAAA;MACnC;MACA/G,OAAA;IACF;EACF,GACA,CAACI,MAAA,EAAQJ,OAAA,EAASO,eAAA,CAAgBpC,OAAO,CAAC;EAG5C,MAAM+I,yBAAA,GAA4BzJ,WAAA,CAAY;IAC5C2C,MAAA,CAAOoD,MAAM,CAAC;MACZ5H,6BAAA;MACAoE,OAAA;IACF;EACF,GAAG,CAACI,MAAA,EAAQJ,OAAA,CAAQ;EAEpB,MAAMmH,sBAAA,GAAyB1J,WAAA,CAAY;IACzC2C,MAAA,CAAOoD,MAAM,CAAC;MACZ,MAAME,WAAA,GAAY1H,mCAAA,CAAoCkE,aAAA;MACtDwD,WAAA,CAAUkD,MAAM;MAEhBrD,mBAAA;MACAvD,OAAA;IACF;EACF,GAAG,CAACI,MAAA,EAAQF,aAAA,EAAeqD,mBAAA,EAAqBvD,OAAA,CAAQ;EAExD,MAAMoH,4BAAA,GAA+B3J,WAAA,CAAY;IAC/C2C,MAAA,CAAOoD,MAAM,CAAC;MACZ7H,gCAAA;MACAqE,OAAA;IACF;EACF,GAAG,CAACI,MAAA,EAAQJ,OAAA,CAAQ;EAEpB,MAAMqH,sBAAA,GAAyB5J,WAAA,CAAY;IACzC2C,MAAA,CAAOoD,MAAM,CAAC;MACZ,MAAME,WAAA,GAAY1H,mCAAA,CAAoCkE,aAAA;MAEtD,MAAMoH,aAAA,GAAgBrL,kCAAA,CAAmCiE,aAAA;MAEzD,MAAM,CAACuE,SAAA,CAAQ,GAAG/I,6BAAA,CAA8BgI,WAAA,EAAW,MAAM;MAEjE,MAAM6D,QAAA,GAAW,IAAIvC,GAAA;MAErB,MAAMwC,QAAA,GAAWtH,aAAA,CAAcuH,eAAe,KAAKhL,qBAAA,CAAsBiL,GAAG;MAC5E,IAAIjD,SAAO,CAAC6C,aAAA,CAAc,EAAE;QAC1B,KAAK,IAAIf,KAAA,GAAM,GAAGA,KAAA,GAAM9B,SAAO,CAAC6C,aAAA,CAAc,CAAC9C,MAAM,EAAE+B,KAAA,IAAO;UAC5D,MAAMrB,SAAA,GAAUT,SAAO,CAAC6C,aAAA,CAAc,CAACf,KAAA,CAAI;UAE3C,IAAI,CAACrB,SAAA,EAASpG,IAAA,EAAM;YAClB;UACF;UAEA,IAAI,CAACyI,QAAA,CAASnC,GAAG,CAACF,SAAA,CAAQpG,IAAI,GAAG;YAC/ByI,QAAA,CAASjC,GAAG,CAACJ,SAAA,CAAQpG,IAAI;YACzBoG,SAAA,CAAQpG,IAAI,CAAC6I,eAAe,CAACH,QAAA,EAAU/K,qBAAA,CAAsBiL,GAAG;UAClE;QACF;MACF;MAEAnE,mBAAA;MACAvD,OAAA;IACF;EACF,GAAG,CAACI,MAAA,EAAQF,aAAA,EAAeqD,mBAAA,EAAqBvD,OAAA,CAAQ;EAExD,MAAM4H,yBAAA,GAA4BnK,WAAA,CAAY;IAC5C2C,MAAA,CAAOoD,MAAM,CAAC;MACZ,MAAME,WAAA,GAAY1H,mCAAA,CAAoCkE,aAAA;MAEtD,MAAM2H,gBAAA,GAAmB9L,qCAAA,CAAsCmE,aAAA;MAE/D,MAAM,CAACuE,SAAA,CAAQ,GAAG/I,6BAAA,CAA8BgI,WAAA,EAAW,MAAM;MAEjE,MAAMoE,WAAA,GAAc,IAAI9C,GAAA;MAExB,MAAMwC,UAAA,GAAWtH,aAAA,CAAcuH,eAAe,KAAKhL,qBAAA,CAAsBsL,MAAM;MAC/E,IAAItD,SAAA,EAAS;QACX,KAAK,IAAIQ,KAAA,GAAM,GAAGA,KAAA,GAAMR,SAAA,CAAQD,MAAM,EAAES,KAAA,IAAO;UAC7C,MAAMC,SAAA,GAAUT,SAAA,GAAUQ,KAAA,CAAI,GAAG4C,gBAAA,CAAiB;UAElD,IAAI,CAAC3C,SAAA,EAASpG,IAAA,EAAM;YAClB;UACF;UAEA,IAAI,CAACgJ,WAAA,CAAY1C,GAAG,CAACF,SAAA,CAAQpG,IAAI,GAAG;YAClCgJ,WAAA,CAAYxC,GAAG,CAACJ,SAAA,CAAQpG,IAAI;YAC5BoG,SAAA,CAAQpG,IAAI,CAAC6I,eAAe,CAACH,UAAA,EAAU/K,qBAAA,CAAsBsL,MAAM;UACrE;QACF;MACF;MAEAxE,mBAAA;MACAvD,OAAA;IACF;EACF,GAAG,CAACI,MAAA,EAAQF,aAAA,EAAeqD,mBAAA,EAAqBvD,OAAA,CAAQ;EAExD,MAAMgI,iBAAA,GAAoBvK,WAAA,CAAY;IACpC2C,MAAA,CAAOoD,MAAM,CAAC;MACZ,IAAItD,aAAA,CAAcuD,UAAU,IAAI;QAC9B,MAAMC,WAAA,GAAY1H,mCAAA,CAAoCkE,aAAA;QACtD,IAAIwD,WAAA,EAAW;UACbA,WAAA,CAAUuE,cAAc,CAAC,CAACvE,WAAA,CAAUwE,cAAc;QACpD;MACF;MAEA3E,mBAAA;MACAvD,OAAA;IACF;EACF,GAAG,CAACI,MAAA,EAAQF,aAAA,EAAeqD,mBAAA,EAAqBvD,OAAA,CAAQ;EAExD,MAAMmI,uBAAA,GAA0B1K,WAAA,CAAY;IAC1C2C,MAAA,CAAOoD,MAAM,CAAC;MACZ,IAAItD,aAAA,CAAcuD,UAAU,IAAI;QAC9B,MAAMC,WAAA,GAAY1H,mCAAA,CAAoCkE,aAAA;QACtD,IAAIwD,WAAA,EAAW;UACbA,WAAA,CAAU0E,gBAAgB,CAAC1E,WAAA,CAAU2E,gBAAgB,OAAO,IAAI,IAAI;QACtE;MACF;MACA9E,mBAAA;MACAvD,OAAA;IACF;EACF,GAAG,CAACI,MAAA,EAAQF,aAAA,EAAeqD,mBAAA,EAAqBvD,OAAA,CAAQ;EAExD,IAAIsI,eAAA,GAAsC;EAC1C,IAAIxI,SAAA,EAAW;IACb,IAAIW,aAAA,EAAe;MACjB6H,eAAA,gBACEC,IAAA,CAAC;QACCC,SAAA,EAAU;QACV,gBAAa;QACbC,OAAA,EAASA,CAAA,KAAMtE,0BAAA;QACfuE,IAAA,EAAK;kBAEL,aAAAH,IAAA,CAAC;UAAKC,SAAA,EAAU;oBAAO;;;IAG7B,OAAO,IAAI7H,cAAA,EAAgB;MACzB2H,eAAA,gBACEC,IAAA,CAAC;QACCC,SAAA,EAAU;QACV,gBAAa;QACbC,OAAA,EAASA,CAAA,KAAM5B,4BAAA;QACf6B,IAAA,EAAK;kBAEL,aAAAH,IAAA,CAAC;UAAKC,SAAA,EAAU;oBAAO;;;IAG7B;EACF;EAEA,oBAAO3K,YAAA;EACL;;EACA8K,KAAA,CAAC;IACCH,SAAA,EAAU;IACVC,OAAA,EAAUG,CAAA;MACRA,CAAA,CAAEC,eAAe;IACnB;IACAC,GAAA,EAAKzI,WAAA;eAEJiI,eAAA,gBACCK,KAAA,CAACnL,KAAA,CAAMuL,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,KAAM3B,yBAAA,CAA0B;MACzC4B,IAAA,EAAK;gBAEL,aAAAC,KAAA,CAAC;QAAKH,SAAA,EAAU;mBAAO,WACbjI,eAAA,CAAgBjC,IAAI,KAAK,IAAI,QAAQ,GAAGiC,eAAA,CAAgBjC,IAAI,OAAO,EAAC;;qBAGhFiK,IAAA,CAAC;MACCC,SAAA,EAAU;MACV,gBAAa;MACbC,OAAA,EAASA,CAAA,KAAM3B,yBAAA,CAA0B;MACzC4B,IAAA,EAAK;gBAEL,aAAAC,KAAA,CAAC;QAAKH,SAAA,EAAU;mBAAO,WACbjI,eAAA,CAAgBjC,IAAI,KAAK,IAAI,QAAQ,GAAGiC,eAAA,CAAgBjC,IAAI,OAAO,EAAC;;qBAGhFiK,IAAA,CAAC,W,aACDA,IAAA,CAAC;MACCC,SAAA,EAAU;MACV,gBAAa;MACbC,OAAA,EAASA,CAAA,KAAMxB,4BAAA,CAA6B;MAC5CyB,IAAA,EAAK;gBAEL,aAAAC,KAAA,CAAC;QAAKH,SAAA,EAAU;mBAAO,WACbjI,eAAA,CAAgBpC,OAAO,KAAK,IAAI,WAAW,GAAGoC,eAAA,CAAgBpC,OAAO,UAAU,EAAE,KAAI;;qBAIjGoK,IAAA,CAAC;MACCC,SAAA,EAAU;MACV,gBAAa;MACbC,OAAA,EAASA,CAAA,KAAMxB,4BAAA,CAA6B;MAC5CyB,IAAA,EAAK;gBAEL,aAAAC,KAAA,CAAC;QAAKH,SAAA,EAAU;mBAAO,WACbjI,eAAA,CAAgBpC,OAAO,KAAK,IAAI,WAAW,GAAGoC,eAAA,CAAgBpC,OAAO,UAAU,EAAE,KAAI;;qBAIjGoK,IAAA,CAAC,W,aACDA,IAAA,CAAC;MACCC,SAAA,EAAU;MACV,gBAAa;MACbC,OAAA,EAASA,CAAA,KAAMrB,4BAAA;MACfsB,IAAA,EAAK;gBAEL,aAAAH,IAAA,CAAC;QAAKC,SAAA,EAAU;kBAAO;;qBAEzBD,IAAA,CAAC;MACCC,SAAA,EAAU;MACV,gBAAa;MACbC,OAAA,EAASA,CAAA,KAAMvB,yBAAA;MACfwB,IAAA,EAAK;gBAEL,aAAAH,IAAA,CAAC;QAAKC,SAAA,EAAU;kBAAO;;qBAEzBD,IAAA,CAAC;MACCC,SAAA,EAAU;MACV,gBAAa;MACbC,OAAA,EAASA,CAAA,KAAMtB,sBAAA;MACfuB,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,KAAMpB,sBAAA;MACfqB,IAAA,EAAK;gBAEL,aAAAC,KAAA,CAAC;QAAKH,SAAA,EAAU;mBACZ,CAAAtI,aAAA,CAAc8I,aAAa,GAAGvM,qBAAA,CAAsBiL,GAAG,MAAMjL,qBAAA,CAAsBiL,GAAG,GACpF,WACA,OAAO,KAAI;;qBAInBa,IAAA,CAAC;MACCC,SAAA,EAAU;MACV,gBAAa;MACbC,OAAA,EAASA,CAAA,KAAMb,yBAAA;MACfc,IAAA,EAAK;gBAEL,aAAAC,KAAA,CAAC;QAAKH,SAAA,EAAU;mBACZ,CAAAtI,aAAA,CAAc8I,aAAa,GAAGvM,qBAAA,CAAsBsL,MAAM,MAC5DtL,qBAAA,CAAsBsL,MAAM,GACxB,WACA,OAAO,KAAI;;;MAKrBkB,QAAA,CAASC,IAAI;AAEjB;AAEA,SAASC,6BAA6B;EACpCC,UAAU;EACVtJ;AAAS,CAIV;EACC,MAAM,CAACM,MAAA,CAAO,GAAG5E,yBAAA;EAEjB,MAAM6N,aAAA,GAAgB1L,MAAA,CAA8B;EACpD,MAAM2L,WAAA,GAAc3L,MAAA,CAAiC;EACrD,MAAM,CAAC4L,UAAA,EAAYtJ,aAAA,CAAc,GAAGrC,QAAA,CAAS;EAE7C,MAAM,CAACsC,aAAA,EAAesJ,oBAAA,CAAqB,GAAG5L,QAAA,CAA+B;EAE7E,MAAM6L,SAAA,GAAYhM,WAAA,CAAY;IAC5B,MAAMiM,IAAA,GAAOL,aAAA,CAAc5H,OAAO;IAClC,MAAMzD,SAAA,GAAYjB,aAAA;IAClB,MAAM4M,eAAA,GAAkBtM,eAAA,CAAgB+C,MAAA,CAAOwJ,OAAO;IACtD,MAAMC,aAAA,GAAgBZ,QAAA,CAASY,aAAa;IAC5C,SAASC,QAAA;MACP,IAAIJ,IAAA,EAAM;QACRA,IAAA,CAAKK,SAAS,CAACnD,MAAM,CAAC;QACtB8C,IAAA,CAAKK,SAAS,CAACzE,GAAG,CAAC;MACrB;MACAkE,oBAAA,CAAqB;IACvB;IAEA,IAAIxL,SAAA,IAAa,QAAQ0L,IAAA,IAAQ,MAAM;MACrC,OAAOI,OAAA;IACT;IAEA,MAAMnI,WAAA,GAAcvB,MAAA,CAAOwB,cAAc;IACzC,IAAIkC,aAAA,GAAsC;IAC1C,IAAIkG,sBAAA,GAA6C;IAEjD,IACE9M,iBAAA,CAAkBc,SAAA,KAClB2D,WAAA,KAAgB,QAChBgI,eAAA,KAAoB,QACpBhI,WAAA,CAAYyB,QAAQ,CAACuG,eAAA,CAAgBM,UAAU,GAC/C;MACA,MAAMC,0BAAA,GAA6BpO,gCAAA,CACjCkC,SAAA,CAAUW,MAAM,CAACwL,OAAO;MAG1B,IAAID,0BAAA,IAA8B,MAAM;QACtC,OAAOJ,OAAA;MACT;MAEAE,sBAAA,GAAyB5J,MAAA,CAAOwD,eAAe,CAACsG,0BAAA,CAA2BhJ,MAAM;MAEjF,IAAI8I,sBAAA,IAA0B,QAAQ,CAACE,0BAAA,CAA2BzG,UAAU,IAAI;QAC9E,OAAOqG,OAAA;MACT;MAEA,MAAMpG,SAAA,GAAY1H,mCAAA,CAAoCkO,0BAAA;MACtD,MAAMvG,YAAA,GAAepH,eAAA,CAAgBmH,SAAA,EAAWtD,MAAA,CAAOwD,eAAe,CAACF,SAAA,CAAUxC,MAAM;MAEvF,IAAIyC,YAAA,KAAiB,MAAM;QACzB,MAAM,IAAIE,KAAA,CAAM;MAClB;MAEAC,aAAA,GAAgBtH,gCAAA,CAAiCmH,YAAA;MACjD6F,oBAAA,CAAqBU,0BAAA;IACvB,OAAO,IAAI7N,iBAAA,CAAkB2B,SAAA,GAAY;MACvC,MAAMiM,UAAA,GAAanO,gCAAA,CAAiCkC,SAAA,CAAUW,MAAM,CAACwL,OAAO;MAC5E,IAAI,CAAC/N,gBAAA,CAAiB6N,UAAA,GAAa;QACjC,MAAM,IAAIpG,KAAA,CAAM;MAClB;MACA,MAAMH,WAAA,GAAY1H,mCAAA,CAAoCiO,UAAA;MACtD,MAAMtG,cAAA,GAAepH,eAAA,CAAgBmH,WAAA,EAAWtD,MAAA,CAAOwD,eAAe,CAACF,WAAA,CAAUxC,MAAM;MAEvF,IAAIyC,cAAA,KAAiB,MAAM;QACzB,MAAM,IAAIE,KAAA,CAAM;MAClB;MAEAC,aAAA,GAAgBtH,gCAAA,CAAiCmH,cAAA;MACjDqG,sBAAA,GAAyB5J,MAAA,CAAOwD,eAAe,CAACqG,UAAA,CAAW/I,MAAM;IACnE,OAAO,IAAI,CAAC2I,aAAA,EAAe;MACzB,OAAOC,OAAA;IACT;IACA,IAAIhG,aAAA,KAAkB,QAAQkG,sBAAA,KAA2B,MAAM;MAC7D,OAAOF,OAAA;IACT;IACA,MAAMM,OAAA,GAAU,CAACtG,aAAA,IAAiB,CAACA,aAAA,CAAcuG,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,CAAuBlI,qBAAqB;MAClE,MAAM0I,UAAA,GAAapB,UAAA,CAAWtH,qBAAqB;MACnD,MAAMe,GAAA,GAAM0H,aAAA,CAAc1H,GAAG,GAAG2H,UAAA,CAAW3H,GAAG;MAC9C,MAAMH,IAAA,GAAO6H,aAAA,CAAclI,KAAK,GAAGmI,UAAA,CAAW9H,IAAI;MAClDgH,IAAA,CAAK1H,KAAK,CAACyI,SAAS,GAAG,aAAa/H,IAAA,OAAWG,GAAA,KAAQ;IACzD;EACF,GAAG,CAACzC,MAAA,EAAQgJ,UAAA,CAAW;EAEvB1L,SAAA,CAAU;IACR;IACA;IACA,IAAIgN,SAAA,GAAuDC,SAAA;IAC3D,MAAMC,QAAA,GAAWA,CAAA;MACfF,SAAA,GAAYC,SAAA;MACZvK,MAAA,CAAOe,cAAc,GAAGC,IAAI,CAACqI,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,OAAOjO,aAAA,CACLyD,MAAA,CAAO2K,sBAAsB,CAACF,eAAA,GAC9BzK,MAAA,CAAO4K,eAAe,CAACzN,wBAAA,EAA0BsN,eAAA,EAAiBzN,yBAAA,GAClEgD,MAAA,CAAO6K,oBAAoB,CAAC,CAACtJ,aAAA,EAAauJ,eAAA;MACxC,IAAIA,eAAA,EAAiB;QACnBA,eAAA,CAAgB5H,mBAAmB,CAAC,aAAauH,eAAA;MACnD;MACA,IAAIlJ,aAAA,EAAa;QACfA,aAAA,CAAY0B,gBAAgB,CAAC,aAAawH,eAAA;QAC1CA,eAAA;MACF;IACF,IACA,MAAMM,YAAA,CAAaT,SAAA;EAEvB;EAEA,MAAMU,gBAAA,GAAmBzN,MAAA,CAAOuC,aAAA;EAEhCxC,SAAA,CAAU;IACR,IAAI0N,gBAAA,CAAiB3J,OAAO,KAAKvB,aAAA,EAAe;MAC9CD,aAAA,CAAc;IAChB;IAEAmL,gBAAA,CAAiB3J,OAAO,GAAGvB,aAAA;EAC7B,GAAG,CAACkL,gBAAA,EAAkBlL,aAAA,CAAc;EAEpC,oBACEqI,IAAA,CAAC;IAAIC,SAAA,EAAU;IAAqCM,GAAA,EAAKO,aAAA;cACtDnJ,aAAA,IAAiB,qBAChByI,KAAA,CAACnL,KAAA,CAAMuL,QAAQ;8BACbR,IAAA,CAAC;QACCC,SAAA,EAAU;QACVC,OAAA,EAAUG,CAAA;UACRA,CAAA,CAAEC,eAAe;UACjB5I,aAAA,CAAc,CAACsJ,UAAA;QACjB;QACAT,GAAA,EAAKQ,WAAA;QACLZ,IAAA,EAAK;kBAEL,aAAAH,IAAA,CAACzK,aAAA;UAEFyL,UAAA,iBACChB,IAAA,CAAC1I,eAAA;QACCC,SAAA,EAAWA,SAAA;QACXC,UAAA,EAAYuJ,WAAA;QACZtJ,OAAA,EAASA,CAAA,KAAMC,aAAA,CAAc;QAC7BA,aAAA,EAAeA,aAAA;QACfC,aAAA,EAAeA;;;;AAO7B;AAEA,OAAO,MAAMmL,qBAAA,GAAmDC,EAAA;EAAA,MAAAC,CAAA,GAAAhQ,EAAA;EAAC;IAAA6N;EAAA,IAAAkC,EAAc;EAC7E,MAAAE,UAAA,GAAmB/P,kBAAA;EAAA,IAAAgQ,EAAA;EAAA,IAAAF,CAAA,QAAAnC,UAAA,IAAAmC,CAAA,QAAAC,UAAA;IACZC,EAAA,GAAA5N,YAAA,CACL2N,UAAA,GACEjD,IAAA,CAAAY,4BAAA;MAAAC,UAAA,EAA0CA,UAAA,IAAAH,QAAA,CAAAC,IAA2B;MAAApJ,SAAA;IAAA,C,QACnE,EACJsJ,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,3 +1,4 @@
1
1
  import type { PluginComponent } from '../../../../typesClient.js';
2
+ import './index.scss';
2
3
  export declare const TableCellResizerPlugin: PluginComponent;
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
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;AAgZjE,eAAO,MAAM,sBAAsB,EAAE,eAQpC,CAAA"}
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,cAAc,CAAA;AAqZrB,eAAO,MAAM,sBAAsB,EAAE,eAQpC,CAAA"}
@@ -136,8 +136,12 @@ function TableCellResizer({
136
136
  throw new Error('TableCellResizer: Table cell node not found.');
137
137
  }
138
138
  const tableNode_1 = $getTableNodeFromLexicalNodeOrThrow(tableCellNode_0);
139
- const tableRowIndex = $getTableRowIndexFromTableCellNode(tableCellNode_0) + tableCellNode_0.getRowSpan() - 1;
139
+ const baseRowIndex = $getTableRowIndexFromTableCellNode(tableCellNode_0);
140
140
  const tableRows = tableNode_1.getChildren();
141
+ // Determine if this is a full row merge by checking colspan
142
+ const isFullRowMerge = tableCellNode_0.getColSpan() === tableNode_1.getColumnCount();
143
+ // For full row merges, apply to first row. For partial merges, apply to last row
144
+ const tableRowIndex = isFullRowMerge ? baseRowIndex : baseRowIndex + tableCellNode_0.getRowSpan() - 1;
141
145
  if (tableRowIndex >= tableRows.length || tableRowIndex < 0) {
142
146
  throw new Error('Expected table cell to be inside of table row.');
143
147
  }