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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (677) hide show
  1. package/dist/cell/index.d.ts.map +1 -1
  2. package/dist/cell/index.js +1 -1
  3. package/dist/cell/index.js.map +1 -1
  4. package/dist/exports/client/Field-XBUN6QOM.js +2 -0
  5. package/dist/exports/client/Field-XBUN6QOM.js.map +7 -0
  6. package/dist/exports/client/chunk-JIP5PWU3.js +2 -0
  7. package/dist/exports/client/chunk-JIP5PWU3.js.map +7 -0
  8. package/dist/exports/client/{chunk-QU5MKT75.js → chunk-TZLHAUCW.js} +2 -2
  9. package/dist/exports/client/{component-E2NHAHBC.js → component-CEUVAHRO.js} +2 -2
  10. package/dist/exports/client/component-CEUVAHRO.js.map +7 -0
  11. package/dist/exports/client/component-PEFMKIXI.js +2 -0
  12. package/dist/exports/client/component-PEFMKIXI.js.map +7 -0
  13. package/dist/exports/client/index.d.ts +36 -27
  14. package/dist/exports/client/index.d.ts.map +1 -1
  15. package/dist/exports/client/index.js +7 -5
  16. package/dist/exports/client/index.js.map +4 -4
  17. package/dist/features/align/feature.client.d.ts +1 -2
  18. package/dist/features/align/feature.client.d.ts.map +1 -1
  19. package/dist/features/align/feature.client.js +9 -16
  20. package/dist/features/align/feature.client.js.map +1 -1
  21. package/dist/features/align/feature.server.d.ts +1 -2
  22. package/dist/features/align/feature.server.d.ts.map +1 -1
  23. package/dist/features/align/feature.server.js +9 -15
  24. package/dist/features/align/feature.server.js.map +1 -1
  25. package/dist/features/align/i18n.js.map +1 -1
  26. package/dist/features/align/toolbarAlignGroup.js.map +1 -1
  27. package/dist/features/blockquote/feature.client.d.ts +1 -2
  28. package/dist/features/blockquote/feature.client.d.ts.map +1 -1
  29. package/dist/features/blockquote/feature.client.js +37 -44
  30. package/dist/features/blockquote/feature.client.js.map +1 -1
  31. package/dist/features/blockquote/feature.server.d.ts +1 -2
  32. package/dist/features/blockquote/feature.server.d.ts.map +1 -1
  33. package/dist/features/blockquote/feature.server.js +35 -40
  34. package/dist/features/blockquote/feature.server.js.map +1 -1
  35. package/dist/features/blockquote/i18n.js.map +1 -1
  36. package/dist/features/blockquote/markdownTransformer.js.map +1 -1
  37. package/dist/features/blocks/component/BlockContent.js +2 -2
  38. package/dist/features/blocks/component/BlockContent.js.map +1 -1
  39. package/dist/features/blocks/component/FormSavePlugin.js.map +1 -1
  40. package/dist/features/blocks/component/index.js +1 -1
  41. package/dist/features/blocks/component/index.js.map +1 -1
  42. package/dist/features/blocks/component/removeEmptyArrayValues.js.map +1 -1
  43. package/dist/features/blocks/drawer/index.js +1 -1
  44. package/dist/features/blocks/drawer/index.js.map +1 -1
  45. package/dist/features/blocks/feature.client.d.ts +1 -2
  46. package/dist/features/blocks/feature.client.d.ts.map +1 -1
  47. package/dist/features/blocks/feature.client.js +74 -80
  48. package/dist/features/blocks/feature.client.js.map +1 -1
  49. package/dist/features/blocks/feature.server.d.ts +1 -2
  50. package/dist/features/blocks/feature.server.d.ts.map +1 -1
  51. package/dist/features/blocks/feature.server.js +88 -90
  52. package/dist/features/blocks/feature.server.js.map +1 -1
  53. package/dist/features/blocks/graphQLPopulationPromise.d.ts +1 -1
  54. package/dist/features/blocks/graphQLPopulationPromise.d.ts.map +1 -1
  55. package/dist/features/blocks/graphQLPopulationPromise.js.map +1 -1
  56. package/dist/features/blocks/i18n.js.map +1 -1
  57. package/dist/features/blocks/nodes/BlocksNode.js.map +1 -1
  58. package/dist/features/blocks/plugin/commands.js.map +1 -1
  59. package/dist/features/blocks/plugin/index.d.ts +1 -1
  60. package/dist/features/blocks/plugin/index.d.ts.map +1 -1
  61. package/dist/features/blocks/plugin/index.js.map +1 -1
  62. package/dist/features/blocks/validate.d.ts +1 -1
  63. package/dist/features/blocks/validate.d.ts.map +1 -1
  64. package/dist/features/blocks/validate.js.map +1 -1
  65. package/dist/features/converters/html/converter/converters/linebreak.js.map +1 -1
  66. package/dist/features/converters/html/converter/converters/paragraph.js.map +1 -1
  67. package/dist/features/converters/html/converter/converters/text.js.map +1 -1
  68. package/dist/features/converters/html/converter/defaultConverters.js.map +1 -1
  69. package/dist/features/converters/html/converter/index.js.map +1 -1
  70. package/dist/features/converters/html/converter/types.js.map +1 -1
  71. package/dist/features/converters/html/feature.server.d.ts +1 -2
  72. package/dist/features/converters/html/feature.server.d.ts.map +1 -1
  73. package/dist/features/converters/html/feature.server.js +6 -12
  74. package/dist/features/converters/html/feature.server.js.map +1 -1
  75. package/dist/features/converters/html/field/index.js +1 -1
  76. package/dist/features/converters/html/field/index.js.map +1 -1
  77. package/dist/features/createClientComponent.d.ts +3 -2
  78. package/dist/features/createClientComponent.d.ts.map +1 -1
  79. package/dist/features/createClientComponent.js.map +1 -1
  80. package/dist/features/createFeaturePropComponent.d.ts.map +1 -1
  81. package/dist/features/createFeaturePropComponent.js.map +1 -1
  82. package/dist/features/debug/testRecorder/feature.client.d.ts +1 -2
  83. package/dist/features/debug/testRecorder/feature.client.d.ts.map +1 -1
  84. package/dist/features/debug/testRecorder/feature.client.js +9 -16
  85. package/dist/features/debug/testRecorder/feature.client.js.map +1 -1
  86. package/dist/features/debug/testRecorder/feature.server.d.ts +1 -2
  87. package/dist/features/debug/testRecorder/feature.server.d.ts.map +1 -1
  88. package/dist/features/debug/testRecorder/feature.server.js +8 -13
  89. package/dist/features/debug/testRecorder/feature.server.js.map +1 -1
  90. package/dist/features/debug/testRecorder/plugin/index.d.ts +1 -1
  91. package/dist/features/debug/testRecorder/plugin/index.d.ts.map +1 -1
  92. package/dist/features/debug/testRecorder/plugin/index.js.map +1 -1
  93. package/dist/features/debug/treeView/feature.client.d.ts +1 -2
  94. package/dist/features/debug/treeView/feature.client.d.ts.map +1 -1
  95. package/dist/features/debug/treeView/feature.client.js +9 -16
  96. package/dist/features/debug/treeView/feature.client.js.map +1 -1
  97. package/dist/features/debug/treeView/feature.server.d.ts +1 -2
  98. package/dist/features/debug/treeView/feature.server.d.ts.map +1 -1
  99. package/dist/features/debug/treeView/feature.server.js +8 -13
  100. package/dist/features/debug/treeView/feature.server.js.map +1 -1
  101. package/dist/features/debug/treeView/plugin/index.d.ts +1 -1
  102. package/dist/features/debug/treeView/plugin/index.d.ts.map +1 -1
  103. package/dist/features/debug/treeView/plugin/index.js.map +1 -1
  104. package/dist/features/format/bold/feature.client.d.ts +1 -2
  105. package/dist/features/format/bold/feature.client.d.ts.map +1 -1
  106. package/dist/features/format/bold/feature.client.js +16 -23
  107. package/dist/features/format/bold/feature.client.js.map +1 -1
  108. package/dist/features/format/bold/feature.server.d.ts +1 -2
  109. package/dist/features/format/bold/feature.server.d.ts.map +1 -1
  110. package/dist/features/format/bold/feature.server.js +21 -24
  111. package/dist/features/format/bold/feature.server.js.map +1 -1
  112. package/dist/features/format/bold/markdownTransformers.js.map +1 -1
  113. package/dist/features/format/inlineCode/feature.client.d.ts +1 -2
  114. package/dist/features/format/inlineCode/feature.client.d.ts.map +1 -1
  115. package/dist/features/format/inlineCode/feature.client.js +12 -21
  116. package/dist/features/format/inlineCode/feature.client.js.map +1 -1
  117. package/dist/features/format/inlineCode/feature.server.d.ts +1 -2
  118. package/dist/features/format/inlineCode/feature.server.d.ts.map +1 -1
  119. package/dist/features/format/inlineCode/feature.server.js +11 -16
  120. package/dist/features/format/inlineCode/feature.server.js.map +1 -1
  121. package/dist/features/format/inlineCode/markdownTransformers.js.map +1 -1
  122. package/dist/features/format/italic/feature.client.d.ts +1 -2
  123. package/dist/features/format/italic/feature.client.d.ts.map +1 -1
  124. package/dist/features/format/italic/feature.client.js +13 -22
  125. package/dist/features/format/italic/feature.client.js.map +1 -1
  126. package/dist/features/format/italic/feature.server.d.ts +1 -2
  127. package/dist/features/format/italic/feature.server.d.ts.map +1 -1
  128. package/dist/features/format/italic/feature.server.js +12 -17
  129. package/dist/features/format/italic/feature.server.js.map +1 -1
  130. package/dist/features/format/italic/markdownTransformers.js.map +1 -1
  131. package/dist/features/format/shared/toolbarFormatGroup.js.map +1 -1
  132. package/dist/features/format/strikethrough/feature.client.d.ts +1 -2
  133. package/dist/features/format/strikethrough/feature.client.d.ts.map +1 -1
  134. package/dist/features/format/strikethrough/feature.client.js +12 -21
  135. package/dist/features/format/strikethrough/feature.client.js.map +1 -1
  136. package/dist/features/format/strikethrough/feature.server.d.ts +1 -2
  137. package/dist/features/format/strikethrough/feature.server.d.ts.map +1 -1
  138. package/dist/features/format/strikethrough/feature.server.js +11 -16
  139. package/dist/features/format/strikethrough/feature.server.js.map +1 -1
  140. package/dist/features/format/strikethrough/markdownTransformers.js.map +1 -1
  141. package/dist/features/format/subscript/feature.client.d.ts +1 -2
  142. package/dist/features/format/subscript/feature.client.d.ts.map +1 -1
  143. package/dist/features/format/subscript/feature.client.js +9 -18
  144. package/dist/features/format/subscript/feature.client.js.map +1 -1
  145. package/dist/features/format/subscript/feature.server.d.ts +1 -2
  146. package/dist/features/format/subscript/feature.server.d.ts.map +1 -1
  147. package/dist/features/format/subscript/feature.server.js +8 -13
  148. package/dist/features/format/subscript/feature.server.js.map +1 -1
  149. package/dist/features/format/superscript/feature.client.d.ts +1 -2
  150. package/dist/features/format/superscript/feature.client.d.ts.map +1 -1
  151. package/dist/features/format/superscript/feature.client.js +9 -18
  152. package/dist/features/format/superscript/feature.client.js.map +1 -1
  153. package/dist/features/format/superscript/feature.server.d.ts +1 -2
  154. package/dist/features/format/superscript/feature.server.d.ts.map +1 -1
  155. package/dist/features/format/superscript/feature.server.js +8 -13
  156. package/dist/features/format/superscript/feature.server.js.map +1 -1
  157. package/dist/features/format/underline/feature.client.d.ts +1 -2
  158. package/dist/features/format/underline/feature.client.d.ts.map +1 -1
  159. package/dist/features/format/underline/feature.client.js +9 -18
  160. package/dist/features/format/underline/feature.client.js.map +1 -1
  161. package/dist/features/format/underline/feature.server.d.ts +1 -2
  162. package/dist/features/format/underline/feature.server.d.ts.map +1 -1
  163. package/dist/features/format/underline/feature.server.js +8 -13
  164. package/dist/features/format/underline/feature.server.js.map +1 -1
  165. package/dist/features/heading/feature.client.d.ts +1 -2
  166. package/dist/features/heading/feature.client.d.ts.map +1 -1
  167. package/dist/features/heading/feature.client.js +70 -76
  168. package/dist/features/heading/feature.client.js.map +1 -1
  169. package/dist/features/heading/feature.server.d.ts +1 -2
  170. package/dist/features/heading/feature.server.d.ts.map +1 -1
  171. package/dist/features/heading/feature.server.js +51 -53
  172. package/dist/features/heading/feature.server.js.map +1 -1
  173. package/dist/features/heading/i18n.js.map +1 -1
  174. package/dist/features/heading/markdownTransformer.js.map +1 -1
  175. package/dist/features/horizontalRule/component/index.js.map +1 -1
  176. package/dist/features/horizontalRule/feature.client.d.ts +1 -2
  177. package/dist/features/horizontalRule/feature.client.d.ts.map +1 -1
  178. package/dist/features/horizontalRule/feature.client.js +58 -65
  179. package/dist/features/horizontalRule/feature.client.js.map +1 -1
  180. package/dist/features/horizontalRule/feature.server.d.ts +1 -2
  181. package/dist/features/horizontalRule/feature.server.d.ts.map +1 -1
  182. package/dist/features/horizontalRule/feature.server.js +26 -31
  183. package/dist/features/horizontalRule/feature.server.js.map +1 -1
  184. package/dist/features/horizontalRule/i18n.js.map +1 -1
  185. package/dist/features/horizontalRule/markdownTransformer.js.map +1 -1
  186. package/dist/features/horizontalRule/nodes/HorizontalRuleNode.js.map +1 -1
  187. package/dist/features/horizontalRule/plugin/index.d.ts +1 -1
  188. package/dist/features/horizontalRule/plugin/index.d.ts.map +1 -1
  189. package/dist/features/horizontalRule/plugin/index.js.map +1 -1
  190. package/dist/features/indent/feature.client.d.ts +1 -2
  191. package/dist/features/indent/feature.client.d.ts.map +1 -1
  192. package/dist/features/indent/feature.client.js +9 -16
  193. package/dist/features/indent/feature.client.js.map +1 -1
  194. package/dist/features/indent/feature.server.d.ts +1 -2
  195. package/dist/features/indent/feature.server.d.ts.map +1 -1
  196. package/dist/features/indent/feature.server.js +9 -15
  197. package/dist/features/indent/feature.server.js.map +1 -1
  198. package/dist/features/indent/i18n.js.map +1 -1
  199. package/dist/features/indent/toolbarIndentGroup.js.map +1 -1
  200. package/dist/features/link/drawer/baseFields.d.ts +2 -2
  201. package/dist/features/link/drawer/baseFields.d.ts.map +1 -1
  202. package/dist/features/link/drawer/baseFields.js.map +1 -1
  203. package/dist/features/link/drawer/index.js.map +1 -1
  204. package/dist/features/link/drawer/types.js.map +1 -1
  205. package/dist/features/link/feature.client.d.ts +3 -4
  206. package/dist/features/link/feature.client.d.ts.map +1 -1
  207. package/dist/features/link/feature.client.js +34 -41
  208. package/dist/features/link/feature.client.js.map +1 -1
  209. package/dist/features/link/feature.server.d.ts +4 -6
  210. package/dist/features/link/feature.server.d.ts.map +1 -1
  211. package/dist/features/link/feature.server.js +123 -125
  212. package/dist/features/link/feature.server.js.map +1 -1
  213. package/dist/features/link/graphQLPopulationPromise.d.ts +1 -1
  214. package/dist/features/link/graphQLPopulationPromise.d.ts.map +1 -1
  215. package/dist/features/link/graphQLPopulationPromise.js.map +1 -1
  216. package/dist/features/link/i18n.js.map +1 -1
  217. package/dist/features/link/markdownTransformer.js.map +1 -1
  218. package/dist/features/link/nodes/AutoLinkNode.js.map +1 -1
  219. package/dist/features/link/nodes/LinkNode.js.map +1 -1
  220. package/dist/features/link/nodes/types.js.map +1 -1
  221. package/dist/features/link/plugins/autoLink/index.d.ts +1 -1
  222. package/dist/features/link/plugins/autoLink/index.d.ts.map +1 -1
  223. package/dist/features/link/plugins/autoLink/index.js.map +1 -1
  224. package/dist/features/link/plugins/clickableLink/index.d.ts +1 -1
  225. package/dist/features/link/plugins/clickableLink/index.d.ts.map +1 -1
  226. package/dist/features/link/plugins/clickableLink/index.js.map +1 -1
  227. package/dist/features/link/plugins/floatingLinkEditor/LinkEditor/commands.js.map +1 -1
  228. package/dist/features/link/plugins/floatingLinkEditor/LinkEditor/index.js.map +1 -1
  229. package/dist/features/link/plugins/floatingLinkEditor/index.d.ts +1 -1
  230. package/dist/features/link/plugins/floatingLinkEditor/index.d.ts.map +1 -1
  231. package/dist/features/link/plugins/floatingLinkEditor/index.js.map +1 -1
  232. package/dist/features/link/plugins/floatingLinkEditor/types.js.map +1 -1
  233. package/dist/features/link/plugins/floatingLinkEditor/utilities.d.ts +2 -2
  234. package/dist/features/link/plugins/floatingLinkEditor/utilities.d.ts.map +1 -1
  235. package/dist/features/link/plugins/floatingLinkEditor/utilities.js.map +1 -1
  236. package/dist/features/link/plugins/link/index.d.ts +1 -1
  237. package/dist/features/link/plugins/link/index.d.ts.map +1 -1
  238. package/dist/features/link/plugins/link/index.js.map +1 -1
  239. package/dist/features/link/validate.d.ts +1 -1
  240. package/dist/features/link/validate.d.ts.map +1 -1
  241. package/dist/features/link/validate.js.map +1 -1
  242. package/dist/features/lists/checklist/feature.client.d.ts +1 -2
  243. package/dist/features/lists/checklist/feature.client.d.ts.map +1 -1
  244. package/dist/features/lists/checklist/feature.client.js +50 -57
  245. package/dist/features/lists/checklist/feature.client.js.map +1 -1
  246. package/dist/features/lists/checklist/feature.server.d.ts +1 -2
  247. package/dist/features/lists/checklist/feature.server.d.ts.map +1 -1
  248. package/dist/features/lists/checklist/feature.server.js +28 -31
  249. package/dist/features/lists/checklist/feature.server.js.map +1 -1
  250. package/dist/features/lists/checklist/i18n.js.map +1 -1
  251. package/dist/features/lists/checklist/markdownTransformers.js.map +1 -1
  252. package/dist/features/lists/checklist/plugin/index.d.ts +1 -1
  253. package/dist/features/lists/checklist/plugin/index.d.ts.map +1 -1
  254. package/dist/features/lists/checklist/plugin/index.js.map +1 -1
  255. package/dist/features/lists/htmlConverter.js.map +1 -1
  256. package/dist/features/lists/orderedList/feature.client.d.ts +1 -2
  257. package/dist/features/lists/orderedList/feature.client.d.ts.map +1 -1
  258. package/dist/features/lists/orderedList/feature.client.js +39 -46
  259. package/dist/features/lists/orderedList/feature.client.js.map +1 -1
  260. package/dist/features/lists/orderedList/feature.server.d.ts +1 -2
  261. package/dist/features/lists/orderedList/feature.server.d.ts.map +1 -1
  262. package/dist/features/lists/orderedList/feature.server.js +28 -31
  263. package/dist/features/lists/orderedList/feature.server.js.map +1 -1
  264. package/dist/features/lists/orderedList/i18n.js.map +1 -1
  265. package/dist/features/lists/orderedList/markdownTransformer.js.map +1 -1
  266. package/dist/features/lists/plugin/index.d.ts +1 -1
  267. package/dist/features/lists/plugin/index.d.ts.map +1 -1
  268. package/dist/features/lists/plugin/index.js.map +1 -1
  269. package/dist/features/lists/shared/markdown.d.ts +1 -1
  270. package/dist/features/lists/shared/markdown.js.map +1 -1
  271. package/dist/features/lists/shared/slashMenuListGroup.js.map +1 -1
  272. package/dist/features/lists/unorderedList/feature.client.d.ts +1 -2
  273. package/dist/features/lists/unorderedList/feature.client.d.ts.map +1 -1
  274. package/dist/features/lists/unorderedList/feature.client.js +40 -49
  275. package/dist/features/lists/unorderedList/feature.client.js.map +1 -1
  276. package/dist/features/lists/unorderedList/feature.server.d.ts +1 -2
  277. package/dist/features/lists/unorderedList/feature.server.d.ts.map +1 -1
  278. package/dist/features/lists/unorderedList/feature.server.js +26 -31
  279. package/dist/features/lists/unorderedList/feature.server.js.map +1 -1
  280. package/dist/features/lists/unorderedList/i18n.js.map +1 -1
  281. package/dist/features/lists/unorderedList/markdownTransformer.js.map +1 -1
  282. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/heading/client.d.ts +0 -1
  283. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/heading/client.d.ts.map +1 -1
  284. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/heading/client.js.map +1 -1
  285. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/heading/converter.js.map +1 -1
  286. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/heading/index.js +1 -1
  287. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/heading/index.js.map +1 -1
  288. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/link/client.d.ts +0 -1
  289. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/link/client.d.ts.map +1 -1
  290. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/link/client.js.map +1 -1
  291. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/link/converter.js.map +1 -1
  292. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/link/index.js +1 -1
  293. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/link/index.js.map +1 -1
  294. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/list/client.d.ts +0 -1
  295. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/list/client.d.ts.map +1 -1
  296. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/list/client.js.map +1 -1
  297. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/list/converter.js.map +1 -1
  298. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/list/index.js +1 -1
  299. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/list/index.js.map +1 -1
  300. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/listItem/client.d.ts +0 -1
  301. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/listItem/client.d.ts.map +1 -1
  302. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/listItem/client.js.map +1 -1
  303. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/listItem/converter.js.map +1 -1
  304. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/listItem/index.js +1 -1
  305. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/listItem/index.js.map +1 -1
  306. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/quote/client.d.ts +0 -1
  307. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/quote/client.d.ts.map +1 -1
  308. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/quote/client.js.map +1 -1
  309. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/quote/converter.js.map +1 -1
  310. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/quote/index.js +1 -1
  311. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/quote/index.js.map +1 -1
  312. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/unknown/client.d.ts +0 -1
  313. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/unknown/client.d.ts.map +1 -1
  314. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/unknown/client.js.map +1 -1
  315. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/unknown/converter.js.map +1 -1
  316. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/unknown/index.js +1 -1
  317. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/unknown/index.js.map +1 -1
  318. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/upload/client.d.ts +0 -1
  319. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/upload/client.d.ts.map +1 -1
  320. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/upload/client.js.map +1 -1
  321. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/upload/converter.js.map +1 -1
  322. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/upload/index.js +1 -1
  323. package/dist/features/migrations/lexicalPluginToLexical/converter/converters/upload/index.js.map +1 -1
  324. package/dist/features/migrations/lexicalPluginToLexical/converter/defaultConverters.js.map +1 -1
  325. package/dist/features/migrations/lexicalPluginToLexical/converter/index.js.map +1 -1
  326. package/dist/features/migrations/lexicalPluginToLexical/converter/types.d.ts +1 -1
  327. package/dist/features/migrations/lexicalPluginToLexical/converter/types.js.map +1 -1
  328. package/dist/features/migrations/lexicalPluginToLexical/feature.client.d.ts +1 -2
  329. package/dist/features/migrations/lexicalPluginToLexical/feature.client.d.ts.map +1 -1
  330. package/dist/features/migrations/lexicalPluginToLexical/feature.client.js +20 -27
  331. package/dist/features/migrations/lexicalPluginToLexical/feature.client.js.map +1 -1
  332. package/dist/features/migrations/lexicalPluginToLexical/feature.server.d.ts +1 -2
  333. package/dist/features/migrations/lexicalPluginToLexical/feature.server.d.ts.map +1 -1
  334. package/dist/features/migrations/lexicalPluginToLexical/feature.server.js +39 -42
  335. package/dist/features/migrations/lexicalPluginToLexical/feature.server.js.map +1 -1
  336. package/dist/features/migrations/lexicalPluginToLexical/nodes/unknownConvertedNode/Component.js.map +1 -1
  337. package/dist/features/migrations/lexicalPluginToLexical/nodes/unknownConvertedNode/index.js.map +1 -1
  338. package/dist/features/migrations/slateToLexical/converter/converters/blockquote/client.d.ts +0 -1
  339. package/dist/features/migrations/slateToLexical/converter/converters/blockquote/client.d.ts.map +1 -1
  340. package/dist/features/migrations/slateToLexical/converter/converters/blockquote/client.js.map +1 -1
  341. package/dist/features/migrations/slateToLexical/converter/converters/blockquote/converter.js.map +1 -1
  342. package/dist/features/migrations/slateToLexical/converter/converters/blockquote/index.js +1 -1
  343. package/dist/features/migrations/slateToLexical/converter/converters/blockquote/index.js.map +1 -1
  344. package/dist/features/migrations/slateToLexical/converter/converters/heading/client.d.ts +0 -1
  345. package/dist/features/migrations/slateToLexical/converter/converters/heading/client.d.ts.map +1 -1
  346. package/dist/features/migrations/slateToLexical/converter/converters/heading/client.js.map +1 -1
  347. package/dist/features/migrations/slateToLexical/converter/converters/heading/converter.js.map +1 -1
  348. package/dist/features/migrations/slateToLexical/converter/converters/heading/index.js +1 -1
  349. package/dist/features/migrations/slateToLexical/converter/converters/heading/index.js.map +1 -1
  350. package/dist/features/migrations/slateToLexical/converter/converters/indent/client.d.ts +0 -1
  351. package/dist/features/migrations/slateToLexical/converter/converters/indent/client.d.ts.map +1 -1
  352. package/dist/features/migrations/slateToLexical/converter/converters/indent/client.js.map +1 -1
  353. package/dist/features/migrations/slateToLexical/converter/converters/indent/converter.js.map +1 -1
  354. package/dist/features/migrations/slateToLexical/converter/converters/indent/index.js +1 -1
  355. package/dist/features/migrations/slateToLexical/converter/converters/indent/index.js.map +1 -1
  356. package/dist/features/migrations/slateToLexical/converter/converters/link/client.d.ts +0 -1
  357. package/dist/features/migrations/slateToLexical/converter/converters/link/client.d.ts.map +1 -1
  358. package/dist/features/migrations/slateToLexical/converter/converters/link/client.js.map +1 -1
  359. package/dist/features/migrations/slateToLexical/converter/converters/link/converter.js.map +1 -1
  360. package/dist/features/migrations/slateToLexical/converter/converters/link/index.js +1 -1
  361. package/dist/features/migrations/slateToLexical/converter/converters/link/index.js.map +1 -1
  362. package/dist/features/migrations/slateToLexical/converter/converters/listItem/client.d.ts +0 -1
  363. package/dist/features/migrations/slateToLexical/converter/converters/listItem/client.d.ts.map +1 -1
  364. package/dist/features/migrations/slateToLexical/converter/converters/listItem/client.js.map +1 -1
  365. package/dist/features/migrations/slateToLexical/converter/converters/listItem/converter.js.map +1 -1
  366. package/dist/features/migrations/slateToLexical/converter/converters/listItem/index.js +1 -1
  367. package/dist/features/migrations/slateToLexical/converter/converters/listItem/index.js.map +1 -1
  368. package/dist/features/migrations/slateToLexical/converter/converters/orderedList/client.d.ts +0 -1
  369. package/dist/features/migrations/slateToLexical/converter/converters/orderedList/client.d.ts.map +1 -1
  370. package/dist/features/migrations/slateToLexical/converter/converters/orderedList/client.js.map +1 -1
  371. package/dist/features/migrations/slateToLexical/converter/converters/orderedList/converter.js.map +1 -1
  372. package/dist/features/migrations/slateToLexical/converter/converters/orderedList/index.js +1 -1
  373. package/dist/features/migrations/slateToLexical/converter/converters/orderedList/index.js.map +1 -1
  374. package/dist/features/migrations/slateToLexical/converter/converters/relationship/client.d.ts +0 -1
  375. package/dist/features/migrations/slateToLexical/converter/converters/relationship/client.d.ts.map +1 -1
  376. package/dist/features/migrations/slateToLexical/converter/converters/relationship/client.js.map +1 -1
  377. package/dist/features/migrations/slateToLexical/converter/converters/relationship/converter.js.map +1 -1
  378. package/dist/features/migrations/slateToLexical/converter/converters/relationship/index.js +1 -1
  379. package/dist/features/migrations/slateToLexical/converter/converters/relationship/index.js.map +1 -1
  380. package/dist/features/migrations/slateToLexical/converter/converters/unknown/client.d.ts +0 -1
  381. package/dist/features/migrations/slateToLexical/converter/converters/unknown/client.d.ts.map +1 -1
  382. package/dist/features/migrations/slateToLexical/converter/converters/unknown/client.js.map +1 -1
  383. package/dist/features/migrations/slateToLexical/converter/converters/unknown/converter.js.map +1 -1
  384. package/dist/features/migrations/slateToLexical/converter/converters/unknown/index.js +1 -1
  385. package/dist/features/migrations/slateToLexical/converter/converters/unknown/index.js.map +1 -1
  386. package/dist/features/migrations/slateToLexical/converter/converters/unorderedList/client.d.ts +0 -1
  387. package/dist/features/migrations/slateToLexical/converter/converters/unorderedList/client.d.ts.map +1 -1
  388. package/dist/features/migrations/slateToLexical/converter/converters/unorderedList/client.js.map +1 -1
  389. package/dist/features/migrations/slateToLexical/converter/converters/unorderedList/converter.js.map +1 -1
  390. package/dist/features/migrations/slateToLexical/converter/converters/unorderedList/index.js +1 -1
  391. package/dist/features/migrations/slateToLexical/converter/converters/unorderedList/index.js.map +1 -1
  392. package/dist/features/migrations/slateToLexical/converter/converters/upload/client.d.ts +0 -1
  393. package/dist/features/migrations/slateToLexical/converter/converters/upload/client.d.ts.map +1 -1
  394. package/dist/features/migrations/slateToLexical/converter/converters/upload/client.js.map +1 -1
  395. package/dist/features/migrations/slateToLexical/converter/converters/upload/converter.js.map +1 -1
  396. package/dist/features/migrations/slateToLexical/converter/converters/upload/index.js +1 -1
  397. package/dist/features/migrations/slateToLexical/converter/converters/upload/index.js.map +1 -1
  398. package/dist/features/migrations/slateToLexical/converter/defaultConverters.js.map +1 -1
  399. package/dist/features/migrations/slateToLexical/converter/index.js.map +1 -1
  400. package/dist/features/migrations/slateToLexical/converter/types.d.ts +1 -1
  401. package/dist/features/migrations/slateToLexical/converter/types.js.map +1 -1
  402. package/dist/features/migrations/slateToLexical/feature.client.d.ts +1 -2
  403. package/dist/features/migrations/slateToLexical/feature.client.d.ts.map +1 -1
  404. package/dist/features/migrations/slateToLexical/feature.client.js +20 -27
  405. package/dist/features/migrations/slateToLexical/feature.client.js.map +1 -1
  406. package/dist/features/migrations/slateToLexical/feature.server.d.ts +1 -2
  407. package/dist/features/migrations/slateToLexical/feature.server.d.ts.map +1 -1
  408. package/dist/features/migrations/slateToLexical/feature.server.js +39 -42
  409. package/dist/features/migrations/slateToLexical/feature.server.js.map +1 -1
  410. package/dist/features/migrations/slateToLexical/nodes/unknownConvertedNode/Component.js.map +1 -1
  411. package/dist/features/migrations/slateToLexical/nodes/unknownConvertedNode/index.js.map +1 -1
  412. package/dist/features/paragraph/feature.client.d.ts +1 -2
  413. package/dist/features/paragraph/feature.client.d.ts.map +1 -1
  414. package/dist/features/paragraph/feature.client.js +33 -40
  415. package/dist/features/paragraph/feature.client.js.map +1 -1
  416. package/dist/features/paragraph/feature.server.d.ts +1 -2
  417. package/dist/features/paragraph/feature.server.d.ts.map +1 -1
  418. package/dist/features/paragraph/feature.server.js +10 -15
  419. package/dist/features/paragraph/feature.server.js.map +1 -1
  420. package/dist/features/paragraph/i18n.js.map +1 -1
  421. package/dist/features/relationship/drawer/commands.js.map +1 -1
  422. package/dist/features/relationship/drawer/index.d.ts.map +1 -1
  423. package/dist/features/relationship/drawer/index.js.map +1 -1
  424. package/dist/features/relationship/feature.client.d.ts +3 -4
  425. package/dist/features/relationship/feature.client.d.ts.map +1 -1
  426. package/dist/features/relationship/feature.client.js +60 -67
  427. package/dist/features/relationship/feature.client.js.map +1 -1
  428. package/dist/features/relationship/feature.server.d.ts +4 -4
  429. package/dist/features/relationship/feature.server.d.ts.map +1 -1
  430. package/dist/features/relationship/feature.server.js +45 -51
  431. package/dist/features/relationship/feature.server.js.map +1 -1
  432. package/dist/features/relationship/graphQLPopulationPromise.d.ts +1 -1
  433. package/dist/features/relationship/graphQLPopulationPromise.d.ts.map +1 -1
  434. package/dist/features/relationship/graphQLPopulationPromise.js.map +1 -1
  435. package/dist/features/relationship/i18n.js.map +1 -1
  436. package/dist/features/relationship/nodes/RelationshipNode.js.map +1 -1
  437. package/dist/features/relationship/nodes/components/RelationshipComponent.d.ts.map +1 -1
  438. package/dist/features/relationship/nodes/components/RelationshipComponent.js.map +1 -1
  439. package/dist/features/relationship/plugins/index.d.ts +1 -1
  440. package/dist/features/relationship/plugins/index.d.ts.map +1 -1
  441. package/dist/features/relationship/plugins/index.js.map +1 -1
  442. package/dist/features/relationship/utils/EnabledRelationshipsCondition.js.map +1 -1
  443. package/dist/features/shared/slashMenu/basicGroup.js.map +1 -1
  444. package/dist/features/shared/toolbar/addDropdownGroup.js.map +1 -1
  445. package/dist/features/shared/toolbar/featureButtonsGroup.js.map +1 -1
  446. package/dist/features/shared/toolbar/textDropdownGroup.js.map +1 -1
  447. package/dist/features/toolbars/fixed/Toolbar/index.d.ts +1 -1
  448. package/dist/features/toolbars/fixed/Toolbar/index.d.ts.map +1 -1
  449. package/dist/features/toolbars/fixed/Toolbar/index.js.map +1 -1
  450. package/dist/features/toolbars/fixed/feature.client.d.ts +1 -2
  451. package/dist/features/toolbars/fixed/feature.client.d.ts.map +1 -1
  452. package/dist/features/toolbars/fixed/feature.client.js +9 -16
  453. package/dist/features/toolbars/fixed/feature.client.js.map +1 -1
  454. package/dist/features/toolbars/fixed/feature.server.d.ts +1 -2
  455. package/dist/features/toolbars/fixed/feature.server.d.ts.map +1 -1
  456. package/dist/features/toolbars/fixed/feature.server.js +16 -18
  457. package/dist/features/toolbars/fixed/feature.server.js.map +1 -1
  458. package/dist/features/toolbars/inline/Toolbar/index.d.ts +1 -1
  459. package/dist/features/toolbars/inline/Toolbar/index.d.ts.map +1 -1
  460. package/dist/features/toolbars/inline/Toolbar/index.js.map +1 -1
  461. package/dist/features/toolbars/inline/feature.client.d.ts +1 -2
  462. package/dist/features/toolbars/inline/feature.client.d.ts.map +1 -1
  463. package/dist/features/toolbars/inline/feature.client.js +9 -16
  464. package/dist/features/toolbars/inline/feature.client.js.map +1 -1
  465. package/dist/features/toolbars/inline/feature.server.d.ts +1 -2
  466. package/dist/features/toolbars/inline/feature.server.d.ts.map +1 -1
  467. package/dist/features/toolbars/inline/feature.server.js +8 -13
  468. package/dist/features/toolbars/inline/feature.server.js.map +1 -1
  469. package/dist/features/toolbars/shared/ToolbarButton/index.d.ts.map +1 -1
  470. package/dist/features/toolbars/shared/ToolbarButton/index.js.map +1 -1
  471. package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js.map +1 -1
  472. package/dist/features/toolbars/shared/ToolbarDropdown/index.d.ts.map +1 -1
  473. package/dist/features/toolbars/shared/ToolbarDropdown/index.js.map +1 -1
  474. package/dist/features/toolbars/types.d.ts +7 -2
  475. package/dist/features/toolbars/types.d.ts.map +1 -1
  476. package/dist/features/toolbars/types.js.map +1 -1
  477. package/dist/features/typeUtilities.d.ts +1 -1
  478. package/dist/features/typeUtilities.d.ts.map +1 -1
  479. package/dist/features/typeUtilities.js.map +1 -1
  480. package/dist/features/typesClient.d.ts +182 -0
  481. package/dist/features/typesClient.d.ts.map +1 -0
  482. package/dist/features/typesClient.js +3 -0
  483. package/dist/features/typesClient.js.map +1 -0
  484. package/dist/features/{types.d.ts → typesServer.d.ts} +15 -191
  485. package/dist/features/typesServer.d.ts.map +1 -0
  486. package/dist/features/typesServer.js +3 -0
  487. package/dist/features/typesServer.js.map +1 -0
  488. package/dist/features/upload/component/ExtraFieldsDrawer/index.js.map +1 -1
  489. package/dist/features/upload/component/index.d.ts.map +1 -1
  490. package/dist/features/upload/component/index.js +1 -1
  491. package/dist/features/upload/component/index.js.map +1 -1
  492. package/dist/features/upload/drawer/commands.js.map +1 -1
  493. package/dist/features/upload/drawer/index.d.ts.map +1 -1
  494. package/dist/features/upload/drawer/index.js.map +1 -1
  495. package/dist/features/upload/feature.client.d.ts +1 -2
  496. package/dist/features/upload/feature.client.d.ts.map +1 -1
  497. package/dist/features/upload/feature.client.js +62 -69
  498. package/dist/features/upload/feature.client.js.map +1 -1
  499. package/dist/features/upload/feature.server.d.ts +3 -4
  500. package/dist/features/upload/feature.server.d.ts.map +1 -1
  501. package/dist/features/upload/feature.server.js +166 -168
  502. package/dist/features/upload/feature.server.js.map +1 -1
  503. package/dist/features/upload/graphQLPopulationPromise.d.ts +1 -1
  504. package/dist/features/upload/graphQLPopulationPromise.d.ts.map +1 -1
  505. package/dist/features/upload/graphQLPopulationPromise.js.map +1 -1
  506. package/dist/features/upload/i18n.js.map +1 -1
  507. package/dist/features/upload/nodes/UploadNode.js.map +1 -1
  508. package/dist/features/upload/plugin/index.d.ts +1 -1
  509. package/dist/features/upload/plugin/index.d.ts.map +1 -1
  510. package/dist/features/upload/plugin/index.js.map +1 -1
  511. package/dist/features/upload/validate.d.ts +1 -1
  512. package/dist/features/upload/validate.d.ts.map +1 -1
  513. package/dist/features/upload/validate.js.map +1 -1
  514. package/dist/field/Field.d.ts.map +1 -1
  515. package/dist/field/Field.js.map +1 -1
  516. package/dist/field/index.d.ts.map +1 -1
  517. package/dist/field/index.js +9 -7
  518. package/dist/field/index.js.map +1 -1
  519. package/dist/i18n.js.map +1 -1
  520. package/dist/index.d.ts +9 -7
  521. package/dist/index.d.ts.map +1 -1
  522. package/dist/index.js +17 -17
  523. package/dist/index.js.map +1 -1
  524. package/dist/lexical/EditorPlugin.d.ts +1 -1
  525. package/dist/lexical/EditorPlugin.d.ts.map +1 -1
  526. package/dist/lexical/EditorPlugin.js.map +1 -1
  527. package/dist/lexical/LexicalEditor.js.map +1 -1
  528. package/dist/lexical/LexicalProvider.js.map +1 -1
  529. package/dist/lexical/config/client/EditorConfigProvider.d.ts.map +1 -1
  530. package/dist/lexical/config/client/EditorConfigProvider.js.map +1 -1
  531. package/dist/lexical/config/client/default.js.map +1 -1
  532. package/dist/lexical/config/client/loader.d.ts +1 -1
  533. package/dist/lexical/config/client/loader.d.ts.map +1 -1
  534. package/dist/lexical/config/client/loader.js +2 -2
  535. package/dist/lexical/config/client/loader.js.map +1 -1
  536. package/dist/lexical/config/client/sanitize.d.ts +1 -1
  537. package/dist/lexical/config/client/sanitize.d.ts.map +1 -1
  538. package/dist/lexical/config/client/sanitize.js +1 -1
  539. package/dist/lexical/config/client/sanitize.js.map +1 -1
  540. package/dist/lexical/config/server/default.d.ts +2 -2
  541. package/dist/lexical/config/server/default.d.ts.map +1 -1
  542. package/dist/lexical/config/server/default.js.map +1 -1
  543. package/dist/lexical/config/server/loader.d.ts +2 -2
  544. package/dist/lexical/config/server/loader.d.ts.map +1 -1
  545. package/dist/lexical/config/server/loader.js +2 -2
  546. package/dist/lexical/config/server/loader.js.map +1 -1
  547. package/dist/lexical/config/server/sanitize.d.ts +1 -1
  548. package/dist/lexical/config/server/sanitize.d.ts.map +1 -1
  549. package/dist/lexical/config/server/sanitize.js.map +1 -1
  550. package/dist/lexical/config/types.d.ts +4 -3
  551. package/dist/lexical/config/types.d.ts.map +1 -1
  552. package/dist/lexical/config/types.js.map +1 -1
  553. package/dist/lexical/nodes/index.js.map +1 -1
  554. package/dist/lexical/plugins/MarkdownShortcut/index.js.map +1 -1
  555. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js.map +1 -1
  556. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.js.map +1 -1
  557. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.d.ts +9 -1
  558. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.d.ts.map +1 -1
  559. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.js.map +1 -1
  560. package/dist/lexical/plugins/SlashMenu/index.js.map +1 -1
  561. package/dist/lexical/plugins/SlashMenu/useMenuTriggerMatch.js.map +1 -1
  562. package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.js.map +1 -1
  563. package/dist/lexical/plugins/handles/DraggableBlockPlugin/debounce.js.map +1 -1
  564. package/dist/lexical/plugins/handles/DraggableBlockPlugin/getBoundingRectWithoutTransform.js.map +1 -1
  565. package/dist/lexical/plugins/handles/DraggableBlockPlugin/highlightElemOriginalPosition.js.map +1 -1
  566. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js.map +1 -1
  567. package/dist/lexical/plugins/handles/DraggableBlockPlugin/setTargetLine.d.ts +0 -1
  568. package/dist/lexical/plugins/handles/DraggableBlockPlugin/setTargetLine.d.ts.map +1 -1
  569. package/dist/lexical/plugins/handles/DraggableBlockPlugin/setTargetLine.js.map +1 -1
  570. package/dist/lexical/plugins/handles/utils/calculateDistanceFromScrollerElem.js.map +1 -1
  571. package/dist/lexical/plugins/handles/utils/doesLineHeightAffectElement.js.map +1 -1
  572. package/dist/lexical/plugins/handles/utils/getCollapsedMargins.js.map +1 -1
  573. package/dist/lexical/plugins/handles/utils/getNodeCloseToPoint.js.map +1 -1
  574. package/dist/lexical/plugins/handles/utils/getTopLevelNodeKeys.js.map +1 -1
  575. package/dist/lexical/plugins/handles/utils/isOnHandleElement.js.map +1 -1
  576. package/dist/lexical/plugins/handles/utils/setHandlePosition.js.map +1 -1
  577. package/dist/lexical/theme/EditorTheme.js.map +1 -1
  578. package/dist/lexical/ui/ContentEditable.js.map +1 -1
  579. package/dist/lexical/ui/icons/AI/index.js.map +1 -1
  580. package/dist/lexical/ui/icons/Add/index.js.map +1 -1
  581. package/dist/lexical/ui/icons/AlignCenter/index.js.map +1 -1
  582. package/dist/lexical/ui/icons/AlignJustify/index.js.map +1 -1
  583. package/dist/lexical/ui/icons/AlignLeft/index.js.map +1 -1
  584. package/dist/lexical/ui/icons/AlignRight/index.js.map +1 -1
  585. package/dist/lexical/ui/icons/Block/index.js.map +1 -1
  586. package/dist/lexical/ui/icons/Blockquote/index.js.map +1 -1
  587. package/dist/lexical/ui/icons/Bold/index.js.map +1 -1
  588. package/dist/lexical/ui/icons/Checklist/index.js.map +1 -1
  589. package/dist/lexical/ui/icons/Code/index.js.map +1 -1
  590. package/dist/lexical/ui/icons/CodeBlock/index.js.map +1 -1
  591. package/dist/lexical/ui/icons/H1/index.js.map +1 -1
  592. package/dist/lexical/ui/icons/H2/index.js.map +1 -1
  593. package/dist/lexical/ui/icons/H3/index.js.map +1 -1
  594. package/dist/lexical/ui/icons/H4/index.js.map +1 -1
  595. package/dist/lexical/ui/icons/H5/index.js.map +1 -1
  596. package/dist/lexical/ui/icons/H6/index.js.map +1 -1
  597. package/dist/lexical/ui/icons/HorizontalRule/index.js.map +1 -1
  598. package/dist/lexical/ui/icons/IndentDecrease/index.js.map +1 -1
  599. package/dist/lexical/ui/icons/IndentIncrease/index.js.map +1 -1
  600. package/dist/lexical/ui/icons/Italic/index.js.map +1 -1
  601. package/dist/lexical/ui/icons/Link/index.js.map +1 -1
  602. package/dist/lexical/ui/icons/OrderedList/index.js.map +1 -1
  603. package/dist/lexical/ui/icons/Relationship/index.js.map +1 -1
  604. package/dist/lexical/ui/icons/Strikethrough/index.js.map +1 -1
  605. package/dist/lexical/ui/icons/Subscript/index.js.map +1 -1
  606. package/dist/lexical/ui/icons/Superscript/index.js.map +1 -1
  607. package/dist/lexical/ui/icons/Text/index.js.map +1 -1
  608. package/dist/lexical/ui/icons/Underline/index.js.map +1 -1
  609. package/dist/lexical/ui/icons/UnorderedList/index.js.map +1 -1
  610. package/dist/lexical/ui/icons/Upload/index.js.map +1 -1
  611. package/dist/lexical/utils/canUseDOM.js.map +1 -1
  612. package/dist/lexical/utils/cloneDeep.js.map +1 -1
  613. package/dist/lexical/utils/environment.js.map +1 -1
  614. package/dist/lexical/utils/getDOMRangeRect.js.map +1 -1
  615. package/dist/lexical/utils/getSelectedNode.js.map +1 -1
  616. package/dist/lexical/utils/guard.js.map +1 -1
  617. package/dist/lexical/utils/invariant.js.map +1 -1
  618. package/dist/lexical/utils/joinClasses.js.map +1 -1
  619. package/dist/lexical/utils/markdown/createBlockNode.d.ts +1 -1
  620. package/dist/lexical/utils/markdown/createBlockNode.d.ts.map +1 -1
  621. package/dist/lexical/utils/markdown/createBlockNode.js.map +1 -1
  622. package/dist/lexical/utils/nodeFormat.js.map +1 -1
  623. package/dist/lexical/utils/point.js.map +1 -1
  624. package/dist/lexical/utils/rect.js.map +1 -1
  625. package/dist/lexical/utils/setFloatingElemPosition.js.map +1 -1
  626. package/dist/lexical/utils/setFloatingElemPositionForLinkEditor.js.map +1 -1
  627. package/dist/lexical/utils/swipe.js.map +1 -1
  628. package/dist/lexical/utils/url.js.map +1 -1
  629. package/dist/populateGraphQL/defaultValue.js.map +1 -1
  630. package/dist/populateGraphQL/populate.d.ts.map +1 -1
  631. package/dist/populateGraphQL/populate.js.map +1 -1
  632. package/dist/populateGraphQL/populateLexicalPopulationPromises.d.ts +1 -1
  633. package/dist/populateGraphQL/populateLexicalPopulationPromises.d.ts.map +1 -1
  634. package/dist/populateGraphQL/populateLexicalPopulationPromises.js.map +1 -1
  635. package/dist/populateGraphQL/recursivelyPopulateFieldsForGraphQL.d.ts +1 -1
  636. package/dist/populateGraphQL/recursivelyPopulateFieldsForGraphQL.d.ts.map +1 -1
  637. package/dist/populateGraphQL/recursivelyPopulateFieldsForGraphQL.js.map +1 -1
  638. package/dist/types.d.ts +6 -6
  639. package/dist/types.d.ts.map +1 -1
  640. package/dist/types.js.map +1 -1
  641. package/dist/utilities/createClientFeature.d.ts +13 -0
  642. package/dist/utilities/createClientFeature.d.ts.map +1 -0
  643. package/dist/utilities/createClientFeature.js +30 -0
  644. package/dist/utilities/createClientFeature.js.map +1 -0
  645. package/dist/utilities/createServerFeature.d.ts +16 -0
  646. package/dist/utilities/createServerFeature.d.ts.map +1 -0
  647. package/dist/utilities/createServerFeature.js +34 -0
  648. package/dist/utilities/createServerFeature.js.map +1 -0
  649. package/dist/utilities/forEachNodeRecursively.js.map +1 -1
  650. package/dist/utilities/generateComponentMap.d.ts +2 -2
  651. package/dist/utilities/generateComponentMap.d.ts.map +1 -1
  652. package/dist/utilities/generateComponentMap.js +4 -4
  653. package/dist/utilities/generateComponentMap.js.map +1 -1
  654. package/dist/utilities/generateSchemaMap.d.ts +2 -2
  655. package/dist/utilities/generateSchemaMap.d.ts.map +1 -1
  656. package/dist/utilities/generateSchemaMap.js +1 -1
  657. package/dist/utilities/generateSchemaMap.js.map +1 -1
  658. package/dist/utilities/recurseNodeTree.js.map +1 -1
  659. package/dist/utilities/useLexicalFeature.d.ts +1 -1
  660. package/dist/utilities/useLexicalFeature.d.ts.map +1 -1
  661. package/dist/utilities/useLexicalFeature.js.map +1 -1
  662. package/dist/validate/index.js.map +1 -1
  663. package/dist/validate/validateNodes.d.ts +1 -1
  664. package/dist/validate/validateNodes.d.ts.map +1 -1
  665. package/dist/validate/validateNodes.js.map +1 -1
  666. package/package.json +10 -10
  667. package/dist/exports/client/Field-YMWNSE3A.js +0 -2
  668. package/dist/exports/client/Field-YMWNSE3A.js.map +0 -7
  669. package/dist/exports/client/chunk-ZITHDR53.js +0 -2
  670. package/dist/exports/client/chunk-ZITHDR53.js.map +0 -7
  671. package/dist/exports/client/component-E2NHAHBC.js.map +0 -7
  672. package/dist/exports/client/component-X4LSLSWF.js +0 -2
  673. package/dist/exports/client/component-X4LSLSWF.js.map +0 -7
  674. package/dist/features/types.d.ts.map +0 -1
  675. package/dist/features/types.js +0 -3
  676. package/dist/features/types.js.map +0 -1
  677. /package/dist/exports/client/{chunk-QU5MKT75.js.map → chunk-TZLHAUCW.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/features/link/i18n.ts"],"sourcesContent":["import type { GenericLanguages } from '@payloadcms/translations'\n\nexport const i18n: Partial<GenericLanguages> = {\n ar: {\n label: 'رابط',\n },\n az: {\n label: 'Keçid',\n },\n bg: {\n label: 'Връзка',\n },\n cs: {\n label: 'Odkaz',\n },\n de: {\n label: 'Verknüpfung',\n },\n en: {\n label: 'Link',\n },\n es: {\n label: 'Enlace',\n },\n fa: {\n label: 'پیوند',\n },\n fr: {\n label: 'Lien',\n },\n he: {\n label: 'קישור',\n },\n hr: {\n label: 'Poveznica',\n },\n hu: {\n label: 'Hivatkozás',\n },\n it: {\n label: 'Collegamento',\n },\n ja: {\n label: 'リンク',\n },\n ko: {\n label: '링크',\n },\n my: {\n label: 'လင့်',\n },\n nb: {\n label: 'Lenke',\n },\n nl: {\n label: 'Link',\n },\n pl: {\n label: 'Łącze',\n },\n pt: {\n label: 'Ligação',\n },\n ro: {\n label: 'Legătură',\n },\n rs: {\n label: 'Veza',\n },\n 'rs-latin': {\n label: 'Veza',\n },\n ru: {\n label: 'Ссылка',\n },\n sk: {\n label: 'Odkaz',\n },\n sv: {\n label: 'Länk',\n },\n th: {\n label: 'ลิงค์',\n },\n tr: {\n label: 'Bağlantı',\n },\n uk: {\n label: 'Посилання',\n },\n vi: {\n label: 'Liên kết',\n },\n zh: {\n label: '链接',\n },\n 'zh-TW': {\n label: '連結',\n },\n}\n"],"names":["i18n","ar","label","az","bg","cs","de","en","es","fa","fr","he","hr","hu","it","ja","ko","my","nb","nl","pl","pt","ro","rs","ru","sk","sv","th","tr","uk","vi","zh"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAEA,OAAO,MAAMA,OAAkC;IAC7CC,IAAI;QACFC,OAAO;IACT;IACAC,IAAI;QACFD,OAAO;IACT;IACAE,IAAI;QACFF,OAAO;IACT;IACAG,IAAI;QACFH,OAAO;IACT;IACAI,IAAI;QACFJ,OAAO;IACT;IACAK,IAAI;QACFL,OAAO;IACT;IACAM,IAAI;QACFN,OAAO;IACT;IACAO,IAAI;QACFP,OAAO;IACT;IACAQ,IAAI;QACFR,OAAO;IACT;IACAS,IAAI;QACFT,OAAO;IACT;IACAU,IAAI;QACFV,OAAO;IACT;IACAW,IAAI;QACFX,OAAO;IACT;IACAY,IAAI;QACFZ,OAAO;IACT;IACAa,IAAI;QACFb,OAAO;IACT;IACAc,IAAI;QACFd,OAAO;IACT;IACAe,IAAI;QACFf,OAAO;IACT;IACAgB,IAAI;QACFhB,OAAO;IACT;IACAiB,IAAI;QACFjB,OAAO;IACT;IACAkB,IAAI;QACFlB,OAAO;IACT;IACAmB,IAAI;QACFnB,OAAO;IACT;IACAoB,IAAI;QACFpB,OAAO;IACT;IACAqB,IAAI;QACFrB,OAAO;IACT;IACA,YAAY;QACVA,OAAO;IACT;IACAsB,IAAI;QACFtB,OAAO;IACT;IACAuB,IAAI;QACFvB,OAAO;IACT;IACAwB,IAAI;QACFxB,OAAO;IACT;IACAyB,IAAI;QACFzB,OAAO;IACT;IACA0B,IAAI;QACF1B,OAAO;IACT;IACA2B,IAAI;QACF3B,OAAO;IACT;IACA4B,IAAI;QACF5B,OAAO;IACT;IACA6B,IAAI;QACF7B,OAAO;IACT;IACA,SAAS;QACPA,OAAO;IACT;AACF,EAAC"}
