@shelamkoff/rector 1.0.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/LICENSE +21 -0
- package/NOTICE +17 -0
- package/README.md +23 -0
- package/THIRD_PARTY_LICENSES.txt +298 -0
- package/dist/I18n.d.ts +1 -0
- package/dist/core/Block.d.ts +110 -0
- package/dist/core/Block.js +390 -0
- package/dist/core/BlockAnimator.d.ts +39 -0
- package/dist/core/BlockAnimator.js +106 -0
- package/dist/core/BlockManager.d.ts +163 -0
- package/dist/core/BlockManager.js +640 -0
- package/dist/core/BlockOperations.d.ts +67 -0
- package/dist/core/BlockOperations.js +238 -0
- package/dist/core/ChangeNotifier.d.ts +15 -0
- package/dist/core/ChangeNotifier.js +55 -0
- package/dist/core/CommandDispatcher.d.ts +52 -0
- package/dist/core/CommandDispatcher.js +208 -0
- package/dist/core/CrossBlockSelection.d.ts +30 -0
- package/dist/core/CrossBlockSelection.js +74 -0
- package/dist/core/Diagnostics.d.ts +23 -0
- package/dist/core/Diagnostics.js +62 -0
- package/dist/core/DocumentSchema.d.ts +29 -0
- package/dist/core/DocumentSchema.js +147 -0
- package/dist/core/DocumentSnapshotStore.d.ts +34 -0
- package/dist/core/DocumentSnapshotStore.js +153 -0
- package/dist/core/DragManager.d.ts +17 -0
- package/dist/core/DragManager.js +223 -0
- package/dist/core/EditorFacade.d.ts +154 -0
- package/dist/core/EditorFacade.js +361 -0
- package/dist/core/EditorHolderOwnership.d.ts +12 -0
- package/dist/core/EditorHolderOwnership.js +28 -0
- package/dist/core/I18n.d.ts +147 -0
- package/dist/core/I18n.js +296 -0
- package/dist/core/InlinePatternMatcher.d.ts +26 -0
- package/dist/core/InlinePatternMatcher.js +267 -0
- package/dist/core/InlinePluginRegistry.d.ts +55 -0
- package/dist/core/InlinePluginRegistry.js +128 -0
- package/dist/core/KeyboardManager.d.ts +17 -0
- package/dist/core/KeyboardManager.js +231 -0
- package/dist/core/LifecycleScope.d.ts +19 -0
- package/dist/core/LifecycleScope.js +41 -0
- package/dist/core/MouseSelectionManager.d.ts +30 -0
- package/dist/core/MouseSelectionManager.js +307 -0
- package/dist/core/PluginOwnership.d.ts +9 -0
- package/dist/core/PluginOwnership.js +40 -0
- package/dist/core/PopupManager.d.ts +50 -0
- package/dist/core/PopupManager.js +183 -0
- package/dist/core/PreservedBlockPlugin.d.ts +11 -0
- package/dist/core/PreservedBlockPlugin.js +42 -0
- package/dist/core/PublicEditorApi.d.ts +82 -0
- package/dist/core/PublicEditorApi.js +158 -0
- package/dist/core/SelectionManager.d.ts +50 -0
- package/dist/core/SelectionManager.js +205 -0
- package/dist/core/ShortcutRegistry.d.ts +29 -0
- package/dist/core/ShortcutRegistry.js +106 -0
- package/dist/core/SlashCommands.d.ts +34 -0
- package/dist/core/SlashCommands.js +483 -0
- package/dist/core/StyleInjector.d.ts +1 -0
- package/dist/core/StyleInjector.js +1 -0
- package/dist/core/Tooltip.d.ts +17 -0
- package/dist/core/Tooltip.js +60 -0
- package/dist/core/TriggerManager.d.ts +17 -0
- package/dist/core/TriggerManager.js +159 -0
- package/dist/core/TypeSelector.d.ts +31 -0
- package/dist/core/TypeSelector.js +464 -0
- package/dist/core/UndoManager.d.ts +72 -0
- package/dist/core/UndoManager.js +383 -0
- package/dist/core/block-settings-menu/BlockActions.d.ts +81 -0
- package/dist/core/block-settings-menu/BlockActions.js +233 -0
- package/dist/core/block-settings-menu/BlockSettingsMenu.d.ts +46 -0
- package/dist/core/block-settings-menu/BlockSettingsMenu.js +205 -0
- package/dist/core/block-settings-menu/MenuBuilder.d.ts +43 -0
- package/dist/core/block-settings-menu/MenuBuilder.js +203 -0
- package/dist/core/block-settings-menu/MenuPositioner.d.ts +22 -0
- package/dist/core/block-settings-menu/MenuPositioner.js +79 -0
- package/dist/core/clipboard/Clipboard.d.ts +47 -0
- package/dist/core/clipboard/Clipboard.js +653 -0
- package/dist/core/clipboard/CrossBlockEditor.d.ts +43 -0
- package/dist/core/clipboard/CrossBlockEditor.js +198 -0
- package/dist/core/clipboard/PasteRouter.d.ts +27 -0
- package/dist/core/clipboard/PasteRouter.js +86 -0
- package/dist/core/clipboard/pasteInsert.d.ts +35 -0
- package/dist/core/clipboard/pasteInsert.js +215 -0
- package/dist/core/clipboard/pasteUtils.d.ts +25 -0
- package/dist/core/clipboard/pasteUtils.js +98 -0
- package/dist/core/config.d.ts +77 -0
- package/dist/core/config.js +100 -0
- package/dist/core/constants.d.ts +23 -0
- package/dist/core/constants.js +30 -0
- package/dist/core/crossBlockConvert.d.ts +38 -0
- package/dist/core/crossBlockConvert.js +253 -0
- package/dist/core/dom.d.ts +35 -0
- package/dist/core/dom.js +65 -0
- package/dist/core/editorEvents.d.ts +89 -0
- package/dist/core/editorEvents.js +60 -0
- package/dist/core/hydrateInlinePlugins.d.ts +9 -0
- package/dist/core/hydrateInlinePlugins.js +36 -0
- package/dist/core/icons.d.ts +10 -0
- package/dist/core/icons.js +21 -0
- package/dist/core/index.d.ts +59 -0
- package/dist/core/index.js +703 -0
- package/dist/core/inline-toolbar/ActionsPanel.d.ts +61 -0
- package/dist/core/inline-toolbar/ActionsPanel.js +132 -0
- package/dist/core/inline-toolbar/InlinePositioner.d.ts +20 -0
- package/dist/core/inline-toolbar/InlinePositioner.js +63 -0
- package/dist/core/inline-toolbar/InlineToolbar.d.ts +45 -0
- package/dist/core/inline-toolbar/InlineToolbar.js +456 -0
- package/dist/core/inline-toolbar/PluginControlsSlot.d.ts +52 -0
- package/dist/core/inline-toolbar/PluginControlsSlot.js +118 -0
- package/dist/core/inline-toolbar/SelectionTracker.d.ts +63 -0
- package/dist/core/inline-toolbar/SelectionTracker.js +173 -0
- package/dist/core/inlinePluginInsert.d.ts +13 -0
- package/dist/core/inlinePluginInsert.js +56 -0
- package/dist/core/locale/en.d.ts +35 -0
- package/dist/core/locale/en.js +37 -0
- package/dist/core/locale/ru.d.ts +35 -0
- package/dist/core/locale/ru.js +37 -0
- package/dist/core/menuKeyboardNav.d.ts +15 -0
- package/dist/core/menuKeyboardNav.js +52 -0
- package/dist/core/sanitize.d.ts +2 -0
- package/dist/core/sanitize.js +6 -0
- package/dist/core/splitConvert.d.ts +46 -0
- package/dist/core/splitConvert.js +190 -0
- package/dist/core/textOffset.d.ts +46 -0
- package/dist/core/textOffset.js +180 -0
- package/dist/core/themes/dark.css +30 -0
- package/dist/core/themes/light.css +33 -0
- package/dist/core/themes/variables.css +1170 -0
- package/dist/core/toolbar/OffcanvasRoot.d.ts +37 -0
- package/dist/core/toolbar/OffcanvasRoot.js +127 -0
- package/dist/core/toolbar/Toolbar.d.ts +70 -0
- package/dist/core/toolbar/Toolbar.js +432 -0
- package/dist/core/toolbar/ToolbarPositioner.d.ts +60 -0
- package/dist/core/toolbar/ToolbarPositioner.js +188 -0
- package/dist/core/toolbar/ToolboxBuilder.d.ts +44 -0
- package/dist/core/toolbar/ToolboxBuilder.js +260 -0
- package/dist/core/types.d.ts +747 -0
- package/dist/core/uid.d.ts +6 -0
- package/dist/core/uid.js +29 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1 -0
- package/dist/inline-plugins/README.md +35 -0
- package/dist/inline-plugins/README.ru.md +35 -0
- package/dist/inline-plugins/color/README.md +61 -0
- package/dist/inline-plugins/color/README.ru.md +61 -0
- package/dist/inline-plugins/color.d.ts +8 -0
- package/dist/inline-plugins/color.js +184 -0
- package/dist/inline-plugins/locale/en.d.ts +7 -0
- package/dist/inline-plugins/locale/en.js +6 -0
- package/dist/inline-plugins/locale/ru.d.ts +7 -0
- package/dist/inline-plugins/locale/ru.js +6 -0
- package/dist/inline-plugins/mention/README.md +97 -0
- package/dist/inline-plugins/mention/README.ru.md +97 -0
- package/dist/inline-plugins/mention/index.d.ts +110 -0
- package/dist/inline-plugins/mention/index.js +1897 -0
- package/dist/inline-plugins/mention/styles.css +183 -0
- package/dist/inline-plugins/mention/widget.d.ts +16 -0
- package/dist/inline-plugins/mention/widget.js +75 -0
- package/dist/inline-tools/align.d.ts +14 -0
- package/dist/inline-tools/align.js +120 -0
- package/dist/inline-tools/bold.d.ts +8 -0
- package/dist/inline-tools/bold.js +12 -0
- package/dist/inline-tools/caseTransform.d.ts +8 -0
- package/dist/inline-tools/caseTransform.js +87 -0
- package/dist/inline-tools/clearFormatting.d.ts +8 -0
- package/dist/inline-tools/clearFormatting.js +74 -0
- package/dist/inline-tools/code.d.ts +8 -0
- package/dist/inline-tools/code.js +12 -0
- package/dist/inline-tools/colorPicker.d.ts +7 -0
- package/dist/inline-tools/colorPicker.js +271 -0
- package/dist/inline-tools/defaults.d.ts +10 -0
- package/dist/inline-tools/defaults.js +57 -0
- package/dist/inline-tools/fontSize.d.ts +7 -0
- package/dist/inline-tools/fontSize.js +524 -0
- package/dist/inline-tools/italic.d.ts +8 -0
- package/dist/inline-tools/italic.js +12 -0
- package/dist/inline-tools/link.d.ts +12 -0
- package/dist/inline-tools/link.js +251 -0
- package/dist/inline-tools/marker.d.ts +8 -0
- package/dist/inline-tools/marker.js +12 -0
- package/dist/inline-tools/scriptTool.d.ts +11 -0
- package/dist/inline-tools/scriptTool.js +149 -0
- package/dist/inline-tools/strikethrough.d.ts +8 -0
- package/dist/inline-tools/strikethrough.js +12 -0
- package/dist/inline-tools/utils.d.ts +220 -0
- package/dist/inline-tools/utils.js +992 -0
- package/dist/locale/en.d.ts +311 -0
- package/dist/locale/en.js +52 -0
- package/dist/locale/ru.d.ts +315 -0
- package/dist/locale/ru.js +52 -0
- package/dist/plugins/BlockPluginAbstract.d.ts +82 -0
- package/dist/plugins/BlockPluginAbstract.js +111 -0
- package/dist/plugins/README.md +44 -0
- package/dist/plugins/README.ru.md +40 -0
- package/dist/plugins/async.d.ts +35 -0
- package/dist/plugins/async.js +79 -0
- package/dist/plugins/attaches/README.md +86 -0
- package/dist/plugins/attaches/README.ru.md +87 -0
- package/dist/plugins/attaches/attaches.css +374 -0
- package/dist/plugins/attaches/index.d.ts +133 -0
- package/dist/plugins/attaches/index.js +921 -0
- package/dist/plugins/attaches/locale/en.d.ts +23 -0
- package/dist/plugins/attaches/locale/en.js +19 -0
- package/dist/plugins/attaches/locale/keys.d.ts +5 -0
- package/dist/plugins/attaches/locale/ru.d.ts +25 -0
- package/dist/plugins/attaches/locale/ru.js +19 -0
- package/dist/plugins/carousel/README.md +108 -0
- package/dist/plugins/carousel/README.ru.md +109 -0
- package/dist/plugins/carousel/carousel.css +198 -0
- package/dist/plugins/carousel/icons.d.ts +12 -0
- package/dist/plugins/carousel/icons.js +13 -0
- package/dist/plugins/carousel/index.d.ts +137 -0
- package/dist/plugins/carousel/index.js +859 -0
- package/dist/plugins/carousel/locale/en.d.ts +41 -0
- package/dist/plugins/carousel/locale/en.js +40 -0
- package/dist/plugins/carousel/locale/keys.d.ts +2 -0
- package/dist/plugins/carousel/locale/ru.d.ts +41 -0
- package/dist/plugins/carousel/locale/ru.js +40 -0
- package/dist/plugins/carousel/state.d.ts +29 -0
- package/dist/plugins/carousel/state.js +42 -0
- package/dist/plugins/checklist/README.md +54 -0
- package/dist/plugins/checklist/README.ru.md +55 -0
- package/dist/plugins/checklist/checklist.css +80 -0
- package/dist/plugins/checklist/index.d.ts +75 -0
- package/dist/plugins/checklist/index.js +407 -0
- package/dist/plugins/checklist/locale/en.d.ts +5 -0
- package/dist/plugins/checklist/locale/en.js +4 -0
- package/dist/plugins/checklist/locale/keys.d.ts +5 -0
- package/dist/plugins/checklist/locale/ru.d.ts +5 -0
- package/dist/plugins/checklist/locale/ru.js +4 -0
- package/dist/plugins/checklist/mapTextFields.d.ts +1 -0
- package/dist/plugins/checklist/mapTextFields.js +1 -0
- package/dist/plugins/code/README.md +59 -0
- package/dist/plugins/code/README.ru.md +60 -0
- package/dist/plugins/code/code.css +360 -0
- package/dist/plugins/code/index.d.ts +109 -0
- package/dist/plugins/code/index.js +1012 -0
- package/dist/plugins/code/locale/en.d.ts +11 -0
- package/dist/plugins/code/locale/en.js +10 -0
- package/dist/plugins/code/locale/keys.d.ts +5 -0
- package/dist/plugins/code/locale/ru.d.ts +11 -0
- package/dist/plugins/code/locale/ru.js +10 -0
- package/dist/plugins/columns/README.md +55 -0
- package/dist/plugins/columns/README.ru.md +56 -0
- package/dist/plugins/columns/columns.css +103 -0
- package/dist/plugins/columns/index.d.ts +58 -0
- package/dist/plugins/columns/index.js +236 -0
- package/dist/plugins/columns/locale/en.d.ts +6 -0
- package/dist/plugins/columns/locale/en.js +5 -0
- package/dist/plugins/columns/locale/keys.d.ts +5 -0
- package/dist/plugins/columns/locale/ru.d.ts +6 -0
- package/dist/plugins/columns/locale/ru.js +5 -0
- package/dist/plugins/delimiter/README.md +48 -0
- package/dist/plugins/delimiter/README.ru.md +49 -0
- package/dist/plugins/delimiter/delimiter.css +22 -0
- package/dist/plugins/delimiter/index.d.ts +38 -0
- package/dist/plugins/delimiter/index.js +69 -0
- package/dist/plugins/delimiter/locale/en.d.ts +4 -0
- package/dist/plugins/delimiter/locale/en.js +3 -0
- package/dist/plugins/delimiter/locale/keys.d.ts +5 -0
- package/dist/plugins/delimiter/locale/ru.d.ts +4 -0
- package/dist/plugins/delimiter/locale/ru.js +3 -0
- package/dist/plugins/embed/README.md +81 -0
- package/dist/plugins/embed/README.ru.md +82 -0
- package/dist/plugins/embed/embed.css +558 -0
- package/dist/plugins/embed/index.d.ts +271 -0
- package/dist/plugins/embed/index.js +967 -0
- package/dist/plugins/embed/locale/en.d.ts +20 -0
- package/dist/plugins/embed/locale/en.js +19 -0
- package/dist/plugins/embed/locale/keys.d.ts +5 -0
- package/dist/plugins/embed/locale/ru.d.ts +20 -0
- package/dist/plugins/embed/locale/ru.js +19 -0
- package/dist/plugins/embed/player.d.ts +1 -0
- package/dist/plugins/embed/player.js +1 -0
- package/dist/plugins/gallery/README.md +92 -0
- package/dist/plugins/gallery/README.ru.md +93 -0
- package/dist/plugins/gallery/css.d.ts +52 -0
- package/dist/plugins/gallery/css.js +67 -0
- package/dist/plugins/gallery/gallery.css +860 -0
- package/dist/plugins/gallery/icons.d.ts +13 -0
- package/dist/plugins/gallery/icons.js +45 -0
- package/dist/plugins/gallery/index.d.ts +126 -0
- package/dist/plugins/gallery/index.js +355 -0
- package/dist/plugins/gallery/layout.d.ts +35 -0
- package/dist/plugins/gallery/layout.js +79 -0
- package/dist/plugins/gallery/locale/en.d.ts +36 -0
- package/dist/plugins/gallery/locale/en.js +35 -0
- package/dist/plugins/gallery/locale/keys.d.ts +5 -0
- package/dist/plugins/gallery/locale/ru.d.ts +36 -0
- package/dist/plugins/gallery/locale/ru.js +35 -0
- package/dist/plugins/gallery/settings.d.ts +25 -0
- package/dist/plugins/gallery/settings.js +199 -0
- package/dist/plugins/gallery/slot.d.ts +73 -0
- package/dist/plugins/gallery/slot.js +260 -0
- package/dist/plugins/gallery/state.d.ts +67 -0
- package/dist/plugins/gallery/state.js +133 -0
- package/dist/plugins/gallery/styles.d.ts +10 -0
- package/dist/plugins/gallery/styles.js +24 -0
- package/dist/plugins/gallery/uploader.d.ts +31 -0
- package/dist/plugins/gallery/uploader.js +111 -0
- package/dist/plugins/gallery/view-empty.d.ts +41 -0
- package/dist/plugins/gallery/view-empty.js +56 -0
- package/dist/plugins/gallery/view-filled.d.ts +55 -0
- package/dist/plugins/gallery/view-filled.js +353 -0
- package/dist/plugins/heading/HeadingLevelSelect.d.ts +16 -0
- package/dist/plugins/heading/HeadingLevelSelect.js +183 -0
- package/dist/plugins/heading/README.md +58 -0
- package/dist/plugins/heading/README.ru.md +59 -0
- package/dist/plugins/heading/heading.css +76 -0
- package/dist/plugins/heading/index.d.ts +124 -0
- package/dist/plugins/heading/index.js +273 -0
- package/dist/plugins/heading/locale/en.d.ts +11 -0
- package/dist/plugins/heading/locale/en.js +10 -0
- package/dist/plugins/heading/locale/keys.d.ts +5 -0
- package/dist/plugins/heading/locale/ru.d.ts +11 -0
- package/dist/plugins/heading/locale/ru.js +10 -0
- package/dist/plugins/heading/mapTextFields.d.ts +1 -0
- package/dist/plugins/heading/mapTextFields.js +1 -0
- package/dist/plugins/image/README.md +93 -0
- package/dist/plugins/image/README.ru.md +94 -0
- package/dist/plugins/image/css.d.ts +47 -0
- package/dist/plugins/image/css.js +47 -0
- package/dist/plugins/image/icons.d.ts +13 -0
- package/dist/plugins/image/icons.js +26 -0
- package/dist/plugins/image/image.css +559 -0
- package/dist/plugins/image/index.d.ts +129 -0
- package/dist/plugins/image/index.js +346 -0
- package/dist/plugins/image/locale/en.d.ts +39 -0
- package/dist/plugins/image/locale/en.js +38 -0
- package/dist/plugins/image/locale/keys.d.ts +5 -0
- package/dist/plugins/image/locale/ru.d.ts +39 -0
- package/dist/plugins/image/locale/ru.js +38 -0
- package/dist/plugins/image/settings.d.ts +23 -0
- package/dist/plugins/image/settings.js +347 -0
- package/dist/plugins/image/state.d.ts +86 -0
- package/dist/plugins/image/state.js +151 -0
- package/dist/plugins/image/styles.d.ts +21 -0
- package/dist/plugins/image/styles.js +58 -0
- package/dist/plugins/image/uploader.d.ts +31 -0
- package/dist/plugins/image/uploader.js +92 -0
- package/dist/plugins/image/view-empty.d.ts +44 -0
- package/dist/plugins/image/view-empty.js +61 -0
- package/dist/plugins/image/view-filled.d.ts +49 -0
- package/dist/plugins/image/view-filled.js +282 -0
- package/dist/plugins/index.d.ts +21 -0
- package/dist/plugins/index.js +22 -0
- package/dist/plugins/link-preview/README.md +69 -0
- package/dist/plugins/link-preview/README.ru.md +70 -0
- package/dist/plugins/link-preview/index.d.ts +169 -0
- package/dist/plugins/link-preview/index.js +698 -0
- package/dist/plugins/link-preview/link-preview.css +254 -0
- package/dist/plugins/link-preview/locale/en.d.ts +14 -0
- package/dist/plugins/link-preview/locale/en.js +13 -0
- package/dist/plugins/link-preview/locale/keys.d.ts +5 -0
- package/dist/plugins/link-preview/locale/ru.d.ts +14 -0
- package/dist/plugins/link-preview/locale/ru.js +13 -0
- package/dist/plugins/list/README.md +59 -0
- package/dist/plugins/list/README.ru.md +60 -0
- package/dist/plugins/list/index.d.ts +134 -0
- package/dist/plugins/list/index.js +566 -0
- package/dist/plugins/list/list.css +57 -0
- package/dist/plugins/list/locale/en.d.ts +5 -0
- package/dist/plugins/list/locale/en.js +4 -0
- package/dist/plugins/list/locale/keys.d.ts +5 -0
- package/dist/plugins/list/locale/ru.d.ts +5 -0
- package/dist/plugins/list/locale/ru.js +4 -0
- package/dist/plugins/list/mapTextFields.d.ts +1 -0
- package/dist/plugins/list/mapTextFields.js +1 -0
- package/dist/plugins/paragraph/README.md +57 -0
- package/dist/plugins/paragraph/README.ru.md +58 -0
- package/dist/plugins/paragraph/index.d.ts +112 -0
- package/dist/plugins/paragraph/index.js +158 -0
- package/dist/plugins/paragraph/locale/en.d.ts +5 -0
- package/dist/plugins/paragraph/locale/en.js +4 -0
- package/dist/plugins/paragraph/locale/keys.d.ts +5 -0
- package/dist/plugins/paragraph/locale/ru.d.ts +5 -0
- package/dist/plugins/paragraph/locale/ru.js +4 -0
- package/dist/plugins/paragraph/mapTextFields.d.ts +1 -0
- package/dist/plugins/paragraph/mapTextFields.js +1 -0
- package/dist/plugins/paragraph/paragraph.css +56 -0
- package/dist/plugins/person/README.md +72 -0
- package/dist/plugins/person/README.ru.md +73 -0
- package/dist/plugins/person/index.d.ts +189 -0
- package/dist/plugins/person/index.js +777 -0
- package/dist/plugins/person/locale/en.d.ts +18 -0
- package/dist/plugins/person/locale/en.js +17 -0
- package/dist/plugins/person/locale/keys.d.ts +5 -0
- package/dist/plugins/person/locale/ru.d.ts +18 -0
- package/dist/plugins/person/locale/ru.js +17 -0
- package/dist/plugins/person/person.css +431 -0
- package/dist/plugins/person/socialResolver.d.ts +18 -0
- package/dist/plugins/person/socialResolver.js +69 -0
- package/dist/plugins/poll/README.md +96 -0
- package/dist/plugins/poll/README.ru.md +97 -0
- package/dist/plugins/poll/index.d.ts +134 -0
- package/dist/plugins/poll/index.js +825 -0
- package/dist/plugins/poll/locale/en.d.ts +23 -0
- package/dist/plugins/poll/locale/en.js +22 -0
- package/dist/plugins/poll/locale/keys.d.ts +5 -0
- package/dist/plugins/poll/locale/ru.d.ts +23 -0
- package/dist/plugins/poll/locale/ru.js +22 -0
- package/dist/plugins/poll/poll.css +400 -0
- package/dist/plugins/quote/README.md +55 -0
- package/dist/plugins/quote/README.ru.md +56 -0
- package/dist/plugins/quote/index.d.ts +81 -0
- package/dist/plugins/quote/index.js +165 -0
- package/dist/plugins/quote/locale/en.d.ts +6 -0
- package/dist/plugins/quote/locale/en.js +5 -0
- package/dist/plugins/quote/locale/keys.d.ts +5 -0
- package/dist/plugins/quote/locale/ru.d.ts +6 -0
- package/dist/plugins/quote/locale/ru.js +5 -0
- package/dist/plugins/quote/mapTextFields.d.ts +1 -0
- package/dist/plugins/quote/mapTextFields.js +1 -0
- package/dist/plugins/quote/quote.css +72 -0
- package/dist/plugins/raw/README.md +54 -0
- package/dist/plugins/raw/README.ru.md +55 -0
- package/dist/plugins/raw/index.d.ts +62 -0
- package/dist/plugins/raw/index.js +227 -0
- package/dist/plugins/raw/locale/en.d.ts +7 -0
- package/dist/plugins/raw/locale/en.js +6 -0
- package/dist/plugins/raw/locale/keys.d.ts +5 -0
- package/dist/plugins/raw/locale/ru.d.ts +7 -0
- package/dist/plugins/raw/locale/ru.js +6 -0
- package/dist/plugins/raw/raw.css +127 -0
- package/dist/plugins/shared/actionBar.d.ts +19 -0
- package/dist/plugins/shared/actionBar.js +35 -0
- package/dist/plugins/shared/dropzone.d.ts +106 -0
- package/dist/plugins/shared/dropzone.js +107 -0
- package/dist/plugins/shared/fileInput.d.ts +44 -0
- package/dist/plugins/shared/fileInput.js +62 -0
- package/dist/plugins/spoiler/README.md +55 -0
- package/dist/plugins/spoiler/README.ru.md +56 -0
- package/dist/plugins/spoiler/index.d.ts +61 -0
- package/dist/plugins/spoiler/index.js +169 -0
- package/dist/plugins/spoiler/locale/en.d.ts +7 -0
- package/dist/plugins/spoiler/locale/en.js +6 -0
- package/dist/plugins/spoiler/locale/keys.d.ts +5 -0
- package/dist/plugins/spoiler/locale/ru.d.ts +7 -0
- package/dist/plugins/spoiler/locale/ru.js +6 -0
- package/dist/plugins/spoiler/spoiler.css +101 -0
- package/dist/plugins/table/README.md +55 -0
- package/dist/plugins/table/README.ru.md +56 -0
- package/dist/plugins/table/index.d.ts +85 -0
- package/dist/plugins/table/index.js +399 -0
- package/dist/plugins/table/locale/en.d.ts +9 -0
- package/dist/plugins/table/locale/en.js +8 -0
- package/dist/plugins/table/locale/keys.d.ts +5 -0
- package/dist/plugins/table/locale/ru.d.ts +9 -0
- package/dist/plugins/table/locale/ru.js +8 -0
- package/dist/plugins/table/table.css +58 -0
- package/dist/plugins/toggle/README.md +56 -0
- package/dist/plugins/toggle/README.ru.md +57 -0
- package/dist/plugins/toggle/index.d.ts +69 -0
- package/dist/plugins/toggle/index.js +191 -0
- package/dist/plugins/toggle/locale/en.d.ts +7 -0
- package/dist/plugins/toggle/locale/en.js +6 -0
- package/dist/plugins/toggle/locale/keys.d.ts +5 -0
- package/dist/plugins/toggle/locale/ru.d.ts +7 -0
- package/dist/plugins/toggle/locale/ru.js +6 -0
- package/dist/plugins/toggle/toggle.css +101 -0
- package/dist/plugins/warning/README.md +55 -0
- package/dist/plugins/warning/README.ru.md +56 -0
- package/dist/plugins/warning/index.d.ts +66 -0
- package/dist/plugins/warning/index.js +167 -0
- package/dist/plugins/warning/locale/en.d.ts +6 -0
- package/dist/plugins/warning/locale/en.js +5 -0
- package/dist/plugins/warning/locale/keys.d.ts +5 -0
- package/dist/plugins/warning/locale/ru.d.ts +6 -0
- package/dist/plugins/warning/locale/ru.js +5 -0
- package/dist/plugins/warning/warning.css +63 -0
- package/dist/renderer/async.d.ts +1 -0
- package/dist/renderer/async.js +7 -0
- package/dist/renderer/errors.d.ts +27 -0
- package/dist/renderer/errors.js +48 -0
- package/dist/renderer/index.d.ts +82 -0
- package/dist/renderer/index.js +413 -0
- package/dist/renderer/inline.d.ts +5 -0
- package/dist/renderer/inline.js +61 -0
- package/dist/renderer/locale/en.d.ts +35 -0
- package/dist/renderer/locale/en.js +29 -0
- package/dist/renderer/locale/ru.d.ts +37 -0
- package/dist/renderer/locale/ru.js +29 -0
- package/dist/renderer/renderers/README.md +7 -0
- package/dist/renderer/renderers/README.ru.md +5 -0
- package/dist/renderer/renderers/async.d.ts +51 -0
- package/dist/renderer/renderers/async.js +99 -0
- package/dist/renderer/renderers/attaches/README.md +48 -0
- package/dist/renderer/renderers/attaches/README.ru.md +48 -0
- package/dist/renderer/renderers/attaches/index.d.ts +37 -0
- package/dist/renderer/renderers/attaches/index.js +451 -0
- package/dist/renderer/renderers/attaches/locale/en.d.ts +11 -0
- package/dist/renderer/renderers/attaches/locale/en.js +7 -0
- package/dist/renderer/renderers/attaches/locale/ru.d.ts +13 -0
- package/dist/renderer/renderers/attaches/locale/ru.js +7 -0
- package/dist/renderer/renderers/attaches/styles.css +196 -0
- package/dist/renderer/renderers/carousel/README.md +43 -0
- package/dist/renderer/renderers/carousel/README.ru.md +43 -0
- package/dist/renderer/renderers/carousel/index.d.ts +7 -0
- package/dist/renderer/renderers/carousel/index.js +110 -0
- package/dist/renderer/renderers/carousel/styles.css +7 -0
- package/dist/renderer/renderers/checklist/README.md +33 -0
- package/dist/renderer/renderers/checklist/README.ru.md +33 -0
- package/dist/renderer/renderers/checklist/index.d.ts +7 -0
- package/dist/renderer/renderers/checklist/index.js +55 -0
- package/dist/renderer/renderers/checklist/styles.css +54 -0
- package/dist/renderer/renderers/code/README.md +33 -0
- package/dist/renderer/renderers/code/README.ru.md +33 -0
- package/dist/renderer/renderers/code/index.d.ts +9 -0
- package/dist/renderer/renderers/code/index.js +137 -0
- package/dist/renderer/renderers/code/locale/en.d.ts +5 -0
- package/dist/renderer/renderers/code/locale/en.js +4 -0
- package/dist/renderer/renderers/code/locale/ru.d.ts +5 -0
- package/dist/renderer/renderers/code/locale/ru.js +4 -0
- package/dist/renderer/renderers/code/styles.css +330 -0
- package/dist/renderer/renderers/columns/README.md +33 -0
- package/dist/renderer/renderers/columns/README.ru.md +33 -0
- package/dist/renderer/renderers/columns/index.d.ts +7 -0
- package/dist/renderer/renderers/columns/index.js +53 -0
- package/dist/renderer/renderers/columns/styles.css +5 -0
- package/dist/renderer/renderers/delimiter/README.md +33 -0
- package/dist/renderer/renderers/delimiter/README.ru.md +33 -0
- package/dist/renderer/renderers/delimiter/index.d.ts +7 -0
- package/dist/renderer/renderers/delimiter/index.js +28 -0
- package/dist/renderer/renderers/delimiter/styles.css +12 -0
- package/dist/renderer/renderers/embed/README.md +35 -0
- package/dist/renderer/renderers/embed/README.ru.md +35 -0
- package/dist/renderer/renderers/embed/index.d.ts +8 -0
- package/dist/renderer/renderers/embed/index.js +66 -0
- package/dist/renderer/renderers/embed/styles.css +217 -0
- package/dist/renderer/renderers/gallery/README.md +41 -0
- package/dist/renderer/renderers/gallery/README.ru.md +41 -0
- package/dist/renderer/renderers/gallery/index.d.ts +8 -0
- package/dist/renderer/renderers/gallery/index.js +329 -0
- package/dist/renderer/renderers/gallery/styles.css +419 -0
- package/dist/renderer/renderers/heading/README.md +33 -0
- package/dist/renderer/renderers/heading/README.ru.md +33 -0
- package/dist/renderer/renderers/heading/index.d.ts +8 -0
- package/dist/renderer/renderers/heading/index.js +38 -0
- package/dist/renderer/renderers/heading/styles.css +26 -0
- package/dist/renderer/renderers/image/README.md +42 -0
- package/dist/renderer/renderers/image/README.ru.md +42 -0
- package/dist/renderer/renderers/image/index.d.ts +7 -0
- package/dist/renderer/renderers/image/index.js +93 -0
- package/dist/renderer/renderers/image/styles.css +40 -0
- package/dist/renderer/renderers/index.d.ts +47 -0
- package/dist/renderer/renderers/index.js +125 -0
- package/dist/renderer/renderers/link-preview/README.md +43 -0
- package/dist/renderer/renderers/link-preview/README.ru.md +43 -0
- package/dist/renderer/renderers/link-preview/index.d.ts +9 -0
- package/dist/renderer/renderers/link-preview/index.js +118 -0
- package/dist/renderer/renderers/link-preview/styles.css +246 -0
- package/dist/renderer/renderers/list/README.md +33 -0
- package/dist/renderer/renderers/list/README.ru.md +33 -0
- package/dist/renderer/renderers/list/index.d.ts +8 -0
- package/dist/renderer/renderers/list/index.js +42 -0
- package/dist/renderer/renderers/list/styles.css +20 -0
- package/dist/renderer/renderers/paragraph/README.md +33 -0
- package/dist/renderer/renderers/paragraph/README.ru.md +33 -0
- package/dist/renderer/renderers/paragraph/index.d.ts +7 -0
- package/dist/renderer/renderers/paragraph/index.js +35 -0
- package/dist/renderer/renderers/paragraph/styles.css +3 -0
- package/dist/renderer/renderers/person/README.md +44 -0
- package/dist/renderer/renderers/person/README.ru.md +44 -0
- package/dist/renderer/renderers/person/index.d.ts +7 -0
- package/dist/renderer/renderers/person/index.js +213 -0
- package/dist/renderer/renderers/person/locale/en.d.ts +6 -0
- package/dist/renderer/renderers/person/locale/en.js +5 -0
- package/dist/renderer/renderers/person/locale/ru.d.ts +6 -0
- package/dist/renderer/renderers/person/locale/ru.js +5 -0
- package/dist/renderer/renderers/person/styles.css +47 -0
- package/dist/renderer/renderers/poll/README.md +68 -0
- package/dist/renderer/renderers/poll/README.ru.md +68 -0
- package/dist/renderer/renderers/poll/index.d.ts +9 -0
- package/dist/renderer/renderers/poll/index.js +339 -0
- package/dist/renderer/renderers/poll/styles.css +148 -0
- package/dist/renderer/renderers/quote/README.md +33 -0
- package/dist/renderer/renderers/quote/README.ru.md +33 -0
- package/dist/renderer/renderers/quote/index.d.ts +7 -0
- package/dist/renderer/renderers/quote/index.js +59 -0
- package/dist/renderer/renderers/quote/styles.css +43 -0
- package/dist/renderer/renderers/raw/README.md +33 -0
- package/dist/renderer/renderers/raw/README.ru.md +33 -0
- package/dist/renderer/renderers/raw/index.d.ts +7 -0
- package/dist/renderer/renderers/raw/index.js +27 -0
- package/dist/renderer/renderers/spoiler/README.md +33 -0
- package/dist/renderer/renderers/spoiler/README.ru.md +33 -0
- package/dist/renderer/renderers/spoiler/index.d.ts +9 -0
- package/dist/renderer/renderers/spoiler/index.js +84 -0
- package/dist/renderer/renderers/spoiler/locale/en.d.ts +4 -0
- package/dist/renderer/renderers/spoiler/locale/en.js +3 -0
- package/dist/renderer/renderers/spoiler/locale/ru.d.ts +4 -0
- package/dist/renderer/renderers/spoiler/locale/ru.js +3 -0
- package/dist/renderer/renderers/spoiler/styles.css +61 -0
- package/dist/renderer/renderers/table/README.md +33 -0
- package/dist/renderer/renderers/table/README.ru.md +33 -0
- package/dist/renderer/renderers/table/index.d.ts +7 -0
- package/dist/renderer/renderers/table/index.js +83 -0
- package/dist/renderer/renderers/table/styles.css +34 -0
- package/dist/renderer/renderers/toggle/README.md +33 -0
- package/dist/renderer/renderers/toggle/README.ru.md +33 -0
- package/dist/renderer/renderers/toggle/index.d.ts +7 -0
- package/dist/renderer/renderers/toggle/index.js +59 -0
- package/dist/renderer/renderers/toggle/styles.css +49 -0
- package/dist/renderer/renderers/warning/README.md +33 -0
- package/dist/renderer/renderers/warning/README.ru.md +33 -0
- package/dist/renderer/renderers/warning/index.d.ts +7 -0
- package/dist/renderer/renderers/warning/index.js +62 -0
- package/dist/renderer/renderers/warning/styles.css +41 -0
- package/dist/renderer/styles/base.css +168 -0
- package/dist/renderer/types.d.ts +464 -0
- package/dist/shared/blockDataNormalizers.d.ts +14 -0
- package/dist/shared/blockDataNormalizers.js +235 -0
- package/dist/shared/blockDataValidators.d.ts +81 -0
- package/dist/shared/blockDataValidators.js +313 -0
- package/dist/shared/blockTypes.d.ts +2 -0
- package/dist/shared/blockTypes.js +26 -0
- package/dist/shared/carouselData.d.ts +34 -0
- package/dist/shared/carouselData.js +111 -0
- package/dist/shared/cloneEditorData.d.ts +11 -0
- package/dist/shared/cloneEditorData.js +20 -0
- package/dist/shared/documentTypes.d.ts +35 -0
- package/dist/shared/embedPlayer.d.ts +42 -0
- package/dist/shared/embedPlayer.js +141 -0
- package/dist/shared/fileUtils.d.ts +33 -0
- package/dist/shared/fileUtils.js +109 -0
- package/dist/shared/highlightRuntime.d.ts +38 -0
- package/dist/shared/highlightRuntime.js +75 -0
- package/dist/shared/inlineMarshal.d.ts +82 -0
- package/dist/shared/inlineMarshal.js +215 -0
- package/dist/shared/jsonData.d.ts +11 -0
- package/dist/shared/jsonData.js +53 -0
- package/dist/shared/localeTypes.d.ts +11 -0
- package/dist/shared/mapTextFields.d.ts +89 -0
- package/dist/shared/mapTextFields.js +119 -0
- package/dist/shared/pollData.d.ts +90 -0
- package/dist/shared/pollData.js +231 -0
- package/dist/shared/resolvePath.d.ts +8 -0
- package/dist/shared/resolvePath.js +10 -0
- package/dist/shared/runtime/dompurify.js +2424 -0
- package/dist/shared/runtime/highlightBundle.js +10 -0
- package/dist/shared/runtime/jszip.js +13 -0
- package/dist/shared/sanitize/allowlist.d.ts +21 -0
- package/dist/shared/sanitize/allowlist.js +40 -0
- package/dist/shared/sanitize/escapeHtml.d.ts +6 -0
- package/dist/shared/sanitize/escapeHtml.js +11 -0
- package/dist/shared/sanitize/index.d.ts +8 -0
- package/dist/shared/sanitize/index.js +8 -0
- package/dist/shared/sanitize/parseInline.d.ts +11 -0
- package/dist/shared/sanitize/parseInline.js +25 -0
- package/dist/shared/sanitize/sanitizeHtml.d.ts +8 -0
- package/dist/shared/sanitize/sanitizeHtml.js +19 -0
- package/dist/shared/sanitize/sanitizeRawHtml.d.ts +15 -0
- package/dist/shared/sanitize/sanitizeRawHtml.js +162 -0
- package/dist/shared/sanitize/sanitizeStyle.d.ts +9 -0
- package/dist/shared/sanitize/sanitizeStyle.js +39 -0
- package/dist/shared/sanitize/sanitizeUrl.d.ts +28 -0
- package/dist/shared/sanitize/sanitizeUrl.js +86 -0
- package/dist/shared/sanitize/walker.d.ts +15 -0
- package/dist/shared/sanitize/walker.js +98 -0
- package/dist/shared/styleRegistry.d.ts +4 -0
- package/dist/shared/styleRegistry.js +38 -0
- package/dist/shared/textFormat.d.ts +32 -0
- package/dist/shared/textFormat.js +48 -0
- package/dist/shared/zipRuntime.d.ts +19 -0
- package/dist/shared/zipRuntime.js +54 -0
- package/dist/styles/editor.css +3 -0
- package/dist/types.d.ts +1 -0
- package/package.json +149 -0
|
@@ -0,0 +1,390 @@
|
|
|
1
|
+
import { uid } from './uid.js'
|
|
2
|
+
import { cloneEditorData } from '../shared/cloneEditorData.js'
|
|
3
|
+
import { el } from './dom.js'
|
|
4
|
+
import {
|
|
5
|
+
BLOCK_CLASS,
|
|
6
|
+
READ_ONLY_INTERACTIVE_ATTRIBUTE,
|
|
7
|
+
TEXT_ALIGN_TUNE_ATTRIBUTE,
|
|
8
|
+
} from './constants.js'
|
|
9
|
+
import { normalizeTextAlign } from '../shared/textFormat.js'
|
|
10
|
+
|
|
11
|
+
/** @typedef {import('./types').IBlock} IBlockContract */
|
|
12
|
+
/** @implements {IBlockContract} */
|
|
13
|
+
export class Block {
|
|
14
|
+
/** @type {string} */
|
|
15
|
+
#id
|
|
16
|
+
|
|
17
|
+
/** @type {string} */
|
|
18
|
+
#type
|
|
19
|
+
|
|
20
|
+
/** @type {import('./types').BlockPlugin} */
|
|
21
|
+
#plugin
|
|
22
|
+
|
|
23
|
+
/** @type {HTMLElement} wrapper div.oe-block */
|
|
24
|
+
#element
|
|
25
|
+
|
|
26
|
+
/** @type {HTMLElement} inner element from plugin.render() */
|
|
27
|
+
#contentElement
|
|
28
|
+
|
|
29
|
+
/** @type {boolean} */
|
|
30
|
+
#focused = false
|
|
31
|
+
|
|
32
|
+
/** @type {boolean} */
|
|
33
|
+
#selected = false
|
|
34
|
+
/** @type {Record<string, unknown> | null} */
|
|
35
|
+
#cachedData = null
|
|
36
|
+
/** @type {boolean} */
|
|
37
|
+
#dirty = true
|
|
38
|
+
/** @type {number} */
|
|
39
|
+
#version = 0
|
|
40
|
+
#readOnly
|
|
41
|
+
|
|
42
|
+
/** @type {Record<string, unknown> | undefined} */
|
|
43
|
+
#tunes
|
|
44
|
+
|
|
45
|
+
/** @type {string | number | undefined} */
|
|
46
|
+
#revision
|
|
47
|
+
|
|
48
|
+
/** @type {Record<string, import('../renderer/types').InlineWidget> | undefined} */
|
|
49
|
+
#preservedInline
|
|
50
|
+
|
|
51
|
+
/** @type {import('./CommandDispatcher').CommandDispatcher} */
|
|
52
|
+
#commands
|
|
53
|
+
|
|
54
|
+
/** @type {boolean} */
|
|
55
|
+
#destroyed = false
|
|
56
|
+
|
|
57
|
+
/** @type {(() => void) | null} */
|
|
58
|
+
#splitBlock = null
|
|
59
|
+
|
|
60
|
+
/** @type {(() => boolean) | null} */
|
|
61
|
+
#exitEmptyBlock = null
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* @param {import('./types').BlockPlugin} plugin
|
|
65
|
+
* @param {import('./CommandDispatcher').CommandDispatcher} commands
|
|
66
|
+
* @param {Record<string, unknown>} [data]
|
|
67
|
+
* @param {string} [id]
|
|
68
|
+
* @param {boolean} [readOnly]
|
|
69
|
+
* @param {{ tunes?: Record<string, unknown>, revision?: string | number, inline?: Record<string, import('../renderer/types').InlineWidget>, preserveInline?: boolean }} [metadata]
|
|
70
|
+
*/
|
|
71
|
+
constructor(plugin, commands, data, id, readOnly = false, metadata = {}) {
|
|
72
|
+
this.#id = id || uid()
|
|
73
|
+
this.#type = plugin.type
|
|
74
|
+
this.#plugin = plugin
|
|
75
|
+
this.#readOnly = readOnly
|
|
76
|
+
this.#commands = commands
|
|
77
|
+
this.#tunes = metadata.tunes === undefined ? undefined : cloneEditorData(metadata.tunes)
|
|
78
|
+
this.#revision = metadata.revision
|
|
79
|
+
this.#preservedInline = metadata.preserveInline && metadata.inline
|
|
80
|
+
? cloneEditorData(metadata.inline)
|
|
81
|
+
: undefined
|
|
82
|
+
|
|
83
|
+
this.#element = el('div', BLOCK_CLASS, {
|
|
84
|
+
'data-block-id': this.#id,
|
|
85
|
+
'data-block-type': this.#type,
|
|
86
|
+
})
|
|
87
|
+
|
|
88
|
+
const contentElement = plugin.render(data || {}, {
|
|
89
|
+
mutate: (operation) => this.#runMutation(operation),
|
|
90
|
+
splitBlock: () => this.#splitBlock?.(),
|
|
91
|
+
exitEmptyBlock: () => this.#exitEmptyBlock?.() ?? false,
|
|
92
|
+
readOnly: this.#readOnly,
|
|
93
|
+
})
|
|
94
|
+
if (!(contentElement instanceof HTMLElement)) {
|
|
95
|
+
throw new TypeError(`Block plugin "${this.#type}" render() must return an HTMLElement`)
|
|
96
|
+
}
|
|
97
|
+
this.#contentElement = contentElement
|
|
98
|
+
this.#applyTextAlignTune()
|
|
99
|
+
this.#applyReadOnly()
|
|
100
|
+
this.#element.appendChild(this.#contentElement)
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Core-owned command boundary for interactive block-plugin controls.
|
|
105
|
+
* Plugins mutate their own DOM, while the Block remains responsible for
|
|
106
|
+
* cache invalidation, change events, and the final history commit.
|
|
107
|
+
* @template T
|
|
108
|
+
* @param {() => T} operation
|
|
109
|
+
* @returns {T | undefined}
|
|
110
|
+
*/
|
|
111
|
+
#runMutation(operation) {
|
|
112
|
+
if (this.#destroyed || this.#readOnly) return undefined
|
|
113
|
+
return this.#commands.runForBlock(this, operation)
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Connect core structural commands used by interactive plugin controls.
|
|
118
|
+
* The callbacks are cleared while the editor is in read-only mode.
|
|
119
|
+
* @param {{ splitBlock: (() => void) | null, exitEmptyBlock: (() => boolean) | null }} commands
|
|
120
|
+
* @returns {void}
|
|
121
|
+
*/
|
|
122
|
+
setStructuralCommands(commands) {
|
|
123
|
+
this.#splitBlock = commands.splitBlock
|
|
124
|
+
this.#exitEmptyBlock = commands.exitEmptyBlock
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
get id() {
|
|
128
|
+
return this.#id
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
get type() {
|
|
132
|
+
return this.#type
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
get plugin() {
|
|
136
|
+
return this.#plugin
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
get element() {
|
|
140
|
+
return this.#element
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
get contentElement() {
|
|
144
|
+
return this.#contentElement
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
get focused() {
|
|
148
|
+
return this.#focused
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
set focused(value) {
|
|
152
|
+
this.#focused = value
|
|
153
|
+
this.#element.classList.toggle('oe-block--focused', value)
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
get selected() {
|
|
157
|
+
return this.#selected
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
set selected(value) {
|
|
161
|
+
this.#selected = value
|
|
162
|
+
this.#element.classList.toggle('oe-block--selected', value)
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Extract block data from DOM.
|
|
167
|
+
* @returns {import('./types').BlockData}
|
|
168
|
+
*/
|
|
169
|
+
save() {
|
|
170
|
+
if (this.#dirty || !this.#cachedData) {
|
|
171
|
+
const saved = this.#plugin.save(this.#contentElement)
|
|
172
|
+
if (!saved || typeof saved !== 'object' || Array.isArray(saved)) {
|
|
173
|
+
throw new TypeError(`Block plugin "${this.#type}" save() must return a data object`)
|
|
174
|
+
}
|
|
175
|
+
this.#cachedData = cloneEditorData(saved)
|
|
176
|
+
this.#syncTextAlignTune()
|
|
177
|
+
this.#dirty = false
|
|
178
|
+
}
|
|
179
|
+
const data = cloneEditorData(this.#cachedData)
|
|
180
|
+
const result = { id: this.#id, type: this.#type, data }
|
|
181
|
+
if (this.#revision !== undefined) result.revision = this.#revision
|
|
182
|
+
if (this.#tunes !== undefined) result.tunes = cloneEditorData(this.#tunes)
|
|
183
|
+
if (this.#preservedInline !== undefined) result.inline = cloneEditorData(this.#preservedInline)
|
|
184
|
+
return result
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/** Mark cached serialization stale after a block-local mutation. */
|
|
188
|
+
markDirty() {
|
|
189
|
+
this.#dirty = true
|
|
190
|
+
// A producer-owned revision only describes the input block. Once the
|
|
191
|
+
// editor changes that block it can no longer claim the old revision.
|
|
192
|
+
this.#revision = undefined
|
|
193
|
+
this.#version++
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/** Monotonic version used by incremental consumers. */
|
|
197
|
+
get version() {
|
|
198
|
+
return this.#version
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Merge another block's data into this one.
|
|
203
|
+
* @param {Record<string, unknown>} data
|
|
204
|
+
*/
|
|
205
|
+
merge(data) {
|
|
206
|
+
if (this.#plugin.merge) {
|
|
207
|
+
this.#plugin.merge(this.#contentElement, data)
|
|
208
|
+
}
|
|
209
|
+
this.markDirty()
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Whether this block's plugin supports merge.
|
|
214
|
+
* @returns {boolean}
|
|
215
|
+
*/
|
|
216
|
+
get canMerge() {
|
|
217
|
+
return typeof this.#plugin.merge === 'function'
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* Check if the block content is empty.
|
|
222
|
+
* Delegates to plugin.isEmpty() if defined, else checks textContent.
|
|
223
|
+
* @returns {boolean}
|
|
224
|
+
*/
|
|
225
|
+
isEmpty() {
|
|
226
|
+
if (typeof this.#plugin.isEmpty === 'function') {
|
|
227
|
+
return this.#plugin.isEmpty(this.#contentElement)
|
|
228
|
+
}
|
|
229
|
+
const text = (this.#contentElement.textContent || '').trim()
|
|
230
|
+
return text.length === 0
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* Check if the plugin supports inline tools.
|
|
235
|
+
* @returns {boolean}
|
|
236
|
+
*/
|
|
237
|
+
get hasInlineTools() {
|
|
238
|
+
const setting = this.#plugin.inlineTools
|
|
239
|
+
return setting !== false && (!Array.isArray(setting) || setting.length > 0)
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Tool types allowed by this block, or null when the editor-wide set applies.
|
|
244
|
+
* @returns {readonly string[] | null}
|
|
245
|
+
*/
|
|
246
|
+
get inlineToolTypes() {
|
|
247
|
+
return Array.isArray(this.#plugin.inlineTools)
|
|
248
|
+
? this.#plugin.inlineTools
|
|
249
|
+
: null
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* Get the block's settings UI (if plugin provides one).
|
|
254
|
+
* @returns {HTMLElement | HTMLElement[] | null}
|
|
255
|
+
*/
|
|
256
|
+
renderSettings() {
|
|
257
|
+
return this.#plugin.renderSettings?.(this.#contentElement) ?? null
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* Adopt a new content element as this block's content.
|
|
262
|
+
*
|
|
263
|
+
* Two paths, automatically chosen:
|
|
264
|
+
* 1. The plugin already swapped the DOM itself (`oldEl.replaceWith(newEl)`),
|
|
265
|
+
* so `newEl` is already a child of `#element` — we only need to update
|
|
266
|
+
* the internal reference. This is the case for Heading.changeLevel.
|
|
267
|
+
* 2. The plugin returned a fresh detached element — we swap it in via
|
|
268
|
+
* `replaceChild`.
|
|
269
|
+
*
|
|
270
|
+
* Without the first branch, calling this after a DOM swap performed by the plugin
|
|
271
|
+
* throws `NotFoundError: replaceChild — node is not a child of this node`,
|
|
272
|
+
* because the old contentElement is already detached.
|
|
273
|
+
*
|
|
274
|
+
* @param {HTMLElement} newEl
|
|
275
|
+
*/
|
|
276
|
+
replaceContentElement(newEl) {
|
|
277
|
+
if (newEl === this.#contentElement) return
|
|
278
|
+
if (newEl.parentNode === this.#element) {
|
|
279
|
+
this.markDirty()
|
|
280
|
+
// Plugin already performed the DOM swap; just track the new ref.
|
|
281
|
+
this.#contentElement = newEl
|
|
282
|
+
this.#applyTextAlignTune()
|
|
283
|
+
return
|
|
284
|
+
}
|
|
285
|
+
this.#element.replaceChild(newEl, this.#contentElement)
|
|
286
|
+
this.markDirty()
|
|
287
|
+
this.#contentElement = newEl
|
|
288
|
+
this.#applyTextAlignTune()
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
/** Apply a valid serialized block alignment to the plugin root. */
|
|
292
|
+
#applyTextAlignTune() {
|
|
293
|
+
const align = normalizeTextAlign(this.#tunes?.textAlign)
|
|
294
|
+
if (!align) return
|
|
295
|
+
this.#contentElement.style.textAlign = align
|
|
296
|
+
this.#contentElement.setAttribute(TEXT_ALIGN_TUNE_ATTRIBUTE, align)
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
/**
|
|
300
|
+
* Copy an alignment explicitly changed by the toolbar into block tunes.
|
|
301
|
+
* Plugin-owned `data.align` remains readable and writable for Paragraph and
|
|
302
|
+
* Heading, while the tune gives every other text block one stable contract.
|
|
303
|
+
*/
|
|
304
|
+
#syncTextAlignTune() {
|
|
305
|
+
if (!this.#contentElement.hasAttribute(TEXT_ALIGN_TUNE_ATTRIBUTE)) return
|
|
306
|
+
|
|
307
|
+
const align = normalizeTextAlign(this.#contentElement.getAttribute(TEXT_ALIGN_TUNE_ATTRIBUTE))
|
|
308
|
+
const nextTunes = this.#tunes ? cloneEditorData(this.#tunes) : {}
|
|
309
|
+
if (align) nextTunes.textAlign = align
|
|
310
|
+
else delete nextTunes.textAlign
|
|
311
|
+
this.#tunes = Object.keys(nextTunes).length > 0 ? nextTunes : undefined
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
|
|
315
|
+
/**
|
|
316
|
+
* Enforce read-only as a DOM invariant instead of relying on pointer events.
|
|
317
|
+
*/
|
|
318
|
+
#applyReadOnly() {
|
|
319
|
+
if (!this.#readOnly) return
|
|
320
|
+
|
|
321
|
+
this.#contentElement.setAttribute('aria-readonly', 'true')
|
|
322
|
+
/** @type {HTMLElement[]} */
|
|
323
|
+
const editableElements = []
|
|
324
|
+
if (this.#contentElement.matches('[contenteditable]')) {
|
|
325
|
+
editableElements.push(this.#contentElement)
|
|
326
|
+
}
|
|
327
|
+
for (const editableElement of this.#contentElement.querySelectorAll('[contenteditable]')) {
|
|
328
|
+
if (editableElement instanceof HTMLElement) editableElements.push(editableElement)
|
|
329
|
+
}
|
|
330
|
+
for (const editableElement of editableElements) {
|
|
331
|
+
editableElement.contentEditable = 'false'
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
for (const field of this.#contentElement.querySelectorAll('input, textarea')) {
|
|
335
|
+
if (field instanceof HTMLInputElement) field.readOnly = true
|
|
336
|
+
else if (field instanceof HTMLTextAreaElement) field.readOnly = true
|
|
337
|
+
}
|
|
338
|
+
for (const control of this.#contentElement.querySelectorAll('button, select')) {
|
|
339
|
+
if (control.hasAttribute(READ_ONLY_INTERACTIVE_ATTRIBUTE)) continue
|
|
340
|
+
if (control instanceof HTMLButtonElement) control.disabled = true
|
|
341
|
+
else if (control instanceof HTMLSelectElement) control.disabled = true
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
/**
|
|
346
|
+
* Clean up the plugin without removing the block element from DOM.
|
|
347
|
+
* Used by BlockManager.convert() which handles element removal separately.
|
|
348
|
+
*/
|
|
349
|
+
disposePlugin() {
|
|
350
|
+
if (this.#destroyed) return
|
|
351
|
+
this.#destroyed = true
|
|
352
|
+
if (this.#plugin.destroy) {
|
|
353
|
+
try {
|
|
354
|
+
this.#plugin.destroy(this.#contentElement)
|
|
355
|
+
} catch (err) {
|
|
356
|
+
console.warn(`[Block] Plugin destroy failed for ${this.#id} (${this.#type}):`, err)
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
/**
|
|
362
|
+
* Focus the first editable or focusable element within the block.
|
|
363
|
+
*/
|
|
364
|
+
focus() {
|
|
365
|
+
if (this.#contentElement.contentEditable === 'true' || this.#contentElement.tabIndex >= 0) {
|
|
366
|
+
this.#contentElement.focus()
|
|
367
|
+
return
|
|
368
|
+
}
|
|
369
|
+
const editable = this.#contentElement.querySelector('[contenteditable="true"]')
|
|
370
|
+
if (editable instanceof HTMLElement) {
|
|
371
|
+
editable.focus()
|
|
372
|
+
return
|
|
373
|
+
}
|
|
374
|
+
const focusable = this.#contentElement.querySelector('input, textarea, [tabindex]')
|
|
375
|
+
if (focusable instanceof HTMLElement) {
|
|
376
|
+
focusable.focus()
|
|
377
|
+
return
|
|
378
|
+
}
|
|
379
|
+
this.#contentElement.setAttribute('tabindex', '-1')
|
|
380
|
+
this.#contentElement.focus()
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
/**
|
|
384
|
+
* Clean up plugin resources. Does NOT remove the element from DOM —
|
|
385
|
+
* BlockAnimator handles animated removal separately.
|
|
386
|
+
*/
|
|
387
|
+
destroy() {
|
|
388
|
+
this.disposePlugin()
|
|
389
|
+
}
|
|
390
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handles all block-level animations: insert (scale+fade in),
|
|
3
|
+
* move (FLIP), and remove (collapse+fade out).
|
|
4
|
+
*
|
|
5
|
+
* Extracted from BlockManager to separate animation concern from
|
|
6
|
+
* block state management (SRP).
|
|
7
|
+
*/
|
|
8
|
+
export class BlockAnimator {
|
|
9
|
+
/**
|
|
10
|
+
* @param {{ blockInsertMs: number, blockMoveMs: number, blockRemoveMs: number }} durations
|
|
11
|
+
*/
|
|
12
|
+
constructor(durations: {
|
|
13
|
+
blockInsertMs: number;
|
|
14
|
+
blockMoveMs: number;
|
|
15
|
+
blockRemoveMs: number;
|
|
16
|
+
});
|
|
17
|
+
/** Enable animations (call after initial load so initial blocks don't animate). */
|
|
18
|
+
enable(): void;
|
|
19
|
+
/**
|
|
20
|
+
* Animate a newly inserted block element.
|
|
21
|
+
* @param {HTMLElement} element
|
|
22
|
+
*/
|
|
23
|
+
animateInsert(element: HTMLElement): void;
|
|
24
|
+
/**
|
|
25
|
+
* FLIP-animate blocks that shifted after a move operation.
|
|
26
|
+
* @param {import('./types.js').IBlock[]} blocks — ordered block array
|
|
27
|
+
* @param {number} lo — first affected index
|
|
28
|
+
* @param {number} hi — last affected index
|
|
29
|
+
* @param {Map<string, DOMRect>} firstRects — pre-move bounding rects keyed by block ID
|
|
30
|
+
*/
|
|
31
|
+
animateMove(blocks: import("./types.js").IBlock[], lo: number, hi: number, firstRects: Map<string, DOMRect>): void;
|
|
32
|
+
/**
|
|
33
|
+
* Animate a block element's removal (collapse + fade out), then remove from DOM.
|
|
34
|
+
* @param {HTMLElement} element
|
|
35
|
+
* @returns {Promise<void>} resolves when the element is removed from DOM
|
|
36
|
+
*/
|
|
37
|
+
animateRemove(element: HTMLElement): Promise<void>;
|
|
38
|
+
#private;
|
|
39
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handles all block-level animations: insert (scale+fade in),
|
|
3
|
+
* move (FLIP), and remove (collapse+fade out).
|
|
4
|
+
*
|
|
5
|
+
* Extracted from BlockManager to separate animation concern from
|
|
6
|
+
* block state management (SRP).
|
|
7
|
+
*/
|
|
8
|
+
export class BlockAnimator {
|
|
9
|
+
/** @type {{ blockInsertMs: number, blockMoveMs: number, blockRemoveMs: number }} */
|
|
10
|
+
#durations
|
|
11
|
+
|
|
12
|
+
/** @type {boolean} */
|
|
13
|
+
#enabled = false
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* @param {{ blockInsertMs: number, blockMoveMs: number, blockRemoveMs: number }} durations
|
|
17
|
+
*/
|
|
18
|
+
constructor(durations) {
|
|
19
|
+
this.#durations = durations
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/** Enable animations (call after initial load so initial blocks don't animate). */
|
|
23
|
+
enable() {
|
|
24
|
+
this.#enabled = true
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Animate a newly inserted block element.
|
|
29
|
+
* @param {HTMLElement} element
|
|
30
|
+
*/
|
|
31
|
+
animateInsert(element) {
|
|
32
|
+
if (!this.#enabled) return
|
|
33
|
+
element.animate([
|
|
34
|
+
{ opacity: 0, transform: 'scale(0.95) translateY(-6px)' },
|
|
35
|
+
{ opacity: 1, transform: 'scale(1) translateY(0)' },
|
|
36
|
+
], {
|
|
37
|
+
duration: this.#durations.blockInsertMs,
|
|
38
|
+
easing: 'cubic-bezier(0.16, 1, 0.3, 1)',
|
|
39
|
+
fill: 'forwards',
|
|
40
|
+
})
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* FLIP-animate blocks that shifted after a move operation.
|
|
45
|
+
* @param {import('./types').IBlock[]} blocks — ordered block array
|
|
46
|
+
* @param {number} lo — first affected index
|
|
47
|
+
* @param {number} hi — last affected index
|
|
48
|
+
* @param {Map<string, DOMRect>} firstRects — pre-move bounding rects keyed by block ID
|
|
49
|
+
*/
|
|
50
|
+
animateMove(blocks, lo, hi, firstRects) {
|
|
51
|
+
for (let i = lo; i <= hi; i++) {
|
|
52
|
+
const b = blocks[i]
|
|
53
|
+
if (!b) continue
|
|
54
|
+
const first = firstRects.get(b.id)
|
|
55
|
+
if (!first) continue
|
|
56
|
+
const last = b.element.getBoundingClientRect()
|
|
57
|
+
const dy = first.top - last.top
|
|
58
|
+
if (Math.abs(dy) < 1) continue
|
|
59
|
+
|
|
60
|
+
b.element.animate(
|
|
61
|
+
[
|
|
62
|
+
{ transform: `translateY(${dy}px)` },
|
|
63
|
+
{ transform: 'translateY(0)' },
|
|
64
|
+
],
|
|
65
|
+
{ duration: this.#durations.blockMoveMs, easing: 'cubic-bezier(0.22, 1, 0.36, 1)' },
|
|
66
|
+
)
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Animate a block element's removal (collapse + fade out), then remove from DOM.
|
|
72
|
+
* @param {HTMLElement} element
|
|
73
|
+
* @returns {Promise<void>} resolves when the element is removed from DOM
|
|
74
|
+
*/
|
|
75
|
+
animateRemove(element) {
|
|
76
|
+
// Skip animation if element is not in DOM or not visible
|
|
77
|
+
if (!element.parentNode || !element.offsetHeight) {
|
|
78
|
+
element.remove()
|
|
79
|
+
return Promise.resolve()
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const height = element.offsetHeight
|
|
83
|
+
const margin = parseFloat(getComputedStyle(element).marginBottom) || 0
|
|
84
|
+
element.style.overflow = 'hidden'
|
|
85
|
+
element.style.pointerEvents = 'none'
|
|
86
|
+
element.style.transformOrigin = 'top center'
|
|
87
|
+
|
|
88
|
+
const anim = element.animate([
|
|
89
|
+
{ opacity: 1, transform: 'scale(1) translateY(0)', maxHeight: `${height}px`, marginBottom: `${margin}px` },
|
|
90
|
+
{ opacity: 0, transform: 'scale(0.96) translateY(-4px)', maxHeight: `${height}px`, marginBottom: `${margin}px`, offset: 0.4 },
|
|
91
|
+
{ opacity: 0, transform: 'scale(0.96) translateY(-4px)', maxHeight: '0px', marginBottom: '0px' },
|
|
92
|
+
], {
|
|
93
|
+
duration: this.#durations.blockRemoveMs,
|
|
94
|
+
easing: 'cubic-bezier(0.22, 1, 0.36, 1)',
|
|
95
|
+
fill: 'forwards',
|
|
96
|
+
})
|
|
97
|
+
|
|
98
|
+
// Undo/render may synchronously detach the element while this animation
|
|
99
|
+
// is running. A cancelled Web Animation rejects `finished`; normalize
|
|
100
|
+
// that lifecycle path so toolbar cleanup subscribed to `animDone` still
|
|
101
|
+
// runs and no unhandled rejection escapes.
|
|
102
|
+
return anim.finished
|
|
103
|
+
.catch(() => undefined)
|
|
104
|
+
.then(() => element.remove())
|
|
105
|
+
}
|
|
106
|
+
}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/** @typedef {import('./types.js').IBlockManager} IBlockManagerContract */
|
|
2
|
+
/** @implements {IBlockManagerContract} */
|
|
3
|
+
export class BlockManager implements IBlockManagerContract {
|
|
4
|
+
/**
|
|
5
|
+
* @param {HTMLElement} container - .oe-blocks element
|
|
6
|
+
* @param {Map<string, import('./types.js').BlockPlugin>} plugins
|
|
7
|
+
* @param {import('./types.js').IEventBus} events
|
|
8
|
+
* @param {{ blockInsertMs: number, blockMoveMs: number, blockRemoveMs: number }} [animations]
|
|
9
|
+
* @param {boolean} [readOnly]
|
|
10
|
+
* @param {(type: string) => string} [unknownBlockLabel]
|
|
11
|
+
*/
|
|
12
|
+
constructor(container: HTMLElement, plugins: Map<string, import("./types.js").BlockPlugin>, events: import("./types.js").IEventBus, animations?: {
|
|
13
|
+
blockInsertMs: number;
|
|
14
|
+
blockMoveMs: number;
|
|
15
|
+
blockRemoveMs: number;
|
|
16
|
+
}, readOnly?: boolean, unknownBlockLabel?: (type: string) => string);
|
|
17
|
+
/**
|
|
18
|
+
* Wire in the inline plugin registry. Called once by `createEditor` after
|
|
19
|
+
* the registry is built. BlockManager uses it to rehydrate inline widget
|
|
20
|
+
* placeholder tokens (`{{<id>}}`) into live widget DOM when blocks are
|
|
21
|
+
* created from saved data.
|
|
22
|
+
*
|
|
23
|
+
* @param {import('./InlinePluginRegistry.js').InlinePluginRegistry} registry
|
|
24
|
+
*/
|
|
25
|
+
setInlinePluginRegistry(registry: import("./InlinePluginRegistry.js").InlinePluginRegistry): void;
|
|
26
|
+
/** @param {import('./CommandDispatcher.js').CommandDispatcher} commands */
|
|
27
|
+
setCommandDispatcher(commands: import("./CommandDispatcher.js").CommandDispatcher): void;
|
|
28
|
+
/**
|
|
29
|
+
* Wire structural commands into existing and subsequently created blocks.
|
|
30
|
+
* @param {{ splitBlock: (() => void) | null, exitEmptyBlock: (() => boolean) | null }} commands
|
|
31
|
+
* @returns {void}
|
|
32
|
+
*/
|
|
33
|
+
setPluginStructuralCommands(commands: {
|
|
34
|
+
splitBlock: (() => void) | null;
|
|
35
|
+
exitEmptyBlock: (() => boolean) | null;
|
|
36
|
+
}): void;
|
|
37
|
+
/** Select the render context used for subsequently created blocks. */
|
|
38
|
+
setReadOnly(readOnly: any): void;
|
|
39
|
+
/** Enable insert/remove animations (call after initial load). */
|
|
40
|
+
enableAnimations(): void;
|
|
41
|
+
/**
|
|
42
|
+
* Insert a new block.
|
|
43
|
+
* @param {string} type
|
|
44
|
+
* @param {Record<string, unknown>} [data]
|
|
45
|
+
* @param {number} [index] - insert position, defaults to after current or end
|
|
46
|
+
* @param {string} [id] - optional block ID (for restoring saved data)
|
|
47
|
+
* @param {Record<string, import('../renderer/types.js').InlineWidget>} [inline]
|
|
48
|
+
* @returns {Block}
|
|
49
|
+
*/
|
|
50
|
+
insert(type: string, data?: Record<string, unknown>, index?: number, id?: string, inline?: Record<string, import("../renderer/types.js").InlineWidget>): Block;
|
|
51
|
+
/**
|
|
52
|
+
* Build a complete replacement document off-DOM. The returned transaction
|
|
53
|
+
* owns the staged blocks until commit() or dispose() is called.
|
|
54
|
+
* @param {import('./types.js').BlockData[] | undefined} blockList
|
|
55
|
+
* @param {string} defaultBlockType
|
|
56
|
+
* @param {string} [logPrefix]
|
|
57
|
+
*/
|
|
58
|
+
prepareReplacement(blockList: import("./types.js").BlockData[] | undefined, defaultBlockType: string, logPrefix?: string): {
|
|
59
|
+
blocks: readonly Block[];
|
|
60
|
+
commit: (options?: {}) => void;
|
|
61
|
+
dispose: () => void;
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Remove a block by index.
|
|
65
|
+
* @param {number} index
|
|
66
|
+
*/
|
|
67
|
+
remove(index: number): void;
|
|
68
|
+
/**
|
|
69
|
+
* Move a block from one position to another.
|
|
70
|
+
* @param {number} fromIndex
|
|
71
|
+
* @param {number} toIndex
|
|
72
|
+
*/
|
|
73
|
+
move(fromIndex: number, toIndex: number): void;
|
|
74
|
+
/**
|
|
75
|
+
* Convert a block to a different type, preserving transferable data.
|
|
76
|
+
* @param {number} index
|
|
77
|
+
* @param {string} newType
|
|
78
|
+
* @param {Record<string, unknown>} [extraData] - e.g. { level: 2 } from toolbox entry
|
|
79
|
+
* @returns {Block | undefined}
|
|
80
|
+
*/
|
|
81
|
+
convert(index: number, newType: string, extraData?: Record<string, unknown>): Block | undefined;
|
|
82
|
+
/**
|
|
83
|
+
* Set focus to a block by index.
|
|
84
|
+
* @param {number} index
|
|
85
|
+
*/
|
|
86
|
+
setCurrentIndex(index: number): void;
|
|
87
|
+
/**
|
|
88
|
+
* @param {number} index
|
|
89
|
+
* @returns {Block | undefined}
|
|
90
|
+
*/
|
|
91
|
+
getBlockByIndex(index: number): Block | undefined;
|
|
92
|
+
/**
|
|
93
|
+
* @param {string} id
|
|
94
|
+
* @returns {Block | undefined}
|
|
95
|
+
*/
|
|
96
|
+
getBlockById(id: string): Block | undefined;
|
|
97
|
+
/**
|
|
98
|
+
* @returns {Block | undefined}
|
|
99
|
+
*/
|
|
100
|
+
getCurrentBlock(): Block | undefined;
|
|
101
|
+
/**
|
|
102
|
+
* @returns {number}
|
|
103
|
+
*/
|
|
104
|
+
getCurrentIndex(): number;
|
|
105
|
+
/**
|
|
106
|
+
* @returns {number}
|
|
107
|
+
*/
|
|
108
|
+
getBlockCount(): number;
|
|
109
|
+
/**
|
|
110
|
+
* Get the index of a block by its ID. O(1) via reverse index map.
|
|
111
|
+
* @param {string} id
|
|
112
|
+
* @returns {number}
|
|
113
|
+
*/
|
|
114
|
+
getBlockIndex(id: string): number;
|
|
115
|
+
/**
|
|
116
|
+
* Find the block that contains a given DOM node.
|
|
117
|
+
* @param {import('./types.js').DOMNode} node
|
|
118
|
+
* @returns {Block | undefined}
|
|
119
|
+
*/
|
|
120
|
+
getBlockByChildNode(node: import("./types.js").DOMNode): Block | undefined;
|
|
121
|
+
/**
|
|
122
|
+
* Find the closest block by Y coordinate.
|
|
123
|
+
* Used for cross-block mouse selection when the cursor may be
|
|
124
|
+
* in gaps between blocks or outside block elements.
|
|
125
|
+
* @param {number} y - clientY from mouse event
|
|
126
|
+
* @returns {Block | undefined}
|
|
127
|
+
*/
|
|
128
|
+
getBlockByY(y: number): Block | undefined;
|
|
129
|
+
/**
|
|
130
|
+
* Get all blocks in selected state.
|
|
131
|
+
* @returns {Block[]}
|
|
132
|
+
*/
|
|
133
|
+
getSelectedBlocks(): Block[];
|
|
134
|
+
/**
|
|
135
|
+
* Check if any blocks are in selected state.
|
|
136
|
+
* @returns {boolean}
|
|
137
|
+
*/
|
|
138
|
+
hasSelectedBlocks(): boolean;
|
|
139
|
+
/**
|
|
140
|
+
* Clear selection state from all blocks.
|
|
141
|
+
*/
|
|
142
|
+
clearSelection(): void;
|
|
143
|
+
/**
|
|
144
|
+
* Remove all selected blocks and ensure at least one block remains.
|
|
145
|
+
* @param {string} defaultBlockType — block type to insert if all blocks are removed
|
|
146
|
+
* @returns {{ focusIndex: number } | null} — index to focus after removal, or null if nothing was selected
|
|
147
|
+
*/
|
|
148
|
+
removeSelected(defaultBlockType: string): {
|
|
149
|
+
focusIndex: number;
|
|
150
|
+
} | null;
|
|
151
|
+
/**
|
|
152
|
+
* Remove all blocks.
|
|
153
|
+
*/
|
|
154
|
+
clear(): void;
|
|
155
|
+
/**
|
|
156
|
+
* Iterator support.
|
|
157
|
+
* @returns {IterableIterator<Block>}
|
|
158
|
+
*/
|
|
159
|
+
[Symbol.iterator](): IterableIterator<Block>;
|
|
160
|
+
#private;
|
|
161
|
+
}
|
|
162
|
+
export type IBlockManagerContract = import("./types.js").IBlockManager;
|
|
163
|
+
import { Block } from './Block.js';
|