@ecsplico/editor 3.2.0 → 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 +7 -0
- package/dist/code/CodeSurface.vue.d.ts +3 -3
- package/dist/document/DocumentSurface.vue.d.ts +3 -3
- package/dist/features/ai/protocol/generate.d.ts +1 -1
- package/dist/features/composites/components/CompositeView.js +5 -1
- package/dist/features/composites/components/CompositeView.js.map +1 -1
- package/dist/features/composites/feature.js +12 -1
- package/dist/features/composites/feature.js.map +1 -1
- package/dist/features/composites/index.d.ts +2 -1
- package/dist/features/composites/index.js +2 -1
- 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/nodes.d.ts +1 -0
- package/dist/features/composites/nodes.js +1 -1
- package/dist/features/composites/nodes.js.map +1 -1
- package/dist/features/composites/react/CompositeView.js +4 -1
- package/dist/features/composites/react/CompositeView.js.map +1 -1
- package/dist/i18n/de/composites.js +1 -0
- package/dist/i18n/de/composites.js.map +1 -1
- package/dist/i18n/de/tree.js +1 -0
- package/dist/i18n/de/tree.js.map +1 -1
- package/dist/i18n/de.d.ts +2 -0
- package/dist/i18n/en/composites.js +1 -0
- package/dist/i18n/en/composites.js.map +1 -1
- package/dist/i18n/en/tree.js +1 -0
- package/dist/i18n/en/tree.js.map +1 -1
- package/dist/markdown/MarkdownSurface.vue.d.ts +7 -7
- package/dist/nuxt/module.d.ts +4 -0
- package/dist/server/handlers/ai.d.ts +3 -3
- package/dist/styles/composites.css +10 -1
- package/dist/tree/DocumentTree.js +20 -5
- package/dist/tree/DocumentTree.js.map +1 -1
- package/dist/tree/react/DocumentTree.js +12 -1
- package/dist/tree/react/DocumentTree.js.map +1 -1
- package/dist/tree/tree-host.js +10 -0
- package/dist/tree/tree-host.js.map +1 -1
- package/dist/tree/tree-items.js +1 -0
- package/dist/tree/tree-items.js.map +1 -1
- package/dist/tree/tree-model.js +9 -0
- package/dist/tree/tree-model.js.map +1 -1
- package/dist/vue/AdvancedEditor.vue.d.ts +4 -4
- package/dist/vue/SimpleEditor.vue.d.ts +4 -4
- package/dist/vue/components/EditorSurface.vue.d.ts +4 -4
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodes.js","names":[],"sources":["../../../src/features/composites/nodes.ts"],"sourcesContent":["import type { Editor } from '@tiptap/core'\nimport { type JSONContent, mergeAttributes, Node } from '@tiptap/core'\nimport type { Node as PMNode, ResolvedPos } from '@tiptap/pm/model'\nimport { type EditorState, Selection, TextSelection } from '@tiptap/pm/state'\nimport { editorEntryOf } from '../../core/editor-ui'\nimport { createStore, type Store } from '../../core/store'\nimport { ABILITY, isChromeNode, TEXT_ABILITIES } from '../../core/schema'\nimport type { HeadingConversionScope } from '../../settings'\nimport { compositeFence, withReferencedFenceIds } from './fences'\nimport { type Basket, basketById, defaultBaskets, fallbackBaskets, titleHiddenOf } from './baskets'\nimport { derivationOf } from './derivation'\nimport { flattenCompositesToHeadings, groupHeadingsIntoComposites, headingGroupRange } from './heading-composites'\nimport { type CompositeKind, compositeKind, defaultCompositeKinds, fallbackCompositeKinds } from './kinds'\nimport { BASKET_KEY, keptMeta, TITLE_HIDDEN_KEY } from './meta-keys'\n\n/** Options of the `composite` node: the kinds its `kind` attribute selects from and the baskets its `meta.basket` selects from. */\nexport interface CompositeOptions {\n kinds: readonly CompositeKind[]\n baskets: readonly Basket[]\n}\n\n/** Storage of the `composite` node: mirrors `options.kinds` and `options.baskets` for code that only has the editor. */\nexport interface CompositeStorage {\n kinds: readonly CompositeKind[]\n baskets: readonly Basket[]\n /** Ids of the Bausteine with a hidden title (`meta.titleHidden`) whose title the caret entered; they show it for the rest of the editor session. */\n revealedTitles: Store<ReadonlySet<string>>\n /** Ids of the derived Bausteine (those with a `meta.derivation`) the user opened; every other derived Baustein shows collapsed. */\n expanded: Store<ReadonlySet<string>>\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n composite: {\n /** Insert an empty composite of `kind` after the caret's block (replacing an empty paragraph; at the body start from the composite chrome), caret in its title. */\n insertComposite: (kind?: string) => ReturnType\n /** Wrap the selected blocks into a new composite of `kind`, caret in its title. */\n wrapInComposite: (kind?: string) => ReturnType\n /** Leave the caret's innermost composite: new paragraph right after it (a trailing empty body paragraph is moved there). */\n exitComposite: () => ReturnType\n /** Group headings in the selected blocks (or, without a selection, in `scope`) into composites of `kind`; `recursive` nests every heading level. False when the range holds no heading. */\n convertHeadingsToComposites: (options: { recursive: boolean, scope: HeadingConversionScope, kind?: string }) => ReturnType\n /** Turn composites among the selected blocks (or, without a selection, in `scope`) into headings of their nesting level, with description, tags and meta as text lines; `recursive` flattens every level. False when the range holds no composite. */\n convertCompositesToHeadings: (options: { recursive: boolean, scope: HeadingConversionScope }) => ReturnType\n /** Switch the composite at `pos` (default: the caret's innermost composite) to `kind`; `meta` keeps the target kind's fields plus `derivation` and `bib`. */\n setCompositeKind: (kind: string, pos?: number) => ReturnType\n /** Open the derived Baustein with block id `id` if it is collapsed, collapse it if it is open. */\n toggleCompositeExpanded: (id: string) => ReturnType\n /** Put the composite at `pos` (default: the caret's innermost composite) into the basket `basket` (an id of the editor's baskets; false for an unknown id), or take it out with `null`. */\n setCompositeBasket: (basket: string | null, pos?: number) => ReturnType\n /** Hide (`true`) or show (`false`) the title of the composite at `pos` (default: the caret's innermost composite); showing also ends the caret reveal of its title. */\n setCompositeTitleHidden: (hidden: boolean, pos?: number) => ReturnType\n }\n }\n\n interface Storage {\n composite: CompositeStorage\n }\n}\n\nconst COMPOSITE = 'composite'\nconst TITLE = 'compositeTitle'\nconst DESCRIPTION = 'compositeDescription'\nconst TAGS = 'compositeTags'\n/** Kind of a composite created without an explicit one (also the attribute default). */\nconst DEFAULT_KIND = 'section'\n/** Title, description and tags: the fixed children in front of a composite's body. */\nexport const COMPOSITE_CHROME_COUNT = 3\nconst CHROME_COUNT = COMPOSITE_CHROME_COUNT\n\n/**\n * Composite kinds `editor` was configured with. An editor without the composite node gets the built-in kinds in the\n * language of its surface (the default language without one).\n */\nexport function compositeKindsOf(editor: Editor): readonly CompositeKind[] {\n const configured: readonly CompositeKind[] | undefined = editor.storage.composite?.kinds\n if (configured) return configured\n const entry = editorEntryOf(editor)\n return entry ? defaultCompositeKinds(entry.ctx.t) : fallbackCompositeKinds()\n}\n\n/** Baskets `editor` was configured with (the built-in ones in the default language for an editor without the composite node). */\nexport function compositeBasketsOf(editor: Editor): readonly Basket[] {\n const configured: readonly Basket[] | undefined = editor.storage.composite?.baskets\n if (configured) return configured\n const entry = editorEntryOf(editor)\n return entry ? defaultBaskets(entry.ctx.t) : fallbackBaskets()\n}\n\n/** JSON of a fresh composite of `kind` (empty title/description/tags, hidden meta) with `body`. */\nexport function compositeJSON(kind: string, body: JSONContent[] = [{ type: 'paragraph' }]): JSONContent {\n return { type: COMPOSITE, attrs: { kind }, content: [{ type: TITLE }, { type: DESCRIPTION }, { type: TAGS }, ...body] }\n}\n\n/** Innermost composite around `$pos`: its depth, position and node. */\nexport function compositeAround($pos: ResolvedPos): { depth: number, pos: number, node: PMNode } | null {\n for (let depth = $pos.depth; depth > 0; depth--) {\n const node = $pos.node(depth)\n if (node.type.name === COMPOSITE) return { depth, pos: $pos.before(depth), node }\n }\n return null\n}\n\n/** The composite starting at `pos`, or without `pos` the caret's innermost composite. */\nfunction compositeAt(state: EditorState, pos: number | undefined): { pos: number, node: PMNode } | null {\n if (pos === undefined) return compositeAround(state.selection.$head)\n const node = state.doc.nodeAt(pos)\n return node?.type.name === COMPOSITE ? { pos, node } : null\n}\n\n/** Position right in front of the body (= after the tags row) of the composite whose content starts at `start`. */\nfunction bodyStart(composite: PMNode, start: number): number {\n let pos = start\n for (let i = 0; i < CHROME_COUNT; i++) pos += composite.child(i).nodeSize\n return pos\n}\n\nconst isEmptyParagraph = (node: PMNode) => node.type.name === 'paragraph' && node.content.size === 0\n\n/** The caret's block is an empty paragraph, the last child of a composite whose body has more than this one block. */\nfunction inTrailingEmptyParagraph($head: ResolvedPos): boolean {\n if ($head.depth < 2 || !isEmptyParagraph($head.parent)) return false\n const composite = $head.node($head.depth - 1)\n return composite.type.name === COMPOSITE\n && $head.index($head.depth - 1) === composite.childCount - 1\n && composite.childCount > CHROME_COUNT + 1\n}\n\n/** Nothing typed yet: empty title and description, no tags, body is one empty paragraph. */\nfunction isEmptyComposite(composite: PMNode): boolean {\n const tags: unknown = composite.child(2).attrs.tags\n return composite.child(0).content.size === 0\n && composite.child(1).content.size === 0\n && (!Array.isArray(tags) || tags.length === 0)\n && composite.childCount === CHROME_COUNT + 1\n && isEmptyParagraph(composite.child(CHROME_COUNT))\n}\n\n/** Child range of `parent` a structure conversion works on: the selected blocks (composite chrome excluded), or without a selection the `scope` — for `'heading'` the caret's heading group (`'group'`) or innermost composite (`'flatten'`). */\nfunction structureRange(state: EditorState, scope: HeadingConversionScope, direction: 'group' | 'flatten'): { parent: PMNode, parentDepth: number, parentStart: number, fromIndex: number, toIndex: number } | null {\n const { $from, $to, $head, empty } = state.selection\n if (!empty) {\n const range = $from.blockRange($to, node => node.type.name === 'doc' || node.type.name === COMPOSITE)\n if (!range) return null\n const parent = range.parent\n // The composite chrome (title, description, tags) is never part of the converted blocks.\n const fromIndex = Math.max(range.startIndex, parent.type.name === COMPOSITE ? CHROME_COUNT : 0)\n const toIndex = range.endIndex\n if (fromIndex >= toIndex) return null\n return { parent, parentDepth: range.depth, parentStart: range.$from.start(range.depth), fromIndex, toIndex }\n }\n if (scope === 'container') {\n const found = compositeAround($head)\n if (found) return { parent: found.node, parentDepth: found.depth, parentStart: $head.start(found.depth), fromIndex: CHROME_COUNT, toIndex: found.node.childCount }\n return { parent: state.doc, parentDepth: 0, parentStart: 0, fromIndex: 0, toIndex: state.doc.childCount }\n }\n if (scope === 'heading') {\n if (direction === 'flatten') {\n const found = compositeAround($head)\n if (!found) return null\n const depth = found.depth - 1\n const fromIndex = $head.index(depth)\n return { parent: $head.node(depth), parentDepth: depth, parentStart: $head.start(depth), fromIndex, toIndex: fromIndex + 1 }\n }\n let depth = $head.depth\n while (depth > 0 && !['doc', COMPOSITE].includes($head.node(depth - 1).type.name)) depth--\n if (depth === 0) return null\n const parent = $head.node(depth - 1)\n const minIndex = parent.type.name === COMPOSITE ? CHROME_COUNT : 0\n let index = $head.index(depth - 1)\n while (index >= minIndex && parent.child(index).type.name !== 'heading') index--\n if (index < minIndex) return null\n const group = headingGroupRange(parent, index)\n return { parent, parentDepth: depth - 1, parentStart: $head.start(depth - 1), fromIndex: group.from, toIndex: group.to }\n }\n return { parent: state.doc, parentDepth: 0, parentStart: 0, fromIndex: 0, toIndex: state.doc.childCount }\n}\n\n/** Children `fromIndex..toIndex` of `parent` (content starting at `parentStart`) and their document range. */\nfunction rangeBlocks(parent: PMNode, parentStart: number, fromIndex: number, toIndex: number): { blocks: PMNode[], from: number, to: number } {\n const blocks: PMNode[] = []\n let from = parentStart\n let to = parentStart\n parent.forEach((child, _offset, index) => {\n if (index < fromIndex) from += child.nodeSize\n else if (index < toIndex) blocks.push(child)\n if (index < toIndex) to += child.nodeSize\n })\n return { blocks, from, to }\n}\n\n// Revoked inside title and description: they are single lines of text, not containers for blocks.\nconst CHROME_REVOKES = [\n ABILITY.headings, ABILITY.lists, ABILITY.blockquote, ABILITY.codeBlock, ABILITY.rule, ABILITY.composite, ABILITY.transcript,\n ABILITY.media, ABILITY.record, ABILITY.aiGenerate, ABILITY.blockDuplicate,\n]\n\n// Schema-only nodes (no node views): shared by the client editor and the server-side Yjs schema.\n// The client adds the node view of `composite` in `node-views.ts`; `compositeTags` needs none (a hidden data row).\nexport const CompositeNode = Node.create<CompositeOptions, CompositeStorage>({\n name: COMPOSITE,\n // Above StarterKit's default (100) so this Enter / Backspace / Delete keymap runs first,\n // below Paragraph (1000) so the paragraph stays the schema's default block.\n priority: 101,\n group: 'block',\n content: `${TITLE} ${DESCRIPTION} ${TAGS} block+`,\n isolating: true,\n defining: true,\n editorBlockContainer: true,\n abilities: { own: [ABILITY.compositeMeta, ABILITY.compositeSummarize, ABILITY.compositeExport, ABILITY.compositeDerive] },\n addOptions: () => ({ kinds: fallbackCompositeKinds(), baskets: fallbackBaskets() }),\n addStorage() {\n return {\n kinds: this.options.kinds,\n baskets: this.options.baskets,\n expanded: createStore<ReadonlySet<string>>(new Set()),\n revealedTitles: createStore<ReadonlySet<string>>(new Set()),\n }\n },\n // A caret inside the body of a collapsed derived Baustein (also inside nested ones) opens it: typing into hidden text would be blind.\n // A caret inside the title of a Baustein with a hidden title reveals that title for the rest of the session.\n onSelectionUpdate() {\n const { expanded, revealedTitles } = this.storage\n const { $head } = this.editor.state.selection\n let open: Set<string> | null = null\n for (let depth = $head.depth; depth > 0; depth--) {\n const node = $head.node(depth)\n const id: unknown = node.attrs.id\n if (node.type.name !== COMPOSITE || typeof id !== 'string' || !id || $head.index(depth) < CHROME_COUNT) continue\n if (derivationOf(node) && !expanded.get().has(id)) (open ??= new Set(expanded.get())).add(id)\n }\n if (open) expanded.set(open)\n if ($head.parent.type.name === TITLE && $head.depth > 0) {\n const composite = $head.node($head.depth - 1)\n const id: unknown = composite.attrs.id\n if (composite.type.name === COMPOSITE && typeof id === 'string' && id && titleHiddenOf(composite) && !revealedTitles.get().has(id)) {\n revealedTitles.set(new Set(revealedTitles.get()).add(id))\n }\n }\n },\n // Block ids reach the Markdown only for referenced Bausteine (see `fences.ts`): `DocumentMarkdown` runs this on the\n // document JSON before serializing, it drops the ids of unreferenced composites, `renderMarkdown` writes the ones left.\n markdownPrepare: (json, editor) => withReferencedFenceIds(json, compositeKindsOf(editor)),\n addAttributes: () => ({\n kind: {\n default: DEFAULT_KIND,\n // `null` (no `data-kind`, e.g. legacy markup) falls back to the default kind.\n parseHTML: el => el.getAttribute('data-kind') || null,\n renderHTML: attrs => ({ 'data-kind': attrs.kind }),\n },\n meta: {\n default: {},\n parseHTML: (el) => {\n try {\n const value: unknown = JSON.parse(el.getAttribute('data-meta') ?? '{}')\n return value && typeof value === 'object' && !Array.isArray(value) ? value : {}\n }\n catch {\n return {}\n }\n },\n renderHTML: attrs => ({ 'data-meta': JSON.stringify(attrs.meta) }),\n },\n }),\n parseHTML: () => [\n { tag: 'section[data-type=\"composite\"]' },\n // Legacy markup of the block the composite family replaced: no `data-kind`, so it parses as kind `section`.\n { tag: 'section[data-type=\"section\"]' },\n ],\n renderHTML: ({ HTMLAttributes }) => ['section', mergeAttributes(HTMLAttributes, { 'data-type': COMPOSITE }), 0],\n // Fenced: `::: <kind> {meta JSON, only when non-empty}`, then title, description, tags and body blocks as separate\n // Markdown blocks (empty description/tags render nothing), then `:::`. Same child iteration as the blockquote's\n // renderMarkdown (keeps list numbering etc. per sibling index).\n renderMarkdown: (node, h) => {\n const kind = typeof node.attrs?.kind === 'string' && node.attrs.kind ? node.attrs.kind : DEFAULT_KIND\n const meta: unknown = node.attrs?.meta\n const body = (node.content ?? [])\n .map((child, index) => h.renderChild?.(child, index) ?? h.renderChildren([child]))\n .filter(Boolean)\n .join('\\n\\n')\n const id: unknown = node.attrs?.id\n return compositeFence(kind, meta && typeof meta === 'object' ? meta as Record<string, unknown> : {}, body, typeof id === 'string' && id ? id : undefined)\n },\n\n addCommands() {\n return {\n toggleCompositeExpanded: id => () => {\n const { expanded } = this.storage\n const next = new Set(expanded.get())\n if (!next.delete(id)) next.add(id)\n expanded.set(next)\n return true\n },\n\n setCompositeBasket: (basket, pos) => ({ state, tr, dispatch }) => {\n const found = compositeAt(state, pos)\n if (!found) return false\n if (basket !== null && !basketById(this.options.baskets, basket)) return false\n if (dispatch) {\n const { [BASKET_KEY]: _previous, ...meta } = found.node.attrs.meta as Record<string, unknown>\n tr.setNodeMarkup(found.pos, undefined, { ...found.node.attrs, meta: basket === null ? meta : { ...meta, [BASKET_KEY]: basket } })\n }\n return true\n },\n\n setCompositeTitleHidden: (hidden, pos) => ({ state, tr, dispatch }) => {\n const found = compositeAt(state, pos)\n if (!found) return false\n if (dispatch) {\n const { [TITLE_HIDDEN_KEY]: _previous, ...meta } = found.node.attrs.meta as Record<string, unknown>\n tr.setNodeMarkup(found.pos, undefined, { ...found.node.attrs, meta: hidden ? { ...meta, [TITLE_HIDDEN_KEY]: true } : meta })\n const id: unknown = found.node.attrs.id\n const { revealedTitles } = this.storage\n if (!hidden && typeof id === 'string' && revealedTitles.get().has(id)) {\n const next = new Set(revealedTitles.get())\n next.delete(id)\n revealedTitles.set(next)\n }\n }\n return true\n },\n\n insertComposite: (kind = DEFAULT_KIND) => ({ state, tr, dispatch }) => {\n const { $head } = state.selection\n let depth = $head.depth\n while (depth > 0 && !['doc', COMPOSITE].includes($head.node(depth - 1).type.name)) depth--\n let from = $head.pos\n let to = from\n if (depth > 0) {\n const block = $head.node(depth)\n if (isChromeNode(block)) from = to = bodyStart($head.node(depth - 1), $head.start(depth - 1))\n else if (isEmptyParagraph(block)) {\n from = $head.before(depth)\n to = $head.after(depth)\n }\n else from = to = $head.after(depth)\n }\n const $from = state.doc.resolve(from)\n if (!$from.parent.canReplaceWith($from.index(), state.doc.resolve(to).index(), this.type)) return false\n if (dispatch) {\n const json = compositeJSON(kind)\n tr.replaceWith(from, to, state.schema.nodeFromJSON(json))\n tr.setSelection(TextSelection.create(tr.doc, from + 2)).scrollIntoView()\n }\n return true\n },\n\n wrapInComposite: (kind = DEFAULT_KIND) => ({ state, tr, dispatch }) => {\n const { $from, $to } = state.selection\n const range = $from.blockRange($to, node => node.type.name === 'doc' || node.type.name === COMPOSITE)\n if (!range) return false\n if (range.parent.type.name === COMPOSITE && range.startIndex < CHROME_COUNT) return false\n if (!range.parent.canReplaceWith(range.startIndex, range.endIndex, this.type)) return false\n if (dispatch) {\n const { nodes } = state.schema\n const composite = this.type.create({ kind }, [\n nodes[TITLE]!.create(), nodes[DESCRIPTION]!.create(), nodes[TAGS]!.create(),\n ...state.doc.slice(range.start, range.end).content.content,\n ])\n tr.replaceWith(range.start, range.end, composite)\n tr.setSelection(TextSelection.create(tr.doc, range.start + 2)).scrollIntoView()\n }\n return true\n },\n\n setCompositeKind: (kind, pos) => ({ state, tr, dispatch }) => {\n const found = compositeAt(state, pos)\n if (!found) return false\n if (dispatch) {\n const meta = keptMeta(compositeKind(this.options.kinds, kind), found.node.attrs.meta as Record<string, unknown>)\n tr.setNodeMarkup(found.pos, undefined, { ...found.node.attrs, kind, meta })\n }\n return true\n },\n\n exitComposite: () => ({ state, tr, dispatch }) => {\n const { $head } = state.selection\n const composite = compositeAround($head)\n if (!composite) return false\n if (dispatch) {\n // Leaving from a trailing empty paragraph moves it out instead of leaving an empty line behind.\n if ($head.depth === composite.depth + 1 && inTrailingEmptyParagraph($head)) tr.delete($head.before(), $head.after())\n const after = tr.mapping.map($head.after(composite.depth))\n tr.insert(after, state.schema.nodes.paragraph!.create())\n tr.setSelection(TextSelection.create(tr.doc, after + 1)).scrollIntoView()\n }\n return true\n },\n\n convertHeadingsToComposites: ({ recursive, scope, kind = DEFAULT_KIND }) => ({ state, tr, dispatch }) => {\n const range = structureRange(state, scope, 'group')\n if (!range) return false\n const { blocks, from, to } = rangeBlocks(range.parent, range.parentStart, range.fromIndex, range.toIndex)\n const result = groupHeadingsIntoComposites(state.schema, blocks, recursive, kind)\n if (!result) return false\n if (dispatch) {\n tr.replaceWith(from, to, result)\n tr.setSelection(Selection.near(tr.doc.resolve(from), 1)).scrollIntoView()\n }\n return true\n },\n\n convertCompositesToHeadings: ({ recursive, scope }) => ({ state, tr, dispatch }) => {\n const range = structureRange(state, scope, 'flatten')\n if (!range) return false\n const $pos = state.selection.empty ? state.selection.$head : state.selection.$from\n let level = 1\n for (let depth = 1; depth <= range.parentDepth; depth++) {\n if ($pos.node(depth).type.name === COMPOSITE) level++\n }\n const { blocks, from, to } = rangeBlocks(range.parent, range.parentStart, range.fromIndex, range.toIndex)\n const result = flattenCompositesToHeadings(state.schema, blocks, recursive, level, this.options.kinds)\n if (!result) return false\n if (dispatch) {\n tr.replaceWith(from, to, result)\n tr.setSelection(Selection.near(tr.doc.resolve(from), 1)).scrollIntoView()\n }\n return true\n },\n }\n },\n\n addKeyboardShortcuts() {\n return {\n Enter: () => {\n const { $head } = this.editor.state.selection\n const type = $head.parent.type.name\n if (type === TITLE || type === DESCRIPTION) {\n const depth = $head.depth - 1\n const composite = $head.node(depth)\n const start = $head.start(depth)\n return this.editor.commands.command(({ tr }) => {\n const selection = Selection.findFrom(tr.doc.resolve(bodyStart(composite, start)), 1)\n if (!selection) return false\n tr.setSelection(selection).scrollIntoView()\n return true\n })\n }\n if (this.editor.state.selection.empty && inTrailingEmptyParagraph($head)) return this.editor.commands.exitComposite()\n return false\n },\n\n Backspace: () => {\n const { selection } = this.editor.state\n const { $head } = selection\n if (!selection.empty || !$head.parent.isTextblock || $head.parentOffset !== 0 || $head.depth < 2) return false\n const depth = $head.depth - 1\n const composite = $head.node(depth)\n if (composite.type.name !== COMPOSITE) return false\n const start = $head.start(depth)\n const titleEnd = start + composite.child(0).nodeSize - 1\n const type = $head.parent.type.name\n\n if (type === DESCRIPTION) {\n return this.editor.commands.command(({ tr }) => {\n tr.setSelection(TextSelection.create(tr.doc, titleEnd))\n return true\n })\n }\n if (type === TITLE) {\n // Never joins anything into the title; an untouched composite turns back into a paragraph.\n if (!isEmptyComposite(composite)) return true\n return this.editor.commands.command(({ tr, state }) => {\n const from = $head.before(depth)\n tr.replaceWith(from, $head.after(depth), state.schema.nodes.paragraph!.create())\n tr.setSelection(TextSelection.create(tr.doc, from + 1))\n return true\n })\n }\n // First body block: ProseMirror's joinBackward would delete the tags row (an atom) — move into the chrome instead.\n if ($head.index(depth) !== CHROME_COUNT) return false\n return this.editor.commands.command(({ tr }) => {\n if (isEmptyParagraph($head.parent) && composite.childCount > CHROME_COUNT + 1) tr.delete($head.before(), $head.after())\n tr.setSelection(TextSelection.create(tr.doc, titleEnd))\n return true\n })\n },\n\n // No join of the following block into title or description.\n Delete: () => {\n const { selection } = this.editor.state\n const { $head } = selection\n const type = $head.parent.type.name\n return selection.empty && (type === TITLE || type === DESCRIPTION) && $head.parentOffset === $head.parent.content.size\n },\n\n 'Mod-Shift-a': () => this.editor.commands.insertComposite(DEFAULT_KIND),\n }\n },\n})\n\nexport const CompositeTitleNode = Node.create({\n name: TITLE,\n // Above StarterKit's hard break (100), which also binds Mod-Enter.\n priority: 101,\n content: 'inline*',\n defining: true,\n editorChrome: true,\n abilities: { revokes: CHROME_REVOKES },\n // Above the heading's `h2` rule; the second rule reads legacy markup.\n parseHTML: () => [\n { tag: 'h2[data-type=\"composite-title\"]', priority: 60 },\n { tag: 'h2[data-type=\"section-title\"]', priority: 60 },\n ],\n renderHTML: ({ HTMLAttributes }) => ['h2', mergeAttributes(HTMLAttributes, { 'data-type': 'composite-title', class: 'composite-title' }), 0],\n renderMarkdown: (node, h) => `## ${h.renderChildren(node.content ?? [])}`,\n addKeyboardShortcuts() {\n return {\n // Here rather than on CompositeNode: the ability gate swallows every Mod-/Alt- key of the `composite` type where\n // `format.composite` is missing (title, code blocks, speaker segments), but leaving a composite must work everywhere.\n 'Mod-Enter': () => this.editor.commands.exitComposite(),\n }\n },\n})\n\nexport const CompositeDescriptionNode = Node.create({\n name: DESCRIPTION,\n content: 'inline*',\n defining: true,\n editorChrome: true,\n abilities: { revokes: CHROME_REVOKES },\n // Above the paragraph's `p` rule; the second rule reads legacy markup.\n parseHTML: () => [\n { tag: 'p[data-type=\"composite-description\"]', priority: 60 },\n { tag: 'p[data-type=\"section-summary\"]', priority: 60 },\n ],\n renderHTML: ({ HTMLAttributes }) => ['p', mergeAttributes(HTMLAttributes, { 'data-type': 'composite-description', class: 'composite-description' }), 0],\n renderMarkdown: (node, h) => {\n const text = h.renderChildren(node.content ?? [])\n return text ? `> ${text}` : ''\n },\n})\n\nexport const CompositeTagsNode = Node.create({\n name: TAGS,\n atom: true,\n selectable: false,\n draggable: false,\n allowGapCursor: false,\n editorChrome: true,\n abilities: { revokes: [...TEXT_ABILITIES, ABILITY.blockDelete, ABILITY.blockDuplicate] },\n addAttributes: () => ({\n tags: {\n default: [],\n parseHTML: (el) => {\n try {\n const value: unknown = JSON.parse(el.getAttribute('data-tags') ?? '[]')\n return Array.isArray(value) ? value.filter(tag => typeof tag === 'string') : []\n }\n catch {\n return []\n }\n },\n renderHTML: attrs => ({ 'data-tags': JSON.stringify(attrs.tags) }),\n },\n }),\n // The second rule reads legacy markup.\n parseHTML: () => [{ tag: 'div[data-type=\"composite-tags\"]' }, { tag: 'div[data-type=\"section-tags\"]' }],\n renderHTML: ({ HTMLAttributes }) => ['div', mergeAttributes(HTMLAttributes, { 'data-type': 'composite-tags', class: 'composite-tags' })],\n renderMarkdown: (node) => {\n const tags: unknown = node.attrs?.tags\n return Array.isArray(tags) && tags.length ? `Tags: ${tags.map(tag => `#${tag}`).join(' ')}` : ''\n },\n})\n\nexport const CompositeNodes = [CompositeNode, CompositeTitleNode, CompositeDescriptionNode, CompositeTagsNode]\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"nodes.js","names":[],"sources":["../../../src/features/composites/nodes.ts"],"sourcesContent":["import type { Editor } from '@tiptap/core'\nimport { type JSONContent, mergeAttributes, Node } from '@tiptap/core'\nimport type { Node as PMNode, ResolvedPos } from '@tiptap/pm/model'\nimport { type EditorState, Selection, TextSelection } from '@tiptap/pm/state'\nimport { editorEntryOf } from '../../core/editor-ui'\nimport { createStore, type Store } from '../../core/store'\nimport { ABILITY, isChromeNode, TEXT_ABILITIES } from '../../core/schema'\nimport type { HeadingConversionScope } from '../../settings'\nimport { compositeFence, withReferencedFenceIds } from './fences'\nimport { type Basket, basketById, defaultBaskets, fallbackBaskets, titleHiddenOf } from './baskets'\nimport { derivationOf } from './derivation'\nimport { flattenCompositesToHeadings, groupHeadingsIntoComposites, headingGroupRange } from './heading-composites'\nimport { type CompositeKind, compositeKind, defaultCompositeKinds, fallbackCompositeKinds } from './kinds'\nimport { BASKET_KEY, keptMeta, TITLE_HIDDEN_KEY } from './meta-keys'\n\n/** Options of the `composite` node: the kinds its `kind` attribute selects from and the baskets its `meta.basket` selects from. */\nexport interface CompositeOptions {\n kinds: readonly CompositeKind[]\n baskets: readonly Basket[]\n}\n\n/** Storage of the `composite` node: mirrors `options.kinds` and `options.baskets` for code that only has the editor. */\nexport interface CompositeStorage {\n kinds: readonly CompositeKind[]\n baskets: readonly Basket[]\n /** Ids of the Bausteine with a hidden title (`meta.titleHidden`) whose title the caret entered; they show it for the rest of the editor session. */\n revealedTitles: Store<ReadonlySet<string>>\n /** Ids of the derived Bausteine (those with a `meta.derivation`) the user opened; every other derived Baustein shows collapsed. */\n expanded: Store<ReadonlySet<string>>\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n composite: {\n /** Insert an empty composite of `kind` after the caret's block (replacing an empty paragraph; at the body start from the composite chrome), caret in its title. */\n insertComposite: (kind?: string) => ReturnType\n /** Wrap the selected blocks into a new composite of `kind`, caret in its title. */\n wrapInComposite: (kind?: string) => ReturnType\n /** Leave the caret's innermost composite: new paragraph right after it (a trailing empty body paragraph is moved there). */\n exitComposite: () => ReturnType\n /** Group headings in the selected blocks (or, without a selection, in `scope`) into composites of `kind`; `recursive` nests every heading level. False when the range holds no heading. */\n convertHeadingsToComposites: (options: { recursive: boolean, scope: HeadingConversionScope, kind?: string }) => ReturnType\n /** Turn composites among the selected blocks (or, without a selection, in `scope`) into headings of their nesting level, with description, tags and meta as text lines; `recursive` flattens every level. False when the range holds no composite. */\n convertCompositesToHeadings: (options: { recursive: boolean, scope: HeadingConversionScope }) => ReturnType\n /** Switch the composite at `pos` (default: the caret's innermost composite) to `kind`; `meta` keeps the target kind's fields plus `derivation` and `bib`. */\n setCompositeKind: (kind: string, pos?: number) => ReturnType\n /** Open the derived Baustein with block id `id` if it is collapsed, collapse it if it is open. */\n toggleCompositeExpanded: (id: string) => ReturnType\n /** Put the composite at `pos` (default: the caret's innermost composite) into the basket `basket` (an id of the editor's baskets; false for an unknown id), or take it out with `null`. */\n setCompositeBasket: (basket: string | null, pos?: number) => ReturnType\n /** Hide (`true`) or show (`false`) the title of the composite at `pos` (default: the caret's innermost composite); showing also ends the caret reveal of its title. */\n setCompositeTitleHidden: (hidden: boolean, pos?: number) => ReturnType\n }\n }\n\n interface Storage {\n composite: CompositeStorage\n }\n}\n\nconst COMPOSITE = 'composite'\nconst TITLE = 'compositeTitle'\nconst DESCRIPTION = 'compositeDescription'\nconst TAGS = 'compositeTags'\n/** Kind of a composite created without an explicit one (also the attribute default). */\nconst DEFAULT_KIND = 'section'\n/** Title, description and tags: the fixed children in front of a composite's body. */\nexport const COMPOSITE_CHROME_COUNT = 3\nconst CHROME_COUNT = COMPOSITE_CHROME_COUNT\n\n/**\n * Composite kinds `editor` was configured with. An editor without the composite node gets the built-in kinds in the\n * language of its surface (the default language without one).\n */\nexport function compositeKindsOf(editor: Editor): readonly CompositeKind[] {\n const configured: readonly CompositeKind[] | undefined = editor.storage.composite?.kinds\n if (configured) return configured\n const entry = editorEntryOf(editor)\n return entry ? defaultCompositeKinds(entry.ctx.t) : fallbackCompositeKinds()\n}\n\n/** Baskets `editor` was configured with (the built-in ones in the default language for an editor without the composite node). */\nexport function compositeBasketsOf(editor: Editor): readonly Basket[] {\n const configured: readonly Basket[] | undefined = editor.storage.composite?.baskets\n if (configured) return configured\n const entry = editorEntryOf(editor)\n return entry ? defaultBaskets(entry.ctx.t) : fallbackBaskets()\n}\n\n/** JSON of a fresh composite of `kind` (empty title/description/tags, hidden meta) with `body`. */\nexport function compositeJSON(kind: string, body: JSONContent[] = [{ type: 'paragraph' }]): JSONContent {\n return { type: COMPOSITE, attrs: { kind }, content: [{ type: TITLE }, { type: DESCRIPTION }, { type: TAGS }, ...body] }\n}\n\n/** Innermost composite around `$pos`: its depth, position and node. */\nexport function compositeAround($pos: ResolvedPos): { depth: number, pos: number, node: PMNode } | null {\n for (let depth = $pos.depth; depth > 0; depth--) {\n const node = $pos.node(depth)\n if (node.type.name === COMPOSITE) return { depth, pos: $pos.before(depth), node }\n }\n return null\n}\n\n/** The composite starting at `pos`, or without `pos` the caret's innermost composite. */\nexport function compositeAt(state: EditorState, pos: number | undefined): { pos: number, node: PMNode } | null {\n if (pos === undefined) return compositeAround(state.selection.$head)\n const node = state.doc.nodeAt(pos)\n return node?.type.name === COMPOSITE ? { pos, node } : null\n}\n\n/** Position right in front of the body (= after the tags row) of the composite whose content starts at `start`. */\nfunction bodyStart(composite: PMNode, start: number): number {\n let pos = start\n for (let i = 0; i < CHROME_COUNT; i++) pos += composite.child(i).nodeSize\n return pos\n}\n\nconst isEmptyParagraph = (node: PMNode) => node.type.name === 'paragraph' && node.content.size === 0\n\n/** The caret's block is an empty paragraph, the last child of a composite whose body has more than this one block. */\nfunction inTrailingEmptyParagraph($head: ResolvedPos): boolean {\n if ($head.depth < 2 || !isEmptyParagraph($head.parent)) return false\n const composite = $head.node($head.depth - 1)\n return composite.type.name === COMPOSITE\n && $head.index($head.depth - 1) === composite.childCount - 1\n && composite.childCount > CHROME_COUNT + 1\n}\n\n/** Nothing typed yet: empty title and description, no tags, body is one empty paragraph. */\nfunction isEmptyComposite(composite: PMNode): boolean {\n const tags: unknown = composite.child(2).attrs.tags\n return composite.child(0).content.size === 0\n && composite.child(1).content.size === 0\n && (!Array.isArray(tags) || tags.length === 0)\n && composite.childCount === CHROME_COUNT + 1\n && isEmptyParagraph(composite.child(CHROME_COUNT))\n}\n\n/** Child range of `parent` a structure conversion works on: the selected blocks (composite chrome excluded), or without a selection the `scope` — for `'heading'` the caret's heading group (`'group'`) or innermost composite (`'flatten'`). */\nfunction structureRange(state: EditorState, scope: HeadingConversionScope, direction: 'group' | 'flatten'): { parent: PMNode, parentDepth: number, parentStart: number, fromIndex: number, toIndex: number } | null {\n const { $from, $to, $head, empty } = state.selection\n if (!empty) {\n const range = $from.blockRange($to, node => node.type.name === 'doc' || node.type.name === COMPOSITE)\n if (!range) return null\n const parent = range.parent\n // The composite chrome (title, description, tags) is never part of the converted blocks.\n const fromIndex = Math.max(range.startIndex, parent.type.name === COMPOSITE ? CHROME_COUNT : 0)\n const toIndex = range.endIndex\n if (fromIndex >= toIndex) return null\n return { parent, parentDepth: range.depth, parentStart: range.$from.start(range.depth), fromIndex, toIndex }\n }\n if (scope === 'container') {\n const found = compositeAround($head)\n if (found) return { parent: found.node, parentDepth: found.depth, parentStart: $head.start(found.depth), fromIndex: CHROME_COUNT, toIndex: found.node.childCount }\n return { parent: state.doc, parentDepth: 0, parentStart: 0, fromIndex: 0, toIndex: state.doc.childCount }\n }\n if (scope === 'heading') {\n if (direction === 'flatten') {\n const found = compositeAround($head)\n if (!found) return null\n const depth = found.depth - 1\n const fromIndex = $head.index(depth)\n return { parent: $head.node(depth), parentDepth: depth, parentStart: $head.start(depth), fromIndex, toIndex: fromIndex + 1 }\n }\n let depth = $head.depth\n while (depth > 0 && !['doc', COMPOSITE].includes($head.node(depth - 1).type.name)) depth--\n if (depth === 0) return null\n const parent = $head.node(depth - 1)\n const minIndex = parent.type.name === COMPOSITE ? CHROME_COUNT : 0\n let index = $head.index(depth - 1)\n while (index >= minIndex && parent.child(index).type.name !== 'heading') index--\n if (index < minIndex) return null\n const group = headingGroupRange(parent, index)\n return { parent, parentDepth: depth - 1, parentStart: $head.start(depth - 1), fromIndex: group.from, toIndex: group.to }\n }\n return { parent: state.doc, parentDepth: 0, parentStart: 0, fromIndex: 0, toIndex: state.doc.childCount }\n}\n\n/** Children `fromIndex..toIndex` of `parent` (content starting at `parentStart`) and their document range. */\nfunction rangeBlocks(parent: PMNode, parentStart: number, fromIndex: number, toIndex: number): { blocks: PMNode[], from: number, to: number } {\n const blocks: PMNode[] = []\n let from = parentStart\n let to = parentStart\n parent.forEach((child, _offset, index) => {\n if (index < fromIndex) from += child.nodeSize\n else if (index < toIndex) blocks.push(child)\n if (index < toIndex) to += child.nodeSize\n })\n return { blocks, from, to }\n}\n\n// Revoked inside title and description: they are single lines of text, not containers for blocks.\nconst CHROME_REVOKES = [\n ABILITY.headings, ABILITY.lists, ABILITY.blockquote, ABILITY.codeBlock, ABILITY.rule, ABILITY.composite, ABILITY.transcript,\n ABILITY.media, ABILITY.record, ABILITY.aiGenerate, ABILITY.blockDuplicate,\n]\n\n// Schema-only nodes (no node views): shared by the client editor and the server-side Yjs schema.\n// The client adds the node view of `composite` in `node-views.ts`; `compositeTags` needs none (a hidden data row).\nexport const CompositeNode = Node.create<CompositeOptions, CompositeStorage>({\n name: COMPOSITE,\n // Above StarterKit's default (100) so this Enter / Backspace / Delete keymap runs first,\n // below Paragraph (1000) so the paragraph stays the schema's default block.\n priority: 101,\n group: 'block',\n content: `${TITLE} ${DESCRIPTION} ${TAGS} block+`,\n isolating: true,\n defining: true,\n editorBlockContainer: true,\n abilities: { own: [ABILITY.compositeMeta, ABILITY.compositeSummarize, ABILITY.compositeExport, ABILITY.compositeDerive] },\n addOptions: () => ({ kinds: fallbackCompositeKinds(), baskets: fallbackBaskets() }),\n addStorage() {\n return {\n kinds: this.options.kinds,\n baskets: this.options.baskets,\n expanded: createStore<ReadonlySet<string>>(new Set()),\n revealedTitles: createStore<ReadonlySet<string>>(new Set()),\n }\n },\n // A caret inside the body of a collapsed derived Baustein (also inside nested ones) opens it: typing into hidden text would be blind.\n // A caret inside the title of a Baustein with a hidden title reveals that title for the rest of the session.\n onSelectionUpdate() {\n const { expanded, revealedTitles } = this.storage\n const { $head } = this.editor.state.selection\n let open: Set<string> | null = null\n for (let depth = $head.depth; depth > 0; depth--) {\n const node = $head.node(depth)\n const id: unknown = node.attrs.id\n if (node.type.name !== COMPOSITE || typeof id !== 'string' || !id || $head.index(depth) < CHROME_COUNT) continue\n if (derivationOf(node) && !expanded.get().has(id)) (open ??= new Set(expanded.get())).add(id)\n }\n if (open) expanded.set(open)\n if ($head.parent.type.name === TITLE && $head.depth > 0) {\n const composite = $head.node($head.depth - 1)\n const id: unknown = composite.attrs.id\n if (composite.type.name === COMPOSITE && typeof id === 'string' && id && titleHiddenOf(composite) && !revealedTitles.get().has(id)) {\n revealedTitles.set(new Set(revealedTitles.get()).add(id))\n }\n }\n },\n // Block ids reach the Markdown only for referenced Bausteine (see `fences.ts`): `DocumentMarkdown` runs this on the\n // document JSON before serializing, it drops the ids of unreferenced composites, `renderMarkdown` writes the ones left.\n markdownPrepare: (json, editor) => withReferencedFenceIds(json, compositeKindsOf(editor)),\n addAttributes: () => ({\n kind: {\n default: DEFAULT_KIND,\n // `null` (no `data-kind`, e.g. legacy markup) falls back to the default kind.\n parseHTML: el => el.getAttribute('data-kind') || null,\n renderHTML: attrs => ({ 'data-kind': attrs.kind }),\n },\n meta: {\n default: {},\n parseHTML: (el) => {\n try {\n const value: unknown = JSON.parse(el.getAttribute('data-meta') ?? '{}')\n return value && typeof value === 'object' && !Array.isArray(value) ? value : {}\n }\n catch {\n return {}\n }\n },\n renderHTML: attrs => ({ 'data-meta': JSON.stringify(attrs.meta) }),\n },\n }),\n parseHTML: () => [\n { tag: 'section[data-type=\"composite\"]' },\n // Legacy markup of the block the composite family replaced: no `data-kind`, so it parses as kind `section`.\n { tag: 'section[data-type=\"section\"]' },\n ],\n renderHTML: ({ HTMLAttributes }) => ['section', mergeAttributes(HTMLAttributes, { 'data-type': COMPOSITE }), 0],\n // Fenced: `::: <kind> {meta JSON, only when non-empty}`, then title, description, tags and body blocks as separate\n // Markdown blocks (empty description/tags render nothing), then `:::`. Same child iteration as the blockquote's\n // renderMarkdown (keeps list numbering etc. per sibling index).\n renderMarkdown: (node, h) => {\n const kind = typeof node.attrs?.kind === 'string' && node.attrs.kind ? node.attrs.kind : DEFAULT_KIND\n const meta: unknown = node.attrs?.meta\n const body = (node.content ?? [])\n .map((child, index) => h.renderChild?.(child, index) ?? h.renderChildren([child]))\n .filter(Boolean)\n .join('\\n\\n')\n const id: unknown = node.attrs?.id\n return compositeFence(kind, meta && typeof meta === 'object' ? meta as Record<string, unknown> : {}, body, typeof id === 'string' && id ? id : undefined)\n },\n\n addCommands() {\n return {\n toggleCompositeExpanded: id => () => {\n const { expanded } = this.storage\n const next = new Set(expanded.get())\n if (!next.delete(id)) next.add(id)\n expanded.set(next)\n return true\n },\n\n setCompositeBasket: (basket, pos) => ({ state, tr, dispatch }) => {\n const found = compositeAt(state, pos)\n if (!found) return false\n if (basket !== null && !basketById(this.options.baskets, basket)) return false\n if (dispatch) {\n const { [BASKET_KEY]: _previous, ...meta } = found.node.attrs.meta as Record<string, unknown>\n tr.setNodeMarkup(found.pos, undefined, { ...found.node.attrs, meta: basket === null ? meta : { ...meta, [BASKET_KEY]: basket } })\n }\n return true\n },\n\n setCompositeTitleHidden: (hidden, pos) => ({ state, tr, dispatch }) => {\n const found = compositeAt(state, pos)\n if (!found) return false\n if (dispatch) {\n const { [TITLE_HIDDEN_KEY]: _previous, ...meta } = found.node.attrs.meta as Record<string, unknown>\n tr.setNodeMarkup(found.pos, undefined, { ...found.node.attrs, meta: hidden ? { ...meta, [TITLE_HIDDEN_KEY]: true } : meta })\n const id: unknown = found.node.attrs.id\n const { revealedTitles } = this.storage\n if (!hidden && typeof id === 'string' && revealedTitles.get().has(id)) {\n const next = new Set(revealedTitles.get())\n next.delete(id)\n revealedTitles.set(next)\n }\n }\n return true\n },\n\n insertComposite: (kind = DEFAULT_KIND) => ({ state, tr, dispatch }) => {\n const { $head } = state.selection\n let depth = $head.depth\n while (depth > 0 && !['doc', COMPOSITE].includes($head.node(depth - 1).type.name)) depth--\n let from = $head.pos\n let to = from\n if (depth > 0) {\n const block = $head.node(depth)\n if (isChromeNode(block)) from = to = bodyStart($head.node(depth - 1), $head.start(depth - 1))\n else if (isEmptyParagraph(block)) {\n from = $head.before(depth)\n to = $head.after(depth)\n }\n else from = to = $head.after(depth)\n }\n const $from = state.doc.resolve(from)\n if (!$from.parent.canReplaceWith($from.index(), state.doc.resolve(to).index(), this.type)) return false\n if (dispatch) {\n const json = compositeJSON(kind)\n tr.replaceWith(from, to, state.schema.nodeFromJSON(json))\n tr.setSelection(TextSelection.create(tr.doc, from + 2)).scrollIntoView()\n }\n return true\n },\n\n wrapInComposite: (kind = DEFAULT_KIND) => ({ state, tr, dispatch }) => {\n const { $from, $to } = state.selection\n const range = $from.blockRange($to, node => node.type.name === 'doc' || node.type.name === COMPOSITE)\n if (!range) return false\n if (range.parent.type.name === COMPOSITE && range.startIndex < CHROME_COUNT) return false\n if (!range.parent.canReplaceWith(range.startIndex, range.endIndex, this.type)) return false\n if (dispatch) {\n const { nodes } = state.schema\n const composite = this.type.create({ kind }, [\n nodes[TITLE]!.create(), nodes[DESCRIPTION]!.create(), nodes[TAGS]!.create(),\n ...state.doc.slice(range.start, range.end).content.content,\n ])\n tr.replaceWith(range.start, range.end, composite)\n tr.setSelection(TextSelection.create(tr.doc, range.start + 2)).scrollIntoView()\n }\n return true\n },\n\n setCompositeKind: (kind, pos) => ({ state, tr, dispatch }) => {\n const found = compositeAt(state, pos)\n if (!found) return false\n if (dispatch) {\n const meta = keptMeta(compositeKind(this.options.kinds, kind), found.node.attrs.meta as Record<string, unknown>)\n tr.setNodeMarkup(found.pos, undefined, { ...found.node.attrs, kind, meta })\n }\n return true\n },\n\n exitComposite: () => ({ state, tr, dispatch }) => {\n const { $head } = state.selection\n const composite = compositeAround($head)\n if (!composite) return false\n if (dispatch) {\n // Leaving from a trailing empty paragraph moves it out instead of leaving an empty line behind.\n if ($head.depth === composite.depth + 1 && inTrailingEmptyParagraph($head)) tr.delete($head.before(), $head.after())\n const after = tr.mapping.map($head.after(composite.depth))\n tr.insert(after, state.schema.nodes.paragraph!.create())\n tr.setSelection(TextSelection.create(tr.doc, after + 1)).scrollIntoView()\n }\n return true\n },\n\n convertHeadingsToComposites: ({ recursive, scope, kind = DEFAULT_KIND }) => ({ state, tr, dispatch }) => {\n const range = structureRange(state, scope, 'group')\n if (!range) return false\n const { blocks, from, to } = rangeBlocks(range.parent, range.parentStart, range.fromIndex, range.toIndex)\n const result = groupHeadingsIntoComposites(state.schema, blocks, recursive, kind)\n if (!result) return false\n if (dispatch) {\n tr.replaceWith(from, to, result)\n tr.setSelection(Selection.near(tr.doc.resolve(from), 1)).scrollIntoView()\n }\n return true\n },\n\n convertCompositesToHeadings: ({ recursive, scope }) => ({ state, tr, dispatch }) => {\n const range = structureRange(state, scope, 'flatten')\n if (!range) return false\n const $pos = state.selection.empty ? state.selection.$head : state.selection.$from\n let level = 1\n for (let depth = 1; depth <= range.parentDepth; depth++) {\n if ($pos.node(depth).type.name === COMPOSITE) level++\n }\n const { blocks, from, to } = rangeBlocks(range.parent, range.parentStart, range.fromIndex, range.toIndex)\n const result = flattenCompositesToHeadings(state.schema, blocks, recursive, level, this.options.kinds)\n if (!result) return false\n if (dispatch) {\n tr.replaceWith(from, to, result)\n tr.setSelection(Selection.near(tr.doc.resolve(from), 1)).scrollIntoView()\n }\n return true\n },\n }\n },\n\n addKeyboardShortcuts() {\n return {\n Enter: () => {\n const { $head } = this.editor.state.selection\n const type = $head.parent.type.name\n if (type === TITLE || type === DESCRIPTION) {\n const depth = $head.depth - 1\n const composite = $head.node(depth)\n const start = $head.start(depth)\n return this.editor.commands.command(({ tr }) => {\n const selection = Selection.findFrom(tr.doc.resolve(bodyStart(composite, start)), 1)\n if (!selection) return false\n tr.setSelection(selection).scrollIntoView()\n return true\n })\n }\n if (this.editor.state.selection.empty && inTrailingEmptyParagraph($head)) return this.editor.commands.exitComposite()\n return false\n },\n\n Backspace: () => {\n const { selection } = this.editor.state\n const { $head } = selection\n if (!selection.empty || !$head.parent.isTextblock || $head.parentOffset !== 0 || $head.depth < 2) return false\n const depth = $head.depth - 1\n const composite = $head.node(depth)\n if (composite.type.name !== COMPOSITE) return false\n const start = $head.start(depth)\n const titleEnd = start + composite.child(0).nodeSize - 1\n const type = $head.parent.type.name\n\n if (type === DESCRIPTION) {\n return this.editor.commands.command(({ tr }) => {\n tr.setSelection(TextSelection.create(tr.doc, titleEnd))\n return true\n })\n }\n if (type === TITLE) {\n // Never joins anything into the title; an untouched composite turns back into a paragraph.\n if (!isEmptyComposite(composite)) return true\n return this.editor.commands.command(({ tr, state }) => {\n const from = $head.before(depth)\n tr.replaceWith(from, $head.after(depth), state.schema.nodes.paragraph!.create())\n tr.setSelection(TextSelection.create(tr.doc, from + 1))\n return true\n })\n }\n // First body block: ProseMirror's joinBackward would delete the tags row (an atom) — move into the chrome instead.\n if ($head.index(depth) !== CHROME_COUNT) return false\n return this.editor.commands.command(({ tr }) => {\n if (isEmptyParagraph($head.parent) && composite.childCount > CHROME_COUNT + 1) tr.delete($head.before(), $head.after())\n tr.setSelection(TextSelection.create(tr.doc, titleEnd))\n return true\n })\n },\n\n // No join of the following block into title or description.\n Delete: () => {\n const { selection } = this.editor.state\n const { $head } = selection\n const type = $head.parent.type.name\n return selection.empty && (type === TITLE || type === DESCRIPTION) && $head.parentOffset === $head.parent.content.size\n },\n\n 'Mod-Shift-a': () => this.editor.commands.insertComposite(DEFAULT_KIND),\n }\n },\n})\n\nexport const CompositeTitleNode = Node.create({\n name: TITLE,\n // Above StarterKit's hard break (100), which also binds Mod-Enter.\n priority: 101,\n content: 'inline*',\n defining: true,\n editorChrome: true,\n abilities: { revokes: CHROME_REVOKES },\n // Above the heading's `h2` rule; the second rule reads legacy markup.\n parseHTML: () => [\n { tag: 'h2[data-type=\"composite-title\"]', priority: 60 },\n { tag: 'h2[data-type=\"section-title\"]', priority: 60 },\n ],\n renderHTML: ({ HTMLAttributes }) => ['h2', mergeAttributes(HTMLAttributes, { 'data-type': 'composite-title', class: 'composite-title' }), 0],\n renderMarkdown: (node, h) => `## ${h.renderChildren(node.content ?? [])}`,\n addKeyboardShortcuts() {\n return {\n // Here rather than on CompositeNode: the ability gate swallows every Mod-/Alt- key of the `composite` type where\n // `format.composite` is missing (title, code blocks, speaker segments), but leaving a composite must work everywhere.\n 'Mod-Enter': () => this.editor.commands.exitComposite(),\n }\n },\n})\n\nexport const CompositeDescriptionNode = Node.create({\n name: DESCRIPTION,\n content: 'inline*',\n defining: true,\n editorChrome: true,\n abilities: { revokes: CHROME_REVOKES },\n // Above the paragraph's `p` rule; the second rule reads legacy markup.\n parseHTML: () => [\n { tag: 'p[data-type=\"composite-description\"]', priority: 60 },\n { tag: 'p[data-type=\"section-summary\"]', priority: 60 },\n ],\n renderHTML: ({ HTMLAttributes }) => ['p', mergeAttributes(HTMLAttributes, { 'data-type': 'composite-description', class: 'composite-description' }), 0],\n renderMarkdown: (node, h) => {\n const text = h.renderChildren(node.content ?? [])\n return text ? `> ${text}` : ''\n },\n})\n\nexport const CompositeTagsNode = Node.create({\n name: TAGS,\n atom: true,\n selectable: false,\n draggable: false,\n allowGapCursor: false,\n editorChrome: true,\n abilities: { revokes: [...TEXT_ABILITIES, ABILITY.blockDelete, ABILITY.blockDuplicate] },\n addAttributes: () => ({\n tags: {\n default: [],\n parseHTML: (el) => {\n try {\n const value: unknown = JSON.parse(el.getAttribute('data-tags') ?? '[]')\n return Array.isArray(value) ? value.filter(tag => typeof tag === 'string') : []\n }\n catch {\n return []\n }\n },\n renderHTML: attrs => ({ 'data-tags': JSON.stringify(attrs.tags) }),\n },\n }),\n // The second rule reads legacy markup.\n parseHTML: () => [{ tag: 'div[data-type=\"composite-tags\"]' }, { tag: 'div[data-type=\"section-tags\"]' }],\n renderHTML: ({ HTMLAttributes }) => ['div', mergeAttributes(HTMLAttributes, { 'data-type': 'composite-tags', class: 'composite-tags' })],\n renderMarkdown: (node) => {\n const tags: unknown = node.attrs?.tags\n return Array.isArray(tags) && tags.length ? `Tags: ${tags.map(tag => `#${tag}`).join(' ')}` : ''\n },\n})\n\nexport const CompositeNodes = [CompositeNode, CompositeTitleNode, CompositeDescriptionNode, CompositeTagsNode]\n"],"mappings":"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"}
|
|
@@ -17,11 +17,13 @@ function CompositeView({ editor, node, selected }) {
|
|
|
17
17
|
const collapsed = typeof id === "string" && id !== "" && derivationOf(node) !== null && !expanded.has(id);
|
|
18
18
|
const basket = basketOf(node);
|
|
19
19
|
const basketColor = compositeBasketsOf(editor).find((candidate) => candidate.id === basket)?.color;
|
|
20
|
+
const kindTone = kind.chrome?.tone || void 0;
|
|
20
21
|
const revealedTitles = useStore(editor.storage.composite.revealedTitles);
|
|
21
22
|
const titleHidden = titleHiddenOf(node) && !(typeof id === "string" && revealedTitles.has(id));
|
|
22
23
|
const placeholderVars = {
|
|
23
24
|
"--composite-title-placeholder": cssString(kind.titlePlaceholder),
|
|
24
|
-
...basketColor ? { "--sk-basket-color": basketColor } : {}
|
|
25
|
+
...basketColor ? { "--sk-basket-color": basketColor } : {},
|
|
26
|
+
...kindTone ? { "--sk-kind-tone": kindTone } : {}
|
|
25
27
|
};
|
|
26
28
|
return /* @__PURE__ */ jsxs(NodeViewWrapper, {
|
|
27
29
|
as: "section",
|
|
@@ -30,6 +32,7 @@ function CompositeView({ editor, node, selected }) {
|
|
|
30
32
|
"data-kind": node.attrs.kind,
|
|
31
33
|
"data-id": node.attrs.id || void 0,
|
|
32
34
|
"data-basket": basket ?? void 0,
|
|
35
|
+
"data-kind-tone": kindTone ? "" : void 0,
|
|
33
36
|
"data-title-hidden": titleHidden ? "" : void 0,
|
|
34
37
|
style: placeholderVars,
|
|
35
38
|
children: [/* @__PURE__ */ jsx("span", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CompositeView.js","names":[],"sources":["../../../../src/features/composites/react/CompositeView.tsx"],"sourcesContent":["import { NodeViewContent, NodeViewWrapper, type NodeViewProps } from '@tiptap/react'\nimport type { CSSProperties } from 'react'\nimport { cn } from '../../../react/ui/utils'\nimport { basketOf, titleHiddenOf } from '../baskets'\nimport { compositeKind } from '../kinds'\nimport { useStore } from '../../../react/use-store'\nimport { derivationOf } from '../derivation'\nimport { compositeBasketsOf, compositeKindsOf } from '../nodes'\n\n/** `text` as a CSS string literal (for `content:`). */\nconst cssString = (text: string) => `\"${text.replace(/[\"\\\\]/g, '\\\\$&').replace(/\\n/g, '\\\\a ')}\"`\n\n/** The composite block: the section with its content. The kind icon is drawn by the composite chrome overlay. */\nexport function CompositeView({ editor, node, selected }: NodeViewProps) {\n const kind = compositeKind(compositeKindsOf(editor), String(node.attrs.kind))\n // A derived Baustein (one with a `meta.derivation`) shows collapsed to a faded preview until it is opened; the content\n // stays laid out (CSS clips it), so editing positions are unaffected. The chrome's chevron and a caret inside open it.\n const expanded = useStore(editor.storage.composite.expanded)\n const id: unknown = node.attrs.id\n const collapsed = typeof id === 'string' && id !== '' && derivationOf(node) !== null && !expanded.has(id)\n // Colour basket (`meta.basket`): `data-basket` carries the id, the stripe takes the basket's colour from `--sk-basket-color`.\n const basket = basketOf(node)\n const basketColor = compositeBasketsOf(editor).find(candidate => candidate.id === basket)?.color\n // A hidden title (`meta.titleHidden`) stays hidden until a caret enters it (`revealedTitles`, see `CompositeNode`).\n const revealedTitles = useStore(editor.storage.composite.revealedTitles)\n const titleHidden = titleHiddenOf(node) && !(typeof id === 'string' && revealedTitles.has(id))\n // Placeholder of the empty title (composites.css `content: var(…)`); a nested composite sets its own.\n const placeholderVars = {\n '--composite-title-placeholder': cssString(kind.titlePlaceholder),\n ...(basketColor ? { '--sk-basket-color': basketColor } : {}),\n } as CSSProperties\n return (\n <NodeViewWrapper\n as=\"section\"\n className={cn('composite', collapsed && 'is-collapsed', selected && 'is-selected rounded-md ring-1 ring-primary')}\n data-type=\"composite\"\n data-kind={node.attrs.kind}\n data-id={node.attrs.id || undefined}\n data-basket={basket ?? undefined}\n data-title-hidden={titleHidden ? '' : undefined}\n style={placeholderVars}\n >\n {/* Anchor of the kind icon on the left border: it only takes the icon's place and size. The composite chrome overlay\n measures it and draws the icon as the button that opens the details popover and drags the composite. */}\n <span className=\"composite__toggle\" contentEditable={false} aria-hidden=\"true\" />\n <NodeViewContent className=\"composite__content\" />\n </NodeViewWrapper>\n )\n}\n"],"mappings":";;;;;;;;;;AAUA,MAAM,aAAa,SAAiB,IAAI,KAAK,QAAQ,UAAU,MAAM,CAAC,CAAC,QAAQ,OAAO,MAAM,EAAE;;AAG9F,SAAgB,cAAc,EAAE,QAAQ,MAAM,YAA2B;CACvE,MAAM,OAAO,cAAc,iBAAiB,MAAM,GAAG,OAAO,KAAK,MAAM,IAAI,CAAC;CAG5E,MAAM,WAAW,SAAS,OAAO,QAAQ,UAAU,QAAQ;CAC3D,MAAM,KAAc,KAAK,MAAM;CAC/B,MAAM,YAAY,OAAO,OAAO,YAAY,OAAO,MAAM,aAAa,IAAI,MAAM,QAAQ,CAAC,SAAS,IAAI,EAAE;CAExG,MAAM,SAAS,SAAS,IAAI;CAC5B,MAAM,cAAc,mBAAmB,MAAM,CAAC,CAAC,MAAK,cAAa,UAAU,OAAO,MAAM,CAAC,EAAE;CAE3F,MAAM,iBAAiB,SAAS,OAAO,QAAQ,UAAU,cAAc;CACvE,MAAM,cAAc,cAAc,IAAI,KAAK,EAAE,OAAO,OAAO,YAAY,eAAe,IAAI,EAAE;CAE5F,MAAM,kBAAkB;EACtB,iCAAiC,UAAU,KAAK,gBAAgB;EAChE,GAAI,cAAc,EAAE,qBAAqB,YAAY,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"CompositeView.js","names":[],"sources":["../../../../src/features/composites/react/CompositeView.tsx"],"sourcesContent":["import { NodeViewContent, NodeViewWrapper, type NodeViewProps } from '@tiptap/react'\nimport type { CSSProperties } from 'react'\nimport { cn } from '../../../react/ui/utils'\nimport { basketOf, titleHiddenOf } from '../baskets'\nimport { compositeKind } from '../kinds'\nimport { useStore } from '../../../react/use-store'\nimport { derivationOf } from '../derivation'\nimport { compositeBasketsOf, compositeKindsOf } from '../nodes'\n\n/** `text` as a CSS string literal (for `content:`). */\nconst cssString = (text: string) => `\"${text.replace(/[\"\\\\]/g, '\\\\$&').replace(/\\n/g, '\\\\a ')}\"`\n\n/** The composite block: the section with its content. The kind icon is drawn by the composite chrome overlay. */\nexport function CompositeView({ editor, node, selected }: NodeViewProps) {\n const kind = compositeKind(compositeKindsOf(editor), String(node.attrs.kind))\n // A derived Baustein (one with a `meta.derivation`) shows collapsed to a faded preview until it is opened; the content\n // stays laid out (CSS clips it), so editing positions are unaffected. The chrome's chevron and a caret inside open it.\n const expanded = useStore(editor.storage.composite.expanded)\n const id: unknown = node.attrs.id\n const collapsed = typeof id === 'string' && id !== '' && derivationOf(node) !== null && !expanded.has(id)\n // Colour basket (`meta.basket`): `data-basket` carries the id, the stripe takes the basket's colour from `--sk-basket-color`.\n const basket = basketOf(node)\n const basketColor = compositeBasketsOf(editor).find(candidate => candidate.id === basket)?.color\n // Kind tone (`CompositeKind.chrome.tone`): `data-kind-tone` marks the wrapper, the surface reads the colour from `--sk-kind-tone`.\n const kindTone = kind.chrome?.tone || undefined\n // A hidden title (`meta.titleHidden`) stays hidden until a caret enters it (`revealedTitles`, see `CompositeNode`).\n const revealedTitles = useStore(editor.storage.composite.revealedTitles)\n const titleHidden = titleHiddenOf(node) && !(typeof id === 'string' && revealedTitles.has(id))\n // Placeholder of the empty title (composites.css `content: var(…)`); a nested composite sets its own.\n const placeholderVars = {\n '--composite-title-placeholder': cssString(kind.titlePlaceholder),\n ...(basketColor ? { '--sk-basket-color': basketColor } : {}),\n ...(kindTone ? { '--sk-kind-tone': kindTone } : {}),\n } as CSSProperties\n return (\n <NodeViewWrapper\n as=\"section\"\n className={cn('composite', collapsed && 'is-collapsed', selected && 'is-selected rounded-md ring-1 ring-primary')}\n data-type=\"composite\"\n data-kind={node.attrs.kind}\n data-id={node.attrs.id || undefined}\n data-basket={basket ?? undefined}\n data-kind-tone={kindTone ? '' : undefined}\n data-title-hidden={titleHidden ? '' : undefined}\n style={placeholderVars}\n >\n {/* Anchor of the kind icon on the left border: it only takes the icon's place and size. The composite chrome overlay\n measures it and draws the icon as the button that opens the details popover and drags the composite. */}\n <span className=\"composite__toggle\" contentEditable={false} aria-hidden=\"true\" />\n <NodeViewContent className=\"composite__content\" />\n </NodeViewWrapper>\n )\n}\n"],"mappings":";;;;;;;;;;AAUA,MAAM,aAAa,SAAiB,IAAI,KAAK,QAAQ,UAAU,MAAM,CAAC,CAAC,QAAQ,OAAO,MAAM,EAAE;;AAG9F,SAAgB,cAAc,EAAE,QAAQ,MAAM,YAA2B;CACvE,MAAM,OAAO,cAAc,iBAAiB,MAAM,GAAG,OAAO,KAAK,MAAM,IAAI,CAAC;CAG5E,MAAM,WAAW,SAAS,OAAO,QAAQ,UAAU,QAAQ;CAC3D,MAAM,KAAc,KAAK,MAAM;CAC/B,MAAM,YAAY,OAAO,OAAO,YAAY,OAAO,MAAM,aAAa,IAAI,MAAM,QAAQ,CAAC,SAAS,IAAI,EAAE;CAExG,MAAM,SAAS,SAAS,IAAI;CAC5B,MAAM,cAAc,mBAAmB,MAAM,CAAC,CAAC,MAAK,cAAa,UAAU,OAAO,MAAM,CAAC,EAAE;CAE3F,MAAM,WAAW,KAAK,QAAQ,QAAQ,KAAA;CAEtC,MAAM,iBAAiB,SAAS,OAAO,QAAQ,UAAU,cAAc;CACvE,MAAM,cAAc,cAAc,IAAI,KAAK,EAAE,OAAO,OAAO,YAAY,eAAe,IAAI,EAAE;CAE5F,MAAM,kBAAkB;EACtB,iCAAiC,UAAU,KAAK,gBAAgB;EAChE,GAAI,cAAc,EAAE,qBAAqB,YAAY,IAAI,CAAC;EAC1D,GAAI,WAAW,EAAE,kBAAkB,SAAS,IAAI,CAAC;CACnD;CACA,OACE,qBAAC,iBAAD;EACE,IAAG;EACH,WAAW,GAAG,aAAa,aAAa,gBAAgB,YAAY,4CAA4C;EAChH,aAAU;EACV,aAAW,KAAK,MAAM;EACtB,WAAS,KAAK,MAAM,MAAM,KAAA;EAC1B,eAAa,UAAU,KAAA;EACvB,kBAAgB,WAAW,KAAK,KAAA;EAChC,qBAAmB,cAAc,KAAK,KAAA;EACtC,OAAO;EATT,UAAA,CAaE,oBAAC,QAAD;GAAM,WAAU;GAAoB,iBAAiB;GAAO,eAAY;EAAQ,CAAA,GAChF,oBAAC,iBAAD,EAAiB,WAAU,qBAAsB,CAAA,CAClC;;AAErB"}
|
|
@@ -110,6 +110,7 @@ const de = {
|
|
|
110
110
|
"composites.split.children": "In Unter-Bausteine teilen",
|
|
111
111
|
"composites.split.lengthChildren": "Nach Länge in Unter-Bausteine teilen",
|
|
112
112
|
"composites.split.lengthSiblings": "Nach Länge in Bausteine teilen",
|
|
113
|
+
"composites.merge.next": "Mit nächstem zusammenführen",
|
|
113
114
|
"settings.editing.splitTargetChars": "Zielgröße beim Teilen (Zeichen)",
|
|
114
115
|
"composites.toolbar.toKind": "In Baustein umwandeln",
|
|
115
116
|
"composites.toolbar.structure": "Gliederung umwandeln",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"composites.js","names":[],"sources":["../../../src/i18n/de/composites.ts"],"sourcesContent":["export const de = {\n // Fallback title of an untitled Baustein (outline, table).\n 'composites.untitled': '(ohne Titel)',\n\n // Built-in kinds (`defaultCompositeKinds`): label, placeholders of the empty title/description, fields and their choices.\n 'composites.kind.section.label': 'Abschnitt',\n 'composites.kind.section.title': 'Überschrift',\n 'composites.kind.section.description': 'Zusammenfassung',\n 'composites.kind.task.label': 'Aufgabe',\n 'composites.kind.task.title': 'Aufgabe',\n 'composites.kind.task.description': 'Beschreibung',\n 'composites.kind.task.field.status': 'Status',\n 'composites.kind.task.status.open': 'Offen',\n 'composites.kind.task.status.doing': 'In Arbeit',\n 'composites.kind.task.status.done': 'Erledigt',\n 'composites.kind.task.field.due': 'Fällig',\n 'composites.kind.task.field.assignee': 'Zuständig',\n 'composites.kind.note.label': 'Notiz',\n 'composites.kind.note.title': 'Titel',\n 'composites.kind.note.description': 'Kurzbeschreibung',\n 'composites.kind.document.label': 'Dokument',\n 'composites.kind.document.title': 'Dokumentname',\n 'composites.kind.document.description': 'Zusammenfassung',\n 'composites.kind.document.field.filename': 'Dateiname',\n 'composites.kind.document.field.mimeType': 'Typ',\n 'composites.kind.document.field.size': 'Größe (Bytes)',\n 'composites.kind.document.field.importedAt': 'Importiert',\n 'composites.kind.recording.label': 'Aufnahme',\n 'composites.kind.recording.title': 'Titel der Aufnahme',\n 'composites.kind.recording.description': 'Zusammenfassung',\n 'composites.kind.recording.field.filename': 'Dateiname',\n 'composites.kind.recording.field.mimeType': 'Typ',\n 'composites.kind.recording.field.size': 'Größe (Bytes)',\n 'composites.kind.recording.field.importedAt': 'Importiert',\n 'composites.kind.recording.field.recordedAt': 'Aufgenommen am',\n 'composites.kind.recording.field.participants': 'Beteiligte',\n 'composites.kind.recording.field.durationSeconds': 'Dauer (Sekunden)',\n 'composites.kind.paper.label': 'Paper',\n 'composites.kind.paper.title': 'Titel der Arbeit',\n 'composites.kind.paper.description': 'Zusammenfassung',\n 'composites.kind.paper.field.filename': 'Dateiname',\n 'composites.kind.paper.field.mimeType': 'Typ',\n 'composites.kind.paper.field.size': 'Größe (Bytes)',\n 'composites.kind.paper.field.importedAt': 'Importiert',\n 'composites.kind.paper.field.bib': 'Literaturangabe',\n 'composites.kind.paper.field.doi': 'DOI',\n 'composites.kind.book.label': 'Buch',\n 'composites.kind.book.title': 'Buchtitel',\n 'composites.kind.book.description': 'Zusammenfassung',\n 'composites.kind.book.field.filename': 'Dateiname',\n 'composites.kind.book.field.mimeType': 'Typ',\n 'composites.kind.book.field.size': 'Größe (Bytes)',\n 'composites.kind.book.field.importedAt': 'Importiert',\n 'composites.kind.book.field.bib': 'Literaturangabe',\n 'composites.kind.book.field.isbn': 'ISBN',\n 'composites.kind.figure.label': 'Bild',\n 'composites.kind.figure.title': 'Bildtitel',\n 'composites.kind.figure.description': 'Bildbeschreibung',\n 'composites.kind.figure.field.filename': 'Dateiname',\n 'composites.kind.figure.field.mimeType': 'Typ',\n 'composites.kind.figure.field.size': 'Größe (Bytes)',\n 'composites.kind.figure.field.importedAt': 'Importiert',\n 'composites.kind.figure.field.credit': 'Quellenangabe',\n 'composites.kind.rendition.label': 'Lesefassung',\n 'composites.kind.rendition.title': 'Transkript, Volltext, Beschreibung …',\n 'composites.kind.rendition.description': 'Hinweis zur Entstehung',\n 'composites.kind.rendition.field.derivation': 'Herkunft',\n 'composites.kind.rendition.field.language': 'Sprache',\n /** Literature types of a `bibliography` field (CSL-JSON `type`). */\n 'composites.bib.type.article-journal': 'Zeitschriftenartikel',\n 'composites.bib.type.book': 'Buch',\n 'composites.bib.type.chapter': 'Buchkapitel',\n 'composites.bib.type.paper-conference': 'Konferenzbeitrag',\n 'composites.bib.type.thesis': 'Abschlussarbeit',\n 'composites.bib.type.report': 'Bericht',\n 'composites.bib.type.webpage': 'Webseite',\n 'composites.bib.type.article': 'Artikel',\n 'composites.bib.type.dataset': 'Datensatz',\n /** The `bibliography` field editor. */\n 'composites.bib.field.type': 'Art',\n 'composites.bib.field.authors': 'Autorinnen und Autoren',\n 'composites.bib.field.authorsHelp': 'Eine Person pro Zeile: Nachname, Vorname',\n 'composites.bib.field.year': 'Jahr',\n 'composites.bib.field.containerTitle': 'Zeitschrift / Sammelwerk',\n 'composites.bib.field.volume': 'Band',\n 'composites.bib.field.issue': 'Heft',\n 'composites.bib.field.page': 'Seiten',\n 'composites.bib.field.publisher': 'Verlag',\n 'composites.bib.field.doi': 'DOI',\n 'composites.bib.field.isbn': 'ISBN',\n 'composites.bib.field.url': 'URL',\n 'composites.bib.field.abstract': 'Kurzfassung',\n 'composites.bib.copyBibtex': 'BibTeX kopieren',\n 'composites.bib.copied': 'BibTeX kopiert',\n 'composites.bib.fetchDoi': 'DOI abrufen',\n 'composites.kind.folder.label': 'Ordner',\n 'composites.kind.folder.title': 'Ordnername',\n 'composites.kind.folder.description': 'Beschreibung',\n /** The select that changes a Baustein's kind (details popover, inspector). */\n 'composites.kind.select': 'Art des Bausteins',\n\n // Status chip.\n 'composites.status.none': 'Kein Status',\n 'composites.status.label': 'Status: {status}',\n\n // Feature: settings tab, `/` commands, block action, toolbar.\n 'composites.tab': 'Bearbeiten',\n 'composites.slash.section': 'Abschnitt',\n 'composites.slash.group': 'Überschriften in Bausteine',\n 'composites.slash.groupAll': 'Überschriften in Bausteine (verschachtelt)',\n 'composites.slash.flatten': 'Bausteine in Überschriften',\n 'composites.slash.flattenAll': 'Bausteine in Überschriften (alle Ebenen)',\n 'composites.blockAction.export': 'Als Markdown exportieren',\n 'composites.blockAction.bibtex': 'Literaturangabe exportieren (BibTeX)',\n // Splitting a Baustein (block actions) and the target size setting.\n 'composites.split.here': 'Baustein hier teilen',\n 'composites.split.children': 'In Unter-Bausteine teilen',\n 'composites.split.lengthChildren': 'Nach Länge in Unter-Bausteine teilen',\n 'composites.split.lengthSiblings': 'Nach Länge in Bausteine teilen',\n 'settings.editing.splitTargetChars': 'Zielgröße beim Teilen (Zeichen)',\n 'composites.toolbar.toKind': 'In Baustein umwandeln',\n 'composites.toolbar.structure': 'Gliederung umwandeln',\n 'composites.menu.kindHeading': 'Baustein',\n 'composites.menu.toComposites': 'Überschriften in Bausteine',\n 'composites.menu.toComposites.top': 'Nur oberste Ebene',\n 'composites.menu.toComposites.top.description': 'Nur die höchste Überschriftenebene wird zu Bausteinen',\n 'composites.menu.toComposites.all': 'Alle Ebenen (verschachtelt)',\n 'composites.menu.toComposites.all.description': 'Jede Überschriftenebene wird zu einem verschachtelten Baustein',\n 'composites.menu.toHeadings': 'Bausteine in Überschriften',\n 'composites.menu.toHeadings.top': 'Nur oberste Ebene',\n 'composites.menu.toHeadings.top.description': 'Die obersten Bausteine werden zu Überschriften; innere Bausteine bleiben',\n 'composites.menu.toHeadings.all': 'Alle Ebenen',\n 'composites.menu.toHeadings.all.description': 'Jeder Baustein wird zur Überschrift seiner Ebene; Beschreibung, Tags und Felder als Text',\n 'composites.menu.settings': 'Einstellungen…',\n 'composites.menu.preferred': 'Bevorzugt: {mode}',\n /** Conversion target label: the kind as a Baustein. */\n 'composites.convert.kind': '{kind} (Baustein)',\n\n // Chrome on the title line and the kind icon.\n 'composites.chrome.details': 'Art und Details: {kind}',\n 'composites.chrome.detailsDrag': 'Art und Details: {kind} · Ziehen zum Verschieben',\n 'composites.tag.remove': 'Tag #{tag} entfernen',\n 'composites.tag.add': 'Tag hinzufügen',\n\n // Tags editor (details popover, inspector).\n 'composites.tags.label': 'Tags',\n 'composites.tags.placeholder': 'Tags hinzufügen',\n 'composites.tags.create': '#{tag} erstellen',\n\n // Details popover.\n 'composites.details.confirmLost': 'Art wirklich ändern? Beim Wechsel zu „{kind}“ gehen diese Angaben verloren:',\n 'composites.details.confirm': 'Art wirklich ändern?',\n 'composites.details.cancel': 'Abbrechen',\n 'composites.details.change': 'Ändern',\n 'composites.details.summary': 'Zusammen\\u00ADfassung',\n\n // Reference chip (`[@`), locator and backlinks.\n 'composites.reference.insert': 'Verweis auf Baustein',\n 'composites.reference.empty': 'Keine passenden Bausteine',\n 'composites.reference.gone': 'Baustein gelöscht',\n 'composites.reference.locator': 'Stelle',\n 'composites.reference.locatorPlaceholder': 'Stelle, z. B. S. 12 oder 03:14',\n 'composites.reference.backlinks': 'Verweise',\n\n // Derived Bausteine (provenance badge, collapse toggle, details).\n 'composites.derivation.badge': 'abgeleitet',\n 'composites.derivation.stale': 'Quelle geändert',\n 'composites.derivation.foreign': 'aus anderem Dokument',\n 'composites.derivation.edited': 'bearbeitet',\n 'composites.derivation.expand': 'Abgeleiteten Inhalt aufklappen',\n 'composites.derivation.collapse': 'Abgeleiteten Inhalt zuklappen',\n 'composites.derivation.method': 'Methode',\n 'composites.derivation.model': 'Modell',\n 'composites.derivation.createdAt': 'Erzeugt',\n 'composites.derivation.openOutput': 'Original öffnen',\n 'composites.derivation.method.transcription': 'Transkription',\n 'composites.derivation.method.pdf-text': 'PDF-Text',\n 'composites.derivation.method.ocr': 'Texterkennung (OCR)',\n 'composites.derivation.method.description': 'Bildbeschreibung',\n 'composites.derivation.method.bibliography': 'Literaturangaben',\n 'composites.derivation.method.ai': 'KI-Ableitung',\n\n // Summary and field editors.\n 'composites.summary.placeholder': 'Kurze Zusammenfassung des Bausteins',\n 'composites.summary.label': 'Zusammenfassung',\n 'composites.summary.none': 'Keine Zusammenfassung',\n 'composites.summary.formatted': 'Enthält Formatierung oder Erwähnungen und lässt sich nur im Text bearbeiten.',\n 'composites.field.choose': '{field} wählen',\n 'composites.field.none': 'Keine Auswahl',\n\n // Inspector.\n 'composites.inspector.label': 'Eigenschaften',\n 'composites.inspector.document': 'Dokument',\n 'composites.inspector.composites': 'Bausteine',\n 'composites.inspector.summarized': '{n} von {total} zusammengefasst',\n 'composites.inspector.none': 'Keine',\n 'composites.inspector.mentions': 'Erwähnungen',\n 'composites.inspector.composite': 'Baustein',\n 'composites.inspector.kind': 'Art',\n 'composites.inspector.title': 'Titel',\n 'composites.inspector.titleHelp': 'Im Dokument bearbeiten',\n 'composites.inspector.untitled': 'Ohne Titel',\n 'composites.inspector.description': 'Beschreibung',\n 'composites.inspector.descriptionHelp': 'Enthält Erwähnungen oder Tags – im Dokument bearbeiten',\n 'composites.inspector.aiStatus': 'KI-Status',\n 'composites.inspector.summaryPresent': 'Zusammenfassung vorhanden',\n 'composites.inspector.summaryMissing': 'Zusammenfassung fehlt',\n\n // Table.\n 'composites.table.label': 'Bausteine als Tabelle',\n 'composites.table.emptyTitle': 'Dieses Dokument enthält noch keine Bausteine',\n 'composites.table.emptyText': 'Bausteine gliedern ein Dokument in Abschnitte, Aufgaben oder Notizen mit Titel, Zusammenfassung und Tags. Füge im Text über „/“ einen Baustein ein, dann erscheint er hier mit allen Angaben.',\n 'composites.table.column.composite': 'Baustein',\n 'composites.table.column.kind': 'Art',\n 'composites.table.column.tags': 'Tags',\n 'composites.table.column.summary': 'Zusammenfassung',\n 'composites.table.search.placeholder': 'Titel, Zusammenfassung, Tags',\n 'composites.table.search.label': 'Bausteine durchsuchen',\n 'composites.table.search.clear': 'Suche leeren',\n 'composites.table.filter.all': 'Alle',\n 'composites.table.filter.reset': 'Filter zurücksetzen',\n 'composites.table.filter.byKind': 'Nach Art filtern',\n 'composites.table.filter.byTag': 'Nach Tag filtern',\n 'composites.table.filter.noMatch': 'Kein Baustein passt zu diesen Filtern.',\n 'composites.table.count.one': '{n} von {total} Baustein',\n 'composites.table.count.other': '{n} von {total} Bausteinen',\n 'composites.table.noValue': 'Kein Wert',\n 'composites.table.noTags': 'Keine Tags',\n 'composites.table.summaryPresent': 'Zusammenfassung vorhanden',\n\n // Settings tab „Bearbeiten“.\n 'composites.settings.structure.title': 'Gliederung',\n 'composites.settings.structure.legend': 'Bevorzugte Gliederung',\n 'composites.settings.structure.flat.label': 'Überschriften',\n 'composites.settings.structure.flat.description': 'Werkzeugleiste mit Überschrift 1–3. KI-Texte werden flach mit Überschriften (##, ###) gegliedert; Bausteine, die die KI dennoch schreibt, werden zu Überschriften.',\n 'composites.settings.structure.composite.label': 'Bausteine',\n 'composites.settings.structure.composite.description': 'Werkzeugleiste ohne Überschrift 1–3. KI-Texte werden als Bausteine gegliedert, Unterabschnitte als verschachtelte Bausteine; Überschriften, die die KI dennoch schreibt, werden zu Bausteinen.',\n 'composites.settings.scope.legend': '„Gliederung umwandeln“ ohne Markierung bezieht sich auf',\n 'composites.settings.scope.container.label': 'Umgebender Baustein',\n 'composites.settings.scope.container.description': 'Den Baustein, in dem der Cursor steht; außerhalb von Bausteinen das ganze Dokument.',\n 'composites.settings.scope.document.label': 'Gesamtes Dokument',\n 'composites.settings.scope.document.description': 'Immer alle Blöcke des Dokuments.',\n 'composites.settings.scope.heading.label': 'Überschrift oder Baustein am Cursor',\n 'composites.settings.scope.heading.description': 'Beim Umwandeln in Bausteine: die Überschrift am oder vor dem Cursor mit ihrem Inhalt. Beim Umwandeln in Überschriften: der innerste Baustein um den Cursor.',\n 'composites.settings.sidebar.title': 'Seitenleiste',\n 'composites.settings.treeRoot.legend': 'Baum der Dokumente',\n 'composites.settings.treeRoot.folders.label': 'Ordner und Dateien verschachteln',\n 'composites.settings.treeRoot.folders.description': 'Die Seitenleiste zeigt die Ordner mit ihren Dateien; die geöffnete Datei steht als Eintrag darin.',\n 'composites.settings.treeRoot.file.label': 'Wurzel ist eine einzelne Datei',\n 'composites.settings.treeRoot.file.description': 'Ist eine Baustein-Datei geöffnet, zeigt die Seitenleiste sie als Wurzel mit ihren Ordnern und Dokumenten. Ohne geöffnete Baustein-Datei sind es die Ordner.',\n 'composites.settings.composites.title': 'Bausteine',\n 'composites.settings.defaultKind.label': 'Standard-Baustein',\n 'composites.settings.defaultKind.description': 'Art der Bausteine, die die Werkzeugleiste, „/“-Befehle und „Überschriften in Bausteine“ anlegen.',\n 'composites.settings.kindIcon.legend': 'Art-Symbol',\n 'composites.settings.kindIcon.always.label': 'Immer anzeigen',\n 'composites.settings.kindIcon.always.description': 'Das Symbol der Bausteinart steht dauerhaft vor dem Baustein.',\n 'composites.settings.kindIcon.hover.label': 'Nur beim Überfahren',\n 'composites.settings.kindIcon.hover.description': 'Das Symbol erscheint, wenn die Maus über dem Baustein steht, er den Fokus hat oder seine Details geöffnet sind.',\n 'composites.settings.dragHandle.legend': 'Ziehgriff (Blöcke ohne Symbol)',\n 'composites.settings.dragHandle.hover.label': 'Nur beim Überfahren',\n 'composites.settings.dragHandle.hover.description': 'Der Ziehgriff erscheint am Block unter der Maus.',\n 'composites.settings.dragHandle.always.label': 'Immer anzeigen',\n 'composites.settings.dragHandle.always.description': 'Jeder Block ohne Symbol zeigt seinen Ziehgriff dauerhaft.',\n\n // Accepted children per kind (`AcceptedChildren`, `moveIntoVerdict`): the notice of a refused edit and why a block cannot move.\n 'composites.nesting.title': 'Verschachtelung nicht möglich',\n 'composites.nesting.refused': '{parent} nimmt keine {child} auf.',\n 'composites.move.blockGone': 'Der Block existiert nicht mehr.',\n 'composites.move.targetGone': 'Das Ziel existiert nicht mehr.',\n 'composites.move.targetNotBlock': 'Das Ziel ist kein Baustein.',\n 'composites.move.intoSelf': 'Ein Block kann nicht in sich selbst verschoben werden.',\n 'composites.move.intoOwn': 'Ein Block kann nicht in einen Baustein verschoben werden, den er selbst enthält.',\n // Colour baskets of a Baustein and the hidden-title toggle in its chrome.\n 'composites.basket.label': 'Korb',\n 'composites.basket.none': 'Kein Korb',\n 'composites.basket.red': 'Rot',\n 'composites.basket.orange': 'Orange',\n 'composites.basket.yellow': 'Gelb',\n 'composites.basket.green': 'Grün',\n 'composites.basket.blue': 'Blau',\n 'composites.titleHidden.hide': 'Titel ausblenden',\n 'composites.titleHidden.show': 'Titel einblenden',\n // Focus mode: the block action, the chip while a Baustein is focused and its button.\n 'composites.focus.action': 'Fokussieren',\n 'composites.focus.leave': 'Fokus aufheben',\n 'composites.focus.chip': 'Fokus: {title}',\n 'composites.focus.release': 'Aufheben',\n} as const\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"composites.js","names":[],"sources":["../../../src/i18n/de/composites.ts"],"sourcesContent":["export const de = {\n // Fallback title of an untitled Baustein (outline, table).\n 'composites.untitled': '(ohne Titel)',\n\n // Built-in kinds (`defaultCompositeKinds`): label, placeholders of the empty title/description, fields and their choices.\n 'composites.kind.section.label': 'Abschnitt',\n 'composites.kind.section.title': 'Überschrift',\n 'composites.kind.section.description': 'Zusammenfassung',\n 'composites.kind.task.label': 'Aufgabe',\n 'composites.kind.task.title': 'Aufgabe',\n 'composites.kind.task.description': 'Beschreibung',\n 'composites.kind.task.field.status': 'Status',\n 'composites.kind.task.status.open': 'Offen',\n 'composites.kind.task.status.doing': 'In Arbeit',\n 'composites.kind.task.status.done': 'Erledigt',\n 'composites.kind.task.field.due': 'Fällig',\n 'composites.kind.task.field.assignee': 'Zuständig',\n 'composites.kind.note.label': 'Notiz',\n 'composites.kind.note.title': 'Titel',\n 'composites.kind.note.description': 'Kurzbeschreibung',\n 'composites.kind.document.label': 'Dokument',\n 'composites.kind.document.title': 'Dokumentname',\n 'composites.kind.document.description': 'Zusammenfassung',\n 'composites.kind.document.field.filename': 'Dateiname',\n 'composites.kind.document.field.mimeType': 'Typ',\n 'composites.kind.document.field.size': 'Größe (Bytes)',\n 'composites.kind.document.field.importedAt': 'Importiert',\n 'composites.kind.recording.label': 'Aufnahme',\n 'composites.kind.recording.title': 'Titel der Aufnahme',\n 'composites.kind.recording.description': 'Zusammenfassung',\n 'composites.kind.recording.field.filename': 'Dateiname',\n 'composites.kind.recording.field.mimeType': 'Typ',\n 'composites.kind.recording.field.size': 'Größe (Bytes)',\n 'composites.kind.recording.field.importedAt': 'Importiert',\n 'composites.kind.recording.field.recordedAt': 'Aufgenommen am',\n 'composites.kind.recording.field.participants': 'Beteiligte',\n 'composites.kind.recording.field.durationSeconds': 'Dauer (Sekunden)',\n 'composites.kind.paper.label': 'Paper',\n 'composites.kind.paper.title': 'Titel der Arbeit',\n 'composites.kind.paper.description': 'Zusammenfassung',\n 'composites.kind.paper.field.filename': 'Dateiname',\n 'composites.kind.paper.field.mimeType': 'Typ',\n 'composites.kind.paper.field.size': 'Größe (Bytes)',\n 'composites.kind.paper.field.importedAt': 'Importiert',\n 'composites.kind.paper.field.bib': 'Literaturangabe',\n 'composites.kind.paper.field.doi': 'DOI',\n 'composites.kind.book.label': 'Buch',\n 'composites.kind.book.title': 'Buchtitel',\n 'composites.kind.book.description': 'Zusammenfassung',\n 'composites.kind.book.field.filename': 'Dateiname',\n 'composites.kind.book.field.mimeType': 'Typ',\n 'composites.kind.book.field.size': 'Größe (Bytes)',\n 'composites.kind.book.field.importedAt': 'Importiert',\n 'composites.kind.book.field.bib': 'Literaturangabe',\n 'composites.kind.book.field.isbn': 'ISBN',\n 'composites.kind.figure.label': 'Bild',\n 'composites.kind.figure.title': 'Bildtitel',\n 'composites.kind.figure.description': 'Bildbeschreibung',\n 'composites.kind.figure.field.filename': 'Dateiname',\n 'composites.kind.figure.field.mimeType': 'Typ',\n 'composites.kind.figure.field.size': 'Größe (Bytes)',\n 'composites.kind.figure.field.importedAt': 'Importiert',\n 'composites.kind.figure.field.credit': 'Quellenangabe',\n 'composites.kind.rendition.label': 'Lesefassung',\n 'composites.kind.rendition.title': 'Transkript, Volltext, Beschreibung …',\n 'composites.kind.rendition.description': 'Hinweis zur Entstehung',\n 'composites.kind.rendition.field.derivation': 'Herkunft',\n 'composites.kind.rendition.field.language': 'Sprache',\n /** Literature types of a `bibliography` field (CSL-JSON `type`). */\n 'composites.bib.type.article-journal': 'Zeitschriftenartikel',\n 'composites.bib.type.book': 'Buch',\n 'composites.bib.type.chapter': 'Buchkapitel',\n 'composites.bib.type.paper-conference': 'Konferenzbeitrag',\n 'composites.bib.type.thesis': 'Abschlussarbeit',\n 'composites.bib.type.report': 'Bericht',\n 'composites.bib.type.webpage': 'Webseite',\n 'composites.bib.type.article': 'Artikel',\n 'composites.bib.type.dataset': 'Datensatz',\n /** The `bibliography` field editor. */\n 'composites.bib.field.type': 'Art',\n 'composites.bib.field.authors': 'Autorinnen und Autoren',\n 'composites.bib.field.authorsHelp': 'Eine Person pro Zeile: Nachname, Vorname',\n 'composites.bib.field.year': 'Jahr',\n 'composites.bib.field.containerTitle': 'Zeitschrift / Sammelwerk',\n 'composites.bib.field.volume': 'Band',\n 'composites.bib.field.issue': 'Heft',\n 'composites.bib.field.page': 'Seiten',\n 'composites.bib.field.publisher': 'Verlag',\n 'composites.bib.field.doi': 'DOI',\n 'composites.bib.field.isbn': 'ISBN',\n 'composites.bib.field.url': 'URL',\n 'composites.bib.field.abstract': 'Kurzfassung',\n 'composites.bib.copyBibtex': 'BibTeX kopieren',\n 'composites.bib.copied': 'BibTeX kopiert',\n 'composites.bib.fetchDoi': 'DOI abrufen',\n 'composites.kind.folder.label': 'Ordner',\n 'composites.kind.folder.title': 'Ordnername',\n 'composites.kind.folder.description': 'Beschreibung',\n /** The select that changes a Baustein's kind (details popover, inspector). */\n 'composites.kind.select': 'Art des Bausteins',\n\n // Status chip.\n 'composites.status.none': 'Kein Status',\n 'composites.status.label': 'Status: {status}',\n\n // Feature: settings tab, `/` commands, block action, toolbar.\n 'composites.tab': 'Bearbeiten',\n 'composites.slash.section': 'Abschnitt',\n 'composites.slash.group': 'Überschriften in Bausteine',\n 'composites.slash.groupAll': 'Überschriften in Bausteine (verschachtelt)',\n 'composites.slash.flatten': 'Bausteine in Überschriften',\n 'composites.slash.flattenAll': 'Bausteine in Überschriften (alle Ebenen)',\n 'composites.blockAction.export': 'Als Markdown exportieren',\n 'composites.blockAction.bibtex': 'Literaturangabe exportieren (BibTeX)',\n // Splitting a Baustein (block actions) and the target size setting.\n 'composites.split.here': 'Baustein hier teilen',\n 'composites.split.children': 'In Unter-Bausteine teilen',\n 'composites.split.lengthChildren': 'Nach Länge in Unter-Bausteine teilen',\n 'composites.split.lengthSiblings': 'Nach Länge in Bausteine teilen',\n 'composites.merge.next': 'Mit nächstem zusammenführen',\n 'settings.editing.splitTargetChars': 'Zielgröße beim Teilen (Zeichen)',\n 'composites.toolbar.toKind': 'In Baustein umwandeln',\n 'composites.toolbar.structure': 'Gliederung umwandeln',\n 'composites.menu.kindHeading': 'Baustein',\n 'composites.menu.toComposites': 'Überschriften in Bausteine',\n 'composites.menu.toComposites.top': 'Nur oberste Ebene',\n 'composites.menu.toComposites.top.description': 'Nur die höchste Überschriftenebene wird zu Bausteinen',\n 'composites.menu.toComposites.all': 'Alle Ebenen (verschachtelt)',\n 'composites.menu.toComposites.all.description': 'Jede Überschriftenebene wird zu einem verschachtelten Baustein',\n 'composites.menu.toHeadings': 'Bausteine in Überschriften',\n 'composites.menu.toHeadings.top': 'Nur oberste Ebene',\n 'composites.menu.toHeadings.top.description': 'Die obersten Bausteine werden zu Überschriften; innere Bausteine bleiben',\n 'composites.menu.toHeadings.all': 'Alle Ebenen',\n 'composites.menu.toHeadings.all.description': 'Jeder Baustein wird zur Überschrift seiner Ebene; Beschreibung, Tags und Felder als Text',\n 'composites.menu.settings': 'Einstellungen…',\n 'composites.menu.preferred': 'Bevorzugt: {mode}',\n /** Conversion target label: the kind as a Baustein. */\n 'composites.convert.kind': '{kind} (Baustein)',\n\n // Chrome on the title line and the kind icon.\n 'composites.chrome.details': 'Art und Details: {kind}',\n 'composites.chrome.detailsDrag': 'Art und Details: {kind} · Ziehen zum Verschieben',\n 'composites.tag.remove': 'Tag #{tag} entfernen',\n 'composites.tag.add': 'Tag hinzufügen',\n\n // Tags editor (details popover, inspector).\n 'composites.tags.label': 'Tags',\n 'composites.tags.placeholder': 'Tags hinzufügen',\n 'composites.tags.create': '#{tag} erstellen',\n\n // Details popover.\n 'composites.details.confirmLost': 'Art wirklich ändern? Beim Wechsel zu „{kind}“ gehen diese Angaben verloren:',\n 'composites.details.confirm': 'Art wirklich ändern?',\n 'composites.details.cancel': 'Abbrechen',\n 'composites.details.change': 'Ändern',\n 'composites.details.summary': 'Zusammen\\u00ADfassung',\n\n // Reference chip (`[@`), locator and backlinks.\n 'composites.reference.insert': 'Verweis auf Baustein',\n 'composites.reference.empty': 'Keine passenden Bausteine',\n 'composites.reference.gone': 'Baustein gelöscht',\n 'composites.reference.locator': 'Stelle',\n 'composites.reference.locatorPlaceholder': 'Stelle, z. B. S. 12 oder 03:14',\n 'composites.reference.backlinks': 'Verweise',\n\n // Derived Bausteine (provenance badge, collapse toggle, details).\n 'composites.derivation.badge': 'abgeleitet',\n 'composites.derivation.stale': 'Quelle geändert',\n 'composites.derivation.foreign': 'aus anderem Dokument',\n 'composites.derivation.edited': 'bearbeitet',\n 'composites.derivation.expand': 'Abgeleiteten Inhalt aufklappen',\n 'composites.derivation.collapse': 'Abgeleiteten Inhalt zuklappen',\n 'composites.derivation.method': 'Methode',\n 'composites.derivation.model': 'Modell',\n 'composites.derivation.createdAt': 'Erzeugt',\n 'composites.derivation.openOutput': 'Original öffnen',\n 'composites.derivation.method.transcription': 'Transkription',\n 'composites.derivation.method.pdf-text': 'PDF-Text',\n 'composites.derivation.method.ocr': 'Texterkennung (OCR)',\n 'composites.derivation.method.description': 'Bildbeschreibung',\n 'composites.derivation.method.bibliography': 'Literaturangaben',\n 'composites.derivation.method.ai': 'KI-Ableitung',\n\n // Summary and field editors.\n 'composites.summary.placeholder': 'Kurze Zusammenfassung des Bausteins',\n 'composites.summary.label': 'Zusammenfassung',\n 'composites.summary.none': 'Keine Zusammenfassung',\n 'composites.summary.formatted': 'Enthält Formatierung oder Erwähnungen und lässt sich nur im Text bearbeiten.',\n 'composites.field.choose': '{field} wählen',\n 'composites.field.none': 'Keine Auswahl',\n\n // Inspector.\n 'composites.inspector.label': 'Eigenschaften',\n 'composites.inspector.document': 'Dokument',\n 'composites.inspector.composites': 'Bausteine',\n 'composites.inspector.summarized': '{n} von {total} zusammengefasst',\n 'composites.inspector.none': 'Keine',\n 'composites.inspector.mentions': 'Erwähnungen',\n 'composites.inspector.composite': 'Baustein',\n 'composites.inspector.kind': 'Art',\n 'composites.inspector.title': 'Titel',\n 'composites.inspector.titleHelp': 'Im Dokument bearbeiten',\n 'composites.inspector.untitled': 'Ohne Titel',\n 'composites.inspector.description': 'Beschreibung',\n 'composites.inspector.descriptionHelp': 'Enthält Erwähnungen oder Tags – im Dokument bearbeiten',\n 'composites.inspector.aiStatus': 'KI-Status',\n 'composites.inspector.summaryPresent': 'Zusammenfassung vorhanden',\n 'composites.inspector.summaryMissing': 'Zusammenfassung fehlt',\n\n // Table.\n 'composites.table.label': 'Bausteine als Tabelle',\n 'composites.table.emptyTitle': 'Dieses Dokument enthält noch keine Bausteine',\n 'composites.table.emptyText': 'Bausteine gliedern ein Dokument in Abschnitte, Aufgaben oder Notizen mit Titel, Zusammenfassung und Tags. Füge im Text über „/“ einen Baustein ein, dann erscheint er hier mit allen Angaben.',\n 'composites.table.column.composite': 'Baustein',\n 'composites.table.column.kind': 'Art',\n 'composites.table.column.tags': 'Tags',\n 'composites.table.column.summary': 'Zusammenfassung',\n 'composites.table.search.placeholder': 'Titel, Zusammenfassung, Tags',\n 'composites.table.search.label': 'Bausteine durchsuchen',\n 'composites.table.search.clear': 'Suche leeren',\n 'composites.table.filter.all': 'Alle',\n 'composites.table.filter.reset': 'Filter zurücksetzen',\n 'composites.table.filter.byKind': 'Nach Art filtern',\n 'composites.table.filter.byTag': 'Nach Tag filtern',\n 'composites.table.filter.noMatch': 'Kein Baustein passt zu diesen Filtern.',\n 'composites.table.count.one': '{n} von {total} Baustein',\n 'composites.table.count.other': '{n} von {total} Bausteinen',\n 'composites.table.noValue': 'Kein Wert',\n 'composites.table.noTags': 'Keine Tags',\n 'composites.table.summaryPresent': 'Zusammenfassung vorhanden',\n\n // Settings tab „Bearbeiten“.\n 'composites.settings.structure.title': 'Gliederung',\n 'composites.settings.structure.legend': 'Bevorzugte Gliederung',\n 'composites.settings.structure.flat.label': 'Überschriften',\n 'composites.settings.structure.flat.description': 'Werkzeugleiste mit Überschrift 1–3. KI-Texte werden flach mit Überschriften (##, ###) gegliedert; Bausteine, die die KI dennoch schreibt, werden zu Überschriften.',\n 'composites.settings.structure.composite.label': 'Bausteine',\n 'composites.settings.structure.composite.description': 'Werkzeugleiste ohne Überschrift 1–3. KI-Texte werden als Bausteine gegliedert, Unterabschnitte als verschachtelte Bausteine; Überschriften, die die KI dennoch schreibt, werden zu Bausteinen.',\n 'composites.settings.scope.legend': '„Gliederung umwandeln“ ohne Markierung bezieht sich auf',\n 'composites.settings.scope.container.label': 'Umgebender Baustein',\n 'composites.settings.scope.container.description': 'Den Baustein, in dem der Cursor steht; außerhalb von Bausteinen das ganze Dokument.',\n 'composites.settings.scope.document.label': 'Gesamtes Dokument',\n 'composites.settings.scope.document.description': 'Immer alle Blöcke des Dokuments.',\n 'composites.settings.scope.heading.label': 'Überschrift oder Baustein am Cursor',\n 'composites.settings.scope.heading.description': 'Beim Umwandeln in Bausteine: die Überschrift am oder vor dem Cursor mit ihrem Inhalt. Beim Umwandeln in Überschriften: der innerste Baustein um den Cursor.',\n 'composites.settings.sidebar.title': 'Seitenleiste',\n 'composites.settings.treeRoot.legend': 'Baum der Dokumente',\n 'composites.settings.treeRoot.folders.label': 'Ordner und Dateien verschachteln',\n 'composites.settings.treeRoot.folders.description': 'Die Seitenleiste zeigt die Ordner mit ihren Dateien; die geöffnete Datei steht als Eintrag darin.',\n 'composites.settings.treeRoot.file.label': 'Wurzel ist eine einzelne Datei',\n 'composites.settings.treeRoot.file.description': 'Ist eine Baustein-Datei geöffnet, zeigt die Seitenleiste sie als Wurzel mit ihren Ordnern und Dokumenten. Ohne geöffnete Baustein-Datei sind es die Ordner.',\n 'composites.settings.composites.title': 'Bausteine',\n 'composites.settings.defaultKind.label': 'Standard-Baustein',\n 'composites.settings.defaultKind.description': 'Art der Bausteine, die die Werkzeugleiste, „/“-Befehle und „Überschriften in Bausteine“ anlegen.',\n 'composites.settings.kindIcon.legend': 'Art-Symbol',\n 'composites.settings.kindIcon.always.label': 'Immer anzeigen',\n 'composites.settings.kindIcon.always.description': 'Das Symbol der Bausteinart steht dauerhaft vor dem Baustein.',\n 'composites.settings.kindIcon.hover.label': 'Nur beim Überfahren',\n 'composites.settings.kindIcon.hover.description': 'Das Symbol erscheint, wenn die Maus über dem Baustein steht, er den Fokus hat oder seine Details geöffnet sind.',\n 'composites.settings.dragHandle.legend': 'Ziehgriff (Blöcke ohne Symbol)',\n 'composites.settings.dragHandle.hover.label': 'Nur beim Überfahren',\n 'composites.settings.dragHandle.hover.description': 'Der Ziehgriff erscheint am Block unter der Maus.',\n 'composites.settings.dragHandle.always.label': 'Immer anzeigen',\n 'composites.settings.dragHandle.always.description': 'Jeder Block ohne Symbol zeigt seinen Ziehgriff dauerhaft.',\n\n // Accepted children per kind (`AcceptedChildren`, `moveIntoVerdict`): the notice of a refused edit and why a block cannot move.\n 'composites.nesting.title': 'Verschachtelung nicht möglich',\n 'composites.nesting.refused': '{parent} nimmt keine {child} auf.',\n 'composites.move.blockGone': 'Der Block existiert nicht mehr.',\n 'composites.move.targetGone': 'Das Ziel existiert nicht mehr.',\n 'composites.move.targetNotBlock': 'Das Ziel ist kein Baustein.',\n 'composites.move.intoSelf': 'Ein Block kann nicht in sich selbst verschoben werden.',\n 'composites.move.intoOwn': 'Ein Block kann nicht in einen Baustein verschoben werden, den er selbst enthält.',\n // Colour baskets of a Baustein and the hidden-title toggle in its chrome.\n 'composites.basket.label': 'Korb',\n 'composites.basket.none': 'Kein Korb',\n 'composites.basket.red': 'Rot',\n 'composites.basket.orange': 'Orange',\n 'composites.basket.yellow': 'Gelb',\n 'composites.basket.green': 'Grün',\n 'composites.basket.blue': 'Blau',\n 'composites.titleHidden.hide': 'Titel ausblenden',\n 'composites.titleHidden.show': 'Titel einblenden',\n // Focus mode: the block action, the chip while a Baustein is focused and its button.\n 'composites.focus.action': 'Fokussieren',\n 'composites.focus.leave': 'Fokus aufheben',\n 'composites.focus.chip': 'Fokus: {title}',\n 'composites.focus.release': 'Aufheben',\n} as const\n"],"mappings":"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"}
|
package/dist/i18n/de/tree.js
CHANGED
|
@@ -32,6 +32,7 @@ const de = {
|
|
|
32
32
|
"tree.focus.root": "Dokument",
|
|
33
33
|
"tree.focus.enter": "Fokussieren",
|
|
34
34
|
"tree.focus.leave": "Fokus aufheben",
|
|
35
|
+
"tree.merge": "Mit nächstem zusammenführen",
|
|
35
36
|
"tree.root.folders": "Ordner",
|
|
36
37
|
"tree.root.file": "Datei als Wurzel",
|
|
37
38
|
"tree.root.unavailable": "Nur mit einer geöffneten Baustein-Datei (Einstellung „Gliederung: Bausteine“).",
|
package/dist/i18n/de/tree.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree.js","names":[],"sources":["../../../src/i18n/de/tree.ts"],"sourcesContent":["export const de = {\n 'tree.aria': 'Dokumente',\n 'tree.loading': 'Lädt…',\n 'tree.loadFailed': 'Dokumente konnten nicht geladen werden',\n 'tree.empty': 'Noch keine Dokumente',\n 'tree.rootFallback': 'Dokument',\n 'tree.untitled': '(ohne Titel)',\n 'tree.summary': 'Zusammenfassung vorhanden',\n 'tree.filter.show': 'Anzeigen',\n 'tree.filter.title': 'Anzeige filtern',\n 'tree.filter.reset': 'Filter zurücksetzen',\n 'tree.add': 'Hinzufügen',\n 'tree.delete': 'Löschen',\n 'tree.menu.newDocument': 'Neues Dokument',\n 'tree.menu.newFolder': 'Neuer Ordner',\n 'tree.menu.newSubfolder': 'Neuer Unterordner',\n 'tree.menu.newCompositeFolder': 'Neuer Ordner-Baustein',\n 'tree.menu.importFile': 'Datei importieren…',\n 'tree.menu.rename': 'Umbenennen',\n 'tree.folder.name': 'Ordnername',\n 'tree.folder.placeholder': 'Neuer Ordner',\n 'tree.folder.placeholderIn': 'Neuer Ordner in {parent}',\n 'tree.folder.renameFailed': 'Ordner nicht umbenannt',\n 'tree.removed': 'Dokument gelöscht',\n 'tree.undo': 'Rückgängig',\n 'tree.filterText.placeholder': 'Titel filtern',\n 'tree.filterText.clear': 'Titelfilter löschen',\n 'tree.noMatches': 'Keine Treffer',\n 'tree.basketFilter.label': 'Nach Korb filtern',\n 'tree.basketFilter.reset': 'Korbfilter zurücksetzen',\n 'tree.focus.root': 'Dokument',\n 'tree.focus.enter': 'Fokussieren',\n 'tree.focus.leave': 'Fokus aufheben',\n 'tree.root.folders': 'Ordner',\n 'tree.root.file': 'Datei als Wurzel',\n 'tree.root.unavailable': 'Nur mit einer geöffneten Baustein-Datei (Einstellung „Gliederung: Bausteine“).',\n\n // Why a drop on a row is refused (`dropVerdict`).\n 'tree.drop.nothing': 'Es wird nichts gezogen.',\n 'tree.drop.noDocumentMove': 'Im geöffneten Dokument lassen sich Dokumente und Ordner nicht verschieben.',\n 'tree.drop.foldersOnly': 'Nur Ordner nehmen Einträge auf.',\n 'tree.drop.documentInFolder': 'Das Dokument liegt schon in diesem Ordner.',\n 'tree.drop.folderIntoSelf': 'Ein Ordner lässt sich nicht in sich selbst oder einen seiner Unterordner verschieben.',\n 'tree.drop.folderInFolder': 'Der Ordner liegt schon in diesem Ordner.',\n 'tree.drop.blocksOnlyInDocument': 'Bausteine lassen sich nur im geöffneten Dokument verschieben.',\n 'tree.drop.noBlocksHere': 'Hier lassen sich keine Bausteine ablegen.',\n 'tree.drop.noTransfer': 'Dieser Editor nimmt keine Bausteine von außen an.',\n 'tree.drop.blockWithoutId': 'Dieser Baustein hat noch keine ID und lässt sich nicht als Ziel ansprechen.',\n 'tree.drop.editorClosed': 'Der Editor ist nicht mehr geöffnet.',\n} as const\n"],"mappings":";AAAA,MAAa,KAAK;CAChB,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,qBAAqB;CACrB,kBAAkB;CAClB,yBAAyB;CAGzB,qBAAqB;CACrB,4BAA4B;CAC5B,yBAAyB;CACzB,8BAA8B;CAC9B,4BAA4B;CAC5B,4BAA4B;CAC5B,kCAAkC;CAClC,0BAA0B;CAC1B,wBAAwB;CACxB,4BAA4B;CAC5B,0BAA0B;AAC5B"}
|
|
1
|
+
{"version":3,"file":"tree.js","names":[],"sources":["../../../src/i18n/de/tree.ts"],"sourcesContent":["export const de = {\n 'tree.aria': 'Dokumente',\n 'tree.loading': 'Lädt…',\n 'tree.loadFailed': 'Dokumente konnten nicht geladen werden',\n 'tree.empty': 'Noch keine Dokumente',\n 'tree.rootFallback': 'Dokument',\n 'tree.untitled': '(ohne Titel)',\n 'tree.summary': 'Zusammenfassung vorhanden',\n 'tree.filter.show': 'Anzeigen',\n 'tree.filter.title': 'Anzeige filtern',\n 'tree.filter.reset': 'Filter zurücksetzen',\n 'tree.add': 'Hinzufügen',\n 'tree.delete': 'Löschen',\n 'tree.menu.newDocument': 'Neues Dokument',\n 'tree.menu.newFolder': 'Neuer Ordner',\n 'tree.menu.newSubfolder': 'Neuer Unterordner',\n 'tree.menu.newCompositeFolder': 'Neuer Ordner-Baustein',\n 'tree.menu.importFile': 'Datei importieren…',\n 'tree.menu.rename': 'Umbenennen',\n 'tree.folder.name': 'Ordnername',\n 'tree.folder.placeholder': 'Neuer Ordner',\n 'tree.folder.placeholderIn': 'Neuer Ordner in {parent}',\n 'tree.folder.renameFailed': 'Ordner nicht umbenannt',\n 'tree.removed': 'Dokument gelöscht',\n 'tree.undo': 'Rückgängig',\n 'tree.filterText.placeholder': 'Titel filtern',\n 'tree.filterText.clear': 'Titelfilter löschen',\n 'tree.noMatches': 'Keine Treffer',\n 'tree.basketFilter.label': 'Nach Korb filtern',\n 'tree.basketFilter.reset': 'Korbfilter zurücksetzen',\n 'tree.focus.root': 'Dokument',\n 'tree.focus.enter': 'Fokussieren',\n 'tree.focus.leave': 'Fokus aufheben',\n 'tree.merge': 'Mit nächstem zusammenführen',\n 'tree.root.folders': 'Ordner',\n 'tree.root.file': 'Datei als Wurzel',\n 'tree.root.unavailable': 'Nur mit einer geöffneten Baustein-Datei (Einstellung „Gliederung: Bausteine“).',\n\n // Why a drop on a row is refused (`dropVerdict`).\n 'tree.drop.nothing': 'Es wird nichts gezogen.',\n 'tree.drop.noDocumentMove': 'Im geöffneten Dokument lassen sich Dokumente und Ordner nicht verschieben.',\n 'tree.drop.foldersOnly': 'Nur Ordner nehmen Einträge auf.',\n 'tree.drop.documentInFolder': 'Das Dokument liegt schon in diesem Ordner.',\n 'tree.drop.folderIntoSelf': 'Ein Ordner lässt sich nicht in sich selbst oder einen seiner Unterordner verschieben.',\n 'tree.drop.folderInFolder': 'Der Ordner liegt schon in diesem Ordner.',\n 'tree.drop.blocksOnlyInDocument': 'Bausteine lassen sich nur im geöffneten Dokument verschieben.',\n 'tree.drop.noBlocksHere': 'Hier lassen sich keine Bausteine ablegen.',\n 'tree.drop.noTransfer': 'Dieser Editor nimmt keine Bausteine von außen an.',\n 'tree.drop.blockWithoutId': 'Dieser Baustein hat noch keine ID und lässt sich nicht als Ziel ansprechen.',\n 'tree.drop.editorClosed': 'Der Editor ist nicht mehr geöffnet.',\n} as const\n"],"mappings":";AAAA,MAAa,KAAK;CAChB,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;CAGzB,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/de.d.ts
CHANGED
|
@@ -175,6 +175,7 @@ export declare const de: {
|
|
|
175
175
|
readonly 'tree.focus.root': "Dokument";
|
|
176
176
|
readonly 'tree.focus.enter': "Fokussieren";
|
|
177
177
|
readonly 'tree.focus.leave': "Fokus aufheben";
|
|
178
|
+
readonly 'tree.merge': "Mit nächstem zusammenführen";
|
|
178
179
|
readonly 'tree.root.folders': "Ordner";
|
|
179
180
|
readonly 'tree.root.file': "Datei als Wurzel";
|
|
180
181
|
readonly 'tree.root.unavailable': "Nur mit einer geöffneten Baustein-Datei (Einstellung „Gliederung: Bausteine“).";
|
|
@@ -334,6 +335,7 @@ export declare const de: {
|
|
|
334
335
|
readonly 'composites.split.children': "In Unter-Bausteine teilen";
|
|
335
336
|
readonly 'composites.split.lengthChildren': "Nach Länge in Unter-Bausteine teilen";
|
|
336
337
|
readonly 'composites.split.lengthSiblings': "Nach Länge in Bausteine teilen";
|
|
338
|
+
readonly 'composites.merge.next': "Mit nächstem zusammenführen";
|
|
337
339
|
readonly 'settings.editing.splitTargetChars': "Zielgröße beim Teilen (Zeichen)";
|
|
338
340
|
readonly 'composites.toolbar.toKind': "In Baustein umwandeln";
|
|
339
341
|
readonly 'composites.toolbar.structure': "Gliederung umwandeln";
|
|
@@ -107,6 +107,7 @@ const en = {
|
|
|
107
107
|
"composites.split.children": "Split into sub-building blocks",
|
|
108
108
|
"composites.split.lengthChildren": "Split by length into sub-building blocks",
|
|
109
109
|
"composites.split.lengthSiblings": "Split by length into building blocks",
|
|
110
|
+
"composites.merge.next": "Merge with next",
|
|
110
111
|
"settings.editing.splitTargetChars": "Target size when splitting (characters)",
|
|
111
112
|
"composites.toolbar.toKind": "Convert to building block",
|
|
112
113
|
"composites.toolbar.structure": "Convert structure",
|
|
@@ -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.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 '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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"}
|
|
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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"}
|
package/dist/i18n/en/tree.js
CHANGED
|
@@ -32,6 +32,7 @@ const en = {
|
|
|
32
32
|
"tree.focus.root": "Document",
|
|
33
33
|
"tree.focus.enter": "Focus",
|
|
34
34
|
"tree.focus.leave": "Leave focus",
|
|
35
|
+
"tree.merge": "Merge with next",
|
|
35
36
|
"tree.root.folders": "Folders",
|
|
36
37
|
"tree.root.file": "File as root",
|
|
37
38
|
"tree.root.unavailable": "Only with an open building-block file (setting “Structure: building blocks”).",
|