1
+ {"version":3,"sources":["../../../src/features/link/i18n.ts"],"sourcesContent":["import type { GenericLanguages } from '@payloadcms/translations'\n\nexport const i18n: Partial<GenericLanguages> = {\n ar: {\n label: 'رابط',\n },\n az: {\n label: 'Keçid',\n },\n bg: {\n label: 'Връзка',\n },\n cs: {\n label: 'Odkaz',\n },\n de: {\n label: 'Verknüpfung',\n },\n en: {\n label: 'Link',\n },\n es: {\n label: 'Enlace',\n },\n fa: {\n label: 'پیوند',\n },\n fr: {\n label: 'Lien',\n },\n he: {\n label: 'קישור',\n },\n hr: {\n label: 'Poveznica',\n },\n hu: {\n label: 'Hivatkozás',\n },\n it: {\n label: 'Collegamento',\n },\n ja: {\n label: 'リンク',\n },\n ko: {\n label: '링크',\n },\n my: {\n label: 'လင့်',\n },\n nb: {\n label: 'Lenke',\n },\n nl: {\n label: 'Link',\n },\n pl: {\n label: 'Łącze',\n },\n pt: {\n label: 'Ligação',\n },\n ro: {\n label: 'Legătură',\n },\n rs: {\n label: 'Veza',\n },\n 'rs-latin': {\n label: 'Veza',\n },\n ru: {\n label: 'Ссылка',\n },\n sk: {\n label: 'Odkaz',\n },\n sv: {\n label: 'Länk',\n },\n th: {\n label: 'ลิงค์',\n },\n tr: {\n label: 'Bağlantı',\n },\n uk: {\n label: 'Посилання',\n },\n vi: {\n label: 'Liên kết',\n },\n zh: {\n label: '链接',\n },\n 'zh-TW': {\n label: '連結',\n },\n}\n"],"names":["i18n","ar","label","az","bg","cs","de","en","es","fa","fr","he","hr","hu","it","ja","ko","my","nb","nl","pl","pt","ro","rs","ru","sk","sv","th","tr","uk","vi","zh"],"mappings":"AAEA,OAAO,MAAMA,OAAkC;IAC7CC,IAAI;QACFC,OAAO;IACT;IACAC,IAAI;QACFD,OAAO;IACT;IACAE,IAAI;QACFF,OAAO;IACT;IACAG,IAAI;QACFH,OAAO;IACT;IACAI,IAAI;QACFJ,OAAO;IACT;IACAK,IAAI;QACFL,OAAO;IACT;IACAM,IAAI;QACFN,OAAO;IACT;IACAO,IAAI;QACFP,OAAO;IACT;IACAQ,IAAI;QACFR,OAAO;IACT;IACAS,IAAI;QACFT,OAAO;IACT;IACAU,IAAI;QACFV,OAAO;IACT;IACAW,IAAI;QACFX,OAAO;IACT;IACAY,IAAI;QACFZ,OAAO;IACT;IACAa,IAAI;QACFb,OAAO;IACT;IACAc,IAAI;QACFd,OAAO;IACT;IACAe,IAAI;QACFf,OAAO;IACT;IACAgB,IAAI;QACFhB,OAAO;IACT;IACAiB,IAAI;QACFjB,OAAO;IACT;IACAkB,IAAI;QACFlB,OAAO;IACT;IACAmB,IAAI;QACFnB,OAAO;IACT;IACAoB,IAAI;QACFpB,OAAO;IACT;IACAqB,IAAI;QACFrB,OAAO;IACT;IACA,YAAY;QACVA,OAAO;IACT;IACAsB,IAAI;QACFtB,OAAO;IACT;IACAuB,IAAI;QACFvB,OAAO;IACT;IACAwB,IAAI;QACFxB,OAAO;IACT;IACAyB,IAAI;QACFzB,OAAO;IACT;IACA0B,IAAI;QACF1B,OAAO;IACT;IACA2B,IAAI;QACF3B,OAAO;IACT;IACA4B,IAAI;QACF5B,OAAO;IACT;IACA6B,IAAI;QACF7B,OAAO;IACT;IACA,SAAS;QACPA,OAAO;IACT;AACF,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/features/link/markdownTransformer.ts"],"sourcesContent":["/**\n * Code taken from https://github.com/facebook/lexical/blob/main/packages/lexical-markdown/src/MarkdownTransformers.ts#L357\n */\n\n// Order of text transformers matters:\n//\n// - code should go first as it prevents any transformations inside\n\nimport type { TextMatchTransformer } from '@lexical/markdown'\n\nimport { $createTextNode, $isTextNode } from 'lexical'\n\nimport { $createLinkNode, $isLinkNode, LinkNode } from './nodes/LinkNode.js'\n\n// - then longer tags match (e.g. ** or __ should go before * or _)\nexport const LinkMarkdownTransformer: TextMatchTransformer = {\n type: 'text-match',\n dependencies: [LinkNode],\n export: (_node, exportChildren, exportFormat) => {\n if (!$isLinkNode(_node)) {\n return null\n }\n const node: LinkNode = _node\n const { url } = node.getFields()\n const linkContent = `[${node.getTextContent()}](${url})`\n const firstChild = node.getFirstChild()\n // Add text styles only if link has single text node inside. If it's more\n // then one we ignore it as markdown does not support nested styles for links\n if (node.getChildrenSize() === 1 && $isTextNode(firstChild)) {\n return exportFormat(firstChild, linkContent)\n } else {\n return linkContent\n }\n },\n importRegExp: /\\[([^[]+)\\]\\(([^()\\s]+)(?:\\s\"((?:[^\"]*\\\\\")*[^\"]*)\"\\s*)?\\)/,\n regExp: /\\[([^[]+)\\]\\(([^()\\s]+)(?:\\s\"((?:[^\"]*\\\\\")*[^\"]*)\"\\s*)?\\)$/,\n replace: (textNode, match) => {\n const [, linkText, linkUrl] = match\n const linkNode = $createLinkNode({\n fields: {\n doc: null,\n linkType: 'custom',\n newTab: false,\n url: linkUrl,\n },\n })\n const linkTextNode = $createTextNode(linkText)\n linkTextNode.setFormat(textNode.getFormat())\n linkNode.append(linkTextNode)\n textNode.replace(linkNode)\n },\n trigger: ')',\n}\n"],"names":["$createTextNode","$isTextNode","$createLinkNode","$isLinkNode","LinkNode","LinkMarkdownTransformer","type","dependencies","export","_node","exportChildren","exportFormat","node","url","getFields","linkContent","getTextContent","firstChild","getFirstChild","getChildrenSize","importRegExp","regExp","replace","textNode","match","linkText","linkUrl","linkNode","fields","doc","linkType","newTab","linkTextNode","setFormat","getFormat","append","trigger"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;;CAEC,GAED,sCAAsC;AACtC,EAAE;AACF,mEAAmE;AAInE,SAASA,eAAe,EAAEC,WAAW,QAAQ,UAAS;AAEtD,SAASC,eAAe,EAAEC,WAAW,EAAEC,QAAQ,QAAQ,sBAAqB;AAE5E,mEAAmE;AACnE,OAAO,MAAMC,0BAAgD;IAC3DC,MAAM;IACNC,cAAc;QAACH;KAAS;IACxBI,QAAQ,CAACC,OAAOC,gBAAgBC;QAC9B,IAAI,CAACR,YAAYM,QAAQ;YACvB,OAAO;QACT;QACA,MAAMG,OAAiBH;QACvB,MAAM,EAAEI,GAAG,EAAE,GAAGD,KAAKE,SAAS;QAC9B,MAAMC,cAAc,CAAC,CAAC,EAAEH,KAAKI,cAAc,GAAG,EAAE,EAAEH,IAAI,CAAC,CAAC;QACxD,MAAMI,aAAaL,KAAKM,aAAa;QACrC,yEAAyE;QACzE,6EAA6E;QAC7E,IAAIN,KAAKO,eAAe,OAAO,KAAKlB,YAAYgB,aAAa;YAC3D,OAAON,aAAaM,YAAYF;QAClC,OAAO;YACL,OAAOA;QACT;IACF;IACAK,cAAc;IACdC,QAAQ;IACRC,SAAS,CAACC,UAAUC;QAClB,MAAM,GAAGC,UAAUC,QAAQ,GAAGF;QAC9B,MAAMG,WAAWzB,gBAAgB;YAC/B0B,QAAQ;gBACNC,KAAK;gBACLC,UAAU;gBACVC,QAAQ;gBACRlB,KAAKa;YACP;QACF;QACA,MAAMM,eAAehC,gBAAgByB;QACrCO,aAAaC,SAAS,CAACV,SAASW,SAAS;QACzCP,SAASQ,MAAM,CAACH;QAChBT,SAASD,OAAO,CAACK;IACnB;IACAS,SAAS;AACX,EAAC"}
1
+ {"version":3,"sources":["../../../src/features/link/markdownTransformer.ts"],"sourcesContent":["/**\n * Code taken from https://github.com/facebook/lexical/blob/main/packages/lexical-markdown/src/MarkdownTransformers.ts#L357\n */\n\n// Order of text transformers matters:\n//\n// - code should go first as it prevents any transformations inside\n\nimport type { TextMatchTransformer } from '@lexical/markdown'\n\nimport { $createTextNode, $isTextNode } from 'lexical'\n\nimport { $createLinkNode, $isLinkNode, LinkNode } from './nodes/LinkNode.js'\n\n// - then longer tags match (e.g. ** or __ should go before * or _)\nexport const LinkMarkdownTransformer: TextMatchTransformer = {\n type: 'text-match',\n dependencies: [LinkNode],\n export: (_node, exportChildren, exportFormat) => {\n if (!$isLinkNode(_node)) {\n return null\n }\n const node: LinkNode = _node\n const { url } = node.getFields()\n const linkContent = `[${node.getTextContent()}](${url})`\n const firstChild = node.getFirstChild()\n // Add text styles only if link has single text node inside. If it's more\n // then one we ignore it as markdown does not support nested styles for links\n if (node.getChildrenSize() === 1 && $isTextNode(firstChild)) {\n return exportFormat(firstChild, linkContent)\n } else {\n return linkContent\n }\n },\n importRegExp: /\\[([^[]+)\\]\\(([^()\\s]+)(?:\\s\"((?:[^\"]*\\\\\")*[^\"]*)\"\\s*)?\\)/,\n regExp: /\\[([^[]+)\\]\\(([^()\\s]+)(?:\\s\"((?:[^\"]*\\\\\")*[^\"]*)\"\\s*)?\\)$/,\n replace: (textNode, match) => {\n const [, linkText, linkUrl] = match\n const linkNode = $createLinkNode({\n fields: {\n doc: null,\n linkType: 'custom',\n newTab: false,\n url: linkUrl,\n },\n })\n const linkTextNode = $createTextNode(linkText)\n linkTextNode.setFormat(textNode.getFormat())\n linkNode.append(linkTextNode)\n textNode.replace(linkNode)\n },\n trigger: ')',\n}\n"],"names":["$createTextNode","$isTextNode","$createLinkNode","$isLinkNode","LinkNode","LinkMarkdownTransformer","type","dependencies","export","_node","exportChildren","exportFormat","node","url","getFields","linkContent","getTextContent","firstChild","getFirstChild","getChildrenSize","importRegExp","regExp","replace","textNode","match","linkText","linkUrl","linkNode","fields","doc","linkType","newTab","linkTextNode","setFormat","getFormat","append","trigger"],"mappings":"AAAA;;CAEC,GAED,sCAAsC;AACtC,EAAE;AACF,mEAAmE;AAInE,SAASA,eAAe,EAAEC,WAAW,QAAQ,UAAS;AAEtD,SAASC,eAAe,EAAEC,WAAW,EAAEC,QAAQ,QAAQ,sBAAqB;AAE5E,mEAAmE;AACnE,OAAO,MAAMC,0BAAgD;IAC3DC,MAAM;IACNC,cAAc;QAACH;KAAS;IACxBI,QAAQ,CAACC,OAAOC,gBAAgBC;QAC9B,IAAI,CAACR,YAAYM,QAAQ;YACvB,OAAO;QACT;QACA,MAAMG,OAAiBH;QACvB,MAAM,EAAEI,GAAG,EAAE,GAAGD,KAAKE,SAAS;QAC9B,MAAMC,cAAc,CAAC,CAAC,EAAEH,KAAKI,cAAc,GAAG,EAAE,EAAEH,IAAI,CAAC,CAAC;QACxD,MAAMI,aAAaL,KAAKM,aAAa;QACrC,yEAAyE;QACzE,6EAA6E;QAC7E,IAAIN,KAAKO,eAAe,OAAO,KAAKlB,YAAYgB,aAAa;YAC3D,OAAON,aAAaM,YAAYF;QAClC,OAAO;YACL,OAAOA;QACT;IACF;IACAK,cAAc;IACdC,QAAQ;IACRC,SAAS,CAACC,UAAUC;QAClB,MAAM,GAAGC,UAAUC,QAAQ,GAAGF;QAC9B,MAAMG,WAAWzB,gBAAgB;YAC/B0B,QAAQ;gBACNC,KAAK;gBACLC,UAAU;gBACVC,QAAQ;gBACRlB,KAAKa;YACP;QACF;QACA,MAAMM,eAAehC,gBAAgByB;QACrCO,aAAaC,SAAS,CAACV,SAASW,SAAS;QACzCP,SAASQ,MAAM,CAACH;QAChBT,SAASD,OAAO,CAACK;IACnB;IACAS,SAAS;AACX,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"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 exportJSON(): SerializedAutoLinkNode {\n return {\n ...super.exportJSON(),\n type: 'autolink',\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"],"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","type","insertNewAfter","selection","restoreSelection","element","getParentOrThrow","linkNode","append","$isAutoLinkNode"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAEA,SAASA,qBAAqB,EAAEC,cAAc,QAAQ,UAAS;AAI/D,SAASC,QAAQ,QAAQ,gBAAe;AAExC,8DAA8D;AAC9D,+BAA+B;AAE/B,OAAO,MAAMC,qBAAqBD;IAChC,OAAOE,MAAMC,IAAkB,EAAgB;QAC7C,OAAO,IAAIF,aAAa;YAAEG,IAAIC;YAAWC,QAAQH,KAAKI,QAAQ;YAAEC,KAAKL,KAAKM,KAAK;QAAC;IAClF;IAEA,OAAOC,UAAkB;QACvB,OAAO;IACT;IAEA,OAAOC,YAAkB;QACvB,iEAAiE;QACjE,OAAO;IACT;IAEA,OAAOC,WAAWC,cAAsC,EAAgB;QACtE,IACEA,eAAeC,OAAO,KAAK,KAC3B,OAAOD,eAAeP,MAAM,EAAES,KAAKC,UAAU,YAC7CH,eAAeP,MAAM,EAAES,KAAKC,OAAOZ,IACnC;YACAS,eAAeP,MAAM,CAACS,GAAG,CAACC,KAAK,GAAGH,eAAeP,MAAM,CAACS,GAAG,CAACC,KAAK,CAACZ,EAAE;YACpES,eAAeC,OAAO,GAAG;QAC3B;QAEA,MAAMX,OAAOc,oBAAoB;YAAEX,QAAQO,eAAeP,MAAM;QAAC;QAEjEH,KAAKe,SAAS,CAACL,eAAeM,MAAM;QACpChB,KAAKiB,SAAS,CAACP,eAAeQ,MAAM;QACpClB,KAAKmB,YAAY,CAACT,eAAeU,SAAS;QAC1C,OAAOpB;IACT;IAEAqB,aAAqC;QACnC,OAAO;YACL,GAAG,KAAK,CAACA,YAAY;YACrBC,MAAM;YACNX,SAAS;QACX;IACF;IAEAY,eAAeC,SAAyB,EAAEC,mBAAmB,IAAI,EAAsB;QACrF,MAAMC,UAAU,IAAI,CAACC,gBAAgB,GAAGJ,cAAc,CAACC,WAAWC;QAClE,IAAI7B,eAAe8B,UAAU;YAC3B,MAAME,WAAWd,oBAAoB;gBAAEX,QAAQ,IAAI,CAACC,QAAQ;YAAC;YAC7DsB,QAAQG,MAAM,CAACD;YACf,OAAOA;QACT;QACA,OAAO;IACT;AACF;AAEA,OAAO,SAASd,oBAAoB,EAAEX,MAAM,EAA0B;IACpE,OAAOR,sBAAsB,IAAIG,aAAa;QAAEG,IAAIC;QAAWC;IAAO;AACxE;AACA,OAAO,SAAS2B,gBAAgB9B,IAAoC;IAClE,OAAOA,gBAAgBF;AACzB"}
1
+ {"version":3,"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 exportJSON(): SerializedAutoLinkNode {\n return {\n ...super.exportJSON(),\n type: 'autolink',\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"],"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","type","insertNewAfter","selection","restoreSelection","element","getParentOrThrow","linkNode","append","$isAutoLinkNode"],"mappings":"AAEA,SAASA,qBAAqB,EAAEC,cAAc,QAAQ,UAAS;AAI/D,SAASC,QAAQ,QAAQ,gBAAe;AAExC,8DAA8D;AAC9D,+BAA+B;AAE/B,OAAO,MAAMC,qBAAqBD;IAChC,OAAOE,MAAMC,IAAkB,EAAgB;QAC7C,OAAO,IAAIF,aAAa;YAAEG,IAAIC;YAAWC,QAAQH,KAAKI,QAAQ;YAAEC,KAAKL,KAAKM,KAAK;QAAC;IAClF;IAEA,OAAOC,UAAkB;QACvB,OAAO;IACT;IAEA,OAAOC,YAAkB;QACvB,iEAAiE;QACjE,OAAO;IACT;IAEA,OAAOC,WAAWC,cAAsC,EAAgB;QACtE,IACEA,eAAeC,OAAO,KAAK,KAC3B,OAAOD,eAAeP,MAAM,EAAES,KAAKC,UAAU,YAC7CH,eAAeP,MAAM,EAAES,KAAKC,OAAOZ,IACnC;YACAS,eAAeP,MAAM,CAACS,GAAG,CAACC,KAAK,GAAGH,eAAeP,MAAM,CAACS,GAAG,CAACC,KAAK,CAACZ,EAAE;YACpES,eAAeC,OAAO,GAAG;QAC3B;QAEA,MAAMX,OAAOc,oBAAoB;YAAEX,QAAQO,eAAeP,MAAM;QAAC;QAEjEH,KAAKe,SAAS,CAACL,eAAeM,MAAM;QACpChB,KAAKiB,SAAS,CAACP,eAAeQ,MAAM;QACpClB,KAAKmB,YAAY,CAACT,eAAeU,SAAS;QAC1C,OAAOpB;IACT;IAEAqB,aAAqC;QACnC,OAAO;YACL,GAAG,KAAK,CAACA,YAAY;YACrBC,MAAM;YACNX,SAAS;QACX;IACF;IAEAY,eAAeC,SAAyB,EAAEC,mBAAmB,IAAI,EAAsB;QACrF,MAAMC,UAAU,IAAI,CAACC,gBAAgB,GAAGJ,cAAc,CAACC,WAAWC;QAClE,IAAI7B,eAAe8B,UAAU;YAC3B,MAAME,WAAWd,oBAAoB;gBAAEX,QAAQ,IAAI,CAACC,QAAQ;YAAC;YAC7DsB,QAAQG,MAAM,CAACD;YACf,OAAOA;QACT;QACA,OAAO;IACT;AACF;AAEA,OAAO,SAASd,oBAAoB,EAAEX,MAAM,EAA0B;IACpE,OAAOR,sBAAsB,IAAIG,aAAa;QAAEG,IAAIC;QAAWC;IAAO;AACxE;AACA,OAAO,SAAS2B,gBAAgB9B,IAAoC;IAClE,OAAOA,gBAAgBF;AACzB"}
@@ -1 +1 @@
1
- {"version":3,"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 '../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: this.getType(),\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 // eslint-disable-next-line no-script-url\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"],"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"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"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 '../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: this.getType(),\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 // eslint-disable-next-line no-script-url\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"],"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"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/features/link/nodes/types.ts"],"sourcesContent":["import type { SerializedElementNode, Spread } from 'lexical'\n\nexport type LinkFields = {\n // unknown, custom fields:\n [key: string]: unknown\n doc: {\n relationTo: string\n value:\n | {\n // Actual doc data, populated in afterRead hook\n [key: string]: unknown\n id: string\n }\n | string\n } | null\n linkType: 'custom' | 'internal'\n newTab: boolean\n url: string\n}\n\nexport type SerializedLinkNode = Spread<\n {\n fields: LinkFields\n id?: string // optional if AutoLinkNode\n },\n SerializedElementNode\n>\nexport type SerializedAutoLinkNode = Omit<SerializedLinkNode, 'id'>\n"],"names":[],"rangeMappings":"","mappings":"AA2BA,WAAmE"}
1
+ {"version":3,"sources":["../../../../src/features/link/nodes/types.ts"],"sourcesContent":["import type { SerializedElementNode, Spread } from 'lexical'\n\nexport type LinkFields = {\n // unknown, custom fields:\n [key: string]: unknown\n doc: {\n relationTo: string\n value:\n | {\n // Actual doc data, populated in afterRead hook\n [key: string]: unknown\n id: string\n }\n | string\n } | null\n linkType: 'custom' | 'internal'\n newTab: boolean\n url: string\n}\n\nexport type SerializedLinkNode = Spread<\n {\n fields: LinkFields\n id?: string // optional if AutoLinkNode\n },\n SerializedElementNode\n>\nexport type SerializedAutoLinkNode = Omit<SerializedLinkNode, 'id'>\n"],"names":[],"mappings":"AA2BA,WAAmE"}
@@ -1,4 +1,4 @@
1
- import type { PluginComponent } from '../../../types.js';
1
+ import type { PluginComponent } from '../../../typesClient.js';
2
2
  import type { ClientProps } from '../../feature.client.js';
3
3
  import type { LinkFields } from '../../nodes/types.js';
4
4
  interface LinkMatcherResult {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/link/plugins/autoLink/index.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAQtD,UAAU,iBAAiB;IACzB,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,iBAAiB,GAAG,IAAI,CAAA;AAEpE,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,MAAM,EACd,cAAc,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAuB,UAE3C,MAAM;;;;;EAUrB;AA8XD,eAAO,MAAM,cAAc,EAAE,eAAe,CAAC,WAAW,CAMvD,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/link/plugins/autoLink/index.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAQtD,UAAU,iBAAiB;IACzB,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,iBAAiB,GAAG,IAAI,CAAA;AAEpE,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,MAAM,EACd,cAAc,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAuB,UAE3C,MAAM;;;;;EAUrB;AA8XD,eAAO,MAAM,cAAc,EAAE,eAAe,CAAC,WAAW,CAMvD,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/features/link/plugins/autoLink/index.tsx"],"sourcesContent":["'use client'\nimport type { ElementNode, LexicalEditor, LexicalNode } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { mergeRegister } from '@lexical/utils'\nimport {\n $createTextNode,\n $getSelection,\n $isElementNode,\n $isLineBreakNode,\n $isNodeSelection,\n $isRangeSelection,\n $isTextNode,\n type TextNode,\n TextNode as TextNodeValue,\n} from 'lexical'\nimport { useEffect } from 'react'\n\nimport type { PluginComponent } from '../../../types.js'\nimport type { ClientProps } from '../../feature.client.js'\nimport type { LinkFields } from '../../nodes/types.js'\n\nimport { invariant } from '../../../../lexical/utils/invariant.js'\nimport { $createAutoLinkNode, $isAutoLinkNode, AutoLinkNode } from '../../nodes/AutoLinkNode.js'\nimport { $isLinkNode } from '../../nodes/LinkNode.js'\n\ntype ChangeHandler = (url: null | string, prevUrl: null | string) => void\n\ninterface LinkMatcherResult {\n fields?: LinkFields\n index: number\n length: number\n text: string\n url: string\n}\n\nexport type LinkMatcher = (text: string) => LinkMatcherResult | null\n\nexport function createLinkMatcherWithRegExp(\n regExp: RegExp,\n urlTransformer: (text: string) => string = (text) => text,\n) {\n return (text: string) => {\n const match = regExp.exec(text)\n if (match === null) return null\n return {\n index: match.index,\n length: match[0].length,\n text: match[0],\n url: urlTransformer(match[0]),\n }\n }\n}\n\nfunction findFirstMatch(text: string, matchers: LinkMatcher[]): LinkMatcherResult | null {\n for (let i = 0; i < matchers.length; i++) {\n const match = matchers[i](text)\n\n if (match != null) {\n return match\n }\n }\n\n return null\n}\n\nconst PUNCTUATION_OR_SPACE = /[.,;\\s]/\n\nfunction isSeparator(char: string): boolean {\n return PUNCTUATION_OR_SPACE.test(char)\n}\n\nfunction endsWithSeparator(textContent: string): boolean {\n return isSeparator(textContent[textContent.length - 1])\n}\n\nfunction startsWithSeparator(textContent: string): boolean {\n return isSeparator(textContent[0])\n}\n\nfunction isPreviousNodeValid(node: LexicalNode): boolean {\n let previousNode = node.getPreviousSibling()\n if ($isElementNode(previousNode)) {\n previousNode = previousNode.getLastDescendant()\n }\n return (\n previousNode === null ||\n $isLineBreakNode(previousNode) ||\n ($isTextNode(previousNode) && endsWithSeparator(previousNode.getTextContent()))\n )\n}\n\nfunction isNextNodeValid(node: LexicalNode): boolean {\n let nextNode = node.getNextSibling()\n if ($isElementNode(nextNode)) {\n nextNode = nextNode.getFirstDescendant()\n }\n return (\n nextNode === null ||\n $isLineBreakNode(nextNode) ||\n ($isTextNode(nextNode) && startsWithSeparator(nextNode.getTextContent()))\n )\n}\n\nfunction isContentAroundIsValid(\n matchStart: number,\n matchEnd: number,\n text: string,\n nodes: TextNode[],\n): boolean {\n const contentBeforeIsValid =\n matchStart > 0 ? isSeparator(text[matchStart - 1]) : isPreviousNodeValid(nodes[0])\n if (!contentBeforeIsValid) {\n return false\n }\n\n const contentAfterIsValid =\n matchEnd < text.length ? isSeparator(text[matchEnd]) : isNextNodeValid(nodes[nodes.length - 1])\n return contentAfterIsValid\n}\n\nfunction extractMatchingNodes(\n nodes: TextNode[],\n startIndex: number,\n endIndex: number,\n): [\n matchingOffset: number,\n unmodifiedBeforeNodes: TextNode[],\n matchingNodes: TextNode[],\n unmodifiedAfterNodes: TextNode[],\n] {\n const unmodifiedBeforeNodes: TextNode[] = []\n const matchingNodes: TextNode[] = []\n const unmodifiedAfterNodes: TextNode[] = []\n let matchingOffset = 0\n\n let currentOffset = 0\n const currentNodes = [...nodes]\n\n while (currentNodes.length > 0) {\n const currentNode = currentNodes[0]\n const currentNodeText = currentNode.getTextContent()\n const currentNodeLength = currentNodeText.length\n const currentNodeStart = currentOffset\n const currentNodeEnd = currentOffset + currentNodeLength\n\n if (currentNodeEnd <= startIndex) {\n unmodifiedBeforeNodes.push(currentNode)\n matchingOffset += currentNodeLength\n } else if (currentNodeStart >= endIndex) {\n unmodifiedAfterNodes.push(currentNode)\n } else {\n matchingNodes.push(currentNode)\n }\n currentOffset += currentNodeLength\n currentNodes.shift()\n }\n return [matchingOffset, unmodifiedBeforeNodes, matchingNodes, unmodifiedAfterNodes]\n}\n\nfunction $createAutoLinkNode_(\n nodes: TextNode[],\n startIndex: number,\n endIndex: number,\n match: LinkMatcherResult,\n): TextNode | undefined {\n const fields: LinkFields = {\n linkType: 'custom',\n url: match.url,\n ...match.fields,\n }\n\n const linkNode = $createAutoLinkNode({ fields })\n if (nodes.length === 1) {\n let remainingTextNode = nodes[0]\n let linkTextNode\n if (startIndex === 0) {\n ;[linkTextNode, remainingTextNode] = remainingTextNode.splitText(endIndex)\n } else {\n ;[, linkTextNode, remainingTextNode] = remainingTextNode.splitText(startIndex, endIndex)\n }\n const textNode = $createTextNode(match.text)\n textNode.setFormat(linkTextNode.getFormat())\n textNode.setDetail(linkTextNode.getDetail())\n textNode.setStyle(linkTextNode.getStyle())\n linkNode.append(textNode)\n linkTextNode.replace(linkNode)\n return remainingTextNode\n } else if (nodes.length > 1) {\n const firstTextNode = nodes[0]\n let offset = firstTextNode.getTextContent().length\n let firstLinkTextNode\n if (startIndex === 0) {\n firstLinkTextNode = firstTextNode\n } else {\n ;[, firstLinkTextNode] = firstTextNode.splitText(startIndex)\n }\n const linkNodes = []\n let remainingTextNode\n for (let i = 1; i < nodes.length; i++) {\n const currentNode = nodes[i]\n const currentNodeText = currentNode.getTextContent()\n const currentNodeLength = currentNodeText.length\n const currentNodeStart = offset\n const currentNodeEnd = offset + currentNodeLength\n if (currentNodeStart < endIndex) {\n if (currentNodeEnd <= endIndex) {\n linkNodes.push(currentNode)\n } else {\n const [linkTextNode, endNode] = currentNode.splitText(endIndex - currentNodeStart)\n linkNodes.push(linkTextNode)\n remainingTextNode = endNode\n }\n }\n offset += currentNodeLength\n }\n const selection = $getSelection()\n const selectedTextNode = selection ? selection.getNodes().find($isTextNode) : undefined\n const textNode = $createTextNode(firstLinkTextNode.getTextContent())\n textNode.setFormat(firstLinkTextNode.getFormat())\n textNode.setDetail(firstLinkTextNode.getDetail())\n textNode.setStyle(firstLinkTextNode.getStyle())\n linkNode.append(textNode, ...linkNodes)\n // it does not preserve caret position if caret was at the first text node\n // so we need to restore caret position\n if (selectedTextNode && selectedTextNode === firstLinkTextNode) {\n if ($isRangeSelection(selection)) {\n textNode.select(selection.anchor.offset, selection.focus.offset)\n } else if ($isNodeSelection(selection)) {\n textNode.select(0, textNode.getTextContent().length)\n }\n }\n firstLinkTextNode.replace(linkNode)\n return remainingTextNode\n }\n return undefined\n}\n\nfunction $handleLinkCreation(\n nodes: TextNode[],\n matchers: LinkMatcher[],\n onChange: ChangeHandler,\n): void {\n let currentNodes = [...nodes]\n const initialText = currentNodes.map((node) => node.getTextContent()).join('')\n let text = initialText\n\n let match\n let invalidMatchEnd = 0\n\n while ((match = findFirstMatch(text, matchers)) != null && match !== null) {\n const matchStart: number = match.index\n const matchLength: number = match.length\n const matchEnd = matchStart + matchLength\n const isValid = isContentAroundIsValid(\n invalidMatchEnd + matchStart,\n invalidMatchEnd + matchEnd,\n initialText,\n currentNodes,\n )\n\n if (isValid) {\n const [matchingOffset, , matchingNodes, unmodifiedAfterNodes] = extractMatchingNodes(\n currentNodes,\n invalidMatchEnd + matchStart,\n invalidMatchEnd + matchEnd,\n )\n\n const actualMatchStart = invalidMatchEnd + matchStart - matchingOffset\n const actualMatchEnd = invalidMatchEnd + matchEnd - matchingOffset\n const remainingTextNode = $createAutoLinkNode_(\n matchingNodes,\n actualMatchStart,\n actualMatchEnd,\n match,\n )\n currentNodes = remainingTextNode\n ? [remainingTextNode, ...unmodifiedAfterNodes]\n : unmodifiedAfterNodes\n onChange(match.url, null)\n invalidMatchEnd = 0\n } else {\n invalidMatchEnd += matchEnd\n }\n\n text = text.substring(matchEnd)\n }\n}\n\nfunction handleLinkEdit(\n linkNode: AutoLinkNode,\n matchers: LinkMatcher[],\n onChange: ChangeHandler,\n): void {\n // Check children are simple text\n const children = linkNode.getChildren()\n const childrenLength = children.length\n for (let i = 0; i < childrenLength; i++) {\n const child = children[i]\n if (!$isTextNode(child) || !child.isSimpleText()) {\n replaceWithChildren(linkNode)\n onChange(null, linkNode.getFields()?.url ?? null)\n return\n }\n }\n\n // Check text content fully matches\n const text = linkNode.getTextContent()\n const match = findFirstMatch(text, matchers)\n if (match === null || match.text !== text) {\n replaceWithChildren(linkNode)\n onChange(null, linkNode.getFields()?.url ?? null)\n return\n }\n\n // Check neighbors\n if (!isPreviousNodeValid(linkNode) || !isNextNodeValid(linkNode)) {\n replaceWithChildren(linkNode)\n onChange(null, linkNode.getFields()?.url ?? null)\n return\n }\n\n const url = linkNode.getFields()?.url\n if (url !== match?.url) {\n const flds = linkNode.getFields()\n flds.url = match?.url\n linkNode.setFields(flds)\n onChange(match.url, url ?? null)\n }\n}\n\n// Bad neighbors are edits in neighbor nodes that make AutoLinks incompatible.\n// Given the creation preconditions, these can only be simple text nodes.\nfunction handleBadNeighbors(\n textNode: TextNode,\n matchers: LinkMatcher[],\n onChange: ChangeHandler,\n): void {\n const previousSibling = textNode.getPreviousSibling()\n const nextSibling = textNode.getNextSibling()\n const text = textNode.getTextContent()\n\n if ($isAutoLinkNode(previousSibling) && !startsWithSeparator(text)) {\n previousSibling.append(textNode)\n handleLinkEdit(previousSibling, matchers, onChange)\n onChange(null, previousSibling.getFields()?.url ?? null)\n }\n\n if ($isAutoLinkNode(nextSibling) && !endsWithSeparator(text)) {\n replaceWithChildren(nextSibling)\n handleLinkEdit(nextSibling, matchers, onChange)\n onChange(null, nextSibling.getFields()?.url ?? null)\n }\n}\n\nfunction replaceWithChildren(node: ElementNode): LexicalNode[] {\n const children = node.getChildren()\n const childrenLength = children.length\n\n for (let j = childrenLength - 1; j >= 0; j--) {\n node.insertAfter(children[j])\n }\n\n node.remove()\n return children.map((child) => child.getLatest())\n}\n\nfunction getTextNodesToMatch(textNode: TextNode): TextNode[] {\n // check if next siblings are simple text nodes till a node contains a space separator\n const textNodesToMatch = [textNode]\n let nextSibling = textNode.getNextSibling()\n while (nextSibling !== null && $isTextNode(nextSibling) && nextSibling.isSimpleText()) {\n textNodesToMatch.push(nextSibling)\n if (/\\s/.test(nextSibling.getTextContent())) {\n break\n }\n nextSibling = nextSibling.getNextSibling()\n }\n return textNodesToMatch\n}\n\nfunction useAutoLink(\n editor: LexicalEditor,\n matchers: LinkMatcher[],\n onChange?: ChangeHandler,\n): void {\n useEffect(() => {\n if (!editor.hasNodes([AutoLinkNode])) {\n invariant(false, 'LexicalAutoLinkPlugin: AutoLinkNode not registered on editor')\n }\n\n const onChangeWrapped = (url: null | string, prevUrl: null | string): void => {\n if (onChange != null) {\n onChange(url, prevUrl)\n }\n }\n\n return mergeRegister(\n editor.registerNodeTransform(TextNodeValue, (textNode: TextNode) => {\n const parent = textNode.getParentOrThrow()\n const previous = textNode.getPreviousSibling()\n if ($isAutoLinkNode(parent)) {\n handleLinkEdit(parent, matchers, onChangeWrapped)\n } else if (!$isLinkNode(parent)) {\n if (\n textNode.isSimpleText() &&\n (startsWithSeparator(textNode.getTextContent()) || !$isAutoLinkNode(previous))\n ) {\n const textNodesToMatch = getTextNodesToMatch(textNode)\n $handleLinkCreation(textNodesToMatch, matchers, onChangeWrapped)\n }\n\n handleBadNeighbors(textNode, matchers, onChangeWrapped)\n }\n }),\n )\n }, [editor, matchers, onChange])\n}\n\nconst URL_REGEX =\n /((https?:\\/\\/(www\\.)?)|(www\\.))[-\\w@:%.+~#=]{1,256}\\.[a-zA-Z\\d()]{1,6}\\b([-\\w()@:%+.~#?&/=]*)/\n\nconst EMAIL_REGEX =\n /(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\])|(([a-z\\-\\d]+\\.)+[a-z]{2,}))/i\n\nconst MATCHERS = [\n createLinkMatcherWithRegExp(URL_REGEX, (text) => {\n return text.startsWith('http') ? text : `https://${text}`\n }),\n createLinkMatcherWithRegExp(EMAIL_REGEX, (text) => {\n return `mailto:${text}`\n }),\n]\n\nexport const AutoLinkPlugin: PluginComponent<ClientProps> = () => {\n const [editor] = useLexicalComposerContext()\n\n useAutoLink(editor, MATCHERS)\n\n return null\n}\n"],"names":["useLexicalComposerContext","mergeRegister","$createTextNode","$getSelection","$isElementNode","$isLineBreakNode","$isNodeSelection","$isRangeSelection","$isTextNode","TextNode","TextNodeValue","useEffect","invariant","$createAutoLinkNode","$isAutoLinkNode","AutoLinkNode","$isLinkNode","createLinkMatcherWithRegExp","regExp","urlTransformer","text","match","exec","index","length","url","findFirstMatch","matchers","i","PUNCTUATION_OR_SPACE","isSeparator","char","test","endsWithSeparator","textContent","startsWithSeparator","isPreviousNodeValid","node","previousNode","getPreviousSibling","getLastDescendant","getTextContent","isNextNodeValid","nextNode","getNextSibling","getFirstDescendant","isContentAroundIsValid","matchStart","matchEnd","nodes","contentBeforeIsValid","contentAfterIsValid","extractMatchingNodes","startIndex","endIndex","unmodifiedBeforeNodes","matchingNodes","unmodifiedAfterNodes","matchingOffset","currentOffset","currentNodes","currentNode","currentNodeText","currentNodeLength","currentNodeStart","currentNodeEnd","push","shift","$createAutoLinkNode_","fields","linkType","linkNode","remainingTextNode","linkTextNode","splitText","textNode","setFormat","getFormat","setDetail","getDetail","setStyle","getStyle","append","replace","firstTextNode","offset","firstLinkTextNode","linkNodes","endNode","selection","selectedTextNode","getNodes","find","undefined","select","anchor","focus","$handleLinkCreation","onChange","initialText","map","join","invalidMatchEnd","matchLength","isValid","actualMatchStart","actualMatchEnd","substring","handleLinkEdit","children","getChildren","childrenLength","child","isSimpleText","replaceWithChildren","getFields","flds","setFields","handleBadNeighbors","previousSibling","nextSibling","j","insertAfter","remove","getLatest","getTextNodesToMatch","textNodesToMatch","useAutoLink","editor","hasNodes","onChangeWrapped","prevUrl","registerNodeTransform","parent","getParentOrThrow","previous","URL_REGEX","EMAIL_REGEX","MATCHERS","startsWith","AutoLinkPlugin"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["../../../../../src/features/link/plugins/autoLink/index.tsx"],"sourcesContent":["'use client'\nimport type { ElementNode, LexicalEditor, LexicalNode } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { mergeRegister } from '@lexical/utils'\nimport {\n $createTextNode,\n $getSelection,\n $isElementNode,\n $isLineBreakNode,\n $isNodeSelection,\n $isRangeSelection,\n $isTextNode,\n type TextNode,\n TextNode as TextNodeValue,\n} from 'lexical'\nimport { useEffect } from 'react'\n\nimport type { PluginComponent } from '../../../typesClient.js'\nimport type { ClientProps } from '../../feature.client.js'\nimport type { LinkFields } from '../../nodes/types.js'\n\nimport { invariant } from '../../../../lexical/utils/invariant.js'\nimport { $createAutoLinkNode, $isAutoLinkNode, AutoLinkNode } from '../../nodes/AutoLinkNode.js'\nimport { $isLinkNode } from '../../nodes/LinkNode.js'\n\ntype ChangeHandler = (url: null | string, prevUrl: null | string) => void\n\ninterface LinkMatcherResult {\n fields?: LinkFields\n index: number\n length: number\n text: string\n url: string\n}\n\nexport type LinkMatcher = (text: string) => LinkMatcherResult | null\n\nexport function createLinkMatcherWithRegExp(\n regExp: RegExp,\n urlTransformer: (text: string) => string = (text) => text,\n) {\n return (text: string) => {\n const match = regExp.exec(text)\n if (match === null) return null\n return {\n index: match.index,\n length: match[0].length,\n text: match[0],\n url: urlTransformer(match[0]),\n }\n }\n}\n\nfunction findFirstMatch(text: string, matchers: LinkMatcher[]): LinkMatcherResult | null {\n for (let i = 0; i < matchers.length; i++) {\n const match = matchers[i](text)\n\n if (match != null) {\n return match\n }\n }\n\n return null\n}\n\nconst PUNCTUATION_OR_SPACE = /[.,;\\s]/\n\nfunction isSeparator(char: string): boolean {\n return PUNCTUATION_OR_SPACE.test(char)\n}\n\nfunction endsWithSeparator(textContent: string): boolean {\n return isSeparator(textContent[textContent.length - 1])\n}\n\nfunction startsWithSeparator(textContent: string): boolean {\n return isSeparator(textContent[0])\n}\n\nfunction isPreviousNodeValid(node: LexicalNode): boolean {\n let previousNode = node.getPreviousSibling()\n if ($isElementNode(previousNode)) {\n previousNode = previousNode.getLastDescendant()\n }\n return (\n previousNode === null ||\n $isLineBreakNode(previousNode) ||\n ($isTextNode(previousNode) && endsWithSeparator(previousNode.getTextContent()))\n )\n}\n\nfunction isNextNodeValid(node: LexicalNode): boolean {\n let nextNode = node.getNextSibling()\n if ($isElementNode(nextNode)) {\n nextNode = nextNode.getFirstDescendant()\n }\n return (\n nextNode === null ||\n $isLineBreakNode(nextNode) ||\n ($isTextNode(nextNode) && startsWithSeparator(nextNode.getTextContent()))\n )\n}\n\nfunction isContentAroundIsValid(\n matchStart: number,\n matchEnd: number,\n text: string,\n nodes: TextNode[],\n): boolean {\n const contentBeforeIsValid =\n matchStart > 0 ? isSeparator(text[matchStart - 1]) : isPreviousNodeValid(nodes[0])\n if (!contentBeforeIsValid) {\n return false\n }\n\n const contentAfterIsValid =\n matchEnd < text.length ? isSeparator(text[matchEnd]) : isNextNodeValid(nodes[nodes.length - 1])\n return contentAfterIsValid\n}\n\nfunction extractMatchingNodes(\n nodes: TextNode[],\n startIndex: number,\n endIndex: number,\n): [\n matchingOffset: number,\n unmodifiedBeforeNodes: TextNode[],\n matchingNodes: TextNode[],\n unmodifiedAfterNodes: TextNode[],\n] {\n const unmodifiedBeforeNodes: TextNode[] = []\n const matchingNodes: TextNode[] = []\n const unmodifiedAfterNodes: TextNode[] = []\n let matchingOffset = 0\n\n let currentOffset = 0\n const currentNodes = [...nodes]\n\n while (currentNodes.length > 0) {\n const currentNode = currentNodes[0]\n const currentNodeText = currentNode.getTextContent()\n const currentNodeLength = currentNodeText.length\n const currentNodeStart = currentOffset\n const currentNodeEnd = currentOffset + currentNodeLength\n\n if (currentNodeEnd <= startIndex) {\n unmodifiedBeforeNodes.push(currentNode)\n matchingOffset += currentNodeLength\n } else if (currentNodeStart >= endIndex) {\n unmodifiedAfterNodes.push(currentNode)\n } else {\n matchingNodes.push(currentNode)\n }\n currentOffset += currentNodeLength\n currentNodes.shift()\n }\n return [matchingOffset, unmodifiedBeforeNodes, matchingNodes, unmodifiedAfterNodes]\n}\n\nfunction $createAutoLinkNode_(\n nodes: TextNode[],\n startIndex: number,\n endIndex: number,\n match: LinkMatcherResult,\n): TextNode | undefined {\n const fields: LinkFields = {\n linkType: 'custom',\n url: match.url,\n ...match.fields,\n }\n\n const linkNode = $createAutoLinkNode({ fields })\n if (nodes.length === 1) {\n let remainingTextNode = nodes[0]\n let linkTextNode\n if (startIndex === 0) {\n ;[linkTextNode, remainingTextNode] = remainingTextNode.splitText(endIndex)\n } else {\n ;[, linkTextNode, remainingTextNode] = remainingTextNode.splitText(startIndex, endIndex)\n }\n const textNode = $createTextNode(match.text)\n textNode.setFormat(linkTextNode.getFormat())\n textNode.setDetail(linkTextNode.getDetail())\n textNode.setStyle(linkTextNode.getStyle())\n linkNode.append(textNode)\n linkTextNode.replace(linkNode)\n return remainingTextNode\n } else if (nodes.length > 1) {\n const firstTextNode = nodes[0]\n let offset = firstTextNode.getTextContent().length\n let firstLinkTextNode\n if (startIndex === 0) {\n firstLinkTextNode = firstTextNode\n } else {\n ;[, firstLinkTextNode] = firstTextNode.splitText(startIndex)\n }\n const linkNodes = []\n let remainingTextNode\n for (let i = 1; i < nodes.length; i++) {\n const currentNode = nodes[i]\n const currentNodeText = currentNode.getTextContent()\n const currentNodeLength = currentNodeText.length\n const currentNodeStart = offset\n const currentNodeEnd = offset + currentNodeLength\n if (currentNodeStart < endIndex) {\n if (currentNodeEnd <= endIndex) {\n linkNodes.push(currentNode)\n } else {\n const [linkTextNode, endNode] = currentNode.splitText(endIndex - currentNodeStart)\n linkNodes.push(linkTextNode)\n remainingTextNode = endNode\n }\n }\n offset += currentNodeLength\n }\n const selection = $getSelection()\n const selectedTextNode = selection ? selection.getNodes().find($isTextNode) : undefined\n const textNode = $createTextNode(firstLinkTextNode.getTextContent())\n textNode.setFormat(firstLinkTextNode.getFormat())\n textNode.setDetail(firstLinkTextNode.getDetail())\n textNode.setStyle(firstLinkTextNode.getStyle())\n linkNode.append(textNode, ...linkNodes)\n // it does not preserve caret position if caret was at the first text node\n // so we need to restore caret position\n if (selectedTextNode && selectedTextNode === firstLinkTextNode) {\n if ($isRangeSelection(selection)) {\n textNode.select(selection.anchor.offset, selection.focus.offset)\n } else if ($isNodeSelection(selection)) {\n textNode.select(0, textNode.getTextContent().length)\n }\n }\n firstLinkTextNode.replace(linkNode)\n return remainingTextNode\n }\n return undefined\n}\n\nfunction $handleLinkCreation(\n nodes: TextNode[],\n matchers: LinkMatcher[],\n onChange: ChangeHandler,\n): void {\n let currentNodes = [...nodes]\n const initialText = currentNodes.map((node) => node.getTextContent()).join('')\n let text = initialText\n\n let match\n let invalidMatchEnd = 0\n\n while ((match = findFirstMatch(text, matchers)) != null && match !== null) {\n const matchStart: number = match.index\n const matchLength: number = match.length\n const matchEnd = matchStart + matchLength\n const isValid = isContentAroundIsValid(\n invalidMatchEnd + matchStart,\n invalidMatchEnd + matchEnd,\n initialText,\n currentNodes,\n )\n\n if (isValid) {\n const [matchingOffset, , matchingNodes, unmodifiedAfterNodes] = extractMatchingNodes(\n currentNodes,\n invalidMatchEnd + matchStart,\n invalidMatchEnd + matchEnd,\n )\n\n const actualMatchStart = invalidMatchEnd + matchStart - matchingOffset\n const actualMatchEnd = invalidMatchEnd + matchEnd - matchingOffset\n const remainingTextNode = $createAutoLinkNode_(\n matchingNodes,\n actualMatchStart,\n actualMatchEnd,\n match,\n )\n currentNodes = remainingTextNode\n ? [remainingTextNode, ...unmodifiedAfterNodes]\n : unmodifiedAfterNodes\n onChange(match.url, null)\n invalidMatchEnd = 0\n } else {\n invalidMatchEnd += matchEnd\n }\n\n text = text.substring(matchEnd)\n }\n}\n\nfunction handleLinkEdit(\n linkNode: AutoLinkNode,\n matchers: LinkMatcher[],\n onChange: ChangeHandler,\n): void {\n // Check children are simple text\n const children = linkNode.getChildren()\n const childrenLength = children.length\n for (let i = 0; i < childrenLength; i++) {\n const child = children[i]\n if (!$isTextNode(child) || !child.isSimpleText()) {\n replaceWithChildren(linkNode)\n onChange(null, linkNode.getFields()?.url ?? null)\n return\n }\n }\n\n // Check text content fully matches\n const text = linkNode.getTextContent()\n const match = findFirstMatch(text, matchers)\n if (match === null || match.text !== text) {\n replaceWithChildren(linkNode)\n onChange(null, linkNode.getFields()?.url ?? null)\n return\n }\n\n // Check neighbors\n if (!isPreviousNodeValid(linkNode) || !isNextNodeValid(linkNode)) {\n replaceWithChildren(linkNode)\n onChange(null, linkNode.getFields()?.url ?? null)\n return\n }\n\n const url = linkNode.getFields()?.url\n if (url !== match?.url) {\n const flds = linkNode.getFields()\n flds.url = match?.url\n linkNode.setFields(flds)\n onChange(match.url, url ?? null)\n }\n}\n\n// Bad neighbors are edits in neighbor nodes that make AutoLinks incompatible.\n// Given the creation preconditions, these can only be simple text nodes.\nfunction handleBadNeighbors(\n textNode: TextNode,\n matchers: LinkMatcher[],\n onChange: ChangeHandler,\n): void {\n const previousSibling = textNode.getPreviousSibling()\n const nextSibling = textNode.getNextSibling()\n const text = textNode.getTextContent()\n\n if ($isAutoLinkNode(previousSibling) && !startsWithSeparator(text)) {\n previousSibling.append(textNode)\n handleLinkEdit(previousSibling, matchers, onChange)\n onChange(null, previousSibling.getFields()?.url ?? null)\n }\n\n if ($isAutoLinkNode(nextSibling) && !endsWithSeparator(text)) {\n replaceWithChildren(nextSibling)\n handleLinkEdit(nextSibling, matchers, onChange)\n onChange(null, nextSibling.getFields()?.url ?? null)\n }\n}\n\nfunction replaceWithChildren(node: ElementNode): LexicalNode[] {\n const children = node.getChildren()\n const childrenLength = children.length\n\n for (let j = childrenLength - 1; j >= 0; j--) {\n node.insertAfter(children[j])\n }\n\n node.remove()\n return children.map((child) => child.getLatest())\n}\n\nfunction getTextNodesToMatch(textNode: TextNode): TextNode[] {\n // check if next siblings are simple text nodes till a node contains a space separator\n const textNodesToMatch = [textNode]\n let nextSibling = textNode.getNextSibling()\n while (nextSibling !== null && $isTextNode(nextSibling) && nextSibling.isSimpleText()) {\n textNodesToMatch.push(nextSibling)\n if (/\\s/.test(nextSibling.getTextContent())) {\n break\n }\n nextSibling = nextSibling.getNextSibling()\n }\n return textNodesToMatch\n}\n\nfunction useAutoLink(\n editor: LexicalEditor,\n matchers: LinkMatcher[],\n onChange?: ChangeHandler,\n): void {\n useEffect(() => {\n if (!editor.hasNodes([AutoLinkNode])) {\n invariant(false, 'LexicalAutoLinkPlugin: AutoLinkNode not registered on editor')\n }\n\n const onChangeWrapped = (url: null | string, prevUrl: null | string): void => {\n if (onChange != null) {\n onChange(url, prevUrl)\n }\n }\n\n return mergeRegister(\n editor.registerNodeTransform(TextNodeValue, (textNode: TextNode) => {\n const parent = textNode.getParentOrThrow()\n const previous = textNode.getPreviousSibling()\n if ($isAutoLinkNode(parent)) {\n handleLinkEdit(parent, matchers, onChangeWrapped)\n } else if (!$isLinkNode(parent)) {\n if (\n textNode.isSimpleText() &&\n (startsWithSeparator(textNode.getTextContent()) || !$isAutoLinkNode(previous))\n ) {\n const textNodesToMatch = getTextNodesToMatch(textNode)\n $handleLinkCreation(textNodesToMatch, matchers, onChangeWrapped)\n }\n\n handleBadNeighbors(textNode, matchers, onChangeWrapped)\n }\n }),\n )\n }, [editor, matchers, onChange])\n}\n\nconst URL_REGEX =\n /((https?:\\/\\/(www\\.)?)|(www\\.))[-\\w@:%.+~#=]{1,256}\\.[a-zA-Z\\d()]{1,6}\\b([-\\w()@:%+.~#?&/=]*)/\n\nconst EMAIL_REGEX =\n /(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\])|(([a-z\\-\\d]+\\.)+[a-z]{2,}))/i\n\nconst MATCHERS = [\n createLinkMatcherWithRegExp(URL_REGEX, (text) => {\n return text.startsWith('http') ? text : `https://${text}`\n }),\n createLinkMatcherWithRegExp(EMAIL_REGEX, (text) => {\n return `mailto:${text}`\n }),\n]\n\nexport const AutoLinkPlugin: PluginComponent<ClientProps> = () => {\n const [editor] = useLexicalComposerContext()\n\n useAutoLink(editor, MATCHERS)\n\n return null\n}\n"],"names":["useLexicalComposerContext","mergeRegister","$createTextNode","$getSelection","$isElementNode","$isLineBreakNode","$isNodeSelection","$isRangeSelection","$isTextNode","TextNode","TextNodeValue","useEffect","invariant","$createAutoLinkNode","$isAutoLinkNode","AutoLinkNode","$isLinkNode","createLinkMatcherWithRegExp","regExp","urlTransformer","text","match","exec","index","length","url","findFirstMatch","matchers","i","PUNCTUATION_OR_SPACE","isSeparator","char","test","endsWithSeparator","textContent","startsWithSeparator","isPreviousNodeValid","node","previousNode","getPreviousSibling","getLastDescendant","getTextContent","isNextNodeValid","nextNode","getNextSibling","getFirstDescendant","isContentAroundIsValid","matchStart","matchEnd","nodes","contentBeforeIsValid","contentAfterIsValid","extractMatchingNodes","startIndex","endIndex","unmodifiedBeforeNodes","matchingNodes","unmodifiedAfterNodes","matchingOffset","currentOffset","currentNodes","currentNode","currentNodeText","currentNodeLength","currentNodeStart","currentNodeEnd","push","shift","$createAutoLinkNode_","fields","linkType","linkNode","remainingTextNode","linkTextNode","splitText","textNode","setFormat","getFormat","setDetail","getDetail","setStyle","getStyle","append","replace","firstTextNode","offset","firstLinkTextNode","linkNodes","endNode","selection","selectedTextNode","getNodes","find","undefined","select","anchor","focus","$handleLinkCreation","onChange","initialText","map","join","invalidMatchEnd","matchLength","isValid","actualMatchStart","actualMatchEnd","substring","handleLinkEdit","children","getChildren","childrenLength","child","isSimpleText","replaceWithChildren","getFields","flds","setFields","handleBadNeighbors","previousSibling","nextSibling","j","insertAfter","remove","getLatest","getTextNodesToMatch","textNodesToMatch","useAutoLink","editor","hasNodes","onChangeWrapped","prevUrl","registerNodeTransform","parent","getParentOrThrow","previous","URL_REGEX","EMAIL_REGEX","MATCHERS","startsWith","AutoLinkPlugin"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { PluginComponent } from '../../../types.js';
1
+ import type { PluginComponent } from '../../../typesClient.js';
2
2
  import type { ClientProps } from '../../feature.client.js';
3
3
  export declare const ClickableLinkPlugin: PluginComponent<ClientProps>;
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/link/plugins/clickableLink/index.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAE1D,eAAO,MAAM,mBAAmB,EAAE,eAAe,CAAC,WAAW,CAE5D,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/link/plugins/clickableLink/index.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAE1D,eAAO,MAAM,mBAAmB,EAAE,eAAe,CAAC,WAAW,CAE5D,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/features/link/plugins/clickableLink/index.tsx"],"sourcesContent":["'use client'\nimport { ClickableLinkPlugin as LexicalClickableLinkPlugin } from '@lexical/react/LexicalClickableLinkPlugin.js'\nimport React from 'react'\n\nimport type { PluginComponent } from '../../../types.js'\nimport type { ClientProps } from '../../feature.client.js'\n\nexport const ClickableLinkPlugin: PluginComponent<ClientProps> = () => {\n return <LexicalClickableLinkPlugin />\n}\n"],"names":["ClickableLinkPlugin","LexicalClickableLinkPlugin","React"],"rangeMappings":";;;;;;","mappings":"AAAA;;AACA,SAASA,uBAAuBC,0BAA0B,QAAQ,+CAA8C;AAChH,OAAOC,WAAW,QAAO;AAKzB,OAAO,MAAMF,sBAAoD;IAC/D,qBAAO,KAACC;AACV,EAAC"}
1
+ {"version":3,"sources":["../../../../../src/features/link/plugins/clickableLink/index.tsx"],"sourcesContent":["'use client'\nimport { ClickableLinkPlugin as LexicalClickableLinkPlugin } from '@lexical/react/LexicalClickableLinkPlugin.js'\nimport React from 'react'\n\nimport type { PluginComponent } from '../../../typesClient.js'\nimport type { ClientProps } from '../../feature.client.js'\n\nexport const ClickableLinkPlugin: PluginComponent<ClientProps> = () => {\n return <LexicalClickableLinkPlugin />\n}\n"],"names":["ClickableLinkPlugin","LexicalClickableLinkPlugin","React"],"mappings":"AAAA;;AACA,SAASA,uBAAuBC,0BAA0B,QAAQ,+CAA8C;AAChH,OAAOC,WAAW,QAAO;AAKzB,OAAO,MAAMF,sBAAoD;IAC/D,qBAAO,KAACC;AACV,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/features/link/plugins/floatingLinkEditor/LinkEditor/commands.ts"],"sourcesContent":["import type { LexicalCommand } from 'lexical'\n\nimport { createCommand } from 'lexical'\n\nimport type { LinkPayload } from '../types.js'\n\nexport const TOGGLE_LINK_WITH_MODAL_COMMAND: LexicalCommand<LinkPayload | null> = createCommand(\n 'TOGGLE_LINK_WITH_MODAL_COMMAND',\n)\n"],"names":["createCommand","TOGGLE_LINK_WITH_MODAL_COMMAND"],"rangeMappings":";","mappings":"AAEA,SAASA,aAAa,QAAQ,UAAS;AAIvC,OAAO,MAAMC,iCAAqED,cAChF,kCACD"}
1
+ {"version":3,"sources":["../../../../../../src/features/link/plugins/floatingLinkEditor/LinkEditor/commands.ts"],"sourcesContent":["import type { LexicalCommand } from 'lexical'\n\nimport { createCommand } from 'lexical'\n\nimport type { LinkPayload } from '../types.js'\n\nexport const TOGGLE_LINK_WITH_MODAL_COMMAND: LexicalCommand<LinkPayload | null> = createCommand(\n 'TOGGLE_LINK_WITH_MODAL_COMMAND',\n)\n"],"names":["createCommand","TOGGLE_LINK_WITH_MODAL_COMMAND"],"mappings":"AAEA,SAASA,aAAa,QAAQ,UAAS;AAIvC,OAAO,MAAMC,iCAAqED,cAChF,kCACD"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/features/link/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 { formatDrawerSlug, useConfig, useEditDepth, useModal, useTranslation } 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 { LinkDrawer } from '../../../drawer/index.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<{} | (LinkFields & { id?: string; text: string })>({})\n\n const { closeModal, isModalOpen, 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({})\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: LinkFields & { text: string } = {\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 {!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 )}\n </React.Fragment>\n )}\n </div>\n </div>\n {isModalOpen(drawerSlug) && (\n <LinkDrawer\n drawerSlug={drawerSlug}\n handleModalSubmit={(fields: FormState, data: Data) => {\n closeModal(drawerSlug)\n\n const newLinkPayload = data as LinkFields & { text: string }\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 stateData={stateData}\n />\n )}\n </React.Fragment>\n )\n}\n"],"names":["useLexicalComposerContext","$findMatchingParent","mergeRegister","getTranslation","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","LinkDrawer","$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","isModalOpen","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","Fragment","div","ref","length","a","href","rel","target","span","isEditable","button","aria-label","onClick","onMouseDown","event","preventDefault","tabIndex","type","handleModalSubmit","fields","newLinkPayload","bareLinkFields","linkParent","getParent"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../src/features/link/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 { formatDrawerSlug, useConfig, useEditDepth, useModal, useTranslation } 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 { LinkDrawer } from '../../../drawer/index.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<{} | (LinkFields & { id?: string; text: string })>({})\n\n const { closeModal, isModalOpen, 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({})\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: LinkFields & { text: string } = {\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 {!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 )}\n </React.Fragment>\n )}\n </div>\n </div>\n {isModalOpen(drawerSlug) && (\n <LinkDrawer\n drawerSlug={drawerSlug}\n handleModalSubmit={(fields: FormState, data: Data) => {\n closeModal(drawerSlug)\n\n const newLinkPayload = data as LinkFields & { text: string }\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 stateData={stateData}\n />\n )}\n </React.Fragment>\n )\n}\n"],"names":["useLexicalComposerContext","$findMatchingParent","mergeRegister","getTranslation","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","LinkDrawer","$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","isModalOpen","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","Fragment","div","ref","length","a","href","rel","target","span","isEditable","button","aria-label","onClick","onMouseDown","event","preventDefault","tabIndex","type","handleModalSubmit","fields","newLinkPayload","bareLinkFields","linkParent","getParent"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { PluginComponentWithAnchor } from '../../../types.js';
1
+ import type { PluginComponentWithAnchor } from '../../../typesClient.js';
2
2
  import type { ClientProps } from '../../feature.client.js';
3
3
  import './index.scss';
4
4
  export declare const FloatingLinkEditorPlugin: PluginComponentWithAnchor<ClientProps>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/link/plugins/floatingLinkEditor/index.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAA;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAG1D,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/plugins/floatingLinkEditor/index.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAA;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAG1D,OAAO,cAAc,CAAA;AAErB,eAAO,MAAM,wBAAwB,EAAE,yBAAyB,CAAC,WAAW,CAI3E,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/features/link/plugins/floatingLinkEditor/index.tsx"],"sourcesContent":["'use client'\nimport * as React from 'react'\nimport { createPortal } from 'react-dom'\n\nimport type { PluginComponentWithAnchor } from '../../../types.js'\nimport type { ClientProps } from '../../feature.client.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"],"names":["React","createPortal","LinkEditor","FloatingLinkEditorPlugin","props","anchorElem","document","body"],"rangeMappings":";;;;;;;;;;","mappings":"AAAA;;AACA,YAAYA,WAAW,QAAO;AAC9B,SAASC,YAAY,QAAQ,YAAW;AAKxC,SAASC,UAAU,QAAQ,wBAAuB;AAGlD,OAAO,MAAMC,2BAAmE,CAACC;IAC/E,MAAM,EAAEC,aAAaC,SAASC,IAAI,EAAE,GAAGH;IAEvC,qBAAOH,2BAAa,KAACC;QAAWG,YAAYA;QAAgBA;AAC9D,EAAC"}
1
+ {"version":3,"sources":["../../../../../src/features/link/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 '../../feature.client.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"],"names":["React","createPortal","LinkEditor","FloatingLinkEditorPlugin","props","anchorElem","document","body"],"mappings":"AAAA;;AACA,YAAYA,WAAW,QAAO;AAC9B,SAASC,YAAY,QAAQ,YAAW;AAKxC,SAASC,UAAU,QAAQ,wBAAuB;AAGlD,OAAO,MAAMC,2BAAmE,CAACC;IAC/E,MAAM,EAAEC,aAAaC,SAASC,IAAI,EAAE,GAAGH;IAEvC,qBAAOH,2BAAa,KAACC;QAAWG,YAAYA;QAAgBA;AAC9D,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/features/link/plugins/floatingLinkEditor/types.ts"],"sourcesContent":["import type { LexicalNode } from 'lexical'\n\nimport type { LinkFields } from '../../nodes/types.js'\n\n/**\n * The payload of a link node\n * This can be delivered from the link node to the drawer, or from the drawer/anything to the TOGGLE_LINK_COMMAND\n */\nexport type LinkPayload = {\n fields: LinkFields\n selectedNodes?: LexicalNode[]\n /**\n * The text content of the link node - will be displayed in the drawer\n */\n text: null | string\n}\n"],"names":[],"rangeMappings":";;;","mappings":"AAIA;;;CAGC,GACD,WAOC"}
1
+ {"version":3,"sources":["../../../../../src/features/link/plugins/floatingLinkEditor/types.ts"],"sourcesContent":["import type { LexicalNode } from 'lexical'\n\nimport type { LinkFields } from '../../nodes/types.js'\n\n/**\n * The payload of a link node\n * This can be delivered from the link node to the drawer, or from the drawer/anything to the TOGGLE_LINK_COMMAND\n */\nexport type LinkPayload = {\n fields: LinkFields\n selectedNodes?: LexicalNode[]\n /**\n * The text content of the link node - will be displayed in the drawer\n */\n text: null | string\n}\n"],"names":[],"mappings":"AAIA;;;CAGC,GACD,WAOC"}
@@ -1,9 +1,9 @@
1
- import type { Field, FieldAffectingData, SanitizedConfig } from 'payload';
1
+ import type { CollectionSlug, Field, FieldAffectingData, SanitizedConfig } from 'payload';
2
2
  /**
3
3
  * This function is run to enrich the basefields which every link has with potential, custom user-added fields.
4
4
  */
5
5
  export declare function transformExtraFields(customFieldSchema: ((args: {
6
6
  config: SanitizedConfig;
7
7
  defaultFields: FieldAffectingData[];
8
- }) => Field[]) | Field[], config: SanitizedConfig, enabledCollections?: false | string[], disabledCollections?: false | string[], maxDepth?: number): Field[];
8
+ }) => Field[]) | Field[], config: SanitizedConfig, enabledCollections?: CollectionSlug[], disabledCollections?: CollectionSlug[], maxDepth?: number): Field[];
9
9
  //# sourceMappingURL=utilities.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../../../../../src/features/link/plugins/floatingLinkEditor/utilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAIzE;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,iBAAiB,EACb,CAAC,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,eAAe,CAAC;IAAC,aAAa,EAAE,kBAAkB,EAAE,CAAA;CAAE,KAAK,KAAK,EAAE,CAAC,GACrF,KAAK,EAAE,EACX,MAAM,EAAE,eAAe,EACvB,kBAAkB,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,EACrC,mBAAmB,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,EACtC,QAAQ,CAAC,EAAE,MAAM,GAChB,KAAK,EAAE,CAmBT"}
