@payloadcms/richtext-lexical 3.0.0-canary.ff8c8fd → 3.0.0

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 (821) hide show
  1. package/LICENSE.md +1 -1
  2. package/dist/cell/rscEntry.d.ts +12 -0
  3. package/dist/cell/rscEntry.d.ts.map +1 -0
  4. package/dist/cell/rscEntry.js +82 -0
  5. package/dist/cell/rscEntry.js.map +1 -0
  6. package/dist/exports/client/Field-KKSJXHR7.js +2 -0
  7. package/dist/exports/client/Field-KKSJXHR7.js.map +7 -0
  8. package/dist/exports/client/RelationshipComponent-2RT3YXUT.js +2 -0
  9. package/dist/exports/client/RelationshipComponent-2RT3YXUT.js.map +7 -0
  10. package/dist/exports/client/bundled.css +1 -1
  11. package/dist/exports/client/chunk-2CYU43GM.js +2 -0
  12. package/dist/exports/client/chunk-2CYU43GM.js.map +7 -0
  13. package/dist/exports/client/chunk-5PBXL4HT.js +2 -0
  14. package/dist/exports/client/chunk-5PBXL4HT.js.map +7 -0
  15. package/dist/exports/client/chunk-C7S3V4EB.js +2 -0
  16. package/dist/exports/client/chunk-C7S3V4EB.js.map +7 -0
  17. package/dist/exports/client/chunk-CUIBIFW2.js +2 -0
  18. package/dist/exports/client/chunk-CUIBIFW2.js.map +7 -0
  19. package/dist/exports/client/{chunk-UJDWBQ2K.js → chunk-MI5HS4QX.js} +2 -2
  20. package/dist/exports/client/{chunk-UJDWBQ2K.js.map → chunk-MI5HS4QX.js.map} +2 -2
  21. package/dist/exports/client/chunk-QPPOQTHD.js +2 -0
  22. package/dist/exports/client/chunk-QPPOQTHD.js.map +7 -0
  23. package/dist/exports/client/chunk-U7O7EYCP.js +2 -0
  24. package/dist/exports/client/chunk-U7O7EYCP.js.map +7 -0
  25. package/dist/exports/client/{chunk-V2LKLT2F.js → chunk-XCEM47RI.js} +3 -3
  26. package/dist/exports/client/{chunk-V2LKLT2F.js.map → chunk-XCEM47RI.js.map} +3 -3
  27. package/dist/exports/client/component-ANB7VZLA.js +2 -0
  28. package/dist/exports/client/component-ANB7VZLA.js.map +7 -0
  29. package/dist/exports/client/component-H3EYQ5KG.js +2 -0
  30. package/dist/exports/client/component-H3EYQ5KG.js.map +7 -0
  31. package/dist/exports/client/componentInline-ZGO3K4TA.js +2 -0
  32. package/dist/exports/client/componentInline-ZGO3K4TA.js.map +7 -0
  33. package/dist/exports/client/index.d.ts +10 -4
  34. package/dist/exports/client/index.d.ts.map +1 -1
  35. package/dist/exports/client/index.js +10 -8
  36. package/dist/exports/client/index.js.map +4 -4
  37. package/dist/exports/server/ast/mdx.d.ts +7 -0
  38. package/dist/exports/server/ast/mdx.d.ts.map +1 -0
  39. package/dist/exports/server/ast/mdx.js +37 -0
  40. package/dist/exports/server/ast/mdx.js.map +1 -0
  41. package/dist/exports/server/rsc.d.ts +3 -0
  42. package/dist/exports/server/rsc.d.ts.map +1 -0
  43. package/dist/exports/server/rsc.js +3 -0
  44. package/dist/exports/server/rsc.js.map +1 -0
  45. package/dist/exports/shared.d.ts +4 -0
  46. package/dist/exports/shared.d.ts.map +1 -0
  47. package/dist/exports/shared.js +4 -0
  48. package/dist/exports/shared.js.map +1 -0
  49. package/dist/features/align/client/index.d.ts +1 -4
  50. package/dist/features/align/client/index.d.ts.map +1 -1
  51. package/dist/features/blockquote/client/index.d.ts +1 -4
  52. package/dist/features/blockquote/client/index.d.ts.map +1 -1
  53. package/dist/features/blockquote/markdownTransformer.js.map +1 -1
  54. package/dist/features/blockquote/server/index.d.ts +1 -1
  55. package/dist/features/blockquote/server/index.d.ts.map +1 -1
  56. package/dist/features/blockquote/server/index.js +5 -1
  57. package/dist/features/blockquote/server/index.js.map +1 -1
  58. package/dist/features/blocks/client/component/BlockContent.d.ts +34 -8
  59. package/dist/features/blocks/client/component/BlockContent.d.ts.map +1 -1
  60. package/dist/features/blocks/client/component/BlockContent.js +66 -170
  61. package/dist/features/blocks/client/component/BlockContent.js.map +1 -1
  62. package/dist/features/blocks/client/component/components/BlockCollapsible.d.ts +11 -0
  63. package/dist/features/blocks/client/component/components/BlockCollapsible.d.ts.map +1 -0
  64. package/dist/features/blocks/client/component/components/BlockCollapsible.js +37 -0
  65. package/dist/features/blocks/client/component/components/BlockCollapsible.js.map +1 -0
  66. package/dist/features/blocks/client/component/components/BlockEditButton.d.ts +3 -0
  67. package/dist/features/blocks/client/component/components/BlockEditButton.d.ts.map +1 -0
  68. package/dist/features/blocks/client/component/components/BlockEditButton.js +22 -0
  69. package/dist/features/blocks/client/component/components/BlockEditButton.js.map +1 -0
  70. package/dist/features/blocks/client/component/components/BlockRemoveButton.d.ts +3 -0
  71. package/dist/features/blocks/client/component/components/BlockRemoveButton.d.ts.map +1 -0
  72. package/dist/features/blocks/client/component/components/BlockRemoveButton.js +22 -0
  73. package/dist/features/blocks/client/component/components/BlockRemoveButton.js.map +1 -0
  74. package/dist/features/blocks/client/component/index.d.ts +1 -1
  75. package/dist/features/blocks/client/component/index.d.ts.map +1 -1
  76. package/dist/features/blocks/client/component/index.js +294 -93
  77. package/dist/features/blocks/client/component/index.js.map +1 -1
  78. package/dist/features/blocks/client/componentInline/components/InlineBlockContainer.d.ts +5 -0
  79. package/dist/features/blocks/client/componentInline/components/InlineBlockContainer.d.ts.map +1 -0
  80. package/dist/features/blocks/client/componentInline/components/InlineBlockContainer.js +28 -0
  81. package/dist/features/blocks/client/componentInline/components/InlineBlockContainer.js.map +1 -0
  82. package/dist/features/blocks/client/componentInline/components/InlineBlockEditButton.d.ts +3 -0
  83. package/dist/features/blocks/client/componentInline/components/InlineBlockEditButton.d.ts.map +1 -0
  84. package/dist/features/blocks/client/componentInline/components/InlineBlockEditButton.js +22 -0
  85. package/dist/features/blocks/client/componentInline/components/InlineBlockEditButton.js.map +1 -0
  86. package/dist/features/blocks/client/componentInline/components/InlineBlockLabel.d.ts +3 -0
  87. package/dist/features/blocks/client/componentInline/components/InlineBlockLabel.d.ts.map +1 -0
  88. package/dist/features/blocks/client/componentInline/components/InlineBlockLabel.js +22 -0
  89. package/dist/features/blocks/client/componentInline/components/InlineBlockLabel.js.map +1 -0
  90. package/dist/features/blocks/client/componentInline/components/InlineBlockRemoveButton.d.ts +3 -0
  91. package/dist/features/blocks/client/componentInline/components/InlineBlockRemoveButton.d.ts.map +1 -0
  92. package/dist/features/blocks/client/componentInline/components/InlineBlockRemoveButton.js +22 -0
  93. package/dist/features/blocks/client/componentInline/components/InlineBlockRemoveButton.js.map +1 -0
  94. package/dist/features/blocks/client/componentInline/index.d.ts +14 -2
  95. package/dist/features/blocks/client/componentInline/index.d.ts.map +1 -1
  96. package/dist/features/blocks/client/componentInline/index.js +237 -63
  97. package/dist/features/blocks/client/componentInline/index.js.map +1 -1
  98. package/dist/features/blocks/client/index.d.ts +1 -8
  99. package/dist/features/blocks/client/index.d.ts.map +1 -1
  100. package/dist/features/blocks/client/index.js +140 -147
  101. package/dist/features/blocks/client/index.js.map +1 -1
  102. package/dist/features/blocks/client/markdownTransformer.d.ts +16 -0
  103. package/dist/features/blocks/client/markdownTransformer.d.ts.map +1 -0
  104. package/dist/features/blocks/client/markdownTransformer.js +144 -0
  105. package/dist/features/blocks/client/markdownTransformer.js.map +1 -0
  106. package/dist/features/blocks/client/nodes/BlocksNode.d.ts +2 -2
  107. package/dist/features/blocks/client/nodes/BlocksNode.d.ts.map +1 -1
  108. package/dist/features/blocks/client/nodes/BlocksNode.js +1 -3
  109. package/dist/features/blocks/client/nodes/BlocksNode.js.map +1 -1
  110. package/dist/features/blocks/client/plugin/commands.d.ts +0 -4
  111. package/dist/features/blocks/client/plugin/commands.d.ts.map +1 -1
  112. package/dist/features/blocks/client/plugin/commands.js +0 -1
  113. package/dist/features/blocks/client/plugin/commands.js.map +1 -1
  114. package/dist/features/blocks/client/plugin/index.d.ts +3 -4
  115. package/dist/features/blocks/client/plugin/index.d.ts.map +1 -1
  116. package/dist/features/blocks/client/plugin/index.js +25 -129
  117. package/dist/features/blocks/client/plugin/index.js.map +1 -1
  118. package/dist/features/blocks/server/index.d.ts +1 -2
  119. package/dist/features/blocks/server/index.d.ts.map +1 -1
  120. package/dist/features/blocks/server/index.js +72 -35
  121. package/dist/features/blocks/server/index.js.map +1 -1
  122. package/dist/features/blocks/server/linesFromMatchToContentAndPropsString.d.ts +22 -0
  123. package/dist/features/blocks/server/linesFromMatchToContentAndPropsString.d.ts.map +1 -0
  124. package/dist/features/blocks/server/linesFromMatchToContentAndPropsString.js +136 -0
  125. package/dist/features/blocks/server/linesFromMatchToContentAndPropsString.js.map +1 -0
  126. package/dist/features/blocks/server/markdownTransformer.d.ts +22 -0
  127. package/dist/features/blocks/server/markdownTransformer.d.ts.map +1 -0
  128. package/dist/features/blocks/server/markdownTransformer.js +400 -0
  129. package/dist/features/blocks/server/markdownTransformer.js.map +1 -0
  130. package/dist/features/blocks/server/nodes/BlocksNode.d.ts +11 -5
  131. package/dist/features/blocks/server/nodes/BlocksNode.d.ts.map +1 -1
  132. package/dist/features/blocks/server/nodes/BlocksNode.js.map +1 -1
  133. package/dist/features/blocks/server/nodes/InlineBlocksNode.d.ts +3 -3
  134. package/dist/features/blocks/server/nodes/InlineBlocksNode.d.ts.map +1 -1
  135. package/dist/features/blocks/server/nodes/InlineBlocksNode.js.map +1 -1
  136. package/dist/features/blocks/server/validate.d.ts.map +1 -1
  137. package/dist/features/blocks/server/validate.js +8 -5
  138. package/dist/features/blocks/server/validate.js.map +1 -1
  139. package/dist/features/converters/html/converter/converters/paragraph.d.ts.map +1 -1
  140. package/dist/features/converters/html/converter/converters/paragraph.js +4 -0
  141. package/dist/features/converters/html/converter/converters/paragraph.js.map +1 -1
  142. package/dist/features/converters/html/converter/converters/text.d.ts.map +1 -1
  143. package/dist/features/converters/html/converter/converters/text.js +2 -1
  144. package/dist/features/converters/html/converter/converters/text.js.map +1 -1
  145. package/dist/features/converters/html/converter/index.d.ts +11 -7
  146. package/dist/features/converters/html/converter/index.d.ts.map +1 -1
  147. package/dist/features/converters/html/converter/index.js +17 -1
  148. package/dist/features/converters/html/converter/index.js.map +1 -1
  149. package/dist/features/converters/html/converter/types.d.ts +3 -1
  150. package/dist/features/converters/html/converter/types.d.ts.map +1 -1
  151. package/dist/features/converters/html/converter/types.js.map +1 -1
  152. package/dist/features/converters/html/field/index.d.ts.map +1 -1
  153. package/dist/features/converters/html/field/index.js +7 -1
  154. package/dist/features/converters/html/field/index.js.map +1 -1
  155. package/dist/features/debug/testRecorder/client/index.d.ts +1 -4
  156. package/dist/features/debug/testRecorder/client/index.d.ts.map +1 -1
  157. package/dist/features/debug/testRecorder/client/plugin/index.js +25 -14
  158. package/dist/features/debug/testRecorder/client/plugin/index.js.map +1 -1
  159. package/dist/features/debug/treeView/client/index.d.ts +1 -4
  160. package/dist/features/debug/treeView/client/index.d.ts.map +1 -1
  161. package/dist/features/experimental_table/client/index.d.ts +1 -1
  162. package/dist/features/experimental_table/client/index.d.ts.map +1 -1
  163. package/dist/features/experimental_table/client/index.js +2 -0
  164. package/dist/features/experimental_table/client/index.js.map +1 -1
  165. package/dist/features/experimental_table/client/plugins/TableActionMenuPlugin/index.d.ts.map +1 -1
  166. package/dist/features/experimental_table/client/plugins/TableActionMenuPlugin/index.js +49 -51
  167. package/dist/features/experimental_table/client/plugins/TableActionMenuPlugin/index.js.map +1 -1
  168. package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.d.ts.map +1 -1
  169. package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.js +55 -42
  170. package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.js.map +1 -1
  171. package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.d.ts +1 -1
  172. package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.d.ts.map +1 -1
  173. package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.js +58 -19
  174. package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.js.map +1 -1
  175. package/dist/features/experimental_table/client/plugins/TablePlugin/index.d.ts.map +1 -1
  176. package/dist/features/experimental_table/client/plugins/TablePlugin/index.js +52 -50
  177. package/dist/features/experimental_table/client/plugins/TablePlugin/index.js.map +1 -1
  178. package/dist/features/experimental_table/client/utils/debounce.js +4 -4
  179. package/dist/features/experimental_table/client/utils/debounce.js.map +1 -1
  180. package/dist/features/experimental_table/client/utils/useDebounce.js.map +1 -1
  181. package/dist/features/experimental_table/markdownTransformer.d.ts +5 -0
  182. package/dist/features/experimental_table/markdownTransformer.d.ts.map +1 -0
  183. package/dist/features/experimental_table/markdownTransformer.js +127 -0
  184. package/dist/features/experimental_table/markdownTransformer.js.map +1 -0
  185. package/dist/features/experimental_table/server/index.d.ts.map +1 -1
  186. package/dist/features/experimental_table/server/index.js +22 -4
  187. package/dist/features/experimental_table/server/index.js.map +1 -1
  188. package/dist/features/format/bold/feature.client.d.ts +1 -4
  189. package/dist/features/format/bold/feature.client.d.ts.map +1 -1
  190. package/dist/features/format/bold/feature.client.js +2 -1
  191. package/dist/features/format/bold/feature.client.js.map +1 -1
  192. package/dist/features/format/inlineCode/feature.client.d.ts +1 -4
  193. package/dist/features/format/inlineCode/feature.client.d.ts.map +1 -1
  194. package/dist/features/format/inlineCode/feature.client.js +2 -1
  195. package/dist/features/format/inlineCode/feature.client.js.map +1 -1
  196. package/dist/features/format/italic/feature.client.d.ts +1 -4
  197. package/dist/features/format/italic/feature.client.d.ts.map +1 -1
  198. package/dist/features/format/italic/feature.client.js +2 -1
  199. package/dist/features/format/italic/feature.client.js.map +1 -1
  200. package/dist/features/format/strikethrough/feature.client.d.ts +1 -4
  201. package/dist/features/format/strikethrough/feature.client.d.ts.map +1 -1
  202. package/dist/features/format/strikethrough/feature.client.js +2 -1
  203. package/dist/features/format/strikethrough/feature.client.js.map +1 -1
  204. package/dist/features/format/subscript/feature.client.d.ts +1 -4
  205. package/dist/features/format/subscript/feature.client.d.ts.map +1 -1
  206. package/dist/features/format/subscript/feature.client.js +2 -1
  207. package/dist/features/format/subscript/feature.client.js.map +1 -1
  208. package/dist/features/format/superscript/feature.client.d.ts +1 -4
  209. package/dist/features/format/superscript/feature.client.d.ts.map +1 -1
  210. package/dist/features/format/superscript/feature.client.js +2 -1
  211. package/dist/features/format/superscript/feature.client.js.map +1 -1
  212. package/dist/features/format/underline/feature.client.d.ts +1 -4
  213. package/dist/features/format/underline/feature.client.d.ts.map +1 -1
  214. package/dist/features/format/underline/feature.client.js +2 -1
  215. package/dist/features/format/underline/feature.client.js.map +1 -1
  216. package/dist/features/heading/client/index.d.ts +1 -4
  217. package/dist/features/heading/client/index.d.ts.map +1 -1
  218. package/dist/features/heading/server/index.d.ts.map +1 -1
  219. package/dist/features/heading/server/index.js +4 -0
  220. package/dist/features/heading/server/index.js.map +1 -1
  221. package/dist/features/horizontalRule/client/component/index.d.ts +1 -1
  222. package/dist/features/horizontalRule/client/component/index.d.ts.map +1 -1
  223. package/dist/features/horizontalRule/client/component/index.js +12 -9
  224. package/dist/features/horizontalRule/client/component/index.js.map +1 -1
  225. package/dist/features/horizontalRule/client/index.d.ts +1 -4
  226. package/dist/features/horizontalRule/client/index.d.ts.map +1 -1
  227. package/dist/features/horizontalRule/server/nodes/HorizontalRuleNode.d.ts +2 -2
  228. package/dist/features/horizontalRule/server/nodes/HorizontalRuleNode.d.ts.map +1 -1
  229. package/dist/features/horizontalRule/server/nodes/HorizontalRuleNode.js +1 -1
  230. package/dist/features/horizontalRule/server/nodes/HorizontalRuleNode.js.map +1 -1
  231. package/dist/features/indent/client/index.d.ts +1 -4
  232. package/dist/features/indent/client/index.d.ts.map +1 -1
  233. package/dist/features/indent/client/index.js +2 -1
  234. package/dist/features/indent/client/index.js.map +1 -1
  235. package/dist/features/link/client/index.d.ts +1 -13
  236. package/dist/features/link/client/index.d.ts.map +1 -1
  237. package/dist/features/link/client/index.js +2 -2
  238. package/dist/features/link/client/index.js.map +1 -1
  239. package/dist/features/link/client/plugins/autoLink/index.d.ts +1 -1
  240. package/dist/features/link/client/plugins/autoLink/index.d.ts.map +1 -1
  241. package/dist/features/link/client/plugins/autoLink/index.js +3 -1
  242. package/dist/features/link/client/plugins/autoLink/index.js.map +1 -1
  243. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.d.ts.map +1 -1
  244. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js +78 -40
  245. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js.map +1 -1
  246. package/dist/features/link/client/plugins/floatingLinkEditor/index.d.ts.map +1 -1
  247. package/dist/features/link/client/plugins/floatingLinkEditor/index.js +1 -1
  248. package/dist/features/link/client/plugins/floatingLinkEditor/index.js.map +1 -1
  249. package/dist/features/link/nodes/AutoLinkNode.js +2 -2
  250. package/dist/features/link/nodes/AutoLinkNode.js.map +1 -1
  251. package/dist/features/link/nodes/LinkNode.d.ts.map +1 -1
  252. package/dist/features/link/nodes/LinkNode.js +12 -7
  253. package/dist/features/link/nodes/LinkNode.js.map +1 -1
  254. package/dist/features/link/nodes/types.d.ts +3 -3
  255. package/dist/features/link/nodes/types.d.ts.map +1 -1
  256. package/dist/features/link/nodes/types.js.map +1 -1
  257. package/dist/features/link/server/baseFields.d.ts +1 -1
  258. package/dist/features/link/server/baseFields.d.ts.map +1 -1
  259. package/dist/features/link/server/baseFields.js +15 -3
  260. package/dist/features/link/server/baseFields.js.map +1 -1
  261. package/dist/features/link/server/i18n.d.ts.map +1 -1
  262. package/dist/features/link/server/i18n.js +64 -32
  263. package/dist/features/link/server/i18n.js.map +1 -1
  264. package/dist/features/link/server/index.d.ts.map +1 -1
  265. package/dist/features/link/server/index.js +17 -4
  266. package/dist/features/link/server/index.js.map +1 -1
  267. package/dist/features/link/server/transformExtraFields.d.ts +1 -1
  268. package/dist/features/link/server/transformExtraFields.d.ts.map +1 -1
  269. package/dist/features/link/server/transformExtraFields.js.map +1 -1
  270. package/dist/features/link/server/validate.d.ts.map +1 -1
  271. package/dist/features/link/server/validate.js +8 -5
  272. package/dist/features/link/server/validate.js.map +1 -1
  273. package/dist/features/lists/checklist/client/index.d.ts +1 -4
  274. package/dist/features/lists/checklist/client/index.d.ts.map +1 -1
  275. package/dist/features/lists/htmlConverter.d.ts.map +1 -1
  276. package/dist/features/lists/htmlConverter.js +8 -0
  277. package/dist/features/lists/htmlConverter.js.map +1 -1
  278. package/dist/features/lists/orderedList/client/index.d.ts +1 -4
  279. package/dist/features/lists/orderedList/client/index.d.ts.map +1 -1
  280. package/dist/features/lists/shared/markdown.js.map +1 -1
  281. package/dist/features/lists/unorderedList/client/index.d.ts +1 -4
  282. package/dist/features/lists/unorderedList/client/index.d.ts.map +1 -1
  283. package/dist/features/migrations/lexicalPluginToLexical/converter/index.d.ts.map +1 -1
  284. package/dist/features/migrations/lexicalPluginToLexical/converter/index.js +1 -0
  285. package/dist/features/migrations/lexicalPluginToLexical/converter/index.js.map +1 -1
  286. package/dist/features/migrations/lexicalPluginToLexical/feature.client.d.ts +1 -4
  287. package/dist/features/migrations/lexicalPluginToLexical/feature.client.d.ts.map +1 -1
  288. package/dist/features/migrations/lexicalPluginToLexical/nodes/unknownConvertedNode/index.d.ts +1 -1
  289. package/dist/features/migrations/lexicalPluginToLexical/nodes/unknownConvertedNode/index.d.ts.map +1 -1
  290. package/dist/features/migrations/lexicalPluginToLexical/nodes/unknownConvertedNode/index.js.map +1 -1
  291. package/dist/features/migrations/slateToLexical/converter/converters/blockquote/converter.js.map +1 -1
  292. package/dist/features/migrations/slateToLexical/converter/converters/heading/converter.js.map +1 -1
  293. package/dist/features/migrations/slateToLexical/converter/converters/link/converter.js.map +1 -1
  294. package/dist/features/migrations/slateToLexical/converter/converters/listItem/converter.js.map +1 -1
  295. package/dist/features/migrations/slateToLexical/converter/converters/orderedList/converter.js.map +1 -1
  296. package/dist/features/migrations/slateToLexical/converter/converters/unknown/converter.js.map +1 -1
  297. package/dist/features/migrations/slateToLexical/converter/converters/unorderedList/converter.js.map +1 -1
  298. package/dist/features/migrations/slateToLexical/converter/index.d.ts.map +1 -1
  299. package/dist/features/migrations/slateToLexical/converter/index.js +1 -0
  300. package/dist/features/migrations/slateToLexical/converter/index.js.map +1 -1
  301. package/dist/features/migrations/slateToLexical/feature.client.d.ts +1 -4
  302. package/dist/features/migrations/slateToLexical/feature.client.d.ts.map +1 -1
  303. package/dist/features/migrations/slateToLexical/feature.client.js +1 -3
  304. package/dist/features/migrations/slateToLexical/feature.client.js.map +1 -1
  305. package/dist/features/migrations/slateToLexical/nodes/unknownConvertedNode/index.d.ts +1 -1
  306. package/dist/features/migrations/slateToLexical/nodes/unknownConvertedNode/index.d.ts.map +1 -1
  307. package/dist/features/migrations/slateToLexical/nodes/unknownConvertedNode/index.js.map +1 -1
  308. package/dist/features/paragraph/client/index.d.ts +1 -4
  309. package/dist/features/paragraph/client/index.d.ts.map +1 -1
  310. package/dist/features/paragraph/server/index.d.ts +1 -1
  311. package/dist/features/paragraph/server/index.d.ts.map +1 -1
  312. package/dist/features/relationship/client/components/RelationshipComponent.d.ts.map +1 -1
  313. package/dist/features/relationship/client/components/RelationshipComponent.js +34 -24
  314. package/dist/features/relationship/client/components/RelationshipComponent.js.map +1 -1
  315. package/dist/features/relationship/client/drawer/index.d.ts.map +1 -1
  316. package/dist/features/relationship/client/drawer/index.js +27 -26
  317. package/dist/features/relationship/client/drawer/index.js.map +1 -1
  318. package/dist/features/relationship/client/index.d.ts +2 -17
  319. package/dist/features/relationship/client/index.d.ts.map +1 -1
  320. package/dist/features/relationship/client/nodes/RelationshipNode.d.ts +1 -1
  321. package/dist/features/relationship/client/nodes/RelationshipNode.d.ts.map +1 -1
  322. package/dist/features/relationship/client/nodes/RelationshipNode.js.map +1 -1
  323. package/dist/features/relationship/client/plugins/index.js +1 -1
  324. package/dist/features/relationship/client/plugins/index.js.map +1 -1
  325. package/dist/features/relationship/client/utils/EnabledRelationshipsCondition.js +1 -1
  326. package/dist/features/relationship/client/utils/EnabledRelationshipsCondition.js.map +1 -1
  327. package/dist/features/relationship/server/index.d.ts +1 -1
  328. package/dist/features/relationship/server/index.d.ts.map +1 -1
  329. package/dist/features/relationship/server/index.js +50 -40
  330. package/dist/features/relationship/server/index.js.map +1 -1
  331. package/dist/features/relationship/server/nodes/RelationshipNode.d.ts +2 -2
  332. package/dist/features/relationship/server/nodes/RelationshipNode.d.ts.map +1 -1
  333. package/dist/features/relationship/server/nodes/RelationshipNode.js.map +1 -1
  334. package/dist/features/toolbars/fixed/client/Toolbar/index.d.ts.map +1 -1
  335. package/dist/features/toolbars/fixed/client/Toolbar/index.js +93 -66
  336. package/dist/features/toolbars/fixed/client/Toolbar/index.js.map +1 -1
  337. package/dist/features/toolbars/fixed/client/index.d.ts +1 -4
  338. package/dist/features/toolbars/fixed/client/index.d.ts.map +1 -1
  339. package/dist/features/toolbars/inline/client/Toolbar/index.js +135 -97
  340. package/dist/features/toolbars/inline/client/Toolbar/index.js.map +1 -1
  341. package/dist/features/toolbars/inline/client/index.d.ts +1 -4
  342. package/dist/features/toolbars/inline/client/index.d.ts.map +1 -1
  343. package/dist/features/toolbars/shared/ToolbarButton/index.d.ts.map +1 -1
  344. package/dist/features/toolbars/shared/ToolbarButton/index.js +5 -2
  345. package/dist/features/toolbars/shared/ToolbarButton/index.js.map +1 -1
  346. package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.d.ts +5 -4
  347. package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.d.ts.map +1 -1
  348. package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js +24 -10
  349. package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js.map +1 -1
  350. package/dist/features/toolbars/shared/ToolbarDropdown/index.d.ts +4 -5
  351. package/dist/features/toolbars/shared/ToolbarDropdown/index.d.ts.map +1 -1
  352. package/dist/features/toolbars/shared/ToolbarDropdown/index.js +127 -127
  353. package/dist/features/toolbars/shared/ToolbarDropdown/index.js.map +1 -1
  354. package/dist/features/toolbars/types.d.ts +23 -11
  355. package/dist/features/toolbars/types.d.ts.map +1 -1
  356. package/dist/features/toolbars/types.js.map +1 -1
  357. package/dist/features/typesClient.d.ts +22 -30
  358. package/dist/features/typesClient.d.ts.map +1 -1
  359. package/dist/features/typesClient.js.map +1 -1
  360. package/dist/features/typesServer.d.ts +23 -28
  361. package/dist/features/typesServer.d.ts.map +1 -1
  362. package/dist/features/typesServer.js.map +1 -1
  363. package/dist/features/upload/client/component/index.d.ts.map +1 -1
  364. package/dist/features/upload/client/component/index.js +66 -58
  365. package/dist/features/upload/client/component/index.js.map +1 -1
  366. package/dist/features/upload/client/drawer/index.d.ts.map +1 -1
  367. package/dist/features/upload/client/drawer/index.js +34 -32
  368. package/dist/features/upload/client/drawer/index.js.map +1 -1
  369. package/dist/features/upload/client/feature.client.d.ts +1 -4
  370. package/dist/features/upload/client/feature.client.d.ts.map +1 -1
  371. package/dist/features/upload/client/nodes/UploadNode.d.ts.map +1 -1
  372. package/dist/features/upload/client/nodes/UploadNode.js +1 -1
  373. package/dist/features/upload/client/nodes/UploadNode.js.map +1 -1
  374. package/dist/features/upload/client/plugin/index.js +1 -1
  375. package/dist/features/upload/client/plugin/index.js.map +1 -1
  376. package/dist/features/upload/server/feature.server.d.ts.map +1 -1
  377. package/dist/features/upload/server/feature.server.js +17 -8
  378. package/dist/features/upload/server/feature.server.js.map +1 -1
  379. package/dist/features/upload/server/validate.d.ts.map +1 -1
  380. package/dist/features/upload/server/validate.js +7 -4
  381. package/dist/features/upload/server/validate.js.map +1 -1
  382. package/dist/field/Field.d.ts.map +1 -1
  383. package/dist/field/Field.js +39 -65
  384. package/dist/field/Field.js.map +1 -1
  385. package/dist/field/bundled.css +1 -1
  386. package/dist/field/index.d.ts.map +1 -1
  387. package/dist/field/index.js +74 -74
  388. package/dist/field/index.js.map +1 -1
  389. package/dist/field/rscEntry.d.ts +9 -0
  390. package/dist/field/rscEntry.d.ts.map +1 -0
  391. package/dist/field/rscEntry.js +56 -0
  392. package/dist/field/rscEntry.js.map +1 -0
  393. package/dist/index.d.ts +8 -4
  394. package/dist/index.d.ts.map +1 -1
  395. package/dist/index.js +101 -105
  396. package/dist/index.js.map +1 -1
  397. package/dist/lexical/EditorPlugin.d.ts.map +1 -1
  398. package/dist/lexical/EditorPlugin.js +2 -1
  399. package/dist/lexical/EditorPlugin.js.map +1 -1
  400. package/dist/lexical/LexicalEditor.d.ts +1 -1
  401. package/dist/lexical/LexicalEditor.d.ts.map +1 -1
  402. package/dist/lexical/LexicalEditor.js +10 -10
  403. package/dist/lexical/LexicalEditor.js.map +1 -1
  404. package/dist/lexical/LexicalProvider.d.ts +2 -2
  405. package/dist/lexical/LexicalProvider.d.ts.map +1 -1
  406. package/dist/lexical/LexicalProvider.js +18 -25
  407. package/dist/lexical/LexicalProvider.js.map +1 -1
  408. package/dist/lexical/config/client/EditorConfigProvider.d.ts +6 -5
  409. package/dist/lexical/config/client/EditorConfigProvider.d.ts.map +1 -1
  410. package/dist/lexical/config/client/EditorConfigProvider.js +14 -13
  411. package/dist/lexical/config/client/EditorConfigProvider.js.map +1 -1
  412. package/dist/lexical/config/client/loader.d.ts +5 -2
  413. package/dist/lexical/config/client/loader.d.ts.map +1 -1
  414. package/dist/lexical/config/client/loader.js +12 -18
  415. package/dist/lexical/config/client/loader.js.map +1 -1
  416. package/dist/lexical/config/client/sanitize.d.ts +1 -1
  417. package/dist/lexical/config/client/sanitize.d.ts.map +1 -1
  418. package/dist/lexical/config/client/sanitize.js +19 -18
  419. package/dist/lexical/config/client/sanitize.js.map +1 -1
  420. package/dist/lexical/config/server/loader.d.ts +2 -1
  421. package/dist/lexical/config/server/loader.d.ts.map +1 -1
  422. package/dist/lexical/config/server/loader.js +2 -0
  423. package/dist/lexical/config/server/loader.js.map +1 -1
  424. package/dist/lexical/config/server/sanitize.d.ts +1 -1
  425. package/dist/lexical/config/server/sanitize.d.ts.map +1 -1
  426. package/dist/lexical/config/server/sanitize.js +27 -13
  427. package/dist/lexical/config/server/sanitize.js.map +1 -1
  428. package/dist/lexical/config/types.d.ts +2 -2
  429. package/dist/lexical/config/types.d.ts.map +1 -1
  430. package/dist/lexical/config/types.js.map +1 -1
  431. package/dist/lexical/nodes/index.d.ts +4 -0
  432. package/dist/lexical/nodes/index.d.ts.map +1 -1
  433. package/dist/lexical/nodes/index.js +8 -1
  434. package/dist/lexical/nodes/index.js.map +1 -1
  435. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.d.ts +6 -6
  436. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.d.ts.map +1 -1
  437. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js +19 -8
  438. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js.map +1 -1
  439. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.d.ts +2 -2
  440. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.d.ts.map +1 -1
  441. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.js +7 -7
  442. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.js.map +1 -1
  443. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.d.ts +3 -2
  444. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.d.ts.map +1 -1
  445. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.js.map +1 -1
  446. package/dist/lexical/plugins/SlashMenu/index.d.ts.map +1 -1
  447. package/dist/lexical/plugins/SlashMenu/index.js +24 -30
  448. package/dist/lexical/plugins/SlashMenu/index.js.map +1 -1
  449. package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.d.ts.map +1 -1
  450. package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.js +11 -9
  451. package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.js.map +1 -1
  452. package/dist/lexical/plugins/handles/DraggableBlockPlugin/debounce.d.ts +1 -1
  453. package/dist/lexical/plugins/handles/DraggableBlockPlugin/debounce.d.ts.map +1 -1
  454. package/dist/lexical/plugins/handles/DraggableBlockPlugin/debounce.js +1 -1
  455. package/dist/lexical/plugins/handles/DraggableBlockPlugin/debounce.js.map +1 -1
  456. package/dist/lexical/plugins/handles/DraggableBlockPlugin/getBoundingRectWithoutTransform.js +1 -1
  457. package/dist/lexical/plugins/handles/DraggableBlockPlugin/getBoundingRectWithoutTransform.js.map +1 -1
  458. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.d.ts.map +1 -1
  459. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js +15 -8
  460. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js.map +1 -1
  461. package/dist/lexical/plugins/handles/DraggableBlockPlugin/setTargetLine.d.ts.map +1 -1
  462. package/dist/lexical/plugins/handles/DraggableBlockPlugin/setTargetLine.js +9 -7
  463. package/dist/lexical/plugins/handles/DraggableBlockPlugin/setTargetLine.js.map +1 -1
  464. package/dist/lexical/plugins/handles/utils/doesLineHeightAffectElement.d.ts.map +1 -1
  465. package/dist/lexical/plugins/handles/utils/doesLineHeightAffectElement.js +3 -1
  466. package/dist/lexical/plugins/handles/utils/doesLineHeightAffectElement.js.map +1 -1
  467. package/dist/lexical/plugins/handles/utils/getNodeCloseToPoint.d.ts.map +1 -1
  468. package/dist/lexical/plugins/handles/utils/getNodeCloseToPoint.js +3 -4
  469. package/dist/lexical/plugins/handles/utils/getNodeCloseToPoint.js.map +1 -1
  470. package/dist/lexical/theme/EditorTheme.d.ts.map +1 -1
  471. package/dist/lexical/theme/EditorTheme.js +1 -2
  472. package/dist/lexical/theme/EditorTheme.js.map +1 -1
  473. package/dist/lexical/utils/nodeFormat.d.ts +2 -2
  474. package/dist/lexical/utils/nodeFormat.d.ts.map +1 -1
  475. package/dist/lexical/utils/nodeFormat.js.map +1 -1
  476. package/dist/lexical/utils/rect.d.ts +4 -4
  477. package/dist/lexical/utils/rect.d.ts.map +1 -1
  478. package/dist/lexical/utils/rect.js.map +1 -1
  479. package/dist/lexical/utils/setFloatingElemPosition.d.ts +1 -1
  480. package/dist/lexical/utils/setFloatingElemPosition.d.ts.map +1 -1
  481. package/dist/lexical/utils/setFloatingElemPosition.js.map +1 -1
  482. package/dist/lexical/utils/url.d.ts +5 -0
  483. package/dist/lexical/utils/url.d.ts.map +1 -1
  484. package/dist/lexical/utils/url.js +25 -5
  485. package/dist/lexical/utils/url.js.map +1 -1
  486. package/dist/lexical-proxy/@lexical-headless.d.ts +2 -0
  487. package/dist/lexical-proxy/@lexical-headless.d.ts.map +1 -0
  488. package/dist/lexical-proxy/@lexical-headless.js +2 -0
  489. package/dist/lexical-proxy/@lexical-headless.js.map +1 -0
  490. package/dist/lexical-proxy/@lexical-link.d.ts +2 -0
  491. package/dist/lexical-proxy/@lexical-link.d.ts.map +1 -0
  492. package/dist/lexical-proxy/@lexical-link.js +2 -0
  493. package/dist/lexical-proxy/@lexical-link.js.map +1 -0
  494. package/dist/lexical-proxy/@lexical-list.d.ts +2 -0
  495. package/dist/lexical-proxy/@lexical-list.d.ts.map +1 -0
  496. package/dist/lexical-proxy/@lexical-list.js +2 -0
  497. package/dist/lexical-proxy/@lexical-list.js.map +1 -0
  498. package/dist/lexical-proxy/@lexical-mark.d.ts +2 -0
  499. package/dist/lexical-proxy/@lexical-mark.d.ts.map +1 -0
  500. package/dist/lexical-proxy/@lexical-mark.js +2 -0
  501. package/dist/lexical-proxy/@lexical-mark.js.map +1 -0
  502. package/dist/lexical-proxy/@lexical-markdown.d.ts +2 -0
  503. package/dist/lexical-proxy/@lexical-markdown.d.ts.map +1 -0
  504. package/dist/lexical-proxy/@lexical-markdown.js +2 -0
  505. package/dist/lexical-proxy/@lexical-markdown.js.map +1 -0
  506. package/dist/lexical-proxy/@lexical-react/LexicalAutoEmbedPlugin.d.ts +2 -0
  507. package/dist/lexical-proxy/@lexical-react/LexicalAutoEmbedPlugin.d.ts.map +1 -0
  508. package/dist/lexical-proxy/@lexical-react/LexicalAutoEmbedPlugin.js +2 -0
  509. package/dist/lexical-proxy/@lexical-react/LexicalAutoEmbedPlugin.js.map +1 -0
  510. package/dist/lexical-proxy/@lexical-react/LexicalAutoFocusPlugin.d.ts +2 -0
  511. package/dist/lexical-proxy/@lexical-react/LexicalAutoFocusPlugin.d.ts.map +1 -0
  512. package/dist/lexical-proxy/@lexical-react/LexicalAutoFocusPlugin.js +2 -0
  513. package/dist/lexical-proxy/@lexical-react/LexicalAutoFocusPlugin.js.map +1 -0
  514. package/dist/lexical-proxy/@lexical-react/LexicalAutoLinkPlugin.d.ts +2 -0
  515. package/dist/lexical-proxy/@lexical-react/LexicalAutoLinkPlugin.d.ts.map +1 -0
  516. package/dist/lexical-proxy/@lexical-react/LexicalAutoLinkPlugin.js +2 -0
  517. package/dist/lexical-proxy/@lexical-react/LexicalAutoLinkPlugin.js.map +1 -0
  518. package/dist/lexical-proxy/@lexical-react/LexicalBlockWithAlignableContents.d.ts +2 -0
  519. package/dist/lexical-proxy/@lexical-react/LexicalBlockWithAlignableContents.d.ts.map +1 -0
  520. package/dist/lexical-proxy/@lexical-react/LexicalBlockWithAlignableContents.js +2 -0
  521. package/dist/lexical-proxy/@lexical-react/LexicalBlockWithAlignableContents.js.map +1 -0
  522. package/dist/lexical-proxy/@lexical-react/LexicalCharacterLimitPlugin.d.ts +2 -0
  523. package/dist/lexical-proxy/@lexical-react/LexicalCharacterLimitPlugin.d.ts.map +1 -0
  524. package/dist/lexical-proxy/@lexical-react/LexicalCharacterLimitPlugin.js +2 -0
  525. package/dist/lexical-proxy/@lexical-react/LexicalCharacterLimitPlugin.js.map +1 -0
  526. package/dist/lexical-proxy/@lexical-react/LexicalCheckListPlugin.d.ts +2 -0
  527. package/dist/lexical-proxy/@lexical-react/LexicalCheckListPlugin.d.ts.map +1 -0
  528. package/dist/lexical-proxy/@lexical-react/LexicalCheckListPlugin.js +2 -0
  529. package/dist/lexical-proxy/@lexical-react/LexicalCheckListPlugin.js.map +1 -0
  530. package/dist/lexical-proxy/@lexical-react/LexicalClearEditorPlugin.d.ts +2 -0
  531. package/dist/lexical-proxy/@lexical-react/LexicalClearEditorPlugin.d.ts.map +1 -0
  532. package/dist/lexical-proxy/@lexical-react/LexicalClearEditorPlugin.js +2 -0
  533. package/dist/lexical-proxy/@lexical-react/LexicalClearEditorPlugin.js.map +1 -0
  534. package/dist/lexical-proxy/@lexical-react/LexicalClickableLinkPlugin.d.ts +2 -0
  535. package/dist/lexical-proxy/@lexical-react/LexicalClickableLinkPlugin.d.ts.map +1 -0
  536. package/dist/lexical-proxy/@lexical-react/LexicalClickableLinkPlugin.js +2 -0
  537. package/dist/lexical-proxy/@lexical-react/LexicalClickableLinkPlugin.js.map +1 -0
  538. package/dist/lexical-proxy/@lexical-react/LexicalCollaborationContext.d.ts +2 -0
  539. package/dist/lexical-proxy/@lexical-react/LexicalCollaborationContext.d.ts.map +1 -0
  540. package/dist/lexical-proxy/@lexical-react/LexicalCollaborationContext.js +2 -0
  541. package/dist/lexical-proxy/@lexical-react/LexicalCollaborationContext.js.map +1 -0
  542. package/dist/lexical-proxy/@lexical-react/LexicalCollaborationPlugin.d.ts +2 -0
  543. package/dist/lexical-proxy/@lexical-react/LexicalCollaborationPlugin.d.ts.map +1 -0
  544. package/dist/lexical-proxy/@lexical-react/LexicalCollaborationPlugin.js +2 -0
  545. package/dist/lexical-proxy/@lexical-react/LexicalCollaborationPlugin.js.map +1 -0
  546. package/dist/lexical-proxy/@lexical-react/LexicalComposer.d.ts +2 -0
  547. package/dist/lexical-proxy/@lexical-react/LexicalComposer.d.ts.map +1 -0
  548. package/dist/lexical-proxy/@lexical-react/LexicalComposer.js +2 -0
  549. package/dist/lexical-proxy/@lexical-react/LexicalComposer.js.map +1 -0
  550. package/dist/lexical-proxy/@lexical-react/LexicalComposerContext.d.ts +2 -0
  551. package/dist/lexical-proxy/@lexical-react/LexicalComposerContext.d.ts.map +1 -0
  552. package/dist/lexical-proxy/@lexical-react/LexicalComposerContext.js +2 -0
  553. package/dist/lexical-proxy/@lexical-react/LexicalComposerContext.js.map +1 -0
  554. package/dist/lexical-proxy/@lexical-react/LexicalContentEditable.d.ts +2 -0
  555. package/dist/lexical-proxy/@lexical-react/LexicalContentEditable.d.ts.map +1 -0
  556. package/dist/lexical-proxy/@lexical-react/LexicalContentEditable.js +2 -0
  557. package/dist/lexical-proxy/@lexical-react/LexicalContentEditable.js.map +1 -0
  558. package/dist/lexical-proxy/@lexical-react/LexicalContextMenuPlugin.d.ts +2 -0
  559. package/dist/lexical-proxy/@lexical-react/LexicalContextMenuPlugin.d.ts.map +1 -0
  560. package/dist/lexical-proxy/@lexical-react/LexicalContextMenuPlugin.js +2 -0
  561. package/dist/lexical-proxy/@lexical-react/LexicalContextMenuPlugin.js.map +1 -0
  562. package/dist/lexical-proxy/@lexical-react/LexicalDecoratorBlockNode.d.ts +2 -0
  563. package/dist/lexical-proxy/@lexical-react/LexicalDecoratorBlockNode.d.ts.map +1 -0
  564. package/dist/lexical-proxy/@lexical-react/LexicalDecoratorBlockNode.js +2 -0
  565. package/dist/lexical-proxy/@lexical-react/LexicalDecoratorBlockNode.js.map +1 -0
  566. package/dist/lexical-proxy/@lexical-react/LexicalDraggableBlockPlugin.d.ts +2 -0
  567. package/dist/lexical-proxy/@lexical-react/LexicalDraggableBlockPlugin.d.ts.map +1 -0
  568. package/dist/lexical-proxy/@lexical-react/LexicalDraggableBlockPlugin.js +2 -0
  569. package/dist/lexical-proxy/@lexical-react/LexicalDraggableBlockPlugin.js.map +1 -0
  570. package/dist/lexical-proxy/@lexical-react/LexicalEditorRefPlugin.d.ts +2 -0
  571. package/dist/lexical-proxy/@lexical-react/LexicalEditorRefPlugin.d.ts.map +1 -0
  572. package/dist/lexical-proxy/@lexical-react/LexicalEditorRefPlugin.js +2 -0
  573. package/dist/lexical-proxy/@lexical-react/LexicalEditorRefPlugin.js.map +1 -0
  574. package/dist/lexical-proxy/@lexical-react/LexicalErrorBoundary.d.ts +2 -0
  575. package/dist/lexical-proxy/@lexical-react/LexicalErrorBoundary.d.ts.map +1 -0
  576. package/dist/lexical-proxy/@lexical-react/LexicalErrorBoundary.js +2 -0
  577. package/dist/lexical-proxy/@lexical-react/LexicalErrorBoundary.js.map +1 -0
  578. package/dist/lexical-proxy/@lexical-react/LexicalHashtagPlugin.d.ts +2 -0
  579. package/dist/lexical-proxy/@lexical-react/LexicalHashtagPlugin.d.ts.map +1 -0
  580. package/dist/lexical-proxy/@lexical-react/LexicalHashtagPlugin.js +2 -0
  581. package/dist/lexical-proxy/@lexical-react/LexicalHashtagPlugin.js.map +1 -0
  582. package/dist/lexical-proxy/@lexical-react/LexicalHistoryPlugin.d.ts +2 -0
  583. package/dist/lexical-proxy/@lexical-react/LexicalHistoryPlugin.d.ts.map +1 -0
  584. package/dist/lexical-proxy/@lexical-react/LexicalHistoryPlugin.js +2 -0
  585. package/dist/lexical-proxy/@lexical-react/LexicalHistoryPlugin.js.map +1 -0
  586. package/dist/lexical-proxy/@lexical-react/LexicalHorizontalRuleNode.d.ts +2 -0
  587. package/dist/lexical-proxy/@lexical-react/LexicalHorizontalRuleNode.d.ts.map +1 -0
  588. package/dist/lexical-proxy/@lexical-react/LexicalHorizontalRuleNode.js +2 -0
  589. package/dist/lexical-proxy/@lexical-react/LexicalHorizontalRuleNode.js.map +1 -0
  590. package/dist/lexical-proxy/@lexical-react/LexicalHorizontalRulePlugin.d.ts +2 -0
  591. package/dist/lexical-proxy/@lexical-react/LexicalHorizontalRulePlugin.d.ts.map +1 -0
  592. package/dist/lexical-proxy/@lexical-react/LexicalHorizontalRulePlugin.js +2 -0
  593. package/dist/lexical-proxy/@lexical-react/LexicalHorizontalRulePlugin.js.map +1 -0
  594. package/dist/lexical-proxy/@lexical-react/LexicalLinkPlugin.d.ts +2 -0
  595. package/dist/lexical-proxy/@lexical-react/LexicalLinkPlugin.d.ts.map +1 -0
  596. package/dist/lexical-proxy/@lexical-react/LexicalLinkPlugin.js +2 -0
  597. package/dist/lexical-proxy/@lexical-react/LexicalLinkPlugin.js.map +1 -0
  598. package/dist/lexical-proxy/@lexical-react/LexicalListPlugin.d.ts +2 -0
  599. package/dist/lexical-proxy/@lexical-react/LexicalListPlugin.d.ts.map +1 -0
  600. package/dist/lexical-proxy/@lexical-react/LexicalListPlugin.js +2 -0
  601. package/dist/lexical-proxy/@lexical-react/LexicalListPlugin.js.map +1 -0
  602. package/dist/lexical-proxy/@lexical-react/LexicalMarkdownShortcutPlugin.d.ts +2 -0
  603. package/dist/lexical-proxy/@lexical-react/LexicalMarkdownShortcutPlugin.d.ts.map +1 -0
  604. package/dist/lexical-proxy/@lexical-react/LexicalMarkdownShortcutPlugin.js +2 -0
  605. package/dist/lexical-proxy/@lexical-react/LexicalMarkdownShortcutPlugin.js.map +1 -0
  606. package/dist/lexical-proxy/@lexical-react/LexicalNestedComposer.d.ts +2 -0
  607. package/dist/lexical-proxy/@lexical-react/LexicalNestedComposer.d.ts.map +1 -0
  608. package/dist/lexical-proxy/@lexical-react/LexicalNestedComposer.js +2 -0
  609. package/dist/lexical-proxy/@lexical-react/LexicalNestedComposer.js.map +1 -0
  610. package/dist/lexical-proxy/@lexical-react/LexicalNodeEventPlugin.d.ts +2 -0
  611. package/dist/lexical-proxy/@lexical-react/LexicalNodeEventPlugin.d.ts.map +1 -0
  612. package/dist/lexical-proxy/@lexical-react/LexicalNodeEventPlugin.js +2 -0
  613. package/dist/lexical-proxy/@lexical-react/LexicalNodeEventPlugin.js.map +1 -0
  614. package/dist/lexical-proxy/@lexical-react/LexicalNodeMenuPlugin.d.ts +2 -0
  615. package/dist/lexical-proxy/@lexical-react/LexicalNodeMenuPlugin.d.ts.map +1 -0
  616. package/dist/lexical-proxy/@lexical-react/LexicalNodeMenuPlugin.js +2 -0
  617. package/dist/lexical-proxy/@lexical-react/LexicalNodeMenuPlugin.js.map +1 -0
  618. package/dist/lexical-proxy/@lexical-react/LexicalOnChangePlugin.d.ts +2 -0
  619. package/dist/lexical-proxy/@lexical-react/LexicalOnChangePlugin.d.ts.map +1 -0
  620. package/dist/lexical-proxy/@lexical-react/LexicalOnChangePlugin.js +2 -0
  621. package/dist/lexical-proxy/@lexical-react/LexicalOnChangePlugin.js.map +1 -0
  622. package/dist/lexical-proxy/@lexical-react/LexicalPlainTextPlugin.d.ts +2 -0
  623. package/dist/lexical-proxy/@lexical-react/LexicalPlainTextPlugin.d.ts.map +1 -0
  624. package/dist/lexical-proxy/@lexical-react/LexicalPlainTextPlugin.js +2 -0
  625. package/dist/lexical-proxy/@lexical-react/LexicalPlainTextPlugin.js.map +1 -0
  626. package/dist/lexical-proxy/@lexical-react/LexicalRichTextPlugin.d.ts +2 -0
  627. package/dist/lexical-proxy/@lexical-react/LexicalRichTextPlugin.d.ts.map +1 -0
  628. package/dist/lexical-proxy/@lexical-react/LexicalRichTextPlugin.js +2 -0
  629. package/dist/lexical-proxy/@lexical-react/LexicalRichTextPlugin.js.map +1 -0
  630. package/dist/lexical-proxy/@lexical-react/LexicalTabIndentationPlugin.d.ts +2 -0
  631. package/dist/lexical-proxy/@lexical-react/LexicalTabIndentationPlugin.d.ts.map +1 -0
  632. package/dist/lexical-proxy/@lexical-react/LexicalTabIndentationPlugin.js +2 -0
  633. package/dist/lexical-proxy/@lexical-react/LexicalTabIndentationPlugin.js.map +1 -0
  634. package/dist/lexical-proxy/@lexical-react/LexicalTableOfContents.d.ts +2 -0
  635. package/dist/lexical-proxy/@lexical-react/LexicalTableOfContents.d.ts.map +1 -0
  636. package/dist/lexical-proxy/@lexical-react/LexicalTableOfContents.js +2 -0
  637. package/dist/lexical-proxy/@lexical-react/LexicalTableOfContents.js.map +1 -0
  638. package/dist/lexical-proxy/@lexical-react/LexicalTableOfContentsPlugin.d.ts +2 -0
  639. package/dist/lexical-proxy/@lexical-react/LexicalTableOfContentsPlugin.d.ts.map +1 -0
  640. package/dist/lexical-proxy/@lexical-react/LexicalTableOfContentsPlugin.js +2 -0
  641. package/dist/lexical-proxy/@lexical-react/LexicalTableOfContentsPlugin.js.map +1 -0
  642. package/dist/lexical-proxy/@lexical-react/LexicalTablePlugin.d.ts +2 -0
  643. package/dist/lexical-proxy/@lexical-react/LexicalTablePlugin.d.ts.map +1 -0
  644. package/dist/lexical-proxy/@lexical-react/LexicalTablePlugin.js +2 -0
  645. package/dist/lexical-proxy/@lexical-react/LexicalTablePlugin.js.map +1 -0
  646. package/dist/lexical-proxy/@lexical-react/LexicalTreeView.d.ts +2 -0
  647. package/dist/lexical-proxy/@lexical-react/LexicalTreeView.d.ts.map +1 -0
  648. package/dist/lexical-proxy/@lexical-react/LexicalTreeView.js +2 -0
  649. package/dist/lexical-proxy/@lexical-react/LexicalTreeView.js.map +1 -0
  650. package/dist/lexical-proxy/@lexical-react/LexicalTypeaheadMenuPlugin.d.ts +2 -0
  651. package/dist/lexical-proxy/@lexical-react/LexicalTypeaheadMenuPlugin.d.ts.map +1 -0
  652. package/dist/lexical-proxy/@lexical-react/LexicalTypeaheadMenuPlugin.js +2 -0
  653. package/dist/lexical-proxy/@lexical-react/LexicalTypeaheadMenuPlugin.js.map +1 -0
  654. package/dist/lexical-proxy/@lexical-react/useLexicalEditable.d.ts +2 -0
  655. package/dist/lexical-proxy/@lexical-react/useLexicalEditable.d.ts.map +1 -0
  656. package/dist/lexical-proxy/@lexical-react/useLexicalEditable.js +2 -0
  657. package/dist/lexical-proxy/@lexical-react/useLexicalEditable.js.map +1 -0
  658. package/dist/lexical-proxy/@lexical-react/useLexicalIsTextContentEmpty.d.ts +2 -0
  659. package/dist/lexical-proxy/@lexical-react/useLexicalIsTextContentEmpty.d.ts.map +1 -0
  660. package/dist/lexical-proxy/@lexical-react/useLexicalIsTextContentEmpty.js +2 -0
  661. package/dist/lexical-proxy/@lexical-react/useLexicalIsTextContentEmpty.js.map +1 -0
  662. package/dist/lexical-proxy/@lexical-react/useLexicalNodeSelection.d.ts +2 -0
  663. package/dist/lexical-proxy/@lexical-react/useLexicalNodeSelection.d.ts.map +1 -0
  664. package/dist/lexical-proxy/@lexical-react/useLexicalNodeSelection.js +2 -0
  665. package/dist/lexical-proxy/@lexical-react/useLexicalNodeSelection.js.map +1 -0
  666. package/dist/lexical-proxy/@lexical-react/useLexicalSubscription.d.ts +2 -0
  667. package/dist/lexical-proxy/@lexical-react/useLexicalSubscription.d.ts.map +1 -0
  668. package/dist/lexical-proxy/@lexical-react/useLexicalSubscription.js +2 -0
  669. package/dist/lexical-proxy/@lexical-react/useLexicalSubscription.js.map +1 -0
  670. package/dist/lexical-proxy/@lexical-react/useLexicalTextEntity.d.ts +2 -0
  671. package/dist/lexical-proxy/@lexical-react/useLexicalTextEntity.d.ts.map +1 -0
  672. package/dist/lexical-proxy/@lexical-react/useLexicalTextEntity.js +2 -0
  673. package/dist/lexical-proxy/@lexical-react/useLexicalTextEntity.js.map +1 -0
  674. package/dist/lexical-proxy/@lexical-rich-text.d.ts +2 -0
  675. package/dist/lexical-proxy/@lexical-rich-text.d.ts.map +1 -0
  676. package/dist/lexical-proxy/@lexical-rich-text.js +2 -0
  677. package/dist/lexical-proxy/@lexical-rich-text.js.map +1 -0
  678. package/dist/lexical-proxy/@lexical-selection.d.ts +2 -0
  679. package/dist/lexical-proxy/@lexical-selection.d.ts.map +1 -0
  680. package/dist/lexical-proxy/@lexical-selection.js +2 -0
  681. package/dist/lexical-proxy/@lexical-selection.js.map +1 -0
  682. package/dist/lexical-proxy/@lexical-utils.d.ts +2 -0
  683. package/dist/lexical-proxy/@lexical-utils.d.ts.map +1 -0
  684. package/dist/lexical-proxy/@lexical-utils.js +2 -0
  685. package/dist/lexical-proxy/@lexical-utils.js.map +1 -0
  686. package/dist/lexical-proxy/lexical.d.ts +2 -0
  687. package/dist/lexical-proxy/lexical.d.ts.map +1 -0
  688. package/dist/lexical-proxy/lexical.js +2 -0
  689. package/dist/lexical-proxy/lexical.js.map +1 -0
  690. package/dist/populateGraphQL/populate.d.ts +3 -2
  691. package/dist/populateGraphQL/populate.d.ts.map +1 -1
  692. package/dist/populateGraphQL/populate.js +3 -1
  693. package/dist/populateGraphQL/populate.js.map +1 -1
  694. package/dist/populateGraphQL/populateLexicalPopulationPromises.d.ts +1 -1
  695. package/dist/populateGraphQL/populateLexicalPopulationPromises.d.ts.map +1 -1
  696. package/dist/populateGraphQL/populateLexicalPopulationPromises.js +5 -4
  697. package/dist/populateGraphQL/populateLexicalPopulationPromises.js.map +1 -1
  698. package/dist/populateGraphQL/recursivelyPopulateFieldsForGraphQL.js.map +1 -1
  699. package/dist/types.d.ts +23 -8
  700. package/dist/types.d.ts.map +1 -1
  701. package/dist/types.js.map +1 -1
  702. package/dist/utilities/buildInitialState.d.ts +27 -0
  703. package/dist/utilities/buildInitialState.d.ts.map +1 -0
  704. package/dist/utilities/buildInitialState.js +53 -0
  705. package/dist/utilities/buildInitialState.js.map +1 -0
  706. package/dist/utilities/createClientFeature.d.ts +8 -5
  707. package/dist/utilities/createClientFeature.d.ts.map +1 -1
  708. package/dist/utilities/createClientFeature.js +7 -4
  709. package/dist/utilities/createClientFeature.js.map +1 -1
  710. package/dist/utilities/createServerFeature.d.ts +1 -0
  711. package/dist/utilities/createServerFeature.d.ts.map +1 -1
  712. package/dist/utilities/createServerFeature.js +2 -0
  713. package/dist/utilities/createServerFeature.js.map +1 -1
  714. package/dist/utilities/fieldsDrawer/Drawer.d.ts +1 -0
  715. package/dist/utilities/fieldsDrawer/Drawer.d.ts.map +1 -1
  716. package/dist/utilities/fieldsDrawer/Drawer.js +68 -27
  717. package/dist/utilities/fieldsDrawer/Drawer.js.map +1 -1
  718. package/dist/utilities/fieldsDrawer/DrawerContent.d.ts.map +1 -1
  719. package/dist/utilities/fieldsDrawer/DrawerContent.js +102 -138
  720. package/dist/utilities/fieldsDrawer/DrawerContent.js.map +1 -1
  721. package/dist/utilities/fieldsDrawer/useLexicalDocumentDrawer.d.ts +13 -0
  722. package/dist/utilities/fieldsDrawer/useLexicalDocumentDrawer.d.ts.map +1 -0
  723. package/dist/utilities/fieldsDrawer/useLexicalDocumentDrawer.js +129 -0
  724. package/dist/utilities/fieldsDrawer/useLexicalDocumentDrawer.js.map +1 -0
  725. package/dist/utilities/fieldsDrawer/useLexicalDrawer.d.ts +10 -0
  726. package/dist/utilities/fieldsDrawer/useLexicalDrawer.d.ts.map +1 -0
  727. package/dist/utilities/fieldsDrawer/useLexicalDrawer.js +136 -0
  728. package/dist/utilities/fieldsDrawer/useLexicalDrawer.js.map +1 -0
  729. package/dist/utilities/fieldsDrawer/useLexicalListDrawer.d.ts +16 -0
  730. package/dist/utilities/fieldsDrawer/useLexicalListDrawer.d.ts.map +1 -0
  731. package/dist/utilities/fieldsDrawer/useLexicalListDrawer.js +144 -0
  732. package/dist/utilities/fieldsDrawer/useLexicalListDrawer.js.map +1 -0
  733. package/dist/utilities/generateImportMap.d.ts.map +1 -1
  734. package/dist/utilities/generateImportMap.js +2 -3
  735. package/dist/utilities/generateImportMap.js.map +1 -1
  736. package/dist/utilities/generateSchemaMap.d.ts.map +1 -1
  737. package/dist/utilities/generateSchemaMap.js +13 -10
  738. package/dist/utilities/generateSchemaMap.js.map +1 -1
  739. package/dist/utilities/initLexicalFeatures.d.ts +18 -0
  740. package/dist/utilities/initLexicalFeatures.d.ts.map +1 -0
  741. package/dist/utilities/initLexicalFeatures.js +96 -0
  742. package/dist/utilities/initLexicalFeatures.js.map +1 -0
  743. package/dist/utilities/jsx/collectTopLevelJSXInLines.d.ts +52 -0
  744. package/dist/utilities/jsx/collectTopLevelJSXInLines.d.ts.map +1 -0
  745. package/dist/utilities/jsx/collectTopLevelJSXInLines.js +79 -0
  746. package/dist/utilities/jsx/collectTopLevelJSXInLines.js.map +1 -0
  747. package/dist/utilities/jsx/extractPropsFromJSXPropsString.d.ts +12 -0
  748. package/dist/utilities/jsx/extractPropsFromJSXPropsString.d.ts.map +1 -0
  749. package/dist/utilities/jsx/extractPropsFromJSXPropsString.js +125 -0
  750. package/dist/utilities/jsx/extractPropsFromJSXPropsString.js.map +1 -0
  751. package/dist/utilities/jsx/jsx.d.ts +26 -0
  752. package/dist/utilities/jsx/jsx.d.ts.map +1 -0
  753. package/dist/utilities/jsx/jsx.js +105 -0
  754. package/dist/utilities/jsx/jsx.js.map +1 -0
  755. package/dist/utilities/jsx/jsx.spec.d.ts +2 -0
  756. package/dist/utilities/jsx/jsx.spec.d.ts.map +1 -0
  757. package/dist/utilities/jsx/jsx.spec.js +142 -0
  758. package/dist/utilities/jsx/jsx.spec.js.map +1 -0
  759. package/dist/utilities/jsx/lexicalMarkdownCopy.d.ts +11 -0
  760. package/dist/utilities/jsx/lexicalMarkdownCopy.d.ts.map +1 -0
  761. package/dist/utilities/jsx/lexicalMarkdownCopy.js +61 -0
  762. package/dist/utilities/jsx/lexicalMarkdownCopy.js.map +1 -0
  763. package/dist/utilities/migrateSlateToLexical/migrateDocumentFieldsRecursively.d.ts +1 -1
  764. package/dist/utilities/migrateSlateToLexical/migrateDocumentFieldsRecursively.d.ts.map +1 -1
  765. package/dist/utilities/migrateSlateToLexical/migrateDocumentFieldsRecursively.js +1 -1
  766. package/dist/utilities/migrateSlateToLexical/migrateDocumentFieldsRecursively.js.map +1 -1
  767. package/dist/utilities/upgradeLexicalData/upgradeDocumentFieldsRecursively.d.ts +1 -1
  768. package/dist/utilities/upgradeLexicalData/upgradeDocumentFieldsRecursively.d.ts.map +1 -1
  769. package/dist/utilities/upgradeLexicalData/upgradeDocumentFieldsRecursively.js +5 -1
  770. package/dist/utilities/upgradeLexicalData/upgradeDocumentFieldsRecursively.js.map +1 -1
  771. package/dist/utilities/useLexicalFeature.d.ts.map +1 -1
  772. package/dist/utilities/useLexicalFeature.js +12 -4
  773. package/dist/utilities/useLexicalFeature.js.map +1 -1
  774. package/dist/validate/index.d.ts.map +1 -1
  775. package/dist/validate/index.js +2 -2
  776. package/dist/validate/index.js.map +1 -1
  777. package/dist/validate/validateNodes.d.ts +2 -2
  778. package/dist/validate/validateNodes.d.ts.map +1 -1
  779. package/dist/validate/validateNodes.js +4 -4
  780. package/dist/validate/validateNodes.js.map +1 -1
  781. package/package.json +332 -46
  782. package/dist/cell/index.d.ts +0 -9
  783. package/dist/cell/index.d.ts.map +0 -1
  784. package/dist/cell/index.js +0 -135
  785. package/dist/cell/index.js.map +0 -1
  786. package/dist/exports/client/Field-SUWHJ4HF.js +0 -2
  787. package/dist/exports/client/Field-SUWHJ4HF.js.map +0 -7
  788. package/dist/exports/client/RelationshipComponent-EZORSGUZ.js +0 -2
  789. package/dist/exports/client/RelationshipComponent-EZORSGUZ.js.map +0 -7
  790. package/dist/exports/client/chunk-OLSILJA6.js +0 -2
  791. package/dist/exports/client/chunk-OLSILJA6.js.map +0 -7
  792. package/dist/exports/client/chunk-TD7O23AB.js +0 -2
  793. package/dist/exports/client/chunk-TD7O23AB.js.map +0 -7
  794. package/dist/exports/client/chunk-YL453UOS.js +0 -2
  795. package/dist/exports/client/chunk-YL453UOS.js.map +0 -7
  796. package/dist/exports/client/chunk-YSI2QILQ.js +0 -2
  797. package/dist/exports/client/chunk-YSI2QILQ.js.map +0 -7
  798. package/dist/exports/client/component-2YLEVOFH.js +0 -2
  799. package/dist/exports/client/component-2YLEVOFH.js.map +0 -7
  800. package/dist/exports/client/component-7RAP75FW.js +0 -2
  801. package/dist/exports/client/component-7RAP75FW.js.map +0 -7
  802. package/dist/exports/client/component-LLWMZU6K.js +0 -2
  803. package/dist/exports/client/component-LLWMZU6K.js.map +0 -7
  804. package/dist/exports/client/componentInline-YSHGRL2J.js +0 -2
  805. package/dist/exports/client/componentInline-YSHGRL2J.js.map +0 -7
  806. package/dist/features/blocks/client/component/FormSavePlugin.d.ts +0 -11
  807. package/dist/features/blocks/client/component/FormSavePlugin.d.ts.map +0 -1
  808. package/dist/features/blocks/client/component/FormSavePlugin.js +0 -53
  809. package/dist/features/blocks/client/component/FormSavePlugin.js.map +0 -1
  810. package/dist/features/createClientComponent.d.ts +0 -7
  811. package/dist/features/createClientComponent.d.ts.map +0 -1
  812. package/dist/features/createClientComponent.js +0 -13
  813. package/dist/features/createClientComponent.js.map +0 -1
  814. package/dist/features/createFeaturePropComponent.d.ts +0 -6
  815. package/dist/features/createFeaturePropComponent.d.ts.map +0 -1
  816. package/dist/features/createFeaturePropComponent.js +0 -19
  817. package/dist/features/createFeaturePropComponent.js.map +0 -1
  818. package/dist/utilities/generateComponentMap.d.ts +0 -6
  819. package/dist/utilities/generateComponentMap.d.ts.map +0 -1
  820. package/dist/utilities/generateComponentMap.js +0 -99
  821. package/dist/utilities/generateComponentMap.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useLexicalComposerContext","$findMatchingParent","mergeRegister","getTranslation","CloseMenuIcon","EditIcon","formatDrawerSlug","useConfig","useEditDepth","useModal","useTranslation","$getSelection","$isLineBreakNode","$isRangeSelection","COMMAND_PRIORITY_HIGH","COMMAND_PRIORITY_LOW","KEY_ESCAPE_COMMAND","SELECTION_CHANGE_COMMAND","React","useCallback","useEffect","useRef","useState","useEditorConfigContext","getSelectedNode","setFloatingElemPositionForLinkEditor","FieldsDrawer","$isAutoLinkNode","$createLinkNode","$isLinkNode","TOGGLE_LINK_COMMAND","TOGGLE_LINK_WITH_MODAL_COMMAND","LinkEditor","anchorElem","editor","editorRef","linkUrl","setLinkUrl","linkLabel","setLinkLabel","uuid","config","i18n","t","stateData","setStateData","closeModal","toggleModal","editDepth","isLink","setIsLink","selectedNodes","setSelectedNodes","isAutoLink","setIsAutoLink","drawerSlug","slug","depth","setNotLink","current","style","opacity","transform","$updateLinkEditor","selection","selectedNodeDomRect","focusNode","getElementByKey","getKey","getBoundingClientRect","focusLinkParent","badNode","getNodes","filter","node","find","linkNode","is","data","doc","undefined","linkType","newTab","url","getFields","id","getID","text","getTextContent","relationTo","value","relatedField","collections","coll","label","String","labels","singular","replace","editorElem","nativeSelection","window","getSelection","activeElement","document","rootElement","getRootElement","contains","anchorNode","getRangeAt","y","className","registerCommand","payload","dispatchCommand","scrollerElem","parentElement","update","getEditorState","read","addEventListener","removeEventListener","registerUpdateListener","editorState","_jsxs","Fragment","_jsx","ref","length","href","rel","target","isEditable","onClick","onMouseDown","event","preventDefault","tabIndex","type","drawerTitle","featureKey","handleDrawerSubmit","fields","newLinkPayload","bareLinkFields","linkParent","getParent","schemaPathSuffix"],"sources":["../../../../../../../src/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.tsx"],"sourcesContent":["'use client'\nimport type { LexicalNode } from 'lexical'\nimport type { Data, FormState } from 'payload'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { $findMatchingParent, mergeRegister } from '@lexical/utils'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n CloseMenuIcon,\n EditIcon,\n formatDrawerSlug,\n useConfig,\n useEditDepth,\n useModal,\n useTranslation,\n} from '@payloadcms/ui'\nimport {\n $getSelection,\n $isLineBreakNode,\n $isRangeSelection,\n COMMAND_PRIORITY_HIGH,\n COMMAND_PRIORITY_LOW,\n KEY_ESCAPE_COMMAND,\n SELECTION_CHANGE_COMMAND,\n} from 'lexical'\nimport React, { useCallback, useEffect, useRef, useState } from 'react'\n\nimport type { LinkNode } from '../../../../nodes/LinkNode.js'\nimport type { LinkFields } from '../../../../nodes/types.js'\nimport type { LinkPayload } from '../types.js'\n\nimport { useEditorConfigContext } from '../../../../../../lexical/config/client/EditorConfigProvider.js'\nimport { getSelectedNode } from '../../../../../../lexical/utils/getSelectedNode.js'\nimport { setFloatingElemPositionForLinkEditor } from '../../../../../../lexical/utils/setFloatingElemPositionForLinkEditor.js'\nimport { FieldsDrawer } from '../../../../../../utilities/fieldsDrawer/Drawer.js'\nimport { $isAutoLinkNode } from '../../../../nodes/AutoLinkNode.js'\nimport { $createLinkNode, $isLinkNode, TOGGLE_LINK_COMMAND } from '../../../../nodes/LinkNode.js'\nimport { TOGGLE_LINK_WITH_MODAL_COMMAND } from './commands.js'\n\nexport function LinkEditor({ anchorElem }: { anchorElem: HTMLElement }): React.ReactNode {\n const [editor] = useLexicalComposerContext()\n\n const editorRef = useRef<HTMLDivElement | null>(null)\n const [linkUrl, setLinkUrl] = useState(null)\n const [linkLabel, setLinkLabel] = useState(null)\n\n const { uuid } = useEditorConfigContext()\n\n const { config } = useConfig()\n\n const { i18n, t } = useTranslation()\n\n const [stateData, setStateData] = useState<{ id?: string; text: string } & LinkFields>(null)\n\n const { closeModal, toggleModal } = useModal()\n const editDepth = useEditDepth()\n const [isLink, setIsLink] = useState(false)\n const [selectedNodes, setSelectedNodes] = useState<LexicalNode[]>([])\n\n const [isAutoLink, setIsAutoLink] = useState(false)\n\n const drawerSlug = formatDrawerSlug({\n slug: `lexical-rich-text-link-` + uuid,\n depth: editDepth,\n })\n\n const setNotLink = useCallback(() => {\n setIsLink(false)\n if (editorRef && editorRef.current) {\n editorRef.current.style.opacity = '0'\n editorRef.current.style.transform = 'translate(-10000px, -10000px)'\n }\n setIsAutoLink(false)\n setLinkUrl(null)\n setLinkLabel(null)\n setSelectedNodes([])\n setStateData(null)\n }, [setIsLink, setLinkUrl, setLinkLabel, setSelectedNodes])\n\n const $updateLinkEditor = useCallback(() => {\n const selection = $getSelection()\n let selectedNodeDomRect: DOMRect | undefined = null\n\n if (!$isRangeSelection(selection) || !selection) {\n setNotLink()\n return\n }\n\n // Handle the data displayed in the floating link editor & drawer when you click on a link node\n\n const focusNode = getSelectedNode(selection)\n selectedNodeDomRect = editor.getElementByKey(focusNode.getKey())?.getBoundingClientRect()\n const focusLinkParent: LinkNode = $findMatchingParent(focusNode, $isLinkNode)\n\n // Prevent link modal from showing if selection spans further than the link: https://github.com/facebook/lexical/issues/4064\n const badNode = selection\n .getNodes()\n .filter((node) => !$isLineBreakNode(node))\n .find((node) => {\n const linkNode = $findMatchingParent(node, $isLinkNode)\n return (\n (focusLinkParent && !focusLinkParent.is(linkNode)) ||\n (linkNode && !linkNode.is(focusLinkParent))\n )\n })\n\n if (focusLinkParent == null || badNode) {\n setNotLink()\n return\n }\n\n // Initial state:\n const data: { text: string } & LinkFields = {\n doc: undefined,\n linkType: undefined,\n newTab: undefined,\n url: '',\n ...focusLinkParent.getFields(),\n id: focusLinkParent.getID(),\n text: focusLinkParent.getTextContent(),\n }\n\n if (focusLinkParent.getFields()?.linkType === 'custom') {\n setLinkUrl(focusLinkParent.getFields()?.url ?? null)\n setLinkLabel(null)\n } else {\n // internal link\n setLinkUrl(\n `/admin/collections/${focusLinkParent.getFields()?.doc?.relationTo}/${\n focusLinkParent.getFields()?.doc?.value\n }`,\n )\n\n const relatedField = config.collections.find(\n (coll) => coll.slug === focusLinkParent.getFields()?.doc?.relationTo,\n )\n if (!relatedField) {\n // Usually happens if the user removed all default fields. In this case, we let them specify the label or do not display the label at all.\n // label could be a virtual field the user added. This is useful if they want to use the link feature for things other than links.\n setLinkLabel(\n focusLinkParent.getFields()?.label ? String(focusLinkParent.getFields()?.label) : null,\n )\n setLinkUrl(\n focusLinkParent.getFields()?.url ? String(focusLinkParent.getFields()?.url) : null,\n )\n } else {\n const label = t('fields:linkedTo', {\n label: getTranslation(relatedField.labels.singular, i18n),\n }).replace(/<[^>]*>?/g, '')\n setLinkLabel(label)\n }\n }\n\n setStateData(data)\n setIsLink(true)\n setSelectedNodes(selection ? selection?.getNodes() : [])\n\n if ($isAutoLinkNode(focusLinkParent)) {\n setIsAutoLink(true)\n } else {\n setIsAutoLink(false)\n }\n\n const editorElem = editorRef.current\n const nativeSelection = window.getSelection()\n const { activeElement } = document\n\n if (editorElem === null) {\n return\n }\n\n const rootElement = editor.getRootElement()\n\n if (\n nativeSelection !== null &&\n rootElement !== null &&\n rootElement.contains(nativeSelection.anchorNode)\n ) {\n if (!selectedNodeDomRect) {\n // Get the DOM rect of the selected node using the native selection. This sometimes produces the wrong\n // result, which is why we use lexical's selection preferably.\n selectedNodeDomRect = nativeSelection.getRangeAt(0).getBoundingClientRect()\n }\n\n if (selectedNodeDomRect != null) {\n selectedNodeDomRect.y += 40\n setFloatingElemPositionForLinkEditor(selectedNodeDomRect, editorElem, anchorElem)\n }\n } else if (activeElement == null || activeElement.className !== 'link-input') {\n if (rootElement !== null) {\n setFloatingElemPositionForLinkEditor(null, editorElem, anchorElem)\n }\n setLinkUrl(null)\n setLinkLabel(null)\n }\n\n return true\n }, [editor, setNotLink, config.collections, t, i18n, anchorElem])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand(\n TOGGLE_LINK_WITH_MODAL_COMMAND,\n (payload: LinkPayload) => {\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, payload)\n\n // Now, open the modal\n $updateLinkEditor()\n toggleModal(drawerSlug)\n\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n )\n }, [editor, $updateLinkEditor, toggleModal, drawerSlug])\n\n useEffect(() => {\n const scrollerElem = anchorElem.parentElement\n\n const update = (): void => {\n editor.getEditorState().read(() => {\n void $updateLinkEditor()\n })\n }\n\n window.addEventListener('resize', update)\n\n if (scrollerElem != null) {\n scrollerElem.addEventListener('scroll', update)\n }\n\n return () => {\n window.removeEventListener('resize', update)\n\n if (scrollerElem != null) {\n scrollerElem.removeEventListener('scroll', update)\n }\n }\n }, [anchorElem.parentElement, editor, $updateLinkEditor])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n void $updateLinkEditor()\n })\n }),\n\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n () => {\n void $updateLinkEditor()\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand(\n KEY_ESCAPE_COMMAND,\n () => {\n if (isLink) {\n setNotLink()\n\n return true\n }\n return false\n },\n COMMAND_PRIORITY_HIGH,\n ),\n )\n }, [editor, $updateLinkEditor, isLink, setNotLink])\n\n useEffect(() => {\n editor.getEditorState().read(() => {\n void $updateLinkEditor()\n })\n }, [editor, $updateLinkEditor])\n\n return (\n <React.Fragment>\n <div className=\"link-editor\" ref={editorRef}>\n <div className=\"link-input\">\n {linkUrl && linkUrl.length > 0 ? (\n <a href={linkUrl} rel=\"noopener noreferrer\" target=\"_blank\">\n {linkLabel != null && linkLabel.length > 0 ? linkLabel : linkUrl}\n </a>\n ) : linkLabel != null && linkLabel.length > 0 ? (\n <span className=\"link-input__label-pure\">{linkLabel}</span>\n ) : null}\n\n {editor.isEditable() && (\n <React.Fragment>\n <button\n aria-label=\"Edit link\"\n className=\"link-edit\"\n onClick={() => {\n toggleModal(drawerSlug)\n }}\n onMouseDown={(event) => {\n event.preventDefault()\n }}\n tabIndex={0}\n type=\"button\"\n >\n <EditIcon />\n </button>\n {!isAutoLink && (\n <button\n aria-label=\"Remove link\"\n className=\"link-trash\"\n onClick={() => {\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, null)\n }}\n onMouseDown={(event) => {\n event.preventDefault()\n }}\n tabIndex={0}\n type=\"button\"\n >\n <CloseMenuIcon />\n </button>\n )}\n </React.Fragment>\n )}\n </div>\n </div>\n <FieldsDrawer\n className=\"lexical-link-edit-drawer\"\n data={stateData}\n drawerSlug={drawerSlug}\n drawerTitle={t('fields:editLink')}\n featureKey=\"link\"\n handleDrawerSubmit={(fields: FormState, data: Data) => {\n closeModal(drawerSlug)\n\n const newLinkPayload = data as { text: string } & LinkFields\n\n const bareLinkFields: LinkFields = {\n ...newLinkPayload,\n }\n delete bareLinkFields.text\n\n // See: https://github.com/facebook/lexical/pull/5536. This updates autolink nodes to link nodes whenever a change was made (which is good!).\n editor.update(() => {\n const selection = $getSelection()\n let linkParent = null\n if ($isRangeSelection(selection)) {\n linkParent = getSelectedNode(selection).getParent()\n } else {\n if (selectedNodes.length) {\n linkParent = selectedNodes[0].getParent()\n }\n }\n\n if (linkParent && $isAutoLinkNode(linkParent)) {\n const linkNode = $createLinkNode({\n fields: bareLinkFields,\n })\n linkParent.replace(linkNode, true)\n }\n })\n\n // Needs to happen AFTER a potential auto link => link node conversion, as otherwise, the updated text to display may be lost due to\n // it being applied to the auto link node instead of the link node.\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, {\n fields: bareLinkFields,\n selectedNodes,\n text: newLinkPayload.text,\n })\n }}\n schemaPathSuffix=\"fields\"\n />\n </React.Fragment>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["useLexicalComposerContext","$findMatchingParent","mergeRegister","getTranslation","CloseMenuIcon","EditIcon","ExternalLinkIcon","formatDrawerSlug","useConfig","useEditDepth","useLocale","useTranslation","requests","$getSelection","$isLineBreakNode","$isRangeSelection","COMMAND_PRIORITY_HIGH","COMMAND_PRIORITY_LOW","KEY_ESCAPE_COMMAND","SELECTION_CHANGE_COMMAND","React","useCallback","useEffect","useRef","useState","useEditorConfigContext","getSelectedNode","setFloatingElemPositionForLinkEditor","FieldsDrawer","useLexicalDrawer","$isAutoLinkNode","$createLinkNode","$isLinkNode","TOGGLE_LINK_COMMAND","TOGGLE_LINK_WITH_MODAL_COMMAND","LinkEditor","anchorElem","editor","linkNode","setLinkNode","editorRef","linkUrl","setLinkUrl","linkLabel","setLinkLabel","fieldProps","schemaPath","uuid","config","i18n","t","stateData","setStateData","editDepth","isLink","setIsLink","selectedNodes","setSelectedNodes","locale","isAutoLink","setIsAutoLink","drawerSlug","slug","depth","toggleDrawer","setNotLink","current","style","opacity","transform","undefined","$updateLinkEditor","selection","selectedNodeDomRect","focusNode","getElementByKey","getKey","getBoundingClientRect","focusLinkParent","badNode","getNodes","filter","node","find","is","fields","getFields","data","id","getID","text","getTextContent","linkType","url","routes","admin","doc","relationTo","value","relatedField","collections","coll","label","String","collection","Error","loadingLabel","labels","singular","replace","get","serverURL","api","headers","language","params","code","then","res","ok","status","json","useAsTitle","title","catch","editorElem","nativeSelection","window","getSelection","activeElement","document","rootElement","getRootElement","contains","anchorNode","getRangeAt","y","className","registerCommand","payload","dispatchCommand","scrollerElem","parentElement","update","getEditorState","read","addEventListener","removeEventListener","registerUpdateListener","editorState","_jsxs","Fragment","_jsx","ref","length","href","rel","target","__fields","newTab","_Fragment","isEditable","onClick","onMouseDown","event","preventDefault","tabIndex","type","drawerTitle","featureKey","handleDrawerSubmit","newLinkPayload","bareLinkFields","linkParent","getParent","schemaPathSuffix"],"sources":["../../../../../../../src/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.tsx"],"sourcesContent":["'use client'\nimport type { ElementNode, LexicalNode } from 'lexical'\nimport type { Data, FormState } from 'payload'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { $findMatchingParent, mergeRegister } from '@lexical/utils'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n CloseMenuIcon,\n EditIcon,\n ExternalLinkIcon,\n formatDrawerSlug,\n useConfig,\n useEditDepth,\n useLocale,\n useTranslation,\n} from '@payloadcms/ui'\nimport { requests } from '@payloadcms/ui/shared'\nimport {\n $getSelection,\n $isLineBreakNode,\n $isRangeSelection,\n COMMAND_PRIORITY_HIGH,\n COMMAND_PRIORITY_LOW,\n KEY_ESCAPE_COMMAND,\n SELECTION_CHANGE_COMMAND,\n} from 'lexical'\nimport React, { useCallback, useEffect, useRef, useState } from 'react'\n\nimport type { LinkNode } from '../../../../nodes/LinkNode.js'\nimport type { LinkFields } from '../../../../nodes/types.js'\nimport type { LinkPayload } from '../types.js'\n\nimport { useEditorConfigContext } from '../../../../../../lexical/config/client/EditorConfigProvider.js'\nimport { getSelectedNode } from '../../../../../../lexical/utils/getSelectedNode.js'\nimport { setFloatingElemPositionForLinkEditor } from '../../../../../../lexical/utils/setFloatingElemPositionForLinkEditor.js'\nimport { FieldsDrawer } from '../../../../../../utilities/fieldsDrawer/Drawer.js'\nimport { useLexicalDrawer } from '../../../../../../utilities/fieldsDrawer/useLexicalDrawer.js'\nimport { $isAutoLinkNode } from '../../../../nodes/AutoLinkNode.js'\nimport { $createLinkNode, $isLinkNode, TOGGLE_LINK_COMMAND } from '../../../../nodes/LinkNode.js'\nimport { TOGGLE_LINK_WITH_MODAL_COMMAND } from './commands.js'\n\nexport function LinkEditor({ anchorElem }: { anchorElem: HTMLElement }): React.ReactNode {\n const [editor] = useLexicalComposerContext()\n // TO-DO: There are several states that should not be state, because they\n // are derived from linkNode (linkUrl, linkLabel, stateData, isLink, isAutoLink...)\n const [linkNode, setLinkNode] = useState<LinkNode>()\n\n const editorRef = useRef<HTMLDivElement | null>(null)\n const [linkUrl, setLinkUrl] = useState<null | string>(null)\n const [linkLabel, setLinkLabel] = useState<null | string>(null)\n\n const {\n fieldProps: { schemaPath },\n uuid,\n } = useEditorConfigContext()\n\n const { config } = useConfig()\n\n const { i18n, t } = useTranslation<object, 'lexical:link:loadingWithEllipsis'>()\n\n const [stateData, setStateData] = useState<\n ({ id?: string; text: string } & LinkFields) | undefined\n >()\n\n const editDepth = useEditDepth()\n const [isLink, setIsLink] = useState(false)\n const [selectedNodes, setSelectedNodes] = useState<LexicalNode[]>([])\n const locale = useLocale()\n\n const [isAutoLink, setIsAutoLink] = useState(false)\n\n const drawerSlug = formatDrawerSlug({\n slug: `lexical-rich-text-link-` + uuid,\n depth: editDepth,\n })\n\n const { toggleDrawer } = useLexicalDrawer(drawerSlug)\n\n const setNotLink = useCallback(() => {\n setIsLink(false)\n if (editorRef && editorRef.current) {\n editorRef.current.style.opacity = '0'\n editorRef.current.style.transform = 'translate(-10000px, -10000px)'\n }\n setIsAutoLink(false)\n setLinkUrl(null)\n setLinkLabel(null)\n setSelectedNodes([])\n setStateData(undefined)\n }, [setIsLink, setLinkUrl, setLinkLabel, setSelectedNodes])\n\n const $updateLinkEditor = useCallback(() => {\n const selection = $getSelection()\n let selectedNodeDomRect: DOMRect | undefined\n\n if (!$isRangeSelection(selection) || !selection) {\n void setNotLink()\n return\n }\n\n // Handle the data displayed in the floating link editor & drawer when you click on a link node\n\n const focusNode = getSelectedNode(selection)\n selectedNodeDomRect = editor.getElementByKey(focusNode.getKey())?.getBoundingClientRect()\n const focusLinkParent = $findMatchingParent(focusNode, $isLinkNode)\n\n // Prevent link modal from showing if selection spans further than the link: https://github.com/facebook/lexical/issues/4064\n const badNode = selection\n .getNodes()\n .filter((node) => !$isLineBreakNode(node))\n .find((node) => {\n const linkNode = $findMatchingParent(node, $isLinkNode)\n return (\n (focusLinkParent && !focusLinkParent.is(linkNode)) ||\n (linkNode && !linkNode.is(focusLinkParent))\n )\n })\n\n if (focusLinkParent == null || badNode) {\n setNotLink()\n return\n }\n setLinkNode(focusLinkParent)\n\n const fields = focusLinkParent.getFields()\n\n // Initial state:\n const data: { text: string } & LinkFields = {\n ...fields,\n id: focusLinkParent.getID(),\n text: focusLinkParent.getTextContent(),\n }\n\n if (fields?.linkType === 'custom') {\n setLinkUrl(fields?.url ?? null)\n setLinkLabel(null)\n } else {\n // internal link\n setLinkUrl(\n `${config.routes.admin === '/' ? '' : config.routes.admin}/collections/${fields?.doc?.relationTo}/${\n fields?.doc?.value\n }`,\n )\n\n const relatedField = config.collections.find((coll) => coll.slug === fields?.doc?.relationTo)\n if (!relatedField) {\n // Usually happens if the user removed all default fields. In this case, we let them specify the label or do not display the label at all.\n // label could be a virtual field the user added. This is useful if they want to use the link feature for things other than links.\n setLinkLabel(fields?.label ? String(fields?.label) : null)\n setLinkUrl(fields?.url ? String(fields?.url) : null)\n } else {\n const id = typeof fields.doc?.value === 'object' ? fields.doc.value.id : fields.doc?.value\n const collection = fields.doc?.relationTo\n if (!id || !collection) {\n throw new Error(`Focus link parent is missing doc.value or doc.relationTo`)\n }\n\n const loadingLabel = t('fields:linkedTo', {\n label: `${getTranslation(relatedField.labels.singular, i18n)} - ${t('lexical:link:loadingWithEllipsis', i18n)}`,\n }).replace(/<[^>]*>?/g, '')\n setLinkLabel(loadingLabel)\n\n requests\n .get(`${config.serverURL}${config.routes.api}/${collection}/${id}`, {\n headers: {\n 'Accept-Language': i18n.language,\n },\n params: {\n depth: 0,\n locale: locale?.code,\n },\n })\n .then(async (res) => {\n if (!res.ok) {\n throw new Error(`HTTP error! Status: ${res.status}`)\n }\n const data = await res.json()\n const useAsTitle = relatedField?.admin?.useAsTitle || 'id'\n const title = data[useAsTitle]\n const label = t('fields:linkedTo', {\n label: `${getTranslation(relatedField.labels.singular, i18n)} - ${title}`,\n }).replace(/<[^>]*>?/g, '')\n setLinkLabel(label)\n })\n .catch(() => {\n const label = t('fields:linkedTo', {\n label: `${getTranslation(relatedField.labels.singular, i18n)} - ${t('general:untitled', i18n)} - ID: ${id}`,\n }).replace(/<[^>]*>?/g, '')\n setLinkLabel(label)\n })\n }\n }\n\n setStateData(data)\n setIsLink(true)\n setSelectedNodes(selection ? selection?.getNodes() : [])\n\n if ($isAutoLinkNode(focusLinkParent)) {\n setIsAutoLink(true)\n } else {\n setIsAutoLink(false)\n }\n\n const editorElem = editorRef.current\n const nativeSelection = window.getSelection()\n const { activeElement } = document\n\n if (editorElem === null) {\n return\n }\n\n const rootElement = editor.getRootElement()\n\n if (\n nativeSelection !== null &&\n rootElement !== null &&\n rootElement.contains(nativeSelection.anchorNode)\n ) {\n if (!selectedNodeDomRect) {\n // Get the DOM rect of the selected node using the native selection. This sometimes produces the wrong\n // result, which is why we use lexical's selection preferably.\n selectedNodeDomRect = nativeSelection.getRangeAt(0).getBoundingClientRect()\n }\n\n if (selectedNodeDomRect != null) {\n selectedNodeDomRect.y += 40\n setFloatingElemPositionForLinkEditor(selectedNodeDomRect, editorElem, anchorElem)\n }\n } else if (activeElement == null || activeElement.className !== 'link-input') {\n if (rootElement !== null) {\n setFloatingElemPositionForLinkEditor(null, editorElem, anchorElem)\n }\n setLinkUrl(null)\n setLinkLabel(null)\n }\n\n return true\n }, [\n editor,\n setNotLink,\n config.routes.admin,\n config.routes.api,\n config.collections,\n config.serverURL,\n t,\n i18n,\n locale?.code,\n anchorElem,\n ])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand(\n TOGGLE_LINK_WITH_MODAL_COMMAND,\n (payload: LinkPayload) => {\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, payload)\n\n // Now, open the modal\n $updateLinkEditor()\n toggleDrawer()\n\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n )\n }, [editor, $updateLinkEditor, toggleDrawer, drawerSlug])\n\n useEffect(() => {\n const scrollerElem = anchorElem.parentElement\n\n const update = (): void => {\n editor.getEditorState().read(() => {\n void $updateLinkEditor()\n })\n }\n\n window.addEventListener('resize', update)\n\n if (scrollerElem != null) {\n scrollerElem.addEventListener('scroll', update)\n }\n\n return () => {\n window.removeEventListener('resize', update)\n\n if (scrollerElem != null) {\n scrollerElem.removeEventListener('scroll', update)\n }\n }\n }, [anchorElem.parentElement, editor, $updateLinkEditor])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n void $updateLinkEditor()\n })\n }),\n\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n () => {\n void $updateLinkEditor()\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand(\n KEY_ESCAPE_COMMAND,\n () => {\n if (isLink) {\n setNotLink()\n\n return true\n }\n return false\n },\n COMMAND_PRIORITY_HIGH,\n ),\n )\n }, [editor, $updateLinkEditor, isLink, setNotLink])\n\n useEffect(() => {\n editor.getEditorState().read(() => {\n void $updateLinkEditor()\n })\n }, [editor, $updateLinkEditor])\n\n return (\n <React.Fragment>\n <div className=\"link-editor\" ref={editorRef}>\n <div className=\"link-input\">\n {linkUrl && linkUrl.length > 0 ? (\n <a href={linkUrl} rel=\"noopener noreferrer\" target=\"_blank\">\n {linkNode?.__fields.newTab ? <ExternalLinkIcon /> : null}\n {linkLabel != null && linkLabel.length > 0 ? linkLabel : linkUrl}\n </a>\n ) : linkLabel != null && linkLabel.length > 0 ? (\n <>\n {linkNode?.__fields.newTab ? <ExternalLinkIcon /> : null}\n <span className=\"link-input__label-pure\">{linkLabel}</span>\n </>\n ) : null}\n\n {editor.isEditable() && (\n <React.Fragment>\n <button\n aria-label=\"Edit link\"\n className=\"link-edit\"\n onClick={() => {\n toggleDrawer()\n }}\n onMouseDown={(event) => {\n event.preventDefault()\n }}\n tabIndex={0}\n type=\"button\"\n >\n <EditIcon />\n </button>\n {!isAutoLink && (\n <button\n aria-label=\"Remove link\"\n className=\"link-trash\"\n onClick={() => {\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, null)\n }}\n onMouseDown={(event) => {\n event.preventDefault()\n }}\n tabIndex={0}\n type=\"button\"\n >\n <CloseMenuIcon />\n </button>\n )}\n </React.Fragment>\n )}\n </div>\n </div>\n <FieldsDrawer\n className=\"lexical-link-edit-drawer\"\n data={stateData}\n drawerSlug={drawerSlug}\n drawerTitle={t('fields:editLink')}\n featureKey=\"link\"\n handleDrawerSubmit={(fields: FormState, data: Data) => {\n const newLinkPayload = data as { text: string } & LinkFields\n\n const bareLinkFields: LinkFields = {\n ...newLinkPayload,\n }\n delete bareLinkFields.text\n\n // See: https://github.com/facebook/lexical/pull/5536. This updates autolink nodes to link nodes whenever a change was made (which is good!).\n editor.update(() => {\n const selection = $getSelection()\n let linkParent: ElementNode | null = null\n if ($isRangeSelection(selection)) {\n linkParent = getSelectedNode(selection).getParent()\n } else {\n if (selectedNodes.length) {\n linkParent = selectedNodes[0].getParent()\n }\n }\n\n if (linkParent && $isAutoLinkNode(linkParent)) {\n const linkNode = $createLinkNode({\n fields: bareLinkFields,\n })\n linkParent.replace(linkNode, true)\n }\n })\n\n // Needs to happen AFTER a potential auto link => link node conversion, as otherwise, the updated text to display may be lost due to\n // it being applied to the auto link node instead of the link node.\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, {\n fields: bareLinkFields,\n selectedNodes,\n text: newLinkPayload.text,\n })\n }}\n schemaPath={schemaPath}\n schemaPathSuffix=\"fields\"\n />\n </React.Fragment>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/features/link/client/plugins/floatingLinkEditor/index.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAA;AAC3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAGjD,OAAO,cAAc,CAAA;AAErB,eAAO,MAAM,wBAAwB,EAAE,yBAAyB,CAAC,WAAW,CAI3E,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/features/link/client/plugins/floatingLinkEditor/index.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAA;AAC3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAEjD,OAAO,cAAc,CAAA;AAGrB,eAAO,MAAM,wBAAwB,EAAE,yBAAyB,CAAC,WAAW,CAI3E,CAAA"}
@@ -8,7 +8,7 @@ export const FloatingLinkEditorPlugin = props => {
8
8
  const {
9
9
  anchorElem = document.body
10
10
  } = props;
11
- return /*#__PURE__*/createPortal( /*#__PURE__*/_jsx(LinkEditor, {
11
+ return /*#__PURE__*/createPortal(/*#__PURE__*/_jsx(LinkEditor, {
12
12
  anchorElem: anchorElem
13
13
  }), anchorElem);
14
14
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["React","createPortal","LinkEditor","FloatingLinkEditorPlugin","props","anchorElem","document","body","_jsx"],"sources":["../../../../../../src/features/link/client/plugins/floatingLinkEditor/index.tsx"],"sourcesContent":["'use client'\nimport * as React from 'react'\nimport { createPortal } from 'react-dom'\n\nimport type { PluginComponentWithAnchor } from '../../../../typesClient.js'\nimport type { ClientProps } from '../../index.js'\n\nimport { LinkEditor } from './LinkEditor/index.js'\nimport './index.scss'\n\nexport const FloatingLinkEditorPlugin: PluginComponentWithAnchor<ClientProps> = (props) => {\n const { anchorElem = document.body } = props\n\n return createPortal(<LinkEditor anchorElem={anchorElem} />, anchorElem)\n}\n"],"mappings":"AAAA;;;AACA,YAAYA,KAAA,MAAW;AACvB,SAASC,YAAY,QAAQ;AAK7B,SAASC,UAAU,QAAQ;AAG3B,OAAO,MAAMC,wBAAA,GAAoEC,KAAA;EAC/E,MAAM;IAAEC,UAAA,GAAaC,QAAA,CAASC;EAAI,CAAE,GAAGH,KAAA;EAEvC,oBAAOH,YAAA,eAAaO,IAAA,CAACN,UAAA;IAAWG,UAAA,EAAYA;MAAgBA,UAAA;AAC9D","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["React","createPortal","LinkEditor","FloatingLinkEditorPlugin","props","anchorElem","document","body","_jsx"],"sources":["../../../../../../src/features/link/client/plugins/floatingLinkEditor/index.tsx"],"sourcesContent":["'use client'\nimport * as React from 'react'\nimport { createPortal } from 'react-dom'\n\nimport type { PluginComponentWithAnchor } from '../../../../typesClient.js'\nimport type { ClientProps } from '../../index.js'\n\nimport './index.scss'\nimport { LinkEditor } from './LinkEditor/index.js'\n\nexport const FloatingLinkEditorPlugin: PluginComponentWithAnchor<ClientProps> = (props) => {\n const { anchorElem = document.body } = props\n\n return createPortal(<LinkEditor anchorElem={anchorElem} />, anchorElem)\n}\n"],"mappings":"AAAA;;;AACA,YAAYA,KAAA,MAAW;AACvB,SAASC,YAAY,QAAQ;AAM7B,SAASC,UAAU,QAAQ;AAE3B,OAAO,MAAMC,wBAAA,GAAoEC,KAAA;EAC/E,MAAM;IAAEC,UAAA,GAAaC,QAAA,CAASC;EAAI,CAAE,GAAGH,KAAA;EAEvC,oBAAOH,YAAA,cAAaO,IAAA,CAACN,UAAA;IAAWG,UAAA,EAAYA;MAAgBA,UAAA;AAC9D","ignoreList":[]}
@@ -5,7 +5,7 @@ import { LinkNode } from './LinkNode.js';
5
5
  export class AutoLinkNode extends LinkNode {
6
6
  static clone(node) {
7
7
  return new AutoLinkNode({
8
- id: undefined,
8
+ id: '',
9
9
  fields: node.__fields,
10
10
  key: node.__key
11
11
  });
@@ -59,7 +59,7 @@ export function $createAutoLinkNode({
59
59
  fields
60
60
  }) {
61
61
  return $applyNodeReplacement(new AutoLinkNode({
62
- id: undefined,
62
+ id: '',
63
63
  fields
64
64
  }));
65
65
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AutoLinkNode.js","names":["$applyNodeReplacement","$isElementNode","LinkNode","AutoLinkNode","clone","node","id","undefined","fields","__fields","key","__key","getType","importDOM","importJSON","serializedNode","version","doc","value","$createAutoLinkNode","setFormat","format","setIndent","indent","setDirection","direction","exportJSON","serialized","type","children","insertNewAfter","selection","restoreSelection","element","getParentOrThrow","linkNode","append","$isAutoLinkNode"],"sources":["../../../../src/features/link/nodes/AutoLinkNode.ts"],"sourcesContent":["import type { ElementNode, LexicalNode, RangeSelection } from 'lexical'\n\nimport { $applyNodeReplacement, $isElementNode } from 'lexical'\n\nimport type { LinkFields, SerializedAutoLinkNode } from './types.js'\n\nimport { LinkNode } from './LinkNode.js'\n\n// Custom node type to override `canInsertTextAfter` that will\n// allow typing within the link\n\nexport class AutoLinkNode extends LinkNode {\n static clone(node: AutoLinkNode): AutoLinkNode {\n return new AutoLinkNode({ id: undefined, fields: node.__fields, key: node.__key })\n }\n\n static getType(): string {\n return 'autolink'\n }\n\n static importDOM(): null {\n // TODO: Should link node should handle the import over autolink?\n return null\n }\n\n static importJSON(serializedNode: SerializedAutoLinkNode): AutoLinkNode {\n if (\n serializedNode.version === 1 &&\n typeof serializedNode.fields?.doc?.value === 'object' &&\n serializedNode.fields?.doc?.value?.id\n ) {\n serializedNode.fields.doc.value = serializedNode.fields.doc.value.id\n serializedNode.version = 2\n }\n\n const node = $createAutoLinkNode({ fields: serializedNode.fields })\n\n node.setFormat(serializedNode.format)\n node.setIndent(serializedNode.indent)\n node.setDirection(serializedNode.direction)\n return node\n }\n\n // @ts-expect-error\n exportJSON(): SerializedAutoLinkNode {\n const serialized = super.exportJSON()\n return {\n type: 'autolink',\n children: serialized.children,\n direction: serialized.direction,\n fields: serialized.fields,\n format: serialized.format,\n indent: serialized.indent,\n version: 2,\n }\n }\n\n insertNewAfter(selection: RangeSelection, restoreSelection = true): ElementNode | null {\n const element = this.getParentOrThrow().insertNewAfter(selection, restoreSelection)\n if ($isElementNode(element)) {\n const linkNode = $createAutoLinkNode({ fields: this.__fields })\n element.append(linkNode)\n return linkNode\n }\n return null\n }\n}\n\nexport function $createAutoLinkNode({ fields }: { fields: LinkFields }): AutoLinkNode {\n return $applyNodeReplacement(new AutoLinkNode({ id: undefined, fields }))\n}\nexport function $isAutoLinkNode(node: LexicalNode | null | undefined): node is AutoLinkNode {\n return node instanceof AutoLinkNode\n}\n"],"mappings":"AAEA,SAASA,qBAAqB,EAAEC,cAAc,QAAQ;AAItD,SAASC,QAAQ,QAAQ;AAEzB;AACA;AAEA,OAAO,MAAMC,YAAA,SAAqBD,QAAA;EAChC,OAAOE,MAAMC,IAAkB,EAAgB;IAC7C,OAAO,IAAIF,YAAA,CAAa;MAAEG,EAAA,EAAIC,SAAA;MAAWC,MAAA,EAAQH,IAAA,CAAKI,QAAQ;MAAEC,GAAA,EAAKL,IAAA,CAAKM;IAAM;EAClF;EAEA,OAAOC,QAAA,EAAkB;IACvB,OAAO;EACT;EAEA,OAAOC,UAAA,EAAkB;IACvB;IACA,OAAO;EACT;EAEA,OAAOC,WAAWC,cAAsC,EAAgB;IACtE,IACEA,cAAA,CAAeC,OAAO,KAAK,KAC3B,OAAOD,cAAA,CAAeP,MAAM,EAAES,GAAA,EAAKC,KAAA,KAAU,YAC7CH,cAAA,CAAeP,MAAM,EAAES,GAAA,EAAKC,KAAA,EAAOZ,EAAA,EACnC;MACAS,cAAA,CAAeP,MAAM,CAACS,GAAG,CAACC,KAAK,GAAGH,cAAA,CAAeP,MAAM,CAACS,GAAG,CAACC,KAAK,CAACZ,EAAE;MACpES,cAAA,CAAeC,OAAO,GAAG;IAC3B;IAEA,MAAMX,IAAA,GAAOc,mBAAA,CAAoB;MAAEX,MAAA,EAAQO,cAAA,CAAeP;IAAO;IAEjEH,IAAA,CAAKe,SAAS,CAACL,cAAA,CAAeM,MAAM;IACpChB,IAAA,CAAKiB,SAAS,CAACP,cAAA,CAAeQ,MAAM;IACpClB,IAAA,CAAKmB,YAAY,CAACT,cAAA,CAAeU,SAAS;IAC1C,OAAOpB,IAAA;EACT;EAEA;EACAqB,WAAA,EAAqC;IACnC,MAAMC,UAAA,GAAa,KAAK,CAACD,UAAA;IACzB,OAAO;MACLE,IAAA,EAAM;MACNC,QAAA,EAAUF,UAAA,CAAWE,QAAQ;MAC7BJ,SAAA,EAAWE,UAAA,CAAWF,SAAS;MAC/BjB,MAAA,EAAQmB,UAAA,CAAWnB,MAAM;MACzBa,MAAA,EAAQM,UAAA,CAAWN,MAAM;MACzBE,MAAA,EAAQI,UAAA,CAAWJ,MAAM;MACzBP,OAAA,EAAS;IACX;EACF;EAEAc,eAAeC,SAAyB,EAAEC,gBAAA,GAAmB,IAAI,EAAsB;IACrF,MAAMC,OAAA,GAAU,IAAI,CAACC,gBAAgB,GAAGJ,cAAc,CAACC,SAAA,EAAWC,gBAAA;IAClE,IAAI/B,cAAA,CAAegC,OAAA,GAAU;MAC3B,MAAME,QAAA,GAAWhB,mBAAA,CAAoB;QAAEX,MAAA,EAAQ,IAAI,CAACC;MAAS;MAC7DwB,OAAA,CAAQG,MAAM,CAACD,QAAA;MACf,OAAOA,QAAA;IACT;IACA,OAAO;EACT;AACF;AAEA,OAAO,SAAShB,oBAAoB;EAAEX;AAAM,CAA0B;EACpE,OAAOR,qBAAA,CAAsB,IAAIG,YAAA,CAAa;IAAEG,EAAA,EAAIC,SAAA;IAAWC;EAAO;AACxE;AACA,OAAO,SAAS6B,gBAAgBhC,IAAoC;EAClE,OAAOA,IAAA,YAAgBF,YAAA;AACzB","ignoreList":[]}
1
+ {"version":3,"file":"AutoLinkNode.js","names":["$applyNodeReplacement","$isElementNode","LinkNode","AutoLinkNode","clone","node","id","fields","__fields","key","__key","getType","importDOM","importJSON","serializedNode","version","doc","value","$createAutoLinkNode","setFormat","format","setIndent","indent","setDirection","direction","exportJSON","serialized","type","children","insertNewAfter","selection","restoreSelection","element","getParentOrThrow","linkNode","append","$isAutoLinkNode"],"sources":["../../../../src/features/link/nodes/AutoLinkNode.ts"],"sourcesContent":["import type { ElementNode, LexicalNode, RangeSelection } from 'lexical'\n\nimport { $applyNodeReplacement, $isElementNode } from 'lexical'\n\nimport type { LinkFields, SerializedAutoLinkNode } from './types.js'\n\nimport { LinkNode } from './LinkNode.js'\n\n// Custom node type to override `canInsertTextAfter` that will\n// allow typing within the link\n\nexport class AutoLinkNode extends LinkNode {\n static clone(node: AutoLinkNode): AutoLinkNode {\n return new AutoLinkNode({ id: '', fields: node.__fields, key: node.__key })\n }\n\n static getType(): string {\n return 'autolink'\n }\n\n static importDOM(): null {\n // TODO: Should link node should handle the import over autolink?\n return null\n }\n\n static importJSON(serializedNode: SerializedAutoLinkNode): AutoLinkNode {\n if (\n serializedNode.version === 1 &&\n typeof serializedNode.fields?.doc?.value === 'object' &&\n serializedNode.fields?.doc?.value?.id\n ) {\n serializedNode.fields.doc.value = serializedNode.fields.doc.value.id\n serializedNode.version = 2\n }\n\n const node = $createAutoLinkNode({ fields: serializedNode.fields })\n\n node.setFormat(serializedNode.format)\n node.setIndent(serializedNode.indent)\n node.setDirection(serializedNode.direction)\n return node\n }\n\n // @ts-expect-error\n exportJSON(): SerializedAutoLinkNode {\n const serialized = super.exportJSON()\n return {\n type: 'autolink',\n children: serialized.children,\n direction: serialized.direction,\n fields: serialized.fields,\n format: serialized.format,\n indent: serialized.indent,\n version: 2,\n }\n }\n\n insertNewAfter(selection: RangeSelection, restoreSelection = true): ElementNode | null {\n const element = this.getParentOrThrow().insertNewAfter(selection, restoreSelection)\n if ($isElementNode(element)) {\n const linkNode = $createAutoLinkNode({ fields: this.__fields })\n element.append(linkNode)\n return linkNode\n }\n return null\n }\n}\n\nexport function $createAutoLinkNode({ fields }: { fields: LinkFields }): AutoLinkNode {\n return $applyNodeReplacement(new AutoLinkNode({ id: '', fields }))\n}\nexport function $isAutoLinkNode(node: LexicalNode | null | undefined): node is AutoLinkNode {\n return node instanceof AutoLinkNode\n}\n"],"mappings":"AAEA,SAASA,qBAAqB,EAAEC,cAAc,QAAQ;AAItD,SAASC,QAAQ,QAAQ;AAEzB;AACA;AAEA,OAAO,MAAMC,YAAA,SAAqBD,QAAA;EAChC,OAAOE,MAAMC,IAAkB,EAAgB;IAC7C,OAAO,IAAIF,YAAA,CAAa;MAAEG,EAAA,EAAI;MAAIC,MAAA,EAAQF,IAAA,CAAKG,QAAQ;MAAEC,GAAA,EAAKJ,IAAA,CAAKK;IAAM;EAC3E;EAEA,OAAOC,QAAA,EAAkB;IACvB,OAAO;EACT;EAEA,OAAOC,UAAA,EAAkB;IACvB;IACA,OAAO;EACT;EAEA,OAAOC,WAAWC,cAAsC,EAAgB;IACtE,IACEA,cAAA,CAAeC,OAAO,KAAK,KAC3B,OAAOD,cAAA,CAAeP,MAAM,EAAES,GAAA,EAAKC,KAAA,KAAU,YAC7CH,cAAA,CAAeP,MAAM,EAAES,GAAA,EAAKC,KAAA,EAAOX,EAAA,EACnC;MACAQ,cAAA,CAAeP,MAAM,CAACS,GAAG,CAACC,KAAK,GAAGH,cAAA,CAAeP,MAAM,CAACS,GAAG,CAACC,KAAK,CAACX,EAAE;MACpEQ,cAAA,CAAeC,OAAO,GAAG;IAC3B;IAEA,MAAMV,IAAA,GAAOa,mBAAA,CAAoB;MAAEX,MAAA,EAAQO,cAAA,CAAeP;IAAO;IAEjEF,IAAA,CAAKc,SAAS,CAACL,cAAA,CAAeM,MAAM;IACpCf,IAAA,CAAKgB,SAAS,CAACP,cAAA,CAAeQ,MAAM;IACpCjB,IAAA,CAAKkB,YAAY,CAACT,cAAA,CAAeU,SAAS;IAC1C,OAAOnB,IAAA;EACT;EAEA;EACAoB,WAAA,EAAqC;IACnC,MAAMC,UAAA,GAAa,KAAK,CAACD,UAAA;IACzB,OAAO;MACLE,IAAA,EAAM;MACNC,QAAA,EAAUF,UAAA,CAAWE,QAAQ;MAC7BJ,SAAA,EAAWE,UAAA,CAAWF,SAAS;MAC/BjB,MAAA,EAAQmB,UAAA,CAAWnB,MAAM;MACzBa,MAAA,EAAQM,UAAA,CAAWN,MAAM;MACzBE,MAAA,EAAQI,UAAA,CAAWJ,MAAM;MACzBP,OAAA,EAAS;IACX;EACF;EAEAc,eAAeC,SAAyB,EAAEC,gBAAA,GAAmB,IAAI,EAAsB;IACrF,MAAMC,OAAA,GAAU,IAAI,CAACC,gBAAgB,GAAGJ,cAAc,CAACC,SAAA,EAAWC,gBAAA;IAClE,IAAI9B,cAAA,CAAe+B,OAAA,GAAU;MAC3B,MAAME,QAAA,GAAWhB,mBAAA,CAAoB;QAAEX,MAAA,EAAQ,IAAI,CAACC;MAAS;MAC7DwB,OAAA,CAAQG,MAAM,CAACD,QAAA;MACf,OAAOA,QAAA;IACT;IACA,OAAO;EACT;AACF;AAEA,OAAO,SAAShB,oBAAoB;EAAEX;AAAM,CAA0B;EACpE,OAAOP,qBAAA,CAAsB,IAAIG,YAAA,CAAa;IAAEG,EAAA,EAAI;IAAIC;EAAO;AACjE;AACA,OAAO,SAAS6B,gBAAgB/B,IAAoC;EAClE,OAAOA,IAAA,YAAgBF,YAAA;AACzB","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"LinkNode.d.ts","sourceRoot":"","sources":["../../../../src/features/link/nodes/LinkNode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,gBAAgB,EAEhB,YAAY,EACZ,WAAW,IAAI,eAAe,EAC9B,cAAc,EACd,WAAW,EACX,OAAO,EACP,cAAc,EACf,MAAM,SAAS,CAAA;AAIhB,OAAO,EAML,WAAW,EAEZ,MAAM,SAAS,CAAA;AAEhB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAA;AAChF,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAIhE,oBAAoB;AACpB,qBAAa,QAAS,SAAQ,WAAW;IACvC,QAAQ,EAAE,UAAU,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;gBAEA,EACV,EAAE,EACF,MAKC,EACD,GAAG,GACJ,EAAE;QACD,MAAM,EAAE,UAAU,CAAA;QAClB,EAAE,EAAE,MAAM,CAAA;QACV,GAAG,CAAC,EAAE,OAAO,CAAA;KACd;IAMD,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ;IAQtC,MAAM,CAAC,OAAO,IAAI,MAAM;IAIxB,MAAM,CAAC,SAAS,IAAI,gBAAgB,GAAG,IAAI;IAS3C,MAAM,CAAC,UAAU,CAAC,cAAc,EAAE,kBAAkB,GAAG,QAAQ;IAyB/D,UAAU,IAAI,KAAK;IAInB,kBAAkB,IAAI,KAAK;IAI3B,mBAAmB,IAAI,KAAK;IAI5B,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,iBAAiB;IAiBlD,UAAU,IAAI,kBAAkB;IAchC,gBAAgB,CACd,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,aAAa,EACxB,WAAW,EAAE,OAAO,GAAG,MAAM,GAC5B,OAAO;IAeV,SAAS,IAAI,UAAU;IAIvB,KAAK,IAAI,MAAM;IAIf,cAAc,CAAC,SAAS,EAAE,cAAc,EAAE,gBAAgB,UAAO,GAAG,eAAe,GAAG,IAAI;IAU1F,QAAQ,IAAI,IAAI;IAIhB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAahC,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAKnC,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO;CA8BxF;AAqBD,wBAAgB,eAAe,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,QAAQ,CAO7F;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,IAAI,QAAQ,CAElF;AAED,eAAO,MAAM,mBAAmB,EAAE,cAAc,CAAC,WAAW,GAAG,IAAI,CAC7B,CAAA;AAEtC,wBAAgB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CA6GtD"}
1
+ {"version":3,"file":"LinkNode.d.ts","sourceRoot":"","sources":["../../../../src/features/link/nodes/LinkNode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,gBAAgB,EAEhB,YAAY,EACZ,WAAW,IAAI,eAAe,EAC9B,cAAc,EACd,WAAW,EACX,OAAO,EACP,cAAc,EACf,MAAM,SAAS,CAAA;AAIhB,OAAO,EAOL,WAAW,EACZ,MAAM,SAAS,CAAA;AAEhB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAA;AAChF,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAIhE,oBAAoB;AACpB,qBAAa,QAAS,SAAQ,WAAW;IACvC,QAAQ,EAAE,UAAU,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;gBAEA,EACV,EAAE,EACF,MAKC,EACD,GAAG,GACJ,EAAE;QACD,MAAM,EAAE,UAAU,CAAA;QAClB,EAAE,EAAE,MAAM,CAAA;QACV,GAAG,CAAC,EAAE,OAAO,CAAA;KACd;IAMD,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ;IAQtC,MAAM,CAAC,OAAO,IAAI,MAAM;IAIxB,MAAM,CAAC,SAAS,IAAI,gBAAgB,GAAG,IAAI;IAS3C,MAAM,CAAC,UAAU,CAAC,cAAc,EAAE,kBAAkB,GAAG,QAAQ;IAyB/D,UAAU,IAAI,KAAK;IAInB,kBAAkB,IAAI,KAAK;IAI3B,mBAAmB,IAAI,KAAK;IAI5B,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,iBAAiB;IAiBlD,UAAU,IAAI,kBAAkB;IAchC,gBAAgB,CACd,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,aAAa,EACxB,WAAW,EAAE,OAAO,GAAG,MAAM,GAC5B,OAAO;IAeV,SAAS,IAAI,UAAU;IAIvB,KAAK,IAAI,MAAM;IAIf,cAAc,CAAC,SAAS,EAAE,cAAc,EAAE,gBAAgB,UAAO,GAAG,eAAe,GAAG,IAAI;IAU1F,QAAQ,IAAI,IAAI;IAIhB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAahC,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAKnC,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO;CA8BxF;AAqBD,wBAAgB,eAAe,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,QAAQ,CAO7F;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,IAAI,QAAQ,CAElF;AAED,eAAO,MAAM,mBAAmB,EAAE,cAAc,CAAC,WAAW,GAAG,IAAI,CAC7B,CAAA;AAEtC,wBAAgB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CA6GtD"}
@@ -1,6 +1,6 @@
1
1
  import { addClassNamesToElement, isHTMLAnchorElement } from '@lexical/utils';
2
2
  import ObjectID from 'bson-objectid';
3
- import { $applyNodeReplacement, $createTextNode, $getSelection, $isElementNode, $isRangeSelection, ElementNode, createCommand } from 'lexical';
3
+ import { $applyNodeReplacement, $createTextNode, $getSelection, $isElementNode, $isRangeSelection, createCommand, ElementNode } from 'lexical';
4
4
  const SUPPORTED_URL_PROTOCOLS = new Set(['http:', 'https:', 'mailto:', 'sms:', 'tel:']);
5
5
  /** @noInheritDoc */
6
6
  export class LinkNode extends ElementNode {
@@ -12,7 +12,7 @@ export class LinkNode extends ElementNode {
12
12
  doc: null,
13
13
  linkType: 'custom',
14
14
  newTab: false,
15
- url: undefined
15
+ url: ''
16
16
  },
17
17
  key
18
18
  }) {
@@ -198,13 +198,13 @@ export function $isLinkNode(node) {
198
198
  export const TOGGLE_LINK_COMMAND = createCommand('TOGGLE_LINK_COMMAND');
199
199
  export function $toggleLink(payload) {
200
200
  const selection = $getSelection();
201
- if (!$isRangeSelection(selection) && !payload.selectedNodes.length) {
201
+ if (!$isRangeSelection(selection) && !payload.selectedNodes?.length) {
202
202
  return;
203
203
  }
204
204
  const nodes = $isRangeSelection(selection) ? selection.extract() : payload.selectedNodes;
205
205
  if (payload === null) {
206
206
  // Remove LinkNodes
207
- nodes.forEach(node => {
207
+ nodes?.forEach(node => {
208
208
  const parent = node.getParent();
209
209
  if ($isLinkNode(parent)) {
210
210
  const children = parent.getChildren();
@@ -216,7 +216,7 @@ export function $toggleLink(payload) {
216
216
  });
217
217
  } else {
218
218
  // Add or merge LinkNodes
219
- if (nodes.length === 1) {
219
+ if (nodes?.length === 1) {
220
220
  const firstNode = nodes[0];
221
221
  // if the first node is a LinkNode or if its
222
222
  // parent is a LinkNode, we update the URL, target and rel.
@@ -237,7 +237,7 @@ export function $toggleLink(payload) {
237
237
  }
238
238
  let prevParent = null;
239
239
  let linkNode = null;
240
- nodes.forEach(node => {
240
+ nodes?.forEach(node => {
241
241
  const parent = node.getParent();
242
242
  if (parent === linkNode || parent === null || $isElementNode(node) && !node.isInline()) {
243
243
  return;
@@ -295,7 +295,12 @@ function $getLinkAncestor(node) {
295
295
  }
296
296
  function $getAncestor(node, predicate) {
297
297
  let parent = node;
298
- while (parent !== null && (parent = parent.getParent()) !== null && !predicate(parent));
298
+ while (parent !== null) {
299
+ parent = parent.getParent();
300
+ if (parent === null || predicate(parent)) {
301
+ break;
302
+ }
303
+ }
299
304
  return parent;
300
305
  }
301
306
  function manageRel(input, action, value) {
@@ -1 +1 @@
1
- {"version":3,"file":"LinkNode.js","names":["addClassNamesToElement","isHTMLAnchorElement","ObjectID","$applyNodeReplacement","$createTextNode","$getSelection","$isElementNode","$isRangeSelection","ElementNode","createCommand","SUPPORTED_URL_PROTOCOLS","Set","LinkNode","__fields","__id","constructor","id","fields","doc","linkType","newTab","url","undefined","key","clone","node","__key","getType","importDOM","a","conversion","$convertAnchorElement","priority","importJSON","serializedNode","version","value","default","toHexString","$createLinkNode","setFormat","format","setIndent","indent","setDirection","direction","canBeEmpty","canInsertTextAfter","canInsertTextBefore","createDOM","config","element","document","createElement","href","sanitizeUrl","target","rel","manageRel","theme","link","exportJSON","returnObject","type","getFields","getID","extractWithChild","child","selection","destination","anchorNode","anchor","getNode","focusNode","focus","isParentOf","getTextContent","length","getLatest","insertNewAfter","restoreSelection","getParentOrThrow","linkNode","append","isInline","parsedUrl","URL","has","protocol","e","setFields","writable","getWritable","updateDOM","prevNode","removeAttribute","domNode","content","textContent","getAttribute","$isLinkNode","TOGGLE_LINK_COMMAND","$toggleLink","payload","selectedNodes","nodes","extract","forEach","parent","getParent","children","getChildren","i","insertBefore","remove","firstNode","$getLinkAncestor","text","getLastChild","prevParent","is","getPreviousSibling","insertAfter","$getAncestor","ancestor","predicate","input","action","result","mutableInput","includes","re","RegExp","replace","trim"],"sources":["../../../../src/features/link/nodes/LinkNode.ts"],"sourcesContent":["import type {\n BaseSelection,\n DOMConversionMap,\n DOMConversionOutput,\n EditorConfig,\n ElementNode as ElementNodeType,\n LexicalCommand,\n LexicalNode,\n NodeKey,\n RangeSelection,\n} from 'lexical'\n\nimport { addClassNamesToElement, isHTMLAnchorElement } from '@lexical/utils'\nimport ObjectID from 'bson-objectid'\nimport {\n $applyNodeReplacement,\n $createTextNode,\n $getSelection,\n $isElementNode,\n $isRangeSelection,\n ElementNode,\n createCommand,\n} from 'lexical'\n\nimport type { LinkPayload } from '../client/plugins/floatingLinkEditor/types.js'\nimport type { LinkFields, SerializedLinkNode } from './types.js'\n\nconst SUPPORTED_URL_PROTOCOLS = new Set(['http:', 'https:', 'mailto:', 'sms:', 'tel:'])\n\n/** @noInheritDoc */\nexport class LinkNode extends ElementNode {\n __fields: LinkFields\n __id: string\n\n constructor({\n id,\n fields = {\n doc: null,\n linkType: 'custom',\n newTab: false,\n url: undefined,\n },\n key,\n }: {\n fields: LinkFields\n id: string\n key?: NodeKey\n }) {\n super(key)\n this.__fields = fields\n this.__id = id\n }\n\n static clone(node: LinkNode): LinkNode {\n return new LinkNode({\n id: node.__id,\n fields: node.__fields,\n key: node.__key,\n })\n }\n\n static getType(): string {\n return 'link'\n }\n\n static importDOM(): DOMConversionMap | null {\n return {\n a: (node: Node) => ({\n conversion: $convertAnchorElement,\n priority: 1,\n }),\n }\n }\n\n static importJSON(serializedNode: SerializedLinkNode): LinkNode {\n if (\n serializedNode.version === 1 &&\n typeof serializedNode.fields?.doc?.value === 'object' &&\n serializedNode.fields?.doc?.value?.id\n ) {\n serializedNode.fields.doc.value = serializedNode.fields.doc.value.id\n serializedNode.version = 2\n }\n\n if (serializedNode.version === 2 && !serializedNode.id) {\n serializedNode.id = new ObjectID.default().toHexString()\n serializedNode.version = 3\n }\n\n const node = $createLinkNode({\n id: serializedNode.id,\n fields: serializedNode.fields,\n })\n node.setFormat(serializedNode.format)\n node.setIndent(serializedNode.indent)\n node.setDirection(serializedNode.direction)\n return node\n }\n\n canBeEmpty(): false {\n return false\n }\n\n canInsertTextAfter(): false {\n return false\n }\n\n canInsertTextBefore(): false {\n return false\n }\n\n createDOM(config: EditorConfig): HTMLAnchorElement {\n const element = document.createElement('a')\n if (this.__fields?.linkType === 'custom') {\n element.href = this.sanitizeUrl(this.__fields.url ?? '')\n }\n if (this.__fields?.newTab ?? false) {\n element.target = '_blank'\n }\n\n if (this.__fields?.newTab === true && this.__fields?.linkType === 'custom') {\n element.rel = manageRel(element.rel, 'add', 'noopener')\n }\n\n addClassNamesToElement(element, config.theme.link)\n return element\n }\n\n exportJSON(): SerializedLinkNode {\n const returnObject: SerializedLinkNode = {\n ...super.exportJSON(),\n type: 'link',\n fields: this.getFields(),\n version: 3,\n }\n const id = this.getID()\n if (id) {\n returnObject.id = id\n }\n return returnObject\n }\n\n extractWithChild(\n child: LexicalNode,\n selection: BaseSelection,\n destination: 'clone' | 'html',\n ): boolean {\n if (!$isRangeSelection(selection)) {\n return false\n }\n\n const anchorNode = selection.anchor.getNode()\n const focusNode = selection.focus.getNode()\n\n return (\n this.isParentOf(anchorNode) &&\n this.isParentOf(focusNode) &&\n selection.getTextContent().length > 0\n )\n }\n\n getFields(): LinkFields {\n return this.getLatest().__fields\n }\n\n getID(): string {\n return this.getLatest().__id\n }\n\n insertNewAfter(selection: RangeSelection, restoreSelection = true): ElementNodeType | null {\n const element = this.getParentOrThrow().insertNewAfter(selection, restoreSelection)\n if ($isElementNode(element)) {\n const linkNode = $createLinkNode({ fields: this.__fields })\n element.append(linkNode)\n return linkNode\n }\n return null\n }\n\n isInline(): true {\n return true\n }\n\n sanitizeUrl(url: string): string {\n try {\n const parsedUrl = new URL(url)\n\n if (!SUPPORTED_URL_PROTOCOLS.has(parsedUrl.protocol)) {\n return 'about:blank'\n }\n } catch (e) {\n return 'https://'\n }\n return url\n }\n\n setFields(fields: LinkFields): void {\n const writable = this.getWritable()\n writable.__fields = fields\n }\n\n updateDOM(prevNode: LinkNode, anchor: HTMLAnchorElement, config: EditorConfig): boolean {\n const url = this.__fields?.url\n const newTab = this.__fields?.newTab\n if (url != null && url !== prevNode.__fields?.url && this.__fields?.linkType === 'custom') {\n anchor.href = url\n }\n if (this.__fields?.linkType === 'internal' && prevNode.__fields?.linkType === 'custom') {\n anchor.removeAttribute('href')\n }\n\n // TODO: not 100% sure why we're settign rel to '' - revisit\n // Start rel config here, then check newTab below\n if (anchor.rel == null) {\n anchor.rel = ''\n }\n\n if (newTab !== prevNode.__fields?.newTab) {\n if (newTab ?? false) {\n anchor.target = '_blank'\n if (this.__fields?.linkType === 'custom') {\n anchor.rel = manageRel(anchor.rel, 'add', 'noopener')\n }\n } else {\n anchor.removeAttribute('target')\n anchor.rel = manageRel(anchor.rel, 'remove', 'noopener')\n }\n }\n\n return false\n }\n}\n\nfunction $convertAnchorElement(domNode: Node): DOMConversionOutput {\n let node: LinkNode | null = null\n if (isHTMLAnchorElement(domNode)) {\n const content = domNode.textContent\n if (content !== null && content !== '') {\n node = $createLinkNode({\n id: new ObjectID.default().toHexString(),\n fields: {\n doc: null,\n linkType: 'custom',\n newTab: domNode.getAttribute('target') === '_blank',\n url: domNode.getAttribute('href') ?? '',\n },\n })\n }\n }\n return { node }\n}\n\nexport function $createLinkNode({ id, fields }: { fields: LinkFields; id?: string }): LinkNode {\n return $applyNodeReplacement(\n new LinkNode({\n id: id ?? new ObjectID.default().toHexString(),\n fields,\n }),\n )\n}\n\nexport function $isLinkNode(node: LexicalNode | null | undefined): node is LinkNode {\n return node instanceof LinkNode\n}\n\nexport const TOGGLE_LINK_COMMAND: LexicalCommand<LinkPayload | null> =\n createCommand('TOGGLE_LINK_COMMAND')\n\nexport function $toggleLink(payload: LinkPayload): void {\n const selection = $getSelection()\n\n if (!$isRangeSelection(selection) && !payload.selectedNodes.length) {\n return\n }\n const nodes = $isRangeSelection(selection) ? selection.extract() : payload.selectedNodes\n\n if (payload === null) {\n // Remove LinkNodes\n nodes.forEach((node) => {\n const parent = node.getParent()\n\n if ($isLinkNode(parent)) {\n const children = parent.getChildren()\n\n for (let i = 0; i < children.length; i += 1) {\n parent.insertBefore(children[i])\n }\n\n parent.remove()\n }\n })\n } else {\n // Add or merge LinkNodes\n if (nodes.length === 1) {\n const firstNode = nodes[0]\n // if the first node is a LinkNode or if its\n // parent is a LinkNode, we update the URL, target and rel.\n const linkNode: LinkNode | null = $isLinkNode(firstNode)\n ? firstNode\n : $getLinkAncestor(firstNode)\n if (linkNode !== null) {\n linkNode.setFields(payload.fields)\n\n if (payload.text != null && payload.text !== linkNode.getTextContent()) {\n // remove all children and add child with new textcontent:\n linkNode.append($createTextNode(payload.text))\n linkNode.getChildren().forEach((child) => {\n if (child !== linkNode.getLastChild()) {\n child.remove()\n }\n })\n }\n return\n }\n }\n\n let prevParent: ElementNodeType | LinkNode | null = null\n let linkNode: LinkNode | null = null\n\n nodes.forEach((node) => {\n const parent = node.getParent()\n\n if (parent === linkNode || parent === null || ($isElementNode(node) && !node.isInline())) {\n return\n }\n\n if ($isLinkNode(parent)) {\n linkNode = parent\n parent.setFields(payload.fields)\n if (payload.text != null && payload.text !== parent.getTextContent()) {\n // remove all children and add child with new textcontent:\n parent.append($createTextNode(payload.text))\n parent.getChildren().forEach((child) => {\n if (child !== parent.getLastChild()) {\n child.remove()\n }\n })\n }\n return\n }\n\n if (!parent.is(prevParent)) {\n prevParent = parent\n linkNode = $createLinkNode({ fields: payload.fields })\n\n if ($isLinkNode(parent)) {\n if (node.getPreviousSibling() === null) {\n parent.insertBefore(linkNode)\n } else {\n parent.insertAfter(linkNode)\n }\n } else {\n node.insertBefore(linkNode)\n }\n }\n\n if ($isLinkNode(node)) {\n if (node.is(linkNode)) {\n return\n }\n if (linkNode !== null) {\n const children = node.getChildren()\n\n for (let i = 0; i < children.length; i += 1) {\n linkNode.append(children[i])\n }\n }\n\n node.remove()\n return\n }\n\n if (linkNode !== null) {\n linkNode.append(node)\n }\n })\n }\n}\n\nfunction $getLinkAncestor(node: LexicalNode): LinkNode | null {\n return $getAncestor(node, (ancestor) => $isLinkNode(ancestor)) as LinkNode\n}\n\nfunction $getAncestor(\n node: LexicalNode,\n predicate: (ancestor: LexicalNode) => boolean,\n): LexicalNode | null {\n let parent: LexicalNode | null = node\n while (parent !== null && (parent = parent.getParent()) !== null && !predicate(parent));\n return parent\n}\n\nfunction manageRel(input: string, action: 'add' | 'remove', value: string): string {\n let result: string\n let mutableInput = `${input}`\n if (action === 'add') {\n // if we somehow got out of sync - clean up\n if (mutableInput.includes(value)) {\n const re = new RegExp(value, 'g')\n mutableInput = mutableInput.replace(re, '').trim()\n }\n mutableInput = mutableInput.trim()\n result = mutableInput.length === 0 ? `${value}` : `${mutableInput} ${value}`\n } else {\n const re = new RegExp(value, 'g')\n result = mutableInput.replace(re, '').trim()\n }\n return result\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"LinkNode.js","names":["addClassNamesToElement","isHTMLAnchorElement","ObjectID","$applyNodeReplacement","$createTextNode","$getSelection","$isElementNode","$isRangeSelection","createCommand","ElementNode","SUPPORTED_URL_PROTOCOLS","Set","LinkNode","__fields","__id","constructor","id","fields","doc","linkType","newTab","url","key","clone","node","__key","getType","importDOM","a","conversion","$convertAnchorElement","priority","importJSON","serializedNode","version","value","default","toHexString","$createLinkNode","setFormat","format","setIndent","indent","setDirection","direction","canBeEmpty","canInsertTextAfter","canInsertTextBefore","createDOM","config","element","document","createElement","href","sanitizeUrl","target","rel","manageRel","theme","link","exportJSON","returnObject","type","getFields","getID","extractWithChild","child","selection","destination","anchorNode","anchor","getNode","focusNode","focus","isParentOf","getTextContent","length","getLatest","insertNewAfter","restoreSelection","getParentOrThrow","linkNode","append","isInline","parsedUrl","URL","has","protocol","e","setFields","writable","getWritable","updateDOM","prevNode","removeAttribute","domNode","content","textContent","getAttribute","$isLinkNode","TOGGLE_LINK_COMMAND","$toggleLink","payload","selectedNodes","nodes","extract","forEach","parent","getParent","children","getChildren","i","insertBefore","remove","firstNode","$getLinkAncestor","text","getLastChild","prevParent","is","getPreviousSibling","insertAfter","$getAncestor","ancestor","predicate","input","action","result","mutableInput","includes","re","RegExp","replace","trim"],"sources":["../../../../src/features/link/nodes/LinkNode.ts"],"sourcesContent":["import type {\n BaseSelection,\n DOMConversionMap,\n DOMConversionOutput,\n EditorConfig,\n ElementNode as ElementNodeType,\n LexicalCommand,\n LexicalNode,\n NodeKey,\n RangeSelection,\n} from 'lexical'\n\nimport { addClassNamesToElement, isHTMLAnchorElement } from '@lexical/utils'\nimport ObjectID from 'bson-objectid'\nimport {\n $applyNodeReplacement,\n $createTextNode,\n $getSelection,\n $isElementNode,\n $isRangeSelection,\n createCommand,\n ElementNode,\n} from 'lexical'\n\nimport type { LinkPayload } from '../client/plugins/floatingLinkEditor/types.js'\nimport type { LinkFields, SerializedLinkNode } from './types.js'\n\nconst SUPPORTED_URL_PROTOCOLS = new Set(['http:', 'https:', 'mailto:', 'sms:', 'tel:'])\n\n/** @noInheritDoc */\nexport class LinkNode extends ElementNode {\n __fields: LinkFields\n __id: string\n\n constructor({\n id,\n fields = {\n doc: null,\n linkType: 'custom',\n newTab: false,\n url: '',\n },\n key,\n }: {\n fields: LinkFields\n id: string\n key?: NodeKey\n }) {\n super(key)\n this.__fields = fields\n this.__id = id\n }\n\n static clone(node: LinkNode): LinkNode {\n return new LinkNode({\n id: node.__id,\n fields: node.__fields,\n key: node.__key,\n })\n }\n\n static getType(): string {\n return 'link'\n }\n\n static importDOM(): DOMConversionMap | null {\n return {\n a: (node: Node) => ({\n conversion: $convertAnchorElement,\n priority: 1,\n }),\n }\n }\n\n static importJSON(serializedNode: SerializedLinkNode): LinkNode {\n if (\n serializedNode.version === 1 &&\n typeof serializedNode.fields?.doc?.value === 'object' &&\n serializedNode.fields?.doc?.value?.id\n ) {\n serializedNode.fields.doc.value = serializedNode.fields.doc.value.id\n serializedNode.version = 2\n }\n\n if (serializedNode.version === 2 && !serializedNode.id) {\n serializedNode.id = new ObjectID.default().toHexString()\n serializedNode.version = 3\n }\n\n const node = $createLinkNode({\n id: serializedNode.id,\n fields: serializedNode.fields,\n })\n node.setFormat(serializedNode.format)\n node.setIndent(serializedNode.indent)\n node.setDirection(serializedNode.direction)\n return node\n }\n\n canBeEmpty(): false {\n return false\n }\n\n canInsertTextAfter(): false {\n return false\n }\n\n canInsertTextBefore(): false {\n return false\n }\n\n createDOM(config: EditorConfig): HTMLAnchorElement {\n const element = document.createElement('a')\n if (this.__fields?.linkType === 'custom') {\n element.href = this.sanitizeUrl(this.__fields.url ?? '')\n }\n if (this.__fields?.newTab ?? false) {\n element.target = '_blank'\n }\n\n if (this.__fields?.newTab === true && this.__fields?.linkType === 'custom') {\n element.rel = manageRel(element.rel, 'add', 'noopener')\n }\n\n addClassNamesToElement(element, config.theme.link)\n return element\n }\n\n exportJSON(): SerializedLinkNode {\n const returnObject: SerializedLinkNode = {\n ...super.exportJSON(),\n type: 'link',\n fields: this.getFields(),\n version: 3,\n }\n const id = this.getID()\n if (id) {\n returnObject.id = id\n }\n return returnObject\n }\n\n extractWithChild(\n child: LexicalNode,\n selection: BaseSelection,\n destination: 'clone' | 'html',\n ): boolean {\n if (!$isRangeSelection(selection)) {\n return false\n }\n\n const anchorNode = selection.anchor.getNode()\n const focusNode = selection.focus.getNode()\n\n return (\n this.isParentOf(anchorNode) &&\n this.isParentOf(focusNode) &&\n selection.getTextContent().length > 0\n )\n }\n\n getFields(): LinkFields {\n return this.getLatest().__fields\n }\n\n getID(): string {\n return this.getLatest().__id\n }\n\n insertNewAfter(selection: RangeSelection, restoreSelection = true): ElementNodeType | null {\n const element = this.getParentOrThrow().insertNewAfter(selection, restoreSelection)\n if ($isElementNode(element)) {\n const linkNode = $createLinkNode({ fields: this.__fields })\n element.append(linkNode)\n return linkNode\n }\n return null\n }\n\n isInline(): true {\n return true\n }\n\n sanitizeUrl(url: string): string {\n try {\n const parsedUrl = new URL(url)\n\n if (!SUPPORTED_URL_PROTOCOLS.has(parsedUrl.protocol)) {\n return 'about:blank'\n }\n } catch (e) {\n return 'https://'\n }\n return url\n }\n\n setFields(fields: LinkFields): void {\n const writable = this.getWritable()\n writable.__fields = fields\n }\n\n updateDOM(prevNode: LinkNode, anchor: HTMLAnchorElement, config: EditorConfig): boolean {\n const url = this.__fields?.url\n const newTab = this.__fields?.newTab\n if (url != null && url !== prevNode.__fields?.url && this.__fields?.linkType === 'custom') {\n anchor.href = url\n }\n if (this.__fields?.linkType === 'internal' && prevNode.__fields?.linkType === 'custom') {\n anchor.removeAttribute('href')\n }\n\n // TODO: not 100% sure why we're settign rel to '' - revisit\n // Start rel config here, then check newTab below\n if (anchor.rel == null) {\n anchor.rel = ''\n }\n\n if (newTab !== prevNode.__fields?.newTab) {\n if (newTab ?? false) {\n anchor.target = '_blank'\n if (this.__fields?.linkType === 'custom') {\n anchor.rel = manageRel(anchor.rel, 'add', 'noopener')\n }\n } else {\n anchor.removeAttribute('target')\n anchor.rel = manageRel(anchor.rel, 'remove', 'noopener')\n }\n }\n\n return false\n }\n}\n\nfunction $convertAnchorElement(domNode: Node): DOMConversionOutput {\n let node: LinkNode | null = null\n if (isHTMLAnchorElement(domNode)) {\n const content = domNode.textContent\n if (content !== null && content !== '') {\n node = $createLinkNode({\n id: new ObjectID.default().toHexString(),\n fields: {\n doc: null,\n linkType: 'custom',\n newTab: domNode.getAttribute('target') === '_blank',\n url: domNode.getAttribute('href') ?? '',\n },\n })\n }\n }\n return { node }\n}\n\nexport function $createLinkNode({ id, fields }: { fields: LinkFields; id?: string }): LinkNode {\n return $applyNodeReplacement(\n new LinkNode({\n id: id ?? new ObjectID.default().toHexString(),\n fields,\n }),\n )\n}\n\nexport function $isLinkNode(node: LexicalNode | null | undefined): node is LinkNode {\n return node instanceof LinkNode\n}\n\nexport const TOGGLE_LINK_COMMAND: LexicalCommand<LinkPayload | null> =\n createCommand('TOGGLE_LINK_COMMAND')\n\nexport function $toggleLink(payload: LinkPayload): void {\n const selection = $getSelection()\n\n if (!$isRangeSelection(selection) && !payload.selectedNodes?.length) {\n return\n }\n const nodes = $isRangeSelection(selection) ? selection.extract() : payload.selectedNodes\n\n if (payload === null) {\n // Remove LinkNodes\n nodes?.forEach((node) => {\n const parent = node.getParent()\n\n if ($isLinkNode(parent)) {\n const children = parent.getChildren()\n\n for (let i = 0; i < children.length; i += 1) {\n parent.insertBefore(children[i])\n }\n\n parent.remove()\n }\n })\n } else {\n // Add or merge LinkNodes\n if (nodes?.length === 1) {\n const firstNode = nodes[0]\n // if the first node is a LinkNode or if its\n // parent is a LinkNode, we update the URL, target and rel.\n const linkNode: LinkNode | null = $isLinkNode(firstNode)\n ? firstNode\n : $getLinkAncestor(firstNode)\n if (linkNode !== null) {\n linkNode.setFields(payload.fields)\n\n if (payload.text != null && payload.text !== linkNode.getTextContent()) {\n // remove all children and add child with new textcontent:\n linkNode.append($createTextNode(payload.text))\n linkNode.getChildren().forEach((child) => {\n if (child !== linkNode.getLastChild()) {\n child.remove()\n }\n })\n }\n return\n }\n }\n\n let prevParent: ElementNodeType | LinkNode | null = null\n let linkNode: LinkNode | null = null\n\n nodes?.forEach((node) => {\n const parent = node.getParent()\n\n if (parent === linkNode || parent === null || ($isElementNode(node) && !node.isInline())) {\n return\n }\n\n if ($isLinkNode(parent)) {\n linkNode = parent\n parent.setFields(payload.fields)\n if (payload.text != null && payload.text !== parent.getTextContent()) {\n // remove all children and add child with new textcontent:\n parent.append($createTextNode(payload.text))\n parent.getChildren().forEach((child) => {\n if (child !== parent.getLastChild()) {\n child.remove()\n }\n })\n }\n return\n }\n\n if (!parent.is(prevParent)) {\n prevParent = parent\n linkNode = $createLinkNode({ fields: payload.fields })\n\n if ($isLinkNode(parent)) {\n if (node.getPreviousSibling() === null) {\n parent.insertBefore(linkNode)\n } else {\n parent.insertAfter(linkNode)\n }\n } else {\n node.insertBefore(linkNode)\n }\n }\n\n if ($isLinkNode(node)) {\n if (node.is(linkNode)) {\n return\n }\n if (linkNode !== null) {\n const children = node.getChildren()\n\n for (let i = 0; i < children.length; i += 1) {\n linkNode.append(children[i])\n }\n }\n\n node.remove()\n return\n }\n\n if (linkNode !== null) {\n linkNode.append(node)\n }\n })\n }\n}\n\nfunction $getLinkAncestor(node: LexicalNode): LinkNode | null {\n return $getAncestor(node, (ancestor) => $isLinkNode(ancestor)) as LinkNode\n}\n\nfunction $getAncestor(\n node: LexicalNode,\n predicate: (ancestor: LexicalNode) => boolean,\n): LexicalNode | null {\n let parent: LexicalNode | null = node\n while (parent !== null) {\n parent = parent.getParent()\n if (parent === null || predicate(parent)) {\n break\n }\n }\n return parent\n}\n\nfunction manageRel(input: string, action: 'add' | 'remove', value: string): string {\n let result: string\n let mutableInput = `${input}`\n if (action === 'add') {\n // if we somehow got out of sync - clean up\n if (mutableInput.includes(value)) {\n const re = new RegExp(value, 'g')\n mutableInput = mutableInput.replace(re, '').trim()\n }\n mutableInput = mutableInput.trim()\n result = mutableInput.length === 0 ? `${value}` : `${mutableInput} ${value}`\n } else {\n const re = new RegExp(value, 'g')\n result = mutableInput.replace(re, '').trim()\n }\n return result\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,13 +1,13 @@
1
1
  import type { SerializedElementNode, SerializedLexicalNode, Spread } from 'lexical';
2
- import type { JsonValue } from 'payload';
2
+ import type { DefaultDocumentIDType, JsonValue } from 'payload';
3
3
  export type LinkFields = {
4
4
  [key: string]: JsonValue;
5
5
  doc: {
6
6
  relationTo: string;
7
7
  value: {
8
8
  [key: string]: JsonValue;
9
- id: string;
10
- } | string;
9
+ id: DefaultDocumentIDType;
10
+ } | DefaultDocumentIDType;
11
11
  } | null;
12
12
  linkType: 'custom' | 'internal';
13
13
  newTab: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/features/link/nodes/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AACnF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAExC,MAAM,MAAM,UAAU,GAAG;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;IACxB,GAAG,EAAE;QACH,UAAU,EAAE,MAAM,CAAA;QAClB,KAAK,EACD;YAEE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;YACxB,EAAE,EAAE,MAAM,CAAA;SACX,GACD,MAAM,CAAA;KACX,GAAG,IAAI,CAAA;IACR,QAAQ,EAAE,QAAQ,GAAG,UAAU,CAAA;IAC/B,MAAM,EAAE,OAAO,CAAA;IACf,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,qBAAqB,GAAG,qBAAqB,IAAI,MAAM,CAC9F;IACE,MAAM,EAAE,UAAU,CAAA;IAClB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;CACb,EACD,qBAAqB,CAAC,CAAC,CAAC,CACzB,CAAA;AACD,MAAM,MAAM,sBAAsB,CAAC,CAAC,SAAS,qBAAqB,GAAG,qBAAqB,IAAI;IAC5F,IAAI,EAAE,UAAU,CAAA;CACjB,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/features/link/nodes/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AACnF,OAAO,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAE/D,MAAM,MAAM,UAAU,GAAG;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;IACxB,GAAG,EAAE;QACH,UAAU,EAAE,MAAM,CAAA;QAClB,KAAK,EACD;YAEE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;YACxB,EAAE,EAAE,qBAAqB,CAAA;SAC1B,GACD,qBAAqB,CAAA;KAC1B,GAAG,IAAI,CAAA;IACR,QAAQ,EAAE,QAAQ,GAAG,UAAU,CAAA;IAC/B,MAAM,EAAE,OAAO,CAAA;IACf,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,qBAAqB,GAAG,qBAAqB,IAAI,MAAM,CAC9F;IACE,MAAM,EAAE,UAAU,CAAA;IAClB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;CACb,EACD,qBAAqB,CAAC,CAAC,CAAC,CACzB,CAAA;AACD,MAAM,MAAM,sBAAsB,CAAC,CAAC,SAAS,qBAAqB,GAAG,qBAAqB,IAAI;IAC5F,IAAI,EAAE,UAAU,CAAA;CACjB,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../../../src/features/link/nodes/types.ts"],"sourcesContent":["import type { SerializedElementNode, SerializedLexicalNode, Spread } from 'lexical'\nimport type { JsonValue } from 'payload'\n\nexport type LinkFields = {\n [key: string]: JsonValue\n doc: {\n relationTo: string\n value:\n | {\n // Actual doc data, populated in afterRead hook\n [key: string]: JsonValue\n id: string\n }\n | string\n } | null\n linkType: 'custom' | 'internal'\n newTab: boolean\n url: string\n}\n\nexport type SerializedLinkNode<T extends SerializedLexicalNode = SerializedLexicalNode> = Spread<\n {\n fields: LinkFields\n id?: string // optional if AutoLinkNode\n type: 'link'\n },\n SerializedElementNode<T>\n>\nexport type SerializedAutoLinkNode<T extends SerializedLexicalNode = SerializedLexicalNode> = {\n type: 'autolink'\n} & Omit<SerializedLinkNode<T>, 'id' | 'type'>\n"],"mappings":"AA4BA","ignoreList":[]}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../../src/features/link/nodes/types.ts"],"sourcesContent":["import type { SerializedElementNode, SerializedLexicalNode, Spread } from 'lexical'\nimport type { DefaultDocumentIDType, JsonValue } from 'payload'\n\nexport type LinkFields = {\n [key: string]: JsonValue\n doc: {\n relationTo: string\n value:\n | {\n // Actual doc data, populated in afterRead hook\n [key: string]: JsonValue\n id: DefaultDocumentIDType\n }\n | DefaultDocumentIDType\n } | null\n linkType: 'custom' | 'internal'\n newTab: boolean\n url: string\n}\n\nexport type SerializedLinkNode<T extends SerializedLexicalNode = SerializedLexicalNode> = Spread<\n {\n fields: LinkFields\n id?: string // optional if AutoLinkNode\n type: 'link'\n },\n SerializedElementNode<T>\n>\nexport type SerializedAutoLinkNode<T extends SerializedLexicalNode = SerializedLexicalNode> = {\n type: 'autolink'\n} & Omit<SerializedLinkNode<T>, 'id' | 'type'>\n"],"mappings":"AA4BA","ignoreList":[]}
@@ -1,3 +1,3 @@
1
1
  import type { CollectionSlug, FieldAffectingData, SanitizedConfig } from 'payload';
2
- export declare const getBaseFields: (config: SanitizedConfig, enabledCollections: CollectionSlug[], disabledCollections: CollectionSlug[], maxDepth?: number) => FieldAffectingData[];
2
+ export declare const getBaseFields: (config: SanitizedConfig, enabledCollections?: CollectionSlug[], disabledCollections?: CollectionSlug[], maxDepth?: number) => FieldAffectingData[];
3
3
  //# sourceMappingURL=baseFields.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"baseFields.d.ts","sourceRoot":"","sources":["../../../../src/features/link/server/baseFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAElB,eAAe,EAGhB,MAAM,SAAS,CAAA;AAIhB,eAAO,MAAM,aAAa,WAChB,eAAe,sBACH,cAAc,EAAE,uBACf,cAAc,EAAE,aAC1B,MAAM,KAChB,kBAAkB,EAsGpB,CAAA"}
1
+ {"version":3,"file":"baseFields.d.ts","sourceRoot":"","sources":["../../../../src/features/link/server/baseFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAElB,eAAe,EAGhB,MAAM,SAAS,CAAA;AAIhB,eAAO,MAAM,aAAa,WAChB,eAAe,uBACF,cAAc,EAAE,wBACf,cAAc,EAAE,aAC3B,MAAM,KAChB,kBAAkB,EAmHpB,CAAA"}
@@ -1,4 +1,4 @@
1
- import { validateUrl } from '../../../lexical/utils/url.js';
1
+ import { validateUrl, validateUrlMinimal } from '../../../lexical/utils/url.js';
2
2
  export const getBaseFields = (config, enabledCollections, disabledCollections, maxDepth) => {
3
3
  let enabledRelations;
4
4
  /**
@@ -57,12 +57,23 @@ export const getBaseFields = (config, enabledCollections, disabledCollections, m
57
57
  }, {
58
58
  name: 'url',
59
59
  type: 'text',
60
+ hooks: {
61
+ beforeChange: [({
62
+ value
63
+ }) => {
64
+ if (!validateUrl(value)) {
65
+ return encodeURIComponent(value);
66
+ }
67
+ return value;
68
+ }]
69
+ },
60
70
  label: ({
61
71
  t
62
72
  }) => t('fields:enterURL'),
63
73
  required: true,
74
+ // @ts-expect-error - TODO: fix this
64
75
  validate: value => {
65
- if (!validateUrl(value)) {
76
+ if (!validateUrlMinimal(value)) {
66
77
  return 'Invalid URL';
67
78
  }
68
79
  }
@@ -97,12 +108,13 @@ export const getBaseFields = (config, enabledCollections, disabledCollections, m
97
108
  }) => {
98
109
  const hidden = config.collections.find(({
99
110
  slug
100
- }) => slug === relationTo).admin.hidden;
111
+ }) => slug === relationTo)?.admin.hidden;
101
112
  if (typeof hidden === 'function' && hidden({
102
113
  user
103
114
  })) {
104
115
  return false;
105
116
  }
117
+ return true;
106
118
  } : null,
107
119
  label: ({
108
120
  t
@@ -1 +1 @@
1
- {"version":3,"file":"baseFields.js","names":["validateUrl","getBaseFields","config","enabledCollections","disabledCollections","maxDepth","enabledRelations","collections","filter","slug","includes","map","admin","enableRichTextLink","hidden","baseFields","name","type","label","t","required","description","defaultValue","options","value","validate","length","push","condition","linkType","filterOptions","relationTo","user","find"],"sources":["../../../../src/features/link/server/baseFields.ts"],"sourcesContent":["import type {\n CollectionSlug,\n FieldAffectingData,\n RadioField,\n SanitizedConfig,\n TextField,\n User,\n} from 'payload'\n\nimport { validateUrl } from '../../../lexical/utils/url.js'\n\nexport const getBaseFields = (\n config: SanitizedConfig,\n enabledCollections: CollectionSlug[],\n disabledCollections: CollectionSlug[],\n maxDepth?: number,\n): FieldAffectingData[] => {\n let enabledRelations: CollectionSlug[]\n\n /**\n * Figure out which relations should be enabled (enabledRelations) based on a collection's admin.enableRichTextLink property,\n * or the Link Feature's enabledCollections and disabledCollections properties which override it.\n */\n if (enabledCollections) {\n enabledRelations = enabledCollections\n } else if (disabledCollections) {\n enabledRelations = config.collections\n .filter(({ slug }) => !disabledCollections.includes(slug))\n .map(({ slug }) => slug)\n } else {\n enabledRelations = config.collections\n .filter(({ admin: { enableRichTextLink, hidden } }) => {\n if (typeof hidden !== 'function' && hidden) {\n return false\n }\n return enableRichTextLink\n })\n .map(({ slug }) => slug)\n }\n\n const baseFields: FieldAffectingData[] = [\n {\n name: 'text',\n type: 'text',\n label: ({ t }) => t('fields:textToDisplay'),\n required: true,\n },\n {\n name: 'linkType',\n type: 'radio',\n admin: {\n description: ({ t }) => t('fields:chooseBetweenCustomTextOrDocument'),\n },\n defaultValue: 'custom',\n label: ({ t }) => t('fields:linkType'),\n options: [\n {\n label: ({ t }) => t('fields:customURL'),\n value: 'custom',\n },\n ],\n required: true,\n } as RadioField,\n {\n name: 'url',\n type: 'text',\n label: ({ t }) => t('fields:enterURL'),\n required: true,\n validate: (value: string) => {\n if (!validateUrl(value)) {\n return 'Invalid URL'\n }\n },\n },\n ]\n\n // Only display internal link-specific fields / options / conditions if there are enabled relations\n if (enabledRelations?.length) {\n ;(baseFields[1] as RadioField).options.push({\n label: ({ t }) => t('fields:internalLink'),\n value: 'internal',\n })\n ;(baseFields[2] as TextField).admin = {\n condition: ({ linkType }) => linkType !== 'internal',\n }\n\n baseFields.push({\n name: 'doc',\n admin: {\n condition: ({ linkType }) => {\n return linkType === 'internal'\n },\n },\n // when admin.hidden is a function we need to dynamically call hidden with the user to know if the collection should be shown\n type: 'relationship',\n filterOptions:\n !enabledCollections && !disabledCollections\n ? ({ relationTo, user }) => {\n const hidden = config.collections.find(({ slug }) => slug === relationTo).admin.hidden\n if (typeof hidden === 'function' && hidden({ user } as { user: User })) {\n return false\n }\n }\n : null,\n label: ({ t }) => t('fields:chooseDocumentToLink'),\n maxDepth,\n relationTo: enabledRelations,\n required: true,\n })\n }\n\n baseFields.push({\n name: 'newTab',\n type: 'checkbox',\n label: ({ t }) => t('fields:openInNewTab'),\n })\n\n return baseFields\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"baseFields.js","names":["validateUrl","validateUrlMinimal","getBaseFields","config","enabledCollections","disabledCollections","maxDepth","enabledRelations","collections","filter","slug","includes","map","admin","enableRichTextLink","hidden","baseFields","name","type","label","t","required","description","defaultValue","options","value","hooks","beforeChange","encodeURIComponent","validate","length","push","condition","linkType","filterOptions","relationTo","user","find"],"sources":["../../../../src/features/link/server/baseFields.ts"],"sourcesContent":["import type {\n CollectionSlug,\n FieldAffectingData,\n RadioField,\n SanitizedConfig,\n TextField,\n User,\n} from 'payload'\n\nimport { validateUrl, validateUrlMinimal } from '../../../lexical/utils/url.js'\n\nexport const getBaseFields = (\n config: SanitizedConfig,\n enabledCollections?: CollectionSlug[],\n disabledCollections?: CollectionSlug[],\n maxDepth?: number,\n): FieldAffectingData[] => {\n let enabledRelations: CollectionSlug[]\n\n /**\n * Figure out which relations should be enabled (enabledRelations) based on a collection's admin.enableRichTextLink property,\n * or the Link Feature's enabledCollections and disabledCollections properties which override it.\n */\n if (enabledCollections) {\n enabledRelations = enabledCollections\n } else if (disabledCollections) {\n enabledRelations = config.collections\n .filter(({ slug }) => !disabledCollections.includes(slug))\n .map(({ slug }) => slug)\n } else {\n enabledRelations = config.collections\n .filter(({ admin: { enableRichTextLink, hidden } }) => {\n if (typeof hidden !== 'function' && hidden) {\n return false\n }\n return enableRichTextLink\n })\n .map(({ slug }) => slug)\n }\n\n const baseFields: FieldAffectingData[] = [\n {\n name: 'text',\n type: 'text',\n label: ({ t }) => t('fields:textToDisplay'),\n required: true,\n },\n {\n name: 'linkType',\n type: 'radio',\n admin: {\n description: ({ t }) => t('fields:chooseBetweenCustomTextOrDocument'),\n },\n defaultValue: 'custom',\n label: ({ t }) => t('fields:linkType'),\n options: [\n {\n label: ({ t }) => t('fields:customURL'),\n value: 'custom',\n },\n ],\n required: true,\n } as RadioField,\n {\n name: 'url',\n type: 'text',\n hooks: {\n beforeChange: [\n ({ value }) => {\n if (!validateUrl(value)) {\n return encodeURIComponent(value)\n }\n return value\n },\n ],\n },\n label: ({ t }) => t('fields:enterURL'),\n required: true,\n // @ts-expect-error - TODO: fix this\n validate: (value: string) => {\n if (!validateUrlMinimal(value)) {\n return 'Invalid URL'\n }\n },\n },\n ]\n\n // Only display internal link-specific fields / options / conditions if there are enabled relations\n if (enabledRelations?.length) {\n ;(baseFields[1] as RadioField).options.push({\n label: ({ t }) => t('fields:internalLink'),\n value: 'internal',\n })\n ;(baseFields[2] as TextField).admin = {\n condition: ({ linkType }) => linkType !== 'internal',\n }\n\n baseFields.push({\n name: 'doc',\n admin: {\n condition: ({ linkType }) => {\n return linkType === 'internal'\n },\n },\n // when admin.hidden is a function we need to dynamically call hidden with the user to know if the collection should be shown\n type: 'relationship',\n filterOptions:\n !enabledCollections && !disabledCollections\n ? ({ relationTo, user }) => {\n const hidden = config.collections.find(({ slug }) => slug === relationTo)?.admin\n .hidden\n if (typeof hidden === 'function' && hidden({ user } as { user: User })) {\n return false\n }\n return true\n }\n : null,\n label: ({ t }) => t('fields:chooseDocumentToLink'),\n maxDepth,\n relationTo: enabledRelations,\n required: true,\n })\n }\n\n baseFields.push({\n name: 'newTab',\n type: 'checkbox',\n label: ({ t }) => t('fields:openInNewTab'),\n })\n\n return baseFields\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../../../src/features/link/server/i18n.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAEhE,eAAO,MAAM,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAiG1C,CAAA"}
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../../../src/features/link/server/i18n.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAEhE,eAAO,MAAM,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAiI1C,CAAA"}