@payloadcms/richtext-lexical 4.0.0-internal.011fd46 → 4.0.0-internal.0b9bec1

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 (311) 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-QGSHF22S.js +2 -0
  6. package/dist/exports/client/Field-QGSHF22S.js.map +7 -0
  7. package/dist/exports/client/bundled.css +1 -1
  8. package/dist/exports/client/{chunk-CUFJGFNW.js → chunk-ESITTE3C.js} +2 -2
  9. package/dist/exports/client/{chunk-CUFJGFNW.js.map → chunk-ESITTE3C.js.map} +2 -2
  10. package/dist/exports/client/componentInline-H24N7GUG.js +2 -0
  11. package/dist/exports/client/index.d.ts +0 -1
  12. package/dist/exports/client/index.d.ts.map +1 -1
  13. package/dist/exports/client/index.js +20 -23
  14. package/dist/exports/client/index.js.map +4 -4
  15. package/dist/features/align/client/toolbarAlignGroup.d.ts.map +1 -1
  16. package/dist/features/blockquote/client/index.js +2 -2
  17. package/dist/features/blockquote/client/index.js.map +1 -1
  18. package/dist/features/blockquote/server/index.js +2 -2
  19. package/dist/features/blockquote/server/index.js.map +1 -1
  20. package/dist/features/blocks/client/component/index.css +2 -2
  21. package/dist/features/blocks/client/component/index.js.map +1 -1
  22. package/dist/features/blocks/client/componentInline/components/InlineBlockContainer.d.ts.map +1 -1
  23. package/dist/features/blocks/client/componentInline/index.css +8 -8
  24. package/dist/features/blocks/client/componentInline/index.js.map +1 -1
  25. package/dist/features/blocks/client/getBlockImageComponent.d.ts +1 -1
  26. package/dist/features/blocks/client/markdown/getMarkdownToLexical.d.ts +1 -1
  27. package/dist/features/blocks/client/markdown/getMarkdownToLexical.d.ts.map +1 -1
  28. package/dist/features/blocks/client/markdown/getMarkdownToLexical.js +5 -2
  29. package/dist/features/blocks/client/markdown/getMarkdownToLexical.js.map +1 -1
  30. package/dist/features/blocks/client/markdown/markdownTransformer.d.ts.map +1 -1
  31. package/dist/features/blocks/client/nodes/BlocksNode.d.ts.map +1 -1
  32. package/dist/features/blocks/client/nodes/InlineBlocksNode.d.ts.map +1 -1
  33. package/dist/features/blocks/premade/CodeBlock/Component/Collapse/index.css +1 -1
  34. package/dist/features/blocks/premade/CodeBlock/Component/FloatingCollapse/index.css +2 -4
  35. package/dist/features/blocks/premade/CodeBlock/Component/index.css +5 -5
  36. package/dist/features/blocks/server/graphQLPopulationPromise.d.ts.map +1 -1
  37. package/dist/features/blocks/server/markdown/markdownTransformer.d.ts.map +1 -1
  38. package/dist/features/blocks/server/nodes/BlocksNode.d.ts.map +1 -1
  39. package/dist/features/blocks/server/nodes/InlineBlocksNode.d.ts.map +1 -1
  40. package/dist/features/blocks/server/schema.d.ts.map +1 -1
  41. package/dist/features/blocks/server/schema.js +3 -2
  42. package/dist/features/blocks/server/schema.js.map +1 -1
  43. package/dist/features/blocks/server/validate.d.ts.map +1 -1
  44. package/dist/features/converters/htmlToLexical/index.d.ts.map +1 -1
  45. package/dist/features/converters/lexicalToHtml/shared/cssColors.d.ts.map +1 -1
  46. package/dist/features/converters/lexicalToMarkdown/index.d.ts.map +1 -1
  47. package/dist/features/converters/markdownToLexical/index.d.ts.map +1 -1
  48. package/dist/features/converters/markdownToLexical/index.js +5 -2
  49. package/dist/features/converters/markdownToLexical/index.js.map +1 -1
  50. package/dist/features/debug/jsxConverter/client/plugin/style.css +2 -2
  51. package/dist/features/experimental_table/client/index.js +2 -2
  52. package/dist/features/experimental_table/client/index.js.map +1 -1
  53. package/dist/features/experimental_table/client/utils/debounce.d.ts.map +1 -1
  54. package/dist/features/experimental_table/markdownTransformer.d.ts +2 -2
  55. package/dist/features/experimental_table/markdownTransformer.d.ts.map +1 -1
  56. package/dist/features/experimental_table/markdownTransformer.js +6 -3
  57. package/dist/features/experimental_table/markdownTransformer.js.map +1 -1
  58. package/dist/features/experimental_table/server/index.js +2 -2
  59. package/dist/features/experimental_table/server/index.js.map +1 -1
  60. package/dist/features/format/bold/feature.client.js +1 -1
  61. package/dist/features/format/bold/feature.client.js.map +1 -1
  62. package/dist/features/format/bold/feature.server.d.ts.map +1 -1
  63. package/dist/features/format/bold/feature.server.js +1 -1
  64. package/dist/features/format/bold/feature.server.js.map +1 -1
  65. package/dist/features/format/inlineCode/feature.client.js +1 -1
  66. package/dist/features/format/inlineCode/feature.client.js.map +1 -1
  67. package/dist/features/format/inlineCode/feature.server.d.ts.map +1 -1
  68. package/dist/features/format/inlineCode/feature.server.js +1 -1
  69. package/dist/features/format/inlineCode/feature.server.js.map +1 -1
  70. package/dist/features/format/italic/feature.client.js +1 -1
  71. package/dist/features/format/italic/feature.client.js.map +1 -1
  72. package/dist/features/format/italic/feature.server.d.ts.map +1 -1
  73. package/dist/features/format/italic/feature.server.js +1 -1
  74. package/dist/features/format/italic/feature.server.js.map +1 -1
  75. package/dist/features/format/shared/toolbarFormatGroup.d.ts.map +1 -1
  76. package/dist/features/format/strikethrough/feature.client.js +1 -1
  77. package/dist/features/format/strikethrough/feature.client.js.map +1 -1
  78. package/dist/features/format/strikethrough/feature.server.d.ts.map +1 -1
  79. package/dist/features/format/strikethrough/feature.server.js +1 -1
  80. package/dist/features/format/strikethrough/feature.server.js.map +1 -1
  81. package/dist/features/heading/client/index.js +2 -2
  82. package/dist/features/heading/client/index.js.map +1 -1
  83. package/dist/features/heading/markdownTransformer.d.ts +1 -1
  84. package/dist/features/heading/markdownTransformer.d.ts.map +1 -1
  85. package/dist/features/heading/markdownTransformer.js +6 -19
  86. package/dist/features/heading/markdownTransformer.js.map +1 -1
  87. package/dist/features/heading/server/index.js +2 -2
  88. package/dist/features/heading/server/index.js.map +1 -1
  89. package/dist/features/heading/server/schema.d.ts.map +1 -1
  90. package/dist/features/horizontalRule/client/index.js +2 -2
  91. package/dist/features/horizontalRule/client/index.js.map +1 -1
  92. package/dist/features/horizontalRule/client/markdownTransformer.d.ts +1 -1
  93. package/dist/features/horizontalRule/client/markdownTransformer.d.ts.map +1 -1
  94. package/dist/features/horizontalRule/client/markdownTransformer.js +1 -1
  95. package/dist/features/horizontalRule/client/markdownTransformer.js.map +1 -1
  96. package/dist/features/horizontalRule/client/nodes/HorizontalRuleNode.d.ts.map +1 -1
  97. package/dist/features/horizontalRule/client/plugin/index.css +2 -2
  98. package/dist/features/horizontalRule/server/index.js +2 -2
  99. package/dist/features/horizontalRule/server/index.js.map +1 -1
  100. package/dist/features/horizontalRule/server/markdownTransformer.d.ts +1 -1
  101. package/dist/features/horizontalRule/server/markdownTransformer.d.ts.map +1 -1
  102. package/dist/features/horizontalRule/server/markdownTransformer.js +1 -1
  103. package/dist/features/horizontalRule/server/markdownTransformer.js.map +1 -1
  104. package/dist/features/horizontalRule/server/nodes/HorizontalRuleNode.d.ts.map +1 -1
  105. package/dist/features/indent/client/toolbarIndentGroup.d.ts.map +1 -1
  106. package/dist/features/link/client/index.js +2 -2
  107. package/dist/features/link/client/index.js.map +1 -1
  108. package/dist/features/link/client/plugins/autoLink/index.d.ts.map +1 -1
  109. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js +3 -3
  110. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js.map +1 -1
  111. package/dist/features/link/client/plugins/floatingLinkEditor/index.css +7 -11
  112. package/dist/features/link/markdownTransformer.d.ts +3 -3
  113. package/dist/features/link/markdownTransformer.d.ts.map +1 -1
  114. package/dist/features/link/markdownTransformer.js +2 -2
  115. package/dist/features/link/markdownTransformer.js.map +1 -1
  116. package/dist/features/link/markdownTransformer.spec.js +9 -9
  117. package/dist/features/link/markdownTransformer.spec.js.map +1 -1
  118. package/dist/features/link/nodes/AutoLinkNode.d.ts.map +1 -1
  119. package/dist/features/link/nodes/LinkNode.d.ts.map +1 -1
  120. package/dist/features/link/server/baseFields.d.ts.map +1 -1
  121. package/dist/features/link/server/baseFields.js.map +1 -1
  122. package/dist/features/link/server/graphQLPopulationPromise.d.ts.map +1 -1
  123. package/dist/features/link/server/index.js +2 -2
  124. package/dist/features/link/server/index.js.map +1 -1
  125. package/dist/features/link/server/schema.d.ts.map +1 -1
  126. package/dist/features/link/server/schema.js +4 -2
  127. package/dist/features/link/server/schema.js.map +1 -1
  128. package/dist/features/link/server/validate.d.ts.map +1 -1
  129. package/dist/features/lists/checklist/client/index.js +1 -1
  130. package/dist/features/lists/checklist/client/index.js.map +1 -1
  131. package/dist/features/lists/checklist/server/index.js +1 -1
  132. package/dist/features/lists/checklist/server/index.js.map +1 -1
  133. package/dist/features/lists/orderedList/client/index.js +1 -1
  134. package/dist/features/lists/orderedList/client/index.js.map +1 -1
  135. package/dist/features/lists/orderedList/server/index.js +1 -1
  136. package/dist/features/lists/orderedList/server/index.js.map +1 -1
  137. package/dist/features/lists/unorderedList/client/index.js +1 -1
  138. package/dist/features/lists/unorderedList/client/index.js.map +1 -1
  139. package/dist/features/lists/unorderedList/server/index.js +1 -1
  140. package/dist/features/lists/unorderedList/server/index.js.map +1 -1
  141. package/dist/features/relationship/client/drawer/index.d.ts.map +1 -1
  142. package/dist/features/relationship/client/nodes/RelationshipNode.d.ts.map +1 -1
  143. package/dist/features/relationship/client/utils/useEnabledRelationships.d.ts.map +1 -1
  144. package/dist/features/relationship/server/graphQLPopulationPromise.d.ts.map +1 -1
  145. package/dist/features/relationship/server/nodes/RelationshipNode.d.ts.map +1 -1
  146. package/dist/features/relationship/server/schema.d.ts +3 -3
  147. package/dist/features/relationship/server/schema.d.ts.map +1 -1
  148. package/dist/features/relationship/server/schema.js +22 -5
  149. package/dist/features/relationship/server/schema.js.map +1 -1
  150. package/dist/features/relationship/shared/filterEnabledRelationshipCollections.d.ts.map +1 -1
  151. package/dist/features/shared/toolbar/addDropdownGroup.d.ts.map +1 -1
  152. package/dist/features/shared/toolbar/featureButtonsGroup.d.ts.map +1 -1
  153. package/dist/features/shared/toolbar/textDropdownGroup.d.ts.map +1 -1
  154. package/dist/features/textState/feature.client.js +1 -1
  155. package/dist/features/textState/feature.client.js.map +1 -1
  156. package/dist/features/toolbars/fixed/client/Toolbar/index.css +4 -6
  157. package/dist/features/toolbars/inline/client/Toolbar/index.css +2 -13
  158. package/dist/features/toolbars/shared/ToolbarButton/index.d.ts.map +1 -1
  159. package/dist/features/toolbars/shared/ToolbarDropdown/index.css +8 -12
  160. package/dist/features/toolbars/shared/ToolbarDropdown/index.d.ts.map +1 -1
  161. package/dist/features/typesServer.d.ts +1 -1
  162. package/dist/features/typesServer.d.ts.map +1 -1
  163. package/dist/features/typesServer.js.map +1 -1
  164. package/dist/features/upload/client/component/index.css +9 -9
  165. package/dist/features/upload/client/drawer/index.d.ts.map +1 -1
  166. package/dist/features/upload/client/nodes/UploadNode.d.ts.map +1 -1
  167. package/dist/features/upload/client/plugin/index.js +5 -5
  168. package/dist/features/upload/client/plugin/index.js.map +1 -1
  169. package/dist/features/upload/server/graphQLPopulationPromise.d.ts.map +1 -1
  170. package/dist/features/upload/server/index.js +2 -2
  171. package/dist/features/upload/server/index.js.map +1 -1
  172. package/dist/features/upload/server/markdownTransformer.d.ts +1 -1
  173. package/dist/features/upload/server/markdownTransformer.d.ts.map +1 -1
  174. package/dist/features/upload/server/markdownTransformer.js +1 -1
  175. package/dist/features/upload/server/markdownTransformer.js.map +1 -1
  176. package/dist/features/upload/server/nodes/UploadNode.d.ts.map +1 -1
  177. package/dist/features/upload/server/schema.d.ts +4 -4
  178. package/dist/features/upload/server/schema.d.ts.map +1 -1
  179. package/dist/features/upload/server/schema.js +26 -6
  180. package/dist/features/upload/server/schema.js.map +1 -1
  181. package/dist/features/upload/server/validate.d.ts.map +1 -1
  182. package/dist/field/Diff/converters/unknown/index.css +1 -1
  183. package/dist/field/Field.d.ts.map +1 -1
  184. package/dist/field/Field.js +18 -15
  185. package/dist/field/Field.js.map +1 -1
  186. package/dist/field/ViewSelector.css +1 -1
  187. package/dist/field/bundled.css +1 -1
  188. package/dist/field/index.css +2 -5
  189. package/dist/field/index.js +1 -1
  190. package/dist/field/index.js.map +1 -1
  191. package/dist/field/rscEntry.d.ts.map +1 -1
  192. package/dist/field/rscEntry.js +2 -0
  193. package/dist/field/rscEntry.js.map +1 -1
  194. package/dist/index.d.ts +1 -1
  195. package/dist/index.d.ts.map +1 -1
  196. package/dist/index.js +2 -2
  197. package/dist/index.js.map +1 -1
  198. package/dist/lexical/LexicalEditor.css +18 -18
  199. package/dist/lexical/config/client/EditorConfigProvider.d.ts.map +1 -1
  200. package/dist/lexical/config/client/loader.d.ts.map +1 -1
  201. package/dist/lexical/config/client/loader.js +5 -1
  202. package/dist/lexical/config/client/loader.js.map +1 -1
  203. package/dist/lexical/config/client/sanitize.d.ts.map +1 -1
  204. package/dist/lexical/config/server/sanitize.d.ts.map +1 -1
  205. package/dist/lexical/plugins/DecoratorPlugin/index.css +1 -1
  206. package/dist/lexical/plugins/NodeViewOverridePlugin/index.d.ts.map +1 -1
  207. package/dist/lexical/plugins/NodeViewOverridePlugin/index.js +21 -0
  208. package/dist/lexical/plugins/NodeViewOverridePlugin/index.js.map +1 -1
  209. package/dist/lexical/plugins/SlashMenu/index.css +1 -5
  210. package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.css +1 -1
  211. package/dist/lexical/plugins/handles/DraggableBlockPlugin/debounce.d.ts.map +1 -1
  212. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.css +4 -3
  213. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js +1 -1
  214. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js.map +1 -1
  215. package/dist/lexical/plugins/handles/utils/calculateDistanceFromScrollerElem.d.ts.map +1 -1
  216. package/dist/lexical/theme/EditorTheme.css +18 -19
  217. package/dist/lexical/ui/ContentEditable.css +22 -13
  218. package/dist/lexical/utils/markdown/convertFromMarkdownString.d.ts +17 -0
  219. package/dist/lexical/utils/markdown/convertFromMarkdownString.d.ts.map +1 -0
  220. package/dist/lexical/utils/markdown/convertFromMarkdownString.js +27 -0
  221. package/dist/lexical/utils/markdown/convertFromMarkdownString.js.map +1 -0
  222. package/dist/{lexical-proxy/@lexical-markdown.spec.js → lexical/utils/markdown/convertFromMarkdownString.spec.js} +8 -9
  223. package/dist/lexical/utils/markdown/convertFromMarkdownString.spec.js.map +1 -0
  224. package/dist/lexical/utils/markdown/createBlockNode.d.ts +1 -1
  225. package/dist/lexical/utils/markdown/createBlockNode.d.ts.map +1 -1
  226. package/dist/lexical/utils/markdown/normalizeMarkdown.d.ts +7 -10
  227. package/dist/lexical/utils/markdown/normalizeMarkdown.d.ts.map +1 -1
  228. package/dist/lexical/utils/markdown/normalizeMarkdown.js +9 -13
  229. package/dist/lexical/utils/markdown/normalizeMarkdown.js.map +1 -1
  230. package/dist/lexical/utils/nodeFormat.d.ts.map +1 -1
  231. package/dist/lexical/utils/point.d.ts.map +1 -1
  232. package/dist/lexical/utils/rect.d.ts.map +1 -1
  233. package/dist/lexical-proxy/@lexical-markdown.d.ts +1 -40
  234. package/dist/lexical-proxy/@lexical-markdown.d.ts.map +1 -1
  235. package/dist/lexical-proxy/@lexical-markdown.js +1 -56
  236. package/dist/lexical-proxy/@lexical-markdown.js.map +1 -1
  237. package/dist/populateGraphQL/populateLexicalPopulationPromises.d.ts.map +1 -1
  238. package/dist/populateGraphQL/recursivelyPopulateFieldsForGraphQL.d.ts.map +1 -1
  239. package/dist/types/index.d.ts +2 -2
  240. package/dist/types/index.d.ts.map +1 -1
  241. package/dist/types/index.js.map +1 -1
  242. package/dist/types/jsonSchemaHelpers.d.ts.map +1 -1
  243. package/dist/types/schema.d.ts.map +1 -1
  244. package/dist/types/schema.js +12 -5
  245. package/dist/types/schema.js.map +1 -1
  246. package/dist/utilities/applyBaseFilterToFields.d.ts.map +1 -1
  247. package/dist/utilities/applyBaseFilterToFields.js.map +1 -1
  248. package/dist/utilities/buildInitialState.d.ts +2 -1
  249. package/dist/utilities/buildInitialState.d.ts.map +1 -1
  250. package/dist/utilities/buildInitialState.js.map +1 -1
  251. package/dist/utilities/editorConfigFactory.d.ts.map +1 -1
  252. package/dist/utilities/fieldsDrawer/useDrawerSubmit.d.ts +1 -1
  253. package/dist/utilities/fieldsDrawer/useDrawerSubmit.d.ts.map +1 -1
  254. package/dist/utilities/fieldsDrawer/useLexicalDocumentDrawer.d.ts.map +1 -1
  255. package/dist/utilities/fieldsDrawer/useLexicalDrawer.d.ts.map +1 -1
  256. package/dist/utilities/fieldsDrawer/useLexicalListDrawer.d.ts.map +1 -1
  257. package/dist/utilities/generateImportMap.d.ts +1 -1
  258. package/dist/utilities/generateImportMap.d.ts.map +1 -1
  259. package/dist/utilities/generateSchemaMap.d.ts +1 -1
  260. package/dist/utilities/generateSchemaMap.d.ts.map +1 -1
  261. package/dist/utilities/getDefaultSanitizedEditorConfig.d.ts.map +1 -1
  262. package/dist/utilities/recurseNodeTree.d.ts.map +1 -1
  263. package/dist/utilities/upgradeLexicalData/upgradeDocumentFieldsRecursively.d.ts.map +1 -1
  264. package/dist/utilities/useLexicalFeature.d.ts.map +1 -1
  265. package/dist/validate/index.d.ts.map +1 -1
  266. package/package.json +7 -8
  267. package/dist/exports/client/Field-VQX3RNMF.js +0 -2
  268. package/dist/exports/client/Field-VQX3RNMF.js.map +0 -7
  269. package/dist/exports/client/componentInline-DV4EGOWU.js +0 -2
  270. package/dist/features/blockquote/markdownTransformer.d.ts +0 -3
  271. package/dist/features/blockquote/markdownTransformer.d.ts.map +0 -1
  272. package/dist/features/blockquote/markdownTransformer.js +0 -33
  273. package/dist/features/blockquote/markdownTransformer.js.map +0 -1
  274. package/dist/features/format/bold/markdownTransformers.d.ts +0 -6
  275. package/dist/features/format/bold/markdownTransformers.d.ts.map +0 -1
  276. package/dist/features/format/bold/markdownTransformers.js +0 -23
  277. package/dist/features/format/bold/markdownTransformers.js.map +0 -1
  278. package/dist/features/format/inlineCode/markdownTransformers.d.ts +0 -3
  279. package/dist/features/format/inlineCode/markdownTransformers.d.ts.map +0 -1
  280. package/dist/features/format/inlineCode/markdownTransformers.js +0 -6
  281. package/dist/features/format/inlineCode/markdownTransformers.js.map +0 -1
  282. package/dist/features/format/italic/markdownTransformers.d.ts +0 -4
  283. package/dist/features/format/italic/markdownTransformers.d.ts.map +0 -1
  284. package/dist/features/format/italic/markdownTransformers.js +0 -12
  285. package/dist/features/format/italic/markdownTransformers.js.map +0 -1
  286. package/dist/features/format/strikethrough/markdownTransformers.d.ts +0 -3
  287. package/dist/features/format/strikethrough/markdownTransformers.d.ts.map +0 -1
  288. package/dist/features/format/strikethrough/markdownTransformers.js +0 -6
  289. package/dist/features/format/strikethrough/markdownTransformers.js.map +0 -1
  290. package/dist/features/lists/checklist/markdownTransformers.d.ts +0 -3
  291. package/dist/features/lists/checklist/markdownTransformers.d.ts.map +0 -1
  292. package/dist/features/lists/checklist/markdownTransformers.js +0 -12
  293. package/dist/features/lists/checklist/markdownTransformers.js.map +0 -1
  294. package/dist/features/lists/orderedList/markdownTransformer.d.ts +0 -3
  295. package/dist/features/lists/orderedList/markdownTransformer.d.ts.map +0 -1
  296. package/dist/features/lists/orderedList/markdownTransformer.js +0 -12
  297. package/dist/features/lists/orderedList/markdownTransformer.js.map +0 -1
  298. package/dist/features/lists/shared/markdown.d.ts +0 -6
  299. package/dist/features/lists/shared/markdown.d.ts.map +0 -1
  300. package/dist/features/lists/shared/markdown.js +0 -57
  301. package/dist/features/lists/shared/markdown.js.map +0 -1
  302. package/dist/features/lists/unorderedList/markdownTransformer.d.ts +0 -3
  303. package/dist/features/lists/unorderedList/markdownTransformer.d.ts.map +0 -1
  304. package/dist/features/lists/unorderedList/markdownTransformer.js +0 -12
  305. package/dist/features/lists/unorderedList/markdownTransformer.js.map +0 -1
  306. package/dist/lexical/utils/guard.d.ts +0 -5
  307. package/dist/lexical/utils/guard.d.ts.map +0 -1
  308. package/dist/lexical/utils/guard.js +0 -9
  309. package/dist/lexical/utils/guard.js.map +0 -1
  310. package/dist/lexical-proxy/@lexical-markdown.spec.js.map +0 -1
  311. /package/dist/exports/client/{componentInline-DV4EGOWU.js.map → componentInline-H24N7GUG.js.map} +0 -0
