@ecsplico/editor 3.1.1 → 3.3.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 +42 -0
- package/dist/adapters/direct-ai.d.ts +36 -0
- package/dist/adapters/direct-ai.js +169 -0
- package/dist/adapters/direct-ai.js.map +1 -0
- package/dist/adapters/memory.js.map +1 -1
- package/dist/code/CodeSurface.vue.d.ts +1 -1
- package/dist/core/block-drag.js +3 -0
- package/dist/core/block-drag.js.map +1 -1
- package/dist/core/block-transfer.d.ts +44 -0
- package/dist/core/block-transfer.js +68 -0
- package/dist/core/block-transfer.js.map +1 -0
- package/dist/core/commands.js +5 -0
- package/dist/core/commands.js.map +1 -1
- package/dist/core/core-feature.d.ts +4 -1
- package/dist/core/core-feature.js +8 -3
- package/dist/core/core-feature.js.map +1 -1
- package/dist/core/editor-ui.d.ts +3 -1
- package/dist/core/editor-ui.js.map +1 -1
- package/dist/core/extension-points.d.ts +17 -1
- package/dist/core/feature.d.ts +6 -1
- package/dist/core/feature.js.map +1 -1
- package/dist/core/index.d.ts +4 -2
- package/dist/core/index.js +3 -2
- package/dist/core/schema/index.d.ts +24 -3
- package/dist/core/schema/index.js +21 -4
- package/dist/core/schema/index.js.map +1 -1
- package/dist/core/surface-session.js +3 -1
- package/dist/core/surface-session.js.map +1 -1
- package/dist/core/toolbar-items.js +1 -1
- package/dist/core/toolbar-items.js.map +1 -1
- package/dist/document/DocumentSurface.vue.d.ts +1 -1
- package/dist/features/ai/agent-op-review.js +1 -1
- package/dist/features/ai/agent-ops.js +2 -2
- package/dist/features/ai/ai-apply.js +1 -1
- package/dist/features/ai/assistant.js +1 -1
- package/dist/features/ai/components/AiSelectionMenu.js +2 -2
- package/dist/features/ai/components/AiSidebar.js +2 -2
- package/dist/features/ai/components/SettingsAiTab.js +1 -1
- package/dist/features/ai/components/SettingsModelProfiles.js +1 -1
- package/dist/features/ai/document-chat-model.js +1 -1
- package/dist/features/ai/document-chat.js +2 -2
- package/dist/features/ai/ghost-autocomplete.js +1 -1
- package/dist/features/ai/index.d.ts +4 -3
- package/dist/features/ai/index.js +6 -5
- package/dist/features/ai/protocol/complete.d.ts +19 -0
- package/dist/features/ai/protocol/complete.js +27 -1
- package/dist/features/ai/protocol/complete.js.map +1 -1
- package/dist/features/ai/protocol/generate.d.ts +95 -0
- package/dist/features/ai/protocol/generate.js +58 -0
- package/dist/features/ai/protocol/generate.js.map +1 -0
- package/dist/features/ai/protocol/index.d.ts +4 -3
- package/dist/features/ai/protocol/index.js +6 -5
- package/dist/features/ai/protocol/tasks.d.ts +3 -1
- package/dist/features/ai/protocol/tasks.js +74 -2
- package/dist/features/ai/protocol/tasks.js.map +1 -1
- package/dist/features/ai/react/AiSelectionMenu.js +2 -2
- package/dist/features/ai/react/AiSidebar.js +2 -2
- package/dist/features/ai/react/SettingsAiTab.js +1 -1
- package/dist/features/ai/react/SettingsModelProfiles.js +1 -1
- package/dist/features/ai/selection-flow.js +1 -1
- package/dist/features/ai/sidebar-flow.js +1 -1
- package/dist/features/block-ui/block-actions.d.ts +19 -3
- package/dist/features/block-ui/block-actions.js +49 -3
- package/dist/features/block-ui/block-actions.js.map +1 -1
- package/dist/features/block-ui/components/BlockActionsOverlay.js +24 -13
- package/dist/features/block-ui/components/BlockActionsOverlay.js.map +1 -1
- package/dist/features/block-ui/components/BlockActionsOverlay.vue.d.ts +12 -5
- package/dist/features/block-ui/components/BlockUi.js +52 -20
- package/dist/features/block-ui/components/BlockUi.js.map +1 -1
- package/dist/features/block-ui/components/BlockUi.vue.d.ts +6 -4
- package/dist/features/block-ui/feature.d.ts +8 -2
- package/dist/features/block-ui/feature.js +7 -2
- package/dist/features/block-ui/feature.js.map +1 -1
- package/dist/features/block-ui/index.d.ts +3 -2
- package/dist/features/block-ui/index.js +2 -2
- package/dist/features/block-ui/react/BlockActionsOverlay.d.ts +14 -7
- package/dist/features/block-ui/react/BlockActionsOverlay.js +25 -13
- package/dist/features/block-ui/react/BlockActionsOverlay.js.map +1 -1
- package/dist/features/block-ui/react/BlockUi.d.ts +6 -4
- package/dist/features/block-ui/react/BlockUi.js +43 -15
- package/dist/features/block-ui/react/BlockUi.js.map +1 -1
- package/dist/features/block-ui/react.d.ts +4 -2
- package/dist/features/block-ui/react.js +3 -3
- package/dist/features/block-ui/react.js.map +1 -1
- package/dist/features/block-ui/vue.d.ts +4 -2
- package/dist/features/block-ui/vue.js +3 -3
- package/dist/features/block-ui/vue.js.map +1 -1
- package/dist/features/composites/baskets.d.ts +27 -0
- package/dist/features/composites/baskets.js +46 -0
- package/dist/features/composites/baskets.js.map +1 -0
- package/dist/features/composites/components/CompositeBasketMenu.js +97 -0
- package/dist/features/composites/components/CompositeBasketMenu.js.map +1 -0
- package/dist/features/composites/components/CompositeChrome.js +79 -23
- package/dist/features/composites/components/CompositeChrome.js.map +1 -1
- package/dist/features/composites/components/CompositeView.js +21 -2
- package/dist/features/composites/components/CompositeView.js.map +1 -1
- package/dist/features/composites/components/DerivationBadge.js +12 -3
- package/dist/features/composites/components/DerivationBadge.js.map +1 -1
- package/dist/features/composites/components/FocusChip.js +53 -0
- package/dist/features/composites/components/FocusChip.js.map +1 -0
- package/dist/features/composites/components/FocusChip.vue.d.ts +14 -0
- package/dist/features/composites/components/SettingsEditingTab.js +40 -4
- package/dist/features/composites/components/SettingsEditingTab.js.map +1 -1
- package/dist/features/composites/derivation.d.ts +2 -1
- package/dist/features/composites/derivation.js +5 -1
- package/dist/features/composites/derivation.js.map +1 -1
- package/dist/features/composites/derived-chrome.js +13 -3
- package/dist/features/composites/derived-chrome.js.map +1 -1
- package/dist/features/composites/feature.d.ts +7 -1
- package/dist/features/composites/feature.js +107 -23
- package/dist/features/composites/feature.js.map +1 -1
- package/dist/features/composites/focus.d.ts +38 -0
- package/dist/features/composites/focus.js +86 -0
- package/dist/features/composites/focus.js.map +1 -0
- package/dist/features/composites/index.d.ts +7 -3
- package/dist/features/composites/index.js +7 -3
- package/dist/features/composites/kinds.d.ts +6 -1
- package/dist/features/composites/kinds.js.map +1 -1
- package/dist/features/composites/merge.d.ts +24 -0
- package/dist/features/composites/merge.js +47 -0
- package/dist/features/composites/merge.js.map +1 -0
- package/dist/features/composites/meta-keys.d.ts +4 -0
- package/dist/features/composites/meta-keys.js +8 -4
- package/dist/features/composites/meta-keys.js.map +1 -1
- package/dist/features/composites/nodes.d.ts +15 -2
- package/dist/features/composites/nodes.js +61 -5
- package/dist/features/composites/nodes.js.map +1 -1
- package/dist/features/composites/outline.d.ts +4 -0
- package/dist/features/composites/outline.js +3 -0
- package/dist/features/composites/outline.js.map +1 -1
- package/dist/features/composites/react/CompositeBasketMenu.js +88 -0
- package/dist/features/composites/react/CompositeBasketMenu.js.map +1 -0
- package/dist/features/composites/react/CompositeChrome.js +52 -4
- package/dist/features/composites/react/CompositeChrome.js.map +1 -1
- package/dist/features/composites/react/CompositeView.js +15 -2
- package/dist/features/composites/react/CompositeView.js.map +1 -1
- package/dist/features/composites/react/DerivationBadge.js +10 -1
- package/dist/features/composites/react/DerivationBadge.js.map +1 -1
- package/dist/features/composites/react/FocusChip.d.ts +11 -0
- package/dist/features/composites/react/FocusChip.js +50 -0
- package/dist/features/composites/react/FocusChip.js.map +1 -0
- package/dist/features/composites/react/SettingsEditingTab.js +36 -1
- package/dist/features/composites/react/SettingsEditingTab.js.map +1 -1
- package/dist/features/composites/react.d.ts +2 -1
- package/dist/features/composites/react.js +3 -1
- package/dist/features/composites/react.js.map +1 -1
- package/dist/features/composites/schema.d.ts +5 -3
- package/dist/features/composites/schema.js +8 -4
- package/dist/features/composites/schema.js.map +1 -1
- package/dist/features/composites/split.d.ts +62 -0
- package/dist/features/composites/split.js +172 -0
- package/dist/features/composites/split.js.map +1 -0
- package/dist/features/composites/vue.d.ts +4 -3
- package/dist/features/composites/vue.js +7 -5
- package/dist/features/composites/vue.js.map +1 -1
- package/dist/features/transfer/components/TransferMenu.js +93 -0
- package/dist/features/transfer/components/TransferMenu.js.map +1 -0
- package/dist/features/transfer/components/TransferMenu.vue.d.ts +15 -0
- package/dist/features/transfer/feature.d.ts +76 -0
- package/dist/features/transfer/feature.js +169 -0
- package/dist/features/transfer/feature.js.map +1 -0
- package/dist/features/transfer/index.d.ts +3 -0
- package/dist/features/transfer/index.js +3 -0
- package/dist/features/transfer/react/TransferMenu.d.ts +12 -0
- package/dist/features/transfer/react/TransferMenu.js +71 -0
- package/dist/features/transfer/react/TransferMenu.js.map +1 -0
- package/dist/features/transfer/react.d.ts +10 -0
- package/dist/features/transfer/react.js +11 -0
- package/dist/features/transfer/react.js.map +1 -0
- package/dist/features/transfer/transforms.d.ts +83 -0
- package/dist/features/transfer/transforms.js +137 -0
- package/dist/features/transfer/transforms.js.map +1 -0
- package/dist/features/transfer/vue.d.ts +9 -0
- package/dist/features/transfer/vue.js +11 -0
- package/dist/features/transfer/vue.js.map +1 -0
- package/dist/i18n/de/ai.js +4 -0
- package/dist/i18n/de/ai.js.map +1 -1
- package/dist/i18n/de/composites.js +21 -1
- package/dist/i18n/de/composites.js.map +1 -1
- package/dist/i18n/de/integrations.js +16 -0
- package/dist/i18n/de/integrations.js.map +1 -1
- package/dist/i18n/de/transfer.js +17 -0
- package/dist/i18n/de/transfer.js.map +1 -0
- package/dist/i18n/de/tree.js +7 -0
- package/dist/i18n/de/tree.js.map +1 -1
- package/dist/i18n/de.d.ts +57 -0
- package/dist/i18n/de.js +3 -1
- package/dist/i18n/de.js.map +1 -1
- package/dist/i18n/en/ai.js +4 -0
- package/dist/i18n/en/ai.js.map +1 -1
- package/dist/i18n/en/composites.js +21 -1
- package/dist/i18n/en/composites.js.map +1 -1
- package/dist/i18n/en/integrations.js +16 -0
- package/dist/i18n/en/integrations.js.map +1 -1
- package/dist/i18n/en/transfer.js +17 -0
- package/dist/i18n/en/transfer.js.map +1 -0
- package/dist/i18n/en/tree.js +7 -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/integrations/composite-ai/composite-fill.js +1 -1
- package/dist/integrations/composite-ai/composite-summary.js +1 -1
- package/dist/integrations/composite-ai/derive.d.ts +21 -0
- package/dist/integrations/composite-ai/derive.js +69 -47
- package/dist/integrations/composite-ai/derive.js.map +1 -1
- package/dist/integrations/composite-ai/index.d.ts +8 -3
- package/dist/integrations/composite-ai/index.js +50 -4
- package/dist/integrations/composite-ai/index.js.map +1 -1
- package/dist/integrations/composite-ai/outline-sanitize.d.ts +48 -0
- package/dist/integrations/composite-ai/outline-sanitize.js +175 -0
- package/dist/integrations/composite-ai/outline-sanitize.js.map +1 -0
- package/dist/integrations/composite-ai/split.d.ts +44 -0
- package/dist/integrations/composite-ai/split.js +187 -0
- package/dist/integrations/composite-ai/split.js.map +1 -0
- package/dist/integrations/composite-ai/transfer-transforms.d.ts +27 -0
- package/dist/integrations/composite-ai/transfer-transforms.js +153 -0
- package/dist/integrations/composite-ai/transfer-transforms.js.map +1 -0
- package/dist/integrations/transcript-ai/protocol.d.ts +13 -0
- package/dist/integrations/transcript-ai/protocol.js +49 -1
- package/dist/integrations/transcript-ai/protocol.js.map +1 -1
- package/dist/integrations/transcript-ai/transcript-cleanup.js +1 -1
- package/dist/markdown/MarkdownSurface.vue.d.ts +1 -1
- package/dist/nuxt/module.d.ts +114 -0
- package/dist/presets/compose.d.ts +24 -8
- package/dist/presets/compose.js +117 -58
- package/dist/presets/compose.js.map +1 -1
- package/dist/react/compose.js +5 -1
- package/dist/react/compose.js.map +1 -1
- package/dist/react/composed-surface.d.ts +9 -0
- package/dist/react/composed-surface.js +4 -1
- package/dist/react/composed-surface.js.map +1 -1
- package/dist/server/ai.d.ts +2 -5
- package/dist/server/ai.js.map +1 -1
- package/dist/server/handlers/ai.d.ts +4 -75
- package/dist/server/handlers/ai.js +30 -94
- package/dist/server/handlers/ai.js.map +1 -1
- package/dist/server/handlers/editor.d.ts +1 -0
- package/dist/server/handlers/index.d.ts +3 -1
- package/dist/server/handlers/index.js +3 -1
- package/dist/server/index.d.ts +2 -1
- package/dist/settings/index.d.ts +8 -0
- package/dist/settings/index.js +16 -4
- package/dist/settings/index.js.map +1 -1
- package/dist/styles/composites.css +41 -0
- package/dist/tree/DocumentTree.js +246 -80
- package/dist/tree/DocumentTree.js.map +1 -1
- package/dist/tree/drop-rules.js +8 -0
- package/dist/tree/drop-rules.js.map +1 -1
- package/dist/tree/react/DocumentTree.js +164 -32
- package/dist/tree/react/DocumentTree.js.map +1 -1
- package/dist/tree/tree-host.js +41 -2
- package/dist/tree/tree-host.js.map +1 -1
- package/dist/tree/tree-items.js +53 -5
- package/dist/tree/tree-items.js.map +1 -1
- package/dist/tree/tree-model.js +122 -10
- package/dist/tree/tree-model.js.map +1 -1
- package/dist/tree/tree-rows.js +20 -7
- package/dist/tree/tree-rows.js.map +1 -1
- package/dist/tree/tree-view-model.d.ts +5 -0
- package/dist/tree/tree-view-model.js +13 -0
- package/dist/tree/tree-view-model.js.map +1 -1
- package/dist/vue/AdvancedEditor.js +6 -0
- package/dist/vue/AdvancedEditor.js.map +1 -1
- package/dist/vue/AdvancedEditor.vue.d.ts +9 -1
- package/dist/vue/compose.js +5 -1
- package/dist/vue/compose.js.map +1 -1
- package/package.json +21 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"composites.js","names":[],"sources":["../../../src/i18n/en/composites.ts"],"sourcesContent":["import type { de } from '../de/composites'\n\nexport const en: { [K in keyof typeof de]: string } = {\n 'composites.untitled': '(untitled)',\n\n 'composites.kind.section.label': 'Section',\n 'composites.kind.section.title': 'Heading',\n 'composites.kind.section.description': 'Summary',\n 'composites.kind.task.label': 'Task',\n 'composites.kind.task.title': 'Task',\n 'composites.kind.task.description': 'Description',\n 'composites.kind.task.field.status': 'Status',\n 'composites.kind.task.status.open': 'Open',\n 'composites.kind.task.status.doing': 'In progress',\n 'composites.kind.task.status.done': 'Done',\n 'composites.kind.task.field.due': 'Due',\n 'composites.kind.task.field.assignee': 'Assignee',\n 'composites.kind.note.label': 'Note',\n 'composites.kind.note.title': 'Title',\n 'composites.kind.note.description': 'Short description',\n 'composites.kind.document.label': 'Document',\n 'composites.kind.document.title': 'Document name',\n 'composites.kind.document.description': 'Summary',\n 'composites.kind.document.field.filename': 'File name',\n 'composites.kind.document.field.mimeType': 'Type',\n 'composites.kind.document.field.size': 'Size (bytes)',\n 'composites.kind.document.field.importedAt': 'Imported',\n 'composites.kind.recording.label': 'Recording',\n 'composites.kind.recording.title': 'Recording title',\n 'composites.kind.recording.description': 'Summary',\n 'composites.kind.recording.field.filename': 'File name',\n 'composites.kind.recording.field.mimeType': 'Type',\n 'composites.kind.recording.field.size': 'Size (bytes)',\n 'composites.kind.recording.field.importedAt': 'Imported',\n 'composites.kind.recording.field.recordedAt': 'Recorded on',\n 'composites.kind.recording.field.participants': 'Participants',\n 'composites.kind.recording.field.durationSeconds': 'Duration (seconds)',\n 'composites.kind.paper.label': 'Paper',\n 'composites.kind.paper.title': 'Paper title',\n 'composites.kind.paper.description': 'Summary',\n 'composites.kind.paper.field.filename': 'File name',\n 'composites.kind.paper.field.mimeType': 'Type',\n 'composites.kind.paper.field.size': 'Size (bytes)',\n 'composites.kind.paper.field.importedAt': 'Imported',\n 'composites.kind.paper.field.bib': 'Citation',\n 'composites.kind.paper.field.doi': 'DOI',\n 'composites.kind.book.label': 'Book',\n 'composites.kind.book.title': 'Book title',\n 'composites.kind.book.description': 'Summary',\n 'composites.kind.book.field.filename': 'File name',\n 'composites.kind.book.field.mimeType': 'Type',\n 'composites.kind.book.field.size': 'Size (bytes)',\n 'composites.kind.book.field.importedAt': 'Imported',\n 'composites.kind.book.field.bib': 'Citation',\n 'composites.kind.book.field.isbn': 'ISBN',\n 'composites.kind.figure.label': 'Figure',\n 'composites.kind.figure.title': 'Figure title',\n 'composites.kind.figure.description': 'Image description',\n 'composites.kind.figure.field.filename': 'File name',\n 'composites.kind.figure.field.mimeType': 'Type',\n 'composites.kind.figure.field.size': 'Size (bytes)',\n 'composites.kind.figure.field.importedAt': 'Imported',\n 'composites.kind.figure.field.credit': 'Credit',\n 'composites.kind.rendition.label': 'Rendition',\n 'composites.kind.rendition.title': 'Transcript, full text, description …',\n 'composites.kind.rendition.description': 'Note on its origin',\n 'composites.kind.rendition.field.derivation': 'Origin',\n 'composites.kind.rendition.field.language': 'Language',\n 'composites.bib.type.article-journal': 'Journal article',\n 'composites.bib.type.book': 'Book',\n 'composites.bib.type.chapter': 'Book chapter',\n 'composites.bib.type.paper-conference': 'Conference paper',\n 'composites.bib.type.thesis': 'Thesis',\n 'composites.bib.type.report': 'Report',\n 'composites.bib.type.webpage': 'Web page',\n 'composites.bib.type.article': 'Article',\n 'composites.bib.type.dataset': 'Dataset',\n 'composites.bib.field.type': 'Type',\n 'composites.bib.field.authors': 'Authors',\n 'composites.bib.field.authorsHelp': 'One person per line: Family, Given',\n 'composites.bib.field.year': 'Year',\n 'composites.bib.field.containerTitle': 'Journal / collection',\n 'composites.bib.field.volume': 'Volume',\n 'composites.bib.field.issue': 'Issue',\n 'composites.bib.field.page': 'Pages',\n 'composites.bib.field.publisher': 'Publisher',\n 'composites.bib.field.doi': 'DOI',\n 'composites.bib.field.isbn': 'ISBN',\n 'composites.bib.field.url': 'URL',\n 'composites.bib.field.abstract': 'Abstract',\n 'composites.bib.copyBibtex': 'Copy BibTeX',\n 'composites.bib.copied': 'BibTeX copied',\n 'composites.bib.fetchDoi': 'Fetch DOI',\n 'composites.kind.folder.label': 'Folder',\n 'composites.kind.folder.title': 'Folder name',\n 'composites.kind.folder.description': 'Description',\n 'composites.kind.select': 'Kind of building block',\n\n 'composites.status.none': 'No status',\n 'composites.status.label': 'Status: {status}',\n\n 'composites.tab': 'Editing',\n 'composites.slash.section': 'Section',\n 'composites.slash.group': 'Headings to building blocks',\n 'composites.slash.groupAll': 'Headings to building blocks (nested)',\n 'composites.slash.flatten': 'Building blocks to headings',\n 'composites.slash.flattenAll': 'Building blocks to headings (all levels)',\n 'composites.blockAction.export': 'Export as Markdown',\n 'composites.blockAction.bibtex': 'Export reference (BibTeX)',\n 'composites.toolbar.toKind': 'Convert to building block',\n 'composites.toolbar.structure': 'Convert structure',\n 'composites.menu.kindHeading': 'Building block',\n 'composites.menu.toComposites': 'Headings to building blocks',\n 'composites.menu.toComposites.top': 'Top level only',\n 'composites.menu.toComposites.top.description': 'Only the highest heading level becomes building blocks',\n 'composites.menu.toComposites.all': 'All levels (nested)',\n 'composites.menu.toComposites.all.description': 'Every heading level becomes a nested building block',\n 'composites.menu.toHeadings': 'Building blocks to headings',\n 'composites.menu.toHeadings.top': 'Top level only',\n 'composites.menu.toHeadings.top.description': 'The top building blocks become headings; inner building blocks stay',\n 'composites.menu.toHeadings.all': 'All levels',\n 'composites.menu.toHeadings.all.description': 'Every building block becomes a heading of its level; description, tags and fields as text',\n 'composites.menu.settings': 'Settings…',\n 'composites.menu.preferred': 'Preferred: {mode}',\n 'composites.convert.kind': '{kind} (building block)',\n\n 'composites.chrome.details': 'Kind and details: {kind}',\n 'composites.chrome.detailsDrag': 'Kind and details: {kind} · Drag to move',\n 'composites.tag.remove': 'Remove tag #{tag}',\n 'composites.tag.add': 'Add tag',\n\n 'composites.tags.label': 'Tags',\n 'composites.tags.placeholder': 'Add tags',\n 'composites.tags.create': 'Create #{tag}',\n\n 'composites.details.confirmLost': 'Really change the kind? Switching to “{kind}” discards this information:',\n 'composites.details.confirm': 'Really change the kind?',\n 'composites.details.cancel': 'Cancel',\n 'composites.details.change': 'Change',\n 'composites.details.summary': 'Summary',\n\n // Reference chip (`[@`), locator and backlinks.\n 'composites.reference.insert': 'Reference to a Baustein',\n 'composites.reference.empty': 'No matching Bausteine',\n 'composites.reference.gone': 'Baustein deleted',\n 'composites.reference.locator': 'Locator',\n 'composites.reference.locatorPlaceholder': 'Locator, e.g. p. 12 or 03:14',\n 'composites.reference.backlinks': 'References',\n\n 'composites.derivation.badge': 'derived',\n 'composites.derivation.stale': 'Source changed',\n 'composites.derivation.edited': 'edited',\n 'composites.derivation.expand': 'Expand derived content',\n 'composites.derivation.collapse': 'Collapse derived content',\n 'composites.derivation.method': 'Method',\n 'composites.derivation.model': 'Model',\n 'composites.derivation.createdAt': 'Created',\n 'composites.derivation.openOutput': 'Open original',\n 'composites.derivation.method.transcription': 'Transcription',\n 'composites.derivation.method.pdf-text': 'PDF text',\n 'composites.derivation.method.ocr': 'Text recognition (OCR)',\n 'composites.derivation.method.description': 'Image description',\n 'composites.derivation.method.bibliography': 'Bibliographic data',\n 'composites.derivation.method.ai': 'AI derivation',\n\n 'composites.summary.placeholder': 'Short summary of the building block',\n 'composites.summary.label': 'Summary',\n 'composites.summary.none': 'No summary',\n 'composites.summary.formatted': 'Contains formatting or mentions and can only be edited in the text.',\n 'composites.field.choose': 'Choose {field}',\n 'composites.field.none': 'None',\n\n 'composites.inspector.label': 'Properties',\n 'composites.inspector.document': 'Document',\n 'composites.inspector.composites': 'Building blocks',\n 'composites.inspector.summarized': '{n} of {total} summarized',\n 'composites.inspector.none': 'None',\n 'composites.inspector.mentions': 'Mentions',\n 'composites.inspector.composite': 'Building block',\n 'composites.inspector.kind': 'Kind',\n 'composites.inspector.title': 'Title',\n 'composites.inspector.titleHelp': 'Edit in the document',\n 'composites.inspector.untitled': 'Untitled',\n 'composites.inspector.description': 'Description',\n 'composites.inspector.descriptionHelp': 'Contains mentions or tags – edit in the document',\n 'composites.inspector.aiStatus': 'AI status',\n 'composites.inspector.summaryPresent': 'Summary present',\n 'composites.inspector.summaryMissing': 'Summary missing',\n\n 'composites.table.label': 'Building blocks as table',\n 'composites.table.emptyTitle': 'This document has no building blocks yet',\n 'composites.table.emptyText': 'Building blocks divide a document into sections, tasks or notes with a title, summary and tags. Insert one in the text with “/” and it appears here with all its details.',\n 'composites.table.column.composite': 'Building block',\n 'composites.table.column.kind': 'Kind',\n 'composites.table.column.tags': 'Tags',\n 'composites.table.column.summary': 'Summary',\n 'composites.table.search.placeholder': 'Title, summary, tags',\n 'composites.table.search.label': 'Search building blocks',\n 'composites.table.search.clear': 'Clear search',\n 'composites.table.filter.all': 'All',\n 'composites.table.filter.reset': 'Reset filters',\n 'composites.table.filter.byKind': 'Filter by kind',\n 'composites.table.filter.byTag': 'Filter by tag',\n 'composites.table.filter.noMatch': 'No building block matches these filters.',\n 'composites.table.count.one': '{n} of {total} building block',\n 'composites.table.count.other': '{n} of {total} building blocks',\n 'composites.table.noValue': 'No value',\n 'composites.table.noTags': 'No tags',\n 'composites.table.summaryPresent': 'Summary present',\n\n 'composites.settings.structure.title': 'Structure',\n 'composites.settings.structure.legend': 'Preferred structure',\n 'composites.settings.structure.flat.label': 'Headings',\n 'composites.settings.structure.flat.description': 'Toolbar with Heading 1–3. AI texts are structured flat with headings (##, ###); building blocks the AI writes anyway become headings.',\n 'composites.settings.structure.composite.label': 'Building blocks',\n 'composites.settings.structure.composite.description': 'Toolbar without Heading 1–3. AI texts are structured as building blocks, subsections as nested building blocks; headings the AI writes anyway become building blocks.',\n 'composites.settings.scope.legend': '“Convert structure” without a selection applies to',\n 'composites.settings.scope.container.label': 'Enclosing building block',\n 'composites.settings.scope.container.description': 'The building block the cursor is in; the whole document outside of building blocks.',\n 'composites.settings.scope.document.label': 'Whole document',\n 'composites.settings.scope.document.description': 'Always all blocks of the document.',\n 'composites.settings.scope.heading.label': 'Heading or building block at the cursor',\n 'composites.settings.scope.heading.description': 'Converting to building blocks: the heading at or before the cursor with its content. Converting to headings: the innermost building block around the cursor.',\n 'composites.settings.sidebar.title': 'Sidebar',\n 'composites.settings.treeRoot.legend': 'Document tree',\n 'composites.settings.treeRoot.folders.label': 'Nest folders and files',\n 'composites.settings.treeRoot.folders.description': 'The sidebar shows the folders with their files; the open file is an entry within them.',\n 'composites.settings.treeRoot.file.label': 'Root is a single file',\n 'composites.settings.treeRoot.file.description': 'While a building block file is open, the sidebar shows it as the root with its folders and documents. Without an open building block file it shows the folders.',\n 'composites.settings.composites.title': 'Building blocks',\n 'composites.settings.defaultKind.label': 'Default building block',\n 'composites.settings.defaultKind.description': 'Kind of the building blocks the toolbar, “/” commands and “Headings to building blocks” create.',\n 'composites.settings.kindIcon.legend': 'Kind icon',\n 'composites.settings.kindIcon.always.label': 'Always show',\n 'composites.settings.kindIcon.always.description': 'The kind icon is permanently shown in front of the building block.',\n 'composites.settings.kindIcon.hover.label': 'Only on hover',\n 'composites.settings.kindIcon.hover.description': 'The icon appears when the mouse is over the building block, it has focus or its details are open.',\n 'composites.settings.dragHandle.legend': 'Drag handle (blocks without icon)',\n 'composites.settings.dragHandle.hover.label': 'Only on hover',\n 'composites.settings.dragHandle.hover.description': 'The drag handle appears on the block under the mouse.',\n 'composites.settings.dragHandle.always.label': 'Always show',\n 'composites.settings.dragHandle.always.description': 'Every block without an icon permanently shows its drag handle.',\n\n 'composites.nesting.title': 'Nesting not possible',\n 'composites.nesting.refused': '{parent} does not accept {child}.',\n 'composites.move.blockGone': 'The block no longer exists.',\n 'composites.move.targetGone': 'The target no longer exists.',\n 'composites.move.targetNotBlock': 'The target is not a building block.',\n 'composites.move.intoSelf': 'A block cannot be moved into itself.',\n 'composites.move.intoOwn': 'A block cannot be moved into a building block it contains itself.',\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"composites.js","names":[],"sources":["../../../src/i18n/en/composites.ts"],"sourcesContent":["import type { de } from '../de/composites'\n\nexport const en: { [K in keyof typeof de]: string } = {\n 'composites.untitled': '(untitled)',\n\n 'composites.kind.section.label': 'Section',\n 'composites.kind.section.title': 'Heading',\n 'composites.kind.section.description': 'Summary',\n 'composites.kind.task.label': 'Task',\n 'composites.kind.task.title': 'Task',\n 'composites.kind.task.description': 'Description',\n 'composites.kind.task.field.status': 'Status',\n 'composites.kind.task.status.open': 'Open',\n 'composites.kind.task.status.doing': 'In progress',\n 'composites.kind.task.status.done': 'Done',\n 'composites.kind.task.field.due': 'Due',\n 'composites.kind.task.field.assignee': 'Assignee',\n 'composites.kind.note.label': 'Note',\n 'composites.kind.note.title': 'Title',\n 'composites.kind.note.description': 'Short description',\n 'composites.kind.document.label': 'Document',\n 'composites.kind.document.title': 'Document name',\n 'composites.kind.document.description': 'Summary',\n 'composites.kind.document.field.filename': 'File name',\n 'composites.kind.document.field.mimeType': 'Type',\n 'composites.kind.document.field.size': 'Size (bytes)',\n 'composites.kind.document.field.importedAt': 'Imported',\n 'composites.kind.recording.label': 'Recording',\n 'composites.kind.recording.title': 'Recording title',\n 'composites.kind.recording.description': 'Summary',\n 'composites.kind.recording.field.filename': 'File name',\n 'composites.kind.recording.field.mimeType': 'Type',\n 'composites.kind.recording.field.size': 'Size (bytes)',\n 'composites.kind.recording.field.importedAt': 'Imported',\n 'composites.kind.recording.field.recordedAt': 'Recorded on',\n 'composites.kind.recording.field.participants': 'Participants',\n 'composites.kind.recording.field.durationSeconds': 'Duration (seconds)',\n 'composites.kind.paper.label': 'Paper',\n 'composites.kind.paper.title': 'Paper title',\n 'composites.kind.paper.description': 'Summary',\n 'composites.kind.paper.field.filename': 'File name',\n 'composites.kind.paper.field.mimeType': 'Type',\n 'composites.kind.paper.field.size': 'Size (bytes)',\n 'composites.kind.paper.field.importedAt': 'Imported',\n 'composites.kind.paper.field.bib': 'Citation',\n 'composites.kind.paper.field.doi': 'DOI',\n 'composites.kind.book.label': 'Book',\n 'composites.kind.book.title': 'Book title',\n 'composites.kind.book.description': 'Summary',\n 'composites.kind.book.field.filename': 'File name',\n 'composites.kind.book.field.mimeType': 'Type',\n 'composites.kind.book.field.size': 'Size (bytes)',\n 'composites.kind.book.field.importedAt': 'Imported',\n 'composites.kind.book.field.bib': 'Citation',\n 'composites.kind.book.field.isbn': 'ISBN',\n 'composites.kind.figure.label': 'Figure',\n 'composites.kind.figure.title': 'Figure title',\n 'composites.kind.figure.description': 'Image description',\n 'composites.kind.figure.field.filename': 'File name',\n 'composites.kind.figure.field.mimeType': 'Type',\n 'composites.kind.figure.field.size': 'Size (bytes)',\n 'composites.kind.figure.field.importedAt': 'Imported',\n 'composites.kind.figure.field.credit': 'Credit',\n 'composites.kind.rendition.label': 'Rendition',\n 'composites.kind.rendition.title': 'Transcript, full text, description …',\n 'composites.kind.rendition.description': 'Note on its origin',\n 'composites.kind.rendition.field.derivation': 'Origin',\n 'composites.kind.rendition.field.language': 'Language',\n 'composites.bib.type.article-journal': 'Journal article',\n 'composites.bib.type.book': 'Book',\n 'composites.bib.type.chapter': 'Book chapter',\n 'composites.bib.type.paper-conference': 'Conference paper',\n 'composites.bib.type.thesis': 'Thesis',\n 'composites.bib.type.report': 'Report',\n 'composites.bib.type.webpage': 'Web page',\n 'composites.bib.type.article': 'Article',\n 'composites.bib.type.dataset': 'Dataset',\n 'composites.bib.field.type': 'Type',\n 'composites.bib.field.authors': 'Authors',\n 'composites.bib.field.authorsHelp': 'One person per line: Family, Given',\n 'composites.bib.field.year': 'Year',\n 'composites.bib.field.containerTitle': 'Journal / collection',\n 'composites.bib.field.volume': 'Volume',\n 'composites.bib.field.issue': 'Issue',\n 'composites.bib.field.page': 'Pages',\n 'composites.bib.field.publisher': 'Publisher',\n 'composites.bib.field.doi': 'DOI',\n 'composites.bib.field.isbn': 'ISBN',\n 'composites.bib.field.url': 'URL',\n 'composites.bib.field.abstract': 'Abstract',\n 'composites.bib.copyBibtex': 'Copy BibTeX',\n 'composites.bib.copied': 'BibTeX copied',\n 'composites.bib.fetchDoi': 'Fetch DOI',\n 'composites.kind.folder.label': 'Folder',\n 'composites.kind.folder.title': 'Folder name',\n 'composites.kind.folder.description': 'Description',\n 'composites.kind.select': 'Kind of building block',\n\n 'composites.status.none': 'No status',\n 'composites.status.label': 'Status: {status}',\n\n 'composites.tab': 'Editing',\n 'composites.slash.section': 'Section',\n 'composites.slash.group': 'Headings to building blocks',\n 'composites.slash.groupAll': 'Headings to building blocks (nested)',\n 'composites.slash.flatten': 'Building blocks to headings',\n 'composites.slash.flattenAll': 'Building blocks to headings (all levels)',\n 'composites.blockAction.export': 'Export as Markdown',\n 'composites.blockAction.bibtex': 'Export reference (BibTeX)',\n 'composites.split.here': 'Split building block here',\n 'composites.split.children': 'Split into sub-building blocks',\n 'composites.split.lengthChildren': 'Split by length into sub-building blocks',\n 'composites.split.lengthSiblings': 'Split by length into building blocks',\n 'composites.merge.next': 'Merge with next',\n 'settings.editing.splitTargetChars': 'Target size when splitting (characters)',\n 'composites.toolbar.toKind': 'Convert to building block',\n 'composites.toolbar.structure': 'Convert structure',\n 'composites.menu.kindHeading': 'Building block',\n 'composites.menu.toComposites': 'Headings to building blocks',\n 'composites.menu.toComposites.top': 'Top level only',\n 'composites.menu.toComposites.top.description': 'Only the highest heading level becomes building blocks',\n 'composites.menu.toComposites.all': 'All levels (nested)',\n 'composites.menu.toComposites.all.description': 'Every heading level becomes a nested building block',\n 'composites.menu.toHeadings': 'Building blocks to headings',\n 'composites.menu.toHeadings.top': 'Top level only',\n 'composites.menu.toHeadings.top.description': 'The top building blocks become headings; inner building blocks stay',\n 'composites.menu.toHeadings.all': 'All levels',\n 'composites.menu.toHeadings.all.description': 'Every building block becomes a heading of its level; description, tags and fields as text',\n 'composites.menu.settings': 'Settings…',\n 'composites.menu.preferred': 'Preferred: {mode}',\n 'composites.convert.kind': '{kind} (building block)',\n\n 'composites.chrome.details': 'Kind and details: {kind}',\n 'composites.chrome.detailsDrag': 'Kind and details: {kind} · Drag to move',\n 'composites.tag.remove': 'Remove tag #{tag}',\n 'composites.tag.add': 'Add tag',\n\n 'composites.tags.label': 'Tags',\n 'composites.tags.placeholder': 'Add tags',\n 'composites.tags.create': 'Create #{tag}',\n\n 'composites.details.confirmLost': 'Really change the kind? Switching to “{kind}” discards this information:',\n 'composites.details.confirm': 'Really change the kind?',\n 'composites.details.cancel': 'Cancel',\n 'composites.details.change': 'Change',\n 'composites.details.summary': 'Summary',\n\n // Reference chip (`[@`), locator and backlinks.\n 'composites.reference.insert': 'Reference to a Baustein',\n 'composites.reference.empty': 'No matching Bausteine',\n 'composites.reference.gone': 'Baustein deleted',\n 'composites.reference.locator': 'Locator',\n 'composites.reference.locatorPlaceholder': 'Locator, e.g. p. 12 or 03:14',\n 'composites.reference.backlinks': 'References',\n\n 'composites.derivation.badge': 'derived',\n 'composites.derivation.stale': 'Source changed',\n 'composites.derivation.foreign': 'from another document',\n 'composites.derivation.edited': 'edited',\n 'composites.derivation.expand': 'Expand derived content',\n 'composites.derivation.collapse': 'Collapse derived content',\n 'composites.derivation.method': 'Method',\n 'composites.derivation.model': 'Model',\n 'composites.derivation.createdAt': 'Created',\n 'composites.derivation.openOutput': 'Open original',\n 'composites.derivation.method.transcription': 'Transcription',\n 'composites.derivation.method.pdf-text': 'PDF text',\n 'composites.derivation.method.ocr': 'Text recognition (OCR)',\n 'composites.derivation.method.description': 'Image description',\n 'composites.derivation.method.bibliography': 'Bibliographic data',\n 'composites.derivation.method.ai': 'AI derivation',\n\n 'composites.summary.placeholder': 'Short summary of the building block',\n 'composites.summary.label': 'Summary',\n 'composites.summary.none': 'No summary',\n 'composites.summary.formatted': 'Contains formatting or mentions and can only be edited in the text.',\n 'composites.field.choose': 'Choose {field}',\n 'composites.field.none': 'None',\n\n 'composites.inspector.label': 'Properties',\n 'composites.inspector.document': 'Document',\n 'composites.inspector.composites': 'Building blocks',\n 'composites.inspector.summarized': '{n} of {total} summarized',\n 'composites.inspector.none': 'None',\n 'composites.inspector.mentions': 'Mentions',\n 'composites.inspector.composite': 'Building block',\n 'composites.inspector.kind': 'Kind',\n 'composites.inspector.title': 'Title',\n 'composites.inspector.titleHelp': 'Edit in the document',\n 'composites.inspector.untitled': 'Untitled',\n 'composites.inspector.description': 'Description',\n 'composites.inspector.descriptionHelp': 'Contains mentions or tags – edit in the document',\n 'composites.inspector.aiStatus': 'AI status',\n 'composites.inspector.summaryPresent': 'Summary present',\n 'composites.inspector.summaryMissing': 'Summary missing',\n\n 'composites.table.label': 'Building blocks as table',\n 'composites.table.emptyTitle': 'This document has no building blocks yet',\n 'composites.table.emptyText': 'Building blocks divide a document into sections, tasks or notes with a title, summary and tags. Insert one in the text with “/” and it appears here with all its details.',\n 'composites.table.column.composite': 'Building block',\n 'composites.table.column.kind': 'Kind',\n 'composites.table.column.tags': 'Tags',\n 'composites.table.column.summary': 'Summary',\n 'composites.table.search.placeholder': 'Title, summary, tags',\n 'composites.table.search.label': 'Search building blocks',\n 'composites.table.search.clear': 'Clear search',\n 'composites.table.filter.all': 'All',\n 'composites.table.filter.reset': 'Reset filters',\n 'composites.table.filter.byKind': 'Filter by kind',\n 'composites.table.filter.byTag': 'Filter by tag',\n 'composites.table.filter.noMatch': 'No building block matches these filters.',\n 'composites.table.count.one': '{n} of {total} building block',\n 'composites.table.count.other': '{n} of {total} building blocks',\n 'composites.table.noValue': 'No value',\n 'composites.table.noTags': 'No tags',\n 'composites.table.summaryPresent': 'Summary present',\n\n 'composites.settings.structure.title': 'Structure',\n 'composites.settings.structure.legend': 'Preferred structure',\n 'composites.settings.structure.flat.label': 'Headings',\n 'composites.settings.structure.flat.description': 'Toolbar with Heading 1–3. AI texts are structured flat with headings (##, ###); building blocks the AI writes anyway become headings.',\n 'composites.settings.structure.composite.label': 'Building blocks',\n 'composites.settings.structure.composite.description': 'Toolbar without Heading 1–3. AI texts are structured as building blocks, subsections as nested building blocks; headings the AI writes anyway become building blocks.',\n 'composites.settings.scope.legend': '“Convert structure” without a selection applies to',\n 'composites.settings.scope.container.label': 'Enclosing building block',\n 'composites.settings.scope.container.description': 'The building block the cursor is in; the whole document outside of building blocks.',\n 'composites.settings.scope.document.label': 'Whole document',\n 'composites.settings.scope.document.description': 'Always all blocks of the document.',\n 'composites.settings.scope.heading.label': 'Heading or building block at the cursor',\n 'composites.settings.scope.heading.description': 'Converting to building blocks: the heading at or before the cursor with its content. Converting to headings: the innermost building block around the cursor.',\n 'composites.settings.sidebar.title': 'Sidebar',\n 'composites.settings.treeRoot.legend': 'Document tree',\n 'composites.settings.treeRoot.folders.label': 'Nest folders and files',\n 'composites.settings.treeRoot.folders.description': 'The sidebar shows the folders with their files; the open file is an entry within them.',\n 'composites.settings.treeRoot.file.label': 'Root is a single file',\n 'composites.settings.treeRoot.file.description': 'While a building block file is open, the sidebar shows it as the root with its folders and documents. Without an open building block file it shows the folders.',\n 'composites.settings.composites.title': 'Building blocks',\n 'composites.settings.defaultKind.label': 'Default building block',\n 'composites.settings.defaultKind.description': 'Kind of the building blocks the toolbar, “/” commands and “Headings to building blocks” create.',\n 'composites.settings.kindIcon.legend': 'Kind icon',\n 'composites.settings.kindIcon.always.label': 'Always show',\n 'composites.settings.kindIcon.always.description': 'The kind icon is permanently shown in front of the building block.',\n 'composites.settings.kindIcon.hover.label': 'Only on hover',\n 'composites.settings.kindIcon.hover.description': 'The icon appears when the mouse is over the building block, it has focus or its details are open.',\n 'composites.settings.dragHandle.legend': 'Drag handle (blocks without icon)',\n 'composites.settings.dragHandle.hover.label': 'Only on hover',\n 'composites.settings.dragHandle.hover.description': 'The drag handle appears on the block under the mouse.',\n 'composites.settings.dragHandle.always.label': 'Always show',\n 'composites.settings.dragHandle.always.description': 'Every block without an icon permanently shows its drag handle.',\n\n 'composites.nesting.title': 'Nesting not possible',\n 'composites.nesting.refused': '{parent} does not accept {child}.',\n 'composites.move.blockGone': 'The block no longer exists.',\n 'composites.move.targetGone': 'The target no longer exists.',\n 'composites.move.targetNotBlock': 'The target is not a building block.',\n 'composites.move.intoSelf': 'A block cannot be moved into itself.',\n 'composites.move.intoOwn': 'A block cannot be moved into a building block it contains itself.',\n 'composites.basket.label': 'Basket',\n 'composites.basket.none': 'No basket',\n 'composites.basket.red': 'Red',\n 'composites.basket.orange': 'Orange',\n 'composites.basket.yellow': 'Yellow',\n 'composites.basket.green': 'Green',\n 'composites.basket.blue': 'Blue',\n 'composites.titleHidden.hide': 'Hide title',\n 'composites.titleHidden.show': 'Show title',\n 'composites.focus.action': 'Focus',\n 'composites.focus.leave': 'Leave focus',\n 'composites.focus.chip': 'Focus: {title}',\n 'composites.focus.release': 'Leave',\n}\n"],"mappings":"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"}
|
|
@@ -23,6 +23,22 @@ const en = {
|
|
|
23
23
|
"integrations.compositeSummary.gone.title": "Block not found anymore",
|
|
24
24
|
"integrations.compositeSummary.gone.description": "The summary was not applied.",
|
|
25
25
|
"integrations.compositeSummary.done": "Summary created",
|
|
26
|
+
"integrations.compositeSplit.ai.children": "Split into sub-blocks with AI",
|
|
27
|
+
"integrations.compositeSplit.ai.siblings": "Split into blocks with AI",
|
|
28
|
+
"integrations.compositeSplit.changed": "The AI changed the text, nothing was split",
|
|
29
|
+
"integrations.compositeSplit.running": "Splitting block…",
|
|
30
|
+
"integrations.compositeSplit.failed": "Splitting failed",
|
|
31
|
+
"integrations.compositeSplit.notPossible": "This block cannot be split this way",
|
|
32
|
+
"integrations.compositeSplit.tooLong": "The text is too long for AI splitting",
|
|
33
|
+
"integrations.compositeSplit.gone": "The block changed in the meantime, nothing was split",
|
|
34
|
+
"integrations.outlineSanitize.label": "Clean up outline (AI)",
|
|
35
|
+
"integrations.outlineSanitize.none": "The document has no headings",
|
|
36
|
+
"integrations.outlineSanitize.invalid": "The AI answer was unusable, nothing was changed",
|
|
37
|
+
"integrations.outlineSanitize.running": "Cleaning up the outline…",
|
|
38
|
+
"integrations.outlineSanitize.done": "Outline cleaned up",
|
|
39
|
+
"integrations.outlineSanitize.failed": "Cleaning up the outline failed",
|
|
40
|
+
"integrations.outlineSanitize.tooLong": "The outline is too long for the AI",
|
|
41
|
+
"integrations.outlineSanitize.gone": "The document changed in the meantime, nothing was changed",
|
|
26
42
|
"integrations.rendition.action": "Create rendition",
|
|
27
43
|
"integrations.rendition.regenerate": "Regenerate (replace)",
|
|
28
44
|
"integrations.rendition.running": "Creating rendition…",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integrations.js","names":[],"sources":["../../../src/i18n/en/integrations.ts"],"sourcesContent":["import type { de } from '../de/integrations'\n\nexport const en: { [K in keyof typeof de]: string } = {\n // composite-ai: “Fill block (AI)”\n 'integrations.compositeFill.action': 'Fill block (AI)',\n 'integrations.compositeFill.dataMissing': 'Data for the block is missing',\n 'integrations.compositeFill.failed': 'Filling the block failed',\n 'integrations.compositeFill.empty.title': 'Empty result',\n 'integrations.compositeFill.empty.description': 'The block was not filled.',\n 'integrations.compositeFill.gone.title': 'Block not found anymore',\n 'integrations.compositeFill.gone.description': 'The block was not filled.',\n\n // composite-ai: “Derive (AI)”\n 'integrations.compositeDerive.action': 'Derive (AI)',\n 'integrations.compositeDerive.running': 'Deriving {kind}…',\n 'integrations.compositeDerive.done': '{kind} derived',\n 'integrations.compositeDerive.failed': 'Deriving failed',\n 'integrations.compositeDerive.notAccepted': 'This block cannot be inserted here',\n 'integrations.compositeDerive.empty.title': 'Empty result',\n 'integrations.compositeDerive.empty.description': 'No block was derived.',\n 'integrations.compositeDerive.gone.title': 'Block not found anymore',\n 'integrations.compositeDerive.gone.description': 'The result was not applied.',\n\n // composite-ai: “Generate summary (AI)”\n 'integrations.compositeSummary.action': 'Generate summary (AI)',\n 'integrations.compositeSummary.failed': 'Summary failed',\n 'integrations.compositeSummary.empty.title': 'Empty result',\n 'integrations.compositeSummary.empty.description': 'The summary was not applied.',\n 'integrations.compositeSummary.gone.title': 'Block not found anymore',\n 'integrations.compositeSummary.gone.description': 'The summary was not applied.',\n 'integrations.compositeSummary.done': 'Summary created',\n\n // composite-ai: “Create rendition” / “Regenerate (replace)”\n 'integrations.rendition.action': 'Create rendition',\n 'integrations.rendition.regenerate': 'Regenerate (replace)',\n 'integrations.rendition.running': 'Creating rendition…',\n 'integrations.rendition.done': 'Rendition created',\n 'integrations.rendition.failed': 'Rendition failed',\n 'integrations.rendition.noSource': 'The block has no stored source',\n 'integrations.rendition.notAccepted': 'A rendition cannot be inserted here',\n 'integrations.rendition.empty.title': 'Empty result',\n 'integrations.rendition.empty.description': 'The rendition was not applied.',\n 'integrations.rendition.gone.title': 'Block not found anymore',\n 'integrations.rendition.gone.description': 'The rendition was not applied.',\n 'integrations.rendition.title.transcription': 'Transcript',\n 'integrations.rendition.title.pdf-text': 'Full text',\n 'integrations.rendition.title.ocr': 'Full text (OCR)',\n 'integrations.rendition.title.description': 'Description',\n 'integrations.rendition.editedWarning.title': 'The rendition was edited',\n 'integrations.rendition.editedWarning.description': 'Regenerating replaces your changes.',\n 'integrations.rendition.editedWarning.confirm': 'Replace anyway',\n 'integrations.rendition.warnings.title': 'Notes on the rendition',\n 'integrations.rendition.warning.ocr-unavailable': 'OCR is unavailable; only the PDF text layer was read.',\n 'integrations.rendition.warning.crossref-unavailable': 'Crossref was unreachable; the citation data comes from the model.',\n 'integrations.rendition.warning.pages-truncated': 'Only the first pages were read.',\n 'integrations.rendition.warning.ocr-truncated': 'OCR read only the first pages (one model call per page); the rest is missing.',\n 'integrations.rendition.warning.bibliography-failed': 'No citation data was found for this source.',\n // Label that stands for a page break of a PDF inside the rendition's text (document content, not UI chrome).\n 'integrations.rendition.page': 'p. {n}',\n\n // composite-ai: “Fetch bibliography”\n 'integrations.bibliographyFetch.action': 'Fetch bibliography',\n 'integrations.bibliographyFetch.running': 'Fetching bibliography…',\n 'integrations.bibliographyFetch.done': 'Bibliography applied',\n 'integrations.bibliographyFetch.failed': 'Bibliography could not be fetched',\n 'integrations.bibliographyFetch.invalidDoi': 'The DOI is invalid',\n 'integrations.bibliographyFetch.noSource': 'The block has neither a DOI nor a stored PDF',\n 'integrations.bibliographyFetch.empty': 'No bibliographic data was found',\n 'integrations.bibliographyFetch.gone.title': 'Block not found anymore',\n 'integrations.bibliographyFetch.gone.description': 'The bibliographic data was not applied.',\n 'integrations.bibliographyFetch.crossrefUnavailable.title': 'Crossref unreachable',\n 'integrations.bibliographyFetch.crossrefUnavailable.description': 'The bibliographic data comes from the model and should be checked.',\n\n // composite-media\n 'integrations.compositeMedia.import': 'Import file',\n 'integrations.sourceReplace.action': 'Replace source',\n 'integrations.sourceReplace.done': 'Source replaced',\n 'integrations.sourceReplace.failed': 'Source could not be replaced',\n 'integrations.sourceReplace.gone': 'Block not found anymore',\n\n // transcript-ai: “Clean up transcript”\n 'integrations.transcriptCleanup.action': 'Clean up transcript',\n 'integrations.transcriptCleanup.actionAi': 'Clean up transcript (AI)',\n 'integrations.transcriptCleanup.noSegments': 'No speaker segments with text found',\n 'integrations.transcriptCleanup.failed': 'Clean-up failed',\n 'integrations.transcriptCleanup.skipped.title': '{skipped} of {total} segments were not cleaned up',\n 'integrations.transcriptCleanup.skipped.description': 'Too long, or the AI response was unusable.',\n 'integrations.transcriptCleanup.stale.title': '{n} segments were changed in the meantime',\n 'integrations.transcriptCleanup.stale.description': 'They stay unchanged.',\n 'integrations.transcriptCleanup.open.title': 'The segments still have open AI changes',\n 'integrations.transcriptCleanup.open.description': 'Accept or discard them first, then clean up again.',\n 'integrations.transcriptCleanup.nothing.title': 'Nothing to clean up',\n 'integrations.transcriptCleanup.nothing.description': 'The AI did not suggest any changes.',\n}\n"],"mappings":";AAEA,MAAa,KAAyC;CAEpD,qCAAqC;CACrC,0CAA0C;CAC1C,qCAAqC;CACrC,0CAA0C;CAC1C,gDAAgD;CAChD,yCAAyC;CACzC,+CAA+C;CAG/C,uCAAuC;CACvC,wCAAwC;CACxC,qCAAqC;CACrC,uCAAuC;CACvC,4CAA4C;CAC5C,4CAA4C;CAC5C,kDAAkD;CAClD,2CAA2C;CAC3C,iDAAiD;CAGjD,wCAAwC;CACxC,wCAAwC;CACxC,6CAA6C;CAC7C,mDAAmD;CACnD,4CAA4C;CAC5C,kDAAkD;CAClD,sCAAsC;CAGtC,iCAAiC;CACjC,qCAAqC;CACrC,kCAAkC;CAClC,+BAA+B;CAC/B,iCAAiC;CACjC,mCAAmC;CACnC,sCAAsC;CACtC,sCAAsC;CACtC,4CAA4C;CAC5C,qCAAqC;CACrC,2CAA2C;CAC3C,8CAA8C;CAC9C,yCAAyC;CACzC,oCAAoC;CACpC,4CAA4C;CAC5C,8CAA8C;CAC9C,oDAAoD;CACpD,gDAAgD;CAChD,yCAAyC;CACzC,kDAAkD;CAClD,uDAAuD;CACvD,kDAAkD;CAClD,gDAAgD;CAChD,sDAAsD;CAEtD,+BAA+B;CAG/B,yCAAyC;CACzC,0CAA0C;CAC1C,uCAAuC;CACvC,yCAAyC;CACzC,6CAA6C;CAC7C,2CAA2C;CAC3C,wCAAwC;CACxC,6CAA6C;CAC7C,mDAAmD;CACnD,4DAA4D;CAC5D,kEAAkE;CAGlE,sCAAsC;CACtC,qCAAqC;CACrC,mCAAmC;CACnC,qCAAqC;CACrC,mCAAmC;CAGnC,yCAAyC;CACzC,2CAA2C;CAC3C,6CAA6C;CAC7C,yCAAyC;CACzC,gDAAgD;CAChD,sDAAsD;CACtD,8CAA8C;CAC9C,oDAAoD;CACpD,6CAA6C;CAC7C,mDAAmD;CACnD,gDAAgD;CAChD,sDAAsD;AACxD"}
|
|
1
|
+
{"version":3,"file":"integrations.js","names":[],"sources":["../../../src/i18n/en/integrations.ts"],"sourcesContent":["import type { de } from '../de/integrations'\n\nexport const en: { [K in keyof typeof de]: string } = {\n // composite-ai: “Fill block (AI)”\n 'integrations.compositeFill.action': 'Fill block (AI)',\n 'integrations.compositeFill.dataMissing': 'Data for the block is missing',\n 'integrations.compositeFill.failed': 'Filling the block failed',\n 'integrations.compositeFill.empty.title': 'Empty result',\n 'integrations.compositeFill.empty.description': 'The block was not filled.',\n 'integrations.compositeFill.gone.title': 'Block not found anymore',\n 'integrations.compositeFill.gone.description': 'The block was not filled.',\n\n // composite-ai: “Derive (AI)”\n 'integrations.compositeDerive.action': 'Derive (AI)',\n 'integrations.compositeDerive.running': 'Deriving {kind}…',\n 'integrations.compositeDerive.done': '{kind} derived',\n 'integrations.compositeDerive.failed': 'Deriving failed',\n 'integrations.compositeDerive.notAccepted': 'This block cannot be inserted here',\n 'integrations.compositeDerive.empty.title': 'Empty result',\n 'integrations.compositeDerive.empty.description': 'No block was derived.',\n 'integrations.compositeDerive.gone.title': 'Block not found anymore',\n 'integrations.compositeDerive.gone.description': 'The result was not applied.',\n\n // composite-ai: “Generate summary (AI)”\n 'integrations.compositeSummary.action': 'Generate summary (AI)',\n 'integrations.compositeSummary.failed': 'Summary failed',\n 'integrations.compositeSummary.empty.title': 'Empty result',\n 'integrations.compositeSummary.empty.description': 'The summary was not applied.',\n 'integrations.compositeSummary.gone.title': 'Block not found anymore',\n 'integrations.compositeSummary.gone.description': 'The summary was not applied.',\n 'integrations.compositeSummary.done': 'Summary created',\n\n // composite-ai: “Split with AI”\n 'integrations.compositeSplit.ai.children': 'Split into sub-blocks with AI',\n 'integrations.compositeSplit.ai.siblings': 'Split into blocks with AI',\n 'integrations.compositeSplit.changed': 'The AI changed the text, nothing was split',\n 'integrations.compositeSplit.running': 'Splitting block…',\n 'integrations.compositeSplit.failed': 'Splitting failed',\n 'integrations.compositeSplit.notPossible': 'This block cannot be split this way',\n 'integrations.compositeSplit.tooLong': 'The text is too long for AI splitting',\n 'integrations.compositeSplit.gone': 'The block changed in the meantime, nothing was split',\n\n // composite-ai: “Clean up outline (AI)”\n 'integrations.outlineSanitize.label': 'Clean up outline (AI)',\n 'integrations.outlineSanitize.none': 'The document has no headings',\n 'integrations.outlineSanitize.invalid': 'The AI answer was unusable, nothing was changed',\n 'integrations.outlineSanitize.running': 'Cleaning up the outline…',\n 'integrations.outlineSanitize.done': 'Outline cleaned up',\n 'integrations.outlineSanitize.failed': 'Cleaning up the outline failed',\n 'integrations.outlineSanitize.tooLong': 'The outline is too long for the AI',\n 'integrations.outlineSanitize.gone': 'The document changed in the meantime, nothing was changed',\n\n // composite-ai: “Create rendition” / “Regenerate (replace)”\n 'integrations.rendition.action': 'Create rendition',\n 'integrations.rendition.regenerate': 'Regenerate (replace)',\n 'integrations.rendition.running': 'Creating rendition…',\n 'integrations.rendition.done': 'Rendition created',\n 'integrations.rendition.failed': 'Rendition failed',\n 'integrations.rendition.noSource': 'The block has no stored source',\n 'integrations.rendition.notAccepted': 'A rendition cannot be inserted here',\n 'integrations.rendition.empty.title': 'Empty result',\n 'integrations.rendition.empty.description': 'The rendition was not applied.',\n 'integrations.rendition.gone.title': 'Block not found anymore',\n 'integrations.rendition.gone.description': 'The rendition was not applied.',\n 'integrations.rendition.title.transcription': 'Transcript',\n 'integrations.rendition.title.pdf-text': 'Full text',\n 'integrations.rendition.title.ocr': 'Full text (OCR)',\n 'integrations.rendition.title.description': 'Description',\n 'integrations.rendition.editedWarning.title': 'The rendition was edited',\n 'integrations.rendition.editedWarning.description': 'Regenerating replaces your changes.',\n 'integrations.rendition.editedWarning.confirm': 'Replace anyway',\n 'integrations.rendition.warnings.title': 'Notes on the rendition',\n 'integrations.rendition.warning.ocr-unavailable': 'OCR is unavailable; only the PDF text layer was read.',\n 'integrations.rendition.warning.crossref-unavailable': 'Crossref was unreachable; the citation data comes from the model.',\n 'integrations.rendition.warning.pages-truncated': 'Only the first pages were read.',\n 'integrations.rendition.warning.ocr-truncated': 'OCR read only the first pages (one model call per page); the rest is missing.',\n 'integrations.rendition.warning.bibliography-failed': 'No citation data was found for this source.',\n // Label that stands for a page break of a PDF inside the rendition's text (document content, not UI chrome).\n 'integrations.rendition.page': 'p. {n}',\n\n // composite-ai: “Fetch bibliography”\n 'integrations.bibliographyFetch.action': 'Fetch bibliography',\n 'integrations.bibliographyFetch.running': 'Fetching bibliography…',\n 'integrations.bibliographyFetch.done': 'Bibliography applied',\n 'integrations.bibliographyFetch.failed': 'Bibliography could not be fetched',\n 'integrations.bibliographyFetch.invalidDoi': 'The DOI is invalid',\n 'integrations.bibliographyFetch.noSource': 'The block has neither a DOI nor a stored PDF',\n 'integrations.bibliographyFetch.empty': 'No bibliographic data was found',\n 'integrations.bibliographyFetch.gone.title': 'Block not found anymore',\n 'integrations.bibliographyFetch.gone.description': 'The bibliographic data was not applied.',\n 'integrations.bibliographyFetch.crossrefUnavailable.title': 'Crossref unreachable',\n 'integrations.bibliographyFetch.crossrefUnavailable.description': 'The bibliographic data comes from the model and should be checked.',\n\n // composite-media\n 'integrations.compositeMedia.import': 'Import file',\n 'integrations.sourceReplace.action': 'Replace source',\n 'integrations.sourceReplace.done': 'Source replaced',\n 'integrations.sourceReplace.failed': 'Source could not be replaced',\n 'integrations.sourceReplace.gone': 'Block not found anymore',\n\n // transcript-ai: “Clean up transcript”\n 'integrations.transcriptCleanup.action': 'Clean up transcript',\n 'integrations.transcriptCleanup.actionAi': 'Clean up transcript (AI)',\n 'integrations.transcriptCleanup.noSegments': 'No speaker segments with text found',\n 'integrations.transcriptCleanup.failed': 'Clean-up failed',\n 'integrations.transcriptCleanup.skipped.title': '{skipped} of {total} segments were not cleaned up',\n 'integrations.transcriptCleanup.skipped.description': 'Too long, or the AI response was unusable.',\n 'integrations.transcriptCleanup.stale.title': '{n} segments were changed in the meantime',\n 'integrations.transcriptCleanup.stale.description': 'They stay unchanged.',\n 'integrations.transcriptCleanup.open.title': 'The segments still have open AI changes',\n 'integrations.transcriptCleanup.open.description': 'Accept or discard them first, then clean up again.',\n 'integrations.transcriptCleanup.nothing.title': 'Nothing to clean up',\n 'integrations.transcriptCleanup.nothing.description': 'The AI did not suggest any changes.',\n}\n"],"mappings":";AAEA,MAAa,KAAyC;CAEpD,qCAAqC;CACrC,0CAA0C;CAC1C,qCAAqC;CACrC,0CAA0C;CAC1C,gDAAgD;CAChD,yCAAyC;CACzC,+CAA+C;CAG/C,uCAAuC;CACvC,wCAAwC;CACxC,qCAAqC;CACrC,uCAAuC;CACvC,4CAA4C;CAC5C,4CAA4C;CAC5C,kDAAkD;CAClD,2CAA2C;CAC3C,iDAAiD;CAGjD,wCAAwC;CACxC,wCAAwC;CACxC,6CAA6C;CAC7C,mDAAmD;CACnD,4CAA4C;CAC5C,kDAAkD;CAClD,sCAAsC;CAGtC,2CAA2C;CAC3C,2CAA2C;CAC3C,uCAAuC;CACvC,uCAAuC;CACvC,sCAAsC;CACtC,2CAA2C;CAC3C,uCAAuC;CACvC,oCAAoC;CAGpC,sCAAsC;CACtC,qCAAqC;CACrC,wCAAwC;CACxC,wCAAwC;CACxC,qCAAqC;CACrC,uCAAuC;CACvC,wCAAwC;CACxC,qCAAqC;CAGrC,iCAAiC;CACjC,qCAAqC;CACrC,kCAAkC;CAClC,+BAA+B;CAC/B,iCAAiC;CACjC,mCAAmC;CACnC,sCAAsC;CACtC,sCAAsC;CACtC,4CAA4C;CAC5C,qCAAqC;CACrC,2CAA2C;CAC3C,8CAA8C;CAC9C,yCAAyC;CACzC,oCAAoC;CACpC,4CAA4C;CAC5C,8CAA8C;CAC9C,oDAAoD;CACpD,gDAAgD;CAChD,yCAAyC;CACzC,kDAAkD;CAClD,uDAAuD;CACvD,kDAAkD;CAClD,gDAAgD;CAChD,sDAAsD;CAEtD,+BAA+B;CAG/B,yCAAyC;CACzC,0CAA0C;CAC1C,uCAAuC;CACvC,yCAAyC;CACzC,6CAA6C;CAC7C,2CAA2C;CAC3C,wCAAwC;CACxC,6CAA6C;CAC7C,mDAAmD;CACnD,4DAA4D;CAC5D,kEAAkE;CAGlE,sCAAsC;CACtC,qCAAqC;CACrC,mCAAmC;CACnC,qCAAqC;CACrC,mCAAmC;CAGnC,yCAAyC;CACzC,2CAA2C;CAC3C,6CAA6C;CAC7C,yCAAyC;CACzC,gDAAgD;CAChD,sDAAsD;CACtD,8CAA8C;CAC9C,oDAAoD;CACpD,6CAA6C;CAC7C,mDAAmD;CACnD,gDAAgD;CAChD,sDAAsD;AACxD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
//#region src/i18n/en/transfer.ts
|
|
2
|
+
const en = {
|
|
3
|
+
"transfer.copy": "Insert copy",
|
|
4
|
+
"transfer.summary": "Insert summary",
|
|
5
|
+
"transfer.bullets": "Insert bullet points",
|
|
6
|
+
"transfer.summaryTitle": "Summary: {title}",
|
|
7
|
+
"transfer.bulletsTitle": "Bullet points: {title}",
|
|
8
|
+
"transfer.refused": "The block cannot be inserted here",
|
|
9
|
+
"transfer.selfDrop": "A block cannot be dropped onto itself",
|
|
10
|
+
"transfer.running": "Creating {title}…",
|
|
11
|
+
"transfer.done": "{title} inserted",
|
|
12
|
+
"transfer.menu.title": "Insert as …"
|
|
13
|
+
};
|
|
14
|
+
//#endregion
|
|
15
|
+
export { en };
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=transfer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transfer.js","names":[],"sources":["../../../src/i18n/en/transfer.ts"],"sourcesContent":["import type { de } from '../de/transfer'\n\nexport const en: { [K in keyof typeof de]: string } = {\n 'transfer.copy': 'Insert copy',\n 'transfer.summary': 'Insert summary',\n 'transfer.bullets': 'Insert bullet points',\n 'transfer.summaryTitle': 'Summary: {title}',\n 'transfer.bulletsTitle': 'Bullet points: {title}',\n 'transfer.refused': 'The block cannot be inserted here',\n 'transfer.selfDrop': 'A block cannot be dropped onto itself',\n 'transfer.running': 'Creating {title}…',\n 'transfer.done': '{title} inserted',\n 'transfer.menu.title': 'Insert as …',\n}\n"],"mappings":";AAEA,MAAa,KAAyC;CACpD,iBAAiB;CACjB,oBAAoB;CACpB,oBAAoB;CACpB,yBAAyB;CACzB,yBAAyB;CACzB,oBAAoB;CACpB,qBAAqB;CACrB,oBAAoB;CACpB,iBAAiB;CACjB,uBAAuB;AACzB"}
|
package/dist/i18n/en/tree.js
CHANGED
|
@@ -27,6 +27,12 @@ const en = {
|
|
|
27
27
|
"tree.filterText.placeholder": "Filter by title",
|
|
28
28
|
"tree.filterText.clear": "Clear title filter",
|
|
29
29
|
"tree.noMatches": "No matches",
|
|
30
|
+
"tree.basketFilter.label": "Filter by basket",
|
|
31
|
+
"tree.basketFilter.reset": "Reset basket filter",
|
|
32
|
+
"tree.focus.root": "Document",
|
|
33
|
+
"tree.focus.enter": "Focus",
|
|
34
|
+
"tree.focus.leave": "Leave focus",
|
|
35
|
+
"tree.merge": "Merge with next",
|
|
30
36
|
"tree.root.folders": "Folders",
|
|
31
37
|
"tree.root.file": "File as root",
|
|
32
38
|
"tree.root.unavailable": "Only with an open building-block file (setting “Structure: building blocks”).",
|
|
@@ -38,6 +44,7 @@ const en = {
|
|
|
38
44
|
"tree.drop.folderInFolder": "The folder is already in this folder.",
|
|
39
45
|
"tree.drop.blocksOnlyInDocument": "Building blocks can only be moved within the open document.",
|
|
40
46
|
"tree.drop.noBlocksHere": "Building blocks cannot be dropped here.",
|
|
47
|
+
"tree.drop.noTransfer": "This editor does not take building blocks from outside.",
|
|
41
48
|
"tree.drop.blockWithoutId": "This building block has no ID yet and cannot be addressed as a target.",
|
|
42
49
|
"tree.drop.editorClosed": "The editor is no longer open."
|
|
43
50
|
};
|
package/dist/i18n/en/tree.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree.js","names":[],"sources":["../../../src/i18n/en/tree.ts"],"sourcesContent":["import type { de } from '../de/tree'\n\nexport const en: { [K in keyof typeof de]: string } = {\n 'tree.aria': 'Documents',\n 'tree.loading': 'Loading…',\n 'tree.loadFailed': 'Documents could not be loaded',\n 'tree.empty': 'No documents yet',\n 'tree.rootFallback': 'Document',\n 'tree.untitled': '(untitled)',\n 'tree.summary': 'Has a summary',\n 'tree.filter.show': 'Show',\n 'tree.filter.title': 'Filter view',\n 'tree.filter.reset': 'Reset filter',\n 'tree.add': 'Add',\n 'tree.delete': 'Delete',\n 'tree.menu.newDocument': 'New document',\n 'tree.menu.newFolder': 'New folder',\n 'tree.menu.newSubfolder': 'New subfolder',\n 'tree.menu.newCompositeFolder': 'New folder block',\n 'tree.menu.importFile': 'Import file…',\n 'tree.menu.rename': 'Rename',\n 'tree.folder.name': 'Folder name',\n 'tree.folder.placeholder': 'New folder',\n 'tree.folder.placeholderIn': 'New folder in {parent}',\n 'tree.folder.renameFailed': 'Folder not renamed',\n 'tree.removed': 'Document deleted',\n 'tree.undo': 'Undo',\n 'tree.filterText.placeholder': 'Filter by title',\n 'tree.filterText.clear': 'Clear title filter',\n 'tree.noMatches': 'No matches',\n 'tree.root.folders': 'Folders',\n 'tree.root.file': 'File as root',\n 'tree.root.unavailable': 'Only with an open building-block file (setting “Structure: building blocks”).',\n\n 'tree.drop.nothing': 'Nothing is being dragged.',\n 'tree.drop.noDocumentMove': 'Documents and folders cannot be moved inside the open document.',\n 'tree.drop.foldersOnly': 'Only folders accept entries.',\n 'tree.drop.documentInFolder': 'The document is already in this folder.',\n 'tree.drop.folderIntoSelf': 'A folder cannot be moved into itself or one of its subfolders.',\n 'tree.drop.folderInFolder': 'The folder is already in this folder.',\n 'tree.drop.blocksOnlyInDocument': 'Building blocks can only be moved within the open document.',\n 'tree.drop.noBlocksHere': 'Building blocks cannot be dropped here.',\n 'tree.drop.blockWithoutId': 'This building block has no ID yet and cannot be addressed as a target.',\n 'tree.drop.editorClosed': 'The editor is no longer open.',\n}\n"],"mappings":";AAEA,MAAa,KAAyC;CACpD,aAAa;CACb,gBAAgB;CAChB,mBAAmB;CACnB,cAAc;CACd,qBAAqB;CACrB,iBAAiB;CACjB,gBAAgB;CAChB,oBAAoB;CACpB,qBAAqB;CACrB,qBAAqB;CACrB,YAAY;CACZ,eAAe;CACf,yBAAyB;CACzB,uBAAuB;CACvB,0BAA0B;CAC1B,gCAAgC;CAChC,wBAAwB;CACxB,oBAAoB;CACpB,oBAAoB;CACpB,2BAA2B;CAC3B,6BAA6B;CAC7B,4BAA4B;CAC5B,gBAAgB;CAChB,aAAa;CACb,+BAA+B;CAC/B,yBAAyB;CACzB,kBAAkB;CAClB,qBAAqB;CACrB,kBAAkB;CAClB,yBAAyB;CAEzB,qBAAqB;CACrB,4BAA4B;CAC5B,yBAAyB;CACzB,8BAA8B;CAC9B,4BAA4B;CAC5B,4BAA4B;CAC5B,kCAAkC;CAClC,0BAA0B;CAC1B,4BAA4B;CAC5B,0BAA0B;AAC5B"}
|
|
1
|
+
{"version":3,"file":"tree.js","names":[],"sources":["../../../src/i18n/en/tree.ts"],"sourcesContent":["import type { de } from '../de/tree'\n\nexport const en: { [K in keyof typeof de]: string } = {\n 'tree.aria': 'Documents',\n 'tree.loading': 'Loading…',\n 'tree.loadFailed': 'Documents could not be loaded',\n 'tree.empty': 'No documents yet',\n 'tree.rootFallback': 'Document',\n 'tree.untitled': '(untitled)',\n 'tree.summary': 'Has a summary',\n 'tree.filter.show': 'Show',\n 'tree.filter.title': 'Filter view',\n 'tree.filter.reset': 'Reset filter',\n 'tree.add': 'Add',\n 'tree.delete': 'Delete',\n 'tree.menu.newDocument': 'New document',\n 'tree.menu.newFolder': 'New folder',\n 'tree.menu.newSubfolder': 'New subfolder',\n 'tree.menu.newCompositeFolder': 'New folder block',\n 'tree.menu.importFile': 'Import file…',\n 'tree.menu.rename': 'Rename',\n 'tree.folder.name': 'Folder name',\n 'tree.folder.placeholder': 'New folder',\n 'tree.folder.placeholderIn': 'New folder in {parent}',\n 'tree.folder.renameFailed': 'Folder not renamed',\n 'tree.removed': 'Document deleted',\n 'tree.undo': 'Undo',\n 'tree.filterText.placeholder': 'Filter by title',\n 'tree.filterText.clear': 'Clear title filter',\n 'tree.noMatches': 'No matches',\n 'tree.basketFilter.label': 'Filter by basket',\n 'tree.basketFilter.reset': 'Reset basket filter',\n 'tree.focus.root': 'Document',\n 'tree.focus.enter': 'Focus',\n 'tree.focus.leave': 'Leave focus',\n 'tree.merge': 'Merge with next',\n 'tree.root.folders': 'Folders',\n 'tree.root.file': 'File as root',\n 'tree.root.unavailable': 'Only with an open building-block file (setting “Structure: building blocks”).',\n\n 'tree.drop.nothing': 'Nothing is being dragged.',\n 'tree.drop.noDocumentMove': 'Documents and folders cannot be moved inside the open document.',\n 'tree.drop.foldersOnly': 'Only folders accept entries.',\n 'tree.drop.documentInFolder': 'The document is already in this folder.',\n 'tree.drop.folderIntoSelf': 'A folder cannot be moved into itself or one of its subfolders.',\n 'tree.drop.folderInFolder': 'The folder is already in this folder.',\n 'tree.drop.blocksOnlyInDocument': 'Building blocks can only be moved within the open document.',\n 'tree.drop.noBlocksHere': 'Building blocks cannot be dropped here.',\n 'tree.drop.noTransfer': 'This editor does not take building blocks from outside.',\n 'tree.drop.blockWithoutId': 'This building block has no ID yet and cannot be addressed as a target.',\n 'tree.drop.editorClosed': 'The editor is no longer open.',\n}\n"],"mappings":";AAEA,MAAa,KAAyC;CACpD,aAAa;CACb,gBAAgB;CAChB,mBAAmB;CACnB,cAAc;CACd,qBAAqB;CACrB,iBAAiB;CACjB,gBAAgB;CAChB,oBAAoB;CACpB,qBAAqB;CACrB,qBAAqB;CACrB,YAAY;CACZ,eAAe;CACf,yBAAyB;CACzB,uBAAuB;CACvB,0BAA0B;CAC1B,gCAAgC;CAChC,wBAAwB;CACxB,oBAAoB;CACpB,oBAAoB;CACpB,2BAA2B;CAC3B,6BAA6B;CAC7B,4BAA4B;CAC5B,gBAAgB;CAChB,aAAa;CACb,+BAA+B;CAC/B,yBAAyB;CACzB,kBAAkB;CAClB,2BAA2B;CAC3B,2BAA2B;CAC3B,mBAAmB;CACnB,oBAAoB;CACpB,oBAAoB;CACpB,cAAc;CACd,qBAAqB;CACrB,kBAAkB;CAClB,yBAAyB;CAEzB,qBAAqB;CACrB,4BAA4B;CAC5B,yBAAyB;CACzB,8BAA8B;CAC9B,4BAA4B;CAC5B,4BAA4B;CAC5B,kCAAkC;CAClC,0BAA0B;CAC1B,wBAAwB;CACxB,4BAA4B;CAC5B,0BAA0B;AAC5B"}
|
package/dist/i18n/en.js
CHANGED
|
@@ -16,6 +16,7 @@ import { en as en$15 } from "./en/mentions.js";
|
|
|
16
16
|
import { en as en$16 } from "./en/integrations.js";
|
|
17
17
|
import { en as en$17 } from "./en/markdown.js";
|
|
18
18
|
import { en as en$18 } from "./en/palette.js";
|
|
19
|
+
import { en as en$19 } from "./en/transfer.js";
|
|
19
20
|
//#region src/i18n/en.ts
|
|
20
21
|
/** The English catalog: the same keys as `de`, checked per area file. */
|
|
21
22
|
const en = {
|
|
@@ -36,7 +37,8 @@ const en = {
|
|
|
36
37
|
...en$15,
|
|
37
38
|
...en$16,
|
|
38
39
|
...en$17,
|
|
39
|
-
...en$18
|
|
40
|
+
...en$18,
|
|
41
|
+
...en$19
|
|
40
42
|
};
|
|
41
43
|
//#endregion
|
|
42
44
|
export { en };
|
package/dist/i18n/en.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en.js","names":["common","toolbar","block","settings","ai","comments","authors","composites","media","themes","tree","transcript","tables","outline","mentions","integrations","markdown","palette"],"sources":["../../src/i18n/en.ts"],"sourcesContent":["import { en as common } from './en/common'\nimport { en as toolbar } from './en/toolbar'\nimport { en as block } from './en/block'\nimport { en as settings } from './en/settings'\nimport { en as ai } from './en/ai'\nimport { en as comments } from './en/comments'\nimport { en as authors } from './en/authors'\nimport { en as composites } from './en/composites'\nimport { en as media } from './en/media'\nimport { en as themes } from './en/themes'\nimport { en as tree } from './en/tree'\nimport { en as transcript } from './en/transcript'\nimport { en as tables } from './en/tables'\nimport { en as outline } from './en/outline'\nimport { en as mentions } from './en/mentions'\nimport { en as integrations } from './en/integrations'\nimport { en as markdown } from './en/markdown'\nimport { en as palette } from './en/palette'\nimport type { de } from './de'\n\n/** The English catalog: the same keys as `de`, checked per area file. */\nexport const en: { [K in keyof typeof de]: string } = {\n ...common,\n ...toolbar,\n ...block,\n ...settings,\n ...ai,\n ...comments,\n ...authors,\n ...composites,\n ...media,\n ...themes,\n ...tree,\n ...transcript,\n ...tables,\n ...outline,\n ...mentions,\n ...integrations,\n ...markdown,\n ...palette,\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"en.js","names":["common","toolbar","block","settings","ai","comments","authors","composites","media","themes","tree","transcript","tables","outline","mentions","integrations","markdown","palette","transfer"],"sources":["../../src/i18n/en.ts"],"sourcesContent":["import { en as common } from './en/common'\nimport { en as toolbar } from './en/toolbar'\nimport { en as block } from './en/block'\nimport { en as settings } from './en/settings'\nimport { en as ai } from './en/ai'\nimport { en as comments } from './en/comments'\nimport { en as authors } from './en/authors'\nimport { en as composites } from './en/composites'\nimport { en as media } from './en/media'\nimport { en as themes } from './en/themes'\nimport { en as tree } from './en/tree'\nimport { en as transcript } from './en/transcript'\nimport { en as tables } from './en/tables'\nimport { en as outline } from './en/outline'\nimport { en as mentions } from './en/mentions'\nimport { en as integrations } from './en/integrations'\nimport { en as markdown } from './en/markdown'\nimport { en as palette } from './en/palette'\nimport { en as transfer } from './en/transfer'\nimport type { de } from './de'\n\n/** The English catalog: the same keys as `de`, checked per area file. */\nexport const en: { [K in keyof typeof de]: string } = {\n ...common,\n ...toolbar,\n ...block,\n ...settings,\n ...ai,\n ...comments,\n ...authors,\n ...composites,\n ...media,\n ...themes,\n ...tree,\n ...transcript,\n ...tables,\n ...outline,\n ...mentions,\n ...integrations,\n ...markdown,\n ...palette,\n ...transfer,\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAsBA,MAAa,KAAyC;CACpD,GAAGA;CACH,GAAGC;CACH,GAAGC;CACH,GAAGC;CACH,GAAGC;CACH,GAAGC;CACH,GAAGC;CACH,GAAGC;CACH,GAAGC;CACH,GAAGC;CACH,GAAGC;CACH,GAAGC;CACH,GAAGC;CACH,GAAGC;CACH,GAAGC;CACH,GAAGC;CACH,GAAGC;CACH,GAAGC;CACH,GAAGC;AACL"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
import { AI_LIMITS } from "../../features/ai/protocol/tasks.js";
|
|
1
2
|
import { aiBlockDataOf, aiContextOf } from "../../core/pipeline.js";
|
|
2
3
|
import { captureRange, releaseRanges, resolveRange } from "../../core/doc-anchors.js";
|
|
3
4
|
import "../../features/composites/nodes.js";
|
|
4
5
|
import { compositeAiBrief } from "../../features/composites/ai-brief.js";
|
|
5
|
-
import { AI_LIMITS } from "../../features/ai/protocol/tasks.js";
|
|
6
6
|
import { aiApplyFailure, documentMarkdown } from "../../features/ai/ai-apply.js";
|
|
7
7
|
import { startAiReview } from "../../features/ai/ai-review.js";
|
|
8
8
|
import { notifyAiRateLimited } from "../../features/ai/rate-limit.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { AI_LIMITS } from "../../features/ai/protocol/tasks.js";
|
|
1
2
|
import { parseBlocks } from "../../core/pipeline.js";
|
|
2
3
|
import { captureRange, releaseRanges, resolveRange } from "../../core/doc-anchors.js";
|
|
3
4
|
import "../../features/composites/nodes.js";
|
|
4
|
-
import { AI_LIMITS } from "../../features/ai/protocol/tasks.js";
|
|
5
5
|
import { notifyAiRateLimited } from "../../features/ai/rate-limit.js";
|
|
6
6
|
import { postAiSse } from "../../features/ai/ai-sse.js";
|
|
7
7
|
import { Fragment } from "@tiptap/pm/model";
|
|
@@ -4,6 +4,8 @@ import { Notifier } from "../../core/notify.js";
|
|
|
4
4
|
import { ModelRef } from "../../core/backend-types.js";
|
|
5
5
|
import "../../features/ai/index.js";
|
|
6
6
|
import { CompositeKind } from "../../features/composites/kinds.js";
|
|
7
|
+
import { Derivation } from "../../features/composites/derivation.js";
|
|
8
|
+
import "../../features/composites/schema.js";
|
|
7
9
|
import "../../features/composites/index.js";
|
|
8
10
|
import { Editor } from "@tiptap/core";
|
|
9
11
|
import { Node as Node$1 } from "@tiptap/pm/model";
|
|
@@ -14,6 +16,25 @@ export declare const derivableKindsOf: (editor: Editor) => CompositeKind[];
|
|
|
14
16
|
export declare const isDerivableSource: (editor: Editor, node: Node$1) => boolean;
|
|
15
17
|
/** Whether a Baustein of `kindId` may be inserted right after the Baustein at `pos` (the same guards as creating it there). */
|
|
16
18
|
export declare function canDeriveAfter(editor: Editor, pos: number, kindId: string): boolean;
|
|
19
|
+
/** Drops the derived Baustein `id` again, unless its body got content meanwhile (the user may have started writing in it). */
|
|
20
|
+
export declare function discardDerived(editor: Editor, id: string): void;
|
|
21
|
+
/**
|
|
22
|
+
* The write-back half of every derivation: parses the streamed `markdown` through the block pipeline and replaces the
|
|
23
|
+
* body of the (still empty) derived Baustein `id` with it, in one transaction together with the hash of exactly that
|
|
24
|
+
* body as `outputHash` (kept next to the `derivation` the Baustein already carries, else `options.derivation`; a Baustein
|
|
25
|
+
* with neither only gets its body), so one
|
|
26
|
+
* undo step removes both. An empty result calls `options.discard` and shows the „Leeres Ergebnis“ notice; a Baustein
|
|
27
|
+
* that vanished or no longer takes the body shows „nicht mehr gefunden“; on success the Baustein is revealed and
|
|
28
|
+
* `options.done` shown as success notice. The Baustein is found again by its block id, so edits while the model ran do
|
|
29
|
+
* not misplace the result. Returns whether the body was written.
|
|
30
|
+
*/
|
|
31
|
+
export declare function writeDerivedBody(editor: Editor, id: string, markdown: string, options: {
|
|
32
|
+
derivation?: Derivation;
|
|
33
|
+
discard: () => void;
|
|
34
|
+
notify: Notifier;
|
|
35
|
+
t: Translate;
|
|
36
|
+
done: string;
|
|
37
|
+
}): boolean;
|
|
17
38
|
/**
|
|
18
39
|
* „Ableiten (KI) → <Art>“: inserts a sibling Baustein of kind `kindId` right after the Baustein at `pos`, titled
|
|
19
40
|
* „<Art>: <Quelle>“, whose `meta.derivation` points back at the source block (`from.block`, method `ai:<kindId>`, the
|
|
@@ -24,6 +24,67 @@ function canDeriveAfter(editor, pos, kindId) {
|
|
|
24
24
|
attrs: { kind: kindId }
|
|
25
25
|
});
|
|
26
26
|
}
|
|
27
|
+
/** Drops the derived Baustein `id` again, unless its body got content meanwhile (the user may have started writing in it). */
|
|
28
|
+
function discardDerived(editor, id) {
|
|
29
|
+
const found = editor.isDestroyed ? null : findBlockById(editor.state.doc, id);
|
|
30
|
+
if (!found) return;
|
|
31
|
+
if (Array.from({ length: found.node.childCount - 3 }, (_, index) => found.node.child(3 + index)).some((child) => child.textContent.trim() || child.type.name !== "paragraph")) return;
|
|
32
|
+
editor.view.dispatch(editor.state.tr.delete(found.pos, found.pos + found.node.nodeSize));
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* The write-back half of every derivation: parses the streamed `markdown` through the block pipeline and replaces the
|
|
36
|
+
* body of the (still empty) derived Baustein `id` with it, in one transaction together with the hash of exactly that
|
|
37
|
+
* body as `outputHash` (kept next to the `derivation` the Baustein already carries, else `options.derivation`; a Baustein
|
|
38
|
+
* with neither only gets its body), so one
|
|
39
|
+
* undo step removes both. An empty result calls `options.discard` and shows the „Leeres Ergebnis“ notice; a Baustein
|
|
40
|
+
* that vanished or no longer takes the body shows „nicht mehr gefunden“; on success the Baustein is revealed and
|
|
41
|
+
* `options.done` shown as success notice. The Baustein is found again by its block id, so edits while the model ran do
|
|
42
|
+
* not misplace the result. Returns whether the body was written.
|
|
43
|
+
*/
|
|
44
|
+
function writeDerivedBody(editor, id, markdown, options) {
|
|
45
|
+
const { derivation, discard, notify, t, done } = options;
|
|
46
|
+
const blocks = markdown.trim() ? parseBlocks(editor, markdown).blocks.map((block) => editor.schema.nodeFromJSON(block)) : [];
|
|
47
|
+
if (!blocks.length) {
|
|
48
|
+
discard();
|
|
49
|
+
notify({
|
|
50
|
+
title: t("integrations.compositeDerive.empty.title"),
|
|
51
|
+
description: t("integrations.compositeDerive.empty.description"),
|
|
52
|
+
kind: "error"
|
|
53
|
+
});
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
const found = findBlockById(editor.state.doc, id);
|
|
57
|
+
if (!found || !found.node.canReplace(3, found.node.childCount, Fragment.from(blocks))) {
|
|
58
|
+
notify({
|
|
59
|
+
title: t("integrations.compositeDerive.gone.title"),
|
|
60
|
+
description: t("integrations.compositeDerive.gone.description"),
|
|
61
|
+
kind: "error"
|
|
62
|
+
});
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
const chromeSize = Array.from({ length: 3 }, (_, index) => found.node.child(index).nodeSize).reduce((sum, size) => sum + size, 0);
|
|
66
|
+
const tr = editor.state.tr.replaceWith(found.pos + 1 + chromeSize, found.pos + found.node.nodeSize - 1, blocks);
|
|
67
|
+
const written = findBlockById(tr.doc, id);
|
|
68
|
+
const stored = derivationOf(written.node) ?? derivation;
|
|
69
|
+
if (stored) tr.setNodeMarkup(written.pos, void 0, {
|
|
70
|
+
...written.node.attrs,
|
|
71
|
+
meta: {
|
|
72
|
+
...written.node.attrs.meta,
|
|
73
|
+
[DERIVATION_KEY]: {
|
|
74
|
+
...stored,
|
|
75
|
+
outputHash: sha256Hex(bodyMarkdown(editor, written.node))
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
editor.view.dispatch(tr);
|
|
80
|
+
editor.commands.revealBlock(id);
|
|
81
|
+
notify({
|
|
82
|
+
title: done,
|
|
83
|
+
kind: "success",
|
|
84
|
+
icon: "i-lucide-git-branch"
|
|
85
|
+
});
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
27
88
|
/**
|
|
28
89
|
* „Ableiten (KI) → <Art>“: inserts a sibling Baustein of kind `kindId` right after the Baustein at `pos`, titled
|
|
29
90
|
* „<Art>: <Quelle>“, whose `meta.derivation` points back at the source block (`from.block`, method `ai:<kindId>`, the
|
|
@@ -85,13 +146,7 @@ async function deriveComposite(editor, pos, kindId, ai, modelRef, notify, t) {
|
|
|
85
146
|
icon: "i-lucide-loader-circle",
|
|
86
147
|
duration: 0
|
|
87
148
|
});
|
|
88
|
-
|
|
89
|
-
const discard = () => {
|
|
90
|
-
const found = editor.isDestroyed ? null : findBlockById(editor.state.doc, id);
|
|
91
|
-
if (!found) return;
|
|
92
|
-
if (Array.from({ length: found.node.childCount - 3 }, (_, index) => found.node.child(3 + index)).some((child) => child.textContent.trim() || child.type.name !== "paragraph")) return;
|
|
93
|
-
editor.view.dispatch(editor.state.tr.delete(found.pos, found.pos + found.node.nodeSize));
|
|
94
|
-
};
|
|
149
|
+
const discard = () => discardDerived(editor, id);
|
|
95
150
|
try {
|
|
96
151
|
const target = findBlockById(editor.state.doc, id);
|
|
97
152
|
const result = target ? await generateCompositeBody(editor, target.pos, ai, modelRef, t, controller.signal) : null;
|
|
@@ -122,45 +177,12 @@ async function deriveComposite(editor, pos, kindId, ai, modelRef, notify, t) {
|
|
|
122
177
|
});
|
|
123
178
|
return;
|
|
124
179
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
discard
|
|
128
|
-
notify
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
kind: "error"
|
|
132
|
-
});
|
|
133
|
-
return;
|
|
134
|
-
}
|
|
135
|
-
const found = findBlockById(editor.state.doc, id);
|
|
136
|
-
if (!found || !found.node.canReplace(3, found.node.childCount, Fragment.from(blocks))) {
|
|
137
|
-
notify({
|
|
138
|
-
title: t("integrations.compositeDerive.gone.title"),
|
|
139
|
-
description: t("integrations.compositeDerive.gone.description"),
|
|
140
|
-
kind: "error"
|
|
141
|
-
});
|
|
142
|
-
return;
|
|
143
|
-
}
|
|
144
|
-
const chromeSize = Array.from({ length: 3 }, (_, index) => found.node.child(index).nodeSize).reduce((sum, size) => sum + size, 0);
|
|
145
|
-
const tr = editor.state.tr.replaceWith(found.pos + 1 + chromeSize, found.pos + found.node.nodeSize - 1, blocks);
|
|
146
|
-
const written = findBlockById(tr.doc, id);
|
|
147
|
-
const stored = derivationOf(written.node) ?? derivation;
|
|
148
|
-
tr.setNodeMarkup(written.pos, void 0, {
|
|
149
|
-
...written.node.attrs,
|
|
150
|
-
meta: {
|
|
151
|
-
...written.node.attrs.meta,
|
|
152
|
-
[DERIVATION_KEY]: {
|
|
153
|
-
...stored,
|
|
154
|
-
outputHash: sha256Hex(bodyMarkdown(editor, written.node))
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
});
|
|
158
|
-
editor.view.dispatch(tr);
|
|
159
|
-
editor.commands.revealBlock(id);
|
|
160
|
-
notify({
|
|
161
|
-
title: t("integrations.compositeDerive.done", { kind: kind.label }),
|
|
162
|
-
kind: "success",
|
|
163
|
-
icon: "i-lucide-git-branch"
|
|
180
|
+
writeDerivedBody(editor, id, result.output, {
|
|
181
|
+
derivation,
|
|
182
|
+
discard,
|
|
183
|
+
notify,
|
|
184
|
+
t,
|
|
185
|
+
done: t("integrations.compositeDerive.done", { kind: kind.label })
|
|
164
186
|
});
|
|
165
187
|
} finally {
|
|
166
188
|
notify.dismiss?.(toastId);
|
|
@@ -168,6 +190,6 @@ async function deriveComposite(editor, pos, kindId, ai, modelRef, notify, t) {
|
|
|
168
190
|
}
|
|
169
191
|
}
|
|
170
192
|
//#endregion
|
|
171
|
-
export { canDeriveAfter, derivableKindsOf, deriveComposite, isDerivableSource };
|
|
193
|
+
export { canDeriveAfter, derivableKindsOf, deriveComposite, discardDerived, isDerivableSource, writeDerivedBody };
|
|
172
194
|
|
|
173
195
|
//# sourceMappingURL=derive.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"derive.js","names":[],"sources":["../../../src/integrations/composite-ai/derive.ts"],"sourcesContent":["import type { Editor, JSONContent } from '@tiptap/core'\nimport { Fragment, type Node as PMNode } from '@tiptap/pm/model'\nimport type { EditorBackend } from '../../core/backend'\nimport { guardsAccept, parseBlocks, sha256Hex } from '../../core'\nimport type { Notifier } from '../../core/notify'\nimport { blockIdOf, findBlockById, newBlockId } from '../../core/schema'\nimport type { Translate } from '../../i18n'\nimport { type ModelRef, notifyAiRateLimited } from '../../features/ai'\nimport { bodyMarkdown, COMPOSITE_CHROME_COUNT, compositeJSON, compositeKind, compositeKindsOf, DERIVATION_KEY, type Derivation, derivationOf } from '../../features/composites/schema'\nimport { generateCompositeBody } from './composite-fill'\n\n/** Kinds a Baustein can be derived into: the ones with an `ai` configuration (their brief drives the generation). */\nexport const derivableKindsOf = (editor: Editor) => compositeKindsOf(editor).filter(kind => kind.ai !== undefined)\n\n/** Whether the Baustein `node` can be the source of a derivation: a composite with a block id (the derivation points at it by id). */\nexport const isDerivableSource = (editor: Editor, node: PMNode) => node.type.name === 'composite' && blockIdOf(node) !== null && derivableKindsOf(editor).length > 0\n\n/** Whether a Baustein of `kindId` may be inserted right after the Baustein at `pos` (the same guards as creating it there). */\nexport function canDeriveAfter(editor: Editor, pos: number, kindId: string): boolean {\n const source = editor.state.doc.nodeAt(pos)\n if (!source) return false\n const $at = editor.state.doc.resolve(pos + source.nodeSize)\n return guardsAccept(editor, $at, { type: 'composite', attrs: { kind: kindId } })\n}\n\n/**\n * „Ableiten (KI) → <Art>“: inserts a sibling Baustein of kind `kindId` right after the Baustein at `pos`, titled\n * „<Art>: <Quelle>“, whose `meta.derivation` points back at the source block (`from.block`, method `ai:<kindId>`, the\n * Markdown hash of the source's body as `inputHash`), generates its body from the source (`generateCompositeBody`; the\n * `aiBlockData` of composites hands the model the source's Markdown) and writes the result directly into the new\n * Baustein — no review, the new Baustein is the proposal. The hash of the written body becomes `outputHash`, so a later\n * edit shows as „bearbeitet“ and a later edit of the source as „Quelle geändert“. The new Baustein is found again by its\n * block id after every await, so edits while the model runs do not misplace the result. When the run fails or yields\n * nothing the still-empty Baustein is removed again. Notices go through `notify`, in the language of `t`.\n */\nexport async function deriveComposite(editor: Editor, pos: number, kindId: string, ai: NonNullable<EditorBackend['ai']>, modelRef: (slot: 'generate') => ModelRef, notify: Notifier, t: Translate): Promise<void> {\n const source = editor.state.doc.nodeAt(pos)\n const sourceId = source && blockIdOf(source)\n const kind = compositeKindsOf(editor).find(candidate => candidate.id === kindId)\n if (source?.type.name !== 'composite' || !sourceId || !kind?.ai) return\n if (!canDeriveAfter(editor, pos, kindId)) {\n notify({ title: t('integrations.compositeDerive.notAccepted'), kind: 'error' })\n return\n }\n\n const sourceKind = compositeKind(compositeKindsOf(editor), String(source.attrs.kind))\n const derivation: Derivation = {\n from: { block: sourceId },\n method: `ai:${kindId}`,\n createdAt: new Date().toISOString(),\n inputHash: sha256Hex(bodyMarkdown(editor, source)),\n outputHash: '',\n }\n const id = newBlockId()\n const json = compositeJSON(kindId)\n const [title, ...rest] = json.content as JSONContent[]\n const text = `${kind.label}: ${source.child(0).textContent.trim() || sourceKind.label}`\n const created: JSONContent = {\n ...json,\n attrs: { ...json.attrs, id, meta: { [DERIVATION_KEY]: derivation } },\n content: [{ ...title!, content: [{ type: 'text', text }] }, ...rest],\n }\n editor.view.dispatch(editor.state.tr.insert(pos + source.nodeSize, editor.schema.nodeFromJSON(created)))\n\n const toastId = `derive-${id}`\n const controller = new AbortController()\n const abort = () => controller.abort()\n editor.on('destroy', abort)\n notify({ id: toastId, title: t('integrations.compositeDerive.running', { kind: kind.label }), kind: 'info', icon: 'i-lucide-loader-circle', duration: 0 })\n\n /** Drops the new Baustein again, unless its body got content meanwhile (the user may have started writing in it). */\n const discard = () => {\n const found = editor.isDestroyed ? null : findBlockById(editor.state.doc, id)\n if (!found) return\n const body = Array.from({ length: found.node.childCount - COMPOSITE_CHROME_COUNT }, (_, index) => found.node.child(COMPOSITE_CHROME_COUNT + index))\n if (body.some(child => child.textContent.trim() || child.type.name !== 'paragraph')) return\n editor.view.dispatch(editor.state.tr.delete(found.pos, found.pos + found.node.nodeSize))\n }\n\n try {\n const target = findBlockById(editor.state.doc, id)\n const result = target ? await generateCompositeBody(editor, target.pos, ai, modelRef, t, controller.signal) : null\n if (!result || result.status === 'aborted' || editor.isDestroyed) {\n if (!editor.isDestroyed) discard()\n return\n }\n if (result.status === 'rate-limited') {\n discard()\n notifyAiRateLimited(notify, t)\n return\n }\n if (result.status === 'data-error') {\n discard()\n notify({ title: t('integrations.compositeFill.dataMissing'), description: result.message, kind: 'error' })\n return\n }\n if (result.status === 'error') {\n discard()\n notify({ title: t('integrations.compositeDerive.failed'), description: result.message, kind: 'error' })\n return\n }\n\n const blocks = result.output.trim() ? parseBlocks(editor, result.output).blocks.map(block => editor.schema.nodeFromJSON(block)) : []\n if (!blocks.length) {\n discard()\n notify({ title: t('integrations.compositeDerive.empty.title'), description: t('integrations.compositeDerive.empty.description'), kind: 'error' })\n return\n }\n const found = findBlockById(editor.state.doc, id)\n if (!found || !found.node.canReplace(COMPOSITE_CHROME_COUNT, found.node.childCount, Fragment.from(blocks))) {\n notify({ title: t('integrations.compositeDerive.gone.title'), description: t('integrations.compositeDerive.gone.description'), kind: 'error' })\n return\n }\n\n // One transaction: body and the hash of exactly that body, so one undo step removes both.\n const chromeSize = Array.from({ length: COMPOSITE_CHROME_COUNT }, (_, index) => found.node.child(index).nodeSize).reduce((sum, size) => sum + size, 0)\n const tr = editor.state.tr.replaceWith(found.pos + 1 + chromeSize, found.pos + found.node.nodeSize - 1, blocks)\n const written = findBlockById(tr.doc, id)!\n const stored = derivationOf(written.node) ?? derivation\n tr.setNodeMarkup(written.pos, undefined, {\n ...written.node.attrs,\n meta: { ...written.node.attrs.meta, [DERIVATION_KEY]: { ...stored, outputHash: sha256Hex(bodyMarkdown(editor, written.node)) } },\n })\n editor.view.dispatch(tr)\n editor.commands.revealBlock(id)\n notify({ title: t('integrations.compositeDerive.done', { kind: kind.label }), kind: 'success', icon: 'i-lucide-git-branch' })\n }\n finally {\n notify.dismiss?.(toastId)\n editor.off('destroy', abort)\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"derive.js","names":[],"sources":["../../../src/integrations/composite-ai/derive.ts"],"sourcesContent":["import type { Editor, JSONContent } from '@tiptap/core'\nimport { Fragment, type Node as PMNode } from '@tiptap/pm/model'\nimport type { EditorBackend } from '../../core/backend'\nimport { guardsAccept, parseBlocks, sha256Hex } from '../../core'\nimport type { Notifier } from '../../core/notify'\nimport { blockIdOf, findBlockById, newBlockId } from '../../core/schema'\nimport type { Translate } from '../../i18n'\nimport { type ModelRef, notifyAiRateLimited } from '../../features/ai'\nimport { bodyMarkdown, COMPOSITE_CHROME_COUNT, compositeJSON, compositeKind, compositeKindsOf, DERIVATION_KEY, type Derivation, derivationOf } from '../../features/composites/schema'\nimport { generateCompositeBody } from './composite-fill'\n\n/** Kinds a Baustein can be derived into: the ones with an `ai` configuration (their brief drives the generation). */\nexport const derivableKindsOf = (editor: Editor) => compositeKindsOf(editor).filter(kind => kind.ai !== undefined)\n\n/** Whether the Baustein `node` can be the source of a derivation: a composite with a block id (the derivation points at it by id). */\nexport const isDerivableSource = (editor: Editor, node: PMNode) => node.type.name === 'composite' && blockIdOf(node) !== null && derivableKindsOf(editor).length > 0\n\n/** Whether a Baustein of `kindId` may be inserted right after the Baustein at `pos` (the same guards as creating it there). */\nexport function canDeriveAfter(editor: Editor, pos: number, kindId: string): boolean {\n const source = editor.state.doc.nodeAt(pos)\n if (!source) return false\n const $at = editor.state.doc.resolve(pos + source.nodeSize)\n return guardsAccept(editor, $at, { type: 'composite', attrs: { kind: kindId } })\n}\n\n/** Drops the derived Baustein `id` again, unless its body got content meanwhile (the user may have started writing in it). */\nexport function discardDerived(editor: Editor, id: string): void {\n const found = editor.isDestroyed ? null : findBlockById(editor.state.doc, id)\n if (!found) return\n const body = Array.from({ length: found.node.childCount - COMPOSITE_CHROME_COUNT }, (_, index) => found.node.child(COMPOSITE_CHROME_COUNT + index))\n if (body.some(child => child.textContent.trim() || child.type.name !== 'paragraph')) return\n editor.view.dispatch(editor.state.tr.delete(found.pos, found.pos + found.node.nodeSize))\n}\n\n/**\n * The write-back half of every derivation: parses the streamed `markdown` through the block pipeline and replaces the\n * body of the (still empty) derived Baustein `id` with it, in one transaction together with the hash of exactly that\n * body as `outputHash` (kept next to the `derivation` the Baustein already carries, else `options.derivation`; a Baustein\n * with neither only gets its body), so one\n * undo step removes both. An empty result calls `options.discard` and shows the „Leeres Ergebnis“ notice; a Baustein\n * that vanished or no longer takes the body shows „nicht mehr gefunden“; on success the Baustein is revealed and\n * `options.done` shown as success notice. The Baustein is found again by its block id, so edits while the model ran do\n * not misplace the result. Returns whether the body was written.\n */\nexport function writeDerivedBody(editor: Editor, id: string, markdown: string, options: { derivation?: Derivation, discard: () => void, notify: Notifier, t: Translate, done: string }): boolean {\n const { derivation, discard, notify, t, done } = options\n const blocks = markdown.trim() ? parseBlocks(editor, markdown).blocks.map(block => editor.schema.nodeFromJSON(block)) : []\n if (!blocks.length) {\n discard()\n notify({ title: t('integrations.compositeDerive.empty.title'), description: t('integrations.compositeDerive.empty.description'), kind: 'error' })\n return false\n }\n const found = findBlockById(editor.state.doc, id)\n if (!found || !found.node.canReplace(COMPOSITE_CHROME_COUNT, found.node.childCount, Fragment.from(blocks))) {\n notify({ title: t('integrations.compositeDerive.gone.title'), description: t('integrations.compositeDerive.gone.description'), kind: 'error' })\n return false\n }\n\n // One transaction: body and the hash of exactly that body, so one undo step removes both.\n const chromeSize = Array.from({ length: COMPOSITE_CHROME_COUNT }, (_, index) => found.node.child(index).nodeSize).reduce((sum, size) => sum + size, 0)\n const tr = editor.state.tr.replaceWith(found.pos + 1 + chromeSize, found.pos + found.node.nodeSize - 1, blocks)\n const written = findBlockById(tr.doc, id)!\n const stored = derivationOf(written.node) ?? derivation\n if (stored) {\n tr.setNodeMarkup(written.pos, undefined, {\n ...written.node.attrs,\n meta: { ...written.node.attrs.meta, [DERIVATION_KEY]: { ...stored, outputHash: sha256Hex(bodyMarkdown(editor, written.node)) } },\n })\n }\n editor.view.dispatch(tr)\n editor.commands.revealBlock(id)\n notify({ title: done, kind: 'success', icon: 'i-lucide-git-branch' })\n return true\n}\n\n/**\n * „Ableiten (KI) → <Art>“: inserts a sibling Baustein of kind `kindId` right after the Baustein at `pos`, titled\n * „<Art>: <Quelle>“, whose `meta.derivation` points back at the source block (`from.block`, method `ai:<kindId>`, the\n * Markdown hash of the source's body as `inputHash`), generates its body from the source (`generateCompositeBody`; the\n * `aiBlockData` of composites hands the model the source's Markdown) and writes the result directly into the new\n * Baustein — no review, the new Baustein is the proposal. The hash of the written body becomes `outputHash`, so a later\n * edit shows as „bearbeitet“ and a later edit of the source as „Quelle geändert“. The new Baustein is found again by its\n * block id after every await, so edits while the model runs do not misplace the result. When the run fails or yields\n * nothing the still-empty Baustein is removed again. Notices go through `notify`, in the language of `t`.\n */\nexport async function deriveComposite(editor: Editor, pos: number, kindId: string, ai: NonNullable<EditorBackend['ai']>, modelRef: (slot: 'generate') => ModelRef, notify: Notifier, t: Translate): Promise<void> {\n const source = editor.state.doc.nodeAt(pos)\n const sourceId = source && blockIdOf(source)\n const kind = compositeKindsOf(editor).find(candidate => candidate.id === kindId)\n if (source?.type.name !== 'composite' || !sourceId || !kind?.ai) return\n if (!canDeriveAfter(editor, pos, kindId)) {\n notify({ title: t('integrations.compositeDerive.notAccepted'), kind: 'error' })\n return\n }\n\n const sourceKind = compositeKind(compositeKindsOf(editor), String(source.attrs.kind))\n const derivation: Derivation = {\n from: { block: sourceId },\n method: `ai:${kindId}`,\n createdAt: new Date().toISOString(),\n inputHash: sha256Hex(bodyMarkdown(editor, source)),\n outputHash: '',\n }\n const id = newBlockId()\n const json = compositeJSON(kindId)\n const [title, ...rest] = json.content as JSONContent[]\n const text = `${kind.label}: ${source.child(0).textContent.trim() || sourceKind.label}`\n const created: JSONContent = {\n ...json,\n attrs: { ...json.attrs, id, meta: { [DERIVATION_KEY]: derivation } },\n content: [{ ...title!, content: [{ type: 'text', text }] }, ...rest],\n }\n editor.view.dispatch(editor.state.tr.insert(pos + source.nodeSize, editor.schema.nodeFromJSON(created)))\n\n const toastId = `derive-${id}`\n const controller = new AbortController()\n const abort = () => controller.abort()\n editor.on('destroy', abort)\n notify({ id: toastId, title: t('integrations.compositeDerive.running', { kind: kind.label }), kind: 'info', icon: 'i-lucide-loader-circle', duration: 0 })\n\n const discard = () => discardDerived(editor, id)\n\n try {\n const target = findBlockById(editor.state.doc, id)\n const result = target ? await generateCompositeBody(editor, target.pos, ai, modelRef, t, controller.signal) : null\n if (!result || result.status === 'aborted' || editor.isDestroyed) {\n if (!editor.isDestroyed) discard()\n return\n }\n if (result.status === 'rate-limited') {\n discard()\n notifyAiRateLimited(notify, t)\n return\n }\n if (result.status === 'data-error') {\n discard()\n notify({ title: t('integrations.compositeFill.dataMissing'), description: result.message, kind: 'error' })\n return\n }\n if (result.status === 'error') {\n discard()\n notify({ title: t('integrations.compositeDerive.failed'), description: result.message, kind: 'error' })\n return\n }\n\n writeDerivedBody(editor, id, result.output, { derivation, discard, notify, t, done: t('integrations.compositeDerive.done', { kind: kind.label }) })\n }\n finally {\n notify.dismiss?.(toastId)\n editor.off('destroy', abort)\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { EditorFeature } from "../../core/feature.js";
|
|
2
2
|
import "../../core/index.js";
|
|
3
3
|
import "../../features/composites/bibliography-command.js";
|
|
4
|
+
import { bulletsTransform, summaryTransform, transferRequest } from "./transfer-transforms.js";
|
|
4
5
|
import { CompositeBodyResult, fillComposite, generateCompositeBody } from "./composite-fill.js";
|
|
5
6
|
import { COMPOSITE_BODY_START, compositeSourceText, summarizeComposite } from "./composite-summary.js";
|
|
6
7
|
import { RenditionOptions, canCreateRendition, canRegenerateRendition, createRendition, regenerateRendition } from "./rendition.js";
|
|
7
|
-
import { canDeriveAfter, derivableKindsOf, deriveComposite, isDerivableSource } from "./derive.js";
|
|
8
|
+
import { canDeriveAfter, derivableKindsOf, deriveComposite, discardDerived, isDerivableSource, writeDerivedBody } from "./derive.js";
|
|
8
9
|
import { canFetchBibliography, doiOf, fetchBibliography } from "./bibliography-fetch.js";
|
|
10
|
+
import { OutlineEntry, OutlineHeading, applyOutline, collectHeadings, parseOutlineResponse, sanitizeOutline } from "./outline-sanitize.js";
|
|
11
|
+
import { bodyUnchanged, splitByInsertedHeadings, splitCompositeWithAi } from "./split.js";
|
|
9
12
|
//#region src/integrations/composite-ai/index.d.ts
|
|
10
13
|
/**
|
|
11
14
|
* AI on composites (requires `composites`, `ai`, `media`): the „Baustein füllen (KI)“ block action (on composites of
|
|
@@ -18,9 +21,11 @@ import { canFetchBibliography, doiOf, fetchBibliography } from "./bibliography-f
|
|
|
18
21
|
* has a heading is inserted as a `section` composite fence, otherwise (and in flat structure) the base AI heading
|
|
19
22
|
* is used. It is the preset's single `formatAiResult` contributor. The base AI feature and the composites feature do
|
|
20
23
|
* not know it. Framework-free: notices go through the surface's `ctx.notify`, the model through the app's
|
|
21
|
-
* `modelProfiles(ctx.app)`.
|
|
24
|
+
* `modelProfiles(ctx.app)`. Also „Mit KI in (Unter-)Bausteine teilen“ (block actions on composites: the model inserts
|
|
25
|
+
* headings, the body is split at them) and „Gliederung bereinigen (KI)“ (⌘K command and block action on headings:
|
|
26
|
+
* repairs the heading outline of the whole document).
|
|
22
27
|
*/
|
|
23
28
|
export declare function compositeAiFeature(): EditorFeature<never>;
|
|
24
29
|
//#endregion
|
|
25
|
-
export { COMPOSITE_BODY_START, type CompositeBodyResult, type RenditionOptions, canCreateRendition, canDeriveAfter, canFetchBibliography, canRegenerateRendition, compositeSourceText, createRendition, derivableKindsOf, deriveComposite, doiOf, fetchBibliography, fillComposite, generateCompositeBody, isDerivableSource, regenerateRendition, summarizeComposite };
|
|
30
|
+
export { COMPOSITE_BODY_START, type CompositeBodyResult, type OutlineEntry, type OutlineHeading, type RenditionOptions, applyOutline, bodyUnchanged, bulletsTransform, canCreateRendition, canDeriveAfter, canFetchBibliography, canRegenerateRendition, collectHeadings, compositeSourceText, createRendition, derivableKindsOf, deriveComposite, discardDerived, doiOf, fetchBibliography, fillComposite, generateCompositeBody, isDerivableSource, parseOutlineResponse, regenerateRendition, sanitizeOutline, splitByInsertedHeadings, splitCompositeWithAi, summarizeComposite, summaryTransform, transferRequest, writeDerivedBody };
|
|
26
31
|
//# sourceMappingURL=index.d.ts.map
|