1
+ {"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../../../../../src/features/link/plugins/floatingLinkEditor/utilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAIzF;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,iBAAiB,EACb,CAAC,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,eAAe,CAAC;IAAC,aAAa,EAAE,kBAAkB,EAAE,CAAA;CAAE,KAAK,KAAK,EAAE,CAAC,GACrF,KAAK,EAAE,EACX,MAAM,EAAE,eAAe,EACvB,kBAAkB,CAAC,EAAE,cAAc,EAAE,EACrC,mBAAmB,CAAC,EAAE,cAAc,EAAE,EACtC,QAAQ,CAAC,EAAE,MAAM,GAChB,KAAK,EAAE,CAmBT"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/features/link/plugins/floatingLinkEditor/utilities.ts"],"sourcesContent":["import type { Field, FieldAffectingData, SanitizedConfig } from 'payload'\n\nimport { getBaseFields } from '../../drawer/baseFields.js'\n\n/**\n * This function is run to enrich the basefields which every link has with potential, custom user-added fields.\n */\nexport function transformExtraFields(\n customFieldSchema:\n | ((args: { config: SanitizedConfig; defaultFields: FieldAffectingData[] }) => Field[])\n | Field[],\n config: SanitizedConfig,\n enabledCollections?: false | string[],\n disabledCollections?: false | string[],\n maxDepth?: number,\n): Field[] {\n const baseFields: FieldAffectingData[] = getBaseFields(\n config,\n enabledCollections,\n disabledCollections,\n maxDepth,\n )\n\n let fields: Field[]\n\n if (typeof customFieldSchema === 'function') {\n fields = customFieldSchema({ config, defaultFields: baseFields })\n } else if (Array.isArray(customFieldSchema)) {\n fields = customFieldSchema\n } else {\n fields = baseFields as Field[]\n }\n\n return fields\n}\n"],"names":["getBaseFields","transformExtraFields","customFieldSchema","config","enabledCollections","disabledCollections","maxDepth","baseFields","fields","defaultFields","Array","isArray"],"rangeMappings":";;;;;;;;;;;;;;;;;","mappings":"AAEA,SAASA,aAAa,QAAQ,6BAA4B;AAE1D;;CAEC,GACD,OAAO,SAASC,qBACdC,iBAEW,EACXC,MAAuB,EACvBC,kBAAqC,EACrCC,mBAAsC,EACtCC,QAAiB;IAEjB,MAAMC,aAAmCP,cACvCG,QACAC,oBACAC,qBACAC;IAGF,IAAIE;IAEJ,IAAI,OAAON,sBAAsB,YAAY;QAC3CM,SAASN,kBAAkB;YAAEC;YAAQM,eAAeF;QAAW;IACjE,OAAO,IAAIG,MAAMC,OAAO,CAACT,oBAAoB;QAC3CM,SAASN;IACX,OAAO;QACLM,SAASD;IACX;IAEA,OAAOC;AACT"}
1
+ {"version":3,"sources":["../../../../../src/features/link/plugins/floatingLinkEditor/utilities.ts"],"sourcesContent":["import type { CollectionSlug, Field, FieldAffectingData, SanitizedConfig } from 'payload'\n\nimport { getBaseFields } from '../../drawer/baseFields.js'\n\n/**\n * This function is run to enrich the basefields which every link has with potential, custom user-added fields.\n */\nexport function transformExtraFields(\n customFieldSchema:\n | ((args: { config: SanitizedConfig; defaultFields: FieldAffectingData[] }) => Field[])\n | Field[],\n config: SanitizedConfig,\n enabledCollections?: CollectionSlug[],\n disabledCollections?: CollectionSlug[],\n maxDepth?: number,\n): Field[] {\n const baseFields: FieldAffectingData[] = getBaseFields(\n config,\n enabledCollections,\n disabledCollections,\n maxDepth,\n )\n\n let fields: Field[]\n\n if (typeof customFieldSchema === 'function') {\n fields = customFieldSchema({ config, defaultFields: baseFields })\n } else if (Array.isArray(customFieldSchema)) {\n fields = customFieldSchema\n } else {\n fields = baseFields as Field[]\n }\n\n return fields\n}\n"],"names":["getBaseFields","transformExtraFields","customFieldSchema","config","enabledCollections","disabledCollections","maxDepth","baseFields","fields","defaultFields","Array","isArray"],"mappings":"AAEA,SAASA,aAAa,QAAQ,6BAA4B;AAE1D;;CAEC,GACD,OAAO,SAASC,qBACdC,iBAEW,EACXC,MAAuB,EACvBC,kBAAqC,EACrCC,mBAAsC,EACtCC,QAAiB;IAEjB,MAAMC,aAAmCP,cACvCG,QACAC,oBACAC,qBACAC;IAGF,IAAIE;IAEJ,IAAI,OAAON,sBAAsB,YAAY;QAC3CM,SAASN,kBAAkB;YAAEC;YAAQM,eAAeF;QAAW;IACjE,OAAO,IAAIG,MAAMC,OAAO,CAACT,oBAAoB;QAC3CM,SAASN;IACX,OAAO;QACLM,SAASD;IACX;IAEA,OAAOC;AACT"}
@@ -1,4 +1,4 @@
1
- import type { PluginComponent } from '../../../types.js';
1
+ import type { PluginComponent } from '../../../typesClient.js';
2
2
  import type { ClientProps } from '../../feature.client.js';
3
3
  export declare const LinkPlugin: PluginComponent<ClientProps>;
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/link/plugins/link/index.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAO1D,eAAO,MAAM,UAAU,EAAE,eAAe,CAAC,WAAW,CA2DnD,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/link/plugins/link/index.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAO1D,eAAO,MAAM,UAAU,EAAE,eAAe,CAAC,WAAW,CA2DnD,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/features/link/plugins/link/index.tsx"],"sourcesContent":["'use client'\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { mergeRegister } from '@lexical/utils'\nimport {\n $getSelection,\n $isElementNode,\n $isRangeSelection,\n COMMAND_PRIORITY_LOW,\n PASTE_COMMAND,\n} from 'lexical'\nimport { useEffect } from 'react'\n\nimport type { PluginComponent } from '../../../types.js'\nimport type { ClientProps } from '../../feature.client.js'\nimport type { LinkFields } from '../../nodes/types.js'\nimport type { LinkPayload } from '../floatingLinkEditor/types.js'\n\nimport { validateUrl } from '../../../../lexical/utils/url.js'\nimport { $toggleLink, LinkNode, TOGGLE_LINK_COMMAND } from '../../nodes/LinkNode.js'\n\nexport const LinkPlugin: PluginComponent<ClientProps> = () => {\n const [editor] = useLexicalComposerContext()\n\n useEffect(() => {\n if (!editor.hasNodes([LinkNode])) {\n throw new Error('LinkPlugin: LinkNode not registered on editor')\n }\n return mergeRegister(\n editor.registerCommand(\n TOGGLE_LINK_COMMAND,\n (payload: LinkPayload) => {\n $toggleLink(payload)\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n validateUrl !== undefined\n ? editor.registerCommand(\n PASTE_COMMAND,\n (event) => {\n const selection = $getSelection()\n if (\n !$isRangeSelection(selection) ||\n selection.isCollapsed() ||\n !(event instanceof ClipboardEvent) ||\n event.clipboardData == null\n ) {\n return false\n }\n const clipboardText = event.clipboardData.getData('text')\n if (!validateUrl(clipboardText)) {\n return false\n }\n // If we select nodes that are elements then avoid applying the link.\n if (!selection.getNodes().some((node) => $isElementNode(node))) {\n const linkFields: LinkFields = {\n doc: null,\n linkType: 'custom',\n newTab: false,\n url: clipboardText,\n }\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, {\n fields: linkFields,\n text: null,\n })\n event.preventDefault()\n return true\n }\n return false\n },\n COMMAND_PRIORITY_LOW,\n )\n : () => {\n // Don't paste arbitrary text as a link when there's no validate function\n },\n )\n }, [editor])\n\n return null\n}\n"],"names":["useLexicalComposerContext","mergeRegister","$getSelection","$isElementNode","$isRangeSelection","COMMAND_PRIORITY_LOW","PASTE_COMMAND","useEffect","validateUrl","$toggleLink","LinkNode","TOGGLE_LINK_COMMAND","LinkPlugin","editor","hasNodes","Error","registerCommand","payload","undefined","event","selection","isCollapsed","ClipboardEvent","clipboardData","clipboardText","getData","getNodes","some","node","linkFields","doc","linkType","newTab","url","dispatchCommand","fields","text","preventDefault"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;AACA,SAASA,yBAAyB,QAAQ,2CAA0C;AACpF,SAASC,aAAa,QAAQ,iBAAgB;AAC9C,SACEC,aAAa,EACbC,cAAc,EACdC,iBAAiB,EACjBC,oBAAoB,EACpBC,aAAa,QACR,UAAS;AAChB,SAASC,SAAS,QAAQ,QAAO;AAOjC,SAASC,WAAW,QAAQ,mCAAkC;AAC9D,SAASC,WAAW,EAAEC,QAAQ,EAAEC,mBAAmB,QAAQ,0BAAyB;AAEpF,OAAO,MAAMC,aAA2C;IACtD,MAAM,CAACC,OAAO,GAAGb;IAEjBO,UAAU;QACR,IAAI,CAACM,OAAOC,QAAQ,CAAC;YAACJ;SAAS,GAAG;YAChC,MAAM,IAAIK,MAAM;QAClB;QACA,OAAOd,cACLY,OAAOG,eAAe,CACpBL,qBACA,CAACM;YACCR,YAAYQ;YACZ,OAAO;QACT,GACAZ,uBAEFG,gBAAgBU,YACZL,OAAOG,eAAe,CACpBV,eACA,CAACa;YACC,MAAMC,YAAYlB;YAClB,IACE,CAACE,kBAAkBgB,cACnBA,UAAUC,WAAW,MACrB,CAAEF,CAAAA,iBAAiBG,cAAa,KAChCH,MAAMI,aAAa,IAAI,MACvB;gBACA,OAAO;YACT;YACA,MAAMC,gBAAgBL,MAAMI,aAAa,CAACE,OAAO,CAAC;YAClD,IAAI,CAACjB,YAAYgB,gBAAgB;gBAC/B,OAAO;YACT;YACA,qEAAqE;YACrE,IAAI,CAACJ,UAAUM,QAAQ,GAAGC,IAAI,CAAC,CAACC,OAASzB,eAAeyB,QAAQ;gBAC9D,MAAMC,aAAyB;oBAC7BC,KAAK;oBACLC,UAAU;oBACVC,QAAQ;oBACRC,KAAKT;gBACP;gBACAX,OAAOqB,eAAe,CAACvB,qBAAqB;oBAC1CwB,QAAQN;oBACRO,MAAM;gBACR;gBACAjB,MAAMkB,cAAc;gBACpB,OAAO;YACT;YACA,OAAO;QACT,GACAhC,wBAEF;QACE,yEAAyE;QAC3E;IAER,GAAG;QAACQ;KAAO;IAEX,OAAO;AACT,EAAC"}
1
+ {"version":3,"sources":["../../../../../src/features/link/plugins/link/index.tsx"],"sourcesContent":["'use client'\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { mergeRegister } from '@lexical/utils'\nimport {\n $getSelection,\n $isElementNode,\n $isRangeSelection,\n COMMAND_PRIORITY_LOW,\n PASTE_COMMAND,\n} from 'lexical'\nimport { useEffect } from 'react'\n\nimport type { PluginComponent } from '../../../typesClient.js'\nimport type { ClientProps } from '../../feature.client.js'\nimport type { LinkFields } from '../../nodes/types.js'\nimport type { LinkPayload } from '../floatingLinkEditor/types.js'\n\nimport { validateUrl } from '../../../../lexical/utils/url.js'\nimport { $toggleLink, LinkNode, TOGGLE_LINK_COMMAND } from '../../nodes/LinkNode.js'\n\nexport const LinkPlugin: PluginComponent<ClientProps> = () => {\n const [editor] = useLexicalComposerContext()\n\n useEffect(() => {\n if (!editor.hasNodes([LinkNode])) {\n throw new Error('LinkPlugin: LinkNode not registered on editor')\n }\n return mergeRegister(\n editor.registerCommand(\n TOGGLE_LINK_COMMAND,\n (payload: LinkPayload) => {\n $toggleLink(payload)\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n validateUrl !== undefined\n ? editor.registerCommand(\n PASTE_COMMAND,\n (event) => {\n const selection = $getSelection()\n if (\n !$isRangeSelection(selection) ||\n selection.isCollapsed() ||\n !(event instanceof ClipboardEvent) ||\n event.clipboardData == null\n ) {\n return false\n }\n const clipboardText = event.clipboardData.getData('text')\n if (!validateUrl(clipboardText)) {\n return false\n }\n // If we select nodes that are elements then avoid applying the link.\n if (!selection.getNodes().some((node) => $isElementNode(node))) {\n const linkFields: LinkFields = {\n doc: null,\n linkType: 'custom',\n newTab: false,\n url: clipboardText,\n }\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, {\n fields: linkFields,\n text: null,\n })\n event.preventDefault()\n return true\n }\n return false\n },\n COMMAND_PRIORITY_LOW,\n )\n : () => {\n // Don't paste arbitrary text as a link when there's no validate function\n },\n )\n }, [editor])\n\n return null\n}\n"],"names":["useLexicalComposerContext","mergeRegister","$getSelection","$isElementNode","$isRangeSelection","COMMAND_PRIORITY_LOW","PASTE_COMMAND","useEffect","validateUrl","$toggleLink","LinkNode","TOGGLE_LINK_COMMAND","LinkPlugin","editor","hasNodes","Error","registerCommand","payload","undefined","event","selection","isCollapsed","ClipboardEvent","clipboardData","clipboardText","getData","getNodes","some","node","linkFields","doc","linkType","newTab","url","dispatchCommand","fields","text","preventDefault"],"mappings":"AAAA;AACA,SAASA,yBAAyB,QAAQ,2CAA0C;AACpF,SAASC,aAAa,QAAQ,iBAAgB;AAC9C,SACEC,aAAa,EACbC,cAAc,EACdC,iBAAiB,EACjBC,oBAAoB,EACpBC,aAAa,QACR,UAAS;AAChB,SAASC,SAAS,QAAQ,QAAO;AAOjC,SAASC,WAAW,QAAQ,mCAAkC;AAC9D,SAASC,WAAW,EAAEC,QAAQ,EAAEC,mBAAmB,QAAQ,0BAAyB;AAEpF,OAAO,MAAMC,aAA2C;IACtD,MAAM,CAACC,OAAO,GAAGb;IAEjBO,UAAU;QACR,IAAI,CAACM,OAAOC,QAAQ,CAAC;YAACJ;SAAS,GAAG;YAChC,MAAM,IAAIK,MAAM;QAClB;QACA,OAAOd,cACLY,OAAOG,eAAe,CACpBL,qBACA,CAACM;YACCR,YAAYQ;YACZ,OAAO;QACT,GACAZ,uBAEFG,gBAAgBU,YACZL,OAAOG,eAAe,CACpBV,eACA,CAACa;YACC,MAAMC,YAAYlB;YAClB,IACE,CAACE,kBAAkBgB,cACnBA,UAAUC,WAAW,MACrB,CAAEF,CAAAA,iBAAiBG,cAAa,KAChCH,MAAMI,aAAa,IAAI,MACvB;gBACA,OAAO;YACT;YACA,MAAMC,gBAAgBL,MAAMI,aAAa,CAACE,OAAO,CAAC;YAClD,IAAI,CAACjB,YAAYgB,gBAAgB;gBAC/B,OAAO;YACT;YACA,qEAAqE;YACrE,IAAI,CAACJ,UAAUM,QAAQ,GAAGC,IAAI,CAAC,CAACC,OAASzB,eAAeyB,QAAQ;gBAC9D,MAAMC,aAAyB;oBAC7BC,KAAK;oBACLC,UAAU;oBACVC,QAAQ;oBACRC,KAAKT;gBACP;gBACAX,OAAOqB,eAAe,CAACvB,qBAAqB;oBAC1CwB,QAAQN;oBACRO,MAAM;gBACR;gBACAjB,MAAMkB,cAAc;gBACpB,OAAO;YACT;YACA,OAAO;QACT,GACAhC,wBAEF;QACE,yEAAyE;QAC3E;IAER,GAAG;QAACQ;KAAO;IAEX,OAAO;AACT,EAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { Field } from 'payload';
2
- import type { NodeValidation } from '../types.js';
2
+ import type { NodeValidation } from '../typesServer.js';
3
3
  import type { LinkFeatureServerProps } from './feature.server.js';
4
4
  import type { SerializedAutoLinkNode, SerializedLinkNode } from './nodes/types.js';
5
5
  export declare const linkValidation: (props: LinkFeatureServerProps, sanitizedFieldsWithoutText: Field[]) => NodeValidation<SerializedAutoLinkNode | SerializedLinkNode>;
@@ -1 +1 @@
1
- {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/features/link/validate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAIpC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AACjE,OAAO,KAAK,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAElF,eAAO,MAAM,cAAc,UAClB,sBAAsB,8BACD,KAAK,EAAE,KAElC,eAAe,sBAAsB,GAAG,kBAAkB,CAkC5D,CAAA"}
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/features/link/validate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAIpC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AACjE,OAAO,KAAK,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAElF,eAAO,MAAM,cAAc,UAClB,sBAAsB,8BACD,KAAK,EAAE,KAElC,cAAc,CAAC,sBAAsB,GAAG,kBAAkB,CAkC5D,CAAA"}