@payloadcms/richtext-lexical 4.0.0-internal.1f9ae9a → 4.0.0-internal.203916b

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 (531) hide show
  1. package/LICENSE.md +1 -1
  2. package/dist/cell/rscEntry.d.ts.map +1 -1
  3. package/dist/cell/rscEntry.js +5 -5
  4. package/dist/cell/rscEntry.js.map +1 -1
  5. package/dist/exports/client/Field-XH5C4HFU.js +2 -0
  6. package/dist/exports/client/Field-XH5C4HFU.js.map +7 -0
  7. package/dist/exports/client/{RelationshipComponent-RZL743CS.js → RelationshipComponent-YCPAKOL7.js} +1 -1
  8. package/dist/exports/client/RelationshipComponent-YCPAKOL7.js.map +7 -0
  9. package/dist/exports/client/bundled.css +1 -1
  10. package/dist/exports/client/chunk-5VIL27GI.js +2 -0
  11. package/dist/exports/client/chunk-5VIL27GI.js.map +7 -0
  12. package/dist/exports/client/chunk-ESITTE3C.js +2 -0
  13. package/dist/exports/client/chunk-ESITTE3C.js.map +7 -0
  14. package/dist/exports/client/chunk-UD4DQ4AK.js +2 -0
  15. package/dist/exports/client/chunk-UD4DQ4AK.js.map +7 -0
  16. package/dist/exports/client/chunk-X3D4LZS7.js +2 -0
  17. package/dist/exports/client/chunk-X3D4LZS7.js.map +7 -0
  18. package/dist/exports/client/{component-CVM4OESA.js → component-PHZQBOJE.js} +2 -2
  19. package/dist/exports/client/component-PHZQBOJE.js.map +7 -0
  20. package/dist/exports/client/componentInline-H24N7GUG.js +2 -0
  21. package/dist/exports/client/index.d.ts +0 -1
  22. package/dist/exports/client/index.d.ts.map +1 -1
  23. package/dist/exports/client/index.js +20 -21
  24. package/dist/exports/client/index.js.map +4 -4
  25. package/dist/features/blockquote/client/index.js +2 -2
  26. package/dist/features/blockquote/client/index.js.map +1 -1
  27. package/dist/features/blockquote/server/index.d.ts +1 -4
  28. package/dist/features/blockquote/server/index.d.ts.map +1 -1
  29. package/dist/features/blockquote/server/index.js +4 -2
  30. package/dist/features/blockquote/server/index.js.map +1 -1
  31. package/dist/features/blockquote/server/schema.d.ts +8 -0
  32. package/dist/features/blockquote/server/schema.d.ts.map +1 -0
  33. package/dist/features/blockquote/server/schema.js +15 -0
  34. package/dist/features/blockquote/server/schema.js.map +1 -0
  35. package/dist/features/blocks/client/component/index.css +2 -2
  36. package/dist/features/blocks/client/component/index.d.ts +2 -1
  37. package/dist/features/blocks/client/component/index.d.ts.map +1 -1
  38. package/dist/features/blocks/client/component/index.js +16 -8
  39. package/dist/features/blocks/client/component/index.js.map +1 -1
  40. package/dist/features/blocks/client/componentInline/index.css +8 -8
  41. package/dist/features/blocks/client/componentInline/index.d.ts +2 -1
  42. package/dist/features/blocks/client/componentInline/index.d.ts.map +1 -1
  43. package/dist/features/blocks/client/componentInline/index.js +15 -7
  44. package/dist/features/blocks/client/componentInline/index.js.map +1 -1
  45. package/dist/features/blocks/client/index.d.ts.map +1 -1
  46. package/dist/features/blocks/client/index.js +4 -2
  47. package/dist/features/blocks/client/index.js.map +1 -1
  48. package/dist/features/blocks/client/markdown/getLexicalToMarkdown.d.ts +1 -1
  49. package/dist/features/blocks/client/markdown/getLexicalToMarkdown.d.ts.map +1 -1
  50. package/dist/features/blocks/client/markdown/getLexicalToMarkdown.js +1 -1
  51. package/dist/features/blocks/client/markdown/getLexicalToMarkdown.js.map +1 -1
  52. package/dist/features/blocks/client/markdown/getMarkdownToLexical.d.ts +1 -1
  53. package/dist/features/blocks/client/markdown/getMarkdownToLexical.d.ts.map +1 -1
  54. package/dist/features/blocks/client/markdown/getMarkdownToLexical.js +5 -2
  55. package/dist/features/blocks/client/markdown/getMarkdownToLexical.js.map +1 -1
  56. package/dist/features/blocks/client/markdown/markdownTransformer.d.ts +1 -2
  57. package/dist/features/blocks/client/markdown/markdownTransformer.d.ts.map +1 -1
  58. package/dist/features/blocks/client/markdown/markdownTransformer.js +4 -4
  59. package/dist/features/blocks/client/markdown/markdownTransformer.js.map +1 -1
  60. package/dist/features/blocks/client/nodes/BlocksNode.d.ts +1 -1
  61. package/dist/features/blocks/client/nodes/BlocksNode.d.ts.map +1 -1
  62. package/dist/features/blocks/client/nodes/BlocksNode.js.map +1 -1
  63. package/dist/features/blocks/client/nodes/InlineBlocksNode.d.ts +1 -1
  64. package/dist/features/blocks/client/nodes/InlineBlocksNode.d.ts.map +1 -1
  65. package/dist/features/blocks/client/nodes/InlineBlocksNode.js.map +1 -1
  66. package/dist/features/blocks/client/plugin/index.d.ts +1 -1
  67. package/dist/features/blocks/client/plugin/index.d.ts.map +1 -1
  68. package/dist/features/blocks/client/plugin/index.js.map +1 -1
  69. package/dist/features/blocks/premade/CodeBlock/Component/Block.d.ts.map +1 -1
  70. package/dist/features/blocks/premade/CodeBlock/Component/Block.js +1 -0
  71. package/dist/features/blocks/premade/CodeBlock/Component/Block.js.map +1 -1
  72. package/dist/features/blocks/premade/CodeBlock/Component/Collapse/index.css +1 -1
  73. package/dist/features/blocks/premade/CodeBlock/Component/FloatingCollapse/index.css +2 -4
  74. package/dist/features/blocks/premade/CodeBlock/Component/index.css +5 -5
  75. package/dist/features/blocks/server/graphQLPopulationPromise.d.ts +1 -2
  76. package/dist/features/blocks/server/graphQLPopulationPromise.d.ts.map +1 -1
  77. package/dist/features/blocks/server/graphQLPopulationPromise.js.map +1 -1
  78. package/dist/features/blocks/server/index.d.ts +1 -0
  79. package/dist/features/blocks/server/index.d.ts.map +1 -1
  80. package/dist/features/blocks/server/index.js +24 -72
  81. package/dist/features/blocks/server/index.js.map +1 -1
  82. package/dist/features/blocks/server/markdown/markdownTransformer.d.ts +1 -1
  83. package/dist/features/blocks/server/markdown/markdownTransformer.d.ts.map +1 -1
  84. package/dist/features/blocks/server/markdown/markdownTransformer.js +4 -4
  85. package/dist/features/blocks/server/markdown/markdownTransformer.js.map +1 -1
  86. package/dist/features/blocks/server/nodes/BlocksNode.d.ts +1 -18
  87. package/dist/features/blocks/server/nodes/BlocksNode.d.ts.map +1 -1
  88. package/dist/features/blocks/server/nodes/BlocksNode.js.map +1 -1
  89. package/dist/features/blocks/server/nodes/InlineBlocksNode.d.ts +2 -10
  90. package/dist/features/blocks/server/nodes/InlineBlocksNode.d.ts.map +1 -1
  91. package/dist/features/blocks/server/nodes/InlineBlocksNode.js.map +1 -1
  92. package/dist/features/blocks/server/schema.d.ts +45 -0
  93. package/dist/features/blocks/server/schema.d.ts.map +1 -0
  94. package/dist/features/blocks/server/schema.js +140 -0
  95. package/dist/features/blocks/server/schema.js.map +1 -0
  96. package/dist/features/blocks/server/validate.d.ts +1 -2
  97. package/dist/features/blocks/server/validate.d.ts.map +1 -1
  98. package/dist/features/blocks/server/validate.js.map +1 -1
  99. package/dist/features/converters/lexicalToHtml/async/converters/upload.js.map +1 -1
  100. package/dist/features/converters/lexicalToHtml/async/types.d.ts +14 -15
  101. package/dist/features/converters/lexicalToHtml/async/types.d.ts.map +1 -1
  102. package/dist/features/converters/lexicalToHtml/async/types.js.map +1 -1
  103. package/dist/features/converters/lexicalToHtml/sync/converters/upload.js.map +1 -1
  104. package/dist/features/converters/lexicalToHtml/sync/types.d.ts +14 -15
  105. package/dist/features/converters/lexicalToHtml/sync/types.d.ts.map +1 -1
  106. package/dist/features/converters/lexicalToHtml/sync/types.js.map +1 -1
  107. package/dist/features/converters/lexicalToJSX/Component/index.d.ts +4 -2
  108. package/dist/features/converters/lexicalToJSX/Component/index.d.ts.map +1 -1
  109. package/dist/features/converters/lexicalToJSX/Component/index.js +5 -4
  110. package/dist/features/converters/lexicalToJSX/Component/index.js.map +1 -1
  111. package/dist/features/converters/lexicalToJSX/converter/converters/upload.js.map +1 -1
  112. package/dist/features/converters/lexicalToJSX/converter/types.d.ts +12 -14
  113. package/dist/features/converters/lexicalToJSX/converter/types.d.ts.map +1 -1
  114. package/dist/features/converters/lexicalToJSX/converter/types.js.map +1 -1
  115. package/dist/features/converters/lexicalToMarkdown/index.d.ts.map +1 -1
  116. package/dist/features/converters/lexicalToMarkdown/index.js +1 -1
  117. package/dist/features/converters/lexicalToMarkdown/index.js.map +1 -1
  118. package/dist/features/converters/lexicalToPlaintext/sync/types.d.ts +12 -14
  119. package/dist/features/converters/lexicalToPlaintext/sync/types.d.ts.map +1 -1
  120. package/dist/features/converters/lexicalToPlaintext/sync/types.js.map +1 -1
  121. package/dist/features/converters/markdownToLexical/index.d.ts.map +1 -1
  122. package/dist/features/converters/markdownToLexical/index.js +5 -2
  123. package/dist/features/converters/markdownToLexical/index.js.map +1 -1
  124. package/dist/features/debug/jsxConverter/client/plugin/style.css +2 -2
  125. package/dist/features/experimental_table/client/index.js +2 -2
  126. package/dist/features/experimental_table/client/index.js.map +1 -1
  127. package/dist/features/experimental_table/markdownTransformer.d.ts +2 -2
  128. package/dist/features/experimental_table/markdownTransformer.d.ts.map +1 -1
  129. package/dist/features/experimental_table/markdownTransformer.js +6 -3
  130. package/dist/features/experimental_table/markdownTransformer.js.map +1 -1
  131. package/dist/features/experimental_table/server/index.d.ts +1 -6
  132. package/dist/features/experimental_table/server/index.d.ts.map +1 -1
  133. package/dist/features/experimental_table/server/index.js +6 -2
  134. package/dist/features/experimental_table/server/index.js.map +1 -1
  135. package/dist/features/experimental_table/server/schema.d.ts +27 -0
  136. package/dist/features/experimental_table/server/schema.d.ts.map +1 -0
  137. package/dist/features/experimental_table/server/schema.js +107 -0
  138. package/dist/features/experimental_table/server/schema.js.map +1 -0
  139. package/dist/features/format/bold/feature.client.js +1 -1
  140. package/dist/features/format/bold/feature.client.js.map +1 -1
  141. package/dist/features/format/bold/feature.server.d.ts.map +1 -1
  142. package/dist/features/format/bold/feature.server.js +1 -1
  143. package/dist/features/format/bold/feature.server.js.map +1 -1
  144. package/dist/features/format/inlineCode/feature.client.js +1 -1
  145. package/dist/features/format/inlineCode/feature.client.js.map +1 -1
  146. package/dist/features/format/inlineCode/feature.server.d.ts.map +1 -1
  147. package/dist/features/format/inlineCode/feature.server.js +1 -1
  148. package/dist/features/format/inlineCode/feature.server.js.map +1 -1
  149. package/dist/features/format/italic/feature.client.js +1 -1
  150. package/dist/features/format/italic/feature.client.js.map +1 -1
  151. package/dist/features/format/italic/feature.server.d.ts.map +1 -1
  152. package/dist/features/format/italic/feature.server.js +1 -1
  153. package/dist/features/format/italic/feature.server.js.map +1 -1
  154. package/dist/features/format/strikethrough/feature.client.js +1 -1
  155. package/dist/features/format/strikethrough/feature.client.js.map +1 -1
  156. package/dist/features/format/strikethrough/feature.server.d.ts.map +1 -1
  157. package/dist/features/format/strikethrough/feature.server.js +1 -1
  158. package/dist/features/format/strikethrough/feature.server.js.map +1 -1
  159. package/dist/features/heading/client/index.js +2 -2
  160. package/dist/features/heading/client/index.js.map +1 -1
  161. package/dist/features/heading/markdownTransformer.d.ts +2 -2
  162. package/dist/features/heading/markdownTransformer.d.ts.map +1 -1
  163. package/dist/features/heading/markdownTransformer.js +6 -19
  164. package/dist/features/heading/markdownTransformer.js.map +1 -1
  165. package/dist/features/heading/server/index.d.ts +2 -4
  166. package/dist/features/heading/server/index.d.ts.map +1 -1
  167. package/dist/features/heading/server/index.js +4 -2
  168. package/dist/features/heading/server/index.js.map +1 -1
  169. package/dist/features/heading/server/schema.d.ts +10 -0
  170. package/dist/features/heading/server/schema.d.ts.map +1 -0
  171. package/dist/features/heading/server/schema.js +37 -0
  172. package/dist/features/heading/server/schema.js.map +1 -0
  173. package/dist/features/horizontalRule/client/index.js +2 -2
  174. package/dist/features/horizontalRule/client/index.js.map +1 -1
  175. package/dist/features/horizontalRule/client/markdownTransformer.d.ts +2 -2
  176. package/dist/features/horizontalRule/client/markdownTransformer.d.ts.map +1 -1
  177. package/dist/features/horizontalRule/client/markdownTransformer.js +1 -1
  178. package/dist/features/horizontalRule/client/markdownTransformer.js.map +1 -1
  179. package/dist/features/horizontalRule/client/nodes/HorizontalRuleNode.d.ts +1 -1
  180. package/dist/features/horizontalRule/client/nodes/HorizontalRuleNode.d.ts.map +1 -1
  181. package/dist/features/horizontalRule/client/nodes/HorizontalRuleNode.js.map +1 -1
  182. package/dist/features/horizontalRule/client/plugin/index.css +2 -2
  183. package/dist/features/horizontalRule/server/index.d.ts +1 -0
  184. package/dist/features/horizontalRule/server/index.d.ts.map +1 -1
  185. package/dist/features/horizontalRule/server/index.js +4 -2
  186. package/dist/features/horizontalRule/server/index.js.map +1 -1
  187. package/dist/features/horizontalRule/server/markdownTransformer.d.ts +2 -2
  188. package/dist/features/horizontalRule/server/markdownTransformer.d.ts.map +1 -1
  189. package/dist/features/horizontalRule/server/markdownTransformer.js +1 -1
  190. package/dist/features/horizontalRule/server/markdownTransformer.js.map +1 -1
  191. package/dist/features/horizontalRule/server/nodes/HorizontalRuleNode.d.ts +1 -5
  192. package/dist/features/horizontalRule/server/nodes/HorizontalRuleNode.d.ts.map +1 -1
  193. package/dist/features/horizontalRule/server/nodes/HorizontalRuleNode.js.map +1 -1
  194. package/dist/features/horizontalRule/server/schema.d.ts +7 -0
  195. package/dist/features/horizontalRule/server/schema.d.ts.map +1 -0
  196. package/dist/features/horizontalRule/server/schema.js +25 -0
  197. package/dist/features/horizontalRule/server/schema.js.map +1 -0
  198. package/dist/features/link/client/index.d.ts.map +1 -1
  199. package/dist/features/link/client/index.js +2 -2
  200. package/dist/features/link/client/index.js.map +1 -1
  201. package/dist/features/link/client/plugins/autoLink/index.d.ts +1 -1
  202. package/dist/features/link/client/plugins/autoLink/index.d.ts.map +1 -1
  203. package/dist/features/link/client/plugins/autoLink/index.js.map +1 -1
  204. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js +3 -3
  205. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js.map +1 -1
  206. package/dist/features/link/client/plugins/floatingLinkEditor/index.css +7 -11
  207. package/dist/features/link/client/plugins/floatingLinkEditor/types.d.ts +1 -1
  208. package/dist/features/link/client/plugins/floatingLinkEditor/types.d.ts.map +1 -1
  209. package/dist/features/link/client/plugins/floatingLinkEditor/types.js.map +1 -1
  210. package/dist/features/link/client/plugins/link/index.js.map +1 -1
  211. package/dist/features/link/markdownTransformer.d.ts +5 -5
  212. package/dist/features/link/markdownTransformer.d.ts.map +1 -1
  213. package/dist/features/link/markdownTransformer.js +2 -2
  214. package/dist/features/link/markdownTransformer.js.map +1 -1
  215. package/dist/features/link/markdownTransformer.spec.js +10 -10
  216. package/dist/features/link/markdownTransformer.spec.js.map +1 -1
  217. package/dist/features/link/nodes/AutoLinkNode.d.ts +3 -3
  218. package/dist/features/link/nodes/AutoLinkNode.d.ts.map +1 -1
  219. package/dist/features/link/nodes/AutoLinkNode.js +2 -1
  220. package/dist/features/link/nodes/AutoLinkNode.js.map +1 -1
  221. package/dist/features/link/nodes/LinkNode.d.ts +3 -3
  222. package/dist/features/link/nodes/LinkNode.d.ts.map +1 -1
  223. package/dist/features/link/nodes/LinkNode.js +2 -1
  224. package/dist/features/link/nodes/LinkNode.js.map +1 -1
  225. package/dist/features/link/server/baseFields.js.map +1 -1
  226. package/dist/features/link/server/graphQLPopulationPromise.d.ts +1 -1
  227. package/dist/features/link/server/graphQLPopulationPromise.d.ts.map +1 -1
  228. package/dist/features/link/server/graphQLPopulationPromise.js.map +1 -1
  229. package/dist/features/link/server/index.d.ts +2 -1
  230. package/dist/features/link/server/index.d.ts.map +1 -1
  231. package/dist/features/link/server/index.js +5 -2
  232. package/dist/features/link/server/index.js.map +1 -1
  233. package/dist/features/link/server/schema.d.ts +32 -0
  234. package/dist/features/link/server/schema.d.ts.map +1 -0
  235. package/dist/features/link/server/schema.js +171 -0
  236. package/dist/features/link/server/schema.js.map +1 -0
  237. package/dist/features/link/server/validate.d.ts +1 -1
  238. package/dist/features/link/server/validate.d.ts.map +1 -1
  239. package/dist/features/link/server/validate.js.map +1 -1
  240. package/dist/features/lists/checklist/client/index.js +1 -1
  241. package/dist/features/lists/checklist/client/index.js.map +1 -1
  242. package/dist/features/lists/checklist/server/index.d.ts.map +1 -1
  243. package/dist/features/lists/checklist/server/index.js +4 -1
  244. package/dist/features/lists/checklist/server/index.js.map +1 -1
  245. package/dist/features/lists/orderedList/client/index.js +1 -1
  246. package/dist/features/lists/orderedList/client/index.js.map +1 -1
  247. package/dist/features/lists/orderedList/server/index.d.ts.map +1 -1
  248. package/dist/features/lists/orderedList/server/index.js +4 -1
  249. package/dist/features/lists/orderedList/server/index.js.map +1 -1
  250. package/dist/features/lists/plugin/index.d.ts +0 -9
  251. package/dist/features/lists/plugin/index.d.ts.map +1 -1
  252. package/dist/features/lists/plugin/index.js.map +1 -1
  253. package/dist/features/lists/shared/schema.d.ts +18 -0
  254. package/dist/features/lists/shared/schema.d.ts.map +1 -0
  255. package/dist/features/lists/shared/schema.js +62 -0
  256. package/dist/features/lists/shared/schema.js.map +1 -0
  257. package/dist/features/lists/unorderedList/client/index.js +1 -1
  258. package/dist/features/lists/unorderedList/client/index.js.map +1 -1
  259. package/dist/features/lists/unorderedList/server/index.d.ts.map +1 -1
  260. package/dist/features/lists/unorderedList/server/index.js +4 -1
  261. package/dist/features/lists/unorderedList/server/index.js.map +1 -1
  262. package/dist/features/relationship/client/components/RelationshipComponent.d.ts +1 -1
  263. package/dist/features/relationship/client/components/RelationshipComponent.d.ts.map +1 -1
  264. package/dist/features/relationship/client/components/RelationshipComponent.js.map +1 -1
  265. package/dist/features/relationship/client/nodes/RelationshipNode.d.ts +1 -1
  266. package/dist/features/relationship/client/nodes/RelationshipNode.d.ts.map +1 -1
  267. package/dist/features/relationship/client/nodes/RelationshipNode.js.map +1 -1
  268. package/dist/features/relationship/client/plugins/index.d.ts +1 -1
  269. package/dist/features/relationship/client/plugins/index.d.ts.map +1 -1
  270. package/dist/features/relationship/client/plugins/index.js.map +1 -1
  271. package/dist/features/relationship/client/utils/useEnabledRelationships.d.ts.map +1 -1
  272. package/dist/features/relationship/client/utils/useEnabledRelationships.js +9 -40
  273. package/dist/features/relationship/client/utils/useEnabledRelationships.js.map +1 -1
  274. package/dist/features/relationship/server/graphQLPopulationPromise.d.ts +1 -1
  275. package/dist/features/relationship/server/graphQLPopulationPromise.d.ts.map +1 -1
  276. package/dist/features/relationship/server/graphQLPopulationPromise.js.map +1 -1
  277. package/dist/features/relationship/server/index.d.ts +1 -0
  278. package/dist/features/relationship/server/index.d.ts.map +1 -1
  279. package/dist/features/relationship/server/index.js +2 -0
  280. package/dist/features/relationship/server/index.js.map +1 -1
  281. package/dist/features/relationship/server/nodes/RelationshipNode.d.ts +1 -10
  282. package/dist/features/relationship/server/nodes/RelationshipNode.d.ts.map +1 -1
  283. package/dist/features/relationship/server/nodes/RelationshipNode.js.map +1 -1
  284. package/dist/features/relationship/server/schema.d.ts +28 -0
  285. package/dist/features/relationship/server/schema.d.ts.map +1 -0
  286. package/dist/features/relationship/server/schema.js +97 -0
  287. package/dist/features/relationship/server/schema.js.map +1 -0
  288. package/dist/features/relationship/shared/filterEnabledRelationshipCollections.d.ts +23 -0
  289. package/dist/features/relationship/shared/filterEnabledRelationshipCollections.d.ts.map +1 -0
  290. package/dist/features/relationship/shared/filterEnabledRelationshipCollections.js +34 -0
  291. package/dist/features/relationship/shared/filterEnabledRelationshipCollections.js.map +1 -0
  292. package/dist/features/textState/feature.client.js +1 -1
  293. package/dist/features/textState/feature.client.js.map +1 -1
  294. package/dist/features/toolbars/fixed/client/Toolbar/index.css +2 -2
  295. package/dist/features/toolbars/inline/client/Toolbar/index.css +2 -13
  296. package/dist/features/toolbars/shared/ToolbarDropdown/index.css +8 -12
  297. package/dist/features/toolbars/shared/useToolbarStates.d.ts.map +1 -1
  298. package/dist/features/toolbars/shared/useToolbarStates.js +3 -1
  299. package/dist/features/toolbars/shared/useToolbarStates.js.map +1 -1
  300. package/dist/features/typesClient.d.ts +1 -1
  301. package/dist/features/typesClient.d.ts.map +1 -1
  302. package/dist/features/typesClient.js.map +1 -1
  303. package/dist/features/typesServer.d.ts +18 -41
  304. package/dist/features/typesServer.d.ts.map +1 -1
  305. package/dist/features/typesServer.js.map +1 -1
  306. package/dist/features/upload/client/component/index.css +11 -11
  307. package/dist/features/upload/client/component/index.d.ts +1 -1
  308. package/dist/features/upload/client/component/index.d.ts.map +1 -1
  309. package/dist/features/upload/client/component/index.js.map +1 -1
  310. package/dist/features/upload/client/nodes/UploadNode.d.ts +1 -1
  311. package/dist/features/upload/client/nodes/UploadNode.d.ts.map +1 -1
  312. package/dist/features/upload/client/nodes/UploadNode.js.map +1 -1
  313. package/dist/features/upload/client/plugin/index.d.ts +1 -1
  314. package/dist/features/upload/client/plugin/index.d.ts.map +1 -1
  315. package/dist/features/upload/client/plugin/index.js +5 -5
  316. package/dist/features/upload/client/plugin/index.js.map +1 -1
  317. package/dist/features/upload/server/graphQLPopulationPromise.d.ts +1 -1
  318. package/dist/features/upload/server/graphQLPopulationPromise.d.ts.map +1 -1
  319. package/dist/features/upload/server/graphQLPopulationPromise.js.map +1 -1
  320. package/dist/features/upload/server/index.d.ts +1 -0
  321. package/dist/features/upload/server/index.d.ts.map +1 -1
  322. package/dist/features/upload/server/index.js +5 -4
  323. package/dist/features/upload/server/index.js.map +1 -1
  324. package/dist/features/upload/server/markdownTransformer.d.ts +2 -2
  325. package/dist/features/upload/server/markdownTransformer.d.ts.map +1 -1
  326. package/dist/features/upload/server/markdownTransformer.js +1 -1
  327. package/dist/features/upload/server/markdownTransformer.js.map +1 -1
  328. package/dist/features/upload/server/nodes/UploadNode.d.ts +1 -55
  329. package/dist/features/upload/server/nodes/UploadNode.d.ts.map +1 -1
  330. package/dist/features/upload/server/nodes/UploadNode.js.map +1 -1
  331. package/dist/features/upload/server/nodes/conversions.d.ts.map +1 -1
  332. package/dist/features/upload/server/nodes/conversions.js.map +1 -1
  333. package/dist/features/upload/server/schema.d.ts +52 -0
  334. package/dist/features/upload/server/schema.d.ts.map +1 -0
  335. package/dist/features/upload/server/schema.js +149 -0
  336. package/dist/features/upload/server/schema.js.map +1 -0
  337. package/dist/features/upload/server/validate.d.ts +1 -1
  338. package/dist/features/upload/server/validate.d.ts.map +1 -1
  339. package/dist/features/upload/server/validate.js.map +1 -1
  340. package/dist/field/Diff/converters/unknown/index.css +1 -1
  341. package/dist/field/Diff/converters/upload/index.js.map +1 -1
  342. package/dist/field/Field.js +1 -1
  343. package/dist/field/Field.js.map +1 -1
  344. package/dist/field/ViewSelector.css +1 -1
  345. package/dist/field/bundled.css +1 -1
  346. package/dist/field/index.css +5 -5
  347. package/dist/field/index.js +1 -1
  348. package/dist/field/index.js.map +1 -1
  349. package/dist/field/rscEntry.d.ts.map +1 -1
  350. package/dist/field/rscEntry.js +2 -0
  351. package/dist/field/rscEntry.js.map +1 -1
  352. package/dist/index.d.ts +10 -7
  353. package/dist/index.d.ts.map +1 -1
  354. package/dist/index.js +3 -3
  355. package/dist/index.js.map +1 -1
  356. package/dist/lexical/LexicalEditor.css +2 -2
  357. package/dist/lexical/config/client/loader.d.ts.map +1 -1
  358. package/dist/lexical/config/client/loader.js +5 -1
  359. package/dist/lexical/config/client/loader.js.map +1 -1
  360. package/dist/lexical/config/server/sanitize.d.ts.map +1 -1
  361. package/dist/lexical/config/server/sanitize.js +9 -11
  362. package/dist/lexical/config/server/sanitize.js.map +1 -1
  363. package/dist/lexical/plugins/DecoratorPlugin/index.css +1 -1
  364. package/dist/lexical/plugins/MarkdownShortcut/index.d.ts.map +1 -1
  365. package/dist/lexical/plugins/MarkdownShortcut/index.js +1 -1
  366. package/dist/lexical/plugins/MarkdownShortcut/index.js.map +1 -1
  367. package/dist/lexical/plugins/SlashMenu/index.css +1 -5
  368. package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.css +1 -1
  369. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.css +3 -3
  370. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js +1 -1
  371. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js.map +1 -1
  372. package/dist/lexical/theme/EditorTheme.css +18 -19
  373. package/dist/lexical/ui/ContentEditable.css +5 -5
  374. package/dist/lexical/utils/markdown/convertFromMarkdownString.d.ts +17 -0
  375. package/dist/lexical/utils/markdown/convertFromMarkdownString.d.ts.map +1 -0
  376. package/dist/lexical/utils/markdown/convertFromMarkdownString.js +27 -0
  377. package/dist/lexical/utils/markdown/convertFromMarkdownString.js.map +1 -0
  378. package/dist/lexical/utils/markdown/convertFromMarkdownString.spec.js +88 -0
  379. package/dist/lexical/utils/markdown/convertFromMarkdownString.spec.js.map +1 -0
  380. package/dist/lexical/utils/markdown/createBlockNode.d.ts +1 -1
  381. package/dist/lexical/utils/markdown/createBlockNode.d.ts.map +1 -1
  382. package/dist/lexical/utils/markdown/createBlockNode.js.map +1 -1
  383. package/dist/lexical/utils/markdown/normalizeMarkdown.d.ts +25 -0
  384. package/dist/lexical/utils/markdown/normalizeMarkdown.d.ts.map +1 -0
  385. package/dist/lexical/utils/markdown/normalizeMarkdown.js +91 -0
  386. package/dist/lexical/utils/markdown/normalizeMarkdown.js.map +1 -0
  387. package/dist/lexical-proxy/@lexical-markdown.d.ts +1 -1
  388. package/dist/lexical-proxy/@lexical-markdown.d.ts.map +1 -1
  389. package/dist/lexical-proxy/@lexical-markdown.js +1 -1
  390. package/dist/lexical-proxy/@lexical-markdown.js.map +1 -1
  391. package/dist/types/builtInNodes.d.ts +14 -0
  392. package/dist/types/builtInNodes.d.ts.map +1 -0
  393. package/dist/types/builtInNodes.js +203 -0
  394. package/dist/types/builtInNodes.js.map +1 -0
  395. package/dist/types/index.d.ts +16 -17
  396. package/dist/types/index.d.ts.map +1 -1
  397. package/dist/types/index.js.map +1 -1
  398. package/dist/types/jsonSchemaHelpers.d.ts +30 -0
  399. package/dist/types/jsonSchemaHelpers.d.ts.map +1 -0
  400. package/dist/types/jsonSchemaHelpers.js +58 -0
  401. package/dist/types/jsonSchemaHelpers.js.map +1 -0
  402. package/dist/types/nodeTypes.d.ts +115 -61
  403. package/dist/types/nodeTypes.d.ts.map +1 -1
  404. package/dist/types/nodeTypes.js +3 -2
  405. package/dist/types/nodeTypes.js.map +1 -1
  406. package/dist/types/schema.d.ts.map +1 -1
  407. package/dist/types/schema.js +74 -65
  408. package/dist/types/schema.js.map +1 -1
  409. package/dist/utilities/applyBaseFilterToFields.d.ts.map +1 -1
  410. package/dist/utilities/applyBaseFilterToFields.js +1 -2
  411. package/dist/utilities/applyBaseFilterToFields.js.map +1 -1
  412. package/dist/utilities/buildEditorState.d.ts +17 -3
  413. package/dist/utilities/buildEditorState.d.ts.map +1 -1
  414. package/dist/utilities/buildEditorState.js +8 -0
  415. package/dist/utilities/buildEditorState.js.map +1 -1
  416. package/dist/utilities/buildInitialState.d.ts +2 -1
  417. package/dist/utilities/buildInitialState.d.ts.map +1 -1
  418. package/dist/utilities/buildInitialState.js.map +1 -1
  419. package/dist/utilities/fieldsDrawer/Drawer.d.ts.map +1 -1
  420. package/dist/utilities/fieldsDrawer/Drawer.js +19 -10
  421. package/dist/utilities/fieldsDrawer/Drawer.js.map +1 -1
  422. package/dist/utilities/fieldsDrawer/DrawerContent.d.ts +4 -1
  423. package/dist/utilities/fieldsDrawer/DrawerContent.d.ts.map +1 -1
  424. package/dist/utilities/fieldsDrawer/DrawerContent.js +8 -7
  425. package/dist/utilities/fieldsDrawer/DrawerContent.js.map +1 -1
  426. package/dist/utilities/fieldsDrawer/index.css +12 -0
  427. package/dist/utilities/fieldsDrawer/useDrawerSubmit.d.ts +29 -0
  428. package/dist/utilities/fieldsDrawer/useDrawerSubmit.d.ts.map +1 -0
  429. package/dist/utilities/fieldsDrawer/useDrawerSubmit.js +97 -0
  430. package/dist/utilities/fieldsDrawer/useDrawerSubmit.js.map +1 -0
  431. package/dist/utilities/upgradeLexicalData/upgradeDocumentFieldsRecursively.js +1 -1
  432. package/dist/utilities/upgradeLexicalData/upgradeDocumentFieldsRecursively.js.map +1 -1
  433. package/package.json +22 -26
  434. package/dist/exports/client/Field-G5Z2HM5Y.js +0 -2
  435. package/dist/exports/client/Field-G5Z2HM5Y.js.map +0 -7
  436. package/dist/exports/client/RelationshipComponent-RZL743CS.js.map +0 -7
  437. package/dist/exports/client/chunk-6QWQ7JV4.js +0 -2
  438. package/dist/exports/client/chunk-6QWQ7JV4.js.map +0 -7
  439. package/dist/exports/client/chunk-FEJXFRL7.js +0 -2
  440. package/dist/exports/client/chunk-FEJXFRL7.js.map +0 -7
  441. package/dist/exports/client/chunk-INBEEENE.js +0 -2
  442. package/dist/exports/client/chunk-INBEEENE.js.map +0 -7
  443. package/dist/exports/client/chunk-LH634DPU.js +0 -12
  444. package/dist/exports/client/chunk-LH634DPU.js.map +0 -7
  445. package/dist/exports/client/component-CVM4OESA.js.map +0 -7
  446. package/dist/exports/client/componentInline-JJZ2NKW2.js +0 -2
  447. package/dist/features/blockquote/markdownTransformer.d.ts +0 -3
  448. package/dist/features/blockquote/markdownTransformer.d.ts.map +0 -1
  449. package/dist/features/blockquote/markdownTransformer.js +0 -33
  450. package/dist/features/blockquote/markdownTransformer.js.map +0 -1
  451. package/dist/features/format/bold/markdownTransformers.d.ts +0 -6
  452. package/dist/features/format/bold/markdownTransformers.d.ts.map +0 -1
  453. package/dist/features/format/bold/markdownTransformers.js +0 -23
  454. package/dist/features/format/bold/markdownTransformers.js.map +0 -1
  455. package/dist/features/format/inlineCode/markdownTransformers.d.ts +0 -3
  456. package/dist/features/format/inlineCode/markdownTransformers.d.ts.map +0 -1
  457. package/dist/features/format/inlineCode/markdownTransformers.js +0 -6
  458. package/dist/features/format/inlineCode/markdownTransformers.js.map +0 -1
  459. package/dist/features/format/italic/markdownTransformers.d.ts +0 -4
  460. package/dist/features/format/italic/markdownTransformers.d.ts.map +0 -1
  461. package/dist/features/format/italic/markdownTransformers.js +0 -12
  462. package/dist/features/format/italic/markdownTransformers.js.map +0 -1
  463. package/dist/features/format/strikethrough/markdownTransformers.d.ts +0 -3
  464. package/dist/features/format/strikethrough/markdownTransformers.d.ts.map +0 -1
  465. package/dist/features/format/strikethrough/markdownTransformers.js +0 -6
  466. package/dist/features/format/strikethrough/markdownTransformers.js.map +0 -1
  467. package/dist/features/link/nodes/types.d.ts +0 -27
  468. package/dist/features/link/nodes/types.d.ts.map +0 -1
  469. package/dist/features/link/nodes/types.js +0 -2
  470. package/dist/features/link/nodes/types.js.map +0 -1
  471. package/dist/features/lists/checklist/markdownTransformers.d.ts +0 -3
  472. package/dist/features/lists/checklist/markdownTransformers.d.ts.map +0 -1
  473. package/dist/features/lists/checklist/markdownTransformers.js +0 -12
  474. package/dist/features/lists/checklist/markdownTransformers.js.map +0 -1
  475. package/dist/features/lists/orderedList/markdownTransformer.d.ts +0 -3
  476. package/dist/features/lists/orderedList/markdownTransformer.d.ts.map +0 -1
  477. package/dist/features/lists/orderedList/markdownTransformer.js +0 -12
  478. package/dist/features/lists/orderedList/markdownTransformer.js.map +0 -1
  479. package/dist/features/lists/shared/markdown.d.ts +0 -6
  480. package/dist/features/lists/shared/markdown.d.ts.map +0 -1
  481. package/dist/features/lists/shared/markdown.js +0 -57
  482. package/dist/features/lists/shared/markdown.js.map +0 -1
  483. package/dist/features/lists/unorderedList/markdownTransformer.d.ts +0 -3
  484. package/dist/features/lists/unorderedList/markdownTransformer.d.ts.map +0 -1
  485. package/dist/features/lists/unorderedList/markdownTransformer.js +0 -12
  486. package/dist/features/lists/unorderedList/markdownTransformer.js.map +0 -1
  487. package/dist/lexical/utils/guard.d.ts +0 -5
  488. package/dist/lexical/utils/guard.d.ts.map +0 -1
  489. package/dist/lexical/utils/guard.js +0 -9
  490. package/dist/lexical/utils/guard.js.map +0 -1
  491. package/dist/lexical-proxy/@lexical-react/LexicalContextMenuPlugin.d.ts +0 -2
  492. package/dist/lexical-proxy/@lexical-react/LexicalContextMenuPlugin.d.ts.map +0 -1
  493. package/dist/lexical-proxy/@lexical-react/LexicalContextMenuPlugin.js +0 -2
  494. package/dist/lexical-proxy/@lexical-react/LexicalContextMenuPlugin.js.map +0 -1
  495. package/dist/packages/@lexical/markdown/MarkdownExport.d.ts +0 -14
  496. package/dist/packages/@lexical/markdown/MarkdownExport.d.ts.map +0 -1
  497. package/dist/packages/@lexical/markdown/MarkdownExport.js +0 -213
  498. package/dist/packages/@lexical/markdown/MarkdownExport.js.map +0 -1
  499. package/dist/packages/@lexical/markdown/MarkdownImport.d.ts +0 -19
  500. package/dist/packages/@lexical/markdown/MarkdownImport.d.ts.map +0 -1
  501. package/dist/packages/@lexical/markdown/MarkdownImport.js +0 -198
  502. package/dist/packages/@lexical/markdown/MarkdownImport.js.map +0 -1
  503. package/dist/packages/@lexical/markdown/MarkdownShortcuts.d.ts +0 -11
  504. package/dist/packages/@lexical/markdown/MarkdownShortcuts.d.ts.map +0 -1
  505. package/dist/packages/@lexical/markdown/MarkdownShortcuts.js +0 -304
  506. package/dist/packages/@lexical/markdown/MarkdownShortcuts.js.map +0 -1
  507. package/dist/packages/@lexical/markdown/MarkdownTransformers.d.ts +0 -147
  508. package/dist/packages/@lexical/markdown/MarkdownTransformers.d.ts.map +0 -1
  509. package/dist/packages/@lexical/markdown/MarkdownTransformers.js +0 -268
  510. package/dist/packages/@lexical/markdown/MarkdownTransformers.js.map +0 -1
  511. package/dist/packages/@lexical/markdown/importTextFormatTransformer.d.ts +0 -22
  512. package/dist/packages/@lexical/markdown/importTextFormatTransformer.d.ts.map +0 -1
  513. package/dist/packages/@lexical/markdown/importTextFormatTransformer.js +0 -91
  514. package/dist/packages/@lexical/markdown/importTextFormatTransformer.js.map +0 -1
  515. package/dist/packages/@lexical/markdown/importTextMatchTransformer.d.ts +0 -21
  516. package/dist/packages/@lexical/markdown/importTextMatchTransformer.d.ts.map +0 -1
  517. package/dist/packages/@lexical/markdown/importTextMatchTransformer.js +0 -54
  518. package/dist/packages/@lexical/markdown/importTextMatchTransformer.js.map +0 -1
  519. package/dist/packages/@lexical/markdown/importTextTransformers.d.ts +0 -18
  520. package/dist/packages/@lexical/markdown/importTextTransformers.d.ts.map +0 -1
  521. package/dist/packages/@lexical/markdown/importTextTransformers.js +0 -54
  522. package/dist/packages/@lexical/markdown/importTextTransformers.js.map +0 -1
  523. package/dist/packages/@lexical/markdown/index.d.ts +0 -29
  524. package/dist/packages/@lexical/markdown/index.d.ts.map +0 -1
  525. package/dist/packages/@lexical/markdown/index.js +0 -39
  526. package/dist/packages/@lexical/markdown/index.js.map +0 -1
  527. package/dist/packages/@lexical/markdown/utils.d.ts +0 -34
  528. package/dist/packages/@lexical/markdown/utils.d.ts.map +0 -1
  529. package/dist/packages/@lexical/markdown/utils.js +0 -267
  530. package/dist/packages/@lexical/markdown/utils.js.map +0 -1
  531. /package/dist/exports/client/{componentInline-JJZ2NKW2.js.map → componentInline-H24N7GUG.js.map} +0 -0
