@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.
- package/@ekz/lexicalExtensionComponent.dev.js +53 -0
- package/@ekz/lexicalExtensionComponent.dev.mjs +51 -0
- package/@ekz/lexicalExtensionComponent.js +11 -0
- package/@ekz/lexicalExtensionComponent.mjs +12 -0
- package/@ekz/lexicalExtensionComponent.node.mjs +10 -0
- package/@ekz/lexicalExtensionComponent.prod.js +9 -0
- package/@ekz/lexicalExtensionComponent.prod.mjs +9 -0
- package/@ekz/lexicalReactExtension.dev.js +187 -0
- package/@ekz/lexicalReactExtension.dev.mjs +184 -0
- package/@ekz/lexicalReactExtension.js +11 -0
- package/@ekz/lexicalReactExtension.mjs +13 -0
- package/@ekz/lexicalReactExtension.node.mjs +11 -0
- package/@ekz/lexicalReactExtension.prod.js +9 -0
- package/@ekz/lexicalReactExtension.prod.mjs +9 -0
- package/@ekz/lexicalReactPluginHostExtension.dev.js +189 -0
- package/@ekz/lexicalReactPluginHostExtension.dev.mjs +181 -0
- package/@ekz/lexicalReactPluginHostExtension.js +11 -0
- package/@ekz/lexicalReactPluginHostExtension.mjs +18 -0
- package/@ekz/lexicalReactPluginHostExtension.node.mjs +16 -0
- package/@ekz/lexicalReactPluginHostExtension.prod.js +9 -0
- package/@ekz/lexicalReactPluginHostExtension.prod.mjs +9 -0
- package/@ekz/lexicalReactProviderExtension.dev.js +33 -0
- package/@ekz/lexicalReactProviderExtension.dev.mjs +31 -0
- package/@ekz/lexicalReactProviderExtension.js +11 -0
- package/@ekz/lexicalReactProviderExtension.mjs +12 -0
- package/@ekz/lexicalReactProviderExtension.node.mjs +10 -0
- package/@ekz/lexicalReactProviderExtension.prod.js +9 -0
- package/@ekz/lexicalReactProviderExtension.prod.mjs +9 -0
- package/@ekz/lexicalTreeViewExtension.dev.js +57 -0
- package/@ekz/lexicalTreeViewExtension.dev.mjs +54 -0
- package/@ekz/lexicalTreeViewExtension.js +11 -0
- package/@ekz/lexicalTreeViewExtension.mjs +13 -0
- package/@ekz/lexicalTreeViewExtension.node.mjs +11 -0
- package/@ekz/lexicalTreeViewExtension.prod.js +9 -0
- package/@ekz/lexicalTreeViewExtension.prod.mjs +9 -0
- 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 +14 -0
- package/LexicalAutoLinkPlugin.dev.js +54 -0
- package/LexicalAutoLinkPlugin.dev.mjs +52 -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 +8 -0
- package/LexicalCheckListPlugin.dev.js +31 -0
- package/LexicalCheckListPlugin.dev.mjs +29 -0
- package/LexicalCheckListPlugin.js +11 -0
- package/LexicalCheckListPlugin.js.flow +10 -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 +36 -0
- package/LexicalContextMenuPlugin.dev.js +524 -0
- package/LexicalContextMenuPlugin.dev.mjs +509 -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.js.flow +12 -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 +55 -0
- package/LexicalListPlugin.dev.mjs +53 -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.js.flow +68 -0
- package/LexicalReactPluginHostExtension.js.flow +84 -0
- package/LexicalReactProviderExtension.js.flow +12 -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 +17 -0
- package/LexicalTabIndentationPlugin.dev.js +40 -0
- package/LexicalTabIndentationPlugin.dev.mjs +38 -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 +81 -0
- package/LexicalTablePlugin.dev.mjs +79 -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.js.flow +12 -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 +90 -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/package.json +1549 -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,655 @@
|
|
|
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
|
+
var reactDom = require('react-dom');
|
|
17
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
21
|
+
*
|
|
22
|
+
* This source code is licensed under the MIT license found in the
|
|
23
|
+
* LICENSE file in the root directory of this source tree.
|
|
24
|
+
*
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
const CAN_USE_DOM = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined';
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
31
|
+
*
|
|
32
|
+
* This source code is licensed under the MIT license found in the
|
|
33
|
+
* LICENSE file in the root directory of this source tree.
|
|
34
|
+
*
|
|
35
|
+
*/
|
|
36
|
+
|
|
37
|
+
const documentMode = CAN_USE_DOM && 'documentMode' in document ? document.documentMode : null;
|
|
38
|
+
const IS_FIREFOX = CAN_USE_DOM && /^(?!.*Seamonkey)(?=.*Firefox).*/i.test(navigator.userAgent);
|
|
39
|
+
CAN_USE_DOM && 'InputEvent' in window && !documentMode ? 'getTargetRanges' in new window.InputEvent('input') : false;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
43
|
+
*
|
|
44
|
+
* This source code is licensed under the MIT license found in the
|
|
45
|
+
* LICENSE file in the root directory of this source tree.
|
|
46
|
+
*
|
|
47
|
+
*/
|
|
48
|
+
class Point {
|
|
49
|
+
_x;
|
|
50
|
+
_y;
|
|
51
|
+
constructor(x, y) {
|
|
52
|
+
this._x = x;
|
|
53
|
+
this._y = y;
|
|
54
|
+
}
|
|
55
|
+
get x() {
|
|
56
|
+
return this._x;
|
|
57
|
+
}
|
|
58
|
+
get y() {
|
|
59
|
+
return this._y;
|
|
60
|
+
}
|
|
61
|
+
equals({
|
|
62
|
+
x,
|
|
63
|
+
y
|
|
64
|
+
}) {
|
|
65
|
+
return this.x === x && this.y === y;
|
|
66
|
+
}
|
|
67
|
+
calcDeltaXTo({
|
|
68
|
+
x
|
|
69
|
+
}) {
|
|
70
|
+
return this.x - x;
|
|
71
|
+
}
|
|
72
|
+
calcDeltaYTo({
|
|
73
|
+
y
|
|
74
|
+
}) {
|
|
75
|
+
return this.y - y;
|
|
76
|
+
}
|
|
77
|
+
calcHorizontalDistanceTo(point) {
|
|
78
|
+
return Math.abs(this.calcDeltaXTo(point));
|
|
79
|
+
}
|
|
80
|
+
calcVerticalDistance(point) {
|
|
81
|
+
return Math.abs(this.calcDeltaYTo(point));
|
|
82
|
+
}
|
|
83
|
+
calcDistanceTo(point) {
|
|
84
|
+
return Math.sqrt(Math.pow(this.calcDeltaXTo(point), 2) + Math.pow(this.calcDeltaYTo(point), 2));
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
function isPoint(x) {
|
|
88
|
+
return x instanceof Point;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
93
|
+
*
|
|
94
|
+
* This source code is licensed under the MIT license found in the
|
|
95
|
+
* LICENSE file in the root directory of this source tree.
|
|
96
|
+
*
|
|
97
|
+
*/
|
|
98
|
+
class Rectangle {
|
|
99
|
+
_left;
|
|
100
|
+
_top;
|
|
101
|
+
_right;
|
|
102
|
+
_bottom;
|
|
103
|
+
constructor(left, top, right, bottom) {
|
|
104
|
+
const [physicTop, physicBottom] = top <= bottom ? [top, bottom] : [bottom, top];
|
|
105
|
+
const [physicLeft, physicRight] = left <= right ? [left, right] : [right, left];
|
|
106
|
+
this._top = physicTop;
|
|
107
|
+
this._right = physicRight;
|
|
108
|
+
this._left = physicLeft;
|
|
109
|
+
this._bottom = physicBottom;
|
|
110
|
+
}
|
|
111
|
+
get top() {
|
|
112
|
+
return this._top;
|
|
113
|
+
}
|
|
114
|
+
get right() {
|
|
115
|
+
return this._right;
|
|
116
|
+
}
|
|
117
|
+
get bottom() {
|
|
118
|
+
return this._bottom;
|
|
119
|
+
}
|
|
120
|
+
get left() {
|
|
121
|
+
return this._left;
|
|
122
|
+
}
|
|
123
|
+
get width() {
|
|
124
|
+
return Math.abs(this._left - this._right);
|
|
125
|
+
}
|
|
126
|
+
get height() {
|
|
127
|
+
return Math.abs(this._bottom - this._top);
|
|
128
|
+
}
|
|
129
|
+
equals({
|
|
130
|
+
top,
|
|
131
|
+
left,
|
|
132
|
+
bottom,
|
|
133
|
+
right
|
|
134
|
+
}) {
|
|
135
|
+
return top === this._top && bottom === this._bottom && left === this._left && right === this._right;
|
|
136
|
+
}
|
|
137
|
+
contains(target) {
|
|
138
|
+
if (isPoint(target)) {
|
|
139
|
+
const {
|
|
140
|
+
x,
|
|
141
|
+
y
|
|
142
|
+
} = target;
|
|
143
|
+
const isOnTopSide = y < this._top;
|
|
144
|
+
const isOnBottomSide = y > this._bottom;
|
|
145
|
+
const isOnLeftSide = x < this._left;
|
|
146
|
+
const isOnRightSide = x > this._right;
|
|
147
|
+
const result = !isOnTopSide && !isOnBottomSide && !isOnLeftSide && !isOnRightSide;
|
|
148
|
+
return {
|
|
149
|
+
reason: {
|
|
150
|
+
isOnBottomSide,
|
|
151
|
+
isOnLeftSide,
|
|
152
|
+
isOnRightSide,
|
|
153
|
+
isOnTopSide
|
|
154
|
+
},
|
|
155
|
+
result
|
|
156
|
+
};
|
|
157
|
+
} else {
|
|
158
|
+
const {
|
|
159
|
+
top,
|
|
160
|
+
left,
|
|
161
|
+
bottom,
|
|
162
|
+
right
|
|
163
|
+
} = target;
|
|
164
|
+
return top >= this._top && top <= this._bottom && bottom >= this._top && bottom <= this._bottom && left >= this._left && left <= this._right && right >= this._left && right <= this._right;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
intersectsWith(rect) {
|
|
168
|
+
const {
|
|
169
|
+
left: x1,
|
|
170
|
+
top: y1,
|
|
171
|
+
width: w1,
|
|
172
|
+
height: h1
|
|
173
|
+
} = rect;
|
|
174
|
+
const {
|
|
175
|
+
left: x2,
|
|
176
|
+
top: y2,
|
|
177
|
+
width: w2,
|
|
178
|
+
height: h2
|
|
179
|
+
} = this;
|
|
180
|
+
const maxX = x1 + w1 >= x2 + w2 ? x1 + w1 : x2 + w2;
|
|
181
|
+
const maxY = y1 + h1 >= y2 + h2 ? y1 + h1 : y2 + h2;
|
|
182
|
+
const minX = x1 <= x2 ? x1 : x2;
|
|
183
|
+
const minY = y1 <= y2 ? y1 : y2;
|
|
184
|
+
return maxX - minX <= w1 + w2 && maxY - minY <= h1 + h2;
|
|
185
|
+
}
|
|
186
|
+
generateNewRect({
|
|
187
|
+
left = this.left,
|
|
188
|
+
top = this.top,
|
|
189
|
+
right = this.right,
|
|
190
|
+
bottom = this.bottom
|
|
191
|
+
}) {
|
|
192
|
+
return new Rectangle(left, top, right, bottom);
|
|
193
|
+
}
|
|
194
|
+
static fromLTRB(left, top, right, bottom) {
|
|
195
|
+
return new Rectangle(left, top, right, bottom);
|
|
196
|
+
}
|
|
197
|
+
static fromLWTH(left, width, top, height) {
|
|
198
|
+
return new Rectangle(left, top, left + width, top + height);
|
|
199
|
+
}
|
|
200
|
+
static fromPoints(startPoint, endPoint) {
|
|
201
|
+
const {
|
|
202
|
+
y: top,
|
|
203
|
+
x: left
|
|
204
|
+
} = startPoint;
|
|
205
|
+
const {
|
|
206
|
+
y: bottom,
|
|
207
|
+
x: right
|
|
208
|
+
} = endPoint;
|
|
209
|
+
return Rectangle.fromLTRB(left, top, right, bottom);
|
|
210
|
+
}
|
|
211
|
+
static fromDOM(dom) {
|
|
212
|
+
const {
|
|
213
|
+
top,
|
|
214
|
+
width,
|
|
215
|
+
left,
|
|
216
|
+
height
|
|
217
|
+
} = dom.getBoundingClientRect();
|
|
218
|
+
return Rectangle.fromLWTH(left, width, top, height);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
224
|
+
*
|
|
225
|
+
* This source code is licensed under the MIT license found in the
|
|
226
|
+
* LICENSE file in the root directory of this source tree.
|
|
227
|
+
*
|
|
228
|
+
*/
|
|
229
|
+
|
|
230
|
+
const SPACE = 4;
|
|
231
|
+
const TARGET_LINE_HALF_HEIGHT = 2;
|
|
232
|
+
const DRAG_DATA_FORMAT = 'application/x-lexical-drag-block';
|
|
233
|
+
const TEXT_BOX_HORIZONTAL_PADDING = 28;
|
|
234
|
+
const Downward = 1;
|
|
235
|
+
const Upward = -1;
|
|
236
|
+
const Indeterminate = 0;
|
|
237
|
+
let prevIndex = Infinity;
|
|
238
|
+
function getCurrentIndex(keysLength) {
|
|
239
|
+
if (keysLength === 0) {
|
|
240
|
+
return Infinity;
|
|
241
|
+
}
|
|
242
|
+
if (prevIndex >= 0 && prevIndex < keysLength) {
|
|
243
|
+
return prevIndex;
|
|
244
|
+
}
|
|
245
|
+
return Math.floor(keysLength / 2);
|
|
246
|
+
}
|
|
247
|
+
function getTopLevelNodeKeys(editor) {
|
|
248
|
+
return editor.getEditorState().read(() => lexical.$getRoot().getChildrenKeys());
|
|
249
|
+
}
|
|
250
|
+
function getCollapsedMargins(elem) {
|
|
251
|
+
const getMargin = (element, margin) => element ? parseFloat(window.getComputedStyle(element)[margin]) : 0;
|
|
252
|
+
const {
|
|
253
|
+
marginTop,
|
|
254
|
+
marginBottom
|
|
255
|
+
} = window.getComputedStyle(elem);
|
|
256
|
+
const prevElemSiblingMarginBottom = getMargin(elem.previousElementSibling, 'marginBottom');
|
|
257
|
+
const nextElemSiblingMarginTop = getMargin(elem.nextElementSibling, 'marginTop');
|
|
258
|
+
const collapsedTopMargin = Math.max(parseFloat(marginTop), prevElemSiblingMarginBottom);
|
|
259
|
+
const collapsedBottomMargin = Math.max(parseFloat(marginBottom), nextElemSiblingMarginTop);
|
|
260
|
+
return {
|
|
261
|
+
marginBottom: collapsedBottomMargin,
|
|
262
|
+
marginTop: collapsedTopMargin
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
function getBlockElement(anchorElem, editor, event, useEdgeAsDefault = false) {
|
|
266
|
+
const anchorElementRect = anchorElem.getBoundingClientRect();
|
|
267
|
+
const topLevelNodeKeys = getTopLevelNodeKeys(editor);
|
|
268
|
+
let blockElem = null;
|
|
269
|
+
editor.getEditorState().read(() => {
|
|
270
|
+
if (useEdgeAsDefault) {
|
|
271
|
+
const [firstNode, lastNode] = [editor.getElementByKey(topLevelNodeKeys[0]), editor.getElementByKey(topLevelNodeKeys[topLevelNodeKeys.length - 1])];
|
|
272
|
+
const [firstNodeRect, lastNodeRect] = [firstNode != null ? firstNode.getBoundingClientRect() : undefined, lastNode != null ? lastNode.getBoundingClientRect() : undefined];
|
|
273
|
+
if (firstNodeRect && lastNodeRect) {
|
|
274
|
+
const firstNodeZoom = lexicalUtils.calculateZoomLevel(firstNode);
|
|
275
|
+
const lastNodeZoom = lexicalUtils.calculateZoomLevel(lastNode);
|
|
276
|
+
if (event.y / firstNodeZoom < firstNodeRect.top) {
|
|
277
|
+
blockElem = firstNode;
|
|
278
|
+
} else if (event.y / lastNodeZoom > lastNodeRect.bottom) {
|
|
279
|
+
blockElem = lastNode;
|
|
280
|
+
}
|
|
281
|
+
if (blockElem) {
|
|
282
|
+
return;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
let index = getCurrentIndex(topLevelNodeKeys.length);
|
|
287
|
+
let direction = Indeterminate;
|
|
288
|
+
while (index >= 0 && index < topLevelNodeKeys.length) {
|
|
289
|
+
const key = topLevelNodeKeys[index];
|
|
290
|
+
const elem = editor.getElementByKey(key);
|
|
291
|
+
if (elem === null) {
|
|
292
|
+
break;
|
|
293
|
+
}
|
|
294
|
+
const zoom = lexicalUtils.calculateZoomLevel(elem);
|
|
295
|
+
const point = new Point(event.x / zoom, event.y / zoom);
|
|
296
|
+
const domRect = Rectangle.fromDOM(elem);
|
|
297
|
+
const {
|
|
298
|
+
marginTop,
|
|
299
|
+
marginBottom
|
|
300
|
+
} = getCollapsedMargins(elem);
|
|
301
|
+
const rect = domRect.generateNewRect({
|
|
302
|
+
bottom: domRect.bottom + marginBottom,
|
|
303
|
+
left: anchorElementRect.left,
|
|
304
|
+
right: anchorElementRect.right,
|
|
305
|
+
top: domRect.top - marginTop
|
|
306
|
+
});
|
|
307
|
+
const {
|
|
308
|
+
result,
|
|
309
|
+
reason: {
|
|
310
|
+
isOnTopSide,
|
|
311
|
+
isOnBottomSide
|
|
312
|
+
}
|
|
313
|
+
} = rect.contains(point);
|
|
314
|
+
if (result) {
|
|
315
|
+
blockElem = elem;
|
|
316
|
+
prevIndex = index;
|
|
317
|
+
break;
|
|
318
|
+
}
|
|
319
|
+
if (direction === Indeterminate) {
|
|
320
|
+
if (isOnTopSide) {
|
|
321
|
+
direction = Upward;
|
|
322
|
+
} else if (isOnBottomSide) {
|
|
323
|
+
direction = Downward;
|
|
324
|
+
} else {
|
|
325
|
+
// stop search block element
|
|
326
|
+
direction = Infinity;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
index += direction;
|
|
330
|
+
}
|
|
331
|
+
});
|
|
332
|
+
return blockElem;
|
|
333
|
+
}
|
|
334
|
+
function setMenuPosition(targetElem, floatingElem, anchorElem, zoomLevel) {
|
|
335
|
+
if (!targetElem) {
|
|
336
|
+
floatingElem.style.display = 'none';
|
|
337
|
+
return;
|
|
338
|
+
}
|
|
339
|
+
const targetRect = targetElem.getBoundingClientRect();
|
|
340
|
+
const targetStyle = window.getComputedStyle(targetElem);
|
|
341
|
+
const floatingElemRect = floatingElem.getBoundingClientRect();
|
|
342
|
+
const anchorElementRect = anchorElem.getBoundingClientRect();
|
|
343
|
+
|
|
344
|
+
// top left
|
|
345
|
+
let targetCalculateHeight = parseInt(targetStyle.lineHeight, 10);
|
|
346
|
+
if (isNaN(targetCalculateHeight)) {
|
|
347
|
+
// middle
|
|
348
|
+
targetCalculateHeight = targetRect.bottom - targetRect.top;
|
|
349
|
+
}
|
|
350
|
+
const top = (targetRect.top + (targetCalculateHeight - (floatingElemRect.height || targetCalculateHeight)) / 2 - anchorElementRect.top + anchorElem.scrollTop) / zoomLevel;
|
|
351
|
+
const left = SPACE;
|
|
352
|
+
floatingElem.style.display = 'flex';
|
|
353
|
+
floatingElem.style.opacity = '1';
|
|
354
|
+
floatingElem.style.transform = `translate(${left}px, ${top}px)`;
|
|
355
|
+
}
|
|
356
|
+
function setDragImage(dataTransfer, draggableBlockElem) {
|
|
357
|
+
const {
|
|
358
|
+
transform
|
|
359
|
+
} = draggableBlockElem.style;
|
|
360
|
+
|
|
361
|
+
// Remove dragImage borders
|
|
362
|
+
draggableBlockElem.style.transform = 'translateZ(0)';
|
|
363
|
+
dataTransfer.setDragImage(draggableBlockElem, 0, 0);
|
|
364
|
+
setTimeout(() => {
|
|
365
|
+
draggableBlockElem.style.transform = transform;
|
|
366
|
+
});
|
|
367
|
+
}
|
|
368
|
+
function setTargetLine(targetLineElem, targetBlockElem, mouseY, anchorElem) {
|
|
369
|
+
const {
|
|
370
|
+
top: targetBlockElemTop,
|
|
371
|
+
height: targetBlockElemHeight
|
|
372
|
+
} = targetBlockElem.getBoundingClientRect();
|
|
373
|
+
const {
|
|
374
|
+
top: anchorTop,
|
|
375
|
+
width: anchorWidth
|
|
376
|
+
} = anchorElem.getBoundingClientRect();
|
|
377
|
+
const {
|
|
378
|
+
marginTop,
|
|
379
|
+
marginBottom
|
|
380
|
+
} = getCollapsedMargins(targetBlockElem);
|
|
381
|
+
let lineTop = targetBlockElemTop;
|
|
382
|
+
if (mouseY >= targetBlockElemTop) {
|
|
383
|
+
lineTop += targetBlockElemHeight + marginBottom / 2;
|
|
384
|
+
} else {
|
|
385
|
+
lineTop -= marginTop / 2;
|
|
386
|
+
}
|
|
387
|
+
const top = lineTop - anchorTop - TARGET_LINE_HALF_HEIGHT + anchorElem.scrollTop;
|
|
388
|
+
const left = TEXT_BOX_HORIZONTAL_PADDING - SPACE;
|
|
389
|
+
targetLineElem.style.transform = `translate(${left}px, ${top}px)`;
|
|
390
|
+
targetLineElem.style.width = `${anchorWidth - (TEXT_BOX_HORIZONTAL_PADDING - SPACE) * 2}px`;
|
|
391
|
+
targetLineElem.style.opacity = '.4';
|
|
392
|
+
}
|
|
393
|
+
function hideTargetLine(targetLineElem) {
|
|
394
|
+
if (targetLineElem) {
|
|
395
|
+
targetLineElem.style.opacity = '0';
|
|
396
|
+
targetLineElem.style.transform = 'translate(-10000px, -10000px)';
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
function useDraggableBlockMenu(editor, anchorElem, menuRef, targetLineRef, isEditable, menuComponent, targetLineComponent, isOnMenu, onElementChanged) {
|
|
400
|
+
const scrollerElem = anchorElem.parentElement;
|
|
401
|
+
const isDraggingBlockRef = react.useRef(false);
|
|
402
|
+
const [draggableBlockElem, setDraggableBlockElemState] = react.useState(null);
|
|
403
|
+
const setDraggableBlockElem = react.useCallback(elem => {
|
|
404
|
+
setDraggableBlockElemState(elem);
|
|
405
|
+
if (onElementChanged) {
|
|
406
|
+
onElementChanged(elem);
|
|
407
|
+
}
|
|
408
|
+
}, [onElementChanged]);
|
|
409
|
+
react.useEffect(() => {
|
|
410
|
+
function onMouseMove(event) {
|
|
411
|
+
const target = event.target;
|
|
412
|
+
if (!lexicalUtils.isHTMLElement(target)) {
|
|
413
|
+
setDraggableBlockElem(null);
|
|
414
|
+
return;
|
|
415
|
+
}
|
|
416
|
+
if (isOnMenu(target)) {
|
|
417
|
+
return;
|
|
418
|
+
}
|
|
419
|
+
const _draggableBlockElem = getBlockElement(anchorElem, editor, event);
|
|
420
|
+
setDraggableBlockElem(_draggableBlockElem);
|
|
421
|
+
}
|
|
422
|
+
function onMouseLeave() {
|
|
423
|
+
setDraggableBlockElem(null);
|
|
424
|
+
}
|
|
425
|
+
if (scrollerElem != null) {
|
|
426
|
+
scrollerElem.addEventListener('mousemove', onMouseMove);
|
|
427
|
+
scrollerElem.addEventListener('mouseleave', onMouseLeave);
|
|
428
|
+
}
|
|
429
|
+
return () => {
|
|
430
|
+
if (scrollerElem != null) {
|
|
431
|
+
scrollerElem.removeEventListener('mousemove', onMouseMove);
|
|
432
|
+
scrollerElem.removeEventListener('mouseleave', onMouseLeave);
|
|
433
|
+
}
|
|
434
|
+
};
|
|
435
|
+
}, [scrollerElem, anchorElem, editor, isOnMenu, setDraggableBlockElem]);
|
|
436
|
+
react.useEffect(() => {
|
|
437
|
+
const zoomLevel = lexicalUtils.calculateZoomLevel(document.getElementsByClassName('ContentEditable__root')[0], true);
|
|
438
|
+
if (menuRef.current) {
|
|
439
|
+
setMenuPosition(draggableBlockElem, menuRef.current, anchorElem, zoomLevel);
|
|
440
|
+
}
|
|
441
|
+
}, [anchorElem, draggableBlockElem, menuRef]);
|
|
442
|
+
react.useEffect(() => {
|
|
443
|
+
function onDragover(event) {
|
|
444
|
+
if (!isDraggingBlockRef.current) {
|
|
445
|
+
return false;
|
|
446
|
+
}
|
|
447
|
+
const [isFileTransfer] = lexicalRichText.eventFiles(event);
|
|
448
|
+
if (isFileTransfer) {
|
|
449
|
+
return false;
|
|
450
|
+
}
|
|
451
|
+
const {
|
|
452
|
+
pageY,
|
|
453
|
+
target
|
|
454
|
+
} = event;
|
|
455
|
+
if (!lexicalUtils.isHTMLElement(target)) {
|
|
456
|
+
return false;
|
|
457
|
+
}
|
|
458
|
+
const targetBlockElem = getBlockElement(anchorElem, editor, event, true);
|
|
459
|
+
const targetLineElem = targetLineRef.current;
|
|
460
|
+
if (targetBlockElem === null || targetLineElem === null) {
|
|
461
|
+
return false;
|
|
462
|
+
}
|
|
463
|
+
setTargetLine(targetLineElem, targetBlockElem, pageY / lexicalUtils.calculateZoomLevel(target), anchorElem);
|
|
464
|
+
// Prevent default event to be able to trigger onDrop events
|
|
465
|
+
event.preventDefault();
|
|
466
|
+
return true;
|
|
467
|
+
}
|
|
468
|
+
function $onDrop(event) {
|
|
469
|
+
if (!isDraggingBlockRef.current) {
|
|
470
|
+
return false;
|
|
471
|
+
}
|
|
472
|
+
const [isFileTransfer] = lexicalRichText.eventFiles(event);
|
|
473
|
+
if (isFileTransfer) {
|
|
474
|
+
return false;
|
|
475
|
+
}
|
|
476
|
+
const {
|
|
477
|
+
target,
|
|
478
|
+
dataTransfer,
|
|
479
|
+
pageY
|
|
480
|
+
} = event;
|
|
481
|
+
const dragData = dataTransfer != null ? dataTransfer.getData(DRAG_DATA_FORMAT) : '';
|
|
482
|
+
const draggedNode = lexical.$getNodeByKey(dragData);
|
|
483
|
+
if (!draggedNode) {
|
|
484
|
+
return false;
|
|
485
|
+
}
|
|
486
|
+
if (!lexicalUtils.isHTMLElement(target)) {
|
|
487
|
+
return false;
|
|
488
|
+
}
|
|
489
|
+
const targetBlockElem = getBlockElement(anchorElem, editor, event, true);
|
|
490
|
+
if (!targetBlockElem) {
|
|
491
|
+
return false;
|
|
492
|
+
}
|
|
493
|
+
const targetNode = lexical.$getNearestNodeFromDOMNode(targetBlockElem);
|
|
494
|
+
if (!targetNode) {
|
|
495
|
+
return false;
|
|
496
|
+
}
|
|
497
|
+
if (targetNode === draggedNode) {
|
|
498
|
+
// Firefox-specific fix: Even when no move occurs, restore focus to ensure cursor visibility
|
|
499
|
+
if (IS_FIREFOX) {
|
|
500
|
+
editor.focus();
|
|
501
|
+
}
|
|
502
|
+
return true;
|
|
503
|
+
}
|
|
504
|
+
const targetBlockElemTop = targetBlockElem.getBoundingClientRect().top;
|
|
505
|
+
if (pageY / lexicalUtils.calculateZoomLevel(target) >= targetBlockElemTop) {
|
|
506
|
+
targetNode.insertAfter(draggedNode);
|
|
507
|
+
} else {
|
|
508
|
+
targetNode.insertBefore(draggedNode);
|
|
509
|
+
}
|
|
510
|
+
setDraggableBlockElem(null);
|
|
511
|
+
|
|
512
|
+
// Firefox-specific fix: Use editor.focus() after drop to properly restore
|
|
513
|
+
// both focus and selection. This ensures cursor visibility immediately.
|
|
514
|
+
if (IS_FIREFOX) {
|
|
515
|
+
// Using $onUpdate ensures this happens after the current update cycle finishes
|
|
516
|
+
lexical.$onUpdate(() => {
|
|
517
|
+
editor.focus();
|
|
518
|
+
});
|
|
519
|
+
}
|
|
520
|
+
return true;
|
|
521
|
+
}
|
|
522
|
+
return lexicalUtils.mergeRegister(editor.registerCommand(lexical.DRAGOVER_COMMAND, event => {
|
|
523
|
+
return onDragover(event);
|
|
524
|
+
}, lexical.COMMAND_PRIORITY_LOW), editor.registerCommand(lexical.DROP_COMMAND, event => {
|
|
525
|
+
return $onDrop(event);
|
|
526
|
+
}, lexical.COMMAND_PRIORITY_HIGH));
|
|
527
|
+
}, [anchorElem, editor, targetLineRef, setDraggableBlockElem]);
|
|
528
|
+
|
|
529
|
+
// Firefox-specific: Prevent blur when clicking on drag handle to maintain cursor visibility.
|
|
530
|
+
// Firefox fires blur before dragstart, causing focus loss. We detect this by checking if
|
|
531
|
+
// the blur's relatedTarget is on the menu using isOnMenu, then restore focus synchronously.
|
|
532
|
+
react.useEffect(() => {
|
|
533
|
+
if (!IS_FIREFOX || !isEditable) {
|
|
534
|
+
return;
|
|
535
|
+
}
|
|
536
|
+
return lexicalUtils.mergeRegister(editor.registerRootListener((rootElement, prevRootElement) => {
|
|
537
|
+
function onBlur(event) {
|
|
538
|
+
const relatedTarget = event.relatedTarget;
|
|
539
|
+
if (relatedTarget && relatedTarget instanceof HTMLElement && isOnMenu(relatedTarget)) {
|
|
540
|
+
// Blur is caused by clicking on drag handle - restore focus immediately
|
|
541
|
+
// to prevent cursor from disappearing. This must be synchronous to work.
|
|
542
|
+
if (rootElement) {
|
|
543
|
+
rootElement.focus({
|
|
544
|
+
preventScroll: true
|
|
545
|
+
});
|
|
546
|
+
// Force selection update to ensure cursor is visible
|
|
547
|
+
editor.update(() => {
|
|
548
|
+
const selection = lexical.$getSelection();
|
|
549
|
+
if (selection !== null && !selection.dirty) {
|
|
550
|
+
selection.dirty = true;
|
|
551
|
+
}
|
|
552
|
+
});
|
|
553
|
+
}
|
|
554
|
+
// Prevent the event from propagating to LexicalEvents handler
|
|
555
|
+
event.stopImmediatePropagation();
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
if (rootElement) {
|
|
559
|
+
rootElement.addEventListener('blur', onBlur, true);
|
|
560
|
+
}
|
|
561
|
+
if (prevRootElement) {
|
|
562
|
+
prevRootElement.removeEventListener('blur', onBlur, true);
|
|
563
|
+
}
|
|
564
|
+
}),
|
|
565
|
+
// Intercept BLUR_COMMAND if focus is on the menu (fallback in case event propagation wasn't stopped)
|
|
566
|
+
editor.registerCommand(lexical.BLUR_COMMAND, () => {
|
|
567
|
+
const rootElement = editor.getRootElement();
|
|
568
|
+
const activeElement = document.activeElement;
|
|
569
|
+
if (rootElement && activeElement && activeElement instanceof HTMLElement && isOnMenu(activeElement)) {
|
|
570
|
+
// Focus is on menu - restore to root and prevent blur command
|
|
571
|
+
rootElement.focus({
|
|
572
|
+
preventScroll: true
|
|
573
|
+
});
|
|
574
|
+
editor.update(() => {
|
|
575
|
+
const selection = lexical.$getSelection();
|
|
576
|
+
if (selection !== null && !selection.dirty) {
|
|
577
|
+
selection.dirty = true;
|
|
578
|
+
}
|
|
579
|
+
});
|
|
580
|
+
return true; // Prevent command from propagating
|
|
581
|
+
}
|
|
582
|
+
return false;
|
|
583
|
+
}, lexical.COMMAND_PRIORITY_HIGH));
|
|
584
|
+
}, [editor, isEditable, isOnMenu]);
|
|
585
|
+
function onDragStart(event) {
|
|
586
|
+
const dataTransfer = event.dataTransfer;
|
|
587
|
+
if (!dataTransfer || !draggableBlockElem) {
|
|
588
|
+
return;
|
|
589
|
+
}
|
|
590
|
+
setDragImage(dataTransfer, draggableBlockElem);
|
|
591
|
+
let nodeKey = '';
|
|
592
|
+
editor.update(() => {
|
|
593
|
+
const node = lexical.$getNearestNodeFromDOMNode(draggableBlockElem);
|
|
594
|
+
if (node) {
|
|
595
|
+
nodeKey = node.getKey();
|
|
596
|
+
}
|
|
597
|
+
});
|
|
598
|
+
isDraggingBlockRef.current = true;
|
|
599
|
+
dataTransfer.setData(DRAG_DATA_FORMAT, nodeKey);
|
|
600
|
+
|
|
601
|
+
// Firefox-specific: Restore focus synchronously after drag starts to prevent cursor loss.
|
|
602
|
+
// The blur handler should have already restored focus, but we do it here as a fallback
|
|
603
|
+
// and to ensure selection is properly maintained during drag.
|
|
604
|
+
if (IS_FIREFOX) {
|
|
605
|
+
const rootElement = editor.getRootElement();
|
|
606
|
+
if (rootElement !== null && document.activeElement !== rootElement) {
|
|
607
|
+
// Restore focus synchronously - don't use requestAnimationFrame as blur already happened
|
|
608
|
+
// and we need immediate focus restoration to maintain cursor visibility
|
|
609
|
+
rootElement.focus({
|
|
610
|
+
preventScroll: true
|
|
611
|
+
});
|
|
612
|
+
// Force selection update to ensure cursor is visible
|
|
613
|
+
editor.update(() => {
|
|
614
|
+
const selection = lexical.$getSelection();
|
|
615
|
+
if (selection !== null && !selection.dirty) {
|
|
616
|
+
selection.dirty = true;
|
|
617
|
+
}
|
|
618
|
+
});
|
|
619
|
+
}
|
|
620
|
+
}
|
|
621
|
+
}
|
|
622
|
+
function onDragEnd() {
|
|
623
|
+
isDraggingBlockRef.current = false;
|
|
624
|
+
hideTargetLine(targetLineRef.current);
|
|
625
|
+
|
|
626
|
+
// Firefox-specific fix: Use editor.focus() to properly restore both focus and
|
|
627
|
+
// selection after drag ends. This ensures cursor visibility immediately.
|
|
628
|
+
if (IS_FIREFOX) {
|
|
629
|
+
// editor.focus() handles both focus restoration and selection update properly
|
|
630
|
+
editor.focus();
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
return /*#__PURE__*/reactDom.createPortal(/*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
|
|
634
|
+
children: [/*#__PURE__*/jsxRuntime.jsx("div", {
|
|
635
|
+
draggable: true,
|
|
636
|
+
onDragStart: onDragStart,
|
|
637
|
+
onDragEnd: onDragEnd,
|
|
638
|
+
children: isEditable && menuComponent
|
|
639
|
+
}), targetLineComponent]
|
|
640
|
+
}), anchorElem);
|
|
641
|
+
}
|
|
642
|
+
function DraggableBlockPlugin_EXPERIMENTAL({
|
|
643
|
+
anchorElem = document.body,
|
|
644
|
+
menuRef,
|
|
645
|
+
targetLineRef,
|
|
646
|
+
menuComponent,
|
|
647
|
+
targetLineComponent,
|
|
648
|
+
isOnMenu,
|
|
649
|
+
onElementChanged
|
|
650
|
+
}) {
|
|
651
|
+
const [editor] = LexicalComposerContext.useLexicalComposerContext();
|
|
652
|
+
return useDraggableBlockMenu(editor, anchorElem, menuRef, targetLineRef, editor._editable, menuComponent, targetLineComponent, isOnMenu, onElementChanged);
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
exports.DraggableBlockPlugin_EXPERIMENTAL = DraggableBlockPlugin_EXPERIMENTAL;
|