@ecsplico/editor 2.1.1 → 3.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 +74 -1
- package/README.md +39 -156
- package/dist/adapters/comments/drizzle.d.ts +1 -1
- package/dist/adapters/comments/{client.js → rest-model.js} +3 -3
- package/dist/adapters/comments/rest-model.js.map +1 -0
- package/dist/adapters/comments/types.d.ts +2 -2
- package/dist/adapters/document-state.d.ts +23 -0
- package/dist/adapters/document-state.js +66 -0
- package/dist/adapters/document-state.js.map +1 -0
- package/dist/adapters/documents.js +14 -11
- package/dist/adapters/documents.js.map +1 -1
- package/dist/adapters/drizzle.d.ts +2 -2
- package/dist/adapters/drizzle.js +97 -88
- package/dist/adapters/drizzle.js.map +1 -1
- package/dist/adapters/forge.d.ts +12 -7
- package/dist/adapters/forge.js +38 -45
- package/dist/adapters/forge.js.map +1 -1
- package/dist/adapters/http.d.ts +20 -0
- package/dist/adapters/http.js +68 -0
- package/dist/adapters/http.js.map +1 -0
- package/dist/adapters/index.d.ts +5 -5
- package/dist/adapters/json.d.ts +3 -3
- package/dist/adapters/json.js +58 -49
- package/dist/adapters/json.js.map +1 -1
- package/dist/adapters/memory.d.ts +21 -0
- package/dist/adapters/memory.js +53 -0
- package/dist/adapters/memory.js.map +1 -0
- package/dist/adapters/nitro.d.ts +23 -20
- package/dist/adapters/nitro.js +58 -163
- package/dist/adapters/nitro.js.map +1 -1
- package/dist/adapters/react.d.ts +55 -0
- package/dist/adapters/react.js +209 -0
- package/dist/adapters/react.js.map +1 -0
- package/dist/adapters/shared.d.ts +15 -21
- package/dist/adapters/shared.js +10 -8
- package/dist/adapters/shared.js.map +1 -1
- package/dist/adapters/vue.d.ts +15 -30
- package/dist/adapters/vue.js +36 -87
- package/dist/adapters/vue.js.map +1 -1
- package/dist/code/CodeSurface.vue.d.ts +3 -3
- package/dist/config/index.d.ts +105 -0
- package/dist/config/index.js +95 -0
- package/dist/config/index.js.map +1 -0
- package/dist/core/abilities.js +1 -0
- package/dist/core/abilities.js.map +1 -1
- package/dist/{adapters/routes.js → core/api-routes.js} +5 -3
- package/dist/core/api-routes.js.map +1 -0
- package/dist/core/backend-capability.d.ts +7 -0
- package/dist/core/backend-capability.js +17 -0
- package/dist/core/backend-capability.js.map +1 -0
- package/dist/core/backend-types.d.ts +245 -0
- package/dist/core/backend-types.js +17 -0
- package/dist/core/backend-types.js.map +1 -0
- package/dist/core/backend.d.ts +108 -0
- package/dist/core/backend.js +14 -0
- package/dist/core/backend.js.map +1 -0
- package/dist/core/block-convert.d.ts +7 -5
- package/dist/core/block-convert.js +28 -5
- package/dist/core/block-convert.js.map +1 -1
- package/dist/core/command-types.d.ts +89 -0
- package/dist/core/commands.d.ts +40 -0
- package/dist/core/commands.js +151 -0
- package/dist/core/commands.js.map +1 -0
- package/dist/core/context.d.ts +17 -20
- package/dist/core/context.js +24 -21
- package/dist/core/context.js.map +1 -1
- package/dist/core/core-feature.d.ts +22 -7
- package/dist/core/core-feature.js +51 -18
- package/dist/core/core-feature.js.map +1 -1
- package/dist/core/define-editor.d.ts +4 -3
- package/dist/core/define-editor.js +14 -7
- package/dist/core/define-editor.js.map +1 -1
- package/dist/core/document-markdown.js +12 -3
- package/dist/core/document-markdown.js.map +1 -1
- package/dist/core/editor-ui.d.ts +8 -1
- package/dist/core/editor-ui.js +9 -8
- package/dist/core/editor-ui.js.map +1 -1
- package/dist/core/extension-points.d.ts +3 -15
- package/dist/core/feature-context.d.ts +8 -7
- package/dist/core/feature-context.js +12 -11
- package/dist/core/feature-context.js.map +1 -1
- package/dist/core/feature.d.ts +35 -19
- package/dist/core/feature.js.map +1 -1
- package/dist/core/fences.d.ts +2 -1
- package/dist/core/fences.js +3 -2
- package/dist/core/fences.js.map +1 -1
- package/dist/core/fetch-error.d.ts +1 -1
- package/dist/core/fetch-error.js +3 -1
- package/dist/core/fetch-error.js.map +1 -1
- package/dist/core/hash.d.ts +5 -0
- package/dist/core/hash.js +11 -0
- package/dist/core/hash.js.map +1 -0
- package/dist/core/http-backend.d.ts +11 -0
- package/dist/core/http-backend.js +195 -0
- package/dist/core/http-backend.js.map +1 -0
- package/dist/core/index.d.ts +14 -9
- package/dist/core/index.js +12 -9
- package/dist/core/palette.d.ts +48 -0
- package/dist/core/palette.js +95 -0
- package/dist/core/palette.js.map +1 -0
- package/dist/core/schema/abilities.d.ts +2 -1
- package/dist/core/schema/abilities.js +5 -1
- package/dist/core/schema/abilities.js.map +1 -1
- package/dist/core/schema/index.d.ts +11 -5
- package/dist/core/schema/index.js +13 -8
- package/dist/core/schema/index.js.map +1 -1
- package/dist/core/schema/mark-flags.d.ts +8 -1
- package/dist/core/schema/of-features.d.ts +13 -0
- package/dist/core/schema/of-features.js +14 -0
- package/dist/core/schema/of-features.js.map +1 -0
- package/dist/core/slash.d.ts +8 -6
- package/dist/core/slash.js +24 -16
- package/dist/core/slash.js.map +1 -1
- package/dist/core/surface-session.js +13 -5
- package/dist/core/surface-session.js.map +1 -1
- package/dist/core/toolbar-items.d.ts +10 -4
- package/dist/core/toolbar-items.js +269 -195
- package/dist/core/toolbar-items.js.map +1 -1
- package/dist/core/util.js +11 -0
- package/dist/core/util.js.map +1 -0
- package/dist/document/DocumentSurface.d.ts +1 -1
- package/dist/document/DocumentSurface.vue.d.ts +3 -3
- package/dist/features/ai/agent-op-review.d.ts +1 -1
- package/dist/features/ai/agent-op-review.js +1 -1
- package/dist/features/ai/agent-ops.js +1 -1
- package/dist/features/ai/ai-apply.d.ts +2 -2
- package/dist/features/ai/ai-apply.js +1 -1
- package/dist/features/ai/ai-review.js +1 -1
- package/dist/features/ai/ai-sse.d.ts +6 -6
- package/dist/features/ai/ai-sse.js +20 -63
- package/dist/features/ai/ai-sse.js.map +1 -1
- package/dist/features/ai/assistant.d.ts +8 -7
- package/dist/features/ai/assistant.js +3 -3
- package/dist/features/ai/assistant.js.map +1 -1
- package/dist/features/ai/block-actions.d.ts +3 -2
- package/dist/features/ai/block-actions.js +3 -2
- package/dist/features/ai/block-actions.js.map +1 -1
- package/dist/features/ai/components/AiSelectionMenu.js +1 -1
- package/dist/features/ai/components/DocumentChatAnswer.js +1 -1
- package/dist/features/ai/components/DocumentChatOps.vue.d.ts +1 -1
- package/dist/features/ai/components/SettingsModelProfiles.js +8 -8
- package/dist/features/ai/components/SettingsModelProfiles.js.map +1 -1
- package/dist/features/ai/document-chat-model.d.ts +8 -7
- package/dist/features/ai/document-chat-model.js +5 -5
- package/dist/features/ai/document-chat-model.js.map +1 -1
- package/dist/features/ai/document-chat.js +1 -1
- package/dist/features/ai/feature.js +27 -14
- package/dist/features/ai/feature.js.map +1 -1
- package/dist/features/ai/ghost-autocomplete.d.ts +7 -6
- package/dist/features/ai/ghost-autocomplete.js +6 -9
- package/dist/features/ai/ghost-autocomplete.js.map +1 -1
- package/dist/features/ai/index.d.ts +4 -3
- package/dist/features/ai/index.js +10 -10
- package/dist/features/ai/model-profiles.d.ts +5 -4
- package/dist/features/ai/model-profiles.js +2 -2
- package/dist/features/ai/model-profiles.js.map +1 -1
- package/dist/features/ai/protocol/block-lines.js +1 -1
- package/dist/features/ai/protocol/block-lines.js.map +1 -1
- package/dist/features/ai/protocol/chat.js +4 -1
- package/dist/features/ai/protocol/chat.js.map +1 -1
- package/dist/features/ai/protocol/index.d.ts +3 -2
- package/dist/features/ai/protocol/models.d.ts +2 -16
- package/dist/features/ai/protocol/models.js.map +1 -1
- package/dist/features/ai/rate-limit.d.ts +1 -1
- package/dist/features/ai/rate-limit.js +3 -1
- package/dist/features/ai/rate-limit.js.map +1 -1
- package/dist/features/ai/react/AiSelectionMenu.js +2 -2
- package/dist/features/ai/react/AiSidebar.js +4 -4
- package/dist/features/ai/react/DocumentChatAnswer.js +1 -1
- package/dist/features/ai/react/DocumentChatOps.d.ts +1 -1
- package/dist/features/ai/react/DocumentChatOps.js +1 -1
- package/dist/features/ai/react/SettingsModelProfiles.js +8 -10
- package/dist/features/ai/react/SettingsModelProfiles.js.map +1 -1
- package/dist/features/ai/react/use-ai-assistant.d.ts +1 -1
- package/dist/features/ai/react/use-ai-assistant.js +3 -3
- package/dist/features/ai/react/use-ai-assistant.js.map +1 -1
- package/dist/features/ai/react/use-document-chat.js +2 -2
- package/dist/features/ai/react/use-document-chat.js.map +1 -1
- package/dist/features/ai/react/use-model-profiles.d.ts +2 -1
- package/dist/features/ai/selection-flow.d.ts +1 -1
- package/dist/features/ai/selection-flow.js +1 -1
- package/dist/features/ai/sidebar-flow.d.ts +1 -1
- package/dist/features/ai/sidebar-flow.js +1 -1
- package/dist/features/ai/use-ai-assistant.d.ts +1 -1
- package/dist/features/ai/use-ai-assistant.js +3 -3
- package/dist/features/ai/use-ai-assistant.js.map +1 -1
- package/dist/features/ai/use-document-chat.js +2 -2
- package/dist/features/ai/use-document-chat.js.map +1 -1
- package/dist/features/ai/use-model-profiles.d.ts +2 -1
- package/dist/features/authors/attribution.d.ts +1 -1
- package/dist/features/authors/feature.js +12 -11
- package/dist/features/authors/feature.js.map +1 -1
- package/dist/features/block-ui/block-actions.d.ts +22 -1
- package/dist/features/block-ui/block-actions.js +26 -2
- package/dist/features/block-ui/block-actions.js.map +1 -1
- package/dist/features/block-ui/components/BlockActionsOverlay.js +33 -4
- package/dist/features/block-ui/components/BlockActionsOverlay.js.map +1 -1
- package/dist/features/block-ui/components/BlockActionsOverlay.vue.d.ts +4 -0
- package/dist/features/block-ui/components/BlockUi.js +1 -1
- package/dist/features/block-ui/feature.js +1 -0
- package/dist/features/block-ui/feature.js.map +1 -1
- package/dist/features/block-ui/index.d.ts +2 -2
- package/dist/features/block-ui/index.js +2 -2
- package/dist/features/block-ui/react/BlockActionsOverlay.d.ts +4 -0
- package/dist/features/block-ui/react/BlockActionsOverlay.js +38 -12
- package/dist/features/block-ui/react/BlockActionsOverlay.js.map +1 -1
- package/dist/features/block-ui/react/BlockUi.js +1 -1
- package/dist/features/collab/anchor-resolver.js +1 -1
- package/dist/features/collab/feature.js +2 -0
- package/dist/features/collab/feature.js.map +1 -1
- package/dist/features/comments/components/CommentThreadView.vue.d.ts +2 -1
- package/dist/features/comments/feature.js +12 -11
- package/dist/features/comments/feature.js.map +1 -1
- package/dist/features/comments/index.d.ts +3 -2
- package/dist/features/comments/index.js +1 -1
- package/dist/features/comments/margin-layout.d.ts +3 -2
- package/dist/features/comments/model.d.ts +3 -67
- package/dist/features/comments/model.js +2 -2
- package/dist/features/comments/model.js.map +1 -1
- package/dist/features/comments/react/CommentThreadView.d.ts +3 -2
- package/dist/features/comments/react/use-comments.d.ts +2 -1
- package/dist/features/comments/react.d.ts +1 -1
- package/dist/features/comments/schema.d.ts +2 -52
- package/dist/features/comments/schema.js.map +1 -1
- package/dist/features/comments/snapshot-equality.js.map +1 -1
- package/dist/features/comments/use-comments.d.ts +3 -2
- package/dist/features/comments/vue.d.ts +1 -1
- package/dist/features/composites/accepted-children.d.ts +1 -0
- package/dist/features/composites/accepted-children.js +16 -1
- package/dist/features/composites/accepted-children.js.map +1 -1
- package/dist/features/composites/ai-brief.js +31 -0
- package/dist/features/composites/ai-brief.js.map +1 -1
- package/dist/features/composites/bibliography-command.d.ts +11 -0
- package/dist/features/composites/bibliography-form.js +90 -0
- package/dist/features/composites/bibliography-form.js.map +1 -0
- package/dist/features/composites/bibliography.d.ts +33 -0
- package/dist/features/composites/bibliography.js +120 -0
- package/dist/features/composites/bibliography.js.map +1 -0
- package/dist/features/composites/components/BibliographyEditor.js +261 -0
- package/dist/features/composites/components/BibliographyEditor.js.map +1 -0
- package/dist/features/composites/components/CompositeChrome.js +75 -26
- package/dist/features/composites/components/CompositeChrome.js.map +1 -1
- package/dist/features/composites/components/CompositeDetails.js +46 -11
- package/dist/features/composites/components/CompositeDetails.js.map +1 -1
- package/dist/features/composites/components/CompositeDetails.vue.d.ts +2 -1
- package/dist/features/composites/components/CompositeFieldEditor.js +37 -4
- package/dist/features/composites/components/CompositeFieldEditor.js.map +1 -1
- package/dist/features/composites/components/CompositeInspector.js +17 -5
- package/dist/features/composites/components/CompositeInspector.js.map +1 -1
- package/dist/features/composites/components/CompositeTable.js +13 -4
- package/dist/features/composites/components/CompositeTable.js.map +1 -1
- package/dist/features/composites/components/CompositeTagsEditor.js +1 -1
- package/dist/features/composites/components/CompositeView.js +11 -1
- package/dist/features/composites/components/CompositeView.js.map +1 -1
- package/dist/features/composites/components/DerivationBadge.js +103 -0
- package/dist/features/composites/components/DerivationBadge.js.map +1 -0
- package/dist/features/composites/components/ReferenceFieldSelect.js +60 -0
- package/dist/features/composites/components/ReferenceFieldSelect.js.map +1 -0
- package/dist/features/composites/components/ReferenceView.js +122 -0
- package/dist/features/composites/components/ReferenceView.js.map +1 -0
- package/dist/features/composites/components/ReferenceView.vue.d.ts +96 -0
- package/dist/features/composites/components/SettingsEditingTab.js +1 -1
- package/dist/features/composites/convert.js +2 -2
- package/dist/features/composites/convert.js.map +1 -1
- package/dist/features/composites/derivation.d.ts +61 -0
- package/dist/features/composites/derivation.js +98 -0
- package/dist/features/composites/derivation.js.map +1 -0
- package/dist/features/composites/derived-chrome.js +69 -0
- package/dist/features/composites/derived-chrome.js.map +1 -0
- package/dist/features/composites/feature.js +159 -109
- package/dist/features/composites/feature.js.map +1 -1
- package/dist/features/composites/fences.d.ts +4 -3
- package/dist/features/composites/fences.js +51 -7
- package/dist/features/composites/fences.js.map +1 -1
- package/dist/features/composites/index.d.ts +12 -3
- package/dist/features/composites/index.js +15 -6
- package/dist/features/composites/inspector-model.d.ts +4 -1
- package/dist/features/composites/inspector-model.js +8 -4
- package/dist/features/composites/inspector-model.js.map +1 -1
- package/dist/features/composites/kinds.d.ts +8 -1
- package/dist/features/composites/kinds.js +145 -6
- package/dist/features/composites/kinds.js.map +1 -1
- package/dist/features/composites/legacy.d.ts +4 -1
- package/dist/features/composites/legacy.js +56 -1
- package/dist/features/composites/legacy.js.map +1 -1
- package/dist/features/composites/meta-display.js +40 -1
- package/dist/features/composites/meta-display.js.map +1 -1
- package/dist/features/composites/meta-keys.d.ts +7 -0
- package/dist/features/composites/meta-keys.js +21 -0
- package/dist/features/composites/meta-keys.js.map +1 -0
- package/dist/features/composites/node-views.d.ts +6 -3
- package/dist/features/composites/node-views.js +7 -3
- package/dist/features/composites/node-views.js.map +1 -1
- package/dist/features/composites/nodes.d.ts +6 -1
- package/dist/features/composites/nodes.js +33 -7
- package/dist/features/composites/nodes.js.map +1 -1
- package/dist/features/composites/react/BibliographyEditor.js +229 -0
- package/dist/features/composites/react/BibliographyEditor.js.map +1 -0
- package/dist/features/composites/react/CompositeChrome.js +65 -17
- package/dist/features/composites/react/CompositeChrome.js.map +1 -1
- package/dist/features/composites/react/CompositeDetails.d.ts +2 -1
- package/dist/features/composites/react/CompositeDetails.js +45 -6
- package/dist/features/composites/react/CompositeDetails.js.map +1 -1
- package/dist/features/composites/react/CompositeFieldEditor.d.ts +1 -1
- package/dist/features/composites/react/CompositeFieldEditor.js +24 -1
- package/dist/features/composites/react/CompositeFieldEditor.js.map +1 -1
- package/dist/features/composites/react/CompositeInspector.js +11 -5
- package/dist/features/composites/react/CompositeInspector.js.map +1 -1
- package/dist/features/composites/react/CompositeStatusMenu.js +1 -1
- package/dist/features/composites/react/CompositeSummaryEditor.js +1 -1
- package/dist/features/composites/react/CompositeTable.js +16 -2
- package/dist/features/composites/react/CompositeTable.js.map +1 -1
- package/dist/features/composites/react/CompositeTagsEditor.js +2 -2
- package/dist/features/composites/react/CompositeView.js +6 -1
- package/dist/features/composites/react/CompositeView.js.map +1 -1
- package/dist/features/composites/react/DerivationBadge.js +116 -0
- package/dist/features/composites/react/DerivationBadge.js.map +1 -0
- package/dist/features/composites/react/ReferenceFieldSelect.js +52 -0
- package/dist/features/composites/react/ReferenceFieldSelect.js.map +1 -0
- package/dist/features/composites/react/ReferenceView.d.ts +11 -0
- package/dist/features/composites/react/ReferenceView.js +115 -0
- package/dist/features/composites/react/ReferenceView.js.map +1 -0
- package/dist/features/composites/react/SettingsEditingTab.js +2 -2
- package/dist/features/composites/react.d.ts +2 -1
- package/dist/features/composites/react.js +7 -3
- package/dist/features/composites/react.js.map +1 -1
- package/dist/features/composites/reference-ai.js +16 -0
- package/dist/features/composites/reference-ai.js.map +1 -0
- package/dist/features/composites/reference-label.d.ts +19 -0
- package/dist/features/composites/reference-label.js +58 -0
- package/dist/features/composites/reference-label.js.map +1 -0
- package/dist/features/composites/reference-suggestion.d.ts +10 -0
- package/dist/features/composites/reference-suggestion.js +41 -0
- package/dist/features/composites/reference-suggestion.js.map +1 -0
- package/dist/features/composites/reference-text.d.ts +18 -0
- package/dist/features/composites/reference-text.js +89 -0
- package/dist/features/composites/reference-text.js.map +1 -0
- package/dist/features/composites/reference.d.ts +44 -0
- package/dist/features/composites/reference.js +148 -0
- package/dist/features/composites/reference.js.map +1 -0
- package/dist/features/composites/reveal-source.d.ts +32 -0
- package/dist/features/composites/reveal-source.js +89 -0
- package/dist/features/composites/reveal-source.js.map +1 -0
- package/dist/features/composites/rows.d.ts +21 -2
- package/dist/features/composites/rows.js +63 -9
- package/dist/features/composites/rows.js.map +1 -1
- package/dist/features/composites/schema.d.ts +9 -3
- package/dist/features/composites/schema.js +11 -4
- package/dist/features/composites/schema.js.map +1 -1
- package/dist/features/composites/table-model.js +12 -21
- package/dist/features/composites/table-model.js.map +1 -1
- package/dist/features/composites/vue.d.ts +3 -2
- package/dist/features/composites/vue.js +8 -4
- package/dist/features/composites/vue.js.map +1 -1
- package/dist/features/media/assets.d.ts +2 -0
- package/dist/features/media/assets.js +3 -2
- package/dist/features/media/assets.js.map +1 -1
- package/dist/features/media/components/FileView.js +13 -4
- package/dist/features/media/components/FileView.js.map +1 -1
- package/dist/features/media/feature.d.ts +3 -3
- package/dist/features/media/feature.js +21 -28
- package/dist/features/media/feature.js.map +1 -1
- package/dist/features/media/file-import.js +2 -2
- package/dist/features/media/file-import.js.map +1 -1
- package/dist/features/media/index.d.ts +2 -2
- package/dist/features/media/index.js +2 -2
- package/dist/features/media/react/FileView.js +19 -2
- package/dist/features/media/react/FileView.js.map +1 -1
- package/dist/features/media/schema.d.ts +8 -0
- package/dist/features/media/schema.js +126 -11
- package/dist/features/media/schema.js.map +1 -1
- package/dist/features/media/upload.d.ts +16 -14
- package/dist/features/media/upload.js +13 -19
- package/dist/features/media/upload.js.map +1 -1
- package/dist/features/mentions/index.d.ts +4 -3
- package/dist/features/mentions/index.js +4 -1
- package/dist/features/mentions/index.js.map +1 -1
- package/dist/features/mentions/mention-text.d.ts +1 -1
- package/dist/features/mentions/mention-text.js.map +1 -1
- package/dist/features/mentions/mention.d.ts +0 -6
- package/dist/features/mentions/mention.js.map +1 -1
- package/dist/features/mentions/metadata-defaults.d.ts +2 -2
- package/dist/features/mentions/metadata-defaults.js +3 -9
- package/dist/features/mentions/metadata-defaults.js.map +1 -1
- package/dist/features/mentions/schema.d.ts +2 -1
- package/dist/features/mentions/schema.js.map +1 -1
- package/dist/features/tables/feature.d.ts +2 -1
- package/dist/features/tables/feature.js +90 -70
- package/dist/features/tables/feature.js.map +1 -1
- package/dist/features/themes/components/SettingsAppearanceTab.js +6 -9
- package/dist/features/themes/components/SettingsAppearanceTab.js.map +1 -1
- package/dist/features/themes/feature.js +2 -0
- package/dist/features/themes/feature.js.map +1 -1
- package/dist/features/themes/index.d.ts +2 -1
- package/dist/features/themes/react/SettingsAppearanceTab.js +7 -10
- package/dist/features/themes/react/SettingsAppearanceTab.js.map +1 -1
- package/dist/features/themes/schema.d.ts +2 -6
- package/dist/features/themes/schema.js.map +1 -1
- package/dist/features/themes/theme-runtime.d.ts +1 -1
- package/dist/features/themes/theme-runtime.js +4 -2
- package/dist/features/themes/theme-runtime.js.map +1 -1
- package/dist/features/transcript/TranscriptSegmentView.js +48 -28
- package/dist/features/transcript/TranscriptSegmentView.js.map +1 -1
- package/dist/features/transcript/feature.js +21 -19
- package/dist/features/transcript/feature.js.map +1 -1
- package/dist/features/transcript/react/TranscriptSegmentView.js +55 -36
- package/dist/features/transcript/react/TranscriptSegmentView.js.map +1 -1
- package/dist/features/transcript/segment-node.d.ts +2 -0
- package/dist/features/transcript/segment-node.js +35 -7
- package/dist/features/transcript/segment-node.js.map +1 -1
- package/dist/i18n/de/composites.js +91 -1
- package/dist/i18n/de/composites.js.map +1 -1
- package/dist/i18n/de/integrations.js +49 -8
- package/dist/i18n/de/integrations.js.map +1 -1
- package/dist/i18n/de/media.js +0 -1
- package/dist/i18n/de/media.js.map +1 -1
- package/dist/i18n/de/palette.js +22 -0
- package/dist/i18n/de/palette.js.map +1 -0
- package/dist/i18n/de/tables.js +0 -1
- package/dist/i18n/de/tables.js.map +1 -1
- package/dist/i18n/de/transcript.js +2 -1
- package/dist/i18n/de/transcript.js.map +1 -1
- package/dist/i18n/de/tree.js +3 -0
- package/dist/i18n/de/tree.js.map +1 -1
- package/dist/i18n/de.d.ts +157 -11
- package/dist/i18n/de.js +3 -1
- package/dist/i18n/de.js.map +1 -1
- package/dist/i18n/en/composites.js +89 -1
- package/dist/i18n/en/composites.js.map +1 -1
- package/dist/i18n/en/integrations.js +49 -8
- package/dist/i18n/en/integrations.js.map +1 -1
- package/dist/i18n/en/media.js +0 -1
- package/dist/i18n/en/media.js.map +1 -1
- package/dist/i18n/en/palette.js +22 -0
- package/dist/i18n/en/palette.js.map +1 -0
- package/dist/i18n/en/tables.js +0 -1
- package/dist/i18n/en/tables.js.map +1 -1
- package/dist/i18n/en/transcript.js +2 -1
- package/dist/i18n/en/transcript.js.map +1 -1
- package/dist/i18n/en/tree.js +3 -0
- package/dist/i18n/en/tree.js.map +1 -1
- package/dist/i18n/en.js +3 -1
- package/dist/i18n/en.js.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/integrations/composite-ai/bibliography-fetch.d.ts +31 -0
- package/dist/integrations/composite-ai/bibliography-fetch.js +159 -0
- package/dist/integrations/composite-ai/bibliography-fetch.js.map +1 -0
- package/dist/integrations/composite-ai/composite-fill.d.ts +30 -8
- package/dist/integrations/composite-ai/composite-fill.js +97 -56
- package/dist/integrations/composite-ai/composite-fill.js.map +1 -1
- package/dist/integrations/composite-ai/composite-summary.d.ts +4 -12
- package/dist/integrations/composite-ai/composite-summary.js +7 -26
- package/dist/integrations/composite-ai/composite-summary.js.map +1 -1
- package/dist/integrations/composite-ai/derive.d.ts +29 -0
- package/dist/integrations/composite-ai/derive.js +173 -0
- package/dist/integrations/composite-ai/derive.js.map +1 -0
- package/dist/integrations/composite-ai/index.d.ts +11 -7
- package/dist/integrations/composite-ai/index.js +72 -14
- package/dist/integrations/composite-ai/index.js.map +1 -1
- package/dist/integrations/composite-ai/rendition.d.ts +45 -0
- package/dist/integrations/composite-ai/rendition.js +314 -0
- package/dist/integrations/composite-ai/rendition.js.map +1 -0
- package/dist/integrations/composite-media/index.d.ts +7 -5
- package/dist/integrations/composite-media/index.js +86 -13
- package/dist/integrations/composite-media/index.js.map +1 -1
- package/dist/integrations/transcript-ai/index.d.ts +1 -1
- package/dist/integrations/transcript-ai/index.js +5 -2
- package/dist/integrations/transcript-ai/index.js.map +1 -1
- package/dist/integrations/transcript-ai/protocol.d.ts +2 -12
- package/dist/integrations/transcript-ai/protocol.js +0 -2
- package/dist/integrations/transcript-ai/protocol.js.map +1 -1
- package/dist/integrations/transcript-ai/transcript-cleanup.d.ts +5 -5
- package/dist/integrations/transcript-ai/transcript-cleanup.js +7 -10
- package/dist/integrations/transcript-ai/transcript-cleanup.js.map +1 -1
- package/dist/markdown/MarkdownSurface.vue.d.ts +10 -9
- package/dist/markdown/MarkdownSurface2.js +3 -6
- package/dist/markdown/MarkdownSurface2.js.map +1 -1
- package/dist/markdown/document.js +1 -1
- package/dist/markdown/source-mode.d.ts +1 -1
- package/dist/nuxt/module.d.ts +1402 -54
- package/dist/nuxt/module.js +6 -49
- package/dist/nuxt/module.js.map +1 -1
- package/dist/nuxt/runtime/install-context.d.ts +7 -3
- package/dist/nuxt/runtime/install-context.js +14 -8
- package/dist/nuxt/runtime/install-context.js.map +1 -1
- package/dist/nuxt/runtime/plugins/editor-context-nuxt-ui.client.ts +2 -2
- package/dist/nuxt/runtime/server/plugins/editor-server.js +20 -12
- package/dist/nuxt/runtime/server/plugins/editor-server.js.map +1 -1
- package/dist/presets/compose.d.ts +94 -0
- package/dist/presets/compose.js +164 -0
- package/dist/presets/compose.js.map +1 -0
- package/dist/react/AdvancedEditor.d.ts +15 -15
- package/dist/react/AdvancedEditor.js +15 -13
- package/dist/react/AdvancedEditor.js.map +1 -1
- package/dist/react/EditorCommandPalette.d.ts +13 -0
- package/dist/react/EditorCommandPalette.js +118 -0
- package/dist/react/EditorCommandPalette.js.map +1 -0
- package/dist/react/EditorSettingsModal.d.ts +5 -5
- package/dist/react/EditorSettingsModal.js +7 -4
- package/dist/react/EditorSettingsModal.js.map +1 -1
- package/dist/react/EditorSettingsPanel.d.ts +7 -7
- package/dist/react/EditorSettingsPanel.js +8 -5
- package/dist/react/EditorSettingsPanel.js.map +1 -1
- package/dist/react/EditorSurface.d.ts +7 -7
- package/dist/react/EditorSurface.js +10 -6
- package/dist/react/EditorSurface.js.map +1 -1
- package/dist/react/EditorToolbar.d.ts +4 -6
- package/dist/react/EditorToolbar.js +29 -37
- package/dist/react/EditorToolbar.js.map +1 -1
- package/dist/react/SimpleEditor.d.ts +22 -23
- package/dist/react/SimpleEditor.js +21 -7
- package/dist/react/SimpleEditor.js.map +1 -1
- package/dist/react/advanced.d.ts +4 -3
- package/dist/react/advanced.js +2 -2
- package/dist/react/compose.d.ts +20 -0
- package/dist/react/compose.js +49 -0
- package/dist/react/compose.js.map +1 -0
- package/dist/react/composed-surface.d.ts +39 -0
- package/dist/react/composed-surface.js +71 -0
- package/dist/react/composed-surface.js.map +1 -0
- package/dist/react/context.js +6 -2
- package/dist/react/context.js.map +1 -1
- package/dist/react/index.d.ts +2 -1
- package/dist/react/index.js +2 -1
- package/dist/react/key-labels.js +15 -0
- package/dist/react/key-labels.js.map +1 -0
- package/dist/react/settings.d.ts +1 -1
- package/dist/react/simple.d.ts +2 -2
- package/dist/react/ui/command.js +36 -1
- package/dist/react/ui/command.js.map +1 -1
- package/dist/schema/advanced.d.ts +6 -6
- package/dist/schema/advanced.js +26 -29
- package/dist/schema/advanced.js.map +1 -1
- package/dist/server/ai.d.ts +5 -16
- package/dist/server/ai.js.map +1 -1
- package/dist/server/auth.d.ts +9 -0
- package/dist/server/collab-state.d.ts +1 -1
- package/dist/server/collab-state.js.map +1 -1
- package/dist/server/collab.d.ts +13 -13
- package/dist/server/collab.js +34 -18
- package/dist/server/collab.js.map +1 -1
- package/dist/server/crossref.js +78 -0
- package/dist/server/crossref.js.map +1 -0
- package/dist/server/errors.d.ts +1 -1
- package/dist/server/errors.js +1 -1
- package/dist/server/errors.js.map +1 -1
- package/dist/server/extract.js +308 -0
- package/dist/server/extract.js.map +1 -0
- package/dist/{nuxt/runtime/server/utils/editor-route.js → server/h3.js} +8 -16
- package/dist/server/h3.js.map +1 -0
- package/dist/server/handlers/ai.d.ts +30 -9
- package/dist/server/handlers/ai.js +170 -36
- package/dist/server/handlers/ai.js.map +1 -1
- package/dist/server/handlers/context.d.ts +12 -5
- package/dist/server/handlers/context.js +10 -4
- package/dist/server/handlers/context.js.map +1 -1
- package/dist/server/handlers/editor.d.ts +19 -13
- package/dist/server/handlers/editor.js +49 -38
- package/dist/server/handlers/editor.js.map +1 -1
- package/dist/server/handlers/index.d.ts +4 -4
- package/dist/server/handlers/index.js +4 -4
- package/dist/server/host.d.ts +16 -25
- package/dist/server/host.js +58 -41
- package/dist/server/host.js.map +1 -1
- package/dist/server/index.d.ts +6 -4
- package/dist/server/index.js +3 -2
- package/dist/server/pdf.js +97 -0
- package/dist/server/pdf.js.map +1 -0
- package/dist/server/{adapter.d.ts → ports.d.ts} +81 -30
- package/dist/server/ports.js +29 -0
- package/dist/server/ports.js.map +1 -0
- package/dist/server/routes.js +144 -0
- package/dist/server/routes.js.map +1 -0
- package/dist/settings/index.d.ts +1 -1
- package/dist/settings/index.js.map +1 -1
- package/dist/styles/composites.css +25 -0
- package/dist/tree/DocumentTree.js +56 -29
- package/dist/tree/DocumentTree.js.map +1 -1
- package/dist/tree/react/DocumentTree.js +23 -0
- package/dist/tree/react/DocumentTree.js.map +1 -1
- package/dist/tree/tree-host.js +1 -1
- package/dist/vue/AdvancedEditor.js +30 -9
- package/dist/vue/AdvancedEditor.js.map +1 -1
- package/dist/vue/AdvancedEditor.vue.d.ts +32 -12
- package/dist/vue/SimpleEditor.js +62 -16
- package/dist/vue/SimpleEditor.js.map +1 -1
- package/dist/vue/SimpleEditor.vue.d.ts +37 -7
- package/dist/vue/advanced.d.ts +3 -2
- package/dist/vue/advanced.js +2 -2
- package/dist/vue/components/EditorCommandPalette.js +91 -0
- package/dist/vue/components/EditorCommandPalette.js.map +1 -0
- package/dist/vue/components/EditorCommandPalette.vue.d.ts +15 -0
- package/dist/vue/components/EditorSettingsModal.js +10 -6
- package/dist/vue/components/EditorSettingsModal.js.map +1 -1
- package/dist/vue/components/EditorSettingsModal.vue.d.ts +4 -4
- package/dist/vue/components/EditorSettingsPanel.js +10 -6
- package/dist/vue/components/EditorSettingsPanel.js.map +1 -1
- package/dist/vue/components/EditorSettingsPanel.vue.d.ts +6 -6
- package/dist/vue/components/EditorSurface.js +11 -6
- package/dist/vue/components/EditorSurface.js.map +1 -1
- package/dist/vue/components/EditorSurface.vue.d.ts +11 -11
- package/dist/vue/components/EditorToolbar.js +41 -49
- package/dist/vue/components/EditorToolbar.js.map +1 -1
- package/dist/vue/components/EditorToolbar.vue.d.ts +2 -4
- package/dist/vue/compose.d.ts +17 -0
- package/dist/vue/compose.js +51 -0
- package/dist/vue/compose.js.map +1 -0
- package/dist/vue/context-key.d.ts +6 -0
- package/dist/vue/context-key.js +6 -0
- package/dist/vue/context-key.js.map +1 -0
- package/dist/vue/context.d.ts +8 -6
- package/dist/vue/context.js +6 -5
- package/dist/vue/context.js.map +1 -1
- package/dist/vue/index.d.ts +10 -8
- package/dist/vue/index.js +10 -8
- package/dist/vue/kit/index.d.ts +2 -2
- package/dist/vue/kit/nuxt-ui.js +23 -0
- package/dist/vue/kit/nuxt-ui.js.map +1 -1
- package/dist/vue/kit/types.d.ts +40 -1
- package/package.json +30 -16
- package/dist/adapters/comments/client.d.ts +0 -64
- package/dist/adapters/comments/client.js.map +0 -1
- package/dist/adapters/routes.js.map +0 -1
- package/dist/core/toolbar.d.ts +0 -74
- package/dist/core/toolbar.js +0 -45
- package/dist/core/toolbar.js.map +0 -1
- package/dist/integrations/composite-ai/document-transcribe.d.ts +0 -14
- package/dist/integrations/composite-ai/document-transcribe.js +0 -89
- package/dist/integrations/composite-ai/document-transcribe.js.map +0 -1
- package/dist/nuxt/runtime/server/api/ai/chat.post.d.ts +0 -5
- package/dist/nuxt/runtime/server/api/ai/chat.post.js +0 -8
- package/dist/nuxt/runtime/server/api/ai/chat.post.js.map +0 -1
- package/dist/nuxt/runtime/server/api/ai/complete.post.d.ts +0 -5
- package/dist/nuxt/runtime/server/api/ai/complete.post.js +0 -8
- package/dist/nuxt/runtime/server/api/ai/complete.post.js.map +0 -1
- package/dist/nuxt/runtime/server/api/ai/generate.post.d.ts +0 -5
- package/dist/nuxt/runtime/server/api/ai/generate.post.js +0 -8
- package/dist/nuxt/runtime/server/api/ai/generate.post.js.map +0 -1
- package/dist/nuxt/runtime/server/api/ai/models.get.d.ts +0 -5
- package/dist/nuxt/runtime/server/api/ai/models.get.js +0 -8
- package/dist/nuxt/runtime/server/api/ai/models.get.js.map +0 -1
- package/dist/nuxt/runtime/server/api/ai/transcribe.post.d.ts +0 -5
- package/dist/nuxt/runtime/server/api/ai/transcribe.post.js +0 -8
- package/dist/nuxt/runtime/server/api/ai/transcribe.post.js.map +0 -1
- package/dist/nuxt/runtime/server/api/ai/transcript-cleanup.post.d.ts +0 -5
- package/dist/nuxt/runtime/server/api/ai/transcript-cleanup.post.js +0 -8
- package/dist/nuxt/runtime/server/api/ai/transcript-cleanup.post.js.map +0 -1
- package/dist/nuxt/runtime/server/api/editor/assets/[id]/[name].get.d.ts +0 -5
- package/dist/nuxt/runtime/server/api/editor/assets/[id]/[name].get.js +0 -8
- package/dist/nuxt/runtime/server/api/editor/assets/[id]/[name].get.js.map +0 -1
- package/dist/nuxt/runtime/server/api/editor/assets/[id].post.d.ts +0 -5
- package/dist/nuxt/runtime/server/api/editor/assets/[id].post.js +0 -8
- package/dist/nuxt/runtime/server/api/editor/assets/[id].post.js.map +0 -1
- package/dist/nuxt/runtime/server/api/editor/settings.get.d.ts +0 -5
- package/dist/nuxt/runtime/server/api/editor/settings.get.js +0 -8
- package/dist/nuxt/runtime/server/api/editor/settings.get.js.map +0 -1
- package/dist/nuxt/runtime/server/api/editor/settings.put.d.ts +0 -5
- package/dist/nuxt/runtime/server/api/editor/settings.put.js +0 -8
- package/dist/nuxt/runtime/server/api/editor/settings.put.js.map +0 -1
- package/dist/nuxt/runtime/server/api/editor/tags.get.d.ts +0 -5
- package/dist/nuxt/runtime/server/api/editor/tags.get.js +0 -8
- package/dist/nuxt/runtime/server/api/editor/tags.get.js.map +0 -1
- package/dist/nuxt/runtime/server/api/editor/themes/[id].delete.d.ts +0 -5
- package/dist/nuxt/runtime/server/api/editor/themes/[id].delete.js +0 -8
- package/dist/nuxt/runtime/server/api/editor/themes/[id].delete.js.map +0 -1
- package/dist/nuxt/runtime/server/api/editor/themes/[id].get.d.ts +0 -5
- package/dist/nuxt/runtime/server/api/editor/themes/[id].get.js +0 -8
- package/dist/nuxt/runtime/server/api/editor/themes/[id].get.js.map +0 -1
- package/dist/nuxt/runtime/server/api/editor/themes/index.get.d.ts +0 -5
- package/dist/nuxt/runtime/server/api/editor/themes/index.get.js +0 -8
- package/dist/nuxt/runtime/server/api/editor/themes/index.get.js.map +0 -1
- package/dist/nuxt/runtime/server/api/editor/themes/index.post.d.ts +0 -5
- package/dist/nuxt/runtime/server/api/editor/themes/index.post.js +0 -8
- package/dist/nuxt/runtime/server/api/editor/themes/index.post.js.map +0 -1
- package/dist/nuxt/runtime/server/api/editor/users.get.d.ts +0 -5
- package/dist/nuxt/runtime/server/api/editor/users.get.js +0 -8
- package/dist/nuxt/runtime/server/api/editor/users.get.js.map +0 -1
- package/dist/nuxt/runtime/server/plugins/collab.d.ts +0 -5
- package/dist/nuxt/runtime/server/plugins/collab.js +0 -10
- package/dist/nuxt/runtime/server/plugins/collab.js.map +0 -1
- package/dist/nuxt/runtime/server/routes/collab/[id].d.ts +0 -5
- package/dist/nuxt/runtime/server/routes/collab/[id].js +0 -35
- package/dist/nuxt/runtime/server/routes/collab/[id].js.map +0 -1
- package/dist/nuxt/runtime/server/utils/editor-route.d.ts +0 -11
- package/dist/nuxt/runtime/server/utils/editor-route.js.map +0 -1
- package/dist/presets/advanced.d.ts +0 -33
- package/dist/presets/advanced.js +0 -50
- package/dist/presets/advanced.js.map +0 -1
- package/dist/presets/simple.d.ts +0 -9
- package/dist/presets/simple.js +0 -12
- package/dist/presets/simple.js.map +0 -1
- package/dist/react/advanced-preset.d.ts +0 -11
- package/dist/react/advanced-preset.js +0 -31
- package/dist/react/advanced-preset.js.map +0 -1
- package/dist/vue/advanced-preset.d.ts +0 -13
- package/dist/vue/advanced-preset.js +0 -33
- package/dist/vue/advanced-preset.js.map +0 -1
- package/docs/extending.md +0 -538
- package/docs/integration.md +0 -630
- package/docs/llms.md +0 -383
- package/docs/usage.md +0 -1076
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { compositeKind } from "../kinds.js";
|
|
2
|
+
import { derivationOf } from "../derivation.js";
|
|
2
3
|
import { compositeKindsOf } from "../nodes.js";
|
|
4
|
+
import { useStoreRef } from "../../../vue/store-ref.js";
|
|
3
5
|
import { computed, createBlock, createCommentVNode, createElementVNode, createVNode, defineComponent, normalizeClass, normalizeStyle, openBlock, unref, withCtx } from "vue";
|
|
4
6
|
import { NodeViewContent, NodeViewWrapper, nodeViewProps } from "@tiptap/vue-3";
|
|
5
7
|
//#region src/features/composites/components/CompositeView.vue
|
|
@@ -9,13 +11,21 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
|
9
11
|
setup(__props) {
|
|
10
12
|
const props = __props;
|
|
11
13
|
const kind = computed(() => compositeKind(compositeKindsOf(props.editor), String(props.node.attrs.kind)));
|
|
14
|
+
const expanded = useStoreRef(() => props.editor.storage.composite.expanded);
|
|
15
|
+
const collapsed = computed(() => {
|
|
16
|
+
const id = props.node.attrs.id;
|
|
17
|
+
return typeof id === "string" && id !== "" && derivationOf(props.node) !== null && !expanded.value.has(id);
|
|
18
|
+
});
|
|
12
19
|
/** `text` as a CSS string literal (for `content:`). */
|
|
13
20
|
const cssString = (text) => `"${text.replace(/["\\]/g, "\\$&").replace(/\n/g, "\\a ")}"`;
|
|
14
21
|
const placeholderVars = computed(() => ({ "--composite-title-placeholder": cssString(kind.value.titlePlaceholder) }));
|
|
15
22
|
return (_ctx, _cache) => {
|
|
16
23
|
return openBlock(), createBlock(unref(NodeViewWrapper), {
|
|
17
24
|
as: "section",
|
|
18
|
-
class: normalizeClass(["composite", {
|
|
25
|
+
class: normalizeClass(["composite", {
|
|
26
|
+
"is-collapsed": collapsed.value,
|
|
27
|
+
"is-selected rounded-md ring-1 ring-[var(--sk-primary)]": _ctx.selected
|
|
28
|
+
}]),
|
|
19
29
|
"data-type": "composite",
|
|
20
30
|
"data-kind": _ctx.node.attrs.kind,
|
|
21
31
|
"data-id": _ctx.node.attrs.id || void 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CompositeView.js","names":["selected","node","_openBlock","_createBlock","_unref","_normalizeClass","_normalizeStyle","_withCtx","_createCommentVNode","_createElementVNode","_createVNode"],"sources":["../../../../src/features/composites/components/CompositeView.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { NodeViewContent, NodeViewWrapper, nodeViewProps } from '@tiptap/vue-3'\nimport { computed } from 'vue'\nimport { compositeKind } from '../kinds'\nimport { compositeKindsOf } from '../nodes'\n\nconst props = defineProps(nodeViewProps)\n\nconst kind = computed(() => compositeKind(compositeKindsOf(props.editor), String(props.node.attrs.kind)))\n\n/** `text` as a CSS string literal (for `content:`). */\nconst cssString = (text: string) => `\"${text.replace(/[\"\\\\]/g, '\\\\$&').replace(/\\n/g, '\\\\a ')}\"`\n// Placeholder of the empty title (composites.css `content: var(…)`); a nested composite sets its own.\nconst placeholderVars = computed(() => ({\n '--composite-title-placeholder': cssString(kind.value.titlePlaceholder),\n}))\n</script>\n\n<template>\n <NodeViewWrapper\n as=\"section\"\n :class=\"['composite', { 'is-selected rounded-md ring-1 ring-[var(--sk-primary)]': selected }]\"\n data-type=\"composite\"\n :data-kind=\"node.attrs.kind\"\n :data-id=\"node.attrs.id || undefined\"\n :style=\"placeholderVars\"\n >\n <!-- Anchor of the kind icon on the left border: it only takes the icon's place and size. The composite chrome overlay\n measures it and draws the icon as the button that opens the details popover and drags the composite. -->\n <span class=\"composite__toggle\" contenteditable=\"false\" aria-hidden=\"true\" />\n <NodeViewContent class=\"composite__content\" />\n </NodeViewWrapper>\n</template>\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"CompositeView.js","names":["selected","node","_openBlock","_createBlock","_unref","_normalizeClass","_normalizeStyle","_withCtx","_createCommentVNode","_createElementVNode","_createVNode"],"sources":["../../../../src/features/composites/components/CompositeView.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { NodeViewContent, NodeViewWrapper, nodeViewProps } from '@tiptap/vue-3'\nimport { computed } from 'vue'\nimport { compositeKind } from '../kinds'\nimport { compositeKindsOf } from '../nodes'\nimport { useStoreRef } from '../../../vue/store-ref'\nimport { derivationOf } from '../derivation'\n\nconst props = defineProps(nodeViewProps)\n\nconst kind = computed(() => compositeKind(compositeKindsOf(props.editor), String(props.node.attrs.kind)))\n\n// A derived Baustein (one with a `meta.derivation`) shows collapsed to a faded preview until it is opened; the content\n// stays laid out (CSS clips it), so editing positions are unaffected. The chrome's chevron and a caret inside open it.\nconst expanded = useStoreRef(() => props.editor.storage.composite.expanded)\nconst collapsed = computed(() => {\n const id: unknown = props.node.attrs.id\n return typeof id === 'string' && id !== '' && derivationOf(props.node) !== null && !expanded.value.has(id)\n})\n\n/** `text` as a CSS string literal (for `content:`). */\nconst cssString = (text: string) => `\"${text.replace(/[\"\\\\]/g, '\\\\$&').replace(/\\n/g, '\\\\a ')}\"`\n// Placeholder of the empty title (composites.css `content: var(…)`); a nested composite sets its own.\nconst placeholderVars = computed(() => ({\n '--composite-title-placeholder': cssString(kind.value.titlePlaceholder),\n}))\n</script>\n\n<template>\n <NodeViewWrapper\n as=\"section\"\n :class=\"['composite', { 'is-collapsed': collapsed, 'is-selected rounded-md ring-1 ring-[var(--sk-primary)]': selected }]\"\n data-type=\"composite\"\n :data-kind=\"node.attrs.kind\"\n :data-id=\"node.attrs.id || undefined\"\n :style=\"placeholderVars\"\n >\n <!-- Anchor of the kind icon on the left border: it only takes the icon's place and size. The composite chrome overlay\n measures it and draws the icon as the button that opens the details popover and drags the composite. -->\n <span class=\"composite__toggle\" contenteditable=\"false\" aria-hidden=\"true\" />\n <NodeViewContent class=\"composite__content\" />\n </NodeViewWrapper>\n</template>\n"],"mappings":";;;;;;;;;;;EAQA,MAAM,QAAQ;EAEd,MAAM,OAAO,eAAe,cAAc,iBAAiB,MAAM,MAAM,GAAG,OAAO,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC;EAIxG,MAAM,WAAW,kBAAkB,MAAM,OAAO,QAAQ,UAAU,QAAQ;EAC1E,MAAM,YAAY,eAAe;GAC/B,MAAM,KAAc,MAAM,KAAK,MAAM;GACrC,OAAO,OAAO,OAAO,YAAY,OAAO,MAAM,aAAa,MAAM,IAAI,MAAM,QAAQ,CAAC,SAAS,MAAM,IAAI,EAAE;EAC3G,CAAC;;EAGD,MAAM,aAAa,SAAiB,IAAI,KAAK,QAAQ,UAAU,MAAM,CAAC,CAAC,QAAQ,OAAO,MAAM,EAAE;EAE9F,MAAM,kBAAkB,gBAAgB,EACtC,iCAAiC,UAAU,KAAK,MAAM,gBAAgB,EACxE,EAAE;;GAIA,OAAAE,UAAA,GAAAC,YAYkBC,MAAA,eAAA,GAAA;IAXhB,IAAG;IACF,OAAKC,eAAA,CAAA,aAAA;KAAA,gBAAkC,UAAA;KAAS,0DAA4DL,KAAAA;IAAQ,CAAA,CAAA;IACrH,aAAU;IACT,aAAWC,KAAAA,KAAK,MAAM;IACtB,WAASA,KAAAA,KAAK,MAAM,MAAM,KAAA;IAC1B,OAAKK,eAAE,gBAAA,KAAe;;IAEvB,SAAAC,cAC6G;KAD7GC,mBAAA,oOAAA;KAEA,OAAA,OAAA,OAAA,KAAAC,mBAA6E,QAAA;MAAvE,OAAM;MAAoB,iBAAgB;MAAQ,eAAY;;KACpEC,YAA8CN,MAAA,eAAA,GAAA,EAA7B,OAAM,qBAAoB,CAAA"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { derivationOf } from "../derivation.js";
|
|
2
|
+
import { useUiKit } from "../../../vue/kit/use-ui-kit.js";
|
|
3
|
+
import { useEditorI18n } from "../../../vue/use-editor-i18n.js";
|
|
4
|
+
import { derivationDetailsOf, derivationMethodLabel } from "../derived-chrome.js";
|
|
5
|
+
import { formatDate } from "../meta-display.js";
|
|
6
|
+
import { Fragment, computed, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, normalizeClass, openBlock, toDisplayString, unref } from "vue";
|
|
7
|
+
//#region src/features/composites/components/DerivationBadge.vue
|
|
8
|
+
const _hoisted_1 = {
|
|
9
|
+
key: 0,
|
|
10
|
+
class: "flex min-w-0 items-center gap-1.5 text-xs text-[var(--sk-muted)]"
|
|
11
|
+
};
|
|
12
|
+
const _hoisted_2 = { class: "truncate" };
|
|
13
|
+
const _hoisted_3 = {
|
|
14
|
+
key: 1,
|
|
15
|
+
class: "flex flex-col gap-1.5 rounded-md p-2 text-xs ring ring-[var(--sk-border)]"
|
|
16
|
+
};
|
|
17
|
+
const _hoisted_4 = { class: "flex flex-wrap items-center gap-1" };
|
|
18
|
+
const _hoisted_5 = { class: "grid grid-cols-[auto_1fr] gap-x-2 gap-y-0.5" };
|
|
19
|
+
const _hoisted_6 = { class: "text-[var(--sk-muted)]" };
|
|
20
|
+
const _hoisted_7 = { class: "truncate text-[var(--sk-fg)]" };
|
|
21
|
+
const _hoisted_8 = { class: "text-[var(--sk-muted)]" };
|
|
22
|
+
const _hoisted_9 = ["title"];
|
|
23
|
+
const _hoisted_10 = { class: "text-[var(--sk-muted)]" };
|
|
24
|
+
const _hoisted_11 = { class: "text-[var(--sk-fg)]" };
|
|
25
|
+
const _hoisted_12 = ["href"];
|
|
26
|
+
/**
|
|
27
|
+
* Where a derived Baustein comes from. Compact (the `derivation` field type): the „abgeleitet“ badge with method and
|
|
28
|
+
* date. `detailed` (the details card): also the model, whether the source changed („Quelle geändert“), whether the body
|
|
29
|
+
* was edited since it was generated („bearbeitet“) and a link to the stored raw output. The detailed variant hashes
|
|
30
|
+
* the body, so it belongs only where one Baustein is shown.
|
|
31
|
+
*/
|
|
32
|
+
const chip = "inline-flex h-5 shrink-0 items-center gap-1 rounded-sm px-1.5 text-xs leading-none whitespace-nowrap";
|
|
33
|
+
const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
34
|
+
__name: "DerivationBadge",
|
|
35
|
+
props: {
|
|
36
|
+
editor: {},
|
|
37
|
+
node: {},
|
|
38
|
+
detailed: { type: Boolean }
|
|
39
|
+
},
|
|
40
|
+
setup(__props) {
|
|
41
|
+
const props = __props;
|
|
42
|
+
const { Icon: UIcon } = useUiKit();
|
|
43
|
+
const { t } = useEditorI18n();
|
|
44
|
+
const derivation = computed(() => derivationOf(props.node));
|
|
45
|
+
const details = computed(() => props.detailed ? derivationDetailsOf(props.editor, props.node) : null);
|
|
46
|
+
const method = computed(() => derivation.value ? derivationMethodLabel(t, derivation.value.method) : "");
|
|
47
|
+
const created = computed(() => derivation.value?.createdAt ? formatDate(derivation.value.createdAt) : "");
|
|
48
|
+
return (_ctx, _cache) => {
|
|
49
|
+
return derivation.value && !__props.detailed ? (openBlock(), createElementBlock("div", _hoisted_1, [createVNode(unref(UIcon), {
|
|
50
|
+
name: "i-lucide-git-branch",
|
|
51
|
+
class: "size-3.5 shrink-0"
|
|
52
|
+
}), createElementVNode("span", _hoisted_2, toDisplayString([
|
|
53
|
+
unref(t)("composites.derivation.badge"),
|
|
54
|
+
method.value,
|
|
55
|
+
created.value
|
|
56
|
+
].filter(Boolean).join(" · ")), 1)])) : derivation.value && details.value ? (openBlock(), createElementBlock("div", _hoisted_3, [
|
|
57
|
+
createElementVNode("div", _hoisted_4, [
|
|
58
|
+
createElementVNode("span", { class: normalizeClass([chip, "text-[var(--sk-muted)]"]) }, [createVNode(unref(UIcon), {
|
|
59
|
+
name: "i-lucide-git-branch",
|
|
60
|
+
class: "size-3.5"
|
|
61
|
+
}), createTextVNode(toDisplayString(unref(t)("composites.derivation.badge")), 1)], 2),
|
|
62
|
+
details.value.stale ? (openBlock(), createElementBlock("span", {
|
|
63
|
+
key: 0,
|
|
64
|
+
class: normalizeClass([chip, "text-[var(--sk-warning)]"])
|
|
65
|
+
}, [createVNode(unref(UIcon), {
|
|
66
|
+
name: "i-lucide-triangle-alert",
|
|
67
|
+
class: "size-3.5"
|
|
68
|
+
}), createTextVNode(toDisplayString(unref(t)("composites.derivation.stale")), 1)], 2)) : createCommentVNode("v-if", true),
|
|
69
|
+
details.value.edited ? (openBlock(), createElementBlock("span", {
|
|
70
|
+
key: 1,
|
|
71
|
+
class: normalizeClass([chip, "text-[var(--sk-muted)]"])
|
|
72
|
+
}, [createVNode(unref(UIcon), {
|
|
73
|
+
name: "i-lucide-pencil",
|
|
74
|
+
class: "size-3.5"
|
|
75
|
+
}), createTextVNode(toDisplayString(unref(t)("composites.derivation.edited")), 1)], 2)) : createCommentVNode("v-if", true)
|
|
76
|
+
]),
|
|
77
|
+
createElementVNode("dl", _hoisted_5, [
|
|
78
|
+
createElementVNode("dt", _hoisted_6, toDisplayString(unref(t)("composites.derivation.method")), 1),
|
|
79
|
+
createElementVNode("dd", _hoisted_7, toDisplayString(method.value), 1),
|
|
80
|
+
derivation.value.model ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [createElementVNode("dt", _hoisted_8, toDisplayString(unref(t)("composites.derivation.model")), 1), createElementVNode("dd", {
|
|
81
|
+
class: "truncate text-[var(--sk-fg)]",
|
|
82
|
+
title: derivation.value.model
|
|
83
|
+
}, toDisplayString(derivation.value.model), 9, _hoisted_9)], 64)) : createCommentVNode("v-if", true),
|
|
84
|
+
created.value ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [createElementVNode("dt", _hoisted_10, toDisplayString(unref(t)("composites.derivation.createdAt")), 1), createElementVNode("dd", _hoisted_11, toDisplayString(created.value), 1)], 64)) : createCommentVNode("v-if", true)
|
|
85
|
+
]),
|
|
86
|
+
details.value.outputUrl ? (openBlock(), createElementBlock("a", {
|
|
87
|
+
key: 0,
|
|
88
|
+
href: details.value.outputUrl,
|
|
89
|
+
target: "_blank",
|
|
90
|
+
rel: "noopener",
|
|
91
|
+
class: "inline-flex w-fit items-center gap-1 text-[var(--sk-primary)] hover:underline"
|
|
92
|
+
}, [createVNode(unref(UIcon), {
|
|
93
|
+
name: "i-lucide-external-link",
|
|
94
|
+
class: "size-3.5"
|
|
95
|
+
}), createTextVNode(toDisplayString(unref(t)("composites.derivation.openOutput")), 1)], 8, _hoisted_12)) : createCommentVNode("v-if", true)
|
|
96
|
+
])) : createCommentVNode("v-if", true);
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
//#endregion
|
|
101
|
+
export { _sfc_main as default };
|
|
102
|
+
|
|
103
|
+
//# sourceMappingURL=DerivationBadge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DerivationBadge.js","names":["_openBlock","_createElementBlock","_createVNode","_unref","_createElementVNode","_toDisplayString","_normalizeClass","_createTextVNode","_createCommentVNode","_Fragment"],"sources":["../../../../src/features/composites/components/DerivationBadge.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { Node as ProseMirrorNode } from '@tiptap/pm/model'\nimport type { Editor } from '@tiptap/core'\nimport { computed } from 'vue'\nimport { useUiKit } from '../../../vue/kit/use-ui-kit'\nimport { useEditorI18n } from '../../../vue/use-editor-i18n'\nimport { derivationOf } from '../derivation'\nimport { derivationDetailsOf, derivationMethodLabel } from '../derived-chrome'\nimport { formatDate } from '../meta-display'\n\n/**\n * Where a derived Baustein comes from. Compact (the `derivation` field type): the „abgeleitet“ badge with method and\n * date. `detailed` (the details card): also the model, whether the source changed („Quelle geändert“), whether the body\n * was edited since it was generated („bearbeitet“) and a link to the stored raw output. The detailed variant hashes\n * the body, so it belongs only where one Baustein is shown.\n */\nconst props = defineProps<{ editor: Editor, node: ProseMirrorNode, detailed?: boolean }>()\n\nconst { Icon: UIcon } = useUiKit()\nconst { t } = useEditorI18n()\n\nconst derivation = computed(() => derivationOf(props.node))\nconst details = computed(() => props.detailed ? derivationDetailsOf(props.editor, props.node) : null)\nconst method = computed(() => derivation.value ? derivationMethodLabel(t, derivation.value.method) : '')\nconst created = computed(() => derivation.value?.createdAt ? formatDate(derivation.value.createdAt) : '')\n\nconst chip = 'inline-flex h-5 shrink-0 items-center gap-1 rounded-sm px-1.5 text-xs leading-none whitespace-nowrap'\n</script>\n\n<template>\n <div v-if=\"derivation && !detailed\" class=\"flex min-w-0 items-center gap-1.5 text-xs text-[var(--sk-muted)]\">\n <UIcon name=\"i-lucide-git-branch\" class=\"size-3.5 shrink-0\" />\n <span class=\"truncate\">{{ [t('composites.derivation.badge'), method, created].filter(Boolean).join(' · ') }}</span>\n </div>\n\n <div v-else-if=\"derivation && details\" class=\"flex flex-col gap-1.5 rounded-md p-2 text-xs ring ring-[var(--sk-border)]\">\n <div class=\"flex flex-wrap items-center gap-1\">\n <span :class=\"[chip, 'text-[var(--sk-muted)]']\">\n <UIcon name=\"i-lucide-git-branch\" class=\"size-3.5\" />{{ t('composites.derivation.badge') }}\n </span>\n <span v-if=\"details.stale\" :class=\"[chip, 'text-[var(--sk-warning)]']\">\n <UIcon name=\"i-lucide-triangle-alert\" class=\"size-3.5\" />{{ t('composites.derivation.stale') }}\n </span>\n <span v-if=\"details.edited\" :class=\"[chip, 'text-[var(--sk-muted)]']\">\n <UIcon name=\"i-lucide-pencil\" class=\"size-3.5\" />{{ t('composites.derivation.edited') }}\n </span>\n </div>\n <dl class=\"grid grid-cols-[auto_1fr] gap-x-2 gap-y-0.5\">\n <dt class=\"text-[var(--sk-muted)]\">{{ t('composites.derivation.method') }}</dt>\n <dd class=\"truncate text-[var(--sk-fg)]\">{{ method }}</dd>\n <template v-if=\"derivation.model\">\n <dt class=\"text-[var(--sk-muted)]\">{{ t('composites.derivation.model') }}</dt>\n <dd class=\"truncate text-[var(--sk-fg)]\" :title=\"derivation.model\">{{ derivation.model }}</dd>\n </template>\n <template v-if=\"created\">\n <dt class=\"text-[var(--sk-muted)]\">{{ t('composites.derivation.createdAt') }}</dt>\n <dd class=\"text-[var(--sk-fg)]\">{{ created }}</dd>\n </template>\n </dl>\n <a\n v-if=\"details.outputUrl\"\n :href=\"details.outputUrl\"\n target=\"_blank\"\n rel=\"noopener\"\n class=\"inline-flex w-fit items-center gap-1 text-[var(--sk-primary)] hover:underline\"\n >\n <UIcon name=\"i-lucide-external-link\" class=\"size-3.5\" />{{ t('composites.derivation.openOutput') }}\n </a>\n </div>\n</template>\n"],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { useUiKit } from "../../../vue/kit/use-ui-kit.js";
|
|
2
|
+
import { useEditorI18n } from "../../../vue/use-editor-i18n.js";
|
|
3
|
+
import { setCompositeMetaField } from "../rows.js";
|
|
4
|
+
import { metaText } from "../meta-display.js";
|
|
5
|
+
import { useCompositeRows } from "../use-composite-rows.js";
|
|
6
|
+
import { computed, createBlock, defineComponent, openBlock, unref } from "vue";
|
|
7
|
+
//#region src/features/composites/components/ReferenceFieldSelect.vue
|
|
8
|
+
/** The select of a `reference` field: the other Bausteine of the document (with a block ID, of the field's target kinds) by title. */
|
|
9
|
+
const NONE = "__none__";
|
|
10
|
+
const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
11
|
+
__name: "ReferenceFieldSelect",
|
|
12
|
+
props: {
|
|
13
|
+
editor: {},
|
|
14
|
+
row: {},
|
|
15
|
+
field: {},
|
|
16
|
+
disabled: { type: Boolean },
|
|
17
|
+
size: {}
|
|
18
|
+
},
|
|
19
|
+
setup(__props) {
|
|
20
|
+
const props = __props;
|
|
21
|
+
/** Nuxt UI's select has no empty-string value: the "no reference" item travels as this sentinel. */
|
|
22
|
+
const { Select: USelect } = useUiKit();
|
|
23
|
+
const { t } = useEditorI18n();
|
|
24
|
+
const { rows } = useCompositeRows(() => props.editor);
|
|
25
|
+
const stored = computed(() => metaText(props.row, props.field));
|
|
26
|
+
const items = computed(() => [{
|
|
27
|
+
label: t("composites.field.none"),
|
|
28
|
+
value: NONE
|
|
29
|
+
}, ...rows.value.filter((candidate) => candidate.id !== null && candidate.id !== props.row.id && (!props.field.targets || props.field.targets.includes(candidate.kind))).map((candidate) => ({
|
|
30
|
+
label: `${candidate.title.trim() || t("composites.inspector.untitled")} · ${candidate.kindLabel}`,
|
|
31
|
+
value: candidate.id
|
|
32
|
+
}))]);
|
|
33
|
+
function onChoice(value) {
|
|
34
|
+
setCompositeMetaField(props.editor, props.row, props.field.key, typeof value === "string" && value !== NONE ? value : "");
|
|
35
|
+
}
|
|
36
|
+
return (_ctx, _cache) => {
|
|
37
|
+
return openBlock(), createBlock(unref(USelect), {
|
|
38
|
+
"model-value": stored.value || void 0,
|
|
39
|
+
items: items.value,
|
|
40
|
+
placeholder: unref(t)("composites.field.choose", { field: __props.field.label }),
|
|
41
|
+
"aria-label": __props.field.label,
|
|
42
|
+
disabled: __props.disabled,
|
|
43
|
+
size: __props.size,
|
|
44
|
+
class: "w-full",
|
|
45
|
+
"onUpdate:modelValue": onChoice
|
|
46
|
+
}, null, 8, [
|
|
47
|
+
"model-value",
|
|
48
|
+
"items",
|
|
49
|
+
"placeholder",
|
|
50
|
+
"aria-label",
|
|
51
|
+
"disabled",
|
|
52
|
+
"size"
|
|
53
|
+
]);
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
//#endregion
|
|
58
|
+
export { _sfc_main as default };
|
|
59
|
+
|
|
60
|
+
//# sourceMappingURL=ReferenceFieldSelect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReferenceFieldSelect.js","names":["_openBlock","_createBlock","_unref"],"sources":["../../../../src/features/composites/components/ReferenceFieldSelect.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { Editor } from '@tiptap/core'\nimport { computed } from 'vue'\nimport { useUiKit } from '../../../vue/kit/use-ui-kit'\nimport { useEditorI18n } from '../../../vue/use-editor-i18n'\nimport type { CompositeMetaField } from '../kinds'\nimport { metaText } from '../meta-display'\nimport { type CompositeRow, setCompositeMetaField } from '../rows'\nimport { useCompositeRows } from '../use-composite-rows'\n\n/** The select of a `reference` field: the other Bausteine of the document (with a block ID, of the field's target kinds) by title. */\nconst props = defineProps<{\n editor: Editor\n row: CompositeRow\n field: CompositeMetaField\n disabled?: boolean\n size?: 'xs' | 'sm' | 'md'\n}>()\n\n/** Nuxt UI's select has no empty-string value: the \"no reference\" item travels as this sentinel. */\nconst NONE = '__none__'\n\nconst { Select: USelect } = useUiKit()\nconst { t } = useEditorI18n()\nconst { rows } = useCompositeRows(() => props.editor)\n\nconst stored = computed(() => metaText(props.row, props.field))\nconst items = computed(() => [\n { label: t('composites.field.none'), value: NONE },\n ...rows.value\n .filter(candidate => candidate.id !== null && candidate.id !== props.row.id && (!props.field.targets || props.field.targets.includes(candidate.kind)))\n .map(candidate => ({ label: `${candidate.title.trim() || t('composites.inspector.untitled')} · ${candidate.kindLabel}`, value: candidate.id as string })),\n])\n\nfunction onChoice(value: unknown) {\n setCompositeMetaField(props.editor, props.row, props.field.key, typeof value === 'string' && value !== NONE ? value : '')\n}\n</script>\n\n<template>\n <USelect\n :model-value=\"stored || undefined\"\n :items=\"items\"\n :placeholder=\"t('composites.field.choose', { field: field.label })\"\n :aria-label=\"field.label\"\n :disabled=\"disabled\"\n :size=\"size\"\n class=\"w-full\"\n @update:model-value=\"onChoice\"\n />\n</template>\n"],"mappings":";;;;;;;;AAoBA,MAAM,OAAO;;;;;;;;;;;EATb,MAAM,QAAQ;;EAWd,MAAM,EAAE,QAAQ,YAAY,SAAS;EACrC,MAAM,EAAE,MAAM,cAAc;EAC5B,MAAM,EAAE,SAAS,uBAAuB,MAAM,MAAM;EAEpD,MAAM,SAAS,eAAe,SAAS,MAAM,KAAK,MAAM,KAAK,CAAC;EAC9D,MAAM,QAAQ,eAAe,CAC3B;GAAE,OAAO,EAAE,uBAAuB;GAAG,OAAO;EAAK,GACjD,GAAG,KAAK,MACL,QAAO,cAAa,UAAU,OAAO,QAAQ,UAAU,OAAO,MAAM,IAAI,OAAO,CAAC,MAAM,MAAM,WAAW,MAAM,MAAM,QAAQ,SAAS,UAAU,IAAI,EAAE,CAAA,CACpJ,KAAI,eAAc;GAAE,OAAO,GAAG,UAAU,MAAM,KAAK,KAAK,EAAE,+BAA+B,EAAE,KAAK,UAAU;GAAa,OAAO,UAAU;EAAa,EAAE,CAC5J,CAAC;EAED,SAAS,SAAS,OAAgB;GAChC,sBAAsB,MAAM,QAAQ,MAAM,KAAK,MAAM,MAAM,KAAK,OAAO,UAAU,YAAY,UAAU,OAAO,QAAQ,EAAE;EAC1H;;GAIE,OAAAA,UAAA,GAAAC,YASEC,MAAA,OAAA,GAAA;IARC,eAAa,OAAA,SAAU,KAAA;IACvB,OAAO,MAAA;IACP,aAAaA,MAAA,CAAA,CAAC,CAAA,2BAAA,EAAA,OAAqC,QAAA,MAAM,MAAK,CAAA;IAC9D,cAAY,QAAA,MAAM;IAClB,UAAU,QAAA;IACV,MAAM,QAAA;IACP,OAAM;IACL,uBAAoB"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { useUiKit } from "../../../vue/kit/use-ui-kit.js";
|
|
2
|
+
import { useEditorI18n } from "../../../vue/use-editor-i18n.js";
|
|
3
|
+
import { referenceAttrsOf, resolveReference } from "../reference-label.js";
|
|
4
|
+
import { revealSource } from "../reveal-source.js";
|
|
5
|
+
import { computed, createBlock, createTextVNode, createVNode, defineComponent, normalizeClass, onBeforeUnmount, onMounted, openBlock, ref, shallowRef, toDisplayString, unref, withCtx, withKeys, withModifiers } from "vue";
|
|
6
|
+
import { NodeViewWrapper, nodeViewProps } from "@tiptap/vue-3";
|
|
7
|
+
//#region src/features/composites/components/ReferenceView.vue
|
|
8
|
+
/**
|
|
9
|
+
* The `reference` chip: the live short citation (or title) of the Baustein it points at, followed by its locator.
|
|
10
|
+
* A click reveals the target and, with a locator, opens its source there (page of a PDF, time of a recording); a
|
|
11
|
+
* target that no longer exists shows a greyed „gone“ label. Double click or right click opens a popover to set the
|
|
12
|
+
* locator („Stelle“) in an editable editor.
|
|
13
|
+
*/
|
|
14
|
+
const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
15
|
+
__name: "ReferenceView",
|
|
16
|
+
props: nodeViewProps,
|
|
17
|
+
setup(__props) {
|
|
18
|
+
const props = __props;
|
|
19
|
+
const { Input: UInput, Popover: UPopover } = useUiKit();
|
|
20
|
+
const { t } = useEditorI18n();
|
|
21
|
+
const resolved = shallowRef(resolveReference(props.editor, referenceAttrsOf(props.node)));
|
|
22
|
+
let frame = 0;
|
|
23
|
+
function sync() {
|
|
24
|
+
cancelAnimationFrame(frame);
|
|
25
|
+
frame = requestAnimationFrame(() => {
|
|
26
|
+
if (props.editor.isDestroyed) return;
|
|
27
|
+
const next = resolveReference(props.editor, referenceAttrsOf(props.node));
|
|
28
|
+
const current = resolved.value;
|
|
29
|
+
if (next.label !== current.label || next.title !== current.title || next.gone !== current.gone) resolved.value = next;
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
onMounted(() => props.editor.on("update", sync));
|
|
33
|
+
onBeforeUnmount(() => {
|
|
34
|
+
cancelAnimationFrame(frame);
|
|
35
|
+
props.editor.off("update", sync);
|
|
36
|
+
});
|
|
37
|
+
const text = computed(() => {
|
|
38
|
+
const label = resolved.value.gone ? t("composites.reference.gone") : resolved.value.label;
|
|
39
|
+
const locator = props.node.attrs.locator;
|
|
40
|
+
return typeof locator === "string" && locator && !resolved.value.gone ? `${label}, ${locator}` : label;
|
|
41
|
+
});
|
|
42
|
+
function onClick() {
|
|
43
|
+
const target = String(props.node.attrs.target);
|
|
44
|
+
if (!props.editor.commands.revealBlock(target)) return;
|
|
45
|
+
const locator = props.node.attrs.locator;
|
|
46
|
+
if (typeof locator === "string" && locator) revealSource(props.editor, target, locator);
|
|
47
|
+
}
|
|
48
|
+
const root = ref(null);
|
|
49
|
+
const reference = { getBoundingClientRect: () => root.value?.$el.getBoundingClientRect() ?? new DOMRect() };
|
|
50
|
+
const open = ref(false);
|
|
51
|
+
const draft = ref("");
|
|
52
|
+
function openLocator() {
|
|
53
|
+
if (!props.editor.isEditable) return;
|
|
54
|
+
draft.value = typeof props.node.attrs.locator === "string" ? props.node.attrs.locator : "";
|
|
55
|
+
open.value = true;
|
|
56
|
+
}
|
|
57
|
+
function commit() {
|
|
58
|
+
open.value = false;
|
|
59
|
+
const pos = props.getPos();
|
|
60
|
+
if (typeof pos !== "number" || draft.value.trim() === (props.node.attrs.locator ?? "")) return;
|
|
61
|
+
props.editor.commands.setReferenceLocator(pos, draft.value);
|
|
62
|
+
}
|
|
63
|
+
return (_ctx, _cache) => {
|
|
64
|
+
return openBlock(), createBlock(unref(NodeViewWrapper), {
|
|
65
|
+
ref_key: "root",
|
|
66
|
+
ref: root,
|
|
67
|
+
as: "span",
|
|
68
|
+
class: normalizeClass(["reference", {
|
|
69
|
+
"is-gone": resolved.value.gone,
|
|
70
|
+
"is-selected": _ctx.selected
|
|
71
|
+
}]),
|
|
72
|
+
"data-type": "reference",
|
|
73
|
+
"data-target": _ctx.node.attrs.target,
|
|
74
|
+
title: resolved.value.gone ? void 0 : resolved.value.title,
|
|
75
|
+
role: "link",
|
|
76
|
+
onClick,
|
|
77
|
+
onDblclick: withModifiers(openLocator, ["prevent"]),
|
|
78
|
+
onContextmenu: withModifiers(openLocator, ["prevent"])
|
|
79
|
+
}, {
|
|
80
|
+
default: withCtx(() => [createTextVNode(toDisplayString(text.value) + " ", 1), createVNode(unref(UPopover), {
|
|
81
|
+
open: open.value,
|
|
82
|
+
reference,
|
|
83
|
+
content: {
|
|
84
|
+
side: "bottom",
|
|
85
|
+
align: "start",
|
|
86
|
+
sideOffset: 4,
|
|
87
|
+
onCloseAutoFocus: (event) => event.preventDefault()
|
|
88
|
+
},
|
|
89
|
+
ui: { content: "w-56 p-2" },
|
|
90
|
+
"onUpdate:open": _cache[1] || (_cache[1] = (value) => {
|
|
91
|
+
if (!value) commit();
|
|
92
|
+
})
|
|
93
|
+
}, {
|
|
94
|
+
content: withCtx(() => [createVNode(unref(UInput), {
|
|
95
|
+
modelValue: draft.value,
|
|
96
|
+
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => draft.value = $event),
|
|
97
|
+
size: "xs",
|
|
98
|
+
class: "w-full",
|
|
99
|
+
placeholder: unref(t)("composites.reference.locatorPlaceholder"),
|
|
100
|
+
"aria-label": unref(t)("composites.reference.locator"),
|
|
101
|
+
onKeydown: withKeys(withModifiers(commit, ["prevent"]), ["enter"])
|
|
102
|
+
}, null, 8, [
|
|
103
|
+
"modelValue",
|
|
104
|
+
"placeholder",
|
|
105
|
+
"aria-label",
|
|
106
|
+
"onKeydown"
|
|
107
|
+
])]),
|
|
108
|
+
_: 1
|
|
109
|
+
}, 8, ["open", "content"])]),
|
|
110
|
+
_: 1
|
|
111
|
+
}, 8, [
|
|
112
|
+
"class",
|
|
113
|
+
"data-target",
|
|
114
|
+
"title"
|
|
115
|
+
]);
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
//#endregion
|
|
120
|
+
export { _sfc_main as default };
|
|
121
|
+
|
|
122
|
+
//# sourceMappingURL=ReferenceView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReferenceView.js","names":["selected","node","_openBlock","_createBlock","_unref","_normalizeClass","_withModifiers","_withCtx","_createTextVNode","_toDisplayString","_createVNode","_withKeys"],"sources":["../../../../src/features/composites/components/ReferenceView.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { NodeViewWrapper, nodeViewProps } from '@tiptap/vue-3'\nimport { computed, onBeforeUnmount, onMounted, ref, shallowRef } from 'vue'\nimport { useUiKit } from '../../../vue/kit/use-ui-kit'\nimport { useEditorI18n } from '../../../vue/use-editor-i18n'\nimport { referenceAttrsOf, resolveReference } from '../reference-label'\nimport { revealSource } from '../reveal-source'\n\n/**\n * The `reference` chip: the live short citation (or title) of the Baustein it points at, followed by its locator.\n * A click reveals the target and, with a locator, opens its source there (page of a PDF, time of a recording); a\n * target that no longer exists shows a greyed „gone“ label. Double click or right click opens a popover to set the\n * locator („Stelle“) in an editable editor.\n */\nconst props = defineProps(nodeViewProps)\n\nconst { Input: UInput, Popover: UPopover } = useUiKit()\nconst { t } = useEditorI18n()\n\nconst resolved = shallowRef(resolveReference(props.editor, referenceAttrsOf(props.node)))\n\n// The target's title and bibliography edits change the label: re-resolve after document changes, once per frame.\nlet frame = 0\nfunction sync() {\n cancelAnimationFrame(frame)\n frame = requestAnimationFrame(() => {\n if (props.editor.isDestroyed) return\n const next = resolveReference(props.editor, referenceAttrsOf(props.node))\n const current = resolved.value\n if (next.label !== current.label || next.title !== current.title || next.gone !== current.gone) resolved.value = next\n })\n}\nonMounted(() => props.editor.on('update', sync))\nonBeforeUnmount(() => {\n cancelAnimationFrame(frame)\n props.editor.off('update', sync)\n})\n\nconst text = computed(() => {\n const label = resolved.value.gone ? t('composites.reference.gone') : resolved.value.label\n const locator = props.node.attrs.locator\n return typeof locator === 'string' && locator && !resolved.value.gone ? `${label}, ${locator}` : label\n})\n\nfunction onClick() {\n const target = String(props.node.attrs.target)\n if (!props.editor.commands.revealBlock(target)) return\n const locator = props.node.attrs.locator\n if (typeof locator === 'string' && locator) revealSource(props.editor, target, locator)\n}\n\nconst root = ref<{ $el: HTMLElement } | null>(null)\nconst reference = { getBoundingClientRect: () => root.value?.$el.getBoundingClientRect() ?? new DOMRect() }\n\nconst open = ref(false)\nconst draft = ref('')\n\nfunction openLocator() {\n if (!props.editor.isEditable) return\n draft.value = typeof props.node.attrs.locator === 'string' ? props.node.attrs.locator : ''\n open.value = true\n}\n\nfunction commit() {\n open.value = false\n const pos = props.getPos()\n if (typeof pos !== 'number' || draft.value.trim() === (props.node.attrs.locator ?? '')) return\n props.editor.commands.setReferenceLocator(pos, draft.value)\n}\n</script>\n\n<template>\n <NodeViewWrapper\n ref=\"root\"\n as=\"span\"\n :class=\"['reference', { 'is-gone': resolved.gone, 'is-selected': selected }]\"\n data-type=\"reference\"\n :data-target=\"node.attrs.target\"\n :title=\"resolved.gone ? undefined : resolved.title\"\n role=\"link\"\n @click=\"onClick\"\n @dblclick.prevent=\"openLocator\"\n @contextmenu.prevent=\"openLocator\"\n >\n {{ text }}\n <UPopover\n :open=\"open\"\n :reference=\"reference\"\n :content=\"{ side: 'bottom', align: 'start', sideOffset: 4, onCloseAutoFocus: (event: Event) => event.preventDefault() }\"\n :ui=\"{ content: 'w-56 p-2' }\"\n @update:open=\"(value: boolean) => { if (!value) commit() }\"\n >\n <template #content>\n <UInput\n v-model=\"draft\"\n size=\"xs\"\n class=\"w-full\"\n :placeholder=\"t('composites.reference.locatorPlaceholder')\"\n :aria-label=\"t('composites.reference.locator')\"\n @keydown.enter.prevent=\"commit\"\n />\n </template>\n </UPopover>\n </NodeViewWrapper>\n</template>\n"],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
//#region src/features/composites/components/ReferenceView.vue.d.ts
|
|
2
|
+
declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
3
|
+
editor: {
|
|
4
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["editor"]>;
|
|
5
|
+
required: true;
|
|
6
|
+
};
|
|
7
|
+
node: {
|
|
8
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["node"]>;
|
|
9
|
+
required: true;
|
|
10
|
+
};
|
|
11
|
+
decorations: {
|
|
12
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["decorations"]>;
|
|
13
|
+
required: true;
|
|
14
|
+
};
|
|
15
|
+
selected: {
|
|
16
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["selected"]>;
|
|
17
|
+
required: true;
|
|
18
|
+
};
|
|
19
|
+
extension: {
|
|
20
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["extension"]>;
|
|
21
|
+
required: true;
|
|
22
|
+
};
|
|
23
|
+
getPos: {
|
|
24
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["getPos"]>;
|
|
25
|
+
required: true;
|
|
26
|
+
};
|
|
27
|
+
updateAttributes: {
|
|
28
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["updateAttributes"]>;
|
|
29
|
+
required: true;
|
|
30
|
+
};
|
|
31
|
+
deleteNode: {
|
|
32
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["deleteNode"]>;
|
|
33
|
+
required: true;
|
|
34
|
+
};
|
|
35
|
+
view: {
|
|
36
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["view"]>;
|
|
37
|
+
required: true;
|
|
38
|
+
};
|
|
39
|
+
innerDecorations: {
|
|
40
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["innerDecorations"]>;
|
|
41
|
+
required: true;
|
|
42
|
+
};
|
|
43
|
+
HTMLAttributes: {
|
|
44
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["HTMLAttributes"]>;
|
|
45
|
+
required: true;
|
|
46
|
+
};
|
|
47
|
+
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
48
|
+
editor: {
|
|
49
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["editor"]>;
|
|
50
|
+
required: true;
|
|
51
|
+
};
|
|
52
|
+
node: {
|
|
53
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["node"]>;
|
|
54
|
+
required: true;
|
|
55
|
+
};
|
|
56
|
+
decorations: {
|
|
57
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["decorations"]>;
|
|
58
|
+
required: true;
|
|
59
|
+
};
|
|
60
|
+
selected: {
|
|
61
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["selected"]>;
|
|
62
|
+
required: true;
|
|
63
|
+
};
|
|
64
|
+
extension: {
|
|
65
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["extension"]>;
|
|
66
|
+
required: true;
|
|
67
|
+
};
|
|
68
|
+
getPos: {
|
|
69
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["getPos"]>;
|
|
70
|
+
required: true;
|
|
71
|
+
};
|
|
72
|
+
updateAttributes: {
|
|
73
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["updateAttributes"]>;
|
|
74
|
+
required: true;
|
|
75
|
+
};
|
|
76
|
+
deleteNode: {
|
|
77
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["deleteNode"]>;
|
|
78
|
+
required: true;
|
|
79
|
+
};
|
|
80
|
+
view: {
|
|
81
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["view"]>;
|
|
82
|
+
required: true;
|
|
83
|
+
};
|
|
84
|
+
innerDecorations: {
|
|
85
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["innerDecorations"]>;
|
|
86
|
+
required: true;
|
|
87
|
+
};
|
|
88
|
+
HTMLAttributes: {
|
|
89
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["HTMLAttributes"]>;
|
|
90
|
+
required: true;
|
|
91
|
+
};
|
|
92
|
+
}>> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
93
|
+
declare const _default: typeof __VLS_export;
|
|
94
|
+
//#endregion
|
|
95
|
+
export { _default as default };
|
|
96
|
+
//# sourceMappingURL=ReferenceView.vue.d.ts.map
|
|
@@ -3,8 +3,8 @@ import { useUiKit } from "../../../vue/kit/use-ui-kit.js";
|
|
|
3
3
|
import { useEditorSettings } from "../../../vue/settings.js";
|
|
4
4
|
import { useEditorI18n } from "../../../vue/use-editor-i18n.js";
|
|
5
5
|
import { STRUCTURE_MODE_KEYS } from "../structure-mode.js";
|
|
6
|
-
import { TREE_ROOT_KEYS } from "../tree-root.js";
|
|
7
6
|
import { DRAG_HANDLE_KEYS, HEADING_SCOPE_KEYS, KIND_ICON_KEYS, optionItems } from "../editing-settings-keys.js";
|
|
7
|
+
import { TREE_ROOT_KEYS } from "../tree-root.js";
|
|
8
8
|
import _sfc_main$1 from "../../../vue/components/SettingsSection.js";
|
|
9
9
|
import { computed, createElementBlock, createElementVNode, createVNode, defineComponent, openBlock, unref, withCtx } from "vue";
|
|
10
10
|
//#region src/features/composites/components/SettingsEditingTab.vue
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { CORE_TARGET_IDS, childrenOf, createConverter, finishConversion, isCoreTarget, isCurrentTarget, isListNode, isQuoteNode, isTextblockNode, parseCoreTarget, textblockSpecOf } from "../../core/convert.js";
|
|
2
2
|
import { compositeKind, defaultCompositeKinds, fallbackCompositeKinds } from "./kinds.js";
|
|
3
|
+
import { keptMeta } from "./meta-keys.js";
|
|
3
4
|
import { compositeChromeBlocks, flattenCompositesToHeadings, headingGroupRange } from "./heading-composites.js";
|
|
4
5
|
import "./nodes.js";
|
|
5
6
|
import { Fragment } from "@tiptap/pm/model";
|
|
@@ -40,8 +41,7 @@ function convertCompositeBlocks(schema, nodes, target, kinds) {
|
|
|
40
41
|
});
|
|
41
42
|
function toComposite(head, rest, kind) {
|
|
42
43
|
if (isComposite(head)) {
|
|
43
|
-
const
|
|
44
|
-
const meta = Object.fromEntries(Object.entries(head.attrs.meta).filter(([key]) => keys.has(key)));
|
|
44
|
+
const meta = keptMeta(compositeKind(kinds, kind), head.attrs.meta);
|
|
45
45
|
return head.type.create({
|
|
46
46
|
...head.attrs,
|
|
47
47
|
kind,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convert.js","names":[],"sources":["../../../src/features/composites/convert.ts"],"sourcesContent":["import { Fragment, type Node as PMNode, type Schema } from '@tiptap/pm/model'\nimport {\n CORE_TARGET_IDS,\n childrenOf,\n type ConvertTarget,\n createConverter,\n finishConversion,\n isCoreTarget,\n isCurrentTarget,\n isListNode,\n isQuoteNode,\n isTextblockNode,\n parseCoreTarget,\n textblockSpecOf,\n} from '../../core/convert'\nimport type { ConversionProvider } from '../../core/feature'\nimport { compositeChromeBlocks, flattenCompositesToHeadings, headingGroupRange } from './heading-composites'\nimport { type CompositeKind, compositeKind, defaultCompositeKinds, fallbackCompositeKinds } from './kinds'\nimport { COMPOSITE_CHROME_COUNT } from './nodes'\n\n// Vue-free and server-importable: the composite family's block conversions — wrapping blocks into a composite,\n// switching its kind and unwrapping it into plain blocks — as `ConversionProvider`s of the composite feature.\n\nconst COMPOSITE = 'composite'\nconst TITLE = 'compositeTitle'\nconst COMPOSITE_PREFIX = 'composite:'\n\nconst isComposite = (node: PMNode) => node.type.name === COMPOSITE\n\n/** The conversion targets of the core provider, offered for composites (they unwrap into them). */\nconst UNWRAP_TARGETS: readonly ConvertTarget[] = CORE_TARGET_IDS.flatMap(id => parseCoreTarget(id) ?? [])\n\n/**\n * Blocks `nodes` (siblings) converted to `target`. A composite takes the first block as title and the rest as body;\n * composites unwrap into the core targets (title first, description as italic paragraph, tags as a paragraph of tag\n * chips, meta as a `Label: Wert` line); into a heading, nested composites become sub-headings. Null when nothing\n * changes, the target is not a composite or core target or a node is not a textblock, list, quote or composite.\n * Never looks outside `nodes`: a heading's group is the caller's business.\n */\nexport function convertCompositeBlocks(schema: Schema, nodes: PMNode[], target: ConvertTarget, kinds: readonly CompositeKind[]): PMNode[] | null {\n const first = nodes[0]\n if (!first || !schema.nodes[target.type]) return null\n if (!nodes.every(node => isTextblockNode(node) || isListNode(node) || isQuoteNode(node) || isComposite(node))) return null\n if (nodes.length === 1 && isCurrentTarget(first, target)) return null\n const n = schema.nodes\n const paragraph = n.paragraph!\n\n /** A composite as plain blocks: title paragraph (an empty one only with `keepEmptyTitle`), description, tags, meta, body. */\n function unwrapComposite(composite: PMNode, keepEmptyTitle: boolean, headingLevel?: number): PMNode[] {\n const title = composite.child(0)\n const blocks: PMNode[] = []\n if (keepEmptyTitle || title.content.size) blocks.push(paragraph.create(null, title.content))\n blocks.push(...compositeChromeBlocks(schema, composite, kinds))\n let body = childrenOf(composite, COMPOSITE_CHROME_COUNT)\n if (headingLevel !== undefined) body = flattenCompositesToHeadings(schema, body, true, headingLevel + 1, kinds) ?? body\n return [...blocks, ...body]\n }\n\n const converter = createConverter(schema, { is: isComposite, unwrap: unwrapComposite })\n\n function toComposite(head: PMNode, rest: PMNode[], kind: string): PMNode {\n if (isComposite(head)) {\n // Another kind: the same node; `meta` keeps only the fields of the new kind. Further blocks join its body.\n const keys = new Set(compositeKind(kinds, kind).fields.map(field => field.key))\n const meta = Object.fromEntries(Object.entries(head.attrs.meta as Record<string, unknown>).filter(([key]) => keys.has(key)))\n return head.type.create({ ...head.attrs, kind, meta }, [...childrenOf(head), ...rest])\n }\n let title = Fragment.empty\n let body: PMNode[] = []\n if (isTextblockNode(head)) title = converter.inline(head, TITLE)\n else if (isQuoteNode(head)) body = childrenOf(head)\n else {\n // List: the first item's paragraph is the title, its other blocks and the remaining items (same list type) the body.\n const [item, ...more] = childrenOf(head)\n const [itemHead, ...itemRest] = item ? childrenOf(item) : []\n if (itemHead && isTextblockNode(itemHead)) title = converter.inline(itemHead, TITLE)\n else if (itemHead) itemRest.unshift(itemHead)\n body = [...itemRest, ...(more.length ? [head.type.create(null, more)] : [])]\n }\n body = [...body, ...rest]\n if (!body.length) body = [paragraph.create()]\n return n[COMPOSITE]!.create({ kind }, [n[TITLE]!.create(null, title), n.compositeDescription!.create(), n.compositeTags!.create(), ...body])\n }\n\n let output: PMNode[]\n if (target.type === 'composite') output = [toComposite(first, nodes.slice(1), target.kind)]\n else if (!isCoreTarget(target)) return null\n else if (target.type === 'bulletList' || target.type === 'orderedList') output = converter.toList(nodes, target.type)\n else if (target.type === 'blockquote') output = converter.toQuote(nodes)\n else output = converter.toTextblocks(nodes, textblockSpecOf(target))\n return finishConversion(nodes, output)\n}\n\n/**\n * The conversion of the block right after `$start` into `target`: the range it replaces (a heading becoming a composite\n * takes its group along, which turns into the composite's body) and the converted blocks.\n */\nfunction convertAt(kinds: readonly CompositeKind[]): ConversionProvider['convert'] {\n return (state, $start, target) => {\n const parent = $start.parent\n const from = $start.index()\n const to = target.type === 'composite' && parent.child(from).type.name === 'heading' ? headingGroupRange(parent, from).to : from + 1\n const nodes: PMNode[] = []\n for (let index = from; index < to; index++) nodes.push(parent.child(index))\n const blocks = convertCompositeBlocks(state.schema, nodes, target, kinds)\n return blocks ? { from: $start.pos, to: nodes.reduce((end, node) => end + node.nodeSize, $start.pos), blocks } : null\n }\n}\n\n/**\n * The composite feature's providers, in menu order. The first claims composites as source blocks (`handlesSource`): it\n * offers the core targets for them and executes every conversion of a composite, including kind changes. The second\n * owns the `composite:<kind>` targets: blocks and kind switches. `kinds` are the host's configured kinds; without them the\n * built-in kinds apply, and their labels (the menu entries) follow the language of the `t` the menu renders with. What\n * a conversion writes into the document (the `Label: Wert` line of a composite's meta) uses the built-in kinds in the\n * default language, since `convert` runs without a translator.\n */\nexport function compositeConversions(kinds?: readonly CompositeKind[]): readonly ConversionProvider[] {\n const structure = kinds ?? fallbackCompositeKinds()\n const convert = convertAt(structure)\n const unwrap: ConversionProvider = {\n handlesSource: isComposite,\n targets: (_editor, node) => isComposite(node) ? UNWRAP_TARGETS.filter(target => node.type.schema.nodes[target.type]) : [],\n parseTarget: () => null,\n label: () => null,\n convert,\n }\n const wrap: ConversionProvider = {\n targets: (_editor, node) => {\n if (!(isTextblockNode(node) || isListNode(node) || isQuoteNode(node) || isComposite(node)) || !node.type.schema.nodes[COMPOSITE]) return []\n return structure.map((kind): ConvertTarget => ({ type: 'composite', kind: kind.id })).filter(target => !isCurrentTarget(node, target))\n },\n parseTarget: (id) => {\n if (!id.startsWith(COMPOSITE_PREFIX)) return null\n const kind = id.slice(COMPOSITE_PREFIX.length)\n return structure.some(known => known.id === kind) ? { type: 'composite', kind } : null\n },\n label: (target, t) => {\n if (target.type !== 'composite') return null\n const kind = compositeKind(kinds ?? defaultCompositeKinds(t), target.kind)\n return { label: t('composites.convert.kind', { kind: kind.label }), icon: kind.icon }\n },\n convert,\n }\n return [unwrap, wrap]\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"convert.js","names":[],"sources":["../../../src/features/composites/convert.ts"],"sourcesContent":["import { Fragment, type Node as PMNode, type Schema } from '@tiptap/pm/model'\nimport {\n CORE_TARGET_IDS,\n childrenOf,\n type ConvertTarget,\n createConverter,\n finishConversion,\n isCoreTarget,\n isCurrentTarget,\n isListNode,\n isQuoteNode,\n isTextblockNode,\n parseCoreTarget,\n textblockSpecOf,\n} from '../../core/convert'\nimport type { ConversionProvider } from '../../core/feature'\nimport { compositeChromeBlocks, flattenCompositesToHeadings, headingGroupRange } from './heading-composites'\nimport { type CompositeKind, compositeKind, defaultCompositeKinds, fallbackCompositeKinds } from './kinds'\nimport { keptMeta } from './meta-keys'\nimport { COMPOSITE_CHROME_COUNT } from './nodes'\n\n// Vue-free and server-importable: the composite family's block conversions — wrapping blocks into a composite,\n// switching its kind and unwrapping it into plain blocks — as `ConversionProvider`s of the composite feature.\n\nconst COMPOSITE = 'composite'\nconst TITLE = 'compositeTitle'\nconst COMPOSITE_PREFIX = 'composite:'\n\nconst isComposite = (node: PMNode) => node.type.name === COMPOSITE\n\n/** The conversion targets of the core provider, offered for composites (they unwrap into them). */\nconst UNWRAP_TARGETS: readonly ConvertTarget[] = CORE_TARGET_IDS.flatMap(id => parseCoreTarget(id) ?? [])\n\n/**\n * Blocks `nodes` (siblings) converted to `target`. A composite takes the first block as title and the rest as body;\n * composites unwrap into the core targets (title first, description as italic paragraph, tags as a paragraph of tag\n * chips, meta as a `Label: Wert` line); into a heading, nested composites become sub-headings. Null when nothing\n * changes, the target is not a composite or core target or a node is not a textblock, list, quote or composite.\n * Never looks outside `nodes`: a heading's group is the caller's business.\n */\nexport function convertCompositeBlocks(schema: Schema, nodes: PMNode[], target: ConvertTarget, kinds: readonly CompositeKind[]): PMNode[] | null {\n const first = nodes[0]\n if (!first || !schema.nodes[target.type]) return null\n if (!nodes.every(node => isTextblockNode(node) || isListNode(node) || isQuoteNode(node) || isComposite(node))) return null\n if (nodes.length === 1 && isCurrentTarget(first, target)) return null\n const n = schema.nodes\n const paragraph = n.paragraph!\n\n /** A composite as plain blocks: title paragraph (an empty one only with `keepEmptyTitle`), description, tags, meta, body. */\n function unwrapComposite(composite: PMNode, keepEmptyTitle: boolean, headingLevel?: number): PMNode[] {\n const title = composite.child(0)\n const blocks: PMNode[] = []\n if (keepEmptyTitle || title.content.size) blocks.push(paragraph.create(null, title.content))\n blocks.push(...compositeChromeBlocks(schema, composite, kinds))\n let body = childrenOf(composite, COMPOSITE_CHROME_COUNT)\n if (headingLevel !== undefined) body = flattenCompositesToHeadings(schema, body, true, headingLevel + 1, kinds) ?? body\n return [...blocks, ...body]\n }\n\n const converter = createConverter(schema, { is: isComposite, unwrap: unwrapComposite })\n\n function toComposite(head: PMNode, rest: PMNode[], kind: string): PMNode {\n if (isComposite(head)) {\n // Another kind: the same node; `meta` keeps the fields of the new kind plus `derivation` and `bib`. Further blocks join its body.\n const meta = keptMeta(compositeKind(kinds, kind), head.attrs.meta as Record<string, unknown>)\n return head.type.create({ ...head.attrs, kind, meta }, [...childrenOf(head), ...rest])\n }\n let title = Fragment.empty\n let body: PMNode[] = []\n if (isTextblockNode(head)) title = converter.inline(head, TITLE)\n else if (isQuoteNode(head)) body = childrenOf(head)\n else {\n // List: the first item's paragraph is the title, its other blocks and the remaining items (same list type) the body.\n const [item, ...more] = childrenOf(head)\n const [itemHead, ...itemRest] = item ? childrenOf(item) : []\n if (itemHead && isTextblockNode(itemHead)) title = converter.inline(itemHead, TITLE)\n else if (itemHead) itemRest.unshift(itemHead)\n body = [...itemRest, ...(more.length ? [head.type.create(null, more)] : [])]\n }\n body = [...body, ...rest]\n if (!body.length) body = [paragraph.create()]\n return n[COMPOSITE]!.create({ kind }, [n[TITLE]!.create(null, title), n.compositeDescription!.create(), n.compositeTags!.create(), ...body])\n }\n\n let output: PMNode[]\n if (target.type === 'composite') output = [toComposite(first, nodes.slice(1), target.kind)]\n else if (!isCoreTarget(target)) return null\n else if (target.type === 'bulletList' || target.type === 'orderedList') output = converter.toList(nodes, target.type)\n else if (target.type === 'blockquote') output = converter.toQuote(nodes)\n else output = converter.toTextblocks(nodes, textblockSpecOf(target))\n return finishConversion(nodes, output)\n}\n\n/**\n * The conversion of the block right after `$start` into `target`: the range it replaces (a heading becoming a composite\n * takes its group along, which turns into the composite's body) and the converted blocks.\n */\nfunction convertAt(kinds: readonly CompositeKind[]): ConversionProvider['convert'] {\n return (state, $start, target) => {\n const parent = $start.parent\n const from = $start.index()\n const to = target.type === 'composite' && parent.child(from).type.name === 'heading' ? headingGroupRange(parent, from).to : from + 1\n const nodes: PMNode[] = []\n for (let index = from; index < to; index++) nodes.push(parent.child(index))\n const blocks = convertCompositeBlocks(state.schema, nodes, target, kinds)\n return blocks ? { from: $start.pos, to: nodes.reduce((end, node) => end + node.nodeSize, $start.pos), blocks } : null\n }\n}\n\n/**\n * The composite feature's providers, in menu order. The first claims composites as source blocks (`handlesSource`): it\n * offers the core targets for them and executes every conversion of a composite, including kind changes. The second\n * owns the `composite:<kind>` targets: blocks and kind switches. `kinds` are the host's configured kinds; without them the\n * built-in kinds apply, and their labels (the menu entries) follow the language of the `t` the menu renders with. What\n * a conversion writes into the document (the `Label: Wert` line of a composite's meta) uses the built-in kinds in the\n * default language, since `convert` runs without a translator.\n */\nexport function compositeConversions(kinds?: readonly CompositeKind[]): readonly ConversionProvider[] {\n const structure = kinds ?? fallbackCompositeKinds()\n const convert = convertAt(structure)\n const unwrap: ConversionProvider = {\n handlesSource: isComposite,\n targets: (_editor, node) => isComposite(node) ? UNWRAP_TARGETS.filter(target => node.type.schema.nodes[target.type]) : [],\n parseTarget: () => null,\n label: () => null,\n convert,\n }\n const wrap: ConversionProvider = {\n targets: (_editor, node) => {\n if (!(isTextblockNode(node) || isListNode(node) || isQuoteNode(node) || isComposite(node)) || !node.type.schema.nodes[COMPOSITE]) return []\n return structure.map((kind): ConvertTarget => ({ type: 'composite', kind: kind.id })).filter(target => !isCurrentTarget(node, target))\n },\n parseTarget: (id) => {\n if (!id.startsWith(COMPOSITE_PREFIX)) return null\n const kind = id.slice(COMPOSITE_PREFIX.length)\n return structure.some(known => known.id === kind) ? { type: 'composite', kind } : null\n },\n label: (target, t) => {\n if (target.type !== 'composite') return null\n const kind = compositeKind(kinds ?? defaultCompositeKinds(t), target.kind)\n return { label: t('composites.convert.kind', { kind: kind.label }), icon: kind.icon }\n },\n convert,\n }\n return [unwrap, wrap]\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { CompositeKind } from "./kinds.js";
|
|
2
|
+
import { DERIVATION_KEY } from "./meta-keys.js";
|
|
3
|
+
import { Editor } from "@tiptap/core";
|
|
4
|
+
import { Node as Node$1 } from "@tiptap/pm/model";
|
|
5
|
+
//#region src/features/composites/derivation.d.ts
|
|
6
|
+
/** How a derived Baustein was made; `ai:<kindId>` for a block derived from another block by the model. */
|
|
7
|
+
export type DerivationMethod = 'transcription' | 'pdf-text' | 'ocr' | 'description' | 'bibliography' | (string & {});
|
|
8
|
+
/** What a derived Baustein was made from: an uploaded asset (by asset name) or another block (by block id). */
|
|
9
|
+
export type DerivationSource = {
|
|
10
|
+
asset: string;
|
|
11
|
+
} | {
|
|
12
|
+
block: string;
|
|
13
|
+
};
|
|
14
|
+
/** `meta.derivation` of a derived Baustein. */
|
|
15
|
+
export interface Derivation {
|
|
16
|
+
from: DerivationSource;
|
|
17
|
+
method: DerivationMethod;
|
|
18
|
+
model?: string;
|
|
19
|
+
/** ISO timestamp. */
|
|
20
|
+
createdAt: string;
|
|
21
|
+
/** SHA-256 hex of the asset bytes / of the source block's Markdown; `''` when unknown. */
|
|
22
|
+
inputHash: string;
|
|
23
|
+
/** SHA-256 hex of the produced body's Markdown; `''` when unknown. */
|
|
24
|
+
outputHash: string;
|
|
25
|
+
/** Asset name of the stored raw output (text/markdown). */
|
|
26
|
+
output?: string;
|
|
27
|
+
}
|
|
28
|
+
/** The derivation of a composite (`meta.derivation` with a `from` object and a `method`); null when it has none. */
|
|
29
|
+
export declare function derivationOf(node: Node$1): Derivation | null;
|
|
30
|
+
/** The media block a source-holding kind keeps its original in: first body child of a type in `kind.source`. */
|
|
31
|
+
export declare function sourceOf(composite: Node$1, kinds: readonly CompositeKind[]): {
|
|
32
|
+
node: Node$1;
|
|
33
|
+
index: number;
|
|
34
|
+
asset: {
|
|
35
|
+
documentId: string;
|
|
36
|
+
name: string;
|
|
37
|
+
} | null;
|
|
38
|
+
hash: string | null;
|
|
39
|
+
} | null;
|
|
40
|
+
/** The body children of `composite` that are derived Bausteine, with their child index. */
|
|
41
|
+
export declare function renditionsOf(composite: Node$1): {
|
|
42
|
+
node: Node$1;
|
|
43
|
+
index: number;
|
|
44
|
+
derivation: Derivation;
|
|
45
|
+
}[];
|
|
46
|
+
/**
|
|
47
|
+
* Whether `derived` (a Baustein with a derivation, a child of `composite`) is out of date or was edited since it was made.
|
|
48
|
+
* `stale`: for an asset source, the block `sourceOf(composite, kinds)` finds has a `hash` that differs from `inputHash`; null
|
|
49
|
+
* when either is unknown. A block source is null here: callers with the document compare the hash of the source block's
|
|
50
|
+
* Markdown. `edited`: the body's
|
|
51
|
+
* hash (computed lazily, it serialises the whole body) differs from `outputHash`; null when `outputHash` is unknown.
|
|
52
|
+
*/
|
|
53
|
+
export declare function derivationState(composite: Node$1, derived: Node$1, bodyHash: () => string, kinds: readonly CompositeKind[]): {
|
|
54
|
+
stale: boolean | null;
|
|
55
|
+
edited: boolean | null;
|
|
56
|
+
};
|
|
57
|
+
/** Markdown of the body of `composite` (everything after title, description and tags). */
|
|
58
|
+
export declare function bodyMarkdown(editor: Editor, composite: Node$1): string;
|
|
59
|
+
//#endregion
|
|
60
|
+
export { DERIVATION_KEY };
|
|
61
|
+
//# sourceMappingURL=derivation.d.ts.map
|