@depup/lexical__react 0.41.0-depup.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.
- package/ExtensionComponent.d.ts +42 -0
- package/LICENSE +21 -0
- package/LexicalAutoEmbedPlugin.d.ts +39 -0
- package/LexicalAutoEmbedPlugin.dev.js +146 -0
- package/LexicalAutoEmbedPlugin.dev.mjs +141 -0
- package/LexicalAutoEmbedPlugin.js +11 -0
- package/LexicalAutoEmbedPlugin.js.flow +64 -0
- package/LexicalAutoEmbedPlugin.mjs +15 -0
- package/LexicalAutoEmbedPlugin.node.mjs +13 -0
- package/LexicalAutoEmbedPlugin.prod.js +9 -0
- package/LexicalAutoEmbedPlugin.prod.mjs +9 -0
- package/LexicalAutoFocusPlugin.d.ts +12 -0
- package/LexicalAutoFocusPlugin.dev.js +47 -0
- package/LexicalAutoFocusPlugin.dev.mjs +45 -0
- package/LexicalAutoFocusPlugin.js +11 -0
- package/LexicalAutoFocusPlugin.js.flow +14 -0
- package/LexicalAutoFocusPlugin.mjs +12 -0
- package/LexicalAutoFocusPlugin.node.mjs +10 -0
- package/LexicalAutoFocusPlugin.prod.js +9 -0
- package/LexicalAutoFocusPlugin.prod.mjs +9 -0
- package/LexicalAutoLinkPlugin.d.ts +16 -0
- package/LexicalAutoLinkPlugin.dev.js +56 -0
- package/LexicalAutoLinkPlugin.dev.mjs +54 -0
- package/LexicalAutoLinkPlugin.js +11 -0
- package/LexicalAutoLinkPlugin.js.flow +18 -0
- package/LexicalAutoLinkPlugin.mjs +13 -0
- package/LexicalAutoLinkPlugin.node.mjs +11 -0
- package/LexicalAutoLinkPlugin.prod.js +9 -0
- package/LexicalAutoLinkPlugin.prod.mjs +9 -0
- package/LexicalBlockWithAlignableContents.d.ts +21 -0
- package/LexicalBlockWithAlignableContents.dev.js +81 -0
- package/LexicalBlockWithAlignableContents.dev.mjs +79 -0
- package/LexicalBlockWithAlignableContents.js +11 -0
- package/LexicalBlockWithAlignableContents.js.flow +28 -0
- package/LexicalBlockWithAlignableContents.mjs +12 -0
- package/LexicalBlockWithAlignableContents.node.mjs +10 -0
- package/LexicalBlockWithAlignableContents.prod.js +9 -0
- package/LexicalBlockWithAlignableContents.prod.mjs +9 -0
- package/LexicalCharacterLimitPlugin.d.ts +15 -0
- package/LexicalCharacterLimitPlugin.dev.js +292 -0
- package/LexicalCharacterLimitPlugin.dev.mjs +290 -0
- package/LexicalCharacterLimitPlugin.js +11 -0
- package/LexicalCharacterLimitPlugin.js.flow +12 -0
- package/LexicalCharacterLimitPlugin.mjs +12 -0
- package/LexicalCharacterLimitPlugin.node.mjs +10 -0
- package/LexicalCharacterLimitPlugin.prod.js +9 -0
- package/LexicalCharacterLimitPlugin.prod.mjs +9 -0
- package/LexicalCheckListPlugin.d.ts +10 -0
- package/LexicalCheckListPlugin.dev.js +35 -0
- package/LexicalCheckListPlugin.dev.mjs +33 -0
- package/LexicalCheckListPlugin.js +11 -0
- package/LexicalCheckListPlugin.js.flow +12 -0
- package/LexicalCheckListPlugin.mjs +12 -0
- package/LexicalCheckListPlugin.node.mjs +10 -0
- package/LexicalCheckListPlugin.prod.js +9 -0
- package/LexicalCheckListPlugin.prod.mjs +9 -0
- package/LexicalClearEditorPlugin.d.ts +13 -0
- package/LexicalClearEditorPlugin.dev.js +55 -0
- package/LexicalClearEditorPlugin.dev.mjs +53 -0
- package/LexicalClearEditorPlugin.js +11 -0
- package/LexicalClearEditorPlugin.js.flow +14 -0
- package/LexicalClearEditorPlugin.mjs +12 -0
- package/LexicalClearEditorPlugin.node.mjs +10 -0
- package/LexicalClearEditorPlugin.prod.js +9 -0
- package/LexicalClearEditorPlugin.prod.mjs +9 -0
- package/LexicalClickableLinkPlugin.d.ts +11 -0
- package/LexicalClickableLinkPlugin.dev.js +38 -0
- package/LexicalClickableLinkPlugin.dev.mjs +36 -0
- package/LexicalClickableLinkPlugin.js +11 -0
- package/LexicalClickableLinkPlugin.js.flow +12 -0
- package/LexicalClickableLinkPlugin.mjs +12 -0
- package/LexicalClickableLinkPlugin.node.mjs +10 -0
- package/LexicalClickableLinkPlugin.prod.js +9 -0
- package/LexicalClickableLinkPlugin.prod.mjs +9 -0
- package/LexicalCollaborationContext.d.ts +19 -0
- package/LexicalCollaborationContext.dev.js +69 -0
- package/LexicalCollaborationContext.dev.mjs +65 -0
- package/LexicalCollaborationContext.js +11 -0
- package/LexicalCollaborationContext.js.flow +22 -0
- package/LexicalCollaborationContext.mjs +14 -0
- package/LexicalCollaborationContext.node.mjs +12 -0
- package/LexicalCollaborationContext.prod.js +9 -0
- package/LexicalCollaborationContext.prod.mjs +9 -0
- package/LexicalCollaborationPlugin.d.ts +39 -0
- package/LexicalCollaborationPlugin.dev.js +584 -0
- package/LexicalCollaborationPlugin.dev.mjs +569 -0
- package/LexicalCollaborationPlugin.js +11 -0
- package/LexicalCollaborationPlugin.js.flow +50 -0
- package/LexicalCollaborationPlugin.mjs +13 -0
- package/LexicalCollaborationPlugin.node.mjs +11 -0
- package/LexicalCollaborationPlugin.prod.js +9 -0
- package/LexicalCollaborationPlugin.prod.mjs +9 -0
- package/LexicalComposer.d.ts +25 -0
- package/LexicalComposer.dev.js +134 -0
- package/LexicalComposer.dev.mjs +132 -0
- package/LexicalComposer.js +11 -0
- package/LexicalComposer.js.flow +40 -0
- package/LexicalComposer.mjs +12 -0
- package/LexicalComposer.node.mjs +10 -0
- package/LexicalComposer.prod.js +9 -0
- package/LexicalComposer.prod.mjs +9 -0
- package/LexicalComposerContext.d.ts +18 -0
- package/LexicalComposerContext.dev.js +55 -0
- package/LexicalComposerContext.dev.mjs +51 -0
- package/LexicalComposerContext.js +11 -0
- package/LexicalComposerContext.js.flow +27 -0
- package/LexicalComposerContext.mjs +14 -0
- package/LexicalComposerContext.node.mjs +12 -0
- package/LexicalComposerContext.prod.js +9 -0
- package/LexicalComposerContext.prod.mjs +9 -0
- package/LexicalContentEditable.d.ts +26 -0
- package/LexicalContentEditable.dev.js +242 -0
- package/LexicalContentEditable.dev.mjs +239 -0
- package/LexicalContentEditable.js +11 -0
- package/LexicalContentEditable.js.flow +80 -0
- package/LexicalContentEditable.mjs +13 -0
- package/LexicalContentEditable.node.mjs +11 -0
- package/LexicalContentEditable.prod.js +9 -0
- package/LexicalContentEditable.prod.mjs +9 -0
- package/LexicalContextMenuPlugin.d.ts +42 -0
- package/LexicalContextMenuPlugin.dev.js +526 -0
- package/LexicalContextMenuPlugin.dev.mjs +511 -0
- package/LexicalContextMenuPlugin.js +11 -0
- package/LexicalContextMenuPlugin.js.flow +13 -0
- package/LexicalContextMenuPlugin.mjs +13 -0
- package/LexicalContextMenuPlugin.node.mjs +11 -0
- package/LexicalContextMenuPlugin.prod.js +9 -0
- package/LexicalContextMenuPlugin.prod.mjs +9 -0
- package/LexicalDecoratorBlockNode.d.ts +25 -0
- package/LexicalDecoratorBlockNode.dev.js +59 -0
- package/LexicalDecoratorBlockNode.dev.mjs +56 -0
- package/LexicalDecoratorBlockNode.js +11 -0
- package/LexicalDecoratorBlockNode.js.flow +35 -0
- package/LexicalDecoratorBlockNode.mjs +13 -0
- package/LexicalDecoratorBlockNode.node.mjs +11 -0
- package/LexicalDecoratorBlockNode.prod.js +9 -0
- package/LexicalDecoratorBlockNode.prod.mjs +9 -0
- package/LexicalDraggableBlockPlugin.d.ts +18 -0
- package/LexicalDraggableBlockPlugin.dev.js +655 -0
- package/LexicalDraggableBlockPlugin.dev.mjs +653 -0
- package/LexicalDraggableBlockPlugin.js +11 -0
- package/LexicalDraggableBlockPlugin.js.flow +24 -0
- package/LexicalDraggableBlockPlugin.mjs +12 -0
- package/LexicalDraggableBlockPlugin.node.mjs +10 -0
- package/LexicalDraggableBlockPlugin.prod.js +9 -0
- package/LexicalDraggableBlockPlugin.prod.mjs +9 -0
- package/LexicalEditorRefPlugin.d.ts +20 -0
- package/LexicalEditorRefPlugin.dev.js +58 -0
- package/LexicalEditorRefPlugin.dev.mjs +43 -0
- package/LexicalEditorRefPlugin.js +11 -0
- package/LexicalEditorRefPlugin.js.flow +19 -0
- package/LexicalEditorRefPlugin.mjs +12 -0
- package/LexicalEditorRefPlugin.node.mjs +10 -0
- package/LexicalEditorRefPlugin.prod.js +9 -0
- package/LexicalEditorRefPlugin.prod.mjs +9 -0
- package/LexicalErrorBoundary.d.ts +13 -0
- package/LexicalErrorBoundary.dev.js +40 -0
- package/LexicalErrorBoundary.dev.mjs +38 -0
- package/LexicalErrorBoundary.js +11 -0
- package/LexicalErrorBoundary.js.flow +17 -0
- package/LexicalErrorBoundary.mjs +12 -0
- package/LexicalErrorBoundary.node.mjs +10 -0
- package/LexicalErrorBoundary.prod.js +9 -0
- package/LexicalErrorBoundary.prod.mjs +9 -0
- package/LexicalExtensionComponent.dev.js +53 -0
- package/LexicalExtensionComponent.dev.mjs +51 -0
- package/LexicalExtensionComponent.js +11 -0
- package/LexicalExtensionComponent.js.flow +12 -0
- package/LexicalExtensionComponent.mjs +12 -0
- package/LexicalExtensionComponent.node.mjs +10 -0
- package/LexicalExtensionComponent.prod.js +9 -0
- package/LexicalExtensionComponent.prod.mjs +9 -0
- package/LexicalExtensionComposer.d.ts +69 -0
- package/LexicalExtensionComposer.dev.js +105 -0
- package/LexicalExtensionComposer.dev.mjs +103 -0
- package/LexicalExtensionComposer.js +11 -0
- package/LexicalExtensionComposer.js.flow +20 -0
- package/LexicalExtensionComposer.mjs +12 -0
- package/LexicalExtensionComposer.node.mjs +10 -0
- package/LexicalExtensionComposer.prod.js +9 -0
- package/LexicalExtensionComposer.prod.mjs +9 -0
- package/LexicalHashtagPlugin.d.ts +9 -0
- package/LexicalHashtagPlugin.dev.js +34 -0
- package/LexicalHashtagPlugin.dev.mjs +32 -0
- package/LexicalHashtagPlugin.js +11 -0
- package/LexicalHashtagPlugin.js.flow +10 -0
- package/LexicalHashtagPlugin.mjs +12 -0
- package/LexicalHashtagPlugin.node.mjs +10 -0
- package/LexicalHashtagPlugin.prod.js +9 -0
- package/LexicalHashtagPlugin.prod.mjs +9 -0
- package/LexicalHistoryPlugin.d.ts +14 -0
- package/LexicalHistoryPlugin.dev.js +48 -0
- package/LexicalHistoryPlugin.dev.mjs +46 -0
- package/LexicalHistoryPlugin.js +11 -0
- package/LexicalHistoryPlugin.js.flow +28 -0
- package/LexicalHistoryPlugin.mjs +13 -0
- package/LexicalHistoryPlugin.node.mjs +11 -0
- package/LexicalHistoryPlugin.prod.js +9 -0
- package/LexicalHistoryPlugin.prod.mjs +9 -0
- package/LexicalHorizontalRuleNode.d.ts +25 -0
- package/LexicalHorizontalRuleNode.dev.js +102 -0
- package/LexicalHorizontalRuleNode.dev.mjs +98 -0
- package/LexicalHorizontalRuleNode.js +11 -0
- package/LexicalHorizontalRuleNode.js.flow +27 -0
- package/LexicalHorizontalRuleNode.mjs +15 -0
- package/LexicalHorizontalRuleNode.node.mjs +13 -0
- package/LexicalHorizontalRuleNode.prod.js +9 -0
- package/LexicalHorizontalRuleNode.prod.mjs +9 -0
- package/LexicalHorizontalRulePlugin.d.ts +8 -0
- package/LexicalHorizontalRulePlugin.dev.js +44 -0
- package/LexicalHorizontalRulePlugin.dev.mjs +42 -0
- package/LexicalHorizontalRulePlugin.js +11 -0
- package/LexicalHorizontalRulePlugin.js.flow +12 -0
- package/LexicalHorizontalRulePlugin.mjs +12 -0
- package/LexicalHorizontalRulePlugin.node.mjs +10 -0
- package/LexicalHorizontalRulePlugin.prod.js +9 -0
- package/LexicalHorizontalRulePlugin.prod.mjs +9 -0
- package/LexicalLinkPlugin.d.ts +14 -0
- package/LexicalLinkPlugin.dev.js +43 -0
- package/LexicalLinkPlugin.dev.mjs +41 -0
- package/LexicalLinkPlugin.js +11 -0
- package/LexicalLinkPlugin.js.flow +21 -0
- package/LexicalLinkPlugin.mjs +12 -0
- package/LexicalLinkPlugin.node.mjs +10 -0
- package/LexicalLinkPlugin.prod.js +9 -0
- package/LexicalLinkPlugin.prod.mjs +9 -0
- package/LexicalListPlugin.d.ts +20 -0
- package/LexicalListPlugin.dev.js +57 -0
- package/LexicalListPlugin.dev.mjs +55 -0
- package/LexicalListPlugin.js +11 -0
- package/LexicalListPlugin.js.flow +15 -0
- package/LexicalListPlugin.mjs +12 -0
- package/LexicalListPlugin.node.mjs +10 -0
- package/LexicalListPlugin.prod.js +9 -0
- package/LexicalListPlugin.prod.mjs +9 -0
- package/LexicalMarkdownShortcutPlugin.d.ts +12 -0
- package/LexicalMarkdownShortcutPlugin.dev.js +55 -0
- package/LexicalMarkdownShortcutPlugin.dev.mjs +52 -0
- package/LexicalMarkdownShortcutPlugin.js +11 -0
- package/LexicalMarkdownShortcutPlugin.js.flow +16 -0
- package/LexicalMarkdownShortcutPlugin.mjs +13 -0
- package/LexicalMarkdownShortcutPlugin.node.mjs +11 -0
- package/LexicalMarkdownShortcutPlugin.prod.js +9 -0
- package/LexicalMarkdownShortcutPlugin.prod.mjs +9 -0
- package/LexicalNestedComposer.d.ts +57 -0
- package/LexicalNestedComposer.dev.js +161 -0
- package/LexicalNestedComposer.dev.mjs +159 -0
- package/LexicalNestedComposer.js +11 -0
- package/LexicalNestedComposer.js.flow +26 -0
- package/LexicalNestedComposer.mjs +12 -0
- package/LexicalNestedComposer.node.mjs +10 -0
- package/LexicalNestedComposer.prod.js +9 -0
- package/LexicalNestedComposer.prod.mjs +9 -0
- package/LexicalNodeContextMenuPlugin.d.ts +46 -0
- package/LexicalNodeContextMenuPlugin.dev.js +257 -0
- package/LexicalNodeContextMenuPlugin.dev.mjs +253 -0
- package/LexicalNodeContextMenuPlugin.js +11 -0
- package/LexicalNodeContextMenuPlugin.js.flow +12 -0
- package/LexicalNodeContextMenuPlugin.mjs +14 -0
- package/LexicalNodeContextMenuPlugin.node.mjs +12 -0
- package/LexicalNodeContextMenuPlugin.prod.js +9 -0
- package/LexicalNodeContextMenuPlugin.prod.mjs +9 -0
- package/LexicalNodeEventPlugin.d.ts +13 -0
- package/LexicalNodeEventPlugin.dev.js +61 -0
- package/LexicalNodeEventPlugin.dev.mjs +59 -0
- package/LexicalNodeEventPlugin.js +11 -0
- package/LexicalNodeEventPlugin.js.flow +20 -0
- package/LexicalNodeEventPlugin.mjs +12 -0
- package/LexicalNodeEventPlugin.node.mjs +10 -0
- package/LexicalNodeEventPlugin.prod.js +9 -0
- package/LexicalNodeEventPlugin.prod.mjs +9 -0
- package/LexicalNodeMenuPlugin.d.ts +24 -0
- package/LexicalNodeMenuPlugin.dev.js +527 -0
- package/LexicalNodeMenuPlugin.dev.mjs +524 -0
- package/LexicalNodeMenuPlugin.js +11 -0
- package/LexicalNodeMenuPlugin.js.flow +64 -0
- package/LexicalNodeMenuPlugin.mjs +13 -0
- package/LexicalNodeMenuPlugin.node.mjs +11 -0
- package/LexicalNodeMenuPlugin.prod.js +9 -0
- package/LexicalNodeMenuPlugin.prod.mjs +9 -0
- package/LexicalOnChangePlugin.d.ts +13 -0
- package/LexicalOnChangePlugin.dev.js +72 -0
- package/LexicalOnChangePlugin.dev.mjs +70 -0
- package/LexicalOnChangePlugin.js +11 -0
- package/LexicalOnChangePlugin.js.flow +16 -0
- package/LexicalOnChangePlugin.mjs +12 -0
- package/LexicalOnChangePlugin.node.mjs +10 -0
- package/LexicalOnChangePlugin.prod.js +9 -0
- package/LexicalOnChangePlugin.prod.mjs +9 -0
- package/LexicalPlainTextPlugin.d.ts +14 -0
- package/LexicalPlainTextPlugin.dev.js +235 -0
- package/LexicalPlainTextPlugin.dev.mjs +233 -0
- package/LexicalPlainTextPlugin.js +11 -0
- package/LexicalPlainTextPlugin.js.flow +29 -0
- package/LexicalPlainTextPlugin.mjs +12 -0
- package/LexicalPlainTextPlugin.node.mjs +10 -0
- package/LexicalPlainTextPlugin.prod.js +9 -0
- package/LexicalPlainTextPlugin.prod.mjs +9 -0
- package/LexicalReactExtension.dev.js +187 -0
- package/LexicalReactExtension.dev.mjs +184 -0
- package/LexicalReactExtension.js +11 -0
- package/LexicalReactExtension.js.flow +68 -0
- package/LexicalReactExtension.mjs +13 -0
- package/LexicalReactExtension.node.mjs +11 -0
- package/LexicalReactExtension.prod.js +9 -0
- package/LexicalReactExtension.prod.mjs +9 -0
- package/LexicalReactPluginHostExtension.dev.js +189 -0
- package/LexicalReactPluginHostExtension.dev.mjs +181 -0
- package/LexicalReactPluginHostExtension.js +11 -0
- package/LexicalReactPluginHostExtension.js.flow +84 -0
- package/LexicalReactPluginHostExtension.mjs +18 -0
- package/LexicalReactPluginHostExtension.node.mjs +16 -0
- package/LexicalReactPluginHostExtension.prod.js +9 -0
- package/LexicalReactPluginHostExtension.prod.mjs +9 -0
- package/LexicalReactProviderExtension.dev.js +33 -0
- package/LexicalReactProviderExtension.dev.mjs +31 -0
- package/LexicalReactProviderExtension.js +11 -0
- package/LexicalReactProviderExtension.js.flow +12 -0
- package/LexicalReactProviderExtension.mjs +12 -0
- package/LexicalReactProviderExtension.node.mjs +10 -0
- package/LexicalReactProviderExtension.prod.js +9 -0
- package/LexicalReactProviderExtension.prod.mjs +9 -0
- package/LexicalRichTextPlugin.d.ts +14 -0
- package/LexicalRichTextPlugin.dev.js +235 -0
- package/LexicalRichTextPlugin.dev.mjs +233 -0
- package/LexicalRichTextPlugin.js +11 -0
- package/LexicalRichTextPlugin.js.flow +29 -0
- package/LexicalRichTextPlugin.mjs +12 -0
- package/LexicalRichTextPlugin.node.mjs +10 -0
- package/LexicalRichTextPlugin.prod.js +9 -0
- package/LexicalRichTextPlugin.prod.mjs +9 -0
- package/LexicalSelectionAlwaysOnDisplay.d.ts +12 -0
- package/LexicalSelectionAlwaysOnDisplay.dev.js +33 -0
- package/LexicalSelectionAlwaysOnDisplay.dev.mjs +31 -0
- package/LexicalSelectionAlwaysOnDisplay.js +11 -0
- package/LexicalSelectionAlwaysOnDisplay.js.flow +15 -0
- package/LexicalSelectionAlwaysOnDisplay.mjs +12 -0
- package/LexicalSelectionAlwaysOnDisplay.node.mjs +10 -0
- package/LexicalSelectionAlwaysOnDisplay.prod.js +9 -0
- package/LexicalSelectionAlwaysOnDisplay.prod.mjs +9 -0
- package/LexicalTabIndentationPlugin.d.ts +22 -0
- package/LexicalTabIndentationPlugin.dev.js +41 -0
- package/LexicalTabIndentationPlugin.dev.mjs +39 -0
- package/LexicalTabIndentationPlugin.js +11 -0
- package/LexicalTabIndentationPlugin.js.flow +21 -0
- package/LexicalTabIndentationPlugin.mjs +13 -0
- package/LexicalTabIndentationPlugin.node.mjs +11 -0
- package/LexicalTabIndentationPlugin.prod.js +9 -0
- package/LexicalTabIndentationPlugin.prod.mjs +9 -0
- package/LexicalTableOfContentsPlugin.d.ts +20 -0
- package/LexicalTableOfContentsPlugin.dev.js +209 -0
- package/LexicalTableOfContentsPlugin.dev.mjs +207 -0
- package/LexicalTableOfContentsPlugin.js +11 -0
- package/LexicalTableOfContentsPlugin.js.flow +18 -0
- package/LexicalTableOfContentsPlugin.mjs +12 -0
- package/LexicalTableOfContentsPlugin.node.mjs +10 -0
- package/LexicalTableOfContentsPlugin.prod.js +9 -0
- package/LexicalTableOfContentsPlugin.prod.mjs +9 -0
- package/LexicalTablePlugin.d.ts +46 -0
- package/LexicalTablePlugin.dev.js +84 -0
- package/LexicalTablePlugin.dev.mjs +82 -0
- package/LexicalTablePlugin.js +11 -0
- package/LexicalTablePlugin.js.flow +15 -0
- package/LexicalTablePlugin.mjs +12 -0
- package/LexicalTablePlugin.node.mjs +10 -0
- package/LexicalTablePlugin.prod.js +9 -0
- package/LexicalTablePlugin.prod.mjs +9 -0
- package/LexicalTreeView.d.ts +37 -0
- package/LexicalTreeView.dev.js +105 -0
- package/LexicalTreeView.dev.mjs +91 -0
- package/LexicalTreeView.js +11 -0
- package/LexicalTreeView.js.flow +21 -0
- package/LexicalTreeView.mjs +12 -0
- package/LexicalTreeView.node.mjs +10 -0
- package/LexicalTreeView.prod.js +9 -0
- package/LexicalTreeView.prod.mjs +9 -0
- package/LexicalTreeViewExtension.dev.js +57 -0
- package/LexicalTreeViewExtension.dev.mjs +54 -0
- package/LexicalTreeViewExtension.js +11 -0
- package/LexicalTreeViewExtension.js.flow +12 -0
- package/LexicalTreeViewExtension.mjs +13 -0
- package/LexicalTreeViewExtension.node.mjs +11 -0
- package/LexicalTreeViewExtension.prod.js +9 -0
- package/LexicalTreeViewExtension.prod.mjs +9 -0
- package/LexicalTypeaheadMenuPlugin.d.ts +40 -0
- package/LexicalTypeaheadMenuPlugin.dev.js +654 -0
- package/LexicalTypeaheadMenuPlugin.dev.mjs +646 -0
- package/LexicalTypeaheadMenuPlugin.js +11 -0
- package/LexicalTypeaheadMenuPlugin.js.flow +83 -0
- package/LexicalTypeaheadMenuPlugin.mjs +18 -0
- package/LexicalTypeaheadMenuPlugin.node.mjs +16 -0
- package/LexicalTypeaheadMenuPlugin.prod.js +9 -0
- package/LexicalTypeaheadMenuPlugin.prod.mjs +9 -0
- package/README.md +32 -0
- package/ReactExtension.d.ts +41 -0
- package/ReactPluginHostExtension.d.ts +56 -0
- package/ReactProviderExtension.d.ts +9 -0
- package/TreeViewExtension.d.ts +18 -0
- package/changes.json +14 -0
- package/package.json +1572 -0
- package/shared/LegacyDecorators.d.ts +23 -0
- package/shared/LexicalContentEditableElement.d.ts +43 -0
- package/shared/LexicalMenu.d.ts +52 -0
- package/shared/buildEditorComponent.d.ts +11 -0
- package/shared/mergeRefs.d.ts +9 -0
- package/shared/point.d.ts +21 -0
- package/shared/rect.d.ts +45 -0
- package/shared/types.d.ts +89 -0
- package/shared/useCanShowPlaceholder.d.ts +9 -0
- package/shared/useCharacterLimit.d.ts +16 -0
- package/shared/useDecorators.d.ts +17 -0
- package/shared/useHistory.d.ts +10 -0
- package/shared/useList.d.ts +9 -0
- package/shared/usePlainTextSetup.d.ts +9 -0
- package/shared/useReactDecorators.d.ts +12 -0
- package/shared/useRichTextSetup.d.ts +9 -0
- package/shared/useYjsCollaboration.d.ts +25 -0
- package/useExtensionComponent.d.ts +10 -0
- package/useLexicalEditable.d.ts +16 -0
- package/useLexicalEditable.dev.js +102 -0
- package/useLexicalEditable.dev.mjs +100 -0
- package/useLexicalEditable.js +11 -0
- package/useLexicalEditable.js.flow +12 -0
- package/useLexicalEditable.mjs +12 -0
- package/useLexicalEditable.node.mjs +10 -0
- package/useLexicalEditable.prod.js +9 -0
- package/useLexicalEditable.prod.mjs +9 -0
- package/useLexicalExtensionComponent.dev.js +37 -0
- package/useLexicalExtensionComponent.dev.mjs +34 -0
- package/useLexicalExtensionComponent.js +11 -0
- package/useLexicalExtensionComponent.js.flow +12 -0
- package/useLexicalExtensionComponent.mjs +13 -0
- package/useLexicalExtensionComponent.node.mjs +11 -0
- package/useLexicalExtensionComponent.prod.js +9 -0
- package/useLexicalExtensionComponent.prod.mjs +9 -0
- package/useLexicalIsTextContentEmpty.d.ts +9 -0
- package/useLexicalIsTextContentEmpty.dev.js +60 -0
- package/useLexicalIsTextContentEmpty.dev.mjs +58 -0
- package/useLexicalIsTextContentEmpty.js +11 -0
- package/useLexicalIsTextContentEmpty.js.flow +15 -0
- package/useLexicalIsTextContentEmpty.mjs +12 -0
- package/useLexicalIsTextContentEmpty.node.mjs +10 -0
- package/useLexicalIsTextContentEmpty.prod.js +9 -0
- package/useLexicalIsTextContentEmpty.prod.mjs +9 -0
- package/useLexicalNodeSelection.d.ts +24 -0
- package/useLexicalNodeSelection.dev.js +102 -0
- package/useLexicalNodeSelection.dev.mjs +100 -0
- package/useLexicalNodeSelection.js +11 -0
- package/useLexicalNodeSelection.js.flow +14 -0
- package/useLexicalNodeSelection.mjs +12 -0
- package/useLexicalNodeSelection.node.mjs +10 -0
- package/useLexicalNodeSelection.prod.js +9 -0
- package/useLexicalNodeSelection.prod.mjs +9 -0
- package/useLexicalSubscription.d.ts +17 -0
- package/useLexicalSubscription.dev.js +73 -0
- package/useLexicalSubscription.dev.mjs +71 -0
- package/useLexicalSubscription.js +11 -0
- package/useLexicalSubscription.js.flow +19 -0
- package/useLexicalSubscription.mjs +12 -0
- package/useLexicalSubscription.node.mjs +10 -0
- package/useLexicalSubscription.prod.js +9 -0
- package/useLexicalSubscription.prod.mjs +9 -0
- package/useLexicalTextEntity.d.ts +10 -0
- package/useLexicalTextEntity.dev.js +31 -0
- package/useLexicalTextEntity.dev.mjs +29 -0
- package/useLexicalTextEntity.js +11 -0
- package/useLexicalTextEntity.js.flow +18 -0
- package/useLexicalTextEntity.mjs +12 -0
- package/useLexicalTextEntity.node.mjs +10 -0
- package/useLexicalTextEntity.prod.js +9 -0
- package/useLexicalTextEntity.prod.mjs +9 -0
|
@@ -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"@lexical/extension";export{registerTabIndentation}from"@lexical/extension";import{useLexicalComposerContext as t}from"@lexical/react/LexicalComposerContext";import{useEffect as n}from"react";function o({maxIndent:o,$canIndent:r}){const[i]=t();return n(()=>e(i,o,r),[i,o,r]),null}export{o 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 '@lexical/rich-text';
|
|
10
|
+
import { LexicalEditor, NodeKey } from '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('@lexical/react/LexicalComposerContext');
|
|
12
|
+
var richText = require('@lexical/rich-text');
|
|
13
|
+
var utils = require('@lexical/utils');
|
|
14
|
+
var lexical = require('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 = utils.$getNextRightPreorderNode(node);
|
|
99
|
+
while (prevHeading !== null && !richText.$isHeadingNode(prevHeading)) {
|
|
100
|
+
prevHeading = utils.$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 (richText.$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 (richText.$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(richText.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 (richText.$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 '@lexical/react/LexicalComposerContext';
|
|
10
|
+
import { HeadingNode, $isHeadingNode } from '@lexical/rich-text';
|
|
11
|
+
import { $getNextRightPreorderNode } from '@lexical/utils';
|
|
12
|
+
import { $getRoot, $isElementNode, $getNodeByKey, TextNode } from '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 '@lexical/rich-text';
|
|
11
|
+
import type {LexicalEditor, NodeKey} from 'lexical';
|
|
12
|
+
|
|
13
|
+
declare export function TableOfContentsPlugin({
|
|
14
|
+
children: (
|
|
15
|
+
tableOfContents: Array<[NodeKey, string, HeadingTagType]>,
|
|
16
|
+
editor: LexicalEditor,
|
|
17
|
+
) => React.Node,
|
|
18
|
+
}): React.Node;
|
|
@@ -0,0 +1,12 @@
|
|
|
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 './LexicalTableOfContentsPlugin.dev.mjs';
|
|
10
|
+
import * as modProd from './LexicalTableOfContentsPlugin.prod.mjs';
|
|
11
|
+
const mod = process.env.NODE_ENV !== 'production' ? modDev : modProd;
|
|
12
|
+
export const TableOfContentsPlugin = mod.TableOfContentsPlugin;
|
|
@@ -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('./LexicalTableOfContentsPlugin.dev.mjs') : import('./LexicalTableOfContentsPlugin.prod.mjs'));
|
|
10
|
+
export const TableOfContentsPlugin = mod.TableOfContentsPlugin;
|
|
@@ -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("@lexical/react/LexicalComposerContext"),t=require("@lexical/rich-text"),n=require("@lexical/utils"),o=require("lexical"),r=require("react");function i(e){return[e.getKey(),e.getTextContent(),e.getTag()]}function s(e,t,n){if(null===t)return n;const o=i(t);let r=[];if(null===e){if(n.length>0&&n[0][0]===t.__key)return n;r=[o,...n]}else for(let i=0;i<n.length;i++){const s=n[i][0];if(r.push(n[i]),s===e.getKey()&&s!==t.getKey()){if(i+1<n.length&&n[i+1][0]===t.__key)return n;r.push(o)}}return r}function u(e,t){const n=[];for(const o of t)o[0]!==e&&n.push(o);return n}function l(e,t){const n=[];for(const o of t)o[0]===e.getKey()?n.push(i(e)):n.push(o);return n}function c(e,t,n){const o=[],r=i(t);e||o.push(r);for(const i of n)i[0]!==t.getKey()&&(o.push(i),e&&i[0]===e.getKey()&&o.push(r));return o}function d(e){let o=n.$getNextRightPreorderNode(e);for(;null!==o&&!t.$isHeadingNode(o);)o=n.$getNextRightPreorderNode(o);return o}exports.TableOfContentsPlugin=function({children:n}){const[i,g]=r.useState([]),[f]=e.useLexicalComposerContext();return r.useEffect(()=>{let e=[];f.getEditorState().read(()=>{const n=r=>{for(const i of r.getChildren())t.$isHeadingNode(i)?e.push([i.getKey(),i.getTextContent(),i.getTag()]):o.$isElementNode(i)&&n(i)};n(o.$getRoot()),g(e)});const n=f.registerUpdateListener(({editorState:n,dirtyElements:r})=>{n.read(()=>{const n=r=>{for(const i of r.getChildren())if(t.$isHeadingNode(i)){const t=d(i);e=c(t,i,e),g(e)}else o.$isElementNode(i)&&n(i)};o.$getRoot().getChildren().forEach(e=>{o.$isElementNode(e)&&r.get(e.__key)&&n(e)})})}),r=f.registerMutationListener(t.HeadingNode,t=>{f.getEditorState().read(()=>{for(const[n,r]of t)if("created"===r){const t=o.$getNodeByKey(n);if(null!==t){const n=d(t);e=s(n,t,e)}}else if("destroyed"===r)e=u(n,e);else if("updated"===r){const t=o.$getNodeByKey(n);if(null!==t){const n=d(t);e=c(n,t,e)}}g(e)})},{skipInitialization:!0}),i=f.registerMutationListener(o.TextNode,n=>{f.getEditorState().read(()=>{for(const[r,i]of n)if("updated"===i){const n=o.$getNodeByKey(r);if(null!==n){const o=n.getParentOrThrow();t.$isHeadingNode(o)&&(e=l(o,e),g(e))}}})},{skipInitialization:!0});return()=>{r(),i(),n()}},[f]),n(i,f)};
|
|
@@ -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 t}from"@lexical/react/LexicalComposerContext";import{HeadingNode as e,$isHeadingNode as n}from"@lexical/rich-text";import{$getNextRightPreorderNode as r}from"@lexical/utils";import{$getRoot as o,$isElementNode as i,$getNodeByKey as s,TextNode as f}from"lexical";import{useState as c,useEffect as l}from"react";function u(t){return[t.getKey(),t.getTextContent(),t.getTag()]}function a(t,e,n){if(null===e)return n;const r=u(e);let o=[];if(null===t){if(n.length>0&&n[0][0]===e.__key)return n;o=[r,...n]}else for(let i=0;i<n.length;i++){const s=n[i][0];if(o.push(n[i]),s===t.getKey()&&s!==e.getKey()){if(i+1<n.length&&n[i+1][0]===e.__key)return n;o.push(r)}}return o}function g(t,e){const n=[];for(const r of e)r[0]!==t&&n.push(r);return n}function d(t,e){const n=[];for(const r of e)r[0]===t.getKey()?n.push(u(t)):n.push(r);return n}function p(t,e,n){const r=[],o=u(e);t||r.push(o);for(const i of n)i[0]!==e.getKey()&&(r.push(i),t&&i[0]===t.getKey()&&r.push(o));return r}function h(t){let e=r(t);for(;null!==e&&!n(e);)e=r(e);return e}function m({children:r}){const[u,m]=c([]),[y]=t();return l(()=>{let t=[];y.getEditorState().read(()=>{const e=r=>{for(const o of r.getChildren())n(o)?t.push([o.getKey(),o.getTextContent(),o.getTag()]):i(o)&&e(o)};e(o()),m(t)});const r=y.registerUpdateListener(({editorState:e,dirtyElements:r})=>{e.read(()=>{const e=r=>{for(const o of r.getChildren())if(n(o)){const e=h(o);t=p(e,o,t),m(t)}else i(o)&&e(o)};o().getChildren().forEach(t=>{i(t)&&r.get(t.__key)&&e(t)})})}),c=y.registerMutationListener(e,e=>{y.getEditorState().read(()=>{for(const[n,r]of e)if("created"===r){const e=s(n);if(null!==e){const n=h(e);t=a(n,e,t)}}else if("destroyed"===r)t=g(n,t);else if("updated"===r){const e=s(n);if(null!==e){const n=h(e);t=p(n,e,t)}}m(t)})},{skipInitialization:!0}),l=y.registerMutationListener(f,e=>{y.getEditorState().read(()=>{for(const[r,o]of e)if("updated"===o){const e=s(r);if(null!==e){const r=e.getParentOrThrow();n(r)&&(t=d(r,t),m(t))}}})},{skipInitialization:!0});return()=>{c(),l(),r()}},[y]),r(u,y)}export{m as TableOfContentsPlugin};
|
|
@@ -0,0 +1,46 @@
|
|
|
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
|
+
export interface TablePluginProps {
|
|
10
|
+
/**
|
|
11
|
+
* When `false` (default `true`), merged cell support (colspan and rowspan) will be disabled and all
|
|
12
|
+
* tables will be forced into a regular grid with 1x1 table cells.
|
|
13
|
+
*/
|
|
14
|
+
hasCellMerge?: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* When `false` (default `true`), the background color of TableCellNode will always be removed.
|
|
17
|
+
*/
|
|
18
|
+
hasCellBackgroundColor?: boolean;
|
|
19
|
+
/**
|
|
20
|
+
* When `true` (default `true`), the tab key can be used to navigate table cells.
|
|
21
|
+
*/
|
|
22
|
+
hasTabHandler?: boolean;
|
|
23
|
+
/**
|
|
24
|
+
* When `true` (default `false`), tables will be wrapped in a `<div>` to enable horizontal scrolling
|
|
25
|
+
*/
|
|
26
|
+
hasHorizontalScroll?: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* When `true` (default `false`), nested tables will be allowed.
|
|
29
|
+
*
|
|
30
|
+
* @experimental Nested tables are not officially supported.
|
|
31
|
+
*/
|
|
32
|
+
hasNestedTables?: boolean;
|
|
33
|
+
/**
|
|
34
|
+
* When `true` (default `false`), nested tables will be resized to fit the width of the parent table cell.
|
|
35
|
+
*
|
|
36
|
+
* @experimental Nested tables are not officially supported.
|
|
37
|
+
*/
|
|
38
|
+
hasFitNestedTables?: boolean;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* A plugin to enable all of the features of Lexical's TableNode.
|
|
42
|
+
*
|
|
43
|
+
* @param props - See type for documentation
|
|
44
|
+
* @returns An element to render in your LexicalComposer
|
|
45
|
+
*/
|
|
46
|
+
export declare function TablePlugin({ hasCellMerge, hasCellBackgroundColor, hasTabHandler, hasHorizontalScroll, hasNestedTables, hasFitNestedTables, }: TablePluginProps): JSX.Element | null;
|
|
@@ -0,0 +1,84 @@
|
|
|
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 extension = require('@lexical/extension');
|
|
12
|
+
var LexicalComposerContext = require('@lexical/react/LexicalComposerContext');
|
|
13
|
+
var table = require('@lexical/table');
|
|
14
|
+
var react = require('react');
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
18
|
+
*
|
|
19
|
+
* This source code is licensed under the MIT license found in the
|
|
20
|
+
* LICENSE file in the root directory of this source tree.
|
|
21
|
+
*
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* A plugin to enable all of the features of Lexical's TableNode.
|
|
26
|
+
*
|
|
27
|
+
* @param props - See type for documentation
|
|
28
|
+
* @returns An element to render in your LexicalComposer
|
|
29
|
+
*/
|
|
30
|
+
function TablePlugin({
|
|
31
|
+
hasCellMerge = true,
|
|
32
|
+
hasCellBackgroundColor = true,
|
|
33
|
+
hasTabHandler = true,
|
|
34
|
+
hasHorizontalScroll = false,
|
|
35
|
+
hasNestedTables = false,
|
|
36
|
+
hasFitNestedTables = false
|
|
37
|
+
}) {
|
|
38
|
+
const [editor] = LexicalComposerContext.useLexicalComposerContext();
|
|
39
|
+
react.useEffect(() => {
|
|
40
|
+
const hadHorizontalScroll = table.$isScrollableTablesActive(editor);
|
|
41
|
+
if (hadHorizontalScroll !== hasHorizontalScroll) {
|
|
42
|
+
table.setScrollableTablesActive(editor, hasHorizontalScroll);
|
|
43
|
+
// Registering the transform has the side-effect of marking all existing
|
|
44
|
+
// TableNodes as dirty. The handler is immediately unregistered.
|
|
45
|
+
editor.registerNodeTransform(table.TableNode, () => {})();
|
|
46
|
+
}
|
|
47
|
+
}, [editor, hasHorizontalScroll]);
|
|
48
|
+
const hasNestedTablesSignal = usePropSignal(hasNestedTables);
|
|
49
|
+
const hasFitNestedTablesSignal = usePropSignal(hasFitNestedTables);
|
|
50
|
+
react.useEffect(() => table.registerTablePlugin(editor, {
|
|
51
|
+
hasFitNestedTables: hasFitNestedTablesSignal,
|
|
52
|
+
hasNestedTables: hasNestedTablesSignal
|
|
53
|
+
}), [editor, hasNestedTablesSignal, hasFitNestedTablesSignal]);
|
|
54
|
+
react.useEffect(() => table.registerTableSelectionObserver(editor, hasTabHandler), [editor, hasTabHandler]);
|
|
55
|
+
|
|
56
|
+
// Unmerge cells when the feature isn't enabled
|
|
57
|
+
react.useEffect(() => {
|
|
58
|
+
if (!hasCellMerge) {
|
|
59
|
+
return table.registerTableCellUnmergeTransform(editor);
|
|
60
|
+
}
|
|
61
|
+
}, [editor, hasCellMerge]);
|
|
62
|
+
|
|
63
|
+
// Remove cell background color when feature is disabled
|
|
64
|
+
react.useEffect(() => {
|
|
65
|
+
if (hasCellBackgroundColor) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
return editor.registerNodeTransform(table.TableCellNode, node => {
|
|
69
|
+
if (node.getBackgroundColor() !== null) {
|
|
70
|
+
node.setBackgroundColor(null);
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
}, [editor, hasCellBackgroundColor, hasCellMerge]);
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
function usePropSignal(value) {
|
|
77
|
+
const [configSignal] = react.useState(() => extension.signal(value));
|
|
78
|
+
if (configSignal.peek() !== value) {
|
|
79
|
+
configSignal.value = value;
|
|
80
|
+
}
|
|
81
|
+
return configSignal;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
exports.TablePlugin = TablePlugin;
|