@payloadcms/richtext-lexical 3.0.0-beta.53 → 3.0.0-beta.55

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 (727) hide show
  1. package/dist/cell/index.d.ts.map +1 -1
  2. package/dist/cell/index.js +1 -1
  3. package/dist/cell/index.js.map +1 -1
  4. package/dist/exports/client/Field-XBUN6QOM.js +2 -0
  5. package/dist/exports/client/Field-XBUN6QOM.js.map +7 -0
  6. package/dist/exports/client/{RelationshipComponent-5OU5HATX.js → RelationshipComponent-AFXEJMZQ.js} +2 -2
  7. package/dist/exports/client/bundled.css +1 -1
  8. package/dist/exports/client/{chunk-QU5MKT75.js → chunk-5RJS5YZT.js} +2 -2
  9. package/dist/exports/client/chunk-5RJS5YZT.js.map +7 -0
  10. package/dist/exports/client/chunk-JIP5PWU3.js +2 -0
  11. package/dist/exports/client/chunk-JIP5PWU3.js.map +7 -0
  12. package/dist/exports/client/{chunk-MLIITFAS.js → chunk-Q5DYR7MH.js} +2 -2
  13. package/dist/exports/client/chunk-Q5DYR7MH.js.map +7 -0
  14. package/dist/exports/client/{chunk-OSR74ZNW.js → chunk-YL52LJO3.js} +2 -2
  15. package/dist/exports/client/chunk-YL52LJO3.js.map +7 -0
  16. package/dist/exports/client/{component-E2NHAHBC.js → component-F6V63OLD.js} +2 -2
  17. package/dist/exports/client/component-F6V63OLD.js.map +7 -0
  18. package/dist/exports/client/component-PEFMKIXI.js +2 -0
  19. package/dist/exports/client/component-PEFMKIXI.js.map +7 -0
  20. package/dist/exports/client/{component-QWIGEOVD.js → component-VM36FRT2.js} +2 -2
  21. package/dist/exports/client/index.d.ts +37 -27
  22. package/dist/exports/client/index.d.ts.map +1 -1
  23. package/dist/exports/client/index.js +7 -5
  24. package/dist/exports/client/index.js.map +4 -4
  25. package/dist/features/align/feature.client.d.ts +1 -2
  26. package/dist/features/align/feature.client.d.ts.map +1 -1
  27. package/dist/features/align/feature.client.js +9 -16
  28. package/dist/features/align/feature.client.js.map +1 -1
  29. package/dist/features/align/feature.server.d.ts +1 -2
  30. package/dist/features/align/feature.server.d.ts.map +1 -1
  31. package/dist/features/align/feature.server.js +9 -15
  32. package/dist/features/align/feature.server.js.map +1 -1
  33. package/dist/features/align/i18n.js.map +1 -1
  34. package/dist/features/align/toolbarAlignGroup.js.map +1 -1
  35. package/dist/features/blockquote/feature.client.d.ts +1 -2
  36. package/dist/features/blockquote/feature.client.d.ts.map +1 -1
  37. package/dist/features/blockquote/feature.client.js +37 -44
  38. package/dist/features/blockquote/feature.client.js.map +1 -1
  39. package/dist/features/blockquote/feature.server.d.ts +6 -2
  40. package/dist/features/blockquote/feature.server.d.ts.map +1 -1
  41. package/dist/features/blockquote/feature.server.js +35 -40
  42. package/dist/features/blockquote/feature.server.js.map +1 -1
  43. package/dist/features/blockquote/i18n.js.map +1 -1
  44. package/dist/features/blockquote/markdownTransformer.js.map +1 -1
  45. package/dist/features/blocks/component/BlockContent.js +2 -2
  46. package/dist/features/blocks/component/BlockContent.js.map +1 -1
  47. package/dist/features/blocks/component/FormSavePlugin.js.map +1 -1
  48. package/dist/features/blocks/component/index.js +1 -1
  49. package/dist/features/blocks/component/index.js.map +1 -1
  50. package/dist/features/blocks/component/removeEmptyArrayValues.js.map +1 -1
  51. package/dist/features/blocks/drawer/index.js +1 -1
  52. package/dist/features/blocks/drawer/index.js.map +1 -1
  53. package/dist/features/blocks/feature.client.d.ts +1 -2
  54. package/dist/features/blocks/feature.client.d.ts.map +1 -1
  55. package/dist/features/blocks/feature.client.js +74 -80
  56. package/dist/features/blocks/feature.client.js.map +1 -1
  57. package/dist/features/blocks/feature.server.d.ts +1 -2
  58. package/dist/features/blocks/feature.server.d.ts.map +1 -1
  59. package/dist/features/blocks/feature.server.js +88 -90
  60. package/dist/features/blocks/feature.server.js.map +1 -1
  61. package/dist/features/blocks/graphQLPopulationPromise.d.ts +1 -1
  62. package/dist/features/blocks/graphQLPopulationPromise.d.ts.map +1 -1
  63. package/dist/features/blocks/graphQLPopulationPromise.js.map +1 -1
  64. package/dist/features/blocks/i18n.js.map +1 -1
  65. package/dist/features/blocks/nodes/BlocksNode.d.ts +2 -0
  66. package/dist/features/blocks/nodes/BlocksNode.d.ts.map +1 -1
  67. package/dist/features/blocks/nodes/BlocksNode.js +1 -1
  68. package/dist/features/blocks/nodes/BlocksNode.js.map +1 -1
  69. package/dist/features/blocks/plugin/commands.js.map +1 -1
  70. package/dist/features/blocks/plugin/index.d.ts +1 -1
  71. package/dist/features/blocks/plugin/index.d.ts.map +1 -1
  72. package/dist/features/blocks/plugin/index.js.map +1 -1
  73. package/dist/features/blocks/validate.d.ts +1 -1
  74. package/dist/features/blocks/validate.d.ts.map +1 -1
  75. package/dist/features/blocks/validate.js.map +1 -1
  76. package/dist/features/converters/html/converter/converters/linebreak.js.map +1 -1
  77. package/dist/features/converters/html/converter/converters/paragraph.js.map +1 -1
  78. package/dist/features/converters/html/converter/converters/text.js.map +1 -1
  79. package/dist/features/converters/html/converter/defaultConverters.js.map +1 -1
  80. package/dist/features/converters/html/converter/index.js.map +1 -1
  81. package/dist/features/converters/html/converter/types.js.map +1 -1
  82. package/dist/features/converters/html/feature.server.d.ts +1 -2
  83. package/dist/features/converters/html/feature.server.d.ts.map +1 -1
  84. package/dist/features/converters/html/feature.server.js +6 -12
  85. package/dist/features/converters/html/feature.server.js.map +1 -1
  86. package/dist/features/converters/html/field/index.js +1 -1
  87. package/dist/features/converters/html/field/index.js.map +1 -1
  88. package/dist/features/createClientComponent.d.ts +3 -2
  89. package/dist/features/createClientComponent.d.ts.map +1 -1
  90. package/dist/features/createClientComponent.js.map +1 -1
  91. package/dist/features/createFeaturePropComponent.d.ts.map +1 -1
  92. package/dist/features/createFeaturePropComponent.js.map +1 -1
  93. package/dist/features/debug/testRecorder/feature.client.d.ts +1 -2
  94. package/dist/features/debug/testRecorder/feature.client.d.ts.map +1 -1
  95. package/dist/features/debug/testRecorder/feature.client.js +9 -16
  96. package/dist/features/debug/testRecorder/feature.client.js.map +1 -1
  97. package/dist/features/debug/testRecorder/feature.server.d.ts +1 -2
  98. package/dist/features/debug/testRecorder/feature.server.d.ts.map +1 -1
  99. package/dist/features/debug/testRecorder/feature.server.js +8 -13
  100. package/dist/features/debug/testRecorder/feature.server.js.map +1 -1
  101. package/dist/features/debug/testRecorder/plugin/index.d.ts +1 -1
  102. package/dist/features/debug/testRecorder/plugin/index.d.ts.map +1 -1
  103. package/dist/features/debug/testRecorder/plugin/index.js.map +1 -1
  104. package/dist/features/debug/treeView/feature.client.d.ts +1 -2
  105. package/dist/features/debug/treeView/feature.client.d.ts.map +1 -1
  106. package/dist/features/debug/treeView/feature.client.js +9 -16
  107. package/dist/features/debug/treeView/feature.client.js.map +1 -1
  108. package/dist/features/debug/treeView/feature.server.d.ts +1 -2
  109. package/dist/features/debug/treeView/feature.server.d.ts.map +1 -1
  110. package/dist/features/debug/treeView/feature.server.js +8 -13
  111. package/dist/features/debug/treeView/feature.server.js.map +1 -1
  112. package/dist/features/debug/treeView/plugin/index.d.ts +1 -1
  113. package/dist/features/debug/treeView/plugin/index.d.ts.map +1 -1
  114. package/dist/features/debug/treeView/plugin/index.js.map +1 -1
  115. package/dist/features/format/bold/feature.client.d.ts +1 -2
  116. package/dist/features/format/bold/feature.client.d.ts.map +1 -1
  117. package/dist/features/format/bold/feature.client.js +16 -23
  118. package/dist/features/format/bold/feature.client.js.map +1 -1
  119. package/dist/features/format/bold/feature.server.d.ts +1 -2
  120. package/dist/features/format/bold/feature.server.d.ts.map +1 -1
  121. package/dist/features/format/bold/feature.server.js +21 -24
  122. package/dist/features/format/bold/feature.server.js.map +1 -1
  123. package/dist/features/format/bold/markdownTransformers.js.map +1 -1
  124. package/dist/features/format/inlineCode/feature.client.d.ts +1 -2
  125. package/dist/features/format/inlineCode/feature.client.d.ts.map +1 -1
  126. package/dist/features/format/inlineCode/feature.client.js +12 -21
  127. package/dist/features/format/inlineCode/feature.client.js.map +1 -1
  128. package/dist/features/format/inlineCode/feature.server.d.ts +1 -2
  129. package/dist/features/format/inlineCode/feature.server.d.ts.map +1 -1
  130. package/dist/features/format/inlineCode/feature.server.js +11 -16
  131. package/dist/features/format/inlineCode/feature.server.js.map +1 -1
  132. package/dist/features/format/inlineCode/markdownTransformers.js.map +1 -1
  133. package/dist/features/format/italic/feature.client.d.ts +1 -2
  134. package/dist/features/format/italic/feature.client.d.ts.map +1 -1
  135. package/dist/features/format/italic/feature.client.js +13 -22
  136. package/dist/features/format/italic/feature.client.js.map +1 -1
  137. package/dist/features/format/italic/feature.server.d.ts +1 -2
  138. package/dist/features/format/italic/feature.server.d.ts.map +1 -1
  139. package/dist/features/format/italic/feature.server.js +12 -17
  140. package/dist/features/format/italic/feature.server.js.map +1 -1
  141. package/dist/features/format/italic/markdownTransformers.js.map +1 -1
  142. package/dist/features/format/shared/toolbarFormatGroup.js.map +1 -1
  143. package/dist/features/format/strikethrough/feature.client.d.ts +1 -2
  144. package/dist/features/format/strikethrough/feature.client.d.ts.map +1 -1
  145. package/dist/features/format/strikethrough/feature.client.js +12 -21
  146. package/dist/features/format/strikethrough/feature.client.js.map +1 -1
  147. package/dist/features/format/strikethrough/feature.server.d.ts +1 -2
  148. package/dist/features/format/strikethrough/feature.server.d.ts.map +1 -1
  149. package/dist/features/format/strikethrough/feature.server.js +11 -16
  150. package/dist/features/format/strikethrough/feature.server.js.map +1 -1
  151. package/dist/features/format/strikethrough/markdownTransformers.js.map +1 -1
  152. package/dist/features/format/subscript/feature.client.d.ts +1 -2
  153. package/dist/features/format/subscript/feature.client.d.ts.map +1 -1
  154. package/dist/features/format/subscript/feature.client.js +9 -18
  155. package/dist/features/format/subscript/feature.client.js.map +1 -1
  156. package/dist/features/format/subscript/feature.server.d.ts +1 -2
  157. package/dist/features/format/subscript/feature.server.d.ts.map +1 -1
  158. package/dist/features/format/subscript/feature.server.js +8 -13
  159. package/dist/features/format/subscript/feature.server.js.map +1 -1
  160. package/dist/features/format/superscript/feature.client.d.ts +1 -2
  161. package/dist/features/format/superscript/feature.client.d.ts.map +1 -1
  162. package/dist/features/format/superscript/feature.client.js +9 -18
  163. package/dist/features/format/superscript/feature.client.js.map +1 -1
  164. package/dist/features/format/superscript/feature.server.d.ts +1 -2
  165. package/dist/features/format/superscript/feature.server.d.ts.map +1 -1
  166. package/dist/features/format/superscript/feature.server.js +8 -13
  167. package/dist/features/format/superscript/feature.server.js.map +1 -1
  168. package/dist/features/format/underline/feature.client.d.ts +1 -2
  169. package/dist/features/format/underline/feature.client.d.ts.map +1 -1
  170. package/dist/features/format/underline/feature.client.js +9 -18
  171. package/dist/features/format/underline/feature.client.js.map +1 -1
  172. package/dist/features/format/underline/feature.server.d.ts +1 -2
  173. package/dist/features/format/underline/feature.server.d.ts.map +1 -1
  174. package/dist/features/format/underline/feature.server.js +8 -13
  175. package/dist/features/format/underline/feature.server.js.map +1 -1
  176. package/dist/features/heading/feature.client.d.ts +1 -2
  177. package/dist/features/heading/feature.client.d.ts.map +1 -1
  178. package/dist/features/heading/feature.client.js +70 -76
  179. package/dist/features/heading/feature.client.js.map +1 -1
  180. package/dist/features/heading/feature.server.d.ts +1 -2
  181. package/dist/features/heading/feature.server.d.ts.map +1 -1
  182. package/dist/features/heading/feature.server.js +51 -53
  183. package/dist/features/heading/feature.server.js.map +1 -1
  184. package/dist/features/heading/i18n.js +2 -2
  185. package/dist/features/heading/i18n.js.map +1 -1
  186. package/dist/features/heading/markdownTransformer.js.map +1 -1
  187. package/dist/features/horizontalRule/component/index.js.map +1 -1
  188. package/dist/features/horizontalRule/feature.client.d.ts +1 -2
  189. package/dist/features/horizontalRule/feature.client.d.ts.map +1 -1
  190. package/dist/features/horizontalRule/feature.client.js +58 -65
  191. package/dist/features/horizontalRule/feature.client.js.map +1 -1
  192. package/dist/features/horizontalRule/feature.server.d.ts +1 -2
  193. package/dist/features/horizontalRule/feature.server.d.ts.map +1 -1
  194. package/dist/features/horizontalRule/feature.server.js +26 -31
  195. package/dist/features/horizontalRule/feature.server.js.map +1 -1
  196. package/dist/features/horizontalRule/i18n.js.map +1 -1
  197. package/dist/features/horizontalRule/markdownTransformer.js.map +1 -1
  198. package/dist/features/horizontalRule/nodes/HorizontalRuleNode.d.ts +5 -2
  199. package/dist/features/horizontalRule/nodes/HorizontalRuleNode.d.ts.map +1 -1
  200. package/dist/features/horizontalRule/nodes/HorizontalRuleNode.js.map +1 -1
  201. package/dist/features/horizontalRule/plugin/index.d.ts +1 -1
  202. package/dist/features/horizontalRule/plugin/index.d.ts.map +1 -1
  203. package/dist/features/horizontalRule/plugin/index.js.map +1 -1
  204. package/dist/features/indent/feature.client.d.ts +1 -2
  205. package/dist/features/indent/feature.client.d.ts.map +1 -1
  206. package/dist/features/indent/feature.client.js +9 -16
  207. package/dist/features/indent/feature.client.js.map +1 -1
  208. package/dist/features/indent/feature.server.d.ts +1 -2
  209. package/dist/features/indent/feature.server.d.ts.map +1 -1
  210. package/dist/features/indent/feature.server.js +9 -15
  211. package/dist/features/indent/feature.server.js.map +1 -1
  212. package/dist/features/indent/i18n.js.map +1 -1
  213. package/dist/features/indent/toolbarIndentGroup.js.map +1 -1
  214. package/dist/features/link/drawer/baseFields.d.ts +2 -2
  215. package/dist/features/link/drawer/baseFields.d.ts.map +1 -1
  216. package/dist/features/link/drawer/baseFields.js.map +1 -1
  217. package/dist/features/link/drawer/index.js.map +1 -1
  218. package/dist/features/link/drawer/types.js.map +1 -1
  219. package/dist/features/link/feature.client.d.ts +3 -4
  220. package/dist/features/link/feature.client.d.ts.map +1 -1
  221. package/dist/features/link/feature.client.js +34 -41
  222. package/dist/features/link/feature.client.js.map +1 -1
  223. package/dist/features/link/feature.server.d.ts +4 -6
  224. package/dist/features/link/feature.server.d.ts.map +1 -1
  225. package/dist/features/link/feature.server.js +123 -125
  226. package/dist/features/link/feature.server.js.map +1 -1
  227. package/dist/features/link/graphQLPopulationPromise.d.ts +1 -1
  228. package/dist/features/link/graphQLPopulationPromise.d.ts.map +1 -1
  229. package/dist/features/link/graphQLPopulationPromise.js.map +1 -1
  230. package/dist/features/link/i18n.js.map +1 -1
  231. package/dist/features/link/markdownTransformer.js.map +1 -1
  232. package/dist/features/link/nodes/AutoLinkNode.d.ts.map +1 -1
  233. package/dist/features/link/nodes/AutoLinkNode.js +7 -1
  234. package/dist/features/link/nodes/AutoLinkNode.js.map +1 -1
  235. package/dist/features/link/nodes/LinkNode.js +1 -1
  236. package/dist/features/link/nodes/LinkNode.js.map +1 -1
  237. package/dist/features/link/nodes/types.d.ts +7 -4
  238. package/dist/features/link/nodes/types.d.ts.map +1 -1
  239. package/dist/features/link/nodes/types.js.map +1 -1
  240. package/dist/features/link/plugins/autoLink/index.d.ts +1 -1
  241. package/dist/features/link/plugins/autoLink/index.d.ts.map +1 -1
  242. package/dist/features/link/plugins/autoLink/index.js.map +1 -1
  243. package/dist/features/link/plugins/clickableLink/index.d.ts +1 -1
  244. package/dist/features/link/plugins/clickableLink/index.d.ts.map +1 -1
  245. package/dist/features/link/plugins/clickableLink/index.js.map +1 -1
  246. package/dist/features/link/plugins/floatingLinkEditor/LinkEditor/commands.js.map +1 -1
  247. package/dist/features/link/plugins/floatingLinkEditor/LinkEditor/index.js.map +1 -1
  248. package/dist/features/link/plugins/floatingLinkEditor/index.d.ts +1 -1
  249. package/dist/features/link/plugins/floatingLinkEditor/index.d.ts.map +1 -1
  250. package/dist/features/link/plugins/floatingLinkEditor/index.js.map +1 -1
  251. package/dist/features/link/plugins/floatingLinkEditor/types.js.map +1 -1
  252. package/dist/features/link/plugins/floatingLinkEditor/utilities.d.ts +2 -2
  253. package/dist/features/link/plugins/floatingLinkEditor/utilities.d.ts.map +1 -1
  254. package/dist/features/link/plugins/floatingLinkEditor/utilities.js.map +1 -1
  255. package/dist/features/link/plugins/link/index.d.ts +1 -1
  256. package/dist/features/link/plugins/link/index.d.ts.map +1 -1
  257. package/dist/features/link/plugins/link/index.js.map +1 -1
  258. package/dist/features/link/validate.d.ts +1 -1
  259. package/dist/features/link/validate.d.ts.map +1 -1
  260. package/dist/features/link/validate.js.map +1 -1
  261. package/dist/features/lists/checklist/feature.client.d.ts +1 -2
  262. package/dist/features/lists/checklist/feature.client.d.ts.map +1 -1
  263. package/dist/features/lists/checklist/feature.client.js +50 -57
  264. package/dist/features/lists/checklist/feature.client.js.map +1 -1
  265. package/dist/features/lists/checklist/feature.server.d.ts +1 -2
  266. package/dist/features/lists/checklist/feature.server.d.ts.map +1 -1
  267. package/dist/features/lists/checklist/feature.server.js +28 -31
  268. package/dist/features/lists/checklist/feature.server.js.map +1 -1
  269. package/dist/features/lists/checklist/i18n.js.map +1 -1
  270. package/dist/features/lists/checklist/markdownTransformers.js.map +1 -1
  271. package/dist/features/lists/checklist/plugin/index.d.ts +1 -1
  272. package/dist/features/lists/checklist/plugin/index.d.ts.map +1 -1
  273. package/dist/features/lists/checklist/plugin/index.js.map +1 -1
  274. package/dist/features/lists/htmlConverter.d.ts +1 -1
  275. package/dist/features/lists/htmlConverter.d.ts.map +1 -1
  276. package/dist/features/lists/htmlConverter.js.map +1 -1
  277. package/dist/features/lists/orderedList/feature.client.d.ts +1 -2
  278. package/dist/features/lists/orderedList/feature.client.d.ts.map +1 -1
  279. package/dist/features/lists/orderedList/feature.client.js +39 -46
  280. package/dist/features/lists/orderedList/feature.client.js.map +1 -1
  281. package/dist/features/lists/orderedList/feature.server.d.ts +1 -2
  282. package/dist/features/lists/orderedList/feature.server.d.ts.map +1 -1
  283. package/dist/features/lists/orderedList/feature.server.js +28 -31
  284. package/dist/features/lists/orderedList/feature.server.js.map +1 -1
  285. package/dist/features/lists/orderedList/i18n.js.map +1 -1
  286. package/dist/features/lists/orderedList/markdownTransformer.js.map +1 -1
  287. package/dist/features/lists/plugin/index.d.ts +11 -1
  288. package/dist/features/lists/plugin/index.d.ts.map +1 -1
  289. package/dist/features/lists/plugin/index.js.map +1 -1
  290. package/dist/features/lists/shared/markdown.d.ts +1 -1
  291. package/dist/features/lists/shared/markdown.js.map +1 -1
  292. package/dist/features/lists/shared/slashMenuListGroup.js.map +1 -1
  293. package/dist/features/lists/unorderedList/feature.client.d.ts +1 -2
  294. package/dist/features/lists/unorderedList/feature.client.d.ts.map +1 -1
  295. package/dist/features/lists/unorderedList/feature.client.js +40 -49
  296. package/dist/features/lists/unorderedList/feature.client.js.map +1 -1
  297. package/dist/features/lists/unorderedList/feature.server.d.ts +1 -2
  298. package/dist/features/lists/unorderedList/feature.server.d.ts.map +1 -1
  299. package/dist/features/lists/unorderedList/feature.server.js +26 -31
  300. package/dist/features/lists/unorderedList/feature.server.js.map +1 -1
  301. package/dist/features/lists/unorderedList/i18n.js.map +1 -1
  302. package/dist/features/lists/unorderedList/markdownTransformer.js.map +1 -1
  303. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/heading/client.d.ts +0 -1
  304. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/heading/client.d.ts.map +1 -1
  305. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/heading/client.js.map +1 -1
  306. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/heading/converter.js.map +1 -1
  307. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/heading/index.js +1 -1
  308. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/heading/index.js.map +1 -1
  309. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/link/client.d.ts +0 -1
  310. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/link/client.d.ts.map +1 -1
  311. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/link/client.js.map +1 -1
  312. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/link/converter.js.map +1 -1
  313. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/link/index.js +1 -1
  314. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/link/index.js.map +1 -1
  315. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/list/client.d.ts +0 -1
  316. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/list/client.d.ts.map +1 -1
  317. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/list/client.js.map +1 -1
  318. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/list/converter.d.ts.map +1 -1
  319. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/list/converter.js.map +1 -1
  320. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/list/index.js +1 -1
  321. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/list/index.js.map +1 -1
  322. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/listItem/client.d.ts +0 -1
  323. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/listItem/client.d.ts.map +1 -1
  324. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/listItem/client.js.map +1 -1
  325. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/listItem/converter.d.ts.map +1 -1
  326. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/listItem/converter.js.map +1 -1
  327. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/listItem/index.js +1 -1
  328. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/listItem/index.js.map +1 -1
  329. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/quote/client.d.ts +0 -1
  330. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/quote/client.d.ts.map +1 -1
  331. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/quote/client.js.map +1 -1
  332. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/quote/converter.d.ts.map +1 -1
  333. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/quote/converter.js.map +1 -1
  334. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/quote/index.js +1 -1
  335. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/quote/index.js.map +1 -1
  336. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/unknown/client.d.ts +0 -1
  337. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/unknown/client.d.ts.map +1 -1
  338. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/unknown/client.js.map +1 -1
  339. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/unknown/converter.js.map +1 -1
  340. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/unknown/index.js +1 -1
  341. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/unknown/index.js.map +1 -1
  342. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/upload/client.d.ts +0 -1
  343. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/upload/client.d.ts.map +1 -1
  344. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/upload/client.js.map +1 -1
  345. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/upload/converter.js.map +1 -1
  346. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/upload/index.js +1 -1
  347. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/upload/index.js.map +1 -1
  348. package/dist/features/migrations/lexicalPluginToLexical/converter/defaultConverters.js.map +1 -1
  349. package/dist/features/migrations/lexicalPluginToLexical/converter/index.js.map +1 -1
  350. package/dist/features/migrations/lexicalPluginToLexical/converter/types.d.ts +1 -1
  351. package/dist/features/migrations/lexicalPluginToLexical/converter/types.js.map +1 -1
  352. package/dist/features/migrations/lexicalPluginToLexical/feature.client.d.ts +1 -2
  353. package/dist/features/migrations/lexicalPluginToLexical/feature.client.d.ts.map +1 -1
  354. package/dist/features/migrations/lexicalPluginToLexical/feature.client.js +20 -27
  355. package/dist/features/migrations/lexicalPluginToLexical/feature.client.js.map +1 -1
  356. package/dist/features/migrations/lexicalPluginToLexical/feature.server.d.ts +1 -2
  357. package/dist/features/migrations/lexicalPluginToLexical/feature.server.d.ts.map +1 -1
  358. package/dist/features/migrations/lexicalPluginToLexical/feature.server.js +39 -42
  359. package/dist/features/migrations/lexicalPluginToLexical/feature.server.js.map +1 -1
  360. package/dist/features/migrations/lexicalPluginToLexical/nodes/unknownConvertedNode/Component.js.map +1 -1
  361. package/dist/features/migrations/lexicalPluginToLexical/nodes/unknownConvertedNode/index.js.map +1 -1
  362. package/dist/features/migrations/slateToLexical/converter/converters/blockquote/client.d.ts +0 -1
  363. package/dist/features/migrations/slateToLexical/converter/converters/blockquote/client.d.ts.map +1 -1
  364. package/dist/features/migrations/slateToLexical/converter/converters/blockquote/client.js.map +1 -1
  365. package/dist/features/migrations/slateToLexical/converter/converters/blockquote/converter.d.ts.map +1 -1
  366. package/dist/features/migrations/slateToLexical/converter/converters/blockquote/converter.js.map +1 -1
  367. package/dist/features/migrations/slateToLexical/converter/converters/blockquote/index.js +1 -1
  368. package/dist/features/migrations/slateToLexical/converter/converters/blockquote/index.js.map +1 -1
  369. package/dist/features/migrations/slateToLexical/converter/converters/heading/client.d.ts +0 -1
  370. package/dist/features/migrations/slateToLexical/converter/converters/heading/client.d.ts.map +1 -1
  371. package/dist/features/migrations/slateToLexical/converter/converters/heading/client.js.map +1 -1
  372. package/dist/features/migrations/slateToLexical/converter/converters/heading/converter.js.map +1 -1
  373. package/dist/features/migrations/slateToLexical/converter/converters/heading/index.js +1 -1
  374. package/dist/features/migrations/slateToLexical/converter/converters/heading/index.js.map +1 -1
  375. package/dist/features/migrations/slateToLexical/converter/converters/indent/client.d.ts +0 -1
  376. package/dist/features/migrations/slateToLexical/converter/converters/indent/client.d.ts.map +1 -1
  377. package/dist/features/migrations/slateToLexical/converter/converters/indent/client.js.map +1 -1
  378. package/dist/features/migrations/slateToLexical/converter/converters/indent/converter.js.map +1 -1
  379. package/dist/features/migrations/slateToLexical/converter/converters/indent/index.js +1 -1
  380. package/dist/features/migrations/slateToLexical/converter/converters/indent/index.js.map +1 -1
  381. package/dist/features/migrations/slateToLexical/converter/converters/link/client.d.ts +0 -1
  382. package/dist/features/migrations/slateToLexical/converter/converters/link/client.d.ts.map +1 -1
  383. package/dist/features/migrations/slateToLexical/converter/converters/link/client.js.map +1 -1
  384. package/dist/features/migrations/slateToLexical/converter/converters/link/converter.js.map +1 -1
  385. package/dist/features/migrations/slateToLexical/converter/converters/link/index.js +1 -1
  386. package/dist/features/migrations/slateToLexical/converter/converters/link/index.js.map +1 -1
  387. package/dist/features/migrations/slateToLexical/converter/converters/listItem/client.d.ts +0 -1
  388. package/dist/features/migrations/slateToLexical/converter/converters/listItem/client.d.ts.map +1 -1
  389. package/dist/features/migrations/slateToLexical/converter/converters/listItem/client.js.map +1 -1
  390. package/dist/features/migrations/slateToLexical/converter/converters/listItem/converter.d.ts.map +1 -1
  391. package/dist/features/migrations/slateToLexical/converter/converters/listItem/converter.js.map +1 -1
  392. package/dist/features/migrations/slateToLexical/converter/converters/listItem/index.js +1 -1
  393. package/dist/features/migrations/slateToLexical/converter/converters/listItem/index.js.map +1 -1
  394. package/dist/features/migrations/slateToLexical/converter/converters/orderedList/client.d.ts +0 -1
  395. package/dist/features/migrations/slateToLexical/converter/converters/orderedList/client.d.ts.map +1 -1
  396. package/dist/features/migrations/slateToLexical/converter/converters/orderedList/client.js.map +1 -1
  397. package/dist/features/migrations/slateToLexical/converter/converters/orderedList/converter.d.ts.map +1 -1
  398. package/dist/features/migrations/slateToLexical/converter/converters/orderedList/converter.js.map +1 -1
  399. package/dist/features/migrations/slateToLexical/converter/converters/orderedList/index.js +1 -1
  400. package/dist/features/migrations/slateToLexical/converter/converters/orderedList/index.js.map +1 -1
  401. package/dist/features/migrations/slateToLexical/converter/converters/relationship/client.d.ts +0 -1
  402. package/dist/features/migrations/slateToLexical/converter/converters/relationship/client.d.ts.map +1 -1
  403. package/dist/features/migrations/slateToLexical/converter/converters/relationship/client.js.map +1 -1
  404. package/dist/features/migrations/slateToLexical/converter/converters/relationship/converter.js.map +1 -1
  405. package/dist/features/migrations/slateToLexical/converter/converters/relationship/index.js +1 -1
  406. package/dist/features/migrations/slateToLexical/converter/converters/relationship/index.js.map +1 -1
  407. package/dist/features/migrations/slateToLexical/converter/converters/unknown/client.d.ts +0 -1
  408. package/dist/features/migrations/slateToLexical/converter/converters/unknown/client.d.ts.map +1 -1
  409. package/dist/features/migrations/slateToLexical/converter/converters/unknown/client.js.map +1 -1
  410. package/dist/features/migrations/slateToLexical/converter/converters/unknown/converter.js.map +1 -1
  411. package/dist/features/migrations/slateToLexical/converter/converters/unknown/index.js +1 -1
  412. package/dist/features/migrations/slateToLexical/converter/converters/unknown/index.js.map +1 -1
  413. package/dist/features/migrations/slateToLexical/converter/converters/unorderedList/client.d.ts +0 -1
  414. package/dist/features/migrations/slateToLexical/converter/converters/unorderedList/client.d.ts.map +1 -1
  415. package/dist/features/migrations/slateToLexical/converter/converters/unorderedList/client.js.map +1 -1
  416. package/dist/features/migrations/slateToLexical/converter/converters/unorderedList/converter.d.ts.map +1 -1
  417. package/dist/features/migrations/slateToLexical/converter/converters/unorderedList/converter.js.map +1 -1
  418. package/dist/features/migrations/slateToLexical/converter/converters/unorderedList/index.js +1 -1
  419. package/dist/features/migrations/slateToLexical/converter/converters/unorderedList/index.js.map +1 -1
  420. package/dist/features/migrations/slateToLexical/converter/converters/upload/client.d.ts +0 -1
  421. package/dist/features/migrations/slateToLexical/converter/converters/upload/client.d.ts.map +1 -1
  422. package/dist/features/migrations/slateToLexical/converter/converters/upload/client.js.map +1 -1
  423. package/dist/features/migrations/slateToLexical/converter/converters/upload/converter.js.map +1 -1
  424. package/dist/features/migrations/slateToLexical/converter/converters/upload/index.js +1 -1
  425. package/dist/features/migrations/slateToLexical/converter/converters/upload/index.js.map +1 -1
  426. package/dist/features/migrations/slateToLexical/converter/defaultConverters.js.map +1 -1
  427. package/dist/features/migrations/slateToLexical/converter/index.js.map +1 -1
  428. package/dist/features/migrations/slateToLexical/converter/types.d.ts +1 -1
  429. package/dist/features/migrations/slateToLexical/converter/types.js.map +1 -1
  430. package/dist/features/migrations/slateToLexical/feature.client.d.ts +1 -2
  431. package/dist/features/migrations/slateToLexical/feature.client.d.ts.map +1 -1
  432. package/dist/features/migrations/slateToLexical/feature.client.js +20 -27
  433. package/dist/features/migrations/slateToLexical/feature.client.js.map +1 -1
  434. package/dist/features/migrations/slateToLexical/feature.server.d.ts +3 -2
  435. package/dist/features/migrations/slateToLexical/feature.server.d.ts.map +1 -1
  436. package/dist/features/migrations/slateToLexical/feature.server.js +41 -42
  437. package/dist/features/migrations/slateToLexical/feature.server.js.map +1 -1
  438. package/dist/features/migrations/slateToLexical/nodes/unknownConvertedNode/Component.js.map +1 -1
  439. package/dist/features/migrations/slateToLexical/nodes/unknownConvertedNode/index.js.map +1 -1
  440. package/dist/features/paragraph/feature.client.d.ts +1 -2
  441. package/dist/features/paragraph/feature.client.d.ts.map +1 -1
  442. package/dist/features/paragraph/feature.client.js +33 -40
  443. package/dist/features/paragraph/feature.client.js.map +1 -1
  444. package/dist/features/paragraph/feature.server.d.ts +1 -2
  445. package/dist/features/paragraph/feature.server.d.ts.map +1 -1
  446. package/dist/features/paragraph/feature.server.js +10 -15
  447. package/dist/features/paragraph/feature.server.js.map +1 -1
  448. package/dist/features/paragraph/i18n.js.map +1 -1
  449. package/dist/features/relationship/drawer/commands.js.map +1 -1
  450. package/dist/features/relationship/drawer/index.d.ts.map +1 -1
  451. package/dist/features/relationship/drawer/index.js.map +1 -1
  452. package/dist/features/relationship/feature.client.d.ts +3 -4
  453. package/dist/features/relationship/feature.client.d.ts.map +1 -1
  454. package/dist/features/relationship/feature.client.js +60 -67
  455. package/dist/features/relationship/feature.client.js.map +1 -1
  456. package/dist/features/relationship/feature.server.d.ts +4 -4
  457. package/dist/features/relationship/feature.server.d.ts.map +1 -1
  458. package/dist/features/relationship/feature.server.js +45 -51
  459. package/dist/features/relationship/feature.server.js.map +1 -1
  460. package/dist/features/relationship/graphQLPopulationPromise.d.ts +1 -1
  461. package/dist/features/relationship/graphQLPopulationPromise.d.ts.map +1 -1
  462. package/dist/features/relationship/graphQLPopulationPromise.js.map +1 -1
  463. package/dist/features/relationship/i18n.js.map +1 -1
  464. package/dist/features/relationship/nodes/RelationshipNode.d.ts +6 -2
  465. package/dist/features/relationship/nodes/RelationshipNode.d.ts.map +1 -1
  466. package/dist/features/relationship/nodes/RelationshipNode.js +1 -1
  467. package/dist/features/relationship/nodes/RelationshipNode.js.map +1 -1
  468. package/dist/features/relationship/nodes/components/RelationshipComponent.d.ts.map +1 -1
  469. package/dist/features/relationship/nodes/components/RelationshipComponent.js.map +1 -1
  470. package/dist/features/relationship/plugins/index.d.ts +1 -1
  471. package/dist/features/relationship/plugins/index.d.ts.map +1 -1
  472. package/dist/features/relationship/plugins/index.js.map +1 -1
  473. package/dist/features/relationship/utils/EnabledRelationshipsCondition.js.map +1 -1
  474. package/dist/features/shared/slashMenu/basicGroup.js.map +1 -1
  475. package/dist/features/shared/toolbar/addDropdownGroup.js.map +1 -1
  476. package/dist/features/shared/toolbar/featureButtonsGroup.js.map +1 -1
  477. package/dist/features/shared/toolbar/textDropdownGroup.js.map +1 -1
  478. package/dist/features/toolbars/fixed/Toolbar/index.d.ts +1 -1
  479. package/dist/features/toolbars/fixed/Toolbar/index.d.ts.map +1 -1
  480. package/dist/features/toolbars/fixed/Toolbar/index.js.map +1 -1
  481. package/dist/features/toolbars/fixed/feature.client.d.ts +1 -2
  482. package/dist/features/toolbars/fixed/feature.client.d.ts.map +1 -1
  483. package/dist/features/toolbars/fixed/feature.client.js +9 -16
  484. package/dist/features/toolbars/fixed/feature.client.js.map +1 -1
  485. package/dist/features/toolbars/fixed/feature.server.d.ts +1 -2
  486. package/dist/features/toolbars/fixed/feature.server.d.ts.map +1 -1
  487. package/dist/features/toolbars/fixed/feature.server.js +16 -18
  488. package/dist/features/toolbars/fixed/feature.server.js.map +1 -1
  489. package/dist/features/toolbars/inline/Toolbar/index.d.ts +1 -1
  490. package/dist/features/toolbars/inline/Toolbar/index.d.ts.map +1 -1
  491. package/dist/features/toolbars/inline/Toolbar/index.js.map +1 -1
  492. package/dist/features/toolbars/inline/feature.client.d.ts +1 -2
  493. package/dist/features/toolbars/inline/feature.client.d.ts.map +1 -1
  494. package/dist/features/toolbars/inline/feature.client.js +9 -16
  495. package/dist/features/toolbars/inline/feature.client.js.map +1 -1
  496. package/dist/features/toolbars/inline/feature.server.d.ts +1 -2
  497. package/dist/features/toolbars/inline/feature.server.d.ts.map +1 -1
  498. package/dist/features/toolbars/inline/feature.server.js +8 -13
  499. package/dist/features/toolbars/inline/feature.server.js.map +1 -1
  500. package/dist/features/toolbars/shared/ToolbarButton/index.d.ts.map +1 -1
  501. package/dist/features/toolbars/shared/ToolbarButton/index.js.map +1 -1
  502. package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js.map +1 -1
  503. package/dist/features/toolbars/shared/ToolbarDropdown/index.d.ts.map +1 -1
  504. package/dist/features/toolbars/shared/ToolbarDropdown/index.js.map +1 -1
  505. package/dist/features/toolbars/types.d.ts +37 -5
  506. package/dist/features/toolbars/types.d.ts.map +1 -1
  507. package/dist/features/toolbars/types.js.map +1 -1
  508. package/dist/features/typeUtilities.d.ts +1 -1
  509. package/dist/features/typeUtilities.d.ts.map +1 -1
  510. package/dist/features/typeUtilities.js.map +1 -1
  511. package/dist/features/typesClient.d.ts +182 -0
  512. package/dist/features/typesClient.d.ts.map +1 -0
  513. package/dist/features/typesClient.js +3 -0
  514. package/dist/features/typesClient.js.map +1 -0
  515. package/dist/features/{types.d.ts → typesServer.d.ts} +40 -193
  516. package/dist/features/typesServer.d.ts.map +1 -0
  517. package/dist/features/typesServer.js +3 -0
  518. package/dist/features/typesServer.js.map +1 -0
  519. package/dist/features/upload/component/ExtraFieldsDrawer/index.js.map +1 -1
  520. package/dist/features/upload/component/index.d.ts.map +1 -1
  521. package/dist/features/upload/component/index.js +1 -1
  522. package/dist/features/upload/component/index.js.map +1 -1
  523. package/dist/features/upload/drawer/commands.js.map +1 -1
  524. package/dist/features/upload/drawer/index.d.ts.map +1 -1
  525. package/dist/features/upload/drawer/index.js.map +1 -1
  526. package/dist/features/upload/feature.client.d.ts +1 -2
  527. package/dist/features/upload/feature.client.d.ts.map +1 -1
  528. package/dist/features/upload/feature.client.js +62 -69
  529. package/dist/features/upload/feature.client.js.map +1 -1
  530. package/dist/features/upload/feature.server.d.ts +3 -4
  531. package/dist/features/upload/feature.server.d.ts.map +1 -1
  532. package/dist/features/upload/feature.server.js +166 -168
  533. package/dist/features/upload/feature.server.js.map +1 -1
  534. package/dist/features/upload/graphQLPopulationPromise.d.ts +1 -1
  535. package/dist/features/upload/graphQLPopulationPromise.d.ts.map +1 -1
  536. package/dist/features/upload/graphQLPopulationPromise.js.map +1 -1
  537. package/dist/features/upload/i18n.js.map +1 -1
  538. package/dist/features/upload/nodes/UploadNode.d.ts +6 -2
  539. package/dist/features/upload/nodes/UploadNode.d.ts.map +1 -1
  540. package/dist/features/upload/nodes/UploadNode.js +1 -1
  541. package/dist/features/upload/nodes/UploadNode.js.map +1 -1
  542. package/dist/features/upload/plugin/index.d.ts +1 -1
  543. package/dist/features/upload/plugin/index.d.ts.map +1 -1
  544. package/dist/features/upload/plugin/index.js.map +1 -1
  545. package/dist/features/upload/validate.d.ts +1 -1
  546. package/dist/features/upload/validate.d.ts.map +1 -1
  547. package/dist/features/upload/validate.js.map +1 -1
  548. package/dist/field/Field.d.ts.map +1 -1
  549. package/dist/field/Field.js.map +1 -1
  550. package/dist/field/index.d.ts.map +1 -1
  551. package/dist/field/index.js +9 -7
  552. package/dist/field/index.js.map +1 -1
  553. package/dist/i18n.js.map +1 -1
  554. package/dist/index.d.ts +12 -8
  555. package/dist/index.d.ts.map +1 -1
  556. package/dist/index.js +19 -17
  557. package/dist/index.js.map +1 -1
  558. package/dist/lexical/EditorPlugin.d.ts +1 -1
  559. package/dist/lexical/EditorPlugin.d.ts.map +1 -1
  560. package/dist/lexical/EditorPlugin.js.map +1 -1
  561. package/dist/lexical/LexicalEditor.js.map +1 -1
  562. package/dist/lexical/LexicalProvider.js.map +1 -1
  563. package/dist/lexical/config/client/EditorConfigProvider.d.ts.map +1 -1
  564. package/dist/lexical/config/client/EditorConfigProvider.js.map +1 -1
  565. package/dist/lexical/config/client/default.js.map +1 -1
  566. package/dist/lexical/config/client/loader.d.ts +1 -1
  567. package/dist/lexical/config/client/loader.d.ts.map +1 -1
  568. package/dist/lexical/config/client/loader.js +2 -2
  569. package/dist/lexical/config/client/loader.js.map +1 -1
  570. package/dist/lexical/config/client/sanitize.d.ts +1 -1
  571. package/dist/lexical/config/client/sanitize.d.ts.map +1 -1
  572. package/dist/lexical/config/client/sanitize.js +1 -1
  573. package/dist/lexical/config/client/sanitize.js.map +1 -1
  574. package/dist/lexical/config/server/default.d.ts +2 -2
  575. package/dist/lexical/config/server/default.d.ts.map +1 -1
  576. package/dist/lexical/config/server/default.js.map +1 -1
  577. package/dist/lexical/config/server/loader.d.ts +2 -2
  578. package/dist/lexical/config/server/loader.d.ts.map +1 -1
  579. package/dist/lexical/config/server/loader.js +2 -2
  580. package/dist/lexical/config/server/loader.js.map +1 -1
  581. package/dist/lexical/config/server/sanitize.d.ts +1 -1
  582. package/dist/lexical/config/server/sanitize.d.ts.map +1 -1
  583. package/dist/lexical/config/server/sanitize.js.map +1 -1
  584. package/dist/lexical/config/types.d.ts +4 -3
  585. package/dist/lexical/config/types.d.ts.map +1 -1
  586. package/dist/lexical/config/types.js.map +1 -1
  587. package/dist/lexical/nodes/index.js.map +1 -1
  588. package/dist/lexical/plugins/MarkdownShortcut/index.js.map +1 -1
  589. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js.map +1 -1
  590. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.js.map +1 -1
  591. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.d.ts +16 -1
  592. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.d.ts.map +1 -1
  593. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.js.map +1 -1
  594. package/dist/lexical/plugins/SlashMenu/index.js.map +1 -1
  595. package/dist/lexical/plugins/SlashMenu/useMenuTriggerMatch.js.map +1 -1
  596. package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.js.map +1 -1
  597. package/dist/lexical/plugins/handles/DraggableBlockPlugin/debounce.js.map +1 -1
  598. package/dist/lexical/plugins/handles/DraggableBlockPlugin/getBoundingRectWithoutTransform.js.map +1 -1
  599. package/dist/lexical/plugins/handles/DraggableBlockPlugin/highlightElemOriginalPosition.js.map +1 -1
  600. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js.map +1 -1
  601. package/dist/lexical/plugins/handles/DraggableBlockPlugin/setTargetLine.d.ts +0 -1
  602. package/dist/lexical/plugins/handles/DraggableBlockPlugin/setTargetLine.d.ts.map +1 -1
  603. package/dist/lexical/plugins/handles/DraggableBlockPlugin/setTargetLine.js.map +1 -1
  604. package/dist/lexical/plugins/handles/utils/calculateDistanceFromScrollerElem.js.map +1 -1
  605. package/dist/lexical/plugins/handles/utils/doesLineHeightAffectElement.js.map +1 -1
  606. package/dist/lexical/plugins/handles/utils/getCollapsedMargins.js.map +1 -1
  607. package/dist/lexical/plugins/handles/utils/getNodeCloseToPoint.js.map +1 -1
  608. package/dist/lexical/plugins/handles/utils/getTopLevelNodeKeys.js.map +1 -1
  609. package/dist/lexical/plugins/handles/utils/isOnHandleElement.js.map +1 -1
  610. package/dist/lexical/plugins/handles/utils/setHandlePosition.js.map +1 -1
  611. package/dist/lexical/theme/EditorTheme.js.map +1 -1
  612. package/dist/lexical/ui/ContentEditable.js.map +1 -1
  613. package/dist/lexical/ui/icons/AI/index.js.map +1 -1
  614. package/dist/lexical/ui/icons/Add/index.js.map +1 -1
  615. package/dist/lexical/ui/icons/AlignCenter/index.js.map +1 -1
  616. package/dist/lexical/ui/icons/AlignJustify/index.js.map +1 -1
  617. package/dist/lexical/ui/icons/AlignLeft/index.js.map +1 -1
  618. package/dist/lexical/ui/icons/AlignRight/index.js.map +1 -1
  619. package/dist/lexical/ui/icons/Block/index.js.map +1 -1
  620. package/dist/lexical/ui/icons/Blockquote/index.js.map +1 -1
  621. package/dist/lexical/ui/icons/Bold/index.js.map +1 -1
  622. package/dist/lexical/ui/icons/Checklist/index.js.map +1 -1
  623. package/dist/lexical/ui/icons/Code/index.js.map +1 -1
  624. package/dist/lexical/ui/icons/CodeBlock/index.js.map +1 -1
  625. package/dist/lexical/ui/icons/H1/index.js.map +1 -1
  626. package/dist/lexical/ui/icons/H2/index.js.map +1 -1
  627. package/dist/lexical/ui/icons/H3/index.js.map +1 -1
  628. package/dist/lexical/ui/icons/H4/index.js.map +1 -1
  629. package/dist/lexical/ui/icons/H5/index.js.map +1 -1
  630. package/dist/lexical/ui/icons/H6/index.js.map +1 -1
  631. package/dist/lexical/ui/icons/HorizontalRule/index.js.map +1 -1
  632. package/dist/lexical/ui/icons/IndentDecrease/index.js.map +1 -1
  633. package/dist/lexical/ui/icons/IndentIncrease/index.js.map +1 -1
  634. package/dist/lexical/ui/icons/Italic/index.js.map +1 -1
  635. package/dist/lexical/ui/icons/Link/index.js.map +1 -1
  636. package/dist/lexical/ui/icons/OrderedList/index.js.map +1 -1
  637. package/dist/lexical/ui/icons/Relationship/index.js.map +1 -1
  638. package/dist/lexical/ui/icons/Strikethrough/index.js.map +1 -1
  639. package/dist/lexical/ui/icons/Subscript/index.js.map +1 -1
  640. package/dist/lexical/ui/icons/Superscript/index.js.map +1 -1
  641. package/dist/lexical/ui/icons/Text/index.js.map +1 -1
  642. package/dist/lexical/ui/icons/Underline/index.js.map +1 -1
  643. package/dist/lexical/ui/icons/UnorderedList/index.js.map +1 -1
  644. package/dist/lexical/ui/icons/Upload/index.js.map +1 -1
  645. package/dist/lexical/utils/canUseDOM.js.map +1 -1
  646. package/dist/lexical/utils/cloneDeep.js.map +1 -1
  647. package/dist/lexical/utils/environment.js.map +1 -1
  648. package/dist/lexical/utils/getDOMRangeRect.js.map +1 -1
  649. package/dist/lexical/utils/getSelectedNode.js.map +1 -1
  650. package/dist/lexical/utils/guard.js.map +1 -1
  651. package/dist/lexical/utils/invariant.js.map +1 -1
  652. package/dist/lexical/utils/joinClasses.js.map +1 -1
  653. package/dist/lexical/utils/markdown/createBlockNode.d.ts +1 -1
  654. package/dist/lexical/utils/markdown/createBlockNode.d.ts.map +1 -1
  655. package/dist/lexical/utils/markdown/createBlockNode.js.map +1 -1
  656. package/dist/lexical/utils/nodeFormat.js.map +1 -1
  657. package/dist/lexical/utils/point.js.map +1 -1
  658. package/dist/lexical/utils/rect.js.map +1 -1
  659. package/dist/lexical/utils/setFloatingElemPosition.js.map +1 -1
  660. package/dist/lexical/utils/setFloatingElemPositionForLinkEditor.js.map +1 -1
  661. package/dist/lexical/utils/swipe.js.map +1 -1
  662. package/dist/lexical/utils/url.js.map +1 -1
  663. package/dist/nodeTypes.d.ts +27 -0
  664. package/dist/nodeTypes.d.ts.map +1 -0
  665. package/dist/nodeTypes.js +3 -0
  666. package/dist/nodeTypes.js.map +1 -0
  667. package/dist/populateGraphQL/defaultValue.js.map +1 -1
  668. package/dist/populateGraphQL/populate.d.ts.map +1 -1
  669. package/dist/populateGraphQL/populate.js.map +1 -1
  670. package/dist/populateGraphQL/populateLexicalPopulationPromises.d.ts +1 -1
  671. package/dist/populateGraphQL/populateLexicalPopulationPromises.d.ts.map +1 -1
  672. package/dist/populateGraphQL/populateLexicalPopulationPromises.js.map +1 -1
  673. package/dist/populateGraphQL/recursivelyPopulateFieldsForGraphQL.d.ts +1 -1
  674. package/dist/populateGraphQL/recursivelyPopulateFieldsForGraphQL.d.ts.map +1 -1
  675. package/dist/populateGraphQL/recursivelyPopulateFieldsForGraphQL.js.map +1 -1
  676. package/dist/types.d.ts +7 -7
  677. package/dist/types.d.ts.map +1 -1
  678. package/dist/types.js.map +1 -1
  679. package/dist/utilities/createClientFeature.d.ts +13 -0
  680. package/dist/utilities/createClientFeature.d.ts.map +1 -0
  681. package/dist/utilities/createClientFeature.js +30 -0
  682. package/dist/utilities/createClientFeature.js.map +1 -0
  683. package/dist/utilities/createServerFeature.d.ts +16 -0
  684. package/dist/utilities/createServerFeature.d.ts.map +1 -0
  685. package/dist/utilities/createServerFeature.js +34 -0
  686. package/dist/utilities/createServerFeature.js.map +1 -0
  687. package/dist/utilities/forEachNodeRecursively.js.map +1 -1
  688. package/dist/utilities/generateComponentMap.d.ts +2 -2
  689. package/dist/utilities/generateComponentMap.d.ts.map +1 -1
  690. package/dist/utilities/generateComponentMap.js +4 -4
  691. package/dist/utilities/generateComponentMap.js.map +1 -1
  692. package/dist/utilities/generateSchemaMap.d.ts +2 -2
  693. package/dist/utilities/generateSchemaMap.d.ts.map +1 -1
  694. package/dist/utilities/generateSchemaMap.js +1 -1
  695. package/dist/utilities/generateSchemaMap.js.map +1 -1
  696. package/dist/utilities/migrateSlateToLexical/index.d.ts +15 -0
  697. package/dist/utilities/migrateSlateToLexical/index.d.ts.map +1 -0
  698. package/dist/utilities/migrateSlateToLexical/index.js +105 -0
  699. package/dist/utilities/migrateSlateToLexical/index.js.map +1 -0
  700. package/dist/utilities/migrateSlateToLexical/recurse.d.ts +9 -0
  701. package/dist/utilities/migrateSlateToLexical/recurse.d.ts.map +1 -0
  702. package/dist/utilities/migrateSlateToLexical/recurse.js +77 -0
  703. package/dist/utilities/migrateSlateToLexical/recurse.js.map +1 -0
  704. package/dist/utilities/recurseNodeTree.js.map +1 -1
  705. package/dist/utilities/useLexicalFeature.d.ts +1 -1
  706. package/dist/utilities/useLexicalFeature.d.ts.map +1 -1
  707. package/dist/utilities/useLexicalFeature.js.map +1 -1
  708. package/dist/validate/index.js.map +1 -1
  709. package/dist/validate/validateNodes.d.ts +1 -1
  710. package/dist/validate/validateNodes.d.ts.map +1 -1
  711. package/dist/validate/validateNodes.js.map +1 -1
  712. package/package.json +10 -10
  713. package/dist/exports/client/Field-YMWNSE3A.js +0 -2
  714. package/dist/exports/client/Field-YMWNSE3A.js.map +0 -7
  715. package/dist/exports/client/chunk-MLIITFAS.js.map +0 -7
  716. package/dist/exports/client/chunk-OSR74ZNW.js.map +0 -7
  717. package/dist/exports/client/chunk-QU5MKT75.js.map +0 -7
  718. package/dist/exports/client/chunk-ZITHDR53.js +0 -2
  719. package/dist/exports/client/chunk-ZITHDR53.js.map +0 -7
  720. package/dist/exports/client/component-E2NHAHBC.js.map +0 -7
  721. package/dist/exports/client/component-X4LSLSWF.js +0 -2
  722. package/dist/exports/client/component-X4LSLSWF.js.map +0 -7
  723. package/dist/features/types.d.ts.map +0 -1
  724. package/dist/features/types.js +0 -3
  725. package/dist/features/types.js.map +0 -1
  726. /package/dist/exports/client/{RelationshipComponent-5OU5HATX.js.map → RelationshipComponent-AFXEJMZQ.js.map} +0 -0
  727. /package/dist/exports/client/{component-QWIGEOVD.js.map → component-VM36FRT2.js.map} +0 -0
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/field/Field.tsx", "../../../src/lexical/LexicalProvider.tsx", "../../../src/lexical/LexicalEditor.tsx", "../../../src/lexical/EditorPlugin.tsx", "../../../src/lexical/plugins/MarkdownShortcut/index.tsx", "../../../src/lexical/plugins/SlashMenu/index.tsx", "../../../src/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.tsx", "../../../src/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.tsx", "../../../src/lexical/plugins/SlashMenu/useMenuTriggerMatch.ts", "../../../src/lexical/plugins/handles/AddBlockHandlePlugin/index.tsx", "../../../src/lexical/plugins/handles/utils/calculateDistanceFromScrollerElem.ts", "../../../src/lexical/plugins/handles/utils/getNodeCloseToPoint.ts", "../../../src/lexical/plugins/handles/DraggableBlockPlugin/getBoundingRectWithoutTransform.ts", "../../../src/lexical/plugins/handles/utils/getCollapsedMargins.ts", "../../../src/lexical/plugins/handles/utils/getTopLevelNodeKeys.ts", "../../../src/lexical/plugins/handles/utils/isOnHandleElement.ts", "../../../src/lexical/plugins/handles/utils/doesLineHeightAffectElement.ts", "../../../src/lexical/plugins/handles/utils/setHandlePosition.ts", "../../../src/lexical/plugins/handles/DraggableBlockPlugin/index.tsx", "../../../src/lexical/plugins/handles/DraggableBlockPlugin/highlightElemOriginalPosition.ts", "../../../src/lexical/plugins/handles/DraggableBlockPlugin/setTargetLine.ts", "../../../src/lexical/ui/ContentEditable.tsx"],
4
- "sourcesContent": ["'use client'\nimport type { FormFieldBase } from '@payloadcms/ui'\nimport type { SerializedEditorState } from 'lexical'\n\nimport {\n FieldDescription,\n FieldError,\n FieldLabel,\n useField,\n useFieldProps,\n withCondition,\n} from '@payloadcms/ui'\nimport React, { useCallback } from 'react'\nimport { ErrorBoundary } from 'react-error-boundary'\n\nimport type { SanitizedClientEditorConfig } from '../lexical/config/types.js'\n\nimport { LexicalProvider } from '../lexical/LexicalProvider.js'\nimport './bundled.css'\nconst baseClass = 'rich-text-lexical'\n\nconst _RichText: React.FC<\n FormFieldBase & {\n editorConfig: SanitizedClientEditorConfig // With rendered features n stuff\n name: string\n richTextComponentMap: Map<string, React.ReactNode>\n width?: string\n }\n> = (props) => {\n const {\n name,\n CustomDescription,\n CustomError,\n CustomLabel,\n className,\n descriptionProps,\n editorConfig,\n errorProps,\n label,\n labelProps,\n path: pathFromProps,\n readOnly,\n required,\n style,\n validate, // Users can pass in client side validation if they WANT to, but it's not required anymore\n width,\n } = props\n\n const memoizedValidate = useCallback(\n (value, validationOptions) => {\n if (typeof validate === 'function') {\n return validate(value, { ...validationOptions, props, required })\n }\n },\n // Important: do not add props to the dependencies array.\n // This would cause an infinite loop and endless re-rendering.\n // Removing props from the dependencies array fixed this issue: https://github.com/payloadcms/payload/issues/3709\n [validate, required],\n )\n const { path: pathFromContext } = useFieldProps()\n\n const fieldType = useField<SerializedEditorState>({\n path: pathFromContext ?? pathFromProps ?? name,\n validate: memoizedValidate,\n })\n\n const { errorMessage, initialValue, path, schemaPath, setValue, showError, value } = fieldType\n\n const classes = [\n baseClass,\n 'field-type',\n className,\n showError && 'error',\n readOnly && `${baseClass}--read-only`,\n editorConfig?.admin?.hideGutter !== true ? `${baseClass}--show-gutter` : null,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <div\n className={classes}\n key={path}\n style={{\n ...style,\n width,\n }}\n >\n <FieldLabel\n CustomLabel={CustomLabel}\n label={label}\n required={required}\n {...(labelProps || {})}\n />\n <div className={`${baseClass}__wrap`}>\n <FieldError CustomError={CustomError} path={path} {...(errorProps || {})} />\n <ErrorBoundary fallbackRender={fallbackRender} onReset={() => {}}>\n <LexicalProvider\n editorConfig={editorConfig}\n fieldProps={props}\n key={JSON.stringify({ initialValue, path })} // makes sure lexical is completely re-rendered when initialValue changes, bypassing the lexical-internal value memoization. That way, external changes to the form will update the editor. More infos in PR description (https://github.com/payloadcms/payload/pull/5010)\n onChange={(editorState) => {\n let serializedEditorState = editorState.toJSON()\n\n // Transform state through save hooks\n if (editorConfig?.features?.hooks?.save?.length) {\n editorConfig.features.hooks.save.forEach((hook) => {\n serializedEditorState = hook({ incomingEditorState: serializedEditorState })\n })\n }\n\n setValue(serializedEditorState)\n }}\n path={path}\n readOnly={readOnly}\n value={value}\n />\n </ErrorBoundary>\n {CustomDescription !== undefined ? (\n CustomDescription\n ) : (\n <FieldDescription {...(descriptionProps || {})} />\n )}\n </div>\n </div>\n )\n}\n\nfunction fallbackRender({ error }): React.ReactElement {\n // Call resetErrorBoundary() to reset the error boundary and retry the render.\n\n return (\n <div className=\"errorBoundary\" role=\"alert\">\n <p>Something went wrong:</p>\n <pre style={{ color: 'red' }}>{error.message}</pre>\n </div>\n )\n}\n\nexport const RichText = withCondition(_RichText)\n", "'use client'\nimport type { InitialConfigType } from '@lexical/react/LexicalComposer.js'\nimport type { FormFieldBase } from '@payloadcms/ui'\nimport type { EditorState, LexicalEditor, SerializedEditorState } from 'lexical'\n\nimport { LexicalComposer } from '@lexical/react/LexicalComposer.js'\nimport * as React from 'react'\nimport { useMemo } from 'react'\n\nimport type { SanitizedClientEditorConfig } from './config/types.js'\n\nimport { LexicalEditor as LexicalEditorComponent } from './LexicalEditor.js'\nimport {\n EditorConfigProvider,\n useEditorConfigContext,\n} from './config/client/EditorConfigProvider.js'\nimport { getEnabledNodes } from './nodes/index.js'\n\nexport type LexicalProviderProps = {\n editorConfig: SanitizedClientEditorConfig\n fieldProps: FormFieldBase & {\n editorConfig: SanitizedClientEditorConfig // With rendered features n stuff\n name: string\n richTextComponentMap: Map<string, React.ReactNode>\n }\n onChange: (editorState: EditorState, editor: LexicalEditor, tags: Set<string>) => void\n path: string\n readOnly: boolean\n value: SerializedEditorState\n}\nexport const LexicalProvider: React.FC<LexicalProviderProps> = (props) => {\n const { editorConfig, fieldProps, onChange, path, readOnly, value } = props\n\n const parentContext = useEditorConfigContext()\n\n const editorContainerRef = React.useRef<HTMLDivElement>(null)\n\n const processedValue = useMemo(() => {\n let processed = value\n if (editorConfig?.features?.hooks?.load?.length) {\n editorConfig.features.hooks.load.forEach((hook) => {\n processed = hook({ incomingEditorState: processed })\n })\n }\n return processed\n }, [editorConfig, value])\n\n // useMemo for the initialConfig that depends on readOnly and processedValue\n const initialConfig = useMemo<InitialConfigType>(() => {\n if (processedValue && typeof processedValue !== 'object') {\n throw new Error(\n 'The value passed to the Lexical editor is not an object. This is not supported. Please remove the data from the field and start again. This is the value that was passed in: ' +\n JSON.stringify(processedValue),\n )\n }\n\n if (processedValue && Array.isArray(processedValue) && !('root' in processedValue)) {\n throw new Error(\n 'You have tried to pass in data from the old, Slate editor, to the new, Lexical editor. This is not supported. There is no automatic conversion from Slate to Lexical data available yet (coming soon). Please remove the data from the field and start again.',\n )\n }\n\n if (processedValue && 'jsonContent' in processedValue) {\n throw new Error(\n 'You have tried to pass in data from payload-plugin-lexical. This is not supported. The data structure has changed in this editor, compared to the plugin, and there is no automatic conversion available yet (coming soon). Please remove the data from the field and start again.',\n )\n }\n\n return {\n editable: readOnly !== true,\n editorState: processedValue != null ? JSON.stringify(processedValue) : undefined,\n namespace: editorConfig.lexical.namespace,\n nodes: [...getEnabledNodes({ editorConfig })],\n onError: (error: Error) => {\n throw error\n },\n theme: editorConfig.lexical.theme,\n }\n }, [editorConfig, processedValue, readOnly])\n\n if (!initialConfig) {\n return <p>Loading...</p>\n }\n\n return (\n <LexicalComposer initialConfig={initialConfig} key={path}>\n <EditorConfigProvider\n editorConfig={editorConfig}\n editorContainerRef={editorContainerRef}\n fieldProps={fieldProps}\n parentContext={parentContext}\n >\n <LexicalEditorComponent\n editorConfig={editorConfig}\n editorContainerRef={editorContainerRef}\n onChange={onChange}\n />\n </EditorConfigProvider>\n </LexicalComposer>\n )\n}\n", "'use client'\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { LexicalErrorBoundary } from '@lexical/react/LexicalErrorBoundary.js'\nimport { HistoryPlugin } from '@lexical/react/LexicalHistoryPlugin.js'\nimport { OnChangePlugin } from '@lexical/react/LexicalOnChangePlugin.js'\nimport { RichTextPlugin } from '@lexical/react/LexicalRichTextPlugin.js'\nimport { TabIndentationPlugin } from '@lexical/react/LexicalTabIndentationPlugin.js'\nimport { useTranslation } from '@payloadcms/ui'\nimport { BLUR_COMMAND, COMMAND_PRIORITY_LOW, FOCUS_COMMAND } from 'lexical'\nimport * as React from 'react'\nimport { useEffect, useState } from 'react'\n\nimport type { LexicalProviderProps } from './LexicalProvider.js'\n\nimport { EditorPlugin } from './EditorPlugin.js'\nimport { useEditorConfigContext } from './config/client/EditorConfigProvider.js'\nimport { MarkdownShortcutPlugin } from './plugins/MarkdownShortcut/index.js'\nimport { SlashMenuPlugin } from './plugins/SlashMenu/index.js'\nimport { AddBlockHandlePlugin } from './plugins/handles/AddBlockHandlePlugin/index.js'\nimport { DraggableBlockPlugin } from './plugins/handles/DraggableBlockPlugin/index.js'\nimport { LexicalContentEditable } from './ui/ContentEditable.js'\n\nexport const LexicalEditor: React.FC<\n Pick<LexicalProviderProps, 'editorConfig' | 'onChange'> & {\n editorContainerRef: React.RefObject<HTMLDivElement>\n }\n> = (props) => {\n const { editorConfig, editorContainerRef, onChange } = props\n const editorConfigContext = useEditorConfigContext()\n const [editor] = useLexicalComposerContext()\n const { t } = useTranslation<{}, string>()\n\n const [floatingAnchorElem, setFloatingAnchorElem] = useState<HTMLDivElement | null>(null)\n const onRef = (_floatingAnchorElem: HTMLDivElement) => {\n if (_floatingAnchorElem !== null) {\n setFloatingAnchorElem(_floatingAnchorElem)\n }\n }\n\n useEffect(() => {\n if (!editorConfigContext?.uuid) {\n console.error('Lexical Editor must be used within an EditorConfigProvider')\n return\n }\n if (editorConfigContext?.parentEditor?.uuid) {\n editorConfigContext.parentEditor?.registerChild(editorConfigContext.uuid, editorConfigContext)\n }\n\n const handleFocus = () => {\n editorConfigContext.focusEditor(editorConfigContext)\n }\n\n const handleBlur = () => {\n editorConfigContext.blurEditor(editorConfigContext)\n }\n\n const unregisterFocus = editor.registerCommand<MouseEvent>(\n FOCUS_COMMAND,\n () => {\n handleFocus()\n return true\n },\n COMMAND_PRIORITY_LOW,\n )\n\n const unregisterBlur = editor.registerCommand<MouseEvent>(\n BLUR_COMMAND,\n () => {\n handleBlur()\n return true\n },\n COMMAND_PRIORITY_LOW,\n )\n\n return () => {\n unregisterFocus()\n unregisterBlur()\n editorConfigContext.parentEditor?.unregisterChild?.(editorConfigContext.uuid)\n }\n }, [editor, editorConfigContext])\n\n const [isSmallWidthViewport, setIsSmallWidthViewport] = useState<boolean>(false)\n\n useEffect(() => {\n const updateViewPortWidth = () => {\n const isNextSmallWidthViewport = window.matchMedia('(max-width: 768px)').matches\n\n if (isNextSmallWidthViewport !== isSmallWidthViewport) {\n setIsSmallWidthViewport(isNextSmallWidthViewport)\n }\n }\n updateViewPortWidth()\n window.addEventListener('resize', updateViewPortWidth)\n\n return () => {\n window.removeEventListener('resize', updateViewPortWidth)\n }\n }, [isSmallWidthViewport])\n\n return (\n <React.Fragment>\n {editorConfig.features.plugins.map((plugin) => {\n if (plugin.position === 'aboveContainer') {\n return <EditorPlugin clientProps={plugin.clientProps} key={plugin.key} plugin={plugin} />\n }\n })}\n <div className=\"editor-container\" ref={editorContainerRef}>\n {editorConfig.features.plugins.map((plugin) => {\n if (plugin.position === 'top') {\n return (\n <EditorPlugin clientProps={plugin.clientProps} key={plugin.key} plugin={plugin} />\n )\n }\n })}\n <RichTextPlugin\n ErrorBoundary={LexicalErrorBoundary}\n contentEditable={\n <div className=\"editor-scroller\">\n <div className=\"editor\" ref={onRef}>\n <LexicalContentEditable />\n </div>\n </div>\n }\n placeholder={<p className=\"editor-placeholder\">{t('lexical:general:placeholder')}</p>}\n />\n <OnChangePlugin\n // Selection changes can be ignored here, reducing the\n // frequency that the FieldComponent and Payload receive updates.\n // Selection changes are only needed if you are saving selection state\n ignoreSelectionChange\n onChange={(editorState, editor, tags) => {\n // Ignore any onChange event triggered by focus only\n if (!tags.has('focus') || tags.size > 1) {\n if (onChange != null) onChange(editorState, editor, tags)\n }\n }}\n />\n {floatingAnchorElem && (\n <React.Fragment>\n {!isSmallWidthViewport && editor.isEditable() && (\n <React.Fragment>\n <DraggableBlockPlugin anchorElem={floatingAnchorElem} />\n <AddBlockHandlePlugin anchorElem={floatingAnchorElem} />\n </React.Fragment>\n )}\n {editorConfig.features.plugins.map((plugin) => {\n if (\n plugin.position === 'floatingAnchorElem' &&\n !(plugin.desktopOnly === true && isSmallWidthViewport)\n ) {\n return (\n <EditorPlugin\n anchorElem={floatingAnchorElem}\n clientProps={plugin.clientProps}\n key={plugin.key}\n plugin={plugin}\n />\n )\n }\n })}\n {editor.isEditable() && (\n <React.Fragment>\n <SlashMenuPlugin anchorElem={floatingAnchorElem} />\n </React.Fragment>\n )}\n </React.Fragment>\n )}\n {editor.isEditable() && (\n <React.Fragment>\n <HistoryPlugin />\n {editorConfig?.features?.markdownTransformers?.length > 0 && <MarkdownShortcutPlugin />}\n </React.Fragment>\n )}\n\n <TabIndentationPlugin />\n {editorConfig.features.plugins.map((plugin) => {\n if (plugin.position === 'normal') {\n return (\n <EditorPlugin clientProps={plugin.clientProps} key={plugin.key} plugin={plugin} />\n )\n }\n })}\n {editorConfig.features.plugins.map((plugin) => {\n if (plugin.position === 'bottom') {\n return (\n <EditorPlugin clientProps={plugin.clientProps} key={plugin.key} plugin={plugin} />\n )\n }\n })}\n </div>\n {editorConfig.features.plugins.map((plugin) => {\n if (plugin.position === 'belowContainer') {\n return <EditorPlugin clientProps={plugin.clientProps} key={plugin.key} plugin={plugin} />\n }\n })}\n </React.Fragment>\n )\n}\n", "import React from 'react'\n\nimport type { SanitizedPlugin } from '../features/types.js'\n\nexport const EditorPlugin: React.FC<{\n anchorElem?: HTMLDivElement\n clientProps: unknown\n plugin: SanitizedPlugin\n}> = ({ anchorElem, clientProps, plugin }) => {\n if (plugin.position === 'floatingAnchorElem') {\n return (\n plugin.Component && <plugin.Component anchorElem={anchorElem} clientProps={clientProps} />\n )\n }\n\n return plugin.Component && <plugin.Component clientProps={clientProps} />\n}\n", "'use client'\n\nimport { MarkdownShortcutPlugin as LexicalMarkdownShortcutPlugin } from '@lexical/react/LexicalMarkdownShortcutPlugin.js'\nimport * as React from 'react'\n\nimport { useEditorConfigContext } from '../../config/client/EditorConfigProvider.js'\n\nexport const MarkdownShortcutPlugin: React.FC = () => {\n const { editorConfig } = useEditorConfigContext()\n\n return <LexicalMarkdownShortcutPlugin transformers={editorConfig.features.markdownTransformers} />\n}\n", "'use client'\nimport type { TextNode } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { useTranslation } from '@payloadcms/ui'\nimport { useCallback, useMemo, useState } from 'react'\nimport * as React from 'react'\nimport * as ReactDOM from 'react-dom'\n\nimport type {\n SlashMenuGroup,\n SlashMenuGroupInternal,\n SlashMenuItemInternal,\n SlashMenuItem as SlashMenuItemType,\n} from './LexicalTypeaheadMenuPlugin/types.js'\n\nimport { useEditorConfigContext } from '../../config/client/EditorConfigProvider.js'\nimport { LexicalTypeaheadMenuPlugin } from './LexicalTypeaheadMenuPlugin/index.js'\nimport { useMenuTriggerMatch } from './useMenuTriggerMatch.js'\n\nconst baseClass = 'slash-menu-popup'\n\nfunction SlashMenuItem({\n isSelected,\n item,\n onClick,\n onMouseEnter,\n}: {\n index: number\n isSelected: boolean\n item: SlashMenuItemInternal\n onClick: () => void\n onMouseEnter: () => void\n}) {\n const { i18n } = useTranslation()\n\n let className = `${baseClass}__item ${baseClass}__item-${item.key}`\n if (isSelected) {\n className += ` ${baseClass}__item--selected`\n }\n\n let title = item.key\n if (item.label) {\n title = typeof item.label === 'function' ? item.label({ i18n }) : item.label\n }\n // Crop title to max. 25 characters\n if (title.length > 25) {\n title = title.substring(0, 25) + '...'\n }\n\n return (\n <button\n aria-selected={isSelected}\n className={className}\n id={baseClass + '__item-' + item.key}\n key={item.key}\n onClick={onClick}\n onMouseEnter={onMouseEnter}\n ref={item.ref}\n role=\"option\"\n tabIndex={-1}\n type=\"button\"\n >\n {item?.Icon && <item.Icon />}\n\n <span className={`${baseClass}__item-text`}>{title}</span>\n </button>\n )\n}\n\nexport function SlashMenuPlugin({\n anchorElem = document.body,\n}: {\n anchorElem?: HTMLElement\n}): React.ReactElement {\n const [editor] = useLexicalComposerContext()\n const [queryString, setQueryString] = useState<null | string>(null)\n const { editorConfig } = useEditorConfigContext()\n const { i18n } = useTranslation()\n\n const checkForTriggerMatch = useMenuTriggerMatch('/', {\n minLength: 0,\n })\n\n const getDynamicItems = useCallback(() => {\n let groupWithItems: Array<SlashMenuGroup> = []\n\n for (const dynamicItem of editorConfig.features.slashMenu.dynamicGroups) {\n const dynamicGroupWithItems = dynamicItem({\n editor,\n queryString,\n })\n groupWithItems = groupWithItems.concat(dynamicGroupWithItems)\n }\n\n return groupWithItems\n }, [editor, queryString, editorConfig?.features])\n\n const groups: SlashMenuGroup[] = useMemo(() => {\n let groupsWithItems: SlashMenuGroup[] = []\n for (const groupWithItem of editorConfig?.features.slashMenu.groups ?? []) {\n groupsWithItems.push(groupWithItem)\n }\n\n if (queryString) {\n // Filter current groups first\n groupsWithItems = groupsWithItems.map((group) => {\n const filteredItems = group.items.filter((item) => {\n let itemTitle = item.key\n if (item.label) {\n itemTitle = typeof item.label === 'function' ? item.label({ i18n }) : item.label\n }\n\n if (new RegExp(queryString, 'gi').exec(itemTitle)) {\n return true\n }\n if (item.keywords != null) {\n return item.keywords.some((keyword) => new RegExp(queryString, 'gi').exec(keyword))\n }\n return false\n })\n if (filteredItems.length) {\n return {\n ...group,\n items: filteredItems,\n }\n }\n return null\n })\n\n groupsWithItems = groupsWithItems.filter((group) => group != null)\n\n // Now add dynamic groups\n const dynamicItemGroups = getDynamicItems()\n\n // merge dynamic items into groups\n for (const dynamicGroup of dynamicItemGroups) {\n // 1. find the group with the same name or create new one\n let group = groupsWithItems.find((group) => group.key === dynamicGroup.key)\n if (!group) {\n group = {\n ...dynamicGroup,\n items: [],\n }\n } else {\n groupsWithItems = groupsWithItems.filter((group) => group.key !== dynamicGroup.key)\n }\n\n // 2. Add items to group items array and add to sanitized.slashMenu.groupsWithItems\n if (group?.items?.length) {\n group.items = group.items.concat(group.items)\n }\n groupsWithItems.push(group)\n }\n }\n\n return groupsWithItems\n }, [getDynamicItems, queryString, editorConfig?.features, i18n])\n\n const onSelectItem = useCallback(\n (\n selectedItem: SlashMenuItemType,\n nodeToRemove: TextNode | null,\n closeMenu: () => void,\n matchingString: string,\n ) => {\n if (nodeToRemove) {\n editor.update(() => {\n nodeToRemove.remove()\n })\n }\n selectedItem.onSelect({ editor, queryString: matchingString })\n\n closeMenu()\n },\n [editor],\n )\n\n return (\n <React.Fragment>\n <LexicalTypeaheadMenuPlugin\n anchorElem={anchorElem}\n groups={groups as SlashMenuGroupInternal[]}\n menuRenderFn={(\n anchorElementRef,\n { selectItemAndCleanUp, selectedItemKey, setSelectedItemKey },\n ) =>\n anchorElementRef.current && groups.length\n ? ReactDOM.createPortal(\n <div className={baseClass}>\n {groups.map((group) => {\n let groupTitle = group.key\n if (group.label) {\n groupTitle =\n typeof group.label === 'function' ? group.label({ i18n }) : group.label\n }\n\n return (\n <div\n className={`${baseClass}__group ${baseClass}__group-${group.key}`}\n key={group.key}\n >\n <div className={`${baseClass}__group-title`}>{groupTitle}</div>\n {group.items.map((item, oi: number) => (\n <SlashMenuItem\n index={oi}\n isSelected={selectedItemKey === item.key}\n item={item as SlashMenuItemInternal}\n key={item.key}\n onClick={() => {\n setSelectedItemKey(item.key)\n selectItemAndCleanUp(item)\n }}\n onMouseEnter={() => {\n setSelectedItemKey(item.key)\n }}\n />\n ))}\n </div>\n )\n })}\n </div>,\n anchorElementRef.current,\n )\n : null\n }\n onQueryChange={setQueryString}\n onSelectItem={onSelectItem}\n triggerFn={checkForTriggerMatch}\n />\n </React.Fragment>\n )\n}\n", "'use client'\nimport type {\n LexicalCommand,\n LexicalEditor,\n ParagraphNode,\n RangeSelection,\n TextNode,\n} from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { mergeRegister } from '@lexical/utils'\nimport {\n $getSelection,\n $isRangeSelection,\n $isTextNode,\n COMMAND_PRIORITY_LOW,\n createCommand,\n} from 'lexical'\nimport { type JSX, useCallback, useEffect, useState } from 'react'\nimport * as React from 'react'\n\nimport type { MenuTextMatch, TriggerFn } from '../useMenuTriggerMatch.js'\nimport type { MenuRenderFn, MenuResolution } from './LexicalMenu.js'\nimport type { SlashMenuGroup, SlashMenuGroupInternal, SlashMenuItem } from './types.js'\n\nimport { LexicalMenu, useMenuAnchorRef } from './LexicalMenu.js'\n\nexport const PUNCTUATION = '\\\\.,\\\\+\\\\*\\\\?\\\\$\\\\@\\\\|#{}\\\\(\\\\)\\\\^\\\\-\\\\[\\\\]\\\\\\\\/!%\\'\"~=<>_:;'\n\nfunction getTextUpToAnchor(selection: RangeSelection): null | string {\n const anchor = selection.anchor\n if (anchor.type !== 'text') {\n return null\n }\n const anchorNode = anchor.getNode()\n if (!anchorNode.isSimpleText()) {\n return null\n }\n const anchorOffset = anchor.offset\n return anchorNode.getTextContent().slice(0, anchorOffset)\n}\n\nfunction tryToPositionRange(leadOffset: number, range: Range, editorWindow: Window): boolean {\n const domSelection = editorWindow.getSelection()\n if (domSelection === null || !domSelection.isCollapsed) {\n return false\n }\n const anchorNode = domSelection.anchorNode\n const startOffset = leadOffset\n const endOffset = domSelection.anchorOffset\n\n if (anchorNode == null || endOffset == null) {\n return false\n }\n\n try {\n range.setStart(anchorNode, startOffset)\n // if endOffset is 0, positioning the range for when you click the plus button to open the slash menu will fial\n range.setEnd(anchorNode, endOffset > 1 ? endOffset : 1)\n } catch (error) {\n return false\n }\n\n return true\n}\n\nfunction getQueryTextForSearch(editor: LexicalEditor): null | string {\n let text = null\n editor.getEditorState().read(() => {\n const selection = $getSelection()\n if (!$isRangeSelection(selection)) {\n return\n }\n text = getTextUpToAnchor(selection)\n })\n return text\n}\n\nfunction isSelectionOnEntityBoundary(editor: LexicalEditor, offset: number): boolean {\n if (offset !== 0) {\n return false\n }\n return editor.getEditorState().read(() => {\n const selection = $getSelection()\n if ($isRangeSelection(selection)) {\n const anchor = selection.anchor\n const anchorNode = anchor.getNode()\n const prevSibling = anchorNode.getPreviousSibling()\n return $isTextNode(prevSibling) && prevSibling.isTextEntity()\n }\n return false\n })\n}\n\nfunction startTransition(callback: () => void) {\n if (React.startTransition) {\n React.startTransition(callback)\n } else {\n callback()\n }\n}\n\n// Got from https://stackoverflow.com/a/42543908/2013580\nexport function getScrollParent(\n element: HTMLElement,\n includeHidden: boolean,\n): HTMLBodyElement | HTMLElement {\n let style = getComputedStyle(element)\n const excludeStaticParent = style.position === 'absolute'\n const overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/\n if (style.position === 'fixed') {\n return document.body\n }\n for (let parent: HTMLElement | null = element; (parent = parent.parentElement); ) {\n style = getComputedStyle(parent)\n if (excludeStaticParent && style.position === 'static') {\n continue\n }\n if (overflowRegex.test(style.overflow + style.overflowY + style.overflowX)) {\n return parent\n }\n }\n return document.body\n}\n\nexport { useDynamicPositioning } from './LexicalMenu.js'\n\nexport type TypeaheadMenuPluginProps = {\n anchorClassName?: string\n anchorElem: HTMLElement\n groups: Array<SlashMenuGroupInternal>\n menuRenderFn: MenuRenderFn\n onClose?: () => void\n onOpen?: (resolution: MenuResolution) => void\n onQueryChange: (matchingString: null | string) => void\n onSelectItem: (\n item: SlashMenuItem,\n textNodeContainingQuery: TextNode | null,\n closeMenu: () => void,\n matchingString: string,\n ) => void\n triggerFn: TriggerFn\n}\n\nexport const ENABLE_SLASH_MENU_COMMAND: LexicalCommand<{\n node: ParagraphNode\n}> = createCommand('ENABLE_SLASH_MENU_COMMAND')\n\nexport function LexicalTypeaheadMenuPlugin({\n anchorClassName,\n anchorElem,\n groups,\n menuRenderFn,\n onClose,\n onOpen,\n onQueryChange,\n onSelectItem,\n triggerFn,\n}: TypeaheadMenuPluginProps): JSX.Element | null {\n const [editor] = useLexicalComposerContext()\n const [resolution, setResolution] = useState<MenuResolution | null>(null)\n const anchorElementRef = useMenuAnchorRef(anchorElem, resolution, setResolution, anchorClassName)\n\n const closeTypeahead = useCallback(() => {\n setResolution(null)\n if (onClose != null && resolution !== null) {\n onClose()\n }\n }, [onClose, resolution])\n\n const openTypeahead = useCallback(\n (res: MenuResolution) => {\n setResolution(res)\n if (onOpen != null && resolution === null) {\n onOpen(res)\n }\n },\n [onOpen, resolution],\n )\n\n // This is mainly used for the AddBlockHandlePlugin, so that the slash menu can be opened from there\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand(\n ENABLE_SLASH_MENU_COMMAND,\n ({ node }) => {\n editor.getEditorState().read(() => {\n const match: MenuTextMatch = {\n leadOffset: 0,\n matchingString: '',\n replaceableString: '',\n }\n if (match !== null && !isSelectionOnEntityBoundary(editor, match.leadOffset)) {\n if (node !== null) {\n const editorWindow = editor._window ?? window\n const range = editorWindow.document.createRange()\n\n const isRangePositioned = tryToPositionRange(match.leadOffset, range, editorWindow)\n if (isRangePositioned !== null) {\n startTransition(() =>\n openTypeahead({\n getRect: () => {\n return range.getBoundingClientRect()\n },\n match,\n }),\n )\n }\n\n return\n }\n }\n })\n\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n )\n }, [editor, openTypeahead])\n\n useEffect(() => {\n const updateListener = () => {\n editor.getEditorState().read(() => {\n const editorWindow = editor._window ?? window\n const range = editorWindow.document.createRange()\n const selection = $getSelection()\n const text = getQueryTextForSearch(editor)\n\n if (\n !$isRangeSelection(selection) ||\n !selection.isCollapsed() ||\n text === null ||\n range === null\n ) {\n closeTypeahead()\n return\n }\n\n const match = triggerFn({ editor, query: text })\n onQueryChange(match ? match.matchingString : null)\n\n if (match !== null && !isSelectionOnEntityBoundary(editor, match.leadOffset)) {\n const isRangePositioned = tryToPositionRange(match.leadOffset, range, editorWindow)\n if (isRangePositioned !== null) {\n startTransition(() =>\n openTypeahead({\n getRect: () => {\n return range.getBoundingClientRect()\n },\n match,\n }),\n )\n return\n }\n }\n closeTypeahead()\n })\n }\n\n const removeUpdateListener = editor.registerUpdateListener(updateListener)\n\n return () => {\n removeUpdateListener()\n }\n }, [editor, triggerFn, onQueryChange, resolution, closeTypeahead, openTypeahead])\n\n return resolution === null || editor === null ? null : (\n <LexicalMenu\n anchorElementRef={anchorElementRef}\n close={closeTypeahead}\n editor={editor}\n groups={groups}\n menuRenderFn={menuRenderFn}\n onSelectItem={onSelectItem}\n resolution={resolution}\n shouldSplitNodeWithQuery\n />\n )\n}\n\nexport type { MenuRenderFn, MenuResolution, MenuTextMatch, TriggerFn }\n", "'use client'\nimport type { LexicalCommand, LexicalEditor, TextNode } from 'lexical'\nimport type { JSX, MutableRefObject, ReactPortal } from 'react'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { mergeRegister } from '@lexical/utils'\nimport {\n $getSelection,\n $isRangeSelection,\n COMMAND_PRIORITY_LOW,\n KEY_ARROW_DOWN_COMMAND,\n KEY_ARROW_UP_COMMAND,\n KEY_ENTER_COMMAND,\n KEY_ESCAPE_COMMAND,\n KEY_TAB_COMMAND,\n createCommand,\n} from 'lexical'\nimport { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'\n\nimport type { MenuTextMatch } from '../useMenuTriggerMatch.js'\nimport type { SlashMenuGroupInternal, SlashMenuItem, SlashMenuItemInternal } from './types.js'\n\nexport type MenuResolution = {\n getRect: () => DOMRect\n match?: MenuTextMatch\n}\n\nconst baseClass = 'slash-menu-popup'\n\nexport type MenuRenderFn = (\n anchorElementRef: MutableRefObject<HTMLElement | null>,\n itemProps: {\n groups: Array<SlashMenuGroupInternal>\n selectItemAndCleanUp: (selectedItem: SlashMenuItem) => void\n selectedItemKey: null | string\n setSelectedItemKey: (itemKey: string) => void\n },\n matchingString: null | string,\n) => JSX.Element | ReactPortal | null\n\nconst scrollIntoViewIfNeeded = (target: HTMLElement) => {\n const typeaheadContainerNode = document.getElementById('slash-menu')\n if (!typeaheadContainerNode) return\n\n const typeaheadRect = typeaheadContainerNode.getBoundingClientRect()\n\n if (typeaheadRect.top + typeaheadRect.height > window.innerHeight) {\n typeaheadContainerNode.scrollIntoView({\n block: 'center',\n })\n }\n\n if (typeaheadRect.top < 0) {\n typeaheadContainerNode.scrollIntoView({\n block: 'center',\n })\n }\n\n target.scrollIntoView({ block: 'nearest' })\n}\n\n/**\n * Walk backwards along user input and forward through entity title to try\n * and replace more of the user's text with entity.\n */\nfunction getFullMatchOffset(documentText: string, entryText: string, offset: number) {\n let triggerOffset = offset\n for (let i = triggerOffset; i <= entryText.length; i++) {\n if (documentText.substring(documentText.length - i) === entryText.substring(0, i)) {\n triggerOffset = i\n }\n }\n return triggerOffset\n}\n\n/**\n * Split Lexical TextNode and return a new TextNode only containing matched text.\n * Common use cases include: removing the node, replacing with a new node.\n */\nfunction $splitNodeContainingQuery(match: MenuTextMatch): TextNode | null {\n const selection = $getSelection()\n if (!$isRangeSelection(selection) || !selection.isCollapsed()) {\n return null\n }\n const anchor = selection.anchor\n if (anchor.type !== 'text') {\n return null\n }\n const anchorNode = anchor.getNode()\n if (!anchorNode.isSimpleText()) {\n return null\n }\n const selectionOffset = anchor.offset\n const textContent = anchorNode.getTextContent().slice(0, selectionOffset)\n // eslint-disable-next-line react/destructuring-assignment\n const characterOffset = match.replaceableString.length\n // eslint-disable-next-line react/destructuring-assignment\n const queryOffset = getFullMatchOffset(textContent, match.matchingString, characterOffset)\n const startOffset = selectionOffset - queryOffset\n if (startOffset < 0) {\n return null\n }\n let newNode\n if (startOffset === 0) {\n ;[newNode] = anchorNode.splitText(selectionOffset)\n } else {\n ;[, newNode] = anchorNode.splitText(startOffset, selectionOffset)\n }\n\n return newNode\n}\n\n// Got from https://stackoverflow.com/a/42543908/2013580\nexport function getScrollParent(\n element: HTMLElement,\n includeHidden: boolean,\n): HTMLBodyElement | HTMLElement {\n let style = getComputedStyle(element)\n const excludeStaticParent = style.position === 'absolute'\n const overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/\n if (style.position === 'fixed') {\n return document.body\n }\n for (let parent: HTMLElement | null = element; (parent = parent.parentElement); ) {\n style = getComputedStyle(parent)\n if (excludeStaticParent && style.position === 'static') {\n continue\n }\n if (overflowRegex.test(style.overflow + style.overflowY + style.overflowX)) {\n return parent\n }\n }\n return document.body\n}\n\nfunction isTriggerVisibleInNearestScrollContainer(\n targetElement: HTMLElement,\n containerElement: HTMLElement,\n): boolean {\n const tRect = targetElement.getBoundingClientRect()\n const cRect = containerElement.getBoundingClientRect()\n return tRect.top > cRect.top && tRect.top < cRect.bottom\n}\n\n// Reposition the menu on scroll, window resize, and element resize.\nexport function useDynamicPositioning(\n resolution: MenuResolution | null,\n targetElement: HTMLElement | null,\n onReposition: () => void,\n onVisibilityChange?: (isInView: boolean) => void,\n) {\n const [editor] = useLexicalComposerContext()\n useEffect(() => {\n if (targetElement != null && resolution != null) {\n const rootElement = editor.getRootElement()\n const rootScrollParent =\n rootElement != null ? getScrollParent(rootElement, false) : document.body\n let ticking = false\n let previousIsInView = isTriggerVisibleInNearestScrollContainer(\n targetElement,\n rootScrollParent,\n )\n const handleScroll = function () {\n if (!ticking) {\n window.requestAnimationFrame(function () {\n onReposition()\n ticking = false\n })\n ticking = true\n }\n const isInView = isTriggerVisibleInNearestScrollContainer(targetElement, rootScrollParent)\n if (isInView !== previousIsInView) {\n previousIsInView = isInView\n if (onVisibilityChange != null) {\n onVisibilityChange(isInView)\n }\n }\n }\n const resizeObserver = new ResizeObserver(onReposition)\n window.addEventListener('resize', onReposition)\n document.addEventListener('scroll', handleScroll, {\n capture: true,\n passive: true,\n })\n resizeObserver.observe(targetElement)\n return () => {\n resizeObserver.unobserve(targetElement)\n window.removeEventListener('resize', onReposition)\n document.removeEventListener('scroll', handleScroll, true)\n }\n }\n }, [targetElement, editor, onVisibilityChange, onReposition, resolution])\n}\n\nexport const SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND: LexicalCommand<{\n index: number\n item: SlashMenuItemInternal\n}> = createCommand('SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND')\n\nexport function LexicalMenu({\n anchorElementRef,\n close,\n editor,\n // groups filtering is already handled in SlashMenu/index.tsx. Thus, groups always contains the matching items.\n groups,\n menuRenderFn,\n onSelectItem,\n resolution,\n shouldSplitNodeWithQuery = false,\n}: {\n anchorElementRef: MutableRefObject<HTMLElement>\n close: () => void\n editor: LexicalEditor\n groups: Array<SlashMenuGroupInternal>\n menuRenderFn: MenuRenderFn\n onSelectItem: (\n item: SlashMenuItem,\n textNodeContainingQuery: TextNode | null,\n closeMenu: () => void,\n matchingString: string,\n ) => void\n resolution: MenuResolution\n shouldSplitNodeWithQuery?: boolean\n}): JSX.Element | null {\n const [selectedItemKey, setSelectedItemKey] = useState<null | string>(null)\n\n const matchingString = (resolution.match && resolution.match.matchingString) || ''\n\n const updateSelectedItem = useCallback(\n (item: SlashMenuItem) => {\n const rootElem = editor.getRootElement()\n if (rootElem !== null) {\n rootElem.setAttribute('aria-activedescendant', `${baseClass}__item-${item.key}`)\n setSelectedItemKey(item.key)\n }\n },\n [editor],\n )\n\n const setSelectedItemKeyToFirstMatchingItem = useCallback(() => {\n // set selected item to the first of the matching ones\n if (groups !== null && matchingString != null) {\n // groups filtering is already handled in SlashMenu/index.tsx. Thus, groups always contains the matching items.\n const allItems = groups.flatMap((group) => group.items)\n\n if (allItems.length) {\n const firstMatchingItem = allItems[0]\n updateSelectedItem(firstMatchingItem)\n }\n }\n }, [groups, updateSelectedItem, matchingString])\n\n useEffect(() => {\n setSelectedItemKeyToFirstMatchingItem()\n }, [matchingString, setSelectedItemKeyToFirstMatchingItem])\n\n const selectItemAndCleanUp = useCallback(\n (selectedItem: SlashMenuItem) => {\n editor.update(() => {\n const textNodeContainingQuery =\n resolution.match != null && shouldSplitNodeWithQuery\n ? $splitNodeContainingQuery(resolution.match)\n : null\n\n onSelectItem(\n selectedItem,\n textNodeContainingQuery,\n close,\n resolution.match ? resolution.match.matchingString : '',\n )\n })\n },\n [editor, shouldSplitNodeWithQuery, resolution.match, onSelectItem, close],\n )\n\n useEffect(() => {\n return () => {\n const rootElem = editor.getRootElement()\n if (rootElem !== null) {\n rootElem.removeAttribute('aria-activedescendant')\n }\n }\n }, [editor])\n\n useLayoutEffect(() => {\n if (groups === null) {\n setSelectedItemKey(null)\n } else if (selectedItemKey === null) {\n setSelectedItemKeyToFirstMatchingItem()\n }\n }, [groups, selectedItemKey, updateSelectedItem, setSelectedItemKeyToFirstMatchingItem])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand(\n SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND,\n ({ item }) => {\n if (item.ref && item.ref.current != null) {\n scrollIntoViewIfNeeded(item.ref.current)\n return true\n }\n\n return false\n },\n COMMAND_PRIORITY_LOW,\n ),\n )\n }, [editor, updateSelectedItem])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand<KeyboardEvent>(\n KEY_ARROW_DOWN_COMMAND,\n (payload) => {\n const event = payload\n if (groups !== null && groups.length && selectedItemKey !== null) {\n const allItems = groups.flatMap((group) => group.items)\n const selectedIndex = allItems.findIndex((item) => item.key === selectedItemKey)\n\n const newSelectedIndex = selectedIndex !== allItems.length - 1 ? selectedIndex + 1 : 0\n\n const newSelectedItem = allItems[newSelectedIndex]\n\n updateSelectedItem(newSelectedItem)\n if (newSelectedItem.ref != null && newSelectedItem.ref.current) {\n editor.dispatchCommand(SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND, {\n index: newSelectedIndex,\n item: newSelectedItem,\n })\n }\n event.preventDefault()\n event.stopImmediatePropagation()\n }\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand<KeyboardEvent>(\n KEY_ARROW_UP_COMMAND,\n (payload) => {\n const event = payload\n if (groups !== null && groups.length && selectedItemKey !== null) {\n const allItems = groups.flatMap((group) => group.items)\n const selectedIndex = allItems.findIndex((item) => item.key === selectedItemKey)\n\n const newSelectedIndex = selectedIndex !== 0 ? selectedIndex - 1 : allItems.length - 1\n\n const newSelectedItem = allItems[newSelectedIndex]\n\n updateSelectedItem(newSelectedItem)\n if (newSelectedItem.ref != null && newSelectedItem.ref.current) {\n scrollIntoViewIfNeeded(newSelectedItem.ref.current)\n }\n event.preventDefault()\n event.stopImmediatePropagation()\n }\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand<KeyboardEvent>(\n KEY_ESCAPE_COMMAND,\n (payload) => {\n const event = payload\n event.preventDefault()\n event.stopImmediatePropagation()\n close()\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand<KeyboardEvent>(\n KEY_TAB_COMMAND,\n (payload) => {\n const event = payload\n\n if (groups === null || selectedItemKey === null) {\n return false\n }\n const allItems = groups.flatMap((group) => group.items)\n const selectedItem = allItems.find((item) => item.key === selectedItemKey)\n if (!selectedItem) {\n return false\n }\n\n event.preventDefault()\n event.stopImmediatePropagation()\n selectItemAndCleanUp(selectedItem)\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand(\n KEY_ENTER_COMMAND,\n (event: KeyboardEvent | null) => {\n if (groups === null || selectedItemKey === null) {\n return false\n }\n const allItems = groups.flatMap((group) => group.items)\n const selectedItem = allItems.find((item) => item.key === selectedItemKey)\n if (!selectedItem) {\n return false\n }\n\n if (event !== null) {\n event.preventDefault()\n event.stopImmediatePropagation()\n }\n selectItemAndCleanUp(selectedItem)\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n )\n }, [selectItemAndCleanUp, close, editor, groups, selectedItemKey, updateSelectedItem])\n\n const listItemProps = useMemo(\n () => ({\n groups,\n selectItemAndCleanUp,\n selectedItemKey,\n setSelectedItemKey,\n }),\n [selectItemAndCleanUp, selectedItemKey, groups],\n )\n\n return menuRenderFn(\n anchorElementRef,\n listItemProps,\n resolution.match ? resolution.match.matchingString : '',\n )\n}\n\nexport function useMenuAnchorRef(\n anchorElem: HTMLElement,\n resolution: MenuResolution | null,\n setResolution: (r: MenuResolution | null) => void,\n className?: string,\n): MutableRefObject<HTMLElement> {\n const [editor] = useLexicalComposerContext()\n const anchorElementRef = useRef<HTMLElement>(document.createElement('div'))\n const positionMenu = useCallback(() => {\n const rootElement = editor.getRootElement()\n const containerDiv = anchorElementRef.current\n\n const VERTICAL_OFFSET = 32\n\n const menuEle = containerDiv.firstChild as Element\n if (rootElement !== null && resolution !== null) {\n const { height, width } = resolution.getRect()\n let { left, top } = resolution.getRect()\n\n const rawTop = top\n top -= anchorElem.getBoundingClientRect().top + window.scrollY\n left -= anchorElem.getBoundingClientRect().left + window.scrollX\n containerDiv.style.left = `${left + window.scrollX}px`\n containerDiv.style.height = `${height}px`\n containerDiv.style.width = `${width}px`\n if (menuEle !== null) {\n const menuRect = menuEle.getBoundingClientRect()\n const menuHeight = menuRect.height\n const menuWidth = menuRect.width\n\n const rootElementRect = rootElement.getBoundingClientRect()\n\n if (left + menuWidth > rootElementRect.right) {\n containerDiv.style.left = `${rootElementRect.right - menuWidth + window.scrollX}px`\n }\n\n const wouldGoOffBottomOfScreen = rawTop + menuHeight + VERTICAL_OFFSET > window.innerHeight\n //const wouldGoOffBottomOfContainer = top + menuHeight > rootElementRect.bottom\n const wouldGoOffTopOfScreen = rawTop < 0\n\n // Position slash menu above the cursor instead of below (default) if it would otherwise go off the bottom of the screen.\n if (wouldGoOffBottomOfScreen && !wouldGoOffTopOfScreen) {\n const margin = 24\n containerDiv.style.top = `${\n top + VERTICAL_OFFSET - menuHeight + window.scrollY - (height + margin)\n }px`\n } else {\n containerDiv.style.top = `${top + window.scrollY + VERTICAL_OFFSET}px`\n }\n }\n\n if (!containerDiv.isConnected) {\n if (className != null) {\n containerDiv.className = className\n }\n containerDiv.setAttribute('aria-label', 'Slash menu')\n containerDiv.setAttribute('id', 'slash-menu')\n containerDiv.setAttribute('role', 'listbox')\n containerDiv.style.display = 'block'\n containerDiv.style.position = 'absolute'\n anchorElem.append(containerDiv)\n }\n anchorElementRef.current = containerDiv\n rootElement.setAttribute('aria-controls', 'slash-menu')\n }\n }, [editor, resolution, className, anchorElem])\n\n useEffect(() => {\n const rootElement = editor.getRootElement()\n if (resolution !== null) {\n positionMenu()\n return () => {\n if (rootElement !== null) {\n rootElement.removeAttribute('aria-controls')\n }\n\n const containerDiv = anchorElementRef.current\n if (containerDiv !== null && containerDiv.isConnected) {\n containerDiv.remove()\n }\n }\n }\n }, [editor, positionMenu, resolution])\n\n const onVisibilityChange = useCallback(\n (isInView: boolean) => {\n if (resolution !== null) {\n if (!isInView) {\n setResolution(null)\n }\n }\n },\n [resolution, setResolution],\n )\n\n useDynamicPositioning(resolution, anchorElementRef.current, positionMenu, onVisibilityChange)\n\n return anchorElementRef\n}\n", "import type { LexicalEditor } from 'lexical'\n\nimport { useCallback } from 'react'\n\nimport { PUNCTUATION } from './LexicalTypeaheadMenuPlugin/index.js'\n\nexport type TriggerFn = ({\n editor,\n query,\n}: {\n editor: LexicalEditor\n /** The query string is the POTENTIAL trigger AND the text after the trigger text. */\n query: string\n}) => MenuTextMatch | null\n\nexport type MenuTextMatch = {\n leadOffset: number\n matchingString: string\n replaceableString: string\n}\n\n/**\n * Returns a function which checks if the trigger (e.g. '/') is present in the query and, if so, returns the matching string (text after the trigger)\n */\nexport function useMenuTriggerMatch(\n /**\n * Text which triggers the menu. Everything after this text will be used as the query.\n */\n trigger: string,\n { maxLength = 75, minLength = 1 }: { maxLength?: number; minLength?: number },\n): TriggerFn {\n return useCallback(\n ({ query }) => {\n const validChars = '[^' + trigger + PUNCTUATION + '\\\\s]'\n const TypeaheadTriggerRegex = new RegExp(\n '(^|\\\\s|\\\\()(' +\n '[' +\n trigger +\n ']' +\n '((?:' +\n validChars +\n '){0,' +\n maxLength +\n '})' +\n ')$',\n )\n const match = TypeaheadTriggerRegex.exec(query)\n if (match !== null) {\n const maybeLeadingWhitespace = match[1]\n\n /**\n * matchingString is only the text AFTER the trigger text. (So everything after the /)\n */\n const matchingString = match[3]\n\n if (matchingString.length >= minLength) {\n return {\n leadOffset: match.index + maybeLeadingWhitespace.length,\n matchingString,\n replaceableString: match[2], // replaceableString is the trigger text + the matching string\n }\n }\n }\n return null\n },\n [maxLength, minLength, trigger],\n )\n}\n", "'use client'\nimport type { LexicalEditor, LexicalNode, ParagraphNode } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { $createParagraphNode } from 'lexical'\nimport * as React from 'react'\nimport { type JSX, useCallback, useEffect, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { useEditorConfigContext } from '../../../config/client/EditorConfigProvider.js'\nimport { isHTMLElement } from '../../../utils/guard.js'\nimport { Point } from '../../../utils/point.js'\nimport { ENABLE_SLASH_MENU_COMMAND } from '../../SlashMenu/LexicalTypeaheadMenuPlugin/index.js'\nimport { calculateDistanceFromScrollerElem } from '../utils/calculateDistanceFromScrollerElem.js'\nimport { getNodeCloseToPoint } from '../utils/getNodeCloseToPoint.js'\nimport { getTopLevelNodeKeys } from '../utils/getTopLevelNodeKeys.js'\nimport { isOnHandleElement } from '../utils/isOnHandleElement.js'\nimport { setHandlePosition } from '../utils/setHandlePosition.js'\nconst ADD_BLOCK_MENU_CLASSNAME = 'add-block-menu'\n\nlet prevIndex = Infinity\n\nfunction getCurrentIndex(keysLength: number): number {\n if (keysLength === 0) {\n return Infinity\n }\n if (prevIndex >= 0 && prevIndex < keysLength) {\n return prevIndex\n }\n\n return Math.floor(keysLength / 2)\n}\n\nfunction useAddBlockHandle(\n editor: LexicalEditor,\n anchorElem: HTMLElement,\n isEditable: boolean,\n): React.ReactElement {\n const scrollerElem = anchorElem.parentElement\n\n const { editorConfig } = useEditorConfigContext()\n const blockHandleHorizontalOffset = editorConfig?.admin?.hideGutter ? -24 : 12\n\n const menuRef = useRef<HTMLButtonElement>(null)\n const [hoveredElement, setHoveredElement] = useState<{\n elem: HTMLElement\n node: LexicalNode\n } | null>(null)\n\n useEffect(() => {\n function onDocumentMouseMove(event: MouseEvent) {\n const target = event.target\n if (!isHTMLElement(target)) {\n return\n }\n\n const distanceFromScrollerElem = calculateDistanceFromScrollerElem(\n scrollerElem,\n event.pageX,\n event.pageY,\n target,\n )\n\n if (distanceFromScrollerElem === -1) {\n setHoveredElement(null)\n return\n }\n\n if (isOnHandleElement(target, ADD_BLOCK_MENU_CLASSNAME)) {\n return\n }\n const topLevelNodeKeys = getTopLevelNodeKeys(editor)\n\n const {\n blockElem: _emptyBlockElem,\n blockNode,\n foundAtIndex,\n } = getNodeCloseToPoint({\n anchorElem,\n cache_threshold: 0,\n editor,\n horizontalOffset: -distanceFromScrollerElem,\n point: new Point(event.x, event.y),\n returnEmptyParagraphs: true,\n startIndex: getCurrentIndex(topLevelNodeKeys.length),\n useEdgeAsDefault: false,\n })\n\n prevIndex = foundAtIndex\n\n if (!_emptyBlockElem) {\n return\n }\n if (hoveredElement?.node !== blockNode || hoveredElement?.elem !== _emptyBlockElem) {\n setHoveredElement({\n elem: _emptyBlockElem,\n node: blockNode,\n })\n }\n }\n\n // Since the draggableBlockElem is outside the actual editor, we need to listen to the document\n // to be able to detect when the mouse is outside the editor and respect a buffer around\n // the scrollerElem to avoid the draggableBlockElem disappearing too early.\n document?.addEventListener('mousemove', onDocumentMouseMove)\n\n return () => {\n document?.removeEventListener('mousemove', onDocumentMouseMove)\n }\n }, [scrollerElem, anchorElem, editor, hoveredElement])\n\n useEffect(() => {\n if (menuRef.current && hoveredElement?.node) {\n setHandlePosition(\n hoveredElement?.elem,\n menuRef.current,\n anchorElem,\n blockHandleHorizontalOffset,\n )\n }\n }, [anchorElem, hoveredElement, blockHandleHorizontalOffset])\n\n const handleAddClick = useCallback(\n (event) => {\n let hoveredElementToUse = hoveredElement\n if (!hoveredElementToUse?.node) {\n return\n }\n\n // 1. Update hoveredElement.node to a new paragraph node if the hoveredElement.node is not a paragraph node\n editor.update(() => {\n // Check if blockNode is an empty text node\n let isEmptyParagraph = true\n if (\n hoveredElementToUse.node.getType() !== 'paragraph' ||\n hoveredElementToUse.node.getTextContent() !== ''\n ) {\n isEmptyParagraph = false\n }\n\n if (!isEmptyParagraph) {\n const newParagraph = $createParagraphNode()\n hoveredElementToUse.node.insertAfter(newParagraph)\n\n setTimeout(() => {\n hoveredElementToUse = {\n elem: editor.getElementByKey(newParagraph.getKey()),\n node: newParagraph,\n }\n setHoveredElement(hoveredElementToUse)\n }, 0)\n }\n })\n\n // 2. Focus on the new paragraph node\n setTimeout(() => {\n editor.update(() => {\n editor.focus()\n\n if (\n hoveredElementToUse.node &&\n 'select' in hoveredElementToUse.node &&\n typeof hoveredElementToUse.node.select === 'function'\n ) {\n hoveredElementToUse.node.select()\n }\n })\n }, 1)\n\n // Make sure this is called AFTER the focusing has been processed by the browser\n // Otherwise, this won't work\n setTimeout(() => {\n editor.dispatchCommand(ENABLE_SLASH_MENU_COMMAND, {\n node: hoveredElementToUse.node as ParagraphNode,\n })\n }, 2)\n\n event.stopPropagation()\n event.preventDefault()\n },\n [editor, hoveredElement],\n )\n\n return createPortal(\n <React.Fragment>\n <button\n className=\"icon add-block-menu\"\n onClick={(event) => {\n handleAddClick(event)\n }}\n ref={menuRef}\n type=\"button\"\n >\n <div className={isEditable ? 'icon' : ''} />\n </button>\n </React.Fragment>,\n anchorElem,\n )\n}\n\nexport function AddBlockHandlePlugin({\n anchorElem = document.body,\n}: {\n anchorElem?: HTMLElement\n}): React.ReactElement {\n const [editor] = useLexicalComposerContext()\n return useAddBlockHandle(editor, anchorElem, editor._editable)\n}\n", "/**\n * Calculate distance between scrollerElem and target if target is not in scrollerElem\n */\nexport const calculateDistanceFromScrollerElem = (\n scrollerElem: HTMLElement | null,\n pageX: number,\n pageY: number,\n target: HTMLElement,\n horizontalBuffer: number = 50,\n verticalBuffer: number = 25,\n): number => {\n let distanceFromScrollerElem = 0\n if (scrollerElem && !scrollerElem.contains(target)) {\n const { bottom, left, right, top } = scrollerElem.getBoundingClientRect()\n\n const adjustedTop = top + window.scrollY\n const adjustedBottom = bottom + window.scrollY\n\n if (\n pageY < adjustedTop - verticalBuffer ||\n pageY > adjustedBottom + verticalBuffer ||\n pageX < left - horizontalBuffer ||\n pageX > right + horizontalBuffer\n ) {\n return -1\n }\n\n // This is used to allow the _draggableBlockElem to be found when the mouse is in the\n // buffer zone around the scrollerElem.\n if (pageX < left || pageX > right) {\n distanceFromScrollerElem = pageX < left ? pageX - left : pageX - right\n }\n }\n return distanceFromScrollerElem\n}\n", "import type { LexicalEditor, LexicalNode } from 'lexical'\n\nimport { $getNodeByKey } from 'lexical'\n\nimport { Point } from '../../../utils/point.js'\nimport { Rect } from '../../../utils/rect.js'\nimport { getBoundingClientRectWithoutTransform } from '../DraggableBlockPlugin/getBoundingRectWithoutTransform.js'\nimport { getCollapsedMargins } from '../utils/getCollapsedMargins.js'\nimport { getTopLevelNodeKeys } from '../utils/getTopLevelNodeKeys.js'\n\n// Directions\nconst Downward = 1\nconst Upward = -1\nconst Indeterminate = 0\n\ntype Props = {\n anchorElem: HTMLElement\n cache_threshold?: number\n editor: LexicalEditor\n /** fuzzy makes the search not exact. If no exact match found, find the closes node instead of returning null */\n fuzzy?: boolean\n horizontalOffset?: number\n point: Point\n /**\n * By default, empty paragraphs are not returned. Set this to true to return empty paragraphs. @default false\n */\n returnEmptyParagraphs?: boolean\n /**\n * The index to start searching from. It can be a considerable performance optimization to start searching from the index of the\n * previously found node, as the node is likely to be close to the next node.\n */\n startIndex?: number\n useEdgeAsDefault?: boolean\n verbose?: boolean\n}\n\ntype Output = {\n blockElem: HTMLElement | null\n blockNode: LexicalNode | null\n foundAtIndex: number\n isFoundNodeEmptyParagraph: boolean\n}\n\nconst cache = {\n props: null as Props | null,\n result: null as Output | null,\n}\n\nfunction isPointClose(previous: Point, current: Point, threshold: number = 20): boolean {\n const dx = previous.x - current.x\n const dy = previous.y - current.y\n return dx * dx + dy * dy <= threshold * threshold\n}\n\nexport function getNodeCloseToPoint(props: Props): Output {\n const {\n anchorElem,\n cache_threshold = 20,\n editor,\n fuzzy = false,\n horizontalOffset = 0,\n point: { x, y },\n startIndex = 0,\n useEdgeAsDefault = false,\n verbose = false,\n } = props\n\n // Use cache\n if (\n cache_threshold > 0 &&\n cache.props &&\n cache.result &&\n cache.props.fuzzy === props.fuzzy &&\n cache.props.horizontalOffset === props.horizontalOffset &&\n cache.props.useEdgeAsDefault === props.useEdgeAsDefault &&\n isPointClose(cache.props.point, props.point, cache_threshold)\n ) {\n return cache.result\n }\n\n const anchorElementRect = anchorElem.getBoundingClientRect()\n const topLevelNodeKeys = getTopLevelNodeKeys(editor)\n\n const closestBlockElem: {\n blockElem: HTMLElement | null\n blockNode: LexicalNode | null\n distance: number\n foundAtIndex: number\n isFoundNodeEmptyParagraph: boolean\n } = {\n blockElem: null,\n blockNode: null,\n distance: Infinity,\n foundAtIndex: -1,\n isFoundNodeEmptyParagraph: false,\n }\n\n // Return null if matching block element is the first or last node\n editor.getEditorState().read(() => {\n if (useEdgeAsDefault) {\n const [firstNode, lastNode] = [\n editor.getElementByKey(topLevelNodeKeys[0]),\n editor.getElementByKey(topLevelNodeKeys[topLevelNodeKeys.length - 1]),\n ]\n\n const [firstNodeRect, lastNodeRect] = [\n getBoundingClientRectWithoutTransform(firstNode),\n getBoundingClientRectWithoutTransform(lastNode),\n ]\n\n if (firstNodeRect && lastNodeRect) {\n if (y < firstNodeRect.top) {\n closestBlockElem.blockElem = firstNode\n closestBlockElem.distance = firstNodeRect.top - y\n closestBlockElem.blockNode = $getNodeByKey(topLevelNodeKeys[0])\n closestBlockElem.foundAtIndex = 0\n } else if (y > lastNodeRect.bottom) {\n closestBlockElem.distance = y - lastNodeRect.bottom\n closestBlockElem.blockNode = $getNodeByKey(topLevelNodeKeys[topLevelNodeKeys.length - 1])\n closestBlockElem.blockElem = lastNode\n closestBlockElem.foundAtIndex = topLevelNodeKeys.length - 1\n }\n\n if (closestBlockElem?.blockElem) {\n return {\n blockElem: null,\n isFoundNodeEmptyParagraph: false,\n } as Output\n }\n }\n }\n\n // Find matching block element\n let index = startIndex\n let direction = Indeterminate\n\n while (index >= 0 && index < topLevelNodeKeys.length) {\n const key = topLevelNodeKeys[index]\n const elem = editor.getElementByKey(key)\n if (elem === null) {\n break\n }\n const point = new Point(x + horizontalOffset, y)\n //const domRect = Rect.fromDOM(elem)\n // Do not consider transform of blocks when calculating distance\n const domRect = Rect.fromDOMRect(getBoundingClientRectWithoutTransform(elem))\n\n const { marginBottom, marginTop } = getCollapsedMargins(elem)\n\n const rect = domRect.generateNewRect({\n bottom: domRect.bottom + marginBottom,\n left: anchorElementRect.left,\n right: anchorElementRect.right,\n top: domRect.top - marginTop,\n })\n\n const { distance, isOnBottomSide, isOnTopSide } = rect.distanceFromPoint(point)\n\n if (distance === 0) {\n closestBlockElem.blockElem = elem\n closestBlockElem.blockNode = $getNodeByKey(key)\n closestBlockElem.foundAtIndex = index\n closestBlockElem.distance = distance\n\n // Check if blockNode is an empty text node\n if (\n closestBlockElem.blockNode &&\n closestBlockElem.blockNode.getType() === 'paragraph' &&\n closestBlockElem.blockNode.getTextContent() === ''\n ) {\n if (!fuzzy && !props.returnEmptyParagraphs) {\n closestBlockElem.blockElem = null\n closestBlockElem.blockNode = null\n }\n\n closestBlockElem.isFoundNodeEmptyParagraph = true\n }\n break\n } else if (fuzzy) {\n if (distance < closestBlockElem.distance) {\n closestBlockElem.blockElem = elem\n closestBlockElem.blockNode = $getNodeByKey(key)\n closestBlockElem.distance = distance\n closestBlockElem.foundAtIndex = index\n }\n }\n\n if (direction === Indeterminate) {\n if (isOnTopSide) {\n direction = Upward\n } else if (isOnBottomSide) {\n direction = Downward\n } else {\n // stop search block element\n direction = Infinity\n }\n }\n\n index += direction\n }\n })\n\n // Store in cache before returning\n cache.props = props\n cache.result = {\n blockElem: closestBlockElem.blockElem,\n blockNode: closestBlockElem.blockNode,\n foundAtIndex: closestBlockElem.foundAtIndex,\n isFoundNodeEmptyParagraph: closestBlockElem.isFoundNodeEmptyParagraph,\n }\n\n return {\n blockElem: closestBlockElem.blockElem,\n blockNode: closestBlockElem.blockNode,\n foundAtIndex: closestBlockElem.foundAtIndex,\n isFoundNodeEmptyParagraph: closestBlockElem.isFoundNodeEmptyParagraph,\n }\n}\n", "export function getBoundingClientRectWithoutTransform(elem: HTMLElement): DOMRect {\n const rect = elem.getBoundingClientRect()\n\n // Extract the translation value from the transform style\n const transformValue = getComputedStyle(elem).getPropertyValue('transform')\n if (!transformValue || transformValue === 'none') {\n return rect\n }\n\n const lastNumberOfTransformValue = transformValue.split(',').pop()\n rect.y = rect.y - Number(lastNumberOfTransformValue.replace(')', ''))\n\n // Return the original bounding rect if no translation is applied\n return rect\n}\n", "export function getCollapsedMargins(elem: HTMLElement): {\n marginBottom: number\n marginTop: number\n} {\n const getMargin = (element: Element | null, margin: 'marginBottom' | 'marginTop'): number =>\n element ? parseFloat(window.getComputedStyle(element)[margin]) : 0\n\n const { marginBottom, marginTop } = window.getComputedStyle(elem)\n const prevElemSiblingMarginBottom = getMargin(elem.previousElementSibling, 'marginBottom')\n const nextElemSiblingMarginTop = getMargin(elem.nextElementSibling, 'marginTop')\n const collapsedTopMargin = Math.max(parseFloat(marginTop), prevElemSiblingMarginBottom)\n const collapsedBottomMargin = Math.max(parseFloat(marginBottom), nextElemSiblingMarginTop)\n\n return { marginBottom: collapsedBottomMargin, marginTop: collapsedTopMargin }\n}\n", "import type { LexicalEditor } from 'lexical'\n\nimport { $getRoot } from 'lexical'\n\nexport function getTopLevelNodeKeys(editor: LexicalEditor): string[] {\n return editor.getEditorState().read(() => $getRoot().getChildrenKeys())\n}\n", "export function isOnHandleElement(element: HTMLElement, handleElementClassName: string): boolean {\n return !!element.closest(`.${handleElementClassName}`)\n}\n", "const replacedElements = [\n 'IMG',\n 'INPUT',\n 'TEXTAREA',\n 'SELECT',\n 'BUTTON',\n 'VIDEO',\n 'OBJECT',\n 'EMBED',\n 'IFRAME',\n 'HR',\n]\n\n/**\n * From ChatGPT, only that verified it works for HR elements.\n *\n * HTML Elements can have CSS lineHeight applied to them, but it doesn't always affect the visual layout.\n * This function checks if the line-height property has an effect on the element's layout.\n * @param htmlElem\n */\nexport function doesLineHeightAffectElement(htmlElem: HTMLElement) {\n if (!htmlElem) return false\n\n // Check for replaced elements, elements that typically don't support line-height adjustments,\n // and elements without visible content\n\n if (\n replacedElements.includes(htmlElem.tagName) ||\n htmlElem.offsetHeight === 0 ||\n htmlElem.offsetWidth === 0\n ) {\n return false\n }\n\n // Check for specific CSS properties that negate line-height's visual effects\n const style = window.getComputedStyle(htmlElem)\n if (\n style.display === 'table-cell' ||\n style.position === 'absolute' ||\n style.visibility === 'hidden' ||\n style.opacity === '0'\n ) {\n return false\n }\n\n // This is a basic check, and there can be more complex scenarios where line-height doesn't have an effect.\n return true\n}\n", "import { doesLineHeightAffectElement } from './doesLineHeightAffectElement.js'\n\nexport function setHandlePosition(\n targetElem: HTMLElement | null,\n handleElem: HTMLElement,\n anchorElem: HTMLElement,\n leftOffset: number = 0, // SPACE\n) {\n if (!targetElem) {\n handleElem.style.opacity = '0'\n handleElem.style.transform = 'translate(-10000px, -10000px)'\n return\n }\n\n const targetRect = targetElem.getBoundingClientRect()\n const targetStyle = window.getComputedStyle(targetElem)\n const floatingElemRect = handleElem.getBoundingClientRect()\n const anchorElementRect = anchorElem.getBoundingClientRect()\n\n let top: number\n\n const shouldDisplayHandleInCenter = targetRect.height < 60\n\n if (!shouldDisplayHandleInCenter) {\n // No need to let line height affect the re-positioning of the floating element if line height has no\n // visual effect on the element. Otherwise, the floating element will be positioned incorrectly.\n const actualLineHeight = doesLineHeightAffectElement(targetElem)\n ? parseInt(targetStyle.lineHeight, 10)\n : 0\n\n top =\n targetRect.top + (actualLineHeight - floatingElemRect.height) / 2 - anchorElementRect.top - 1 // 1px inaccuracy\n } else {\n top =\n targetRect.top -\n floatingElemRect.height / 2 -\n anchorElementRect.top +\n targetRect.height / 2 -\n 1 // 1px inaccuracy\n }\n\n const left = leftOffset\n\n handleElem.style.opacity = '1'\n handleElem.style.transform = `translate(${left}px, ${top}px)`\n}\n", "'use client'\nimport type { LexicalEditor } from 'lexical'\nimport type { DragEvent as ReactDragEvent } from 'react'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { eventFiles } from '@lexical/rich-text'\nimport { $getNearestNodeFromDOMNode, $getNodeByKey } from 'lexical'\nimport * as React from 'react'\nimport { useEffect, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { useEditorConfigContext } from '../../../config/client/EditorConfigProvider.js'\nimport { isHTMLElement } from '../../../utils/guard.js'\nimport { Point } from '../../../utils/point.js'\nimport { calculateDistanceFromScrollerElem } from '../utils/calculateDistanceFromScrollerElem.js'\nimport { getNodeCloseToPoint } from '../utils/getNodeCloseToPoint.js'\nimport { getTopLevelNodeKeys } from '../utils/getTopLevelNodeKeys.js'\nimport { isOnHandleElement } from '../utils/isOnHandleElement.js'\nimport { setHandlePosition } from '../utils/setHandlePosition.js'\nimport { getBoundingClientRectWithoutTransform } from './getBoundingRectWithoutTransform.js'\nimport { setTargetLine } from './setTargetLine.js'\n\nconst DRAGGABLE_BLOCK_MENU_CLASSNAME = 'draggable-block-menu'\nconst DRAG_DATA_FORMAT = 'application/x-lexical-drag-block'\n\nlet prevIndex = Infinity\n\nfunction getCurrentIndex(keysLength: number): number {\n if (keysLength === 0) {\n return Infinity\n }\n if (prevIndex >= 0 && prevIndex < keysLength) {\n return prevIndex\n }\n\n return Math.floor(keysLength / 2)\n}\n\nfunction setDragImage(dataTransfer: DataTransfer, draggableBlockElem: HTMLElement) {\n const { transform } = draggableBlockElem.style\n\n // Remove dragImage borders\n dataTransfer.setDragImage(draggableBlockElem, 0, 0)\n\n setTimeout(() => {\n draggableBlockElem.style.transform = transform\n })\n}\n\nfunction hideTargetLine(\n targetLineElem: HTMLElement | null,\n lastTargetBlockElem: HTMLElement | null,\n) {\n if (targetLineElem) {\n targetLineElem.style.opacity = '0'\n }\n if (lastTargetBlockElem) {\n lastTargetBlockElem.style.opacity = ''\n // Delete marginBottom and marginTop values we set\n lastTargetBlockElem.style.marginBottom = ''\n lastTargetBlockElem.style.marginTop = ''\n //lastTargetBlock.style.border = 'none'\n }\n}\n\nfunction useDraggableBlockMenu(\n editor: LexicalEditor,\n anchorElem: HTMLElement,\n isEditable: boolean,\n): React.ReactElement {\n const scrollerElem = anchorElem.parentElement\n\n const menuRef = useRef<HTMLDivElement>(null)\n const targetLineRef = useRef<HTMLDivElement>(null)\n const debugHighlightRef = useRef<HTMLDivElement>(null)\n const isDraggingBlockRef = useRef<boolean>(false)\n const [draggableBlockElem, setDraggableBlockElem] = useState<HTMLElement | null>(null)\n const [lastTargetBlock, setLastTargetBlock] = useState<{\n boundingBox?: DOMRect\n elem: HTMLElement | null\n isBelow: boolean\n }>(null)\n\n const { editorConfig } = useEditorConfigContext()\n\n const blockHandleHorizontalOffset = editorConfig?.admin?.hideGutter ? -44 : -8\n\n useEffect(() => {\n /**\n * Handles positioning of the drag handle\n */\n function onDocumentMouseMove(event: MouseEvent) {\n const target = event.target\n if (!isHTMLElement(target)) {\n return\n }\n\n const distanceFromScrollerElem = calculateDistanceFromScrollerElem(\n scrollerElem,\n event.pageX,\n event.pageY,\n target,\n )\n if (distanceFromScrollerElem === -1) {\n setDraggableBlockElem(null)\n return\n }\n\n if (isOnHandleElement(target, DRAGGABLE_BLOCK_MENU_CLASSNAME)) {\n return\n }\n\n const topLevelNodeKeys = getTopLevelNodeKeys(editor)\n\n const {\n blockElem: _draggableBlockElem,\n foundAtIndex,\n isFoundNodeEmptyParagraph,\n } = getNodeCloseToPoint({\n anchorElem,\n cache_threshold: 0,\n editor,\n horizontalOffset: -distanceFromScrollerElem,\n point: new Point(event.x, event.y),\n startIndex: getCurrentIndex(topLevelNodeKeys.length),\n useEdgeAsDefault: false,\n verbose: false,\n })\n\n prevIndex = foundAtIndex\n\n //if (DEBUG && _draggableBlockElem) {\n //targetBlockElem.style.border = '3px solid red'\n // highlightElemOriginalPosition(debugHighlightRef, _draggableBlockElem, anchorElem)\n //}\n\n if (!_draggableBlockElem && !isFoundNodeEmptyParagraph) {\n return\n }\n\n if (draggableBlockElem !== _draggableBlockElem) {\n setDraggableBlockElem(_draggableBlockElem)\n }\n }\n\n // Since the draggableBlockElem is outside the actual editor, we need to listen to the document\n // to be able to detect when the mouse is outside the editor and respect a buffer around\n // the scrollerElem to avoid the draggableBlockElem disappearing too early.\n document?.addEventListener('mousemove', onDocumentMouseMove)\n\n return () => {\n document?.removeEventListener('mousemove', onDocumentMouseMove)\n }\n }, [scrollerElem, anchorElem, editor, draggableBlockElem])\n\n useEffect(() => {\n if (menuRef.current) {\n setHandlePosition(\n draggableBlockElem,\n menuRef.current,\n anchorElem,\n blockHandleHorizontalOffset,\n )\n }\n }, [anchorElem, draggableBlockElem, blockHandleHorizontalOffset])\n\n useEffect(() => {\n function onDragover(event: DragEvent): boolean {\n if (!isDraggingBlockRef.current) {\n return false\n }\n const [isFileTransfer] = eventFiles(event)\n if (isFileTransfer) {\n return false\n }\n\n const { pageY, target } = event\n if (!isHTMLElement(target)) {\n return false\n }\n\n const distanceFromScrollerElem = calculateDistanceFromScrollerElem(\n scrollerElem,\n event.pageX,\n event.pageY,\n target,\n 100,\n 50,\n )\n\n const topLevelNodeKeys = getTopLevelNodeKeys(editor)\n\n const {\n blockElem: targetBlockElem,\n foundAtIndex,\n isFoundNodeEmptyParagraph,\n } = getNodeCloseToPoint({\n anchorElem,\n editor,\n fuzzy: true,\n horizontalOffset: -distanceFromScrollerElem,\n point: new Point(event.x, event.y),\n startIndex: getCurrentIndex(topLevelNodeKeys.length),\n useEdgeAsDefault: true,\n verbose: true,\n })\n\n prevIndex = foundAtIndex\n\n const targetLineElem = targetLineRef.current\n // targetBlockElem === null shouldn't happen\n if (targetBlockElem === null || targetLineElem === null) {\n return false\n }\n\n if (draggableBlockElem !== targetBlockElem) {\n const { isBelow, willStayInSamePosition } = setTargetLine(\n editorConfig?.admin?.hideGutter ? '0px' : '3rem',\n blockHandleHorizontalOffset +\n (editorConfig?.admin?.hideGutter\n ? menuRef?.current?.getBoundingClientRect()?.width ?? 0\n : -menuRef?.current?.getBoundingClientRect()?.width ?? 0),\n targetLineElem,\n targetBlockElem,\n lastTargetBlock,\n pageY,\n anchorElem,\n event,\n debugHighlightRef,\n isFoundNodeEmptyParagraph,\n )\n\n // Prevent default event to be able to trigger onDrop events\n // Calling preventDefault() adds the green plus icon to the cursor,\n // indicating that the drop is allowed.\n event.preventDefault()\n\n if (!willStayInSamePosition) {\n setLastTargetBlock({\n boundingBox: targetBlockElem.getBoundingClientRect(),\n elem: targetBlockElem,\n isBelow,\n })\n }\n } else {\n hideTargetLine(targetLineElem, lastTargetBlock?.elem)\n setLastTargetBlock({\n boundingBox: targetBlockElem.getBoundingClientRect(),\n elem: targetBlockElem,\n isBelow: false,\n })\n }\n\n return true\n }\n\n function onDrop(event: DragEvent): boolean {\n if (!isDraggingBlockRef.current) {\n return false\n }\n const [isFileTransfer] = eventFiles(event)\n if (isFileTransfer) {\n return false\n }\n const { dataTransfer, pageY, target } = event\n const dragData = dataTransfer?.getData(DRAG_DATA_FORMAT) || ''\n\n editor.update(() => {\n const draggedNode = $getNodeByKey(dragData)\n if (!draggedNode) {\n return false\n }\n if (!isHTMLElement(target)) {\n return false\n }\n const distanceFromScrollerElem = calculateDistanceFromScrollerElem(\n scrollerElem,\n event.pageX,\n event.pageY,\n target,\n 100,\n 50,\n )\n\n const { blockElem: targetBlockElem, isFoundNodeEmptyParagraph } = getNodeCloseToPoint({\n anchorElem,\n editor,\n fuzzy: true,\n horizontalOffset: -distanceFromScrollerElem,\n point: new Point(event.x, event.y),\n useEdgeAsDefault: true,\n })\n\n if (!targetBlockElem) {\n return false\n }\n const targetNode = $getNearestNodeFromDOMNode(targetBlockElem)\n if (!targetNode) {\n return false\n }\n if (targetNode === draggedNode) {\n return true\n }\n\n const { height: targetBlockElemHeight, top: targetBlockElemTop } =\n getBoundingClientRectWithoutTransform(targetBlockElem)\n\n const mouseY = pageY\n const isBelow = mouseY >= targetBlockElemTop + targetBlockElemHeight / 2 + window.scrollY\n\n if (!isFoundNodeEmptyParagraph) {\n if (isBelow) {\n // below targetBlockElem\n targetNode.insertAfter(draggedNode)\n } else {\n // above targetBlockElem\n targetNode.insertBefore(draggedNode)\n }\n } else {\n //\n targetNode.insertBefore(draggedNode)\n targetNode.remove()\n }\n\n /*\n if (pageY >= targetBlockElemTop + targetBlockElemHeight / 2) {\n targetNode.insertAfter(draggedNode)\n } else {\n targetNode.insertBefore(draggedNode)\n }*/\n if (draggableBlockElem !== null) {\n setDraggableBlockElem(null)\n }\n\n // find all previous elements with lexical-block-highlighter class and remove them\n const allPrevHighlighters = document.querySelectorAll('.lexical-block-highlighter')\n allPrevHighlighters.forEach((highlighter) => {\n highlighter.remove()\n })\n\n const newInsertedElem = editor.getElementByKey(draggedNode.getKey())\n setTimeout(() => {\n // add new temp html element to newInsertedElem with the same height and width and the class block-selected\n // to highlight the new inserted element\n const newInsertedElemRect = newInsertedElem.getBoundingClientRect()\n\n const highlightElem = document.createElement('div')\n highlightElem.className = 'lexical-block-highlighter'\n\n // if html data-theme is dark, set the highlighter color to white\n if (document.documentElement.getAttribute('data-theme') === 'dark') {\n highlightElem.style.backgroundColor = 'white'\n } else {\n highlightElem.style.backgroundColor = 'black'\n }\n\n highlightElem.style.transition = 'opacity 0.1s ease-in-out'\n highlightElem.style.zIndex = '1'\n highlightElem.style.pointerEvents = 'none'\n highlightElem.style.boxSizing = 'border-box'\n highlightElem.style.borderRadius = '4px'\n highlightElem.style.position = 'absolute'\n document.body.appendChild(highlightElem)\n\n highlightElem.style.opacity = '0.1'\n\n highlightElem.style.height = `${newInsertedElemRect.height + 8}px`\n highlightElem.style.width = `${newInsertedElemRect.width + 8}px`\n highlightElem.style.top = `${newInsertedElemRect.top + window.scrollY - 4}px`\n highlightElem.style.left = `${newInsertedElemRect.left - 4}px`\n\n setTimeout(() => {\n highlightElem.style.opacity = '0'\n setTimeout(() => {\n highlightElem.remove()\n }, 1000)\n }, 3000)\n }, 120)\n })\n\n return true\n }\n\n // register onDragover event listeners:\n document.addEventListener('dragover', onDragover)\n // register onDrop event listeners:\n document.addEventListener('drop', onDrop)\n\n return () => {\n document.removeEventListener('dragover', onDragover)\n document.removeEventListener('drop', onDrop)\n }\n }, [\n scrollerElem,\n blockHandleHorizontalOffset,\n anchorElem,\n editor,\n lastTargetBlock,\n draggableBlockElem,\n editorConfig?.admin?.hideGutter,\n ])\n\n function onDragStart(event: ReactDragEvent<HTMLDivElement>): void {\n const dataTransfer = event.dataTransfer\n if (!dataTransfer || !draggableBlockElem) {\n return\n }\n setDragImage(dataTransfer, draggableBlockElem)\n let nodeKey = ''\n editor.update(() => {\n const node = $getNearestNodeFromDOMNode(draggableBlockElem)\n if (node) {\n nodeKey = node.getKey()\n }\n })\n isDraggingBlockRef.current = true\n dataTransfer.setData(DRAG_DATA_FORMAT, nodeKey)\n }\n\n function onDragEnd(): void {\n isDraggingBlockRef.current = false\n hideTargetLine(targetLineRef.current, lastTargetBlock?.elem)\n }\n\n return createPortal(\n <React.Fragment>\n <div\n className=\"icon draggable-block-menu\"\n draggable\n onDragEnd={onDragEnd}\n onDragStart={onDragStart}\n ref={menuRef}\n >\n <div className={isEditable ? 'icon' : ''} />\n </div>\n <div className=\"draggable-block-target-line\" ref={targetLineRef} />\n <div className=\"debug-highlight\" ref={debugHighlightRef} />\n </React.Fragment>,\n anchorElem,\n )\n}\n\nexport function DraggableBlockPlugin({\n anchorElem = document.body,\n}: {\n anchorElem?: HTMLElement\n}): React.ReactElement {\n const [editor] = useLexicalComposerContext()\n return useDraggableBlockMenu(editor, anchorElem, editor._editable)\n}\n", "import type React from 'react'\n\nimport { getBoundingClientRectWithoutTransform } from './getBoundingRectWithoutTransform.js'\n\nexport function highlightElemOriginalPosition(\n debugHighlightRef: React.RefObject<HTMLDivElement | null>,\n htmlElem: HTMLElement,\n anchorElem: HTMLElement,\n) {\n if (!debugHighlightRef.current) {\n // If the ref doesn't point to an existing element, we can't set styles\n return\n }\n\n const { left: anchorLeft, top: anchorTop } = anchorElem.getBoundingClientRect()\n\n // Get computed styles of the given element\n const boundingRect = getBoundingClientRectWithoutTransform(htmlElem)\n\n // Extract necessary styles (ignoring transform)\n const width = boundingRect.width\n const height = boundingRect.height\n const top = boundingRect.top - anchorTop\n const left = boundingRect.left - anchorLeft\n\n debugHighlightRef.current.style.border = '2px solid green'\n debugHighlightRef.current.style.boxSizing = 'border-box'\n debugHighlightRef.current.style.height = height + 'px'\n debugHighlightRef.current.style.pointerEvents = 'none'\n debugHighlightRef.current.style.position = 'absolute'\n debugHighlightRef.current.style.top = top + 'px'\n debugHighlightRef.current.style.left = left + 'px'\n debugHighlightRef.current.style.width = width + 'px'\n debugHighlightRef.current.style.zIndex = '1000'\n debugHighlightRef.current.style.opacity = '0.5'\n}\n", "import { getCollapsedMargins } from '../utils/getCollapsedMargins.js'\nimport { getBoundingClientRectWithoutTransform } from './getBoundingRectWithoutTransform.js'\nimport { highlightElemOriginalPosition } from './highlightElemOriginalPosition.js'\nconst TARGET_LINE_HALF_HEIGHT = 25\nconst TEXT_BOX_HORIZONTAL_PADDING = -24\nconst DEBUG = false\n\nlet animationTimer = 0\n\nexport function setTargetLine(\n offsetWidth: string,\n offsetLeft: number,\n targetLineElem: HTMLElement,\n targetBlockElem: HTMLElement,\n lastTargetBlock: {\n boundingBox?: DOMRect\n elem: HTMLElement | null\n isBelow: boolean\n },\n mouseY: number,\n anchorElem: HTMLElement,\n event: DragEvent,\n debugHighlightRef: React.RefObject<HTMLDivElement | null>,\n isFoundNodeEmptyParagraph: boolean = false,\n) {\n const { height: targetBlockElemHeight, top: targetBlockElemTop } =\n targetBlockElem.getBoundingClientRect() // used to be getBoundingClientRectWithoutTransform. Not sure what's better, but the normal getBoundingClientRect seems to work fine\n const { top: anchorTop, width: anchorWidth } = anchorElem.getBoundingClientRect()\n\n const { marginBottom, marginTop } = getCollapsedMargins(targetBlockElem)\n let lineTop = targetBlockElemTop\n\n const isBelow = mouseY >= targetBlockElemTop + targetBlockElemHeight / 2 + window.scrollY\n\n let willStayInSamePosition = false\n\n /**\n * Do not run any transform or changes if the actual new line position would be the same (even if it's now inserted BEFORE rather than AFTER - position would still be the same)\n * This prevents unnecessary flickering.\n *\n * We still need to let it run even if the position (IGNORING the transform) would not change, as the transform animation is not finished yet. This is what animationTimer does. Otherwise, the positioning will be inaccurate\n */\n if (lastTargetBlock?.elem) {\n if (targetBlockElem !== lastTargetBlock?.elem) {\n if (\n isBelow &&\n lastTargetBlock?.elem &&\n lastTargetBlock?.elem === targetBlockElem.nextElementSibling\n ) {\n animationTimer++\n\n if (animationTimer < 200) {\n willStayInSamePosition = true\n }\n } else if (\n !isBelow &&\n lastTargetBlock?.elem &&\n lastTargetBlock?.elem === targetBlockElem.previousElementSibling\n ) {\n animationTimer++\n if (animationTimer < 200) {\n willStayInSamePosition = true\n }\n }\n } else {\n animationTimer++\n\n const lastBoundingBoxPosition = lastTargetBlock?.boundingBox?.y\n const currentBoundingBoxPosition = targetBlockElem.getBoundingClientRect().y\n\n if (\n (isBelow === lastTargetBlock?.isBelow &&\n lastBoundingBoxPosition === currentBoundingBoxPosition) ||\n animationTimer < 200\n ) {\n willStayInSamePosition = false\n }\n }\n }\n if (willStayInSamePosition) {\n return {\n isBelow,\n willStayInSamePosition,\n }\n }\n\n /**\n * Paragraphs need no isBelow/above handling,\n */\n if (!isFoundNodeEmptyParagraph) {\n //if (!isFoundNodeEmptyParagraph) {\n if (isBelow) {\n // below targetBlockElem\n lineTop += targetBlockElemHeight + marginBottom / 2\n } else {\n // above targetBlockElem\n lineTop -= marginTop / 2\n }\n } else {\n lineTop += targetBlockElemHeight / 2\n }\n\n let targetElemTranslate2 = 0\n\n if (!isFoundNodeEmptyParagraph) {\n if (isBelow) {\n targetElemTranslate2 = -TARGET_LINE_HALF_HEIGHT\n } else {\n targetElemTranslate2 = TARGET_LINE_HALF_HEIGHT\n }\n }\n\n const top = lineTop - anchorTop + targetElemTranslate2\n\n const left = TEXT_BOX_HORIZONTAL_PADDING - offsetLeft\n\n targetLineElem.style.width = `calc(${anchorWidth}px - ${offsetWidth})`\n targetLineElem.style.opacity = '.4'\n\n /**\n * Move around element below or above the line (= the target / targetBlockElem). Creates \"space\" for the targetLineElem\n *\n * Not needed for empty paragraphs, as an empty paragraph is enough space for the targetLineElem anyways.\n */\n //targetBlockElem.style.opacity = '0.4'\n const buffer = 12 // creates more spacing/padding so target line is not directly next to the targetBlockElem\n if (!isFoundNodeEmptyParagraph) {\n if (isBelow) {\n targetBlockElem.style.marginBottom = TARGET_LINE_HALF_HEIGHT * 2 + buffer + 'px'\n targetLineElem.style.transform = `translate(${left}px, calc(${top}px - ${'0px'}))`\n } else {\n targetBlockElem.style.marginTop = TARGET_LINE_HALF_HEIGHT * 2 + buffer + 'px'\n targetLineElem.style.transform = `translate(${left}px, calc(${top - TARGET_LINE_HALF_HEIGHT * 2}px - ${'0px'}))`\n }\n } else {\n targetLineElem.style.transform = `translate(${left}px, ${top - TARGET_LINE_HALF_HEIGHT}px)`\n }\n\n if (DEBUG) {\n //targetBlockElem.style.border = '3px solid red'\n highlightElemOriginalPosition(debugHighlightRef, targetBlockElem, anchorElem)\n }\n\n /**\n * Properly reset previous targetBlockElem styles\n */\n lastTargetBlock.elem.style.opacity = ''\n\n if (lastTargetBlock?.elem === targetBlockElem) {\n if (isBelow) {\n lastTargetBlock.elem.style.marginTop = ''\n } else {\n lastTargetBlock.elem.style.marginBottom = ''\n }\n } else {\n lastTargetBlock.elem.style.marginBottom = ''\n lastTargetBlock.elem.style.marginTop = ''\n }\n animationTimer = 0\n return {\n isBelow,\n willStayInSamePosition,\n }\n}\n", "import type { JSX } from 'react'\n\nimport { ContentEditable } from '@lexical/react/LexicalContentEditable.js'\nimport * as React from 'react'\n\nexport function LexicalContentEditable({ className }: { className?: string }): JSX.Element {\n return <ContentEditable className={className ?? 'ContentEditable__root'} />\n}\n"],
5
- "mappings": "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",
6
- "names": ["FieldDescription", "FieldError", "FieldLabel", "useField", "useFieldProps", "withCondition", "useCallback", "ErrorBoundary", "LexicalComposer", "React", "useMemo", "useLexicalComposerContext", "LexicalErrorBoundary", "HistoryPlugin", "OnChangePlugin", "RichTextPlugin", "TabIndentationPlugin", "useTranslation", "BLUR_COMMAND", "COMMAND_PRIORITY_LOW", "FOCUS_COMMAND", "React", "useEffect", "useState", "jsx", "EditorPlugin", "anchorElem", "clientProps", "plugin", "LexicalMarkdownShortcutPlugin", "jsx", "MarkdownShortcutPlugin", "editorConfig", "useEditorConfigContext", "LexicalMarkdownShortcutPlugin", "useLexicalComposerContext", "useTranslation", "useCallback", "useMemo", "useState", "React", "ReactDOM", "useLexicalComposerContext", "mergeRegister", "$getSelection", "$isRangeSelection", "$isTextNode", "COMMAND_PRIORITY_LOW", "createCommand", "useCallback", "useEffect", "useState", "React", "useLexicalComposerContext", "mergeRegister", "$getSelection", "$isRangeSelection", "COMMAND_PRIORITY_LOW", "KEY_ARROW_DOWN_COMMAND", "KEY_ARROW_UP_COMMAND", "KEY_ENTER_COMMAND", "KEY_ESCAPE_COMMAND", "KEY_TAB_COMMAND", "createCommand", "useCallback", "useEffect", "useLayoutEffect", "useMemo", "useRef", "useState", "baseClass", "scrollIntoViewIfNeeded", "target", "typeaheadContainerNode", "typeaheadRect", "getFullMatchOffset", "documentText", "entryText", "offset", "triggerOffset", "i", "$splitNodeContainingQuery", "match", "selection", "anchor", "anchorNode", "selectionOffset", "textContent", "characterOffset", "queryOffset", "startOffset", "newNode", "getScrollParent", "element", "includeHidden", "style", "excludeStaticParent", "overflowRegex", "parent", "isTriggerVisibleInNearestScrollContainer", "targetElement", "containerElement", "tRect", "cRect", "useDynamicPositioning", "resolution", "onReposition", "onVisibilityChange", "editor", "rootElement", "rootScrollParent", "ticking", "previousIsInView", "handleScroll", "isInView", "resizeObserver", "SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND", "LexicalMenu", "anchorElementRef", "close", "groups", "menuRenderFn", "onSelectItem", "shouldSplitNodeWithQuery", "selectedItemKey", "setSelectedItemKey", "matchingString", "updateSelectedItem", "item", "rootElem", "setSelectedItemKeyToFirstMatchingItem", "allItems", "group", "firstMatchingItem", "selectItemAndCleanUp", "selectedItem", "textNodeContainingQuery", "payload", "event", "selectedIndex", "newSelectedIndex", "newSelectedItem", "listItemProps", "useMenuAnchorRef", "anchorElem", "setResolution", "className", "positionMenu", "containerDiv", "VERTICAL_OFFSET", "menuEle", "height", "width", "left", "top", "rawTop", "menuRect", "menuHeight", "menuWidth", "rootElementRect", "wouldGoOffBottomOfScreen", "wouldGoOffTopOfScreen", "jsx", "PUNCTUATION", "getTextUpToAnchor", "selection", "anchor", "anchorNode", "anchorOffset", "tryToPositionRange", "leadOffset", "range", "editorWindow", "domSelection", "startOffset", "endOffset", "getQueryTextForSearch", "editor", "text", "$getSelection", "$isRangeSelection", "isSelectionOnEntityBoundary", "offset", "prevSibling", "$isTextNode", "startTransition", "callback", "ENABLE_SLASH_MENU_COMMAND", "createCommand", "LexicalTypeaheadMenuPlugin", "anchorClassName", "anchorElem", "groups", "menuRenderFn", "onClose", "onOpen", "onQueryChange", "onSelectItem", "triggerFn", "editor", "useLexicalComposerContext", "resolution", "setResolution", "useState", "anchorElementRef", "useMenuAnchorRef", "closeTypeahead", "useCallback", "openTypeahead", "res", "useEffect", "mergeRegister", "node", "match", "isSelectionOnEntityBoundary", "editorWindow", "range", "tryToPositionRange", "startTransition", "COMMAND_PRIORITY_LOW", "updateListener", "selection", "$getSelection", "text", "getQueryTextForSearch", "$isRangeSelection", "removeUpdateListener", "jsx", "LexicalMenu", "useCallback", "useMenuTriggerMatch", "trigger", "maxLength", "minLength", "useCallback", "query", "validChars", "PUNCTUATION", "match", "maybeLeadingWhitespace", "matchingString", "jsx", "jsxs", "baseClass", "SlashMenuItem", "isSelected", "item", "onClick", "onMouseEnter", "i18n", "useTranslation", "className", "title", "SlashMenuPlugin", "anchorElem", "editor", "useLexicalComposerContext", "queryString", "setQueryString", "useState", "editorConfig", "useEditorConfigContext", "checkForTriggerMatch", "useMenuTriggerMatch", "getDynamicItems", "useCallback", "groupWithItems", "dynamicItem", "dynamicGroupWithItems", "groups", "useMemo", "groupsWithItems", "groupWithItem", "group", "filteredItems", "itemTitle", "keyword", "dynamicItemGroups", "dynamicGroup", "onSelectItem", "selectedItem", "nodeToRemove", "closeMenu", "matchingString", "LexicalTypeaheadMenuPlugin", "anchorElementRef", "selectItemAndCleanUp", "selectedItemKey", "setSelectedItemKey", "groupTitle", "oi", "useLexicalComposerContext", "$createParagraphNode", "React", "useCallback", "useEffect", "useRef", "useState", "createPortal", "calculateDistanceFromScrollerElem", "scrollerElem", "pageX", "pageY", "target", "horizontalBuffer", "verticalBuffer", "distanceFromScrollerElem", "bottom", "left", "right", "top", "adjustedTop", "adjustedBottom", "$getNodeByKey", "getBoundingClientRectWithoutTransform", "elem", "rect", "transformValue", "lastNumberOfTransformValue", "getCollapsedMargins", "elem", "getMargin", "element", "margin", "marginBottom", "marginTop", "prevElemSiblingMarginBottom", "nextElemSiblingMarginTop", "collapsedTopMargin", "$getRoot", "getTopLevelNodeKeys", "editor", "Downward", "Upward", "Indeterminate", "cache", "isPointClose", "previous", "current", "threshold", "dx", "dy", "getNodeCloseToPoint", "props", "anchorElem", "cache_threshold", "editor", "fuzzy", "horizontalOffset", "x", "y", "startIndex", "useEdgeAsDefault", "verbose", "anchorElementRect", "topLevelNodeKeys", "getTopLevelNodeKeys", "closestBlockElem", "firstNode", "lastNode", "firstNodeRect", "lastNodeRect", "getBoundingClientRectWithoutTransform", "$getNodeByKey", "index", "direction", "key", "elem", "point", "Point", "domRect", "Rect", "marginBottom", "marginTop", "getCollapsedMargins", "rect", "distance", "isOnBottomSide", "isOnTopSide", "isOnHandleElement", "element", "handleElementClassName", "replacedElements", "doesLineHeightAffectElement", "htmlElem", "style", "setHandlePosition", "targetElem", "handleElem", "anchorElem", "leftOffset", "targetRect", "targetStyle", "floatingElemRect", "anchorElementRect", "top", "actualLineHeight", "doesLineHeightAffectElement", "left", "jsx", "ADD_BLOCK_MENU_CLASSNAME", "prevIndex", "getCurrentIndex", "keysLength", "useAddBlockHandle", "editor", "anchorElem", "isEditable", "scrollerElem", "editorConfig", "useEditorConfigContext", "blockHandleHorizontalOffset", "menuRef", "useRef", "hoveredElement", "setHoveredElement", "useState", "useEffect", "onDocumentMouseMove", "event", "target", "isHTMLElement", "distanceFromScrollerElem", "calculateDistanceFromScrollerElem", "isOnHandleElement", "topLevelNodeKeys", "getTopLevelNodeKeys", "_emptyBlockElem", "blockNode", "foundAtIndex", "getNodeCloseToPoint", "Point", "setHandlePosition", "handleAddClick", "useCallback", "hoveredElementToUse", "isEmptyParagraph", "newParagraph", "$createParagraphNode", "ENABLE_SLASH_MENU_COMMAND", "createPortal", "AddBlockHandlePlugin", "useLexicalComposerContext", "useLexicalComposerContext", "eventFiles", "$getNearestNodeFromDOMNode", "$getNodeByKey", "React", "useEffect", "useRef", "useState", "createPortal", "highlightElemOriginalPosition", "debugHighlightRef", "htmlElem", "anchorElem", "anchorLeft", "anchorTop", "boundingRect", "getBoundingClientRectWithoutTransform", "width", "height", "top", "left", "TARGET_LINE_HALF_HEIGHT", "TEXT_BOX_HORIZONTAL_PADDING", "DEBUG", "animationTimer", "setTargetLine", "offsetWidth", "offsetLeft", "targetLineElem", "targetBlockElem", "lastTargetBlock", "mouseY", "anchorElem", "event", "debugHighlightRef", "isFoundNodeEmptyParagraph", "targetBlockElemHeight", "targetBlockElemTop", "anchorTop", "anchorWidth", "marginBottom", "marginTop", "getCollapsedMargins", "lineTop", "isBelow", "willStayInSamePosition", "lastBoundingBoxPosition", "currentBoundingBoxPosition", "targetElemTranslate2", "top", "left", "buffer", "highlightElemOriginalPosition", "jsx", "jsxs", "DRAGGABLE_BLOCK_MENU_CLASSNAME", "DRAG_DATA_FORMAT", "prevIndex", "getCurrentIndex", "keysLength", "setDragImage", "dataTransfer", "draggableBlockElem", "transform", "hideTargetLine", "targetLineElem", "lastTargetBlockElem", "useDraggableBlockMenu", "editor", "anchorElem", "isEditable", "scrollerElem", "menuRef", "useRef", "targetLineRef", "debugHighlightRef", "isDraggingBlockRef", "setDraggableBlockElem", "useState", "lastTargetBlock", "setLastTargetBlock", "editorConfig", "useEditorConfigContext", "blockHandleHorizontalOffset", "useEffect", "onDocumentMouseMove", "event", "target", "isHTMLElement", "distanceFromScrollerElem", "calculateDistanceFromScrollerElem", "isOnHandleElement", "topLevelNodeKeys", "getTopLevelNodeKeys", "_draggableBlockElem", "foundAtIndex", "isFoundNodeEmptyParagraph", "getNodeCloseToPoint", "Point", "setHandlePosition", "onDragover", "isFileTransfer", "eventFiles", "pageY", "targetBlockElem", "isBelow", "willStayInSamePosition", "setTargetLine", "onDrop", "dragData", "draggedNode", "$getNodeByKey", "targetNode", "$getNearestNodeFromDOMNode", "targetBlockElemHeight", "targetBlockElemTop", "getBoundingClientRectWithoutTransform", "highlighter", "newInsertedElem", "newInsertedElemRect", "highlightElem", "onDragStart", "nodeKey", "node", "onDragEnd", "createPortal", "DraggableBlockPlugin", "useLexicalComposerContext", "ContentEditable", "jsx", "LexicalContentEditable", "className", "jsx", "jsxs", "LexicalEditor", "props", "editorConfig", "editorContainerRef", "onChange", "editorConfigContext", "useEditorConfigContext", "editor", "useLexicalComposerContext", "t", "useTranslation", "floatingAnchorElem", "setFloatingAnchorElem", "useState", "onRef", "_floatingAnchorElem", "useEffect", "handleFocus", "handleBlur", "unregisterFocus", "FOCUS_COMMAND", "COMMAND_PRIORITY_LOW", "unregisterBlur", "BLUR_COMMAND", "isSmallWidthViewport", "setIsSmallWidthViewport", "updateViewPortWidth", "isNextSmallWidthViewport", "plugin", "EditorPlugin", "RichTextPlugin", "LexicalErrorBoundary", "LexicalContentEditable", "OnChangePlugin", "editorState", "tags", "DraggableBlockPlugin", "AddBlockHandlePlugin", "SlashMenuPlugin", "HistoryPlugin", "MarkdownShortcutPlugin", "TabIndentationPlugin", "jsx", "LexicalProvider", "props", "editorConfig", "fieldProps", "onChange", "path", "readOnly", "value", "parentContext", "useEditorConfigContext", "editorContainerRef", "processedValue", "useMemo", "processed", "hook", "initialConfig", "getEnabledNodes", "error", "LexicalComposer", "EditorConfigProvider", "LexicalEditor", "jsx", "jsxs", "baseClass", "_RichText", "props", "name", "CustomDescription", "CustomError", "CustomLabel", "className", "descriptionProps", "editorConfig", "errorProps", "label", "labelProps", "pathFromProps", "readOnly", "required", "style", "validate", "width", "memoizedValidate", "useCallback", "value", "validationOptions", "pathFromContext", "useFieldProps", "fieldType", "useField", "errorMessage", "initialValue", "path", "schemaPath", "setValue", "showError", "classes", "FieldLabel", "FieldError", "ErrorBoundary", "fallbackRender", "LexicalProvider", "editorState", "serializedEditorState", "hook", "FieldDescription", "error", "RichText", "withCondition"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/features/horizontalRule/nodes/HorizontalRuleNode.tsx"],
4
- "sourcesContent": ["import type {\n DOMConversionMap,\n DOMConversionOutput,\n DOMExportOutput,\n EditorConfig,\n LexicalCommand,\n LexicalNode,\n SerializedLexicalNode,\n} from 'lexical'\n\nimport { addClassNamesToElement } from '@lexical/utils'\nimport { $applyNodeReplacement, DecoratorNode, createCommand } from 'lexical'\nimport * as React from 'react'\n\nconst HorizontalRuleComponent = React.lazy(() =>\n import('../component/index.js').then((module) => ({\n default: module.HorizontalRuleComponent,\n })),\n)\n\n/**\n * Serialized representation of a horizontal rule node. Serialized = converted to JSON. This is what is stored in the database / in the lexical editor state.\n */\nexport type SerializedHorizontalRuleNode = SerializedLexicalNode\n\nexport const INSERT_HORIZONTAL_RULE_COMMAND: LexicalCommand<void> = createCommand(\n 'INSERT_HORIZONTAL_RULE_COMMAND',\n)\n\n/**\n * This node is a DecoratorNode. DecoratorNodes allow you to render React components in the editor.\n *\n * They need both createDom and decorate functions. createDom => outside of the html. decorate => React Component inside of the html.\n *\n * If we used DecoratorBlockNode instead, we would only need a decorate method\n */\nexport class HorizontalRuleNode extends DecoratorNode<React.ReactElement> {\n static clone(node: HorizontalRuleNode): HorizontalRuleNode {\n return new HorizontalRuleNode(node.__key)\n }\n\n static getType(): string {\n return 'horizontalrule'\n }\n\n /**\n * Defines what happens if you copy an hr element from another page and paste it into the lexical editor\n *\n * This also determines the behavior of lexical's internal HTML -> Lexical converter\n */\n static importDOM(): DOMConversionMap | null {\n return {\n hr: () => ({\n conversion: $convertHorizontalRuleElement,\n priority: 0,\n }),\n }\n }\n\n /**\n * The data for this node is stored serialized as JSON. This is the \"load function\" of that node: it takes the saved data and converts it into a node.\n */\n static importJSON(serializedNode: SerializedHorizontalRuleNode): HorizontalRuleNode {\n return $createHorizontalRuleNode()\n }\n\n /**\n * Determines how the hr element is rendered in the lexical editor. This is only the \"initial\" / \"outer\" HTML element.\n */\n createDOM(config: EditorConfig): HTMLElement {\n const element = document.createElement('hr')\n addClassNamesToElement(element, config.theme.hr)\n return element\n }\n\n /**\n * Allows you to render a React component within whatever createDOM returns.\n */\n decorate(): React.ReactElement {\n return <HorizontalRuleComponent nodeKey={this.__key} />\n }\n\n /**\n * Opposite of importDOM, this function defines what happens when you copy an hr element from the lexical editor and paste it into another page.\n *\n * This also determines the behavior of lexical's internal Lexical -> HTML converter\n */\n exportDOM(): DOMExportOutput {\n return { element: document.createElement('hr') }\n }\n /**\n * Opposite of importJSON. This determines what data is saved in the database / in the lexical editor state.\n */\n exportJSON(): SerializedLexicalNode {\n return {\n type: 'horizontalrule',\n version: 1,\n }\n }\n\n getTextContent(): string {\n return '\\n'\n }\n\n isInline(): false {\n return false\n }\n\n updateDOM(): boolean {\n return false\n }\n}\n\nfunction $convertHorizontalRuleElement(): DOMConversionOutput {\n return { node: $createHorizontalRuleNode() }\n}\n\nexport function $createHorizontalRuleNode(): HorizontalRuleNode {\n return $applyNodeReplacement(new HorizontalRuleNode())\n}\n\nexport function $isHorizontalRuleNode(\n node: LexicalNode | null | undefined,\n): node is HorizontalRuleNode {\n return node instanceof HorizontalRuleNode\n}\n"],
5
- "mappings": "AAUA,OAAS,0BAAAA,MAA8B,iBACvC,OAAS,yBAAAC,EAAuB,iBAAAC,EAAe,iBAAAC,MAAqB,UACpE,UAAYC,MAAW,QAmEZ,cAAAC,MAAA,oBAjEX,IAAMC,EAAgC,OAAK,IACzC,OAAO,yBAAuB,EAAE,KAAMC,IAAY,CAChD,QAASA,EAAO,uBAClB,EAAE,CACJ,EAOaC,EAAuDL,EAClE,gCACF,EASaM,EAAN,MAAMC,UAA2BR,CAAkC,CACxE,OAAO,MAAMS,EAA8C,CACzD,OAAO,IAAID,EAAmBC,EAAK,KAAK,CAC1C,CAEA,OAAO,SAAkB,CACvB,MAAO,gBACT,CAOA,OAAO,WAAqC,CAC1C,MAAO,CACL,GAAI,KAAO,CACT,WAAYC,EACZ,SAAU,CACZ,EACF,CACF,CAKA,OAAO,WAAWC,EAAkE,CAClF,OAAOC,EAA0B,CACnC,CAKA,UAAUC,EAAmC,CAC3C,IAAMC,EAAU,SAAS,cAAc,IAAI,EAC3C,OAAAhB,EAAuBgB,EAASD,EAAO,MAAM,EAAE,EACxCC,CACT,CAKA,UAA+B,CAC7B,OAAOX,EAACC,EAAA,CAAwB,QAAS,KAAK,MAAO,CACvD,CAOA,WAA6B,CAC3B,MAAO,CAAE,QAAS,SAAS,cAAc,IAAI,CAAE,CACjD,CAIA,YAAoC,CAClC,MAAO,CACL,KAAM,iBACN,QAAS,CACX,CACF,CAEA,gBAAyB,CACvB,MAAO;AAAA,CACT,CAEA,UAAkB,CAChB,MAAO,EACT,CAEA,WAAqB,CACnB,MAAO,EACT,CACF,EAEA,SAASM,GAAqD,CAC5D,MAAO,CAAE,KAAME,EAA0B,CAAE,CAC7C,CAEO,SAASA,GAAgD,CAC9D,OAAOb,EAAsB,IAAIQ,CAAoB,CACvD,CAEO,SAASQ,EACdN,EAC4B,CAC5B,OAAOA,aAAgBF,CACzB",
6
- "names": ["addClassNamesToElement", "$applyNodeReplacement", "DecoratorNode", "createCommand", "React", "jsx", "HorizontalRuleComponent", "module", "INSERT_HORIZONTAL_RULE_COMMAND", "HorizontalRuleNode", "_HorizontalRuleNode", "node", "$convertHorizontalRuleElement", "serializedNode", "$createHorizontalRuleNode", "config", "element", "$isHorizontalRuleNode"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/features/relationship/drawer/commands.ts", "../../../src/features/relationship/nodes/RelationshipNode.tsx"],
4
- "sourcesContent": ["import type { LexicalCommand } from 'lexical'\n\nimport { createCommand } from 'lexical'\n\nexport const INSERT_RELATIONSHIP_WITH_DRAWER_COMMAND: LexicalCommand<{\n replace: { nodeKey: string } | false\n}> = createCommand('INSERT_RELATIONSHIP_WITH_DRAWER_COMMAND')\n", "import type { SerializedDecoratorBlockNode } from '@lexical/react/LexicalDecoratorBlockNode.js'\nimport type {\n DOMConversionMap,\n DOMConversionOutput,\n DOMExportOutput,\n EditorConfig,\n ElementFormatType,\n LexicalEditor,\n LexicalNode,\n NodeKey,\n Spread,\n} from 'lexical'\nimport type { JSX } from 'react'\n\nimport { DecoratorBlockNode } from '@lexical/react/LexicalDecoratorBlockNode.js'\nimport * as React from 'react'\n\nconst RelationshipComponent = React.lazy(() =>\n import('./components/RelationshipComponent.js').then((module) => ({\n default: module.RelationshipComponent,\n })),\n)\n\nexport type RelationshipData = {\n relationTo: string\n value: number | string\n}\n\nexport type SerializedRelationshipNode = Spread<RelationshipData, SerializedDecoratorBlockNode>\n\nfunction $relationshipElementToNode(domNode: HTMLDivElement): DOMConversionOutput | null {\n const id = domNode.getAttribute('data-lexical-relationship-id')\n const relationTo = domNode.getAttribute('data-lexical-relationship-relationTo')\n\n if (id != null && relationTo != null) {\n const node = $createRelationshipNode({\n relationTo,\n value: id,\n })\n return { node }\n }\n return null\n}\n\nexport class RelationshipNode extends DecoratorBlockNode {\n __data: RelationshipData\n\n constructor({\n data,\n format,\n key,\n }: {\n data: RelationshipData\n format?: ElementFormatType\n key?: NodeKey\n }) {\n super(format, key)\n this.__data = data\n }\n\n static clone(node: RelationshipNode): RelationshipNode {\n return new RelationshipNode({\n data: node.__data,\n format: node.__format,\n key: node.__key,\n })\n }\n\n static getType(): string {\n return 'relationship'\n }\n\n static importDOM(): DOMConversionMap<HTMLDivElement> | null {\n return {\n div: (domNode: HTMLDivElement) => {\n if (\n !domNode.hasAttribute('data-lexical-relationship-relationTo') ||\n !domNode.hasAttribute('data-lexical-relationship-id')\n ) {\n return null\n }\n return {\n conversion: $relationshipElementToNode,\n priority: 2,\n }\n },\n }\n }\n\n static importJSON(serializedNode: SerializedRelationshipNode): RelationshipNode {\n if (serializedNode.version === 1 && (serializedNode?.value as unknown as { id: string })?.id) {\n serializedNode.value = (serializedNode.value as unknown as { id: string }).id\n }\n\n const importedData: RelationshipData = {\n relationTo: serializedNode.relationTo,\n value: serializedNode.value,\n }\n const node = $createRelationshipNode(importedData)\n node.setFormat(serializedNode.format)\n return node\n }\n\n static isInline(): false {\n return false\n }\n\n decorate(editor: LexicalEditor, config: EditorConfig): JSX.Element {\n return (\n <RelationshipComponent\n className={config.theme.relationship ?? 'LexicalEditorTheme__relationship'}\n data={this.__data}\n format={this.__format}\n nodeKey={this.getKey()}\n />\n )\n }\n exportDOM(): DOMExportOutput {\n const element = document.createElement('div')\n element.setAttribute('data-lexical-relationship-id', String(this.__data?.value))\n element.setAttribute('data-lexical-relationship-relationTo', this.__data?.relationTo)\n\n const text = document.createTextNode(this.getTextContent())\n element.append(text)\n return { element }\n }\n\n exportJSON(): SerializedRelationshipNode {\n return {\n ...super.exportJSON(),\n ...this.getData(),\n type: this.getType(),\n version: 2,\n }\n }\n\n getData(): RelationshipData {\n return this.getLatest().__data\n }\n\n getTextContent(): string {\n return `${this.__data?.relationTo} relation to ${this.__data?.value}`\n }\n\n setData(data: RelationshipData): void {\n const writable = this.getWritable()\n writable.__data = data\n }\n}\n\nexport function $createRelationshipNode(data: RelationshipData): RelationshipNode {\n return new RelationshipNode({\n data,\n })\n}\n\nexport function $isRelationshipNode(\n node: LexicalNode | RelationshipNode | null | undefined,\n): node is RelationshipNode {\n return node instanceof RelationshipNode\n}\n"],
5
- "mappings": "AAEA,OAAS,iBAAAA,MAAqB,UAEvB,IAAMC,EAERD,EAAc,yCAAyC,ECQ5D,OAAS,sBAAAE,MAA0B,8CACnC,UAAYC,MAAW,QA8FjB,cAAAC,MAAA,oBA5FN,IAAMC,EAA8B,OAAK,IACvC,OAAO,qCAAuC,EAAE,KAAMC,IAAY,CAChE,QAASA,EAAO,qBAClB,EAAE,CACJ,EASA,SAASC,EAA2BC,EAAqD,CACvF,IAAMC,EAAKD,EAAQ,aAAa,8BAA8B,EACxDE,EAAaF,EAAQ,aAAa,sCAAsC,EAE9E,OAAIC,GAAM,MAAQC,GAAc,KAKvB,CAAE,KAJIC,EAAwB,CACnC,WAAAD,EACA,MAAOD,CACT,CAAC,CACa,EAET,IACT,CAEO,IAAMG,EAAN,MAAMC,UAAyBX,CAAmB,CACvD,OAEA,YAAY,CACV,KAAAY,EACA,OAAAC,EACA,IAAAC,CACF,EAIG,CACD,MAAMD,EAAQC,CAAG,EACjB,KAAK,OAASF,CAChB,CAEA,OAAO,MAAMG,EAA0C,CACrD,OAAO,IAAIJ,EAAiB,CAC1B,KAAMI,EAAK,OACX,OAAQA,EAAK,SACb,IAAKA,EAAK,KACZ,CAAC,CACH,CAEA,OAAO,SAAkB,CACvB,MAAO,cACT,CAEA,OAAO,WAAqD,CAC1D,MAAO,CACL,IAAMT,GAEF,CAACA,EAAQ,aAAa,sCAAsC,GAC5D,CAACA,EAAQ,aAAa,8BAA8B,EAE7C,KAEF,CACL,WAAYD,EACZ,SAAU,CACZ,CAEJ,CACF,CAEA,OAAO,WAAWW,EAA8D,CAC1EA,EAAe,UAAY,GAAMA,GAAgB,OAAqC,KACxFA,EAAe,MAASA,EAAe,MAAoC,IAG7E,IAAMC,EAAiC,CACrC,WAAYD,EAAe,WAC3B,MAAOA,EAAe,KACxB,EACMD,EAAON,EAAwBQ,CAAY,EACjD,OAAAF,EAAK,UAAUC,EAAe,MAAM,EAC7BD,CACT,CAEA,OAAO,UAAkB,CACvB,MAAO,EACT,CAEA,SAASG,EAAuBC,EAAmC,CACjE,OACEjB,EAACC,EAAA,CACC,UAAWgB,EAAO,MAAM,cAAgB,mCACxC,KAAM,KAAK,OACX,OAAQ,KAAK,SACb,QAAS,KAAK,OAAO,EACvB,CAEJ,CACA,WAA6B,CAC3B,IAAMC,EAAU,SAAS,cAAc,KAAK,EAC5CA,EAAQ,aAAa,+BAAgC,OAAO,KAAK,QAAQ,KAAK,CAAC,EAC/EA,EAAQ,aAAa,uCAAwC,KAAK,QAAQ,UAAU,EAEpF,IAAMC,EAAO,SAAS,eAAe,KAAK,eAAe,CAAC,EAC1D,OAAAD,EAAQ,OAAOC,CAAI,EACZ,CAAE,QAAAD,CAAQ,CACnB,CAEA,YAAyC,CACvC,MAAO,CACL,GAAG,MAAM,WAAW,EACpB,GAAG,KAAK,QAAQ,EAChB,KAAM,KAAK,QAAQ,EACnB,QAAS,CACX,CACF,CAEA,SAA4B,CAC1B,OAAO,KAAK,UAAU,EAAE,MAC1B,CAEA,gBAAyB,CACvB,MAAO,GAAG,KAAK,QAAQ,UAAU,gBAAgB,KAAK,QAAQ,KAAK,EACrE,CAEA,QAAQR,EAA8B,CACpC,IAAMU,EAAW,KAAK,YAAY,EAClCA,EAAS,OAASV,CACpB,CACF,EAEO,SAASH,EAAwBG,EAA0C,CAChF,OAAO,IAAIF,EAAiB,CAC1B,KAAAE,CACF,CAAC,CACH,CAEO,SAASW,EACdR,EAC0B,CAC1B,OAAOA,aAAgBL,CACzB",
6
- "names": ["createCommand", "INSERT_RELATIONSHIP_WITH_DRAWER_COMMAND", "DecoratorBlockNode", "React", "jsx", "RelationshipComponent", "module", "$relationshipElementToNode", "domNode", "id", "relationTo", "$createRelationshipNode", "RelationshipNode", "_RelationshipNode", "data", "format", "key", "node", "serializedNode", "importedData", "editor", "config", "element", "text", "writable", "$isRelationshipNode"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/features/relationship/utils/EnabledRelationshipsCondition.tsx", "../../../src/features/upload/drawer/commands.ts", "../../../src/features/upload/nodes/UploadNode.tsx"],
4
- "sourcesContent": ["import type { ClientCollectionConfig, ClientUser, VisibleEntities } from 'payload'\n\nimport { useAuth, useConfig, useEntityVisibility } from '@payloadcms/ui'\nimport * as React from 'react'\n\ntype Options = {\n uploads: boolean\n user: ClientUser\n visibleEntities: VisibleEntities\n}\n\ntype FilteredCollectionsT = (\n collections: ClientCollectionConfig[],\n options?: Options,\n) => ClientCollectionConfig[]\n\nconst filterRichTextCollections: FilteredCollectionsT = (collections, options) => {\n return collections.filter(({ slug, admin: { enableRichTextRelationship }, upload }) => {\n if (!options.visibleEntities.collections.includes(slug)) {\n return false\n }\n\n if (options?.uploads) {\n return enableRichTextRelationship && Boolean(upload) === true\n }\n\n return upload ? false : enableRichTextRelationship\n })\n}\n\nexport const EnabledRelationshipsCondition: React.FC<any> = (props) => {\n const { children, uploads = false, ...rest } = props\n const { collections } = useConfig()\n const { user } = useAuth()\n const { visibleEntities } = useEntityVisibility()\n\n const [enabledCollectionSlugs] = React.useState(() =>\n filterRichTextCollections(collections, { uploads, user, visibleEntities }).map(\n ({ slug }) => slug,\n ),\n )\n\n if (!enabledCollectionSlugs.length) {\n return null\n }\n\n return React.cloneElement(children, { ...rest, enabledCollectionSlugs })\n}\n", "'use client'\nimport type { LexicalCommand } from 'lexical'\n\nimport { createCommand } from 'lexical'\n\nexport const INSERT_UPLOAD_WITH_DRAWER_COMMAND: LexicalCommand<{\n replace: { nodeKey: string } | false\n}> = createCommand('INSERT_UPLOAD_WITH_DRAWER_COMMAND')\n", "import type { SerializedDecoratorBlockNode } from '@lexical/react/LexicalDecoratorBlockNode.js'\nimport type {\n DOMConversionMap,\n DOMConversionOutput,\n DOMExportOutput,\n ElementFormatType,\n LexicalNode,\n NodeKey,\n Spread,\n} from 'lexical'\nimport type { JSX } from 'react'\n\nimport { DecoratorBlockNode } from '@lexical/react/LexicalDecoratorBlockNode.js'\nimport ObjectID from 'bson-objectid'\nimport { $applyNodeReplacement } from 'lexical'\nimport * as React from 'react'\n\nconst RawUploadComponent = React.lazy(() =>\n import('../component/index.js').then((module) => ({ default: module.UploadComponent })),\n)\n\nexport type UploadData = {\n fields: {\n // unknown, custom fields:\n [key: string]: unknown\n }\n id: string\n relationTo: string\n value: number | string\n}\n\nfunction isGoogleDocCheckboxImg(img: HTMLImageElement): boolean {\n return (\n img.parentElement != null &&\n img.parentElement.tagName === 'LI' &&\n img.previousSibling === null &&\n img.getAttribute('aria-roledescription') === 'checkbox'\n )\n}\n\nfunction $convertUploadElement(domNode: HTMLImageElement): DOMConversionOutput | null {\n if (\n domNode.hasAttribute('data-lexical-upload-relation-to') &&\n domNode.hasAttribute('data-lexical-upload-id')\n ) {\n const id = domNode.getAttribute('data-lexical-upload-id')\n const relationTo = domNode.getAttribute('data-lexical-upload-relation-to')\n\n if (id != null && relationTo != null) {\n const node = $createUploadNode({\n data: {\n fields: {},\n relationTo,\n value: id,\n },\n })\n return { node }\n }\n }\n const img = domNode\n if (img.src.startsWith('file:///') || isGoogleDocCheckboxImg(img)) {\n return null\n }\n // TODO: Auto-upload functionality here!\n //}\n return null\n}\n\nexport type SerializedUploadNode = Spread<UploadData, SerializedDecoratorBlockNode>\n\nexport class UploadNode extends DecoratorBlockNode {\n __data: UploadData\n\n constructor({\n data,\n format,\n key,\n }: {\n data: UploadData\n format?: ElementFormatType\n key?: NodeKey\n }) {\n super(format, key)\n this.__data = data\n }\n\n static clone(node: UploadNode): UploadNode {\n return new UploadNode({\n data: node.__data,\n format: node.__format,\n key: node.__key,\n })\n }\n\n static getType(): string {\n return 'upload'\n }\n\n static importDOM(): DOMConversionMap | null {\n return {\n img: (node: HTMLImageElement) => ({\n conversion: $convertUploadElement,\n priority: 0,\n }),\n }\n }\n\n static importJSON(serializedNode: SerializedUploadNode): UploadNode {\n if (serializedNode.version === 1 && (serializedNode?.value as unknown as { id: string })?.id) {\n serializedNode.value = (serializedNode.value as unknown as { id: string }).id\n }\n if (serializedNode.version === 2 && !serializedNode?.id) {\n serializedNode.id = new ObjectID.default().toHexString()\n serializedNode.version = 3\n }\n\n const importedData: UploadData = {\n id: serializedNode.id,\n fields: serializedNode.fields,\n relationTo: serializedNode.relationTo,\n value: serializedNode.value,\n }\n\n const node = $createUploadNode({ data: importedData })\n node.setFormat(serializedNode.format)\n\n return node\n }\n\n static isInline(): false {\n return false\n }\n\n decorate(): JSX.Element {\n // @ts-expect-error\n return <RawUploadComponent data={this.__data} format={this.__format} nodeKey={this.getKey()} />\n }\n\n exportDOM(): DOMExportOutput {\n const element = document.createElement('img')\n element.setAttribute('data-lexical-upload-id', String(this.__data?.value))\n element.setAttribute('data-lexical-upload-relation-to', this.__data?.relationTo)\n\n return { element }\n }\n\n exportJSON(): SerializedUploadNode {\n return {\n ...super.exportJSON(),\n ...this.getData(),\n type: this.getType(),\n version: 3,\n }\n }\n\n getData(): UploadData {\n return this.getLatest().__data\n }\n\n setData(data: UploadData): void {\n const writable = this.getWritable()\n writable.__data = data\n }\n\n // eslint-disable-next-line class-methods-use-this\n updateDOM(): false {\n return false\n }\n}\n\nexport function $createUploadNode({\n data,\n}: {\n data: Omit<UploadData, 'id'> & Partial<Pick<UploadData, 'id'>>\n}): UploadNode {\n if (!data?.id) {\n data.id = new ObjectID.default().toHexString()\n }\n return $applyNodeReplacement(new UploadNode({ data: data as UploadData }))\n}\n\nexport function $isUploadNode(node: LexicalNode | null | undefined): node is UploadNode {\n return node instanceof UploadNode\n}\n"],
5
- "mappings": "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",
6
- "names": ["useAuth", "useConfig", "useEntityVisibility", "React", "filterRichTextCollections", "collections", "options", "slug", "enableRichTextRelationship", "upload", "EnabledRelationshipsCondition", "props", "children", "uploads", "rest", "user", "visibleEntities", "enabledCollectionSlugs", "createCommand", "INSERT_UPLOAD_WITH_DRAWER_COMMAND", "DecoratorBlockNode", "ObjectID", "$applyNodeReplacement", "React", "jsx", "RawUploadComponent", "module", "isGoogleDocCheckboxImg", "img", "$convertUploadElement", "domNode", "id", "relationTo", "$createUploadNode", "UploadNode", "_UploadNode", "data", "format", "key", "node", "serializedNode", "importedData", "element", "writable", "$isUploadNode"]
7
- }
@@ -1,2 +0,0 @@
1
- function _(r){return r instanceof HTMLElement}var m=class{_x;_y;constructor(t,e){this._x=t,this._y=e}calcDeltaXTo({x:t}){return this.x-t}calcDeltaYTo({y:t}){return this.y-t}calcDistanceTo(t){return Math.sqrt(Math.pow(this.calcDeltaXTo(t),2)+Math.pow(this.calcDeltaYTo(t),2))}calcHorizontalDistanceTo(t){return Math.abs(this.calcDeltaXTo(t))}calcVerticalDistance(t){return Math.abs(this.calcDeltaYTo(t))}equals({x:t,y:e}){return this.x===t&&this.y===e}get x(){return this._x}get y(){return this._y}};function d(r){return r instanceof m}var f=class r{_bottom;_left;_right;_top;constructor(t,e,i,n){let[o,s]=e<=n?[e,n]:[n,e],[h,c]=t<=i?[t,i]:[i,t];this._top=o,this._right=c,this._left=h,this._bottom=s}static fromDOM(t){let{height:e,left:i,top:n,width:o}=t.getBoundingClientRect();return r.fromLWTH(i,o,n,e)}static fromDOMRect(t){let{height:e,left:i,top:n,width:o}=t;return r.fromLWTH(i,o,n,e)}static fromLTRB(t,e,i,n){return new r(t,e,i,n)}static fromLWTH(t,e,i,n){return new r(t,i,t+e,i+n)}static fromPoints(t,e){let{x:i,y:n}=t,{x:o,y:s}=e;return r.fromLTRB(i,n,o,s)}contains(t){if(d(t)){let{x:s,y:h}=t,c=h<this._top,a=h>this._bottom,l=s<this._left,u=s>this._right;return{reason:{isOnBottomSide:a,isOnLeftSide:l,isOnRightSide:u,isOnTopSide:c},result:!c&&!a&&!l&&!u}}let{bottom:e,left:i,right:n,top:o}=t;return o>=this._top&&o<=this._bottom&&e>=this._top&&e<=this._bottom&&i>=this._left&&i<=this._right&&n>=this._left&&n<=this._right}distanceFromPoint(t){let e=this.contains(t);if(e.result)return{distance:0,isOnBottomSide:e.reason.isOnBottomSide,isOnLeftSide:e.reason.isOnLeftSide,isOnRightSide:e.reason.isOnRightSide,isOnTopSide:e.reason.isOnTopSide};let i=0,n=0;return t.x<this._left?i=this._left-t.x:t.x>this._right&&(i=t.x-this._right),t.y<this._top?n=this._top-t.y:t.y>this._bottom&&(n=t.y-this._bottom),{distance:Math.sqrt(i*i+n*n),isOnBottomSide:t.y>this._bottom,isOnLeftSide:t.x<this._left,isOnRightSide:t.x>this._right,isOnTopSide:t.y<this._top}}equals({bottom:t,left:e,right:i,top:n}){return n===this._top&&t===this._bottom&&e===this._left&&i===this._right}generateNewRect({bottom:t=this.bottom,left:e=this.left,right:i=this.right,top:n=this.top}){return new r(e,n,i,t)}intersectsWith(t){let{height:e,left:i,top:n,width:o}=t,{height:s,left:h,top:c,width:a}=this,l=i+o>=h+a?i+o:h+a,u=n+e>=c+s?n+e:c+s,b=i<=h?i:h,p=n<=c?n:c;return l-b<=o+a&&u-p<=e+s}get bottom(){return this._bottom}get height(){return Math.abs(this._bottom-this._top)}get left(){return this._left}get right(){return this._right}get top(){return this._top}get width(){return Math.abs(this._left-this._right)}};function R({editorConfig:r}){return r.features.nodes.map(t=>"node"in t?t.node:t)}export{R as a,_ as b,m as c,d,f as e};
2
- //# sourceMappingURL=chunk-ZITHDR53.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/lexical/utils/guard.ts", "../../../src/lexical/utils/point.ts", "../../../src/lexical/utils/rect.ts", "../../../src/lexical/nodes/index.ts"],
4
- "sourcesContent": ["export function isHTMLElement(x: unknown): x is HTMLElement {\n return x instanceof HTMLElement\n}\n", "export class Point {\n private readonly _x: number\n\n private readonly _y: number\n\n constructor(x: number, y: number) {\n this._x = x\n this._y = y\n }\n\n public calcDeltaXTo({ x }: Point): number {\n return this.x - x\n }\n\n public calcDeltaYTo({ y }: Point): number {\n return this.y - y\n }\n\n public calcDistanceTo(point: Point): number {\n return Math.sqrt(Math.pow(this.calcDeltaXTo(point), 2) + Math.pow(this.calcDeltaYTo(point), 2))\n }\n\n public calcHorizontalDistanceTo(point: Point): number {\n return Math.abs(this.calcDeltaXTo(point))\n }\n\n public calcVerticalDistance(point: Point): number {\n return Math.abs(this.calcDeltaYTo(point))\n }\n\n public equals({ x, y }: Point): boolean {\n return this.x === x && this.y === y\n }\n\n get x(): number {\n return this._x\n }\n\n get y(): number {\n return this._y\n }\n}\n\nexport function isPoint(x: unknown): x is Point {\n return x instanceof Point\n}\n", "import { type Point, isPoint } from './point.js'\n\ninterface ContainsPointReturn {\n reason: {\n isOnBottomSide: boolean\n isOnLeftSide: boolean\n isOnRightSide: boolean\n isOnTopSide: boolean\n }\n result: boolean\n}\n\nexport class Rect {\n private readonly _bottom: number\n\n private readonly _left: number\n\n private readonly _right: number\n\n private readonly _top: number\n\n constructor(left: number, top: number, right: number, bottom: number) {\n const [physicTop, physicBottom] = top <= bottom ? [top, bottom] : [bottom, top]\n\n const [physicLeft, physicRight] = left <= right ? [left, right] : [right, left]\n\n this._top = physicTop\n this._right = physicRight\n this._left = physicLeft\n this._bottom = physicBottom\n }\n\n static fromDOM(dom: HTMLElement): Rect {\n const { height, left, top, width } = dom.getBoundingClientRect()\n return Rect.fromLWTH(left, width, top, height)\n }\n\n static fromDOMRect(domRect: DOMRect): Rect {\n const { height, left, top, width } = domRect\n return Rect.fromLWTH(left, width, top, height)\n }\n\n static fromLTRB(left: number, top: number, right: number, bottom: number): Rect {\n return new Rect(left, top, right, bottom)\n }\n\n static fromLWTH(left: number, width: number, top: number, height: number): Rect {\n return new Rect(left, top, left + width, top + height)\n }\n\n static fromPoints(startPoint: Point, endPoint: Point): Rect {\n const { x: left, y: top } = startPoint\n const { x: right, y: bottom } = endPoint\n return Rect.fromLTRB(left, top, right, bottom)\n }\n\n public contains({ x, y }: Point): ContainsPointReturn\n\n public contains({ bottom, left, right, top }: Rect): boolean\n\n public contains(target: Point | Rect): ContainsPointReturn | boolean {\n if (isPoint(target)) {\n const { x, y } = target\n\n const isOnTopSide = y < this._top\n const isOnBottomSide = y > this._bottom\n const isOnLeftSide = x < this._left\n const isOnRightSide = x > this._right\n\n const result = !isOnTopSide && !isOnBottomSide && !isOnLeftSide && !isOnRightSide\n\n return {\n reason: {\n isOnBottomSide,\n isOnLeftSide,\n isOnRightSide,\n isOnTopSide,\n },\n result,\n }\n }\n const { bottom, left, right, top } = target\n\n return (\n top >= this._top &&\n top <= this._bottom &&\n bottom >= this._top &&\n bottom <= this._bottom &&\n left >= this._left &&\n left <= this._right &&\n right >= this._left &&\n right <= this._right\n )\n }\n\n public distanceFromPoint(point: Point): {\n distance: number\n isOnBottomSide: boolean\n isOnLeftSide: boolean\n isOnRightSide: boolean\n isOnTopSide: boolean\n } {\n const containsResult = this.contains(point)\n if (containsResult.result) {\n return {\n distance: 0,\n isOnBottomSide: containsResult.reason.isOnBottomSide,\n isOnLeftSide: containsResult.reason.isOnLeftSide,\n isOnRightSide: containsResult.reason.isOnRightSide,\n isOnTopSide: containsResult.reason.isOnTopSide,\n }\n }\n\n let dx = 0 // Horizontal distance to the closest edge\n let dy = 0 // Vertical distance to the closest edge\n\n // If the point is to the left of the rectangle\n if (point.x < this._left) {\n dx = this._left - point.x\n }\n // If the point is to the right of the rectangle\n else if (point.x > this._right) {\n dx = point.x - this._right\n }\n\n // If the point is above the rectangle\n if (point.y < this._top) {\n dy = this._top - point.y\n }\n // If the point is below the rectangle\n else if (point.y > this._bottom) {\n dy = point.y - this._bottom\n }\n\n // Use the Pythagorean theorem to calculate the distance\n return {\n distance: Math.sqrt(dx * dx + dy * dy),\n isOnBottomSide: point.y > this._bottom,\n isOnLeftSide: point.x < this._left,\n isOnRightSide: point.x > this._right,\n isOnTopSide: point.y < this._top,\n }\n }\n\n public equals({ bottom, left, right, top }: Rect): boolean {\n return (\n top === this._top && bottom === this._bottom && left === this._left && right === this._right\n )\n }\n\n public generateNewRect({\n bottom = this.bottom,\n left = this.left,\n right = this.right,\n top = this.top,\n }): Rect {\n return new Rect(left, top, right, bottom)\n }\n\n public intersectsWith(rect: Rect): boolean {\n const { height: h1, left: x1, top: y1, width: w1 } = rect\n const { height: h2, left: x2, top: y2, width: w2 } = this\n const maxX = x1 + w1 >= x2 + w2 ? x1 + w1 : x2 + w2\n const maxY = y1 + h1 >= y2 + h2 ? y1 + h1 : y2 + h2\n const minX = x1 <= x2 ? x1 : x2\n const minY = y1 <= y2 ? y1 : y2\n return maxX - minX <= w1 + w2 && maxY - minY <= h1 + h2\n }\n\n get bottom(): number {\n return this._bottom\n }\n\n get height(): number {\n return Math.abs(this._bottom - this._top)\n }\n\n get left(): number {\n return this._left\n }\n\n get right(): number {\n return this._right\n }\n\n get top(): number {\n return this._top\n }\n\n get width(): number {\n return Math.abs(this._left - this._right)\n }\n}\n", "import type { Klass, LexicalNode, LexicalNodeReplacement } from 'lexical'\n\nimport type { SanitizedClientEditorConfig, SanitizedServerEditorConfig } from '../config/types.js'\n\nexport function getEnabledNodes({\n editorConfig,\n}: {\n editorConfig: SanitizedClientEditorConfig | SanitizedServerEditorConfig\n}): Array<Klass<LexicalNode> | LexicalNodeReplacement> {\n return editorConfig.features.nodes.map((node) => {\n if ('node' in node) {\n return node.node\n }\n return node\n })\n}\n"],
5
- "mappings": "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",
6
- "names": ["isHTMLElement", "x", "Point", "x", "y", "point", "isPoint", "Rect", "_Rect", "left", "top", "right", "bottom", "physicTop", "physicBottom", "physicLeft", "physicRight", "dom", "height", "width", "domRect", "startPoint", "endPoint", "target", "isPoint", "x", "y", "isOnTopSide", "isOnBottomSide", "isOnLeftSide", "isOnRightSide", "point", "containsResult", "dx", "dy", "rect", "h1", "x1", "y1", "w1", "h2", "x2", "y2", "w2", "maxX", "maxY", "minX", "minY", "getEnabledNodes", "editorConfig", "node"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/features/upload/component/index.tsx", "../../../src/features/upload/component/ExtraFieldsDrawer/index.tsx"],
4
- "sourcesContent": ["'use client'\nimport type { ClientCollectionConfig } from 'payload'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { useLexicalNodeSelection } from '@lexical/react/useLexicalNodeSelection.js'\nimport { mergeRegister } from '@lexical/utils'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n Button,\n DrawerToggler,\n File,\n useConfig,\n useDocumentDrawer,\n useDrawerSlug,\n usePayloadAPI,\n useTranslation,\n} from '@payloadcms/ui'\nimport {\n $getNodeByKey,\n $getSelection,\n $isNodeSelection,\n CLICK_COMMAND,\n COMMAND_PRIORITY_LOW,\n KEY_BACKSPACE_COMMAND,\n KEY_DELETE_COMMAND,\n} from 'lexical'\nimport React, { useCallback, useEffect, useReducer, useRef, useState } from 'react'\n\nimport type { ClientComponentProps } from '../../types.js'\nimport type { UploadFeaturePropsClient } from '../feature.client.js'\nimport type { UploadData } from '../nodes/UploadNode.js'\n\nimport { useEditorConfigContext } from '../../../lexical/config/client/EditorConfigProvider.js'\nimport { EnabledRelationshipsCondition } from '../../relationship/utils/EnabledRelationshipsCondition.js'\nimport { INSERT_UPLOAD_WITH_DRAWER_COMMAND } from '../drawer/commands.js'\nimport { $isUploadNode } from '../nodes/UploadNode.js'\nimport { ExtraFieldsUploadDrawer } from './ExtraFieldsDrawer/index.js'\nconst baseClass = 'lexical-upload'\n\nconst initialParams = {\n depth: 0,\n}\n\nexport type ElementProps = {\n data: UploadData\n nodeKey: string\n}\n\nconst Component: React.FC<ElementProps> = (props) => {\n const {\n data: { fields, relationTo, value },\n nodeKey,\n } = props\n\n const {\n collections,\n routes: { api },\n serverURL,\n } = useConfig()\n const uploadRef = useRef<HTMLDivElement | null>(null)\n\n const [editor] = useLexicalComposerContext()\n const [isSelected, setSelected, clearSelection] = useLexicalNodeSelection(nodeKey)\n\n const { editorConfig, field } = useEditorConfigContext()\n\n const { i18n, t } = useTranslation()\n const [cacheBust, dispatchCacheBust] = useReducer((state) => state + 1, 0)\n const [relatedCollection, setRelatedCollection] = useState<ClientCollectionConfig>(() =>\n collections.find((coll) => coll.slug === relationTo),\n )\n\n const drawerSlug = useDrawerSlug('upload-drawer')\n\n const [DocumentDrawer, DocumentDrawerToggler, { closeDrawer }] = useDocumentDrawer({\n id: value,\n collectionSlug: relatedCollection.slug,\n })\n\n // Get the referenced document\n const [{ data }, { setParams }] = usePayloadAPI(\n `${serverURL}${api}/${relatedCollection.slug}/${value}`,\n { initialParams },\n )\n\n const thumbnailSRC = data?.thumbnailURL || data?.url\n\n const removeUpload = useCallback(() => {\n editor.update(() => {\n $getNodeByKey(nodeKey).remove()\n })\n }, [editor, nodeKey])\n\n const updateUpload = useCallback(\n (json) => {\n setParams({\n ...initialParams,\n cacheBust, // do this to get the usePayloadAPI to re-fetch the data even though the URL string hasn't changed\n })\n\n dispatchCacheBust()\n closeDrawer()\n },\n [setParams, cacheBust, closeDrawer],\n )\n\n const $onDelete = useCallback(\n (payload: KeyboardEvent) => {\n if (isSelected && $isNodeSelection($getSelection())) {\n const event: KeyboardEvent = payload\n event.preventDefault()\n const node = $getNodeByKey(nodeKey)\n if ($isUploadNode(node)) {\n node.remove()\n return true\n }\n }\n return false\n },\n [isSelected, nodeKey],\n )\n const onClick = useCallback(\n (payload: MouseEvent) => {\n const event = payload\n // Check if uploadRef.target or anything WITHIN uploadRef.target was clicked\n if (event.target === uploadRef.current || uploadRef.current?.contains(event.target as Node)) {\n if (event.shiftKey) {\n setSelected(!isSelected)\n } else {\n if (!isSelected) {\n clearSelection()\n setSelected(true)\n }\n }\n return true\n }\n\n return false\n },\n [isSelected, setSelected, clearSelection],\n )\n\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand<MouseEvent>(CLICK_COMMAND, onClick, COMMAND_PRIORITY_LOW),\n\n editor.registerCommand(KEY_DELETE_COMMAND, $onDelete, COMMAND_PRIORITY_LOW),\n editor.registerCommand(KEY_BACKSPACE_COMMAND, $onDelete, COMMAND_PRIORITY_LOW),\n )\n }, [clearSelection, editor, isSelected, nodeKey, $onDelete, setSelected, onClick])\n\n const hasExtraFields = (\n editorConfig?.resolvedFeatureMap?.get('upload')\n ?.clientFeatureProps as ClientComponentProps<UploadFeaturePropsClient>\n ).collections?.[relatedCollection.slug]?.hasExtraFields\n\n return (\n <div\n className={[baseClass, isSelected && `${baseClass}--selected`].filter(Boolean).join(' ')}\n contentEditable={false}\n ref={uploadRef}\n >\n <div className={`${baseClass}__card`}>\n <div className={`${baseClass}__topRow`}>\n {/* TODO: migrate to use @payloadcms/ui/elements/Thumbnail component */}\n <div className={`${baseClass}__thumbnail`}>\n {thumbnailSRC ? (\n <img\n alt={data?.filename}\n data-lexical-upload-id={value}\n data-lexical-upload-relation-to={relationTo}\n src={thumbnailSRC}\n />\n ) : (\n <File />\n )}\n </div>\n <div className={`${baseClass}__topRowRightPanel`}>\n <div className={`${baseClass}__collectionLabel`}>\n {getTranslation(relatedCollection.labels.singular, i18n)}\n </div>\n {editor.isEditable() && (\n <div className={`${baseClass}__actions`}>\n {hasExtraFields ? (\n <DrawerToggler\n className={`${baseClass}__upload-drawer-toggler`}\n disabled={field?.readOnly}\n slug={drawerSlug}\n >\n <Button\n buttonStyle=\"icon-label\"\n el=\"div\"\n icon=\"edit\"\n onClick={(e) => {\n e.preventDefault()\n }}\n round\n tooltip={t('fields:editRelationship')}\n />\n </DrawerToggler>\n ) : null}\n\n <Button\n buttonStyle=\"icon-label\"\n disabled={field?.readOnly}\n el=\"div\"\n icon=\"swap\"\n onClick={() => {\n editor.dispatchCommand(INSERT_UPLOAD_WITH_DRAWER_COMMAND, {\n replace: { nodeKey },\n })\n }}\n round\n tooltip={t('fields:swapUpload')}\n />\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__removeButton`}\n disabled={field?.readOnly}\n icon=\"x\"\n onClick={(e) => {\n e.preventDefault()\n removeUpload()\n }}\n round\n tooltip={t('fields:removeUpload')}\n />\n </div>\n )}\n </div>\n </div>\n <div className={`${baseClass}__bottomRow`}>\n <DocumentDrawerToggler className={`${baseClass}__doc-drawer-toggler`}>\n <strong>{data?.filename}</strong>\n </DocumentDrawerToggler>\n </div>\n </div>\n {value && <DocumentDrawer onSave={updateUpload} />}\n {hasExtraFields ? (\n <ExtraFieldsUploadDrawer\n drawerSlug={drawerSlug}\n relatedCollection={relatedCollection}\n {...props}\n />\n ) : null}\n </div>\n )\n}\n\nexport const UploadComponent = (props: ElementProps): React.ReactNode => {\n return (\n <EnabledRelationshipsCondition {...props} uploads>\n <Component {...props} />\n </EnabledRelationshipsCondition>\n )\n}\n", "'use client'\nimport type { FormProps } from '@payloadcms/ui'\nimport type { ClientCollectionConfig, FormState } from 'payload'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n Drawer,\n Form,\n FormSubmit,\n RenderFields,\n useConfig,\n useDocumentInfo,\n useFieldProps,\n useModal,\n useTranslation,\n} from '@payloadcms/ui'\nimport { getFormState } from '@payloadcms/ui/shared'\nimport { $getNodeByKey } from 'lexical'\nimport { deepCopyObject } from 'payload/shared'\nimport React, { useCallback, useEffect, useState } from 'react'\nimport { v4 as uuid } from 'uuid'\n\nimport type { UploadData, UploadNode } from '../../nodes/UploadNode.js'\nimport type { ElementProps } from '../index.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\n\n/**\n * This handles the extra fields, e.g. captions or alt text, which are\n * potentially added to the upload feature.\n */\nexport const ExtraFieldsUploadDrawer: React.FC<\n ElementProps & {\n drawerSlug: string\n relatedCollection: ClientCollectionConfig\n }\n> = (props) => {\n const {\n data: { fields, relationTo, value },\n drawerSlug,\n nodeKey,\n relatedCollection,\n } = props\n\n const [editor] = useLexicalComposerContext()\n\n const { closeModal } = useModal()\n\n const { i18n, t } = useTranslation()\n const { id } = useDocumentInfo()\n const { schemaPath } = useFieldProps()\n const config = useConfig()\n const [initialState, setInitialState] = useState<FormState | false>(false)\n const {\n field: { richTextComponentMap },\n } = useEditorConfigContext()\n\n const componentMapRenderedFieldsPath = `feature.upload.fields.${relatedCollection.slug}`\n const schemaFieldsPath = `${schemaPath}.feature.upload.${relatedCollection.slug}`\n\n const fieldMap = richTextComponentMap.get(componentMapRenderedFieldsPath) // Field Schema\n\n useEffect(() => {\n const awaitInitialState = async () => {\n const state = await getFormState({\n apiRoute: config.routes.api,\n body: {\n id,\n data: deepCopyObject(fields || {}),\n operation: 'update',\n schemaPath: schemaFieldsPath,\n },\n serverURL: config.serverURL,\n }) // Form State\n\n setInitialState(state)\n }\n\n void awaitInitialState()\n }, [config.routes.api, config.serverURL, schemaFieldsPath, id, fields])\n\n const onChange: FormProps['onChange'][0] = useCallback(\n async ({ formState: prevFormState }) => {\n return await getFormState({\n apiRoute: config.routes.api,\n body: {\n id,\n formState: prevFormState,\n operation: 'update',\n schemaPath: schemaFieldsPath,\n },\n serverURL: config.serverURL,\n })\n },\n\n [config.routes.api, config.serverURL, schemaFieldsPath, id],\n )\n\n const handleUpdateEditData = useCallback(\n (_, data) => {\n // Update lexical node (with key nodeKey) with new data\n editor.update(() => {\n const uploadNode: UploadNode | null = $getNodeByKey(nodeKey)\n if (uploadNode) {\n const newData: UploadData = {\n ...uploadNode.getData(),\n fields: data,\n }\n uploadNode.setData(newData)\n }\n })\n\n closeModal(drawerSlug)\n },\n [closeModal, editor, drawerSlug, nodeKey],\n )\n\n return (\n <Drawer\n slug={drawerSlug}\n title={t('general:editLabel', {\n label: getTranslation(relatedCollection.labels.singular, i18n),\n })}\n >\n {initialState !== false && (\n <Form\n beforeSubmit={[onChange]}\n disableValidationOnSubmit\n // @ts-expect-error TODO: Fix this\n fields={fieldMap}\n initialState={initialState}\n onChange={[onChange]}\n onSubmit={handleUpdateEditData}\n uuid={uuid()}\n >\n <RenderFields\n fieldMap={Array.isArray(fieldMap) ? fieldMap : []}\n forceRender\n path=\"\" // See Blocks feature path for details as for why this is empty\n readOnly={false}\n schemaPath={schemaFieldsPath}\n />\n <FormSubmit>{t('fields:saveChanges')}</FormSubmit>\n </Form>\n )}\n </Drawer>\n )\n}\n"],
5
- "mappings": "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",
6
- "names": ["useLexicalComposerContext", "useLexicalNodeSelection", "mergeRegister", "getTranslation", "Button", "DrawerToggler", "File", "useConfig", "useDocumentDrawer", "useDrawerSlug", "usePayloadAPI", "useTranslation", "$getNodeByKey", "$getSelection", "$isNodeSelection", "CLICK_COMMAND", "COMMAND_PRIORITY_LOW", "KEY_BACKSPACE_COMMAND", "KEY_DELETE_COMMAND", "useCallback", "useEffect", "useReducer", "useRef", "useState", "useLexicalComposerContext", "getTranslation", "Drawer", "Form", "FormSubmit", "RenderFields", "useConfig", "useDocumentInfo", "useFieldProps", "useModal", "useTranslation", "getFormState", "$getNodeByKey", "deepCopyObject", "useCallback", "useEffect", "useState", "uuid", "jsx", "jsxs", "ExtraFieldsUploadDrawer", "props", "fields", "relationTo", "value", "drawerSlug", "nodeKey", "relatedCollection", "editor", "useLexicalComposerContext", "closeModal", "useModal", "i18n", "t", "useTranslation", "id", "useDocumentInfo", "schemaPath", "useFieldProps", "config", "useConfig", "initialState", "setInitialState", "useState", "richTextComponentMap", "useEditorConfigContext", "componentMapRenderedFieldsPath", "schemaFieldsPath", "fieldMap", "useEffect", "state", "getFormState", "deepCopyObject", "onChange", "useCallback", "prevFormState", "handleUpdateEditData", "_", "data", "uploadNode", "$getNodeByKey", "newData", "Drawer", "getTranslation", "Form", "uuid", "RenderFields", "FormSubmit", "jsx", "jsxs", "baseClass", "initialParams", "Component", "props", "fields", "relationTo", "value", "nodeKey", "collections", "api", "serverURL", "useConfig", "uploadRef", "useRef", "editor", "useLexicalComposerContext", "isSelected", "setSelected", "clearSelection", "useLexicalNodeSelection", "editorConfig", "field", "useEditorConfigContext", "i18n", "t", "useTranslation", "cacheBust", "dispatchCacheBust", "useReducer", "state", "relatedCollection", "setRelatedCollection", "useState", "coll", "drawerSlug", "useDrawerSlug", "DocumentDrawer", "DocumentDrawerToggler", "closeDrawer", "useDocumentDrawer", "data", "setParams", "usePayloadAPI", "thumbnailSRC", "removeUpload", "useCallback", "$getNodeByKey", "updateUpload", "json", "$onDelete", "payload", "$isNodeSelection", "$getSelection", "node", "$isUploadNode", "onClick", "event", "useEffect", "mergeRegister", "CLICK_COMMAND", "COMMAND_PRIORITY_LOW", "KEY_DELETE_COMMAND", "KEY_BACKSPACE_COMMAND", "hasExtraFields", "File", "getTranslation", "DrawerToggler", "Button", "e", "INSERT_UPLOAD_WITH_DRAWER_COMMAND", "ExtraFieldsUploadDrawer", "UploadComponent", "EnabledRelationshipsCondition"]
7
- }
@@ -1,2 +0,0 @@
1
- "use client";import{b as D}from"./chunk-3K3B6PJM.js";import{Collapsible as oe,Form as te,Pill as ae,SectionTitle as re,ShimmerEffect as le,useConfig as se,useDocumentInfo as ie,useFieldProps as ne,useFormSubmitted as ce,useTranslation as de}from"@payloadcms/ui";import{useCallback as me,useEffect as pe,useMemo as fe,useState as ue}from"react";import{getTranslation as ye}from"@payloadcms/translations";import{getFormState as V}from"@payloadcms/ui/shared";import{v4 as he}from"uuid";import{useLexicalComposerContext as j}from"@lexical/react/LexicalComposerContext.js";import{getTranslation as W}from"@payloadcms/translations";import{Button as z,Collapsible as H,ErrorPill as J,Pill as q,RenderFields as G,SectionTitle as Q,useDocumentInfo as X,useFormSubmitted as Y,useTranslation as Z}from"@payloadcms/ui";import ee from"deep-equal";import{$getNodeByKey as M}from"lexical";import w,{useCallback as x}from"react";import{useAllFormFields as U}from"@payloadcms/ui";import{reduceFieldsToValues as I}from"@payloadcms/ui/shared";import{useEffect as K}from"react";function E({fields:i}){for(let e in i){let a=i[e];Array.isArray(a.rows)&&"value"in a&&(a.disableFormData=!0)}return i}var O=i=>{let{onChange:e}=i,[a]=U(),o=E({fields:a}),m=I(o,!0);return K(()=>{e&&e({fullFieldsWithValues:o,newFormData:m})},[m,e,o]),null};import{jsx as F,jsxs as A}from"react/jsx-runtime";var L=i=>{let{baseClass:e,field:a,formData:o,formSchema:m,nodeKey:n,reducedBlock:{labels:g},schemaPath:_}=i,{i18n:S}=Z(),[c]=j(),{getDocPreferences:y,setDocFieldPreferences:P}=X(),[T,B]=w.useState(()=>{let r=!1;return y().then(d=>{let t=d?.fields[a.name]?.collapsed;t&&t.includes(o.id)&&(r=!0,B(!0))}),r}),s=Y(),[p,k]=w.useState(0),h=s&&p>0,R=[`${e}__row`,h?`${e}__row--has-errors`:`${e}__row--no-errors`].filter(Boolean).join(" "),N=x(({fullFieldsWithValues:r,newFormData:d})=>{d={...d,id:o.id,blockType:o.blockType};function v(t){for(let l in t){let b=t[l];Array.isArray(b)&&!b?.length?delete t[l]:b&&typeof b=="object"?v(b):b==null&&delete t[l]}}if(v(d),v(o),ee(o,d)||setTimeout(()=>{c.update(()=>{let t=M(n);t&&t.setFields(d)})},0),s){let t=0;for(let l of Object.values(r))l?.valid===!1&&t++;k(t)}},[c,n,s,o]),$=x(r=>{y().then(d=>{let t=d?.fields[a.name]?.collapsed,l=t&&t?.length?t:[];r?l.includes(o.id)||l.push(o.id):l.includes(o.id)&&l.splice(l.indexOf(o.id),1),P(a.name,{collapsed:l,hello:"hi"})})},[y,a.name,P,o.id]),C=x(()=>{c.update(()=>{M(n).remove()})},[c,n]);return A(w.Fragment,{children:[F(H,{className:R,collapsibleStyle:h?"error":"default",header:A("div",{className:`${e}__block-header`,children:[A("div",{children:[F(q,{className:`${e}__block-pill ${e}__block-pill-${o?.blockType}`,pillStyle:"white",children:typeof g.singular=="string"?W(g.singular,S):"[Singular Label]"}),F(Q,{path:"blockName",readOnly:a?.readOnly}),h&&F(J,{count:p,i18n:S,withMessage:!0})]}),c.isEditable()&&F(z,{buttonStyle:"icon-label",className:`${e}__removeButton`,disabled:a?.readOnly,icon:"x",onClick:r=>{r.preventDefault(),C()},round:!0,tooltip:"Remove Block"})]}),isCollapsed:T,onToggle:r=>{$(r),B(r)},children:F(G,{className:`${e}__fields`,fieldMap:Array.isArray(m)?m:[],forceRender:!0,margins:"small",path:"",readOnly:!1,schemaPath:_})},0),F(O,{onChange:N})]})};import{jsx as u,jsxs as be}from"react/jsx-runtime";var f="lexical-block",Ie=i=>{let{formData:e,nodeKey:a}=i,o=se(),m=ce(),{id:n}=ie(),{path:g,schemaPath:_}=ne(),{editorConfig:S,field:c}=D(),[y,P]=ue(!1),{field:{richTextComponentMap:T}}=D(),B=`feature.blocks.fields.${e?.blockType}`,s=`${_}.feature.blocks.${e?.blockType}`,p=S?.resolvedFeatureMap?.get("blocks")?.clientFeatureProps?.reducedBlocks?.find(C=>C.slug===e?.blockType),k=T.get(B);pe(()=>{e&&(async()=>{let r=await V({apiRoute:o.routes.api,body:{id:n,data:JSON.parse(JSON.stringify(e)),operation:"update",schemaPath:s},serverURL:o.serverURL});r&&P({...r,blockName:{initialValue:"",passesCondition:!0,valid:!0,value:e.blockName}})})()},[o.routes.api,o.serverURL,s,n]);let h=me(async({formState:C})=>({...await V({apiRoute:o.routes.api,body:{id:n,formState:C,operation:"update",schemaPath:s},serverURL:o.serverURL}),blockName:{initialValue:"",passesCondition:!0,valid:!0,value:e.blockName}}),[o.routes.api,o.serverURL,s,n,e.blockName]),{i18n:R}=de(),N=[`${f}__row`,`${f}__row--no-errors`].filter(Boolean).join(" "),$=fe(()=>p&&y!==!1?u(te,{beforeSubmit:[h],fields:k,initialState:y,onChange:[h],submitted:m,uuid:he(),children:u(L,{baseClass:f,field:c,formData:e,formSchema:Array.isArray(k)?k:[],nodeKey:a,path:`${g}.feature.blocks.${e.blockType}`,reducedBlock:p,schemaPath:s})}):u(oe,{className:N,collapsibleStyle:"default",header:u("div",{className:`${f}__block-header`,children:be("div",{children:[u(ae,{className:`${f}__block-pill ${f}__block-pill-${e?.blockType}`,pillStyle:"white",children:typeof p.labels.singular=="string"?ye(p.labels.singular,R):"[Singular Label]"}),u(re,{path:"blockName",readOnly:c?.readOnly})]})}),children:u(le,{height:"35vh"})},0),[N,k,c,a,R,m,y,p,h,s,g]);return u("div",{className:f+" "+f+"-"+e.blockType,children:$})};export{Ie as BlockComponent};
2
- //# sourceMappingURL=component-X4LSLSWF.js.map