@ekz/lexical-react 0.40.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (470) hide show
  1. package/@ekz/lexicalExtensionComponent.dev.js +53 -0
  2. package/@ekz/lexicalExtensionComponent.dev.mjs +51 -0
  3. package/@ekz/lexicalExtensionComponent.js +11 -0
  4. package/@ekz/lexicalExtensionComponent.mjs +12 -0
  5. package/@ekz/lexicalExtensionComponent.node.mjs +10 -0
  6. package/@ekz/lexicalExtensionComponent.prod.js +9 -0
  7. package/@ekz/lexicalExtensionComponent.prod.mjs +9 -0
  8. package/@ekz/lexicalReactExtension.dev.js +187 -0
  9. package/@ekz/lexicalReactExtension.dev.mjs +184 -0
  10. package/@ekz/lexicalReactExtension.js +11 -0
  11. package/@ekz/lexicalReactExtension.mjs +13 -0
  12. package/@ekz/lexicalReactExtension.node.mjs +11 -0
  13. package/@ekz/lexicalReactExtension.prod.js +9 -0
  14. package/@ekz/lexicalReactExtension.prod.mjs +9 -0
  15. package/@ekz/lexicalReactPluginHostExtension.dev.js +189 -0
  16. package/@ekz/lexicalReactPluginHostExtension.dev.mjs +181 -0
  17. package/@ekz/lexicalReactPluginHostExtension.js +11 -0
  18. package/@ekz/lexicalReactPluginHostExtension.mjs +18 -0
  19. package/@ekz/lexicalReactPluginHostExtension.node.mjs +16 -0
  20. package/@ekz/lexicalReactPluginHostExtension.prod.js +9 -0
  21. package/@ekz/lexicalReactPluginHostExtension.prod.mjs +9 -0
  22. package/@ekz/lexicalReactProviderExtension.dev.js +33 -0
  23. package/@ekz/lexicalReactProviderExtension.dev.mjs +31 -0
  24. package/@ekz/lexicalReactProviderExtension.js +11 -0
  25. package/@ekz/lexicalReactProviderExtension.mjs +12 -0
  26. package/@ekz/lexicalReactProviderExtension.node.mjs +10 -0
  27. package/@ekz/lexicalReactProviderExtension.prod.js +9 -0
  28. package/@ekz/lexicalReactProviderExtension.prod.mjs +9 -0
  29. package/@ekz/lexicalTreeViewExtension.dev.js +57 -0
  30. package/@ekz/lexicalTreeViewExtension.dev.mjs +54 -0
  31. package/@ekz/lexicalTreeViewExtension.js +11 -0
  32. package/@ekz/lexicalTreeViewExtension.mjs +13 -0
  33. package/@ekz/lexicalTreeViewExtension.node.mjs +11 -0
  34. package/@ekz/lexicalTreeViewExtension.prod.js +9 -0
  35. package/@ekz/lexicalTreeViewExtension.prod.mjs +9 -0
  36. package/ExtensionComponent.d.ts +42 -0
  37. package/LICENSE +21 -0
  38. package/LexicalAutoEmbedPlugin.d.ts +39 -0
  39. package/LexicalAutoEmbedPlugin.dev.js +146 -0
  40. package/LexicalAutoEmbedPlugin.dev.mjs +141 -0
  41. package/LexicalAutoEmbedPlugin.js +11 -0
  42. package/LexicalAutoEmbedPlugin.js.flow +64 -0
  43. package/LexicalAutoEmbedPlugin.mjs +15 -0
  44. package/LexicalAutoEmbedPlugin.node.mjs +13 -0
  45. package/LexicalAutoEmbedPlugin.prod.js +9 -0
  46. package/LexicalAutoEmbedPlugin.prod.mjs +9 -0
  47. package/LexicalAutoFocusPlugin.d.ts +12 -0
  48. package/LexicalAutoFocusPlugin.dev.js +47 -0
  49. package/LexicalAutoFocusPlugin.dev.mjs +45 -0
  50. package/LexicalAutoFocusPlugin.js +11 -0
  51. package/LexicalAutoFocusPlugin.js.flow +14 -0
  52. package/LexicalAutoFocusPlugin.mjs +12 -0
  53. package/LexicalAutoFocusPlugin.node.mjs +10 -0
  54. package/LexicalAutoFocusPlugin.prod.js +9 -0
  55. package/LexicalAutoFocusPlugin.prod.mjs +9 -0
  56. package/LexicalAutoLinkPlugin.d.ts +14 -0
  57. package/LexicalAutoLinkPlugin.dev.js +54 -0
  58. package/LexicalAutoLinkPlugin.dev.mjs +52 -0
  59. package/LexicalAutoLinkPlugin.js +11 -0
  60. package/LexicalAutoLinkPlugin.js.flow +18 -0
  61. package/LexicalAutoLinkPlugin.mjs +13 -0
  62. package/LexicalAutoLinkPlugin.node.mjs +11 -0
  63. package/LexicalAutoLinkPlugin.prod.js +9 -0
  64. package/LexicalAutoLinkPlugin.prod.mjs +9 -0
  65. package/LexicalBlockWithAlignableContents.d.ts +21 -0
  66. package/LexicalBlockWithAlignableContents.dev.js +81 -0
  67. package/LexicalBlockWithAlignableContents.dev.mjs +79 -0
  68. package/LexicalBlockWithAlignableContents.js +11 -0
  69. package/LexicalBlockWithAlignableContents.js.flow +28 -0
  70. package/LexicalBlockWithAlignableContents.mjs +12 -0
  71. package/LexicalBlockWithAlignableContents.node.mjs +10 -0
  72. package/LexicalBlockWithAlignableContents.prod.js +9 -0
  73. package/LexicalBlockWithAlignableContents.prod.mjs +9 -0
  74. package/LexicalCharacterLimitPlugin.d.ts +15 -0
  75. package/LexicalCharacterLimitPlugin.dev.js +292 -0
  76. package/LexicalCharacterLimitPlugin.dev.mjs +290 -0
  77. package/LexicalCharacterLimitPlugin.js +11 -0
  78. package/LexicalCharacterLimitPlugin.js.flow +12 -0
  79. package/LexicalCharacterLimitPlugin.mjs +12 -0
  80. package/LexicalCharacterLimitPlugin.node.mjs +10 -0
  81. package/LexicalCharacterLimitPlugin.prod.js +9 -0
  82. package/LexicalCharacterLimitPlugin.prod.mjs +9 -0
  83. package/LexicalCheckListPlugin.d.ts +8 -0
  84. package/LexicalCheckListPlugin.dev.js +31 -0
  85. package/LexicalCheckListPlugin.dev.mjs +29 -0
  86. package/LexicalCheckListPlugin.js +11 -0
  87. package/LexicalCheckListPlugin.js.flow +10 -0
  88. package/LexicalCheckListPlugin.mjs +12 -0
  89. package/LexicalCheckListPlugin.node.mjs +10 -0
  90. package/LexicalCheckListPlugin.prod.js +9 -0
  91. package/LexicalCheckListPlugin.prod.mjs +9 -0
  92. package/LexicalClearEditorPlugin.d.ts +13 -0
  93. package/LexicalClearEditorPlugin.dev.js +55 -0
  94. package/LexicalClearEditorPlugin.dev.mjs +53 -0
  95. package/LexicalClearEditorPlugin.js +11 -0
  96. package/LexicalClearEditorPlugin.js.flow +14 -0
  97. package/LexicalClearEditorPlugin.mjs +12 -0
  98. package/LexicalClearEditorPlugin.node.mjs +10 -0
  99. package/LexicalClearEditorPlugin.prod.js +9 -0
  100. package/LexicalClearEditorPlugin.prod.mjs +9 -0
  101. package/LexicalClickableLinkPlugin.d.ts +11 -0
  102. package/LexicalClickableLinkPlugin.dev.js +38 -0
  103. package/LexicalClickableLinkPlugin.dev.mjs +36 -0
  104. package/LexicalClickableLinkPlugin.js +11 -0
  105. package/LexicalClickableLinkPlugin.js.flow +12 -0
  106. package/LexicalClickableLinkPlugin.mjs +12 -0
  107. package/LexicalClickableLinkPlugin.node.mjs +10 -0
  108. package/LexicalClickableLinkPlugin.prod.js +9 -0
  109. package/LexicalClickableLinkPlugin.prod.mjs +9 -0
  110. package/LexicalCollaborationContext.d.ts +19 -0
  111. package/LexicalCollaborationContext.dev.js +69 -0
  112. package/LexicalCollaborationContext.dev.mjs +65 -0
  113. package/LexicalCollaborationContext.js +11 -0
  114. package/LexicalCollaborationContext.js.flow +22 -0
  115. package/LexicalCollaborationContext.mjs +14 -0
  116. package/LexicalCollaborationContext.node.mjs +12 -0
  117. package/LexicalCollaborationContext.prod.js +9 -0
  118. package/LexicalCollaborationContext.prod.mjs +9 -0
  119. package/LexicalCollaborationPlugin.d.ts +39 -0
  120. package/LexicalCollaborationPlugin.dev.js +584 -0
  121. package/LexicalCollaborationPlugin.dev.mjs +569 -0
  122. package/LexicalCollaborationPlugin.js +11 -0
  123. package/LexicalCollaborationPlugin.js.flow +50 -0
  124. package/LexicalCollaborationPlugin.mjs +13 -0
  125. package/LexicalCollaborationPlugin.node.mjs +11 -0
  126. package/LexicalCollaborationPlugin.prod.js +9 -0
  127. package/LexicalCollaborationPlugin.prod.mjs +9 -0
  128. package/LexicalComposer.d.ts +25 -0
  129. package/LexicalComposer.dev.js +134 -0
  130. package/LexicalComposer.dev.mjs +132 -0
  131. package/LexicalComposer.js +11 -0
  132. package/LexicalComposer.js.flow +40 -0
  133. package/LexicalComposer.mjs +12 -0
  134. package/LexicalComposer.node.mjs +10 -0
  135. package/LexicalComposer.prod.js +9 -0
  136. package/LexicalComposer.prod.mjs +9 -0
  137. package/LexicalComposerContext.d.ts +18 -0
  138. package/LexicalComposerContext.dev.js +55 -0
  139. package/LexicalComposerContext.dev.mjs +51 -0
  140. package/LexicalComposerContext.js +11 -0
  141. package/LexicalComposerContext.js.flow +27 -0
  142. package/LexicalComposerContext.mjs +14 -0
  143. package/LexicalComposerContext.node.mjs +12 -0
  144. package/LexicalComposerContext.prod.js +9 -0
  145. package/LexicalComposerContext.prod.mjs +9 -0
  146. package/LexicalContentEditable.d.ts +26 -0
  147. package/LexicalContentEditable.dev.js +242 -0
  148. package/LexicalContentEditable.dev.mjs +239 -0
  149. package/LexicalContentEditable.js +11 -0
  150. package/LexicalContentEditable.js.flow +80 -0
  151. package/LexicalContentEditable.mjs +13 -0
  152. package/LexicalContentEditable.node.mjs +11 -0
  153. package/LexicalContentEditable.prod.js +9 -0
  154. package/LexicalContentEditable.prod.mjs +9 -0
  155. package/LexicalContextMenuPlugin.d.ts +36 -0
  156. package/LexicalContextMenuPlugin.dev.js +524 -0
  157. package/LexicalContextMenuPlugin.dev.mjs +509 -0
  158. package/LexicalContextMenuPlugin.js +11 -0
  159. package/LexicalContextMenuPlugin.js.flow +13 -0
  160. package/LexicalContextMenuPlugin.mjs +13 -0
  161. package/LexicalContextMenuPlugin.node.mjs +11 -0
  162. package/LexicalContextMenuPlugin.prod.js +9 -0
  163. package/LexicalContextMenuPlugin.prod.mjs +9 -0
  164. package/LexicalDecoratorBlockNode.d.ts +25 -0
  165. package/LexicalDecoratorBlockNode.dev.js +59 -0
  166. package/LexicalDecoratorBlockNode.dev.mjs +56 -0
  167. package/LexicalDecoratorBlockNode.js +11 -0
  168. package/LexicalDecoratorBlockNode.js.flow +35 -0
  169. package/LexicalDecoratorBlockNode.mjs +13 -0
  170. package/LexicalDecoratorBlockNode.node.mjs +11 -0
  171. package/LexicalDecoratorBlockNode.prod.js +9 -0
  172. package/LexicalDecoratorBlockNode.prod.mjs +9 -0
  173. package/LexicalDraggableBlockPlugin.d.ts +18 -0
  174. package/LexicalDraggableBlockPlugin.dev.js +655 -0
  175. package/LexicalDraggableBlockPlugin.dev.mjs +653 -0
  176. package/LexicalDraggableBlockPlugin.js +11 -0
  177. package/LexicalDraggableBlockPlugin.js.flow +24 -0
  178. package/LexicalDraggableBlockPlugin.mjs +12 -0
  179. package/LexicalDraggableBlockPlugin.node.mjs +10 -0
  180. package/LexicalDraggableBlockPlugin.prod.js +9 -0
  181. package/LexicalDraggableBlockPlugin.prod.mjs +9 -0
  182. package/LexicalEditorRefPlugin.d.ts +20 -0
  183. package/LexicalEditorRefPlugin.dev.js +58 -0
  184. package/LexicalEditorRefPlugin.dev.mjs +43 -0
  185. package/LexicalEditorRefPlugin.js +11 -0
  186. package/LexicalEditorRefPlugin.js.flow +19 -0
  187. package/LexicalEditorRefPlugin.mjs +12 -0
  188. package/LexicalEditorRefPlugin.node.mjs +10 -0
  189. package/LexicalEditorRefPlugin.prod.js +9 -0
  190. package/LexicalEditorRefPlugin.prod.mjs +9 -0
  191. package/LexicalErrorBoundary.d.ts +13 -0
  192. package/LexicalErrorBoundary.dev.js +40 -0
  193. package/LexicalErrorBoundary.dev.mjs +38 -0
  194. package/LexicalErrorBoundary.js +11 -0
  195. package/LexicalErrorBoundary.js.flow +17 -0
  196. package/LexicalErrorBoundary.mjs +12 -0
  197. package/LexicalErrorBoundary.node.mjs +10 -0
  198. package/LexicalErrorBoundary.prod.js +9 -0
  199. package/LexicalErrorBoundary.prod.mjs +9 -0
  200. package/LexicalExtensionComponent.js.flow +12 -0
  201. package/LexicalExtensionComposer.d.ts +69 -0
  202. package/LexicalExtensionComposer.dev.js +105 -0
  203. package/LexicalExtensionComposer.dev.mjs +103 -0
  204. package/LexicalExtensionComposer.js +11 -0
  205. package/LexicalExtensionComposer.js.flow +20 -0
  206. package/LexicalExtensionComposer.mjs +12 -0
  207. package/LexicalExtensionComposer.node.mjs +10 -0
  208. package/LexicalExtensionComposer.prod.js +9 -0
  209. package/LexicalExtensionComposer.prod.mjs +9 -0
  210. package/LexicalHashtagPlugin.d.ts +9 -0
  211. package/LexicalHashtagPlugin.dev.js +34 -0
  212. package/LexicalHashtagPlugin.dev.mjs +32 -0
  213. package/LexicalHashtagPlugin.js +11 -0
  214. package/LexicalHashtagPlugin.js.flow +10 -0
  215. package/LexicalHashtagPlugin.mjs +12 -0
  216. package/LexicalHashtagPlugin.node.mjs +10 -0
  217. package/LexicalHashtagPlugin.prod.js +9 -0
  218. package/LexicalHashtagPlugin.prod.mjs +9 -0
  219. package/LexicalHistoryPlugin.d.ts +14 -0
  220. package/LexicalHistoryPlugin.dev.js +48 -0
  221. package/LexicalHistoryPlugin.dev.mjs +46 -0
  222. package/LexicalHistoryPlugin.js +11 -0
  223. package/LexicalHistoryPlugin.js.flow +28 -0
  224. package/LexicalHistoryPlugin.mjs +13 -0
  225. package/LexicalHistoryPlugin.node.mjs +11 -0
  226. package/LexicalHistoryPlugin.prod.js +9 -0
  227. package/LexicalHistoryPlugin.prod.mjs +9 -0
  228. package/LexicalHorizontalRuleNode.d.ts +25 -0
  229. package/LexicalHorizontalRuleNode.dev.js +102 -0
  230. package/LexicalHorizontalRuleNode.dev.mjs +98 -0
  231. package/LexicalHorizontalRuleNode.js +11 -0
  232. package/LexicalHorizontalRuleNode.js.flow +27 -0
  233. package/LexicalHorizontalRuleNode.mjs +15 -0
  234. package/LexicalHorizontalRuleNode.node.mjs +13 -0
  235. package/LexicalHorizontalRuleNode.prod.js +9 -0
  236. package/LexicalHorizontalRuleNode.prod.mjs +9 -0
  237. package/LexicalHorizontalRulePlugin.d.ts +8 -0
  238. package/LexicalHorizontalRulePlugin.dev.js +44 -0
  239. package/LexicalHorizontalRulePlugin.dev.mjs +42 -0
  240. package/LexicalHorizontalRulePlugin.js +11 -0
  241. package/LexicalHorizontalRulePlugin.js.flow +12 -0
  242. package/LexicalHorizontalRulePlugin.mjs +12 -0
  243. package/LexicalHorizontalRulePlugin.node.mjs +10 -0
  244. package/LexicalHorizontalRulePlugin.prod.js +9 -0
  245. package/LexicalHorizontalRulePlugin.prod.mjs +9 -0
  246. package/LexicalLinkPlugin.d.ts +14 -0
  247. package/LexicalLinkPlugin.dev.js +43 -0
  248. package/LexicalLinkPlugin.dev.mjs +41 -0
  249. package/LexicalLinkPlugin.js +11 -0
  250. package/LexicalLinkPlugin.js.flow +21 -0
  251. package/LexicalLinkPlugin.mjs +12 -0
  252. package/LexicalLinkPlugin.node.mjs +10 -0
  253. package/LexicalLinkPlugin.prod.js +9 -0
  254. package/LexicalLinkPlugin.prod.mjs +9 -0
  255. package/LexicalListPlugin.d.ts +20 -0
  256. package/LexicalListPlugin.dev.js +55 -0
  257. package/LexicalListPlugin.dev.mjs +53 -0
  258. package/LexicalListPlugin.js +11 -0
  259. package/LexicalListPlugin.js.flow +15 -0
  260. package/LexicalListPlugin.mjs +12 -0
  261. package/LexicalListPlugin.node.mjs +10 -0
  262. package/LexicalListPlugin.prod.js +9 -0
  263. package/LexicalListPlugin.prod.mjs +9 -0
  264. package/LexicalMarkdownShortcutPlugin.d.ts +12 -0
  265. package/LexicalMarkdownShortcutPlugin.dev.js +55 -0
  266. package/LexicalMarkdownShortcutPlugin.dev.mjs +52 -0
  267. package/LexicalMarkdownShortcutPlugin.js +11 -0
  268. package/LexicalMarkdownShortcutPlugin.js.flow +16 -0
  269. package/LexicalMarkdownShortcutPlugin.mjs +13 -0
  270. package/LexicalMarkdownShortcutPlugin.node.mjs +11 -0
  271. package/LexicalMarkdownShortcutPlugin.prod.js +9 -0
  272. package/LexicalMarkdownShortcutPlugin.prod.mjs +9 -0
  273. package/LexicalNestedComposer.d.ts +57 -0
  274. package/LexicalNestedComposer.dev.js +161 -0
  275. package/LexicalNestedComposer.dev.mjs +159 -0
  276. package/LexicalNestedComposer.js +11 -0
  277. package/LexicalNestedComposer.js.flow +26 -0
  278. package/LexicalNestedComposer.mjs +12 -0
  279. package/LexicalNestedComposer.node.mjs +10 -0
  280. package/LexicalNestedComposer.prod.js +9 -0
  281. package/LexicalNestedComposer.prod.mjs +9 -0
  282. package/LexicalNodeContextMenuPlugin.d.ts +46 -0
  283. package/LexicalNodeContextMenuPlugin.dev.js +257 -0
  284. package/LexicalNodeContextMenuPlugin.dev.mjs +253 -0
  285. package/LexicalNodeContextMenuPlugin.js +11 -0
  286. package/LexicalNodeContextMenuPlugin.js.flow +12 -0
  287. package/LexicalNodeContextMenuPlugin.mjs +14 -0
  288. package/LexicalNodeContextMenuPlugin.node.mjs +12 -0
  289. package/LexicalNodeContextMenuPlugin.prod.js +9 -0
  290. package/LexicalNodeContextMenuPlugin.prod.mjs +9 -0
  291. package/LexicalNodeEventPlugin.d.ts +13 -0
  292. package/LexicalNodeEventPlugin.dev.js +61 -0
  293. package/LexicalNodeEventPlugin.dev.mjs +59 -0
  294. package/LexicalNodeEventPlugin.js +11 -0
  295. package/LexicalNodeEventPlugin.js.flow +20 -0
  296. package/LexicalNodeEventPlugin.mjs +12 -0
  297. package/LexicalNodeEventPlugin.node.mjs +10 -0
  298. package/LexicalNodeEventPlugin.prod.js +9 -0
  299. package/LexicalNodeEventPlugin.prod.mjs +9 -0
  300. package/LexicalNodeMenuPlugin.d.ts +24 -0
  301. package/LexicalNodeMenuPlugin.dev.js +527 -0
  302. package/LexicalNodeMenuPlugin.dev.mjs +524 -0
  303. package/LexicalNodeMenuPlugin.js +11 -0
  304. package/LexicalNodeMenuPlugin.js.flow +64 -0
  305. package/LexicalNodeMenuPlugin.mjs +13 -0
  306. package/LexicalNodeMenuPlugin.node.mjs +11 -0
  307. package/LexicalNodeMenuPlugin.prod.js +9 -0
  308. package/LexicalNodeMenuPlugin.prod.mjs +9 -0
  309. package/LexicalOnChangePlugin.d.ts +13 -0
  310. package/LexicalOnChangePlugin.dev.js +72 -0
  311. package/LexicalOnChangePlugin.dev.mjs +70 -0
  312. package/LexicalOnChangePlugin.js +11 -0
  313. package/LexicalOnChangePlugin.js.flow +16 -0
  314. package/LexicalOnChangePlugin.mjs +12 -0
  315. package/LexicalOnChangePlugin.node.mjs +10 -0
  316. package/LexicalOnChangePlugin.prod.js +9 -0
  317. package/LexicalOnChangePlugin.prod.mjs +9 -0
  318. package/LexicalPlainTextPlugin.d.ts +14 -0
  319. package/LexicalPlainTextPlugin.dev.js +235 -0
  320. package/LexicalPlainTextPlugin.dev.mjs +233 -0
  321. package/LexicalPlainTextPlugin.js +11 -0
  322. package/LexicalPlainTextPlugin.js.flow +29 -0
  323. package/LexicalPlainTextPlugin.mjs +12 -0
  324. package/LexicalPlainTextPlugin.node.mjs +10 -0
  325. package/LexicalPlainTextPlugin.prod.js +9 -0
  326. package/LexicalPlainTextPlugin.prod.mjs +9 -0
  327. package/LexicalReactExtension.js.flow +68 -0
  328. package/LexicalReactPluginHostExtension.js.flow +84 -0
  329. package/LexicalReactProviderExtension.js.flow +12 -0
  330. package/LexicalRichTextPlugin.d.ts +14 -0
  331. package/LexicalRichTextPlugin.dev.js +235 -0
  332. package/LexicalRichTextPlugin.dev.mjs +233 -0
  333. package/LexicalRichTextPlugin.js +11 -0
  334. package/LexicalRichTextPlugin.js.flow +29 -0
  335. package/LexicalRichTextPlugin.mjs +12 -0
  336. package/LexicalRichTextPlugin.node.mjs +10 -0
  337. package/LexicalRichTextPlugin.prod.js +9 -0
  338. package/LexicalRichTextPlugin.prod.mjs +9 -0
  339. package/LexicalSelectionAlwaysOnDisplay.d.ts +12 -0
  340. package/LexicalSelectionAlwaysOnDisplay.dev.js +33 -0
  341. package/LexicalSelectionAlwaysOnDisplay.dev.mjs +31 -0
  342. package/LexicalSelectionAlwaysOnDisplay.js +11 -0
  343. package/LexicalSelectionAlwaysOnDisplay.js.flow +15 -0
  344. package/LexicalSelectionAlwaysOnDisplay.mjs +12 -0
  345. package/LexicalSelectionAlwaysOnDisplay.node.mjs +10 -0
  346. package/LexicalSelectionAlwaysOnDisplay.prod.js +9 -0
  347. package/LexicalSelectionAlwaysOnDisplay.prod.mjs +9 -0
  348. package/LexicalTabIndentationPlugin.d.ts +17 -0
  349. package/LexicalTabIndentationPlugin.dev.js +40 -0
  350. package/LexicalTabIndentationPlugin.dev.mjs +38 -0
  351. package/LexicalTabIndentationPlugin.js +11 -0
  352. package/LexicalTabIndentationPlugin.js.flow +21 -0
  353. package/LexicalTabIndentationPlugin.mjs +13 -0
  354. package/LexicalTabIndentationPlugin.node.mjs +11 -0
  355. package/LexicalTabIndentationPlugin.prod.js +9 -0
  356. package/LexicalTabIndentationPlugin.prod.mjs +9 -0
  357. package/LexicalTableOfContentsPlugin.d.ts +20 -0
  358. package/LexicalTableOfContentsPlugin.dev.js +209 -0
  359. package/LexicalTableOfContentsPlugin.dev.mjs +207 -0
  360. package/LexicalTableOfContentsPlugin.js +11 -0
  361. package/LexicalTableOfContentsPlugin.js.flow +18 -0
  362. package/LexicalTableOfContentsPlugin.mjs +12 -0
  363. package/LexicalTableOfContentsPlugin.node.mjs +10 -0
  364. package/LexicalTableOfContentsPlugin.prod.js +9 -0
  365. package/LexicalTableOfContentsPlugin.prod.mjs +9 -0
  366. package/LexicalTablePlugin.d.ts +46 -0
  367. package/LexicalTablePlugin.dev.js +81 -0
  368. package/LexicalTablePlugin.dev.mjs +79 -0
  369. package/LexicalTablePlugin.js +11 -0
  370. package/LexicalTablePlugin.js.flow +15 -0
  371. package/LexicalTablePlugin.mjs +12 -0
  372. package/LexicalTablePlugin.node.mjs +10 -0
  373. package/LexicalTablePlugin.prod.js +9 -0
  374. package/LexicalTablePlugin.prod.mjs +9 -0
  375. package/LexicalTreeView.d.ts +37 -0
  376. package/LexicalTreeView.dev.js +105 -0
  377. package/LexicalTreeView.dev.mjs +91 -0
  378. package/LexicalTreeView.js +11 -0
  379. package/LexicalTreeView.js.flow +21 -0
  380. package/LexicalTreeView.mjs +12 -0
  381. package/LexicalTreeView.node.mjs +10 -0
  382. package/LexicalTreeView.prod.js +9 -0
  383. package/LexicalTreeView.prod.mjs +9 -0
  384. package/LexicalTreeViewExtension.js.flow +12 -0
  385. package/LexicalTypeaheadMenuPlugin.d.ts +40 -0
  386. package/LexicalTypeaheadMenuPlugin.dev.js +654 -0
  387. package/LexicalTypeaheadMenuPlugin.dev.mjs +646 -0
  388. package/LexicalTypeaheadMenuPlugin.js +11 -0
  389. package/LexicalTypeaheadMenuPlugin.js.flow +83 -0
  390. package/LexicalTypeaheadMenuPlugin.mjs +18 -0
  391. package/LexicalTypeaheadMenuPlugin.node.mjs +16 -0
  392. package/LexicalTypeaheadMenuPlugin.prod.js +9 -0
  393. package/LexicalTypeaheadMenuPlugin.prod.mjs +9 -0
  394. package/README.md +90 -0
  395. package/ReactExtension.d.ts +41 -0
  396. package/ReactPluginHostExtension.d.ts +56 -0
  397. package/ReactProviderExtension.d.ts +9 -0
  398. package/TreeViewExtension.d.ts +18 -0
  399. package/package.json +1549 -0
  400. package/shared/LegacyDecorators.d.ts +23 -0
  401. package/shared/LexicalContentEditableElement.d.ts +43 -0
  402. package/shared/LexicalMenu.d.ts +52 -0
  403. package/shared/buildEditorComponent.d.ts +11 -0
  404. package/shared/mergeRefs.d.ts +9 -0
  405. package/shared/point.d.ts +21 -0
  406. package/shared/rect.d.ts +45 -0
  407. package/shared/types.d.ts +89 -0
  408. package/shared/useCanShowPlaceholder.d.ts +9 -0
  409. package/shared/useCharacterLimit.d.ts +16 -0
  410. package/shared/useDecorators.d.ts +17 -0
  411. package/shared/useHistory.d.ts +10 -0
  412. package/shared/useList.d.ts +9 -0
  413. package/shared/usePlainTextSetup.d.ts +9 -0
  414. package/shared/useReactDecorators.d.ts +12 -0
  415. package/shared/useRichTextSetup.d.ts +9 -0
  416. package/shared/useYjsCollaboration.d.ts +25 -0
  417. package/useExtensionComponent.d.ts +10 -0
  418. package/useLexicalEditable.d.ts +16 -0
  419. package/useLexicalEditable.dev.js +102 -0
  420. package/useLexicalEditable.dev.mjs +100 -0
  421. package/useLexicalEditable.js +11 -0
  422. package/useLexicalEditable.js.flow +12 -0
  423. package/useLexicalEditable.mjs +12 -0
  424. package/useLexicalEditable.node.mjs +10 -0
  425. package/useLexicalEditable.prod.js +9 -0
  426. package/useLexicalEditable.prod.mjs +9 -0
  427. package/useLexicalExtensionComponent.dev.js +37 -0
  428. package/useLexicalExtensionComponent.dev.mjs +34 -0
  429. package/useLexicalExtensionComponent.js +11 -0
  430. package/useLexicalExtensionComponent.js.flow +12 -0
  431. package/useLexicalExtensionComponent.mjs +13 -0
  432. package/useLexicalExtensionComponent.node.mjs +11 -0
  433. package/useLexicalExtensionComponent.prod.js +9 -0
  434. package/useLexicalExtensionComponent.prod.mjs +9 -0
  435. package/useLexicalIsTextContentEmpty.d.ts +9 -0
  436. package/useLexicalIsTextContentEmpty.dev.js +60 -0
  437. package/useLexicalIsTextContentEmpty.dev.mjs +58 -0
  438. package/useLexicalIsTextContentEmpty.js +11 -0
  439. package/useLexicalIsTextContentEmpty.js.flow +15 -0
  440. package/useLexicalIsTextContentEmpty.mjs +12 -0
  441. package/useLexicalIsTextContentEmpty.node.mjs +10 -0
  442. package/useLexicalIsTextContentEmpty.prod.js +9 -0
  443. package/useLexicalIsTextContentEmpty.prod.mjs +9 -0
  444. package/useLexicalNodeSelection.d.ts +24 -0
  445. package/useLexicalNodeSelection.dev.js +102 -0
  446. package/useLexicalNodeSelection.dev.mjs +100 -0
  447. package/useLexicalNodeSelection.js +11 -0
  448. package/useLexicalNodeSelection.js.flow +14 -0
  449. package/useLexicalNodeSelection.mjs +12 -0
  450. package/useLexicalNodeSelection.node.mjs +10 -0
  451. package/useLexicalNodeSelection.prod.js +9 -0
  452. package/useLexicalNodeSelection.prod.mjs +9 -0
  453. package/useLexicalSubscription.d.ts +17 -0
  454. package/useLexicalSubscription.dev.js +73 -0
  455. package/useLexicalSubscription.dev.mjs +71 -0
  456. package/useLexicalSubscription.js +11 -0
  457. package/useLexicalSubscription.js.flow +19 -0
  458. package/useLexicalSubscription.mjs +12 -0
  459. package/useLexicalSubscription.node.mjs +10 -0
  460. package/useLexicalSubscription.prod.js +9 -0
  461. package/useLexicalSubscription.prod.mjs +9 -0
  462. package/useLexicalTextEntity.d.ts +10 -0
  463. package/useLexicalTextEntity.dev.js +31 -0
  464. package/useLexicalTextEntity.dev.mjs +29 -0
  465. package/useLexicalTextEntity.js +11 -0
  466. package/useLexicalTextEntity.js.flow +18 -0
  467. package/useLexicalTextEntity.mjs +12 -0
  468. package/useLexicalTextEntity.node.mjs +10 -0
  469. package/useLexicalTextEntity.prod.js +9 -0
  470. package/useLexicalTextEntity.prod.mjs +9 -0
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+
9
+ const mod = await (process.env.NODE_ENV !== 'production' ? import('./LexicalSelectionAlwaysOnDisplay.dev.mjs') : import('./LexicalSelectionAlwaysOnDisplay.prod.mjs'));
10
+ export const SelectionAlwaysOnDisplay = mod.SelectionAlwaysOnDisplay;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+
9
+ "use strict";var e=require("@ekz/lexical-react/LexicalComposerContext"),t=require("@ekz/lexical-utils"),i=require("react");exports.SelectionAlwaysOnDisplay=function({onReposition:l}){const[r]=e.useLexicalComposerContext();return i.useEffect(()=>t.selectionAlwaysOnDisplay(r,l),[r,l]),null};
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+
9
+ import{useLexicalComposerContext as o}from"@ekz/lexical-react/LexicalComposerContext";import{selectionAlwaysOnDisplay as t}from"@ekz/lexical-utils";import{useEffect as e}from"react";function r({onReposition:r}){const[i]=o();return e(()=>t(i,r),[i,r]),null}export{r as SelectionAlwaysOnDisplay};
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+ import { registerTabIndentation } from '@ekz/lexical-extension';
9
+ export { registerTabIndentation };
10
+ /**
11
+ * This plugin adds the ability to indent content using the tab key. Generally, we don't
12
+ * recommend using this plugin as it could negatively affect accessibility for keyboard
13
+ * users, causing focus to become trapped within the editor.
14
+ */
15
+ export declare function TabIndentationPlugin({ maxIndent }: {
16
+ maxIndent?: number;
17
+ }): null;
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+
9
+ 'use strict';
10
+
11
+ var lexicalExtension = require('@ekz/lexical-extension');
12
+ var LexicalComposerContext = require('@ekz/lexical-react/LexicalComposerContext');
13
+ var react = require('react');
14
+
15
+ /**
16
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
17
+ *
18
+ * This source code is licensed under the MIT license found in the
19
+ * LICENSE file in the root directory of this source tree.
20
+ *
21
+ */
22
+
23
+
24
+ /**
25
+ * This plugin adds the ability to indent content using the tab key. Generally, we don't
26
+ * recommend using this plugin as it could negatively affect accessibility for keyboard
27
+ * users, causing focus to become trapped within the editor.
28
+ */
29
+ function TabIndentationPlugin({
30
+ maxIndent
31
+ }) {
32
+ const [editor] = LexicalComposerContext.useLexicalComposerContext();
33
+ react.useEffect(() => {
34
+ return lexicalExtension.registerTabIndentation(editor, maxIndent);
35
+ }, [editor, maxIndent]);
36
+ return null;
37
+ }
38
+
39
+ exports.registerTabIndentation = lexicalExtension.registerTabIndentation;
40
+ exports.TabIndentationPlugin = TabIndentationPlugin;
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+
9
+ import { registerTabIndentation } from '@ekz/lexical-extension';
10
+ export { registerTabIndentation } from '@ekz/lexical-extension';
11
+ import { useLexicalComposerContext } from '@ekz/lexical-react/LexicalComposerContext';
12
+ import { useEffect } from 'react';
13
+
14
+ /**
15
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
16
+ *
17
+ * This source code is licensed under the MIT license found in the
18
+ * LICENSE file in the root directory of this source tree.
19
+ *
20
+ */
21
+
22
+
23
+ /**
24
+ * This plugin adds the ability to indent content using the tab key. Generally, we don't
25
+ * recommend using this plugin as it could negatively affect accessibility for keyboard
26
+ * users, causing focus to become trapped within the editor.
27
+ */
28
+ function TabIndentationPlugin({
29
+ maxIndent
30
+ }) {
31
+ const [editor] = useLexicalComposerContext();
32
+ useEffect(() => {
33
+ return registerTabIndentation(editor, maxIndent);
34
+ }, [editor, maxIndent]);
35
+ return null;
36
+ }
37
+
38
+ export { TabIndentationPlugin };
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+
9
+ 'use strict'
10
+ const LexicalTabIndentationPlugin = process.env.NODE_ENV !== 'production' ? require('./LexicalTabIndentationPlugin.dev.js') : require('./LexicalTabIndentationPlugin.prod.js');
11
+ module.exports = LexicalTabIndentationPlugin;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ * @flow strict
8
+ */
9
+
10
+ import type {LexicalEditor} from '@ekz/lexical';
11
+
12
+ declare export function registerTabIndentation(
13
+ editor: LexicalEditor,
14
+ maxIndent?: number,
15
+ ): () => void;
16
+
17
+ type Props = $ReadOnly<{
18
+ maxIndent?: number,
19
+ }>;
20
+
21
+ declare export function TabIndentationPlugin(props: Props): null;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+
9
+ import * as modDev from './LexicalTabIndentationPlugin.dev.mjs';
10
+ import * as modProd from './LexicalTabIndentationPlugin.prod.mjs';
11
+ const mod = process.env.NODE_ENV !== 'production' ? modDev : modProd;
12
+ export const TabIndentationPlugin = mod.TabIndentationPlugin;
13
+ export const registerTabIndentation = mod.registerTabIndentation;
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+
9
+ const mod = await (process.env.NODE_ENV !== 'production' ? import('./LexicalTabIndentationPlugin.dev.mjs') : import('./LexicalTabIndentationPlugin.prod.mjs'));
10
+ export const TabIndentationPlugin = mod.TabIndentationPlugin;
11
+ export const registerTabIndentation = mod.registerTabIndentation;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+
9
+ "use strict";var e=require("@ekz/lexical-extension"),t=require("@ekz/lexical-react/LexicalComposerContext"),n=require("react");exports.registerTabIndentation=e.registerTabIndentation,exports.TabIndentationPlugin=function({maxIndent:r}){const[i]=t.useLexicalComposerContext();return n.useEffect(()=>e.registerTabIndentation(i,r),[i,r]),null};
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+
9
+ import{registerTabIndentation as e}from"@ekz/lexical-extension";export{registerTabIndentation}from"@ekz/lexical-extension";import{useLexicalComposerContext as t}from"@ekz/lexical-react/LexicalComposerContext";import{useEffect as o}from"react";function r({maxIndent:r}){const[n]=t();return o(()=>e(n,r),[n,r]),null}export{r as TabIndentationPlugin};
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+ import type { JSX } from 'react';
9
+ import { HeadingTagType } from '@ekz/lexical-rich-text';
10
+ import { LexicalEditor, NodeKey } from '@ekz/lexical';
11
+ export type TableOfContentsEntry = [
12
+ key: NodeKey,
13
+ text: string,
14
+ tag: HeadingTagType
15
+ ];
16
+ type Props = {
17
+ children: (values: Array<TableOfContentsEntry>, editor: LexicalEditor) => JSX.Element;
18
+ };
19
+ export declare function TableOfContentsPlugin({ children }: Props): JSX.Element;
20
+ export {};
@@ -0,0 +1,209 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+
9
+ 'use strict';
10
+
11
+ var LexicalComposerContext = require('@ekz/lexical-react/LexicalComposerContext');
12
+ var lexicalRichText = require('@ekz/lexical-rich-text');
13
+ var lexicalUtils = require('@ekz/lexical-utils');
14
+ var lexical = require('@ekz/lexical');
15
+ var react = require('react');
16
+
17
+ /**
18
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
19
+ *
20
+ * This source code is licensed under the MIT license found in the
21
+ * LICENSE file in the root directory of this source tree.
22
+ *
23
+ */
24
+
25
+ function toEntry(heading) {
26
+ return [heading.getKey(), heading.getTextContent(), heading.getTag()];
27
+ }
28
+ function $insertHeadingIntoTableOfContents(prevHeading, newHeading, currentTableOfContents) {
29
+ if (newHeading === null) {
30
+ return currentTableOfContents;
31
+ }
32
+ const newEntry = toEntry(newHeading);
33
+ let newTableOfContents = [];
34
+ if (prevHeading === null) {
35
+ // check if key already exists
36
+ if (currentTableOfContents.length > 0 && currentTableOfContents[0][0] === newHeading.__key) {
37
+ return currentTableOfContents;
38
+ }
39
+ newTableOfContents = [newEntry, ...currentTableOfContents];
40
+ } else {
41
+ for (let i = 0; i < currentTableOfContents.length; i++) {
42
+ const key = currentTableOfContents[i][0];
43
+ newTableOfContents.push(currentTableOfContents[i]);
44
+ if (key === prevHeading.getKey() && key !== newHeading.getKey()) {
45
+ // check if key already exists
46
+ if (i + 1 < currentTableOfContents.length && currentTableOfContents[i + 1][0] === newHeading.__key) {
47
+ return currentTableOfContents;
48
+ }
49
+ newTableOfContents.push(newEntry);
50
+ }
51
+ }
52
+ }
53
+ return newTableOfContents;
54
+ }
55
+ function $deleteHeadingFromTableOfContents(key, currentTableOfContents) {
56
+ const newTableOfContents = [];
57
+ for (const heading of currentTableOfContents) {
58
+ if (heading[0] !== key) {
59
+ newTableOfContents.push(heading);
60
+ }
61
+ }
62
+ return newTableOfContents;
63
+ }
64
+ function $updateHeadingInTableOfContents(heading, currentTableOfContents) {
65
+ const newTableOfContents = [];
66
+ for (const oldHeading of currentTableOfContents) {
67
+ if (oldHeading[0] === heading.getKey()) {
68
+ newTableOfContents.push(toEntry(heading));
69
+ } else {
70
+ newTableOfContents.push(oldHeading);
71
+ }
72
+ }
73
+ return newTableOfContents;
74
+ }
75
+
76
+ /**
77
+ * Returns the updated table of contents, placing the given `heading` before the given `prevHeading`. If `prevHeading`
78
+ * is undefined, `heading` is placed at the start of table of contents
79
+ */
80
+ function $updateHeadingPosition(prevHeading, heading, currentTableOfContents) {
81
+ const newTableOfContents = [];
82
+ const newEntry = toEntry(heading);
83
+ if (!prevHeading) {
84
+ newTableOfContents.push(newEntry);
85
+ }
86
+ for (const oldHeading of currentTableOfContents) {
87
+ if (oldHeading[0] === heading.getKey()) {
88
+ continue;
89
+ }
90
+ newTableOfContents.push(oldHeading);
91
+ if (prevHeading && oldHeading[0] === prevHeading.getKey()) {
92
+ newTableOfContents.push(newEntry);
93
+ }
94
+ }
95
+ return newTableOfContents;
96
+ }
97
+ function $getPreviousHeading(node) {
98
+ let prevHeading = lexicalUtils.$getNextRightPreorderNode(node);
99
+ while (prevHeading !== null && !lexicalRichText.$isHeadingNode(prevHeading)) {
100
+ prevHeading = lexicalUtils.$getNextRightPreorderNode(prevHeading);
101
+ }
102
+ return prevHeading;
103
+ }
104
+ function TableOfContentsPlugin({
105
+ children
106
+ }) {
107
+ const [tableOfContents, setTableOfContents] = react.useState([]);
108
+ const [editor] = LexicalComposerContext.useLexicalComposerContext();
109
+ react.useEffect(() => {
110
+ // Set table of contents initial state
111
+ let currentTableOfContents = [];
112
+ editor.getEditorState().read(() => {
113
+ const updateCurrentTableOfContents = node => {
114
+ for (const child of node.getChildren()) {
115
+ if (lexicalRichText.$isHeadingNode(child)) {
116
+ currentTableOfContents.push([child.getKey(), child.getTextContent(), child.getTag()]);
117
+ } else if (lexical.$isElementNode(child)) {
118
+ updateCurrentTableOfContents(child);
119
+ }
120
+ }
121
+ };
122
+ updateCurrentTableOfContents(lexical.$getRoot());
123
+ setTableOfContents(currentTableOfContents);
124
+ });
125
+ const removeRootUpdateListener = editor.registerUpdateListener(({
126
+ editorState,
127
+ dirtyElements
128
+ }) => {
129
+ editorState.read(() => {
130
+ const updateChildHeadings = node => {
131
+ for (const child of node.getChildren()) {
132
+ if (lexicalRichText.$isHeadingNode(child)) {
133
+ const prevHeading = $getPreviousHeading(child);
134
+ currentTableOfContents = $updateHeadingPosition(prevHeading, child, currentTableOfContents);
135
+ setTableOfContents(currentTableOfContents);
136
+ } else if (lexical.$isElementNode(child)) {
137
+ updateChildHeadings(child);
138
+ }
139
+ }
140
+ };
141
+
142
+ // If a node is changes, all child heading positions need to be updated
143
+ lexical.$getRoot().getChildren().forEach(node => {
144
+ if (lexical.$isElementNode(node) && dirtyElements.get(node.__key)) {
145
+ updateChildHeadings(node);
146
+ }
147
+ });
148
+ });
149
+ });
150
+
151
+ // Listen to updates to heading mutations and update state
152
+ const removeHeaderMutationListener = editor.registerMutationListener(lexicalRichText.HeadingNode, mutatedNodes => {
153
+ editor.getEditorState().read(() => {
154
+ for (const [nodeKey, mutation] of mutatedNodes) {
155
+ if (mutation === 'created') {
156
+ const newHeading = lexical.$getNodeByKey(nodeKey);
157
+ if (newHeading !== null) {
158
+ const prevHeading = $getPreviousHeading(newHeading);
159
+ currentTableOfContents = $insertHeadingIntoTableOfContents(prevHeading, newHeading, currentTableOfContents);
160
+ }
161
+ } else if (mutation === 'destroyed') {
162
+ currentTableOfContents = $deleteHeadingFromTableOfContents(nodeKey, currentTableOfContents);
163
+ } else if (mutation === 'updated') {
164
+ const newHeading = lexical.$getNodeByKey(nodeKey);
165
+ if (newHeading !== null) {
166
+ const prevHeading = $getPreviousHeading(newHeading);
167
+ currentTableOfContents = $updateHeadingPosition(prevHeading, newHeading, currentTableOfContents);
168
+ }
169
+ }
170
+ }
171
+ setTableOfContents(currentTableOfContents);
172
+ });
173
+ },
174
+ // Initialization is handled separately
175
+ {
176
+ skipInitialization: true
177
+ });
178
+
179
+ // Listen to text node mutation updates
180
+ const removeTextNodeMutationListener = editor.registerMutationListener(lexical.TextNode, mutatedNodes => {
181
+ editor.getEditorState().read(() => {
182
+ for (const [nodeKey, mutation] of mutatedNodes) {
183
+ if (mutation === 'updated') {
184
+ const currNode = lexical.$getNodeByKey(nodeKey);
185
+ if (currNode !== null) {
186
+ const parentNode = currNode.getParentOrThrow();
187
+ if (lexicalRichText.$isHeadingNode(parentNode)) {
188
+ currentTableOfContents = $updateHeadingInTableOfContents(parentNode, currentTableOfContents);
189
+ setTableOfContents(currentTableOfContents);
190
+ }
191
+ }
192
+ }
193
+ }
194
+ });
195
+ },
196
+ // Initialization is handled separately
197
+ {
198
+ skipInitialization: true
199
+ });
200
+ return () => {
201
+ removeHeaderMutationListener();
202
+ removeTextNodeMutationListener();
203
+ removeRootUpdateListener();
204
+ };
205
+ }, [editor]);
206
+ return children(tableOfContents, editor);
207
+ }
208
+
209
+ exports.TableOfContentsPlugin = TableOfContentsPlugin;
@@ -0,0 +1,207 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+
9
+ import { useLexicalComposerContext } from '@ekz/lexical-react/LexicalComposerContext';
10
+ import { HeadingNode, $isHeadingNode } from '@ekz/lexical-rich-text';
11
+ import { $getNextRightPreorderNode } from '@ekz/lexical-utils';
12
+ import { $getRoot, $isElementNode, $getNodeByKey, TextNode } from '@ekz/lexical';
13
+ import { useState, useEffect } from 'react';
14
+
15
+ /**
16
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
17
+ *
18
+ * This source code is licensed under the MIT license found in the
19
+ * LICENSE file in the root directory of this source tree.
20
+ *
21
+ */
22
+
23
+ function toEntry(heading) {
24
+ return [heading.getKey(), heading.getTextContent(), heading.getTag()];
25
+ }
26
+ function $insertHeadingIntoTableOfContents(prevHeading, newHeading, currentTableOfContents) {
27
+ if (newHeading === null) {
28
+ return currentTableOfContents;
29
+ }
30
+ const newEntry = toEntry(newHeading);
31
+ let newTableOfContents = [];
32
+ if (prevHeading === null) {
33
+ // check if key already exists
34
+ if (currentTableOfContents.length > 0 && currentTableOfContents[0][0] === newHeading.__key) {
35
+ return currentTableOfContents;
36
+ }
37
+ newTableOfContents = [newEntry, ...currentTableOfContents];
38
+ } else {
39
+ for (let i = 0; i < currentTableOfContents.length; i++) {
40
+ const key = currentTableOfContents[i][0];
41
+ newTableOfContents.push(currentTableOfContents[i]);
42
+ if (key === prevHeading.getKey() && key !== newHeading.getKey()) {
43
+ // check if key already exists
44
+ if (i + 1 < currentTableOfContents.length && currentTableOfContents[i + 1][0] === newHeading.__key) {
45
+ return currentTableOfContents;
46
+ }
47
+ newTableOfContents.push(newEntry);
48
+ }
49
+ }
50
+ }
51
+ return newTableOfContents;
52
+ }
53
+ function $deleteHeadingFromTableOfContents(key, currentTableOfContents) {
54
+ const newTableOfContents = [];
55
+ for (const heading of currentTableOfContents) {
56
+ if (heading[0] !== key) {
57
+ newTableOfContents.push(heading);
58
+ }
59
+ }
60
+ return newTableOfContents;
61
+ }
62
+ function $updateHeadingInTableOfContents(heading, currentTableOfContents) {
63
+ const newTableOfContents = [];
64
+ for (const oldHeading of currentTableOfContents) {
65
+ if (oldHeading[0] === heading.getKey()) {
66
+ newTableOfContents.push(toEntry(heading));
67
+ } else {
68
+ newTableOfContents.push(oldHeading);
69
+ }
70
+ }
71
+ return newTableOfContents;
72
+ }
73
+
74
+ /**
75
+ * Returns the updated table of contents, placing the given `heading` before the given `prevHeading`. If `prevHeading`
76
+ * is undefined, `heading` is placed at the start of table of contents
77
+ */
78
+ function $updateHeadingPosition(prevHeading, heading, currentTableOfContents) {
79
+ const newTableOfContents = [];
80
+ const newEntry = toEntry(heading);
81
+ if (!prevHeading) {
82
+ newTableOfContents.push(newEntry);
83
+ }
84
+ for (const oldHeading of currentTableOfContents) {
85
+ if (oldHeading[0] === heading.getKey()) {
86
+ continue;
87
+ }
88
+ newTableOfContents.push(oldHeading);
89
+ if (prevHeading && oldHeading[0] === prevHeading.getKey()) {
90
+ newTableOfContents.push(newEntry);
91
+ }
92
+ }
93
+ return newTableOfContents;
94
+ }
95
+ function $getPreviousHeading(node) {
96
+ let prevHeading = $getNextRightPreorderNode(node);
97
+ while (prevHeading !== null && !$isHeadingNode(prevHeading)) {
98
+ prevHeading = $getNextRightPreorderNode(prevHeading);
99
+ }
100
+ return prevHeading;
101
+ }
102
+ function TableOfContentsPlugin({
103
+ children
104
+ }) {
105
+ const [tableOfContents, setTableOfContents] = useState([]);
106
+ const [editor] = useLexicalComposerContext();
107
+ useEffect(() => {
108
+ // Set table of contents initial state
109
+ let currentTableOfContents = [];
110
+ editor.getEditorState().read(() => {
111
+ const updateCurrentTableOfContents = node => {
112
+ for (const child of node.getChildren()) {
113
+ if ($isHeadingNode(child)) {
114
+ currentTableOfContents.push([child.getKey(), child.getTextContent(), child.getTag()]);
115
+ } else if ($isElementNode(child)) {
116
+ updateCurrentTableOfContents(child);
117
+ }
118
+ }
119
+ };
120
+ updateCurrentTableOfContents($getRoot());
121
+ setTableOfContents(currentTableOfContents);
122
+ });
123
+ const removeRootUpdateListener = editor.registerUpdateListener(({
124
+ editorState,
125
+ dirtyElements
126
+ }) => {
127
+ editorState.read(() => {
128
+ const updateChildHeadings = node => {
129
+ for (const child of node.getChildren()) {
130
+ if ($isHeadingNode(child)) {
131
+ const prevHeading = $getPreviousHeading(child);
132
+ currentTableOfContents = $updateHeadingPosition(prevHeading, child, currentTableOfContents);
133
+ setTableOfContents(currentTableOfContents);
134
+ } else if ($isElementNode(child)) {
135
+ updateChildHeadings(child);
136
+ }
137
+ }
138
+ };
139
+
140
+ // If a node is changes, all child heading positions need to be updated
141
+ $getRoot().getChildren().forEach(node => {
142
+ if ($isElementNode(node) && dirtyElements.get(node.__key)) {
143
+ updateChildHeadings(node);
144
+ }
145
+ });
146
+ });
147
+ });
148
+
149
+ // Listen to updates to heading mutations and update state
150
+ const removeHeaderMutationListener = editor.registerMutationListener(HeadingNode, mutatedNodes => {
151
+ editor.getEditorState().read(() => {
152
+ for (const [nodeKey, mutation] of mutatedNodes) {
153
+ if (mutation === 'created') {
154
+ const newHeading = $getNodeByKey(nodeKey);
155
+ if (newHeading !== null) {
156
+ const prevHeading = $getPreviousHeading(newHeading);
157
+ currentTableOfContents = $insertHeadingIntoTableOfContents(prevHeading, newHeading, currentTableOfContents);
158
+ }
159
+ } else if (mutation === 'destroyed') {
160
+ currentTableOfContents = $deleteHeadingFromTableOfContents(nodeKey, currentTableOfContents);
161
+ } else if (mutation === 'updated') {
162
+ const newHeading = $getNodeByKey(nodeKey);
163
+ if (newHeading !== null) {
164
+ const prevHeading = $getPreviousHeading(newHeading);
165
+ currentTableOfContents = $updateHeadingPosition(prevHeading, newHeading, currentTableOfContents);
166
+ }
167
+ }
168
+ }
169
+ setTableOfContents(currentTableOfContents);
170
+ });
171
+ },
172
+ // Initialization is handled separately
173
+ {
174
+ skipInitialization: true
175
+ });
176
+
177
+ // Listen to text node mutation updates
178
+ const removeTextNodeMutationListener = editor.registerMutationListener(TextNode, mutatedNodes => {
179
+ editor.getEditorState().read(() => {
180
+ for (const [nodeKey, mutation] of mutatedNodes) {
181
+ if (mutation === 'updated') {
182
+ const currNode = $getNodeByKey(nodeKey);
183
+ if (currNode !== null) {
184
+ const parentNode = currNode.getParentOrThrow();
185
+ if ($isHeadingNode(parentNode)) {
186
+ currentTableOfContents = $updateHeadingInTableOfContents(parentNode, currentTableOfContents);
187
+ setTableOfContents(currentTableOfContents);
188
+ }
189
+ }
190
+ }
191
+ }
192
+ });
193
+ },
194
+ // Initialization is handled separately
195
+ {
196
+ skipInitialization: true
197
+ });
198
+ return () => {
199
+ removeHeaderMutationListener();
200
+ removeTextNodeMutationListener();
201
+ removeRootUpdateListener();
202
+ };
203
+ }, [editor]);
204
+ return children(tableOfContents, editor);
205
+ }
206
+
207
+ export { TableOfContentsPlugin };
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+
9
+ 'use strict'
10
+ const LexicalTableOfContentsPlugin = process.env.NODE_ENV !== 'production' ? require('./LexicalTableOfContentsPlugin.dev.js') : require('./LexicalTableOfContentsPlugin.prod.js');
11
+ module.exports = LexicalTableOfContentsPlugin;
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ * @flow strict
8
+ */
9
+
10
+ import type {HeadingTagType} from '@ekz/lexical-rich-text';
11
+ import type {LexicalEditor, NodeKey} from '@ekz/lexical';
12
+
13
+ declare export function TableOfContentsPlugin({
14
+ children: (
15
+ tableOfContents: Array<[NodeKey, string, HeadingTagType]>,
16
+ editor: LexicalEditor,
17
+ ) => React.Node,
18
+ }): React.Node;