@@ -6,7 +6,7 @@
6
6
  cursor: grab;
7
7
  opacity: 0;
8
8
  position: absolute;
9
- left: 0;
9
+ inset-inline-start: 0;
10
10
  top: 0;
11
11
  will-change: transform;
12
12
  background-color: var(--color-bg);
@@ -46,11 +46,12 @@
46
46
 
47
47
  .rich-text-lexical--show-gutter
48
48
  > .rich-text-lexical__wrap
49
+ > .rich-text-lexical__editor-content
49
50
  > .editor-container
50
51
  > .editor-scroller
51
52
  > .editor {
52
53
  > .draggable-block-target-line {
53
- left: var(--spacer-5);
54
+ inset-inline-start: var(--spacer-5);
54
55
  }
55
56
  }
56
57
 
@@ -60,7 +61,7 @@
60
61
  border-radius: var(--radius-small);
61
62
  height: var(--spacer-1);
62
63
  position: absolute;
63
- left: 0;
64
+ inset-inline-start: 0;
64
65
  top: 0;
65
66
  opacity: 0;
66
67
  will-change: transform;
@@ -271,7 +271,7 @@ function useDraggableBlockMenu(editor, anchorElem, isEditable) {
271
271
  }
272
272
  const highlightElem = document.createElement('div');
