@ecsplico/editor 3.1.0 → 3.2.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.
Files changed (270) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/dist/adapters/direct-ai.d.ts +36 -0
  3. package/dist/adapters/direct-ai.js +169 -0
  4. package/dist/adapters/direct-ai.js.map +1 -0
  5. package/dist/adapters/memory.js.map +1 -1
  6. package/dist/code/CodeSurface.vue.d.ts +2 -2
  7. package/dist/core/block-drag.js +3 -0
  8. package/dist/core/block-drag.js.map +1 -1
  9. package/dist/core/block-transfer.d.ts +44 -0
  10. package/dist/core/block-transfer.js +68 -0
  11. package/dist/core/block-transfer.js.map +1 -0
  12. package/dist/core/commands.js +5 -0
  13. package/dist/core/commands.js.map +1 -1
  14. package/dist/core/core-feature.d.ts +4 -1
  15. package/dist/core/core-feature.js +8 -3
  16. package/dist/core/core-feature.js.map +1 -1
  17. package/dist/core/editor-ui.d.ts +3 -1
  18. package/dist/core/editor-ui.js.map +1 -1
  19. package/dist/core/extension-points.d.ts +17 -1
  20. package/dist/core/feature.d.ts +6 -1
  21. package/dist/core/feature.js.map +1 -1
  22. package/dist/core/index.d.ts +4 -2
  23. package/dist/core/index.js +3 -2
  24. package/dist/core/schema/index.d.ts +24 -3
  25. package/dist/core/schema/index.js +21 -4
  26. package/dist/core/schema/index.js.map +1 -1
  27. package/dist/core/surface-session.js +3 -1
  28. package/dist/core/surface-session.js.map +1 -1
  29. package/dist/core/toolbar-items.js +1 -1
  30. package/dist/core/toolbar-items.js.map +1 -1
  31. package/dist/document/DocumentSurface.vue.d.ts +2 -2
  32. package/dist/features/ai/agent-op-review.js +1 -1
  33. package/dist/features/ai/agent-ops.js +2 -2
  34. package/dist/features/ai/ai-apply.js +1 -1
  35. package/dist/features/ai/assistant.js +1 -1
  36. package/dist/features/ai/components/AiSelectionMenu.js +2 -2
  37. package/dist/features/ai/components/AiSidebar.js +2 -2
  38. package/dist/features/ai/components/SettingsAiTab.js +1 -1
  39. package/dist/features/ai/components/SettingsModelProfiles.js +1 -1
  40. package/dist/features/ai/document-chat-model.js +1 -1
  41. package/dist/features/ai/document-chat.js +2 -2
  42. package/dist/features/ai/ghost-autocomplete.js +1 -1
  43. package/dist/features/ai/index.d.ts +4 -3
  44. package/dist/features/ai/index.js +6 -5
  45. package/dist/features/ai/protocol/complete.d.ts +19 -0
  46. package/dist/features/ai/protocol/complete.js +27 -1
  47. package/dist/features/ai/protocol/complete.js.map +1 -1
  48. package/dist/features/ai/protocol/generate.d.ts +95 -0
  49. package/dist/features/ai/protocol/generate.js +58 -0
  50. package/dist/features/ai/protocol/generate.js.map +1 -0
  51. package/dist/features/ai/protocol/index.d.ts +4 -3
  52. package/dist/features/ai/protocol/index.js +6 -5
  53. package/dist/features/ai/protocol/tasks.d.ts +3 -1
  54. package/dist/features/ai/protocol/tasks.js +74 -2
  55. package/dist/features/ai/protocol/tasks.js.map +1 -1
  56. package/dist/features/ai/react/AiSelectionMenu.js +2 -2
  57. package/dist/features/ai/react/AiSidebar.js +2 -2
  58. package/dist/features/ai/react/SettingsAiTab.js +1 -1
  59. package/dist/features/ai/react/SettingsModelProfiles.js +1 -1
  60. package/dist/features/ai/selection-flow.js +1 -1
  61. package/dist/features/ai/sidebar-flow.js +1 -1
  62. package/dist/features/block-ui/block-actions.d.ts +19 -3
  63. package/dist/features/block-ui/block-actions.js +49 -3
  64. package/dist/features/block-ui/block-actions.js.map +1 -1
  65. package/dist/features/block-ui/components/BlockActionsOverlay.js +24 -13
  66. package/dist/features/block-ui/components/BlockActionsOverlay.js.map +1 -1
  67. package/dist/features/block-ui/components/BlockActionsOverlay.vue.d.ts +12 -5
  68. package/dist/features/block-ui/components/BlockUi.js +52 -20
  69. package/dist/features/block-ui/components/BlockUi.js.map +1 -1
  70. package/dist/features/block-ui/components/BlockUi.vue.d.ts +6 -4
  71. package/dist/features/block-ui/feature.d.ts +8 -2
  72. package/dist/features/block-ui/feature.js +7 -2
  73. package/dist/features/block-ui/feature.js.map +1 -1
  74. package/dist/features/block-ui/index.d.ts +3 -2
  75. package/dist/features/block-ui/index.js +2 -2
  76. package/dist/features/block-ui/react/BlockActionsOverlay.d.ts +14 -7
  77. package/dist/features/block-ui/react/BlockActionsOverlay.js +25 -13
  78. package/dist/features/block-ui/react/BlockActionsOverlay.js.map +1 -1
  79. package/dist/features/block-ui/react/BlockUi.d.ts +6 -4
  80. package/dist/features/block-ui/react/BlockUi.js +43 -15
  81. package/dist/features/block-ui/react/BlockUi.js.map +1 -1
  82. package/dist/features/block-ui/react.d.ts +4 -2
  83. package/dist/features/block-ui/react.js +3 -3
  84. package/dist/features/block-ui/react.js.map +1 -1
  85. package/dist/features/block-ui/vue.d.ts +4 -2
  86. package/dist/features/block-ui/vue.js +3 -3
  87. package/dist/features/block-ui/vue.js.map +1 -1
  88. package/dist/features/composites/baskets.d.ts +27 -0
  89. package/dist/features/composites/baskets.js +46 -0
  90. package/dist/features/composites/baskets.js.map +1 -0
  91. package/dist/features/composites/components/CompositeBasketMenu.js +97 -0
  92. package/dist/features/composites/components/CompositeBasketMenu.js.map +1 -0
  93. package/dist/features/composites/components/CompositeChrome.js +79 -23
  94. package/dist/features/composites/components/CompositeChrome.js.map +1 -1
  95. package/dist/features/composites/components/CompositeFieldEditor.js +1 -0
  96. package/dist/features/composites/components/CompositeFieldEditor.js.map +1 -1
  97. package/dist/features/composites/components/CompositeView.js +17 -2
  98. package/dist/features/composites/components/CompositeView.js.map +1 -1
  99. package/dist/features/composites/components/DerivationBadge.js +12 -3
  100. package/dist/features/composites/components/DerivationBadge.js.map +1 -1
  101. package/dist/features/composites/components/FocusChip.js +53 -0
  102. package/dist/features/composites/components/FocusChip.js.map +1 -0
  103. package/dist/features/composites/components/FocusChip.vue.d.ts +14 -0
  104. package/dist/features/composites/components/SettingsEditingTab.js +40 -4
  105. package/dist/features/composites/components/SettingsEditingTab.js.map +1 -1
  106. package/dist/features/composites/derivation.d.ts +2 -1
  107. package/dist/features/composites/derivation.js +5 -1
  108. package/dist/features/composites/derivation.js.map +1 -1
  109. package/dist/features/composites/derived-chrome.js +13 -3
  110. package/dist/features/composites/derived-chrome.js.map +1 -1
  111. package/dist/features/composites/feature.d.ts +7 -1
  112. package/dist/features/composites/feature.js +96 -23
  113. package/dist/features/composites/feature.js.map +1 -1
  114. package/dist/features/composites/focus.d.ts +38 -0
  115. package/dist/features/composites/focus.js +86 -0
  116. package/dist/features/composites/focus.js.map +1 -0
  117. package/dist/features/composites/index.d.ts +6 -3
  118. package/dist/features/composites/index.js +6 -3
  119. package/dist/features/composites/meta-keys.d.ts +4 -0
  120. package/dist/features/composites/meta-keys.js +8 -4
  121. package/dist/features/composites/meta-keys.js.map +1 -1
  122. package/dist/features/composites/nodes.d.ts +14 -2
  123. package/dist/features/composites/nodes.js +61 -5
  124. package/dist/features/composites/nodes.js.map +1 -1
  125. package/dist/features/composites/outline.d.ts +4 -0
  126. package/dist/features/composites/outline.js +3 -0
  127. package/dist/features/composites/outline.js.map +1 -1
  128. package/dist/features/composites/react/CompositeBasketMenu.js +88 -0
  129. package/dist/features/composites/react/CompositeBasketMenu.js.map +1 -0
  130. package/dist/features/composites/react/CompositeChrome.js +52 -4
  131. package/dist/features/composites/react/CompositeChrome.js.map +1 -1
  132. package/dist/features/composites/react/CompositeView.js +12 -2
  133. package/dist/features/composites/react/CompositeView.js.map +1 -1
  134. package/dist/features/composites/react/DerivationBadge.js +10 -1
  135. package/dist/features/composites/react/DerivationBadge.js.map +1 -1
  136. package/dist/features/composites/react/FocusChip.d.ts +11 -0
  137. package/dist/features/composites/react/FocusChip.js +50 -0
  138. package/dist/features/composites/react/FocusChip.js.map +1 -0
  139. package/dist/features/composites/react/SettingsEditingTab.js +36 -1
  140. package/dist/features/composites/react/SettingsEditingTab.js.map +1 -1
  141. package/dist/features/composites/react.d.ts +2 -1
  142. package/dist/features/composites/react.js +3 -1
  143. package/dist/features/composites/react.js.map +1 -1
  144. package/dist/features/composites/schema.d.ts +5 -3
  145. package/dist/features/composites/schema.js +8 -4
  146. package/dist/features/composites/schema.js.map +1 -1
  147. package/dist/features/composites/split.d.ts +62 -0
  148. package/dist/features/composites/split.js +172 -0
  149. package/dist/features/composites/split.js.map +1 -0
  150. package/dist/features/composites/vue.d.ts +4 -3
  151. package/dist/features/composites/vue.js +7 -5
  152. package/dist/features/composites/vue.js.map +1 -1
  153. package/dist/features/media/index.js +1 -1
  154. package/dist/features/media/react/AudioRecorderModal.js +1 -1
  155. package/dist/features/media/react.js +1 -1
  156. package/dist/features/transfer/components/TransferMenu.js +93 -0
  157. package/dist/features/transfer/components/TransferMenu.js.map +1 -0
  158. package/dist/features/transfer/components/TransferMenu.vue.d.ts +15 -0
  159. package/dist/features/transfer/feature.d.ts +76 -0
  160. package/dist/features/transfer/feature.js +169 -0
  161. package/dist/features/transfer/feature.js.map +1 -0
  162. package/dist/features/transfer/index.d.ts +3 -0
  163. package/dist/features/transfer/index.js +3 -0
  164. package/dist/features/transfer/react/TransferMenu.d.ts +12 -0
  165. package/dist/features/transfer/react/TransferMenu.js +71 -0
  166. package/dist/features/transfer/react/TransferMenu.js.map +1 -0
  167. package/dist/features/transfer/react.d.ts +10 -0
  168. package/dist/features/transfer/react.js +11 -0
  169. package/dist/features/transfer/react.js.map +1 -0
  170. package/dist/features/transfer/transforms.d.ts +83 -0
  171. package/dist/features/transfer/transforms.js +137 -0
  172. package/dist/features/transfer/transforms.js.map +1 -0
  173. package/dist/features/transfer/vue.d.ts +9 -0
  174. package/dist/features/transfer/vue.js +11 -0
  175. package/dist/features/transfer/vue.js.map +1 -0
  176. package/dist/i18n/de/ai.js +4 -0
  177. package/dist/i18n/de/ai.js.map +1 -1
  178. package/dist/i18n/de/composites.js +20 -1
  179. package/dist/i18n/de/composites.js.map +1 -1
  180. package/dist/i18n/de/integrations.js +16 -0
  181. package/dist/i18n/de/integrations.js.map +1 -1
  182. package/dist/i18n/de/transfer.js +17 -0
  183. package/dist/i18n/de/transfer.js.map +1 -0
  184. package/dist/i18n/de/tree.js +6 -0
  185. package/dist/i18n/de/tree.js.map +1 -1
  186. package/dist/i18n/de.d.ts +55 -0
  187. package/dist/i18n/de.js +3 -1
  188. package/dist/i18n/de.js.map +1 -1
  189. package/dist/i18n/en/ai.js +4 -0
  190. package/dist/i18n/en/ai.js.map +1 -1
  191. package/dist/i18n/en/composites.js +20 -1
  192. package/dist/i18n/en/composites.js.map +1 -1
  193. package/dist/i18n/en/integrations.js +16 -0
  194. package/dist/i18n/en/integrations.js.map +1 -1
  195. package/dist/i18n/en/transfer.js +17 -0
  196. package/dist/i18n/en/transfer.js.map +1 -0
  197. package/dist/i18n/en/tree.js +6 -0
  198. package/dist/i18n/en/tree.js.map +1 -1
  199. package/dist/i18n/en.js +3 -1
  200. package/dist/i18n/en.js.map +1 -1
  201. package/dist/integrations/composite-ai/composite-fill.js +1 -1
  202. package/dist/integrations/composite-ai/composite-summary.js +1 -1
  203. package/dist/integrations/composite-ai/derive.d.ts +21 -0
  204. package/dist/integrations/composite-ai/derive.js +69 -47
  205. package/dist/integrations/composite-ai/derive.js.map +1 -1
  206. package/dist/integrations/composite-ai/index.d.ts +8 -3
  207. package/dist/integrations/composite-ai/index.js +50 -4
  208. package/dist/integrations/composite-ai/index.js.map +1 -1
  209. package/dist/integrations/composite-ai/outline-sanitize.d.ts +48 -0
  210. package/dist/integrations/composite-ai/outline-sanitize.js +175 -0
  211. package/dist/integrations/composite-ai/outline-sanitize.js.map +1 -0
  212. package/dist/integrations/composite-ai/split.d.ts +44 -0
  213. package/dist/integrations/composite-ai/split.js +187 -0
  214. package/dist/integrations/composite-ai/split.js.map +1 -0
  215. package/dist/integrations/composite-ai/transfer-transforms.d.ts +27 -0
  216. package/dist/integrations/composite-ai/transfer-transforms.js +153 -0
  217. package/dist/integrations/composite-ai/transfer-transforms.js.map +1 -0
  218. package/dist/integrations/transcript-ai/protocol.d.ts +13 -0
  219. package/dist/integrations/transcript-ai/protocol.js +49 -1
  220. package/dist/integrations/transcript-ai/protocol.js.map +1 -1
  221. package/dist/integrations/transcript-ai/transcript-cleanup.js +1 -1
  222. package/dist/markdown/MarkdownSurface.vue.d.ts +6 -6
  223. package/dist/nuxt/module.d.ts +110 -0
  224. package/dist/presets/compose.d.ts +24 -8
  225. package/dist/presets/compose.js +117 -58
  226. package/dist/presets/compose.js.map +1 -1
  227. package/dist/react/compose.js +6 -2
  228. package/dist/react/compose.js.map +1 -1
  229. package/dist/react/composed-surface.d.ts +9 -0
  230. package/dist/react/composed-surface.js +4 -1
  231. package/dist/react/composed-surface.js.map +1 -1
  232. package/dist/server/ai.d.ts +2 -5
  233. package/dist/server/ai.js.map +1 -1
  234. package/dist/server/handlers/ai.d.ts +7 -78
  235. package/dist/server/handlers/ai.js +30 -94
  236. package/dist/server/handlers/ai.js.map +1 -1
  237. package/dist/server/handlers/editor.d.ts +1 -0
  238. package/dist/server/handlers/index.d.ts +3 -1
  239. package/dist/server/handlers/index.js +3 -1
  240. package/dist/server/index.d.ts +2 -1
  241. package/dist/settings/index.d.ts +8 -0
  242. package/dist/settings/index.js +16 -4
  243. package/dist/settings/index.js.map +1 -1
  244. package/dist/styles/composites.css +32 -0
  245. package/dist/tree/DocumentTree.js +229 -78
  246. package/dist/tree/DocumentTree.js.map +1 -1
  247. package/dist/tree/drop-rules.js +8 -0
  248. package/dist/tree/drop-rules.js.map +1 -1
  249. package/dist/tree/react/DocumentTree.js +152 -31
  250. package/dist/tree/react/DocumentTree.js.map +1 -1
  251. package/dist/tree/tree-host.js +30 -1
  252. package/dist/tree/tree-host.js.map +1 -1
  253. package/dist/tree/tree-items.js +52 -5
  254. package/dist/tree/tree-items.js.map +1 -1
  255. package/dist/tree/tree-model.js +113 -10
  256. package/dist/tree/tree-model.js.map +1 -1
  257. package/dist/tree/tree-rows.js +20 -7
  258. package/dist/tree/tree-rows.js.map +1 -1
  259. package/dist/tree/tree-view-model.d.ts +5 -0
  260. package/dist/tree/tree-view-model.js +13 -0
  261. package/dist/tree/tree-view-model.js.map +1 -1
  262. package/dist/vue/AdvancedEditor.js +6 -0
  263. package/dist/vue/AdvancedEditor.js.map +1 -1
  264. package/dist/vue/AdvancedEditor.vue.d.ts +13 -5
  265. package/dist/vue/SimpleEditor.vue.d.ts +4 -4
  266. package/dist/vue/components/EditorSurface.vue.d.ts +4 -4
  267. package/dist/vue/compose.js +6 -2
  268. package/dist/vue/compose.js.map +1 -1
  269. package/dist/vue/kit/types.d.ts +2 -0
  270. package/package.json +21 -1