@@ -10,17 +10,13 @@
10
10
  vertical-align: middle;
11
11
  position: absolute;
12
12
  top: 0;
13
- left: 0;
13
+ inset-inline-start: 0;
14
14
  opacity: 0;
15
15
  border-radius: var(--radius-large);
16
16
  transition: opacity 0.2s;
17
17
  will-change: transform;
18
18
  overflow: clip;
19
- box-shadow:
20
- 0px 3px 8px 0px rgba(0, 0, 0, 0.35),
21
- 0px 1px 3px 0px rgba(0, 0, 0, 0.5),
22
- inset 0px 0.5px 0px 0px rgba(255, 255, 255, 0.08),
23
- inset 0px 0px 0.5px 0px rgba(255, 255, 255, 0.3);
19
+ box-shadow: var(--elevation-100-canvas);
24
20
 
25
21
  .link-input {
26
22
  display: flex;
@@ -37,7 +33,7 @@
37
33
  font-family: var(--font-body);
38
34
 
39
35
  > .icon:first-child {
40
- color: var(--ramp-white-400);
36
+ color: var(--color-icon-onbrand-secondary);
41
37
  flex-shrink: 0;
42
38
  }
43
39
 
@@ -65,13 +61,13 @@
65
61
  .link-input__divider {
66
62
  width: var(--stroke-width-small);
67
63
  align-self: stretch;
68
- background-color: var(--ramp-white-400);
69
- margin-left: var(--spacer-2);
64
+ background-color: var(--color-text-onbrand-secondary);
65
+ margin-inline-start: var(--spacer-2);
70
66
  }
71
67
 
72
68
  .link-input__label-pure {
73
69
  color: var(--color-text-onbrand);
74
- margin-right: var(--spacer-3);
70
+ margin-inline-end: var(--spacer-3);
75
71
  display: block;
76
72
  white-space: nowrap;
77
73
  overflow: hidden;
@@ -97,7 +93,7 @@
97
93
 
98
94
  &:hover:not([disabled]) {
99
95
  color: var(--color-icon-onbrand);
100
- background-color: rgba(255, 255, 255, 0.1);
96
+ background-color: var(--color-bg-transparent-hover);
101
97
  }
102
98
 
103
99
  &:focus-visible {
@@ -1,5 +1,5 @@
1
1
  import type { LexicalNode } from 'lexical';
2
- import type { LinkFields } from '../../../nodes/types.js';
2
+ import type { LinkFields } from '../../../server/schema.js';
3
3
  /**
4
4
  * The payload of a link node
5
5
  * This can be delivered from the link node to the drawer, or from the drawer/anything to the TOGGLE_LINK_COMMAND
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/features/link/client/plugins/floatingLinkEditor/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAE1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAEzD;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,CAAA;IAC3B,aAAa,CAAC,EAAE,WAAW,EAAE,CAAA;IAC7B;;OAEG;IACH,IAAI,EAAE,IAAI,GAAG,MAAM,CAAA;CACpB,GAAG,IAAI,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/features/link/client/plugins/floatingLinkEditor/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAE1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAE3D;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,CAAA;IAC3B,aAAa,CAAC,EAAE,WAAW,EAAE,CAAA;IAC7B;;OAEG;IACH,IAAI,EAAE,IAAI,GAAG,MAAM,CAAA;CACpB,GAAG,IAAI,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../../../../../src/features/link/client/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 /**\n * The fields of the link node. Undefined fields will be taken from the default values of the link node\n */\n fields: Partial<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} | null\n"],"mappings":"AAIA;;;GAIA","ignoreList":[]}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../../../../src/features/link/client/plugins/floatingLinkEditor/types.ts"],"sourcesContent":["import type { LexicalNode } from 'lexical'\n\nimport type { LinkFields } from '../../../server/schema.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 /**\n * The fields of the link node. Undefined fields will be taken from the default values of the link node\n */\n fields: Partial<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} | null\n"],"mappings":"AAIA;;;GAIA","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","mergeRegister","$getSelection","$isElementNode","$isRangeSelection","COMMAND_PRIORITY_LOW","PASTE_COMMAND","useEffect","validateUrl","$toggleLink","LinkNode","TOGGLE_LINK_COMMAND","LinkPlugin","t0","$","clientProps","editor","t1","t2","defaultLinkType","defaultLinkURL","hasNodes","Error","registerCommand","payload","fields","linkType","url","event","selection","isCollapsed","ClipboardEvent","clipboardData","clipboardText","getData","getNodes","some","_temp","linkFields","doc","newTab","dispatchCommand","text","preventDefault","node"],"sources":["../../../../../../src/features/link/client/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 { LinkFields } from '../../../nodes/types.js'\nimport type { ClientProps } from '../../index.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> = ({ 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 if (payload === null) {\n $toggleLink(null)\n return true\n }\n if (!payload.fields?.linkType) {\n payload.fields.linkType = clientProps.defaultLinkType as any\n }\n if (!payload.fields?.url) {\n payload.fields.url = clientProps.defaultLinkURL as any\n }\n $toggleLink(payload as { fields: LinkFields } & LinkPayload)\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\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 }, [clientProps.defaultLinkType, clientProps.defaultLinkURL, editor])\n\n return null\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;AACA,SAASC,yBAAyB,QAAQ;AAC1C,SAASC,aAAa,QAAQ;AAC9B,SACEC,aAAa,EACbC,cAAc,EACdC,iBAAiB,EACjBC,oBAAoB,EACpBC,aAAa,QACR;AACP,SAASC,SAAS,QAAQ;AAO1B,SAASC,WAAW,QAAQ;AAC5B,SAASC,WAAW,EAAEC,QAAQ,EAAEC,mBAAmB,QAAQ;AAE3D,OAAO,MAAMC,UAAA,GAA2CC,EAAA;EAAA,MAAAC,CAAA,GAAAf,EAAA;EAAC;IAAAgB;EAAA,IAAAF,EAAe;EACtE,OAAAG,MAAA,IAAiBhB,yBAAA;EAAA,IAAAiB,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAJ,CAAA,QAAAC,WAAA,CAAAI,eAAA,IAAAL,CAAA,QAAAC,WAAA,CAAAK,cAAA,IAAAN,CAAA,QAAAE,MAAA;IAEPC,EAAA,GAAAA,CAAA;MAAA,KACHD,MAAA,CAAAK,QAAA,EAAAX,QAAA,CAA0B;QAAA,UAAAY,KAAA,CACb;MAAA;MAAA,OAEXrB,aAAA,CACLe,MAAA,CAAAO,eAAA,CAAAZ,mBAAA,EAAAa,OAAA;QAAA,IAGQA,OAAA,SAAY;UACdf,WAAA,KAAY;UAAA;QAAA;QAAA,KAGTe,OAAA,CAAAC,MAAA,EAAAC,QAAA;UACHF,OAAA,CAAAC,MAAA,CAAAC,QAAA,GAA0BX,WAAA,CAAAI,eAAA;QAAA;QAAA,KAEvBK,OAAA,CAAAC,MAAA,EAAAE,GAAA;UACHH,OAAA,CAAAC,MAAA,CAAAE,GAAA,GAAqBZ,WAAA,CAAAK,cAAA;QAAA;QAEvBX,WAAA,CAAYe,OAAA;QAAA;MAAA,GAAAnB,oBAGd,GAEFW,MAAA,CAAAO,eAAA,CAAAjB,aAAA,EAAAsB,KAAA;QAGI,MAAAC,SAAA,GAAkB3B,aAAA;QAAA,IAEhB,CAACE,iBAAA,CAAkByB,SAAA,KACnBA,SAAA,CAAAC,WAAA,CAAqB,OACnBF,KAAA,YAAAG,cAA8B,KAChCH,KAAA,CAAAI,aAAA,QAAuB;UAAA;QAAA;QAIzB,MAAAC,aAAA,GAAsBL,KAAA,CAAAI,aAAA,CAAAE,OAAA,CAA4B;QAAA,KAC7C1B,WAAA,CAAYyB,aAAA;UAAA;QAAA;QAAA,KAIZJ,SAAA,CAAAM,QAAA,CAAkB,EAAAC,IAAA,CAAAC,KAAiC;UACtD,MAAAC,UAAA;YAAAC,GAAA;YAAAb,QAAA,EAEY;YAAAc,MAAA;YAAAb,GAAA,EAELM;UAAA;UAEPjB,MAAA,CAAAyB,eAAA,CAAA9B,mBAAA;YAAAc,MAAA,EACUa,UAAA;YAAAI,IAAA;UAAA,CAEV;UACAd,KAAA,CAAAe,cAAA,CAAoB;UAAA;QAAA;QAAA;MAAA,GAAAtC,oBAKxB;IAAA;IAGHa,EAAA,IAACH,WAAA,CAAAI,eAAA,EAA6BJ,WAAA,CAAAK,cAAA,EAA4BJ,MAAA;IAAOF,CAAA,MAAAC,WAAA,CAAAI,eAAA;IAAAL,CAAA,MAAAC,WAAA,CAAAK,cAAA;IAAAN,CAAA,MAAAE,MAAA;IAAAF,CAAA,MAAAG,EAAA;IAAAH,CAAA,MAAAI,EAAA;EAAA;IAAAD,EAAA,GAAAH,CAAA;IAAAI,EAAA,GAAAJ,CAAA;EAAA;EA3DpEP,SAAA,CAAUU,EA2DV,EAAGC,EAAiE;EAAA;AAAA,CAGtE;AAjEwD,SAAAmB,MAAAO,IAAA;EAAA,OA2CLzC,cAAA,CAAeyC,IAAA;AAAA","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","mergeRegister","$getSelection","$isElementNode","$isRangeSelection","COMMAND_PRIORITY_LOW","PASTE_COMMAND","useEffect","validateUrl","$toggleLink","LinkNode","TOGGLE_LINK_COMMAND","LinkPlugin","t0","$","clientProps","editor","t1","t2","defaultLinkType","defaultLinkURL","hasNodes","Error","registerCommand","payload","fields","linkType","url","event","selection","isCollapsed","ClipboardEvent","clipboardData","clipboardText","getData","getNodes","some","_temp","linkFields","doc","newTab","dispatchCommand","text","preventDefault","node"],"sources":["../../../../../../src/features/link/client/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 { LinkFields } from '../../../server/schema.js'\nimport type { ClientProps } from '../../index.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> = ({ 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 if (payload === null) {\n $toggleLink(null)\n return true\n }\n if (!payload.fields?.linkType) {\n payload.fields.linkType = clientProps.defaultLinkType as any\n }\n if (!payload.fields?.url) {\n payload.fields.url = clientProps.defaultLinkURL as any\n }\n $toggleLink(payload as { fields: LinkFields } & LinkPayload)\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\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 }, [clientProps.defaultLinkType, clientProps.defaultLinkURL, editor])\n\n return null\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;AACA,SAASC,yBAAyB,QAAQ;AAC1C,SAASC,aAAa,QAAQ;AAC9B,SACEC,aAAa,EACbC,cAAc,EACdC,iBAAiB,EACjBC,oBAAoB,EACpBC,aAAa,QACR;AACP,SAASC,SAAS,QAAQ;AAO1B,SAASC,WAAW,QAAQ;AAC5B,SAASC,WAAW,EAAEC,QAAQ,EAAEC,mBAAmB,QAAQ;AAE3D,OAAO,MAAMC,UAAA,GAA2CC,EAAA;EAAA,MAAAC,CAAA,GAAAf,EAAA;EAAC;IAAAgB;EAAA,IAAAF,EAAe;EACtE,OAAAG,MAAA,IAAiBhB,yBAAA;EAAA,IAAAiB,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAJ,CAAA,QAAAC,WAAA,CAAAI,eAAA,IAAAL,CAAA,QAAAC,WAAA,CAAAK,cAAA,IAAAN,CAAA,QAAAE,MAAA;IAEPC,EAAA,GAAAA,CAAA;MAAA,KACHD,MAAA,CAAAK,QAAA,EAAAX,QAAA,CAA0B;QAAA,UAAAY,KAAA,CACb;MAAA;MAAA,OAEXrB,aAAA,CACLe,MAAA,CAAAO,eAAA,CAAAZ,mBAAA,EAAAa,OAAA;QAAA,IAGQA,OAAA,SAAY;UACdf,WAAA,KAAY;UAAA;QAAA;QAAA,KAGTe,OAAA,CAAAC,MAAA,EAAAC,QAAA;UACHF,OAAA,CAAAC,MAAA,CAAAC,QAAA,GAA0BX,WAAA,CAAAI,eAAA;QAAA;QAAA,KAEvBK,OAAA,CAAAC,MAAA,EAAAE,GAAA;UACHH,OAAA,CAAAC,MAAA,CAAAE,GAAA,GAAqBZ,WAAA,CAAAK,cAAA;QAAA;QAEvBX,WAAA,CAAYe,OAAA;QAAA;MAAA,GAAAnB,oBAGd,GAEFW,MAAA,CAAAO,eAAA,CAAAjB,aAAA,EAAAsB,KAAA;QAGI,MAAAC,SAAA,GAAkB3B,aAAA;QAAA,IAEhB,CAACE,iBAAA,CAAkByB,SAAA,KACnBA,SAAA,CAAAC,WAAA,CAAqB,OACnBF,KAAA,YAAAG,cAA8B,KAChCH,KAAA,CAAAI,aAAA,QAAuB;UAAA;QAAA;QAIzB,MAAAC,aAAA,GAAsBL,KAAA,CAAAI,aAAA,CAAAE,OAAA,CAA4B;QAAA,KAC7C1B,WAAA,CAAYyB,aAAA;UAAA;QAAA;QAAA,KAIZJ,SAAA,CAAAM,QAAA,CAAkB,EAAAC,IAAA,CAAAC,KAAiC;UACtD,MAAAC,UAAA;YAAAC,GAAA;YAAAb,QAAA,EAEY;YAAAc,MAAA;YAAAb,GAAA,EAELM;UAAA;UAEPjB,MAAA,CAAAyB,eAAA,CAAA9B,mBAAA;YAAAc,MAAA,EACUa,UAAA;YAAAI,IAAA;UAAA,CAEV;UACAd,KAAA,CAAAe,cAAA,CAAoB;UAAA;QAAA;QAAA;MAAA,GAAAtC,oBAKxB;IAAA;IAGHa,EAAA,IAACH,WAAA,CAAAI,eAAA,EAA6BJ,WAAA,CAAAK,cAAA,EAA4BJ,MAAA;IAAOF,CAAA,MAAAC,WAAA,CAAAI,eAAA;IAAAL,CAAA,MAAAC,WAAA,CAAAK,cAAA;IAAAN,CAAA,MAAAE,MAAA;IAAAF,CAAA,MAAAG,EAAA;IAAAH,CAAA,MAAAI,EAAA;EAAA;IAAAD,EAAA,GAAAH,CAAA;IAAAI,EAAA,GAAAJ,CAAA;EAAA;EA3DpEP,SAAA,CAAUU,EA2DV,EAAGC,EAAiE;EAAA;AAAA,CAGtE;AAjEwD,SAAAmB,MAAAO,IAAA;EAAA,OA2CLzC,cAAA,CAAeyC,IAAA;AAAA","ignoreList":[]}
@@ -1,9 +1,9 @@
1
1
  /**
2
2
  * Code taken from https://github.com/facebook/lexical/blob/main/packages/lexical-markdown/src/MarkdownTransformers.ts#L357
3
3
  */
