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

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 (677) 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/chunk-JIP5PWU3.js +2 -0
  7. package/dist/exports/client/chunk-JIP5PWU3.js.map +7 -0
  8. package/dist/exports/client/{chunk-QU5MKT75.js → chunk-TZLHAUCW.js} +2 -2
  9. package/dist/exports/client/{component-E2NHAHBC.js → component-CEUVAHRO.js} +2 -2
  10. package/dist/exports/client/component-CEUVAHRO.js.map +7 -0
  11. package/dist/exports/client/component-PEFMKIXI.js +2 -0
  12. package/dist/exports/client/component-PEFMKIXI.js.map +7 -0
  13. package/dist/exports/client/index.d.ts +36 -27
  14. package/dist/exports/client/index.d.ts.map +1 -1
  15. package/dist/exports/client/index.js +7 -5
  16. package/dist/exports/client/index.js.map +4 -4
  17. package/dist/features/align/feature.client.d.ts +1 -2
  18. package/dist/features/align/feature.client.d.ts.map +1 -1
  19. package/dist/features/align/feature.client.js +9 -16
  20. package/dist/features/align/feature.client.js.map +1 -1
  21. package/dist/features/align/feature.server.d.ts +1 -2
  22. package/dist/features/align/feature.server.d.ts.map +1 -1
  23. package/dist/features/align/feature.server.js +9 -15
  24. package/dist/features/align/feature.server.js.map +1 -1
  25. package/dist/features/align/i18n.js.map +1 -1
  26. package/dist/features/align/toolbarAlignGroup.js.map +1 -1
  27. package/dist/features/blockquote/feature.client.d.ts +1 -2
  28. package/dist/features/blockquote/feature.client.d.ts.map +1 -1
  29. package/dist/features/blockquote/feature.client.js +37 -44
  30. package/dist/features/blockquote/feature.client.js.map +1 -1
  31. package/dist/features/blockquote/feature.server.d.ts +1 -2
  32. package/dist/features/blockquote/feature.server.d.ts.map +1 -1
  33. package/dist/features/blockquote/feature.server.js +35 -40
  34. package/dist/features/blockquote/feature.server.js.map +1 -1
  35. package/dist/features/blockquote/i18n.js.map +1 -1
  36. package/dist/features/blockquote/markdownTransformer.js.map +1 -1
  37. package/dist/features/blocks/component/BlockContent.js +2 -2
  38. package/dist/features/blocks/component/BlockContent.js.map +1 -1
  39. package/dist/features/blocks/component/FormSavePlugin.js.map +1 -1
  40. package/dist/features/blocks/component/index.js +1 -1
  41. package/dist/features/blocks/component/index.js.map +1 -1
  42. package/dist/features/blocks/component/removeEmptyArrayValues.js.map +1 -1
  43. package/dist/features/blocks/drawer/index.js +1 -1
  44. package/dist/features/blocks/drawer/index.js.map +1 -1
  45. package/dist/features/blocks/feature.client.d.ts +1 -2
  46. package/dist/features/blocks/feature.client.d.ts.map +1 -1
  47. package/dist/features/blocks/feature.client.js +74 -80
  48. package/dist/features/blocks/feature.client.js.map +1 -1
  49. package/dist/features/blocks/feature.server.d.ts +1 -2
  50. package/dist/features/blocks/feature.server.d.ts.map +1 -1
  51. package/dist/features/blocks/feature.server.js +88 -90
  52. package/dist/features/blocks/feature.server.js.map +1 -1
  53. package/dist/features/blocks/graphQLPopulationPromise.d.ts +1 -1
  54. package/dist/features/blocks/graphQLPopulationPromise.d.ts.map +1 -1
  55. package/dist/features/blocks/graphQLPopulationPromise.js.map +1 -1
  56. package/dist/features/blocks/i18n.js.map +1 -1
  57. package/dist/features/blocks/nodes/BlocksNode.js.map +1 -1
  58. package/dist/features/blocks/plugin/commands.js.map +1 -1
  59. package/dist/features/blocks/plugin/index.d.ts +1 -1
  60. package/dist/features/blocks/plugin/index.d.ts.map +1 -1
  61. package/dist/features/blocks/plugin/index.js.map +1 -1
  62. package/dist/features/blocks/validate.d.ts +1 -1
  63. package/dist/features/blocks/validate.d.ts.map +1 -1
  64. package/dist/features/blocks/validate.js.map +1 -1
  65. package/dist/features/converters/html/converter/converters/linebreak.js.map +1 -1
  66. package/dist/features/converters/html/converter/converters/paragraph.js.map +1 -1
  67. package/dist/features/converters/html/converter/converters/text.js.map +1 -1
  68. package/dist/features/converters/html/converter/defaultConverters.js.map +1 -1
  69. package/dist/features/converters/html/converter/index.js.map +1 -1
  70. package/dist/features/converters/html/converter/types.js.map +1 -1
  71. package/dist/features/converters/html/feature.server.d.ts +1 -2
  72. package/dist/features/converters/html/feature.server.d.ts.map +1 -1
  73. package/dist/features/converters/html/feature.server.js +6 -12
  74. package/dist/features/converters/html/feature.server.js.map +1 -1
  75. package/dist/features/converters/html/field/index.js +1 -1
  76. package/dist/features/converters/html/field/index.js.map +1 -1
  77. package/dist/features/createClientComponent.d.ts +3 -2
  78. package/dist/features/createClientComponent.d.ts.map +1 -1
  79. package/dist/features/createClientComponent.js.map +1 -1
  80. package/dist/features/createFeaturePropComponent.d.ts.map +1 -1
  81. package/dist/features/createFeaturePropComponent.js.map +1 -1
  82. package/dist/features/debug/testRecorder/feature.client.d.ts +1 -2
  83. package/dist/features/debug/testRecorder/feature.client.d.ts.map +1 -1
  84. package/dist/features/debug/testRecorder/feature.client.js +9 -16
  85. package/dist/features/debug/testRecorder/feature.client.js.map +1 -1
  86. package/dist/features/debug/testRecorder/feature.server.d.ts +1 -2
  87. package/dist/features/debug/testRecorder/feature.server.d.ts.map +1 -1
  88. package/dist/features/debug/testRecorder/feature.server.js +8 -13
  89. package/dist/features/debug/testRecorder/feature.server.js.map +1 -1
  90. package/dist/features/debug/testRecorder/plugin/index.d.ts +1 -1
  91. package/dist/features/debug/testRecorder/plugin/index.d.ts.map +1 -1
  92. package/dist/features/debug/testRecorder/plugin/index.js.map +1 -1
  93. package/dist/features/debug/treeView/feature.client.d.ts +1 -2
  94. package/dist/features/debug/treeView/feature.client.d.ts.map +1 -1
  95. package/dist/features/debug/treeView/feature.client.js +9 -16
  96. package/dist/features/debug/treeView/feature.client.js.map +1 -1
  97. package/dist/features/debug/treeView/feature.server.d.ts +1 -2
  98. package/dist/features/debug/treeView/feature.server.d.ts.map +1 -1
  99. package/dist/features/debug/treeView/feature.server.js +8 -13
  100. package/dist/features/debug/treeView/feature.server.js.map +1 -1
  101. package/dist/features/debug/treeView/plugin/index.d.ts +1 -1
  102. package/dist/features/debug/treeView/plugin/index.d.ts.map +1 -1
  103. package/dist/features/debug/treeView/plugin/index.js.map +1 -1
  104. package/dist/features/format/bold/feature.client.d.ts +1 -2
  105. package/dist/features/format/bold/feature.client.d.ts.map +1 -1
  106. package/dist/features/format/bold/feature.client.js +16 -23
  107. package/dist/features/format/bold/feature.client.js.map +1 -1
  108. package/dist/features/format/bold/feature.server.d.ts +1 -2
  109. package/dist/features/format/bold/feature.server.d.ts.map +1 -1
  110. package/dist/features/format/bold/feature.server.js +21 -24
  111. package/dist/features/format/bold/feature.server.js.map +1 -1
  112. package/dist/features/format/bold/markdownTransformers.js.map +1 -1
  113. package/dist/features/format/inlineCode/feature.client.d.ts +1 -2
  114. package/dist/features/format/inlineCode/feature.client.d.ts.map +1 -1
  115. package/dist/features/format/inlineCode/feature.client.js +12 -21
  116. package/dist/features/format/inlineCode/feature.client.js.map +1 -1
  117. package/dist/features/format/inlineCode/feature.server.d.ts +1 -2
  118. package/dist/features/format/inlineCode/feature.server.d.ts.map +1 -1
  119. package/dist/features/format/inlineCode/feature.server.js +11 -16
  120. package/dist/features/format/inlineCode/feature.server.js.map +1 -1
  121. package/dist/features/format/inlineCode/markdownTransformers.js.map +1 -1
  122. package/dist/features/format/italic/feature.client.d.ts +1 -2
  123. package/dist/features/format/italic/feature.client.d.ts.map +1 -1
  124. package/dist/features/format/italic/feature.client.js +13 -22
  125. package/dist/features/format/italic/feature.client.js.map +1 -1
  126. package/dist/features/format/italic/feature.server.d.ts +1 -2
  127. package/dist/features/format/italic/feature.server.d.ts.map +1 -1
  128. package/dist/features/format/italic/feature.server.js +12 -17
  129. package/dist/features/format/italic/feature.server.js.map +1 -1
  130. package/dist/features/format/italic/markdownTransformers.js.map +1 -1
  131. package/dist/features/format/shared/toolbarFormatGroup.js.map +1 -1
  132. package/dist/features/format/strikethrough/feature.client.d.ts +1 -2
  133. package/dist/features/format/strikethrough/feature.client.d.ts.map +1 -1
  134. package/dist/features/format/strikethrough/feature.client.js +12 -21
  135. package/dist/features/format/strikethrough/feature.client.js.map +1 -1
  136. package/dist/features/format/strikethrough/feature.server.d.ts +1 -2
  137. package/dist/features/format/strikethrough/feature.server.d.ts.map +1 -1
  138. package/dist/features/format/strikethrough/feature.server.js +11 -16
  139. package/dist/features/format/strikethrough/feature.server.js.map +1 -1
  140. package/dist/features/format/strikethrough/markdownTransformers.js.map +1 -1
  141. package/dist/features/format/subscript/feature.client.d.ts +1 -2
  142. package/dist/features/format/subscript/feature.client.d.ts.map +1 -1
  143. package/dist/features/format/subscript/feature.client.js +9 -18
  144. package/dist/features/format/subscript/feature.client.js.map +1 -1
  145. package/dist/features/format/subscript/feature.server.d.ts +1 -2
  146. package/dist/features/format/subscript/feature.server.d.ts.map +1 -1
  147. package/dist/features/format/subscript/feature.server.js +8 -13
  148. package/dist/features/format/subscript/feature.server.js.map +1 -1
  149. package/dist/features/format/superscript/feature.client.d.ts +1 -2
  150. package/dist/features/format/superscript/feature.client.d.ts.map +1 -1
  151. package/dist/features/format/superscript/feature.client.js +9 -18
  152. package/dist/features/format/superscript/feature.client.js.map +1 -1
  153. package/dist/features/format/superscript/feature.server.d.ts +1 -2
  154. package/dist/features/format/superscript/feature.server.d.ts.map +1 -1
  155. package/dist/features/format/superscript/feature.server.js +8 -13
  156. package/dist/features/format/superscript/feature.server.js.map +1 -1
  157. package/dist/features/format/underline/feature.client.d.ts +1 -2
  158. package/dist/features/format/underline/feature.client.d.ts.map +1 -1
  159. package/dist/features/format/underline/feature.client.js +9 -18
  160. package/dist/features/format/underline/feature.client.js.map +1 -1
  161. package/dist/features/format/underline/feature.server.d.ts +1 -2
  162. package/dist/features/format/underline/feature.server.d.ts.map +1 -1
  163. package/dist/features/format/underline/feature.server.js +8 -13
  164. package/dist/features/format/underline/feature.server.js.map +1 -1
  165. package/dist/features/heading/feature.client.d.ts +1 -2
  166. package/dist/features/heading/feature.client.d.ts.map +1 -1
  167. package/dist/features/heading/feature.client.js +70 -76
  168. package/dist/features/heading/feature.client.js.map +1 -1
  169. package/dist/features/heading/feature.server.d.ts +1 -2
  170. package/dist/features/heading/feature.server.d.ts.map +1 -1
  171. package/dist/features/heading/feature.server.js +51 -53
  172. package/dist/features/heading/feature.server.js.map +1 -1
  173. package/dist/features/heading/i18n.js.map +1 -1
  174. package/dist/features/heading/markdownTransformer.js.map +1 -1
  175. package/dist/features/horizontalRule/component/index.js.map +1 -1
  176. package/dist/features/horizontalRule/feature.client.d.ts +1 -2
  177. package/dist/features/horizontalRule/feature.client.d.ts.map +1 -1
  178. package/dist/features/horizontalRule/feature.client.js +58 -65
  179. package/dist/features/horizontalRule/feature.client.js.map +1 -1
  180. package/dist/features/horizontalRule/feature.server.d.ts +1 -2
  181. package/dist/features/horizontalRule/feature.server.d.ts.map +1 -1
  182. package/dist/features/horizontalRule/feature.server.js +26 -31
  183. package/dist/features/horizontalRule/feature.server.js.map +1 -1
  184. package/dist/features/horizontalRule/i18n.js.map +1 -1
  185. package/dist/features/horizontalRule/markdownTransformer.js.map +1 -1
  186. package/dist/features/horizontalRule/nodes/HorizontalRuleNode.js.map +1 -1
  187. package/dist/features/horizontalRule/plugin/index.d.ts +1 -1
  188. package/dist/features/horizontalRule/plugin/index.d.ts.map +1 -1
  189. package/dist/features/horizontalRule/plugin/index.js.map +1 -1
  190. package/dist/features/indent/feature.client.d.ts +1 -2
  191. package/dist/features/indent/feature.client.d.ts.map +1 -1
  192. package/dist/features/indent/feature.client.js +9 -16
  193. package/dist/features/indent/feature.client.js.map +1 -1
  194. package/dist/features/indent/feature.server.d.ts +1 -2
  195. package/dist/features/indent/feature.server.d.ts.map +1 -1
  196. package/dist/features/indent/feature.server.js +9 -15
  197. package/dist/features/indent/feature.server.js.map +1 -1
  198. package/dist/features/indent/i18n.js.map +1 -1
  199. package/dist/features/indent/toolbarIndentGroup.js.map +1 -1
  200. package/dist/features/link/drawer/baseFields.d.ts +2 -2
  201. package/dist/features/link/drawer/baseFields.d.ts.map +1 -1
  202. package/dist/features/link/drawer/baseFields.js.map +1 -1
  203. package/dist/features/link/drawer/index.js.map +1 -1
  204. package/dist/features/link/drawer/types.js.map +1 -1
  205. package/dist/features/link/feature.client.d.ts +3 -4
  206. package/dist/features/link/feature.client.d.ts.map +1 -1
  207. package/dist/features/link/feature.client.js +34 -41
  208. package/dist/features/link/feature.client.js.map +1 -1
  209. package/dist/features/link/feature.server.d.ts +4 -6
  210. package/dist/features/link/feature.server.d.ts.map +1 -1
  211. package/dist/features/link/feature.server.js +123 -125
  212. package/dist/features/link/feature.server.js.map +1 -1
  213. package/dist/features/link/graphQLPopulationPromise.d.ts +1 -1
  214. package/dist/features/link/graphQLPopulationPromise.d.ts.map +1 -1
  215. package/dist/features/link/graphQLPopulationPromise.js.map +1 -1
  216. package/dist/features/link/i18n.js.map +1 -1
  217. package/dist/features/link/markdownTransformer.js.map +1 -1
  218. package/dist/features/link/nodes/AutoLinkNode.js.map +1 -1
  219. package/dist/features/link/nodes/LinkNode.js.map +1 -1
  220. package/dist/features/link/nodes/types.js.map +1 -1
  221. package/dist/features/link/plugins/autoLink/index.d.ts +1 -1
  222. package/dist/features/link/plugins/autoLink/index.d.ts.map +1 -1
  223. package/dist/features/link/plugins/autoLink/index.js.map +1 -1
  224. package/dist/features/link/plugins/clickableLink/index.d.ts +1 -1
  225. package/dist/features/link/plugins/clickableLink/index.d.ts.map +1 -1
  226. package/dist/features/link/plugins/clickableLink/index.js.map +1 -1
  227. package/dist/features/link/plugins/floatingLinkEditor/LinkEditor/commands.js.map +1 -1
  228. package/dist/features/link/plugins/floatingLinkEditor/LinkEditor/index.js.map +1 -1
  229. package/dist/features/link/plugins/floatingLinkEditor/index.d.ts +1 -1
  230. package/dist/features/link/plugins/floatingLinkEditor/index.d.ts.map +1 -1
  231. package/dist/features/link/plugins/floatingLinkEditor/index.js.map +1 -1
  232. package/dist/features/link/plugins/floatingLinkEditor/types.js.map +1 -1
  233. package/dist/features/link/plugins/floatingLinkEditor/utilities.d.ts +2 -2
  234. package/dist/features/link/plugins/floatingLinkEditor/utilities.d.ts.map +1 -1
  235. package/dist/features/link/plugins/floatingLinkEditor/utilities.js.map +1 -1
  236. package/dist/features/link/plugins/link/index.d.ts +1 -1
  237. package/dist/features/link/plugins/link/index.d.ts.map +1 -1
  238. package/dist/features/link/plugins/link/index.js.map +1 -1
  239. package/dist/features/link/validate.d.ts +1 -1
  240. package/dist/features/link/validate.d.ts.map +1 -1
  241. package/dist/features/link/validate.js.map +1 -1
  242. package/dist/features/lists/checklist/feature.client.d.ts +1 -2
  243. package/dist/features/lists/checklist/feature.client.d.ts.map +1 -1
  244. package/dist/features/lists/checklist/feature.client.js +50 -57
  245. package/dist/features/lists/checklist/feature.client.js.map +1 -1
  246. package/dist/features/lists/checklist/feature.server.d.ts +1 -2
  247. package/dist/features/lists/checklist/feature.server.d.ts.map +1 -1
  248. package/dist/features/lists/checklist/feature.server.js +28 -31
  249. package/dist/features/lists/checklist/feature.server.js.map +1 -1
  250. package/dist/features/lists/checklist/i18n.js.map +1 -1
  251. package/dist/features/lists/checklist/markdownTransformers.js.map +1 -1
  252. package/dist/features/lists/checklist/plugin/index.d.ts +1 -1
  253. package/dist/features/lists/checklist/plugin/index.d.ts.map +1 -1
  254. package/dist/features/lists/checklist/plugin/index.js.map +1 -1
  255. package/dist/features/lists/htmlConverter.js.map +1 -1
  256. package/dist/features/lists/orderedList/feature.client.d.ts +1 -2
  257. package/dist/features/lists/orderedList/feature.client.d.ts.map +1 -1
  258. package/dist/features/lists/orderedList/feature.client.js +39 -46
  259. package/dist/features/lists/orderedList/feature.client.js.map +1 -1
  260. package/dist/features/lists/orderedList/feature.server.d.ts +1 -2
  261. package/dist/features/lists/orderedList/feature.server.d.ts.map +1 -1
  262. package/dist/features/lists/orderedList/feature.server.js +28 -31
  263. package/dist/features/lists/orderedList/feature.server.js.map +1 -1
  264. package/dist/features/lists/orderedList/i18n.js.map +1 -1
  265. package/dist/features/lists/orderedList/markdownTransformer.js.map +1 -1
  266. package/dist/features/lists/plugin/index.d.ts +1 -1
  267. package/dist/features/lists/plugin/index.d.ts.map +1 -1
  268. package/dist/features/lists/plugin/index.js.map +1 -1
  269. package/dist/features/lists/shared/markdown.d.ts +1 -1
  270. package/dist/features/lists/shared/markdown.js.map +1 -1
  271. package/dist/features/lists/shared/slashMenuListGroup.js.map +1 -1
  272. package/dist/features/lists/unorderedList/feature.client.d.ts +1 -2
  273. package/dist/features/lists/unorderedList/feature.client.d.ts.map +1 -1
  274. package/dist/features/lists/unorderedList/feature.client.js +40 -49
  275. package/dist/features/lists/unorderedList/feature.client.js.map +1 -1
  276. package/dist/features/lists/unorderedList/feature.server.d.ts +1 -2
  277. package/dist/features/lists/unorderedList/feature.server.d.ts.map +1 -1
  278. package/dist/features/lists/unorderedList/feature.server.js +26 -31
  279. package/dist/features/lists/unorderedList/feature.server.js.map +1 -1
  280. package/dist/features/lists/unorderedList/i18n.js.map +1 -1
  281. package/dist/features/lists/unorderedList/markdownTransformer.js.map +1 -1
  282. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/heading/client.d.ts +0 -1
  283. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/heading/client.d.ts.map +1 -1
  284. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/heading/client.js.map +1 -1
  285. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/heading/converter.js.map +1 -1
  286. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/heading/index.js +1 -1
  287. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/heading/index.js.map +1 -1
  288. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/link/client.d.ts +0 -1
  289. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/link/client.d.ts.map +1 -1
  290. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/link/client.js.map +1 -1
  291. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/link/converter.js.map +1 -1
  292. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/link/index.js +1 -1
  293. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/link/index.js.map +1 -1
  294. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/list/client.d.ts +0 -1
  295. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/list/client.d.ts.map +1 -1
  296. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/list/client.js.map +1 -1
  297. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/list/converter.js.map +1 -1
  298. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/list/index.js +1 -1
  299. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/list/index.js.map +1 -1
  300. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/listItem/client.d.ts +0 -1
  301. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/listItem/client.d.ts.map +1 -1
  302. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/listItem/client.js.map +1 -1
  303. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/listItem/converter.js.map +1 -1
  304. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/listItem/index.js +1 -1
  305. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/listItem/index.js.map +1 -1
  306. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/quote/client.d.ts +0 -1
  307. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/quote/client.d.ts.map +1 -1
  308. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/quote/client.js.map +1 -1
  309. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/quote/converter.js.map +1 -1
  310. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/quote/index.js +1 -1
  311. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/quote/index.js.map +1 -1
  312. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/unknown/client.d.ts +0 -1
  313. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/unknown/client.d.ts.map +1 -1
  314. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/unknown/client.js.map +1 -1
  315. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/unknown/converter.js.map +1 -1
  316. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/unknown/index.js +1 -1
  317. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/unknown/index.js.map +1 -1
  318. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/upload/client.d.ts +0 -1
  319. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/upload/client.d.ts.map +1 -1
  320. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/upload/client.js.map +1 -1
  321. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/upload/converter.js.map +1 -1
  322. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/upload/index.js +1 -1
  323. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/upload/index.js.map +1 -1
  324. package/dist/features/migrations/lexicalPluginToLexical/converter/defaultConverters.js.map +1 -1
  325. package/dist/features/migrations/lexicalPluginToLexical/converter/index.js.map +1 -1
  326. package/dist/features/migrations/lexicalPluginToLexical/converter/types.d.ts +1 -1
  327. package/dist/features/migrations/lexicalPluginToLexical/converter/types.js.map +1 -1
  328. package/dist/features/migrations/lexicalPluginToLexical/feature.client.d.ts +1 -2
  329. package/dist/features/migrations/lexicalPluginToLexical/feature.client.d.ts.map +1 -1
  330. package/dist/features/migrations/lexicalPluginToLexical/feature.client.js +20 -27
  331. package/dist/features/migrations/lexicalPluginToLexical/feature.client.js.map +1 -1
  332. package/dist/features/migrations/lexicalPluginToLexical/feature.server.d.ts +1 -2
  333. package/dist/features/migrations/lexicalPluginToLexical/feature.server.d.ts.map +1 -1
  334. package/dist/features/migrations/lexicalPluginToLexical/feature.server.js +39 -42
  335. package/dist/features/migrations/lexicalPluginToLexical/feature.server.js.map +1 -1
  336. package/dist/features/migrations/lexicalPluginToLexical/nodes/unknownConvertedNode/Component.js.map +1 -1
  337. package/dist/features/migrations/lexicalPluginToLexical/nodes/unknownConvertedNode/index.js.map +1 -1
  338. package/dist/features/migrations/slateToLexical/converter/converters/blockquote/client.d.ts +0 -1
  339. package/dist/features/migrations/slateToLexical/converter/converters/blockquote/client.d.ts.map +1 -1
  340. package/dist/features/migrations/slateToLexical/converter/converters/blockquote/client.js.map +1 -1
  341. package/dist/features/migrations/slateToLexical/converter/converters/blockquote/converter.js.map +1 -1
  342. package/dist/features/migrations/slateToLexical/converter/converters/blockquote/index.js +1 -1
  343. package/dist/features/migrations/slateToLexical/converter/converters/blockquote/index.js.map +1 -1
  344. package/dist/features/migrations/slateToLexical/converter/converters/heading/client.d.ts +0 -1
  345. package/dist/features/migrations/slateToLexical/converter/converters/heading/client.d.ts.map +1 -1
  346. package/dist/features/migrations/slateToLexical/converter/converters/heading/client.js.map +1 -1
  347. package/dist/features/migrations/slateToLexical/converter/converters/heading/converter.js.map +1 -1
  348. package/dist/features/migrations/slateToLexical/converter/converters/heading/index.js +1 -1
  349. package/dist/features/migrations/slateToLexical/converter/converters/heading/index.js.map +1 -1
  350. package/dist/features/migrations/slateToLexical/converter/converters/indent/client.d.ts +0 -1
  351. package/dist/features/migrations/slateToLexical/converter/converters/indent/client.d.ts.map +1 -1
  352. package/dist/features/migrations/slateToLexical/converter/converters/indent/client.js.map +1 -1
  353. package/dist/features/migrations/slateToLexical/converter/converters/indent/converter.js.map +1 -1
  354. package/dist/features/migrations/slateToLexical/converter/converters/indent/index.js +1 -1
  355. package/dist/features/migrations/slateToLexical/converter/converters/indent/index.js.map +1 -1
  356. package/dist/features/migrations/slateToLexical/converter/converters/link/client.d.ts +0 -1
  357. package/dist/features/migrations/slateToLexical/converter/converters/link/client.d.ts.map +1 -1
  358. package/dist/features/migrations/slateToLexical/converter/converters/link/client.js.map +1 -1
  359. package/dist/features/migrations/slateToLexical/converter/converters/link/converter.js.map +1 -1
  360. package/dist/features/migrations/slateToLexical/converter/converters/link/index.js +1 -1
  361. package/dist/features/migrations/slateToLexical/converter/converters/link/index.js.map +1 -1
  362. package/dist/features/migrations/slateToLexical/converter/converters/listItem/client.d.ts +0 -1
  363. package/dist/features/migrations/slateToLexical/converter/converters/listItem/client.d.ts.map +1 -1
  364. package/dist/features/migrations/slateToLexical/converter/converters/listItem/client.js.map +1 -1
  365. package/dist/features/migrations/slateToLexical/converter/converters/listItem/converter.js.map +1 -1
  366. package/dist/features/migrations/slateToLexical/converter/converters/listItem/index.js +1 -1
  367. package/dist/features/migrations/slateToLexical/converter/converters/listItem/index.js.map +1 -1
  368. package/dist/features/migrations/slateToLexical/converter/converters/orderedList/client.d.ts +0 -1
  369. package/dist/features/migrations/slateToLexical/converter/converters/orderedList/client.d.ts.map +1 -1
  370. package/dist/features/migrations/slateToLexical/converter/converters/orderedList/client.js.map +1 -1
  371. package/dist/features/migrations/slateToLexical/converter/converters/orderedList/converter.js.map +1 -1
  372. package/dist/features/migrations/slateToLexical/converter/converters/orderedList/index.js +1 -1
  373. package/dist/features/migrations/slateToLexical/converter/converters/orderedList/index.js.map +1 -1
  374. package/dist/features/migrations/slateToLexical/converter/converters/relationship/client.d.ts +0 -1
  375. package/dist/features/migrations/slateToLexical/converter/converters/relationship/client.d.ts.map +1 -1
  376. package/dist/features/migrations/slateToLexical/converter/converters/relationship/client.js.map +1 -1
  377. package/dist/features/migrations/slateToLexical/converter/converters/relationship/converter.js.map +1 -1
  378. package/dist/features/migrations/slateToLexical/converter/converters/relationship/index.js +1 -1
  379. package/dist/features/migrations/slateToLexical/converter/converters/relationship/index.js.map +1 -1
  380. package/dist/features/migrations/slateToLexical/converter/converters/unknown/client.d.ts +0 -1
  381. package/dist/features/migrations/slateToLexical/converter/converters/unknown/client.d.ts.map +1 -1
  382. package/dist/features/migrations/slateToLexical/converter/converters/unknown/client.js.map +1 -1
  383. package/dist/features/migrations/slateToLexical/converter/converters/unknown/converter.js.map +1 -1
  384. package/dist/features/migrations/slateToLexical/converter/converters/unknown/index.js +1 -1
  385. package/dist/features/migrations/slateToLexical/converter/converters/unknown/index.js.map +1 -1
  386. package/dist/features/migrations/slateToLexical/converter/converters/unorderedList/client.d.ts +0 -1
  387. package/dist/features/migrations/slateToLexical/converter/converters/unorderedList/client.d.ts.map +1 -1
  388. package/dist/features/migrations/slateToLexical/converter/converters/unorderedList/client.js.map +1 -1
  389. package/dist/features/migrations/slateToLexical/converter/converters/unorderedList/converter.js.map +1 -1
  390. package/dist/features/migrations/slateToLexical/converter/converters/unorderedList/index.js +1 -1
  391. package/dist/features/migrations/slateToLexical/converter/converters/unorderedList/index.js.map +1 -1
  392. package/dist/features/migrations/slateToLexical/converter/converters/upload/client.d.ts +0 -1
  393. package/dist/features/migrations/slateToLexical/converter/converters/upload/client.d.ts.map +1 -1
  394. package/dist/features/migrations/slateToLexical/converter/converters/upload/client.js.map +1 -1
  395. package/dist/features/migrations/slateToLexical/converter/converters/upload/converter.js.map +1 -1
  396. package/dist/features/migrations/slateToLexical/converter/converters/upload/index.js +1 -1
  397. package/dist/features/migrations/slateToLexical/converter/converters/upload/index.js.map +1 -1
  398. package/dist/features/migrations/slateToLexical/converter/defaultConverters.js.map +1 -1
  399. package/dist/features/migrations/slateToLexical/converter/index.js.map +1 -1
  400. package/dist/features/migrations/slateToLexical/converter/types.d.ts +1 -1
  401. package/dist/features/migrations/slateToLexical/converter/types.js.map +1 -1
  402. package/dist/features/migrations/slateToLexical/feature.client.d.ts +1 -2
  403. package/dist/features/migrations/slateToLexical/feature.client.d.ts.map +1 -1
  404. package/dist/features/migrations/slateToLexical/feature.client.js +20 -27
  405. package/dist/features/migrations/slateToLexical/feature.client.js.map +1 -1
  406. package/dist/features/migrations/slateToLexical/feature.server.d.ts +1 -2
  407. package/dist/features/migrations/slateToLexical/feature.server.d.ts.map +1 -1
  408. package/dist/features/migrations/slateToLexical/feature.server.js +39 -42
  409. package/dist/features/migrations/slateToLexical/feature.server.js.map +1 -1
  410. package/dist/features/migrations/slateToLexical/nodes/unknownConvertedNode/Component.js.map +1 -1
  411. package/dist/features/migrations/slateToLexical/nodes/unknownConvertedNode/index.js.map +1 -1
  412. package/dist/features/paragraph/feature.client.d.ts +1 -2
  413. package/dist/features/paragraph/feature.client.d.ts.map +1 -1
  414. package/dist/features/paragraph/feature.client.js +33 -40
  415. package/dist/features/paragraph/feature.client.js.map +1 -1
  416. package/dist/features/paragraph/feature.server.d.ts +1 -2
  417. package/dist/features/paragraph/feature.server.d.ts.map +1 -1
  418. package/dist/features/paragraph/feature.server.js +10 -15
  419. package/dist/features/paragraph/feature.server.js.map +1 -1
  420. package/dist/features/paragraph/i18n.js.map +1 -1
  421. package/dist/features/relationship/drawer/commands.js.map +1 -1
  422. package/dist/features/relationship/drawer/index.d.ts.map +1 -1
  423. package/dist/features/relationship/drawer/index.js.map +1 -1
  424. package/dist/features/relationship/feature.client.d.ts +3 -4
  425. package/dist/features/relationship/feature.client.d.ts.map +1 -1
  426. package/dist/features/relationship/feature.client.js +60 -67
  427. package/dist/features/relationship/feature.client.js.map +1 -1
  428. package/dist/features/relationship/feature.server.d.ts +4 -4
  429. package/dist/features/relationship/feature.server.d.ts.map +1 -1
  430. package/dist/features/relationship/feature.server.js +45 -51
  431. package/dist/features/relationship/feature.server.js.map +1 -1
  432. package/dist/features/relationship/graphQLPopulationPromise.d.ts +1 -1
  433. package/dist/features/relationship/graphQLPopulationPromise.d.ts.map +1 -1
  434. package/dist/features/relationship/graphQLPopulationPromise.js.map +1 -1
  435. package/dist/features/relationship/i18n.js.map +1 -1
  436. package/dist/features/relationship/nodes/RelationshipNode.js.map +1 -1
  437. package/dist/features/relationship/nodes/components/RelationshipComponent.d.ts.map +1 -1
  438. package/dist/features/relationship/nodes/components/RelationshipComponent.js.map +1 -1
  439. package/dist/features/relationship/plugins/index.d.ts +1 -1
  440. package/dist/features/relationship/plugins/index.d.ts.map +1 -1
  441. package/dist/features/relationship/plugins/index.js.map +1 -1
  442. package/dist/features/relationship/utils/EnabledRelationshipsCondition.js.map +1 -1
  443. package/dist/features/shared/slashMenu/basicGroup.js.map +1 -1
  444. package/dist/features/shared/toolbar/addDropdownGroup.js.map +1 -1
  445. package/dist/features/shared/toolbar/featureButtonsGroup.js.map +1 -1
  446. package/dist/features/shared/toolbar/textDropdownGroup.js.map +1 -1
  447. package/dist/features/toolbars/fixed/Toolbar/index.d.ts +1 -1
  448. package/dist/features/toolbars/fixed/Toolbar/index.d.ts.map +1 -1
  449. package/dist/features/toolbars/fixed/Toolbar/index.js.map +1 -1
  450. package/dist/features/toolbars/fixed/feature.client.d.ts +1 -2
  451. package/dist/features/toolbars/fixed/feature.client.d.ts.map +1 -1
  452. package/dist/features/toolbars/fixed/feature.client.js +9 -16
  453. package/dist/features/toolbars/fixed/feature.client.js.map +1 -1
  454. package/dist/features/toolbars/fixed/feature.server.d.ts +1 -2
  455. package/dist/features/toolbars/fixed/feature.server.d.ts.map +1 -1
  456. package/dist/features/toolbars/fixed/feature.server.js +16 -18
  457. package/dist/features/toolbars/fixed/feature.server.js.map +1 -1
  458. package/dist/features/toolbars/inline/Toolbar/index.d.ts +1 -1
  459. package/dist/features/toolbars/inline/Toolbar/index.d.ts.map +1 -1
  460. package/dist/features/toolbars/inline/Toolbar/index.js.map +1 -1
  461. package/dist/features/toolbars/inline/feature.client.d.ts +1 -2
  462. package/dist/features/toolbars/inline/feature.client.d.ts.map +1 -1
  463. package/dist/features/toolbars/inline/feature.client.js +9 -16
  464. package/dist/features/toolbars/inline/feature.client.js.map +1 -1
  465. package/dist/features/toolbars/inline/feature.server.d.ts +1 -2
  466. package/dist/features/toolbars/inline/feature.server.d.ts.map +1 -1
  467. package/dist/features/toolbars/inline/feature.server.js +8 -13
  468. package/dist/features/toolbars/inline/feature.server.js.map +1 -1
  469. package/dist/features/toolbars/shared/ToolbarButton/index.d.ts.map +1 -1
  470. package/dist/features/toolbars/shared/ToolbarButton/index.js.map +1 -1
  471. package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js.map +1 -1
  472. package/dist/features/toolbars/shared/ToolbarDropdown/index.d.ts.map +1 -1
  473. package/dist/features/toolbars/shared/ToolbarDropdown/index.js.map +1 -1
  474. package/dist/features/toolbars/types.d.ts +7 -2
  475. package/dist/features/toolbars/types.d.ts.map +1 -1
  476. package/dist/features/toolbars/types.js.map +1 -1
  477. package/dist/features/typeUtilities.d.ts +1 -1
  478. package/dist/features/typeUtilities.d.ts.map +1 -1
  479. package/dist/features/typeUtilities.js.map +1 -1
  480. package/dist/features/typesClient.d.ts +182 -0
  481. package/dist/features/typesClient.d.ts.map +1 -0
  482. package/dist/features/typesClient.js +3 -0
  483. package/dist/features/typesClient.js.map +1 -0
  484. package/dist/features/{types.d.ts → typesServer.d.ts} +15 -191
  485. package/dist/features/typesServer.d.ts.map +1 -0
  486. package/dist/features/typesServer.js +3 -0
  487. package/dist/features/typesServer.js.map +1 -0
  488. package/dist/features/upload/component/ExtraFieldsDrawer/index.js.map +1 -1
  489. package/dist/features/upload/component/index.d.ts.map +1 -1
  490. package/dist/features/upload/component/index.js +1 -1
  491. package/dist/features/upload/component/index.js.map +1 -1
  492. package/dist/features/upload/drawer/commands.js.map +1 -1
  493. package/dist/features/upload/drawer/index.d.ts.map +1 -1
  494. package/dist/features/upload/drawer/index.js.map +1 -1
  495. package/dist/features/upload/feature.client.d.ts +1 -2
  496. package/dist/features/upload/feature.client.d.ts.map +1 -1
  497. package/dist/features/upload/feature.client.js +62 -69
  498. package/dist/features/upload/feature.client.js.map +1 -1
  499. package/dist/features/upload/feature.server.d.ts +3 -4
  500. package/dist/features/upload/feature.server.d.ts.map +1 -1
  501. package/dist/features/upload/feature.server.js +166 -168
  502. package/dist/features/upload/feature.server.js.map +1 -1
  503. package/dist/features/upload/graphQLPopulationPromise.d.ts +1 -1
  504. package/dist/features/upload/graphQLPopulationPromise.d.ts.map +1 -1
  505. package/dist/features/upload/graphQLPopulationPromise.js.map +1 -1
  506. package/dist/features/upload/i18n.js.map +1 -1
  507. package/dist/features/upload/nodes/UploadNode.js.map +1 -1
  508. package/dist/features/upload/plugin/index.d.ts +1 -1
  509. package/dist/features/upload/plugin/index.d.ts.map +1 -1
  510. package/dist/features/upload/plugin/index.js.map +1 -1
  511. package/dist/features/upload/validate.d.ts +1 -1
  512. package/dist/features/upload/validate.d.ts.map +1 -1
  513. package/dist/features/upload/validate.js.map +1 -1
  514. package/dist/field/Field.d.ts.map +1 -1
  515. package/dist/field/Field.js.map +1 -1
  516. package/dist/field/index.d.ts.map +1 -1
  517. package/dist/field/index.js +9 -7
  518. package/dist/field/index.js.map +1 -1
  519. package/dist/i18n.js.map +1 -1
  520. package/dist/index.d.ts +9 -7
  521. package/dist/index.d.ts.map +1 -1
  522. package/dist/index.js +17 -17
  523. package/dist/index.js.map +1 -1
  524. package/dist/lexical/EditorPlugin.d.ts +1 -1
  525. package/dist/lexical/EditorPlugin.d.ts.map +1 -1
  526. package/dist/lexical/EditorPlugin.js.map +1 -1
  527. package/dist/lexical/LexicalEditor.js.map +1 -1
  528. package/dist/lexical/LexicalProvider.js.map +1 -1
  529. package/dist/lexical/config/client/EditorConfigProvider.d.ts.map +1 -1
  530. package/dist/lexical/config/client/EditorConfigProvider.js.map +1 -1
  531. package/dist/lexical/config/client/default.js.map +1 -1
  532. package/dist/lexical/config/client/loader.d.ts +1 -1
  533. package/dist/lexical/config/client/loader.d.ts.map +1 -1
  534. package/dist/lexical/config/client/loader.js +2 -2
  535. package/dist/lexical/config/client/loader.js.map +1 -1
  536. package/dist/lexical/config/client/sanitize.d.ts +1 -1
  537. package/dist/lexical/config/client/sanitize.d.ts.map +1 -1
  538. package/dist/lexical/config/client/sanitize.js +1 -1
  539. package/dist/lexical/config/client/sanitize.js.map +1 -1
  540. package/dist/lexical/config/server/default.d.ts +2 -2
  541. package/dist/lexical/config/server/default.d.ts.map +1 -1
  542. package/dist/lexical/config/server/default.js.map +1 -1
  543. package/dist/lexical/config/server/loader.d.ts +2 -2
  544. package/dist/lexical/config/server/loader.d.ts.map +1 -1
  545. package/dist/lexical/config/server/loader.js +2 -2
  546. package/dist/lexical/config/server/loader.js.map +1 -1
  547. package/dist/lexical/config/server/sanitize.d.ts +1 -1
  548. package/dist/lexical/config/server/sanitize.d.ts.map +1 -1
  549. package/dist/lexical/config/server/sanitize.js.map +1 -1
  550. package/dist/lexical/config/types.d.ts +4 -3
  551. package/dist/lexical/config/types.d.ts.map +1 -1
  552. package/dist/lexical/config/types.js.map +1 -1
  553. package/dist/lexical/nodes/index.js.map +1 -1
  554. package/dist/lexical/plugins/MarkdownShortcut/index.js.map +1 -1
  555. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js.map +1 -1
  556. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.js.map +1 -1
  557. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.d.ts +9 -1
  558. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.d.ts.map +1 -1
  559. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.js.map +1 -1
  560. package/dist/lexical/plugins/SlashMenu/index.js.map +1 -1
  561. package/dist/lexical/plugins/SlashMenu/useMenuTriggerMatch.js.map +1 -1
  562. package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.js.map +1 -1
  563. package/dist/lexical/plugins/handles/DraggableBlockPlugin/debounce.js.map +1 -1
  564. package/dist/lexical/plugins/handles/DraggableBlockPlugin/getBoundingRectWithoutTransform.js.map +1 -1
  565. package/dist/lexical/plugins/handles/DraggableBlockPlugin/highlightElemOriginalPosition.js.map +1 -1
  566. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js.map +1 -1
  567. package/dist/lexical/plugins/handles/DraggableBlockPlugin/setTargetLine.d.ts +0 -1
  568. package/dist/lexical/plugins/handles/DraggableBlockPlugin/setTargetLine.d.ts.map +1 -1
  569. package/dist/lexical/plugins/handles/DraggableBlockPlugin/setTargetLine.js.map +1 -1
  570. package/dist/lexical/plugins/handles/utils/calculateDistanceFromScrollerElem.js.map +1 -1
  571. package/dist/lexical/plugins/handles/utils/doesLineHeightAffectElement.js.map +1 -1
  572. package/dist/lexical/plugins/handles/utils/getCollapsedMargins.js.map +1 -1
  573. package/dist/lexical/plugins/handles/utils/getNodeCloseToPoint.js.map +1 -1
  574. package/dist/lexical/plugins/handles/utils/getTopLevelNodeKeys.js.map +1 -1
  575. package/dist/lexical/plugins/handles/utils/isOnHandleElement.js.map +1 -1
  576. package/dist/lexical/plugins/handles/utils/setHandlePosition.js.map +1 -1
  577. package/dist/lexical/theme/EditorTheme.js.map +1 -1
  578. package/dist/lexical/ui/ContentEditable.js.map +1 -1
  579. package/dist/lexical/ui/icons/AI/index.js.map +1 -1
  580. package/dist/lexical/ui/icons/Add/index.js.map +1 -1
  581. package/dist/lexical/ui/icons/AlignCenter/index.js.map +1 -1
  582. package/dist/lexical/ui/icons/AlignJustify/index.js.map +1 -1
  583. package/dist/lexical/ui/icons/AlignLeft/index.js.map +1 -1
  584. package/dist/lexical/ui/icons/AlignRight/index.js.map +1 -1
  585. package/dist/lexical/ui/icons/Block/index.js.map +1 -1
  586. package/dist/lexical/ui/icons/Blockquote/index.js.map +1 -1
  587. package/dist/lexical/ui/icons/Bold/index.js.map +1 -1
  588. package/dist/lexical/ui/icons/Checklist/index.js.map +1 -1
  589. package/dist/lexical/ui/icons/Code/index.js.map +1 -1
  590. package/dist/lexical/ui/icons/CodeBlock/index.js.map +1 -1
  591. package/dist/lexical/ui/icons/H1/index.js.map +1 -1
  592. package/dist/lexical/ui/icons/H2/index.js.map +1 -1
  593. package/dist/lexical/ui/icons/H3/index.js.map +1 -1
  594. package/dist/lexical/ui/icons/H4/index.js.map +1 -1
  595. package/dist/lexical/ui/icons/H5/index.js.map +1 -1
  596. package/dist/lexical/ui/icons/H6/index.js.map +1 -1
  597. package/dist/lexical/ui/icons/HorizontalRule/index.js.map +1 -1
  598. package/dist/lexical/ui/icons/IndentDecrease/index.js.map +1 -1
  599. package/dist/lexical/ui/icons/IndentIncrease/index.js.map +1 -1
  600. package/dist/lexical/ui/icons/Italic/index.js.map +1 -1
  601. package/dist/lexical/ui/icons/Link/index.js.map +1 -1
  602. package/dist/lexical/ui/icons/OrderedList/index.js.map +1 -1
  603. package/dist/lexical/ui/icons/Relationship/index.js.map +1 -1
  604. package/dist/lexical/ui/icons/Strikethrough/index.js.map +1 -1
  605. package/dist/lexical/ui/icons/Subscript/index.js.map +1 -1
  606. package/dist/lexical/ui/icons/Superscript/index.js.map +1 -1
  607. package/dist/lexical/ui/icons/Text/index.js.map +1 -1
  608. package/dist/lexical/ui/icons/Underline/index.js.map +1 -1
  609. package/dist/lexical/ui/icons/UnorderedList/index.js.map +1 -1
  610. package/dist/lexical/ui/icons/Upload/index.js.map +1 -1
  611. package/dist/lexical/utils/canUseDOM.js.map +1 -1
  612. package/dist/lexical/utils/cloneDeep.js.map +1 -1
  613. package/dist/lexical/utils/environment.js.map +1 -1
  614. package/dist/lexical/utils/getDOMRangeRect.js.map +1 -1
  615. package/dist/lexical/utils/getSelectedNode.js.map +1 -1
  616. package/dist/lexical/utils/guard.js.map +1 -1
  617. package/dist/lexical/utils/invariant.js.map +1 -1
  618. package/dist/lexical/utils/joinClasses.js.map +1 -1
  619. package/dist/lexical/utils/markdown/createBlockNode.d.ts +1 -1
  620. package/dist/lexical/utils/markdown/createBlockNode.d.ts.map +1 -1
  621. package/dist/lexical/utils/markdown/createBlockNode.js.map +1 -1
  622. package/dist/lexical/utils/nodeFormat.js.map +1 -1
  623. package/dist/lexical/utils/point.js.map +1 -1
  624. package/dist/lexical/utils/rect.js.map +1 -1
  625. package/dist/lexical/utils/setFloatingElemPosition.js.map +1 -1
  626. package/dist/lexical/utils/setFloatingElemPositionForLinkEditor.js.map +1 -1
  627. package/dist/lexical/utils/swipe.js.map +1 -1
  628. package/dist/lexical/utils/url.js.map +1 -1
  629. package/dist/populateGraphQL/defaultValue.js.map +1 -1
  630. package/dist/populateGraphQL/populate.d.ts.map +1 -1
  631. package/dist/populateGraphQL/populate.js.map +1 -1
  632. package/dist/populateGraphQL/populateLexicalPopulationPromises.d.ts +1 -1
  633. package/dist/populateGraphQL/populateLexicalPopulationPromises.d.ts.map +1 -1
  634. package/dist/populateGraphQL/populateLexicalPopulationPromises.js.map +1 -1
  635. package/dist/populateGraphQL/recursivelyPopulateFieldsForGraphQL.d.ts +1 -1
  636. package/dist/populateGraphQL/recursivelyPopulateFieldsForGraphQL.d.ts.map +1 -1
  637. package/dist/populateGraphQL/recursivelyPopulateFieldsForGraphQL.js.map +1 -1
  638. package/dist/types.d.ts +6 -6
  639. package/dist/types.d.ts.map +1 -1
  640. package/dist/types.js.map +1 -1
  641. package/dist/utilities/createClientFeature.d.ts +13 -0
  642. package/dist/utilities/createClientFeature.d.ts.map +1 -0
  643. package/dist/utilities/createClientFeature.js +30 -0
  644. package/dist/utilities/createClientFeature.js.map +1 -0
  645. package/dist/utilities/createServerFeature.d.ts +16 -0
  646. package/dist/utilities/createServerFeature.d.ts.map +1 -0
  647. package/dist/utilities/createServerFeature.js +34 -0
  648. package/dist/utilities/createServerFeature.js.map +1 -0
  649. package/dist/utilities/forEachNodeRecursively.js.map +1 -1
  650. package/dist/utilities/generateComponentMap.d.ts +2 -2
  651. package/dist/utilities/generateComponentMap.d.ts.map +1 -1
  652. package/dist/utilities/generateComponentMap.js +4 -4
  653. package/dist/utilities/generateComponentMap.js.map +1 -1
  654. package/dist/utilities/generateSchemaMap.d.ts +2 -2
  655. package/dist/utilities/generateSchemaMap.d.ts.map +1 -1
  656. package/dist/utilities/generateSchemaMap.js +1 -1
  657. package/dist/utilities/generateSchemaMap.js.map +1 -1
  658. package/dist/utilities/recurseNodeTree.js.map +1 -1
  659. package/dist/utilities/useLexicalFeature.d.ts +1 -1
  660. package/dist/utilities/useLexicalFeature.d.ts.map +1 -1
  661. package/dist/utilities/useLexicalFeature.js.map +1 -1
  662. package/dist/validate/index.js.map +1 -1
  663. package/dist/validate/validateNodes.d.ts +1 -1
  664. package/dist/validate/validateNodes.d.ts.map +1 -1
  665. package/dist/validate/validateNodes.js.map +1 -1
  666. package/package.json +10 -10
  667. package/dist/exports/client/Field-YMWNSE3A.js +0 -2
  668. package/dist/exports/client/Field-YMWNSE3A.js.map +0 -7
  669. package/dist/exports/client/chunk-ZITHDR53.js +0 -2
  670. package/dist/exports/client/chunk-ZITHDR53.js.map +0 -7
  671. package/dist/exports/client/component-E2NHAHBC.js.map +0 -7
  672. package/dist/exports/client/component-X4LSLSWF.js +0 -2
  673. package/dist/exports/client/component-X4LSLSWF.js.map +0 -7
  674. package/dist/features/types.d.ts.map +0 -1
  675. package/dist/features/types.js +0 -3
  676. package/dist/features/types.js.map +0 -1
  677. /package/dist/exports/client/{chunk-QU5MKT75.js.map → chunk-TZLHAUCW.js.map} +0 -0
