@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,399 @@
|
|
|
1
|
+
import { sanitizeHtml } from '../../core/sanitize.js'
|
|
2
|
+
import { resolvePath } from '../../shared/resolvePath.js'
|
|
3
|
+
import { BlockPluginAbstract } from '../BlockPluginAbstract.js'
|
|
4
|
+
import { validateTableData } from '../../shared/blockDataValidators.js'
|
|
5
|
+
import { mapTableTextFields } from '../../shared/mapTextFields.js'
|
|
6
|
+
|
|
7
|
+
const editorStyles = resolvePath('./table.css', import.meta.url)
|
|
8
|
+
|
|
9
|
+
// Tabler icon: table
|
|
10
|
+
const ICON = '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 5a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v14a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-14z"/><path d="M3 10h18"/><path d="M10 3v18"/></svg>'
|
|
11
|
+
|
|
12
|
+
// Tabler icons for settings
|
|
13
|
+
const ICON_ROW_ADD = '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6v4a1 1 0 0 1 -1 1h-14a1 1 0 0 1 -1 -1v-4a1 1 0 0 1 1 -1h14a1 1 0 0 1 1 1z"/><path d="M12 15l0 4"/><path d="M10 17l4 0"/></svg>'
|
|
14
|
+
const ICON_ROW_DEL = '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6v4a1 1 0 0 1 -1 1h-14a1 1 0 0 1 -1 -1v-4a1 1 0 0 1 1 -1h14a1 1 0 0 1 1 1z"/><path d="M10 17l4 0"/></svg>'
|
|
15
|
+
const ICON_COL_ADD = '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 4v16a1 1 0 0 0 1 1h4a1 1 0 0 0 1 -1v-16a1 1 0 0 0 -1 -1h-4a1 1 0 0 0 -1 1z"/><path d="M17 10l0 4"/><path d="M15 12l4 0"/></svg>'
|
|
16
|
+
const ICON_COL_DEL = '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 4v16a1 1 0 0 0 1 1h4a1 1 0 0 0 1 -1v-16a1 1 0 0 0 -1 -1h-4a1 1 0 0 0 -1 1z"/><path d="M15 12l4 0"/></svg>'
|
|
17
|
+
const ICON_HEADER = '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 5a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v14a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-14z"/><path d="M3 10h18"/><path d="M10 3v7"/></svg>'
|
|
18
|
+
|
|
19
|
+
/** Editable rich-text table with row, column, and heading controls. */
|
|
20
|
+
export class Table extends BlockPluginAbstract {
|
|
21
|
+
static isTextBlock = false
|
|
22
|
+
static styles = [editorStyles]
|
|
23
|
+
type = 'table'
|
|
24
|
+
icon = ICON
|
|
25
|
+
inlineTools = true
|
|
26
|
+
mapTextFields = mapTableTextFields
|
|
27
|
+
pasteConfig = {
|
|
28
|
+
tags: ['table'],
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Return the localized toolbox label for this block.
|
|
33
|
+
* @returns {string}
|
|
34
|
+
*/
|
|
35
|
+
get title() {
|
|
36
|
+
return this._t('title', 'Table')
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Create the editable DOM owned by this block instance.
|
|
41
|
+
* @param {{ content?: string[][], withHeadings?: boolean }} data
|
|
42
|
+
* @param {import('../../core/types').BlockMutationContext} context
|
|
43
|
+
* @returns {HTMLElement}
|
|
44
|
+
*/
|
|
45
|
+
render(data, context) {
|
|
46
|
+
const inputRows = Array.isArray(data?.content)
|
|
47
|
+
? data.content.filter(Array.isArray)
|
|
48
|
+
: []
|
|
49
|
+
const rows = inputRows.length || 3
|
|
50
|
+
const cols = inputRows.find(row => row.length > 0)?.length || 3
|
|
51
|
+
const withHeadings = data?.withHeadings === true
|
|
52
|
+
|
|
53
|
+
const wrapper = document.createElement('div')
|
|
54
|
+
wrapper.classList.add('oe-table-wrapper')
|
|
55
|
+
wrapper.dataset.headings = String(withHeadings)
|
|
56
|
+
|
|
57
|
+
const table = document.createElement('table')
|
|
58
|
+
table.classList.add('oe-table')
|
|
59
|
+
|
|
60
|
+
for (let r = 0; r < rows; r++) {
|
|
61
|
+
const tr = document.createElement('tr')
|
|
62
|
+
for (let c = 0; c < cols; c++) {
|
|
63
|
+
const isHeader = withHeadings && r === 0
|
|
64
|
+
const cell = document.createElement(isHeader ? 'th' : 'td')
|
|
65
|
+
cell.classList.add('oe-table__cell')
|
|
66
|
+
cell.contentEditable = 'true'
|
|
67
|
+
const candidate = inputRows[r]?.[c]
|
|
68
|
+
const text = typeof candidate === 'string' ? candidate : ''
|
|
69
|
+
if (text) {
|
|
70
|
+
cell.innerHTML = sanitizeHtml(text)
|
|
71
|
+
}
|
|
72
|
+
tr.appendChild(cell)
|
|
73
|
+
}
|
|
74
|
+
table.appendChild(tr)
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Tab navigation between cells
|
|
78
|
+
table.addEventListener('keydown', (e) => {
|
|
79
|
+
if (e.key === 'Tab') {
|
|
80
|
+
if (this.#navigateCell(table, e.shiftKey ? -1 : 1)) {
|
|
81
|
+
e.preventDefault()
|
|
82
|
+
e.stopPropagation()
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// Prevent Enter from creating new block — insert <br> instead
|
|
86
|
+
if (e.key === 'Enter' && !e.shiftKey) {
|
|
87
|
+
e.preventDefault()
|
|
88
|
+
e.stopPropagation()
|
|
89
|
+
context.mutate(() => {
|
|
90
|
+
const sel = window.getSelection()
|
|
91
|
+
if (sel && sel.rangeCount > 0) {
|
|
92
|
+
const range = sel.getRangeAt(0)
|
|
93
|
+
range.deleteContents()
|
|
94
|
+
const br = document.createElement('br')
|
|
95
|
+
range.insertNode(br)
|
|
96
|
+
range.setStartAfter(br)
|
|
97
|
+
range.collapse(true)
|
|
98
|
+
sel.removeAllRanges()
|
|
99
|
+
sel.addRange(range)
|
|
100
|
+
}
|
|
101
|
+
})
|
|
102
|
+
}
|
|
103
|
+
})
|
|
104
|
+
|
|
105
|
+
wrapper.appendChild(table)
|
|
106
|
+
return wrapper
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Render block settings controls (add/remove row/col, toggle header).
|
|
111
|
+
* @param {HTMLElement} element
|
|
112
|
+
* @returns {HTMLElement[]}
|
|
113
|
+
*/
|
|
114
|
+
renderSettings(element) {
|
|
115
|
+
const withHeadings = element.dataset.headings === 'true'
|
|
116
|
+
const t = (/** @type {string} */ key, /** @type {string} */ fallback) => this._t(key, fallback)
|
|
117
|
+
const defs = [
|
|
118
|
+
{ icon: ICON_HEADER, label: t('toggleHeader', 'Toggle header'), action: 'header', active: withHeadings },
|
|
119
|
+
{ icon: ICON_ROW_ADD, label: t('addRow', 'Add row'), action: 'row-add' },
|
|
120
|
+
{ icon: ICON_ROW_DEL, label: t('deleteRow', 'Delete row'), action: 'row-del' },
|
|
121
|
+
{ icon: ICON_COL_ADD, label: t('addColumn', 'Add column'), action: 'col-add' },
|
|
122
|
+
{ icon: ICON_COL_DEL, label: t('deleteColumn', 'Delete column'), action: 'col-del' },
|
|
123
|
+
]
|
|
124
|
+
|
|
125
|
+
return defs.map(item => {
|
|
126
|
+
const btn = document.createElement('li')
|
|
127
|
+
btn.setAttribute('role', 'menuitem')
|
|
128
|
+
btn.setAttribute('tabindex', '-1')
|
|
129
|
+
btn.className = 'oe-settings-menu__item'
|
|
130
|
+
if (item.active) btn.classList.add('oe-settings-menu__item--active')
|
|
131
|
+
|
|
132
|
+
const ic = document.createElement('span')
|
|
133
|
+
ic.className = 'oe-settings-menu__icon'
|
|
134
|
+
ic.innerHTML = item.icon
|
|
135
|
+
btn.appendChild(ic)
|
|
136
|
+
|
|
137
|
+
const lb = document.createElement('span')
|
|
138
|
+
lb.className = 'oe-settings-menu__label'
|
|
139
|
+
lb.textContent = item.label
|
|
140
|
+
btn.appendChild(lb)
|
|
141
|
+
|
|
142
|
+
btn.dataset.action = item.action
|
|
143
|
+
return btn
|
|
144
|
+
})
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Handle settings action for table operations.
|
|
149
|
+
* @param {HTMLElement} element — the table wrapper
|
|
150
|
+
* @param {string} action
|
|
151
|
+
* @returns {null}
|
|
152
|
+
*/
|
|
153
|
+
onSettingsAction(element, action) {
|
|
154
|
+
const table = element.querySelector('table')
|
|
155
|
+
if (!table) return null
|
|
156
|
+
|
|
157
|
+
switch (action) {
|
|
158
|
+
case 'header':
|
|
159
|
+
this.#toggleHeader(element, table)
|
|
160
|
+
break
|
|
161
|
+
case 'row-add':
|
|
162
|
+
this.#addRow(table)
|
|
163
|
+
break
|
|
164
|
+
case 'row-del':
|
|
165
|
+
this.#deleteRow(table)
|
|
166
|
+
break
|
|
167
|
+
case 'col-add':
|
|
168
|
+
this.#addColumn(table)
|
|
169
|
+
break
|
|
170
|
+
case 'col-del':
|
|
171
|
+
this.#deleteColumn(table)
|
|
172
|
+
break
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
return null
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Serialize the current block DOM into document data.
|
|
180
|
+
* @param {HTMLElement} element
|
|
181
|
+
* @returns {{ content: string[][], withHeadings: boolean }}
|
|
182
|
+
*/
|
|
183
|
+
save(element) {
|
|
184
|
+
const table = element.querySelector('table')
|
|
185
|
+
if (!table) return { content: [['']], withHeadings: false }
|
|
186
|
+
|
|
187
|
+
const content = []
|
|
188
|
+
for (const tr of table.rows) {
|
|
189
|
+
const row = []
|
|
190
|
+
for (const cell of tr.cells) {
|
|
191
|
+
row.push(cell.innerHTML.trim())
|
|
192
|
+
}
|
|
193
|
+
content.push(row)
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
return {
|
|
197
|
+
content,
|
|
198
|
+
withHeadings: element.dataset.headings === 'true',
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Check whether serialized data satisfies this block's schema.
|
|
204
|
+
* @param {{ content?: string[][] }} data
|
|
205
|
+
* @returns {boolean}
|
|
206
|
+
*/
|
|
207
|
+
validate(data) {
|
|
208
|
+
return validateTableData(data)
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Extract neutral text that can initialize another block type.
|
|
213
|
+
* @param {HTMLElement} element
|
|
214
|
+
* @returns {{ text: string }}
|
|
215
|
+
*/
|
|
216
|
+
exportData(element) {
|
|
217
|
+
const table = element.querySelector('table')
|
|
218
|
+
if (!table) return { text: '' }
|
|
219
|
+
const rows = [...table.rows].map(row => (
|
|
220
|
+
[...row.cells]
|
|
221
|
+
.map(cell => sanitizeHtml(cell.innerHTML.trim()))
|
|
222
|
+
.filter(Boolean)
|
|
223
|
+
.join(' — ')
|
|
224
|
+
)).filter(Boolean)
|
|
225
|
+
return { text: rows.join('<br>') }
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* Check whether the block has no meaningful user content.
|
|
230
|
+
* @param {HTMLElement} element
|
|
231
|
+
* @returns {boolean}
|
|
232
|
+
*/
|
|
233
|
+
isEmpty(element) {
|
|
234
|
+
const table = element.querySelector('table')
|
|
235
|
+
if (!table) return true
|
|
236
|
+
for (const cell of table.querySelectorAll('td, th')) {
|
|
237
|
+
if ((cell.textContent?.trim().length ?? 0) > 0) return false
|
|
238
|
+
}
|
|
239
|
+
return true
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Handle pasted table elements.
|
|
244
|
+
* @param {import('../../types').TagPasteEvent} event
|
|
245
|
+
* @returns {{ content: string[][], withHeadings: boolean } | null}
|
|
246
|
+
*/
|
|
247
|
+
onPaste(event) {
|
|
248
|
+
if (event.type !== 'tag') return null
|
|
249
|
+
const table = event.element.tagName === 'TABLE'
|
|
250
|
+
? event.element
|
|
251
|
+
: event.element.querySelector('table')
|
|
252
|
+
if (!table) return null
|
|
253
|
+
|
|
254
|
+
const content = []
|
|
255
|
+
const rows = table.querySelectorAll('tr')
|
|
256
|
+
for (const tr of rows) {
|
|
257
|
+
const row = []
|
|
258
|
+
for (const cell of tr.querySelectorAll('td, th')) {
|
|
259
|
+
row.push(cell.innerHTML.trim())
|
|
260
|
+
}
|
|
261
|
+
if (row.length > 0) content.push(row)
|
|
262
|
+
}
|
|
263
|
+
if (content.length === 0) return null
|
|
264
|
+
const firstContentRow = [...rows].find(row => row.querySelector('td, th'))
|
|
265
|
+
const withHeadings = !!firstContentRow
|
|
266
|
+
&& [...firstContentRow.querySelectorAll('td, th')].some(cell => cell.tagName === 'TH')
|
|
267
|
+
return { content, withHeadings }
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
// ── Private — table operations ─────────────────────────────────────────────
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* Toggle header row (th ↔ td for first row).
|
|
274
|
+
* @param {HTMLElement} wrapper
|
|
275
|
+
* @param {HTMLTableElement} table
|
|
276
|
+
* @returns {void}
|
|
277
|
+
*/
|
|
278
|
+
#toggleHeader(wrapper, table) {
|
|
279
|
+
const firstRow = table.rows[0]
|
|
280
|
+
if (!firstRow) return
|
|
281
|
+
|
|
282
|
+
const isHeader = wrapper.dataset.headings === 'true'
|
|
283
|
+
const newIsHeader = !isHeader
|
|
284
|
+
wrapper.dataset.headings = String(newIsHeader)
|
|
285
|
+
|
|
286
|
+
const newTag = newIsHeader ? 'th' : 'td'
|
|
287
|
+
for (const cell of [...firstRow.cells]) {
|
|
288
|
+
const newCell = document.createElement(newTag)
|
|
289
|
+
newCell.className = 'oe-table__cell'
|
|
290
|
+
newCell.contentEditable = 'true'
|
|
291
|
+
newCell.innerHTML = cell.innerHTML
|
|
292
|
+
cell.replaceWith(newCell)
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* Add a row at the end.
|
|
298
|
+
* @param {HTMLTableElement} table
|
|
299
|
+
* @returns {void}
|
|
300
|
+
*/
|
|
301
|
+
#addRow(table) {
|
|
302
|
+
const cols = table.rows[0]?.cells.length || 1
|
|
303
|
+
const tr = document.createElement('tr')
|
|
304
|
+
for (let c = 0; c < cols; c++) {
|
|
305
|
+
const td = document.createElement('td')
|
|
306
|
+
td.className = 'oe-table__cell'
|
|
307
|
+
td.contentEditable = 'true'
|
|
308
|
+
tr.appendChild(td)
|
|
309
|
+
}
|
|
310
|
+
table.appendChild(tr)
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
/**
|
|
314
|
+
* Delete the last row (keep at least 1).
|
|
315
|
+
* @param {HTMLTableElement} table
|
|
316
|
+
* @returns {void}
|
|
317
|
+
*/
|
|
318
|
+
#deleteRow(table) {
|
|
319
|
+
if (table.rows.length <= 1) return
|
|
320
|
+
table.deleteRow(table.rows.length - 1)
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
/**
|
|
324
|
+
* Add a column at the end.
|
|
325
|
+
* @param {HTMLTableElement} table
|
|
326
|
+
* @returns {void}
|
|
327
|
+
*/
|
|
328
|
+
#addColumn(table) {
|
|
329
|
+
const wrapper = /** @type {HTMLElement | null} */ (table.closest('.oe-table-wrapper'))
|
|
330
|
+
const isHeader = wrapper ? wrapper.dataset.headings === 'true' : false
|
|
331
|
+
|
|
332
|
+
for (let r = 0; r < table.rows.length; r++) {
|
|
333
|
+
const row = table.rows[r]
|
|
334
|
+
if (!row) continue
|
|
335
|
+
const tag = (isHeader && r === 0) ? 'th' : 'td'
|
|
336
|
+
const cell = document.createElement(tag)
|
|
337
|
+
cell.className = 'oe-table__cell'
|
|
338
|
+
cell.contentEditable = 'true'
|
|
339
|
+
row.appendChild(cell)
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
/**
|
|
344
|
+
* Delete the last column (keep at least 1).
|
|
345
|
+
* @param {HTMLTableElement} table
|
|
346
|
+
* @returns {void}
|
|
347
|
+
*/
|
|
348
|
+
#deleteColumn(table) {
|
|
349
|
+
const cols = table.rows[0]?.cells.length || 0
|
|
350
|
+
if (cols <= 1) return
|
|
351
|
+
|
|
352
|
+
for (const row of table.rows) {
|
|
353
|
+
row.deleteCell(row.cells.length - 1)
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
/**
|
|
358
|
+
* Navigate to adjacent cell.
|
|
359
|
+
* @param {HTMLTableElement} table
|
|
360
|
+
* @param {number} direction — 1 for forward, -1 for backward
|
|
361
|
+
* @returns {boolean} Whether focus moved to another cell.
|
|
362
|
+
*/
|
|
363
|
+
#navigateCell(table, direction) {
|
|
364
|
+
const cells = /** @type {HTMLElement[]} */ ([...table.querySelectorAll('td, th')])
|
|
365
|
+
const sel = window.getSelection()
|
|
366
|
+
if (!sel || sel.rangeCount === 0) return false
|
|
367
|
+
|
|
368
|
+
const activeCell = /** @type {HTMLElement | null} */ (
|
|
369
|
+
sel.anchorNode?.nodeType === Node.ELEMENT_NODE
|
|
370
|
+
? /** @type {HTMLElement} */ (sel.anchorNode).closest('td, th')
|
|
371
|
+
: sel.anchorNode?.parentElement?.closest('td, th')
|
|
372
|
+
)
|
|
373
|
+
|
|
374
|
+
if (!activeCell || !table.contains(activeCell)) {
|
|
375
|
+
const first = cells[0]
|
|
376
|
+
if (!first) return false
|
|
377
|
+
first.focus()
|
|
378
|
+
return true
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
const idx = cells.indexOf(activeCell)
|
|
382
|
+
const next = cells[idx + direction]
|
|
383
|
+
if (next) {
|
|
384
|
+
next.focus()
|
|
385
|
+
// Place caret at start or end
|
|
386
|
+
const range = document.createRange()
|
|
387
|
+
if (direction > 0) {
|
|
388
|
+
range.setStart(next, 0)
|
|
389
|
+
} else {
|
|
390
|
+
range.selectNodeContents(next)
|
|
391
|
+
range.collapse(false)
|
|
392
|
+
}
|
|
393
|
+
sel.removeAllRanges()
|
|
394
|
+
sel.addRange(range)
|
|
395
|
+
return true
|
|
396
|
+
}
|
|
397
|
+
return false
|
|
398
|
+
}
|
|
399
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
declare const _default: {
|
|
2
|
+
'plugin.table.title': string;
|
|
3
|
+
'plugin.table.toggleHeader': string;
|
|
4
|
+
'plugin.table.addRow': string;
|
|
5
|
+
'plugin.table.deleteRow': string;
|
|
6
|
+
'plugin.table.addColumn': string;
|
|
7
|
+
'plugin.table.deleteColumn': string;
|
|
8
|
+
};
|
|
9
|
+
export default _default;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
'plugin.table.title': 'Table',
|
|
3
|
+
'plugin.table.toggleHeader': 'Toggle header',
|
|
4
|
+
'plugin.table.addRow': 'Add row',
|
|
5
|
+
'plugin.table.deleteRow': 'Delete row',
|
|
6
|
+
'plugin.table.addColumn': 'Add column',
|
|
7
|
+
'plugin.table.deleteColumn': 'Delete column',
|
|
8
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
declare const _default: {
|
|
2
|
+
'plugin.table.title': string;
|
|
3
|
+
'plugin.table.toggleHeader': string;
|
|
4
|
+
'plugin.table.addRow': string;
|
|
5
|
+
'plugin.table.deleteRow': string;
|
|
6
|
+
'plugin.table.addColumn': string;
|
|
7
|
+
'plugin.table.deleteColumn': string;
|
|
8
|
+
};
|
|
9
|
+
export default _default;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
'plugin.table.title': 'Таблица',
|
|
3
|
+
'plugin.table.toggleHeader': 'Переключить заголовок',
|
|
4
|
+
'plugin.table.addRow': 'Добавить строку',
|
|
5
|
+
'plugin.table.deleteRow': 'Удалить строку',
|
|
6
|
+
'plugin.table.addColumn': 'Добавить столбец',
|
|
7
|
+
'plugin.table.deleteColumn': 'Удалить столбец',
|
|
8
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
.oe-table-wrapper {
|
|
2
|
+
overflow-x: auto;
|
|
3
|
+
-webkit-overflow-scrolling: touch;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
.oe-table {
|
|
7
|
+
width: 100%;
|
|
8
|
+
border-collapse: collapse;
|
|
9
|
+
border: 1px solid var(--oe-border, #1a1a1a);
|
|
10
|
+
border-radius: var(--oe-radius-sm, 4px);
|
|
11
|
+
font-size: var(--oe-font-size, 15px);
|
|
12
|
+
line-height: var(--oe-line-height, 1.7);
|
|
13
|
+
color: var(--oe-text-1, #f5f5f5);
|
|
14
|
+
font-family: var(--oe-font, inherit);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.oe-table__cell {
|
|
18
|
+
padding: 8px 12px;
|
|
19
|
+
border: 1px solid var(--oe-border, #1a1a1a);
|
|
20
|
+
outline: none;
|
|
21
|
+
word-break: break-word;
|
|
22
|
+
white-space: pre-wrap;
|
|
23
|
+
vertical-align: top;
|
|
24
|
+
min-width: 80px;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.oe-table__cell:focus {
|
|
28
|
+
background: var(--oe-accent-alpha, rgba(67, 87, 180, 0.15));
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/* Header row */
|
|
32
|
+
.oe-table-wrapper[data-headings="true"] th.oe-table__cell {
|
|
33
|
+
background: var(--oe-surface, #0a0a0a);
|
|
34
|
+
font-weight: 600;
|
|
35
|
+
color: var(--oe-text-1, #f5f5f5);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/* Inline formatting inside cells */
|
|
39
|
+
.oe-table__cell b,
|
|
40
|
+
.oe-table__cell strong {
|
|
41
|
+
font-weight: 600;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.oe-table__cell a {
|
|
45
|
+
color: var(--oe-text-2, #c4c4c4);
|
|
46
|
+
text-decoration: underline;
|
|
47
|
+
text-underline-offset: 3px;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.oe-table__cell a:hover {
|
|
51
|
+
color: var(--oe-text-1, #f5f5f5);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.oe-table__cell mark {
|
|
55
|
+
padding: 1px 4px;
|
|
56
|
+
background: var(--oe-mark-bg, rgba(245, 166, 35, 0.2));
|
|
57
|
+
border-radius: 3px;
|
|
58
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Toggle block plugin
|
|
2
|
+
|
|
3
|
+
Collapsible block with editable title, rich content, and persistent open state.
|
|
4
|
+
|
|
5
|
+
## Install and register
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @shelamkoff/rector
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
```js
|
|
12
|
+
import { createEditor } from '@shelamkoff/rector'
|
|
13
|
+
import { Toggle } from '@shelamkoff/rector/plugins/toggle'
|
|
14
|
+
import '@shelamkoff/rector/styles/editor.css'
|
|
15
|
+
|
|
16
|
+
const editor = createEditor({
|
|
17
|
+
holder: document.querySelector('#editor'),
|
|
18
|
+
plugins: [new Toggle()],
|
|
19
|
+
})
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
The registered block type is `toggle`. The class is also exported by the complete `@shelamkoff/rector/plugins` preset and can be loaded through `@shelamkoff/rector/plugins/async`.
|
|
23
|
+
|
|
24
|
+
## Data
|
|
25
|
+
|
|
26
|
+
```json
|
|
27
|
+
{ "title": "Details", "content": "Hidden text", "open": false }
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Field reference
|
|
31
|
+
|
|
32
|
+
| Field | Required | Meaning and constraints |
|
|
33
|
+
| --- | --- | --- |
|
|
34
|
+
| `title` | yes | String containing sanitized inline HTML; it may be empty. |
|
|
35
|
+
| `content` | yes | String containing sanitized inline HTML; it may be empty. |
|
|
36
|
+
| `open` | no | Boolean initial disclosure state; defaults to `false` when omitted. |
|
|
37
|
+
|
|
38
|
+
At least one of `title` and `content` must be non-blank. The persisted `open` value lets the renderer reproduce the chosen initial state.
|
|
39
|
+
|
|
40
|
+
## Configuration
|
|
41
|
+
|
|
42
|
+
Every built-in block plugin accepts two style ownership options: `injectStyles?: boolean` defaults to `true`; set it to `false` when the host bundles that plugin's CSS. `css?: string` adds one host-provided stylesheet URL after the plugin default, or acts as the replacement URL when default injection is disabled.
|
|
43
|
+
|
|
44
|
+
## Capabilities
|
|
45
|
+
|
|
46
|
+
Inline formatting; editable title/content; merge; persistent disclosure state; keyboard-accessible renderer.
|
|
47
|
+
|
|
48
|
+
## Undo, lifecycle, and styles
|
|
49
|
+
|
|
50
|
+
User actions exposed by the plugin enter the command pipeline through the supplied `context.mutate()` capability, so each completed action is one undo/redo step. The editor reference-counts the plugin's declared stylesheet URLs. Removing a block calls its cleanup hook; removing the editor calls `destroy()` for every remaining block and then releases shared plugin resources.
|
|
51
|
+
|
|
52
|
+
Do not remove the editor holder without first calling `editor.destroy()`.
|
|
53
|
+
|
|
54
|
+
## Document output
|
|
55
|
+
|
|
56
|
+
Use the matching renderer from `@shelamkoff/rector/renderer/renderers/toggle`. The VitePress guide documents configuration, commands and history, extension contracts, document migrations, styling, security, and lifecycle in a sequential form.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Блочный плагин Toggle
|
|
2
|
+
|
|
3
|
+
Сворачиваемый блок с заголовком, форматируемым содержимым и сохраняемым состоянием.
|
|
4
|
+
|
|
5
|
+
## Установка и регистрация
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @shelamkoff/rector
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
```js
|
|
12
|
+
import { createEditor } from '@shelamkoff/rector'
|
|
13
|
+
import { Toggle } from '@shelamkoff/rector/plugins/toggle'
|
|
14
|
+
import '@shelamkoff/rector/styles/editor.css'
|
|
15
|
+
|
|
16
|
+
const editor = createEditor({
|
|
17
|
+
holder: document.querySelector('#editor'),
|
|
18
|
+
plugins: [new Toggle()],
|
|
19
|
+
})
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Тип блока — `toggle`. Класс также экспортируется общей точкой входа `@shelamkoff/rector/plugins` и может загружаться по типу документа через `@shelamkoff/rector/plugins/async`.
|
|
23
|
+
|
|
24
|
+
## Данные
|
|
25
|
+
|
|
26
|
+
```json
|
|
27
|
+
{ "title": "Подробности", "content": "Скрытый текст", "open": false }
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Поля данных
|
|
31
|
+
|
|
32
|
+
| Поле | Обязательно | Назначение и ограничения |
|
|
33
|
+
| --- | --- | --- |
|
|
34
|
+
| `title` | да | Строка с очищенным внутристрочным HTML; может быть пустой. |
|
|
35
|
+
| `content` | да | Строка с очищенным внутристрочным HTML; может быть пустой. |
|
|
36
|
+
| `open` | нет | Логическое значение исходного состояния раскрытия; при отсутствии считается `false`. |
|
|
37
|
+
|
|
38
|
+
Хотя бы одно из полей `title` и `content` должно быть непустым. Сохранённое значение `open` позволяет рендереру воспроизвести выбранное исходное состояние.
|
|
39
|
+
|
|
40
|
+
## Конфигурация
|
|
41
|
+
|
|
42
|
+
Каждый встроенный блочный плагин принимает два параметра владения стилями: `injectStyles?: boolean` по умолчанию равен `true`; укажите `false`, если приложение само включает CSS этого плагина. `css?: string` добавляет URL таблицы стилей приложения после стандартной, а при отключённой стандартной инъекции служит URL замены.
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
## Возможности
|
|
46
|
+
|
|
47
|
+
Форматирование; редактирование заголовка и содержимого; объединение; сохраняемое раскрытие; клавиатурная доступность.
|
|
48
|
+
|
|
49
|
+
## История, жизненный цикл и стили
|
|
50
|
+
|
|
51
|
+
Действия плагина входят в конвейер команд через предоставленный контекст `mutate()`, поэтому одно завершённое действие создаёт один шаг отмены и повтора. Редактор подсчитывает владельцев объявленных URL стилей. Удаление блока вызывает его метод освобождения ресурсов; `editor.destroy()` освобождает оставшиеся блоки и общие ресурсы.
|
|
52
|
+
|
|
53
|
+
Не удаляйте контейнер редактора до вызова `editor.destroy()`.
|
|
54
|
+
|
|
55
|
+
## Вывод документа
|
|
56
|
+
|
|
57
|
+
Используйте фабричную функцию из `@shelamkoff/rector/renderer/renderers/toggle`. Последовательное руководство VitePress описывает проверку данных, миграции, разработку расширений, диагностику, безопасность и стили.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type {} from './locale/keys.js'
|
|
2
|
+
/** Expandable rich-text block with an editable title and body. */
|
|
3
|
+
export class Toggle extends BlockPluginAbstract<Record<string, any>> {
|
|
4
|
+
static isTextBlock: boolean;
|
|
5
|
+
static styles: string[];
|
|
6
|
+
constructor(config?: Record<string, any>);
|
|
7
|
+
type: string;
|
|
8
|
+
icon: string;
|
|
9
|
+
inlineTools: boolean;
|
|
10
|
+
mapTextFields: typeof mapToggleTextFields;
|
|
11
|
+
/**
|
|
12
|
+
* Return the localized toolbox label for this block.
|
|
13
|
+
* @returns {string}
|
|
14
|
+
*/
|
|
15
|
+
get title(): string;
|
|
16
|
+
/**
|
|
17
|
+
* Create the editable DOM owned by this block instance.
|
|
18
|
+
* @param {{ title?: string, content?: string, open?: boolean }} data
|
|
19
|
+
* @param {import('../../core/types.js').BlockMutationContext} context
|
|
20
|
+
* @returns {HTMLElement}
|
|
21
|
+
*/
|
|
22
|
+
render(data: {
|
|
23
|
+
title?: string;
|
|
24
|
+
content?: string;
|
|
25
|
+
open?: boolean;
|
|
26
|
+
}, context: import("../../core/types.js").BlockMutationContext): HTMLElement;
|
|
27
|
+
/**
|
|
28
|
+
* Serialize the current block DOM into document data.
|
|
29
|
+
* @param {HTMLElement} element
|
|
30
|
+
* @returns {{ title: string, content: string, open: boolean }}
|
|
31
|
+
*/
|
|
32
|
+
save(element: HTMLElement): {
|
|
33
|
+
title: string;
|
|
34
|
+
content: string;
|
|
35
|
+
open: boolean;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Check whether serialized data satisfies this block's schema.
|
|
39
|
+
* @param {Record<string, unknown>} data @returns {boolean}
|
|
40
|
+
*/
|
|
41
|
+
validate(data: Record<string, unknown>): boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Check whether the block has no meaningful user content.
|
|
44
|
+
* @param {HTMLElement} element @returns {boolean}
|
|
45
|
+
*/
|
|
46
|
+
isEmpty(element: HTMLElement): boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Extract neutral rich text that can initialize another block type.
|
|
49
|
+
* @param {HTMLElement} element @returns {{ text: string }}
|
|
50
|
+
*/
|
|
51
|
+
exportData(element: HTMLElement): {
|
|
52
|
+
text: string;
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Merge incoming text into the current block.
|
|
56
|
+
* @param {HTMLElement} element
|
|
57
|
+
* @param {Record<string, unknown>} data
|
|
58
|
+
* @returns {void}
|
|
59
|
+
*/
|
|
60
|
+
merge(element: HTMLElement, data: Record<string, unknown>): void;
|
|
61
|
+
/**
|
|
62
|
+
* Release state owned by one rendered block.
|
|
63
|
+
* @param {HTMLElement} element
|
|
64
|
+
* @returns {void}
|
|
65
|
+
*/
|
|
66
|
+
destroy(element: HTMLElement): void;
|
|
67
|
+
}
|
|
68
|
+
import { BlockPluginAbstract } from '../BlockPluginAbstract.js';
|
|
69
|
+
import { mapToggleTextFields } from '../../shared/mapTextFields.js';
|