4
- import type { TextMatchTransformer } from '../../packages/@lexical/markdown/MarkdownTransformers.js';
5
- import type { SerializedLinkNode } from './nodes/types.js';
6
- export type CreateLinkMarkdownTransformerArgs = {
4
+ import type { TextMatchTransformer } from '@lexical/markdown';
5
+ import type { SerializedLinkNode } from './server/schema.js';
6
+ export type CreatePayloadLinkTransformerArgs = {
7
7
  /**
8
8
  * A function that receives a serialized internal link node and returns the URL string.
9
9
  * Required for internal links (linkType === 'internal') to be exported correctly, since
@@ -15,6 +15,6 @@ export type CreateLinkMarkdownTransformerArgs = {
15
15
  linkNode: SerializedLinkNode;
16
16
  }) => string;
17
17
  };
18
- export declare const createLinkMarkdownTransformer: (args?: CreateLinkMarkdownTransformerArgs) => TextMatchTransformer;
19
- export declare const LinkMarkdownTransformer: TextMatchTransformer;
18
+ export declare const createPayloadLinkTransformer: (args?: CreatePayloadLinkTransformerArgs) => TextMatchTransformer;
19
+ export declare const PAYLOAD_LINK: TextMatchTransformer;
20
20
  //# sourceMappingURL=markdownTransformer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"markdownTransformer.d.ts","sourceRoot":"","sources":["../../../src/features/link/markdownTransformer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0DAA0D,CAAA;AACpG,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAO1D,MAAM,MAAM,iCAAiC,GAAG;IAC9C;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,QAAQ,EAAE,kBAAkB,CAAA;KAAE,KAAK,MAAM,CAAA;CACvE,CAAA;AAoBD,eAAO,MAAM,6BAA6B,GACxC,OAAO,iCAAiC,KACvC,oBAiCD,CAAA;AAEF,eAAO,MAAM,uBAAuB,EAAE,oBAAsD,CAAA"}
1
+ {"version":3,"file":"markdownTransformer.d.ts","sourceRoot":"","sources":["../../../src/features/link/markdownTransformer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAI7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAO5D,MAAM,MAAM,gCAAgC,GAAG;IAC7C;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,QAAQ,EAAE,kBAAkB,CAAA;KAAE,KAAK,MAAM,CAAA;CACvE,CAAA;AAoBD,eAAO,MAAM,4BAA4B,GACvC,OAAO,gCAAgC,KACtC,oBAiCD,CAAA;AAEF,eAAO,MAAM,YAAY,EAAE,oBAAqD,CAAA"}
@@ -22,7 +22,7 @@ const replaceTransformer = (textNode, match) => {
22
22
  textNode.replace(linkNode);
23
23
  return linkTextNode;
24
24
  };
25
- export const createLinkMarkdownTransformer = args => ({
25
+ export const createPayloadLinkTransformer = args => ({
26
26
  type: 'text-match',
27
27
  dependencies: [LinkNode],
28
28
  export: (_node, exportChildren) => {
@@ -53,5 +53,5 @@ export const createLinkMarkdownTransformer = args => ({
53
53
  replace: replaceTransformer,
54
54
  trigger: ')'
55
55
  });
56
- export const LinkMarkdownTransformer = createLinkMarkdownTransformer();
56
+ export const PAYLOAD_LINK = createPayloadLinkTransformer();
57
57
  //# sourceMappingURL=markdownTransformer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"markdownTransformer.js","names":["$createTextNode","sanitizeUrl","$createLinkNode","$isLinkNode","LinkNode","replaceTransformer","textNode","match","linkText","linkUrl","linkNode","fields","doc","linkType","newTab","url","linkTextNode","setFormat","getFormat","append","replace","createLinkMarkdownTransformer","args","type","dependencies","export","_node","exportChildren","node","getFields","internalDocToHref","exportJSON","console","warn","textContent","importRegExp","regExp","trigger","LinkMarkdownTransformer"],"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 { $createTextNode, $isTextNode } from 'lexical'\n\nimport type { TextMatchTransformer } from '../../packages/@lexical/markdown/MarkdownTransformers.js'\nimport type { SerializedLinkNode } from './nodes/types.js'\n\nimport { sanitizeUrl } from '../../lexical/utils/url.js'\nimport { $createLinkNode, $isLinkNode, LinkNode } from './nodes/LinkNode.js'\n\n// - then longer tags match (e.g. ** or __ should go before * or _)\n\nexport type CreateLinkMarkdownTransformerArgs = {\n /**\n * A function that receives a serialized internal link node and returns the URL string.\n * Required for internal links (linkType === 'internal') to be exported correctly, since\n * internal links store a doc reference rather than a URL.\n *\n * Without this, internal links will export as `[text]()` with an empty href.\n */\n internalDocToHref?: (args: { linkNode: SerializedLinkNode }) => string\n}\n\nconst replaceTransformer: TextMatchTransformer['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 return linkTextNode\n}\n\nexport const createLinkMarkdownTransformer = (\n args?: CreateLinkMarkdownTransformerArgs,\n): TextMatchTransformer => ({\n type: 'text-match',\n dependencies: [LinkNode],\n export: (_node, exportChildren) => {\n if (!$isLinkNode(_node)) {\n return null\n }\n const node: LinkNode = _node\n const fields = node.getFields()\n\n let url: string\n\n if (fields.linkType === 'internal') {\n if (args?.internalDocToHref) {\n url = sanitizeUrl(args.internalDocToHref({ linkNode: node.exportJSON() }))\n } else {\n // eslint-disable-next-line no-console\n console.warn(\n 'Lexical → Markdown converter: found internal link but internalDocToHref is not provided — link will have an empty href',\n )\n url = ''\n }\n } else {\n url = sanitizeUrl(fields.url ?? '')\n }\n\n const textContent = exportChildren(node)\n return `[${textContent}](${url})`\n },\n importRegExp: /(?<!!)\\[([^[]+)\\]\\(([^()\\s]+)(?:\\s\"((?:[^\"]*\\\\\")*[^\"]*)\"\\s*)?\\)/,\n regExp: /(?<!!)\\[([^[]+)\\]\\(([^()\\s]+)(?:\\s\"((?:[^\"]*\\\\\")*[^\"]*)\"\\s*)?\\)$/,\n replace: replaceTransformer,\n trigger: ')',\n})\n\nexport const LinkMarkdownTransformer: TextMatchTransformer = createLinkMarkdownTransformer()\n"],"mappings":"AAAA;;GAAA,CAIA;AACA;AACA;AAEA,SAASA,eAAe,QAAqB;AAK7C,SAASC,WAAW,QAAQ;AAC5B,SAASC,eAAe,EAAEC,WAAW,EAAEC,QAAQ,QAAQ;AAevD,MAAMC,kBAAA,GAAsDA,CAACC,QAAA,EAAUC,KAAA;EACrE,MAAM,GAAGC,QAAA,EAAUC,OAAA,CAAQ,GAAGF,KAAA;EAC9B,MAAMG,QAAA,GAAWR,eAAA,CAAgB;IAC/BS,MAAA,EAAQ;MACNC,GAAA,EAAK;MACLC,QAAA,EAAU;MACVC,MAAA,EAAQ;MACRC,GAAA,EAAKN;IACP;EACF;EACA,MAAMO,YAAA,GAAehB,eAAA,CAAgBQ,QAAA;EACrCQ,YAAA,CAAaC,SAAS,CAACX,QAAA,CAASY,SAAS;EACzCR,QAAA,CAASS,MAAM,CAACH,YAAA;EAChBV,QAAA,CAASc,OAAO,CAACV,QAAA;EAEjB,OAAOM,YAAA;AACT;AAEA,OAAO,MAAMK,6BAAA,GACXC,IAAA,KAC0B;EAC1BC,IAAA,EAAM;EACNC,YAAA,EAAc,CAACpB,QAAA,CAAS;EACxBqB,MAAA,EAAQA,CAACC,KAAA,EAAOC,cAAA;IACd,IAAI,CAACxB,WAAA,CAAYuB,KAAA,GAAQ;MACvB,OAAO;IACT;IACA,MAAME,IAAA,GAAiBF,KAAA;IACvB,MAAMf,MAAA,GAASiB,IAAA,CAAKC,SAAS;IAE7B,IAAId,GAAA;IAEJ,IAAIJ,MAAA,CAAOE,QAAQ,KAAK,YAAY;MAClC,IAAIS,IAAA,EAAMQ,iBAAA,EAAmB;QAC3Bf,GAAA,GAAMd,WAAA,CAAYqB,IAAA,CAAKQ,iBAAiB,CAAC;UAAEpB,QAAA,EAAUkB,IAAA,CAAKG,UAAU;QAAG;MACzE,OAAO;QACL;QACAC,OAAA,CAAQC,IAAI,CACV;QAEFlB,GAAA,GAAM;MACR;IACF,OAAO;MACLA,GAAA,GAAMd,WAAA,CAAYU,MAAA,CAAOI,GAAG,IAAI;IAClC;IAEA,MAAMmB,WAAA,GAAcP,cAAA,CAAeC,IAAA;IACnC,OAAO,IAAIM,WAAA,KAAgBnB,GAAA,GAAM;EACnC;EACAoB,YAAA,EAAc;EACdC,MAAA,EAAQ;EACRhB,OAAA,EAASf,kBAAA;EACTgC,OAAA,EAAS;AACX;AAEA,OAAO,MAAMC,uBAAA,GAAgDjB,6BAAA","ignoreList":[]}
1
+ {"version":3,"file":"markdownTransformer.js","names":["$createTextNode","sanitizeUrl","$createLinkNode","$isLinkNode","LinkNode","replaceTransformer","textNode","match","linkText","linkUrl","linkNode","fields","doc","linkType","newTab","url","linkTextNode","setFormat","getFormat","append","replace","createPayloadLinkTransformer","args","type","dependencies","export","_node","exportChildren","node","getFields","internalDocToHref","exportJSON","console","warn","textContent","importRegExp","regExp","trigger","PAYLOAD_LINK"],"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 } from 'lexical'\n\nimport type { SerializedLinkNode } from './server/schema.js'\n\nimport { sanitizeUrl } from '../../lexical/utils/url.js'\nimport { $createLinkNode, $isLinkNode, LinkNode } from './nodes/LinkNode.js'\n\n// - then longer tags match (e.g. ** or __ should go before * or _)\n\nexport type CreatePayloadLinkTransformerArgs = {\n /**\n * A function that receives a serialized internal link node and returns the URL string.\n * Required for internal links (linkType === 'internal') to be exported correctly, since\n * internal links store a doc reference rather than a URL.\n *\n * Without this, internal links will export as `[text]()` with an empty href.\n */\n internalDocToHref?: (args: { linkNode: SerializedLinkNode }) => string\n}\n\nconst replaceTransformer: TextMatchTransformer['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 return linkTextNode\n}\n\nexport const createPayloadLinkTransformer = (\n args?: CreatePayloadLinkTransformerArgs,\n): TextMatchTransformer => ({\n type: 'text-match',\n dependencies: [LinkNode],\n export: (_node, exportChildren) => {\n if (!$isLinkNode(_node)) {\n return null\n }\n const node: LinkNode = _node\n const fields = node.getFields()\n\n let url: string\n\n if (fields.linkType === 'internal') {\n if (args?.internalDocToHref) {\n url = sanitizeUrl(args.internalDocToHref({ linkNode: node.exportJSON() }))\n } else {\n // eslint-disable-next-line no-console\n console.warn(\n 'Lexical → Markdown converter: found internal link but internalDocToHref is not provided — link will have an empty href',\n )\n url = ''\n }\n } else {\n url = sanitizeUrl(fields.url ?? '')\n }\n\n const textContent = exportChildren(node)\n return `[${textContent}](${url})`\n },\n importRegExp: /(?<!!)\\[([^[]+)\\]\\(([^()\\s]+)(?:\\s\"((?:[^\"]*\\\\\")*[^\"]*)\"\\s*)?\\)/,\n regExp: /(?<!!)\\[([^[]+)\\]\\(([^()\\s]+)(?:\\s\"((?:[^\"]*\\\\\")*[^\"]*)\"\\s*)?\\)$/,\n replace: replaceTransformer,\n trigger: ')',\n})\n\nexport const PAYLOAD_LINK: TextMatchTransformer = createPayloadLinkTransformer()\n"],"mappings":"AAAA;;GAAA,CAIA;AACA;AACA;AAIA,SAASA,eAAe,QAAQ;AAIhC,SAASC,WAAW,QAAQ;AAC5B,SAASC,eAAe,EAAEC,WAAW,EAAEC,QAAQ,QAAQ;AAevD,MAAMC,kBAAA,GAAsDA,CAACC,QAAA,EAAUC,KAAA;EACrE,MAAM,GAAGC,QAAA,EAAUC,OAAA,CAAQ,GAAGF,KAAA;EAC9B,MAAMG,QAAA,GAAWR,eAAA,CAAgB;IAC/BS,MAAA,EAAQ;MACNC,GAAA,EAAK;MACLC,QAAA,EAAU;MACVC,MAAA,EAAQ;MACRC,GAAA,EAAKN;IACP;EACF;EACA,MAAMO,YAAA,GAAehB,eAAA,CAAgBQ,QAAA;EACrCQ,YAAA,CAAaC,SAAS,CAACX,QAAA,CAASY,SAAS;EACzCR,QAAA,CAASS,MAAM,CAACH,YAAA;EAChBV,QAAA,CAASc,OAAO,CAACV,QAAA;EAEjB,OAAOM,YAAA;AACT;AAEA,OAAO,MAAMK,4BAAA,GACXC,IAAA,KAC0B;EAC1BC,IAAA,EAAM;EACNC,YAAA,EAAc,CAACpB,QAAA,CAAS;EACxBqB,MAAA,EAAQA,CAACC,KAAA,EAAOC,cAAA;IACd,IAAI,CAACxB,WAAA,CAAYuB,KAAA,GAAQ;MACvB,OAAO;IACT;IACA,MAAME,IAAA,GAAiBF,KAAA;IACvB,MAAMf,MAAA,GAASiB,IAAA,CAAKC,SAAS;IAE7B,IAAId,GAAA;IAEJ,IAAIJ,MAAA,CAAOE,QAAQ,KAAK,YAAY;MAClC,IAAIS,IAAA,EAAMQ,iBAAA,EAAmB;QAC3Bf,GAAA,GAAMd,WAAA,CAAYqB,IAAA,CAAKQ,iBAAiB,CAAC;UAAEpB,QAAA,EAAUkB,IAAA,CAAKG,UAAU;QAAG;MACzE,OAAO;QACL;QACAC,OAAA,CAAQC,IAAI,CACV;QAEFlB,GAAA,GAAM;MACR;IACF,OAAO;MACLA,GAAA,GAAMd,WAAA,CAAYU,MAAA,CAAOI,GAAG,IAAI;IAClC;IAEA,MAAMmB,WAAA,GAAcP,cAAA,CAAeC,IAAA;IACnC,OAAO,IAAIM,WAAA,KAAgBnB,GAAA,GAAM;EACnC;EACAoB,YAAA,EAAc;EACdC,MAAA,EAAQ;EACRhB,OAAA,EAASf,kBAAA;EACTgC,OAAA,EAAS;AACX;AAEA,OAAO,MAAMC,YAAA,GAAqCjB,4BAAA","ignoreList":[]}
@@ -1,16 +1,16 @@
1
1
  import { createHeadlessEditor } from '@lexical/headless';