@@ -0,0 +1,137 @@
1
+ import { de } from "../../i18n/de.js";
2
+ import { editorEntryOf } from "../../core/editor-ui.js";
3
+ import { guardsAccept } from "../../core/commands.js";
4
+ import { newBlockId } from "../../core/schema/block-ids.js";
5
+ import { sha256Hex } from "../../core/hash.js";
6
+ import { DERIVATION_KEY } from "../composites/meta-keys.js";
7
+ import { bodyMarkdown } from "../composites/derivation.js";
8
+ import { compositeKindsOf } from "../composites/nodes.js";
9
+ //#region src/features/transfer/transforms.ts
10
+ /** `json` with a fresh block id on every block that carries one (recursively); other nodes and attributes stay. */
11
+ function withFreshBlockIds(editor, json) {
12
+ const visit = (node) => {
13
+ const next = { ...node };
14
+ if (node.type && editor.schema.nodes[node.type]?.spec.editorBlock === true) next.attrs = {
15
+ ...node.attrs,
16
+ id: newBlockId()
17
+ };
18
+ if (node.content) next.content = node.content.map(visit);
19
+ return next;
20
+ };
21
+ return visit(json);
22
+ }
23
+ /** The `Creates` a node of `json` stands for in the insert guards. */
24
+ const createsOf = (json) => ({
25
+ type: json.type ?? "",
26
+ ...json.attrs && { attrs: json.attrs }
27
+ });
28
+ /**
29
+ * The hash a derivation of the dragged block records as `inputHash`: the Markdown of a Baustein's body (the same text
30
+ * `derivationState` hashes for a source in the open document), else of the whole block. Without a Markdown serializer the
31
+ * hash of the payload's Markdown.
32
+ */
33
+ function transferSourceHash(editor, payload) {
34
+ const { json } = payload;
35
+ if (!editor.markdown || json.type !== "composite") return sha256Hex(payload.markdown);
36
+ return sha256Hex(editor.markdown.serialize({
37
+ type: "doc",
38
+ content: (json.content ?? []).slice(3)
39
+ }));
40
+ }
41
+ /** The kind of Baustein the AI transforms insert: the setting `blocks.defaultKind` when the editor offers it, else its first kind. */
42
+ function transferKindOf(editor) {
43
+ const kinds = compositeKindsOf(editor);
44
+ const wanted = editorEntryOf(editor)?.ctx.settings.get().blocks.defaultKind;
45
+ return kinds.find((kind) => kind.id === wanted)?.id ?? kinds[0]?.id ?? "section";
46
+ }
47
+ /**
48
+ * „Kopie einfügen“: inserts the dragged block with fresh block ids (the block and every block inside it). A Baustein
49
+ * that has a block id records its source in `meta.derivation` (`from: { block, document }`, method `copy`, the source
50
+ * Markdown as `inputHash`, the hash of the copy's body as `outputHash`, so the badge shows „bearbeitet“ once the copy is edited).
51
+ */
52
+ const copyTransform = {
53
+ id: "copy",
54
+ label: de["transfer.copy"],
55
+ labelKey: "transfer.copy",
56
+ icon: "i-lucide-copy",
57
+ creates: (ctx) => createsOf(ctx.payload.json),
58
+ run: async ({ editor, payload, pos }) => {
59
+ const json = withFreshBlockIds(editor, payload.json);
60
+ let node = editor.schema.nodeFromJSON(json);
61
+ if (json.type === "composite" && payload.blockId) {
62
+ const derivation = {
63
+ from: {
64
+ block: payload.blockId,
65
+ ...payload.documentId && { document: payload.documentId }
66
+ },
67
+ method: "copy",
68
+ createdAt: (/* @__PURE__ */ new Date()).toISOString(),
69
+ inputHash: transferSourceHash(editor, payload),
70
+ outputHash: editor.markdown ? sha256Hex(bodyMarkdown(editor, node)) : transferSourceHash(editor, payload)
71
+ };
72
+ node = editor.schema.nodeFromJSON({
73
+ ...json,
74
+ attrs: {
75
+ ...json.attrs,
76
+ meta: {
77
+ ...json.attrs?.meta,
78
+ [DERIVATION_KEY]: derivation
79
+ }
80
+ }
81
+ });
82
+ }
83
+ editor.view.dispatch(editor.state.tr.insert(pos, node).scrollIntoView());
84
+ }
85
+ };
86
+ /** The transforms `transferFeature` offers unless the host passes its own list: the copy. The AI transforms (`summaryTransform`, `bulletsTransform`) live in `@ecsplico/editor/integrations/composite-ai`; `composeEditor` adds them when `ai` is on. */
87
+ const DEFAULT_TRANSFORMS = [copyTransform];
88
+ /** The context a transform of `env` gets for dropping `payload` at `pos` (clamped into the document). */
89
+ function transformContextOf(env, payload, pos) {
90
+ const { editor, ai, app, notify, t } = env;
91
+ return {
92
+ editor,
93
+ payload,
94
+ pos: Math.min(Math.max(pos, 0), editor.state.doc.content.size),
95
+ ai,
96
+ app,
97
+ notify,
98
+ t
99
+ };
100
+ }
101
+ /** The transforms of `env` available for dropping `payload` at `pos`, in list order. */
102
+ function availableTransforms(env, payload, pos) {
103
+ const ctx = transformContextOf(env, payload, pos);
104
+ return env.transforms.filter((transform) => transform.available?.(ctx) ?? true);
105
+ }
106
+ /**
107
+ * Runs the transform `id` of `env` for dropping `payload` at `pos`. Nothing runs for an unknown or unavailable
108
+ * transform. What the transform inserts (`BlockTransform.creates`) must pass the insert guards below `pos`'s parent and
109
+ * the parent's content rules, else the warning „Hier lässt sich der Baustein nicht einfügen“ is shown and the document stays
110
+ * unchanged. The transform's own failure is its own to report; this never throws for a refusal.
111
+ */
112
+ async function runTransform(env, id, payload, pos) {
113
+ const transform = env.transforms.find((candidate) => candidate.id === id);
114
+ if (!transform) return;
115
+ const ctx = transformContextOf(env, payload, pos);
116
+ if (transform.available && !transform.available(ctx)) return;
117
+ const creates = transform.creates?.(ctx) ?? (transform.id === "copy" ? createsOf(payload.json) : null);
118
+ if (creates && !canInsertAt(env.editor, ctx.pos, creates)) {
119
+ env.notify({
120
+ kind: "warning",
121
+ title: env.t("transfer.refused")
122
+ });
123
+ return;
124
+ }
125
+ await transform.run(ctx);
126
+ }
127
+ /** Whether a node like `creates` fits the content rules below `pos`'s parent and passes every insert guard there. */
128
+ function canInsertAt(editor, pos, creates) {
129
+ const type = editor.schema.nodes[creates.type];
130
+ const $pos = editor.state.doc.resolve(pos);
131
+ if (!type || !$pos.parent.canReplaceWith($pos.index(), $pos.index(), type)) return false;
132
+ return guardsAccept(editor, $pos, creates);
133
+ }
134
+ //#endregion
135
+ export { DEFAULT_TRANSFORMS, availableTransforms, copyTransform, createsOf, runTransform, transferKindOf, transferSourceHash, transformContextOf, withFreshBlockIds };
136
+
137
+ //# sourceMappingURL=transforms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transforms.js","names":[],"sources":["../../../src/features/transfer/transforms.ts"],"sourcesContent":["// Types only: brings in the `editor.markdown` augmentation of `@tiptap/markdown` for contexts that do not otherwise load it.\nimport type {} from '@tiptap/markdown'\nimport type { Editor, JSONContent } from '@tiptap/core'\nimport type { EditorBackend } from '../../core/backend'\nimport { type BlockTransfer, editorEntryOf, guardsAccept, sha256Hex } from '../../core'\nimport type { Creates } from '../../core/command-types'\nimport type { EditorContext } from '../../core/context'\nimport type { Notifier } from '../../core/notify'\nimport { newBlockId } from '../../core/schema'\nimport { de } from '../../i18n/de'\nimport type { MessageKey, Translate } from '../../i18n'\nimport { bodyMarkdown, COMPOSITE_CHROME_COUNT, compositeKindsOf, DERIVATION_KEY, type Derivation } from '../composites/schema'\n\n/** What a transform works with: the target editor, the dragged block, where it lands and the app services. */\nexport interface TransformContext {\n editor: Editor\n payload: BlockTransfer\n /** Document position the result is inserted at (a valid drop point of `editor.state.doc`). */\n pos: number\n /** The app's AI backend; absent when the app has none. */\n ai: EditorBackend['ai'] | undefined\n /** The app context the editor belongs to; transforms that need app services (the AI model profiles) read them from it. */\n app: EditorContext\n notify: Notifier\n t: Translate\n}\n\n/** One way to put a dragged block into a surface: offered by the transform menu and run by a plain drop (the default transform). */\nexport interface BlockTransform {\n id: string\n /** Menu text; shown as is unless `labelKey` is set. */\n label: string\n /** Message key of the label: the menu renders it in the editor's language instead of `label`. */\n labelKey?: MessageKey\n /** Iconify name (`i-lucide-…`). */\n icon: string\n /** Absent = always available. */\n available?: (ctx: TransformContext) => boolean\n /**\n * What `run` inserts at `ctx.pos`, so the insert guards and the target's content rules are checked before `run`; a\n * refused insert shows the warning „lässt sich nicht einfügen“ and runs nothing. Absent: the transform `copy` is\n * checked as inserting the dragged block itself, every other transform checks itself.\n */\n creates?: (ctx: TransformContext) => Creates | null\n run: (ctx: TransformContext) => Promise<void>\n}\n\n/** `json` with a fresh block id on every block that carries one (recursively); other nodes and attributes stay. */\nexport function withFreshBlockIds(editor: Editor, json: JSONContent): JSONContent {\n const visit = (node: JSONContent): JSONContent => {\n const next: JSONContent = { ...node }\n if (node.type && editor.schema.nodes[node.type]?.spec.editorBlock === true) next.attrs = { ...node.attrs, id: newBlockId() }\n if (node.content) next.content = node.content.map(visit)\n return next\n }\n return visit(json)\n}\n\n/** The `Creates` a node of `json` stands for in the insert guards. */\nexport const createsOf = (json: JSONContent): Creates => ({ type: json.type ?? '', ...(json.attrs && { attrs: json.attrs }) })\n\n/**\n * The hash a derivation of the dragged block records as `inputHash`: the Markdown of a Baustein's body (the same text\n * `derivationState` hashes for a source in the open document), else of the whole block. Without a Markdown serializer the\n * hash of the payload's Markdown.\n */\nexport function transferSourceHash(editor: Editor, payload: BlockTransfer): string {\n const { json } = payload\n if (!editor.markdown || json.type !== 'composite') return sha256Hex(payload.markdown)\n return sha256Hex(editor.markdown.serialize({ type: 'doc', content: (json.content ?? []).slice(COMPOSITE_CHROME_COUNT) }))\n}\n\n/** The kind of Baustein the AI transforms insert: the setting `blocks.defaultKind` when the editor offers it, else its first kind. */\nexport function transferKindOf(editor: Editor): string {\n const kinds = compositeKindsOf(editor)\n const wanted = editorEntryOf(editor)?.ctx.settings.get().blocks.defaultKind\n return kinds.find(kind => kind.id === wanted)?.id ?? kinds[0]?.id ?? 'section'\n}\n\n/**\n * „Kopie einfügen“: inserts the dragged block with fresh block ids (the block and every block inside it). A Baustein\n * that has a block id records its source in `meta.derivation` (`from: { block, document }`, method `copy`, the source\n * Markdown as `inputHash`, the hash of the copy's body as `outputHash`, so the badge shows „bearbeitet“ once the copy is edited).\n */\nexport const copyTransform: BlockTransform = {\n id: 'copy',\n label: de['transfer.copy'],\n labelKey: 'transfer.copy',\n icon: 'i-lucide-copy',\n creates: ctx => createsOf(ctx.payload.json),\n run: async ({ editor, payload, pos }) => {\n const json = withFreshBlockIds(editor, payload.json)\n let node = editor.schema.nodeFromJSON(json)\n if (json.type === 'composite' && payload.blockId) {\n const derivation: Derivation = {\n from: { block: payload.blockId, ...(payload.documentId && { document: payload.documentId }) },\n method: 'copy',\n createdAt: new Date().toISOString(),\n inputHash: transferSourceHash(editor, payload),\n outputHash: editor.markdown ? sha256Hex(bodyMarkdown(editor, node)) : transferSourceHash(editor, payload),\n }\n node = editor.schema.nodeFromJSON({ ...json, attrs: { ...json.attrs, meta: { ...json.attrs?.meta, [DERIVATION_KEY]: derivation } } })\n }\n editor.view.dispatch(editor.state.tr.insert(pos, node).scrollIntoView())\n },\n}\n\n/** The transforms `transferFeature` offers unless the host passes its own list: the copy. The AI transforms (`summaryTransform`, `bulletsTransform`) live in `@ecsplico/editor/integrations/composite-ai`; `composeEditor` adds them when `ai` is on. */\nexport const DEFAULT_TRANSFORMS: readonly BlockTransform[] = [copyTransform]\n\n/** What `runTransform` needs: the editor, the transform list and the app services. */\nexport interface TransferEnv {\n editor: Editor\n transforms: readonly BlockTransform[]\n ai: EditorBackend['ai'] | undefined\n app: EditorContext\n notify: Notifier\n t: Translate\n}\n\n/** The context a transform of `env` gets for dropping `payload` at `pos` (clamped into the document). */\nexport function transformContextOf(env: TransferEnv, payload: BlockTransfer, pos: number): TransformContext {\n const { editor, ai, app, notify, t } = env\n return { editor, payload, pos: Math.min(Math.max(pos, 0), editor.state.doc.content.size), ai, app, notify, t }\n}\n\n/** The transforms of `env` available for dropping `payload` at `pos`, in list order. */\nexport function availableTransforms(env: TransferEnv, payload: BlockTransfer, pos: number): BlockTransform[] {\n const ctx = transformContextOf(env, payload, pos)\n return env.transforms.filter(transform => transform.available?.(ctx) ?? true)\n}\n\n/**\n * Runs the transform `id` of `env` for dropping `payload` at `pos`. Nothing runs for an unknown or unavailable\n * transform. What the transform inserts (`BlockTransform.creates`) must pass the insert guards below `pos`'s parent and\n * the parent's content rules, else the warning „Hier lässt sich der Baustein nicht einfügen“ is shown and the document stays\n * unchanged. The transform's own failure is its own to report; this never throws for a refusal.\n */\nexport async function runTransform(env: TransferEnv, id: string, payload: BlockTransfer, pos: number): Promise<void> {\n const transform = env.transforms.find(candidate => candidate.id === id)\n if (!transform) return\n const ctx = transformContextOf(env, payload, pos)\n if (transform.available && !transform.available(ctx)) return\n const creates = transform.creates?.(ctx) ?? (transform.id === 'copy' ? createsOf(payload.json) : null)\n if (creates && !canInsertAt(env.editor, ctx.pos, creates)) {\n env.notify({ kind: 'warning', title: env.t('transfer.refused') })\n return\n }\n await transform.run(ctx)\n}\n\n/** Whether a node like `creates` fits the content rules below `pos`'s parent and passes every insert guard there. */\nfunction canInsertAt(editor: Editor, pos: number, creates: Creates): boolean {\n const type = editor.schema.nodes[creates.type]\n const $pos = editor.state.doc.resolve(pos)\n if (!type || !$pos.parent.canReplaceWith($pos.index(), $pos.index(), type)) return false\n return guardsAccept(editor, $pos, creates)\n}\n"],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { VueFeature } from "../../vue/index.js";
2
+ import { TransferFeatureOptions } from "./feature.js";
3
+ import _default from "./components/TransferMenu.vue.js";
4
+ //#region src/features/transfer/vue.d.ts
5
+ /** The Vue transfer feature (Nuxt UI): see `transferFeatureCore`. */
6
+ export declare function transferFeature(options?: TransferFeatureOptions): VueFeature;
7
+ //#endregion
8
+ export { _default as TransferMenu };
9
+ //# sourceMappingURL=vue.d.ts.map
@@ -0,0 +1,11 @@
1
+ import { transferFeatureCore } from "./feature.js";
2
+ import _sfc_main from "./components/TransferMenu.js";
3
+ //#region src/features/transfer/vue.ts
4
+ /** The Vue transfer feature (Nuxt UI): see `transferFeatureCore`. */
5
+ function transferFeature(options = {}) {
6
+ return transferFeatureCore({ menu: _sfc_main }, options);
7
+ }
8
+ //#endregion
9
+ export { _sfc_main as TransferMenu, transferFeature };
10
+
11
+ //# sourceMappingURL=vue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vue.js","names":["TransferMenu"],"sources":["../../../src/features/transfer/vue.ts"],"sourcesContent":["import type { Component } from 'vue'\nimport type { VueFeature } from '../../vue'\nimport TransferMenu from './components/TransferMenu.vue'\nimport { type TransferFeatureOptions, transferFeatureCore } from './feature'\n\nexport { default as TransferMenu } from './components/TransferMenu.vue'\n\n/** The Vue transfer feature (Nuxt UI): see `transferFeatureCore`. */\nexport function transferFeature(options: TransferFeatureOptions = {}): VueFeature {\n return transferFeatureCore<Component>({ menu: TransferMenu }, options)\n}\n"],"mappings":";;;;AAQA,SAAgB,gBAAgB,UAAkC,CAAC,GAAe;CAChF,OAAO,oBAA+B,EAAE,MAAMA,UAAa,GAAG,OAAO;AACvE"}
@@ -19,6 +19,10 @@ const de = {
19
19
  "ai.task.continue.label": "Weiterschreiben",
20
20
  "ai.task.fillBlock.label": "Baustein füllen",
21
21
  "ai.task.fillBlock.promptLabel": "Hinweis (optional)",
22
+ "ai.task.splitBlock.label": "Baustein gliedern",
23
+ "ai.task.outlineSanitize.label": "Gliederung bereinigen",
24
+ "ai.task.transferSummary.label": "Zusammenfassung (Übertragen)",
25
+ "ai.task.transferBullets.label": "Stichpunkte (Übertragen)",
22
26
  "ai.slot.complete.label": "Vorschläge beim Tippen",
23
27
  "ai.slot.complete.description": "Schnelles Modell; muss Assistant-Prefill unterstützen.",
24
28
  "ai.slot.rewrite.label": "Text im Block",
@@ -1 +1 @@
1
- {"version":3,"file":"ai.js","names":[],"sources":["../../../src/i18n/de/ai.ts"],"sourcesContent":["export const de = {\n // Tasks (menus, sidebar chips, prompt hints, result headings)\n 'ai.task.reformulate.label': 'Umformulieren',\n 'ai.task.reformulate.promptLabel': 'Hinweis (optional), z. B. „kürzer“ oder „förmlicher“',\n 'ai.task.generate.label': 'Text generieren',\n 'ai.task.generate.promptLabel': 'Was soll geschrieben werden?',\n 'ai.task.transcript.promptLabel': 'Hinweis (optional), z. B. „nur Beschlüsse“ oder „auf Englisch“',\n 'ai.task.transcriptSummary.heading': 'Zusammenfassung',\n 'ai.task.transcriptMinutes.heading': 'Protokoll',\n 'ai.task.transcriptActionItems.heading': 'Aufgaben',\n 'ai.task.fix.label': 'Korrigieren',\n 'ai.task.shorter.label': 'Kürzer',\n 'ai.task.formal.label': 'Förmlicher',\n 'ai.task.casual.label': 'Lockerer',\n 'ai.task.translate.label': 'Übersetzen',\n 'ai.task.summarize.label': 'Zusammenfassen',\n 'ai.task.custom.label': 'Eigene Anweisung',\n 'ai.task.custom.promptLabel': 'Anweisung an die KI, z. B. „als Aufzählung“',\n 'ai.task.continue.label': 'Weiterschreiben',\n 'ai.task.fillBlock.label': 'Baustein füllen',\n 'ai.task.fillBlock.promptLabel': 'Hinweis (optional)',\n\n // Model slots and target languages\n 'ai.slot.complete.label': 'Vorschläge beim Tippen',\n 'ai.slot.complete.description': 'Schnelles Modell; muss Assistant-Prefill unterstützen.',\n 'ai.slot.rewrite.label': 'Text im Block',\n 'ai.slot.rewrite.description': 'Umformulieren, Korrigieren, Übersetzen, Zusammenfassen, Transkript bereinigen.',\n 'ai.slot.generate.label': 'Blöcke erzeugen & Chat',\n 'ai.slot.generate.description': 'Neue Blöcke, Protokolle, Chat-Agent (braucht Tool-Calling).',\n 'ai.slot.ariaLabel': 'Modell für „{slot}“',\n 'ai.slot.manage': 'Modelle verwalten…',\n 'ai.language.de': 'Deutsch',\n 'ai.language.en': 'Englisch',\n 'ai.language.fr': 'Französisch',\n 'ai.language.es': 'Spanisch',\n 'ai.language.it': 'Italienisch',\n\n // Feature entry points (toolbar, block action, slash command, settings tab)\n 'ai.tab': 'KI',\n 'ai.toolbar.sidebar': 'KI-Seitenleiste',\n 'ai.toolbar.autocomplete': 'KI-Vorschläge beim Tippen (Tab übernimmt, Esc verwirft)',\n 'ai.blockAction.label': 'Mit KI bearbeiten',\n 'ai.slash.label': 'KI',\n\n // Notices\n 'ai.rateLimited': 'Zu viele KI-Anfragen, bitte kurz warten',\n 'ai.sse.unknownError': 'Unbekannter Fehler',\n 'ai.sse.httpError': 'Fehler {status}',\n 'ai.sse.aborted': 'Verbindung abgebrochen',\n 'ai.chat.emptyScope': 'Die Auswahl enthält keine bearbeitbaren Blöcke.',\n 'ai.apply.missing.title': 'Textstelle nicht mehr gefunden',\n 'ai.apply.missing.description': 'Das Ergebnis wurde nicht übernommen.',\n 'ai.apply.empty.title': 'Leeres Ergebnis',\n 'ai.apply.empty.description': 'Das Ergebnis wurde nicht übernommen.',\n 'ai.apply.unchanged.title': 'Keine Änderungen',\n 'ai.apply.unchanged.description': 'Das Ergebnis entspricht dem vorhandenen Text.',\n 'ai.apply.overlap.title': 'Textstelle wird bereits geprüft',\n 'ai.apply.overlap.description': 'Erst die offenen KI-Änderungen übernehmen oder verwerfen.',\n\n // In-document review\n 'ai.review.accept': 'Übernehmen',\n 'ai.review.discard': 'Verwerfen',\n 'ai.review.acceptAll': 'Alle übernehmen',\n 'ai.review.rejectAll': 'Alle verwerfen',\n 'ai.review.barLabel': 'KI-Änderungen prüfen',\n 'ai.review.count.one': '1 KI-Änderung',\n 'ai.review.count.other': '{n} KI-Änderungen',\n 'ai.review.previous': 'Vorherige Änderung',\n 'ai.review.next': 'Nächste Änderung',\n 'ai.review.invalid.one': 'KI-Änderung verworfen',\n 'ai.review.invalid.other': '{n} KI-Änderungen verworfen',\n 'ai.review.invalid.description': 'Der ursprüngliche Text wurde inzwischen geändert.',\n\n // Selection / caret menu\n 'ai.menu.trigger': 'KI',\n 'ai.menu.model': 'Modell',\n 'ai.menu.targetLanguage': 'Zielsprache',\n 'ai.menu.sendInstruction': 'Anweisung senden',\n 'ai.menu.requestWithLanguage': '{task} – {language}',\n 'ai.menu.cancel': 'Abbrechen',\n 'ai.menu.discard': 'Verwerfen',\n 'ai.menu.retry': 'Erneut versuchen',\n 'ai.menu.insert': 'Einfügen',\n 'ai.menu.insertBelow': 'Darunter einfügen',\n 'ai.menu.replace': 'Ersetzen',\n 'ai.menu.missing.selection': 'Der markierte Text wurde gelöscht.',\n 'ai.menu.missing.line': 'Die Zeile wurde gelöscht.',\n 'ai.menu.missing.insert': 'Das Ergebnis wurde nicht eingefügt.',\n\n // Sidebar\n 'ai.sidebar.label': 'KI-Seitenleiste',\n 'ai.sidebar.title': 'KI',\n 'ai.sidebar.newConversation': 'Neues Gespräch',\n 'ai.sidebar.close': 'Schließen',\n 'ai.sidebar.selection.one': 'Auswahl: {n} Block',\n 'ai.sidebar.selection.other': 'Auswahl: {n} Blöcke',\n 'ai.sidebar.selection.title': 'Änderungen betreffen nur die markierten Blöcke',\n 'ai.sidebar.selection.clear': 'Auswahl aufheben',\n 'ai.sidebar.intro': 'Stelle eine Frage zum Inhalt, z. B. „Wer hat gesagt, dass das Budget nicht reicht?“, oder bitte um eine Änderung, z. B. „Kürze Abschnitt 2“. Mit einer Markierung im Text betreffen Änderungen nur die markierten Blöcke. Die Schnellaktionen unten erzeugen neue Blöcke, z. B. ein Protokoll.',\n 'ai.sidebar.stop': 'Stopp',\n 'ai.sidebar.discard': 'Verwerfen',\n 'ai.sidebar.apply': 'Übernehmen',\n 'ai.sidebar.generateGroup': 'Blöcke generieren',\n 'ai.sidebar.generate': 'Generieren',\n 'ai.sidebar.placeholder': 'Frage oder Änderungswunsch…',\n 'ai.sidebar.messageLabel': 'Nachricht zum Dokument',\n 'ai.sidebar.send': 'Senden',\n 'ai.sidebar.revealMissing': 'Textstelle nicht mehr im Dokument',\n\n // Chat edit operations\n 'ai.op.addAtStart': 'Einfügen am Dokumentanfang',\n 'ai.op.addAfter': 'Einfügen nach „{snippet}“',\n 'ai.op.convert': 'Umwandeln in {target}: „{snippet}“',\n 'ai.op.update': 'Ändern: „{snippet}“',\n 'ai.op.delete': 'Löschen: „{snippet}“',\n 'ai.op.accept': 'Übernehmen',\n 'ai.op.discard': 'Verwerfen',\n 'ai.op.problems.one': '1 Vorschlag verworfen',\n 'ai.op.problems.other': '{n} Vorschläge verworfen',\n 'ai.op.problems.description': 'Die KI hat auf Blöcke oder Blocktypen verwiesen, die es nicht gibt oder die außerhalb der Auswahl liegen.',\n 'ai.op.invalid.title': 'Änderung nicht mehr anwendbar',\n 'ai.op.invalid.description': 'Der Text wurde inzwischen anders geändert.',\n 'ai.op.snippet.documentStart': 'Dokumentanfang',\n 'ai.op.snippet.missing': 'Block nicht mehr vorhanden',\n 'ai.op.snippet.emptyBlock': 'Leerer Block',\n 'ai.op.snippet.image': 'Bild',\n 'ai.op.snippet.audio': 'Audio',\n 'ai.op.snippet.video': 'Video',\n 'ai.op.snippet.file': 'Datei',\n 'ai.opBadge.pending': 'Offen',\n 'ai.opBadge.accepted': 'Übernommen',\n 'ai.opBadge.rejected': 'Abgelehnt',\n 'ai.opBadge.partial': 'Teilweise',\n 'ai.opBadge.invalid': 'Verfallen',\n 'ai.opBadge.unchanged': 'Keine Änderung',\n 'ai.opBadge.missing': 'Block fehlt',\n 'ai.opBadge.stale': 'Block gelöscht',\n 'ai.opBadge.overlap': 'Stelle belegt',\n 'ai.opBadge.empty': 'Leer',\n 'ai.opBadge.blocked': 'Außerhalb der Auswahl',\n 'ai.opTitle.pending': 'Vorschlag noch nicht entschieden',\n 'ai.opTitle.accepted': 'Vorschlag übernommen',\n 'ai.opTitle.rejected': 'Vorschlag abgelehnt',\n 'ai.opTitle.partial': 'Vorschlag teilweise übernommen',\n 'ai.opTitle.invalid': 'Vorschlag verfallen, weil der Text inzwischen anders geändert wurde',\n 'ai.opTitle.unchanged': 'Vorschlag nicht angezeigt, weil er dem vorhandenen Text entspricht',\n 'ai.opTitle.missing': 'Vorschlag nicht angezeigt, weil der Block nicht mehr existiert',\n 'ai.opTitle.stale': 'Vorschlag nicht angezeigt: Block wurde inzwischen gelöscht',\n 'ai.opTitle.overlap': 'Vorschlag nicht angezeigt, weil an der Stelle noch andere KI-Änderungen offen sind',\n 'ai.opTitle.empty': 'Vorschlag nicht angezeigt, weil der Inhalt leer ist',\n 'ai.opTitle.blocked': 'Vorschlag blockiert, weil er außerhalb des erlaubten Bereichs liegt',\n\n // Settings tab\n 'ai.settings.writing.title': 'Beim Schreiben',\n 'ai.settings.autocomplete.label': 'KI-Vorschläge beim Tippen',\n 'ai.settings.autocomplete.description': 'Grauer Text nach dem Cursor; Tab übernimmt, Esc verwirft.',\n 'ai.settings.language.label': 'Zielsprache beim Übersetzen',\n 'ai.settings.language.description': 'Vorausgewählt; im KI-Menü pro Aufruf änderbar.',\n 'ai.settings.slots.title': 'Modell je Aufgabe',\n 'ai.settings.slots.description': 'Welches Profil die einzelnen KI-Funktionen verwenden.',\n 'ai.settings.profiles.title': 'Modellprofile',\n 'ai.settings.profiles.description': 'Server-Presets sind vorkonfiguriert. Eigene Profile werden nur in diesem Browser gespeichert; ihr API-Key wird mit jeder Anfrage gesendet und nicht auf dem Server abgelegt.',\n 'ai.profiles.server': 'Vom Server',\n 'ai.profiles.noPresets': 'Keine Presets geladen.',\n 'ai.profiles.serverBadge': 'Server',\n 'ai.profiles.own': 'Eigene Profile',\n 'ai.profiles.add': 'Profil hinzufügen',\n 'ai.profiles.edit': 'Bearbeiten',\n 'ai.profiles.delete': 'Löschen',\n 'ai.profiles.name': 'Name',\n 'ai.profiles.namePlaceholder': 'z. B. Lokal',\n 'ai.profiles.endpoint': 'Endpunkt',\n 'ai.profiles.endpointHelp': 'OpenAI-kompatible Basis-URL.',\n 'ai.profiles.endpointPlaceholder': 'https://openrouter.ai/api/v1',\n 'ai.profiles.model': 'Modell',\n 'ai.profiles.modelPlaceholder': 'google/gemini-2.5-flash',\n 'ai.profiles.apiKey': 'API-Key',\n 'ai.profiles.testOk': 'Verbindung funktioniert',\n 'ai.profiles.test': 'Testen',\n 'ai.profiles.cancel': 'Abbrechen',\n 'ai.profiles.save': 'Speichern',\n} as const\n"],"mappings":"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"}
1
+ {"version":3,"file":"ai.js","names":[],"sources":["../../../src/i18n/de/ai.ts"],"sourcesContent":["export const de = {\n // Tasks (menus, sidebar chips, prompt hints, result headings)\n 'ai.task.reformulate.label': 'Umformulieren',\n 'ai.task.reformulate.promptLabel': 'Hinweis (optional), z. B. „kürzer“ oder „förmlicher“',\n 'ai.task.generate.label': 'Text generieren',\n 'ai.task.generate.promptLabel': 'Was soll geschrieben werden?',\n 'ai.task.transcript.promptLabel': 'Hinweis (optional), z. B. „nur Beschlüsse“ oder „auf Englisch“',\n 'ai.task.transcriptSummary.heading': 'Zusammenfassung',\n 'ai.task.transcriptMinutes.heading': 'Protokoll',\n 'ai.task.transcriptActionItems.heading': 'Aufgaben',\n 'ai.task.fix.label': 'Korrigieren',\n 'ai.task.shorter.label': 'Kürzer',\n 'ai.task.formal.label': 'Förmlicher',\n 'ai.task.casual.label': 'Lockerer',\n 'ai.task.translate.label': 'Übersetzen',\n 'ai.task.summarize.label': 'Zusammenfassen',\n 'ai.task.custom.label': 'Eigene Anweisung',\n 'ai.task.custom.promptLabel': 'Anweisung an die KI, z. B. „als Aufzählung“',\n 'ai.task.continue.label': 'Weiterschreiben',\n 'ai.task.fillBlock.label': 'Baustein füllen',\n 'ai.task.fillBlock.promptLabel': 'Hinweis (optional)',\n 'ai.task.splitBlock.label': 'Baustein gliedern',\n 'ai.task.outlineSanitize.label': 'Gliederung bereinigen',\n 'ai.task.transferSummary.label': 'Zusammenfassung (Übertragen)',\n 'ai.task.transferBullets.label': 'Stichpunkte (Übertragen)',\n\n // Model slots and target languages\n 'ai.slot.complete.label': 'Vorschläge beim Tippen',\n 'ai.slot.complete.description': 'Schnelles Modell; muss Assistant-Prefill unterstützen.',\n 'ai.slot.rewrite.label': 'Text im Block',\n 'ai.slot.rewrite.description': 'Umformulieren, Korrigieren, Übersetzen, Zusammenfassen, Transkript bereinigen.',\n 'ai.slot.generate.label': 'Blöcke erzeugen & Chat',\n 'ai.slot.generate.description': 'Neue Blöcke, Protokolle, Chat-Agent (braucht Tool-Calling).',\n 'ai.slot.ariaLabel': 'Modell für „{slot}“',\n 'ai.slot.manage': 'Modelle verwalten…',\n 'ai.language.de': 'Deutsch',\n 'ai.language.en': 'Englisch',\n 'ai.language.fr': 'Französisch',\n 'ai.language.es': 'Spanisch',\n 'ai.language.it': 'Italienisch',\n\n // Feature entry points (toolbar, block action, slash command, settings tab)\n 'ai.tab': 'KI',\n 'ai.toolbar.sidebar': 'KI-Seitenleiste',\n 'ai.toolbar.autocomplete': 'KI-Vorschläge beim Tippen (Tab übernimmt, Esc verwirft)',\n 'ai.blockAction.label': 'Mit KI bearbeiten',\n 'ai.slash.label': 'KI',\n\n // Notices\n 'ai.rateLimited': 'Zu viele KI-Anfragen, bitte kurz warten',\n 'ai.sse.unknownError': 'Unbekannter Fehler',\n 'ai.sse.httpError': 'Fehler {status}',\n 'ai.sse.aborted': 'Verbindung abgebrochen',\n 'ai.chat.emptyScope': 'Die Auswahl enthält keine bearbeitbaren Blöcke.',\n 'ai.apply.missing.title': 'Textstelle nicht mehr gefunden',\n 'ai.apply.missing.description': 'Das Ergebnis wurde nicht übernommen.',\n 'ai.apply.empty.title': 'Leeres Ergebnis',\n 'ai.apply.empty.description': 'Das Ergebnis wurde nicht übernommen.',\n 'ai.apply.unchanged.title': 'Keine Änderungen',\n 'ai.apply.unchanged.description': 'Das Ergebnis entspricht dem vorhandenen Text.',\n 'ai.apply.overlap.title': 'Textstelle wird bereits geprüft',\n 'ai.apply.overlap.description': 'Erst die offenen KI-Änderungen übernehmen oder verwerfen.',\n\n // In-document review\n 'ai.review.accept': 'Übernehmen',\n 'ai.review.discard': 'Verwerfen',\n 'ai.review.acceptAll': 'Alle übernehmen',\n 'ai.review.rejectAll': 'Alle verwerfen',\n 'ai.review.barLabel': 'KI-Änderungen prüfen',\n 'ai.review.count.one': '1 KI-Änderung',\n 'ai.review.count.other': '{n} KI-Änderungen',\n 'ai.review.previous': 'Vorherige Änderung',\n 'ai.review.next': 'Nächste Änderung',\n 'ai.review.invalid.one': 'KI-Änderung verworfen',\n 'ai.review.invalid.other': '{n} KI-Änderungen verworfen',\n 'ai.review.invalid.description': 'Der ursprüngliche Text wurde inzwischen geändert.',\n\n // Selection / caret menu\n 'ai.menu.trigger': 'KI',\n 'ai.menu.model': 'Modell',\n 'ai.menu.targetLanguage': 'Zielsprache',\n 'ai.menu.sendInstruction': 'Anweisung senden',\n 'ai.menu.requestWithLanguage': '{task} – {language}',\n 'ai.menu.cancel': 'Abbrechen',\n 'ai.menu.discard': 'Verwerfen',\n 'ai.menu.retry': 'Erneut versuchen',\n 'ai.menu.insert': 'Einfügen',\n 'ai.menu.insertBelow': 'Darunter einfügen',\n 'ai.menu.replace': 'Ersetzen',\n 'ai.menu.missing.selection': 'Der markierte Text wurde gelöscht.',\n 'ai.menu.missing.line': 'Die Zeile wurde gelöscht.',\n 'ai.menu.missing.insert': 'Das Ergebnis wurde nicht eingefügt.',\n\n // Sidebar\n 'ai.sidebar.label': 'KI-Seitenleiste',\n 'ai.sidebar.title': 'KI',\n 'ai.sidebar.newConversation': 'Neues Gespräch',\n 'ai.sidebar.close': 'Schließen',\n 'ai.sidebar.selection.one': 'Auswahl: {n} Block',\n 'ai.sidebar.selection.other': 'Auswahl: {n} Blöcke',\n 'ai.sidebar.selection.title': 'Änderungen betreffen nur die markierten Blöcke',\n 'ai.sidebar.selection.clear': 'Auswahl aufheben',\n 'ai.sidebar.intro': 'Stelle eine Frage zum Inhalt, z. B. „Wer hat gesagt, dass das Budget nicht reicht?“, oder bitte um eine Änderung, z. B. „Kürze Abschnitt 2“. Mit einer Markierung im Text betreffen Änderungen nur die markierten Blöcke. Die Schnellaktionen unten erzeugen neue Blöcke, z. B. ein Protokoll.',\n 'ai.sidebar.stop': 'Stopp',\n 'ai.sidebar.discard': 'Verwerfen',\n 'ai.sidebar.apply': 'Übernehmen',\n 'ai.sidebar.generateGroup': 'Blöcke generieren',\n 'ai.sidebar.generate': 'Generieren',\n 'ai.sidebar.placeholder': 'Frage oder Änderungswunsch…',\n 'ai.sidebar.messageLabel': 'Nachricht zum Dokument',\n 'ai.sidebar.send': 'Senden',\n 'ai.sidebar.revealMissing': 'Textstelle nicht mehr im Dokument',\n\n // Chat edit operations\n 'ai.op.addAtStart': 'Einfügen am Dokumentanfang',\n 'ai.op.addAfter': 'Einfügen nach „{snippet}“',\n 'ai.op.convert': 'Umwandeln in {target}: „{snippet}“',\n 'ai.op.update': 'Ändern: „{snippet}“',\n 'ai.op.delete': 'Löschen: „{snippet}“',\n 'ai.op.accept': 'Übernehmen',\n 'ai.op.discard': 'Verwerfen',\n 'ai.op.problems.one': '1 Vorschlag verworfen',\n 'ai.op.problems.other': '{n} Vorschläge verworfen',\n 'ai.op.problems.description': 'Die KI hat auf Blöcke oder Blocktypen verwiesen, die es nicht gibt oder die außerhalb der Auswahl liegen.',\n 'ai.op.invalid.title': 'Änderung nicht mehr anwendbar',\n 'ai.op.invalid.description': 'Der Text wurde inzwischen anders geändert.',\n 'ai.op.snippet.documentStart': 'Dokumentanfang',\n 'ai.op.snippet.missing': 'Block nicht mehr vorhanden',\n 'ai.op.snippet.emptyBlock': 'Leerer Block',\n 'ai.op.snippet.image': 'Bild',\n 'ai.op.snippet.audio': 'Audio',\n 'ai.op.snippet.video': 'Video',\n 'ai.op.snippet.file': 'Datei',\n 'ai.opBadge.pending': 'Offen',\n 'ai.opBadge.accepted': 'Übernommen',\n 'ai.opBadge.rejected': 'Abgelehnt',\n 'ai.opBadge.partial': 'Teilweise',\n 'ai.opBadge.invalid': 'Verfallen',\n 'ai.opBadge.unchanged': 'Keine Änderung',\n 'ai.opBadge.missing': 'Block fehlt',\n 'ai.opBadge.stale': 'Block gelöscht',\n 'ai.opBadge.overlap': 'Stelle belegt',\n 'ai.opBadge.empty': 'Leer',\n 'ai.opBadge.blocked': 'Außerhalb der Auswahl',\n 'ai.opTitle.pending': 'Vorschlag noch nicht entschieden',\n 'ai.opTitle.accepted': 'Vorschlag übernommen',\n 'ai.opTitle.rejected': 'Vorschlag abgelehnt',\n 'ai.opTitle.partial': 'Vorschlag teilweise übernommen',\n 'ai.opTitle.invalid': 'Vorschlag verfallen, weil der Text inzwischen anders geändert wurde',\n 'ai.opTitle.unchanged': 'Vorschlag nicht angezeigt, weil er dem vorhandenen Text entspricht',\n 'ai.opTitle.missing': 'Vorschlag nicht angezeigt, weil der Block nicht mehr existiert',\n 'ai.opTitle.stale': 'Vorschlag nicht angezeigt: Block wurde inzwischen gelöscht',\n 'ai.opTitle.overlap': 'Vorschlag nicht angezeigt, weil an der Stelle noch andere KI-Änderungen offen sind',\n 'ai.opTitle.empty': 'Vorschlag nicht angezeigt, weil der Inhalt leer ist',\n 'ai.opTitle.blocked': 'Vorschlag blockiert, weil er außerhalb des erlaubten Bereichs liegt',\n\n // Settings tab\n 'ai.settings.writing.title': 'Beim Schreiben',\n 'ai.settings.autocomplete.label': 'KI-Vorschläge beim Tippen',\n 'ai.settings.autocomplete.description': 'Grauer Text nach dem Cursor; Tab übernimmt, Esc verwirft.',\n 'ai.settings.language.label': 'Zielsprache beim Übersetzen',\n 'ai.settings.language.description': 'Vorausgewählt; im KI-Menü pro Aufruf änderbar.',\n 'ai.settings.slots.title': 'Modell je Aufgabe',\n 'ai.settings.slots.description': 'Welches Profil die einzelnen KI-Funktionen verwenden.',\n 'ai.settings.profiles.title': 'Modellprofile',\n 'ai.settings.profiles.description': 'Server-Presets sind vorkonfiguriert. Eigene Profile werden nur in diesem Browser gespeichert; ihr API-Key wird mit jeder Anfrage gesendet und nicht auf dem Server abgelegt.',\n 'ai.profiles.server': 'Vom Server',\n 'ai.profiles.noPresets': 'Keine Presets geladen.',\n 'ai.profiles.serverBadge': 'Server',\n 'ai.profiles.own': 'Eigene Profile',\n 'ai.profiles.add': 'Profil hinzufügen',\n 'ai.profiles.edit': 'Bearbeiten',\n 'ai.profiles.delete': 'Löschen',\n 'ai.profiles.name': 'Name',\n 'ai.profiles.namePlaceholder': 'z. B. Lokal',\n 'ai.profiles.endpoint': 'Endpunkt',\n 'ai.profiles.endpointHelp': 'OpenAI-kompatible Basis-URL.',\n 'ai.profiles.endpointPlaceholder': 'https://openrouter.ai/api/v1',\n 'ai.profiles.model': 'Modell',\n 'ai.profiles.modelPlaceholder': 'google/gemini-2.5-flash',\n 'ai.profiles.apiKey': 'API-Key',\n 'ai.profiles.testOk': 'Verbindung funktioniert',\n 'ai.profiles.test': 'Testen',\n 'ai.profiles.cancel': 'Abbrechen',\n 'ai.profiles.save': 'Speichern',\n} as const\n"],"mappings":"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"}
@@ -106,6 +106,11 @@ const de = {
106
106
  "composites.slash.flattenAll": "Bausteine in Überschriften (alle Ebenen)",
107
107
  "composites.blockAction.export": "Als Markdown exportieren",
108
108
  "composites.blockAction.bibtex": "Literaturangabe exportieren (BibTeX)",
109
+ "composites.split.here": "Baustein hier teilen",
110
+ "composites.split.children": "In Unter-Bausteine teilen",
111
+ "composites.split.lengthChildren": "Nach Länge in Unter-Bausteine teilen",
112
+ "composites.split.lengthSiblings": "Nach Länge in Bausteine teilen",
113
+ "settings.editing.splitTargetChars": "Zielgröße beim Teilen (Zeichen)",
109
114
  "composites.toolbar.toKind": "In Baustein umwandeln",
110
115
  "composites.toolbar.structure": "Gliederung umwandeln",
111
116
  "composites.menu.kindHeading": "Baustein",
@@ -143,6 +148,7 @@ const de = {
143
148
  "composites.reference.backlinks": "Verweise",
144
149
  "composites.derivation.badge": "abgeleitet",
145
150
  "composites.derivation.stale": "Quelle geändert",
151
+ "composites.derivation.foreign": "aus anderem Dokument",
146
152
  "composites.derivation.edited": "bearbeitet",
147
153
  "composites.derivation.expand": "Abgeleiteten Inhalt aufklappen",
148
154
  "composites.derivation.collapse": "Abgeleiteten Inhalt zuklappen",
@@ -236,7 +242,20 @@ const de = {
236
242
  "composites.move.targetGone": "Das Ziel existiert nicht mehr.",
237
243
  "composites.move.targetNotBlock": "Das Ziel ist kein Baustein.",
238
244
  "composites.move.intoSelf": "Ein Block kann nicht in sich selbst verschoben werden.",
239
- "composites.move.intoOwn": "Ein Block kann nicht in einen Baustein verschoben werden, den er selbst enthält."
245
+ "composites.move.intoOwn": "Ein Block kann nicht in einen Baustein verschoben werden, den er selbst enthält.",
246
+ "composites.basket.label": "Korb",
247
+ "composites.basket.none": "Kein Korb",
248
+ "composites.basket.red": "Rot",
249
+ "composites.basket.orange": "Orange",
250
+ "composites.basket.yellow": "Gelb",
251
+ "composites.basket.green": "Grün",
252
+ "composites.basket.blue": "Blau",
253
+ "composites.titleHidden.hide": "Titel ausblenden",
254
+ "composites.titleHidden.show": "Titel einblenden",
255
+ "composites.focus.action": "Fokussieren",
256
+ "composites.focus.leave": "Fokus aufheben",
257
+ "composites.focus.chip": "Fokus: {title}",
258
+ "composites.focus.release": "Aufheben"
240
259
  };
241
260
  //#endregion
242
261
  export { de };
@@ -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 '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.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} 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 '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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"}
@@ -23,6 +23,22 @@ const de = {
23
23
  "integrations.compositeSummary.gone.title": "Baustein nicht mehr gefunden",
24
24
  "integrations.compositeSummary.gone.description": "Die Zusammenfassung wurde nicht übernommen.",
25
25
  "integrations.compositeSummary.done": "Zusammenfassung erstellt",
26
+ "integrations.compositeSplit.ai.children": "Mit KI in Unter-Bausteine teilen",
27
+ "integrations.compositeSplit.ai.siblings": "Mit KI in Bausteine teilen",
28
+ "integrations.compositeSplit.changed": "Die KI hat den Text verändert, nichts wurde geteilt",
29
+ "integrations.compositeSplit.running": "Baustein wird geteilt…",
30
+ "integrations.compositeSplit.failed": "Teilen fehlgeschlagen",
31
+ "integrations.compositeSplit.notPossible": "Dieser Baustein lässt sich so nicht teilen",
32
+ "integrations.compositeSplit.tooLong": "Der Text ist zu lang für die KI-Teilung",
33
+ "integrations.compositeSplit.gone": "Der Baustein wurde währenddessen geändert, nichts wurde geteilt",
34
+ "integrations.outlineSanitize.label": "Gliederung bereinigen (KI)",
35
+ "integrations.outlineSanitize.none": "Das Dokument enthält keine Überschriften",
36
+ "integrations.outlineSanitize.invalid": "Die Antwort der KI war unbrauchbar, nichts wurde geändert",
37
+ "integrations.outlineSanitize.running": "Gliederung wird bereinigt…",
38
+ "integrations.outlineSanitize.done": "Gliederung bereinigt",
39
+ "integrations.outlineSanitize.failed": "Gliederung bereinigen fehlgeschlagen",
40
+ "integrations.outlineSanitize.tooLong": "Die Gliederung ist zu lang für die KI",
41
+ "integrations.outlineSanitize.gone": "Das Dokument wurde währenddessen geändert, nichts wurde geändert",
26
42
  "integrations.rendition.action": "Lesefassung erzeugen",
27
43
  "integrations.rendition.regenerate": "Neu erzeugen (ersetzen)",
28
44
  "integrations.rendition.running": "Lesefassung wird erzeugt…",
@@ -1 +1 @@
1
- {"version":3,"file":"integrations.js","names":[],"sources":["../../../src/i18n/de/integrations.ts"],"sourcesContent":["export const de = {\n // composite-ai: „Baustein füllen (KI)“\n 'integrations.compositeFill.action': 'Baustein füllen (KI)',\n 'integrations.compositeFill.dataMissing': 'Daten für den Baustein fehlen',\n 'integrations.compositeFill.failed': 'Baustein füllen fehlgeschlagen',\n 'integrations.compositeFill.empty.title': 'Leeres Ergebnis',\n 'integrations.compositeFill.empty.description': 'Der Baustein wurde nicht gefüllt.',\n 'integrations.compositeFill.gone.title': 'Baustein nicht mehr gefunden',\n 'integrations.compositeFill.gone.description': 'Der Baustein wurde nicht gefüllt.',\n\n // composite-ai: „Ableiten (KI)“\n 'integrations.compositeDerive.action': 'Ableiten (KI)',\n 'integrations.compositeDerive.running': '{kind} wird abgeleitet…',\n 'integrations.compositeDerive.done': '{kind} abgeleitet',\n 'integrations.compositeDerive.failed': 'Ableiten fehlgeschlagen',\n 'integrations.compositeDerive.notAccepted': 'Dieser Baustein kann hier nicht eingefügt werden',\n 'integrations.compositeDerive.empty.title': 'Leeres Ergebnis',\n 'integrations.compositeDerive.empty.description': 'Es wurde kein Baustein abgeleitet.',\n 'integrations.compositeDerive.gone.title': 'Baustein nicht mehr gefunden',\n 'integrations.compositeDerive.gone.description': 'Das Ergebnis wurde nicht übernommen.',\n\n // composite-ai: „Zusammenfassung erzeugen (KI)“\n 'integrations.compositeSummary.action': 'Zusammenfassung erzeugen (KI)',\n 'integrations.compositeSummary.failed': 'Zusammenfassung fehlgeschlagen',\n 'integrations.compositeSummary.empty.title': 'Leeres Ergebnis',\n 'integrations.compositeSummary.empty.description': 'Die Zusammenfassung wurde nicht übernommen.',\n 'integrations.compositeSummary.gone.title': 'Baustein nicht mehr gefunden',\n 'integrations.compositeSummary.gone.description': 'Die Zusammenfassung wurde nicht übernommen.',\n 'integrations.compositeSummary.done': 'Zusammenfassung erstellt',\n\n // composite-ai: „Lesefassung erzeugen“ / „Neu erzeugen (ersetzen)“\n 'integrations.rendition.action': 'Lesefassung erzeugen',\n 'integrations.rendition.regenerate': 'Neu erzeugen (ersetzen)',\n 'integrations.rendition.running': 'Lesefassung wird erzeugt…',\n 'integrations.rendition.done': 'Lesefassung erstellt',\n 'integrations.rendition.failed': 'Lesefassung fehlgeschlagen',\n 'integrations.rendition.noSource': 'Der Baustein hat keine gespeicherte Quelle',\n 'integrations.rendition.notAccepted': 'Eine Lesefassung kann hier nicht eingefügt werden',\n 'integrations.rendition.empty.title': 'Leeres Ergebnis',\n 'integrations.rendition.empty.description': 'Die Lesefassung wurde nicht übernommen.',\n 'integrations.rendition.gone.title': 'Baustein nicht mehr gefunden',\n 'integrations.rendition.gone.description': 'Die Lesefassung wurde nicht übernommen.',\n 'integrations.rendition.title.transcription': 'Transkript',\n 'integrations.rendition.title.pdf-text': 'Volltext',\n 'integrations.rendition.title.ocr': 'Volltext (OCR)',\n 'integrations.rendition.title.description': 'Beschreibung',\n 'integrations.rendition.editedWarning.title': 'Lesefassung wurde bearbeitet',\n 'integrations.rendition.editedWarning.description': 'Neu erzeugen ersetzt deine Änderungen.',\n 'integrations.rendition.editedWarning.confirm': 'Trotzdem ersetzen',\n 'integrations.rendition.warnings.title': 'Hinweise zur Lesefassung',\n 'integrations.rendition.warning.ocr-unavailable': 'OCR ist nicht verfügbar, es wurde nur die Textebene des PDFs gelesen.',\n 'integrations.rendition.warning.crossref-unavailable': 'Crossref war nicht erreichbar, die Literaturangabe stammt aus dem Modell.',\n 'integrations.rendition.warning.pages-truncated': 'Nur die ersten Seiten wurden gelesen.',\n 'integrations.rendition.warning.ocr-truncated': 'Die OCR hat nur die ersten Seiten gelesen (eine Modellabfrage je Seite); der Rest fehlt.',\n 'integrations.rendition.warning.bibliography-failed': 'Für diese Quelle wurden keine Literaturangaben gefunden.',\n // Label that stands for a page break of a PDF inside the rendition's text (document content, not UI chrome).\n 'integrations.rendition.page': 'S. {n}',\n\n // composite-ai: „Literaturangaben abrufen“\n 'integrations.bibliographyFetch.action': 'Literaturangaben abrufen',\n 'integrations.bibliographyFetch.running': 'Literaturangaben werden abgerufen…',\n 'integrations.bibliographyFetch.done': 'Literaturangaben übernommen',\n 'integrations.bibliographyFetch.failed': 'Literaturangaben konnten nicht abgerufen werden',\n 'integrations.bibliographyFetch.invalidDoi': 'Die DOI ist ungültig',\n 'integrations.bibliographyFetch.noSource': 'Der Baustein hat weder eine DOI noch ein gespeichertes PDF',\n 'integrations.bibliographyFetch.empty': 'Es wurden keine Literaturangaben gefunden',\n 'integrations.bibliographyFetch.gone.title': 'Baustein nicht mehr gefunden',\n 'integrations.bibliographyFetch.gone.description': 'Die Literaturangaben wurden nicht übernommen.',\n 'integrations.bibliographyFetch.crossrefUnavailable.title': 'Crossref nicht erreichbar',\n 'integrations.bibliographyFetch.crossrefUnavailable.description': 'Die Literaturangaben stammen aus dem Modell und sollten geprüft werden.',\n\n // composite-media\n 'integrations.compositeMedia.import': 'Datei importieren',\n 'integrations.sourceReplace.action': 'Quelle ersetzen',\n 'integrations.sourceReplace.done': 'Quelle ersetzt',\n 'integrations.sourceReplace.failed': 'Quelle konnte nicht ersetzt werden',\n 'integrations.sourceReplace.gone': 'Baustein nicht mehr gefunden',\n\n // transcript-ai: „Transkript bereinigen“\n 'integrations.transcriptCleanup.action': 'Transkript bereinigen',\n 'integrations.transcriptCleanup.actionAi': 'Transkript bereinigen (KI)',\n 'integrations.transcriptCleanup.noSegments': 'Keine Sprechersegmente mit Text gefunden',\n 'integrations.transcriptCleanup.failed': 'Bereinigung fehlgeschlagen',\n 'integrations.transcriptCleanup.skipped.title': '{skipped} von {total} Segmenten wurden nicht bereinigt',\n 'integrations.transcriptCleanup.skipped.description': 'Zu lang oder die KI-Antwort war unbrauchbar.',\n 'integrations.transcriptCleanup.stale.title': '{n} Segmente wurden zwischenzeitlich geändert',\n 'integrations.transcriptCleanup.stale.description': 'Sie bleiben unverändert.',\n 'integrations.transcriptCleanup.open.title': 'Die Segmente haben noch offene KI-Änderungen',\n 'integrations.transcriptCleanup.open.description': 'Erst übernehmen oder verwerfen, dann erneut bereinigen.',\n 'integrations.transcriptCleanup.nothing.title': 'Nichts zu bereinigen',\n 'integrations.transcriptCleanup.nothing.description': 'Die KI hat keine Änderungen vorgeschlagen.',\n} as const\n"],"mappings":";AAAA,MAAa,KAAK;CAEhB,qCAAqC;CACrC,0CAA0C;CAC1C,qCAAqC;CACrC,0CAA0C;CAC1C,gDAAgD;CAChD,yCAAyC;CACzC,+CAA+C;CAG/C,uCAAuC;CACvC,wCAAwC;CACxC,qCAAqC;CACrC,uCAAuC;CACvC,4CAA4C;CAC5C,4CAA4C;CAC5C,kDAAkD;CAClD,2CAA2C;CAC3C,iDAAiD;CAGjD,wCAAwC;CACxC,wCAAwC;CACxC,6CAA6C;CAC7C,mDAAmD;CACnD,4CAA4C;CAC5C,kDAAkD;CAClD,sCAAsC;CAGtC,iCAAiC;CACjC,qCAAqC;CACrC,kCAAkC;CAClC,+BAA+B;CAC/B,iCAAiC;CACjC,mCAAmC;CACnC,sCAAsC;CACtC,sCAAsC;CACtC,4CAA4C;CAC5C,qCAAqC;CACrC,2CAA2C;CAC3C,8CAA8C;CAC9C,yCAAyC;CACzC,oCAAoC;CACpC,4CAA4C;CAC5C,8CAA8C;CAC9C,oDAAoD;CACpD,gDAAgD;CAChD,yCAAyC;CACzC,kDAAkD;CAClD,uDAAuD;CACvD,kDAAkD;CAClD,gDAAgD;CAChD,sDAAsD;CAEtD,+BAA+B;CAG/B,yCAAyC;CACzC,0CAA0C;CAC1C,uCAAuC;CACvC,yCAAyC;CACzC,6CAA6C;CAC7C,2CAA2C;CAC3C,wCAAwC;CACxC,6CAA6C;CAC7C,mDAAmD;CACnD,4DAA4D;CAC5D,kEAAkE;CAGlE,sCAAsC;CACtC,qCAAqC;CACrC,mCAAmC;CACnC,qCAAqC;CACrC,mCAAmC;CAGnC,yCAAyC;CACzC,2CAA2C;CAC3C,6CAA6C;CAC7C,yCAAyC;CACzC,gDAAgD;CAChD,sDAAsD;CACtD,8CAA8C;CAC9C,oDAAoD;CACpD,6CAA6C;CAC7C,mDAAmD;CACnD,gDAAgD;CAChD,sDAAsD;AACxD"}
1
+ {"version":3,"file":"integrations.js","names":[],"sources":["../../../src/i18n/de/integrations.ts"],"sourcesContent":["export const de = {\n // composite-ai: „Baustein füllen (KI)“\n 'integrations.compositeFill.action': 'Baustein füllen (KI)',\n 'integrations.compositeFill.dataMissing': 'Daten für den Baustein fehlen',\n 'integrations.compositeFill.failed': 'Baustein füllen fehlgeschlagen',\n 'integrations.compositeFill.empty.title': 'Leeres Ergebnis',\n 'integrations.compositeFill.empty.description': 'Der Baustein wurde nicht gefüllt.',\n 'integrations.compositeFill.gone.title': 'Baustein nicht mehr gefunden',\n 'integrations.compositeFill.gone.description': 'Der Baustein wurde nicht gefüllt.',\n\n // composite-ai: „Ableiten (KI)“\n 'integrations.compositeDerive.action': 'Ableiten (KI)',\n 'integrations.compositeDerive.running': '{kind} wird abgeleitet…',\n 'integrations.compositeDerive.done': '{kind} abgeleitet',\n 'integrations.compositeDerive.failed': 'Ableiten fehlgeschlagen',\n 'integrations.compositeDerive.notAccepted': 'Dieser Baustein kann hier nicht eingefügt werden',\n 'integrations.compositeDerive.empty.title': 'Leeres Ergebnis',\n 'integrations.compositeDerive.empty.description': 'Es wurde kein Baustein abgeleitet.',\n 'integrations.compositeDerive.gone.title': 'Baustein nicht mehr gefunden',\n 'integrations.compositeDerive.gone.description': 'Das Ergebnis wurde nicht übernommen.',\n\n // composite-ai: „Zusammenfassung erzeugen (KI)“\n 'integrations.compositeSummary.action': 'Zusammenfassung erzeugen (KI)',\n 'integrations.compositeSummary.failed': 'Zusammenfassung fehlgeschlagen',\n 'integrations.compositeSummary.empty.title': 'Leeres Ergebnis',\n 'integrations.compositeSummary.empty.description': 'Die Zusammenfassung wurde nicht übernommen.',\n 'integrations.compositeSummary.gone.title': 'Baustein nicht mehr gefunden',\n 'integrations.compositeSummary.gone.description': 'Die Zusammenfassung wurde nicht übernommen.',\n 'integrations.compositeSummary.done': 'Zusammenfassung erstellt',\n\n // composite-ai: „Mit KI teilen“\n 'integrations.compositeSplit.ai.children': 'Mit KI in Unter-Bausteine teilen',\n 'integrations.compositeSplit.ai.siblings': 'Mit KI in Bausteine teilen',\n 'integrations.compositeSplit.changed': 'Die KI hat den Text verändert, nichts wurde geteilt',\n 'integrations.compositeSplit.running': 'Baustein wird geteilt…',\n 'integrations.compositeSplit.failed': 'Teilen fehlgeschlagen',\n 'integrations.compositeSplit.notPossible': 'Dieser Baustein lässt sich so nicht teilen',\n 'integrations.compositeSplit.tooLong': 'Der Text ist zu lang für die KI-Teilung',\n 'integrations.compositeSplit.gone': 'Der Baustein wurde währenddessen geändert, nichts wurde geteilt',\n\n // composite-ai: „Gliederung bereinigen (KI)“\n 'integrations.outlineSanitize.label': 'Gliederung bereinigen (KI)',\n 'integrations.outlineSanitize.none': 'Das Dokument enthält keine Überschriften',\n 'integrations.outlineSanitize.invalid': 'Die Antwort der KI war unbrauchbar, nichts wurde geändert',\n 'integrations.outlineSanitize.running': 'Gliederung wird bereinigt…',\n 'integrations.outlineSanitize.done': 'Gliederung bereinigt',\n 'integrations.outlineSanitize.failed': 'Gliederung bereinigen fehlgeschlagen',\n 'integrations.outlineSanitize.tooLong': 'Die Gliederung ist zu lang für die KI',\n 'integrations.outlineSanitize.gone': 'Das Dokument wurde währenddessen geändert, nichts wurde geändert',\n\n // composite-ai: „Lesefassung erzeugen“ / „Neu erzeugen (ersetzen)“\n 'integrations.rendition.action': 'Lesefassung erzeugen',\n 'integrations.rendition.regenerate': 'Neu erzeugen (ersetzen)',\n 'integrations.rendition.running': 'Lesefassung wird erzeugt…',\n 'integrations.rendition.done': 'Lesefassung erstellt',\n 'integrations.rendition.failed': 'Lesefassung fehlgeschlagen',\n 'integrations.rendition.noSource': 'Der Baustein hat keine gespeicherte Quelle',\n 'integrations.rendition.notAccepted': 'Eine Lesefassung kann hier nicht eingefügt werden',\n 'integrations.rendition.empty.title': 'Leeres Ergebnis',\n 'integrations.rendition.empty.description': 'Die Lesefassung wurde nicht übernommen.',\n 'integrations.rendition.gone.title': 'Baustein nicht mehr gefunden',\n 'integrations.rendition.gone.description': 'Die Lesefassung wurde nicht übernommen.',\n 'integrations.rendition.title.transcription': 'Transkript',\n 'integrations.rendition.title.pdf-text': 'Volltext',\n 'integrations.rendition.title.ocr': 'Volltext (OCR)',\n 'integrations.rendition.title.description': 'Beschreibung',\n 'integrations.rendition.editedWarning.title': 'Lesefassung wurde bearbeitet',\n 'integrations.rendition.editedWarning.description': 'Neu erzeugen ersetzt deine Änderungen.',\n 'integrations.rendition.editedWarning.confirm': 'Trotzdem ersetzen',\n 'integrations.rendition.warnings.title': 'Hinweise zur Lesefassung',\n 'integrations.rendition.warning.ocr-unavailable': 'OCR ist nicht verfügbar, es wurde nur die Textebene des PDFs gelesen.',\n 'integrations.rendition.warning.crossref-unavailable': 'Crossref war nicht erreichbar, die Literaturangabe stammt aus dem Modell.',\n 'integrations.rendition.warning.pages-truncated': 'Nur die ersten Seiten wurden gelesen.',\n 'integrations.rendition.warning.ocr-truncated': 'Die OCR hat nur die ersten Seiten gelesen (eine Modellabfrage je Seite); der Rest fehlt.',\n 'integrations.rendition.warning.bibliography-failed': 'Für diese Quelle wurden keine Literaturangaben gefunden.',\n // Label that stands for a page break of a PDF inside the rendition's text (document content, not UI chrome).\n 'integrations.rendition.page': 'S. {n}',\n\n // composite-ai: „Literaturangaben abrufen“\n 'integrations.bibliographyFetch.action': 'Literaturangaben abrufen',\n 'integrations.bibliographyFetch.running': 'Literaturangaben werden abgerufen…',\n 'integrations.bibliographyFetch.done': 'Literaturangaben übernommen',\n 'integrations.bibliographyFetch.failed': 'Literaturangaben konnten nicht abgerufen werden',\n 'integrations.bibliographyFetch.invalidDoi': 'Die DOI ist ungültig',\n 'integrations.bibliographyFetch.noSource': 'Der Baustein hat weder eine DOI noch ein gespeichertes PDF',\n 'integrations.bibliographyFetch.empty': 'Es wurden keine Literaturangaben gefunden',\n 'integrations.bibliographyFetch.gone.title': 'Baustein nicht mehr gefunden',\n 'integrations.bibliographyFetch.gone.description': 'Die Literaturangaben wurden nicht übernommen.',\n 'integrations.bibliographyFetch.crossrefUnavailable.title': 'Crossref nicht erreichbar',\n 'integrations.bibliographyFetch.crossrefUnavailable.description': 'Die Literaturangaben stammen aus dem Modell und sollten geprüft werden.',\n\n // composite-media\n 'integrations.compositeMedia.import': 'Datei importieren',\n 'integrations.sourceReplace.action': 'Quelle ersetzen',\n 'integrations.sourceReplace.done': 'Quelle ersetzt',\n 'integrations.sourceReplace.failed': 'Quelle konnte nicht ersetzt werden',\n 'integrations.sourceReplace.gone': 'Baustein nicht mehr gefunden',\n\n // transcript-ai: „Transkript bereinigen“\n 'integrations.transcriptCleanup.action': 'Transkript bereinigen',\n 'integrations.transcriptCleanup.actionAi': 'Transkript bereinigen (KI)',\n 'integrations.transcriptCleanup.noSegments': 'Keine Sprechersegmente mit Text gefunden',\n 'integrations.transcriptCleanup.failed': 'Bereinigung fehlgeschlagen',\n 'integrations.transcriptCleanup.skipped.title': '{skipped} von {total} Segmenten wurden nicht bereinigt',\n 'integrations.transcriptCleanup.skipped.description': 'Zu lang oder die KI-Antwort war unbrauchbar.',\n 'integrations.transcriptCleanup.stale.title': '{n} Segmente wurden zwischenzeitlich geändert',\n 'integrations.transcriptCleanup.stale.description': 'Sie bleiben unverändert.',\n 'integrations.transcriptCleanup.open.title': 'Die Segmente haben noch offene KI-Änderungen',\n 'integrations.transcriptCleanup.open.description': 'Erst übernehmen oder verwerfen, dann erneut bereinigen.',\n 'integrations.transcriptCleanup.nothing.title': 'Nichts zu bereinigen',\n 'integrations.transcriptCleanup.nothing.description': 'Die KI hat keine Änderungen vorgeschlagen.',\n} as const\n"],"mappings":";AAAA,MAAa,KAAK;CAEhB,qCAAqC;CACrC,0CAA0C;CAC1C,qCAAqC;CACrC,0CAA0C;CAC1C,gDAAgD;CAChD,yCAAyC;CACzC,+CAA+C;CAG/C,uCAAuC;CACvC,wCAAwC;CACxC,qCAAqC;CACrC,uCAAuC;CACvC,4CAA4C;CAC5C,4CAA4C;CAC5C,kDAAkD;CAClD,2CAA2C;CAC3C,iDAAiD;CAGjD,wCAAwC;CACxC,wCAAwC;CACxC,6CAA6C;CAC7C,mDAAmD;CACnD,4CAA4C;CAC5C,kDAAkD;CAClD,sCAAsC;CAGtC,2CAA2C;CAC3C,2CAA2C;CAC3C,uCAAuC;CACvC,uCAAuC;CACvC,sCAAsC;CACtC,2CAA2C;CAC3C,uCAAuC;CACvC,oCAAoC;CAGpC,sCAAsC;CACtC,qCAAqC;CACrC,wCAAwC;CACxC,wCAAwC;CACxC,qCAAqC;CACrC,uCAAuC;CACvC,wCAAwC;CACxC,qCAAqC;CAGrC,iCAAiC;CACjC,qCAAqC;CACrC,kCAAkC;CAClC,+BAA+B;CAC/B,iCAAiC;CACjC,mCAAmC;CACnC,sCAAsC;CACtC,sCAAsC;CACtC,4CAA4C;CAC5C,qCAAqC;CACrC,2CAA2C;CAC3C,8CAA8C;CAC9C,yCAAyC;CACzC,oCAAoC;CACpC,4CAA4C;CAC5C,8CAA8C;CAC9C,oDAAoD;CACpD,gDAAgD;CAChD,yCAAyC;CACzC,kDAAkD;CAClD,uDAAuD;CACvD,kDAAkD;CAClD,gDAAgD;CAChD,sDAAsD;CAEtD,+BAA+B;CAG/B,yCAAyC;CACzC,0CAA0C;CAC1C,uCAAuC;CACvC,yCAAyC;CACzC,6CAA6C;CAC7C,2CAA2C;CAC3C,wCAAwC;CACxC,6CAA6C;CAC7C,mDAAmD;CACnD,4DAA4D;CAC5D,kEAAkE;CAGlE,sCAAsC;CACtC,qCAAqC;CACrC,mCAAmC;CACnC,qCAAqC;CACrC,mCAAmC;CAGnC,yCAAyC;CACzC,2CAA2C;CAC3C,6CAA6C;CAC7C,yCAAyC;CACzC,gDAAgD;CAChD,sDAAsD;CACtD,8CAA8C;CAC9C,oDAAoD;CACpD,6CAA6C;CAC7C,mDAAmD;CACnD,gDAAgD;CAChD,sDAAsD;AACxD"}
@@ -0,0 +1,17 @@
1
+ //#region src/i18n/de/transfer.ts
2
+ const de = {
3
+ "transfer.copy": "Kopie einfügen",
4
+ "transfer.summary": "Zusammenfassung einfügen",
5
+ "transfer.bullets": "Stichpunkte einfügen",
6
+ "transfer.summaryTitle": "Zusammenfassung: {title}",
7
+ "transfer.bulletsTitle": "Stichpunkte: {title}",
8
+ "transfer.refused": "Hier lässt sich der Baustein nicht einfügen",
9
+ "transfer.selfDrop": "Ein Baustein lässt sich nicht auf sich selbst ablegen",
10
+ "transfer.running": "{title} wird erstellt…",
11
+ "transfer.done": "{title} eingefügt",
12
+ "transfer.menu.title": "Einfügen als …"
13
+ };
14
+ //#endregion
15
+ export { de };
16
+
17
+ //# sourceMappingURL=transfer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transfer.js","names":[],"sources":["../../../src/i18n/de/transfer.ts"],"sourcesContent":["export const de = {\n 'transfer.copy': 'Kopie einfügen',\n 'transfer.summary': 'Zusammenfassung einfügen',\n 'transfer.bullets': 'Stichpunkte einfügen',\n 'transfer.summaryTitle': 'Zusammenfassung: {title}',\n 'transfer.bulletsTitle': 'Stichpunkte: {title}',\n 'transfer.refused': 'Hier lässt sich der Baustein nicht einfügen',\n 'transfer.selfDrop': 'Ein Baustein lässt sich nicht auf sich selbst ablegen',\n 'transfer.running': '{title} wird erstellt…',\n 'transfer.done': '{title} eingefügt',\n 'transfer.menu.title': 'Einfügen als …',\n} as const\n"],"mappings":";AAAA,MAAa,KAAK;CAChB,iBAAiB;CACjB,oBAAoB;CACpB,oBAAoB;CACpB,yBAAyB;CACzB,yBAAyB;CACzB,oBAAoB;CACpB,qBAAqB;CACrB,oBAAoB;CACpB,iBAAiB;CACjB,uBAAuB;AACzB"}
@@ -27,6 +27,11 @@ const de = {
27
27
  "tree.filterText.placeholder": "Titel filtern",
28
28
  "tree.filterText.clear": "Titelfilter löschen",
29
29
  "tree.noMatches": "Keine Treffer",
30
+ "tree.basketFilter.label": "Nach Korb filtern",
31
+ "tree.basketFilter.reset": "Korbfilter zurücksetzen",
32
+ "tree.focus.root": "Dokument",
33
+ "tree.focus.enter": "Fokussieren",
34
+ "tree.focus.leave": "Fokus aufheben",
30
35
  "tree.root.folders": "Ordner",
31
36
  "tree.root.file": "Datei als Wurzel",
32
37
  "tree.root.unavailable": "Nur mit einer geöffneten Baustein-Datei (Einstellung „Gliederung: Bausteine“).",
@@ -38,6 +43,7 @@ const de = {
38
43
  "tree.drop.folderInFolder": "Der Ordner liegt schon in diesem Ordner.",
39
44
  "tree.drop.blocksOnlyInDocument": "Bausteine lassen sich nur im geöffneten Dokument verschieben.",
40
45
  "tree.drop.noBlocksHere": "Hier lassen sich keine Bausteine ablegen.",
46
+ "tree.drop.noTransfer": "Dieser Editor nimmt keine Bausteine von außen an.",
41
47
  "tree.drop.blockWithoutId": "Dieser Baustein hat noch keine ID und lässt sich nicht als Ziel ansprechen.",
42
48
  "tree.drop.editorClosed": "Der Editor ist nicht mehr geöffnet."
43
49
  };
@@ -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.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.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,qBAAqB;CACrB,kBAAkB;CAClB,yBAAyB;CAGzB,qBAAqB;CACrB,4BAA4B;CAC5B,yBAAyB;CACzB,8BAA8B;CAC9B,4BAA4B;CAC5B,4BAA4B;CAC5B,kCAAkC;CAClC,0BAA0B;CAC1B,4BAA4B;CAC5B,0BAA0B;AAC5B"}
1
+ {"version":3,"file":"tree.js","names":[],"sources":["../../../src/i18n/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"}