273
273
  highlightElem.className = 'lexical-block-highlighter';
274
- highlightElem.style.backgroundColor = 'var(--theme-elevation-1000';
274
+ highlightElem.style.backgroundColor = 'var(--color-bg-inverse)';
275
275
  highlightElem.style.transition = 'opacity 0.5s ease-in-out';
276
276
  highlightElem.style.zIndex = '1';
277
277
  highlightElem.style.pointerEvents = 'none';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useLexicalComposerContext","eventFiles","$getNearestNodeFromDOMNode","$getNodeByKey","isHTMLElement","React","useEffect","useRef","useState","createPortal","useEditorConfigContext","Point","calculateDistanceFromScrollerElem","getNodeCloseToPoint","getTopLevelNodeKeys","isOnHandleElement","setHandlePosition","getBoundingClientRectWithoutTransform","setTargetLine","DRAGGABLE_BLOCK_MENU_CLASSNAME","DRAG_DATA_FORMAT","prevIndex","Infinity","getCurrentIndex","keysLength","Math","floor","setDragImage","dataTransfer","draggableBlockElem","transform","style","setTimeout","hideTargetLine","targetLineElem","lastTargetBlockElem","opacity","marginBottom","marginTop","useDraggableBlockMenu","editor","anchorElem","isEditable","scrollerElem","parentElement","menuRef","targetLineRef","debugHighlightRef","isDraggingBlockRef","highlightTimersRef","setDraggableBlockElem","lastTargetBlock","setLastTargetBlock","editorConfig","blockHandleHorizontalOffset","admin","hideGutter","onDocumentMouseMove","event","target","distanceFromScrollerElem","pageX","pageY","topLevelNodeKeys","blockElem","_draggableBlockElem","foundAtIndex","isFoundNodeEmptyParagraph","cache_threshold","horizontalOffset","point","x","y","startIndex","length","useEdgeAsDefault","verbose","document","addEventListener","removeEventListener","current","onDragover","isFileTransfer","targetBlockElem","fuzzy","preventDefault","dropEffect","isBelow","willStayInSamePosition","getBoundingClientRect","width","boundingBox","elem","onDrop","dragData","getData","update","draggedNode","targetNode","height","targetBlockElemHeight","top","targetBlockElemTop","mouseY","window","scrollY","insertAfter","insertBefore","remove","allPrevHighlighters","querySelectorAll","forEach","highlighter","newInsertedElem","getElementByKey","getKey","highlightTimer","newInsertedElemRect","highlightElem","createElement","className","backgroundColor","transition","zIndex","pointerEvents","boxSizing","borderRadius","position","body","appendChild","left","fadeTimer","removeTimer","push","clearTimeout","onDragStart","effectAllowed","nodeKey","node","setData","onDragEnd","_jsxs","Fragment","_jsx","draggable","ref","type","DraggableBlockPlugin","t0","t1","undefined","_editable"],"sources":["../../../../../src/lexical/plugins/handles/DraggableBlockPlugin/index.tsx"],"sourcesContent":["'use client'\nimport type { LexicalEditor } from 'lexical'\nimport type { DragEvent as ReactDragEvent } from 'react'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { eventFiles } from '@lexical/rich-text'\nimport { $getNearestNodeFromDOMNode, $getNodeByKey, isHTMLElement } from 'lexical'\nimport * as React from 'react'\nimport { useEffect, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { useEditorConfigContext } from '../../../config/client/EditorConfigProvider.js'\nimport { Point } from '../../../utils/point.js'\nimport { calculateDistanceFromScrollerElem } from '../utils/calculateDistanceFromScrollerElem.js'\nimport { getNodeCloseToPoint } from '../utils/getNodeCloseToPoint.js'\nimport { getTopLevelNodeKeys } from '../utils/getTopLevelNodeKeys.js'\nimport { isOnHandleElement } from '../utils/isOnHandleElement.js'\nimport { setHandlePosition } from '../utils/setHandlePosition.js'\nimport { getBoundingClientRectWithoutTransform } from './getBoundingRectWithoutTransform.js'\nimport './index.css'\nimport { setTargetLine } from './setTargetLine.js'\n\nconst DRAGGABLE_BLOCK_MENU_CLASSNAME = 'draggable-block-menu'\nconst DRAG_DATA_FORMAT = 'application/x-lexical-drag-block'\n\nlet prevIndex = Infinity\n\nfunction getCurrentIndex(keysLength: number): number {\n if (keysLength === 0) {\n return Infinity\n }\n if (prevIndex >= 0 && prevIndex < keysLength) {\n return prevIndex\n }\n\n return Math.floor(keysLength / 2)\n}\n\nfunction setDragImage(dataTransfer: DataTransfer, draggableBlockElem: HTMLElement) {\n const { transform } = draggableBlockElem.style\n\n // Remove dragImage borders\n dataTransfer.setDragImage(draggableBlockElem, 0, 0)\n\n setTimeout(() => {\n draggableBlockElem.style.transform = transform\n })\n}\n\nfunction hideTargetLine(\n targetLineElem: HTMLElement | null,\n lastTargetBlockElem: HTMLElement | null,\n) {\n if (targetLineElem) {\n targetLineElem.style.opacity = '0'\n }\n if (lastTargetBlockElem) {\n lastTargetBlockElem.style.opacity = ''\n // Delete marginBottom and marginTop values we set\n lastTargetBlockElem.style.marginBottom = ''\n lastTargetBlockElem.style.marginTop = ''\n //lastTargetBlock.style.border = 'none'\n }\n}\n\nfunction useDraggableBlockMenu(\n editor: LexicalEditor,\n anchorElem: HTMLElement,\n isEditable: boolean,\n): React.ReactElement {\n const scrollerElem = anchorElem.parentElement\n\n const menuRef = useRef<HTMLButtonElement>(null)\n const targetLineRef = useRef<HTMLDivElement>(null)\n const debugHighlightRef = useRef<HTMLDivElement>(null)\n const isDraggingBlockRef = useRef<boolean>(false)\n const highlightTimersRef = useRef<ReturnType<typeof setTimeout>[]>([])\n const [draggableBlockElem, setDraggableBlockElem] = useState<HTMLElement | null>(null)\n const [lastTargetBlock, setLastTargetBlock] = useState<{\n boundingBox?: DOMRect\n elem: HTMLElement | null\n isBelow: boolean\n } | null>(null)\n\n const { editorConfig } = useEditorConfigContext()\n\n const blockHandleHorizontalOffset = editorConfig?.admin?.hideGutter ? -44 : -8\n\n useEffect(() => {\n /**\n * Handles positioning of the drag handle\n */\n function onDocumentMouseMove(event: MouseEvent) {\n const target = event.target\n if (!isHTMLElement(target)) {\n return\n }\n\n const distanceFromScrollerElem = calculateDistanceFromScrollerElem(\n scrollerElem,\n event.pageX,\n event.pageY,\n target,\n )\n if (distanceFromScrollerElem === -1) {\n setDraggableBlockElem(null)\n return\n }\n\n if (isOnHandleElement(target, DRAGGABLE_BLOCK_MENU_CLASSNAME)) {\n return\n }\n\n const topLevelNodeKeys = getTopLevelNodeKeys(editor)\n\n const {\n blockElem: _draggableBlockElem,\n foundAtIndex,\n isFoundNodeEmptyParagraph,\n } = getNodeCloseToPoint({\n anchorElem,\n cache_threshold: 0,\n editor,\n horizontalOffset: -distanceFromScrollerElem,\n point: new Point(event.x, event.y),\n startIndex: getCurrentIndex(topLevelNodeKeys.length),\n useEdgeAsDefault: false,\n verbose: false,\n })\n\n prevIndex = foundAtIndex\n\n //if (DEBUG && _draggableBlockElem) {\n //targetBlockElem.style.border = '3px solid red'\n // highlightElemOriginalPosition(debugHighlightRef, _draggableBlockElem, anchorElem)\n //}\n\n if (!_draggableBlockElem && !isFoundNodeEmptyParagraph) {\n return\n }\n\n if (draggableBlockElem !== _draggableBlockElem) {\n setDraggableBlockElem(_draggableBlockElem)\n }\n }\n\n // Since the draggableBlockElem is outside the actual editor, we need to listen to the document\n // to be able to detect when the mouse is outside the editor and respect a buffer around\n // the scrollerElem to avoid the draggableBlockElem disappearing too early.\n document?.addEventListener('mousemove', onDocumentMouseMove)\n\n return () => {\n document?.removeEventListener('mousemove', onDocumentMouseMove)\n }\n }, [scrollerElem, anchorElem, editor, draggableBlockElem])\n\n useEffect(() => {\n if (menuRef.current) {\n setHandlePosition(\n draggableBlockElem,\n menuRef.current,\n anchorElem,\n blockHandleHorizontalOffset,\n )\n }\n }, [anchorElem, draggableBlockElem, blockHandleHorizontalOffset])\n\n useEffect(() => {\n function onDragover(event: DragEvent): boolean {\n if (!isDraggingBlockRef.current) {\n return false\n }\n const [isFileTransfer] = eventFiles(event)\n if (isFileTransfer) {\n return false\n }\n\n const { pageY, target } = event\n if (!isHTMLElement(target)) {\n return false\n }\n\n const distanceFromScrollerElem = calculateDistanceFromScrollerElem(\n scrollerElem,\n event.pageX,\n event.pageY,\n target,\n 100,\n 50,\n )\n\n const topLevelNodeKeys = getTopLevelNodeKeys(editor)\n\n const {\n blockElem: targetBlockElem,\n foundAtIndex,\n isFoundNodeEmptyParagraph,\n } = getNodeCloseToPoint({\n anchorElem,\n editor,\n fuzzy: true,\n horizontalOffset: -distanceFromScrollerElem,\n point: new Point(event.x, event.y),\n startIndex: getCurrentIndex(topLevelNodeKeys.length),\n useEdgeAsDefault: true,\n verbose: true,\n })\n\n prevIndex = foundAtIndex\n\n const targetLineElem = targetLineRef.current\n // targetBlockElem === null shouldn't happen\n if (targetBlockElem === null || targetLineElem === null) {\n return false\n }\n\n // Always prevent default and set dropEffect during drag to maintain the move cursor\n event.preventDefault()\n event.dataTransfer!.dropEffect = 'move'\n\n if (draggableBlockElem !== targetBlockElem) {\n const { isBelow, willStayInSamePosition } = setTargetLine(\n editorConfig?.admin?.hideGutter ? '0px' : 'var(--spacer-5)',\n blockHandleHorizontalOffset +\n (editorConfig?.admin?.hideGutter\n ? (menuRef?.current?.getBoundingClientRect()?.width ?? 0)\n : -(menuRef?.current?.getBoundingClientRect()?.width ?? 0)),\n targetLineElem,\n targetBlockElem,\n lastTargetBlock!,\n pageY,\n anchorElem,\n event,\n debugHighlightRef,\n isFoundNodeEmptyParagraph,\n )\n\n if (!willStayInSamePosition) {\n setLastTargetBlock({\n boundingBox: targetBlockElem.getBoundingClientRect(),\n elem: targetBlockElem,\n isBelow,\n })\n }\n } else if (lastTargetBlock?.elem) {\n hideTargetLine(targetLineElem, lastTargetBlock.elem)\n setLastTargetBlock({\n boundingBox: targetBlockElem.getBoundingClientRect(),\n elem: targetBlockElem,\n isBelow: false,\n })\n }\n\n return true\n }\n\n function onDrop(event: DragEvent): boolean {\n if (!isDraggingBlockRef.current) {\n return false\n }\n const [isFileTransfer] = eventFiles(event)\n if (isFileTransfer) {\n return false\n }\n const { dataTransfer, pageY, target } = event\n const dragData = dataTransfer?.getData(DRAG_DATA_FORMAT) || ''\n\n editor.update(() => {\n const draggedNode = $getNodeByKey(dragData)\n if (!draggedNode) {\n return false\n }\n if (!isHTMLElement(target)) {\n return false\n }\n const distanceFromScrollerElem = calculateDistanceFromScrollerElem(\n scrollerElem,\n event.pageX,\n event.pageY,\n target,\n 100,\n 50,\n )\n\n const { blockElem: targetBlockElem, isFoundNodeEmptyParagraph } = getNodeCloseToPoint({\n anchorElem,\n editor,\n fuzzy: true,\n horizontalOffset: -distanceFromScrollerElem,\n point: new Point(event.x, event.y),\n useEdgeAsDefault: true,\n })\n\n if (!targetBlockElem) {\n return false\n }\n const targetNode = $getNearestNodeFromDOMNode(targetBlockElem)\n if (!targetNode) {\n return false\n }\n if (targetNode === draggedNode) {\n return true\n }\n\n const { height: targetBlockElemHeight, top: targetBlockElemTop } =\n getBoundingClientRectWithoutTransform(targetBlockElem)\n\n const mouseY = pageY\n const isBelow = mouseY >= targetBlockElemTop + targetBlockElemHeight / 2 + window.scrollY\n\n if (!isFoundNodeEmptyParagraph) {\n if (isBelow) {\n // below targetBlockElem\n targetNode.insertAfter(draggedNode)\n } else {\n // above targetBlockElem\n targetNode.insertBefore(draggedNode)\n }\n } else {\n //\n targetNode.insertBefore(draggedNode)\n targetNode.remove()\n }\n\n /*\n if (pageY >= targetBlockElemTop + targetBlockElemHeight / 2) {\n targetNode.insertAfter(draggedNode)\n } else {\n targetNode.insertBefore(draggedNode)\n }*/\n if (draggableBlockElem !== null) {\n setDraggableBlockElem(null)\n }\n\n // find all previous elements with lexical-block-highlighter class and remove them\n const allPrevHighlighters = document.querySelectorAll('.lexical-block-highlighter')\n allPrevHighlighters.forEach((highlighter) => {\n highlighter.remove()\n })\n\n const newInsertedElem = editor.getElementByKey(draggedNode.getKey())\n const highlightTimer = setTimeout(() => {\n // add new temp html element to newInsertedElem with the same height and width and the class block-selected\n // to highlight the new inserted element\n const newInsertedElemRect = newInsertedElem?.getBoundingClientRect()\n if (!newInsertedElemRect) {\n return\n }\n const highlightElem = document.createElement('div')\n highlightElem.className = 'lexical-block-highlighter'\n\n highlightElem.style.backgroundColor = 'var(--theme-elevation-1000'\n highlightElem.style.transition = 'opacity 0.5s ease-in-out'\n highlightElem.style.zIndex = '1'\n highlightElem.style.pointerEvents = 'none'\n highlightElem.style.boxSizing = 'border-box'\n highlightElem.style.borderRadius = '4px'\n highlightElem.style.position = 'absolute'\n document.body.appendChild(highlightElem)\n\n highlightElem.style.opacity = '0.1'\n\n highlightElem.style.height = `${newInsertedElemRect.height + 8}px`\n highlightElem.style.width = `${newInsertedElemRect.width + 8}px`\n highlightElem.style.top = `${newInsertedElemRect.top + window.scrollY - 4}px`\n highlightElem.style.left = `${newInsertedElemRect.left - 4}px`\n\n const fadeTimer = setTimeout(() => {\n highlightElem.style.opacity = '0'\n const removeTimer = setTimeout(() => {\n highlightElem.remove()\n }, 500)\n highlightTimersRef.current.push(removeTimer)\n }, 1000)\n highlightTimersRef.current.push(fadeTimer)\n }, 120)\n highlightTimersRef.current.push(highlightTimer)\n })\n\n return true\n }\n\n // register onDragover event listeners:\n document.addEventListener('dragover', onDragover)\n // register onDrop event listeners:\n document.addEventListener('drop', onDrop)\n\n return () => {\n document.removeEventListener('dragover', onDragover)\n document.removeEventListener('drop', onDrop)\n highlightTimersRef.current.forEach(clearTimeout)\n highlightTimersRef.current = []\n }\n }, [\n scrollerElem,\n blockHandleHorizontalOffset,\n anchorElem,\n editor,\n lastTargetBlock,\n draggableBlockElem,\n editorConfig?.admin?.hideGutter,\n ])\n\n function onDragStart(event: ReactDragEvent<HTMLButtonElement>): void {\n const dataTransfer = event.dataTransfer\n if (!dataTransfer || !draggableBlockElem) {\n return\n }\n setDragImage(dataTransfer, draggableBlockElem)\n dataTransfer.effectAllowed = 'move'\n let nodeKey = ''\n editor.update(() => {\n const node = $getNearestNodeFromDOMNode(draggableBlockElem)\n if (node) {\n nodeKey = node.getKey()\n }\n })\n isDraggingBlockRef.current = true\n dataTransfer.setData(DRAG_DATA_FORMAT, nodeKey)\n }\n\n function onDragEnd(): void {\n isDraggingBlockRef.current = false\n if (lastTargetBlock?.elem) {\n hideTargetLine(targetLineRef.current, lastTargetBlock?.elem)\n }\n }\n\n return createPortal(\n <React.Fragment>\n <button\n aria-label=\"Drag to move\"\n className=\"icon draggable-block-menu\"\n draggable\n onDragEnd={onDragEnd}\n onDragStart={onDragStart}\n ref={menuRef}\n type=\"button\"\n >\n <div className={isEditable ? 'icon' : ''} />\n </button>\n <div className=\"draggable-block-target-line\" ref={targetLineRef} />\n <div className=\"debug-highlight\" ref={debugHighlightRef} />\n </React.Fragment>,\n anchorElem,\n )\n}\n\nexport function DraggableBlockPlugin({\n anchorElem = document.body,\n}: {\n anchorElem?: HTMLElement\n}): React.ReactElement {\n const [editor] = useLexicalComposerContext()\n return useDraggableBlockMenu(editor, anchorElem, editor._editable)\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["useLexicalComposerContext","eventFiles","$getNearestNodeFromDOMNode","$getNodeByKey","isHTMLElement","React","useEffect","useRef","useState","createPortal","useEditorConfigContext","Point","calculateDistanceFromScrollerElem","getNodeCloseToPoint","getTopLevelNodeKeys","isOnHandleElement","setHandlePosition","getBoundingClientRectWithoutTransform","setTargetLine","DRAGGABLE_BLOCK_MENU_CLASSNAME","DRAG_DATA_FORMAT","prevIndex","Infinity","getCurrentIndex","keysLength","Math","floor","setDragImage","dataTransfer","draggableBlockElem","transform","style","setTimeout","hideTargetLine","targetLineElem","lastTargetBlockElem","opacity","marginBottom","marginTop","useDraggableBlockMenu","editor","anchorElem","isEditable","scrollerElem","parentElement","menuRef","targetLineRef","debugHighlightRef","isDraggingBlockRef","highlightTimersRef","setDraggableBlockElem","lastTargetBlock","setLastTargetBlock","editorConfig","blockHandleHorizontalOffset","admin","hideGutter","onDocumentMouseMove","event","target","distanceFromScrollerElem","pageX","pageY","topLevelNodeKeys","blockElem","_draggableBlockElem","foundAtIndex","isFoundNodeEmptyParagraph","cache_threshold","horizontalOffset","point","x","y","startIndex","length","useEdgeAsDefault","verbose","document","addEventListener","removeEventListener","current","onDragover","isFileTransfer","targetBlockElem","fuzzy","preventDefault","dropEffect","isBelow","willStayInSamePosition","getBoundingClientRect","width","boundingBox","elem","onDrop","dragData","getData","update","draggedNode","targetNode","height","targetBlockElemHeight","top","targetBlockElemTop","mouseY","window","scrollY","insertAfter","insertBefore","remove","allPrevHighlighters","querySelectorAll","forEach","highlighter","newInsertedElem","getElementByKey","getKey","highlightTimer","newInsertedElemRect","highlightElem","createElement","className","backgroundColor","transition","zIndex","pointerEvents","boxSizing","borderRadius","position","body","appendChild","left","fadeTimer","removeTimer","push","clearTimeout","onDragStart","effectAllowed","nodeKey","node","setData","onDragEnd","_jsxs","Fragment","_jsx","draggable","ref","type","DraggableBlockPlugin","t0","t1","undefined","_editable"],"sources":["../../../../../src/lexical/plugins/handles/DraggableBlockPlugin/index.tsx"],"sourcesContent":["'use client'\nimport type { LexicalEditor } from 'lexical'\nimport type { DragEvent as ReactDragEvent } from 'react'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { eventFiles } from '@lexical/rich-text'\nimport { $getNearestNodeFromDOMNode, $getNodeByKey, isHTMLElement } from 'lexical'\nimport * as React from 'react'\nimport { useEffect, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { useEditorConfigContext } from '../../../config/client/EditorConfigProvider.js'\nimport { Point } from '../../../utils/point.js'\nimport { calculateDistanceFromScrollerElem } from '../utils/calculateDistanceFromScrollerElem.js'\nimport { getNodeCloseToPoint } from '../utils/getNodeCloseToPoint.js'\nimport { getTopLevelNodeKeys } from '../utils/getTopLevelNodeKeys.js'\nimport { isOnHandleElement } from '../utils/isOnHandleElement.js'\nimport { setHandlePosition } from '../utils/setHandlePosition.js'\nimport { getBoundingClientRectWithoutTransform } from './getBoundingRectWithoutTransform.js'\nimport './index.css'\nimport { setTargetLine } from './setTargetLine.js'\n\nconst DRAGGABLE_BLOCK_MENU_CLASSNAME = 'draggable-block-menu'\nconst DRAG_DATA_FORMAT = 'application/x-lexical-drag-block'\n\nlet prevIndex = Infinity\n\nfunction getCurrentIndex(keysLength: number): number {\n if (keysLength === 0) {\n return Infinity\n }\n if (prevIndex >= 0 && prevIndex < keysLength) {\n return prevIndex\n }\n\n return Math.floor(keysLength / 2)\n}\n\nfunction setDragImage(dataTransfer: DataTransfer, draggableBlockElem: HTMLElement) {\n const { transform } = draggableBlockElem.style\n\n // Remove dragImage borders\n dataTransfer.setDragImage(draggableBlockElem, 0, 0)\n\n setTimeout(() => {\n draggableBlockElem.style.transform = transform\n })\n}\n\nfunction hideTargetLine(\n targetLineElem: HTMLElement | null,\n lastTargetBlockElem: HTMLElement | null,\n) {\n if (targetLineElem) {\n targetLineElem.style.opacity = '0'\n }\n if (lastTargetBlockElem) {\n lastTargetBlockElem.style.opacity = ''\n // Delete marginBottom and marginTop values we set\n lastTargetBlockElem.style.marginBottom = ''\n lastTargetBlockElem.style.marginTop = ''\n //lastTargetBlock.style.border = 'none'\n }\n}\n\nfunction useDraggableBlockMenu(\n editor: LexicalEditor,\n anchorElem: HTMLElement,\n isEditable: boolean,\n): React.ReactElement {\n const scrollerElem = anchorElem.parentElement\n\n const menuRef = useRef<HTMLButtonElement>(null)\n const targetLineRef = useRef<HTMLDivElement>(null)\n const debugHighlightRef = useRef<HTMLDivElement>(null)\n const isDraggingBlockRef = useRef<boolean>(false)\n const highlightTimersRef = useRef<ReturnType<typeof setTimeout>[]>([])\n const [draggableBlockElem, setDraggableBlockElem] = useState<HTMLElement | null>(null)\n const [lastTargetBlock, setLastTargetBlock] = useState<{\n boundingBox?: DOMRect\n elem: HTMLElement | null\n isBelow: boolean\n } | null>(null)\n\n const { editorConfig } = useEditorConfigContext()\n\n const blockHandleHorizontalOffset = editorConfig?.admin?.hideGutter ? -44 : -8\n\n useEffect(() => {\n /**\n * Handles positioning of the drag handle\n */\n function onDocumentMouseMove(event: MouseEvent) {\n const target = event.target\n if (!isHTMLElement(target)) {\n return\n }\n\n const distanceFromScrollerElem = calculateDistanceFromScrollerElem(\n scrollerElem,\n event.pageX,\n event.pageY,\n target,\n )\n if (distanceFromScrollerElem === -1) {\n setDraggableBlockElem(null)\n return\n }\n\n if (isOnHandleElement(target, DRAGGABLE_BLOCK_MENU_CLASSNAME)) {\n return\n }\n\n const topLevelNodeKeys = getTopLevelNodeKeys(editor)\n\n const {\n blockElem: _draggableBlockElem,\n foundAtIndex,\n isFoundNodeEmptyParagraph,\n } = getNodeCloseToPoint({\n anchorElem,\n cache_threshold: 0,\n editor,\n horizontalOffset: -distanceFromScrollerElem,\n point: new Point(event.x, event.y),\n startIndex: getCurrentIndex(topLevelNodeKeys.length),\n useEdgeAsDefault: false,\n verbose: false,\n })\n\n prevIndex = foundAtIndex\n\n //if (DEBUG && _draggableBlockElem) {\n //targetBlockElem.style.border = '3px solid red'\n // highlightElemOriginalPosition(debugHighlightRef, _draggableBlockElem, anchorElem)\n //}\n\n if (!_draggableBlockElem && !isFoundNodeEmptyParagraph) {\n return\n }\n\n if (draggableBlockElem !== _draggableBlockElem) {\n setDraggableBlockElem(_draggableBlockElem)\n }\n }\n\n // Since the draggableBlockElem is outside the actual editor, we need to listen to the document\n // to be able to detect when the mouse is outside the editor and respect a buffer around\n // the scrollerElem to avoid the draggableBlockElem disappearing too early.\n document?.addEventListener('mousemove', onDocumentMouseMove)\n\n return () => {\n document?.removeEventListener('mousemove', onDocumentMouseMove)\n }\n }, [scrollerElem, anchorElem, editor, draggableBlockElem])\n\n useEffect(() => {\n if (menuRef.current) {\n setHandlePosition(\n draggableBlockElem,\n menuRef.current,\n anchorElem,\n blockHandleHorizontalOffset,\n )\n }\n }, [anchorElem, draggableBlockElem, blockHandleHorizontalOffset])\n\n useEffect(() => {\n function onDragover(event: DragEvent): boolean {\n if (!isDraggingBlockRef.current) {\n return false\n }\n const [isFileTransfer] = eventFiles(event)\n if (isFileTransfer) {\n return false\n }\n\n const { pageY, target } = event\n if (!isHTMLElement(target)) {\n return false\n }\n\n const distanceFromScrollerElem = calculateDistanceFromScrollerElem(\n scrollerElem,\n event.pageX,\n event.pageY,\n target,\n 100,\n 50,\n )\n\n const topLevelNodeKeys = getTopLevelNodeKeys(editor)\n\n const {\n blockElem: targetBlockElem,\n foundAtIndex,\n isFoundNodeEmptyParagraph,\n } = getNodeCloseToPoint({\n anchorElem,\n editor,\n fuzzy: true,\n horizontalOffset: -distanceFromScrollerElem,\n point: new Point(event.x, event.y),\n startIndex: getCurrentIndex(topLevelNodeKeys.length),\n useEdgeAsDefault: true,\n verbose: true,\n })\n\n prevIndex = foundAtIndex\n\n const targetLineElem = targetLineRef.current\n // targetBlockElem === null shouldn't happen\n if (targetBlockElem === null || targetLineElem === null) {\n return false\n }\n\n // Always prevent default and set dropEffect during drag to maintain the move cursor\n event.preventDefault()\n event.dataTransfer!.dropEffect = 'move'\n\n if (draggableBlockElem !== targetBlockElem) {\n const { isBelow, willStayInSamePosition } = setTargetLine(\n editorConfig?.admin?.hideGutter ? '0px' : 'var(--spacer-5)',\n blockHandleHorizontalOffset +\n (editorConfig?.admin?.hideGutter\n ? (menuRef?.current?.getBoundingClientRect()?.width ?? 0)\n : -(menuRef?.current?.getBoundingClientRect()?.width ?? 0)),\n targetLineElem,\n targetBlockElem,\n lastTargetBlock!,\n pageY,\n anchorElem,\n event,\n debugHighlightRef,\n isFoundNodeEmptyParagraph,\n )\n\n if (!willStayInSamePosition) {\n setLastTargetBlock({\n boundingBox: targetBlockElem.getBoundingClientRect(),\n elem: targetBlockElem,\n isBelow,\n })\n }\n } else if (lastTargetBlock?.elem) {\n hideTargetLine(targetLineElem, lastTargetBlock.elem)\n setLastTargetBlock({\n boundingBox: targetBlockElem.getBoundingClientRect(),\n elem: targetBlockElem,\n isBelow: false,\n })\n }\n\n return true\n }\n\n function onDrop(event: DragEvent): boolean {\n if (!isDraggingBlockRef.current) {\n return false\n }\n const [isFileTransfer] = eventFiles(event)\n if (isFileTransfer) {\n return false\n }\n const { dataTransfer, pageY, target } = event\n const dragData = dataTransfer?.getData(DRAG_DATA_FORMAT) || ''\n\n editor.update(() => {\n const draggedNode = $getNodeByKey(dragData)\n if (!draggedNode) {\n return false\n }\n if (!isHTMLElement(target)) {\n return false\n }\n const distanceFromScrollerElem = calculateDistanceFromScrollerElem(\n scrollerElem,\n event.pageX,\n event.pageY,\n target,\n 100,\n 50,\n )\n\n const { blockElem: targetBlockElem, isFoundNodeEmptyParagraph } = getNodeCloseToPoint({\n anchorElem,\n editor,\n fuzzy: true,\n horizontalOffset: -distanceFromScrollerElem,\n point: new Point(event.x, event.y),\n useEdgeAsDefault: true,\n })\n\n if (!targetBlockElem) {\n return false\n }\n const targetNode = $getNearestNodeFromDOMNode(targetBlockElem)\n if (!targetNode) {\n return false\n }\n if (targetNode === draggedNode) {\n return true\n }\n\n const { height: targetBlockElemHeight, top: targetBlockElemTop } =\n getBoundingClientRectWithoutTransform(targetBlockElem)\n\n const mouseY = pageY\n const isBelow = mouseY >= targetBlockElemTop + targetBlockElemHeight / 2 + window.scrollY\n\n if (!isFoundNodeEmptyParagraph) {\n if (isBelow) {\n // below targetBlockElem\n targetNode.insertAfter(draggedNode)\n } else {\n // above targetBlockElem\n targetNode.insertBefore(draggedNode)\n }\n } else {\n //\n targetNode.insertBefore(draggedNode)\n targetNode.remove()\n }\n\n /*\n if (pageY >= targetBlockElemTop + targetBlockElemHeight / 2) {\n targetNode.insertAfter(draggedNode)\n } else {\n targetNode.insertBefore(draggedNode)\n }*/\n if (draggableBlockElem !== null) {\n setDraggableBlockElem(null)\n }\n\n // find all previous elements with lexical-block-highlighter class and remove them\n const allPrevHighlighters = document.querySelectorAll('.lexical-block-highlighter')\n allPrevHighlighters.forEach((highlighter) => {\n highlighter.remove()\n })\n\n const newInsertedElem = editor.getElementByKey(draggedNode.getKey())\n const highlightTimer = setTimeout(() => {\n // add new temp html element to newInsertedElem with the same height and width and the class block-selected\n // to highlight the new inserted element\n const newInsertedElemRect = newInsertedElem?.getBoundingClientRect()\n if (!newInsertedElemRect) {\n return\n }\n const highlightElem = document.createElement('div')\n highlightElem.className = 'lexical-block-highlighter'\n\n highlightElem.style.backgroundColor = 'var(--color-bg-inverse)'\n highlightElem.style.transition = 'opacity 0.5s ease-in-out'\n highlightElem.style.zIndex = '1'\n highlightElem.style.pointerEvents = 'none'\n highlightElem.style.boxSizing = 'border-box'\n highlightElem.style.borderRadius = '4px'\n highlightElem.style.position = 'absolute'\n document.body.appendChild(highlightElem)\n\n highlightElem.style.opacity = '0.1'\n\n highlightElem.style.height = `${newInsertedElemRect.height + 8}px`\n highlightElem.style.width = `${newInsertedElemRect.width + 8}px`\n highlightElem.style.top = `${newInsertedElemRect.top + window.scrollY - 4}px`\n highlightElem.style.left = `${newInsertedElemRect.left - 4}px`\n\n const fadeTimer = setTimeout(() => {\n highlightElem.style.opacity = '0'\n const removeTimer = setTimeout(() => {\n highlightElem.remove()\n }, 500)\n highlightTimersRef.current.push(removeTimer)\n }, 1000)\n highlightTimersRef.current.push(fadeTimer)\n }, 120)\n highlightTimersRef.current.push(highlightTimer)\n })\n\n return true\n }\n\n // register onDragover event listeners:\n document.addEventListener('dragover', onDragover)\n // register onDrop event listeners:\n document.addEventListener('drop', onDrop)\n\n return () => {\n document.removeEventListener('dragover', onDragover)\n document.removeEventListener('drop', onDrop)\n highlightTimersRef.current.forEach(clearTimeout)\n highlightTimersRef.current = []\n }\n }, [\n scrollerElem,\n blockHandleHorizontalOffset,\n anchorElem,\n editor,\n lastTargetBlock,\n draggableBlockElem,\n editorConfig?.admin?.hideGutter,\n ])\n\n function onDragStart(event: ReactDragEvent<HTMLButtonElement>): void {\n const dataTransfer = event.dataTransfer\n if (!dataTransfer || !draggableBlockElem) {\n return\n }\n setDragImage(dataTransfer, draggableBlockElem)\n dataTransfer.effectAllowed = 'move'\n let nodeKey = ''\n editor.update(() => {\n const node = $getNearestNodeFromDOMNode(draggableBlockElem)\n if (node) {\n nodeKey = node.getKey()\n }\n })\n isDraggingBlockRef.current = true\n dataTransfer.setData(DRAG_DATA_FORMAT, nodeKey)\n }\n\n function onDragEnd(): void {\n isDraggingBlockRef.current = false\n if (lastTargetBlock?.elem) {\n hideTargetLine(targetLineRef.current, lastTargetBlock?.elem)\n }\n }\n\n return createPortal(\n <React.Fragment>\n <button\n aria-label=\"Drag to move\"\n className=\"icon draggable-block-menu\"\n draggable\n onDragEnd={onDragEnd}\n onDragStart={onDragStart}\n ref={menuRef}\n type=\"button\"\n >\n <div className={isEditable ? 'icon' : ''} />\n </button>\n <div className=\"draggable-block-target-line\" ref={targetLineRef} />\n <div className=\"debug-highlight\" ref={debugHighlightRef} />\n </React.Fragment>,\n anchorElem,\n )\n}\n\nexport function DraggableBlockPlugin({\n anchorElem = document.body,\n}: {\n anchorElem?: HTMLElement\n}): React.ReactElement {\n const [editor] = useLexicalComposerContext()\n return useDraggableBlockMenu(editor, anchorElem, editor._editable)\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"calculateDistanceFromScrollerElem.d.ts","sourceRoot":"","sources":["../../../../../src/lexical/plugins/handles/utils/calculateDistanceFromScrollerElem.ts"],"names":[],"mappings":"AACA;;GAEG;AACH,eAAO,MAAM,iCAAiC,GAC5C,cAAc,WAAW,GAAG,IAAI,EAChC,OAAO,MAAM,EACb,OAAO,MAAM,EACb,QAAQ,WAAW,EACnB,mBAAkB,MAAW,EAC7B,iBAAgB,MAAW,KAC1B,MAwBF,CAAA"}
1
+ {"version":3,"file":"calculateDistanceFromScrollerElem.d.ts","sourceRoot":"","sources":["../../../../../src/lexical/plugins/handles/utils/calculateDistanceFromScrollerElem.ts"],"names":[],"mappings":"AACA;;GAEG;AACH,eAAO,MAAM,iCAAiC,iBAC9B,WAAW,GAAG,IAAI,SACzB,MAAM,SACN,MAAM,UACL,WAAW,qBACD,MAAM,mBACR,MAAM,KACrB,MAwBF,CAAA"}
@@ -131,8 +131,7 @@
131
131
  .LexicalEditorTheme__tabNode.LexicalEditorTheme__textUnderline::after {
132
132
  content: '';
133
133
  position: absolute;
134
- left: 0;
135
- right: 0;
134
+ inset-inline: 0;
136
135
  bottom: 0.15em;
137
136
  border-bottom: 0.1em solid currentColor;
138
137
  }
@@ -140,8 +139,7 @@
140
139
  .LexicalEditorTheme__tabNode.LexicalEditorTheme__textStrikethrough::before {
141
140
  content: '';
142
141
  position: absolute;
143
- left: 0;
144
- right: 0;
142
+ inset-inline: 0;
145
143
  top: 0.69em;
146
144
  border-top: 0.1em solid currentColor;
147
145
  }
@@ -150,8 +148,7 @@
150
148
  .LexicalEditorTheme__tabNode.LexicalEditorTheme__textUnderlineStrikethrough::after {
151
149
  content: '';
152
150
  position: absolute;
153
- left: 0;
154
- right: 0;
151
+ inset-inline: 0;
155
152
  }
156
153
 
157
154
  .LexicalEditorTheme__tabNode.LexicalEditorTheme__textUnderlineStrikethrough::before {
@@ -201,7 +198,7 @@
201
198
  content: '';
202
199
  display: block;
203
200
  position: absolute;
204
- top: -2px;
201
+ top: calc(var(--stroke-width-medium) * -1);
205
202
  width: var(--spacer-3);
206
203
  border-top: var(--stroke-width-small) solid var(--color-text);
207
204
  animation: CursorBlink 1.1s steps(2, start) infinite;
@@ -263,7 +260,8 @@
263
260
  .LexicalEditorTheme__listItem {
264
261
  font-family: var(--text-body-large-font-family);
265
262
  font-size: var(--text-body-large-font-size);
266
- margin: 0 0 var(--spacer-3) var(--spacer-6);
263
+ margin-block-end: var(--spacer-3);
264
+ margin-inline-start: var(--spacer-6);
267
265
  }
268
266
 
269
267
  .LexicalEditorTheme__listItem[style*='text-align: center'],
@@ -280,24 +278,25 @@
280
278
  }
281
279
 
282
280
  .LexicalEditorTheme__listItem[dir='rtl'] {
283
- margin: 0 var(--spacer-6) 0.4em 0;
281
+ margin-block-end: 0.4em;
282
+ margin-inline-end: var(--spacer-6);
284
283
  }
285
284
 
286
285
  .LexicalEditorTheme__listItemChecked,
287
286
  .LexicalEditorTheme__listItemUnchecked {
288
287
  position: relative;
289
- padding-left: var(--spacer-4);
290
- margin-left: var(--spacer-3);
288
+ padding-inline-start: var(--spacer-4);
289
+ margin-inline-start: var(--spacer-3);
291
290
  list-style-type: none;
292
291
  outline: none;
293
292
  }
294
293
 
295
294
  .LexicalEditorTheme__listItemUnchecked[dir='rtl'],
296
295
  .LexicalEditorTheme__listItemChecked[dir='rtl'] {
297
- margin-left: 0;
298
- padding-left: 0;
299
- padding-right: var(--spacer-4);
300
- margin-right: var(--spacer-3);
296
+ margin-inline-start: 0;
297
+ padding-inline-start: 0;
298
+ padding-inline-end: var(--spacer-4);
299
+ margin-inline-end: var(--spacer-3);
301
300
  }
302
301
 
303
302
  .LexicalEditorTheme__listItemChecked {
@@ -310,7 +309,7 @@
310
309
  width: var(--spacer-3);
311
310
  height: var(--spacer-3);
312
311
  top: 0;
313
- left: 0;
312
+ inset-inline-start: 0;
314
313
  cursor: pointer;
315
314
  display: block;
316
315
  position: absolute;
@@ -320,14 +319,14 @@
320
319
 
321
320
  .LexicalEditorTheme__listItemUnchecked[dir='rtl']:before,
322
321
  .LexicalEditorTheme__listItemChecked[dir='rtl']:before {
323
- left: auto;
324
- right: 0;
322
+ inset-inline-start: auto;
323
+ inset-inline-end: 0;
325
324
  }
326
325
 
327
326
  .LexicalEditorTheme__listItemUnchecked:focus:before,
328
327
  .LexicalEditorTheme__listItemChecked:focus:before {
329
328
  outline: 0;
330
- box-shadow: 0 0 0 2px var(--color-border-selected);
329
+ box-shadow: 0 0 0 var(--stroke-width-medium) var(--color-border-selected);
331
330
  }
332
331
 
333
332
  .LexicalEditorTheme__listItemUnchecked:before {
@@ -5,10 +5,10 @@
5
5
  position: relative;
6
6
  tab-size: 1;
7
7
  outline: 0;
8
- padding-top: var(--spacer-2);
9
- padding-bottom: var(--spacer-2);
10
- padding-left: 0;
11
- padding-right: 0;
8
+ padding: var(--spacer-3) var(--spacer-3);
9
+ /* Reserve space for the InsertParagraphAtEnd hover "+" affordance, which
10
+ overlaps this bottom padding; shrinking it would cover the last line. */
11
+ padding-bottom: var(--spacer-4);
12
12
 
13
13
  &:focus-visible {
14
14
  outline: none !important;
@@ -19,35 +19,43 @@
19
19
  }
20
20
  }
21
21
 
22
- .rich-text-lexical--show-gutter
23
- > .rich-text-lexical__wrap
24
- > .editor-container
25
- > .editor-scroller
26
- > .editor {
27
- > .ContentEditable__root {
22
+ @media (min-width: 768px) {
23
+ .ContentEditable__root {
28
24
  padding: var(--spacer-4) var(--spacer-5);
29
25
  }
26
+
27
+ .rich-text-lexical:not(.rich-text-lexical--show-gutter)
28
+ > .rich-text-lexical__wrap
29
+ > .rich-text-lexical__editor-content
30
+ > .editor-container
31
+ > .editor-scroller
32
+ > .editor
33
+ > .ContentEditable__root {
34
+ padding: var(--spacer-2) 0;
35
+ }
30
36
  }
31
37
 
32
38
  html[data-theme='light'] {
33
39
  .rich-text-lexical.rich-text-lexical--show-gutter {
34
40
  &.error:not(:hover) {
35
41
  > .rich-text-lexical__wrap
42
+ > .rich-text-lexical__editor-content
36
43
  > .editor-container
37
44
  > .editor-scroller
38
45
  > .editor
39
46
  > .ContentEditable__root::before {
40
- border-left: 2px solid var(--color-border-danger);
47
+ border-inline-start: var(--stroke-width-medium) solid var(--color-border-danger);
41
48
  }
42
49
  }
43
50
 
44
51
  &.error:hover {
45
52
  > .rich-text-lexical__wrap
53
+ > .rich-text-lexical__editor-content
46
54
  > .editor-container
47
55
  > .editor-scroller
48
56
  > .editor
49
57
  > .ContentEditable__root::before {
50
- border-left: 2px solid var(--color-border-danger);
58
+ border-inline-start: var(--stroke-width-medium) solid var(--color-border-danger);
51
59
  }
52
60
  }
53
61
  }
@@ -68,11 +76,12 @@
68
76
  .rich-text-lexical.rich-text-lexical--show-gutter {
69
77
  &.error {
70
78
  > .rich-text-lexical__wrap
79
+ > .rich-text-lexical__editor-content
71
80
  > .editor-container
72
81
  > .editor-scroller
73
82
  > .editor
74
83
  > .ContentEditable__root::before {
75
- border-left: 2px solid var(--color-border-danger);
84
+ border-inline-start: var(--stroke-width-medium) solid var(--color-border-danger);
76
85
  }
77
86
  }
78
87
  }
@@ -0,0 +1,17 @@
1
+ import type { Transformer } from '@lexical/markdown';
2
+ import type { ElementNode } from 'lexical';
3
+ /**
4
+ * Payload's markdown import. Wraps `@lexical/markdown`'s `$convertFromMarkdownString`
5
+ * with Payload's `normalizeMarkdown` preprocessing (nested code fences + table-row
6
+ * whitespace handling).
7
+ *
8
+ * TODO: Remove this wrapper and the `normalizeMarkdown` import once
9
+ * https://github.com/facebook/lexical/pull/8734 is merged and we upgrade to a
10
+ * release that includes it. At that point callers can use `@lexical/markdown`'s
11
+ * `$convertFromMarkdownString` directly.
12
+ *
13
+ * @param shouldPreserveNewLines By setting this to true, new lines will be preserved between conversions.
14
+ * @param shouldMergeAdjacentLines By setting this to true, adjacent non empty lines will be merged according to commonmark spec: https://spec.commonmark.org/0.24/#example-177. Not applicable if shouldPreserveNewLines = true.
15
+ */
16
+ export declare function $convertFromMarkdownString(markdown: string, transformers?: Array<Transformer>, node?: ElementNode, shouldPreserveNewLines?: boolean, shouldMergeAdjacentLines?: boolean): void;
17
+ //# sourceMappingURL=convertFromMarkdownString.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convertFromMarkdownString.d.ts","sourceRoot":"","sources":["../../../../src/lexical/utils/markdown/convertFromMarkdownString.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAU1C;;;;;;;;;;;;GAYG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,MAAM,EAChB,YAAY,GAAE,KAAK,CAAC,WAAW,CAAgB,EAC/C,IAAI,CAAC,EAAE,WAAW,EAClB,sBAAsB,UAAQ,EAC9B,wBAAwB,UAAQ,GAC/B,IAAI,CASN"}
@@ -0,0 +1,27 @@
1
+ import { $convertFromMarkdownString as $convertFromMarkdownStringUpstream,
2
+ // eslint-disable-next-line payload/no-conflicting-lexical-markdown-imports -- this wrapper intentionally uses upstream's default transformer set
3
+ TRANSFORMERS } from '@lexical/markdown';
4
+ import { normalizeMarkdown } from './normalizeMarkdown.js';
5
+ /**
6
+ * Payload's markdown import. Wraps `@lexical/markdown`'s `$convertFromMarkdownString`
7
+ * with Payload's `normalizeMarkdown` preprocessing (nested code fences + table-row
8
+ * whitespace handling).
9
+ *
10
+ * TODO: Remove this wrapper and the `normalizeMarkdown` import once
11
+ * https://github.com/facebook/lexical/pull/8734 is merged and we upgrade to a
12
+ * release that includes it. At that point callers can use `@lexical/markdown`'s
13
+ * `$convertFromMarkdownString` directly.
14
+ *
15
+ * @param shouldPreserveNewLines By setting this to true, new lines will be preserved between conversions.
16
+ * @param shouldMergeAdjacentLines By setting this to true, adjacent non empty lines will be merged according to commonmark spec: https://spec.commonmark.org/0.24/#example-177. Not applicable if shouldPreserveNewLines = true.
17
+ */
18
+ export function $convertFromMarkdownString(markdown, transformers = TRANSFORMERS, node, shouldPreserveNewLines = false, shouldMergeAdjacentLines = false) {
19
+ if (shouldPreserveNewLines) {
20
+ return $convertFromMarkdownStringUpstream(markdown, transformers, node, true);
21
+ }
22
+ // Passing shouldMergeAdjacentLines = false to upstream stops it from
23
+ // re-normalizing markdown that normalizeMarkdown has already normalized.
24
+ const sanitizedMarkdown = normalizeMarkdown(markdown, shouldMergeAdjacentLines);
25
+ return $convertFromMarkdownStringUpstream(sanitizedMarkdown, transformers, node, false, false);
26
+ }
27
+ //# sourceMappingURL=convertFromMarkdownString.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convertFromMarkdownString.js","names":["$convertFromMarkdownString","$convertFromMarkdownStringUpstream","TRANSFORMERS","normalizeMarkdown","markdown","transformers","node","shouldPreserveNewLines","shouldMergeAdjacentLines","sanitizedMarkdown"],"sources":["../../../../src/lexical/utils/markdown/convertFromMarkdownString.ts"],"sourcesContent":["import type { Transformer } from '@lexical/markdown'\nimport type { ElementNode } from 'lexical'\n\nimport {\n $convertFromMarkdownString as $convertFromMarkdownStringUpstream,\n // eslint-disable-next-line payload/no-conflicting-lexical-markdown-imports -- this wrapper intentionally uses upstream's default transformer set\n TRANSFORMERS,\n} from '@lexical/markdown'\n\nimport { normalizeMarkdown } from './normalizeMarkdown.js'\n\n/**\n * Payload's markdown import. Wraps `@lexical/markdown`'s `$convertFromMarkdownString`\n * with Payload's `normalizeMarkdown` preprocessing (nested code fences + table-row\n * whitespace handling).\n *\n * TODO: Remove this wrapper and the `normalizeMarkdown` import once\n * https://github.com/facebook/lexical/pull/8734 is merged and we upgrade to a\n * release that includes it. At that point callers can use `@lexical/markdown`'s\n * `$convertFromMarkdownString` directly.\n *\n * @param shouldPreserveNewLines By setting this to true, new lines will be preserved between conversions.\n * @param shouldMergeAdjacentLines By setting this to true, adjacent non empty lines will be merged according to commonmark spec: https://spec.commonmark.org/0.24/#example-177. Not applicable if shouldPreserveNewLines = true.\n */\nexport function $convertFromMarkdownString(\n markdown: string,\n transformers: Array<Transformer> = TRANSFORMERS,\n node?: ElementNode,\n shouldPreserveNewLines = false,\n shouldMergeAdjacentLines = false,\n): void {\n if (shouldPreserveNewLines) {\n return $convertFromMarkdownStringUpstream(markdown, transformers, node, true)\n }\n\n // Passing shouldMergeAdjacentLines = false to upstream stops it from\n // re-normalizing markdown that normalizeMarkdown has already normalized.\n const sanitizedMarkdown = normalizeMarkdown(markdown, shouldMergeAdjacentLines)\n return $convertFromMarkdownStringUpstream(sanitizedMarkdown, transformers, node, false, false)\n}\n"],"mappings":"AAGA,SACEA,0BAAA,IAA8BC,kCAAkC;AAEhE;AAAAC,YAAY,QACP;AAEP,SAASC,iBAAiB,QAAQ;AAElC;;;;;;;;;;;;;AAaA,OAAO,SAASH,2BACdI,QAAgB,EAChBC,YAAA,GAAmCH,YAAY,EAC/CI,IAAkB,EAClBC,sBAAA,GAAyB,KAAK,EAC9BC,wBAAA,GAA2B,KAAK;EAEhC,IAAID,sBAAA,EAAwB;IAC1B,OAAON,kCAAA,CAAmCG,QAAA,EAAUC,YAAA,EAAcC,IAAA,EAAM;EAC1E;EAEA;EACA;EACA,MAAMG,iBAAA,GAAoBN,iBAAA,CAAkBC,QAAA,EAAUI,wBAAA;EACtD,OAAOP,kCAAA,CAAmCQ,iBAAA,EAAmBJ,YAAA,EAAcC,IAAA,EAAM,OAAO;AAC1F","ignoreList":[]}
@@ -1,18 +1,22 @@
1
1
  import { createHeadlessEditor } from '@lexical/headless';
2
2
  import { LinkNode } from '@lexical/link';
3
3
  import { ListItemNode, ListNode } from '@lexical/list';
4
+ import { $convertToMarkdownString } from '@lexical/markdown';
4
5
  import { HeadingNode, QuoteNode } from '@lexical/rich-text';
5
6
  import { $getRoot, $isElementNode, $isLineBreakNode } from 'lexical';
6
7
  import { describe, expect, it } from 'vitest';
7
- import { $convertFromMarkdownString, $convertToMarkdownString } from './@lexical-markdown.js';
8
+ import { $convertFromMarkdownString } from './convertFromMarkdownString.js';
8
9
  function createEditor() {
9
10
  return createHeadlessEditor({
10
11
  nodes: [HeadingNode, QuoteNode, ListNode, ListItemNode, LinkNode]
11
12
  });
12
13
  }
14
+ // Payload's editor imports markdown with shouldMergeAdjacentLines = true, so the
15
+ // specs exercise that path: hard line breaks must survive even when adjacent lines
16
+ // are merged, while soft wraps collapse to a single space.
13
17
  function importMarkdown(markdown) {
14
18
  const editor = createEditor();
15
- editor.update(() => $convertFromMarkdownString(markdown), {
19
+ editor.update(() => $convertFromMarkdownString(markdown, undefined, undefined, false, true), {
16
20
  discrete: true
17
21
  });
18
22
  let result = {
@@ -33,7 +37,7 @@ function importMarkdown(markdown) {
33
37
  }
34
38
  function roundTrip(markdown) {
35
39
  const editor = createEditor();
36
- editor.update(() => $convertFromMarkdownString(markdown), {
40
+ editor.update(() => $convertFromMarkdownString(markdown, undefined, undefined, false, true), {
37
41
  discrete: true
38
42
  });
39
43
  let output = '';
@@ -42,11 +46,6 @@ function roundTrip(markdown) {
42
46
  });
43
47
  return output;
44
48
  }
45
- // These tests guard the behavior that originally motivated dropping Payload's
46
- // vendored @lexical/markdown fork: hard line breaks must survive markdown
47
- // import (and round trip) even when adjacent lines are merged by default. The
48
- // fix now lives in the upstream package (lexical 0.45, facebook/lexical#8402);
49
- // these assert it still holds through Payload's wrapper.
50
49
  describe('markdown hard line break import', () => {
51
50
  it('should import a trailing-space hard break as a line break node with the marker stripped', () => {
52
51
  const {
@@ -86,4 +85,4 @@ describe('markdown hard line break round trip', () => {
86
85
  expect(roundTrip(md)).toBe(md);
87
86
  });
88
87
  });
89
- //# sourceMappingURL=@lexical-markdown.spec.js.map
88
+ //# sourceMappingURL=convertFromMarkdownString.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convertFromMarkdownString.spec.js","names":["createHeadlessEditor","LinkNode","ListItemNode","ListNode","$convertToMarkdownString","HeadingNode","QuoteNode","$getRoot","$isElementNode","$isLineBreakNode","describe","expect","it","$convertFromMarkdownString","createEditor","nodes","importMarkdown","markdown","editor","update","undefined","discrete","result","hasLineBreak","textContent","getEditorState","read","firstChild","getFirstChild","Error","getChildren","some","child","getTextContent","roundTrip","output","join","toBe","md"],"sources":["../../../../src/lexical/utils/markdown/convertFromMarkdownString.spec.ts"],"sourcesContent":["import { createHeadlessEditor } from '@lexical/headless'\nimport { LinkNode } from '@lexical/link'\nimport { ListItemNode, ListNode } from '@lexical/list'\nimport { $convertToMarkdownString } from '@lexical/markdown'\nimport { HeadingNode, QuoteNode } from '@lexical/rich-text'\nimport { $getRoot, $isElementNode, $isLineBreakNode } from 'lexical'\nimport { describe, expect, it } from 'vitest'\n\nimport { $convertFromMarkdownString } from './convertFromMarkdownString.js'\n\nfunction createEditor() {\n return createHeadlessEditor({\n nodes: [HeadingNode, QuoteNode, ListNode, ListItemNode, LinkNode],\n })\n}\n\n// Payload's editor imports markdown with shouldMergeAdjacentLines = true, so the\n// specs exercise that path: hard line breaks must survive even when adjacent lines\n// are merged, while soft wraps collapse to a single space.\nfunction importMarkdown(markdown: string): { hasLineBreak: boolean; textContent: string } {\n const editor = createEditor()\n editor.update(() => $convertFromMarkdownString(markdown, undefined, undefined, false, true), {\n discrete: true,\n })\n let result = { hasLineBreak: false, textContent: '' }\n editor.getEditorState().read(() => {\n const firstChild = $getRoot().getFirstChild()\n if (!$isElementNode(firstChild)) {\n throw new Error('Expected an element block')\n }\n result = {\n hasLineBreak: firstChild.getChildren().some((child) => $isLineBreakNode(child)),\n textContent: firstChild.getTextContent(),\n }\n })\n return result\n}\n\nfunction roundTrip(markdown: string): string {\n const editor = createEditor()\n editor.update(() => $convertFromMarkdownString(markdown, undefined, undefined, false, true), {\n discrete: true,\n })\n let output = ''\n editor.getEditorState().read(() => {\n output = $convertToMarkdownString()\n })\n return output\n}\n\ndescribe('markdown hard line break import', () => {\n it('should import a trailing-space hard break as a line break node with the marker stripped', () => {\n const { hasLineBreak, textContent } = importMarkdown(['foo ', 'bar'].join('\\n'))\n\n expect(hasLineBreak).toBe(true)\n expect(textContent).toBe('foo\\nbar')\n })\n\n it('should import a backslash hard break as a line break node with the marker stripped', () => {\n const { hasLineBreak, textContent } = importMarkdown('foo\\\\\\nbar')\n\n expect(hasLineBreak).toBe(true)\n expect(textContent).toBe('foo\\nbar')\n })\n})\n\ndescribe('markdown hard line break round trip', () => {\n it('should round trip a trailing-space hard break', () => {\n const md = ['foo ', 'bar'].join('\\n')\n expect(roundTrip(md)).toBe(md)\n })\n\n it('should round trip a backslash hard break', () => {\n const md = 'foo\\\\\\nbar'\n expect(roundTrip(md)).toBe(md)\n })\n\n it('should not introduce a hard break for a soft wrap', () => {\n expect(roundTrip(['foo', 'bar'].join('\\n'))).toBe('foo bar')\n })\n\n it('should round trip a hard break after formatted text', () => {\n const md = '**foo** \\nbar'\n expect(roundTrip(md)).toBe(md)\n })\n\n it('should round trip a hard break after a link', () => {\n const md = '[foo](https://payloadcms.com) \\nbar'\n expect(roundTrip(md)).toBe(md)\n })\n})\n"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,4 @@
1
1
  import type { ElementTransformer } from '@lexical/markdown';
2
2
  import type { ElementNode } from 'lexical';
3
- export declare const createBlockNode: (createNode: (match: Array<string>) => ElementNode) => ElementTransformer["replace"];
3
+ export declare const createBlockNode: (createNode: (match: Array<string>) => ElementNode) => ElementTransformer['replace'];
4
4
  //# sourceMappingURL=createBlockNode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createBlockNode.d.ts","sourceRoot":"","sources":["../../../../src/lexical/utils/markdown/createBlockNode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAE1C,eAAO,MAAM,eAAe,GAC1B,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,WAAW,KAChD,kBAAkB,CAAC,SAAS,CAS9B,CAAA"}
1
+ {"version":3,"file":"createBlockNode.d.ts","sourceRoot":"","sources":["../../../../src/lexical/utils/markdown/createBlockNode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAE1C,eAAO,MAAM,eAAe,eACd,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,WAAW,KAChD,kBAAkB,CAAC,SAAS,CAS9B,CAAA"}
@@ -1,15 +1,12 @@
1
1
  /**
2
- * Payload-specific markdown normalization.
2
+ * Payload-specific markdown normalization, run by `$convertFromMarkdownString`
3
+ * before delegating the import to `@lexical/markdown`. Handles nested code
4
+ * fences and preserves table-row whitespace.
3
5
  *
4
- * This is the one piece of Payload's former `@lexical/markdown` fork that could
5
- * not be replaced by the upstream package: upstream's `normalizeMarkdown` (not
6
- * publicly exported) does not handle nested code fences and trims trailing
7
- * whitespace from table rows, both of which Payload relies on for round
8
- * tripping MDX documents. The rest of the markdown machinery (import, export,
9
- * shortcuts and transformers) now comes from `@lexical/markdown` directly.
10
- *
11
- * `$convertFromMarkdownString` runs this before delegating the actual import to
12
- * the upstream package.
6
+ * TODO: Remove this file once https://github.com/facebook/lexical/pull/8734 is
7
+ * merged and we upgrade to a release that includes it. That PR fixes the nested
8
+ * code fence handling upstream, so `$convertFromMarkdownString` can call
9
+ * `@lexical/markdown` directly instead of pre-normalizing here.
13
10
  */
14
11
  /**
15
12
  * Represents a CommonMark hard line break marker: either a trailing backslash
@@ -1 +1 @@
1
- {"version":3,"file":"normalizeMarkdown.d.ts","sourceRoot":"","sources":["../../../../src/lexical/utils/markdown/normalizeMarkdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAqBH;;;;;GAKG;AACH,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAA;AAE1C;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,GAAG,IAAI,CAO/F;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,wBAAwB,EAAE,OAAO,GAAG,MAAM,CAgF1F"}
1
+ {"version":3,"file":"normalizeMarkdown.d.ts","sourceRoot":"","sources":["../../../../src/lexical/utils/markdown/normalizeMarkdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAoBH;;;;;GAKG;AACH,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAA;AAE1C;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,GAAG,IAAI,CAO/F;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,wBAAwB,EAAE,OAAO,GAAG,MAAM,CAgF1F"}
@@ -1,18 +1,14 @@
1
1
  /**
2
- * Payload-specific markdown normalization.
2
+ * Payload-specific markdown normalization, run by `$convertFromMarkdownString`
3
+ * before delegating the import to `@lexical/markdown`. Handles nested code
4
+ * fences and preserves table-row whitespace.
3
5
  *
4
- * This is the one piece of Payload's former `@lexical/markdown` fork that could
5
- * not be replaced by the upstream package: upstream's `normalizeMarkdown` (not
6
- * publicly exported) does not handle nested code fences and trims trailing
7
- * whitespace from table rows, both of which Payload relies on for round
8
- * tripping MDX documents. The rest of the markdown machinery (import, export,
9
- * shortcuts and transformers) now comes from `@lexical/markdown` directly.
10
- *
11
- * `$convertFromMarkdownString` runs this before delegating the actual import to
12
- * the upstream package.
13
- */ // These regexes are copied verbatim from `@lexical/markdown` so their matching
14
- // semantics stay identical. They are only used with `.test()` here, so their
15
- // capturing groups are unused in this module.
6
+ * TODO: Remove this file once https://github.com/facebook/lexical/pull/8734 is
7
+ * merged and we upgrade to a release that includes it. That PR fixes the nested
8
+ * code fence handling upstream, so `$convertFromMarkdownString` can call
9
+ * `@lexical/markdown` directly instead of pre-normalizing here.
10
+ */ // These regexes are only used with `.test()` here, so their capturing groups
11
+ // are unused in this module.
16
12
  /* eslint-disable regexp/no-unused-capturing-group */const EMPTY_OR_WHITESPACE_ONLY = /^[\t ]*$/;
17
13
  const ORDERED_LIST_REGEX = /^(\s*)(\d+)\.\s/;
18
14
  const UNORDERED_LIST_REGEX = /^(\s*)[-*+]\s/;