@@ -1,2 +0,0 @@
1
- "use client";import{a as he,b as G,c as O,e as Ee}from"./chunk-ZITHDR53.js";import{a as ye,b as N}from"./chunk-3K3B6PJM.js";import{FieldDescription as Nn,FieldError as wn,FieldLabel as In,useField as Pn,useFieldProps as On,withCondition as kn}from"@payloadcms/ui";import{useCallback as An}from"react";import{ErrorBoundary as Dn}from"react-error-boundary";import{LexicalComposer as vn}from"@lexical/react/LexicalComposer.js";import*as ct from"react";import{useMemo as st}from"react";import{useLexicalComposerContext as En}from"@lexical/react/LexicalComposerContext.js";import{LexicalErrorBoundary as xn}from"@lexical/react/LexicalErrorBoundary.js";import{HistoryPlugin as bn}from"@lexical/react/LexicalHistoryPlugin.js";import{OnChangePlugin as Mn}from"@lexical/react/LexicalOnChangePlugin.js";import{RichTextPlugin as Cn}from"@lexical/react/LexicalRichTextPlugin.js";import{TabIndentationPlugin as Tn}from"@lexical/react/LexicalTabIndentationPlugin.js";import{useTranslation as Rn}from"@payloadcms/ui";import{BLUR_COMMAND as Sn,COMMAND_PRIORITY_LOW as rt,FOCUS_COMMAND as Ln}from"lexical";import*as X from"react";import{useEffect as it,useState as lt}from"react";import{jsx as xe}from"react/jsx-runtime";var F=({anchorElem:t,clientProps:e,plugin:n})=>n.position==="floatingAnchorElem"?n.Component&&xe(n.Component,{anchorElem:t,clientProps:e}):n.Component&&xe(n.Component,{clientProps:e});import{MarkdownShortcutPlugin as ft}from"@lexical/react/LexicalMarkdownShortcutPlugin.js";import{jsx as pt}from"react/jsx-runtime";var be=()=>{let{editorConfig:t}=N();return pt(ft,{transformers:t.features.markdownTransformers})};import{useLexicalComposerContext as Kt}from"@lexical/react/LexicalComposerContext.js";import{useTranslation as Fe}from"@payloadcms/ui";import{useCallback as Be,useMemo as Gt,useState as Wt}from"react";import*as He from"react";import*as _e from"react-dom";import{useLexicalComposerContext as Ot}from"@lexical/react/LexicalComposerContext.js";import{mergeRegister as kt}from"@lexical/utils";import{$getSelection as ue,$isRangeSelection as me,$isTextNode as At,COMMAND_PRIORITY_LOW as Dt,createCommand as Bt}from"lexical";import{useCallback as Ne,useEffect as we,useState as Ft}from"react";import*as ce from"react";import{useLexicalComposerContext as Se}from"@lexical/react/LexicalComposerContext.js";import{mergeRegister as Me}from"@lexical/utils";import{$getSelection as gt,$isRangeSelection as ht,COMMAND_PRIORITY_LOW as W,KEY_ARROW_DOWN_COMMAND as yt,KEY_ARROW_UP_COMMAND as Et,KEY_ENTER_COMMAND as xt,KEY_ESCAPE_COMMAND as bt,KEY_TAB_COMMAND as Mt,createCommand as Ct}from"lexical";import{useCallback as J,useEffect as Y,useLayoutEffect as Tt,useMemo as Rt,useRef as St,useState as Lt}from"react";var vt="slash-menu-popup",Ce=t=>{let e=document.getElementById("slash-menu");if(!e)return;let n=e.getBoundingClientRect();n.top+n.height>window.innerHeight&&e.scrollIntoView({block:"center"}),n.top<0&&e.scrollIntoView({block:"center"}),t.scrollIntoView({block:"nearest"})};function Nt(t,e,n){let o=n;for(let r=o;r<=e.length;r++)t.substring(t.length-r)===e.substring(0,r)&&(o=r);return o}function wt(t){let e=gt();if(!ht(e)||!e.isCollapsed())return null;let n=e.anchor;if(n.type!=="text")return null;let o=n.getNode();if(!o.isSimpleText())return null;let r=n.offset,u=o.getTextContent().slice(0,r),d=t.replaceableString.length,g=Nt(u,t.matchingString,d),s=r-g;if(s<0)return null;let a;return s===0?[a]=o.splitText(r):[,a]=o.splitText(s,r),a}function It(t,e){let n=getComputedStyle(t),o=n.position==="absolute",r=e?/(auto|scroll|hidden)/:/(auto|scroll)/;if(n.position==="fixed")return document.body;for(let u=t;u=u.parentElement;)if(n=getComputedStyle(u),!(o&&n.position==="static")&&r.test(n.overflow+n.overflowY+n.overflowX))return u;return document.body}function Te(t,e){let n=t.getBoundingClientRect(),o=e.getBoundingClientRect();return n.top>o.top&&n.top<o.bottom}function Pt(t,e,n,o){let[r]=Se();Y(()=>{if(e!=null&&t!=null){let u=r.getRootElement(),d=u!=null?It(u,!1):document.body,g=!1,s=Te(e,d),a=function(){g||(window.requestAnimationFrame(function(){n(),g=!1}),g=!0);let m=Te(e,d);m!==s&&(s=m,o?.(m))},c=new ResizeObserver(n);return window.addEventListener("resize",n),document.addEventListener("scroll",a,{capture:!0,passive:!0}),c.observe(e),()=>{c.unobserve(e),window.removeEventListener("resize",n),document.removeEventListener("scroll",a,!0)}}},[e,r,o,n,t])}var Re=Ct("SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND");function Le({anchorElementRef:t,close:e,editor:n,groups:o,menuRenderFn:r,onSelectItem:u,resolution:d,shouldSplitNodeWithQuery:g=!1}){let[s,a]=Lt(null),c=d.match&&d.match.matchingString||"",m=J(p=>{let f=n.getRootElement();f!==null&&(f.setAttribute("aria-activedescendant",`${vt}__item-${p.key}`),a(p.key))},[n]),i=J(()=>{if(o!==null&&c!=null){let p=o.flatMap(f=>f.items);if(p.length){let f=p[0];m(f)}}},[o,m,c]);Y(()=>{i()},[c,i]);let l=J(p=>{n.update(()=>{let f=d.match!=null&&g?wt(d.match):null;u(p,f,e,d.match?d.match.matchingString:"")})},[n,g,d.match,u,e]);Y(()=>()=>{let p=n.getRootElement();p!==null&&p.removeAttribute("aria-activedescendant")},[n]),Tt(()=>{o===null?a(null):s===null&&i()},[o,s,m,i]),Y(()=>Me(n.registerCommand(Re,({item:p})=>p.ref&&p.ref.current!=null?(Ce(p.ref.current),!0):!1,W)),[n,m]),Y(()=>Me(n.registerCommand(yt,p=>{let f=p;if(o!==null&&o.length&&s!==null){let y=o.flatMap(b=>b.items),h=y.findIndex(b=>b.key===s),x=h!==y.length-1?h+1:0,M=y[x];m(M),M.ref!=null&&M.ref.current&&n.dispatchCommand(Re,{index:x,item:M}),f.preventDefault(),f.stopImmediatePropagation()}return!0},W),n.registerCommand(Et,p=>{let f=p;if(o!==null&&o.length&&s!==null){let y=o.flatMap(b=>b.items),h=y.findIndex(b=>b.key===s),x=h!==0?h-1:y.length-1,M=y[x];m(M),M.ref!=null&&M.ref.current&&Ce(M.ref.current),f.preventDefault(),f.stopImmediatePropagation()}return!0},W),n.registerCommand(bt,p=>{let f=p;return f.preventDefault(),f.stopImmediatePropagation(),e(),!0},W),n.registerCommand(Mt,p=>{let f=p;if(o===null||s===null)return!1;let h=o.flatMap(x=>x.items).find(x=>x.key===s);return h?(f.preventDefault(),f.stopImmediatePropagation(),l(h),!0):!1},W),n.registerCommand(xt,p=>{if(o===null||s===null)return!1;let y=o.flatMap(h=>h.items).find(h=>h.key===s);return y?(p!==null&&(p.preventDefault(),p.stopImmediatePropagation()),l(y),!0):!1},W)),[l,e,n,o,s,m]);let E=Rt(()=>({groups:o,selectItemAndCleanUp:l,selectedItemKey:s,setSelectedItemKey:a}),[l,s,o]);return r(t,E,d.match?d.match.matchingString:"")}function ve(t,e,n,o){let[r]=Se(),u=St(document.createElement("div")),d=J(()=>{let s=r.getRootElement(),a=u.current,c=32,m=a.firstChild;if(s!==null&&e!==null){let{height:i,width:l}=e.getRect(),{left:E,top:p}=e.getRect(),f=p;if(p-=t.getBoundingClientRect().top+window.scrollY,E-=t.getBoundingClientRect().left+window.scrollX,a.style.left=`${E+window.scrollX}px`,a.style.height=`${i}px`,a.style.width=`${l}px`,m!==null){let y=m.getBoundingClientRect(),h=y.height,x=y.width,M=s.getBoundingClientRect();E+x>M.right&&(a.style.left=`${M.right-x+window.scrollX}px`);let b=f+h+c>window.innerHeight,T=f<0;b&&!T?a.style.top=`${p+c-h+window.scrollY-(i+24)}px`:a.style.top=`${p+window.scrollY+c}px`}a.isConnected||(o!=null&&(a.className=o),a.setAttribute("aria-label","Slash menu"),a.setAttribute("id","slash-menu"),a.setAttribute("role","listbox"),a.style.display="block",a.style.position="absolute",t.append(a)),u.current=a,s.setAttribute("aria-controls","slash-menu")}},[r,e,o,t]);Y(()=>{let s=r.getRootElement();if(e!==null)return d(),()=>{s!==null&&s.removeAttribute("aria-controls");let a=u.current;a!==null&&a.isConnected&&a.remove()}},[r,d,e]);let g=J(s=>{e!==null&&(s||n(null))},[e,n]);return Pt(e,u.current,d,g),u}import{jsx as $t}from"react/jsx-runtime";var ke=`\\.,\\+\\*\\?\\$\\@\\|#{}\\(\\)\\^\\-\\[\\]\\\\/!%'"~=<>_:;`;function Ht(t){let e=t.anchor;if(e.type!=="text")return null;let n=e.getNode();if(!n.isSimpleText())return null;let o=e.offset;return n.getTextContent().slice(0,o)}function Ie(t,e,n){let o=n.getSelection();if(o===null||!o.isCollapsed)return!1;let r=o.anchorNode,u=t,d=o.anchorOffset;if(r==null||d==null)return!1;try{e.setStart(r,u),e.setEnd(r,d>1?d:1)}catch{return!1}return!0}function _t(t){let e=null;return t.getEditorState().read(()=>{let n=ue();me(n)&&(e=Ht(n))}),e}function Pe(t,e){return e!==0?!1:t.getEditorState().read(()=>{let n=ue();if(me(n)){let u=n.anchor.getNode().getPreviousSibling();return At(u)&&u.isTextEntity()}return!1})}function Oe(t){ce.startTransition?ce.startTransition(t):t()}var de=Bt("ENABLE_SLASH_MENU_COMMAND");function Ae({anchorClassName:t,anchorElem:e,groups:n,menuRenderFn:o,onClose:r,onOpen:u,onQueryChange:d,onSelectItem:g,triggerFn:s}){let[a]=Ot(),[c,m]=Ft(null),i=ve(e,c,m,t),l=Ne(()=>{m(null),r!=null&&c!==null&&r()},[r,c]),E=Ne(p=>{m(p),u!=null&&c===null&&u(p)},[u,c]);return we(()=>kt(a.registerCommand(de,({node:p})=>(a.getEditorState().read(()=>{let f={leadOffset:0,matchingString:"",replaceableString:""};if(f!==null&&!Pe(a,f.leadOffset)&&p!==null){let y=a._window??window,h=y.document.createRange();Ie(f.leadOffset,h,y)!==null&&Oe(()=>E({getRect:()=>h.getBoundingClientRect(),match:f}));return}}),!0),Dt)),[a,E]),we(()=>{let p=()=>{a.getEditorState().read(()=>{let y=a._window??window,h=y.document.createRange(),x=ue(),M=_t(a);if(!me(x)||!x.isCollapsed()||M===null||h===null){l();return}let b=s({editor:a,query:M});if(d(b?b.matchingString:null),b!==null&&!Pe(a,b.leadOffset)&&Ie(b.leadOffset,h,y)!==null){Oe(()=>E({getRect:()=>h.getBoundingClientRect(),match:b}));return}l()})},f=a.registerUpdateListener(p);return()=>{f()}},[a,s,d,c,l,E]),c===null||a===null?null:$t(Le,{anchorElementRef:i,close:l,editor:a,groups:n,menuRenderFn:o,onSelectItem:g,resolution:c,shouldSplitNodeWithQuery:!0})}import{useCallback as zt}from"react";function De(t,{maxLength:e=75,minLength:n=1}){return zt(({query:o})=>{let r="[^"+t+ke+"\\s]",d=new RegExp("(^|\\s|\\()(["+t+"]((?:"+r+"){0,"+e+"}))$").exec(o);if(d!==null){let g=d[1],s=d[3];if(s.length>=n)return{leadOffset:d.index+g.length,matchingString:s,replaceableString:d[2]}}return null},[e,n,t])}import{jsx as H,jsxs as ze}from"react/jsx-runtime";var I="slash-menu-popup";function Yt({isSelected:t,item:e,onClick:n,onMouseEnter:o}){let{i18n:r}=Fe(),u=`${I}__item ${I}__item-${e.key}`;t&&(u+=` ${I}__item--selected`);let d=e.key;return e.label&&(d=typeof e.label=="function"?e.label({i18n:r}):e.label),d.length>25&&(d=d.substring(0,25)+"..."),ze("button",{"aria-selected":t,className:u,id:I+"__item-"+e.key,onClick:n,onMouseEnter:o,ref:e.ref,role:"option",tabIndex:-1,type:"button",children:[e?.Icon&&H(e.Icon,{}),H("span",{className:`${I}__item-text`,children:d})]},e.key)}function $e({anchorElem:t=document.body}){let[e]=Kt(),[n,o]=Wt(null),{editorConfig:r}=N(),{i18n:u}=Fe(),d=De("/",{minLength:0}),g=Be(()=>{let c=[];for(let m of r.features.slashMenu.dynamicGroups){let i=m({editor:e,queryString:n});c=c.concat(i)}return c},[e,n,r?.features]),s=Gt(()=>{let c=[];for(let m of r?.features.slashMenu.groups??[])c.push(m);if(n){c=c.map(i=>{let l=i.items.filter(E=>{let p=E.key;return E.label&&(p=typeof E.label=="function"?E.label({i18n:u}):E.label),new RegExp(n,"gi").exec(p)?!0:E.keywords!=null?E.keywords.some(f=>new RegExp(n,"gi").exec(f)):!1});return l.length?{...i,items:l}:null}),c=c.filter(i=>i!=null);let m=g();for(let i of m){let l=c.find(E=>E.key===i.key);l?c=c.filter(E=>E.key!==i.key):l={...i,items:[]},l?.items?.length&&(l.items=l.items.concat(l.items)),c.push(l)}}return c},[g,n,r?.features,u]),a=Be((c,m,i,l)=>{m&&e.update(()=>{m.remove()}),c.onSelect({editor:e,queryString:l}),i()},[e]);return H(He.Fragment,{children:H(Ae,{anchorElem:t,groups:s,menuRenderFn:(c,{selectItemAndCleanUp:m,selectedItemKey:i,setSelectedItemKey:l})=>c.current&&s.length?_e.createPortal(H("div",{className:I,children:s.map(E=>{let p=E.key;return E.label&&(p=typeof E.label=="function"?E.label({i18n:u}):E.label),ze("div",{className:`${I}__group ${I}__group-${E.key}`,children:[H("div",{className:`${I}__group-title`,children:p}),E.items.map((f,y)=>H(Yt,{index:y,isSelected:i===f.key,item:f,onClick:()=>{l(f.key),m(f)},onMouseEnter:()=>{l(f.key)}},f.key))]},E.key)})}),c.current):null,onQueryChange:o,onSelectItem:a,triggerFn:d})})}import{useLexicalComposerContext as qt}from"@lexical/react/LexicalComposerContext.js";import{$createParagraphNode as Qt}from"lexical";import*as Ye from"react";import{useCallback as Zt,useEffect as We,useRef as en,useState as tn}from"react";import{createPortal as nn}from"react-dom";var V=(t,e,n,o,r=50,u=25)=>{let d=0;if(t&&!t.contains(o)){let{bottom:g,left:s,right:a,top:c}=t.getBoundingClientRect(),m=c+window.scrollY,i=g+window.scrollY;if(n<m-u||n>i+u||e<s-r||e>a+r)return-1;(e<s||e>a)&&(d=e<s?e-s:e-a)}return d};import{$getNodeByKey as ee}from"lexical";function k(t){let e=t.getBoundingClientRect(),n=getComputedStyle(t).getPropertyValue("transform");if(!n||n==="none")return e;let o=n.split(",").pop();return e.y=e.y-Number(o.replace(")","")),e}function Z(t){let e=(s,a)=>s?parseFloat(window.getComputedStyle(s)[a]):0,{marginBottom:n,marginTop:o}=window.getComputedStyle(t),r=e(t.previousElementSibling,"marginBottom"),u=e(t.nextElementSibling,"marginTop"),d=Math.max(parseFloat(o),r);return{marginBottom:Math.max(parseFloat(n),u),marginTop:d}}import{$getRoot as Vt}from"lexical";function _(t){return t.getEditorState().read(()=>Vt().getChildrenKeys())}var Ut=1,jt=-1,Ke=0,P={props:null,result:null};function Xt(t,e,n=20){let o=t.x-e.x,r=t.y-e.y;return o*o+r*r<=n*n}function U(t){let{anchorElem:e,cache_threshold:n=20,editor:o,fuzzy:r=!1,horizontalOffset:u=0,point:{x:d,y:g},startIndex:s=0,useEdgeAsDefault:a=!1,verbose:c=!1}=t;if(n>0&&P.props&&P.result&&P.props.fuzzy===t.fuzzy&&P.props.horizontalOffset===t.horizontalOffset&&P.props.useEdgeAsDefault===t.useEdgeAsDefault&&Xt(P.props.point,t.point,n))return P.result;let m=e.getBoundingClientRect(),i=_(o),l={blockElem:null,blockNode:null,distance:1/0,foundAtIndex:-1,isFoundNodeEmptyParagraph:!1};return o.getEditorState().read(()=>{if(a){let[f,y]=[o.getElementByKey(i[0]),o.getElementByKey(i[i.length-1])],[h,x]=[k(f),k(y)];if(h&&x&&(g<h.top?(l.blockElem=f,l.distance=h.top-g,l.blockNode=ee(i[0]),l.foundAtIndex=0):g>x.bottom&&(l.distance=g-x.bottom,l.blockNode=ee(i[i.length-1]),l.blockElem=y,l.foundAtIndex=i.length-1),l?.blockElem))return{blockElem:null,isFoundNodeEmptyParagraph:!1}}let E=s,p=Ke;for(;E>=0&&E<i.length;){let f=i[E],y=o.getElementByKey(f);if(y===null)break;let h=new O(d+u,g),x=Ee.fromDOMRect(k(y)),{marginBottom:M,marginTop:b}=Z(y),T=x.generateNewRect({bottom:x.bottom+M,left:m.left,right:m.right,top:x.top-b}),{distance:L,isOnBottomSide:C,isOnTopSide:A}=T.distanceFromPoint(h);if(L===0){l.blockElem=y,l.blockNode=ee(f),l.foundAtIndex=E,l.distance=L,l.blockNode&&l.blockNode.getType()==="paragraph"&&l.blockNode.getTextContent()===""&&(!r&&!t.returnEmptyParagraphs&&(l.blockElem=null,l.blockNode=null),l.isFoundNodeEmptyParagraph=!0);break}else r&&L<l.distance&&(l.blockElem=y,l.blockNode=ee(f),l.distance=L,l.foundAtIndex=E);p===Ke&&(A?p=jt:C?p=Ut:p=1/0),E+=p}}),P.props=t,P.result={blockElem:l.blockElem,blockNode:l.blockNode,foundAtIndex:l.foundAtIndex,isFoundNodeEmptyParagraph:l.isFoundNodeEmptyParagraph},{blockElem:l.blockElem,blockNode:l.blockNode,foundAtIndex:l.foundAtIndex,isFoundNodeEmptyParagraph:l.isFoundNodeEmptyParagraph}}function te(t,e){return!!t.closest(`.${e}`)}var Jt=["IMG","INPUT","TEXTAREA","SELECT","BUTTON","VIDEO","OBJECT","EMBED","IFRAME","HR"];function Ge(t){if(!t||Jt.includes(t.tagName)||t.offsetHeight===0||t.offsetWidth===0)return!1;let e=window.getComputedStyle(t);return!(e.display==="table-cell"||e.position==="absolute"||e.visibility==="hidden"||e.opacity==="0")}function ne(t,e,n,o=0){if(!t){e.style.opacity="0",e.style.transform="translate(-10000px, -10000px)";return}let r=t.getBoundingClientRect(),u=window.getComputedStyle(t),d=e.getBoundingClientRect(),g=n.getBoundingClientRect(),s;if(r.height<60)s=r.top-d.height/2-g.top+r.height/2-1;else{let m=Ge(t)?parseInt(u.lineHeight,10):0;s=r.top+(m-d.height)/2-g.top-1}let c=o;e.style.opacity="1",e.style.transform=`translate(${c}px, ${s}px)`}import{jsx as fe}from"react/jsx-runtime";var on="add-block-menu",oe=1/0;function rn(t){return t===0?1/0:oe>=0&&oe<t?oe:Math.floor(t/2)}function ln(t,e,n){let o=e.parentElement,{editorConfig:r}=N(),u=r?.admin?.hideGutter?-24:12,d=en(null),[g,s]=tn(null);We(()=>{function c(m){let i=m.target;if(!G(i))return;let l=V(o,m.pageX,m.pageY,i);if(l===-1){s(null);return}if(te(i,on))return;let E=_(t),{blockElem:p,blockNode:f,foundAtIndex:y}=U({anchorElem:e,cache_threshold:0,editor:t,horizontalOffset:-l,point:new O(m.x,m.y),returnEmptyParagraphs:!0,startIndex:rn(E.length),useEdgeAsDefault:!1});oe=y,p&&(g?.node!==f||g?.elem!==p)&&s({elem:p,node:f})}return document?.addEventListener("mousemove",c),()=>{document?.removeEventListener("mousemove",c)}},[o,e,t,g]),We(()=>{d.current&&g?.node&&ne(g?.elem,d.current,e,u)},[e,g,u]);let a=Zt(c=>{let m=g;m?.node&&(t.update(()=>{let i=!0;if((m.node.getType()!=="paragraph"||m.node.getTextContent()!=="")&&(i=!1),!i){let l=Qt();m.node.insertAfter(l),setTimeout(()=>{m={elem:t.getElementByKey(l.getKey()),node:l},s(m)},0)}}),setTimeout(()=>{t.update(()=>{t.focus(),m.node&&"select"in m.node&&typeof m.node.select=="function"&&m.node.select()})},1),setTimeout(()=>{t.dispatchCommand(de,{node:m.node})},2),c.stopPropagation(),c.preventDefault())},[t,g]);return nn(fe(Ye.Fragment,{children:fe("button",{className:"icon add-block-menu",onClick:c=>{a(c)},ref:d,type:"button",children:fe("div",{className:n?"icon":""})})}),e)}function Ve({anchorElem:t=document.body}){let[e]=qt();return ln(e,t,e._editable)}import{useLexicalComposerContext as cn}from"@lexical/react/LexicalComposerContext.js";import{eventFiles as Xe}from"@lexical/rich-text";import{$getNearestNodeFromDOMNode as Je,$getNodeByKey as un}from"lexical";import*as tt from"react";import{useEffect as pe,useRef as re,useState as qe}from"react";import{createPortal as mn}from"react-dom";function Ue(t,e,n){if(!t.current)return;let{left:o,top:r}=n.getBoundingClientRect(),u=k(e),d=u.width,g=u.height,s=u.top-r,a=u.left-o;t.current.style.border="2px solid green",t.current.style.boxSizing="border-box",t.current.style.height=g+"px",t.current.style.pointerEvents="none",t.current.style.position="absolute",t.current.style.top=s+"px",t.current.style.left=a+"px",t.current.style.width=d+"px",t.current.style.zIndex="1000",t.current.style.opacity="0.5"}var j=25,an=-24,sn=!1,$=0;function je(t,e,n,o,r,u,d,g,s,a=!1){let{height:c,top:m}=o.getBoundingClientRect(),{top:i,width:l}=d.getBoundingClientRect(),{marginBottom:E,marginTop:p}=Z(o),f=m,y=u>=m+c/2+window.scrollY,h=!1;if(r?.elem)if(o!==r?.elem)(y&&r?.elem&&r?.elem===o.nextElementSibling||!y&&r?.elem&&r?.elem===o.previousElementSibling)&&($++,$<200&&(h=!0));else{$++;let L=r?.boundingBox?.y,C=o.getBoundingClientRect().y;(y===r?.isBelow&&L===C||$<200)&&(h=!1)}if(h)return{isBelow:y,willStayInSamePosition:h};a?f+=c/2:y?f+=c+E/2:f-=p/2;let x=0;a||(y?x=-j:x=j);let M=f-i+x,b=an-e;n.style.width=`calc(${l}px - ${t})`,n.style.opacity=".4";let T=12;return a?n.style.transform=`translate(${b}px, ${M-j}px)`:y?(o.style.marginBottom=j*2+T+"px",n.style.transform=`translate(${b}px, calc(${M}px - 0px))`):(o.style.marginTop=j*2+T+"px",n.style.transform=`translate(${b}px, calc(${M-j*2}px - 0px))`),sn&&Ue(s,o,d),r.elem.style.opacity="",r?.elem===o?y?r.elem.style.marginTop="":r.elem.style.marginBottom="":(r.elem.style.marginBottom="",r.elem.style.marginTop=""),$=0,{isBelow:y,willStayInSamePosition:h}}import{jsx as ie,jsxs as gn}from"react/jsx-runtime";var dn="draggable-block-menu",Qe="application/x-lexical-drag-block",q=1/0;function Ze(t){return t===0?1/0:q>=0&&q<t?q:Math.floor(t/2)}function fn(t,e){let{transform:n}=e.style;t.setDragImage(e,0,0),setTimeout(()=>{e.style.transform=n})}function et(t,e){t&&(t.style.opacity="0"),e&&(e.style.opacity="",e.style.marginBottom="",e.style.marginTop="")}function pn(t,e,n){let o=e.parentElement,r=re(null),u=re(null),d=re(null),g=re(!1),[s,a]=qe(null),[c,m]=qe(null),{editorConfig:i}=N(),l=i?.admin?.hideGutter?-44:-8;pe(()=>{function f(y){let h=y.target;if(!G(h))return;let x=V(o,y.pageX,y.pageY,h);if(x===-1){a(null);return}if(te(h,dn))return;let M=_(t),{blockElem:b,foundAtIndex:T,isFoundNodeEmptyParagraph:L}=U({anchorElem:e,cache_threshold:0,editor:t,horizontalOffset:-x,point:new O(y.x,y.y),startIndex:Ze(M.length),useEdgeAsDefault:!1,verbose:!1});q=T,!(!b&&!L)&&s!==b&&a(b)}return document?.addEventListener("mousemove",f),()=>{document?.removeEventListener("mousemove",f)}},[o,e,t,s]),pe(()=>{r.current&&ne(s,r.current,e,l)},[e,s,l]),pe(()=>{function f(h){if(!g.current)return!1;let[x]=Xe(h);if(x)return!1;let{pageY:M,target:b}=h;if(!G(b))return!1;let T=V(o,h.pageX,h.pageY,b,100,50),L=_(t),{blockElem:C,foundAtIndex:A,isFoundNodeEmptyParagraph:D}=U({anchorElem:e,editor:t,fuzzy:!0,horizontalOffset:-T,point:new O(h.x,h.y),startIndex:Ze(L.length),useEdgeAsDefault:!0,verbose:!0});q=A;let B=u.current;if(C===null||B===null)return!1;if(s!==C){let{isBelow:v,willStayInSamePosition:w}=je(i?.admin?.hideGutter?"0px":"3rem",l+(i?.admin?.hideGutter?r?.current?.getBoundingClientRect()?.width??0:-r?.current?.getBoundingClientRect()?.width),B,C,c,M,e,h,d,D);h.preventDefault(),w||m({boundingBox:C.getBoundingClientRect(),elem:C,isBelow:v})}else et(B,c?.elem),m({boundingBox:C.getBoundingClientRect(),elem:C,isBelow:!1});return!0}function y(h){if(!g.current)return!1;let[x]=Xe(h);if(x)return!1;let{dataTransfer:M,pageY:b,target:T}=h,L=M?.getData(Qe)||"";return t.update(()=>{let C=un(L);if(!C||!G(T))return!1;let A=V(o,h.pageX,h.pageY,T,100,50),{blockElem:D,isFoundNodeEmptyParagraph:B}=U({anchorElem:e,editor:t,fuzzy:!0,horizontalOffset:-A,point:new O(h.x,h.y),useEdgeAsDefault:!0});if(!D)return!1;let v=Je(D);if(!v)return!1;if(v===C)return!0;let{height:w,top:se}=k(D),mt=b>=se+w/2+window.scrollY;B?(v.insertBefore(C),v.remove()):mt?v.insertAfter(C):v.insertBefore(C),s!==null&&a(null),document.querySelectorAll(".lexical-block-highlighter").forEach(K=>{K.remove()});let dt=t.getElementByKey(C.getKey());setTimeout(()=>{let K=dt.getBoundingClientRect(),S=document.createElement("div");S.className="lexical-block-highlighter",document.documentElement.getAttribute("data-theme")==="dark"?S.style.backgroundColor="white":S.style.backgroundColor="black",S.style.transition="opacity 0.1s ease-in-out",S.style.zIndex="1",S.style.pointerEvents="none",S.style.boxSizing="border-box",S.style.borderRadius="4px",S.style.position="absolute",document.body.appendChild(S),S.style.opacity="0.1",S.style.height=`${K.height+8}px`,S.style.width=`${K.width+8}px`,S.style.top=`${K.top+window.scrollY-4}px`,S.style.left=`${K.left-4}px`,setTimeout(()=>{S.style.opacity="0",setTimeout(()=>{S.remove()},1e3)},3e3)},120)}),!0}return document.addEventListener("dragover",f),document.addEventListener("drop",y),()=>{document.removeEventListener("dragover",f),document.removeEventListener("drop",y)}},[o,l,e,t,c,s,i?.admin?.hideGutter]);function E(f){let y=f.dataTransfer;if(!y||!s)return;fn(y,s);let h="";t.update(()=>{let x=Je(s);x&&(h=x.getKey())}),g.current=!0,y.setData(Qe,h)}function p(){g.current=!1,et(u.current,c?.elem)}return mn(gn(tt.Fragment,{children:[ie("div",{className:"icon draggable-block-menu",draggable:!0,onDragEnd:p,onDragStart:E,ref:r,children:ie("div",{className:n?"icon":""})}),ie("div",{className:"draggable-block-target-line",ref:u}),ie("div",{className:"debug-highlight",ref:d})]}),e)}function nt({anchorElem:t=document.body}){let[e]=cn();return pn(e,t,e._editable)}import{ContentEditable as hn}from"@lexical/react/LexicalContentEditable.js";import{jsx as yn}from"react/jsx-runtime";function ot({className:t}){return yn(hn,{className:t??"ContentEditable__root"})}import{jsx as R,jsxs as Q}from"react/jsx-runtime";var at=t=>{let{editorConfig:e,editorContainerRef:n,onChange:o}=t,r=N(),[u]=En(),{t:d}=Rn(),[g,s]=lt(null),a=i=>{i!==null&&s(i)};it(()=>{if(!r?.uuid){console.error("Lexical Editor must be used within an EditorConfigProvider");return}r?.parentEditor?.uuid&&r.parentEditor?.registerChild(r.uuid,r);let i=()=>{r.focusEditor(r)},l=()=>{r.blurEditor(r)},E=u.registerCommand(Ln,()=>(i(),!0),rt),p=u.registerCommand(Sn,()=>(l(),!0),rt);return()=>{E(),p(),r.parentEditor?.unregisterChild?.(r.uuid)}},[u,r]);let[c,m]=lt(!1);return it(()=>{let i=()=>{let l=window.matchMedia("(max-width: 768px)").matches;l!==c&&m(l)};return i(),window.addEventListener("resize",i),()=>{window.removeEventListener("resize",i)}},[c]),Q(X.Fragment,{children:[e.features.plugins.map(i=>{if(i.position==="aboveContainer")return R(F,{clientProps:i.clientProps,plugin:i},i.key)}),Q("div",{className:"editor-container",ref:n,children:[e.features.plugins.map(i=>{if(i.position==="top")return R(F,{clientProps:i.clientProps,plugin:i},i.key)}),R(Cn,{ErrorBoundary:xn,contentEditable:R("div",{className:"editor-scroller",children:R("div",{className:"editor",ref:a,children:R(ot,{})})}),placeholder:R("p",{className:"editor-placeholder",children:d("lexical:general:placeholder")})}),R(Mn,{ignoreSelectionChange:!0,onChange:(i,l,E)=>{(!E.has("focus")||E.size>1)&&o?.(i,l,E)}}),g&&Q(X.Fragment,{children:[!c&&u.isEditable()&&Q(X.Fragment,{children:[R(nt,{anchorElem:g}),R(Ve,{anchorElem:g})]}),e.features.plugins.map(i=>{if(i.position==="floatingAnchorElem"&&!(i.desktopOnly===!0&&c))return R(F,{anchorElem:g,clientProps:i.clientProps,plugin:i},i.key)}),u.isEditable()&&R(X.Fragment,{children:R($e,{anchorElem:g})})]}),u.isEditable()&&Q(X.Fragment,{children:[R(bn,{}),e?.features?.markdownTransformers?.length>0&&R(be,{})]}),R(Tn,{}),e.features.plugins.map(i=>{if(i.position==="normal")return R(F,{clientProps:i.clientProps,plugin:i},i.key)}),e.features.plugins.map(i=>{if(i.position==="bottom")return R(F,{clientProps:i.clientProps,plugin:i},i.key)})]}),e.features.plugins.map(i=>{if(i.position==="belowContainer")return R(F,{clientProps:i.clientProps,plugin:i},i.key)})]})};import{jsx as le}from"react/jsx-runtime";var ut=t=>{let{editorConfig:e,fieldProps:n,onChange:o,path:r,readOnly:u,value:d}=t,g=N(),s=ct.useRef(null),a=st(()=>{let m=d;return e?.features?.hooks?.load?.length&&e.features.hooks.load.forEach(i=>{m=i({incomingEditorState:m})}),m},[e,d]),c=st(()=>{if(a&&typeof a!="object")throw new Error("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: "+JSON.stringify(a));if(a&&Array.isArray(a)&&!("root"in a))throw new Error("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.");if(a&&"jsonContent"in a)throw new Error("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.");return{editable:u!==!0,editorState:a!=null?JSON.stringify(a):void 0,namespace:e.lexical.namespace,nodes:[...he({editorConfig:e})],onError:m=>{throw m},theme:e.lexical.theme}},[e,a,u]);return c?le(vn,{initialConfig:c,children:le(ye,{editorConfig:e,editorContainerRef:s,fieldProps:n,parentContext:g,children:le(at,{editorConfig:e,editorContainerRef:s,onChange:o})})},r):le("p",{children:"Loading..."})};import"./bundled.css";import{jsx as z,jsxs as ge}from"react/jsx-runtime";var ae="rich-text-lexical",Bn=t=>{let{name:e,CustomDescription:n,CustomError:o,CustomLabel:r,className:u,descriptionProps:d,editorConfig:g,errorProps:s,label:a,labelProps:c,path:m,readOnly:i,required:l,style:E,validate:p,width:f}=t,y=An((v,w)=>{if(typeof p=="function")return p(v,{...w,props:t,required:l})},[p,l]),{path:h}=On(),x=Pn({path:h??m??e,validate:y}),{errorMessage:M,initialValue:b,path:T,schemaPath:L,setValue:C,showError:A,value:D}=x,B=[ae,"field-type",u,A&&"error",i&&`${ae}--read-only`,g?.admin?.hideGutter!==!0?`${ae}--show-gutter`:null].filter(Boolean).join(" ");return ge("div",{className:B,style:{...E,width:f},children:[z(In,{CustomLabel:r,label:a,required:l,...c||{}}),ge("div",{className:`${ae}__wrap`,children:[z(wn,{CustomError:o,path:T,...s||{}}),z(Dn,{fallbackRender:Fn,onReset:()=>{},children:z(ut,{editorConfig:g,fieldProps:t,onChange:v=>{let w=v.toJSON();g?.features?.hooks?.save?.length&&g.features.hooks.save.forEach(se=>{w=se({incomingEditorState:w})}),C(w)},path:T,readOnly:i,value:D},JSON.stringify({initialValue:b,path:T}))}),n!==void 0?n:z(Nn,{...d||{}})]})]},T)};function Fn({error:t}){return ge("div",{className:"errorBoundary",role:"alert",children:[z("p",{children:"Something went wrong:"}),z("pre",{style:{color:"red"},children:t.message})]})}var Xr=kn(Bn);export{Xr as RichText};
2
- //# sourceMappingURL=Field-YMWNSE3A.js.map
@@ -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,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