2
2
  import { $createParagraphNode, $createTextNode, $getRoot } from 'lexical';
3
3
  import { describe, expect, it } from 'vitest';
4
- import { $convertToMarkdownString } from '../../packages/@lexical/markdown/index.js';
4
+ import { $convertToMarkdownString } from '@lexical/markdown';
5
5
  import { AutoLinkNode } from './nodes/AutoLinkNode.js';
6
6
  import { $createLinkNode, LinkNode } from './nodes/LinkNode.js';
7
- import { LinkMarkdownTransformer, createLinkMarkdownTransformer } from './markdownTransformer.js';
7
+ import { PAYLOAD_LINK, createPayloadLinkTransformer } from './markdownTransformer.js';
8
8
  function createEditor() {
9
9
  return createHeadlessEditor({
10
10
  nodes: [LinkNode, AutoLinkNode]
11
11
  });
12
12
  }
13
- function toMarkdown(setupFn, transformer = LinkMarkdownTransformer) {
13
+ function toMarkdown(setupFn, transformer = PAYLOAD_LINK) {
14
14
  const editor = createEditor();
15
15
  editor.update(setupFn, {
16
16
  discrete: true
@@ -21,7 +21,7 @@ function toMarkdown(setupFn, transformer = LinkMarkdownTransformer) {
21
21
  });
22
22
  return markdown;
23
23
  }
24
- describe('createLinkMarkdownTransformer', () => {
24
+ describe('createPayloadLinkTransformer', () => {
25
25
  describe('custom links', () => {
26
26
  it('should export a custom link with its url', () => {
27
27
  const markdown = toMarkdown(() => {
@@ -104,7 +104,7 @@ describe('createLinkMarkdownTransformer', () => {
104
104
  expect(markdown).toBe('[About]()');
105
105
  });
106
106
  it('should call internalDocToHref and use the returned url', () => {
107
- const transformer = createLinkMarkdownTransformer({
107
+ const transformer = createPayloadLinkTransformer({
108
108
  internalDocToHref: ({
109
109
  linkNode
110
110
  }) => {
@@ -136,7 +136,7 @@ describe('createLinkMarkdownTransformer', () => {
136
136
  });
137
137
  it('should pass the full serialized link node to internalDocToHref', () => {
138
138
  let capturedLinkNode = null;
139
- const transformer = createLinkMarkdownTransformer({
139
+ const transformer = createPayloadLinkTransformer({
140
140
  internalDocToHref: ({
141
141
  linkNode
142
142
  }) => {
@@ -171,8 +171,8 @@ describe('createLinkMarkdownTransformer', () => {
171
171
  expect(capturedLinkNode.fields.newTab).toBe(true);
172
172
  });
173
173
  });
174
- describe('LinkMarkdownTransformer (static export)', () => {
175
- it('should behave identically to createLinkMarkdownTransformer() with no args', () => {
174
+ describe('PAYLOAD_LINK (static export)', () => {
175
+ it('should behave identically to createPayloadLinkTransformer() with no args', () => {
176
176
  const setup = () => {
177
177
  const link = $createLinkNode({
178
178
  fields: {
@@ -185,8 +185,8 @@ describe('createLinkMarkdownTransformer', () => {
185
185
  link.append($createTextNode('Example'));
186
186
  $getRoot().append($createParagraphNode().append(link));
187
187
  };
188
- const fromStatic = toMarkdown(setup, LinkMarkdownTransformer);
189
- const fromFactory = toMarkdown(setup, createLinkMarkdownTransformer());
188
+ const fromStatic = toMarkdown(setup, PAYLOAD_LINK);
189
+ const fromFactory = toMarkdown(setup, createPayloadLinkTransformer());
190
190
  expect(fromStatic).toBe(fromFactory);
191
191
  expect(fromStatic).toBe('[Example](https://example.com)');
192
192
  });
@@ -1 +1 @@
1
- {"version":3,"file":"markdownTransformer.spec.js","names":["createHeadlessEditor","$createParagraphNode","$createTextNode","$getRoot","describe","expect","it","$convertToMarkdownString","AutoLinkNode","$createLinkNode","LinkNode","LinkMarkdownTransformer","createLinkMarkdownTransformer","createEditor","nodes","toMarkdown","setupFn","transformer","editor","update","discrete","markdown","getEditorState","read","link","fields","linkType","url","newTab","doc","append","toBe","markdownNull","markdownUndefined","relationTo","value","id","slug","internalDocToHref","linkNode","capturedLinkNode","title","not","toBeNull","toMatchObject","setup","fromStatic","fromFactory"],"sources":["../../../src/features/link/markdownTransformer.spec.ts"],"sourcesContent":["import { createHeadlessEditor } from '@lexical/headless'\nimport { $createParagraphNode, $createTextNode, $getRoot } from 'lexical'\nimport { describe, expect, it } from 'vitest'\n\nimport { $convertToMarkdownString } from '../../packages/@lexical/markdown/index.js'\nimport { AutoLinkNode } from './nodes/AutoLinkNode.js'\nimport { $createLinkNode, LinkNode } from './nodes/LinkNode.js'\nimport type { SerializedLinkNode } from './nodes/types.js'\nimport { LinkMarkdownTransformer, createLinkMarkdownTransformer } from './markdownTransformer.js'\n\nfunction createEditor() {\n return createHeadlessEditor({ nodes: [LinkNode, AutoLinkNode] })\n}\n\nfunction toMarkdown(setupFn: () => void, transformer = LinkMarkdownTransformer): string {\n const editor = createEditor()\n editor.update(setupFn, { discrete: true })\n let markdown = ''\n editor.getEditorState().read(() => {\n markdown = $convertToMarkdownString([transformer])\n })\n return markdown\n}\n\ndescribe('createLinkMarkdownTransformer', () => {\n describe('custom links', () => {\n it('should export a custom link with its url', () => {\n const markdown = toMarkdown(() => {\n const link = $createLinkNode({\n fields: { linkType: 'custom', url: 'https://payloadcms.com', newTab: false, doc: null },\n })\n link.append($createTextNode('Payload'))\n $getRoot().append($createParagraphNode().append(link))\n })\n\n expect(markdown).toBe('[Payload](https://payloadcms.com)')\n })\n\n it('should export a custom link that opens in a new tab', () => {\n // newTab is a Payload field — markdown has no equivalent, so it is intentionally dropped\n const markdown = toMarkdown(() => {\n const link = $createLinkNode({\n fields: { linkType: 'custom', url: 'https://payloadcms.com', newTab: true, doc: null },\n })\n link.append($createTextNode('Payload'))\n $getRoot().append($createParagraphNode().append(link))\n })\n\n expect(markdown).toBe('[Payload](https://payloadcms.com)')\n })\n\n it('should produce an empty href when url is null or undefined', () => {\n const markdownNull = toMarkdown(() => {\n const link = $createLinkNode({\n fields: { linkType: 'custom', url: null as unknown as string, newTab: false, doc: null },\n })\n link.append($createTextNode('Broken'))\n $getRoot().append($createParagraphNode().append(link))\n })\n\n const markdownUndefined = toMarkdown(() => {\n const link = $createLinkNode({\n fields: { linkType: 'custom', newTab: false, doc: null },\n })\n link.append($createTextNode('Broken'))\n $getRoot().append($createParagraphNode().append(link))\n })\n\n expect(markdownNull).toBe('[Broken]()')\n expect(markdownUndefined).toBe('[Broken]()')\n })\n })\n\n describe('internal links', () => {\n it('should export an empty href when no internalDocToHref is provided', () => {\n const markdown = toMarkdown(() => {\n const link = $createLinkNode({\n fields: {\n linkType: 'internal',\n doc: { relationTo: 'pages', value: { id: '1', slug: 'about' } },\n newTab: false,\n },\n })\n link.append($createTextNode('About'))\n $getRoot().append($createParagraphNode().append(link))\n })\n\n expect(markdown).toBe('[About]()')\n })\n\n it('should call internalDocToHref and use the returned url', () => {\n const transformer = createLinkMarkdownTransformer({\n internalDocToHref: ({ linkNode }) => {\n const value = linkNode.fields.doc?.value\n if (value && typeof value === 'object' && 'slug' in value) {\n return `/${value.slug}`\n }\n return '/'\n },\n })\n\n const markdown = toMarkdown(() => {\n const link = $createLinkNode({\n fields: {\n linkType: 'internal',\n doc: { relationTo: 'pages', value: { id: '1', slug: 'about' } },\n newTab: false,\n },\n })\n link.append($createTextNode('About'))\n $getRoot().append($createParagraphNode().append(link))\n }, transformer)\n\n expect(markdown).toBe('[About](/about)')\n })\n\n it('should pass the full serialized link node to internalDocToHref', () => {\n let capturedLinkNode: SerializedLinkNode | null = null\n\n const transformer = createLinkMarkdownTransformer({\n internalDocToHref: ({ linkNode }) => {\n capturedLinkNode = linkNode\n return '/captured'\n },\n })\n\n toMarkdown(() => {\n const link = $createLinkNode({\n fields: {\n linkType: 'internal',\n doc: { relationTo: 'pages', value: { id: '42', title: 'Home' } },\n newTab: true,\n },\n })\n link.append($createTextNode('Home'))\n $getRoot().append($createParagraphNode().append(link))\n }, transformer)\n\n expect(capturedLinkNode).not.toBeNull()\n expect(capturedLinkNode!.fields.linkType).toBe('internal')\n expect(capturedLinkNode!.fields.doc?.relationTo).toBe('pages')\n expect(capturedLinkNode!.fields.doc?.value).toMatchObject({ id: '42', title: 'Home' })\n expect(capturedLinkNode!.fields.newTab).toBe(true)\n })\n })\n\n describe('LinkMarkdownTransformer (static export)', () => {\n it('should behave identically to createLinkMarkdownTransformer() with no args', () => {\n const setup = () => {\n const link = $createLinkNode({\n fields: { linkType: 'custom', url: 'https://example.com', newTab: false, doc: null },\n })\n link.append($createTextNode('Example'))\n $getRoot().append($createParagraphNode().append(link))\n }\n\n const fromStatic = toMarkdown(setup, LinkMarkdownTransformer)\n const fromFactory = toMarkdown(setup, createLinkMarkdownTransformer())\n\n expect(fromStatic).toBe(fromFactory)\n expect(fromStatic).toBe('[Example](https://example.com)')\n })\n })\n})\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"markdownTransformer.spec.js","names":["createHeadlessEditor","$createParagraphNode","$createTextNode","$getRoot","describe","expect","it","$convertToMarkdownString","AutoLinkNode","$createLinkNode","LinkNode","PAYLOAD_LINK","createPayloadLinkTransformer","createEditor","nodes","toMarkdown","setupFn","transformer","editor","update","discrete","markdown","getEditorState","read","link","fields","linkType","url","newTab","doc","append","toBe","markdownNull","markdownUndefined","relationTo","value","id","slug","internalDocToHref","linkNode","capturedLinkNode","title","not","toBeNull","toMatchObject","setup","fromStatic","fromFactory"],"sources":["../../../src/features/link/markdownTransformer.spec.ts"],"sourcesContent":["import { createHeadlessEditor } from '@lexical/headless'\nimport { $createParagraphNode, $createTextNode, $getRoot } from 'lexical'\nimport { describe, expect, it } from 'vitest'\n\nimport { $convertToMarkdownString } from '@lexical/markdown'\nimport { AutoLinkNode } from './nodes/AutoLinkNode.js'\nimport { $createLinkNode, LinkNode } from './nodes/LinkNode.js'\nimport type { SerializedLinkNode } from './server/schema.js'\nimport { PAYLOAD_LINK, createPayloadLinkTransformer } from './markdownTransformer.js'\n\nfunction createEditor() {\n return createHeadlessEditor({ nodes: [LinkNode, AutoLinkNode] })\n}\n\nfunction toMarkdown(setupFn: () => void, transformer = PAYLOAD_LINK): string {\n const editor = createEditor()\n editor.update(setupFn, { discrete: true })\n let markdown = ''\n editor.getEditorState().read(() => {\n markdown = $convertToMarkdownString([transformer])\n })\n return markdown\n}\n\ndescribe('createPayloadLinkTransformer', () => {\n describe('custom links', () => {\n it('should export a custom link with its url', () => {\n const markdown = toMarkdown(() => {\n const link = $createLinkNode({\n fields: { linkType: 'custom', url: 'https://payloadcms.com', newTab: false, doc: null },\n })\n link.append($createTextNode('Payload'))\n $getRoot().append($createParagraphNode().append(link))\n })\n\n expect(markdown).toBe('[Payload](https://payloadcms.com)')\n })\n\n it('should export a custom link that opens in a new tab', () => {\n // newTab is a Payload field — markdown has no equivalent, so it is intentionally dropped\n const markdown = toMarkdown(() => {\n const link = $createLinkNode({\n fields: { linkType: 'custom', url: 'https://payloadcms.com', newTab: true, doc: null },\n })\n link.append($createTextNode('Payload'))\n $getRoot().append($createParagraphNode().append(link))\n })\n\n expect(markdown).toBe('[Payload](https://payloadcms.com)')\n })\n\n it('should produce an empty href when url is null or undefined', () => {\n const markdownNull = toMarkdown(() => {\n const link = $createLinkNode({\n fields: { linkType: 'custom', url: null as unknown as string, newTab: false, doc: null },\n })\n link.append($createTextNode('Broken'))\n $getRoot().append($createParagraphNode().append(link))\n })\n\n const markdownUndefined = toMarkdown(() => {\n const link = $createLinkNode({\n fields: { linkType: 'custom', newTab: false, doc: null },\n })\n link.append($createTextNode('Broken'))\n $getRoot().append($createParagraphNode().append(link))\n })\n\n expect(markdownNull).toBe('[Broken]()')\n expect(markdownUndefined).toBe('[Broken]()')\n })\n })\n\n describe('internal links', () => {\n it('should export an empty href when no internalDocToHref is provided', () => {\n const markdown = toMarkdown(() => {\n const link = $createLinkNode({\n fields: {\n linkType: 'internal',\n doc: { relationTo: 'pages', value: { id: '1', slug: 'about' } },\n newTab: false,\n },\n })\n link.append($createTextNode('About'))\n $getRoot().append($createParagraphNode().append(link))\n })\n\n expect(markdown).toBe('[About]()')\n })\n\n it('should call internalDocToHref and use the returned url', () => {\n const transformer = createPayloadLinkTransformer({\n internalDocToHref: ({ linkNode }) => {\n const value = linkNode.fields.doc?.value\n if (value && typeof value === 'object' && 'slug' in value) {\n return `/${value.slug}`\n }\n return '/'\n },\n })\n\n const markdown = toMarkdown(() => {\n const link = $createLinkNode({\n fields: {\n linkType: 'internal',\n doc: { relationTo: 'pages', value: { id: '1', slug: 'about' } },\n newTab: false,\n },\n })\n link.append($createTextNode('About'))\n $getRoot().append($createParagraphNode().append(link))\n }, transformer)\n\n expect(markdown).toBe('[About](/about)')\n })\n\n it('should pass the full serialized link node to internalDocToHref', () => {\n let capturedLinkNode: SerializedLinkNode | null = null\n\n const transformer = createPayloadLinkTransformer({\n internalDocToHref: ({ linkNode }) => {\n capturedLinkNode = linkNode\n return '/captured'\n },\n })\n\n toMarkdown(() => {\n const link = $createLinkNode({\n fields: {\n linkType: 'internal',\n doc: { relationTo: 'pages', value: { id: '42', title: 'Home' } },\n newTab: true,\n },\n })\n link.append($createTextNode('Home'))\n $getRoot().append($createParagraphNode().append(link))\n }, transformer)\n\n expect(capturedLinkNode).not.toBeNull()\n expect(capturedLinkNode!.fields.linkType).toBe('internal')\n expect(capturedLinkNode!.fields.doc?.relationTo).toBe('pages')\n expect(capturedLinkNode!.fields.doc?.value).toMatchObject({ id: '42', title: 'Home' })\n expect(capturedLinkNode!.fields.newTab).toBe(true)\n })\n })\n\n describe('PAYLOAD_LINK (static export)', () => {\n it('should behave identically to createPayloadLinkTransformer() with no args', () => {\n const setup = () => {\n const link = $createLinkNode({\n fields: { linkType: 'custom', url: 'https://example.com', newTab: false, doc: null },\n })\n link.append($createTextNode('Example'))\n $getRoot().append($createParagraphNode().append(link))\n }\n\n const fromStatic = toMarkdown(setup, PAYLOAD_LINK)\n const fromFactory = toMarkdown(setup, createPayloadLinkTransformer())\n\n expect(fromStatic).toBe(fromFactory)\n expect(fromStatic).toBe('[Example](https://example.com)')\n })\n })\n})\n"],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,5 @@
1
- import type { ElementNode, LexicalNode, LexicalUpdateJSON, RangeSelection } from 'lexical';
2
- import type { LinkFields, SerializedAutoLinkNode } from './types.js';
1
+ import type { ElementNode, LexicalNode, LexicalUpdateJSON, RangeSelection, SerializedElementNode } from 'lexical';
2
+ import type { LinkFields, SerializedAutoLinkNode } from '../server/schema.js';
3
3
  import { LinkNode } from './LinkNode.js';
4
4
  export declare class AutoLinkNode extends LinkNode {
5
5
  static clone(node: AutoLinkNode): AutoLinkNode;
@@ -8,7 +8,7 @@ export declare class AutoLinkNode extends LinkNode {
8
8
  static importJSON(serializedNode: SerializedAutoLinkNode): AutoLinkNode;
9
9
  exportJSON(): SerializedAutoLinkNode;
10
10
  insertNewAfter(selection: RangeSelection, restoreSelection?: boolean): ElementNode | null;
11
- updateFromJSON(serializedNode: LexicalUpdateJSON<SerializedAutoLinkNode>): this;
11
+ updateFromJSON(_serializedNode: LexicalUpdateJSON<SerializedElementNode>): this;
12
12
  }
13
13
  export declare function $createAutoLinkNode({ fields }: {
14
14
  fields?: LinkFields;
@@ -1 +1 @@
1
- {"version":3,"file":"AutoLinkNode.d.ts","sourceRoot":"","sources":["../../../../src/features/link/nodes/AutoLinkNode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAI1F,OAAO,KAAK,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AAEpE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAKxC,qBAAa,YAAa,SAAQ,QAAQ;WACxB,KAAK,CAAC,IAAI,EAAE,YAAY,GAAG,YAAY;WAIvC,OAAO,IAAI,MAAM;WAIjB,SAAS,IAAI,IAAI;WAKjB,UAAU,CAAC,cAAc,EAAE,sBAAsB,GAAG,YAAY;IAmBhF,UAAU,IAAI,sBAAsB;IAa3B,cAAc,CAAC,SAAS,EAAE,cAAc,EAAE,gBAAgB,UAAO,GAAG,WAAW,GAAG,IAAI;IAUtF,cAAc,CAAC,cAAc,EAAE,iBAAiB,CAAC,sBAAsB,CAAC,GAAG,IAAI;CAGzF;AAED,wBAAgB,mBAAmB,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,CAAC,EAAE,UAAU,CAAA;CAAE,GAAG,YAAY,CAErF;AACD,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,IAAI,YAAY,CAE1F"}
1
+ {"version":3,"file":"AutoLinkNode.d.ts","sourceRoot":"","sources":["../../../../src/features/link/nodes/AutoLinkNode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACtB,MAAM,SAAS,CAAA;AAIhB,OAAO,KAAK,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AAE7E,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAKxC,qBAAa,YAAa,SAAQ,QAAQ;WACxB,KAAK,CAAC,IAAI,EAAE,YAAY,GAAG,YAAY;WAIvC,OAAO,IAAI,MAAM;WAIjB,SAAS,IAAI,IAAI;WAKjB,UAAU,CAAC,cAAc,EAAE,sBAAsB,GAAG,YAAY;IAmBhF,UAAU,IAAI,sBAAsB;IAa3B,cAAc,CAAC,SAAS,EAAE,cAAc,EAAE,gBAAgB,UAAO,GAAG,WAAW,GAAG,IAAI;IAUtF,cAAc,CAAC,eAAe,EAAE,iBAAiB,CAAC,qBAAqB,CAAC,GAAG,IAAI;CAIzF;AAED,wBAAgB,mBAAmB,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,CAAC,EAAE,UAAU,CAAA;CAAE,GAAG,YAAY,CAErF;AACD,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,IAAI,YAAY,CAE1F"}
@@ -52,7 +52,8 @@ export class AutoLinkNode extends LinkNode {
52
52
  }
53
53
  return null;
54
54
  }
55
- updateFromJSON(serializedNode) {
55
+ updateFromJSON(_serializedNode) {
56
+ const serializedNode = _serializedNode;
56
57
  return super.updateFromJSON(serializedNode).setFields(serializedNode.fields);
57
58
  }
58
59
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AutoLinkNode.js","names":["$applyNodeReplacement","$isElementNode","LinkNode","AutoLinkNode","clone","node","id","fields","__fields","key","__key","getType","importDOM","importJSON","serializedNode","$createAutoLinkNode","updateFromJSON","version","doc","value","exportJSON","serialized","type","children","direction","format","indent","insertNewAfter","selection","restoreSelection","element","getParentOrThrow","linkNode","append","setFields","$isAutoLinkNode"],"sources":["../../../../src/features/link/nodes/AutoLinkNode.ts"],"sourcesContent":["import type { ElementNode, LexicalNode, LexicalUpdateJSON, 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 override clone(node: AutoLinkNode): AutoLinkNode {\n return new this({ id: '', fields: node.__fields, key: node.__key })\n }\n\n static override getType(): string {\n return 'autolink'\n }\n\n static override importDOM(): null {\n // TODO: Should link node should handle the import over autolink?\n return null\n }\n\n static override importJSON(serializedNode: SerializedAutoLinkNode): AutoLinkNode {\n const node = $createAutoLinkNode({}).updateFromJSON(serializedNode)\n\n /**\n * @todo remove in 4.0\n */\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 return node\n }\n\n // @ts-expect-error\n exportJSON(): SerializedAutoLinkNode {\n const serialized = super.exportJSON()\n return {\n type: 'autolink',\n children: serialized.children,\n direction: serialized.direction,\n fields: serialized.fields,\n format: serialized.format,\n indent: serialized.indent,\n version: 2,\n }\n }\n\n override 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 override updateFromJSON(serializedNode: LexicalUpdateJSON<SerializedAutoLinkNode>): this {\n return super.updateFromJSON(serializedNode).setFields(serializedNode.fields)\n }\n}\n\nexport function $createAutoLinkNode({ fields }: { fields?: LinkFields }): AutoLinkNode {\n return $applyNodeReplacement(new AutoLinkNode({ id: '', fields }))\n}\nexport function $isAutoLinkNode(node: LexicalNode | null | undefined): node is AutoLinkNode {\n return node instanceof AutoLinkNode\n}\n"],"mappings":"AAEA,SAASA,qBAAqB,EAAEC,cAAc,QAAQ;AAItD,SAASC,QAAQ,QAAQ;AAEzB;AACA;AAEA,OAAO,MAAMC,YAAA,SAAqBD,QAAA;EAChC,OAAgBE,MAAMC,IAAkB,EAAgB;IACtD,OAAO,IAAI,IAAI,CAAC;MAAEC,EAAA,EAAI;MAAIC,MAAA,EAAQF,IAAA,CAAKG,QAAQ;MAAEC,GAAA,EAAKJ,IAAA,CAAKK;IAAM;EACnE;EAEA,OAAgBC,QAAA,EAAkB;IAChC,OAAO;EACT;EAEA,OAAgBC,UAAA,EAAkB;IAChC;IACA,OAAO;EACT;EAEA,OAAgBC,WAAWC,cAAsC,EAAgB;IAC/E,MAAMT,IAAA,GAAOU,mBAAA,CAAoB,CAAC,GAAGC,cAAc,CAACF,cAAA;IAEpD;;;IAGA,IACEA,cAAA,CAAeG,OAAO,KAAK,KAC3B,OAAOH,cAAA,CAAeP,MAAM,EAAEW,GAAA,EAAKC,KAAA,KAAU,YAC7CL,cAAA,CAAeP,MAAM,EAAEW,GAAA,EAAKC,KAAA,EAAOb,EAAA,EACnC;MACAQ,cAAA,CAAeP,MAAM,CAACW,GAAG,CAACC,KAAK,GAAGL,cAAA,CAAeP,MAAM,CAACW,GAAG,CAACC,KAAK,CAACb,EAAE;MACpEQ,cAAA,CAAeG,OAAO,GAAG;IAC3B;IAEA,OAAOZ,IAAA;EACT;EAEA;EACAe,WAAA,EAAqC;IACnC,MAAMC,UAAA,GAAa,KAAK,CAACD,UAAA;IACzB,OAAO;MACLE,IAAA,EAAM;MACNC,QAAA,EAAUF,UAAA,CAAWE,QAAQ;MAC7BC,SAAA,EAAWH,UAAA,CAAWG,SAAS;MAC/BjB,MAAA,EAAQc,UAAA,CAAWd,MAAM;MACzBkB,MAAA,EAAQJ,UAAA,CAAWI,MAAM;MACzBC,MAAA,EAAQL,UAAA,CAAWK,MAAM;MACzBT,OAAA,EAAS;IACX;EACF;EAESU,eAAeC,SAAyB,EAAEC,gBAAA,GAAmB,IAAI,EAAsB;IAC9F,MAAMC,OAAA,GAAU,IAAI,CAACC,gBAAgB,GAAGJ,cAAc,CAACC,SAAA,EAAWC,gBAAA;IAClE,IAAI5B,cAAA,CAAe6B,OAAA,GAAU;MAC3B,MAAME,QAAA,GAAWjB,mBAAA,CAAoB;QAAER,MAAA,EAAQ,IAAI,CAACC;MAAS;MAC7DsB,OAAA,CAAQG,MAAM,CAACD,QAAA;MACf,OAAOA,QAAA;IACT;IACA,OAAO;EACT;EAEShB,eAAeF,cAAyD,EAAQ;IACvF,OAAO,KAAK,CAACE,cAAA,CAAeF,cAAA,EAAgBoB,SAAS,CAACpB,cAAA,CAAeP,MAAM;EAC7E;AACF;AAEA,OAAO,SAASQ,oBAAoB;EAAER;AAAM,CAA2B;EACrE,OAAOP,qBAAA,CAAsB,IAAIG,YAAA,CAAa;IAAEG,EAAA,EAAI;IAAIC;EAAO;AACjE;AACA,OAAO,SAAS4B,gBAAgB9B,IAAoC;EAClE,OAAOA,IAAA,YAAgBF,YAAA;AACzB","ignoreList":[]}
1
+ {"version":3,"file":"AutoLinkNode.js","names":["$applyNodeReplacement","$isElementNode","LinkNode","AutoLinkNode","clone","node","id","fields","__fields","key","__key","getType","importDOM","importJSON","serializedNode","$createAutoLinkNode","updateFromJSON","version","doc","value","exportJSON","serialized","type","children","direction","format","indent","insertNewAfter","selection","restoreSelection","element","getParentOrThrow","linkNode","append","_serializedNode","setFields","$isAutoLinkNode"],"sources":["../../../../src/features/link/nodes/AutoLinkNode.ts"],"sourcesContent":["import type {\n ElementNode,\n LexicalNode,\n LexicalUpdateJSON,\n RangeSelection,\n SerializedElementNode,\n} from 'lexical'\n\nimport { $applyNodeReplacement, $isElementNode } from 'lexical'\n\nimport type { LinkFields, SerializedAutoLinkNode } from '../server/schema.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 override clone(node: AutoLinkNode): AutoLinkNode {\n return new this({ id: '', fields: node.__fields, key: node.__key })\n }\n\n static override getType(): string {\n return 'autolink'\n }\n\n static override importDOM(): null {\n // TODO: Should link node should handle the import over autolink?\n return null\n }\n\n static override importJSON(serializedNode: SerializedAutoLinkNode): AutoLinkNode {\n const node = $createAutoLinkNode({}).updateFromJSON(serializedNode)\n\n /**\n * @todo remove in 4.0\n */\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 return node\n }\n\n // @ts-expect-error\n exportJSON(): SerializedAutoLinkNode {\n const serialized = super.exportJSON()\n return {\n type: 'autolink',\n children: serialized.children,\n direction: serialized.direction,\n fields: serialized.fields,\n format: serialized.format,\n indent: serialized.indent,\n version: 2,\n }\n }\n\n override 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 override updateFromJSON(_serializedNode: LexicalUpdateJSON<SerializedElementNode>): this {\n const serializedNode = _serializedNode as unknown as SerializedAutoLinkNode\n return super.updateFromJSON(serializedNode).setFields(serializedNode.fields)\n }\n}\n\nexport function $createAutoLinkNode({ fields }: { fields?: LinkFields }): AutoLinkNode {\n return $applyNodeReplacement(new AutoLinkNode({ id: '', fields }))\n}\nexport function $isAutoLinkNode(node: LexicalNode | null | undefined): node is AutoLinkNode {\n return node instanceof AutoLinkNode\n}\n"],"mappings":"AAQA,SAASA,qBAAqB,EAAEC,cAAc,QAAQ;AAItD,SAASC,QAAQ,QAAQ;AAEzB;AACA;AAEA,OAAO,MAAMC,YAAA,SAAqBD,QAAA;EAChC,OAAgBE,MAAMC,IAAkB,EAAgB;IACtD,OAAO,IAAI,IAAI,CAAC;MAAEC,EAAA,EAAI;MAAIC,MAAA,EAAQF,IAAA,CAAKG,QAAQ;MAAEC,GAAA,EAAKJ,IAAA,CAAKK;IAAM;EACnE;EAEA,OAAgBC,QAAA,EAAkB;IAChC,OAAO;EACT;EAEA,OAAgBC,UAAA,EAAkB;IAChC;IACA,OAAO;EACT;EAEA,OAAgBC,WAAWC,cAAsC,EAAgB;IAC/E,MAAMT,IAAA,GAAOU,mBAAA,CAAoB,CAAC,GAAGC,cAAc,CAACF,cAAA;IAEpD;;;IAGA,IACEA,cAAA,CAAeG,OAAO,KAAK,KAC3B,OAAOH,cAAA,CAAeP,MAAM,EAAEW,GAAA,EAAKC,KAAA,KAAU,YAC7CL,cAAA,CAAeP,MAAM,EAAEW,GAAA,EAAKC,KAAA,EAAOb,EAAA,EACnC;MACAQ,cAAA,CAAeP,MAAM,CAACW,GAAG,CAACC,KAAK,GAAGL,cAAA,CAAeP,MAAM,CAACW,GAAG,CAACC,KAAK,CAACb,EAAE;MACpEQ,cAAA,CAAeG,OAAO,GAAG;IAC3B;IAEA,OAAOZ,IAAA;EACT;EAEA;EACAe,WAAA,EAAqC;IACnC,MAAMC,UAAA,GAAa,KAAK,CAACD,UAAA;IACzB,OAAO;MACLE,IAAA,EAAM;MACNC,QAAA,EAAUF,UAAA,CAAWE,QAAQ;MAC7BC,SAAA,EAAWH,UAAA,CAAWG,SAAS;MAC/BjB,MAAA,EAAQc,UAAA,CAAWd,MAAM;MACzBkB,MAAA,EAAQJ,UAAA,CAAWI,MAAM;MACzBC,MAAA,EAAQL,UAAA,CAAWK,MAAM;MACzBT,OAAA,EAAS;IACX;EACF;EAESU,eAAeC,SAAyB,EAAEC,gBAAA,GAAmB,IAAI,EAAsB;IAC9F,MAAMC,OAAA,GAAU,IAAI,CAACC,gBAAgB,GAAGJ,cAAc,CAACC,SAAA,EAAWC,gBAAA;IAClE,IAAI5B,cAAA,CAAe6B,OAAA,GAAU;MAC3B,MAAME,QAAA,GAAWjB,mBAAA,CAAoB;QAAER,MAAA,EAAQ,IAAI,CAACC;MAAS;MAC7DsB,OAAA,CAAQG,MAAM,CAACD,QAAA;MACf,OAAOA,QAAA;IACT;IACA,OAAO;EACT;EAEShB,eAAekB,eAAyD,EAAQ;IACvF,MAAMpB,cAAA,GAAiBoB,eAAA;IACvB,OAAO,KAAK,CAAClB,cAAA,CAAeF,cAAA,EAAgBqB,SAAS,CAACrB,cAAA,CAAeP,MAAM;EAC7E;AACF;AAEA,OAAO,SAASQ,oBAAoB;EAAER;AAAM,CAA2B;EACrE,OAAOP,qBAAA,CAAsB,IAAIG,YAAA,CAAa;IAAEG,EAAA,EAAI;IAAIC;EAAO;AACjE;AACA,OAAO,SAAS6B,gBAAgB/B,IAAoC;EAClE,OAAOA,IAAA,YAAgBF,YAAA;AACzB","ignoreList":[]}
@@ -1,7 +1,7 @@
1
- import type { BaseSelection, DOMConversionMap, EditorConfig, ElementNode as ElementNodeType, LexicalCommand, LexicalNode, LexicalUpdateJSON, NodeKey, RangeSelection } from 'lexical';
1
+ import type { BaseSelection, DOMConversionMap, EditorConfig, ElementNode as ElementNodeType, LexicalCommand, LexicalNode, LexicalUpdateJSON, NodeKey, RangeSelection, SerializedElementNode } from 'lexical';
2
2
  import { ElementNode } from 'lexical';
3
3
  import type { LinkPayload } from '../client/plugins/floatingLinkEditor/types.js';
4
- import type { LinkFields, SerializedLinkNode } from './types.js';
4
+ import type { LinkFields, SerializedLinkNode } from '../server/schema.js';
5
5
  /** @noInheritDoc */
6
6
  export declare class LinkNode extends ElementNode {
7
7
  __fields: LinkFields;
@@ -29,7 +29,7 @@ export declare class LinkNode extends ElementNode {
29
29
  setFields(fields: LinkFields): this;
30
30
  setID(id: string): this;
31
31
  updateDOM(prevNode: this, anchor: HTMLAnchorElement, config: EditorConfig): boolean;
32
- updateFromJSON(serializedNode: LexicalUpdateJSON<SerializedLinkNode>): this;
32
+ updateFromJSON(_serializedNode: LexicalUpdateJSON<SerializedElementNode>): this;
33
33
  }
34
34
  export declare function $createLinkNode({ id, fields }: {
35
35
  fields?: LinkFields;
@@ -1 +1 @@
1
- {"version":3,"file":"LinkNode.d.ts","sourceRoot":"","sources":["../../../../src/features/link/nodes/LinkNode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,gBAAgB,EAEhB,YAAY,EACZ,WAAW,IAAI,eAAe,EAC9B,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,OAAO,EACP,cAAc,EACf,MAAM,SAAS,CAAA;AAIhB,OAAO,EAOL,WAAW,EACZ,MAAM,SAAS,CAAA;AAEhB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAA;AAChF,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAIhE,oBAAoB;AACpB,qBAAa,QAAS,SAAQ,WAAW;IACvC,QAAQ,EAAE,UAAU,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;gBAEA,EACV,EAAE,EACF,MAGC,EACD,GAAG,GACJ,EAAE;QACD,MAAM,CAAC,EAAE,UAAU,CAAA;QACnB,EAAE,EAAE,MAAM,CAAA;QACV,GAAG,CAAC,EAAE,OAAO,CAAA;KACd;WAMe,KAAK,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ;WAQ/B,OAAO,IAAI,MAAM;WAIjB,SAAS,IAAI,gBAAgB,GAAG,IAAI;WASpC,UAAU,CAAC,cAAc,EAAE,kBAAkB,GAAG,QAAQ;IAsB/D,UAAU,IAAI,KAAK;IAInB,kBAAkB,IAAI,KAAK;IAI3B,mBAAmB,IAAI,KAAK;IAI5B,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,iBAAiB;IAiBlD,UAAU,IAAI,kBAAkB;IAsBhC,gBAAgB,CACvB,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,aAAa,EACxB,WAAW,EAAE,OAAO,GAAG,MAAM,GAC5B,OAAO;IAeV,SAAS,IAAI,UAAU;IAIvB,KAAK,IAAI,MAAM;IAIN,cAAc,CACrB,SAAS,EAAE,cAAc,EACzB,gBAAgB,UAAO,GACtB,eAAe,GAAG,IAAI;IAUhB,QAAQ,IAAI,IAAI;IAIzB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAahC,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAMnC,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAMd,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO;IA+BnF,cAAc,CAAC,cAAc,EAAE,iBAAiB,CAAC,kBAAkB,CAAC,GAAG,IAAI;CAMrF;AAqBD,wBAAgB,eAAe,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,CAAC,EAAE,UAAU,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,QAAQ,CAO9F;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,IAAI,QAAQ,CAElF;AAED,eAAO,MAAM,mBAAmB,EAAE,cAAc,CAAC,WAAW,GAAG,IAAI,CAC7B,CAAA;AAEtC,wBAAgB,WAAW,CAAC,OAAO,EAAE,CAAC;IAAE,MAAM,EAAE,UAAU,CAAA;CAAE,GAAG,WAAW,CAAC,GAAG,IAAI,GAAG,IAAI,CA+GxF"}
1
+ {"version":3,"file":"LinkNode.d.ts","sourceRoot":"","sources":["../../../../src/features/link/nodes/LinkNode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,gBAAgB,EAEhB,YAAY,EACZ,WAAW,IAAI,eAAe,EAC9B,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,OAAO,EACP,cAAc,EACd,qBAAqB,EACtB,MAAM,SAAS,CAAA;AAIhB,OAAO,EAOL,WAAW,EACZ,MAAM,SAAS,CAAA;AAEhB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAA;AAChF,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAIzE,oBAAoB;AACpB,qBAAa,QAAS,SAAQ,WAAW;IACvC,QAAQ,EAAE,UAAU,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;gBAEA,EACV,EAAE,EACF,MAGC,EACD,GAAG,GACJ,EAAE;QACD,MAAM,CAAC,EAAE,UAAU,CAAA;QACnB,EAAE,EAAE,MAAM,CAAA;QACV,GAAG,CAAC,EAAE,OAAO,CAAA;KACd;WAMe,KAAK,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ;WAQ/B,OAAO,IAAI,MAAM;WAIjB,SAAS,IAAI,gBAAgB,GAAG,IAAI;WASpC,UAAU,CAAC,cAAc,EAAE,kBAAkB,GAAG,QAAQ;IAsB/D,UAAU,IAAI,KAAK;IAInB,kBAAkB,IAAI,KAAK;IAI3B,mBAAmB,IAAI,KAAK;IAI5B,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,iBAAiB;IAiBlD,UAAU,IAAI,kBAAkB;IAsBhC,gBAAgB,CACvB,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,aAAa,EACxB,WAAW,EAAE,OAAO,GAAG,MAAM,GAC5B,OAAO;IAeV,SAAS,IAAI,UAAU;IAIvB,KAAK,IAAI,MAAM;IAIN,cAAc,CACrB,SAAS,EAAE,cAAc,EACzB,gBAAgB,UAAO,GACtB,eAAe,GAAG,IAAI;IAUhB,QAAQ,IAAI,IAAI;IAIzB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAahC,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAMnC,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAMd,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO;IA+BnF,cAAc,CAAC,eAAe,EAAE,iBAAiB,CAAC,qBAAqB,CAAC,GAAG,IAAI;CAOzF;AAqBD,wBAAgB,eAAe,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,CAAC,EAAE,UAAU,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,QAAQ,CAO9F;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,IAAI,QAAQ,CAElF;AAED,eAAO,MAAM,mBAAmB,EAAE,cAAc,CAAC,WAAW,GAAG,IAAI,CAC7B,CAAA;AAEtC,wBAAgB,WAAW,CAAC,OAAO,EAAE,CAAC;IAAE,MAAM,EAAE,UAAU,CAAA;CAAE,GAAG,WAAW,CAAC,GAAG,IAAI,GAAG,IAAI,CA+GxF"}
@@ -169,7 +169,8 @@ export class LinkNode extends ElementNode {
169
169
  }
170
170
  return false;
171
171
  }
172
- updateFromJSON(serializedNode) {
172
+ updateFromJSON(_serializedNode) {
173
+ const serializedNode = _serializedNode;
173
174
  return super.updateFromJSON(serializedNode).setFields(serializedNode.fields).setID(serializedNode.id);
174
175
  }
175
176
  }
@@ -1 +1 @@
1
- {"version":3,"file":"LinkNode.js","names":["addClassNamesToElement","isHTMLAnchorElement","ObjectID","$applyNodeReplacement","$createTextNode","$getSelection","$isElementNode","$isRangeSelection","createCommand","ElementNode","SUPPORTED_URL_PROTOCOLS","Set","LinkNode","__fields","__id","constructor","id","fields","linkType","newTab","key","clone","node","__key","getType","importDOM","a","conversion","$convertAnchorElement","priority","importJSON","serializedNode","$createLinkNode","updateFromJSON","version","doc","value","default","toHexString","canBeEmpty","canInsertTextAfter","canInsertTextBefore","createDOM","config","element","document","createElement","href","sanitizeUrl","url","target","rel","manageRel","theme","link","exportJSON","getFields","returnObject","type","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","setID","updateDOM","prevNode","removeAttribute","domNode","content","textContent","getAttribute","$isLinkNode","TOGGLE_LINK_COMMAND","$toggleLink","payload","selectedNodes","nodes","extract","forEach","parent","getParent","children","getChildren","insertBefore","remove","firstNode","$getLinkAncestor","text","getLastChild","prevParent","is","getPreviousSibling","insertAfter","$getAncestor","ancestor","predicate","input","action","result","mutableInput","includes","re","RegExp","replace","trim"],"sources":["../../../../src/features/link/nodes/LinkNode.ts"],"sourcesContent":["import type {\n BaseSelection,\n DOMConversionMap,\n DOMConversionOutput,\n EditorConfig,\n ElementNode as ElementNodeType,\n LexicalCommand,\n LexicalNode,\n LexicalUpdateJSON,\n NodeKey,\n RangeSelection,\n} from 'lexical'\n\nimport { addClassNamesToElement, isHTMLAnchorElement } from '@lexical/utils'\nimport ObjectID from 'bson-objectid'\nimport {\n $applyNodeReplacement,\n $createTextNode,\n $getSelection,\n $isElementNode,\n $isRangeSelection,\n createCommand,\n ElementNode,\n} from 'lexical'\n\nimport type { LinkPayload } from '../client/plugins/floatingLinkEditor/types.js'\nimport type { LinkFields, SerializedLinkNode } from './types.js'\n\nconst SUPPORTED_URL_PROTOCOLS = new Set(['http:', 'https:', 'mailto:', 'sms:', 'tel:'])\n\n/** @noInheritDoc */\nexport class LinkNode extends ElementNode {\n __fields: LinkFields\n __id: string\n\n constructor({\n id,\n fields = {\n linkType: 'custom',\n newTab: false,\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 override clone(node: LinkNode): LinkNode {\n return new this({\n id: node.__id,\n fields: node.__fields,\n key: node.__key,\n })\n }\n\n static override getType(): string {\n return 'link'\n }\n\n static override importDOM(): DOMConversionMap | null {\n return {\n a: (node: Node) => ({\n conversion: $convertAnchorElement,\n priority: 1,\n }),\n }\n }\n\n static override importJSON(serializedNode: SerializedLinkNode): LinkNode {\n const node = $createLinkNode({}).updateFromJSON(serializedNode)\n\n /**\n * @todo remove this in 4.0\n */\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 return node\n }\n\n override canBeEmpty(): false {\n return false\n }\n\n override canInsertTextAfter(): false {\n return false\n }\n\n override canInsertTextBefore(): false {\n return false\n }\n\n override 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 override exportJSON(): SerializedLinkNode {\n const fields = this.getFields()\n\n if (fields?.linkType === 'internal') {\n delete fields.url\n } else if (fields?.linkType === 'custom') {\n delete fields.doc\n }\n\n const returnObject: SerializedLinkNode = {\n ...super.exportJSON(),\n type: 'link',\n fields,\n version: 3,\n }\n const id = this.getID()\n if (id) {\n returnObject.id = id\n }\n return returnObject\n }\n\n override 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 override insertNewAfter(\n selection: RangeSelection,\n restoreSelection = true,\n ): 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 override isInline(): true {\n return true\n }\n\n sanitizeUrl(url: string): string {\n try {\n const parsedUrl = new URL(url)\n\n if (!SUPPORTED_URL_PROTOCOLS.has(parsedUrl.protocol)) {\n return 'about:blank'\n }\n } catch (e) {\n return 'https://'\n }\n return url\n }\n\n setFields(fields: LinkFields): this {\n const writable = this.getWritable()\n writable.__fields = fields\n return writable\n }\n\n setID(id: string): this {\n const writable = this.getWritable()\n writable.__id = id\n return writable\n }\n\n override updateDOM(prevNode: this, 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 override updateFromJSON(serializedNode: LexicalUpdateJSON<SerializedLinkNode>): this {\n return super\n .updateFromJSON(serializedNode)\n .setFields(serializedNode.fields)\n .setID(serializedNode.id as string)\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: ({ fields: LinkFields } & LinkPayload) | null): void {\n const selection = $getSelection()\n\n if (!$isRangeSelection(selection) && (payload === null || !payload.selectedNodes?.length)) {\n return\n }\n const nodes = $isRangeSelection(selection)\n ? selection.extract()\n : payload === null\n ? []\n : 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 children.forEach((child) => {\n parent.insertBefore(child)\n })\n\n parent.remove()\n }\n })\n\n return\n }\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 linkNode.append(...children)\n }\n\n node.remove()\n return\n }\n\n if (linkNode !== null) {\n linkNode.append(node)\n }\n })\n}\n\nfunction $getLinkAncestor(node: LexicalNode): LinkNode | null {\n return $getAncestor(node, (ancestor) => $isLinkNode(ancestor)) as LinkNode\n}\n\nfunction $getAncestor(\n node: LexicalNode,\n predicate: (ancestor: LexicalNode) => boolean,\n): LexicalNode | null {\n let parent: LexicalNode | null = node\n while (parent !== null) {\n parent = parent.getParent()\n if (parent === null || predicate(parent)) {\n break\n }\n }\n return parent\n}\n\nfunction manageRel(input: string, action: 'add' | 'remove', value: string): string {\n let result: string\n let mutableInput = `${input}`\n if (action === 'add') {\n // if we somehow got out of sync - clean up\n if (mutableInput.includes(value)) {\n const re = new RegExp(value, 'g')\n mutableInput = mutableInput.replace(re, '').trim()\n }\n mutableInput = mutableInput.trim()\n result = mutableInput.length === 0 ? `${value}` : `${mutableInput} ${value}`\n } else {\n const re = new RegExp(value, 'g')\n result = mutableInput.replace(re, '').trim()\n }\n return result\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"LinkNode.js","names":["addClassNamesToElement","isHTMLAnchorElement","ObjectID","$applyNodeReplacement","$createTextNode","$getSelection","$isElementNode","$isRangeSelection","createCommand","ElementNode","SUPPORTED_URL_PROTOCOLS","Set","LinkNode","__fields","__id","constructor","id","fields","linkType","newTab","key","clone","node","__key","getType","importDOM","a","conversion","$convertAnchorElement","priority","importJSON","serializedNode","$createLinkNode","updateFromJSON","version","doc","value","default","toHexString","canBeEmpty","canInsertTextAfter","canInsertTextBefore","createDOM","config","element","document","createElement","href","sanitizeUrl","url","target","rel","manageRel","theme","link","exportJSON","getFields","returnObject","type","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","setID","updateDOM","prevNode","removeAttribute","_serializedNode","domNode","content","textContent","getAttribute","$isLinkNode","TOGGLE_LINK_COMMAND","$toggleLink","payload","selectedNodes","nodes","extract","forEach","parent","getParent","children","getChildren","insertBefore","remove","firstNode","$getLinkAncestor","text","getLastChild","prevParent","is","getPreviousSibling","insertAfter","$getAncestor","ancestor","predicate","input","action","result","mutableInput","includes","re","RegExp","replace","trim"],"sources":["../../../../src/features/link/nodes/LinkNode.ts"],"sourcesContent":["import type {\n BaseSelection,\n DOMConversionMap,\n DOMConversionOutput,\n EditorConfig,\n ElementNode as ElementNodeType,\n LexicalCommand,\n LexicalNode,\n LexicalUpdateJSON,\n NodeKey,\n RangeSelection,\n SerializedElementNode,\n} from 'lexical'\n\nimport { addClassNamesToElement, isHTMLAnchorElement } from '@lexical/utils'\nimport ObjectID from 'bson-objectid'\nimport {\n $applyNodeReplacement,\n $createTextNode,\n $getSelection,\n $isElementNode,\n $isRangeSelection,\n createCommand,\n ElementNode,\n} from 'lexical'\n\nimport type { LinkPayload } from '../client/plugins/floatingLinkEditor/types.js'\nimport type { LinkFields, SerializedLinkNode } from '../server/schema.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 linkType: 'custom',\n newTab: false,\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 override clone(node: LinkNode): LinkNode {\n return new this({\n id: node.__id,\n fields: node.__fields,\n key: node.__key,\n })\n }\n\n static override getType(): string {\n return 'link'\n }\n\n static override importDOM(): DOMConversionMap | null {\n return {\n a: (node: Node) => ({\n conversion: $convertAnchorElement,\n priority: 1,\n }),\n }\n }\n\n static override importJSON(serializedNode: SerializedLinkNode): LinkNode {\n const node = $createLinkNode({}).updateFromJSON(serializedNode)\n\n /**\n * @todo remove this in 4.0\n */\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 return node\n }\n\n override canBeEmpty(): false {\n return false\n }\n\n override canInsertTextAfter(): false {\n return false\n }\n\n override canInsertTextBefore(): false {\n return false\n }\n\n override 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 override exportJSON(): SerializedLinkNode {\n const fields = this.getFields()\n\n if (fields?.linkType === 'internal') {\n delete fields.url\n } else if (fields?.linkType === 'custom') {\n delete fields.doc\n }\n\n const returnObject: SerializedLinkNode = {\n ...super.exportJSON(),\n type: 'link',\n fields,\n version: 3,\n }\n const id = this.getID()\n if (id) {\n returnObject.id = id\n }\n return returnObject\n }\n\n override 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 override insertNewAfter(\n selection: RangeSelection,\n restoreSelection = true,\n ): 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 override isInline(): true {\n return true\n }\n\n sanitizeUrl(url: string): string {\n try {\n const parsedUrl = new URL(url)\n\n if (!SUPPORTED_URL_PROTOCOLS.has(parsedUrl.protocol)) {\n return 'about:blank'\n }\n } catch (e) {\n return 'https://'\n }\n return url\n }\n\n setFields(fields: LinkFields): this {\n const writable = this.getWritable()\n writable.__fields = fields\n return writable\n }\n\n setID(id: string): this {\n const writable = this.getWritable()\n writable.__id = id\n return writable\n }\n\n override updateDOM(prevNode: this, 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 override updateFromJSON(_serializedNode: LexicalUpdateJSON<SerializedElementNode>): this {\n const serializedNode = _serializedNode as unknown as SerializedLinkNode\n return super\n .updateFromJSON(serializedNode)\n .setFields(serializedNode.fields)\n .setID(serializedNode.id as string)\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: ({ fields: LinkFields } & LinkPayload) | null): void {\n const selection = $getSelection()\n\n if (!$isRangeSelection(selection) && (payload === null || !payload.selectedNodes?.length)) {\n return\n }\n const nodes = $isRangeSelection(selection)\n ? selection.extract()\n : payload === null\n ? []\n : 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 children.forEach((child) => {\n parent.insertBefore(child)\n })\n\n parent.remove()\n }\n })\n\n return\n }\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 linkNode.append(...children)\n }\n\n node.remove()\n return\n }\n\n if (linkNode !== null) {\n linkNode.append(node)\n }\n })\n}\n\nfunction $getLinkAncestor(node: LexicalNode): LinkNode | null {\n return $getAncestor(node, (ancestor) => $isLinkNode(ancestor)) as LinkNode\n}\n\nfunction $getAncestor(\n node: LexicalNode,\n predicate: (ancestor: LexicalNode) => boolean,\n): LexicalNode | null {\n let parent: LexicalNode | null = node\n while (parent !== null) {\n parent = parent.getParent()\n if (parent === null || predicate(parent)) {\n break\n }\n }\n return parent\n}\n\nfunction manageRel(input: string, action: 'add' | 'remove', value: string): string {\n let result: string\n let mutableInput = `${input}`\n if (action === 'add') {\n // if we somehow got out of sync - clean up\n if (mutableInput.includes(value)) {\n const re = new RegExp(value, 'g')\n mutableInput = mutableInput.replace(re, '').trim()\n }\n mutableInput = mutableInput.trim()\n result = mutableInput.length === 0 ? `${value}` : `${mutableInput} ${value}`\n } else {\n const re = new RegExp(value, 'g')\n result = mutableInput.replace(re, '').trim()\n }\n return result\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"baseFields.js","names":["validateUrl","validateUrlMinimal","getBaseFields","config","enabledCollections","disabledCollections","maxDepth","enabledRelations","collections","filter","slug","includes","map","admin","enableRichTextLink","hidden","baseFields","name","type","label","t","required","description","defaultValue","options","value","hooks","beforeChange","encodeURIComponent","validate","siblingData","linkType","length","push","condition","_data","_siblingData","filterOptions","relationTo","req","user","find","baseFilter","baseListFilter","limit","page","sort"],"sources":["../../../../src/features/link/server/baseFields.ts"],"sourcesContent":["import type {\n CollectionSlug,\n FieldAffectingData,\n RadioField,\n SanitizedConfig,\n TextField,\n TextFieldSingleValidation,\n TypedUser,\n} from 'payload'\n\nimport type { LinkFields } from '../nodes/types.js'\n\nimport { validateUrl, validateUrlMinimal } from '../../../lexical/utils/url.js'\n\nexport const getBaseFields = (\n config: SanitizedConfig,\n enabledCollections?: CollectionSlug[],\n disabledCollections?: CollectionSlug[],\n maxDepth?: number,\n): FieldAffectingData[] => {\n let enabledRelations: CollectionSlug[]\n\n /**\n * Figure out which relations should be enabled (enabledRelations) based on a collection's admin.enableRichTextLink property,\n * or the Link Feature's enabledCollections and disabledCollections properties which override it.\n */\n if (enabledCollections) {\n enabledRelations = enabledCollections\n } else if (disabledCollections) {\n enabledRelations = config.collections\n .filter(({ slug }) => !disabledCollections.includes(slug))\n .map(({ slug }) => slug)\n } else {\n enabledRelations = config.collections\n .filter(({ admin: { enableRichTextLink, hidden } }) => {\n if (typeof hidden !== 'function' && hidden) {\n return false\n }\n return enableRichTextLink\n })\n .map(({ slug }) => slug)\n }\n\n const baseFields: FieldAffectingData[] = [\n {\n name: 'text',\n type: 'text',\n label: ({ t }) => t('fields:textToDisplay'),\n required: true,\n },\n {\n name: 'linkType',\n type: 'radio',\n admin: {\n description: ({ t }) => t('fields:chooseBetweenCustomTextOrDocument'),\n },\n defaultValue: 'custom',\n label: ({ t }) => t('fields:linkType'),\n options: [\n {\n label: ({ t }) => t('fields:customURL'),\n value: 'custom',\n },\n ],\n required: true,\n } as RadioField,\n {\n name: 'url',\n type: 'text',\n hooks: {\n beforeChange: [\n ({ value }) => {\n if (!value) {\n return\n }\n\n if (!validateUrl(value)) {\n return encodeURIComponent(value)\n }\n return value\n },\n ],\n },\n label: ({ t }) => t('fields:enterURL'),\n required: true,\n validate: ((value: string, options) => {\n if ((options?.siblingData as LinkFields)?.linkType === 'internal') {\n return // no validation needed, as no url should exist for internal links\n }\n if (!validateUrlMinimal(value)) {\n return 'Invalid URL'\n }\n }) as TextFieldSingleValidation,\n },\n ]\n\n // Only display internal link-specific fields / options / conditions if there are enabled relations\n if (enabledRelations?.length) {\n ;(baseFields[1] as RadioField).options.push({\n label: ({ t }) => t('fields:internalLink'),\n value: 'internal',\n })\n ;(baseFields[2] as TextField).admin = {\n condition: (_data, _siblingData) => {\n return _siblingData.linkType !== 'internal'\n },\n }\n\n baseFields.push({\n name: 'doc',\n admin: {\n condition: (_data, _siblingData) => {\n return _siblingData.linkType === 'internal'\n },\n },\n // when admin.hidden is a function we need to dynamically call hidden with the user to know if the collection should be shown\n type: 'relationship',\n filterOptions:\n !enabledCollections && !disabledCollections\n ? async ({ relationTo, req, user }) => {\n const admin = config.collections.find(({ slug }) => slug === relationTo)?.admin\n\n const hidden = admin?.hidden\n if (typeof hidden === 'function' && hidden({ user } as { user: TypedUser })) {\n return false\n }\n\n const baseFilter = admin?.baseFilter ?? admin?.baseListFilter\n return (\n (await baseFilter?.({\n limit: 0,\n page: 1,\n req,\n sort: 'id',\n })) ?? true\n )\n }\n : null,\n label: ({ t }) => t('fields:chooseDocumentToLink'),\n maxDepth,\n relationTo: enabledRelations,\n required: true,\n })\n }\n\n baseFields.push({\n name: 'newTab',\n type: 'checkbox',\n label: ({ t }) => t('fields:openInNewTab'),\n })\n\n return baseFields\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"baseFields.js","names":["validateUrl","validateUrlMinimal","getBaseFields","config","enabledCollections","disabledCollections","maxDepth","enabledRelations","collections","filter","slug","includes","map","admin","enableRichTextLink","hidden","baseFields","name","type","label","t","required","description","defaultValue","options","value","hooks","beforeChange","encodeURIComponent","validate","siblingData","linkType","length","push","condition","_data","_siblingData","filterOptions","relationTo","req","user","find","baseFilter","baseListFilter","limit","page","sort"],"sources":["../../../../src/features/link/server/baseFields.ts"],"sourcesContent":["import type {\n CollectionSlug,\n FieldAffectingData,\n RadioField,\n SanitizedConfig,\n TextField,\n TextFieldSingleValidation,\n User,\n} from 'payload'\n\nimport type { LinkFields } from './schema.js'\n\nimport { validateUrl, validateUrlMinimal } from '../../../lexical/utils/url.js'\n\nexport const getBaseFields = (\n config: SanitizedConfig,\n enabledCollections?: CollectionSlug[],\n disabledCollections?: CollectionSlug[],\n maxDepth?: number,\n): FieldAffectingData[] => {\n let enabledRelations: CollectionSlug[]\n\n /**\n * Figure out which relations should be enabled (enabledRelations) based on a collection's admin.enableRichTextLink property,\n * or the Link Feature's enabledCollections and disabledCollections properties which override it.\n */\n if (enabledCollections) {\n enabledRelations = enabledCollections\n } else if (disabledCollections) {\n enabledRelations = config.collections\n .filter(({ slug }) => !disabledCollections.includes(slug))\n .map(({ slug }) => slug)\n } else {\n enabledRelations = config.collections\n .filter(({ admin: { enableRichTextLink, hidden } }) => {\n if (typeof hidden !== 'function' && hidden) {\n return false\n }\n return enableRichTextLink\n })\n .map(({ slug }) => slug)\n }\n\n const baseFields: FieldAffectingData[] = [\n {\n name: 'text',\n type: 'text',\n label: ({ t }) => t('fields:textToDisplay'),\n required: true,\n },\n {\n name: 'linkType',\n type: 'radio',\n admin: {\n description: ({ t }) => t('fields:chooseBetweenCustomTextOrDocument'),\n },\n defaultValue: 'custom',\n label: ({ t }) => t('fields:linkType'),\n options: [\n {\n label: ({ t }) => t('fields:customURL'),\n value: 'custom',\n },\n ],\n required: true,\n } as RadioField,\n {\n name: 'url',\n type: 'text',\n hooks: {\n beforeChange: [\n ({ value }) => {\n if (!value) {\n return\n }\n\n if (!validateUrl(value)) {\n return encodeURIComponent(value)\n }\n return value\n },\n ],\n },\n label: ({ t }) => t('fields:enterURL'),\n required: true,\n validate: ((value: string, options) => {\n if ((options?.siblingData as LinkFields)?.linkType === 'internal') {\n return // no validation needed, as no url should exist for internal links\n }\n if (!validateUrlMinimal(value)) {\n return 'Invalid URL'\n }\n }) as TextFieldSingleValidation,\n },\n ]\n\n // Only display internal link-specific fields / options / conditions if there are enabled relations\n if (enabledRelations?.length) {\n ;(baseFields[1] as RadioField).options.push({\n label: ({ t }) => t('fields:internalLink'),\n value: 'internal',\n })\n ;(baseFields[2] as TextField).admin = {\n condition: (_data, _siblingData) => {\n return _siblingData.linkType !== 'internal'\n },\n }\n\n baseFields.push({\n name: 'doc',\n admin: {\n condition: (_data, _siblingData) => {\n return _siblingData.linkType === 'internal'\n },\n },\n // when admin.hidden is a function we need to dynamically call hidden with the user to know if the collection should be shown\n type: 'relationship',\n filterOptions:\n !enabledCollections && !disabledCollections\n ? async ({ relationTo, req, user }) => {\n const admin = config.collections.find(({ slug }) => slug === relationTo)?.admin\n\n const hidden = admin?.hidden\n if (typeof hidden === 'function' && hidden({ user } as { user: User })) {\n return false\n }\n\n const baseFilter = admin?.baseFilter ?? admin?.baseListFilter\n return (\n (await baseFilter?.({\n limit: 0,\n page: 1,\n req,\n sort: 'id',\n })) ?? true\n )\n }\n : null,\n label: ({ t }) => t('fields:chooseDocumentToLink'),\n maxDepth,\n relationTo: enabledRelations,\n required: true,\n })\n }\n\n baseFields.push({\n name: 'newTab',\n type: 'checkbox',\n label: ({ t }) => t('fields:openInNewTab'),\n })\n\n return baseFields\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  import type { PopulationPromise } from '../../typesServer.js';
2
- import type { SerializedLinkNode } from '../nodes/types.js';
3
2
  import type { LinkFeatureServerProps } from './index.js';
3
+ import type { SerializedLinkNode } from './schema.js';
4
4
  export declare const linkPopulationPromiseHOC: (props: LinkFeatureServerProps) => PopulationPromise<SerializedLinkNode>;
5
5
  //# sourceMappingURL=graphQLPopulationPromise.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"graphQLPopulationPromise.d.ts","sourceRoot":"","sources":["../../../../src/features/link/server/graphQLPopulationPromise.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AAIxD,eAAO,MAAM,wBAAwB,GACnC,OAAO,sBAAsB,KAC5B,iBAAiB,CAAC,kBAAkB,CA8CtC,CAAA"}
1
+ {"version":3,"file":"graphQLPopulationPromise.d.ts","sourceRoot":"","sources":["../../../../src/features/link/server/graphQLPopulationPromise.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAIrD,eAAO,MAAM,wBAAwB,GACnC,OAAO,sBAAsB,KAC5B,iBAAiB,CAAC,kBAAkB,CA8CtC,CAAA"}