@ecsplico/editor 0.0.0-stage → 2.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/CHANGELOG.md +19 -0
- package/LICENSE +21 -0
- package/README.md +232 -2
- package/dist/code/CodeSurface.d.ts +24 -0
- package/dist/code/CodeSurface.js +57 -0
- package/dist/code/CodeSurface.js.map +1 -0
- package/dist/code/CodeSurface.vue.d.ts +29 -0
- package/dist/code/CodeSurface2.js +75 -0
- package/dist/code/CodeSurface2.js.map +1 -0
- package/dist/code/chrome-theme.js +76 -0
- package/dist/code/chrome-theme.js.map +1 -0
- package/dist/code/compartments.js +19 -0
- package/dist/code/compartments.js.map +1 -0
- package/dist/code/editor-factory.d.ts +41 -0
- package/dist/code/editor-factory.js +126 -0
- package/dist/code/editor-factory.js.map +1 -0
- package/dist/code/format-json.d.ts +27 -0
- package/dist/code/format-json.js +94 -0
- package/dist/code/format-json.js.map +1 -0
- package/dist/code/highlight-style.js +118 -0
- package/dist/code/highlight-style.js.map +1 -0
- package/dist/code/index.d.ts +6 -0
- package/dist/code/index.js +6 -0
- package/dist/code/jsonl-language.d.ts +6 -0
- package/dist/code/jsonl-language.js +33 -0
- package/dist/code/jsonl-language.js.map +1 -0
- package/dist/code/kind.d.ts +15 -0
- package/dist/code/kind.js +142 -0
- package/dist/code/kind.js.map +1 -0
- package/dist/code/lang-registry.d.ts +31 -0
- package/dist/code/lang-registry.js +54 -0
- package/dist/code/lang-registry.js.map +1 -0
- package/dist/code/react.d.ts +2 -0
- package/dist/code/react.js +1 -0
- package/dist/code/vue.d.ts +2 -0
- package/dist/code/vue.js +1 -0
- package/dist/core/abilities.d.ts +32 -0
- package/dist/core/abilities.js +160 -0
- package/dist/core/abilities.js.map +1 -0
- package/dist/core/block-convert.d.ts +59 -0
- package/dist/core/block-convert.js +164 -0
- package/dist/core/block-convert.js.map +1 -0
- package/dist/core/block-drag.d.ts +12 -0
- package/dist/core/block-drag.js +62 -0
- package/dist/core/block-drag.js.map +1 -0
- package/dist/core/block-flash.d.ts +19 -0
- package/dist/core/block-flash.js +66 -0
- package/dist/core/block-flash.js.map +1 -0
- package/dist/core/context.d.ts +63 -0
- package/dist/core/context.js +108 -0
- package/dist/core/context.js.map +1 -0
- package/dist/core/convert.d.ts +96 -0
- package/dist/core/convert.js +241 -0
- package/dist/core/convert.js.map +1 -0
- package/dist/core/core-feature.d.ts +17 -0
- package/dist/core/core-feature.js +100 -0
- package/dist/core/core-feature.js.map +1 -0
- package/dist/core/define-editor.d.ts +23 -0
- package/dist/core/define-editor.js +110 -0
- package/dist/core/define-editor.js.map +1 -0
- package/dist/core/doc-anchors.d.ts +67 -0
- package/dist/core/doc-anchors.js +112 -0
- package/dist/core/doc-anchors.js.map +1 -0
- package/dist/core/document-markdown.d.ts +13 -0
- package/dist/core/document-markdown.js +31 -0
- package/dist/core/document-markdown.js.map +1 -0
- package/dist/core/download.d.ts +5 -0
- package/dist/core/download.js +16 -0
- package/dist/core/download.js.map +1 -0
- package/dist/core/editor-ui.d.ts +45 -0
- package/dist/core/editor-ui.js +38 -0
- package/dist/core/editor-ui.js.map +1 -0
- package/dist/core/extension-points.d.ts +64 -0
- package/dist/core/feature-context.d.ts +32 -0
- package/dist/core/feature-context.js +46 -0
- package/dist/core/feature-context.js.map +1 -0
- package/dist/core/feature.d.ts +234 -0
- package/dist/core/feature.js +13 -0
- package/dist/core/feature.js.map +1 -0
- package/dist/core/fences.d.ts +16 -0
- package/dist/core/fences.js +105 -0
- package/dist/core/fences.js.map +1 -0
- package/dist/core/fetch-error.d.ts +5 -0
- package/dist/core/fetch-error.js +11 -0
- package/dist/core/fetch-error.js.map +1 -0
- package/dist/core/index.d.ts +28 -0
- package/dist/core/index.js +27 -0
- package/dist/core/metadata-types.d.ts +27 -0
- package/dist/core/metadata-types.js +10 -0
- package/dist/core/metadata-types.js.map +1 -0
- package/dist/core/metadata.d.ts +39 -0
- package/dist/core/metadata.js +76 -0
- package/dist/core/metadata.js.map +1 -0
- package/dist/core/notify.d.ts +31 -0
- package/dist/core/notify.js +7 -0
- package/dist/core/notify.js.map +1 -0
- package/dist/core/pipeline.d.ts +52 -0
- package/dist/core/pipeline.js +78 -0
- package/dist/core/pipeline.js.map +1 -0
- package/dist/core/schema/abilities.d.ts +55 -0
- package/dist/core/schema/abilities.js +113 -0
- package/dist/core/schema/abilities.js.map +1 -0
- package/dist/core/schema/block-ids.d.ts +29 -0
- package/dist/core/schema/block-ids.js +134 -0
- package/dist/core/schema/block-ids.js.map +1 -0
- package/dist/core/schema/hex-color.d.ts +5 -0
- package/dist/core/schema/hex-color.js +7 -0
- package/dist/core/schema/hex-color.js.map +1 -0
- package/dist/core/schema/index.d.ts +21 -0
- package/dist/core/schema/index.js +33 -0
- package/dist/core/schema/index.js.map +1 -0
- package/dist/core/schema/mark-flags.d.ts +12 -0
- package/dist/core/schema/node-flags.d.ts +23 -0
- package/dist/core/schema/node-flags.js +34 -0
- package/dist/core/schema/node-flags.js.map +1 -0
- package/dist/core/schema/opaque-fence.d.ts +11 -0
- package/dist/core/schema/opaque-fence.js +57 -0
- package/dist/core/schema/opaque-fence.js.map +1 -0
- package/dist/core/schema/strike.d.ts +4 -0
- package/dist/core/schema/strike.js +9 -0
- package/dist/core/schema/strike.js.map +1 -0
- package/dist/core/selection-range.d.ts +13 -0
- package/dist/core/selection-range.js +28 -0
- package/dist/core/selection-range.js.map +1 -0
- package/dist/core/slash.d.ts +24 -0
- package/dist/core/slash.js +60 -0
- package/dist/core/slash.js.map +1 -0
- package/dist/core/store.d.ts +22 -0
- package/dist/core/store.js +61 -0
- package/dist/core/store.js.map +1 -0
- package/dist/core/suggestion-popup.d.ts +63 -0
- package/dist/core/suggestion-popup.js +57 -0
- package/dist/core/suggestion-popup.js.map +1 -0
- package/dist/core/tag-name.js +11 -0
- package/dist/core/tag-name.js.map +1 -0
- package/dist/core/toolbar-items.d.ts +10 -0
- package/dist/core/toolbar-items.js +206 -0
- package/dist/core/toolbar-items.js.map +1 -0
- package/dist/core/toolbar.d.ts +74 -0
- package/dist/core/toolbar.js +45 -0
- package/dist/core/toolbar.js.map +1 -0
- package/dist/document/DocumentSurface.d.ts +38 -0
- package/dist/document/DocumentSurface.js +44 -0
- package/dist/document/DocumentSurface.js.map +1 -0
- package/dist/document/DocumentSurface.vue.d.ts +56 -0
- package/dist/document/DocumentSurface2.js +71 -0
- package/dist/document/DocumentSurface2.js.map +1 -0
- package/dist/document/react.d.ts +2 -0
- package/dist/document/react.js +1 -0
- package/dist/document/vue.d.ts +2 -0
- package/dist/document/vue.js +1 -0
- package/dist/features/ai/agent-op-review.d.ts +69 -0
- package/dist/features/ai/agent-op-review.js +182 -0
- package/dist/features/ai/agent-op-review.js.map +1 -0
- package/dist/features/ai/agent-ops.d.ts +15 -0
- package/dist/features/ai/agent-ops.js +228 -0
- package/dist/features/ai/agent-ops.js.map +1 -0
- package/dist/features/ai/ai-apply.d.ts +76 -0
- package/dist/features/ai/ai-apply.js +193 -0
- package/dist/features/ai/ai-apply.js.map +1 -0
- package/dist/features/ai/ai-menu.d.ts +38 -0
- package/dist/features/ai/ai-menu.js +20 -0
- package/dist/features/ai/ai-menu.js.map +1 -0
- package/dist/features/ai/ai-review.d.ts +136 -0
- package/dist/features/ai/ai-review.js +543 -0
- package/dist/features/ai/ai-review.js.map +1 -0
- package/dist/features/ai/ai-selection-highlight.d.ts +21 -0
- package/dist/features/ai/ai-selection-highlight.js +44 -0
- package/dist/features/ai/ai-selection-highlight.js.map +1 -0
- package/dist/features/ai/ai-sse.d.ts +28 -0
- package/dist/features/ai/ai-sse.js +82 -0
- package/dist/features/ai/ai-sse.js.map +1 -0
- package/dist/features/ai/assistant.d.ts +53 -0
- package/dist/features/ai/assistant.js +82 -0
- package/dist/features/ai/assistant.js.map +1 -0
- package/dist/features/ai/block-actions.d.ts +20 -0
- package/dist/features/ai/block-actions.js +55 -0
- package/dist/features/ai/block-actions.js.map +1 -0
- package/dist/features/ai/components/AiReviewBar.js +145 -0
- package/dist/features/ai/components/AiReviewBar.js.map +1 -0
- package/dist/features/ai/components/AiReviewBar.vue.d.ts +15 -0
- package/dist/features/ai/components/AiSelectionMenu.js +519 -0
- package/dist/features/ai/components/AiSelectionMenu.js.map +1 -0
- package/dist/features/ai/components/AiSelectionMenu.vue.d.ts +17 -0
- package/dist/features/ai/components/AiSidebar.js +378 -0
- package/dist/features/ai/components/AiSidebar.js.map +1 -0
- package/dist/features/ai/components/AiSidebar.vue.d.ts +26 -0
- package/dist/features/ai/components/DocumentChatAnswer.js +67 -0
- package/dist/features/ai/components/DocumentChatAnswer.js.map +1 -0
- package/dist/features/ai/components/DocumentChatAnswer.vue.d.ts +13 -0
- package/dist/features/ai/components/DocumentChatOps.js +113 -0
- package/dist/features/ai/components/DocumentChatOps.js.map +1 -0
- package/dist/features/ai/components/DocumentChatOps.vue.d.ts +27 -0
- package/dist/features/ai/components/ModelQuickSwitch.js +84 -0
- package/dist/features/ai/components/ModelQuickSwitch.js.map +1 -0
- package/dist/features/ai/components/ModelQuickSwitch.vue.d.ts +23 -0
- package/dist/features/ai/components/SettingsAiTab.js +88 -0
- package/dist/features/ai/components/SettingsAiTab.js.map +1 -0
- package/dist/features/ai/components/SettingsAiTab.vue.d.ts +6 -0
- package/dist/features/ai/components/SettingsModelProfiles.js +260 -0
- package/dist/features/ai/components/SettingsModelProfiles.js.map +1 -0
- package/dist/features/ai/components/SettingsModelProfiles.vue.d.ts +6 -0
- package/dist/features/ai/document-chat-model.d.ts +88 -0
- package/dist/features/ai/document-chat-model.js +190 -0
- package/dist/features/ai/document-chat-model.js.map +1 -0
- package/dist/features/ai/document-chat.d.ts +17 -0
- package/dist/features/ai/document-chat.js +112 -0
- package/dist/features/ai/document-chat.js.map +1 -0
- package/dist/features/ai/feature.d.ts +25 -0
- package/dist/features/ai/feature.js +89 -0
- package/dist/features/ai/feature.js.map +1 -0
- package/dist/features/ai/ghost-autocomplete.d.ts +47 -0
- package/dist/features/ai/ghost-autocomplete.js +204 -0
- package/dist/features/ai/ghost-autocomplete.js.map +1 -0
- package/dist/features/ai/index.d.ts +24 -0
- package/dist/features/ai/index.js +23 -0
- package/dist/features/ai/model-profiles.d.ts +36 -0
- package/dist/features/ai/model-profiles.js +111 -0
- package/dist/features/ai/model-profiles.js.map +1 -0
- package/dist/features/ai/preview-extensions.js +14 -0
- package/dist/features/ai/preview-extensions.js.map +1 -0
- package/dist/features/ai/protocol/agent-ops.d.ts +120 -0
- package/dist/features/ai/protocol/agent-ops.js +298 -0
- package/dist/features/ai/protocol/agent-ops.js.map +1 -0
- package/dist/features/ai/protocol/chat.d.ts +57 -0
- package/dist/features/ai/protocol/chat.js +146 -0
- package/dist/features/ai/protocol/chat.js.map +1 -0
- package/dist/features/ai/protocol/complete.d.ts +21 -0
- package/dist/features/ai/protocol/complete.js +81 -0
- package/dist/features/ai/protocol/complete.js.map +1 -0
- package/dist/features/ai/protocol/index.d.ts +7 -0
- package/dist/features/ai/protocol/index.js +7 -0
- package/dist/features/ai/protocol/models.d.ts +48 -0
- package/dist/features/ai/protocol/models.js +41 -0
- package/dist/features/ai/protocol/models.js.map +1 -0
- package/dist/features/ai/protocol/schemas.d.ts +36 -0
- package/dist/features/ai/protocol/schemas.js +40 -0
- package/dist/features/ai/protocol/schemas.js.map +1 -0
- package/dist/features/ai/protocol/tasks.d.ts +107 -0
- package/dist/features/ai/protocol/tasks.js +227 -0
- package/dist/features/ai/protocol/tasks.js.map +1 -0
- package/dist/features/ai/rate-limit.d.ts +9 -0
- package/dist/features/ai/rate-limit.js +20 -0
- package/dist/features/ai/rate-limit.js.map +1 -0
- package/dist/features/ai/react/AiReviewBar.d.ts +12 -0
- package/dist/features/ai/react/AiReviewBar.js +156 -0
- package/dist/features/ai/react/AiReviewBar.js.map +1 -0
- package/dist/features/ai/react/AiSelectionMenu.d.ts +14 -0
- package/dist/features/ai/react/AiSelectionMenu.js +513 -0
- package/dist/features/ai/react/AiSelectionMenu.js.map +1 -0
- package/dist/features/ai/react/AiSidebar.d.ts +19 -0
- package/dist/features/ai/react/AiSidebar.js +339 -0
- package/dist/features/ai/react/AiSidebar.js.map +1 -0
- package/dist/features/ai/react/DocumentChatAnswer.d.ts +10 -0
- package/dist/features/ai/react/DocumentChatAnswer.js +70 -0
- package/dist/features/ai/react/DocumentChatAnswer.js.map +1 -0
- package/dist/features/ai/react/DocumentChatOps.d.ts +19 -0
- package/dist/features/ai/react/DocumentChatOps.js +111 -0
- package/dist/features/ai/react/DocumentChatOps.js.map +1 -0
- package/dist/features/ai/react/ModelQuickSwitch.d.ts +19 -0
- package/dist/features/ai/react/ModelQuickSwitch.js +89 -0
- package/dist/features/ai/react/ModelQuickSwitch.js.map +1 -0
- package/dist/features/ai/react/SettingsAiTab.d.ts +5 -0
- package/dist/features/ai/react/SettingsAiTab.js +103 -0
- package/dist/features/ai/react/SettingsAiTab.js.map +1 -0
- package/dist/features/ai/react/SettingsModelProfiles.d.ts +8 -0
- package/dist/features/ai/react/SettingsModelProfiles.js +318 -0
- package/dist/features/ai/react/SettingsModelProfiles.js.map +1 -0
- package/dist/features/ai/react/use-ai-assistant.d.ts +22 -0
- package/dist/features/ai/react/use-ai-assistant.js +36 -0
- package/dist/features/ai/react/use-ai-assistant.js.map +1 -0
- package/dist/features/ai/react/use-document-chat.d.ts +32 -0
- package/dist/features/ai/react/use-document-chat.js +43 -0
- package/dist/features/ai/react/use-document-chat.js.map +1 -0
- package/dist/features/ai/react/use-model-profiles.d.ts +20 -0
- package/dist/features/ai/react/use-model-profiles.js +33 -0
- package/dist/features/ai/react/use-model-profiles.js.map +1 -0
- package/dist/features/ai/react.d.ts +23 -0
- package/dist/features/ai/react.js +28 -0
- package/dist/features/ai/react.js.map +1 -0
- package/dist/features/ai/sidebar-flow.d.ts +61 -0
- package/dist/features/ai/sidebar-flow.js +125 -0
- package/dist/features/ai/sidebar-flow.js.map +1 -0
- package/dist/features/ai/use-ai-assistant.d.ts +22 -0
- package/dist/features/ai/use-ai-assistant.js +39 -0
- package/dist/features/ai/use-ai-assistant.js.map +1 -0
- package/dist/features/ai/use-document-chat.d.ts +33 -0
- package/dist/features/ai/use-document-chat.js +45 -0
- package/dist/features/ai/use-document-chat.js.map +1 -0
- package/dist/features/ai/use-model-profiles.d.ts +23 -0
- package/dist/features/ai/use-model-profiles.js +50 -0
- package/dist/features/ai/use-model-profiles.js.map +1 -0
- package/dist/features/ai/vue.d.ts +21 -0
- package/dist/features/ai/vue.js +28 -0
- package/dist/features/ai/vue.js.map +1 -0
- package/dist/features/authors/attribution.d.ts +36 -0
- package/dist/features/authors/attribution.js +94 -0
- package/dist/features/authors/attribution.js.map +1 -0
- package/dist/features/authors/author-color-styles.d.ts +12 -0
- package/dist/features/authors/author-color-styles.js +24 -0
- package/dist/features/authors/author-color-styles.js.map +1 -0
- package/dist/features/authors/components/AuthorColorsButton.js +50 -0
- package/dist/features/authors/components/AuthorColorsButton.js.map +1 -0
- package/dist/features/authors/components/AuthorColorsButton.vue.d.ts +11 -0
- package/dist/features/authors/components/AuthorColorsPanel.js +72 -0
- package/dist/features/authors/components/AuthorColorsPanel.js.map +1 -0
- package/dist/features/authors/components/AuthorColorsPanel.vue.d.ts +11 -0
- package/dist/features/authors/components/SettingsAuthorsTab.js +49 -0
- package/dist/features/authors/components/SettingsAuthorsTab.js.map +1 -0
- package/dist/features/authors/components/SettingsAuthorsTab.vue.d.ts +6 -0
- package/dist/features/authors/feature.d.ts +22 -0
- package/dist/features/authors/feature.js +47 -0
- package/dist/features/authors/feature.js.map +1 -0
- package/dist/features/authors/index.d.ts +7 -0
- package/dist/features/authors/index.js +6 -0
- package/dist/features/authors/react/AuthorColorsButton.d.ts +8 -0
- package/dist/features/authors/react/AuthorColorsButton.js +41 -0
- package/dist/features/authors/react/AuthorColorsButton.js.map +1 -0
- package/dist/features/authors/react/AuthorColorsPanel.d.ts +8 -0
- package/dist/features/authors/react/AuthorColorsPanel.js +125 -0
- package/dist/features/authors/react/AuthorColorsPanel.js.map +1 -0
- package/dist/features/authors/react/SettingsAuthorsTab.d.ts +5 -0
- package/dist/features/authors/react/SettingsAuthorsTab.js +92 -0
- package/dist/features/authors/react/SettingsAuthorsTab.js.map +1 -0
- package/dist/features/authors/react.d.ts +11 -0
- package/dist/features/authors/react.js +16 -0
- package/dist/features/authors/react.js.map +1 -0
- package/dist/features/authors/schema.d.ts +22 -0
- package/dist/features/authors/schema.js +70 -0
- package/dist/features/authors/schema.js.map +1 -0
- package/dist/features/authors/vue.d.ts +10 -0
- package/dist/features/authors/vue.js +16 -0
- package/dist/features/authors/vue.js.map +1 -0
- package/dist/features/block-ui/block-actions.d.ts +17 -0
- package/dist/features/block-ui/block-actions.js +37 -0
- package/dist/features/block-ui/block-actions.js.map +1 -0
- package/dist/features/block-ui/components/BlockActionsOverlay.js +142 -0
- package/dist/features/block-ui/components/BlockActionsOverlay.js.map +1 -0
- package/dist/features/block-ui/components/BlockActionsOverlay.vue.d.ts +25 -0
- package/dist/features/block-ui/components/BlockHandles.js +113 -0
- package/dist/features/block-ui/components/BlockHandles.js.map +1 -0
- package/dist/features/block-ui/components/BlockUi.js +181 -0
- package/dist/features/block-ui/components/BlockUi.js.map +1 -0
- package/dist/features/block-ui/components/BlockUi.vue.d.ts +17 -0
- package/dist/features/block-ui/feature.d.ts +21 -0
- package/dist/features/block-ui/feature.js +23 -0
- package/dist/features/block-ui/feature.js.map +1 -0
- package/dist/features/block-ui/handle-geometry.js +52 -0
- package/dist/features/block-ui/handle-geometry.js.map +1 -0
- package/dist/features/block-ui/index.d.ts +3 -0
- package/dist/features/block-ui/index.js +3 -0
- package/dist/features/block-ui/react/BlockActionsOverlay.d.ts +19 -0
- package/dist/features/block-ui/react/BlockActionsOverlay.js +142 -0
- package/dist/features/block-ui/react/BlockActionsOverlay.js.map +1 -0
- package/dist/features/block-ui/react/BlockHandles.d.ts +15 -0
- package/dist/features/block-ui/react/BlockHandles.js +104 -0
- package/dist/features/block-ui/react/BlockHandles.js.map +1 -0
- package/dist/features/block-ui/react/BlockUi.d.ts +14 -0
- package/dist/features/block-ui/react/BlockUi.js +174 -0
- package/dist/features/block-ui/react/BlockUi.js.map +1 -0
- package/dist/features/block-ui/react.d.ts +11 -0
- package/dist/features/block-ui/react.js +13 -0
- package/dist/features/block-ui/react.js.map +1 -0
- package/dist/features/block-ui/vue.d.ts +9 -0
- package/dist/features/block-ui/vue.js +12 -0
- package/dist/features/block-ui/vue.js.map +1 -0
- package/dist/features/collab/anchor-resolver.d.ts +7 -0
- package/dist/features/collab/anchor-resolver.js +92 -0
- package/dist/features/collab/anchor-resolver.js.map +1 -0
- package/dist/features/collab/feature.d.ts +22 -0
- package/dist/features/collab/feature.js +36 -0
- package/dist/features/collab/feature.js.map +1 -0
- package/dist/features/collab/index.d.ts +3 -0
- package/dist/features/collab/index.js +3 -0
- package/dist/features/collab/react.d.ts +7 -0
- package/dist/features/collab/react.js +10 -0
- package/dist/features/collab/react.js.map +1 -0
- package/dist/features/collab/vue.d.ts +6 -0
- package/dist/features/collab/vue.js +37 -0
- package/dist/features/collab/vue.js.map +1 -0
- package/dist/features/comments/comments-plugin.d.ts +71 -0
- package/dist/features/comments/comments-plugin.js +185 -0
- package/dist/features/comments/comments-plugin.js.map +1 -0
- package/dist/features/comments/components/CommentBubble.js +54 -0
- package/dist/features/comments/components/CommentBubble.js.map +1 -0
- package/dist/features/comments/components/CommentBubble.vue.d.ts +14 -0
- package/dist/features/comments/components/CommentComposer.js +87 -0
- package/dist/features/comments/components/CommentComposer.js.map +1 -0
- package/dist/features/comments/components/CommentComposer.vue.d.ts +21 -0
- package/dist/features/comments/components/CommentThreadView.js +255 -0
- package/dist/features/comments/components/CommentThreadView.js.map +1 -0
- package/dist/features/comments/components/CommentThreadView.vue.d.ts +29 -0
- package/dist/features/comments/components/CommentsListMenu.js +134 -0
- package/dist/features/comments/components/CommentsListMenu.js.map +1 -0
- package/dist/features/comments/components/CommentsListMenu.vue.d.ts +10 -0
- package/dist/features/comments/components/CommentsMargin.js +291 -0
- package/dist/features/comments/components/CommentsMargin.js.map +1 -0
- package/dist/features/comments/components/CommentsMargin.vue.d.ts +16 -0
- package/dist/features/comments/components/CommentsOverlay.js +39 -0
- package/dist/features/comments/components/CommentsOverlay.js.map +1 -0
- package/dist/features/comments/components/CommentsPopover.js +124 -0
- package/dist/features/comments/components/CommentsPopover.js.map +1 -0
- package/dist/features/comments/components/CommentsPopover.vue.d.ts +10 -0
- package/dist/features/comments/components/CommentsToolbarButton.js +61 -0
- package/dist/features/comments/components/CommentsToolbarButton.js.map +1 -0
- package/dist/features/comments/components/SettingsCommentsTab.js +46 -0
- package/dist/features/comments/components/SettingsCommentsTab.js.map +1 -0
- package/dist/features/comments/components/SettingsCommentsTab.vue.d.ts +6 -0
- package/dist/features/comments/feature.d.ts +39 -0
- package/dist/features/comments/feature.js +128 -0
- package/dist/features/comments/feature.js.map +1 -0
- package/dist/features/comments/index.d.ts +6 -0
- package/dist/features/comments/index.js +6 -0
- package/dist/features/comments/model.d.ts +87 -0
- package/dist/features/comments/model.js +390 -0
- package/dist/features/comments/model.js.map +1 -0
- package/dist/features/comments/react/CommentAvatar.js +24 -0
- package/dist/features/comments/react/CommentAvatar.js.map +1 -0
- package/dist/features/comments/react/CommentBubble.d.ts +11 -0
- package/dist/features/comments/react/CommentBubble.js +43 -0
- package/dist/features/comments/react/CommentBubble.js.map +1 -0
- package/dist/features/comments/react/CommentComposer.d.ts +15 -0
- package/dist/features/comments/react/CommentComposer.js +69 -0
- package/dist/features/comments/react/CommentComposer.js.map +1 -0
- package/dist/features/comments/react/CommentThreadView.d.ts +24 -0
- package/dist/features/comments/react/CommentThreadView.js +249 -0
- package/dist/features/comments/react/CommentThreadView.js.map +1 -0
- package/dist/features/comments/react/CommentsListMenu.d.ts +8 -0
- package/dist/features/comments/react/CommentsListMenu.js +115 -0
- package/dist/features/comments/react/CommentsListMenu.js.map +1 -0
- package/dist/features/comments/react/CommentsMargin.d.ts +16 -0
- package/dist/features/comments/react/CommentsMargin.js +294 -0
- package/dist/features/comments/react/CommentsMargin.js.map +1 -0
- package/dist/features/comments/react/CommentsOverlay.d.ts +11 -0
- package/dist/features/comments/react/CommentsOverlay.js +52 -0
- package/dist/features/comments/react/CommentsOverlay.js.map +1 -0
- package/dist/features/comments/react/CommentsPopover.d.ts +15 -0
- package/dist/features/comments/react/CommentsPopover.js +107 -0
- package/dist/features/comments/react/CommentsPopover.js.map +1 -0
- package/dist/features/comments/react/CommentsToolbarButton.d.ts +12 -0
- package/dist/features/comments/react/CommentsToolbarButton.js +52 -0
- package/dist/features/comments/react/CommentsToolbarButton.js.map +1 -0
- package/dist/features/comments/react/SettingsCommentsTab.d.ts +5 -0
- package/dist/features/comments/react/SettingsCommentsTab.js +77 -0
- package/dist/features/comments/react/SettingsCommentsTab.js.map +1 -0
- package/dist/features/comments/react/use-comments.d.ts +17 -0
- package/dist/features/comments/react/use-comments.js +37 -0
- package/dist/features/comments/react/use-comments.js.map +1 -0
- package/dist/features/comments/react.d.ts +23 -0
- package/dist/features/comments/react.js +28 -0
- package/dist/features/comments/react.js.map +1 -0
- package/dist/features/comments/schema.d.ts +51 -0
- package/dist/features/comments/schema.js +41 -0
- package/dist/features/comments/schema.js.map +1 -0
- package/dist/features/comments/shortcuts.js +34 -0
- package/dist/features/comments/shortcuts.js.map +1 -0
- package/dist/features/comments/use-comments.d.ts +37 -0
- package/dist/features/comments/use-comments.js +45 -0
- package/dist/features/comments/use-comments.js.map +1 -0
- package/dist/features/comments/vue.d.ts +20 -0
- package/dist/features/comments/vue.js +28 -0
- package/dist/features/comments/vue.js.map +1 -0
- package/dist/features/composites/ai-brief.d.ts +31 -0
- package/dist/features/composites/ai-brief.js +56 -0
- package/dist/features/composites/ai-brief.js.map +1 -0
- package/dist/features/composites/anchors.d.ts +47 -0
- package/dist/features/composites/anchors.js +137 -0
- package/dist/features/composites/anchors.js.map +1 -0
- package/dist/features/composites/components/CompositeChrome.js +243 -0
- package/dist/features/composites/components/CompositeChrome.js.map +1 -0
- package/dist/features/composites/components/CompositeChrome.vue.d.ts +19 -0
- package/dist/features/composites/components/CompositeDetails.js +158 -0
- package/dist/features/composites/components/CompositeDetails.js.map +1 -0
- package/dist/features/composites/components/CompositeDetails.vue.d.ts +19 -0
- package/dist/features/composites/components/CompositeFieldEditor.js +114 -0
- package/dist/features/composites/components/CompositeFieldEditor.js.map +1 -0
- package/dist/features/composites/components/CompositeFieldEditor.vue.d.ts +23 -0
- package/dist/features/composites/components/CompositeInspector.js +439 -0
- package/dist/features/composites/components/CompositeInspector.js.map +1 -0
- package/dist/features/composites/components/CompositeInspector.vue.d.ts +32 -0
- package/dist/features/composites/components/CompositeStatusMenu.js +51 -0
- package/dist/features/composites/components/CompositeStatusMenu.js.map +1 -0
- package/dist/features/composites/components/CompositeStatusMenu.vue.d.ts +28 -0
- package/dist/features/composites/components/CompositeSummaryEditor.js +79 -0
- package/dist/features/composites/components/CompositeSummaryEditor.js.map +1 -0
- package/dist/features/composites/components/CompositeSummaryEditor.vue.d.ts +18 -0
- package/dist/features/composites/components/CompositeTable.js +348 -0
- package/dist/features/composites/components/CompositeTable.js.map +1 -0
- package/dist/features/composites/components/CompositeTable.vue.d.ts +15 -0
- package/dist/features/composites/components/CompositeTagsEditor.js +95 -0
- package/dist/features/composites/components/CompositeTagsEditor.js.map +1 -0
- package/dist/features/composites/components/CompositeTagsEditor.vue.d.ts +13 -0
- package/dist/features/composites/components/CompositeView.js +46 -0
- package/dist/features/composites/components/CompositeView.js.map +1 -0
- package/dist/features/composites/components/CompositeView.vue.d.ts +96 -0
- package/dist/features/composites/components/SettingsEditingTab.js +119 -0
- package/dist/features/composites/components/SettingsEditingTab.js.map +1 -0
- package/dist/features/composites/components/SettingsEditingTab.vue.d.ts +11 -0
- package/dist/features/composites/convert.d.ts +24 -0
- package/dist/features/composites/convert.js +145 -0
- package/dist/features/composites/convert.js.map +1 -0
- package/dist/features/composites/editing-settings-keys.js +47 -0
- package/dist/features/composites/editing-settings-keys.js.map +1 -0
- package/dist/features/composites/feature.d.ts +30 -0
- package/dist/features/composites/feature.js +305 -0
- package/dist/features/composites/feature.js.map +1 -0
- package/dist/features/composites/fences.d.ts +20 -0
- package/dist/features/composites/fences.js +86 -0
- package/dist/features/composites/fences.js.map +1 -0
- package/dist/features/composites/heading-composites.d.ts +36 -0
- package/dist/features/composites/heading-composites.js +140 -0
- package/dist/features/composites/heading-composites.js.map +1 -0
- package/dist/features/composites/index.d.ts +20 -0
- package/dist/features/composites/index.js +20 -0
- package/dist/features/composites/kinds.d.ts +49 -0
- package/dist/features/composites/kinds.js +131 -0
- package/dist/features/composites/kinds.js.map +1 -0
- package/dist/features/composites/legacy.d.ts +8 -0
- package/dist/features/composites/legacy.js +25 -0
- package/dist/features/composites/legacy.js.map +1 -0
- package/dist/features/composites/markdown-export.d.ts +17 -0
- package/dist/features/composites/markdown-export.js +49 -0
- package/dist/features/composites/markdown-export.js.map +1 -0
- package/dist/features/composites/meta-display.js +46 -0
- package/dist/features/composites/meta-display.js.map +1 -0
- package/dist/features/composites/node-views.d.ts +17 -0
- package/dist/features/composites/node-views.js +18 -0
- package/dist/features/composites/node-views.js.map +1 -0
- package/dist/features/composites/nodes.d.ts +56 -0
- package/dist/features/composites/nodes.js +480 -0
- package/dist/features/composites/nodes.js.map +1 -0
- package/dist/features/composites/outline.d.ts +35 -0
- package/dist/features/composites/outline.js +69 -0
- package/dist/features/composites/outline.js.map +1 -0
- package/dist/features/composites/react/CompositeChrome.d.ts +16 -0
- package/dist/features/composites/react/CompositeChrome.js +234 -0
- package/dist/features/composites/react/CompositeChrome.js.map +1 -0
- package/dist/features/composites/react/CompositeDetails.d.ts +16 -0
- package/dist/features/composites/react/CompositeDetails.js +149 -0
- package/dist/features/composites/react/CompositeDetails.js.map +1 -0
- package/dist/features/composites/react/CompositeFieldEditor.d.ts +18 -0
- package/dist/features/composites/react/CompositeFieldEditor.js +131 -0
- package/dist/features/composites/react/CompositeFieldEditor.js.map +1 -0
- package/dist/features/composites/react/CompositeInspector.d.ts +23 -0
- package/dist/features/composites/react/CompositeInspector.js +506 -0
- package/dist/features/composites/react/CompositeInspector.js.map +1 -0
- package/dist/features/composites/react/CompositeStatusMenu.d.ts +15 -0
- package/dist/features/composites/react/CompositeStatusMenu.js +36 -0
- package/dist/features/composites/react/CompositeStatusMenu.js.map +1 -0
- package/dist/features/composites/react/CompositeSummaryEditor.d.ts +15 -0
- package/dist/features/composites/react/CompositeSummaryEditor.js +85 -0
- package/dist/features/composites/react/CompositeSummaryEditor.js.map +1 -0
- package/dist/features/composites/react/CompositeTable.d.ts +11 -0
- package/dist/features/composites/react/CompositeTable.js +342 -0
- package/dist/features/composites/react/CompositeTable.js.map +1 -0
- package/dist/features/composites/react/CompositeTagsEditor.d.ts +10 -0
- package/dist/features/composites/react/CompositeTagsEditor.js +122 -0
- package/dist/features/composites/react/CompositeTagsEditor.js.map +1 -0
- package/dist/features/composites/react/CompositeView.d.ts +6 -0
- package/dist/features/composites/react/CompositeView.js +30 -0
- package/dist/features/composites/react/CompositeView.js.map +1 -0
- package/dist/features/composites/react/SettingsEditingTab.d.ts +8 -0
- package/dist/features/composites/react/SettingsEditingTab.js +153 -0
- package/dist/features/composites/react/SettingsEditingTab.js.map +1 -0
- package/dist/features/composites/react/use-composite-anchors.d.ts +17 -0
- package/dist/features/composites/react/use-composite-anchors.js +46 -0
- package/dist/features/composites/react/use-composite-anchors.js.map +1 -0
- package/dist/features/composites/react/use-composite-rows.d.ts +11 -0
- package/dist/features/composites/react/use-composite-rows.js +26 -0
- package/dist/features/composites/react/use-composite-rows.js.map +1 -0
- package/dist/features/composites/react.d.ts +24 -0
- package/dist/features/composites/react.js +30 -0
- package/dist/features/composites/react.js.map +1 -0
- package/dist/features/composites/rows-model.d.ts +38 -0
- package/dist/features/composites/rows-model.js +92 -0
- package/dist/features/composites/rows-model.js.map +1 -0
- package/dist/features/composites/rows.d.ts +76 -0
- package/dist/features/composites/rows.js +159 -0
- package/dist/features/composites/rows.js.map +1 -0
- package/dist/features/composites/schema.d.ts +21 -0
- package/dist/features/composites/schema.js +26 -0
- package/dist/features/composites/schema.js.map +1 -0
- package/dist/features/composites/structure-mode.d.ts +11 -0
- package/dist/features/composites/structure-mode.js +16 -0
- package/dist/features/composites/structure-mode.js.map +1 -0
- package/dist/features/composites/structure.d.ts +19 -0
- package/dist/features/composites/structure.js +19 -0
- package/dist/features/composites/structure.js.map +1 -0
- package/dist/features/composites/table-model.js +117 -0
- package/dist/features/composites/table-model.js.map +1 -0
- package/dist/features/composites/tree-root.d.ts +11 -0
- package/dist/features/composites/tree-root.js +16 -0
- package/dist/features/composites/tree-root.js.map +1 -0
- package/dist/features/composites/use-composite-anchors.d.ts +18 -0
- package/dist/features/composites/use-composite-anchors.js +42 -0
- package/dist/features/composites/use-composite-anchors.js.map +1 -0
- package/dist/features/composites/use-composite-rows.d.ts +25 -0
- package/dist/features/composites/use-composite-rows.js +28 -0
- package/dist/features/composites/use-composite-rows.js.map +1 -0
- package/dist/features/composites/vue.d.ts +23 -0
- package/dist/features/composites/vue.js +30 -0
- package/dist/features/composites/vue.js.map +1 -0
- package/dist/features/media/assets.d.ts +30 -0
- package/dist/features/media/assets.js +26 -0
- package/dist/features/media/assets.js.map +1 -0
- package/dist/features/media/audio-recorder.d.ts +25 -0
- package/dist/features/media/audio-recorder.js +123 -0
- package/dist/features/media/audio-recorder.js.map +1 -0
- package/dist/features/media/components/AudioRecorderModal.js +152 -0
- package/dist/features/media/components/AudioRecorderModal.js.map +1 -0
- package/dist/features/media/components/AudioRecorderModal.vue.d.ts +15 -0
- package/dist/features/media/components/AudioView.js +46 -0
- package/dist/features/media/components/AudioView.js.map +1 -0
- package/dist/features/media/components/FileView.js +73 -0
- package/dist/features/media/components/FileView.js.map +1 -0
- package/dist/features/media/components/VideoView.js +47 -0
- package/dist/features/media/components/VideoView.js.map +1 -0
- package/dist/features/media/feature.d.ts +22 -0
- package/dist/features/media/feature.js +101 -0
- package/dist/features/media/feature.js.map +1 -0
- package/dist/features/media/file-import.d.ts +21 -0
- package/dist/features/media/file-import.js +76 -0
- package/dist/features/media/file-import.js.map +1 -0
- package/dist/features/media/index.d.ts +7 -0
- package/dist/features/media/index.js +7 -0
- package/dist/features/media/node-views.d.ts +28 -0
- package/dist/features/media/node-views.js +28 -0
- package/dist/features/media/node-views.js.map +1 -0
- package/dist/features/media/react/AudioRecorderModal.d.ts +12 -0
- package/dist/features/media/react/AudioRecorderModal.js +147 -0
- package/dist/features/media/react/AudioRecorderModal.js.map +1 -0
- package/dist/features/media/react/AudioView.js +32 -0
- package/dist/features/media/react/AudioView.js.map +1 -0
- package/dist/features/media/react/FileView.js +61 -0
- package/dist/features/media/react/FileView.js.map +1 -0
- package/dist/features/media/react/TitleField.js +30 -0
- package/dist/features/media/react/TitleField.js.map +1 -0
- package/dist/features/media/react/VideoView.js +33 -0
- package/dist/features/media/react/VideoView.js.map +1 -0
- package/dist/features/media/react/use-audio-recorder.d.ts +11 -0
- package/dist/features/media/react/use-audio-recorder.js +21 -0
- package/dist/features/media/react/use-audio-recorder.js.map +1 -0
- package/dist/features/media/react.d.ts +19 -0
- package/dist/features/media/react.js +37 -0
- package/dist/features/media/react.js.map +1 -0
- package/dist/features/media/schema.d.ts +59 -0
- package/dist/features/media/schema.js +194 -0
- package/dist/features/media/schema.js.map +1 -0
- package/dist/features/media/upload.d.ts +41 -0
- package/dist/features/media/upload.js +106 -0
- package/dist/features/media/upload.js.map +1 -0
- package/dist/features/media/use-audio-recorder.d.ts +12 -0
- package/dist/features/media/use-audio-recorder.js +21 -0
- package/dist/features/media/use-audio-recorder.js.map +1 -0
- package/dist/features/media/vue.d.ts +19 -0
- package/dist/features/media/vue.js +35 -0
- package/dist/features/media/vue.js.map +1 -0
- package/dist/features/mentions/index.d.ts +22 -0
- package/dist/features/mentions/index.js +34 -0
- package/dist/features/mentions/index.js.map +1 -0
- package/dist/features/mentions/mention-suggestion.d.ts +11 -0
- package/dist/features/mentions/mention-suggestion.js +34 -0
- package/dist/features/mentions/mention-suggestion.js.map +1 -0
- package/dist/features/mentions/mention-text.d.ts +18 -0
- package/dist/features/mentions/mention-text.js +75 -0
- package/dist/features/mentions/mention-text.js.map +1 -0
- package/dist/features/mentions/mention.d.ts +20 -0
- package/dist/features/mentions/mention.js +33 -0
- package/dist/features/mentions/mention.js.map +1 -0
- package/dist/features/mentions/metadata-defaults.d.ts +8 -0
- package/dist/features/mentions/metadata-defaults.js +30 -0
- package/dist/features/mentions/metadata-defaults.js.map +1 -0
- package/dist/features/mentions/normalize.d.ts +10 -0
- package/dist/features/mentions/normalize.js +31 -0
- package/dist/features/mentions/normalize.js.map +1 -0
- package/dist/features/mentions/schema.d.ts +10 -0
- package/dist/features/mentions/schema.js +10 -0
- package/dist/features/mentions/schema.js.map +1 -0
- package/dist/features/mentions/tag-suggestion.d.ts +11 -0
- package/dist/features/mentions/tag-suggestion.js +45 -0
- package/dist/features/mentions/tag-suggestion.js.map +1 -0
- package/dist/features/mentions/tag.d.ts +43 -0
- package/dist/features/mentions/tag.js +155 -0
- package/dist/features/mentions/tag.js.map +1 -0
- package/dist/features/tables/feature.d.ts +14 -0
- package/dist/features/tables/feature.js +100 -0
- package/dist/features/tables/feature.js.map +1 -0
- package/dist/features/tables/index.d.ts +3 -0
- package/dist/features/tables/index.js +3 -0
- package/dist/features/tables/schema.d.ts +6 -0
- package/dist/features/tables/schema.js +27 -0
- package/dist/features/tables/schema.js.map +1 -0
- package/dist/features/themes/components/SettingsAppearanceTab.js +227 -0
- package/dist/features/themes/components/SettingsAppearanceTab.js.map +1 -0
- package/dist/features/themes/components/SettingsAppearanceTab.vue.d.ts +6 -0
- package/dist/features/themes/feature.d.ts +24 -0
- package/dist/features/themes/feature.js +25 -0
- package/dist/features/themes/feature.js.map +1 -0
- package/dist/features/themes/index.d.ts +6 -0
- package/dist/features/themes/index.js +6 -0
- package/dist/features/themes/react/SettingsAppearanceTab.d.ts +5 -0
- package/dist/features/themes/react/SettingsAppearanceTab.js +221 -0
- package/dist/features/themes/react/SettingsAppearanceTab.js.map +1 -0
- package/dist/features/themes/react.d.ts +13 -0
- package/dist/features/themes/react.js +15 -0
- package/dist/features/themes/react.js.map +1 -0
- package/dist/features/themes/schema.d.ts +21 -0
- package/dist/features/themes/schema.js +16 -0
- package/dist/features/themes/schema.js.map +1 -0
- package/dist/features/themes/scope-css.d.ts +5 -0
- package/dist/features/themes/scope-css.js +142 -0
- package/dist/features/themes/scope-css.js.map +1 -0
- package/dist/features/themes/theme-runtime.d.ts +14 -0
- package/dist/features/themes/theme-runtime.js +147 -0
- package/dist/features/themes/theme-runtime.js.map +1 -0
- package/dist/features/themes/vue.d.ts +13 -0
- package/dist/features/themes/vue.js +29 -0
- package/dist/features/themes/vue.js.map +1 -0
- package/dist/features/transcript/TranscriptSegmentView.js +169 -0
- package/dist/features/transcript/TranscriptSegmentView.js.map +1 -0
- package/dist/features/transcript/TranscriptSegmentView.vue.d.ts +96 -0
- package/dist/features/transcript/convert.d.ts +11 -0
- package/dist/features/transcript/convert.js +40 -0
- package/dist/features/transcript/convert.js.map +1 -0
- package/dist/features/transcript/feature.d.ts +25 -0
- package/dist/features/transcript/feature.js +59 -0
- package/dist/features/transcript/feature.js.map +1 -0
- package/dist/features/transcript/index.d.ts +7 -0
- package/dist/features/transcript/index.js +7 -0
- package/dist/features/transcript/react/TranscriptSegmentView.d.ts +6 -0
- package/dist/features/transcript/react/TranscriptSegmentView.js +155 -0
- package/dist/features/transcript/react/TranscriptSegmentView.js.map +1 -0
- package/dist/features/transcript/react.d.ts +9 -0
- package/dist/features/transcript/react.js +12 -0
- package/dist/features/transcript/react.js.map +1 -0
- package/dist/features/transcript/schema.d.ts +9 -0
- package/dist/features/transcript/schema.js +9 -0
- package/dist/features/transcript/schema.js.map +1 -0
- package/dist/features/transcript/segment-node.d.ts +21 -0
- package/dist/features/transcript/segment-node.js +113 -0
- package/dist/features/transcript/segment-node.js.map +1 -0
- package/dist/features/transcript/segment.d.ts +10 -0
- package/dist/features/transcript/segment.js +26 -0
- package/dist/features/transcript/segment.js.map +1 -0
- package/dist/features/transcript/speakers.d.ts +8 -0
- package/dist/features/transcript/speakers.js +22 -0
- package/dist/features/transcript/speakers.js.map +1 -0
- package/dist/features/transcript/vue.d.ts +8 -0
- package/dist/features/transcript/vue.js +12 -0
- package/dist/features/transcript/vue.js.map +1 -0
- package/dist/i18n/de/ai.js +168 -0
- package/dist/i18n/de/ai.js.map +1 -0
- package/dist/i18n/de/authors.js +21 -0
- package/dist/i18n/de/authors.js.map +1 -0
- package/dist/i18n/de/block.js +16 -0
- package/dist/i18n/de/block.js.map +1 -0
- package/dist/i18n/de/comments.js +35 -0
- package/dist/i18n/de/comments.js.map +1 -0
- package/dist/i18n/de/common.js +10 -0
- package/dist/i18n/de/common.js.map +1 -0
- package/dist/i18n/de/composites.js +147 -0
- package/dist/i18n/de/composites.js.map +1 -0
- package/dist/i18n/de/integrations.js +42 -0
- package/dist/i18n/de/integrations.js.map +1 -0
- package/dist/i18n/de/markdown.js +16 -0
- package/dist/i18n/de/markdown.js.map +1 -0
- package/dist/i18n/de/media.js +27 -0
- package/dist/i18n/de/media.js.map +1 -0
- package/dist/i18n/de/mentions.js +10 -0
- package/dist/i18n/de/mentions.js.map +1 -0
- package/dist/i18n/de/outline.js +9 -0
- package/dist/i18n/de/outline.js.map +1 -0
- package/dist/i18n/de/settings.js +12 -0
- package/dist/i18n/de/settings.js.map +1 -0
- package/dist/i18n/de/tables.js +15 -0
- package/dist/i18n/de/tables.js.map +1 -0
- package/dist/i18n/de/themes.js +26 -0
- package/dist/i18n/de/themes.js.map +1 -0
- package/dist/i18n/de/toolbar.js +22 -0
- package/dist/i18n/de/toolbar.js.map +1 -0
- package/dist/i18n/de/transcript.js +10 -0
- package/dist/i18n/de/transcript.js.map +1 -0
- package/dist/i18n/de/tree.js +31 -0
- package/dist/i18n/de/tree.js.map +1 -0
- package/dist/i18n/de.d.ts +502 -0
- package/dist/i18n/de.js +42 -0
- package/dist/i18n/de.js.map +1 -0
- package/dist/i18n/en/ai.js +168 -0
- package/dist/i18n/en/ai.js.map +1 -0
- package/dist/i18n/en/authors.js +21 -0
- package/dist/i18n/en/authors.js.map +1 -0
- package/dist/i18n/en/block.js +16 -0
- package/dist/i18n/en/block.js.map +1 -0
- package/dist/i18n/en/comments.js +35 -0
- package/dist/i18n/en/comments.js.map +1 -0
- package/dist/i18n/en/common.js +10 -0
- package/dist/i18n/en/common.js.map +1 -0
- package/dist/i18n/en/composites.js +145 -0
- package/dist/i18n/en/composites.js.map +1 -0
- package/dist/i18n/en/integrations.js +42 -0
- package/dist/i18n/en/integrations.js.map +1 -0
- package/dist/i18n/en/markdown.js +16 -0
- package/dist/i18n/en/markdown.js.map +1 -0
- package/dist/i18n/en/media.js +27 -0
- package/dist/i18n/en/media.js.map +1 -0
- package/dist/i18n/en/mentions.js +10 -0
- package/dist/i18n/en/mentions.js.map +1 -0
- package/dist/i18n/en/outline.js +9 -0
- package/dist/i18n/en/outline.js.map +1 -0
- package/dist/i18n/en/settings.js +12 -0
- package/dist/i18n/en/settings.js.map +1 -0
- package/dist/i18n/en/tables.js +15 -0
- package/dist/i18n/en/tables.js.map +1 -0
- package/dist/i18n/en/themes.js +26 -0
- package/dist/i18n/en/themes.js.map +1 -0
- package/dist/i18n/en/toolbar.js +22 -0
- package/dist/i18n/en/toolbar.js.map +1 -0
- package/dist/i18n/en/transcript.js +10 -0
- package/dist/i18n/en/transcript.js.map +1 -0
- package/dist/i18n/en/tree.js +31 -0
- package/dist/i18n/en/tree.js.map +1 -0
- package/dist/i18n/en.js +42 -0
- package/dist/i18n/en.js.map +1 -0
- package/dist/i18n/index.d.ts +24 -0
- package/dist/i18n/index.js +31 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +0 -0
- package/dist/integrations/composite-ai/composite-fill.d.ts +17 -0
- package/dist/integrations/composite-ai/composite-fill.js +129 -0
- package/dist/integrations/composite-ai/composite-fill.js.map +1 -0
- package/dist/integrations/composite-ai/composite-summary.d.ts +28 -0
- package/dist/integrations/composite-ai/composite-summary.js +143 -0
- package/dist/integrations/composite-ai/composite-summary.js.map +1 -0
- package/dist/integrations/composite-ai/document-transcribe.d.ts +14 -0
- package/dist/integrations/composite-ai/document-transcribe.js +89 -0
- package/dist/integrations/composite-ai/document-transcribe.js.map +1 -0
- package/dist/integrations/composite-ai/index.d.ts +22 -0
- package/dist/integrations/composite-ai/index.js +80 -0
- package/dist/integrations/composite-ai/index.js.map +1 -0
- package/dist/integrations/composite-media/index.d.ts +19 -0
- package/dist/integrations/composite-media/index.js +72 -0
- package/dist/integrations/composite-media/index.js.map +1 -0
- package/dist/integrations/transcript-ai/index.d.ts +16 -0
- package/dist/integrations/transcript-ai/index.js +63 -0
- package/dist/integrations/transcript-ai/index.js.map +1 -0
- package/dist/integrations/transcript-ai/protocol.d.ts +68 -0
- package/dist/integrations/transcript-ai/protocol.js +132 -0
- package/dist/integrations/transcript-ai/protocol.js.map +1 -0
- package/dist/integrations/transcript-ai/transcript-cleanup.d.ts +35 -0
- package/dist/integrations/transcript-ai/transcript-cleanup.js +169 -0
- package/dist/integrations/transcript-ai/transcript-cleanup.js.map +1 -0
- package/dist/markdown/MarkdownSurface.d.ts +25 -0
- package/dist/markdown/MarkdownSurface.js +93 -0
- package/dist/markdown/MarkdownSurface.js.map +1 -0
- package/dist/markdown/MarkdownSurface.vue.d.ts +76 -0
- package/dist/markdown/MarkdownSurface2.js +237 -0
- package/dist/markdown/MarkdownSurface2.js.map +1 -0
- package/dist/markdown/clipboard.d.ts +17 -0
- package/dist/markdown/clipboard.js +125 -0
- package/dist/markdown/clipboard.js.map +1 -0
- package/dist/markdown/document.d.ts +36 -0
- package/dist/markdown/document.js +100 -0
- package/dist/markdown/document.js.map +1 -0
- package/dist/markdown/frontmatter.d.ts +18 -0
- package/dist/markdown/frontmatter.js +32 -0
- package/dist/markdown/frontmatter.js.map +1 -0
- package/dist/markdown/index.d.ts +6 -0
- package/dist/markdown/index.js +6 -0
- package/dist/markdown/policy.d.ts +34 -0
- package/dist/markdown/policy.js +78 -0
- package/dist/markdown/policy.js.map +1 -0
- package/dist/markdown/react.d.ts +2 -0
- package/dist/markdown/react.js +1 -0
- package/dist/markdown/source-mode.d.ts +49 -0
- package/dist/markdown/source-mode.js +86 -0
- package/dist/markdown/source-mode.js.map +1 -0
- package/dist/markdown/vue.d.ts +2 -0
- package/dist/markdown/vue.js +1 -0
- package/dist/nuxt/module.d.ts +62 -0
- package/dist/nuxt/module.js +101 -0
- package/dist/nuxt/module.js.map +1 -0
- package/dist/nuxt/runtime/install-context.d.ts +16 -0
- package/dist/nuxt/runtime/install-context.js +25 -0
- package/dist/nuxt/runtime/install-context.js.map +1 -0
- package/dist/nuxt/runtime/plugins/editor-context-nuxt-ui.client.ts +8 -0
- package/dist/nuxt/runtime/server/api/ai/chat.post.d.ts +5 -0
- package/dist/nuxt/runtime/server/api/ai/chat.post.js +8 -0
- package/dist/nuxt/runtime/server/api/ai/chat.post.js.map +1 -0
- package/dist/nuxt/runtime/server/api/ai/complete.post.d.ts +5 -0
- package/dist/nuxt/runtime/server/api/ai/complete.post.js +8 -0
- package/dist/nuxt/runtime/server/api/ai/complete.post.js.map +1 -0
- package/dist/nuxt/runtime/server/api/ai/generate.post.d.ts +5 -0
- package/dist/nuxt/runtime/server/api/ai/generate.post.js +8 -0
- package/dist/nuxt/runtime/server/api/ai/generate.post.js.map +1 -0
- package/dist/nuxt/runtime/server/api/ai/models.get.d.ts +5 -0
- package/dist/nuxt/runtime/server/api/ai/models.get.js +8 -0
- package/dist/nuxt/runtime/server/api/ai/models.get.js.map +1 -0
- package/dist/nuxt/runtime/server/api/ai/transcribe.post.d.ts +5 -0
- package/dist/nuxt/runtime/server/api/ai/transcribe.post.js +8 -0
- package/dist/nuxt/runtime/server/api/ai/transcribe.post.js.map +1 -0
- package/dist/nuxt/runtime/server/api/ai/transcript-cleanup.post.d.ts +5 -0
- package/dist/nuxt/runtime/server/api/ai/transcript-cleanup.post.js +8 -0
- package/dist/nuxt/runtime/server/api/ai/transcript-cleanup.post.js.map +1 -0
- package/dist/nuxt/runtime/server/api/editor/assets/[id]/[name].get.d.ts +5 -0
- package/dist/nuxt/runtime/server/api/editor/assets/[id]/[name].get.js +8 -0
- package/dist/nuxt/runtime/server/api/editor/assets/[id]/[name].get.js.map +1 -0
- package/dist/nuxt/runtime/server/api/editor/assets/[id].post.d.ts +5 -0
- package/dist/nuxt/runtime/server/api/editor/assets/[id].post.js +8 -0
- package/dist/nuxt/runtime/server/api/editor/assets/[id].post.js.map +1 -0
- package/dist/nuxt/runtime/server/api/editor/settings.get.d.ts +5 -0
- package/dist/nuxt/runtime/server/api/editor/settings.get.js +8 -0
- package/dist/nuxt/runtime/server/api/editor/settings.get.js.map +1 -0
- package/dist/nuxt/runtime/server/api/editor/settings.put.d.ts +5 -0
- package/dist/nuxt/runtime/server/api/editor/settings.put.js +8 -0
- package/dist/nuxt/runtime/server/api/editor/settings.put.js.map +1 -0
- package/dist/nuxt/runtime/server/api/editor/tags.get.d.ts +5 -0
- package/dist/nuxt/runtime/server/api/editor/tags.get.js +8 -0
- package/dist/nuxt/runtime/server/api/editor/tags.get.js.map +1 -0
- package/dist/nuxt/runtime/server/api/editor/themes/[id].delete.d.ts +5 -0
- package/dist/nuxt/runtime/server/api/editor/themes/[id].delete.js +8 -0
- package/dist/nuxt/runtime/server/api/editor/themes/[id].delete.js.map +1 -0
- package/dist/nuxt/runtime/server/api/editor/themes/[id].get.d.ts +5 -0
- package/dist/nuxt/runtime/server/api/editor/themes/[id].get.js +8 -0
- package/dist/nuxt/runtime/server/api/editor/themes/[id].get.js.map +1 -0
- package/dist/nuxt/runtime/server/api/editor/themes/index.get.d.ts +5 -0
- package/dist/nuxt/runtime/server/api/editor/themes/index.get.js +8 -0
- package/dist/nuxt/runtime/server/api/editor/themes/index.get.js.map +1 -0
- package/dist/nuxt/runtime/server/api/editor/themes/index.post.d.ts +5 -0
- package/dist/nuxt/runtime/server/api/editor/themes/index.post.js +8 -0
- package/dist/nuxt/runtime/server/api/editor/themes/index.post.js.map +1 -0
- package/dist/nuxt/runtime/server/api/editor/users.get.d.ts +5 -0
- package/dist/nuxt/runtime/server/api/editor/users.get.js +8 -0
- package/dist/nuxt/runtime/server/api/editor/users.get.js.map +1 -0
- package/dist/nuxt/runtime/server/plugins/collab.d.ts +5 -0
- package/dist/nuxt/runtime/server/plugins/collab.js +10 -0
- package/dist/nuxt/runtime/server/plugins/collab.js.map +1 -0
- package/dist/nuxt/runtime/server/plugins/editor-server.d.ts +5 -0
- package/dist/nuxt/runtime/server/plugins/editor-server.js +20 -0
- package/dist/nuxt/runtime/server/plugins/editor-server.js.map +1 -0
- package/dist/nuxt/runtime/server/routes/collab/[id].d.ts +5 -0
- package/dist/nuxt/runtime/server/routes/collab/[id].js +35 -0
- package/dist/nuxt/runtime/server/routes/collab/[id].js.map +1 -0
- package/dist/nuxt/runtime/server/utils/editor-route.d.ts +11 -0
- package/dist/nuxt/runtime/server/utils/editor-route.js +49 -0
- package/dist/nuxt/runtime/server/utils/editor-route.js.map +1 -0
- package/dist/outline/EditorOutline.js +124 -0
- package/dist/outline/EditorOutline.js.map +1 -0
- package/dist/outline/EditorOutline.vue.d.ts +15 -0
- package/dist/outline/heading-outline.d.ts +26 -0
- package/dist/outline/heading-outline.js +46 -0
- package/dist/outline/heading-outline.js.map +1 -0
- package/dist/outline/index.d.ts +2 -0
- package/dist/outline/index.js +1 -0
- package/dist/outline/react/EditorOutline.d.ts +12 -0
- package/dist/outline/react/EditorOutline.js +112 -0
- package/dist/outline/react/EditorOutline.js.map +1 -0
- package/dist/outline/react.d.ts +2 -0
- package/dist/outline/react.js +1 -0
- package/dist/outline/vue.d.ts +2 -0
- package/dist/outline/vue.js +1 -0
- package/dist/presets/advanced.d.ts +33 -0
- package/dist/presets/advanced.js +50 -0
- package/dist/presets/advanced.js.map +1 -0
- package/dist/presets/simple.d.ts +9 -0
- package/dist/presets/simple.js +12 -0
- package/dist/presets/simple.js.map +1 -0
- package/dist/react/AdvancedEditor.d.ts +23 -0
- package/dist/react/AdvancedEditor.js +24 -0
- package/dist/react/AdvancedEditor.js.map +1 -0
- package/dist/react/EditorSettingsModal.d.ts +14 -0
- package/dist/react/EditorSettingsModal.js +40 -0
- package/dist/react/EditorSettingsModal.js.map +1 -0
- package/dist/react/EditorSettingsPanel.d.ts +18 -0
- package/dist/react/EditorSettingsPanel.js +40 -0
- package/dist/react/EditorSettingsPanel.js.map +1 -0
- package/dist/react/EditorSurface.d.ts +61 -0
- package/dist/react/EditorSurface.js +277 -0
- package/dist/react/EditorSurface.js.map +1 -0
- package/dist/react/EditorToolbar.d.ts +15 -0
- package/dist/react/EditorToolbar.js +182 -0
- package/dist/react/EditorToolbar.js.map +1 -0
- package/dist/react/Icon.d.ts +13 -0
- package/dist/react/Icon.js +19 -0
- package/dist/react/Icon.js.map +1 -0
- package/dist/react/SettingsSection.d.ts +10 -0
- package/dist/react/SettingsSection.js +22 -0
- package/dist/react/SettingsSection.js.map +1 -0
- package/dist/react/SimpleEditor.d.ts +27 -0
- package/dist/react/SimpleEditor.js +22 -0
- package/dist/react/SimpleEditor.js.map +1 -0
- package/dist/react/advanced-preset.d.ts +11 -0
- package/dist/react/advanced-preset.js +31 -0
- package/dist/react/advanced-preset.js.map +1 -0
- package/dist/react/advanced.d.ts +4 -0
- package/dist/react/advanced.js +3 -0
- package/dist/react/context.d.ts +12 -0
- package/dist/react/context.js +21 -0
- package/dist/react/context.js.map +1 -0
- package/dist/react/editor-ui.d.ts +14 -0
- package/dist/react/editor-ui.js +20 -0
- package/dist/react/editor-ui.js.map +1 -0
- package/dist/react/index.d.ts +17 -0
- package/dist/react/index.js +17 -0
- package/dist/react/notify.d.ts +6 -0
- package/dist/react/notify.js +25 -0
- package/dist/react/notify.js.map +1 -0
- package/dist/react/settings.d.ts +17 -0
- package/dist/react/settings.js +27 -0
- package/dist/react/settings.js.map +1 -0
- package/dist/react/simple.d.ts +2 -0
- package/dist/react/simple.js +1 -0
- package/dist/react/styles/advanced.css +18 -0
- package/dist/react/styles/themes-bridge.css +26 -0
- package/dist/react/styles/ui-vars.css +20 -0
- package/dist/react/suggestion-renderer.d.ts +12 -0
- package/dist/react/suggestion-renderer.js +90 -0
- package/dist/react/suggestion-renderer.js.map +1 -0
- package/dist/react/ui/alert.js +38 -0
- package/dist/react/ui/alert.js.map +1 -0
- package/dist/react/ui/avatar.js +24 -0
- package/dist/react/ui/avatar.js.map +1 -0
- package/dist/react/ui/badge.js +30 -0
- package/dist/react/ui/badge.js.map +1 -0
- package/dist/react/ui/button.js +50 -0
- package/dist/react/ui/button.js.map +1 -0
- package/dist/react/ui/collapsible.js +19 -0
- package/dist/react/ui/collapsible.js.map +1 -0
- package/dist/react/ui/command.js +47 -0
- package/dist/react/ui/command.js.map +1 -0
- package/dist/react/ui/dialog.js +88 -0
- package/dist/react/ui/dialog.js.map +1 -0
- package/dist/react/ui/dropdown-menu.js +70 -0
- package/dist/react/ui/dropdown-menu.js.map +1 -0
- package/dist/react/ui/input-group.js +57 -0
- package/dist/react/ui/input-group.js.map +1 -0
- package/dist/react/ui/input.js +16 -0
- package/dist/react/ui/input.js.map +1 -0
- package/dist/react/ui/label.js +17 -0
- package/dist/react/ui/label.js.map +1 -0
- package/dist/react/ui/popover.js +36 -0
- package/dist/react/ui/popover.js.map +1 -0
- package/dist/react/ui/radio-group.js +29 -0
- package/dist/react/ui/radio-group.js.map +1 -0
- package/dist/react/ui/select.js +88 -0
- package/dist/react/ui/select.js.map +1 -0
- package/dist/react/ui/separator.js +18 -0
- package/dist/react/ui/separator.js.map +1 -0
- package/dist/react/ui/switch.js +21 -0
- package/dist/react/ui/switch.js.map +1 -0
- package/dist/react/ui/table.js +44 -0
- package/dist/react/ui/table.js.map +1 -0
- package/dist/react/ui/tabs.js +41 -0
- package/dist/react/ui/tabs.js.map +1 -0
- package/dist/react/ui/textarea.js +15 -0
- package/dist/react/ui/textarea.js.map +1 -0
- package/dist/react/ui/tooltip.js +37 -0
- package/dist/react/ui/tooltip.js.map +1 -0
- package/dist/react/ui/utils.d.ts +5 -0
- package/dist/react/ui/utils.js +10 -0
- package/dist/react/ui/utils.js.map +1 -0
- package/dist/react/use-editor-i18n.d.ts +12 -0
- package/dist/react/use-editor-i18n.js +17 -0
- package/dist/react/use-editor-i18n.js.map +1 -0
- package/dist/react/use-notifier.d.ts +11 -0
- package/dist/react/use-notifier.js +25 -0
- package/dist/react/use-notifier.js.map +1 -0
- package/dist/react/use-store.d.ts +6 -0
- package/dist/react/use-store.js +10 -0
- package/dist/react/use-store.js.map +1 -0
- package/dist/schema/advanced.d.ts +14 -0
- package/dist/schema/advanced.js +43 -0
- package/dist/schema/advanced.js.map +1 -0
- package/dist/schema/simple.d.ts +10 -0
- package/dist/schema/simple.js +13 -0
- package/dist/schema/simple.js.map +1 -0
- package/dist/server/adapter.d.ts +101 -0
- package/dist/server/ai.d.ts +101 -0
- package/dist/server/ai.js +105 -0
- package/dist/server/ai.js.map +1 -0
- package/dist/server/collab-state.d.ts +16 -0
- package/dist/server/collab-state.js +43 -0
- package/dist/server/collab-state.js.map +1 -0
- package/dist/server/collab.d.ts +68 -0
- package/dist/server/collab.js +187 -0
- package/dist/server/collab.js.map +1 -0
- package/dist/server/errors.d.ts +17 -0
- package/dist/server/errors.js +26 -0
- package/dist/server/errors.js.map +1 -0
- package/dist/server/handlers/ai.d.ts +223 -0
- package/dist/server/handlers/ai.js +422 -0
- package/dist/server/handlers/ai.js.map +1 -0
- package/dist/server/handlers/context.d.ts +64 -0
- package/dist/server/handlers/context.js +85 -0
- package/dist/server/handlers/context.js.map +1 -0
- package/dist/server/handlers/editor.d.ts +107 -0
- package/dist/server/handlers/editor.js +241 -0
- package/dist/server/handlers/editor.js.map +1 -0
- package/dist/server/handlers/index.d.ts +4 -0
- package/dist/server/handlers/index.js +4 -0
- package/dist/server/host.d.ts +61 -0
- package/dist/server/host.js +105 -0
- package/dist/server/host.js.map +1 -0
- package/dist/server/index.d.ts +8 -0
- package/dist/server/index.js +7 -0
- package/dist/server/node.d.ts +24 -0
- package/dist/server/node.js +54 -0
- package/dist/server/node.js.map +1 -0
- package/dist/server/rate-limit.d.ts +22 -0
- package/dist/server/rate-limit.js +34 -0
- package/dist/server/rate-limit.js.map +1 -0
- package/dist/settings/index.d.ts +110 -0
- package/dist/settings/index.js +114 -0
- package/dist/settings/index.js.map +1 -0
- package/dist/settings/values.d.ts +35 -0
- package/dist/settings/values.js +41 -0
- package/dist/settings/values.js.map +1 -0
- package/dist/styles/ai.css +77 -0
- package/dist/styles/authors.css +18 -0
- package/dist/styles/block-ui.css +16 -0
- package/dist/styles/collab.css +26 -0
- package/dist/styles/comments.css +11 -0
- package/dist/styles/composites.css +56 -0
- package/dist/styles/core.css +99 -0
- package/dist/styles/media.css +8 -0
- package/dist/styles/mentions.css +24 -0
- package/dist/styles/tables.css +25 -0
- package/dist/styles/themes.css +622 -0
- package/dist/styles/tokens.css +29 -0
- package/dist/styles/transcript.css +13 -0
- package/dist/tree/DocumentTree.js +595 -0
- package/dist/tree/DocumentTree.js.map +1 -0
- package/dist/tree/DocumentTree.vue.d.ts +36 -0
- package/dist/tree/folder-paths.js +11 -0
- package/dist/tree/folder-paths.js.map +1 -0
- package/dist/tree/index.d.ts +4 -0
- package/dist/tree/index.js +1 -0
- package/dist/tree/react/DocumentTree.d.ts +24 -0
- package/dist/tree/react/DocumentTree.js +579 -0
- package/dist/tree/react/DocumentTree.js.map +1 -0
- package/dist/tree/react/use-tree-view.d.ts +14 -0
- package/dist/tree/react/use-tree-view.js +21 -0
- package/dist/tree/react/use-tree-view.js.map +1 -0
- package/dist/tree/react.d.ts +3 -0
- package/dist/tree/react.js +3 -0
- package/dist/tree/store.d.ts +45 -0
- package/dist/tree/tree-items.js +221 -0
- package/dist/tree/tree-items.js.map +1 -0
- package/dist/tree/tree-view-model.d.ts +29 -0
- package/dist/tree/tree-view-model.js +71 -0
- package/dist/tree/tree-view-model.js.map +1 -0
- package/dist/tree/tree-view.d.ts +15 -0
- package/dist/tree/tree-view.js +21 -0
- package/dist/tree/tree-view.js.map +1 -0
- package/dist/tree/types.d.ts +23 -0
- package/dist/tree/types.js +0 -0
- package/dist/tree/vue.d.ts +3 -0
- package/dist/tree/vue.js +3 -0
- package/dist/vue/AdvancedEditor.js +100 -0
- package/dist/vue/AdvancedEditor.js.map +1 -0
- package/dist/vue/AdvancedEditor.vue.d.ts +71 -0
- package/dist/vue/SimpleEditor.js +61 -0
- package/dist/vue/SimpleEditor.js.map +1 -0
- package/dist/vue/SimpleEditor.vue.d.ts +36 -0
- package/dist/vue/advanced-preset.d.ts +13 -0
- package/dist/vue/advanced-preset.js +33 -0
- package/dist/vue/advanced-preset.js.map +1 -0
- package/dist/vue/advanced.d.ts +3 -0
- package/dist/vue/advanced.js +3 -0
- package/dist/vue/components/EditorSettingsModal.js +69 -0
- package/dist/vue/components/EditorSettingsModal.js.map +1 -0
- package/dist/vue/components/EditorSettingsModal.vue.d.ts +24 -0
- package/dist/vue/components/EditorSettingsPanel.js +58 -0
- package/dist/vue/components/EditorSettingsPanel.js.map +1 -0
- package/dist/vue/components/EditorSettingsPanel.vue.d.ts +29 -0
- package/dist/vue/components/EditorSurface.js +229 -0
- package/dist/vue/components/EditorSurface.js.map +1 -0
- package/dist/vue/components/EditorSurface.vue.d.ts +68 -0
- package/dist/vue/components/EditorToolbar.js +189 -0
- package/dist/vue/components/EditorToolbar.js.map +1 -0
- package/dist/vue/components/EditorToolbar.vue.d.ts +17 -0
- package/dist/vue/components/SettingsSection.js +26 -0
- package/dist/vue/components/SettingsSection.js.map +1 -0
- package/dist/vue/components/SettingsSection.vue.d.ts +21 -0
- package/dist/vue/components/SuggestionList.js +91 -0
- package/dist/vue/components/SuggestionList.js.map +1 -0
- package/dist/vue/components/SuggestionList.vue.d.ts +19 -0
- package/dist/vue/context.d.ts +24 -0
- package/dist/vue/context.js +42 -0
- package/dist/vue/context.js.map +1 -0
- package/dist/vue/index.d.ts +26 -0
- package/dist/vue/index.js +16 -0
- package/dist/vue/kit/index.d.ts +3 -0
- package/dist/vue/kit/index.js +1 -0
- package/dist/vue/kit/nuxt-ui.css +24 -0
- package/dist/vue/kit/nuxt-ui.d.ts +31 -0
- package/dist/vue/kit/nuxt-ui.js +101 -0
- package/dist/vue/kit/nuxt-ui.js.map +1 -0
- package/dist/vue/kit/types.d.ts +370 -0
- package/dist/vue/kit/use-ui-kit.d.ts +12 -0
- package/dist/vue/kit/use-ui-kit.js +17 -0
- package/dist/vue/kit/use-ui-kit.js.map +1 -0
- package/dist/vue/notify.d.ts +12 -0
- package/dist/vue/notify.js +27 -0
- package/dist/vue/notify.js.map +1 -0
- package/dist/vue/settings.d.ts +16 -0
- package/dist/vue/settings.js +64 -0
- package/dist/vue/settings.js.map +1 -0
- package/dist/vue/simple.d.ts +2 -0
- package/dist/vue/simple.js +1 -0
- package/dist/vue/store-ref.d.ts +20 -0
- package/dist/vue/store-ref.js +59 -0
- package/dist/vue/store-ref.js.map +1 -0
- package/dist/vue/suggestion-renderer.d.ts +6 -0
- package/dist/vue/suggestion-renderer.js +20 -0
- package/dist/vue/suggestion-renderer.js.map +1 -0
- package/dist/vue/use-editor-i18n.d.ts +12 -0
- package/dist/vue/use-editor-i18n.js +17 -0
- package/dist/vue/use-editor-i18n.js.map +1 -0
- package/dist/vue/use-editor-ui.d.ts +15 -0
- package/dist/vue/use-editor-ui.js +23 -0
- package/dist/vue/use-editor-ui.js.map +1 -0
- package/dist/vue/use-notifier.d.ts +11 -0
- package/dist/vue/use-notifier.js +19 -0
- package/dist/vue/use-notifier.js.map +1 -0
- package/docs/extending.md +538 -0
- package/docs/integration.md +537 -0
- package/docs/llms.md +375 -0
- package/docs/usage.md +1071 -0
- package/package.json +619 -4
|
@@ -0,0 +1,538 @@
|
|
|
1
|
+
# Extending guide: own blocks
|
|
2
|
+
|
|
3
|
+
How to add a block of your own to an editor of this package, using one running example: the **„Hinweis“ block** (`callout`, attribute `tone` = `info` | `warning` | `success`). The example exists twice on purpose, so each runnable app is self-contained; both copies are identical:
|
|
4
|
+
|
|
5
|
+
| Copy | Files | Used by |
|
|
6
|
+
|---|---|---|
|
|
7
|
+
| Simple playground | [`examples/vue-simple/src/callout/`](../../../examples/vue-simple/src/callout) — `node.ts`, `CalloutView.vue`, `index.ts`, `callout.css` | Path A, wired in [`examples/vue-simple/src/App.vue`](../../../examples/vue-simple/src/App.vue) |
|
|
8
|
+
| Advanced playground | [`app/editor/callout/`](../../../app/editor/callout) — the same four files plus `feature.ts` and `convert.ts` | Path B, Editor B of [`app/pages/playground.vue`](../../../app/pages/playground.vue) |
|
|
9
|
+
|
|
10
|
+
Every snippet below is copied from these files. Start the apps with `bun run --cwd examples/vue-simple dev` (port 3040) and `bun run dev` (port 3031, page `/playground`, see the [usage guide](./usage.md#advanced-nuxt-example)). UI strings of the examples are German, the code and this guide are English.
|
|
11
|
+
|
|
12
|
+
- [Two ways to add a block](#two-ways-to-add-a-block)
|
|
13
|
+
- [Anatomy of a block the editor understands](#anatomy-of-a-block-the-editor-understands)
|
|
14
|
+
- [Path A: `extensions` and `slashCommands`](#path-a-extensions-and-slashcommands)
|
|
15
|
+
- [Path B: a feature](#path-b-a-feature)
|
|
16
|
+
- [Beyond the browser](#beyond-the-browser)
|
|
17
|
+
- [Checklist](#checklist)
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Two ways to add a block
|
|
22
|
+
|
|
23
|
+
| | Path A: props | Path B: a feature |
|
|
24
|
+
|---|---|---|
|
|
25
|
+
| What you write | A TipTap node, plus a `slashCommands` function | An `EditorFeature` (`id`, `extensions`, `toolbar`, `slashCommands`, `blockActions`, `conversions`, …) |
|
|
26
|
+
| Where it plugs in | The `extensions` and `slashCommands` props of `SimpleEditor`, `AdvancedEditor` or `EditorSurface` | A preset: `defineEditor({ features: [...] })` mounted with `EditorSurface` |
|
|
27
|
+
| You get | The node in the schema, its commands, input rules and shortcuts, its Markdown form, a `/` menu entry, block IDs when the node declares `editorBlock` | Everything of Path A, plus a toolbar button, ability-gated `/` entries, hover actions, „Umwandeln in …“ targets and a `requires` check of the features it builds on |
|
|
28
|
+
| You do not get | A toolbar button, hover actions, conversion targets: the toolbar renders what features contribute | — |
|
|
29
|
+
| Runnable | Simple playground (`SimpleEditor` + `CalloutBlock`) | Advanced playground, Editor B (`advancedEditor().features` + `calloutFeature()`) |
|
|
30
|
+
|
|
31
|
+
Both paths share the same node. Start with Path A; move to Path B when the block needs toolbar, hover or conversion. Props are read **once at setup** (`extensions`, `slashCommands`, `abilities`): pass constants, or remount with a new `key`.
|
|
32
|
+
|
|
33
|
+
## Anatomy of a block the editor understands
|
|
34
|
+
|
|
35
|
+
### The node
|
|
36
|
+
|
|
37
|
+
`node.ts` is the complete, Vue-free definition: schema, commands, shortcut and Markdown form. It imports only `@tiptap/core` and the Vue-free `@ecsplico/editor/core/schema`, so a server can import it without loading a component.
|
|
38
|
+
|
|
39
|
+
```ts
|
|
40
|
+
import { mergeAttributes, Node } from '@tiptap/core'
|
|
41
|
+
import { ABILITY } from '@ecsplico/editor/core/schema'
|
|
42
|
+
|
|
43
|
+
// Vue-free and server-importable: the callout's schema, commands and Markdown form. The Vue node view is attached in
|
|
44
|
+
// `index.ts`, so a server (`getSchema([...advancedSchemaExtensions(), Callout])`, or the simple schema) never loads a
|
|
45
|
+
// component.
|
|
46
|
+
|
|
47
|
+
export type Tone = 'info' | 'warning' | 'success'
|
|
48
|
+
|
|
49
|
+
export const TONES: readonly { value: Tone, label: string, icon: string }[] = [
|
|
50
|
+
{ value: 'info', label: 'Hinweis', icon: 'i-lucide-info' },
|
|
51
|
+
{ value: 'warning', label: 'Warnung', icon: 'i-lucide-triangle-alert' },
|
|
52
|
+
{ value: 'success', label: 'Erledigt', icon: 'i-lucide-circle-check' },
|
|
53
|
+
]
|
|
54
|
+
|
|
55
|
+
declare module '@tiptap/core' {
|
|
56
|
+
interface Commands<ReturnType> {
|
|
57
|
+
callout: {
|
|
58
|
+
/** Wrap the selected blocks in a callout of `tone` (default `info`). */
|
|
59
|
+
setCallout: (tone?: Tone) => ReturnType
|
|
60
|
+
/** Wrap the selection in a callout, or lift it out when it already is inside one. */
|
|
61
|
+
toggleCallout: () => ReturnType
|
|
62
|
+
/** Change the tone of the callout around the selection. */
|
|
63
|
+
setCalloutTone: (tone: Tone) => ReturnType
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export const Callout = Node.create({
|
|
69
|
+
name: 'callout',
|
|
70
|
+
group: 'block',
|
|
71
|
+
content: 'block+',
|
|
72
|
+
defining: true,
|
|
73
|
+
// Carries a block ID like a paragraph: block flash/reveal, paste de-duplication, the server's ID backfill.
|
|
74
|
+
editorBlock: true,
|
|
75
|
+
// A callout holds plain text blocks: no headings, composites, media, records or speaker lines inside it.
|
|
76
|
+
abilities: {
|
|
77
|
+
revokes: [ABILITY.headings, ABILITY.composite, ABILITY.media, ABILITY.record, ABILITY.transcript],
|
|
78
|
+
},
|
|
79
|
+
addAttributes: () => ({
|
|
80
|
+
tone: {
|
|
81
|
+
default: 'info',
|
|
82
|
+
parseHTML: el => el.getAttribute('data-tone') ?? 'info',
|
|
83
|
+
renderHTML: attrs => ({ 'data-tone': attrs.tone }),
|
|
84
|
+
},
|
|
85
|
+
}),
|
|
86
|
+
parseHTML: () => [{ tag: 'div[data-type="callout"]' }],
|
|
87
|
+
renderHTML: ({ HTMLAttributes }) => ['div', mergeAttributes(HTMLAttributes, { 'data-type': 'callout' }), 0],
|
|
88
|
+
|
|
89
|
+
// Markdown: `!!! <tone>` followed by the body up to the next blank line. `:::` belongs to composites. The body blocks
|
|
90
|
+
// are joined by a single newline (without a separator `renderChildren` would glue them: „text- item“), so a body
|
|
91
|
+
// with several paragraphs reads back as one; a blank line would end the callout for the tokenizer below.
|
|
92
|
+
renderMarkdown: (node, h) => `!!! ${node.attrs?.tone ?? 'info'}\n${h.renderChildren(node.content ?? [], '\n')}`,
|
|
93
|
+
markdownTokenName: 'callout',
|
|
94
|
+
markdownTokenizer: {
|
|
95
|
+
name: 'callout',
|
|
96
|
+
level: 'block',
|
|
97
|
+
start: src => src.indexOf('!!! '),
|
|
98
|
+
tokenize(src, _tokens, lexer) {
|
|
99
|
+
const match = /^!!! (info|warning|success)\n([\s\S]+?)(?:\n{2,}|$)/.exec(src)
|
|
100
|
+
if (!match) return
|
|
101
|
+
return { type: 'callout', raw: match[0], tone: match[1], tokens: lexer.blockTokens(match[2]!) }
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
parseMarkdown: (token, h) => h.createNode('callout', { tone: typeof token.tone === 'string' ? token.tone : 'info' }, h.parseChildren(token.tokens ?? [])),
|
|
105
|
+
|
|
106
|
+
addCommands() {
|
|
107
|
+
return {
|
|
108
|
+
setCallout: tone => ({ commands }) => commands.wrapIn(this.name, { tone: tone ?? 'info' }),
|
|
109
|
+
toggleCallout: () => ({ editor, commands }) =>
|
|
110
|
+
editor.isActive(this.name) ? commands.lift(this.name) : commands.wrapIn(this.name, { tone: 'info' }),
|
|
111
|
+
setCalloutTone: tone => ({ commands }) => commands.updateAttributes(this.name, { tone }),
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
addKeyboardShortcuts() {
|
|
115
|
+
// Mod-Alt-c is the code block; Mod-Shift-s / -m / -k belong to the transcript, mention and tag features.
|
|
116
|
+
return { 'Mod-Shift-h': () => this.editor.commands.toggleCallout() }
|
|
117
|
+
},
|
|
118
|
+
})
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Fields the library reads
|
|
122
|
+
|
|
123
|
+
Besides the plain TipTap fields (`name`, `group`, `content`, `defining`, `addAttributes`, `parseHTML`/`renderHTML`, commands, shortcuts) the package reads these `NodeConfig` fields:
|
|
124
|
+
|
|
125
|
+
| Field | Read by | Meaning |
|
|
126
|
+
|---|---|---|
|
|
127
|
+
| `editorBlock` | `NodeFlags` (copies it to the `NodeSpec`) in [`src/core/schema/node-flags.ts`](../src/core/schema/node-flags.ts), `BlockId` in [`block-ids.ts`](../src/core/schema/block-ids.ts) | The node is an addressable block: it gets the `id` attribute (rendered `data-id`) the built-in blocks have. Block IDs are what block flash and reveal look up (`findBlockById`), what paste de-duplication and the server's ID backfill (`assignBlockIds`) iterate, and what the AI chat addresses: a text block with an ID is a `[<id>] …` line of the chat's document view and can be updated, deleted, extended or converted by that ID, and quotes in answers link to it. **Built-in block types default to `true`** (`BLOCK_ID_TYPES`); every other node defaults to `false` and then has no `id` attribute. `isEditorBlock(node)` (from `@ecsplico/editor/core/schema`) reads the flag. |
|
|
128
|
+
| `editorBlockContainer`, `editorChrome` | `NodeFlags`, block conversion and drag targeting | A *container* (the document, a composite) holds blocks that are individually convertible and draggable; *chrome* is fixed header rows of such a block. The callout declares neither: it is one block, its inner paragraphs are not offered separately. |
|
|
129
|
+
| `abilities` | the `Abilities` extension (`AbilityRule`: `grants`, `revokes`, `own`) | What editing abilities hold inside the node. The callout revokes headings, composites, media, recording and speaker lines for its content. Ability ids are plain strings; host rules passed through the `abilities` prop replace a node's own rule (see [Path B](#composing-and-mounting) for granting a custom ability). |
|
|
130
|
+
| `renderMarkdown`, `markdownTokenName`, `markdownTokenizer`, `parseMarkdown` | `@tiptap/markdown` | The Markdown form of the block, in both directions. |
|
|
131
|
+
|
|
132
|
+
**Why `!!!`.** The Markdown form is the form the model reads and writes, and the one `getMarkdown()` exports (see [Beyond the browser](#ai)). Pick syntax that no other stage claims: `:::` fences belong to composites, `**Name:**` lines are turned into speaker segments by the transcript feature's `segment` stage.
|
|
133
|
+
|
|
134
|
+
**Limitation of this example.** `renderMarkdown` joins the body blocks with `'\n'` and the tokenizer ends a callout at the first blank line. A callout with several paragraphs therefore exports without blank lines and re-imports as **one** paragraph. Keep callouts to one paragraph when the Markdown round trip matters, or extend the tokenizer.
|
|
135
|
+
|
|
136
|
+
### Node view and styles
|
|
137
|
+
|
|
138
|
+
The node view is attached in a second file, so `node.ts` stays free of Vue:
|
|
139
|
+
|
|
140
|
+
```ts
|
|
141
|
+
import type { NodeViewRenderer } from '@tiptap/core'
|
|
142
|
+
import { VueNodeViewRenderer } from '@tiptap/vue-3'
|
|
143
|
+
import CalloutView from './CalloutView.vue'
|
|
144
|
+
import { Callout } from './node'
|
|
145
|
+
|
|
146
|
+
export { Callout, TONES, type Tone } from './node'
|
|
147
|
+
|
|
148
|
+
// The schema node plus its Vue node view; node.ts stays Vue-free so a server can import it on its own.
|
|
149
|
+
export const CalloutBlock = Callout.extend({
|
|
150
|
+
// Explicit return type: keeps the declaration independent of the Vue view's inferred types.
|
|
151
|
+
addNodeView(): NodeViewRenderer {
|
|
152
|
+
return VueNodeViewRenderer(CalloutView)
|
|
153
|
+
},
|
|
154
|
+
})
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
On a React surface the same second file attaches `ReactNodeViewRenderer(CalloutView)` from `@tiptap/react` instead; `node.ts` stays unchanged and framework-free.
|
|
158
|
+
|
|
159
|
+
The view renders a non-editable header (tone icon and a `USelect`) above the editable body:
|
|
160
|
+
|
|
161
|
+
```vue
|
|
162
|
+
<script setup lang="ts">
|
|
163
|
+
import { NodeViewContent, nodeViewProps, NodeViewWrapper } from '@tiptap/vue-3'
|
|
164
|
+
import { computed } from 'vue'
|
|
165
|
+
import { type Tone, TONES } from './node'
|
|
166
|
+
|
|
167
|
+
const props = defineProps(nodeViewProps)
|
|
168
|
+
|
|
169
|
+
const tone = computed(() => TONES.find(t => t.value === props.node.attrs.tone) ?? TONES[0])
|
|
170
|
+
</script>
|
|
171
|
+
|
|
172
|
+
<template>
|
|
173
|
+
<NodeViewWrapper as="div" class="callout" :data-tone="node.attrs.tone">
|
|
174
|
+
<div class="callout-header" contenteditable="false">
|
|
175
|
+
<UIcon :name="tone?.icon ?? 'i-lucide-info'" class="size-4 shrink-0" />
|
|
176
|
+
<USelect
|
|
177
|
+
:items="[...TONES]"
|
|
178
|
+
value-key="value"
|
|
179
|
+
label-key="label"
|
|
180
|
+
:model-value="node.attrs.tone"
|
|
181
|
+
size="xs"
|
|
182
|
+
variant="ghost"
|
|
183
|
+
:disabled="!editor.isEditable"
|
|
184
|
+
@update:model-value="(value: Tone) => updateAttributes({ tone: value })"
|
|
185
|
+
/>
|
|
186
|
+
</div>
|
|
187
|
+
<NodeViewContent as="div" class="callout-body" />
|
|
188
|
+
</NodeViewWrapper>
|
|
189
|
+
</template>
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
The styles are plain CSS with Nuxt UI's colour variables. Import them **after** the core stylesheet:
|
|
193
|
+
|
|
194
|
+
```css
|
|
195
|
+
.callout {
|
|
196
|
+
--callout-color: var(--ui-info);
|
|
197
|
+
border-left: 3px solid var(--callout-color);
|
|
198
|
+
border-radius: 0.375rem;
|
|
199
|
+
padding: 0.5rem 0.75rem;
|
|
200
|
+
margin: 0.5rem 0;
|
|
201
|
+
background: color-mix(in oklab, var(--callout-color) 8%, transparent);
|
|
202
|
+
}
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
Simple playground, [`examples/vue-simple/src/style.css`](../../../examples/vue-simple/src/style.css):
|
|
206
|
+
|
|
207
|
+
```css
|
|
208
|
+
@import "tailwindcss";
|
|
209
|
+
@import "@nuxt/ui";
|
|
210
|
+
@import "@ecsplico/editor/styles/core.css";
|
|
211
|
+
@import "./callout/callout.css";
|
|
212
|
+
@source "../../../packages/editor/src";
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
Nuxt app, [`app/assets/css/main.css`](../../../app/assets/css/main.css):
|
|
216
|
+
|
|
217
|
+
```css
|
|
218
|
+
@import "../../editor/callout/callout.css";
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
The full stylesheet (tone variables per `[data-tone]`, header and body spacing) is [`callout.css`](../../../examples/vue-simple/src/callout/callout.css).
|
|
222
|
+
|
|
223
|
+
## Path A: `extensions` and `slashCommands`
|
|
224
|
+
|
|
225
|
+
The simple playground adds the node to a `SimpleEditor` with two props. The same props exist on `AdvancedEditor` and `EditorSurface`.
|
|
226
|
+
|
|
227
|
+
```ts
|
|
228
|
+
// Added to the simple schema through the `extensions` prop (constant: read once at setup).
|
|
229
|
+
const extensions = [CalloutBlock]
|
|
230
|
+
|
|
231
|
+
// Host commands of the `/` menu: the simple editor ships none.
|
|
232
|
+
function slashCommands(defaults: SlashCommandItem[]): SlashCommandItem[] {
|
|
233
|
+
return [
|
|
234
|
+
...defaults,
|
|
235
|
+
{
|
|
236
|
+
id: 'datum',
|
|
237
|
+
label: 'Datum',
|
|
238
|
+
icon: 'i-lucide-calendar',
|
|
239
|
+
run: editor => editor.chain().focus().insertContent(new Date().toLocaleDateString('de-DE')).run(),
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
id: 'hinweis',
|
|
243
|
+
label: 'Hinweis',
|
|
244
|
+
icon: 'i-lucide-info',
|
|
245
|
+
run: editor => editor.chain().focus().setCallout('info').run(),
|
|
246
|
+
},
|
|
247
|
+
]
|
|
248
|
+
}
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
```vue
|
|
252
|
+
<SimpleEditor
|
|
253
|
+
:model-value="content"
|
|
254
|
+
:editable="editable"
|
|
255
|
+
:extensions="extensions"
|
|
256
|
+
:slash-commands="slashCommands"
|
|
257
|
+
@ready="onReady"
|
|
258
|
+
@update:model-value="onUpdate"
|
|
259
|
+
@content-error="onContentError"
|
|
260
|
+
/>
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
What the user gets:
|
|
264
|
+
|
|
265
|
+
- Typing `/hinweis` Enter wraps the paragraph at the caret in an `info` callout; `Mod-Shift-h` toggles it (wrap, or lift out of the callout).
|
|
266
|
+
- The tone `USelect` in the callout's header changes `attrs.tone`; the JSON pane then shows the new tone and the Markdown pane the matching `!!! success` line.
|
|
267
|
+
- Nodes with `editorBlock: true` get an `id`: the JSON pane shows `editor.getJSON()` (not the `v-model` value) so you can see the IDs the editor adds.
|
|
268
|
+
- The `/` entry has no `ability`, so it is listed wherever the `/` menu opens. A toolbar button needs Path B: the toolbar renders what features contribute and a prop cannot add to it.
|
|
269
|
+
|
|
270
|
+
The simple editor rejects documents with unknown nodes, so the callout sample (`callouts` in [`samples.ts`](../../../examples/vue-simple/src/samples.ts)) loads only because `CalloutBlock` is in the schema. Content with `composite` still ends up in `contentError` ([usage guide](./usage.md#rejected-content-contenterror)).
|
|
271
|
+
|
|
272
|
+
## Path B: a feature
|
|
273
|
+
|
|
274
|
+
A feature is a bundle of contributions behind one `id`; the callout feature fills six of them. [`app/editor/callout/feature.ts`](../../../app/editor/callout/feature.ts) in full:
|
|
275
|
+
|
|
276
|
+
```ts
|
|
277
|
+
import { commandItem, type EditorFeature } from '@ecsplico/editor/core'
|
|
278
|
+
import { calloutConversions } from './convert'
|
|
279
|
+
import { CalloutBlock } from './index'
|
|
280
|
+
import { TONES } from './node'
|
|
281
|
+
|
|
282
|
+
/** The ability that gates the callout's toolbar button, `/` command and hover menu; grant it at root through the `abilities` prop. */
|
|
283
|
+
export const CALLOUT_ABILITY = 'insert.callout'
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* The callout as a full editor feature: node, toolbar button (merged into the `inserts` group beside „Sprecherblock“),
|
|
287
|
+
* `/hinweis`, a hover menu for the tone, the two-way „Umwandeln in …“ conversion and its description for the AI
|
|
288
|
+
* (`aiContext.blocks`), so chat and generate tasks can create, convert to and edit callouts.
|
|
289
|
+
*/
|
|
290
|
+
export function calloutFeature(): EditorFeature {
|
|
291
|
+
return {
|
|
292
|
+
id: 'callout',
|
|
293
|
+
extensions: () => [CalloutBlock],
|
|
294
|
+
toolbar: () => [{
|
|
295
|
+
id: 'inserts',
|
|
296
|
+
order: 50,
|
|
297
|
+
items: [
|
|
298
|
+
commandItem({
|
|
299
|
+
id: 'callout',
|
|
300
|
+
order: 15,
|
|
301
|
+
icon: 'i-lucide-info',
|
|
302
|
+
label: 'Hinweis',
|
|
303
|
+
kbds: ['meta', 'shift', 'h'],
|
|
304
|
+
ability: CALLOUT_ABILITY,
|
|
305
|
+
command: c => c.toggleCallout(),
|
|
306
|
+
isActive: e => e.isActive('callout'),
|
|
307
|
+
}),
|
|
308
|
+
],
|
|
309
|
+
}],
|
|
310
|
+
slashCommands: () => [{
|
|
311
|
+
id: 'hinweis',
|
|
312
|
+
label: 'Hinweis',
|
|
313
|
+
icon: 'i-lucide-info',
|
|
314
|
+
ability: CALLOUT_ABILITY,
|
|
315
|
+
run: e => e.chain().focus().setCallout('info').run(),
|
|
316
|
+
}],
|
|
317
|
+
blockActions: () => [{
|
|
318
|
+
id: 'callout-tone',
|
|
319
|
+
label: 'Art des Hinweises',
|
|
320
|
+
icon: 'i-lucide-palette',
|
|
321
|
+
ability: CALLOUT_ABILITY,
|
|
322
|
+
order: 500,
|
|
323
|
+
isVisible: ({ node }) => node.type.name === 'callout',
|
|
324
|
+
menu: ({ editor, pos }) => TONES.map(tone => ({
|
|
325
|
+
label: tone.label,
|
|
326
|
+
icon: tone.icon,
|
|
327
|
+
onSelect: () => editor.chain().focus().setNodeSelection(pos).setCalloutTone(tone.value).run(),
|
|
328
|
+
})),
|
|
329
|
+
}],
|
|
330
|
+
conversions: [calloutConversions],
|
|
331
|
+
aiContext: () => ({
|
|
332
|
+
blocks: [{
|
|
333
|
+
id: 'callout',
|
|
334
|
+
label: 'Hinweis',
|
|
335
|
+
description: 'Ein farbig hervorgehobener Kasten für einen Hinweis (info), eine Warnung (warning) oder etwas Erledigtes (success). Enthält Absätze, Listen oder Zitate, keine Überschriften.',
|
|
336
|
+
syntax: '!!! <info|warning|success>\n<Inhalt, Blöcke durch einen Zeilenumbruch getrennt; eine Leerzeile beendet den Hinweis>',
|
|
337
|
+
example: '!!! warning\nBitte die Zahlen vor dem Versand prüfen.',
|
|
338
|
+
}],
|
|
339
|
+
}),
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
Every contribution is a factory or descriptor; features only differ by which of them they fill (`EditorFeature` in [`src/core/feature.ts`](../src/core/feature.ts)). Nothing is registered globally. The descriptors are framework-free: the slots that hold a UI component (`overlays`, `SettingsTab.component`, `ToolbarItem.component`) are generic, `EditorFeature<C>` / `EditorPreset<C>`, where `C` is the framework's component type. A feature with Vue components is a `VueFeature` (`EditorFeature<Component>`, from `@ecsplico/editor/vue`), one with React components a `ReactFeature` (from `@ecsplico/editor/react`); the callout fills none of these slots, so it keeps the default `EditorFeature` and fits a Vue and a React list alike. The package's own features follow one split: `features/<x>/feature.ts` exports `<x>FeatureCore(ui)`, which fills every member with the logic and takes the components as a typed `<X>Ui<C>` object; `/<x>/vue` and `/<x>/react` call it with their components ([integration guide §1](./integration.md#per-feature-entries-framework-free-vue-react)). A feature of your own that needs components in both frameworks can use the same split.
|
|
345
|
+
|
|
346
|
+
### `extensions`
|
|
347
|
+
|
|
348
|
+
`extensions: () => [CalloutBlock]` adds the node (with its view) to the editor's schema. Feature extensions are added in feature order, before the `extensions` prop. The factory receives a `FeatureContext` (`app`, settings, metadata registry, `ui`, `notify`, `fetch`, `abilities`, …) that the callout does not need. `ctx.settings` is a framework-free store, not a Vue ref: read it with `ctx.settings.get()`, change it with `ctx.settings.update(s => { s.ai.autocomplete = !s.ai.autocomplete })` (or `set(value)`), react to changes with `ctx.settings.subscribe(listener)` (returns the unsubscribe function). `ctx.notify({ title, kind? })` shows a notice (a Nuxt UI or sonner toast, depending on the surface); features never import a toast library.
|
|
349
|
+
|
|
350
|
+
### `toolbar`
|
|
351
|
+
|
|
352
|
+
Return `ToolbarGroup`s; `EditorToolbar` (`@ecsplico/editor/vue` or `/react`) merges groups of the same `id` with `mergeToolbarGroups` (`@ecsplico/editor/core`): the **first** group of an id keeps its position and `order`, the items of all contributors are concatenated and sorted by `order`. The callout adds its button to the `inserts` group that the transcript feature (speaker button, `order: 10`) and the media feature (pickers, `order` 20–50) already fill, so `order: 15` puts „Hinweis“ between „Sprecherblock“ and the media buttons.
|
|
353
|
+
|
|
354
|
+
`commandItem` builds a button from a command chain: it focuses the editor on click, runs `command`, and disables the button while `editor.can().chain()` says the command is impossible. `isActive` makes it a toggle. `ability` disables the button where the caret does not hold that ability (turning an active toggle off never needs it). `kbds` only labels the tooltip: the shortcut itself is the node's `addKeyboardShortcuts`.
|
|
355
|
+
|
|
356
|
+
A toolbar item that opens a dropdown sets `menu: (editor) => MenuItem[]`. `MenuItem` is the core type (`@ecsplico/editor/core`), not Nuxt UI's `DropdownMenuItem`: `type?: 'label' | 'separator'`, `label`, `description`, `icon` (an Iconify name such as `i-lucide-heading-1`), `disabled` and `onSelect`. It carries no UI-framework type; the framework layer renders it.
|
|
357
|
+
|
|
358
|
+
### `slashCommands`
|
|
359
|
+
|
|
360
|
+
Entries of the `/` menu in feature order, run through the host's `slashCommands` transformer last. `ability` limits the entry to carets that hold it; unset means always listed. `run` is called after the `/query` text is deleted.
|
|
361
|
+
|
|
362
|
+
### `blockActions`
|
|
363
|
+
|
|
364
|
+
Hover actions on a block's top line at the editor's right edge, shown by an installed `block-ui` feature (`blockUiFeature()`; the advanced list has it). `ability` is checked on the block itself, `isVisible` narrows it further, `order` sorts feature actions (built-ins use their visual sequence; actions with a larger `order`, like the callout's 500, follow them; host `blockActions` props come last). With `menu` instead of `run` the action opens a dropdown; `menu` returns core `MenuItem[]` (`type?: 'label' | 'separator'`, `label`, `description`, `icon`, `disabled`, `onSelect`), as in the toolbar. The callout's lists the tones and applies one with `setCalloutTone` after selecting the block (`setNodeSelection(pos)`). The bar is hidden while the editor is read-only.
|
|
365
|
+
|
|
366
|
+
### `conversions`
|
|
367
|
+
|
|
368
|
+
„Umwandeln in …“ (hover menu, toolbar groups, the AI `convert` operation) runs through `ConversionProvider`s. [`convert.ts`](../../../app/editor/callout/convert.ts) in full:
|
|
369
|
+
|
|
370
|
+
```ts
|
|
371
|
+
import type { Node as PMNode } from '@tiptap/pm/model'
|
|
372
|
+
import {
|
|
373
|
+
childrenOf,
|
|
374
|
+
type ConversionProvider,
|
|
375
|
+
CORE_TARGET_IDS,
|
|
376
|
+
convertCoreBlocks,
|
|
377
|
+
type ConvertTarget,
|
|
378
|
+
createConverter,
|
|
379
|
+
finishConversion,
|
|
380
|
+
isCoreSource,
|
|
381
|
+
parseCoreTarget,
|
|
382
|
+
} from '@ecsplico/editor/core'
|
|
383
|
+
|
|
384
|
+
const CALLOUT = 'callout'
|
|
385
|
+
// A host block names itself with the inert `custom` target: `id` is the target id and the node type name.
|
|
386
|
+
const TARGET: ConvertTarget = { type: 'custom', id: CALLOUT }
|
|
387
|
+
/** The core targets a callout unwraps into. */
|
|
388
|
+
const UNWRAP_TARGETS: readonly ConvertTarget[] = CORE_TARGET_IDS.flatMap(id => parseCoreTarget(id) ?? [])
|
|
389
|
+
|
|
390
|
+
const isCallout = (node: PMNode) => node.type.name === CALLOUT
|
|
391
|
+
|
|
392
|
+
/**
|
|
393
|
+
* Paragraphs, headings, code blocks, lists and quotes become a callout (the quote rule: textblocks turn into
|
|
394
|
+
* paragraphs, lists and quotes keep their blocks); a callout unwraps into every core target through the core engine.
|
|
395
|
+
* `handlesSource` makes this provider execute every conversion of a callout, the core provider has none for it.
|
|
396
|
+
*/
|
|
397
|
+
export const calloutConversions: ConversionProvider = {
|
|
398
|
+
handlesSource: isCallout,
|
|
399
|
+
targets: (_editor, node) => {
|
|
400
|
+
const { nodes } = node.type.schema
|
|
401
|
+
if (isCallout(node)) return UNWRAP_TARGETS.filter(target => nodes[target.type])
|
|
402
|
+
return isCoreSource(node) && nodes[CALLOUT] ? [TARGET] : []
|
|
403
|
+
},
|
|
404
|
+
parseTarget: id => id === CALLOUT ? TARGET : null,
|
|
405
|
+
label: target => target.type === 'custom' && target.id === CALLOUT ? { label: 'Hinweis', icon: 'i-lucide-info' } : null,
|
|
406
|
+
convert: (state, $start, target) => {
|
|
407
|
+
const node = $start.nodeAfter
|
|
408
|
+
const { schema } = state
|
|
409
|
+
if (!node) return null
|
|
410
|
+
let output: PMNode[] | null
|
|
411
|
+
if (isCallout(node)) {
|
|
412
|
+
const children = childrenOf(node)
|
|
413
|
+
output = convertCoreBlocks(schema, children, target) ?? children
|
|
414
|
+
}
|
|
415
|
+
else if (target.type === 'custom' && target.id === CALLOUT && schema.nodes[CALLOUT] && isCoreSource(node)) {
|
|
416
|
+
const quote = createConverter(schema).toQuote([node])[0]
|
|
417
|
+
output = quote ? [schema.nodes[CALLOUT].create({ tone: 'info' }, quote.content)] : null
|
|
418
|
+
}
|
|
419
|
+
else return null
|
|
420
|
+
const blocks = output && finishConversion([node], output)
|
|
421
|
+
return blocks ? { from: $start.pos, to: $start.pos + node.nodeSize, blocks } : null
|
|
422
|
+
},
|
|
423
|
+
}
|
|
424
|
+
```
|
|
425
|
+
|
|
426
|
+
The rules a provider follows (`ConversionProvider` in [`src/core/feature.ts`](../src/core/feature.ts), engine in [`src/core/block-convert.ts`](../src/core/block-convert.ts) and [`convert.ts`](../src/core/convert.ts)):
|
|
427
|
+
|
|
428
|
+
- **The `custom` target.** `ConvertTarget` is a closed union of inert descriptors; `{ type: 'custom', id, attrs? }` is the member for host blocks. `id` is both the target id (`convertTargetId`) and the node type name; `attrs`, when given, must match for a node to count as already being that target (`isCurrentTarget`). The core engine never executes a `custom` target.
|
|
429
|
+
- **Ownership.** The provider whose `parseTarget(id)` returns the target owns it (labels through `label`, execution through `convert`). A target id offered by two providers throws; so does asking for the label of a target no provider owns.
|
|
430
|
+
- **`handlesSource`.** The first provider that claims a source block executes *every* conversion of it. The callout claims callouts, so unwrapping into a paragraph or a list runs here, reusing the core engine (`convertCoreBlocks`). Without a claim, the target's owner executes.
|
|
431
|
+
- **Helpers for your `convert`.** `createConverter(schema)`, `convertCoreBlocks`, `childrenOf`, `isCoreSource`, `CORE_TARGET_IDS`, `parseCoreTarget` and `finishConversion` (carries block IDs and checks the result) are exported from `@ecsplico/editor/core`. Return `null` for "not possible"; the result must fit its parent (`canReplace`), so a callout is only offered where one may stand. A composite is not converted into a callout: the callout provider offers targets only for core sources and callouts.
|
|
432
|
+
- **One transaction.** A conversion is one undo step.
|
|
433
|
+
|
|
434
|
+
### `aiContext`
|
|
435
|
+
|
|
436
|
+
`aiContext: () => ({ blocks: [...] })` tells the model that the block exists, what it is for and how to write it. Contributions of all features add up; the fields, the merge rules and what chat and generate tasks do with them are described under [AI](#ai).
|
|
437
|
+
|
|
438
|
+
### `aiBlockData`
|
|
439
|
+
|
|
440
|
+
`aiBlockData: ({ editor, node, pos, signal }) => AiBlockDatum[] | Promise<AiBlockDatum[]>` supplies material for one Baustein (examples, a record) before „Baustein füllen (KI)“ asks the model. All contributions run in parallel and concatenate in feature order (`aiBlockDataOf(editor)`); one rejection cancels the fill with the notice „Daten für den Baustein fehlen“. The library only collects and caps (10 entries, `AI_LIMITS.block.data` characters each); the fetch belongs to the feature, and `signal` aborts it with the editor. See the Epikrise host feature in `app/editor/epikrise/feature.ts`, which fetches examples from `server/api/playground/epikrise-examples.get.ts` for one kind and returns `[]` for others.
|
|
441
|
+
|
|
442
|
+
### `setup`
|
|
443
|
+
|
|
444
|
+
`setup: (ctx) => void | (() => void)` runs when a surface mounts: `EditorSurface` (Vue and React) calls it once per mounted surface for every feature that has it, so a feature can start per-app side effects (a runtime, a document-level listener, a `<head>` element). The **teardown** it returns runs when that surface unmounts; do not rely on `onScopeDispose` or an effect cleanup, the framework layer owns that. It runs once per surface, so state shared by several surfaces of one app belongs in a per-app registry that dedupes inside and reference-counts its release (`startObsidianTheme(ctx)` keys per app, starts once and returns its idempotent release, so React's double mount in StrictMode leaves one runtime). `ctx.app` is the key for such a registry. The Vue `themesFeature()` additionally keeps the runtime for the life of the Vue app through its `lifetime` hook (the theme styles the whole site, so navigating to a page without an editor keeps it), the React one releases it with the last surface. `themesFeature()` puts `obsidian-theme theme-dark|theme-light` on `<html>`.
|
|
445
|
+
|
|
446
|
+
### Composing and mounting
|
|
447
|
+
|
|
448
|
+
The advanced list plus your feature; the same preset feeds the toolbar and the settings popup (`EditorSettingsModal :preset`), and the surface mounts it:
|
|
449
|
+
|
|
450
|
+
```ts
|
|
451
|
+
// The advanced feature list plus the host's own feature; the same preset feeds the toolbar and the settings panel.
|
|
452
|
+
const presetB = defineEditor({ features: [...advancedEditor().features, calloutFeature()] })
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
```ts
|
|
456
|
+
// The custom ability must be granted at document root, or the callout's toolbar button, `/hinweis` and hover menu stay hidden.
|
|
457
|
+
const abilitiesB: Partial<AbilitiesOptions> = { root: [...ROOT_ABILITIES, CALLOUT_ABILITY] }
|
|
458
|
+
```
|
|
459
|
+
|
|
460
|
+
```vue
|
|
461
|
+
<EditorSurface
|
|
462
|
+
v-model="paneB.content"
|
|
463
|
+
v-model:sidebar-open="paneB.sidebarOpen"
|
|
464
|
+
:preset="presetB"
|
|
465
|
+
:abilities="abilitiesB"
|
|
466
|
+
settings-ui="external"
|
|
467
|
+
:editable="paneB.editable"
|
|
468
|
+
@ready="onReady(paneB, $event)"
|
|
469
|
+
@update:model-value="onUpdate(paneB, $event)"
|
|
470
|
+
@settings-open="showSettings(paneB, $event)"
|
|
471
|
+
/>
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
- **Order is order.** `defineEditor` keeps the given order: toolbar groups, menu entries and the schema follow it. A feature that is not in the list contributes nothing; a smaller list works too (`defineEditor({ features: [coreFeature(), calloutFeature()] })`; add `blockUiFeature()` for the hover actions).
|
|
475
|
+
- **Grant a custom ability.** Items gated by your own ability id are inert until the ability exists at the caret. Root abilities come from the `abilities` prop (`{ root: [...ROOT_ABILITIES, CALLOUT_ABILITY] }`, `ROOT_ABILITIES` from `@ecsplico/editor/core/schema`); per-node rules go in `rules`, or in the node's own `abilities`. Without the grant, Editor B's toolbar button is disabled and `/hinweis` and the hover menu are missing.
|
|
476
|
+
- **Build the preset once.** Build it in `<script setup>` (or a React `useState`/`useMemo`): the preset is read once at mount, like every prop of the surface. Features need no component setup except the Vue `themesFeature()` (it hooks the Vue app's lifetime, so call `advancedEditor()` during component setup); `aiFeature()` takes its model profiles from the app context (`modelProfiles(ctx.app)`).
|
|
477
|
+
- **`requires`.** Name features your feature builds on with `requires: ['block-ui']`: `defineEditor` throws at composition time (and `bun run check:editor-composition` keeps that behaviour) when one is missing, instead of a button silently not appearing. The callout does not declare it because it works without hover actions. The built-in examples: `commentsFeature()` requires `collab`; `compositeMediaFeature()` requires `composites` and `media`.
|
|
478
|
+
- **Singletons.** At most one feature may contribute `anchorResolver`, `formatAiResult` or the single-contributor pipeline stages (`parseMarkdown`, `segment`, `structure`, `wrapImport`, `migrateContent`); a second contributor makes `defineEditor` throw. `normalize` stages chain. `aiContext` is not a singleton: contributions add up (see [AI](#ai)).
|
|
479
|
+
- **Markdown import.** The page's „Markdown einfügen“ button shows the tokenizer working through the block pipeline: `parseBlocks(editor, markdown).blocks` returns TipTap JSON blocks, here with a `callout`.
|
|
480
|
+
|
|
481
|
+
```ts
|
|
482
|
+
/** Imports Markdown with the callout syntax through the editor's block pipeline (the tokenizer of `callout/node.ts`). */
|
|
483
|
+
function insertCalloutMarkdown() {
|
|
484
|
+
const editor = paneB.editor
|
|
485
|
+
if (!editor) return
|
|
486
|
+
editor.chain().focus().insertContent(parseBlocks(editor, CALLOUT_MARKDOWN).blocks).run()
|
|
487
|
+
}
|
|
488
|
+
```
|
|
489
|
+
|
|
490
|
+
## Beyond the browser
|
|
491
|
+
|
|
492
|
+
### Collaboration and the server schema
|
|
493
|
+
|
|
494
|
+
A Yjs document is valid only if every participant knows the same schema. The playgrounds' editors are standalone (JSON `v-model`); with a collaboration session the server must know your node, too.
|
|
495
|
+
|
|
496
|
+
- The Nuxt module's collab route builds its schema from the advanced entry plus the adapter's `schemaExtensions()`: `getSchema([...advancedSchemaExtensions(), ...(adapter.schemaExtensions?.() ?? [])])` in [`src/nuxt/runtime/server/utils/collab.ts`](../src/nuxt/runtime/server/utils/collab.ts). Without `schemaExtensions`, a document that contains a `callout` is outside what that route can load: seeding from JSON (`collabSchema().nodeFromJSON`) and the load-time block-ID backfill (`yXmlFragmentToProsemirror(collabSchema(), …)`) both go through a schema without the node.
|
|
497
|
+
- For documents with own blocks register the Vue-free node files in the adapter: `setEditorAdapter({ …, schemaExtensions: () => [Callout] })` (`Callout` from `callout/node.ts`, never `CalloutBlock`, so no Vue component loads). A plain-Vue or React app with **its own Hocuspocus server** builds the schema itself: `getSchema([...advancedSchemaExtensions(), Callout])`. Use the same Collaboration `field` as the client (`default`). See [Matching schemas](./integration.md#matching-schemas-who-owns-the-document) and [Vue-free advanced schema for servers](./integration.md#8-vue-free-advanced-schema-for-servers).
|
|
498
|
+
- `editorBlock: true` works on the server too: `assignBlockIds` reads the flag from the schema, so your server backfills IDs for callouts exactly like for paragraphs.
|
|
499
|
+
- The client mounts a preset that contributes the same node: `advancedEditor().features` plus `calloutFeature()`, together with `collabFeature()`'s session (`advancedEditor()` already has it).
|
|
500
|
+
|
|
501
|
+
### AI
|
|
502
|
+
|
|
503
|
+
AI features read and write Markdown, so `renderMarkdown`, `markdownTokenName`, `markdownTokenizer` and `parseMarkdown` of the node decide what the model sees and what it can create.
|
|
504
|
+
|
|
505
|
+
- **What the model sees.** `editor.getMarkdown()` and every `editor.markdown.serialize(…)` (selection text, document context, summaries) use your `renderMarkdown`. The chat's document view lists *text blocks* as `[<block id>] <Markdown>` lines. A host block that wraps block content, like the callout, is listed as a header line with the block's own ID and its Markdown opener, `[<id>] !!! info`, and its body blocks follow two spaces further in, each as its own line with its own block ID.
|
|
506
|
+
- **What the model can write.** AI results are parsed by the block pipeline (`parseBlocks`), so Markdown in your syntax becomes your node. The model knows the syntax only if you describe it in `aiContext.blocks` (below); the library does not guess it from `renderMarkdown`.
|
|
507
|
+
- **Block IDs.** The callout is a wrapper block: the chat shows it as the header line `[<id>] !!! info` and addresses its inner paragraphs by their own IDs (built-in blocks, they carry IDs regardless). `add` after a body block inserts *inside* the callout. The callout's own ID also serves flash/reveal, paste de-duplication and the server backfill. A host node with inline content (`content: 'inline*'`) and `editorBlock: true` appears in the chat as a line of its own and can be updated, deleted, extended and converted by its ID.
|
|
508
|
+
- **`aiContext` is additive.** A feature teaches the model about its blocks through `aiContext: (editor) => ({ kinds?, blocks?, structure? })`; any number of features may contribute. `defineEditor` merges the contributions: `kinds` and `blocks` are concatenated in feature order, `structure` (`'flat'` | `'composite'`) may come from one feature only. Two failures are reported when the merged context is read (the first time the chat, a generate task or `aiContextOf(editor)` asks), not when you call `defineEditor`: a block `id` described by two contributions, and two features that set `structure`. `aiContextOf(editor)` returns `{ kinds, blocks, structure }` (no kinds, no blocks, `'flat'` by default).
|
|
509
|
+
- **`blocks`.** Each `AiBlock` (type exported from `@ecsplico/editor/core`) describes one host block: `id` is the node type name (`callout`) and doubles as the `convert` target id; `label` is its German name; `description` is one or two sentences on purpose and allowed content; `syntax` is the Markdown form with placeholders in angle brackets; `example` is one complete Markdown example. The callout contributes it like this (`app/editor/callout/feature.ts`):
|
|
510
|
+
|
|
511
|
+
```ts
|
|
512
|
+
aiContext: () => ({
|
|
513
|
+
blocks: [{
|
|
514
|
+
id: 'callout',
|
|
515
|
+
label: 'Hinweis',
|
|
516
|
+
description: 'Ein farbig hervorgehobener Kasten für einen Hinweis (info), eine Warnung (warning) oder etwas Erledigtes (success). Enthält Absätze, Listen oder Zitate, keine Überschriften.',
|
|
517
|
+
syntax: '!!! <info|warning|success>\n<Inhalt, Blöcke durch einen Zeilenumbruch getrennt; eine Leerzeile beendet den Hinweis>',
|
|
518
|
+
example: '!!! warning\nBitte die Zahlen vor dem Versand prüfen.',
|
|
519
|
+
}],
|
|
520
|
+
}),
|
|
521
|
+
```
|
|
522
|
+
|
|
523
|
+
- **What the model does with `blocks`.** The chat lists the blocks in its system prompt and sends them with each request; the generate tasks (sidebar and selection menu) list them in their system prompt too, so a result may contain the block in your syntax and the block pipeline turns it into your node. `syntax` and `example` must match `renderMarkdown` and the tokenizer, or the result will not parse back into the node.
|
|
524
|
+
- **`convert` targets.** The chat sends the model its list of `convert` targets: the core ids, the composite kinds of `aiContext.kinds`, and each `blocks` entry whose id a registered conversion provider parses (`conversions` with a `custom` target; the callout's does). A block without such a provider is not a `convert` target, but the model may still `add` or `update` it through Markdown in its syntax. „Umwandeln in Hinweis“ is therefore also an agent operation for the callout. A custom composite *kind* goes through the `compositeKinds` prop of `advancedEditor({ compositeKinds })`, not through your feature.
|
|
525
|
+
|
|
526
|
+
## Checklist
|
|
527
|
+
|
|
528
|
+
1. **Node.** `Node.create` in a Vue-free `node.ts`; `group`, `content`, attributes with `parseHTML`/`renderHTML`, commands and a free shortcut.
|
|
529
|
+
2. **Block IDs.** `editorBlock: true` if AI operations, flash/reveal, paste de-duplication or the server ID backfill should reach it.
|
|
530
|
+
3. **Abilities.** `abilities` on the node for what is allowed inside; for a custom ability id, grant it through the `abilities` prop (`root`).
|
|
531
|
+
4. **Markdown.** `renderMarkdown`, `markdownTokenName`, `markdownTokenizer`, `parseMarkdown` with syntax no other stage claims; test the round trip (`getMarkdown()` → `parseBlocks`), including multi-block bodies.
|
|
532
|
+
5. **View and CSS.** Node view in a separate `index.ts` (`Node.extend`), stylesheet imported after `core.css`.
|
|
533
|
+
6. **Path A.** `extensions` (constant) and `slashCommands` props, nothing else needed.
|
|
534
|
+
7. **Path B.** An `EditorFeature`: `extensions`, then `toolbar` (merge by group id, `commandItem`, `order`), `slashCommands` and `blockActions` with your `ability`, `conversions` with a `custom` target; `requires` for features you depend on.
|
|
535
|
+
8. **Compose.** `defineEditor({ features: [...advancedEditor().features, yourFeature()] })` in setup (`advancedEditor` from `/vue/advanced` or `/react/advanced`); mount with `EditorSurface` and pass `abilities` for custom ability ids; add `blockUiFeature()` to a smaller list when you use hover actions.
|
|
536
|
+
9. **Server.** When documents with your block are collaborative, return `YourNode` from the adapter's `schemaExtensions()` (the package's collab route appends it to `advancedSchemaExtensions()`), or build `getSchema([...advancedSchemaExtensions(), YourNode])` in your own Hocuspocus server.
|
|
537
|
+
10. **AI.** Decide what the model should see (`renderMarkdown`) and write; describe the block in `aiContext.blocks` (`id`, `label`, `description`, `syntax`, `example`, matching your Markdown) — `aiContext` is additive, a block id may be described only once; add a `custom` conversion provider if the block should be a `convert` target.
|
|
538
|
+
11. **Bundle proof.** If you ship the block in a package, add a fixture and a `FIXTURES` entry for `bun run check:editor-entries` ([integration guide §13](./integration.md#13-dependency-rules-and-bundle-proof)); `bun run check:editor-composition` covers `defineEditor` validation.
|