frontend_nyla/scripts/i18n_missing_report.md
2026-04-08 22:29:35 +02:00

15027 lines
533 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# i18n: vermutlich noch ohne t()
Anzahl Einträge (heuristisch): **2146**
Hinweis: Einige Treffer können falsch positiv sein (technische Strings). Vor `apply` prüfen.
## `src/components/AccessRules/AccessRulesEditor.tsx`:86
- **Text:** 'Regel löschen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Regel löschen"`
## `src/components/AccessRules/AccessRulesEditor.tsx`:140
- **Text:** 'Delete'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span className={styles.permissionLabel}>Delete</span>`
## `src/components/AccessRules/AccessRulesEditor.tsx`:204
- **Text:** 'z.B. data.feature.trustee.TrusteePosition'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` return 'z.B. data.feature.trustee.TrusteePosition';`
## `src/components/AccessRules/AccessRulesEditor.tsx`:206
- **Text:** 'z.B. ui.feature.trustee.dashboard'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` return 'z.B. ui.feature.trustee.dashboard';`
## `src/components/AccessRules/AccessRulesEditor.tsx`:208
- **Text:** 'z.B. resource.feature.trustee.documents.create'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` return 'z.B. resource.feature.trustee.documents.create';`
## `src/components/AccessRules/AccessRulesEditor.tsx`:220
- **Text:** 'Objekt auswählen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label className={styles.formLabel}>Objekt auswählen</label>`
## `src/components/AccessRules/AccessRulesEditor.tsx`:226
- **Text:** '← Aus Katalog wählen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {useCustom ? '← Aus Katalog wählen' : 'Freie Eingabe →'}`
## `src/components/AccessRules/AccessRulesEditor.tsx`:226
- **Text:** 'Freie Eingabe →'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {useCustom ? '← Aus Katalog wählen' : 'Freie Eingabe →'}`
## `src/components/AccessRules/AccessRulesEditor.tsx`:245
- **Text:** '-- Global (alle Objekte) --'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="">-- Global (alle Objekte) --</option>`
## `src/components/AccessRules/AccessRulesEditor.tsx`:280
- **Text:** 'Eigene (m)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.matrixGroup}>Eigene (m)</div>`
## `src/components/AccessRules/AccessRulesEditor.tsx`:281
- **Text:** 'Gruppe (g)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.matrixGroup}>Gruppe (g)</div>`
## `src/components/AccessRules/AccessRulesEditor.tsx`:282
- **Text:** 'Alle (a)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.matrixGroup}>Alle (a)</div>`
## `src/components/AccessRules/AccessRulesEditor.tsx`:289
- **Text:** 'Delete'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` const labels = { create: 'Create', read: 'Read', update: 'Update', delete: 'Delete' };`
## `src/components/AccessRules/AccessRulesEditor.tsx`:372
- **Text:** 'Keine Daten-Regeln definiert'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` case 'DATA': return 'Keine Daten-Regeln definiert';`
## `src/components/AccessRules/AccessRulesEditor.tsx`:373
- **Text:** 'Keine UI-Regeln definiert'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` case 'UI': return 'Keine UI-Regeln definiert';`
## `src/components/AccessRules/AccessRulesEditor.tsx`:374
- **Text:** 'Keine Ressourcen-Regeln definiert'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` case 'RESOURCE': return 'Keine Ressourcen-Regeln definiert';`
## `src/components/AccessRules/AccessRulesEditor.tsx`:392
- **Text:** 'Tabellenansicht'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Tabellenansicht"`
## `src/components/AccessRules/AccessRulesEditor.tsx`:399
- **Text:** 'Kartenansicht'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Kartenansicht"`
## `src/components/AccessRules/AccessRulesEditor.tsx`:430
- **Text:** 'Neue Regel'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` Klicken Sie auf "Neue Regel" um eine Berechtigung hinzuzufügen.`
## `src/components/AccessRules/AccessRulesEditor.tsx`:480
- **Text:** 'JSON muss ein Array sein'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` throw new Error('JSON muss ein Array sein');`
## `src/components/AccessRules/AccessRulesEditor.tsx`:605
- **Text:** 'Fehler beim Speichern'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Fehler', result.error || 'Fehler beim Speichern');`
## `src/components/AccessRules/AccessRulesEditor.tsx`:631
- **Text:** 'Daten'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { id: 'DATA', label: 'Daten', icon: <FaTable />, count: groupedRules.DATA.length },`
## `src/components/AccessRules/AccessRulesEditor.tsx`:632
- **Text:** 'UI'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { id: 'UI', label: 'UI', icon: <FaDesktop />, count: groupedRules.UI.length },`
## `src/components/AccessRules/AccessRulesEditor.tsx`:633
- **Text:** 'Ressourcen'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { id: 'RESOURCE', label: 'Ressourcen', icon: <FaServer />, count: groupedRules.RESOURCE.length },`
## `src/components/AccessRules/AccessRulesEditor.tsx`:634
- **Text:** 'JSON'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { id: 'JSON', label: 'JSON', icon: <FaCode />, count: rules.length },`
## `src/components/AccessRules/AccessRulesEditor.tsx`:642
- **Text:** 'Lade Berechtigungen...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Lade Berechtigungen...</span>`
## `src/components/AccessRules/AccessRulesTable.tsx`:112
- **Text:** 'Sichtbar'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Sichtbar"`
## `src/components/AccessRules/AccessRulesTable.tsx`:166
- **Text:** 'Regel löschen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Regel löschen"`
## `src/components/AccessRules/AccessRulesTable.tsx`:198
- **Text:** 'Objekt (Dot-Notation)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <th className={styles.colObject}>Objekt (Dot-Notation)</th>`
## `src/components/AccessRules/AccessRulesTable.tsx`:202
- **Text:** 'Eigene (m)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <th className={styles.colGroupHeader} colSpan={4}>Eigene (m)</th>`
## `src/components/AccessRules/AccessRulesTable.tsx`:203
- **Text:** 'Gruppe (g)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <th className={styles.colGroupHeader} colSpan={4}>Gruppe (g)</th>`
## `src/components/AccessRules/AccessRulesTable.tsx`:204
- **Text:** 'Alle (a)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <th className={styles.colGroupHeader} colSpan={4}>Alle (a)</th>`
## `src/components/AccessRules/AccessRulesTable.tsx`:213
- **Text:** 'Create'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <th title="Create">C</th>`
## `src/components/AccessRules/AccessRulesTable.tsx`:214
- **Text:** 'Read'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <th title="Read">R</th>`
## `src/components/AccessRules/AccessRulesTable.tsx`:215
- **Text:** 'Update'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <th title="Update">U</th>`
## `src/components/AccessRules/AccessRulesTable.tsx`:216
- **Text:** 'Delete'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <th title="Delete">D</th>`
## `src/components/AccessRules/AccessRulesTable.tsx`:217
- **Text:** 'Create'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <th title="Create">C</th>`
## `src/components/AccessRules/AccessRulesTable.tsx`:218
- **Text:** 'Read'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <th title="Read">R</th>`
## `src/components/AccessRules/AccessRulesTable.tsx`:219
- **Text:** 'Update'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <th title="Update">U</th>`
## `src/components/AccessRules/AccessRulesTable.tsx`:220
- **Text:** 'Delete'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <th title="Delete">D</th>`
## `src/components/AccessRules/AccessRulesTable.tsx`:221
- **Text:** 'Create'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <th title="Create">C</th>`
## `src/components/AccessRules/AccessRulesTable.tsx`:222
- **Text:** 'Read'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <th title="Read">R</th>`
## `src/components/AccessRules/AccessRulesTable.tsx`:223
- **Text:** 'Update'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <th title="Update">U</th>`
## `src/components/AccessRules/AccessRulesTable.tsx`:224
- **Text:** 'Delete'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <th title="Delete">D</th>`
## `src/components/Chat/ChatInput.tsx`:20
- **Text:** 'Type a message...'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder = 'Type a message...',`
## `src/components/Chat/ChatInput.tsx`:55
- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` borderTop: '1px solid var(--border-color, #e0e0e0)',`
## `src/components/Chat/ChatInput.tsx`:71
- **Text:** '1px solid var(--border-color, #ddd)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: '1px solid var(--border-color, #ddd)',`
## `src/components/Chat/ChatMessageList.tsx`:34
- **Text:** 'No messages yet.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` emptyMessage = 'No messages yet.',`
## `src/components/ContentPreview/ContentPreview.tsx`:64
- **Text:** 'Invalid file ID'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError('Invalid file ID');`
## `src/components/ContentPreview/ContentPreview.tsx`:67
- **Text:** 'Unknown Item'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` if (!fileName || fileName === 'Unknown Item') {`
## `src/components/ContentPreview/ContentPreview.tsx`:68
- **Text:** 'File name not available'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError('File name not available');`
## `src/components/ContentPreview/ContentPreview.tsx`:96
- **Text:** 's text content but MIME type says PDF, we'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` // If it's text content but MIME type says PDF, we'll handle it in renderPreview`
## `src/components/ContentPreview/ContentPreview.tsx`:98
- **Text:** 'Failed to load preview'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError(result.error || 'Failed to load preview');`
## `src/components/ContentPreview/ContentPreview.tsx`:101
- **Text:** 'An unexpected error occurred while loading the preview'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError('An unexpected error occurred while loading the preview');`
## `src/components/ContentPreview/ContentPreview.tsx`:171
- **Text:** 'Failed to load PDF preview'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` onError={() => setError('Failed to load PDF preview')}`
## `src/components/ContentPreview/ContentPreview.tsx`:197
- **Text:** 'JSON Preview (Fallback)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span className={styles.jsonTitle}>JSON Preview (Fallback)</span>`
## `src/components/ContentPreview/ContentPreview.tsx`:199
- **Text:** 'Raw content'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span className={styles.jsonSize}>Raw content</span>`
## `src/components/ContentPreview/ContentPreview.tsx`:204
- **Text:** 'No content available'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {previewContent || 'No content available'}`
## `src/components/ContentPreview/ContentPreview.tsx`:222
- **Text:** 'Failed to load image preview'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` onError={() => setError('Failed to load image preview')}`
## `src/components/ContentPreview/ContentPreview.tsx`:233
- **Text:** 'Failed to load HTML preview'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` onError={() => setError('Failed to load HTML preview')}`
## `src/components/ContentPreview/ContentPreview.tsx`:243
- **Text:** 'Failed to load text preview'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` onError={() => setError('Failed to load text preview')}`
## `src/components/ContentPreview/ContentPreview.tsx`:260
- **Text:** 'Failed to load PDF preview'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` onError={() => setError('Failed to load PDF preview')}`
## `src/components/ContentPreview/ContentPreview.tsx`:270
- **Text:** 'Failed to load HTML preview'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` onError={() => setError('Failed to load HTML preview')}`
## `src/components/ContentPreview/ContentPreview.tsx`:282
- **Text:** 'Preview not supported for this file type'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` onError={() => setError('Preview not supported for this file type')}`
## `src/components/ContentPreview/UrlContentPreview.tsx`:56
- **Text:** 'noopener noreferrer'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` link.rel = 'noopener noreferrer';`
## `src/components/ContentPreview/UrlContentPreview.tsx`:82
- **Text:** 'Failed to load PDF. This might be due to CORS restrictions. You can try downloading the file or opening it in a new tab.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError('Failed to load PDF. This might be due to CORS restrictions. You can try downloading the file or opening it in a new tab.');`
## `src/components/ContentPreview/UrlContentPreview.tsx`:99
- **Text:** 'PDF lädt langsam. Sie können es auch direkt herunterladen oder in einem neuen Tab öffnen.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setWarning('PDF lädt langsam. Sie können es auch direkt herunterladen oder in einem neuen Tab öffnen.');`
## `src/components/ContentPreview/UrlContentPreview.tsx`:110
- **Text:** 'PDF lädt langsam. Versuche alternative Anzeigemethode...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setWarning('PDF lädt langsam. Versuche alternative Anzeigemethode...');`
## `src/components/ContentPreview/UrlContentPreview.tsx`:114
- **Text:** 'PDF lädt langsam. Bitte verwenden Sie den Download-Button oder öffnen Sie es in einem neuen Tab.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError('PDF lädt langsam. Bitte verwenden Sie den Download-Button oder öffnen Sie es in einem neuen Tab.');`
## `src/components/ContentPreview/UrlContentPreview.tsx`:132
- **Text:** 'Invalid URL'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError('Invalid URL');`
## `src/components/ContentPreview/UrlContentPreview.tsx`:161
- **Text:** '1px solid var(--color-border, #e5e7eb)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` borderBottom: '1px solid var(--color-border, #e5e7eb)',`
## `src/components/ContentPreview/UrlContentPreview.tsx`:172
- **Text:** '1px solid var(--color-border, #e5e7eb)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` borderBottom: '1px solid var(--color-border, #e5e7eb)',`
## `src/components/ContentPreview/UrlContentPreview.tsx`:270
- **Text:** '1px solid var(--color-border, #e5e7eb)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` borderBottom: '1px solid var(--color-border, #e5e7eb)',`
## `src/components/ContentPreview/UrlContentPreview.tsx`:317
- **Text:** 'Preview not supported for this file type. Please download the file to view it.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p>Preview not supported for this file type. Please download the file to view it.</p>`
## `src/components/ContentPreview/renderers/JsonRenderer.tsx`:342
- **Text:** 'Error: Invalid nested data'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span className={styles.jsonValue}>Error: Invalid nested data</span>`
## `src/components/ContentPreview/renderers/JsonRenderer.tsx`:482
- **Text:** 'Raw Content'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` keys: ['Raw Content'],`
## `src/components/ContentPreview/renderers/PdfJsRenderer.tsx`:65
- **Text:** 'Failed to load PDF'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError(err instanceof Error ? err.message : 'Failed to load PDF');`
## `src/components/ContentPreview/renderers/PdfJsRenderer.tsx`:115
- **Text:** 'Failed to render PDF page'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError(err instanceof Error ? err.message : 'Failed to render PDF page');`
## `src/components/ContentPreview/renderers/PdfJsRenderer.tsx`:131
- **Text:** 'Fehler beim Laden der PDF: {error}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p>Fehler beim Laden der PDF: {error}</p>`
## `src/components/ContentPreview/renderers/PdfJsRenderer.tsx`:140
- **Text:** 'PDF wird geladen...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p>PDF wird geladen...</p>`
## `src/components/ContentPreview/renderers/PdfJsRenderer.tsx`:152
- **Text:** '1px solid var(--color-border, #e5e7eb)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` borderBottom: '1px solid var(--color-border, #e5e7eb)',`
## `src/components/ContentPreview/renderers/PdfJsRenderer.tsx`:197
- **Text:** '1px solid var(--color-border, #e5e7eb)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: '1px solid var(--color-border, #e5e7eb)',`
## `src/components/ContentPreview/renderers/PdfJsRenderer.tsx`:213
- **Text:** '1px solid var(--color-border, #e5e7eb)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: '1px solid var(--color-border, #e5e7eb)',`
## `src/components/ContentPreview/renderers/PdfJsRenderer.tsx`:232
- **Text:** '0 2px 8px rgba(0,0,0,0.1)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` boxShadow: '0 2px 8px rgba(0,0,0,0.1)',`
## `src/components/ContentPreview/renderers/TextRenderer.tsx`:19
- **Text:** 'Text Preview'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span className={styles.textTitle}>Text Preview</span>`
## `src/components/FlowEditor/editor/Automation2FlowEditor.tsx`:59
- **Text:** 'Jetzt ausführen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` buildInvocationsForPrimaryKind('manual', [], 'Jetzt ausführen');`
## `src/components/FlowEditor/editor/Automation2FlowEditor.tsx`:203
- **Text:** 'Keine Nodes im Workflow.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setExecuteResult({ success: false, error: 'Keine Nodes im Workflow.' });`
## `src/components/FlowEditor/editor/Automation2FlowEditor.tsx`:228
- **Text:** 'Keine Nodes zum Speichern.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setExecuteResult({ success: false, error: 'Keine Nodes zum Speichern.' });`
## `src/components/FlowEditor/editor/Automation2FlowEditor.tsx`:238
- **Text:** 'Workflow speichern'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: 'Workflow speichern',`
## `src/components/FlowEditor/editor/Automation2FlowEditor.tsx`:239
- **Text:** 'Neuer Workflow'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` defaultValue: 'Neuer Workflow',`
## `src/components/FlowEditor/editor/Automation2FlowEditor.tsx`:240
- **Text:** 'Name des Workflows'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` placeholder: 'Name des Workflows',`
## `src/components/FlowEditor/editor/Automation2FlowEditor.tsx`:247
- **Text:** 'Neuer Workflow'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` label: label.trim() || 'Neuer Workflow',`
## `src/components/FlowEditor/editor/Automation2FlowEditor.tsx`:596
- **Text:** 'Lade Node-Typen...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p>Lade Node-Typen...</p>`
## `src/components/FlowEditor/editor/CanvasHeader.tsx`:38
- **Text:** 'Entwurf'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` draft: { label: 'Entwurf', color: 'var(--warning-color, #ffc107)' },`
## `src/components/FlowEditor/editor/CanvasHeader.tsx`:39
- **Text:** 'Veröffentlicht'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` published: { label: 'Veröffentlicht', color: 'var(--success-color, #28a745)' },`
## `src/components/FlowEditor/editor/CanvasHeader.tsx`:40
- **Text:** 'Archiviert'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` archived: { label: 'Archiviert', color: 'var(--text-secondary, #666)' },`
## `src/components/FlowEditor/editor/CanvasHeader.tsx`:116
- **Text:** 'Meine Vorlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` const SCOPE_LABELS: Record<string, string> = { user: 'Meine Vorlagen', instance: 'Instanz', mandate: 'Mandant' };`
## `src/components/FlowEditor/editor/CanvasHeader.tsx`:137
- **Text:** 'Klicken zum Umbenennen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title={onWorkflowRename ? 'Klicken zum Umbenennen' : undefined}`
## `src/components/FlowEditor/editor/CanvasHeader.tsx`:151
- **Text:** 'Workflow-Konfiguration (Einstieg / Starts)'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Workflow-Konfiguration (Einstieg / Starts)"`
## `src/components/FlowEditor/editor/CanvasHeader.tsx`:152
- **Text:** 'Workflow-Konfiguration'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` aria-label="Workflow-Konfiguration"`
## `src/components/FlowEditor/editor/CanvasHeader.tsx`:170
- **Text:** 'Neu aus Vorlage'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Neu aus Vorlage"`
## `src/components/FlowEditor/editor/CanvasHeader.tsx`:214
- **Text:** 'Als Vorlage speichern'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Als Vorlage speichern"`
## `src/components/FlowEditor/editor/CanvasHeader.tsx`:242
- **Text:** '— Workflow laden —'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="">— Workflow laden —</option>`
## `src/components/FlowEditor/editor/CanvasHeader.tsx`:268
- **Text:** 'Workspace-Panel (Chats, Dateien, Quellen)'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <button type="button" className={styles.retryButton} onClick={onToggleChat} title="Workspace-Panel (Chats, Dateien, Quellen)">`
## `src/components/FlowEditor/editor/CanvasHeader.tsx`:285
- **Text:** '— Aktuelle —'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="">— Aktuelle —</option>`
## `src/components/FlowEditor/editor/CanvasHeader.tsx`:310
- **Text:** 'Version veröffentlichen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Version veröffentlichen"`
## `src/components/FlowEditor/editor/CanvasHeader.tsx`:323
- **Text:** 'Veröffentlichung zurücknehmen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Veröffentlichung zurücknehmen"`
## `src/components/FlowEditor/editor/CanvasHeader.tsx`:336
- **Text:** 'Version archivieren'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Version archivieren"`
## `src/components/FlowEditor/editor/CanvasHeader.tsx`:349
- **Text:** 'Neuen Entwurf erstellen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Neuen Entwurf erstellen"`
## `src/components/FlowEditor/editor/CanvasHeader.tsx`:379
- **Text:** '✓ Ausführung abgeschlossen.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <>✓ Ausführung abgeschlossen.</>`
## `src/components/FlowEditor/editor/CanvasHeader.tsx`:382
- **Text:** 'Workflows & Tasks'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` ⏸ Workflow pausiert. Öffne <strong>Workflows & Tasks</strong> in der Sidebar, um den`
## `src/components/FlowEditor/editor/CanvasHeader.tsx`:386
- **Text:** "✗ {executeResult.error ?? 'Unbekannter Fehler'}"
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <>✗ {executeResult.error ?? 'Unbekannter Fehler'}</>`
## `src/components/FlowEditor/editor/CanvasHeader.tsx`:386
- **Text:** 'Unbekannter Fehler'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` <>✗ {executeResult.error ?? 'Unbekannter Fehler'}</>`
## `src/components/FlowEditor/editor/EditorChatPanel.tsx`:137
- **Text:** 'Request failed'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` const errText = event.content || 'Request failed';`
## `src/components/FlowEditor/editor/EditorChatPanel.tsx`:190
- **Text:** 'Describe what you want to build. The AI will create and modify nodes on the canvas.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` emptyMessage="Describe what you want to build. The AI will create and modify nodes on the canvas."`
## `src/components/FlowEditor/editor/EditorChatPanel.tsx`:197
- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` borderTop: '1px solid var(--border-color, #e0e0e0)',`
## `src/components/FlowEditor/editor/EditorChatPanel.tsx`:223
- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` borderTop: pendingFiles.length > 0 ? 'none' : '1px solid var(--border-color, #e0e0e0)',`
## `src/components/FlowEditor/editor/EditorChatPanel.tsx`:264
- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` borderTop: hasAttachments ? 'none' : '1px solid var(--border-color, #e0e0e0)',`
## `src/components/FlowEditor/editor/EditorChatPanel.tsx`:267
- **Text:** '2px dashed var(--primary-color, #F25843)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` outline: treeDropOver ? '2px dashed var(--primary-color, #F25843)' : 'none',`
## `src/components/FlowEditor/editor/EditorChatPanel.tsx`:269
- **Text:** 'background 0.15s, outline 0.15s'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` transition: 'background 0.15s, outline 0.15s',`
## `src/components/FlowEditor/editor/EditorChatPanel.tsx`:280
- **Text:** 'Describe a change...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` placeholder={workflowId ? 'Describe a change...' : 'Save workflow first'}`
## `src/components/FlowEditor/editor/EditorChatPanel.tsx`:280
- **Text:** 'Save workflow first'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` placeholder={workflowId ? 'Describe a change...' : 'Save workflow first'}`
## `src/components/FlowEditor/editor/EditorChatPanel.tsx`:285
- **Text:** '1px solid var(--border-color, #ccc)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: '1px solid var(--border-color, #ccc)',`
## `src/components/FlowEditor/editor/EditorChatPanel.tsx`:297
- **Text:** 'Datenquellen anhängen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Datenquellen anhängen"`
## `src/components/FlowEditor/editor/EditorChatPanel.tsx`:300
- **Text:** '1px solid var(--border-color, #ddd)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: '1px solid var(--border-color, #ddd)',`
## `src/components/FlowEditor/editor/EditorChatPanel.tsx`:341
- **Text:** '2px solid #2e7d32'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: isSelected ? '2px solid #2e7d32' : '2px solid #ccc',`
## `src/components/FlowEditor/editor/EditorChatPanel.tsx`:341
- **Text:** '2px solid #ccc'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: isSelected ? '2px solid #2e7d32' : '2px solid #ccc',`
## `src/components/FlowEditor/editor/EditorChatPanel.tsx`:370
- **Text:** '2px solid #7b1fa2'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: isSelected ? '2px solid #7b1fa2' : '2px solid #ccc',`
## `src/components/FlowEditor/editor/EditorChatPanel.tsx`:370
- **Text:** '2px solid #ccc'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: isSelected ? '2px solid #7b1fa2' : '2px solid #ccc',`
## `src/components/FlowEditor/editor/FlowCanvas.tsx`:511
- **Text:** 'Delete'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` if (e.key === 'Delete' || e.key === 'Backspace') {`
## `src/components/FlowEditor/editor/FlowCanvas.tsx`:596
- **Text:** '0 0, 10 3.5, 0 7'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` <polygon points="0 0, 10 3.5, 0 7" fill="var(--text-secondary, #666)" />`
## `src/components/FlowEditor/editor/FlowCanvas.tsx`:606
- **Text:** '0 0, 10 3.5, 0 7'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` <polygon points="0 0, 10 3.5, 0 7" fill="var(--primary-color, #007bff)" />`
## `src/components/FlowEditor/editor/FlowCanvas.tsx`:616
- **Text:** '0 0, 10 3.5, 0 7'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` <polygon points="0 0, 10 3.5, 0 7" fill="#FF9800" />`
## `src/components/FlowEditor/editor/FlowCanvas.tsx`:641
- **Text:** 'Verbindung auswählen (Entf zum Löschen, klicken Sie auf einen anderen Eingang zum Umleiten)'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` aria-label="Verbindung auswählen (Entf zum Löschen, klicken Sie auf einen anderen Eingang zum Umleiten)"`
## `src/components/FlowEditor/editor/FlowCanvas.tsx`:660
- **Text:** 'Type mismatch warning: output type may not match input type'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <title>Type mismatch warning: output type may not match input type</title>`
## `src/components/FlowEditor/editor/FlowCanvas.tsx`:759
- **Text:** 'Aktuelles Ziel klicken zum Abwählen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` ? 'Aktuelles Ziel klicken zum Abwählen'`
## `src/components/FlowEditor/editor/FlowCanvas.tsx`:760
- **Text:** 'Klicken zum Umleiten'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` : 'Klicken zum Umleiten'`
## `src/components/FlowEditor/editor/FlowCanvas.tsx`:839
- **Text:** 'Nodes aus der Liste links hierher ziehen.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p>Nodes aus der Liste links hierher ziehen.</p>`
## `src/components/FlowEditor/editor/NodeConfigPanel.tsx`:89
- **Text:** 'z.B. Kundenformular, Prüfen Land'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="z.B. Kundenformular, Prüfen Land"`
## `src/components/FlowEditor/editor/NodeSidebar.tsx`:89
- **Text:** 'Nodes durchsuchen...'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Nodes durchsuchen..."`
## `src/components/FlowEditor/editor/RunTracingPanel.tsx`:220
- **Text:** 'Retry count'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <span style={{ color: '#f0ad4e', fontSize: '11px' }} title="Retry count">`
## `src/components/FlowEditor/editor/TemplatePicker.tsx`:132
- **Text:** 'Übernehmen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {copying === tpl.id ? <FaSpinner className={styles.spinner} /> : 'Übernehmen'}`
## `src/components/FlowEditor/editor/WorkflowConfigurationModal.tsx`:15
- **Text:** 'Manueller Trigger'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 'manual', label: 'Manueller Trigger' },`
## `src/components/FlowEditor/editor/WorkflowConfigurationModal.tsx`:16
- **Text:** 'Formular'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 'form', label: 'Formular' },`
## `src/components/FlowEditor/editor/WorkflowConfigurationModal.tsx`:17
- **Text:** 'Zeitplan'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 'schedule', label: 'Zeitplan' },`
## `src/components/FlowEditor/editor/WorkflowConfigurationModal.tsx`:18
- **Text:** 'Immer aktiv'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 'always_on', label: 'Immer aktiv' },`
## `src/components/FlowEditor/editor/WorkflowConfigurationModal.tsx`:85
- **Text:** 'z. B. Angebot anlegen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="z. B. Angebot anlegen"`
## `src/components/FlowEditor/editor/WorkflowConfigurationModal.tsx`:88
- **Text:** 'Einstiegsart'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <div className={styles.workflowModalRadioGroup} role="radiogroup" aria-label="Einstiegsart">`
## `src/components/FlowEditor/nodes/configs/AiNodeConfig.tsx`:11
- **Text:** 'Prompt'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` 'ai.prompt': [{ label: 'Prompt', key: 'prompt', type: 'textarea' }],`
## `src/components/FlowEditor/nodes/configs/AiNodeConfig.tsx`:12
- **Text:** 'Query'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` 'ai.webResearch': [{ label: 'Query', key: 'query', type: 'dynamic' }],`
## `src/components/FlowEditor/nodes/configs/AiNodeConfig.tsx`:14
- **Text:** 'Summary length'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { label: 'Summary length', key: 'summaryLength', type: 'select', options: ['short', 'medium', 'long'] },`
## `src/components/FlowEditor/nodes/configs/AiNodeConfig.tsx`:16
- **Text:** 'Target language'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` 'ai.translateDocument': [{ label: 'Target language', key: 'targetLanguage', type: 'input' }],`
## `src/components/FlowEditor/nodes/configs/AiNodeConfig.tsx`:18
- **Text:** 'Target format'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { label: 'Target format', key: 'targetFormat', type: 'select', options: ['pdf', 'docx', 'txt', 'md'] },`
## `src/components/FlowEditor/nodes/configs/AiNodeConfig.tsx`:20
- **Text:** 'Prompt'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` 'ai.generateDocument': [{ label: 'Prompt', key: 'prompt', type: 'dynamic' }],`
## `src/components/FlowEditor/nodes/configs/AiNodeConfig.tsx`:22
- **Text:** 'Prompt'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { label: 'Prompt', key: 'prompt', type: 'dynamic' },`
## `src/components/FlowEditor/nodes/configs/AiNodeConfig.tsx`:23
- **Text:** 'Language'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { label: 'Language', key: 'language', type: 'select', options: ['python', 'javascript', 'typescript', 'sql'] },`
## `src/components/FlowEditor/nodes/configs/ApprovalNodeConfig.tsx`:15
- **Text:** 'Genehmigungstitel'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Genehmigungstitel"`
## `src/components/FlowEditor/nodes/configs/ApprovalNodeConfig.tsx`:23
- **Text:** 'Was genehmigt werden soll'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Was genehmigt werden soll"`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:84
- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: '1px solid var(--border-color, #e0e0e0)',`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:103
- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` borderTop: '1px solid var(--border-color, #e0e0e0)',`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:111
- **Text:** 'Liste wählen (Ordner bis /team/…/list/…)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` return 'Liste wählen (Ordner bis /team/…/list/…)';`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:115
- **Text:** 'Aufgabe wählen (Pfad …/task/…)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` return 'Aufgabe wählen (Pfad …/task/…)';`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:117
- **Text:** 'ClickUp durchsuchen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` return 'ClickUp durchsuchen';`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:378
- **Text:** 'Aufgaben konnten nicht geladen werden.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setLoadError('Aufgaben konnten nicht geladen werden.');`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:402
- **Text:** '— Quelle wählen —'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="— Quelle wählen —"`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:403
- **Text:** 'Statisch (Aufgabe wählen)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` staticLabel="Statisch (Aufgabe wählen)"`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:422
- **Text:** '— Aufgabe wählen —'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="">— Aufgabe wählen —</option>`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:542
- **Text:** '— Quelle wählen —'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="— Quelle wählen —"`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:555
- **Text:** '— Option wählen —'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="">— Option wählen —</option>`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:577
- **Text:** '— Quelle wählen —'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="— Quelle wählen —"`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:613
- **Text:** '— Quelle wählen —'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="— Quelle wählen —"`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:638
- **Text:** 'z. B. 1234.56'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` placeholder={ft === 'currency' ? 'z. B. 1234.56' : undefined}`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:688
- **Text:** 'Fälligkeit'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>Fälligkeit</label>`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:694
- **Text:** '— Quelle wählen —'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="— Quelle wählen —"`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:734
- **Text:** 'Zeitschätzung (Stunden)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>Zeitschätzung (Stunden)</label>`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:740
- **Text:** '— Quelle wählen —'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="— Quelle wählen —"`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:782
- **Text:** 'Titel (name)'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 'name', label: 'Titel (name)' },`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:783
- **Text:** 'Beschreibung'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 'description', label: 'Beschreibung' },`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:784
- **Text:** 'Status'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 'status', label: 'Status' },`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:785
- **Text:** 'Priorität (14)'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 'priority', label: 'Priorität (14)' },`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:786
- **Text:** 'Fälligkeit (Datum oder ms)'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 'due_date', label: 'Fälligkeit (Datum oder ms)' },`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:787
- **Text:** 'Zeitschätzung (Stunden)'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 'time_estimate_h', label: 'Zeitschätzung (Stunden)' },`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:788
- **Text:** 'Zeitschätzung (ms)'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 'time_estimate_ms', label: 'Zeitschätzung (ms)' },`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:789
- **Text:** 'Zugewiesene'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 'assignees', label: 'Zugewiesene' },`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:790
- **Text:** 'Benutzerdefiniertes Feld'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 'custom_field', label: 'Benutzerdefiniertes Feld' },`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:852
- **Text:** 'Aufgaben konnten nicht geladen werden.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setErr('Aufgaben konnten nicht geladen werden.');`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:867
- **Text:** 'Vorhandene Aufgabe in der gewählten Liste'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>Vorhandene Aufgabe in der gewählten Liste</label>`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:882
- **Text:** '— Aufgabe aus ClickUp wählen —'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="">— Aufgabe aus ClickUp wählen —</option>`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1047
- **Text:** 'Oder Referenz (ohne Formular-Payload)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` label="Oder Referenz (ohne Formular-Payload)"`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1064
- **Text:** 'Feld-ID'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Feld-ID"`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1068
- **Text:** 'Neuer Wert'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` label="Neuer Wert"`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1072
- **Text:** 'Wert'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Wert"`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1083
- **Text:** 'Status (Referenz)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` label="Status (Referenz)"`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1086
- **Text:** 'Kontext mit Status-String'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Kontext mit Status-String"`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1097
- **Text:** 'Status (wie in ClickUp)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>Status (wie in ClickUp)</label>`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1099
- **Text:** 'Status werden geladen…'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="">Status werden geladen…</option>`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1106
- **Text:** 'Status (wie in ClickUp)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>Status (wie in ClickUp)</label>`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1114
- **Text:** '— Keine Status geladen —'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` ? '— Keine Status geladen —'`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1115
- **Text:** '— Status wählen —'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` : '— Status wählen —'}`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1147
- **Text:** 'Priorität'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>Priorität</label>`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1152
- **Text:** '— wählen —'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="">— wählen —</option>`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1153
- **Text:** '1 — Dringend'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="1">1 — Dringend</option>`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1154
- **Text:** '2 — Hoch'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="2">2 — Hoch</option>`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1155
- **Text:** '3 — Normal'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="3">3 — Normal</option>`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1156
- **Text:** '4 — Niedrig'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="4">4 — Niedrig</option>`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1169
- **Text:** 'Alternativ nur Referenz'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {commonHybrid(false, 'Alternativ nur Referenz')}`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1181
- **Text:** 'Alternativ: Referenz (Stunden)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {commonHybrid(false, 'Alternativ: Referenz (Stunden)')}`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1206
- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: '1px solid var(--border-color, #e0e0e0)',`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1234
- **Text:** '[123,456] oder JSON-Array'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {commonHybrid(false, '[123,456] oder JSON-Array')}`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1246
- **Text:** 'Beschreibung'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Beschreibung"`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1258
- **Text:** 'Titel'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Titel"`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1280
- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: '1px solid var(--border-color, #e0e0e0)',`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1654
- **Text:** 'Connection (ClickUp)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>Connection (ClickUp)</label>`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1660
- **Text:** 'Loading...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` <option value="">{connectionsLoading ? 'Loading...' : 'Select connection'}</option>`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1660
- **Text:** 'Select connection'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` <option value="">{connectionsLoading ? 'Loading...' : 'Select connection'}</option>`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1683
- **Text:** 'Workspaces werden geladen…'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {searchTeamsLoading ? 'Workspaces werden geladen…' : 'Workspace wählen…'}`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1683
- **Text:** 'Workspace wählen…'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {searchTeamsLoading ? 'Workspaces werden geladen…' : 'Workspace wählen…'}`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1693
- **Text:** 'Liste (Tabelle)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>Liste (Tabelle)</label>`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1701
- **Text:** 'Listen werden geladen…'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` ? 'Listen werden geladen…'`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1703
- **Text:** 'Alle Listen im Workspace'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` ? 'Alle Listen im Workspace'`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1704
- **Text:** 'Zuerst Workspace wählen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` : 'Zuerst Workspace wählen'}`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1718
- **Text:** 'Stichwort für die Aufgabensuche'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Stichwort für die Aufgabensuche"`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1726
- **Text:** 'Seite (Pagination)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>Seite (Pagination)</label>`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1754
- **Text:** 'Erledigte Aufgaben einbeziehen (Listen-Suche)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Erledigte Aufgaben einbeziehen (Listen-Suche)</span>`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1793
- **Text:** 'Workspaces werden geladen…'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {searchTeamsLoading ? 'Workspaces werden geladen…' : 'Workspace wählen…'}`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1793
- **Text:** 'Workspace wählen…'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {searchTeamsLoading ? 'Workspaces werden geladen…' : 'Workspace wählen…'}`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1819
- **Text:** 'Listen werden geladen…'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` <option value="">{searchListsLoading ? 'Listen werden geladen…' : 'Liste wählen…'}</option>`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1819
- **Text:** 'Liste wählen…'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` <option value="">{searchListsLoading ? 'Listen werden geladen…' : 'Liste wählen…'}</option>`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1835
- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: '1px solid var(--border-color, #e0e0e0)',`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1854
- **Text:** 'Bei Listenwahl automatisch abgleichen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Bei Listenwahl automatisch abgleichen</span>`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1898
- **Text:** '— Standard (ClickUp) —'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="">— Standard (ClickUp) —</option>`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1909
- **Text:** 'Priorität'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>Priorität</label>`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1914
- **Text:** '— keine —'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="">— keine —</option>`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1915
- **Text:** '1 — Dringend'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="1">1 — Dringend</option>`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1916
- **Text:** '2 — Hoch'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="2">2 — Hoch</option>`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1917
- **Text:** '3 — Normal'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="3">3 — Normal</option>`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1918
- **Text:** '4 — Niedrig'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="4">4 — Niedrig</option>`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1940
- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: '1px solid var(--border-color, #e0e0e0)',`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:2013
- **Text:** 'Zusätzliche Felder (JSON)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>Zusätzliche Felder (JSON)</label>`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:2018
- **Text:** '{"priority": "3"}'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder='{"priority": "3"}'`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:2028
- **Text:** 'List path'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>List path</label>`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:2032
- **Text:** '/team/{teamId}/list/{listId}'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="/team/{teamId}/list/{listId}"`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:2069
- **Text:** 'Referenz: voriger Knoten „Aufgabe erstellen“ → taskId'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Referenz: voriger Knoten „Aufgabe erstellen“ → taskId"`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:2073
- **Text:** 'Path (optional)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>Path (optional)</label>`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:2077
- **Text:** '.../task/{taskId}'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder=".../task/{taskId}"`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:2090
- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: '1px solid var(--border-color, #e0e0e0)',`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:2122
- **Text:** 'Workspaces werden geladen…'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {searchTeamsLoading ? 'Workspaces werden geladen…' : 'Workspace wählen…'}`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:2122
- **Text:** 'Workspace wählen…'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {searchTeamsLoading ? 'Workspaces werden geladen…' : 'Workspace wählen…'}`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:2146
- **Text:** 'Listen werden geladen…'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` <option value="">{searchListsLoading ? 'Listen werden geladen…' : 'Liste wählen…'}</option>`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:2146
- **Text:** 'Liste wählen…'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` <option value="">{searchListsLoading ? 'Listen werden geladen…' : 'Liste wählen…'}</option>`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:2177
- **Text:** 'taskUpdate (JSON)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>taskUpdate (JSON)</label>`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:2182
- **Text:** '{"name": "…"} — Basis; Zeilen darüber setzen/überschreiben Felder'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder='{"name": "…"} — Basis; Zeilen darüber setzen/überschreiben Felder'`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:2191
- **Text:** 'File name (optional)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>File name (optional)</label>`
## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:2195
- **Text:** 'report.pdf'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="report.pdf"`
## `src/components/FlowEditor/nodes/configs/CommentNodeConfig.tsx`:15
- **Text:** 'Kommentar eingeben...'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Kommentar eingeben..."`
## `src/components/FlowEditor/nodes/configs/ConfirmationNodeConfig.tsx`:15
- **Text:** 'Möchten Sie bestätigen?'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Möchten Sie bestätigen?"`
## `src/components/FlowEditor/nodes/configs/ConfirmationNodeConfig.tsx`:19
- **Text:** 'Bestätigen-Button'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>Bestätigen-Button</label>`
## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:60
- **Text:** 'Loading...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` <option value="">{loading ? 'Loading...' : 'Select connection'}</option>`
## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:60
- **Text:** 'Select connection'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` <option value="">{loading ? 'Loading...' : 'Select connection'}</option>`
## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:77
- **Text:** 'Loading folders...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {foldersLoading ? 'Loading folders...' : !connectionId ? 'Select account first' : 'Select folder'}`
## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:77
- **Text:** 'Select account first'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {foldersLoading ? 'Loading folders...' : !connectionId ? 'Select account first' : 'Select folder'}`
## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:77
- **Text:** 'Select folder'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {foldersLoading ? 'Loading folders...' : !connectionId ? 'Select account first' : 'Select folder'}`
## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:95
- **Text:** 'Sent Items'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="SentItems">Sent Items</option>`
## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:96
- **Text:** 'Deleted Items'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="DeletedItems">Deleted Items</option>`
## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:97
- **Text:** 'Junk Email'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="JunkEmail">Junk Email</option>`
## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:114
- **Text:** 'Search query (optional)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>Search query (optional)</label>`
## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:118
- **Text:** 'General search term (subject, body, from)'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="General search term (subject, body, from)"`
## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:122
- **Text:** 'From address (optional)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>From address (optional)</label>`
## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:126
- **Text:** 'e.g. sender@example.com'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="e.g. sender@example.com"`
## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:130
- **Text:** 'To address (optional)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>To address (optional)</label>`
## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:134
- **Text:** 'e.g. recipient@example.com'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="e.g. recipient@example.com"`
## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:138
- **Text:** 'Subject contains (optional)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>Subject contains (optional)</label>`
## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:142
- **Text:** 'Word or phrase in subject'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Word or phrase in subject"`
## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:146
- **Text:** 'Body/content contains (optional)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>Body/content contains (optional)</label>`
## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:150
- **Text:** 'Word or phrase in email body'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Word or phrase in email body"`
## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:160
- **Text:** 'Only emails with attachment'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label htmlFor="searchHasAttachment">Only emails with attachment</label>`
## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:175
- **Text:** 'From address (optional)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>From address (optional)</label>`
## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:179
- **Text:** 'e.g. sender@example.com'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="e.g. sender@example.com"`
## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:183
- **Text:** 'Subject contains (optional)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>Subject contains (optional)</label>`
## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:187
- **Text:** 'Word or phrase in subject'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Word or phrase in subject"`
## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:197
- **Text:** 'Only emails with attachment'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label htmlFor="hasAttachment">Only emails with attachment</label>`
## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:216
- **Text:** 'Email subject (or leave empty if connected to AI node above)'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Email subject (or leave empty if connected to AI node above)"`
## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:224
- **Text:** 'Email body (or leave empty if connected to AI node above)'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Email body (or leave empty if connected to AI node above)"`
## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:229
- **Text:** 'To (optional)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>To (optional)</label>`
## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:233
- **Text:** 'Recipient(s) (or from AI when connected)'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Recipient(s) (or from AI when connected)"`
## `src/components/FlowEditor/nodes/configs/FileCreateNodeConfig.tsx`:44
- **Text:** 'Inhalte (welche Kontexte nacheinander in die Datei?)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>Inhalte (welche Kontexte nacheinander in die Datei?)</label>`
## `src/components/FlowEditor/nodes/configs/FileCreateNodeConfig.tsx`:50
- **Text:** 'Quelle wählen…'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Quelle wählen…"`
## `src/components/FlowEditor/nodes/configs/FileCreateNodeConfig.tsx`:56
- **Text:** 'Entfernen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Entfernen"`
## `src/components/FlowEditor/nodes/configs/FileCreateNodeConfig.tsx`:57
- **Text:** 'Inhalt entfernen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` aria-label="Inhalt entfernen"`
## `src/components/FlowEditor/nodes/configs/FileCreateNodeConfig.tsx`:90
- **Text:** 'Dokumenttitel'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Dokumenttitel"`
## `src/components/FlowEditor/nodes/configs/FileCreateNodeConfig.tsx`:94
- **Text:** 'Vorlage / Stil'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>Vorlage / Stil</label>`
## `src/components/FlowEditor/nodes/configs/ReviewNodeConfig.tsx`:16
- **Text:** '{{nodeId.field}}'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="{{nodeId.field}}"`
## `src/components/FlowEditor/nodes/configs/SelectionNodeConfig.tsx`:16
- **Text:** 'value'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="value"`
## `src/components/FlowEditor/nodes/configs/SelectionNodeConfig.tsx`:25
- **Text:** 'label'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="label"`
## `src/components/FlowEditor/nodes/configs/SelectionNodeConfig.tsx`:35
- **Text:** ''
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` <button type="button" onClick={() => updateParam('options', [...options, { value: '', label: '' }])}>`
## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:15
- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: '1px solid var(--border-color, #e0e0e0)',`
## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:34
- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` borderTop: '1px solid var(--border-color, #e0e0e0)',`
## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:42
- **Text:** 'Zielordner durchsuchen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` return 'Zielordner durchsuchen';`
## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:44
- **Text:** 'Ordner durchsuchen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` return 'Ordner durchsuchen';`
## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:46
- **Text:** 'Datei auswählen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` return 'Datei auswählen';`
## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:48
- **Text:** 'Datei auswählen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` return 'Datei auswählen';`
## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:50
- **Text:** 'Pfad aus Bibliothek wählen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` return 'Pfad aus Bibliothek wählen';`
## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:52
- **Text:** 'SharePoint durchsuchen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` return 'SharePoint durchsuchen';`
## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:156
- **Text:** 'Loading...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` <option value="">{connectionsLoading ? 'Loading...' : 'Select connection'}</option>`
## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:156
- **Text:** 'Select connection'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` <option value="">{connectionsLoading ? 'Loading...' : 'Select connection'}</option>`
## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:167
- **Text:** 'Search query / path'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>Search query / path</label>`
## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:171
- **Text:** '/sites/SiteName/Shared Documents or search term'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="/sites/SiteName/Shared Documents or search term"`
## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:178
- **Text:** 'Folder path'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>Folder path</label>`
## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:182
- **Text:** '/ or /sites/SiteName/Shared Documents/Folder'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="/ or /sites/SiteName/Shared Documents/Folder"`
## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:191
- **Text:** 'Target folder path'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` ? 'Target folder path'`
## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:193
- **Text:** 'File path'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` ? 'File path'`
## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:204
- **Text:** 'File path'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` : 'File path'`
## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:212
- **Text:** 'Site ID'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>Site ID</label>`
## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:216
- **Text:** 'SharePoint site ID'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="SharePoint site ID"`
## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:224
- **Text:** 'Source file'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>Source file</label>`
## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:228
- **Text:** '/sites/.../folder/file.pdf'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="/sites/.../folder/file.pdf"`
## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:232
- **Text:** 'Destination folder'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>Destination folder</label>`
## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:236
- **Text:** '/sites/.../target-folder/'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="/sites/.../target-folder/"`
## `src/components/FlowEditor/nodes/configs/TrusteeNodeConfig.tsx`:35
- **Text:** 'Trustee Instance ID'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>Trustee Instance ID</label>`
## `src/components/FlowEditor/nodes/configs/TrusteeNodeConfig.tsx`:39
- **Text:** 'Trustee Feature-Instanz-ID'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Trustee Feature-Instanz-ID"`
## `src/components/FlowEditor/nodes/configs/TrusteeNodeConfig.tsx`:46
- **Text:** 'SharePoint Connection (optional)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>SharePoint Connection (optional)</label>`
## `src/components/FlowEditor/nodes/configs/TrusteeNodeConfig.tsx`:52
- **Text:** 'Keine (Dateien aus vorherigem Schritt)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` <option value="">{loading ? 'Laden...' : 'Keine (Dateien aus vorherigem Schritt)'}</option>`
## `src/components/FlowEditor/nodes/configs/TrusteeNodeConfig.tsx`:61
- **Text:** 'SharePoint Ordnerpfad (optional)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>SharePoint Ordnerpfad (optional)</label>`
## `src/components/FlowEditor/nodes/configs/TrusteeNodeConfig.tsx`:65
- **Text:** '/sites/MySite/Documents/Expenses'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="/sites/MySite/Documents/Expenses"`
## `src/components/FlowEditor/nodes/configs/TrusteeNodeConfig.tsx`:69
- **Text:** 'AI Prompt (optional)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>AI Prompt (optional)</label>`
## `src/components/FlowEditor/nodes/configs/TrusteeNodeConfig.tsx`:73
- **Text:** 'Zusätzliche Anweisungen für die AI-Extraktion'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Zusätzliche Anweisungen für die AI-Extraktion"`
## `src/components/FlowEditor/nodes/configs/TrusteeNodeConfig.tsx`:82
- **Text:** 'Document List (Referenz)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>Document List (Referenz)</label>`
## `src/components/FlowEditor/nodes/configs/TrusteeNodeConfig.tsx`:86
- **Text:** 'Referenz auf vorherigen Schritt (automatisch verknüpft)'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Referenz auf vorherigen Schritt (automatisch verknüpft)"`
## `src/components/FlowEditor/nodes/configs/UploadNodeConfig.tsx`:40
- **Text:** 'Erlaubte Dateitypen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>Erlaubte Dateitypen</label>`
## `src/components/FlowEditor/nodes/configs/UploadNodeConfig.tsx`:58
- **Text:** 'Max. Größe (MB)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>Max. Größe (MB)</label>`
## `src/components/FlowEditor/nodes/form/FormNodeConfig.tsx`:77
- **Text:** 'Zum Verschieben ziehen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Zum Verschieben ziehen"`
## `src/components/FlowEditor/nodes/form/FormNodeConfig.tsx`:88
- **Text:** 'name'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="name"`
## `src/components/FlowEditor/nodes/form/FormNodeConfig.tsx`:97
- **Text:** 'label'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="label"`
## `src/components/FlowEditor/nodes/form/FormNodeConfig.tsx`:134
- **Text:** 'ClickUp-Aufgabe (Referenz)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="clickup_tasks">ClickUp-Aufgabe (Referenz)</option>`
## `src/components/FlowEditor/nodes/form/FormNodeConfig.tsx`:135
- **Text:** 'ClickUp-Status (Liste)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="clickup_status">ClickUp-Status (Liste)</option>`
## `src/components/FlowEditor/nodes/form/FormNodeConfig.tsx`:152
- **Text:** 'Feld entfernen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Feld entfernen"`
## `src/components/FlowEditor/nodes/form/FormNodeConfig.tsx`:188
- **Text:** 'Verbindung wählen…'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` <option value="">{connectionsLoading ? 'Lade…' : 'Verbindung wählen…'}</option>`
## `src/components/FlowEditor/nodes/form/FormNodeConfig.tsx`:199
- **Text:** 'z. B. aus ClickUp-URL …/list/123456789'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="z. B. aus ClickUp-URL …/list/123456789"`
## `src/components/FlowEditor/nodes/form/FormNodeConfig.tsx`:210
- **Text:** '{ add: [taskId], rem: [] }'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` <code>{'{ add: [taskId], rem: [] }'}</code> — im ClickUp-Node per Datenquelle auf das`
## `src/components/FlowEditor/nodes/form/FormNodeConfig.tsx`:220
- **Text:** ''
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` updateParam('fields', [...fields, { name: '', type: 'string', label: '', required: false }])`
## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:170
- **Text:** '— Select connection —'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="">— Select connection —</option>`
## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:214
- **Text:** 'not equals'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="neq">not equals</option>`
## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:216
- **Text:** 'greater than'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="gt">greater than</option>`
## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:217
- **Text:** 'less than'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="lt">less than</option>`
## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:230
- **Text:** ''
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` const addField = () => onChange([...fields, { name: '', type: 'text', label: '', required: false }]);`
## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:242
- **Text:** 'Name'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <input type="text" placeholder="Name" value={String(f.name ?? '')} onChange={(e) => updateField(i, 'name', e.target.value)} style={{ flex: 1, padding: '2px 4px', borderRadius: 4, border: '1px solid #ccc' }} />`
## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:248
- **Text:** 'Select'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="select">Select</option>`
## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:251
- **Text:** 'Label'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <input type="text" placeholder="Label" value={String(f.label ?? '')} onChange={(e) => updateField(i, 'label', e.target.value)} style={{ flex: 1, padding: '2px 4px', borderRadius: 4, border: '1px solid #ccc' }} />`
## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:277
- **Text:** 'Key'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <input type="text" placeholder="Key" value={String(r.key ?? r.fieldKey ?? '')} onChange={(e) => updateRow(i, 'key', e.target.value)} style={{ flex: 1, padding: '2px 4px', borderRadius: 4, border: '1px solid #ccc' }} />`
## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:278
- **Text:** 'Value'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <input type="text" placeholder="Value" value={String(r.value ?? '')} onChange={(e) => updateRow(i, 'value', e.target.value)} style={{ flex: 2, padding: '2px 4px', borderRadius: 4, border: '1px solid #ccc' }} />`
## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:294
- **Text:** '*/5 * * * *'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="*/5 * * * *"`
## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:310
- **Text:** 'not equals'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="neq">not equals</option>`
## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:311
- **Text:** 'greater than'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="gt">greater than</option>`
## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:312
- **Text:** 'less than'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="lt">less than</option>`
## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:314
- **Text:** 'is empty'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="empty">is empty</option>`
## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:315
- **Text:** 'is not empty'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="not_empty">is not empty</option>`
## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:316
- **Text:** 'is true'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="is_true">is true</option>`
## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:317
- **Text:** 'is false'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="is_false">is false</option>`
## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:319
- **Text:** 'Value'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <input type="text" placeholder="Value" value={String(cond.value ?? '')} onChange={(e) => update('value', e.target.value)} style={{ flex: 2, padding: '2px 4px', borderRadius: 4, border: '1px solid #ccc' }} />`
## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:339
- **Text:** 'Source field'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <input type="text" placeholder="Source field" value={String(m.sourceField ?? '')} onChange={(e) => updateMapping(i, 'sourceField', e.target.value)} style={{ flex: 1, padding: '2px 4px', borderRadius: 4, border: '1px solid #ccc' }} />`
## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:341
- **Text:** 'Output field'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <input type="text" placeholder="Output field" value={String(m.outputField ?? '')} onChange={(e) => updateMapping(i, 'outputField', e.target.value)} style={{ flex: 1, padding: '2px 4px', borderRadius: 4, border: '1px solid #ccc' }} />`
## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:357
- **Text:** 'Field'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <input type="text" placeholder="Field" value={String(cond.field ?? '')} onChange={(e) => update('field', e.target.value)} style={{ flex: 1, padding: '2px 4px', borderRadius: 4, border: '1px solid #ccc' }} />`
## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:360
- **Text:** 'not equals'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="neq">not equals</option>`
## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:362
- **Text:** 'starts with'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="startsWith">starts with</option>`
## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:363
- **Text:** 'is empty'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="isEmpty">is empty</option>`
## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:364
- **Text:** 'is not empty'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="isNotEmpty">is not empty</option>`
## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:365
- **Text:** 'greater than'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="gt">greater than</option>`
## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:366
- **Text:** 'less than'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="lt">less than</option>`
## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:368
- **Text:** 'Value'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <input type="text" placeholder="Value" value={String(cond.value ?? '')} onChange={(e) => update('value', e.target.value)} style={{ flex: 1, padding: '2px 4px', borderRadius: 4, border: '1px solid #ccc' }} />`
## `src/components/FlowEditor/nodes/ifElse/IfElseNodeConfig.tsx`:49
- **Text:** 'input.upload'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` isMimeTypeRef && sourceNode?.type === 'input.upload' && sourceNode.parameters`
## `src/components/FlowEditor/nodes/ifElse/IfElseNodeConfig.tsx`:100
- **Text:** 'Formular-Feld wählen…'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <RefSourceSelect value={ref} onChange={handleRefChange} placeholder="Formular-Feld wählen…" />`
## `src/components/FlowEditor/nodes/ifElse/IfElseNodeConfig.tsx`:120
- **Text:** '— MIME-Type wählen —'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="">— MIME-Type wählen —</option>`
## `src/components/FlowEditor/nodes/ifElse/IfElseNodeConfig.tsx`:142
- **Text:** 'z.B. application/pdf'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` ? 'z.B. application/pdf'`
## `src/components/FlowEditor/nodes/ifElse/IfElseNodeConfig.tsx`:143
- **Text:** 'z.B. CH'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` : 'z.B. CH'`
## `src/components/FlowEditor/nodes/shared/DataPicker.tsx`:47
- **Text:** '(ganze Ausgabe)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` const pathLabel = basePath.length ? basePath.map(String).join(' → ') : '(ganze Ausgabe)';`
## `src/components/FlowEditor/nodes/shared/DataPicker.tsx`:141
- **Text:** 'Datenquelle wählen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h4 className={styles.dataPickerTitle}>Datenquelle wählen</h4>`
## `src/components/FlowEditor/nodes/shared/DataPicker.tsx`:142
- **Text:** 'Schließen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <button type="button" className={styles.dataPickerClose} onClick={onClose} aria-label="Schließen">`
## `src/components/FlowEditor/nodes/shared/DataPicker.tsx`:183
- **Text:** 'Keine vorherigen Nodes verfügbar.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` return <p className={styles.dataPickerEmpty}>Keine vorherigen Nodes verfügbar.</p>;`
## `src/components/FlowEditor/nodes/shared/DynamicValueField.tsx`:58
- **Text:** 'Keine vorherigen Nodes verfügbar.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.dynamicValueEmptyHint}>Keine vorherigen Nodes verfügbar.</p>`
## `src/components/FlowEditor/nodes/shared/HybridStaticRefField.tsx`:86
- **Text:** '— Quelle wählen —'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="— Quelle wählen —"`
## `src/components/FlowEditor/nodes/shared/LoopItemsSelect.tsx`:71
- **Text:** 'input.upload'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` if (node?.type === 'input.upload') {`
## `src/components/FlowEditor/nodes/shared/LoopItemsSelect.tsx`:159
- **Text:** 'Über was soll iteriert werden?'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder = 'Über was soll iteriert werden?',`
## `src/components/FlowEditor/nodes/shared/LoopItemsSelect.tsx`:185
- **Text:** 'Datenquelle für Iteration'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>Datenquelle für Iteration</label>`
## `src/components/FlowEditor/nodes/shared/RefSourceSelect.tsx`:109
- **Text:** 'input.upload'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` if (node.type === 'input.upload') {`
## `src/components/FlowEditor/nodes/shared/RefSourceSelect.tsx`:193
- **Text:** '— Quelle wählen —'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder = '— Quelle wählen —',`
## `src/components/FlowEditor/nodes/shared/RefSourceSelect.tsx`:270
- **Text:** 'Datenquelle wählen…'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder = 'Datenquelle wählen…',`
## `src/components/FlowEditor/nodes/shared/RefSourceSelect.tsx`:360
- **Text:** 'input.upload'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` if (node.type === 'input.upload') {`
## `src/components/FlowEditor/nodes/start/FormStartNodeConfig.tsx`:20
- **Text:** 'Feld 1'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` if (!Array.isArray(raw)) return [{ name: 'field1', label: 'Feld 1', type: 'text' }];`
## `src/components/FlowEditor/nodes/start/FormStartNodeConfig.tsx`:62
- **Text:** 'Name (Payload-Key)'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Name (Payload-Key)"`
## `src/components/FlowEditor/nodes/start/FormStartNodeConfig.tsx`:72
- **Text:** 'Beschriftung'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Beschriftung"`
## `src/components/FlowEditor/nodes/start/FormStartNodeConfig.tsx`:99
- **Text:** 'ClickUp-Status (Liste)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="clickup_status">ClickUp-Status (Liste)</option>`
## `src/components/FlowEditor/nodes/start/FormStartNodeConfig.tsx`:114
- **Text:** 'Neues Feld'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` setFields([...fields, { name: `field${fields.length + 1}`, label: 'Neues Feld', type: 'text' }])`
## `src/components/FlowEditor/nodes/start/ScheduleStartNodeConfig.tsx`:20
- **Text:** 'Täglich'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` { value: 'daily', title: 'Täglich', subtitle: 'Jeden Tag zur gleichen Zeit' },`
## `src/components/FlowEditor/nodes/start/ScheduleStartNodeConfig.tsx`:20
- **Text:** 'Jeden Tag zur gleichen Zeit'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` { value: 'daily', title: 'Täglich', subtitle: 'Jeden Tag zur gleichen Zeit' },`
## `src/components/FlowEditor/nodes/start/ScheduleStartNodeConfig.tsx`:21
- **Text:** 'Montag bis Freitag'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` { value: 'weekdays', title: 'Werktage', subtitle: 'Montag bis Freitag' },`
## `src/components/FlowEditor/nodes/start/ScheduleStartNodeConfig.tsx`:22
- **Text:** 'Bestimmte Tage'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` { value: 'weekly', title: 'Bestimmte Tage', subtitle: 'Wochentage auswählen' },`
## `src/components/FlowEditor/nodes/start/ScheduleStartNodeConfig.tsx`:22
- **Text:** 'Wochentage auswählen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` { value: 'weekly', title: 'Bestimmte Tage', subtitle: 'Wochentage auswählen' },`
## `src/components/FlowEditor/nodes/start/ScheduleStartNodeConfig.tsx`:23
- **Text:** 'Ein anderer Zeitraum'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` { value: 'calendar', title: 'Ein anderer Zeitraum', subtitle: 'Monatlich oder jährlich wiederkehrend' },`
## `src/components/FlowEditor/nodes/start/ScheduleStartNodeConfig.tsx`:23
- **Text:** 'Monatlich oder jährlich wiederkehrend'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` { value: 'calendar', title: 'Ein anderer Zeitraum', subtitle: 'Monatlich oder jährlich wiederkehrend' },`
## `src/components/FlowEditor/nodes/start/ScheduleStartNodeConfig.tsx`:24
- **Text:** 'In regelmäßigen Abständen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` { value: 'interval', title: 'Intervall', subtitle: 'In regelmäßigen Abständen' },`
## `src/components/FlowEditor/nodes/start/ScheduleStartNodeConfig.tsx`:30
- **Text:** 'März'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` 'März',`
## `src/components/FlowEditor/nodes/start/ScheduleStartNodeConfig.tsx`:43
- **Text:** 'sek'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 'seconds', label: 'sek', title: 'Sekunden' },`
## `src/components/FlowEditor/nodes/start/ScheduleStartNodeConfig.tsx`:44
- **Text:** 'min'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 'minutes', label: 'min', title: 'Minuten' },`
## `src/components/FlowEditor/nodes/start/ScheduleStartNodeConfig.tsx`:45
- **Text:** 'h'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 'hours', label: 'h', title: 'Stunden' },`
## `src/components/FlowEditor/nodes/start/ScheduleStartNodeConfig.tsx`:46
- **Text:** 'd'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 'days', label: 'd', title: 'Tage' },`
## `src/components/FlowEditor/nodes/start/ScheduleStartNodeConfig.tsx`:47
- **Text:** 'a'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 'years', label: 'a', title: 'Jahre' },`
## `src/components/FlowEditor/nodes/start/StartNodeConfig.tsx`:12
- **Text:** 'manual | form | schedule | email | webhook | api | event'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` "type": "manual | form | schedule | email | webhook | api | event",`
## `src/components/FlowEditor/nodes/switch/SwitchNodeConfig.tsx`:58
- **Text:** 'input.upload'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` isMimeTypeRef && sourceNode?.type === 'input.upload' && sourceNode.parameters`
## `src/components/FlowEditor/nodes/switch/SwitchNodeConfig.tsx`:114
- **Text:** '— MIME-Type wählen —'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="">— MIME-Type wählen —</option>`
## `src/components/FlowEditor/nodes/switch/SwitchNodeConfig.tsx`:130
- **Text:** '0'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="0"`
## `src/components/FlowEditor/nodes/switch/SwitchNodeConfig.tsx`:154
- **Text:** '— wählen —'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="">— wählen —</option>`
## `src/components/FlowEditor/nodes/switch/SwitchNodeConfig.tsx`:155
- **Text:** 'Ja / wahr'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="true">Ja / wahr</option>`
## `src/components/FlowEditor/nodes/switch/SwitchNodeConfig.tsx`:156
- **Text:** 'Nein / falsch'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="false">Nein / falsch</option>`
## `src/components/FlowEditor/nodes/switch/SwitchNodeConfig.tsx`:166
- **Text:** 'z.B. application/pdf'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` placeholder={isMimeTypeRef ? 'z.B. application/pdf' : `Wert`}`
## `src/components/FlowEditor/nodes/switch/SwitchNodeConfig.tsx`:189
- **Text:** 'Feld zum Vergleichen wählen…'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Feld zum Vergleichen wählen…"`
## `src/components/FlowEditor/nodes/switch/SwitchNodeConfig.tsx`:195
- **Text:** 'Fester Wert (falls keine Referenz)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>Fester Wert (falls keine Referenz)</label>`
## `src/components/FlowEditor/nodes/switch/SwitchNodeConfig.tsx`:200
- **Text:** 'z.B. CH oder 42'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="z.B. CH oder 42"`
## `src/components/FlowEditor/nodes/switch/SwitchNodeConfig.tsx`:206
- **Text:** 'Fälle (Reihenfolge = Ausgang)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>Fälle (Reihenfolge = Ausgang)</label>`
## `src/components/FolderTree/FolderTree.tsx`:164
- **Text:** 'Persönlich'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` personal: 'Persönlich',`
## `src/components/FolderTree/FolderTree.tsx`:257
- **Text:** 'Umbenennen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <button className={styles.actionBtn} onClick={(e) => { e.stopPropagation(); setRenameValue(file.fileName); setRenaming(true); }} title="Umbenennen">`
## `src/components/FolderTree/FolderTree.tsx`:278
- **Text:** 'Löschen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <button className={`${styles.actionBtn} ${styles.danger}`} onClick={_handleDeleteSingle} title="Löschen">`
## `src/components/FolderTree/FolderTree.tsx`:311
- **Text:** 'Neutralisierung aktiv (klicken zum Deaktivieren)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title={file.neutralize ? 'Neutralisierung aktiv (klicken zum Deaktivieren)' : 'Neutralisierung aus (klicken zum Aktivieren)'}`
## `src/components/FolderTree/FolderTree.tsx`:311
- **Text:** 'Neutralisierung aus (klicken zum Aktivieren)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title={file.neutralize ? 'Neutralisierung aktiv (klicken zum Deaktivieren)' : 'Neutralisierung aus (klicken zum Aktivieren)'}`
## `src/components/FolderTree/FolderTree.tsx`:380
- **Text:** 'Neuer Ordnername:'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` const name = await promptFolderName('Neuer Ordnername:', { title: 'Neuer Ordner', placeholder: 'Ordnername' });`
## `src/components/FolderTree/FolderTree.tsx`:380
- **Text:** 'Neuer Ordner'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` const name = await promptFolderName('Neuer Ordnername:', { title: 'Neuer Ordner', placeholder: 'Ordnername' });`
## `src/components/FolderTree/FolderTree.tsx`:499
- **Text:** 'Ordner herunterladen (ZIP)'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <button className={styles.actionBtn} onClick={(e) => { e.stopPropagation(); onDownloadFolder(node.id, node.name); }} title="Ordner herunterladen (ZIP)">`
## `src/components/FolderTree/FolderTree.tsx`:504
- **Text:** 'Neuer Unterordner'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <button className={styles.actionBtn} onClick={_handleAdd} title="Neuer Unterordner">`
## `src/components/FolderTree/FolderTree.tsx`:509
- **Text:** 'Umbenennen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <button className={styles.actionBtn} onClick={(e) => { e.stopPropagation(); setRenameValue(node.name); setRenaming(true); }} title="Umbenennen">`
## `src/components/FolderTree/FolderTree.tsx`:529
- **Text:** 'Löschen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <button className={`${styles.actionBtn} ${styles.danger}`} onClick={_handleDeleteSingle} title="Löschen">`
## `src/components/FolderTree/FolderTree.tsx`:754
- **Text:** 'Aktualisieren'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <button className={styles.actionBtn} onClick={(e) => { e.stopPropagation(); onRefresh(); }} title="Aktualisieren">`
## `src/components/FolderTree/FolderTree.tsx`:763
- **Text:** 'Neuer Ordnername:'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` const name = await promptFolderName('Neuer Ordnername:', { title: 'Neuer Ordner', placeholder: 'Ordnername' });`
## `src/components/FolderTree/FolderTree.tsx`:763
- **Text:** 'Neuer Ordner'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` const name = await promptFolderName('Neuer Ordnername:', { title: 'Neuer Ordner', placeholder: 'Ordnername' });`
## `src/components/FolderTree/FolderTree.tsx`:766
- **Text:** 'Neuer Ordner'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Neuer Ordner"`
## `src/components/FormGenerator/ActionButtons/DeleteActionButton/DeleteActionButton.tsx`:50
- **Text:** 'DeleteActionButton requires hookData to be provided'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` throw new Error('DeleteActionButton requires hookData to be provided');`
## `src/components/FormGenerator/ActionButtons/DeleteActionButton/DeleteActionButton.tsx`:65
- **Text:** 'DeleteActionButton requires hookData.refetch to be defined'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` throw new Error('DeleteActionButton requires hookData.refetch to be defined');`
## `src/components/FormGenerator/ActionButtons/DeleteActionButton/DeleteActionButton.tsx`:134
- **Text:** 'Delete failed'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` onError?.(row, 'Delete failed');`
## `src/components/FormGenerator/ActionButtons/DeleteActionButton/DeleteActionButton.tsx`:138
- **Text:** 'Delete failed'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` onError?.(row, error.message || 'Delete failed');`
## `src/components/FormGenerator/ActionButtons/EditActionButton/EditActionButton.tsx`:61
- **Text:** 'EditActionButton requires hookData to be provided'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` throw new Error('EditActionButton requires hookData to be provided');`
## `src/components/FormGenerator/ActionButtons/ViewActionButton/ViewActionButton.tsx`:103
- **Text:** 'Unknown Item'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` fileName={(row as any)[nameField] || 'Unknown Item'}`
## `src/components/FormGenerator/FormGeneratorControls/FormGeneratorControls.tsx`:43
- **Text:** 'Sync to Accounting'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` // Optional batch actions (e.g. "Sync to Accounting") shown when items are selected`
## `src/components/FormGenerator/FormGeneratorControls/FormGeneratorControls.tsx`:160
- **Text:** ' '
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder=" "`
## `src/components/FormGenerator/FormGeneratorForm/FormGeneratorForm.tsx`:670
- **Text:** 'English'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { code: 'en', label: 'English', required: true },`
## `src/components/FormGenerator/FormGeneratorForm/FormGeneratorForm.tsx`:671
- **Text:** 'German'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { code: 'ge', label: 'German', required: false },`
## `src/components/FormGenerator/FormGeneratorForm/FormGeneratorForm.tsx`:672
- **Text:** 'French'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { code: 'fr', label: 'French', required: false },`
## `src/components/FormGenerator/FormGeneratorForm/FormGeneratorForm.tsx`:673
- **Text:** 'Italian'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { code: 'it', label: 'Italian', required: false }`
## `src/components/FormGenerator/FormGeneratorForm/FormGeneratorForm.tsx`:817
- **Text:** "({currentValues.length} {t('ausgewählt')})"
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span className={styles.multiselectCount}> ({currentValues.length} {t('ausgewählt')})</span>`
## `src/components/FormGenerator/FormGeneratorList/FormGeneratorList.tsx`:133
- **Text:** '⚠️ FormGeneratorList: No fields provided! '
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` '⚠️ FormGeneratorList: No fields provided! ' +`
## `src/components/FormGenerator/FormGeneratorList/FormGeneratorList.tsx`:134
- **Text:** 'Fields should come from Pydantic attribute definitions via /attributes/{entityType} endpoint. '
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` 'Fields should come from Pydantic attribute definitions via /attributes/{entityType} endpoint. ' +`
## `src/components/FormGenerator/FormGeneratorList/FormGeneratorList.tsx`:135
- **Text:** 'Please ensure the calling component fetches and passes fields from the backend.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` 'Please ensure the calling component fetches and passes fields from the backend.'`
## `src/components/FormGenerator/FormGeneratorList/FormGeneratorList.tsx`:354
- **Text:** 'Some items failed to delete'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` throw new Error('Some items failed to delete');`
## `src/components/FormGenerator/FormGeneratorList/FormGeneratorList.tsx`:441
- **Text:** 'in progress'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` if (statusValue === 'pending' || statusValue === 'waiting' || statusValue === 'in_progress' || statusValue === 'in progress') {`
## `src/components/FormGenerator/FormGeneratorList/FormGeneratorList.tsx`:611
- **Text:** 't support '
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` // TextField doesn't support 'textarea' type, use 'text' instead`
## `src/components/FormGenerator/FormGeneratorList/FormGeneratorList.tsx`:611
- **Text:** ' type, use '
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` // TextField doesn't support 'textarea' type, use 'text' instead`
## `src/components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx`:42
- **Text:** 'Mär'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` '01': 'Jan', '02': 'Feb', '03': 'Mär', '04': 'Apr',`
## `src/components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx`:118
- **Text:** 'Keine Daten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` return <div className={styles.noData}>Keine Daten</div>;`
## `src/components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx`:162
- **Text:** 'Keine Daten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` return <div className={styles.noData}>Keine Daten</div>;`
## `src/components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx`:193
- **Text:** 'Keine Daten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` return <div className={styles.noData}>Keine Daten</div>;`
## `src/components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx`:239
- **Text:** 'Keine Daten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` return <div className={styles.noData}>Keine Daten</div>;`
## `src/components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx`:285
- **Text:** 'Keine Daten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` return <div className={styles.noData}>Keine Daten</div>;`
## `src/components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx`:345
- **Text:** 'Keine Daten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` return <div className={styles.noData}>Keine Daten</div>;`
## `src/components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx`:457
- **Text:** 'Unbekannter Sektionstyp'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` return <div className={styles.noData}>Unbekannter Sektionstyp</div>;`
## `src/components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx`:522
- **Text:** 'Januar'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 1, label: 'Januar' }, { value: 2, label: 'Februar' },`
## `src/components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx`:522
- **Text:** 'Februar'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 1, label: 'Januar' }, { value: 2, label: 'Februar' },`
## `src/components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx`:523
- **Text:** 'März'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 3, label: 'März' }, { value: 4, label: 'April' },`
## `src/components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx`:523
- **Text:** 'April'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 3, label: 'März' }, { value: 4, label: 'April' },`
## `src/components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx`:524
- **Text:** 'Mai'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 5, label: 'Mai' }, { value: 6, label: 'Juni' },`
## `src/components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx`:524
- **Text:** 'Juni'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 5, label: 'Mai' }, { value: 6, label: 'Juni' },`
## `src/components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx`:525
- **Text:** 'Juli'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 7, label: 'Juli' }, { value: 8, label: 'August' },`
## `src/components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx`:525
- **Text:** 'August'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 7, label: 'Juli' }, { value: 8, label: 'August' },`
## `src/components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx`:526
- **Text:** 'September'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 9, label: 'September' }, { value: 10, label: 'Oktober' },`
## `src/components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx`:526
- **Text:** 'Oktober'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 9, label: 'September' }, { value: 10, label: 'Oktober' },`
## `src/components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx`:527
- **Text:** 'November'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 11, label: 'November' }, { value: 12, label: 'Dezember' }`
## `src/components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx`:527
- **Text:** 'Dezember'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 11, label: 'November' }, { value: 12, label: 'Dezember' }`
## `src/components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx`:652
- **Text:** 'Keine Daten verfügbar'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` noDataMessage = 'Keine Daten verfügbar',`
## `src/components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx`:718
- **Text:** 'Lade Daten...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.loadingContainer}>Lade Daten...</div>`
## `src/components/FormGenerator/FormGeneratorTable/FormGeneratorTable.tsx`:363
- **Text:** '⚠️ FormGeneratorTable: No columns provided! '
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` '⚠️ FormGeneratorTable: No columns provided! ' +`
## `src/components/FormGenerator/FormGeneratorTable/FormGeneratorTable.tsx`:364
- **Text:** 'Columns should come from Pydantic attribute definitions via /attributes/{entityType} endpoint. '
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` 'Columns should come from Pydantic attribute definitions via /attributes/{entityType} endpoint. ' +`
## `src/components/FormGenerator/FormGeneratorTable/FormGeneratorTable.tsx`:365
- **Text:** 'Please ensure the calling component fetches and passes columns from the backend.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` 'Please ensure the calling component fetches and passes columns from the backend.'`
## `src/components/FormGenerator/FormGeneratorTable/FormGeneratorTable.tsx`:1328
- **Text:** "') + '"
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` str = '"' + str.replace(/"/g, '""') + '"';`
## `src/components/FormGenerator/FormGeneratorTable/FormGeneratorTable.tsx`:1686
- **Text:** 's a number, check if it'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` // If it's a number, check if it's in seconds (typical Unix timestamp range)`
## `src/components/FormGenerator/FormGeneratorTable/FormGeneratorTable.tsx`:1694
- **Text:** 's an ISO date string or date string (contains '
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` // Check if it's an ISO date string or date string (contains 'T', '-', or ':')`
## `src/components/FormGenerator/FormGeneratorTable/FormGeneratorTable.tsx`:1694
- **Text:** ', or '
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` // Check if it's an ISO date string or date string (contains 'T', '-', or ':')`
## `src/components/FormGenerator/FormGeneratorTable/FormGeneratorTable.tsx`:2088
- **Text:** '2px solid var(--border-color, #e2e8f0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` borderBottom: '2px solid var(--border-color, #e2e8f0)'`
## `src/components/Navigation/MandateNavigation.tsx`:62
- **Text:** 'Meine Sicht'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` * Used for grouping static items under "Meine Sicht" and "Administration".`
## `src/components/Navigation/UserSection.tsx`:142
- **Text:** 'Rechtliche Hinweise'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h2>Rechtliche Hinweise</h2>`
## `src/components/Navigation/UserSection.tsx`:152
- **Text:** 'Datenverarbeitung und KI-Nutzung'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h3>Datenverarbeitung und KI-Nutzung</h3>`
## `src/components/Navigation/UserSection.tsx`:154
- **Text:** '1. Einwilligung zur Datenverarbeitung'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h4>1. Einwilligung zur Datenverarbeitung</h4>`
## `src/components/Navigation/UserSection.tsx`:155
- **Text:** 'Mit der Nutzung dieser Anwendung stimmen Sie zu und erklären sich mit den folgenden Bedingungen zur Verarbeitung Ihrer Daten durch künstliche Intelligenz einverstanden:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p>Mit der Nutzung dieser Anwendung stimmen Sie zu und erklären sich mit den folgenden Bedingungen zur Verarbeitung Ihrer Daten durch künstliche Intelligenz einverstanden:</p>`
## `src/components/Navigation/UserSection.tsx`:157
- **Text:** 'Sie autorisieren die Erfassung, Verarbeitung, Übertragung und Speicherung aller Daten, die Sie bei der Nutzung unserer Dienste bereitstellen.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <li>Sie autorisieren die Erfassung, Verarbeitung, Übertragung und Speicherung aller Daten, die Sie bei der Nutzung unserer Dienste bereitstellen.</li>`
## `src/components/Navigation/UserSection.tsx`:158
- **Text:** 'Nutzerdaten können an Drittanbieter von künstlicher Intelligenz übertragen werden (z.B. OpenAI).'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <li>Nutzerdaten können an Drittanbieter von künstlicher Intelligenz übertragen werden (z.B. OpenAI).</li>`
## `src/components/Navigation/UserSection.tsx`:159
- **Text:** 'Diese Einwilligung erstreckt sich auf alle Inhalte, einschließlich Text, Bilder, Dokumente und Gesprächsverläufe.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <li>Diese Einwilligung erstreckt sich auf alle Inhalte, einschließlich Text, Bilder, Dokumente und Gesprächsverläufe.</li>`
## `src/components/Navigation/UserSection.tsx`:162
- **Text:** '2. Anerkennung der KI-Verarbeitungsrisiken'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h4>2. Anerkennung der KI-Verarbeitungsrisiken</h4>`
## `src/components/Navigation/UserSection.tsx`:164
- **Text:** 'KI-Systeme können unerwartete oder ungenaue Ausgaben erzeugen.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <li>KI-Systeme können unerwartete oder ungenaue Ausgaben erzeugen.</li>`
## `src/components/Navigation/UserSection.tsx`:165
- **Text:** 'KI-Dienste können Daten gemäß ihren eigenen Nutzungsbedingungen speichern oder daraus lernen.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <li>KI-Dienste können Daten gemäß ihren eigenen Nutzungsbedingungen speichern oder daraus lernen.</li>`
## `src/components/Navigation/UserSection.tsx`:166
- **Text:** 'Trotz Sicherheitsmaßnahmen können Daten anfällig für unbefugten Zugriff sein.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <li>Trotz Sicherheitsmaßnahmen können Daten anfällig für unbefugten Zugriff sein.</li>`
## `src/components/Navigation/UserSection.tsx`:169
- **Text:** '3. Haftungsausschluss'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h4>3. Haftungsausschluss</h4>`
## `src/components/Navigation/UserSection.tsx`:170
- **Text:** 'Im größtmöglichen Umfang verzichten Sie auf Ansprüche, die sich aus der KI-Verarbeitung ergeben, einschließlich Datenverletzungen und unbeabsichtigter Offenlegung.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p>Im größtmöglichen Umfang verzichten Sie auf Ansprüche, die sich aus der KI-Verarbeitung ergeben, einschließlich Datenverletzungen und unbeabsichtigter Offenlegung.</p>`
## `src/components/Navigation/UserSection.tsx`:174
- **Text:** 'noopener noreferrer'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` <a href="/poweron-privacy.html" target="_blank" rel="noopener noreferrer">`
## `src/components/Navigation/UserSection.tsx`:177
- **Text:** 'noopener noreferrer'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` <a href="/poweron-terms.html" target="_blank" rel="noopener noreferrer">`
## `src/components/Navigation/UserSection.tsx`:180
- **Text:** 'noopener noreferrer'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` <a href="/poweron-home.html" target="_blank" rel="noopener noreferrer">`
## `src/components/NotificationBell/NotificationBell.tsx`:29
- **Text:** 'Gerade eben'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` if (diff < 60) return 'Gerade eben';`
## `src/components/NotificationBell/NotificationBell.tsx`:183
- **Text:** 'Keine Benachrichtigungen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p>Keine Benachrichtigungen</p>`
## `src/components/NotificationBell/NotificationBell.tsx`:253
- **Text:** 'Schliessen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` aria-label="Schliessen"`
## `src/components/OnboardingAssistant.tsx`:21
- **Text:** 'Tipp: Ein Mandant ist Ihr Arbeitsbereich. Sie koennen spaeter weitere Mandanten fuer Teams oder Projekte erstellen.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` mandate: 'Tipp: Ein Mandant ist Ihr Arbeitsbereich. Sie koennen spaeter weitere Mandanten fuer Teams oder Projekte erstellen.',`
## `src/components/OnboardingAssistant.tsx`:22
- **Text:** 'Tipp: Im Store finden Sie AI-Workspace, CommCoach und weitere Features. Aktivieren Sie mindestens eines, um loszulegen.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` feature: 'Tipp: Im Store finden Sie AI-Workspace, CommCoach und weitere Features. Aktivieren Sie mindestens eines, um loszulegen.',`
## `src/components/OnboardingAssistant.tsx`:23
- **Text:** 'Tipp: Verbinden Sie Ihre Datenquellen (z.B. SharePoint, Google Drive), damit der AI-Assistent auf Ihre Dokumente zugreifen kann.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` connection: 'Tipp: Verbinden Sie Ihre Datenquellen (z.B. SharePoint, Google Drive), damit der AI-Assistent auf Ihre Dokumente zugreifen kann.',`
## `src/components/OnboardingAssistant.tsx`:24
- **Text:** 'Tipp: Starten Sie einen Chat mit dem AI-Assistenten. Er kann Ihre verbundenen Daten analysieren und Fragen beantworten.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` chat: 'Tipp: Starten Sie einen Chat mit dem AI-Assistenten. Er kann Ihre verbundenen Daten analysieren und Fragen beantworten.',`
## `src/components/OnboardingAssistant.tsx`:97
- **Text:** 'Mandant einrichten'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Mandant einrichten',`
## `src/components/OnboardingAssistant.tsx`:99
- **Text:** 'Dein Mandant ist eingerichtet.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` ? 'Dein Mandant ist eingerichtet.'`
## `src/components/OnboardingAssistant.tsx`:101
- **Text:** 'Du bist Mitglied eines Mandanten.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` ? 'Du bist Mitglied eines Mandanten.'`
## `src/components/OnboardingAssistant.tsx`:102
- **Text:** 'Erstelle deinen Arbeitsbereich.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` : 'Erstelle deinen Arbeitsbereich.',`
## `src/components/OnboardingAssistant.tsx`:109
- **Text:** 'Erstes Feature aktivieren'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Erstes Feature aktivieren',`
## `src/components/OnboardingAssistant.tsx`:111
- **Text:** 'Du hast aktive Features.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` ? 'Du hast aktive Features.'`
## `src/components/OnboardingAssistant.tsx`:112
- **Text:** 'Aktiviere dein erstes Feature im Store.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` : 'Aktiviere dein erstes Feature im Store.',`
## `src/components/OnboardingAssistant.tsx`:126
- **Text:** 'Erste Datenquelle einbinden'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Erste Datenquelle einbinden',`
## `src/components/OnboardingAssistant.tsx`:128
- **Text:** 'Du hast Verbindungen eingerichtet.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` ? 'Du hast Verbindungen eingerichtet.'`
## `src/components/OnboardingAssistant.tsx`:129
- **Text:** 'Verbinde deine erste Datenquelle.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` : 'Verbinde deine erste Datenquelle.',`
## `src/components/OnboardingAssistant.tsx`:147
- **Text:** 'Ersten AI-Chat starten'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Ersten AI-Chat starten',`
## `src/components/OnboardingAssistant.tsx`:149
- **Text:** 'Du hast bereits Chats gestartet.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` ? 'Du hast bereits Chats gestartet.'`
## `src/components/OnboardingAssistant.tsx`:150
- **Text:** 'Starte deinen ersten Chat mit dem AI-Assistenten.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` : 'Starte deinen ersten Chat mit dem AI-Assistenten.',`
## `src/components/OnboardingAssistant.tsx`:208
- **Text:** '1px solid var(--border-color, #e5e7eb)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: '1px solid var(--border-color, #e5e7eb)',`
## `src/components/OnboardingAssistant.tsx`:227
- **Text:** 'background 0.3s'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` transition: 'background 0.3s',`
## `src/components/OnboardingAssistant.tsx`:242
- **Text:** '1px solid var(--accent, #4f46e5)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: step.completed ? 'none' : isNextStep ? '1px solid var(--accent, #4f46e5)' : '1px solid var(--border-color, #e5e7eb)',`
## `src/components/OnboardingAssistant.tsx`:242
- **Text:** '1px solid var(--border-color, #e5e7eb)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: step.completed ? 'none' : isNextStep ? '1px solid var(--accent, #4f46e5)' : '1px solid var(--border-color, #e5e7eb)',`
## `src/components/OnboardingAssistant.tsx`:268
- **Text:** '3px solid var(--accent, #4f46e5)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` borderLeft: '3px solid var(--accent, #4f46e5)',`
## `src/components/OnboardingAssistant.tsx`:281
- **Text:** '1px solid var(--border-color, #e5e7eb)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` borderTop: '1px solid var(--border-color, #e5e7eb)',`
## `src/components/OnboardingAssistant.tsx`:295
- **Text:** '1px solid var(--border-color, #d1d5db)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: '1px solid var(--border-color, #d1d5db)',`
## `src/components/OnboardingWizard.tsx`:24
- **Text:** 'Du hast bereits einen Mandanten mit Admin-Zugang.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError('Du hast bereits einen Mandanten mit Admin-Zugang.');`
## `src/components/OnboardingWizard.tsx`:30
- **Text:** 'Fehler bei der Einrichtung'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError(err?.response?.data?.detail || 'Fehler bei der Einrichtung');`
## `src/components/OnboardingWizard.tsx`:44
- **Text:** '0 8px 32px rgba(0,0,0,0.2)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` maxWidth: '480px', width: '90%', boxShadow: '0 8px 32px rgba(0,0,0,0.2)',`
## `src/components/OnboardingWizard.tsx`:54
- **Text:** '2px solid var(--accent, #4f46e5)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: planKey === 'TRIAL_7D' ? '2px solid var(--accent, #4f46e5)' : '2px solid var(--border, #e5e7eb)',`
## `src/components/OnboardingWizard.tsx`:54
- **Text:** '2px solid var(--border, #e5e7eb)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: planKey === 'TRIAL_7D' ? '2px solid var(--accent, #4f46e5)' : '2px solid var(--border, #e5e7eb)',`
## `src/components/OnboardingWizard.tsx`:60
- **Text:** 'Kostenlos testen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <strong>Kostenlos testen</strong>`
## `src/components/OnboardingWizard.tsx`:69
- **Text:** '2px solid var(--accent, #4f46e5)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: planKey === 'STANDARD_MONTHLY' ? '2px solid var(--accent, #4f46e5)' : '2px solid var(--border, #e5e7eb)',`
## `src/components/OnboardingWizard.tsx`:69
- **Text:** '2px solid var(--border, #e5e7eb)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: planKey === 'STANDARD_MONTHLY' ? '2px solid var(--accent, #4f46e5)' : '2px solid var(--border, #e5e7eb)',`
## `src/components/OnboardingWizard.tsx`:75
- **Text:** 'Standard (Monatlich)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <strong>Standard (Monatlich)</strong>`
## `src/components/OnboardingWizard.tsx`:90
- **Text:** 'z. B. Firmenname oder Projektname'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="z. B. Firmenname oder Projektname"`
## `src/components/OnboardingWizard.tsx`:114
- **Text:** 'Wird eingerichtet...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {loading ? 'Wird eingerichtet...' : 'Mandant erstellen'}`
## `src/components/OnboardingWizard.tsx`:114
- **Text:** 'Mandant erstellen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {loading ? 'Wird eingerichtet...' : 'Mandant erstellen'}`
## `src/components/ProviderSelector/ProviderSelector.tsx`:80
- **Text:** 'Anthropic (Claude)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` anthropic: 'Anthropic (Claude)',`
## `src/components/ProviderSelector/ProviderSelector.tsx`:81
- **Text:** 'OpenAI (GPT)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` openai: 'OpenAI (GPT)',`
## `src/components/ProviderSelector/ProviderSelector.tsx`:82
- **Text:** 'Mistral (Le Chat)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` mistral: 'Mistral (Le Chat)',`
## `src/components/ProviderSelector/ProviderSelector.tsx`:84
- **Text:** 'Tavily (Web Search)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` tavily: 'Tavily (Web Search)',`
## `src/components/ProviderSelector/ProviderSelector.tsx`:85
- **Text:** 'Private LLM'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` privatellm: 'Private LLM',`
## `src/components/ProviderSelector/ProviderSelector.tsx`:144
- **Text:** '-- Auto --'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="">-- Auto --</option>`
## `src/components/ProviderSelector/ProviderSelector.tsx`:264
- **Text:** 'Kein Provider ausgewählt'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` if (noneSelected) return 'Kein Provider ausgewählt';`
## `src/components/ProviderSelector/ProviderSelector.tsx`:265
- **Text:** 'Alle Provider aktiv (dynamisch)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` if (allSelected) return 'Alle Provider aktiv (dynamisch)';`
## `src/components/ProviderSelector/ProviderSelector.tsx`:282
- **Text:** 'Provider auswählen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Provider auswählen"`
## `src/components/ProviderSelector/ProviderSelector.tsx`:347
- **Text:** 'Alle Provider'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` return <span className={styles.allProviders}>Alle Provider</span>;`
## `src/components/RbacExportImport/RbacExportImport.tsx`:47
- **Text:** 'Zusammenführen'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Zusammenführen',`
## `src/components/RbacExportImport/RbacExportImport.tsx`:48
- **Text:** 'Bestehende Regeln aktualisieren, neue hinzufügen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` description: 'Bestehende Regeln aktualisieren, neue hinzufügen',`
## `src/components/RbacExportImport/RbacExportImport.tsx`:53
- **Text:** 'Nur hinzufügen'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Nur hinzufügen',`
## `src/components/RbacExportImport/RbacExportImport.tsx`:54
- **Text:** 'Nur neue Regeln hinzufügen, bestehende nicht ändern'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` description: 'Nur neue Regeln hinzufügen, bestehende nicht ändern',`
## `src/components/RbacExportImport/RbacExportImport.tsx`:59
- **Text:** 'Ersetzen'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Ersetzen',`
## `src/components/RbacExportImport/RbacExportImport.tsx`:60
- **Text:** 'Alle bestehenden Regeln löschen und ersetzen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` description: 'Alle bestehenden Regeln löschen und ersetzen',`
## `src/components/RbacExportImport/RbacExportImport.tsx`:91
- **Text:** 'Rollen ({data.roles.length})'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h5>Rollen ({data.roles.length})</h5>`
## `src/components/RbacExportImport/RbacExportImport.tsx`:100
- **Text:** '... und {data.roles.length - 5} weitere'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <li className={styles.moreItems}>... und {data.roles.length - 5} weitere</li>`
## `src/components/RbacExportImport/RbacExportImport.tsx`:105
- **Text:** 'Regeln ({data.accessRules.length})'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h5>Regeln ({data.accessRules.length})</h5>`
## `src/components/RbacExportImport/RbacExportImport.tsx`:114
- **Text:** '... und {data.accessRules.length - 5} weitere'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <li className={styles.moreItems}>... und {data.accessRules.length - 5} weitere</li>`
## `src/components/RbacExportImport/RbacExportImport.tsx`:144
- **Text:** 'Import erfolgreich'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {isSuccess ? 'Import erfolgreich' : 'Import fehlgeschlagen'}`
## `src/components/RbacExportImport/RbacExportImport.tsx`:144
- **Text:** 'Import fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {isSuccess ? 'Import erfolgreich' : 'Import fehlgeschlagen'}`
## `src/components/RbacExportImport/RbacExportImport.tsx`:151
- **Text:** 'Rollen erstellt:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <li><strong>Rollen erstellt:</strong> {result.rolesCreated}</li>`
## `src/components/RbacExportImport/RbacExportImport.tsx`:152
- **Text:** 'Rollen aktualisiert:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <li><strong>Rollen aktualisiert:</strong> {result.rolesUpdated}</li>`
## `src/components/RbacExportImport/RbacExportImport.tsx`:153
- **Text:** 'Regeln erstellt:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <li><strong>Regeln erstellt:</strong> {result.rulesCreated}</li>`
## `src/components/RbacExportImport/RbacExportImport.tsx`:154
- **Text:** 'Regeln aktualisiert:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <li><strong>Regeln aktualisiert:</strong> {result.rulesUpdated}</li>`
## `src/components/RbacExportImport/RbacExportImport.tsx`:232
- **Text:** 'Fehler beim Parsen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setParseError(result.error || 'Fehler beim Parsen');`
## `src/components/RbacExportImport/RbacExportImport.tsx`:288
- **Text:** ' der globalen Templates'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {isGlobal ? ' der globalen Templates' : ` des Mandanten "${mandateName || mandateId}"`}`
## `src/components/RbacExportImport/RbacExportImport.tsx`:288
- **Text:** '${mandateName || mandateId}'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {isGlobal ? ' der globalen Templates' : ` des Mandanten "${mandateName || mandateId}"`}`
## `src/components/RbacExportImport/RbacExportImport.tsx`:335
- **Text:** 'JSON-Datei auswählen oder hier ablegen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>JSON-Datei auswählen oder hier ablegen</span>`
## `src/components/RbacExportImport/RbacExportImport.tsx`:343
- **Text:** 'Datei entfernen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Datei entfernen"`
## `src/components/UiComponents/AddressAutocomplete/AddressAutocomplete.tsx`:91
- **Text:** 'no results'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setShowSuggestions(results.length > 0 || true); // Show dropdown even if empty to show "no results" or error`
## `src/components/UiComponents/AddressAutocomplete/AddressAutocomplete.tsx`:96
- **Text:** 'Fehler beim Laden der Adressvorschläge'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` const errorMessage = err?.response?.data?.detail || err?.message || 'Fehler beim Laden der Adressvorschläge';`
## `src/components/UiComponents/AddressAutocomplete/AddressAutocomplete.tsx`:277
- **Text:** 'Suche Adressen...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span className={styles.loadingText}>Suche Adressen...</span>`
## `src/components/UiComponents/AddressAutocomplete/AddressAutocomplete.tsx`:287
- **Text:** 'Keine Adressen gefunden'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span className={styles.noResultsText}>Keine Adressen gefunden</span>`
## `src/components/UiComponents/AutoScroll/AutoScroll.tsx`:22
- **Text:** 'at bottom'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` * Threshold in pixels from bottom to consider user "at bottom"`
## `src/components/UiComponents/AutoScroll/AutoScroll.tsx`:151
- **Text:** 'Scroll to bottom'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` aria-label="Scroll to bottom"`
## `src/components/UiComponents/BauvorschriftenSection/BauvorschriftenSection.tsx`:42
- **Text:** 'Ausnützungsziffer:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span className={styles.label}>Ausnützungsziffer:</span>`
## `src/components/UiComponents/BauvorschriftenSection/BauvorschriftenSection.tsx`:54
- **Text:** 'Gebäudelänge max:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span className={styles.label}>Gebäudelänge max:</span>`
## `src/components/UiComponents/BauvorschriftenSection/BauvorschriftenSection.tsx`:66
- **Text:** 'Mehrlängenzuschlag:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span className={styles.label}>Mehrlängenzuschlag:</span>`
## `src/components/UiComponents/BauvorschriftenSection/BauvorschriftenSection.tsx`:72
- **Text:** 'Höchstmass max:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span className={styles.label}>Höchstmass max:</span>`
## `src/components/UiComponents/BauvorschriftenSection/BauvorschriftenSection.tsx`:78
- **Text:** 'Fassadenhöhe:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span className={styles.label}>Fassadenhöhe:</span>`
## `src/components/UiComponents/BauvorschriftenSection/BauvorschriftenSection.tsx`:89
- **Text:** 'noopener noreferrer'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` rel="noopener noreferrer"`
## `src/components/UiComponents/Button/CreateButton/CreateButton.tsx`:11
- **Text:** 'Create New Item'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` popupTitle = 'Create New Item',`
## `src/components/UiComponents/Button/CreateButton/CreateButton.tsx`:128
- **Text:** 'Creation failed'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` onError(result?.error || 'Creation failed');`
## `src/components/UiComponents/Button/CreateButton/CreateButton.tsx`:134
- **Text:** 'Creation failed'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` onError(error.message || 'Creation failed');`
## `src/components/UiComponents/Button/UploadButton/UploadButton.tsx`:74
- **Text:** 'Upload File'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {children || (isUploading ? 'Uploading...' : 'Upload File')}`
## `src/components/UiComponents/ConnectedFilesList/ConnectedFilesList.tsx`:68
- **Text:** 'No files connected to this workflow'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` emptyMessage = 'No files connected to this workflow'`
## `src/components/UiComponents/ConnectedFilesList/ConnectedFilesList.tsx`:184
- **Text:** 'Connected Files'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h3 className={styles.title}>Connected Files</h3>`
## `src/components/UiComponents/ConnectedFilesList/ConnectedFilesList.tsx`:231
- **Text:** 'Click to detach from next message'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title={onAttach ? (isPendingFile ? 'Click to detach from next message' : 'Click to attach for next message') : undefined}`
## `src/components/UiComponents/ConnectedFilesList/ConnectedFilesList.tsx`:231
- **Text:** 'Click to attach for next message'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title={onAttach ? (isPendingFile ? 'Click to detach from next message' : 'Click to attach for next message') : undefined}`
## `src/components/UiComponents/ConnectedFilesList/ConnectedFilesList.tsx`:238
- **Text:** '(click to detach)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {isPendingFile ? '(click to detach)' : '(click to attach)'}`
## `src/components/UiComponents/ConnectedFilesList/ConnectedFilesList.tsx`:238
- **Text:** '(click to attach)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {isPendingFile ? '(click to detach)' : '(click to attach)'}`
## `src/components/UiComponents/ConnectedFilesList/ConnectedFilesList.tsx`:248
- **Text:** 'AI Created'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {file.source === 'user_uploaded' ? 'Uploaded' : 'AI Created'}`
## `src/components/UiComponents/DropdownSelect/DropdownSelect.tsx`:40
- **Text:** 'Select an item'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder = 'Select an item',`
## `src/components/UiComponents/DropdownSelect/DropdownSelect.tsx`:41
- **Text:** 'No items available'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` emptyMessage = 'No items available',`
## `src/components/UiComponents/InfoMessageOverlay/MessageOverlay.tsx`:95
- **Text:** 'Close warning'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` return 'Close warning';`
## `src/components/UiComponents/InfoMessageOverlay/MessageOverlay.tsx`:97
- **Text:** 'Close error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` return 'Close error';`
## `src/components/UiComponents/InfoMessageOverlay/MessageOverlay.tsx`:99
- **Text:** 'Close success message'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` return 'Close success message';`
## `src/components/UiComponents/InfoMessageOverlay/MessageOverlay.tsx`:102
- **Text:** 'Close message'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` return 'Close message';`
## `src/components/UiComponents/LocationInput/LocationInput.tsx`:23
- **Text:** 'Kanton, Gemeinde, Adresse oder Parzelle'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder = 'Kanton, Gemeinde, Adresse oder Parzelle',`
## `src/components/UiComponents/Log/Log.tsx`:25
- **Text:** 'No log information available'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` emptyMessage = 'No log information available',`
## `src/components/UiComponents/MapView/MapViewLeaflet.tsx`:16
- **Text:** '© OpenStreetMap contributors'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` attribution: '© OpenStreetMap contributors',`
## `src/components/UiComponents/MapView/MapViewLeaflet.tsx`:21
- **Text:** '© OpenStreetMap © CARTO'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` { attribution: '© OpenStreetMap © CARTO', maxZoom: 19 }`
## `src/components/UiComponents/MapView/MapViewLeaflet.tsx`:50
- **Text:** 'Klicken Sie auf die Karte, um einen Standort auszuwählen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` emptyMessage = 'Klicken Sie auf die Karte, um einen Standort auszuwählen',`
## `src/components/UiComponents/MapView/MapViewLeaflet.tsx`:195
- **Text:** '<div><strong>Ausgewählte Fläche</strong><br/><em>Zum Entfernen Parzelle im Panel nutzen</em></div>'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` polygon.bindPopup('<div><strong>Ausgewählte Fläche</strong><br/><em>Zum Entfernen Parzelle im Panel nutzen</em></div>');`
## `src/components/UiComponents/MapView/MapViewLeaflet.tsx`:195
- **Text:** 'Ausgewählte Fläche'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` polygon.bindPopup('<div><strong>Ausgewählte Fläche</strong><br/><em>Zum Entfernen Parzelle im Panel nutzen</em></div>');`
## `src/components/UiComponents/MapView/MapViewLeaflet.tsx`:195
- **Text:** 'Zum Entfernen Parzelle im Panel nutzen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` polygon.bindPopup('<div><strong>Ausgewählte Fläche</strong><br/><em>Zum Entfernen Parzelle im Panel nutzen</em></div>');`
## `src/components/UiComponents/MapView/MapViewLeaflet.tsx`:208
- **Text:** '<div><strong>Ausgewählte Fläche</strong><br/><em>Zum Entfernen Parzelle im Panel nutzen</em></div>'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` polygon.bindPopup('<div><strong>Ausgewählte Fläche</strong><br/><em>Zum Entfernen Parzelle im Panel nutzen</em></div>');`
## `src/components/UiComponents/MapView/MapViewLeaflet.tsx`:208
- **Text:** 'Ausgewählte Fläche'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` polygon.bindPopup('<div><strong>Ausgewählte Fläche</strong><br/><em>Zum Entfernen Parzelle im Panel nutzen</em></div>');`
## `src/components/UiComponents/MapView/MapViewLeaflet.tsx`:208
- **Text:** 'Zum Entfernen Parzelle im Panel nutzen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` polygon.bindPopup('<div><strong>Ausgewählte Fläche</strong><br/><em>Zum Entfernen Parzelle im Panel nutzen</em></div>');`
## `src/components/UiComponents/MapView/MapViewLeaflet.tsx`:224
- **Text:** 'Parzelle ${parcel.number || parcel.id}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <strong>Parzelle ${parcel.number || parcel.id}</strong><br/>`
## `src/components/UiComponents/MapView/MapViewLeaflet.tsx`:226
- **Text:** 'Ausgewählt'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <em>Ausgewählt</em>`
## `src/components/UiComponents/Messages/ChatMessages/ChatMessage.tsx`:82
- **Text:** 'Aktion fehlgeschlagen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Aktion fehlgeschlagen</span>`
## `src/components/UiComponents/Messages/ChatMessages/ChatMessage.tsx`:202
- **Text:** 'Löschen bestätigen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Löschen bestätigen"`
## `src/components/UiComponents/Messages/ChatMessages/ChatMessage.tsx`:210
- **Text:** 'Abbrechen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Abbrechen"`
## `src/components/UiComponents/Messages/ChatMessages/ChatMessage.tsx`:220
- **Text:** 'Nachricht löschen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Nachricht löschen"`
## `src/components/UiComponents/Messages/Messages.tsx`:18
- **Text:** 'No messages yet'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` emptyMessage = 'No messages yet',`
## `src/components/UiComponents/OerebSection/OerebSection.tsx`:71
- **Text:** 'In Kraft'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` ? 'In Kraft'`
## `src/components/UiComponents/OerebSection/OerebSection.tsx`:95
- **Text:** 'noopener noreferrer'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` rel="noopener noreferrer"`
## `src/components/UiComponents/OerebSection/OerebSection.tsx`:127
- **Text:** 'ÖREB-Auszug.pdf'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` fileName="ÖREB-Auszug.pdf"`
## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:148
- **Text:** 'Fehler beim Laden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` [parcelId]: e?.response?.data?.detail || e?.message || 'Fehler beim Laden'`
## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:175
- **Text:** 'Fehler bei der Extraktion'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` [parcelId]: e?.response?.data?.detail || e?.message || 'Fehler bei der Extraktion'`
## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:219
- **Text:** 'Parzellen-Informationen ({parcels.length})'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h2 className={styles.title}>Parzellen-Informationen ({parcels.length})</h2>`
## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:228
- **Text:** 'Gesamtfläche'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h3 className={styles.aggregatedTitle}>Gesamtfläche</h3>`
## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:251
- **Text:** '— {bz.area_m2.toFixed(2)} m²'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span className={styles.bauzoneArea}> — {bz.area_m2.toFixed(2)} m²</span>`
## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:267
- **Text:** 'Parzelle entfernen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Parzelle entfernen"`
## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:318
- **Text:** 'Fläche:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span className={styles.label}>Fläche:</span>`
## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:331
- **Text:** 'Grundstückstyp:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span className={styles.label}>Grundstückstyp:</span>`
## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:345
- **Text:** 'Dokumente werden geladen...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.bzoHint}>Dokumente werden geladen...</p>`
## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:363
- **Text:** 'Dokument öffnen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Dokument öffnen"`
## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:381
- **Text:** 'Inhalt mit LangGraph extrahieren (inkl. Machbarkeitsstudie)'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Inhalt mit LangGraph extrahieren (inkl. Machbarkeitsstudie)"`
## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:405
- **Text:** 'Fakten aus BZO'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span className={styles.label}>Fakten aus BZO</span>`
## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:422
- **Text:** 'Vorschläge'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span className={styles.label}>Vorschläge</span>`
## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:441
- **Text:** 'Weiterführende Bestimmungen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span className={styles.label}>Weiterführende Bestimmungen</span>`
## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:492
- **Text:** 'Details anzeigen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <summary className={styles.zoneSummary}>Details anzeigen</summary>`
## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:507
- **Text:** 'noopener noreferrer'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` rel="noopener noreferrer"`
## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:533
- **Text:** 'Parzelle entfernen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Parzelle entfernen"`
## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:584
- **Text:** 'Fläche:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span className={styles.label}>Fläche:</span>`
## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:597
- **Text:** 'Grundstückstyp:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span className={styles.label}>Grundstückstyp:</span>`
## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:611
- **Text:** 'Dokumente werden geladen...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.bzoHint}>Dokumente werden geladen...</p>`
## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:629
- **Text:** 'Dokument öffnen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Dokument öffnen"`
## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:647
- **Text:** 'Inhalt mit LangGraph extrahieren (inkl. Machbarkeitsstudie)'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Inhalt mit LangGraph extrahieren (inkl. Machbarkeitsstudie)"`
## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:671
- **Text:** 'Fakten aus BZO'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span className={styles.label}>Fakten aus BZO</span>`
## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:688
- **Text:** 'Vorschläge'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span className={styles.label}>Vorschläge</span>`
## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:707
- **Text:** 'Weiterführende Bestimmungen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span className={styles.label}>Weiterführende Bestimmungen</span>`
## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:756
- **Text:** 'Details anzeigen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <summary className={styles.zoneSummary}>Details anzeigen</summary>`
## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:771
- **Text:** 'noopener noreferrer'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` rel="noopener noreferrer"`
## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:994
- **Text:** 'Zone: {rule.zone_raw}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` {rule.zone_raw && <span>Zone: {rule.zone_raw}</span>}`
## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:995
- **Text:** 'Seite {rule.page}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` {rule.page && <span>Seite {rule.page}</span>}`
## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:996
- **Text:** 'Bereich: {rule.rule_scope}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` {rule.rule_scope && <span>Bereich: {rule.rule_scope}</span>}`
## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:1027
- **Text:** 'Zone: {article.zone_raw}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` {article.zone_raw && <span>Zone: {article.zone_raw}</span>}`
## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:1028
- **Text:** 'Seiten {article.page_start}-{article.page_end}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Seiten {article.page_start}-{article.page_end}</span>`
## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:1058
- **Text:** 'Fehler ({data.errors.length})'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h5 className={styles.bzoErrorTitle}>Fehler ({data.errors.length})</h5>`
## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:1068
- **Text:** 'Warnungen ({data.warnings.length})'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h5 className={styles.bzoWarningTitle}>Warnungen ({data.warnings.length})</h5>`
## `src/components/UiComponents/Popup/Popup.tsx`:108
- **Text:** 'Close'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` aria-label="Close"`
## `src/components/UiComponents/Toast/Toast.tsx`:53
- **Text:** 'Schließen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` aria-label="Schließen"`
## `src/components/UiComponents/VoiceLanguageSelect/VoiceLanguageSelect.tsx`:23
- **Text:** 'Deutsch'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { code: 'de-DE', label: 'Deutsch', shortCode: 'de', flag: '🇩🇪' },`
## `src/components/UiComponents/VoiceLanguageSelect/VoiceLanguageSelect.tsx`:24
- **Text:** 'Deutsch (Schweiz)'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { code: 'de-CH', label: 'Deutsch (Schweiz)', shortCode: 'de', flag: '🇨🇭' },`
## `src/components/UiComponents/VoiceLanguageSelect/VoiceLanguageSelect.tsx`:25
- **Text:** 'English (US)'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { code: 'en-US', label: 'English (US)', shortCode: 'en', flag: '🇺🇸' },`
## `src/components/UiComponents/VoiceLanguageSelect/VoiceLanguageSelect.tsx`:26
- **Text:** 'English (UK)'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { code: 'en-GB', label: 'English (UK)', shortCode: 'en', flag: '🇬🇧' },`
## `src/components/UiComponents/VoiceLanguageSelect/VoiceLanguageSelect.tsx`:27
- **Text:** 'Français'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { code: 'fr-FR', label: 'Français', shortCode: 'fr', flag: '🇫🇷' },`
## `src/components/UiComponents/VoiceLanguageSelect/VoiceLanguageSelect.tsx`:28
- **Text:** 'Français (Suisse)'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { code: 'fr-CH', label: 'Français (Suisse)', shortCode: 'fr', flag: '🇨🇭' },`
## `src/components/UiComponents/VoiceLanguageSelect/VoiceLanguageSelect.tsx`:29
- **Text:** 'Italiano'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { code: 'it-IT', label: 'Italiano', shortCode: 'it', flag: '🇮🇹' },`
## `src/components/UiComponents/VoiceLanguageSelect/VoiceLanguageSelect.tsx`:30
- **Text:** 'Italiano (Svizzera)'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { code: 'it-CH', label: 'Italiano (Svizzera)', shortCode: 'it', flag: '🇨🇭' },`
## `src/components/UiComponents/VoiceLanguageSelect/VoiceLanguageSelect.tsx`:31
- **Text:** 'Español'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { code: 'es-ES', label: 'Español', shortCode: 'es', flag: '🇪🇸' },`
## `src/components/UiComponents/VoiceLanguageSelect/VoiceLanguageSelect.tsx`:32
- **Text:** 'Português'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { code: 'pt-BR', label: 'Português', shortCode: 'pt', flag: '🇧🇷' },`
## `src/components/UiComponents/VoiceLanguageSelect/VoiceLanguageSelect.tsx`:72
- **Text:** 'Sprache für Spracherkennung'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title = 'Sprache für Spracherkennung',`
## `src/components/UiComponents/WorkflowStatus/WorkflowStatus.tsx`:69
- **Text:** 'Workflow running'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <div className={styles.spinner} aria-label="Workflow running" />`
## `src/components/UiComponents/WorkflowStatus/WorkflowStatus.tsx`:77
- **Text:** 'Round {workflowStatus.round}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span className={styles.roundBadge}>Round {workflowStatus.round}</span>`
## `src/components/UnifiedDataBar/ChatsTab.tsx`:45
- **Text:** 'gerade eben'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` if (diffMin < 1) return 'gerade eben';`
## `src/components/UnifiedDataBar/ChatsTab.tsx`:284
- **Text:** 'Umbenennen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Umbenennen"`
## `src/components/UnifiedDataBar/ChatsTab.tsx`:293
- **Text:** 'Wiederherstellen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Wiederherstellen"`
## `src/components/UnifiedDataBar/ChatsTab.tsx`:301
- **Text:** 'Archivieren'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Archivieren"`
## `src/components/UnifiedDataBar/ChatsTab.tsx`:310
- **Text:** 'Löschen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Löschen"`
## `src/components/UnifiedDataBar/ChatsTab.tsx`:324
- **Text:** 'AI Workspace'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` workspace: 'AI Workspace',`
## `src/components/UnifiedDataBar/ChatsTab.tsx`:332
- **Text:** 'Lade Chats...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` if (loading) return <div className={styles.loading}>Lade Chats...</div>;`
## `src/components/UnifiedDataBar/ChatsTab.tsx`:340
- **Text:** 'Suchen...'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Suchen..."`
## `src/components/UnifiedDataBar/ChatsTab.tsx`:345
- **Text:** 'Neuer Chat'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <button className={styles.createBtn} onClick={() => { onCreateNew(); setTimeout(_loadChats, 500); }} title="Neuer Chat">`
## `src/components/UnifiedDataBar/ChatsTab.tsx`:437
- **Text:** 'Keine archivierten Chats.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {filter === 'archived' ? 'Keine archivierten Chats.' : 'Keine aktiven Chats.'}`
## `src/components/UnifiedDataBar/ChatsTab.tsx`:437
- **Text:** 'Keine aktiven Chats.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {filter === 'archived' ? 'Keine archivierten Chats.' : 'Keine aktiven Chats.'}`
## `src/components/UnifiedDataBar/FilesTab.tsx`:233
- **Text:** 'Lade Dateien...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` if (loading) return <div className={styles.loading}>Lade Dateien...</div>;`
## `src/components/UnifiedDataBar/FilesTab.tsx`:261
- **Text:** 'Upload files'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Upload files"`
## `src/components/UnifiedDataBar/FilesTab.tsx`:284
- **Text:** 'Dateien suchen...'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Dateien suchen..."`
## `src/components/UnifiedDataBar/FilesTab.tsx`:325
- **Text:** 'Keine Dateien gefunden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {searchQuery ? 'Keine Dateien gefunden' : 'Keine Dateien. Drag & Drop zum Hochladen.'}`
## `src/components/UnifiedDataBar/FilesTab.tsx`:325
- **Text:** 'Keine Dateien. Drag & Drop zum Hochladen.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {searchQuery ? 'Keine Dateien gefunden' : 'Keine Dateien. Drag & Drop zum Hochladen.'}`
## `src/components/UnifiedDataBar/SourcesTab.tsx`:188
- **Text:** 'Feature Instance'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` featureInstance: 'Feature Instance',`
## `src/components/UnifiedDataBar/SourcesTab.tsx`:340
- **Text:** 'spin 0.6s linear infinite'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` animation: 'spin 0.6s linear infinite',`
## `src/components/UnifiedDataBar/SourcesTab.tsx`:853
- **Text:** 'Neutralize: ON (click to deactivate)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title={ds.neutralize ? 'Neutralize: ON (click to deactivate)' : 'Neutralize: OFF (click to activate)'}`
## `src/components/UnifiedDataBar/SourcesTab.tsx`:853
- **Text:** 'Neutralize: OFF (click to activate)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title={ds.neutralize ? 'Neutralize: ON (click to deactivate)' : 'Neutralize: OFF (click to activate)'}`
## `src/components/UnifiedDataBar/SourcesTab.tsx`:860
- **Text:** 'Entfernen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Entfernen"`
## `src/components/UnifiedDataBar/SourcesTab.tsx`:956
- **Text:** 'Remove all tables for this record'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Remove all tables for this record"`
## `src/components/UnifiedDataBar/SourcesTab.tsx`:986
- **Text:** 'Neutralize: ON'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title={fds.neutralize ? 'Neutralize: ON' : 'Neutralize: OFF'}`
## `src/components/UnifiedDataBar/SourcesTab.tsx`:986
- **Text:** 'Neutralize: OFF'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title={fds.neutralize ? 'Neutralize: ON' : 'Neutralize: OFF'}`
## `src/components/UnifiedDataBar/SourcesTab.tsx`:993
- **Text:** 'Remove'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Remove"`
## `src/components/UnifiedDataBar/SourcesTab.tsx`:1010
- **Text:** '3px solid #7b1fa2'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` borderLeft: '3px solid #7b1fa2',`
## `src/components/UnifiedDataBar/SourcesTab.tsx`:1029
- **Text:** 'Neutralize: ON'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title={fds.neutralize ? 'Neutralize: ON' : 'Neutralize: OFF'}`
## `src/components/UnifiedDataBar/SourcesTab.tsx`:1029
- **Text:** 'Neutralize: OFF'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title={fds.neutralize ? 'Neutralize: ON' : 'Neutralize: OFF'}`
## `src/components/UnifiedDataBar/SourcesTab.tsx`:1036
- **Text:** 'Entfernen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Entfernen"`
## `src/components/UnifiedDataBar/SourcesTab.tsx`:1139
- **Text:** 'background 0.1s'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` transition: 'background 0.1s',`
## `src/components/UnifiedDataBar/SourcesTab.tsx`:1166
- **Text:** 'Add as data source'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Add as data source"`
## `src/components/UnifiedDataBar/SourcesTab.tsx`:1168
- **Text:** '+ Add'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {isAdding ? '...' : '+ Add'}`
## `src/components/UnifiedDataBar/SourcesTab.tsx`:1172
- **Text:** 'Already added'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <span style={{ fontSize: 10, color: '#4caf50', flexShrink: 0 }} title="Already added">`
## `src/components/UnifiedDataBar/SourcesTab.tsx`:1240
- **Text:** 'background 0.1s'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` transition: 'background 0.1s', userSelect: 'none',`
## `src/components/UnifiedDataBar/SourcesTab.tsx`:1315
- **Text:** 'background 0.1s'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` transition: 'background 0.1s', userSelect: 'none',`
## `src/components/UnifiedDataBar/SourcesTab.tsx`:1411
- **Text:** 'background 0.1s'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` transition: 'background 0.1s', userSelect: 'none',`
## `src/components/UnifiedDataBar/SourcesTab.tsx`:1429
- **Text:** 'Add as feature data source'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Add as feature data source"`
## `src/components/UnifiedDataBar/SourcesTab.tsx`:1431
- **Text:** '+ Add'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {isAdding ? '...' : '+ Add'}`
## `src/components/UnifiedDataBar/SourcesTab.tsx`:1435
- **Text:** 'Already added'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <span style={{ fontSize: 10, color: '#4caf50', flexShrink: 0 }} title="Already added">`
## `src/components/UnifiedDataBar/SourcesTab.tsx`:1479
- **Text:** 'background 0.1s'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` transition: 'background 0.1s', userSelect: 'none',`
## `src/components/UnifiedDataBar/SourcesTab.tsx`:1554
- **Text:** 'background 0.1s'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` transition: 'background 0.1s', userSelect: 'none',`
## `src/components/UnifiedDataBar/SourcesTab.tsx`:1575
- **Text:** 'Add all tables for this record'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Add all tables for this record"`
## `src/components/UnifiedDataBar/SourcesTab.tsx`:1577
- **Text:** '+ Add'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {isAdding ? '...' : '+ Add'}`
## `src/components/UnifiedDataBar/SourcesTab.tsx`:1581
- **Text:** 'Already added'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <span style={{ fontSize: 10, color: '#4caf50', flexShrink: 0 }} title="Already added">`
## `src/contexts/FileContext.tsx`:209
- **Text:** 'useFileContext must be used within a FileProvider'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` throw new Error('useFileContext must be used within a FileProvider');`
## `src/contexts/PekContext.tsx`:74
- **Text:** 'usePekContext must be used within a PekProvider'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` throw new Error('usePekContext must be used within a PekProvider');`
## `src/contexts/ToastContext.tsx`:94
- **Text:** 'useToast must be used within a ToastProvider'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` throw new Error('useToast must be used within a ToastProvider');`
## `src/contexts/WorkflowSelectionContext.tsx`:38
- **Text:** 'useWorkflowSelection must be used within a WorkflowSelectionProvider'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` throw new Error('useWorkflowSelection must be used within a WorkflowSelectionProvider');`
## `src/core/PageManager/SidebarProvider.tsx`:53
- **Text:** 'useSidebar must be used within a SidebarProvider'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` throw new Error('useSidebar must be used within a SidebarProvider');`
## `src/core/PageManager/SidebarProvider.tsx`:461
- **Text:** 'Failed to load sidebar items'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError(err instanceof Error ? err.message : 'Failed to load sidebar items');`
## `src/hooks/useAccessRules.tsx`:23
- **Text:** 'Keine'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 'n', label: 'Keine', color: '#e53e3e' },`
## `src/hooks/useAccessRules.tsx`:24
- **Text:** 'Eigene'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 'm', label: 'Eigene', color: '#d69e2e' },`
## `src/hooks/useAccessRules.tsx`:25
- **Text:** 'Gruppe'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 'g', label: 'Gruppe', color: '#3182ce' },`
## `src/hooks/useAccessRules.tsx`:26
- **Text:** 'Alle'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 'a', label: 'Alle', color: '#38a169' },`
## `src/hooks/useAccessRules.tsx`:114
- **Text:** 'Fehler beim Laden der Regeln'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` const errorMsg = err.response?.data?.detail || err.message || 'Fehler beim Laden der Regeln';`
## `src/hooks/useAccessRules.tsx`:197
- **Text:** 'Fehler beim Speichern'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` const errorMsg = err.response?.data?.detail || err.message || 'Fehler beim Speichern';`
## `src/hooks/useConfirm.tsx`:6
- **Text:** 'Wirklich löschen?'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` * const ok = await confirm('Wirklich löschen?', { confirmLabel: 'Löschen', variant: 'danger' });`
## `src/hooks/useConfirm.tsx`:6
- **Text:** 'Löschen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` * const ok = await confirm('Wirklich löschen?', { confirmLabel: 'Löschen', variant: 'danger' });`
## `src/hooks/useConfirm.tsx`:26
- **Text:** 'Bestätigung'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: 'Bestätigung',`
## `src/hooks/useConfirm.tsx`:27
- **Text:** 'Bestätigen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` confirmLabel: 'Bestätigen',`
## `src/hooks/useConfirm.tsx`:78
- **Text:** '1px solid var(--color-border, #333)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: '1px solid var(--color-border, #333)',`
## `src/hooks/useConfirm.tsx`:82
- **Text:** '0 8px 32px rgba(0,0,0,0.4)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` boxShadow: '0 8px 32px rgba(0,0,0,0.4)',`
## `src/hooks/useConfirm.tsx`:105
- **Text:** '1px solid var(--color-border, #444)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: '1px solid var(--color-border, #444)',`
## `src/hooks/useInstancePermissions.tsx`:117
- **Text:** 'Verträge'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` * {canViewContracts && <NavLink to="contracts">Verträge</NavLink>}`
## `src/hooks/useInstancePermissions.tsx`:343
- **Text:** 'Neuer Vertrag'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` * <Button>Neuer Vertrag</Button>`
## `src/hooks/usePrompt.tsx`:6
- **Text:** 'Bitte Namen eingeben:'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` * const value = await prompt('Bitte Namen eingeben:', { title: 'Umbenennen' });`
## `src/hooks/usePrompt.tsx`:85
- **Text:** '1px solid var(--border-color, var(--color-border, #333))'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: '1px solid var(--border-color, var(--color-border, #333))',`
## `src/hooks/usePrompt.tsx`:89
- **Text:** '0 8px 32px rgba(0,0,0,0.4)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` boxShadow: '0 8px 32px rgba(0,0,0,0.4)',`
## `src/hooks/usePrompt.tsx`:119
- **Text:** '1px solid var(--border-color, var(--color-border, #ccc))'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: '1px solid var(--border-color, var(--color-border, #ccc))',`
## `src/hooks/usePrompt.tsx`:134
- **Text:** '1px solid var(--color-border, #444)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: '1px solid var(--color-border, #444)',`
## `src/layouts/FeatureLayout.tsx`:21
- **Text:** 'Lade Feature-Daten...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p>Lade Feature-Daten...</p>`
## `src/layouts/FeatureLayout.tsx`:37
- **Text:** 'Zugriff nicht möglich'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h2>Zugriff nicht möglich</h2>`
## `src/layouts/FeatureLayout.tsx`:81
- **Text:** 'Die angeforderte Feature-Instanz existiert nicht oder Sie haben keinen Zugriff.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` message="Die angeforderte Feature-Instanz existiert nicht oder Sie haben keinen Zugriff."`
## `src/layouts/MainLayout.tsx`:63
- **Text:** 'Navigation schliessen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` aria-label="Navigation schliessen"`
## `src/layouts/MainLayout.tsx`:72
- **Text:** 'PowerOn'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` alt="PowerOn"`
## `src/layouts/MainLayout.tsx`:105
- **Text:** 'Navigation oeffnen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` aria-label="Navigation oeffnen"`
## `src/layouts/MainLayout.tsx`:111
- **Text:** 'PowerOn'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` alt="PowerOn"`
## `src/pages/AutomationsDashboardPage.tsx`:71
- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: '1px solid var(--border-color, #e0e0e0)',`
## `src/pages/AutomationsDashboardPage.tsx`:78
- **Text:** '1 1 180px'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` flex: '1 1 180px',`
## `src/pages/AutomationsDashboardPage.tsx`:195
- **Text:** ''
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: '',`
## `src/pages/Dashboard.tsx`:72
- **Text:** 'Übersicht'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h1>Übersicht</h1>`
## `src/pages/Dashboard.tsx`:82
- **Text:** 'Übersicht'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h1>Übersicht</h1>`
## `src/pages/FeatureView.tsx`:67
- **Text:** 'Workflow Dashboard'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <PlaceholderView title="Workflow Dashboard" description="Übersicht der Workflows" />`
## `src/pages/FeatureView.tsx`:67
- **Text:** 'Übersicht der Workflows'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` <PlaceholderView title="Workflow Dashboard" description="Übersicht der Workflows" />`
## `src/pages/FeatureView.tsx`:71
- **Text:** 'Runs'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <PlaceholderView title="Runs" description="Workflow-Ausführungen" />`
## `src/pages/FeatureView.tsx`:71
- **Text:** 'Workflow-Ausführungen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` <PlaceholderView title="Runs" description="Workflow-Ausführungen" />`
## `src/pages/FeatureView.tsx`:75
- **Text:** 'Dateien'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <PlaceholderView title="Dateien" description="Workflow-Dateien" />`
## `src/pages/FeatureView.tsx`:82
- **Text:** 'Chatbot Einstellungen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <PlaceholderView title="Chatbot Einstellungen" description="Konfiguration des Chatbots" />`
## `src/pages/FeatureView.tsx`:82
- **Text:** 'Konfiguration des Chatbots'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` <PlaceholderView title="Chatbot Einstellungen" description="Konfiguration des Chatbots" />`
## `src/pages/FeatureView.tsx`:88
- **Text:** 'Seite nicht gefunden'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h2>Seite nicht gefunden</h2>`
## `src/pages/FeatureView.tsx`:89
- **Text:** 'Diese View existiert nicht oder wurde noch nicht implementiert.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p>Diese View existiert nicht oder wurde noch nicht implementiert.</p>`
## `src/pages/FeatureView.tsx`:95
- **Text:** 'Zugriff verweigert'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h2>Zugriff verweigert</h2>`
## `src/pages/FeatureView.tsx`:96
- **Text:** 'Du hast keine Berechtigung für diese Ansicht.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p>Du hast keine Berechtigung für diese Ansicht.</p>`
## `src/pages/GDPR.tsx`:68
- **Text:** 'Consent information could not be loaded.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setConsentError('Consent information could not be loaded.');`
## `src/pages/GDPR.tsx`:91
- **Text:** 'Data export downloaded.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setActionMessage({ type: 'success', text: 'Data export downloaded.' });`
## `src/pages/GDPR.tsx`:94
- **Text:** 'Data export failed. Please try again.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setActionMessage({ type: 'error', text: 'Data export failed. Please try again.' });`
## `src/pages/GDPR.tsx`:109
- **Text:** 'Portable export downloaded.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setActionMessage({ type: 'success', text: 'Portable export downloaded.' });`
## `src/pages/GDPR.tsx`:112
- **Text:** 'Portable export failed. Please try again.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setActionMessage({ type: 'error', text: 'Portable export failed. Please try again.' });`
## `src/pages/GDPR.tsx`:121
- **Text:** 'Please type LOESCHEN to confirm deletion.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setActionMessage({ type: 'error', text: 'Please type LOESCHEN to confirm deletion.' });`
## `src/pages/GDPR.tsx`:132
- **Text:** 'Account deleted. Redirecting to login...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setActionMessage({ type: 'success', text: 'Account deleted. Redirecting to login...' });`
## `src/pages/GDPR.tsx`:136
- **Text:** 'Account deletion failed. Please try again.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setActionMessage({ type: 'error', text: 'Account deletion failed. Please try again.' });`
## `src/pages/GDPR.tsx`:161
- **Text:** 'Your data rights'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h2 className={styles.sectionTitle}>Your data rights</h2>`
## `src/pages/GDPR.tsx`:164
- **Text:** 'Access (Article 15)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h3>Access (Article 15)</h3>`
## `src/pages/GDPR.tsx`:165
- **Text:** 'Download a full export of your account data.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p>Download a full export of your account data.</p>`
## `src/pages/GDPR.tsx`:186
- **Text:** 'Portability (Article 20)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h3>Portability (Article 20)</h3>`
## `src/pages/GDPR.tsx`:187
- **Text:** 'Download a machine-readable JSON-LD export.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p>Download a machine-readable JSON-LD export.</p>`
## `src/pages/GDPR.tsx`:208
- **Text:** 'Erasure (Article 17)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h3>Erasure (Article 17)</h3>`
## `src/pages/GDPR.tsx`:209
- **Text:** 'Permanently delete your account and all associated data.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p>Permanently delete your account and all associated data.</p>`
## `src/pages/GDPR.tsx`:229
- **Text:** 'LOESCHEN'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="LOESCHEN"`
## `src/pages/GDPR.tsx`:278
- **Text:** 'Processing information'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h2 className={styles.sectionTitle}>Processing information</h2>`
## `src/pages/GDPR.tsx`:279
- **Text:** 'Loading consent info...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` {isLoadingConsent && <p className={styles.mutedText}>Loading consent info...</p>}`
## `src/pages/GDPR.tsx`:284
- **Text:** 'Data collected'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h3>Data collected</h3>`
## `src/pages/GDPR.tsx`:304
- **Text:** 'Your rights'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h3>Your rights</h3>`
## `src/pages/InvitePage.tsx`:16
- **Text:** 'Einladung annehmen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` * 6. User clicks "Einladung annehmen"`
## `src/pages/InvitePage.tsx`:56
- **Text:** 'Kein Einladungs-Token angegeben'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError('Kein Einladungs-Token angegeben');`
## `src/pages/InvitePage.tsx`:71
- **Text:** 'Neues Konto erstellen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` // No targetUsername = new-user invitation (email only) -> only show "Neues Konto erstellen"`
## `src/pages/InvitePage.tsx`:120
- **Text:** 'Not authenticated'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` } else if (result.error?.includes('401') || result.error?.includes('Not authenticated')) {`
## `src/pages/InvitePage.tsx`:125
- **Text:** 'Fehler beim Annehmen der Einladung'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError(result.error || 'Fehler beim Annehmen der Einladung');`
## `src/pages/InvitePage.tsx`:162
- **Text:** 'Einladung wird überprüft...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p>Einladung wird überprüft...</p>`
## `src/pages/InvitePage.tsx`:176
- **Text:** 'Ungültige Einladung'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h1>Ungültige Einladung</h1>`
## `src/pages/InvitePage.tsx`:177
- **Text:** 'Diese Einladung ist nicht gültig.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` <p>{validation?.reason || 'Diese Einladung ist nicht gültig.'}</p>`
## `src/pages/InvitePage.tsx`:195
- **Text:** 'Sie wurden erfolgreich zum Mandanten hinzugefügt.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p>Sie wurden erfolgreich zum Mandanten hinzugefügt.</p>`
## `src/pages/InvitePage.tsx`:196
- **Text:** 'Sie werden weitergeleitet...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.redirectMessage}>Sie werden weitergeleitet...</p>`
## `src/pages/InvitePage.tsx`:211
- **Text:** 'Falsche Anmeldung'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h1>Falsche Anmeldung</h1>`
## `src/pages/InvitePage.tsx`:214
- **Text:** 'anderer Benutzer'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` Sie sind als <strong>{cachedUser?.username || 'anderer Benutzer'}</strong> angemeldet.`
## `src/pages/InvitePage.tsx`:216
- **Text:** 'Bitte melden Sie sich ab und mit dem richtigen Konto wieder an.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p>Bitte melden Sie sich ab und mit dem richtigen Konto wieder an.</p>`
## `src/pages/InvitePage.tsx`:229
- **Text:** 'Sie wurden eingeladen, einem Mandanten und einem Feature beizutreten.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` ? 'Sie wurden eingeladen, einem Mandanten und einem Feature beizutreten.'`
## `src/pages/InvitePage.tsx`:230
- **Text:** 'Sie wurden eingeladen, einem Mandanten beizutreten.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` : 'Sie wurden eingeladen, einem Mandanten beizutreten.';`
## `src/pages/InvitePage.tsx`:231
- **Text:** 'Features mit zugewiesenen Rollen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` const rolesLabel = isFeatureInvite ? 'Features mit zugewiesenen Rollen' : 'Zugewiesene Rollen';`
## `src/pages/InvitePage.tsx`:231
- **Text:** 'Zugewiesene Rollen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` const rolesLabel = isFeatureInvite ? 'Features mit zugewiesenen Rollen' : 'Zugewiesene Rollen';`
## `src/pages/InvitePage.tsx`:241
- **Text:** 'Einladung annehmen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h1>Einladung annehmen</h1>`
## `src/pages/InvitePage.tsx`:287
- **Text:** 'Einladung annehmen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` 'Einladung annehmen'`
## `src/pages/InvitePage.tsx`:304
- **Text:** 'Einladung annehmen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h1>Einladung annehmen</h1>`
## `src/pages/InvitePage.tsx`:333
- **Text:** 'Erstellen Sie ein neues Konto mit Ihrem Benutzernamen oder verlinken Sie die Einladung mit Ihrem bestehenden Account.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` : 'Erstellen Sie ein neues Konto mit Ihrem Benutzernamen oder verlinken Sie die Einladung mit Ihrem bestehenden Account.'}`
## `src/pages/Login.tsx`:36
- **Text:** 'PowerOn AI Platform - Login'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` document.title = "PowerOn AI Platform - Login";`
## `src/pages/Login.tsx`:134
- **Text:** 'PowerOn'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` alt="PowerOn"`
## `src/pages/Login.tsx`:145
- **Text:** 'Sie haben eine ausstehende Einladung. Bitte melden Sie sich an, um diese anzunehmen.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Sie haben eine ausstehende Einladung. Bitte melden Sie sich an, um diese anzunehmen.</span>`
## `src/pages/Login.tsx`:155
- **Text:** ' '
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder=" "`
## `src/pages/Login.tsx`:173
- **Text:** ' '
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder=" "`
## `src/pages/Login.tsx`:198
- **Text:** 'wird geladen...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {isLoginLoading ? "wird geladen..." : "Anmelden"}`
## `src/pages/Login.tsx`:221
- **Text:** 'Signing in...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {isMsalLoading ? "Signing in..." : "Mit Microsoft anmelden"}`
## `src/pages/Login.tsx`:221
- **Text:** 'Mit Microsoft anmelden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {isMsalLoading ? "Signing in..." : "Mit Microsoft anmelden"}`
## `src/pages/Login.tsx`:232
- **Text:** 'Signing in...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {isGoogleLoading ? "Signing in..." : "Mit Google anmelden"}`
## `src/pages/Login.tsx`:232
- **Text:** 'Mit Google anmelden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {isGoogleLoading ? "Signing in..." : "Mit Google anmelden"}`
## `src/pages/Login.tsx`:237
- **Text:** 'Du hast noch kein Konto?'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Du hast noch kein Konto?</span>`
## `src/pages/PasswordResetRequest.tsx`:18
- **Text:** 'PowerOn AI Platform - Passwort zurücksetzen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` document.title = "PowerOn AI Platform - Passwort zurücksetzen";`
## `src/pages/PasswordResetRequest.tsx`:27
- **Text:** 'Bitte geben Sie Ihren Benutzernamen ein.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setValidationError('Bitte geben Sie Ihren Benutzernamen ein.');`
## `src/pages/PasswordResetRequest.tsx`:33
- **Text:** 'Falls ein Konto mit diesem Benutzernamen existiert, wurde ein Reset-Link an die hinterlegte E-Mail-Adresse gesendet. Bitte prüfen Sie auch Ihren Spam-Ordner.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setSuccessMessage('Falls ein Konto mit diesem Benutzernamen existiert, wurde ein Reset-Link an die hinterlegte E-Mail-Adresse gesendet. Bitte prüfen Sie auch Ihren Spam-Ordner.');`
## `src/pages/PasswordResetRequest.tsx`:40
- **Text:** 'Bitte prüfen Sie Ihre E-Mail für den Passwort-Reset-Link.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` message: 'Bitte prüfen Sie Ihre E-Mail für den Passwort-Reset-Link.'`
## `src/pages/PasswordResetRequest.tsx`:46
- **Text:** 'Falls ein Konto mit diesem Benutzernamen existiert, wurde ein Reset-Link an die hinterlegte E-Mail-Adresse gesendet. Bitte prüfen Sie auch Ihren Spam-Ordner.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setSuccessMessage('Falls ein Konto mit diesem Benutzernamen existiert, wurde ein Reset-Link an die hinterlegte E-Mail-Adresse gesendet. Bitte prüfen Sie auch Ihren Spam-Ordner.');`
## `src/pages/PasswordResetRequest.tsx`:59
- **Text:** 'PowerOn'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` alt="PowerOn"`
## `src/pages/PasswordResetRequest.tsx`:65
- **Text:** 'Passwort zurücksetzen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h2 className={styles.title}>Passwort zurücksetzen</h2>`
## `src/pages/PasswordResetRequest.tsx`:80
- **Text:** ' '
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder=" "`
## `src/pages/PasswordResetRequest.tsx`:100
- **Text:** 'Geben Sie Ihren Benutzernamen ein. Falls ein Konto existiert, erhalten Sie einen Link zum Zurücksetzen des Passworts an Ihre hinterlegte E-Mail-Adresse.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p>Geben Sie Ihren Benutzernamen ein. Falls ein Konto existiert, erhalten Sie einen Link zum Zurücksetzen des Passworts an Ihre hinterlegte E-Mail-Adresse.</p>`
## `src/pages/PasswordResetRequest.tsx`:108
- **Text:** 'Wird gesendet...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {isLoading ? "Wird gesendet..." : "Reset-Link anfordern"}`
## `src/pages/PasswordResetRequest.tsx`:108
- **Text:** 'Reset-Link anfordern'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {isLoading ? "Wird gesendet..." : "Reset-Link anfordern"}`
## `src/pages/PasswordResetRequest.tsx`:114
- **Text:** 'Zurück zum'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Zurück zum</span>`
## `src/pages/Register.tsx`:40
- **Text:** 'PowerOn AI Platform - Registrieren'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` document.title = "PowerOn AI Platform - Registrieren";`
## `src/pages/Register.tsx`:58
- **Text:** 'Bitte füllen Sie alle Pflichtfelder aus.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setValidationError('Bitte füllen Sie alle Pflichtfelder aus.');`
## `src/pages/Register.tsx`:63
- **Text:** 'Bitte geben Sie eine gültige E-Mail-Adresse ein.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setValidationError('Bitte geben Sie eine gültige E-Mail-Adresse ein.');`
## `src/pages/Register.tsx`:81
- **Text:** 'Username is not available'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` const errorMessage = availabilityResult.message || 'Username is not available';`
## `src/pages/Register.tsx`:82
- **Text:** 'Username is already taken'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` if (errorMessage === 'Username is already taken') {`
## `src/pages/Register.tsx`:83
- **Text:** 'Benutzername ist bereits vergeben'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setValidationError('Benutzername ist bereits vergeben');`
## `src/pages/Register.tsx`:86
- **Text:** 'Benutzername ist nicht verfügbar'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setValidationError('Benutzername ist nicht verfügbar');`
## `src/pages/Register.tsx`:93
- **Text:** 'Registrierung erfolgreich! Bitte prüfen Sie Ihre E-Mail (auch den Spam-Ordner) für den Link zum Setzen Ihres Passworts.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` let message = 'Registrierung erfolgreich! Bitte prüfen Sie Ihre E-Mail (auch den Spam-Ordner) für den Link zum Setzen Ihres Passworts.';`
## `src/pages/Register.tsx`:95
- **Text:** ' Nach dem Setzen Ihres Passworts können Sie sich anmelden und Ihre Einladung annehmen.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` message += ' Nach dem Setzen Ihres Passworts können Sie sich anmelden und Ihre Einladung annehmen.';`
## `src/pages/Register.tsx`:104
- **Text:** 'Registrierung erfolgreich. Bitte prüfen Sie Ihre E-Mail für den Passwort-Link.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` message: 'Registrierung erfolgreich. Bitte prüfen Sie Ihre E-Mail für den Passwort-Link.',`
## `src/pages/Register.tsx`:116
- **Text:** 'Registration failed'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` if (registerError) return typeof registerError === 'string' ? registerError : 'Registration failed';`
## `src/pages/Register.tsx`:117
- **Text:** 'Microsoft registration failed'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` if (msalError) return typeof msalError === 'string' ? msalError : 'Microsoft registration failed';`
## `src/pages/Register.tsx`:118
- **Text:** 'Username availability check failed'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` if (availabilityError) return typeof availabilityError === 'string' ? availabilityError : 'Username availability check failed';`
## `src/pages/Register.tsx`:128
- **Text:** 'PowerOn'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` alt="PowerOn"`
## `src/pages/Register.tsx`:138
- **Text:** 'Sie haben eine ausstehende Einladung. Nach der Registrierung und Anmeldung können Sie diese annehmen.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Sie haben eine ausstehende Einladung. Nach der Registrierung und Anmeldung können Sie diese annehmen.</span>`
## `src/pages/Register.tsx`:156
- **Text:** ' '
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder=" "`
## `src/pages/Register.tsx`:170
- **Text:** ' '
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder=" "`
## `src/pages/Register.tsx`:184
- **Text:** ' '
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder=" "`
## `src/pages/Register.tsx`:191
- **Text:** 'Vollständiger Name'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label className={fullNameFocused || formData.fullName ? styles.focusedLabel : styles.label}>Vollständiger Name</label>`
## `src/pages/Register.tsx`:195
- **Text:** 'Nach der Registrierung erhalten Sie eine E-Mail mit einem Link zum Setzen Ihres Passworts.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p>Nach der Registrierung erhalten Sie eine E-Mail mit einem Link zum Setzen Ihres Passworts.</p>`
## `src/pages/Register.tsx`:209
- **Text:** 'Registrierung läuft...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {isLoading ? "Registrierung läuft..." : isChecking ? "Benutzername wird geprüft..." : 'Kostenlos registrieren'}`
## `src/pages/Register.tsx`:209
- **Text:** 'Benutzername wird geprüft...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {isLoading ? "Registrierung läuft..." : isChecking ? "Benutzername wird geprüft..." : 'Kostenlos registrieren'}`
## `src/pages/Register.tsx`:209
- **Text:** 'Kostenlos registrieren'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {isLoading ? "Registrierung läuft..." : isChecking ? "Benutzername wird geprüft..." : 'Kostenlos registrieren'}`
## `src/pages/Register.tsx`:215
- **Text:** 'Bereits registriert?'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Bereits registriert?</span>`
## `src/pages/Reset.tsx`:26
- **Text:** 'PowerOn AI Platform - Neues Passwort setzen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` document.title = "PowerOn AI Platform - Neues Passwort setzen";`
## `src/pages/Reset.tsx`:31
- **Text:** 'Ungültiger Reset-Link. Bitte fordern Sie einen neuen Link an.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setTokenError('Ungültiger Reset-Link. Bitte fordern Sie einen neuen Link an.');`
## `src/pages/Reset.tsx`:33
- **Text:** 'Ungültiger Reset-Link. Bitte fordern Sie einen neuen Link an.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setTokenError('Ungültiger Reset-Link. Bitte fordern Sie einen neuen Link an.');`
## `src/pages/Reset.tsx`:44
- **Text:** 'Passwort muss mindestens 8 Zeichen lang sein.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setValidationError('Passwort muss mindestens 8 Zeichen lang sein.');`
## `src/pages/Reset.tsx`:49
- **Text:** 'Die Passwörter stimmen nicht überein.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setValidationError('Die Passwörter stimmen nicht überein.');`
## `src/pages/Reset.tsx`:65
- **Text:** 'Token fehlt. Bitte fordern Sie einen neuen Reset-Link an.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setValidationError('Token fehlt. Bitte fordern Sie einen neuen Reset-Link an.');`
## `src/pages/Reset.tsx`:71
- **Text:** 'Passwort erfolgreich gesetzt! Sie werden zum Login weitergeleitet...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setSuccessMessage('Passwort erfolgreich gesetzt! Sie werden zum Login weitergeleitet...');`
## `src/pages/Reset.tsx`:78
- **Text:** 'Passwort erfolgreich geändert. Bitte melden Sie sich an.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` message: 'Passwort erfolgreich geändert. Bitte melden Sie sich an.'`
## `src/pages/Reset.tsx`:84
- **Text:** 'Passwort-Zurücksetzung fehlgeschlagen.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` const errorMessage = err?.response?.data?.detail || err?.message || 'Passwort-Zurücksetzung fehlgeschlagen.';`
## `src/pages/Reset.tsx`:85
- **Text:** 'Ungültig'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` if (errorMessage.includes('abgelaufen') || errorMessage.includes('expired') || errorMessage.includes('Ungültig') || errorMessage.includes('invalid')) {`
## `src/pages/Reset.tsx`:86
- **Text:** 'Der Reset-Link ist ungültig oder abgelaufen. Bitte fordern Sie einen neuen Link an.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setValidationError('Der Reset-Link ist ungültig oder abgelaufen. Bitte fordern Sie einen neuen Link an.');`
## `src/pages/Reset.tsx`:101
- **Text:** 'PowerOn'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` alt="PowerOn"`
## `src/pages/Reset.tsx`:107
- **Text:** 'Neues Passwort setzen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h2 className={styles.title}>Neues Passwort setzen</h2>`
## `src/pages/Reset.tsx`:119
- **Text:** 'oder zurück zum'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>oder zurück zum</span>`
## `src/pages/Reset.tsx`:141
- **Text:** 'PowerOn'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` alt="PowerOn"`
## `src/pages/Reset.tsx`:147
- **Text:** 'Neues Passwort setzen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h2 className={styles.title}>Neues Passwort setzen</h2>`
## `src/pages/Reset.tsx`:159
- **Text:** 'Mindestens 8 Zeichen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.passwordHint}>Mindestens 8 Zeichen</div>`
## `src/pages/Reset.tsx`:163
- **Text:** ' '
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder=" "`
## `src/pages/Reset.tsx`:174
- **Text:** 'Neues Passwort'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label className={passwordFocused || password ? styles.focusedLabel : styles.label}>Neues Passwort</label>`
## `src/pages/Reset.tsx`:181
- **Text:** ' '
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder=" "`
## `src/pages/Reset.tsx`:192
- **Text:** 'Passwort bestätigen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label className={confirmPasswordFocused || confirmPassword ? styles.focusedLabel : styles.label}>Passwort bestätigen</label>`
## `src/pages/Reset.tsx`:200
- **Text:** 'Wird gespeichert...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {isLoading ? "Wird gespeichert..." : "Passwort setzen"}`
## `src/pages/Reset.tsx`:200
- **Text:** 'Passwort setzen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {isLoading ? "Wird gespeichert..." : "Passwort setzen"}`
## `src/pages/Reset.tsx`:206
- **Text:** 'Zurück zum'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Zurück zum</span>`
## `src/pages/Settings.tsx`:23
- **Text:** 'Profil'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { key: 'profile', label: 'Profil' },`
## `src/pages/Settings.tsx`:24
- **Text:** 'Darstellung'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { key: 'appearance', label: 'Darstellung' },`
## `src/pages/Settings.tsx`:25
- **Text:** 'Stimme & Sprache'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { key: 'voice', label: 'Stimme & Sprache' },`
## `src/pages/Settings.tsx`:26
- **Text:** 'Neutralisierung (lokal)'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { key: 'neutralization', label: 'Neutralisierung (lokal)' },`
## `src/pages/Settings.tsx`:27
- **Text:** 'Datenschutz'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { key: 'privacy', label: 'Datenschutz' },`
## `src/pages/Settings.tsx`:50
- **Text:** 'Deutsch'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 'de', label: 'Deutsch' },`
## `src/pages/Settings.tsx`:51
- **Text:** 'English'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 'en', label: 'English' },`
## `src/pages/Settings.tsx`:52
- **Text:** 'Français'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 'fr', label: 'Français' },`
## `src/pages/Settings.tsx`:56
- **Text:** 'Vollstaendiger Name'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { name: 'fullName', type: 'string', label: 'Vollstaendiger Name', description: 'Ihr vollstaendiger Name', required: false, placeholder: 'Max Mustermann' },`
## `src/pages/Settings.tsx`:56
- **Text:** 'Ihr vollstaendiger Name'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` { name: 'fullName', type: 'string', label: 'Vollstaendiger Name', description: 'Ihr vollstaendiger Name', required: false, placeholder: 'Max Mustermann' },`
## `src/pages/Settings.tsx`:56
- **Text:** 'Max Mustermann'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` { name: 'fullName', type: 'string', label: 'Vollstaendiger Name', description: 'Ihr vollstaendiger Name', required: false, placeholder: 'Max Mustermann' },`
## `src/pages/Settings.tsx`:57
- **Text:** 'E-Mail-Adresse'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { name: 'email', type: 'email', label: 'E-Mail-Adresse', description: 'Ihre E-Mail-Adresse fuer Benachrichtigungen', required: true, placeholder: 'name@example.com' },`
## `src/pages/Settings.tsx`:57
- **Text:** 'Ihre E-Mail-Adresse fuer Benachrichtigungen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` { name: 'email', type: 'email', label: 'E-Mail-Adresse', description: 'Ihre E-Mail-Adresse fuer Benachrichtigungen', required: true, placeholder: 'name@example.com' },`
## `src/pages/Settings.tsx`:58
- **Text:** 'Sprache'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { name: 'language', type: 'select', label: 'Sprache', description: 'Anzeigesprache der Anwendung', required: true, options: languageOptions },`
## `src/pages/Settings.tsx`:58
- **Text:** 'Anzeigesprache der Anwendung'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` { name: 'language', type: 'select', label: 'Sprache', description: 'Anzeigesprache der Anwendung', required: true, options: languageOptions },`
## `src/pages/Settings.tsx`:68
- **Text:** 'Fehler beim Speichern des Profils'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError(err.message || 'Fehler beim Speichern des Profils');`
## `src/pages/Settings.tsx`:80
- **Text:** 'Profil bearbeiten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h2>Profil bearbeiten</h2>`
## `src/pages/Settings.tsx`:137
- **Text:** 'Fehler beim Laden der Voice-Einstellungen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError(err.message || 'Fehler beim Laden der Voice-Einstellungen');`
## `src/pages/Settings.tsx`:184
- **Text:** 'Einstellungen gespeichert'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setSuccess('Einstellungen gespeichert');`
## `src/pages/Settings.tsx`:188
- **Text:** 'Fehler beim Speichern'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError(err.message || 'Fehler beim Speichern');`
## `src/pages/Settings.tsx`:206
- **Text:** 'Stimmtest fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` } catch { setError('Stimmtest fehlgeschlagen'); }`
## `src/pages/Settings.tsx`:216
- **Text:** 'English (US)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` { code: 'de-DE', name: 'Deutsch' }, { code: 'en-US', name: 'English (US)' },`
## `src/pages/Settings.tsx`:230
- **Text:** 'STT-Sprache (Spracheingabe)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h2 className={styles.sectionTitle}>STT-Sprache (Spracheingabe)</h2>`
## `src/pages/Settings.tsx`:233
- **Text:** 'Sprache fuer Spracherkennung'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label className={styles.settingLabel}>Sprache fuer Spracherkennung</label>`
## `src/pages/Settings.tsx`:234
- **Text:** 'Wird fuer die Sprache-zu-Text-Erkennung verwendet.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.settingDescription}>Wird fuer die Sprache-zu-Text-Erkennung verwendet.</p>`
## `src/pages/Settings.tsx`:247
- **Text:** 'TTS-Stimmen (Sprachausgabe)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h2 className={styles.sectionTitle}>TTS-Stimmen (Sprachausgabe)</h2>`
## `src/pages/Settings.tsx`:304
- **Text:** 'Einstellungen speichern'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {saving ? 'Speichern...' : 'Einstellungen speichern'}`
## `src/pages/Settings.tsx`:342
- **Text:** 'Fehler beim Laden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError(err.message || 'Fehler beim Laden');`
## `src/pages/Settings.tsx`:355
- **Text:** 'Fehler beim Loeschen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError(err.message || 'Fehler beim Loeschen');`
## `src/pages/Settings.tsx`:371
- **Text:** 'Platzhalter-Mappings (lokal)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h2 className={styles.sectionTitle}>Platzhalter-Mappings (lokal)</h2>`
## `src/pages/Settings.tsx`:377
- **Text:** '1px solid var(--border-color, #bfdbfe)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: '1px solid var(--border-color, #bfdbfe)',`
## `src/pages/Settings.tsx`:385
- **Text:** 'Mandant → AI-Workspace-Instanz → Einstellungen → Tab „Neutralisierung“'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <strong>Mandant → AI-Workspace-Instanz → Einstellungen → Tab „Neutralisierung“</strong> (nicht auf dieser`
## `src/pages/Settings.tsx`:470
- **Text:** 'Sprache konnte nicht gespeichert werden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` } catch { setLanguageError('Sprache konnte nicht gespeichert werden'); }`
## `src/pages/Settings.tsx`:475
- **Text:** 'Nicht angemeldet'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` if (!currentUser?.id || !currentUser?.username) throw new Error('Nicht angemeldet');`
## `src/pages/Settings.tsx`:489
- **Text:** 'Persoenliche Einstellungen und Praeferenzen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.subtitle}>Persoenliche Einstellungen und Praeferenzen</p>`
## `src/pages/Settings.tsx`:511
- **Text:** 'Profil bearbeiten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label className={styles.settingLabel}>Profil bearbeiten</label>`
## `src/pages/Settings.tsx`:512
- **Text:** 'Aendern Sie Ihren Namen und Ihre E-Mail-Adresse.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.settingDescription}>Aendern Sie Ihren Namen und Ihre E-Mail-Adresse.</p>`
## `src/pages/Settings.tsx`:540
- **Text:** 'Waehlen Sie zwischen hellem und dunklem Design.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.settingInfo}><label className={styles.settingLabel}>Theme</label><p className={styles.settingDescription}>Waehlen Sie zwischen hellem und dunklem Design.</p></div>`
## `src/pages/Settings.tsx`:555
- **Text:** 'Deutsch'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { code: 'de', label: 'Deutsch' },`
## `src/pages/Settings.tsx`:556
- **Text:** 'English'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { code: 'en', label: 'English' },`
## `src/pages/Settings.tsx`:557
- **Text:** 'Français'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { code: 'fr', label: 'Français' },`
## `src/pages/Settings.tsx`:584
- **Text:** 'GDPR / Privacy'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.settingInfo}><label className={styles.settingLabel}>GDPR / Privacy</label><p className={styles.settingDescription}>Datenexport, Portabilität und Kontolöschung.</p></div>`
## `src/pages/Settings.tsx`:584
- **Text:** 'Datenexport, Portabilität und Kontolöschung.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.settingInfo}><label className={styles.settingLabel}>GDPR / Privacy</label><p className={styles.settingDescription}>Datenexport, Portabilität und Kontolöschung.</p></div>`
## `src/pages/Settings.tsx`:585
- **Text:** 'GDPR öffnen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.settingControl}><Link className={`${styles.button} ${styles.linkButton}`} to="/gdpr">GDPR öffnen</Link></div>`
## `src/pages/Store.tsx`:25
- **Text:** 'Erstelle und verwalte Automatisierungen, um wiederkehrende Aufgaben effizient zu erledigen.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` de: 'Erstelle und verwalte Automatisierungen, um wiederkehrende Aufgaben effizient zu erledigen.',`
## `src/pages/Store.tsx`:26
- **Text:** 'Create and manage automations to handle recurring tasks efficiently.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` en: 'Create and manage automations to handle recurring tasks efficiently.',`
## `src/pages/Store.tsx`:27
- **Text:** 'Creer et gerer des automatisations pour traiter efficacement les taches recurrentes.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` fr: 'Creer et gerer des automatisations pour traiter efficacement les taches recurrentes.',`
## `src/pages/Store.tsx`:30
- **Text:** 'n8n-style Flow-Automatisierung mit grafischem Editor, RAG und Tools.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` de: 'n8n-style Flow-Automatisierung mit grafischem Editor, RAG und Tools.',`
## `src/pages/Store.tsx`:31
- **Text:** 'n8n-style flow automation with visual editor, RAG and tools.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` en: 'n8n-style flow automation with visual editor, RAG and tools.',`
## `src/pages/Store.tsx`:32
- **Text:** 'Automatisation de flux style n8n avec editeur visuel, RAG et outils.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` fr: 'Automatisation de flux style n8n avec editeur visuel, RAG et outils.',`
## `src/pages/Store.tsx`:35
- **Text:** 'Integriere einen AI-Bot in deine Microsoft Teams Meetings und Channels.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` de: 'Integriere einen AI-Bot in deine Microsoft Teams Meetings und Channels.',`
## `src/pages/Store.tsx`:36
- **Text:** 'Integrate an AI bot into your Microsoft Teams meetings and channels.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` en: 'Integrate an AI bot into your Microsoft Teams meetings and channels.',`
## `src/pages/Store.tsx`:37
- **Text:** 'Integrez un bot IA dans vos reunions et canaux Microsoft Teams.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` fr: 'Integrez un bot IA dans vos reunions et canaux Microsoft Teams.',`
## `src/pages/Store.tsx`:40
- **Text:** 'Nutze den gemeinsamen AI Workspace: Chats, Tools und Kontext pro Instanz.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` de: 'Nutze den gemeinsamen AI Workspace: Chats, Tools und Kontext pro Instanz.',`
## `src/pages/Store.tsx`:41
- **Text:** 'Use the shared AI workspace: chats, tools, and context per instance.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` en: 'Use the shared AI workspace: chats, tools, and context per instance.',`
## `src/pages/Store.tsx`:42
- **Text:** "Utilisez l'espace de travail IA partage: chats, outils et contexte par instance."
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` fr: 'Utilisez l\'espace de travail IA partage: chats, outils et contexte par instance.',`
## `src/pages/Store.tsx`:45
- **Text:** 'CommCoach: Kommunikation trainieren mit KI-gestütztem Coaching und Feedback.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` de: 'CommCoach: Kommunikation trainieren mit KI-gestütztem Coaching und Feedback.',`
## `src/pages/Store.tsx`:46
- **Text:** 'CommCoach: practice communication with AI-assisted coaching and feedback.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` en: 'CommCoach: practice communication with AI-assisted coaching and feedback.',`
## `src/pages/Store.tsx`:47
- **Text:** 'CommCoach: entrainer la communication avec un coaching assiste par IA.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` fr: 'CommCoach: entrainer la communication avec un coaching assiste par IA.',`
## `src/pages/Store.tsx`:140
- **Text:** 'Wird aktiviert...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` ? (language === 'de' ? 'Wird aktiviert...' : 'Activating...')`
## `src/pages/Store.tsx`:160
- **Text:** 'Feature Store'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` <h1>{currentLanguage === 'de' ? 'Feature Store' : currentLanguage === 'fr' ? 'Feature Store' : 'Feature Store'}</h1>`
## `src/pages/Store.tsx`:163
- **Text:** 'Aktiviere Features fuer dein Konto. Deine Daten sind isoliert und nur fuer dich sichtbar.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` ? 'Aktiviere Features fuer dein Konto. Deine Daten sind isoliert und nur fuer dich sichtbar.'`
## `src/pages/Store.tsx`:165
- **Text:** 'Activez des fonctionnalites pour votre compte. Vos donnees sont isolees et visibles uniquement par vous.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` ? 'Activez des fonctionnalites pour votre compte. Vos donnees sont isolees et visibles uniquement par vous.'`
## `src/pages/Store.tsx`:166
- **Text:** 'Activate features for your account. Your data is isolated and only visible to you.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` : 'Activate features for your account. Your data is isolated and only visible to you.'}`
## `src/pages/Store.tsx`:186
- **Text:** 'AI budget'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {currentLanguage === 'de' ? 'AI-Budget' : 'AI budget'}: {subscriptionInfo.budgetAiCHF} CHF`
## `src/pages/Store.tsx`:191
- **Text:** 'Trial endet'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {currentLanguage === 'de' ? 'Trial endet' : 'Trial ends'}: {new Date(subscriptionInfo.trialEndsAt).toLocaleDateString()}`
## `src/pages/Store.tsx`:191
- **Text:** 'Trial ends'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {currentLanguage === 'de' ? 'Trial endet' : 'Trial ends'}: {new Date(subscriptionInfo.trialEndsAt).toLocaleDateString()}`
## `src/pages/Store.tsx`:201
- **Text:** 'Lade Features...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {currentLanguage === 'de' ? 'Lade Features...' : 'Loading features...'}`
## `src/pages/Store.tsx`:201
- **Text:** 'Loading features...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {currentLanguage === 'de' ? 'Lade Features...' : 'Loading features...'}`
## `src/pages/Store.tsx`:206
- **Text:** 'Keine Features im Store verfuegbar.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` ? 'Keine Features im Store verfuegbar.'`
## `src/pages/Store.tsx`:207
- **Text:** 'No features available in the store.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` : 'No features available in the store.'}`
## `src/pages/admin/AccessManagementHub.tsx`:147
- **Text:** 'Rollen synchronisiert'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` 'Rollen synchronisiert',`
## `src/pages/admin/AccessManagementHub.tsx`:152
- **Text:** 'Synchronisierung fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Synchronisierung fehlgeschlagen', result.error || 'Fehler beim Synchronisieren');`
## `src/pages/admin/AccessManagementHub.tsx`:152
- **Text:** 'Fehler beim Synchronisieren'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Synchronisierung fehlgeschlagen', result.error || 'Fehler beim Synchronisieren');`
## `src/pages/admin/AccessManagementHub.tsx`:155
- **Text:** 'Rollen konnten nicht synchronisiert werden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Fehler', 'Rollen konnten nicht synchronisiert werden');`
## `src/pages/admin/AccessManagementHub.tsx`:308
- **Text:** 'Fehler: {error}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.errorMessage}>Fehler: {error}</p>`
## `src/pages/admin/AccessManagementHub.tsx`:342
- **Text:** '-- Mandant wählen --'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="">-- Mandant wählen --</option>`
## `src/pages/admin/AccessManagementHub.tsx`:431
- **Text:** 'Kein Mandant ausgewählt'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h3 className={styles.emptyTitle}>Kein Mandant ausgewählt</h3>`
## `src/pages/admin/AccessManagementHub.tsx`:463
- **Text:** 'Rollen (max)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span className={hubStyles.statsLabel}>Rollen (max)</span>`
## `src/pages/admin/AccessManagementHub.tsx`:496
- **Text:** 'Lade Instanzen...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Lade Instanzen...</span>`
## `src/pages/admin/AccessManagementHub.tsx`:501
- **Text:** 'Keine Feature-Instanzen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h3 className={styles.emptyTitle}>Keine Feature-Instanzen</h3>`
## `src/pages/admin/AccessManagementHub.tsx`:526
- **Text:** 'f.code === inst.featureCode) || { code: inst.featureCode, label: inst.featureCode })}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>{getFeatureLabel(features.find((f) => f.code === inst.featureCode) || { code: inst.featureCode, label: inst.featureCode })}</span>`
## `src/pages/admin/AccessManagementHub.tsx`:543
- **Text:** 'Rollen synchronisieren'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Rollen synchronisieren"`
## `src/pages/admin/AdminFeatureAccessPage.tsx`:87
- **Text:** 'Name'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { key: 'label', label: 'Name', type: 'string' as const, sortable: true, filterable: true, searchable: true, width: 200 },`
## `src/pages/admin/AdminFeatureAccessPage.tsx`:88
- **Text:** 'Feature'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { key: 'featureCode', label: 'Feature', type: 'string' as const, sortable: true, filterable: true, width: 150,`
## `src/pages/admin/AdminFeatureAccessPage.tsx`:100
- **Text:** 'Aktiv'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { key: 'enabled', label: 'Aktiv', type: 'boolean' as const, sortable: true, filterable: true, width: 80 },`
## `src/pages/admin/AdminFeatureAccessPage.tsx`:123
- **Text:** 'Label ist erforderlich.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Fehler', 'Label ist erforderlich.');`
## `src/pages/admin/AdminFeatureAccessPage.tsx`:133
- **Text:** 'System Prompt ist erforderlich für Chatbot-Instanzen.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Fehler', 'System Prompt ist erforderlich für Chatbot-Instanzen.');`
## `src/pages/admin/AdminFeatureAccessPage.tsx`:177
- **Text:** 'Feature-Instanz erstellt'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Feature-Instanz erstellt', `Die Instanz "${createLabel}" wurde erfolgreich erstellt.`);`
## `src/pages/admin/AdminFeatureAccessPage.tsx`:179
- **Text:** 'Fehler beim Erstellen der Feature-Instanz'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Fehler', result.error || 'Fehler beim Erstellen der Feature-Instanz');`
## `src/pages/admin/AdminFeatureAccessPage.tsx`:229
- **Text:** 'System Prompt ist erforderlich für Chatbot-Instanzen.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Fehler', 'System Prompt ist erforderlich für Chatbot-Instanzen.');`
## `src/pages/admin/AdminFeatureAccessPage.tsx`:271
- **Text:** 'Feature-Instanz aktualisiert'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Feature-Instanz aktualisiert', `Die Instanz "${data.label}" wurde erfolgreich aktualisiert.`);`
## `src/pages/admin/AdminFeatureAccessPage.tsx`:273
- **Text:** 'Fehler beim Aktualisieren der Feature-Instanz'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Fehler', result.error || 'Fehler beim Aktualisieren der Feature-Instanz');`
## `src/pages/admin/AdminFeatureAccessPage.tsx`:286
- **Text:** 'Instanz gelöscht'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Instanz gelöscht', 'Die Feature-Instanz wurde gelöscht.');`
## `src/pages/admin/AdminFeatureAccessPage.tsx`:286
- **Text:** 'Die Feature-Instanz wurde gelöscht.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Instanz gelöscht', 'Die Feature-Instanz wurde gelöscht.');`
## `src/pages/admin/AdminFeatureAccessPage.tsx`:289
- **Text:** 'Fehler beim Löschen der Feature-Instanz'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Fehler', result.error || 'Fehler beim Löschen der Feature-Instanz');`
## `src/pages/admin/AdminFeatureAccessPage.tsx`:302
- **Text:** 'Rollen synchronisiert'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` 'Rollen synchronisiert',`
## `src/pages/admin/AdminFeatureAccessPage.tsx`:306
- **Text:** 'Synchronisierung fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Synchronisierung fehlgeschlagen', result.error || 'Fehler beim Synchronisieren der Rollen');`
## `src/pages/admin/AdminFeatureAccessPage.tsx`:306
- **Text:** 'Fehler beim Synchronisieren der Rollen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Synchronisierung fehlgeschlagen', result.error || 'Fehler beim Synchronisieren der Rollen');`
## `src/pages/admin/AdminFeatureAccessPage.tsx`:338
- **Text:** 'Fehler: {error}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.errorMessage}>Fehler: {error}</p>`
## `src/pages/admin/AdminFeatureAccessPage.tsx`:352
- **Text:** 'Verwalten Sie Feature-Instanzen für jeden Mandanten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.pageSubtitle}>Verwalten Sie Feature-Instanzen für jeden Mandanten</p>`
## `src/pages/admin/AdminFeatureAccessPage.tsx`:368
- **Text:** '-- Mandant wählen --'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="">-- Mandant wählen --</option>`
## `src/pages/admin/AdminFeatureAccessPage.tsx`:390
- **Text:** 'Keine Features verfügbar. Bitte laden Sie die Seite neu oder prüfen Sie die Konsole auf Fehler.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title={features.length === 0 ? 'Keine Features verfügbar. Bitte laden Sie die Seite neu oder prüfen Sie die Konsole auf Fehler.' : undefined}`
## `src/pages/admin/AdminFeatureAccessPage.tsx`:402
- **Text:** 'Verfügbare Features:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Verfügbare Features: </span>`
## `src/pages/admin/AdminFeatureAccessPage.tsx`:415
- **Text:** ' Die API hat keine Features zurückgegeben.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {error ? ` Fehler: ${error}` : ' Die API hat keine Features zurückgegeben.'}`
## `src/pages/admin/AdminFeatureAccessPage.tsx`:432
- **Text:** 'Kein Mandant ausgewählt'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h3 className={styles.emptyTitle}>Kein Mandant ausgewählt</h3>`
## `src/pages/admin/AdminFeatureAccessPage.tsx`:453
- **Text:** 'Instanz löschen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: 'Instanz löschen',`
## `src/pages/admin/AdminFeatureAccessPage.tsx`:461
- **Text:** 'Instanz bearbeiten'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: 'Instanz bearbeiten',`
## `src/pages/admin/AdminFeatureAccessPage.tsx`:467
- **Text:** 'Rollen synchronisieren'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: 'Rollen synchronisieren',`
## `src/pages/admin/AdminFeatureAccessPage.tsx`:477
- **Text:** 'Keine Feature-Instanzen gefunden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` emptyMessage="Keine Feature-Instanzen gefunden"`
## `src/pages/admin/AdminFeatureAccessPage.tsx`:487
- **Text:** 'Neue Feature-Instanz erstellen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h2 className={styles.modalTitle}>Neue Feature-Instanz erstellen</h2>`
## `src/pages/admin/AdminFeatureAccessPage.tsx`:497
- **Text:** 'Keine Features verfügbar. Bitte wenden Sie sich an den System-Administrator.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p>Keine Features verfügbar. Bitte wenden Sie sich an den System-Administrator.</p>`
## `src/pages/admin/AdminFeatureAccessPage.tsx`:501
- **Text:** 'Lade Formular...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Lade Formular...</span>`
## `src/pages/admin/AdminFeatureAccessPage.tsx`:528
- **Text:** 'Feature auswählen (erforderlich)'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Feature auswählen (erforderlich)"`
## `src/pages/admin/AdminFeatureAccessPage.tsx`:555
- **Text:** 'Instanz-Bezeichnung eingeben...'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Instanz-Bezeichnung eingeben..."`
## `src/pages/admin/AdminFeatureAccessPage.tsx`:611
- **Text:** 'Feature-Instanz bearbeiten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h2 className={styles.modalTitle}>Feature-Instanz bearbeiten</h2>`
## `src/pages/admin/AdminFeatureAccessPage.tsx`:625
- **Text:** 'Bezeichnung'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Bezeichnung',`
## `src/pages/admin/AdminFeatureAccessPage.tsx`:632
- **Text:** 'Aktiviert'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Aktiviert',`
## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:201
- **Text:** 'Benutzername'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Benutzername',`
## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:210
- **Text:** 'E-Mail'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'E-Mail',`
## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:219
- **Text:** 'Vollständiger Name'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Vollständiger Name',`
## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:228
- **Text:** 'Rollen'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Rollen',`
## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:241
- **Text:** 'Aktiv'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Aktiv',`
## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:268
- **Text:** 'Benutzer'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Benutzer',`
## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:275
- **Text:** 'Rollen'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Rollen',`
## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:288
- **Text:** 'Rollen'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Rollen',`
## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:295
- **Text:** 'Aktiv'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Aktiv',`
## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:312
- **Text:** 'Benutzer hinzugefügt'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Benutzer hinzugefügt', 'Der Benutzer wurde erfolgreich zur Feature-Instanz hinzugefügt.');`
## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:312
- **Text:** 'Der Benutzer wurde erfolgreich zur Feature-Instanz hinzugefügt.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Benutzer hinzugefügt', 'Der Benutzer wurde erfolgreich zur Feature-Instanz hinzugefügt.');`
## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:314
- **Text:** 'Fehler beim Hinzufügen des Benutzers'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Fehler', result.error || 'Fehler beim Hinzufügen des Benutzers');`
## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:336
- **Text:** 'Eintrag aktualisiert'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Eintrag aktualisiert', 'Rollen und Aktiv-Status wurden erfolgreich aktualisiert.');`
## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:336
- **Text:** 'Rollen und Aktiv-Status wurden erfolgreich aktualisiert.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Eintrag aktualisiert', 'Rollen und Aktiv-Status wurden erfolgreich aktualisiert.');`
## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:338
- **Text:** 'Fehler beim Aktualisieren'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Fehler', result.error || 'Fehler beim Aktualisieren');`
## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:352
- **Text:** 'Benutzer entfernt'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Benutzer entfernt', `"${user.username}" wurde aus der Feature-Instanz entfernt.`);`
## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:354
- **Text:** 'Fehler beim Entfernen des Benutzers'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Fehler', result.error || 'Fehler beim Entfernen des Benutzers');`
## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:396
- **Text:** 'Fehler: {error}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.errorMessage}>Fehler: {error}</p>`
## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:409
- **Text:** 'Feature Instanz Benutzer'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h1 className={styles.pageTitle}>Feature Instanz Benutzer</h1>`
## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:410
- **Text:** 'Verwalten Sie Benutzerzugriffe auf Feature-Instanzen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.pageSubtitle}>Verwalten Sie Benutzerzugriffe auf Feature-Instanzen</p>`
## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:427
- **Text:** '-- Mandant / Feature-Instanz wählen --'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="">-- Mandant / Feature-Instanz wählen --</option>`
## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:485
- **Text:** 'Verfügbare Rollen:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Verfügbare Rollen: </span>`
## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:499
- **Text:** 'Diese Instanz hat noch keine Rollen. Bitte synchronisieren Sie die Rollen zuerst unter "Feature-Instanzen".'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Diese Instanz hat noch keine Rollen. Bitte synchronisieren Sie die Rollen zuerst unter "Feature-Instanzen".</span>`
## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:507
- **Text:** 'Keine Feature-Instanz ausgewählt'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h3 className={styles.emptyTitle}>Keine Feature-Instanz ausgewählt</h3>`
## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:510
- **Text:** 'Es gibt noch keine Feature-Instanzen. Erstellen Sie zuerst Feature-Instanzen unter "Feature-Instanzen".'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` ? 'Es gibt noch keine Feature-Instanzen. Erstellen Sie zuerst Feature-Instanzen unter "Feature-Instanzen".'`
## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:511
- **Text:** 'Wählen Sie eine Feature-Instanz aus, um deren Benutzer zu verwalten.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` : 'Wählen Sie eine Feature-Instanz aus, um deren Benutzer zu verwalten.'}`
## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:531
- **Text:** 'Rollen bearbeiten'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: 'Rollen bearbeiten',`
## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:535
- **Text:** 'Aus Instanz entfernen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: 'Aus Instanz entfernen',`
## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:552
- **Text:** 'Keine Benutzer gefunden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` emptyMessage="Keine Benutzer gefunden"`
## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:562
- **Text:** 'Benutzer zur Feature-Instanz hinzufügen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h2 className={styles.modalTitle}>Benutzer zur Feature-Instanz hinzufügen</h2>`
## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:572
- **Text:** 'Alle Benutzer haben bereits Zugriff auf diese Feature-Instanz.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p>Alle Benutzer haben bereits Zugriff auf diese Feature-Instanz.</p>`
## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:574
- **Text:** 'Diese Feature-Instanz hat keine Rollen. Bitte synchronisieren Sie zuerst die Rollen.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p>Diese Feature-Instanz hat keine Rollen. Bitte synchronisieren Sie zuerst die Rollen.</p>`
## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:581
- **Text:** 'Hinzufügen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` submitButtonText="Hinzufügen"`
## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:595
- **Text:** 'Rollen bearbeiten: {editingUser.username}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h2 className={styles.modalTitle}>Rollen bearbeiten: {editingUser.username}</h2>`
## `src/pages/admin/AdminFeatureRolesPage.tsx`:69
- **Text:** 'Fehler beim Laden der Features'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError('Fehler beim Laden der Features');`
## `src/pages/admin/AdminFeatureRolesPage.tsx`:111
- **Text:** 'Fehler beim Laden der Feature-Rollen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError('Fehler beim Laden der Feature-Rollen');`
## `src/pages/admin/AdminFeatureRolesPage.tsx`:134
- **Text:** 'Rollen-Label'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Rollen-Label',`
## `src/pages/admin/AdminFeatureRolesPage.tsx`:143
- **Text:** 'Beschreibung'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Beschreibung',`
## `src/pages/admin/AdminFeatureRolesPage.tsx`:151
- **Text:** 'Feature'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Feature',`
## `src/pages/admin/AdminFeatureRolesPage.tsx`:169
- **Text:** 'Rollen-Label'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Rollen-Label',`
## `src/pages/admin/AdminFeatureRolesPage.tsx`:172
- **Text:** 'Eindeutiger Bezeichner der Rolle (z.B. trustee-admin)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` description: 'Eindeutiger Bezeichner der Rolle (z.B. trustee-admin)'`
## `src/pages/admin/AdminFeatureRolesPage.tsx`:176
- **Text:** 'Beschreibung'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Beschreibung',`
## `src/pages/admin/AdminFeatureRolesPage.tsx`:179
- **Text:** 'Mehrsprachige Beschreibung der Rolle'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` description: 'Mehrsprachige Beschreibung der Rolle'`
## `src/pages/admin/AdminFeatureRolesPage.tsx`:190
- **Text:** 'Rollen-Label'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Rollen-Label',`
## `src/pages/admin/AdminFeatureRolesPage.tsx`:194
- **Text:** 'Eindeutiger Bezeichner der Rolle'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` description: 'Eindeutiger Bezeichner der Rolle'`
## `src/pages/admin/AdminFeatureRolesPage.tsx`:198
- **Text:** 'Beschreibung'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Beschreibung',`
## `src/pages/admin/AdminFeatureRolesPage.tsx`:201
- **Text:** 'Mehrsprachige Beschreibung der Rolle'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` description: 'Mehrsprachige Beschreibung der Rolle'`
## `src/pages/admin/AdminFeatureRolesPage.tsx`:221
- **Text:** 'Fehler beim Erstellen der Rolle'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Fehler', err.response?.data?.detail || 'Fehler beim Erstellen der Rolle');`
## `src/pages/admin/AdminFeatureRolesPage.tsx`:240
- **Text:** 'Fehler beim Aktualisieren der Rolle'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Fehler', err.response?.data?.detail || 'Fehler beim Aktualisieren der Rolle');`
## `src/pages/admin/AdminFeatureRolesPage.tsx`:253
- **Text:** 'Fehler beim Löschen der Rolle'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Fehler', err.response?.data?.detail || 'Fehler beim Löschen der Rolle');`
## `src/pages/admin/AdminFeatureRolesPage.tsx`:283
- **Text:** 'Feature Rollen & Rechte'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h1 className={styles.pageTitle}>Feature Rollen & Rechte</h1>`
## `src/pages/admin/AdminFeatureRolesPage.tsx`:284
- **Text:** 'Template-Rollen und deren Berechtigungen für Feature-Instanzen verwalten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.pageSubtitle}>Template-Rollen und deren Berechtigungen für Feature-Instanzen verwalten</p>`
## `src/pages/admin/AdminFeatureRolesPage.tsx`:300
- **Text:** '-- Feature wählen --'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="">-- Feature wählen --</option>`
## `src/pages/admin/AdminFeatureRolesPage.tsx`:346
- **Text:** 'Kein Feature ausgewählt'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h3 className={styles.emptyTitle}>Kein Feature ausgewählt</h3>`
## `src/pages/admin/AdminFeatureRolesPage.tsx`:368
- **Text:** 'Rolle bearbeiten'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: 'Rolle bearbeiten',`
## `src/pages/admin/AdminFeatureRolesPage.tsx`:372
- **Text:** 'Rolle löschen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: 'Rolle löschen',`
## `src/pages/admin/AdminFeatureRolesPage.tsx`:380
- **Text:** 'Berechtigungen verwalten'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: 'Berechtigungen verwalten',`
## `src/pages/admin/AdminFeatureRolesPage.tsx`:389
- **Text:** 'Keine Feature-Rollen gefunden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` emptyMessage="Keine Feature-Rollen gefunden"`
## `src/pages/admin/AdminFeatureRolesPage.tsx`:399
- **Text:** 'Neue Feature-Rolle erstellen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h2 className={styles.modalTitle}>Neue Feature-Rolle erstellen</h2>`
## `src/pages/admin/AdminFeatureRolesPage.tsx`:417
- **Text:** 'Rolle erstellen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` submitButtonText={isSubmitting ? 'Erstelle...' : 'Rolle erstellen'}`
## `src/pages/admin/AdminFeatureRolesPage.tsx`:430
- **Text:** 'Feature-Rolle bearbeiten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h2 className={styles.modalTitle}>Feature-Rolle bearbeiten</h2>`
## `src/pages/admin/AdminInvitationsPage.tsx`:86
- **Text:** 'Benutzername'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Benutzername',`
## `src/pages/admin/AdminInvitationsPage.tsx`:95
- **Text:** 'E-Mail'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'E-Mail',`
## `src/pages/admin/AdminInvitationsPage.tsx`:104
- **Text:** 'Email wurde gesendet'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` <span title={emailSent ? 'Email wurde gesendet' : 'Email nicht gesendet'}>`
## `src/pages/admin/AdminInvitationsPage.tsx`:104
- **Text:** 'Email nicht gesendet'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` <span title={emailSent ? 'Email wurde gesendet' : 'Email nicht gesendet'}>`
## `src/pages/admin/AdminInvitationsPage.tsx`:112
- **Text:** 'Rollen'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Rollen',`
## `src/pages/admin/AdminInvitationsPage.tsx`:127
- **Text:** 'Gültig bis'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Gültig bis',`
## `src/pages/admin/AdminInvitationsPage.tsx`:143
- **Text:** 'Verwendet'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Verwendet',`
## `src/pages/admin/AdminInvitationsPage.tsx`:151
- **Text:** 'Erstellt'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Erstellt',`
## `src/pages/admin/AdminInvitationsPage.tsx`:177
- **Text:** 'Gültigkeitsdauer (Stunden)'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` fields.push({ name: 'expiresInHours', label: 'Gültigkeitsdauer (Stunden)', type: 'number',`
## `src/pages/admin/AdminInvitationsPage.tsx`:200
- **Text:** 'Fehler beim Erstellen der Einladung'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Fehler', result.error || 'Fehler beim Erstellen der Einladung');`
## `src/pages/admin/AdminInvitationsPage.tsx`:213
- **Text:** 'Fehler beim Widerrufen der Einladung'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Fehler', result.error || 'Fehler beim Widerrufen der Einladung');`
## `src/pages/admin/AdminInvitationsPage.tsx`:248
- **Text:** 'Fehler: {error}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.errorMessage}>Fehler: {error}</p>`
## `src/pages/admin/AdminInvitationsPage.tsx`:262
- **Text:** 'Erstellen und verwalten Sie Einladungen für neue Benutzer'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.pageSubtitle}>Erstellen und verwalten Sie Einladungen für neue Benutzer</p>`
## `src/pages/admin/AdminInvitationsPage.tsx`:278
- **Text:** '-- Mandant wählen --'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="">-- Mandant wählen --</option>`
## `src/pages/admin/AdminInvitationsPage.tsx`:329
- **Text:** 'Kein Mandant ausgewählt'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h3 className={styles.emptyTitle}>Kein Mandant ausgewählt</h3>`
## `src/pages/admin/AdminInvitationsPage.tsx`:350
- **Text:** 'Einladung widerrufen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: 'Einladung widerrufen',`
## `src/pages/admin/AdminInvitationsPage.tsx`:358
- **Text:** 'Einladungs-Link anzeigen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: 'Einladungs-Link anzeigen',`
## `src/pages/admin/AdminInvitationsPage.tsx`:366
- **Text:** 'Keine Einladungen gefunden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` emptyMessage="Keine Einladungen gefunden"`
## `src/pages/admin/AdminInvitationsPage.tsx`:376
- **Text:** 'Neue Einladung erstellen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h2 className={styles.modalTitle}>Neue Einladung erstellen</h2>`
## `src/pages/admin/AdminInvitationsPage.tsx`:388
- **Text:** 'Lade Rollen...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Lade Rollen...</span>`
## `src/pages/admin/AdminInvitationsPage.tsx`:393
- **Text:** 'Lade Formular...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Lade Formular...</span>`
## `src/pages/admin/AdminInvitationsPage.tsx`:401
- **Text:** 'Einladung erstellen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` submitButtonText="Einladung erstellen"`
## `src/pages/admin/AdminInvitationsPage.tsx`:438
- **Text:** 'In Zwischenablage kopieren'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="In Zwischenablage kopieren"`
## `src/pages/admin/AdminInvitationsPage.tsx`:441
- **Text:** ' Kopiert!'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {copySuccess ? ' Kopiert!' : ' Kopieren'}`
## `src/pages/admin/AdminInvitationsPage.tsx`:441
- **Text:** ' Kopieren'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {copySuccess ? ' Kopiert!' : ' Kopieren'}`
## `src/pages/admin/AdminLanguagesPage.tsx`:22
- **Text:** 'Code'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { key: 'id', label: 'Code', type: 'text', sortable: true, filterable: true, width: 90 },`
## `src/pages/admin/AdminLanguagesPage.tsx`:23
- **Text:** 'Bezeichnung'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { key: 'label', label: 'Bezeichnung', type: 'text', sortable: true, filterable: true, width: 160 },`
## `src/pages/admin/AdminLanguagesPage.tsx`:24
- **Text:** 'Status'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { key: 'status', label: 'Status', type: 'text', sortable: true, filterable: true, width: 120 },`
## `src/pages/admin/AdminLanguagesPage.tsx`:25
- **Text:** 'Keys'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { key: 'keysCount', label: 'Keys', type: 'number', sortable: true, width: 90 },`
## `src/pages/admin/AdminLanguagesPage.tsx`:29
- **Text:** 'it — Italiano'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 'it', label: 'it — Italiano' },`
## `src/pages/admin/AdminLanguagesPage.tsx`:30
- **Text:** 'es — Español'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 'es', label: 'es — Español' },`
## `src/pages/admin/AdminLanguagesPage.tsx`:31
- **Text:** 'pt — Português'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 'pt', label: 'pt — Português' },`
## `src/pages/admin/AdminLanguagesPage.tsx`:32
- **Text:** 'nl — Nederlands'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 'nl', label: 'nl — Nederlands' },`
## `src/pages/admin/AdminLanguagesPage.tsx`:33
- **Text:** 'pl — Polski'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 'pl', label: 'pl — Polski' },`
## `src/pages/admin/AdminLanguagesPage.tsx`:34
- **Text:** 'cs — Čeština'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 'cs', label: 'cs — Čeština' },`
## `src/pages/admin/AdminLanguagesPage.tsx`:35
- **Text:** 'sk — Slovenčina'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 'sk', label: 'sk — Slovenčina' },`
## `src/pages/admin/AdminLanguagesPage.tsx`:36
- **Text:** 'sv — Svenska'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 'sv', label: 'sv — Svenska' },`
## `src/pages/admin/AdminLanguagesPage.tsx`:37
- **Text:** 'no — Norsk'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 'no', label: 'no — Norsk' },`
## `src/pages/admin/AdminLanguagesPage.tsx`:38
- **Text:** 'da — Dansk'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 'da', label: 'da — Dansk' },`
## `src/pages/admin/AdminLanguagesPage.tsx`:65
- **Text:** 'Laden fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError(e.response?.data?.detail || e.message || 'Laden fehlgeschlagen');`
## `src/pages/admin/AdminLogsPage.tsx`:49
- **Text:** 'Fehler beim Laden der Logs'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError(err.response?.data?.detail || 'Fehler beim Laden der Logs');`
## `src/pages/admin/AdminLogsPage.tsx`:81
- **Text:** 'Fehler beim Download'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError(err.response?.data?.detail || 'Fehler beim Download');`
## `src/pages/admin/AdminLogsPage.tsx`:107
- **Text:** 'Gateway Logs'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h1 className={styles.pageTitle}>Gateway Logs</h1>`
## `src/pages/admin/AdminLogsPage.tsx`:111
- **Text:** 'Keine Logs geladen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` : 'Keine Logs geladen'}`
## `src/pages/admin/AdminLogsPage.tsx`:112
- **Text:** '— {logDir}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` {logDir && <span className={logStyles.logDirHint}> — {logDir}</span>}`
## `src/pages/admin/AdminLogsPage.tsx`:120
- **Text:** 'Log herunterladen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Log herunterladen"`
## `src/pages/admin/AdminLogsPage.tsx`:139
- **Text:** 'Einträge'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label className={logStyles.controlLabel}>Einträge</label>`
## `src/pages/admin/AdminLogsPage.tsx`:182
- **Text:** 'Keine Logs geladen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.emptyTitle}>Keine Logs geladen</p>`
## `src/pages/admin/AdminLogsPage.tsx`:191
- **Text:** 'Logs werden geladen...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Logs werden geladen...</span>`
## `src/pages/admin/AdminMandateRolePermissionsPage.tsx`:14
- **Text:** 'Cleanup Duplicates'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` * Includes a "Cleanup Duplicates" tool to find and remove duplicate AccessRules.`
## `src/pages/admin/AdminMandateRolePermissionsPage.tsx`:180
- **Text:** 'Fehler beim Laden der Duplikate'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setCleanupError(err?.response?.data?.detail || err?.message || 'Fehler beim Laden der Duplikate');`
## `src/pages/admin/AdminMandateRolePermissionsPage.tsx`:200
- **Text:** 'Fehler beim Bereinigen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setCleanupError(err?.response?.data?.detail || err?.message || 'Fehler beim Bereinigen');`
## `src/pages/admin/AdminMandateRolePermissionsPage.tsx`:215
- **Text:** 'Mandanten-Rollen'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 'mandate', label: 'Mandanten-Rollen' },`
## `src/pages/admin/AdminMandateRolePermissionsPage.tsx`:216
- **Text:** 'Alle (inkl. Templates)'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 'all', label: 'Alle (inkl. Templates)' },`
## `src/pages/admin/AdminMandateRolePermissionsPage.tsx`:217
- **Text:** 'Nur Templates'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 'global', label: 'Nur Templates' },`
## `src/pages/admin/AdminMandateRolePermissionsPage.tsx`:225
- **Text:** 'Fehler beim Laden: {error}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.errorMessage}>Fehler beim Laden: {error}</p>`
## `src/pages/admin/AdminMandateRolePermissionsPage.tsx`:252
- **Text:** 'Doppelte Regeln finden und bereinigen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Doppelte Regeln finden und bereinigen"`
## `src/pages/admin/AdminMandateRolePermissionsPage.tsx`:313
- **Text:** 'Lade Rollen...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Lade Rollen...</span>`
## `src/pages/admin/AdminMandateRolePermissionsPage.tsx`:321
- **Text:** 'Keine Rollen gefunden'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p>Keine Rollen gefunden</p>`
## `src/pages/admin/AdminMandateRolePermissionsPage.tsx`:324
- **Text:** 'Es gibt noch keine Mandanten-Rollen. System-Rollen werden bei der Mandant-Erstellung automatisch kopiert.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` ? 'Es gibt noch keine Mandanten-Rollen. System-Rollen werden bei der Mandant-Erstellung automatisch kopiert.'`
## `src/pages/admin/AdminMandateRolePermissionsPage.tsx`:326
- **Text:** 'Es gibt noch keine Rollen-Templates.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` ? 'Es gibt noch keine Rollen-Templates.'`
## `src/pages/admin/AdminMandateRolePermissionsPage.tsx`:327
- **Text:** 'Es gibt noch keine Rollen für diesen Mandanten.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` : 'Es gibt noch keine Rollen für diesen Mandanten.'}`
## `src/pages/admin/AdminMandateRolePermissionsPage.tsx`:402
- **Text:** 'Analysiere Duplikate...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` <span>{cleanupPhase === 'idle' ? 'Analysiere Duplikate...' : 'Bereinige Duplikate...'}</span>`
## `src/pages/admin/AdminMandateRolePermissionsPage.tsx`:402
- **Text:** 'Bereinige Duplikate...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` <span>{cleanupPhase === 'idle' ? 'Analysiere Duplikate...' : 'Bereinige Duplikate...'}</span>`
## `src/pages/admin/AdminMandateRolePermissionsPage.tsx`:436
- **Text:** 'Zu loeschen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {cleanupPhase === 'done' ? 'Geloescht' : 'Zu loeschen'}`
## `src/pages/admin/AdminMandateRolePermissionsPage.tsx`:445
- **Text:** 'doppelte Regeln wurden erfolgreich entfernt.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span><strong>{cleanupResult.deletedCount}</strong> doppelte Regeln wurden erfolgreich entfernt.</span>`
## `src/pages/admin/AdminMandateRolePermissionsPage.tsx`:452
- **Text:** 'Keine Duplikate gefunden. Alles sauber!'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Keine Duplikate gefunden. Alles sauber!</span>`
## `src/pages/admin/AdminMandateRolePermissionsPage.tsx`:515
- **Text:** 'Zu reparieren'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {cleanupPhase === 'done' ? 'Repariert' : 'Zu reparieren'}`
## `src/pages/admin/AdminMandateRolePermissionsPage.tsx`:566
- **Text:** 'Keine fehlerhaften Template-Rollen-Zuweisungen.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Keine fehlerhaften Template-Rollen-Zuweisungen.</span>`
## `src/pages/admin/AdminMandateRolesPage.tsx`:102
- **Text:** 'Bezeichnung'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Bezeichnung',`
## `src/pages/admin/AdminMandateRolesPage.tsx`:111
- **Text:** 'Beschreibung'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Beschreibung',`
## `src/pages/admin/AdminMandateRolesPage.tsx`:120
- **Text:** 'Geltungsbereich'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Geltungsbereich',`
## `src/pages/admin/AdminMandateRolesPage.tsx`:161
- **Text:** 'Geltungsbereich'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Geltungsbereich',`
## `src/pages/admin/AdminMandateRolesPage.tsx`:166
- **Text:** 'Nur dieser Mandant'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 'mandate', label: 'Nur dieser Mandant' },`
## `src/pages/admin/AdminMandateRolesPage.tsx`:167
- **Text:** 'Template (wird bei neuen Mandanten kopiert)'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 'global', label: 'Template (wird bei neuen Mandanten kopiert)' },`
## `src/pages/admin/AdminMandateRolesPage.tsx`:216
- **Text:** 'Fehler beim Erstellen der Rolle'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Fehler', result.error || 'Fehler beim Erstellen der Rolle');`
## `src/pages/admin/AdminMandateRolesPage.tsx`:220
- **Text:** 'Fehler beim Erstellen der Rolle'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Fehler', err.message || 'Fehler beim Erstellen der Rolle');`
## `src/pages/admin/AdminMandateRolesPage.tsx`:255
- **Text:** 'Fehler beim Aktualisieren der Rolle'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Fehler', result.error || 'Fehler beim Aktualisieren der Rolle');`
## `src/pages/admin/AdminMandateRolesPage.tsx`:259
- **Text:** 'Fehler beim Aktualisieren der Rolle'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Fehler', err.message || 'Fehler beim Aktualisieren der Rolle');`
## `src/pages/admin/AdminMandateRolesPage.tsx`:268
- **Text:** 'Nicht erlaubt'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showWarning('Nicht erlaubt', 'System-Rollen können nicht gelöscht werden.');`
## `src/pages/admin/AdminMandateRolesPage.tsx`:268
- **Text:** 'System-Rollen können nicht gelöscht werden.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showWarning('Nicht erlaubt', 'System-Rollen können nicht gelöscht werden.');`
## `src/pages/admin/AdminMandateRolesPage.tsx`:277
- **Text:** 'Fehler beim Löschen der Rolle'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Fehler', result.error || 'Fehler beim Löschen der Rolle');`
## `src/pages/admin/AdminMandateRolesPage.tsx`:300
- **Text:** 'Fehler: {error}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.errorMessage}>Fehler: {error}</p>`
## `src/pages/admin/AdminMandateRolesPage.tsx`:314
- **Text:** 'Verwalten Sie System-, globale und mandantenspezifische Rollen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.pageSubtitle}>Verwalten Sie System-, globale und mandantenspezifische Rollen</p>`
## `src/pages/admin/AdminMandateRolesPage.tsx`:346
- **Text:** '-- Mandant wählen --'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="">-- Mandant wählen --</option>`
## `src/pages/admin/AdminMandateRolesPage.tsx`:364
- **Text:** 'Alle (inkl. Templates)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="all">Alle (inkl. Templates)</option>`
## `src/pages/admin/AdminMandateRolesPage.tsx`:365
- **Text:** 'Nur Templates'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="global">Nur Templates</option>`
## `src/pages/admin/AdminMandateRolesPage.tsx`:404
- **Text:** 'Kein Mandant ausgewählt'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h3 className={styles.emptyTitle}>Kein Mandant ausgewählt</h3>`
## `src/pages/admin/AdminMandateRolesPage.tsx`:426
- **Text:** 'Rolle bearbeiten'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: 'Rolle bearbeiten',`
## `src/pages/admin/AdminMandateRolesPage.tsx`:427
- **Text:** 'System-Rollen können nicht bearbeitet werden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` disabled: (row: Role) => row.isSystemRole ? { disabled: true, message: 'System-Rollen können nicht bearbeitet werden' } : false`
## `src/pages/admin/AdminMandateRolesPage.tsx`:431
- **Text:** 'Rolle löschen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: 'Rolle löschen',`
## `src/pages/admin/AdminMandateRolesPage.tsx`:432
- **Text:** 'System-Rollen können nicht gelöscht werden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` disabled: (row: Role) => row.isSystemRole ? { disabled: true, message: 'System-Rollen können nicht gelöscht werden' } : false`
## `src/pages/admin/AdminMandateRolesPage.tsx`:441
- **Text:** 'Keine Rollen gefunden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` emptyMessage="Keine Rollen gefunden"`
## `src/pages/admin/AdminMandateRolesPage.tsx`:451
- **Text:** 'Neue Rolle erstellen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h2 className={styles.modalTitle}>Neue Rolle erstellen</h2>`
## `src/pages/admin/AdminMandateRolesPage.tsx`:463
- **Text:** 'Lade Formular...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Lade Formular...</span>`
## `src/pages/admin/AdminMandateRolesPage.tsx`:471
- **Text:** 'Rolle erstellen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` submitButtonText={isSubmitting ? 'Erstelle...' : 'Rolle erstellen'}`
## `src/pages/admin/AdminMandateRolesPage.tsx`:485
- **Text:** 'Rolle bearbeiten: {editingRole.roleLabel}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h2 className={styles.modalTitle}>Rolle bearbeiten: {editingRole.roleLabel}</h2>`
## `src/pages/admin/AdminMandateRolesPage.tsx`:497
- **Text:** 'Lade Formular...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Lade Formular...</span>`
## `src/pages/admin/AdminMandateRolesPage.tsx`:504
- **Text:** 'Template (global)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` Geltungsbereich: <strong>{editingRole.mandateId ? 'Mandanten-Instanz' : 'Template (global)'}</strong>`
## `src/pages/admin/AdminMandatesPage.tsx`:76
- **Text:** 'Abrechnungseinstellungen konnten nicht geladen werden. Nur Mandantendaten sind sicher bearbeitbar.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` 'Abrechnungseinstellungen konnten nicht geladen werden. Nur Mandantendaten sind sicher bearbeitbar.'`
## `src/pages/admin/AdminMandatesPage.tsx`:88
- **Text:** 'Mandant inkl. Abrechnungseinstellungen gespeichert.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Erstellt', 'Mandant inkl. Abrechnungseinstellungen gespeichert.');`
## `src/pages/admin/AdminMandatesPage.tsx`:92
- **Text:** 'Mandant erstellt'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` 'Mandant erstellt',`
## `src/pages/admin/AdminMandatesPage.tsx`:93
- **Text:** 'Abrechnungseinstellungen konnten nicht gespeichert werden. Bitte unter Administration → Abrechnung nachpflegen.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` 'Abrechnungseinstellungen konnten nicht gespeichert werden. Bitte unter Administration → Abrechnung nachpflegen.'`
## `src/pages/admin/AdminMandatesPage.tsx`:108
- **Text:** 'Mandant und Abrechnung aktualisiert.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Gespeichert', 'Mandant und Abrechnung aktualisiert.');`
## `src/pages/admin/AdminMandatesPage.tsx`:111
- **Text:** 'Teilweise gespeichert'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showWarning('Teilweise gespeichert', 'Mandant gespeichert, Abrechnung konnte nicht aktualisiert werden.');`
## `src/pages/admin/AdminMandatesPage.tsx`:111
- **Text:** 'Mandant gespeichert, Abrechnung konnte nicht aktualisiert werden.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showWarning('Teilweise gespeichert', 'Mandant gespeichert, Abrechnung konnte nicht aktualisiert werden.');`
## `src/pages/admin/AdminMandatesPage.tsx`:123
- **Text:** 'Mandant deaktivieren'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` { title: 'Mandant deaktivieren', confirmLabel: 'Deaktivieren', variant: 'danger', placeholder: mandate.name },`
## `src/pages/admin/AdminMandatesPage.tsx`:127
- **Text:** 'Der eingegebene Name stimmt nicht überein.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showWarning('Abgebrochen', 'Der eingegebene Name stimmt nicht überein.');`
## `src/pages/admin/AdminMandatesPage.tsx`:135
- **Text:** 'Nicht erlaubt'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showWarning('Nicht erlaubt', 'System-Mandanten können nicht gelöscht werden.');`
## `src/pages/admin/AdminMandatesPage.tsx`:135
- **Text:** 'System-Mandanten können nicht gelöscht werden.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showWarning('Nicht erlaubt', 'System-Mandanten können nicht gelöscht werden.');`
## `src/pages/admin/AdminMandatesPage.tsx`:140
- **Text:** 'Hard Delete (irreversibel)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` { title: 'Hard Delete (irreversibel)', confirmLabel: 'Endgültig löschen', variant: 'danger', placeholder: mandate.name },`
## `src/pages/admin/AdminMandatesPage.tsx`:140
- **Text:** 'Endgültig löschen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` { title: 'Hard Delete (irreversibel)', confirmLabel: 'Endgültig löschen', variant: 'danger', placeholder: mandate.name },`
## `src/pages/admin/AdminMandatesPage.tsx`:144
- **Text:** 'Der eingegebene Name stimmt nicht überein.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showWarning('Abgebrochen', 'Der eingegebene Name stimmt nicht überein.');`
## `src/pages/admin/AdminMandatesPage.tsx`:149
- **Text:** 'Gelöscht'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Gelöscht', `Mandant "${mandate.name}" wurde endgültig gelöscht.`);`
## `src/pages/admin/AdminMandatesPage.tsx`:158
- **Text:** 'Fehler beim Laden der Mandanten: {error}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.errorMessage}>Fehler beim Laden der Mandanten: {error}</p>`
## `src/pages/admin/AdminMandatesPage.tsx`:172
- **Text:** 'Verwalten Sie alle Mandanten im System'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.pageSubtitle}>Verwalten Sie alle Mandanten im System</p>`
## `src/pages/admin/AdminMandatesPage.tsx`:220
- **Text:** 'Deaktivieren (Soft-Delete)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: 'Deaktivieren (Soft-Delete)',`
## `src/pages/admin/AdminMandatesPage.tsx`:222
- **Text:** 'System-Mandanten können nicht gelöscht werden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` ? { disabled: true, message: 'System-Mandanten können nicht gelöscht werden' }`
## `src/pages/admin/AdminMandatesPage.tsx`:230
- **Text:** 'Hard Delete (irreversibel)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: 'Hard Delete (irreversibel)',`
## `src/pages/admin/AdminMandatesPage.tsx`:232
- **Text:** 'System-Mandanten können nicht gelöscht werden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` ? { disabled: true, message: 'System-Mandanten können nicht gelöscht werden' }`
## `src/pages/admin/AdminMandatesPage.tsx`:244
- **Text:** 'Keine Mandanten gefunden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` emptyMessage="Keine Mandanten gefunden"`
## `src/pages/admin/AdminMandatesPage.tsx`:253
- **Text:** 'Neuer Mandant'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h2 className={styles.modalTitle}>Neuer Mandant</h2>`
## `src/pages/admin/AdminMandatesPage.tsx`:269
- **Text:** 'Lade Formular...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Lade Formular...</span>`
## `src/pages/admin/AdminMandatesPage.tsx`:299
- **Text:** 'Mandant bearbeiten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h2 className={styles.modalTitle}>Mandant bearbeiten</h2>`
## `src/pages/admin/AdminMandatesPage.tsx`:330
- **Text:** 'Lade Formular...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Lade Formular...</span>`
## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:105
- **Text:** 'Failed to fetch users'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError(err?.response?.data?.detail || err?.message || 'Failed to fetch users');`
## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:133
- **Text:** 'Failed to fetch overview'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError(err?.response?.data?.detail || err?.message || 'Failed to fetch overview');`
## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:200
- **Text:** 'Dieser Benutzer ist SysAdmin und hat vollen Systemzugriff.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` <span>{overview.sysAdminNote || 'Dieser Benutzer ist SysAdmin und hat vollen Systemzugriff.'}</span>`
## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:207
- **Text:** 'Keine Mandate-Zuordnungen vorhanden.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.emptyHint}>Keine Mandate-Zuordnungen vorhanden.</p>`
## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:231
- **Text:** 'Keine Rollen direkt am Mandanten.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.emptyHint}>Keine Rollen direkt am Mandanten.</p>`
## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:256
- **Text:** 'Keine Feature-Instanzen zugewiesen.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.emptyHint}>Keine Feature-Instanzen zugewiesen.</p>`
## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:358
- **Text:** 'UI-Zugriffsrechte bestimmen, welche Seiten und Views der Benutzer sehen kann.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>UI-Zugriffsrechte bestimmen, welche Seiten und Views der Benutzer sehen kann.</span>`
## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:364
- **Text:** 'Keine UI-Berechtigungen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h3 className={styles.emptyTitle}>Keine UI-Berechtigungen</h3>`
## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:375
- **Text:** 'Gewährt durch'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <th style={{ textAlign: 'left', padding: '0.75rem', color: 'var(--text-secondary)' }}>Gewährt durch</th>`
## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:383
- **Text:** '1px solid var(--border-color)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` borderBottom: '1px solid var(--border-color)',`
## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:425
- **Text:** 'Keine Daten-Berechtigungen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h3 className={styles.emptyTitle}>Keine Daten-Berechtigungen</h3>`
## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:438
- **Text:** 'Löschen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <th style={{ textAlign: 'center', padding: '0.75rem', color: 'var(--text-secondary)', width: '70px' }}>Löschen</th>`
## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:439
- **Text:** 'Gewährt durch'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <th style={{ textAlign: 'left', padding: '0.75rem', color: 'var(--text-secondary)' }}>Gewährt durch</th>`
## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:447
- **Text:** '1px solid var(--border-color)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` borderBottom: '1px solid var(--border-color)',`
## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:521
- **Text:** 'Ressourcen-Zugriffsrechte bestimmen, welche System-Ressourcen (z.B. AI-Modelle) der Benutzer verwenden kann.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Ressourcen-Zugriffsrechte bestimmen, welche System-Ressourcen (z.B. AI-Modelle) der Benutzer verwenden kann.</span>`
## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:527
- **Text:** 'Keine Ressourcen-Berechtigungen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h3 className={styles.emptyTitle}>Keine Ressourcen-Berechtigungen</h3>`
## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:538
- **Text:** 'Gewährt durch'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <th style={{ textAlign: 'left', padding: '0.75rem', color: 'var(--text-secondary)' }}>Gewährt durch</th>`
## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:546
- **Text:** '1px solid var(--border-color)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` borderBottom: '1px solid var(--border-color)',`
## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:577
- **Text:** 'Fehler: {error}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.errorMessage}>Fehler: {error}</p>`
## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:593
- **Text:** 'Benutzer-Zugriffsübersicht'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h1 className={styles.pageTitle}>Benutzer-Zugriffsübersicht</h1>`
## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:594
- **Text:** 'Zeigt alle Berechtigungen eines Benutzers an'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.pageSubtitle}>Zeigt alle Berechtigungen eines Benutzers an</p>`
## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:612
- **Text:** '-- Benutzer wählen --'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="">-- Benutzer wählen --</option>`
## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:616
- **Text:** ' [SysAdmin]'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {user.isSysAdmin && ' [SysAdmin]'}`
## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:637
- **Text:** 'Benutzer auswählen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h3 className={styles.emptyTitle}>Benutzer auswählen</h3>`
## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:645
- **Text:** 'Lade Zugriffsübersicht...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Lade Zugriffsübersicht...</span>`
## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:669
- **Text:** '1px solid var(--border-color)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` borderBottom: '1px solid var(--border-color)',`
## `src/pages/admin/AdminUserMandatesPage.tsx`:100
- **Text:** 'Benutzername'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Benutzername',`
## `src/pages/admin/AdminUserMandatesPage.tsx`:109
- **Text:** 'E-Mail'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'E-Mail',`
## `src/pages/admin/AdminUserMandatesPage.tsx`:118
- **Text:** 'Vollständiger Name'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Vollständiger Name',`
## `src/pages/admin/AdminUserMandatesPage.tsx`:127
- **Text:** 'Rollen'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Rollen',`
## `src/pages/admin/AdminUserMandatesPage.tsx`:140
- **Text:** 'Aktiv'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Aktiv',`
## `src/pages/admin/AdminUserMandatesPage.tsx`:211
- **Text:** 'Fehler beim Hinzufügen des Benutzers'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Fehler', result.error || 'Fehler beim Hinzufügen des Benutzers');`
## `src/pages/admin/AdminUserMandatesPage.tsx`:228
- **Text:** 'Fehler beim Aktualisieren der Rollen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Fehler', result.error || 'Fehler beim Aktualisieren der Rollen');`
## `src/pages/admin/AdminUserMandatesPage.tsx`:240
- **Text:** 'Fehler beim Entfernen des Benutzers'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Fehler', result.error || 'Fehler beim Entfernen des Benutzers');`
## `src/pages/admin/AdminUserMandatesPage.tsx`:263
- **Text:** 'Fehler: {error}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.errorMessage}>Fehler: {error}</p>`
## `src/pages/admin/AdminUserMandatesPage.tsx`:277
- **Text:** 'Verwalten Sie, welche Benutzer Zugriff auf welche Mandanten haben'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.pageSubtitle}>Verwalten Sie, welche Benutzer Zugriff auf welche Mandanten haben</p>`
## `src/pages/admin/AdminUserMandatesPage.tsx`:293
- **Text:** '-- Mandant wählen --'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="">-- Mandant wählen --</option>`
## `src/pages/admin/AdminUserMandatesPage.tsx`:326
- **Text:** 'Kein Mandant ausgewählt'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h3 className={styles.emptyTitle}>Kein Mandant ausgewählt</h3>`
## `src/pages/admin/AdminUserMandatesPage.tsx`:348
- **Text:** 'Rollen bearbeiten'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: 'Rollen bearbeiten',`
## `src/pages/admin/AdminUserMandatesPage.tsx`:352
- **Text:** 'Aus Mandant entfernen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: 'Aus Mandant entfernen',`
## `src/pages/admin/AdminUserMandatesPage.tsx`:369
- **Text:** 'Keine Mitglieder gefunden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` emptyMessage="Keine Mitglieder gefunden"`
## `src/pages/admin/AdminUserMandatesPage.tsx`:379
- **Text:** 'Benutzer zum Mandanten hinzufügen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h2 className={styles.modalTitle}>Benutzer zum Mandanten hinzufügen</h2>`
## `src/pages/admin/AdminUserMandatesPage.tsx`:389
- **Text:** 'Alle Benutzer sind bereits diesem Mandanten zugewiesen.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p>Alle Benutzer sind bereits diesem Mandanten zugewiesen.</p>`
## `src/pages/admin/AdminUserMandatesPage.tsx`:393
- **Text:** 'Lade Rollen...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Lade Rollen...</span>`
## `src/pages/admin/AdminUserMandatesPage.tsx`:401
- **Text:** 'Hinzufügen...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` submitButtonText={isSubmitting ? 'Hinzufügen...' : 'Hinzufügen'}`
## `src/pages/admin/AdminUserMandatesPage.tsx`:401
- **Text:** 'Hinzufügen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` submitButtonText={isSubmitting ? 'Hinzufügen...' : 'Hinzufügen'}`
## `src/pages/admin/AdminUserMandatesPage.tsx`:415
- **Text:** 'Rollen bearbeiten: {editingUser.username}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h2 className={styles.modalTitle}>Rollen bearbeiten: {editingUser.username}</h2>`
## `src/pages/admin/AdminUsersPage.tsx`:131
- **Text:** 'Fehler beim Laden der Benutzer: {error}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.errorMessage}>Fehler beim Laden der Benutzer: {error}</p>`
## `src/pages/admin/AdminUsersPage.tsx`:145
- **Text:** 'Verwalten Sie alle Benutzer im System'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.pageSubtitle}>Verwalten Sie alle Benutzer im System</p>`
## `src/pages/admin/AdminUsersPage.tsx`:200
- **Text:** 'Löschen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: 'Löschen',`
## `src/pages/admin/AdminUsersPage.tsx`:208
- **Text:** 'Passwort-Link senden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: 'Passwort-Link senden',`
## `src/pages/admin/AdminUsersPage.tsx`:221
- **Text:** 'Keine Benutzer gefunden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` emptyMessage="Keine Benutzer gefunden"`
## `src/pages/admin/AdminUsersPage.tsx`:230
- **Text:** 'Neuer Benutzer'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h2 className={styles.modalTitle}>Neuer Benutzer</h2>`
## `src/pages/admin/AdminUsersPage.tsx`:242
- **Text:** 'Lade Formular...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Lade Formular...</span>`
## `src/pages/admin/AdminUsersPage.tsx`:264
- **Text:** 'Benutzer bearbeiten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h2 className={styles.modalTitle}>Benutzer bearbeiten</h2>`
## `src/pages/admin/AdminUsersPage.tsx`:276
- **Text:** 'Lade Formular...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Lade Formular...</span>`
## `src/pages/admin/ChatbotConfigSection.tsx`:14
- **Text:** 'Anthropic (Claude)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` anthropic: 'Anthropic (Claude)',`
## `src/pages/admin/ChatbotConfigSection.tsx`:15
- **Text:** 'OpenAI (GPT)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` openai: 'OpenAI (GPT)',`
## `src/pages/admin/ChatbotConfigSection.tsx`:17
- **Text:** 'Tavily (Web Search)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` tavily: 'Tavily (Web Search)',`
## `src/pages/admin/ChatbotConfigSection.tsx`:18
- **Text:** 'Private LLM'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` privatellm: 'Private LLM',`
## `src/pages/admin/ChatbotConfigSection.tsx`:57
- **Text:** 'Althaus Preprocessor'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { id: 'preprocessor', label: 'Althaus Preprocessor', value: 'preprocessor' }`
## `src/pages/admin/ChatbotConfigSection.tsx`:113
- **Text:** 'Web Research aktivieren (Tavily)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Web Research aktivieren (Tavily)</span>`
## `src/pages/admin/ChatbotConfigSection.tsx`:158
- **Text:** 'Benutzerdefinierter System-Prompt für den Chatbot...'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Benutzerdefinierter System-Prompt für den Chatbot..."`
## `src/pages/admin/InstanceDetailModal.tsx`:115
- **Text:** 'Benutzer hinzugefügt'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Benutzer hinzugefügt', 'Der Benutzer wurde der Instanz hinzugefügt.');`
## `src/pages/admin/InstanceDetailModal.tsx`:115
- **Text:** 'Der Benutzer wurde der Instanz hinzugefügt.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Benutzer hinzugefügt', 'Der Benutzer wurde der Instanz hinzugefügt.');`
## `src/pages/admin/InstanceDetailModal.tsx`:117
- **Text:** 'Fehler beim Hinzufügen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Fehler', result.error || 'Fehler beim Hinzufügen');`
## `src/pages/admin/InstanceDetailModal.tsx`:126
- **Text:** 'Benutzer entfernt'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Benutzer entfernt', `"${user.username}" wurde entfernt.`);`
## `src/pages/admin/InstanceDetailModal.tsx`:128
- **Text:** 'Fehler beim Entfernen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Fehler', result.error || 'Fehler beim Entfernen');`
## `src/pages/admin/InstanceDetailModal.tsx`:146
- **Text:** 'Rollen und Status wurden gespeichert.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Aktualisiert', 'Rollen und Status wurden gespeichert.');`
## `src/pages/admin/InstanceDetailModal.tsx`:148
- **Text:** 'Fehler beim Speichern'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Fehler', result.error || 'Fehler beim Speichern');`
## `src/pages/admin/InstanceDetailModal.tsx`:160
- **Text:** 'Rollen synchronisiert'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` 'Rollen synchronisiert',`
## `src/pages/admin/InstanceDetailModal.tsx`:164
- **Text:** 'Synchronisierung fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Fehler', result.error || 'Synchronisierung fehlgeschlagen');`
## `src/pages/admin/InstanceDetailModal.tsx`:175
- **Text:** 'Instanz aktualisiert'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Instanz aktualisiert', 'Einstellungen wurden gespeichert.');`
## `src/pages/admin/InstanceDetailModal.tsx`:175
- **Text:** 'Einstellungen wurden gespeichert.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Instanz aktualisiert', 'Einstellungen wurden gespeichert.');`
## `src/pages/admin/InstanceDetailModal.tsx`:177
- **Text:** 'Fehler beim Speichern'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Fehler', result.error || 'Fehler beim Speichern');`
## `src/pages/admin/InstanceDetailModal.tsx`:185
- **Text:** 'Benutzer'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Benutzer',`
## `src/pages/admin/InstanceDetailModal.tsx`:195
- **Text:** 'Rollen'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Rollen',`
## `src/pages/admin/InstanceDetailModal.tsx`:208
- **Text:** 'Rollen'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Rollen',`
## `src/pages/admin/InstanceDetailModal.tsx`:215
- **Text:** 'Aktiv'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Aktiv',`
## `src/pages/admin/InstanceDetailModal.tsx`:226
- **Text:** 'Benutzer'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Benutzer',`
## `src/pages/admin/InstanceDetailModal.tsx`:232
- **Text:** 'Lade Benutzer...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Lade Benutzer...</span>`
## `src/pages/admin/InstanceDetailModal.tsx`:248
- **Text:** 'Rollen'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Rollen',`
## `src/pages/admin/InstanceDetailModal.tsx`:272
- **Text:** 'Einstellungen'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Einstellungen',`
## `src/pages/admin/InstanceDetailModal.tsx`:277
- **Text:** 'Bezeichnung'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { name: 'label', type: 'string' as const, label: 'Bezeichnung', required: true, editable: true },`
## `src/pages/admin/InstanceDetailModal.tsx`:278
- **Text:** 'Aktiviert'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { name: 'enabled', type: 'boolean' as const, label: 'Aktiviert', required: false, editable: true },`
## `src/pages/admin/InstanceDetailModal.tsx`:302
- **Text:** 'Schließen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <button type="button" className={styles.modalClose} onClick={onClose} aria-label="Schließen">`
## `src/pages/admin/InstanceDetailModal.tsx`:315
- **Text:** 'Benutzer hinzufügen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h2 className={styles.modalTitle}>Benutzer hinzufügen</h2>`
## `src/pages/admin/InstanceDetailModal.tsx`:322
- **Text:** 'Alle Mandanten-Benutzer haben bereits Zugriff.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p>Alle Mandanten-Benutzer haben bereits Zugriff.</p>`
## `src/pages/admin/InstanceDetailModal.tsx`:331
- **Text:** 'Hinzufügen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` submitButtonText="Hinzufügen"`
## `src/pages/admin/InstanceDetailModal.tsx`:344
- **Text:** 'Rollen: {editingUser.username}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h2 className={styles.modalTitle}>Rollen: {editingUser.username}</h2>`
## `src/pages/admin/InstanceHierarchyView.tsx`:129
- **Text:** 'Benutzer verwalten'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Benutzer verwalten"`
## `src/pages/admin/InstanceHierarchyView.tsx`:189
- **Text:** 'Lade Hierarchie und Benutzer...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Lade Hierarchie und Benutzer...</span>`
## `src/pages/admin/InstanceHierarchyView.tsx`:266
- **Text:** 'Keine Rollen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` : 'Keine Rollen';`
## `src/pages/admin/InstanceHierarchyView.tsx`:286
- **Text:** 'Zugang: {statusText}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={hierarchyStyles.tooltipStatus}>Zugang: {statusText}</div>`
## `src/pages/admin/PermissionMatrix.tsx`:38
- **Text:** 'Benutzer entfernen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: 'Benutzer entfernen',`
## `src/pages/admin/PermissionMatrix.tsx`:51
- **Text:** 'Keine Rollen in dieser Instanz. Bitte zuerst Rollen synchronisieren.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p>Keine Rollen in dieser Instanz. Bitte zuerst Rollen synchronisieren.</p>`
## `src/pages/admin/PermissionMatrix.tsx`:114
- **Text:** 'Rollen bearbeiten'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Rollen bearbeiten"`
## `src/pages/admin/PermissionMatrix.tsx`:123
- **Text:** 'Aus Instanz entfernen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Aus Instanz entfernen"`
## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:5
- **Text:** 'Invite to mandate'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` * 1. Choose invite type: "Invite to mandate" OR "Invite to feature instance"`
## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:5
- **Text:** 'Invite to feature instance'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` * 1. Choose invite type: "Invite to mandate" OR "Invite to feature instance"`
## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:67
- **Text:** '1px solid var(--border-color, #C5D9E8)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: '1px solid var(--border-color, #C5D9E8)',`
## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:172
- **Text:** 'Bitte mindestens eine E-Mail-Adresse oder einen Benutzernamen angeben.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError('Bitte mindestens eine E-Mail-Adresse oder einen Benutzernamen angeben.');`
## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:178
- **Text:** 'Diese E-Mail ist bereits in der Liste'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError('Diese E-Mail ist bereits in der Liste');`
## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:182
- **Text:** 'Dieser Benutzername ist bereits in der Liste'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError('Dieser Benutzername ist bereits in der Liste');`
## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:197
- **Text:** 'Bitte wählen Sie einen Benutzer'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError('Bitte wählen Sie einen Benutzer');`
## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:204
- **Text:** 'Dieser Benutzer ist bereits in der Liste'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError('Dieser Benutzer ist bereits in der Liste');`
## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:234
- **Text:** 'Bitte wählen Sie eine Feature-Instanz aus.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError('Bitte wählen Sie eine Feature-Instanz aus.');`
## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:273
- **Text:** 'Fehler beim Versand'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError(err?.response?.data?.detail || err?.message || 'Fehler beim Versand');`
## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:295
- **Text:** 'Mandant & Instanz'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` ? ['Art', 'Mandant & Instanz', 'Einladungen', 'Zusammenfassung']`
## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:356
- **Text:** 'Wohin möchten Sie einladen?'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h3 style={{ margin: '0 0 16px 0', fontSize: '16px' }}>Wohin möchten Sie einladen?</h3>`
## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:397
- **Text:** 'Mandant auswählen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {inviteType === 'mandate' ? 'Mandant auswählen' : 'Mandant und Feature-Instanz auswählen'}`
## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:397
- **Text:** 'Mandant und Feature-Instanz auswählen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {inviteType === 'mandate' ? 'Mandant auswählen' : 'Mandant und Feature-Instanz auswählen'}`
## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:400
- **Text:** 'Mandant *'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label className={styles.formLabel}>Mandant *</label>`
## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:411
- **Text:** '-- Mandant wählen --'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="">-- Mandant wählen --</option>`
## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:419
- **Text:** 'Feature-Instanz *'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label className={styles.formLabel}>Feature-Instanz *</label>`
## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:421
- **Text:** 'Keine Feature-Instanzen für diesen Mandanten vorhanden.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p style={{ fontSize: '13px', color: 'var(--text-secondary)' }}>Keine Feature-Instanzen für diesen Mandanten vorhanden.</p>`
## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:432
- **Text:** '-- Feature-Instanz wählen --'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="">-- Feature-Instanz wählen --</option>`
## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:435
- **Text:** ' (deaktiviert)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` const suffix = inst.enabled === false ? ' (deaktiviert)' : '';`
## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:445
- **Text:** 'setStep(1)}>&larr; Zurück'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <button className={styles.secondaryButton} onClick={() => setStep(1)}>&larr; Zurück</button>`
## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:461
- **Text:** 'Einladungen hinzufügen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h3 style={{ margin: '0 0 8px 0', fontSize: '16px' }}>Einladungen hinzufügen</h3>`
## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:487
- **Text:** 'E-Mail (optional)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label className={styles.formLabel}>E-Mail (optional)</label>`
## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:493
- **Text:** 'beispiel@firma.com'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="beispiel@firma.com"`
## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:497
- **Text:** 'Benutzername (optional)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label className={styles.formLabel}>Benutzername (optional)</label>`
## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:504
- **Text:** 'z. B. vorname.nachname'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="z. B. vorname.nachname"`
## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:512
- **Text:** "Rolle{inviteType === 'featureInstance' ? ' (pro Instanz)' : ''} *"
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label className={styles.formLabel}>Rolle{inviteType === 'featureInstance' ? ' (pro Instanz)' : ''} *</label>`
## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:512
- **Text:** ' (pro Instanz)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` <label className={styles.formLabel}>Rolle{inviteType === 'featureInstance' ? ' (pro Instanz)' : ''} *</label>`
## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:552
- **Text:** 'Bestehender Benutzer *'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label className={styles.formLabel}>Bestehender Benutzer *</label>`
## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:559
- **Text:** '-- Benutzer wählen --'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="">-- Benutzer wählen --</option>`
## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:566
- **Text:** 'Keine weiteren Benutzer verfügbar.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` {availableExistingUsers.length === 0 && <p style={{ fontSize: '12px', color: 'var(--text-secondary)', marginTop: '4px' }}>Keine weiteren Benutzer verfügbar.</p>}`
## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:570
- **Text:** 'Rolle *'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label className={styles.formLabel}>Rolle *</label>`
## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:644
- **Text:** 'Noch keine Einladungen hinzugefügt.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p style={{ color: 'var(--text-secondary)', fontSize: '13px', marginBottom: '16px' }}>Noch keine Einladungen hinzugefügt.</p>`
## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:649
- **Text:** 'setStep(2)}>&larr; Zurück'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <button className={styles.secondaryButton} onClick={() => setStep(2)}>&larr; Zurück</button>`
## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:666
- **Text:** 'Einladung zum Mandanten'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` <strong>Art:</strong> {inviteType === 'mandate' ? 'Einladung zum Mandanten' : 'Einladung zur Feature-Instanz'}`
## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:666
- **Text:** 'Einladung zur Feature-Instanz'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` <strong>Art:</strong> {inviteType === 'mandate' ? 'Einladung zum Mandanten' : 'Einladung zur Feature-Instanz'}`
## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:677
- **Text:** 'Einladungen ({invitees.length}):'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <strong>Einladungen ({invitees.length}):</strong>`
## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:689
- **Text:** 'setStep(3)}>&larr; Zurück'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <button className={styles.secondaryButton} onClick={() => setStep(3)}>&larr; Zurück</button>`
## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:695
- **Text:** 'Wird versendet...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {isLoading ? 'Wird versendet...' : `${invitees.length} Einladungen versenden`}`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:84
- **Text:** ''
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` const [instanceForm, setInstanceForm] = useState({ label: '', enabled: true });`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:136
- **Text:** 'Fehler beim Laden der Mandanten'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError('Fehler beim Laden der Mandanten');`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:230
- **Text:** 'Mandant erstellt'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` 'Mandant erstellt',`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:231
- **Text:** 'Abrechnungseinstellungen konnten nicht gespeichert werden. Bitte unter Administration → Abrechnung nachpflegen.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` 'Abrechnungseinstellungen konnten nicht gespeichert werden. Bitte unter Administration → Abrechnung nachpflegen.',`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:237
- **Text:** 'Mandant inkl. Abrechnung gespeichert'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Erstellt', 'Mandant inkl. Abrechnung gespeichert');`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:243
- **Text:** 'Fehler beim Erstellen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError(e?.response?.data?.detail || e?.message || 'Fehler beim Erstellen');`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:267
- **Text:** 'Hinzugefügt'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Hinzugefügt', `${ok} Benutzer zum Mandanten hinzugefügt`);`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:272
- **Text:** 'Teilweise fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` 'Teilweise fehlgeschlagen',`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:287
- **Text:** 'Benutzer aus Mandant entfernt'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Entfernt', 'Benutzer aus Mandant entfernt');`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:290
- **Text:** 'Fehler beim Entfernen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError(result.error || 'Fehler beim Entfernen');`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:306
- **Text:** ''
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` setInstanceForm({ label: '', enabled: true });`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:307
- **Text:** 'Instance erstellt'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Erstellt', 'Instance erstellt');`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:310
- **Text:** 'Fehler beim Erstellen (Limit erreicht?)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError(result.error || 'Fehler beim Erstellen (Limit erreicht?)');`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:321
- **Text:** 'Gelöscht'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Gelöscht', 'Instance gelöscht');`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:321
- **Text:** 'Instance gelöscht'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Gelöscht', 'Instance gelöscht');`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:324
- **Text:** 'Fehler beim Löschen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError(result.error || 'Fehler beim Löschen');`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:346
- **Text:** 'Hinzugefügt'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Hinzugefügt', `${ok} Benutzer zur Feature-Instanz hinzugefügt`);`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:351
- **Text:** 'Teilweise fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` 'Teilweise fehlgeschlagen',`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:368
- **Text:** 'Rollen aktualisiert'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Gespeichert', 'Rollen aktualisiert');`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:373
- **Text:** 'Rollen konnten nicht gespeichert werden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Fehler', r.error || 'Rollen konnten nicht gespeichert werden');`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:389
- **Text:** 'Rollen aktualisiert'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Gespeichert', 'Rollen aktualisiert');`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:394
- **Text:** 'Rollen konnten nicht gespeichert werden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Fehler', r.error || 'Rollen konnten nicht gespeichert werden');`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:403
- **Text:** 'Benutzer aus Feature-Instanz entfernt'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Entfernt', 'Benutzer aus Feature-Instanz entfernt');`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:406
- **Text:** 'Fehler beim Entfernen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError(result.error || 'Fehler beim Entfernen');`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:483
- **Text:** '1px solid var(--border-color, #e5e7eb)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: '1px solid var(--border-color, #e5e7eb)',`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:535
- **Text:** 'Benutzer * (mehrfach möglich)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label className={styles.formLabel}>Benutzer * (mehrfach möglich)</label>`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:540
- **Text:** '1px solid var(--border-color, #e5e7eb)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: '1px solid var(--border-color, #e5e7eb)',`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:576
- **Text:** 'Rollen (für alle ausgewählten Benutzer)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label className={styles.formLabel}>Rollen (für alle ausgewählten Benutzer)</label>`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:604
- **Text:** 'Hinzufügen...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {isLoading ? 'Hinzufügen...' : 'Hinzufügen'}`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:604
- **Text:** 'Hinzufügen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {isLoading ? 'Hinzufügen...' : 'Hinzufügen'}`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:633
- **Text:** 'background 0.2s'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` transition: 'background 0.2s',`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:657
- **Text:** '1px solid var(--border-color, #e5e7eb)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: '1px solid var(--border-color, #e5e7eb)',`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:671
- **Text:** 'Schritt-für-Schritt Wizard zur Mandanten-Konfiguration'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.pageSubtitle}>Schritt-für-Schritt Wizard zur Mandanten-Konfiguration</p>`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:679
- **Text:** '1px solid var(--danger-color, #fecaca)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: '1px solid var(--danger-color, #fecaca)',`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:691
- **Text:** 'Mandant auswählen oder erstellen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h3 style={{ fontSize: '15px', fontWeight: 600, marginBottom: '16px', marginTop: 0 }}>Mandant auswählen oder erstellen</h3>`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:726
- **Text:** 'Formular wird geladen...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Formular wird geladen...</span>`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:734
- **Text:** 'Mandant erstellen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` submitButtonText={isLoading ? 'Erstellen...' : 'Mandant erstellen'}`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:786
- **Text:** '1px solid var(--border-color, #e5e7eb)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: '1px solid var(--border-color, #e5e7eb)',`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:836
- **Text:** 'setStep(1)}>&larr; Zurück'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <button className={styles.secondaryButton} onClick={() => setStep(1)}>&larr; Zurück</button>`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:858
- **Text:** 'Feature filtern:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label className={styles.formLabel}>Feature filtern:</label>`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:864
- **Text:** 'Alle Features'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="">Alle Features</option>`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:875
- **Text:** '1px solid var(--border-color, #e5e7eb)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: '1px solid var(--border-color, #e5e7eb)',`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:914
- **Text:** 'Feature *'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label className={styles.formLabel}>Feature *</label>`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:921
- **Text:** '-- Feature wählen --'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="">-- Feature wählen --</option>`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:933
- **Text:** 'z.B. Kunde A'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="z.B. Kunde A"`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:954
- **Text:** 'setStep(2)}>&larr; Zurück'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <button className={styles.secondaryButton} onClick={() => setStep(2)}>&larr; Zurück</button>`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:1003
- **Text:** '1px solid var(--border-color, #e5e7eb)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: '1px solid var(--border-color, #e5e7eb)',`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:1058
- **Text:** 'setStep(3)}>&larr; Zurück'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <button className={styles.secondaryButton} onClick={() => setStep(3)}>&larr; Zurück</button>`
## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:1060
- **Text:** 'Konfiguration abgeschlossen!'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Fertig', 'Konfiguration abgeschlossen!');`
## `src/pages/admin/wizards/FeatureInstanceWizard.tsx`:36
- **Text:** 'Instanz erstellen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` { id: 'create', title: 'Instanz erstellen' },`
## `src/pages/admin/wizards/FeatureInstanceWizard.tsx`:38
- **Text:** 'Benutzer (optional)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` { id: 'users', title: 'Benutzer (optional)' },`
## `src/pages/admin/wizards/FeatureInstanceWizard.tsx`:74
- **Text:** 'Mandant'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { name: 'mandateId', label: 'Mandant', type: 'enum' as const, required: true, options: mandateOptions },`
## `src/pages/admin/wizards/FeatureInstanceWizard.tsx`:75
- **Text:** 'Feature'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { name: 'featureCode', label: 'Feature', type: 'enum' as const, required: true, options: featureOptions },`
## `src/pages/admin/wizards/FeatureInstanceWizard.tsx`:76
- **Text:** 'Bezeichnung'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { name: 'label', label: 'Bezeichnung', type: 'string' as const, required: true, editable: true },`
## `src/pages/admin/wizards/FeatureInstanceWizard.tsx`:77
- **Text:** 'Aktiv'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { name: 'enabled', label: 'Aktiv', type: 'boolean' as const, required: false, editable: true },`
## `src/pages/admin/wizards/FeatureInstanceWizard.tsx`:104
- **Text:** 'Instanz konnte nicht erstellt werden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Fehler', result.error || 'Instanz konnte nicht erstellt werden');`
## `src/pages/admin/wizards/FeatureInstanceWizard.tsx`:152
- **Text:** 'Feature-Instanz wurde erstellt und Benutzer zugewiesen.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Fertig', 'Feature-Instanz wurde erstellt und Benutzer zugewiesen.');`
## `src/pages/admin/wizards/FeatureInstanceWizard.tsx`:155
- **Text:** 'Einige Benutzer konnten nicht zugewiesen werden.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Fehler', 'Einige Benutzer konnten nicht zugewiesen werden.');`
## `src/pages/admin/wizards/FeatureInstanceWizard.tsx`:175
- **Text:** 'Neue Feature-Instanz'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h2 className={styles.modalTitle}>Neue Feature-Instanz</h2>`
## `src/pages/admin/wizards/FeatureInstanceWizard.tsx`:176
- **Text:** 'Schließen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <button type="button" className={styles.modalClose} onClick={onClose} aria-label="Schließen">`
## `src/pages/admin/wizards/FeatureInstanceWizard.tsx`:243
- **Text:** 'Keine Mandanten-Benutzer vorhanden.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={wizardStyles.stepText}>Keine Mandanten-Benutzer vorhanden.</p>`
## `src/pages/admin/wizards/FeatureInstanceWizard.tsx`:261
- **Text:** '— Keine Rolle —'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="">— Keine Rolle —</option>`
## `src/pages/basedata/ConnectionsPage.tsx`:237
- **Text:** 'Fehler beim Laden der Verbindungen: {error}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.errorMessage}>Fehler beim Laden der Verbindungen: {error}</p>`
## `src/pages/basedata/ConnectionsPage.tsx`:253
- **Text:** ', ClickUp'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {isClickupConnectionUiEnabled ? ', ClickUp' : ''})`
## `src/pages/basedata/ConnectionsPage.tsx`:261
- **Text:** 'Microsoft Admin Consent — erteilt der App die nötigen Berechtigungen für den gesamten Tenant'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Microsoft Admin Consent — erteilt der App die nötigen Berechtigungen für den gesamten Tenant"`
## `src/pages/basedata/ConnectionsPage.tsx`:294
- **Text:** 'ClickUp-Konto verbinden'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="ClickUp-Konto verbinden"`
## `src/pages/basedata/ConnectionsPage.tsx`:324
- **Text:** 'Löschen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: 'Löschen',`
## `src/pages/basedata/ConnectionsPage.tsx`:343
- **Text:** 'Token erneuern'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: 'Token erneuern',`
## `src/pages/basedata/ConnectionsPage.tsx`:357
- **Text:** 'Keine Verbindungen gefunden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` emptyMessage="Keine Verbindungen gefunden"`
## `src/pages/basedata/ConnectionsPage.tsx`:366
- **Text:** 'Verbindung bearbeiten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h2 className={styles.modalTitle}>Verbindung bearbeiten</h2>`
## `src/pages/basedata/ConnectionsPage.tsx`:378
- **Text:** 'Lade Formular...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Lade Formular...</span>`
## `src/pages/basedata/FilesPage.tsx`:148
- **Text:** 'Created By'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Created By',`
## `src/pages/basedata/FilesPage.tsx`:218
- **Text:** 'Upload erfolgreich'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` 'Upload erfolgreich',`
## `src/pages/basedata/FilesPage.tsx`:222
- **Text:** 'Upload fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Upload fehlgeschlagen', `${errorCount} Datei(en) konnten nicht hochgeladen werden`);`
## `src/pages/basedata/FilesPage.tsx`:228
- **Text:** 'Neuer Ordnername:'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` const name = await promptInput('Neuer Ordnername:', { title: 'Neuer Ordner', placeholder: 'Ordnername' });`
## `src/pages/basedata/FilesPage.tsx`:228
- **Text:** 'Neuer Ordner'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` const name = await promptInput('Neuer Ordnername:', { title: 'Neuer Ordner', placeholder: 'Ordnername' });`
## `src/pages/basedata/FilesPage.tsx`:303
- **Text:** 'Fehler beim Laden der Dateien: {error}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.errorMessage}>Fehler beim Laden der Dateien: {error}</p>`
## `src/pages/basedata/FilesPage.tsx`:344
- **Text:** '1px solid var(--color-border, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` borderRight: '1px solid var(--color-border, #e0e0e0)',`
## `src/pages/basedata/FilesPage.tsx`:385
- **Text:** 'background 0.15s'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` transition: isDragging ? 'none' : 'background 0.15s',`
## `src/pages/basedata/FilesPage.tsx`:398
- **Text:** '1px solid var(--color-border, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` borderBottom: '1px solid var(--color-border, #e0e0e0)',`
## `src/pages/basedata/FilesPage.tsx`:406
- **Text:** 'Datei hochladen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` <FaUpload /> {uploadingFile ? 'Uploading...' : 'Datei hochladen'}`
## `src/pages/basedata/FilesPage.tsx`:438
- **Text:** 'Löschen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: 'Löschen',`
## `src/pages/basedata/FilesPage.tsx`:468
- **Text:** 'Keine Dateien gefunden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` emptyMessage="Keine Dateien gefunden"`
## `src/pages/basedata/FilesPage.tsx`:479
- **Text:** 'Datei bearbeiten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h2 className={styles.modalTitle}>Datei bearbeiten</h2>`
## `src/pages/basedata/FilesPage.tsx`:486
- **Text:** 'Lade Formular...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Lade Formular...</span>`
## `src/pages/basedata/PromptsPage.tsx`:77
- **Text:** 'Created By'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Created By',`
## `src/pages/basedata/PromptsPage.tsx`:161
- **Text:** 'Fehler beim Laden der Prompts: {error}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.errorMessage}>Fehler beim Laden der Prompts: {error}</p>`
## `src/pages/basedata/PromptsPage.tsx`:175
- **Text:** 'Prompt-Templates verwalten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.pageSubtitle}>Prompt-Templates verwalten</p>`
## `src/pages/basedata/PromptsPage.tsx`:221
- **Text:** 'Löschen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: 'Löschen',`
## `src/pages/basedata/PromptsPage.tsx`:234
- **Text:** 'Keine Prompts gefunden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` emptyMessage="Keine Prompts gefunden"`
## `src/pages/basedata/PromptsPage.tsx`:243
- **Text:** 'Neuer Prompt'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h2 className={styles.modalTitle}>Neuer Prompt</h2>`
## `src/pages/basedata/PromptsPage.tsx`:255
- **Text:** 'Lade Formular...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Lade Formular...</span>`
## `src/pages/basedata/PromptsPage.tsx`:277
- **Text:** 'Prompt bearbeiten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h2 className={styles.modalTitle}>Prompt bearbeiten</h2>`
## `src/pages/basedata/PromptsPage.tsx`:289
- **Text:** 'Lade Formular...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Lade Formular...</span>`
## `src/pages/billing/AdminSubscriptionsPage.tsx`:11
- **Text:** 'Mandant'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { key: 'mandateName', label: 'Mandant', type: 'text', sortable: true, filterable: true, width: 180 },`
## `src/pages/billing/AdminSubscriptionsPage.tsx`:12
- **Text:** 'Plan'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { key: 'planTitle', label: 'Plan', type: 'text', sortable: true, filterable: true, width: 180 },`
## `src/pages/billing/AdminSubscriptionsPage.tsx`:13
- **Text:** 'Status'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { key: 'status', label: 'Status', type: 'text', sortable: true, filterable: true, width: 110 },`
## `src/pages/billing/AdminSubscriptionsPage.tsx`:14
- **Text:** 'Wiederkehrend'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { key: 'recurring', label: 'Wiederkehrend', type: 'boolean', sortable: true, filterable: true, width: 120 },`
## `src/pages/billing/AdminSubscriptionsPage.tsx`:15
- **Text:** 'User'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { key: 'activeUsers', label: 'User', type: 'number', sortable: true, width: 70 },`
## `src/pages/billing/AdminSubscriptionsPage.tsx`:16
- **Text:** 'Instanzen'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { key: 'activeInstances', label: 'Instanzen', type: 'number', sortable: true, width: 90 },`
## `src/pages/billing/AdminSubscriptionsPage.tsx`:17
- **Text:** 'Revenue/Mt (CHF)'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { key: 'monthlyRevenueCHF', label: 'Revenue/Mt (CHF)', type: 'number', sortable: true, width: 140 },`
## `src/pages/billing/AdminSubscriptionsPage.tsx`:18
- **Text:** 'Gestartet'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { key: 'startedAt', label: 'Gestartet', type: 'date', sortable: true, filterable: true, width: 130 },`
## `src/pages/billing/AdminSubscriptionsPage.tsx`:19
- **Text:** 'Periodenende'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { key: 'currentPeriodEnd', label: 'Periodenende', type: 'date', sortable: true, filterable: true, width: 130 },`
## `src/pages/billing/AdminSubscriptionsPage.tsx`:20
- **Text:** 'Preis/User'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { key: 'snapshotPricePerUserCHF', label: 'Preis/User', type: 'number', sortable: true, width: 100 },`
## `src/pages/billing/AdminSubscriptionsPage.tsx`:21
- **Text:** 'Preis/Instanz'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { key: 'snapshotPricePerInstanceCHF', label: 'Preis/Instanz', type: 'number', sortable: true, width: 110 },`
## `src/pages/billing/AdminSubscriptionsPage.tsx`:31
- **Text:** 'Sofort kündigen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` { confirmLabel: 'Sofort kündigen', cancelLabel: 'Abbrechen', variant: 'danger' },`
## `src/pages/billing/AdminSubscriptionsPage.tsx`:46
- **Text:** 'Subscription-Übersicht'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h1>Subscription-Übersicht</h1>`
## `src/pages/billing/AdminSubscriptionsPage.tsx`:47
- **Text:** 'Alle Abonnements aller Mandanten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.subtitle}>Alle Abonnements aller Mandanten</p>`
## `src/pages/billing/AdminSubscriptionsPage.tsx`:63
- **Text:** 'Sofort kündigen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: 'Sofort kündigen',`
## `src/pages/billing/AdminSubscriptionsPage.tsx`:69
- **Text:** 'Keine Subscriptions vorhanden.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` emptyMessage="Keine Subscriptions vorhanden."`
## `src/pages/billing/BillingAdmin.tsx`:67
- **Text:** '-- Mandant wählen --'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="">-- Mandant wählen --</option>`
## `src/pages/billing/BillingAdmin.tsx`:119
- **Text:** 'Einstellungen gespeichert!'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setMessage({ type: 'success', text: 'Einstellungen gespeichert!' });`
## `src/pages/billing/BillingAdmin.tsx`:121
- **Text:** 'Fehler beim Speichern'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setMessage({ type: 'error', text: err.message || 'Fehler beim Speichern' });`
## `src/pages/billing/BillingAdmin.tsx`:182
- **Text:** 'Betrag pro Nachladung (CHF)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>Betrag pro Nachladung (CHF)</label>`
## `src/pages/billing/BillingAdmin.tsx`:384
- **Text:** 'Betrag muss positiv sein'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setLocalMsg('Betrag muss positiv sein');`
## `src/pages/billing/BillingAdmin.tsx`:421
- **Text:** 'Betrag (CHF)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>Betrag (CHF)</label>`
## `src/pages/billing/BillingAdmin.tsx`:427
- **Text:** 'z.B. 50'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="z.B. 50"`
## `src/pages/billing/BillingAdmin.tsx`:484
- **Text:** 'Mandant nicht ausgewählt'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` if (!selectedMandateId) throw new Error('Mandant nicht ausgewählt');`
## `src/pages/billing/BillingAdmin.tsx`:486
- **Text:** 'Gutschrift konnte nicht erstellt werden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` if (!result) throw new Error('Gutschrift konnte nicht erstellt werden');`
## `src/pages/billing/BillingAdmin.tsx`:650
- **Text:** '1px solid var(--color-border, #333)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` borderBottom: '1px solid var(--color-border, #333)',`
## `src/pages/billing/BillingDashboard.tsx`:67
- **Text:** 'Lade Statistiken...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` return <div className={styles.loadingPlaceholder}>Lade Statistiken...</div>;`
## `src/pages/billing/BillingDashboard.tsx`:71
- **Text:** 'Keine Statistiken verfügbar'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` return <div className={styles.noData}>Keine Statistiken verfügbar</div>;`
## `src/pages/billing/BillingDashboard.tsx`:85
- **Text:** 'Kosten nach Anbieter'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h4>Kosten nach Anbieter</h4>`
## `src/pages/billing/BillingDashboard.tsx`:87
- **Text:** 'Keine Daten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.noData}>Keine Daten</div>`
## `src/pages/billing/BillingDashboard.tsx`:107
- **Text:** 'Kosten nach Modell'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h4>Kosten nach Modell</h4>`
## `src/pages/billing/BillingDashboard.tsx`:109
- **Text:** 'Keine Daten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.noData}>Keine Daten</div>`
## `src/pages/billing/BillingDashboard.tsx`:129
- **Text:** 'Kosten nach Feature'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h4>Kosten nach Feature</h4>`
## `src/pages/billing/BillingDashboard.tsx`:131
- **Text:** 'Keine Daten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.noData}>Keine Daten</div>`
## `src/pages/billing/BillingDashboard.tsx`:180
- **Text:** 'Januar'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 1, label: 'Januar' },`
## `src/pages/billing/BillingDashboard.tsx`:181
- **Text:** 'Februar'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 2, label: 'Februar' },`
## `src/pages/billing/BillingDashboard.tsx`:182
- **Text:** 'März'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 3, label: 'März' },`
## `src/pages/billing/BillingDashboard.tsx`:183
- **Text:** 'April'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 4, label: 'April' },`
## `src/pages/billing/BillingDashboard.tsx`:184
- **Text:** 'Mai'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 5, label: 'Mai' },`
## `src/pages/billing/BillingDashboard.tsx`:185
- **Text:** 'Juni'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 6, label: 'Juni' },`
## `src/pages/billing/BillingDashboard.tsx`:186
- **Text:** 'Juli'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 7, label: 'Juli' },`
## `src/pages/billing/BillingDashboard.tsx`:187
- **Text:** 'August'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 8, label: 'August' },`
## `src/pages/billing/BillingDashboard.tsx`:188
- **Text:** 'September'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 9, label: 'September' },`
## `src/pages/billing/BillingDashboard.tsx`:189
- **Text:** 'Oktober'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 10, label: 'Oktober' },`
## `src/pages/billing/BillingDashboard.tsx`:190
- **Text:** 'November'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 11, label: 'November' },`
## `src/pages/billing/BillingDashboard.tsx`:191
- **Text:** 'Dezember'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { value: 12, label: 'Dezember' },`
## `src/pages/billing/BillingDashboard.tsx`:198
- **Text:** 'Übersicht über Guthaben und Nutzung'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.subtitle}>Übersicht über Guthaben und Nutzung</p>`
## `src/pages/billing/BillingDashboard.tsx`:207
- **Text:** 'Lade Guthaben...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.loadingPlaceholder}>Lade Guthaben...</div>`
## `src/pages/billing/BillingDashboard.tsx`:209
- **Text:** 'Keine Abrechnungskonten vorhanden'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.noData}>Keine Abrechnungskonten vorhanden</div>`
## `src/pages/billing/BillingDataView.tsx`:5
- **Text:** 'Übersicht'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` * - Tab "Übersicht": KPI grid with cost, balance, storage metrics`
## `src/pages/billing/BillingDataView.tsx`:90
- **Text:** '1px solid var(--color-border, #333)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` borderBottom: '1px solid var(--color-border, #333)',`
## `src/pages/billing/BillingDataView.tsx`:133
- **Text:** '{n} Transaktionen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` subtitle: tr('{n} Transaktionen', { n: String(viewStats.transactionCount) }),`
## `src/pages/billing/BillingDataView.tsx`:138
- **Text:** 'Top: {name}'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` subtitle: topProvider ? tr('Top: {name}', { name: topProvider[0] }) : tr('Keine Nutzung'),`
## `src/pages/billing/BillingDataView.tsx`:138
- **Text:** 'Keine Nutzung'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` subtitle: topProvider ? tr('Top: {name}', { name: topProvider[0] }) : tr('Keine Nutzung'),`
## `src/pages/billing/BillingDataView.tsx`:143
- **Text:** 'Top: {name}'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` subtitle: topModel ? tr('Top: {name}', { name: topModel[0] }) : tr('Keine Nutzung'),`
## `src/pages/billing/BillingDataView.tsx`:143
- **Text:** 'Keine Nutzung'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` subtitle: topModel ? tr('Top: {name}', { name: topModel[0] }) : tr('Keine Nutzung'),`
## `src/pages/billing/BillingDataView.tsx`:148
- **Text:** 'Top: {name}'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` subtitle: topFeature ? tr('Top: {name}', { name: topFeature[0] }) : tr('Keine Nutzung'),`
## `src/pages/billing/BillingDataView.tsx`:148
- **Text:** 'Keine Nutzung'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` subtitle: topFeature ? tr('Top: {name}', { name: topFeature[0] }) : tr('Keine Nutzung'),`
## `src/pages/billing/BillingDataView.tsx`:179
- **Text:** '{n} Transaktionen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` { label: tr('Gesamtkosten'), value: _formatCurrency(viewStats.totalCost), subtitle: tr('{n} Transaktionen', { n: String(viewStats.transactionCount) }) },`
## `src/pages/billing/BillingDataView.tsx`:180
- **Text:** 'pro Transaktion'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` { label: tr('Durchschnitt'), value: _formatCurrency(avgCost), subtitle: tr('pro Transaktion') },`
## `src/pages/billing/BillingDataView.tsx`:196
- **Text:** 'Kosten nach Anbieter'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: tr('Kosten nach Anbieter'),`
## `src/pages/billing/BillingDataView.tsx`:204
- **Text:** 'Kosten nach Modell'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: tr('Kosten nach Modell'),`
## `src/pages/billing/BillingDataView.tsx`:212
- **Text:** 'Kosten nach Feature'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: tr('Kosten nach Feature'),`
## `src/pages/billing/BillingDataView.tsx`:220
- **Text:** 'Kosten nach Mandant'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: tr('Kosten nach Mandant'),`
## `src/pages/billing/BillingDataView.tsx`:277
- **Text:** 'Zahlung erfolgreich. Guthaben wurde verbucht.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setCheckoutMessage({ type: 'success', text: 'Zahlung erfolgreich. Guthaben wurde verbucht.' });`
## `src/pages/billing/BillingDataView.tsx`:523
- **Text:** 'Nutzung, Diagramme und Transaktionen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.subtitle}>Nutzung, Diagramme und Transaktionen</p>`
## `src/pages/billing/BillingDataView.tsx`:586
- **Text:** '1px solid var(--border-color, #333)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: '1px solid var(--border-color, #333)',`
## `src/pages/billing/BillingMandateView.tsx`:47
- **Text:** 'Anzahl Benutzer'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <th>Anzahl Benutzer</th>`
## `src/pages/billing/BillingMandateView.tsx`:48
- **Text:** 'Warnschwelle (%)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <th>Warnschwelle (%)</th>`
## `src/pages/billing/BillingMandateView.tsx`:217
- **Text:** 'Guthaben und Transaktionen pro Mandant'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.subtitle}>Guthaben und Transaktionen pro Mandant</p>`
## `src/pages/billing/BillingMandateView.tsx`:228
- **Text:** 'Lade Daten...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.loadingPlaceholder}>Lade Daten...</div>`
## `src/pages/billing/BillingMandateView.tsx`:230
- **Text:** 'Keine Mandanten mit Billing-Settings vorhanden'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.noData}>Keine Mandanten mit Billing-Settings vorhanden</div>`
## `src/pages/billing/BillingMandateView.tsx`:253
- **Text:** 'Lade Transaktionen...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.loadingPlaceholder}>Lade Transaktionen...</div>`
## `src/pages/billing/BillingMandateView.tsx`:255
- **Text:** 'Keine Transaktionen vorhanden'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.noData}>Keine Transaktionen vorhanden</div>`
## `src/pages/billing/BillingMandateView.tsx`:267
- **Text:** 'Mehr laden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {loading ? 'Laden...' : 'Mehr laden'}`
## `src/pages/billing/BillingNav.tsx`:27
- **Text:** '1px solid var(--color-border)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` borderBottom: '1px solid var(--color-border)',`
## `src/pages/billing/BillingTransactions.tsx`:97
- **Text:** 'Übersicht aller Kontobewegungen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.subtitle}>Übersicht aller Kontobewegungen</p>`
## `src/pages/billing/BillingTransactions.tsx`:104
- **Text:** 'Lade Transaktionen...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.loadingPlaceholder}>Lade Transaktionen...</div>`
## `src/pages/billing/BillingTransactions.tsx`:106
- **Text:** 'Keine Transaktionen vorhanden'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.noData}>Keine Transaktionen vorhanden</div>`
## `src/pages/billing/BillingTransactions.tsx`:138
- **Text:** 'Mehr laden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {loading ? 'Laden...' : 'Mehr laden'}`
## `src/pages/billing/BillingUserView.tsx`:92
- **Text:** 'Alle Mandanten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="">Alle Mandanten</option>`
## `src/pages/billing/BillingUserView.tsx`:107
- **Text:** 'Alle Benutzer'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="">Alle Benutzer</option>`
## `src/pages/billing/BillingUserView.tsx`:313
- **Text:** 'Guthaben und Transaktionen pro Benutzer'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.subtitle}>Guthaben und Transaktionen pro Benutzer</p>`
## `src/pages/billing/BillingUserView.tsx`:322
- **Text:** 'Lade Daten...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.loadingPlaceholder}>Lade Daten...</div>`
## `src/pages/billing/BillingUserView.tsx`:324
- **Text:** 'Keine Benutzer-Konten vorhanden'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.noData}>Keine Benutzer-Konten vorhanden</div>`
## `src/pages/billing/BillingUserView.tsx`:349
- **Text:** 'Lade Transaktionen...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.loadingPlaceholder}>Lade Transaktionen...</div>`
## `src/pages/billing/BillingUserView.tsx`:351
- **Text:** 'Keine Transaktionen vorhanden'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.noData}>Keine Transaktionen vorhanden</div>`
## `src/pages/billing/BillingUserView.tsx`:367
- **Text:** 'Mehr laden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {loading ? 'Laden...' : 'Mehr laden'}`
## `src/pages/billing/SubscriptionTab.tsx`:44
- **Text:** 'Zahlung ausstehend'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` PENDING: { label: 'Zahlung ausstehend', color: '#f59e0b' },`
## `src/pages/billing/SubscriptionTab.tsx`:45
- **Text:** 'Geplant'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` SCHEDULED: { label: 'Geplant', color: '#8b5cf6' },`
## `src/pages/billing/SubscriptionTab.tsx`:46
- **Text:** 'Aktiv'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` ACTIVE: { label: 'Aktiv', color: '#22c55e' },`
## `src/pages/billing/SubscriptionTab.tsx`:47
- **Text:** 'Testphase'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` TRIALING: { label: 'Testphase', color: '#38bdf8' },`
## `src/pages/billing/SubscriptionTab.tsx`:48
- **Text:** 'Zahlung ausstehend'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` PAST_DUE: { label: 'Zahlung ausstehend', color: '#f59e0b' },`
## `src/pages/billing/SubscriptionTab.tsx`:49
- **Text:** 'Abgelaufen'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` EXPIRED: { label: 'Abgelaufen', color: '#6b7280' },`
## `src/pages/billing/SubscriptionTab.tsx`:54
- **Text:** 'Jährlich'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` YEARLY: 'Jährlich',`
## `src/pages/billing/SubscriptionTab.tsx`:78
- **Text:** '2px solid var(--primary-color, #F25843)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: isCurrent ? '2px solid var(--primary-color, #F25843)' : '1px solid var(--color-border, var(--border-color, #333))',`
## `src/pages/billing/SubscriptionTab.tsx`:78
- **Text:** '1px solid var(--color-border, var(--border-color, #333))'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: isCurrent ? '2px solid var(--primary-color, #F25843)' : '1px solid var(--color-border, var(--border-color, #333))',`
## `src/pages/billing/SubscriptionTab.tsx`:103
- **Text:** '/ {_periodLabel[plan.billingPeriod] || plan.billingPeriod}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div>User: <strong>{_formatCurrency(plan.pricePerUserCHF)}</strong> / {_periodLabel[plan.billingPeriod] || plan.billingPeriod}</div>`
## `src/pages/billing/SubscriptionTab.tsx`:104
- **Text:** '/ {_periodLabel[plan.billingPeriod] || plan.billingPeriod}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div>Instanz: <strong>{_formatCurrency(plan.pricePerFeatureInstanceCHF)}</strong> / {_periodLabel[plan.billingPeriod] || plan.billingPeriod}</div>`
## `src/pages/billing/SubscriptionTab.tsx`:124
- **Text:** '· max. {plan.maxUsers} User'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` {plan.maxUsers && <> · max. {plan.maxUsers} User</>}`
## `src/pages/billing/SubscriptionTab.tsx`:125
- **Text:** '· max. {plan.maxFeatureInstances} Instanzen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` {plan.maxFeatureInstances && <> · max. {plan.maxFeatureInstances} Instanzen</>}`
## `src/pages/billing/SubscriptionTab.tsx`:129
- **Text:** '· Speicher inkl. {formatBinaryDataSizeFromMebibytes(plan.maxDataVolumeMB)}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <> · Speicher inkl. {formatBinaryDataSizeFromMebibytes(plan.maxDataVolumeMB)}</>`
## `src/pages/billing/SubscriptionTab.tsx`:131
- **Text:** '· AI-Budget { _formatCurrency(plan.budgetAiCHF ?? 0)}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` {(plan.budgetAiCHF ?? 0) > 0 && <> · AI-Budget { _formatCurrency(plan.budgetAiCHF ?? 0)}</>}`
## `src/pages/billing/SubscriptionTab.tsx`:150
- **Text:** 'Kostenpflichtig abonnieren'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` : (!isFreePlan && !plan.trialDays) ? 'Kostenpflichtig abonnieren' : 'Auswählen'}`
## `src/pages/billing/SubscriptionTab.tsx`:150
- **Text:** 'Auswählen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` : (!isFreePlan && !plan.trialDays) ? 'Kostenpflichtig abonnieren' : 'Auswählen'}`
## `src/pages/billing/SubscriptionTab.tsx`:180
- **Text:** '1px solid var(--color-border, var(--border-color, #333))'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: '1px solid var(--color-border, var(--border-color, #333))',`
## `src/pages/billing/SubscriptionTab.tsx`:198
- **Text:** 'Gekündigt'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` }}>Gekündigt</span>`
## `src/pages/billing/SubscriptionTab.tsx`:215
- **Text:** 'Zahlung erfolgreich. Abonnement wird aktiviert — bitte warten...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` ? 'Zahlung erfolgreich. Abonnement wird aktiviert — bitte warten...'`
## `src/pages/billing/SubscriptionTab.tsx`:216
- **Text:** 'Die Zahlung wurde noch nicht abgeschlossen. Sie können den Checkout abbrechen oder erneut starten.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` : 'Die Zahlung wurde noch nicht abgeschlossen. Sie können den Checkout abbrechen oder erneut starten.'}`
## `src/pages/billing/SubscriptionTab.tsx`:235
- **Text:** 'Gestartet: {_formatDate(sub.startedAt)}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Gestartet: {_formatDate(sub.startedAt)}</span>`
## `src/pages/billing/SubscriptionTab.tsx`:236
- **Text:** "Periode: {_periodLabel[plan.billingPeriod] || '—'}"
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` {plan && <span>Periode: {_periodLabel[plan.billingPeriod] || '—'}</span>}`
## `src/pages/billing/SubscriptionTab.tsx`:237
- **Text:** 'Periodenende: {_formatDate(sub.currentPeriodEnd)}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` {sub.currentPeriodEnd && <span>Periodenende: {_formatDate(sub.currentPeriodEnd)}</span>}`
## `src/pages/billing/SubscriptionTab.tsx`:238
- **Text:** 'Trial endet: {_formatDate(sub.trialEndsAt)}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` {sub.trialEndsAt && <span>Trial endet: {_formatDate(sub.trialEndsAt)}</span>}`
## `src/pages/billing/SubscriptionTab.tsx`:240
- **Text:** 'Läuft aus am: {_formatDate(sub.currentPeriodEnd)}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span style={{ color: '#ef4444' }}>Läuft aus am: {_formatDate(sub.currentPeriodEnd)}</span>`
## `src/pages/billing/SubscriptionTab.tsx`:244
- **Text:** 'AI-Budget (inkl.): {_formatCurrency(plan.budgetAiCHF ?? 0)} / Periode'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>AI-Budget (inkl.): {_formatCurrency(plan.budgetAiCHF ?? 0)} / Periode</span>`
## `src/pages/billing/SubscriptionTab.tsx`:270
- **Text:** 'Wird reaktiviert...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {reactivating ? 'Wird reaktiviert...' : 'Reaktivieren'}`
## `src/pages/billing/SubscriptionTab.tsx`:285
- **Text:** 'Wird gekündigt...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {cancelling ? 'Wird gekündigt...' : 'Kündigen'}`
## `src/pages/billing/SubscriptionTab.tsx`:285
- **Text:** 'Kündigen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {cancelling ? 'Wird gekündigt...' : 'Kündigen'}`
## `src/pages/billing/SubscriptionTab.tsx`:300
- **Text:** 'Wird abgebrochen...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {cancelling ? 'Wird abgebrochen...' : 'Abbrechen'}`
## `src/pages/billing/SubscriptionTab.tsx`:343
- **Text:** 'Zahlung erfolgreich — Abonnement wird aktiviert...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setCheckoutMessage({ type: 'success', text: 'Zahlung erfolgreich — Abonnement wird aktiviert...' });`
## `src/pages/billing/SubscriptionTab.tsx`:357
- **Text:** 'Abonnement wurde aktiviert.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setCheckoutMessage({ type: 'success', text: 'Abonnement wurde aktiviert.' });`
## `src/pages/billing/SubscriptionTab.tsx`:370
- **Text:** 'Checkout abgebrochen. Ihr bestehendes Abonnement bleibt aktiv.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setCheckoutMessage({ type: 'info', text: 'Checkout abgebrochen. Ihr bestehendes Abonnement bleibt aktiv.' });`
## `src/pages/billing/SubscriptionTab.tsx`:381
- **Text:** 'Abonnement wurde aktiviert.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setCheckoutMessage({ type: 'success', text: 'Abonnement wurde aktiviert.' });`
## `src/pages/billing/SubscriptionTab.tsx`:391
- **Text:** 'Fehler beim Aktivieren'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setActionError(err?.response?.data?.detail || err.message || 'Fehler beim Aktivieren');`
## `src/pages/billing/SubscriptionTab.tsx`:402
- **Text:** 'Diesen Vorgang abbrechen?'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` ? 'Diesen Vorgang abbrechen?'`
## `src/pages/billing/SubscriptionTab.tsx`:403
- **Text:** 'Abonnement kündigen? Es bleibt bis zum Periodenende aktiv.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` : 'Abonnement kündigen? Es bleibt bis zum Periodenende aktiv.',`
## `src/pages/billing/SubscriptionTab.tsx`:405
- **Text:** 'Vorgang abbrechen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: isPendingOrScheduled ? 'Vorgang abbrechen' : 'Abonnement kündigen',`
## `src/pages/billing/SubscriptionTab.tsx`:405
- **Text:** 'Abonnement kündigen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: isPendingOrScheduled ? 'Vorgang abbrechen' : 'Abonnement kündigen',`
## `src/pages/billing/SubscriptionTab.tsx`:406
- **Text:** 'Ja, abbrechen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` confirmLabel: isPendingOrScheduled ? 'Ja, abbrechen' : 'Kündigen',`
## `src/pages/billing/SubscriptionTab.tsx`:406
- **Text:** 'Kündigen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` confirmLabel: isPendingOrScheduled ? 'Ja, abbrechen' : 'Kündigen',`
## `src/pages/billing/SubscriptionTab.tsx`:407
- **Text:** 'Nein, zurück'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` cancelLabel: isPendingOrScheduled ? 'Nein, zurück' : 'Abbrechen',`
## `src/pages/billing/SubscriptionTab.tsx`:430
- **Text:** 'Fehler beim Reaktivieren'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setActionError(err?.response?.data?.detail || err.message || 'Fehler beim Reaktivieren');`
## `src/pages/billing/SubscriptionTab.tsx`:437
- **Text:** 'Lade Abonnement-Daten...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` return <div className={styles.loadingPlaceholder}>Lade Abonnement-Daten...</div>;`
## `src/pages/billing/SubscriptionTab.tsx`:464
- **Text:** 'Aktuelles Abonnement'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h2 className={styles.sectionTitle}>Aktuelles Abonnement</h2>`
## `src/pages/billing/SubscriptionTab.tsx`:470
- **Text:** 'Zahlung wird verarbeitet'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` ? (justPaid ? 'Zahlung wird verarbeitet' : 'Checkout in Bearbeitung')`
## `src/pages/billing/SubscriptionTab.tsx`:470
- **Text:** 'Checkout in Bearbeitung'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` ? (justPaid ? 'Zahlung wird verarbeitet' : 'Checkout in Bearbeitung')`
## `src/pages/billing/SubscriptionTab.tsx`:471
- **Text:** 'Operatives Abonnement'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` : 'Operatives Abonnement'}`
## `src/pages/billing/SubscriptionTab.tsx`:488
- **Text:** 'Geplanter Nachfolger'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h2 className={styles.sectionTitle}>Geplanter Nachfolger</h2>`
## `src/pages/billing/SubscriptionTab.tsx`:492
- **Text:** 'Startet nach Ablauf des aktuellen Abonnements'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` label="Startet nach Ablauf des aktuellen Abonnements"`
## `src/pages/billing/SubscriptionTab.tsx`:502
- **Text:** 'Verfügbare Pläne'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h2 className={styles.sectionTitle}>Verfügbare Pläne</h2>`
## `src/pages/billing/SubscriptionTab.tsx`:504
- **Text:** 'Keine Pläne verfügbar'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.noData}>Keine Pläne verfügbar</div>`
## `src/pages/views/chatbot/ChatbotConversationsView.tsx`:83
- **Text:** 'Möchten Sie diese Konversation wirklich löschen?'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` const ok = await confirm('Möchten Sie diese Konversation wirklich löschen?', {`
## `src/pages/views/chatbot/ChatbotConversationsView.tsx`:84
- **Text:** 'Konversation löschen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: 'Konversation löschen',`
## `src/pages/views/chatbot/ChatbotConversationsView.tsx`:85
- **Text:** 'Löschen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` confirmLabel: 'Löschen',`
## `src/pages/views/chatbot/ChatbotConversationsView.tsx`:108
- **Text:** 'Gerade eben'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` if (diffMins < 1) return 'Gerade eben';`
## `src/pages/views/chatbot/ChatbotConversationsView.tsx`:125
- **Text:** 'Neue Konversation'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` return 'Neue Konversation';`
## `src/pages/views/chatbot/ChatbotConversationsView.tsx`:137
- **Text:** 'Neue Konversation'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Neue Konversation"`
## `src/pages/views/chatbot/ChatbotConversationsView.tsx`:146
- **Text:** 'Lade Konversationen...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Lade Konversationen...</span>`
## `src/pages/views/chatbot/ChatbotConversationsView.tsx`:158
- **Text:** 'Noch keine Konversationen vorhanden.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p>Noch keine Konversationen vorhanden.</p>`
## `src/pages/views/chatbot/ChatbotConversationsView.tsx`:159
- **Text:** 'Starte eine neue Konversation, um zu beginnen.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.emptyHint}>Starte eine neue Konversation, um zu beginnen.</p>`
## `src/pages/views/chatbot/ChatbotConversationsView.tsx`:179
- **Text:** 'Löschen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Löschen"`
## `src/pages/views/chatbot/ChatbotConversationsView.tsx`:200
- **Text:** 'Lade Nachrichten...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Lade Nachrichten...</span>`
## `src/pages/views/chatbot/ChatbotConversationsView.tsx`:249
- **Text:** 'Nachricht eingeben...'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Nachricht eingeben..."`
## `src/pages/views/commcoach/CommcoachDashboardView.tsx`:25
- **Text:** 'Dashboard wird geladen...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` return <div className={styles.loading}>Dashboard wird geladen...</div>;`
## `src/pages/views/commcoach/CommcoachDashboardView.tsx`:33
- **Text:** 'Keine Daten verfügbar.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` return <div className={styles.empty}>Keine Daten verfügbar.</div>;`
## `src/pages/views/commcoach/CommcoachDashboardView.tsx`:42
- **Text:** 'Tage Streak'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.kpiLabel}>Tage Streak</div>`
## `src/pages/views/commcoach/CommcoachDashboardView.tsx`:43
- **Text:** 'Rekord: {dashboard.longestStreak}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.kpiSub}>Rekord: {dashboard.longestStreak}</div>`
## `src/pages/views/commcoach/CommcoachDashboardView.tsx`:68
- **Text:** 'Aktive Coaching-Themen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h3 className={styles.sectionTitle}>Aktive Coaching-Themen</h3>`
## `src/pages/views/commcoach/CommcoachDashboardView.tsx`:71
- **Text:** 'Noch keine Coaching-Themen erstellt.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p>Noch keine Coaching-Themen erstellt.</p>`
## `src/pages/views/commcoach/CommcoachDashboardView.tsx`:72
- **Text:** 'Wechsle zum Coaching-Tab, um dein erstes Thema anzulegen.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p>Wechsle zum Coaching-Tab, um dein erstes Thema anzulegen.</p>`
## `src/pages/views/commcoach/CommcoachDashboardView.tsx`:89
- **Text:** 'Ziele: {ctx.goalProgress}%'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` {ctx.goalProgress != null && <span>Ziele: {ctx.goalProgress}%</span>}`
## `src/pages/views/commcoach/CommcoachDashboardView.tsx`:125
- **Text:** 'Tipp des Tages'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h3 className={styles.sectionTitle}>Tipp des Tages</h3>`
## `src/pages/views/commcoach/CommcoachDashboardView.tsx`:137
- **Text:** 'Führung'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` leadership: 'Führung',`
## `src/pages/views/commcoach/CommcoachDashboardView.tsx`:140
- **Text:** 'Präsentation'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` presentation: 'Präsentation',`
## `src/pages/views/commcoach/CommcoachDashboardView.tsx`:143
- **Text:** 'Change Mgmt'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` changeManagement: 'Change Mgmt',`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:262
- **Text:** 'Seitenleiste einblenden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title={udbCollapsed ? 'Seitenleiste einblenden' : 'Seitenleiste ausblenden'}`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:262
- **Text:** 'Seitenleiste ausblenden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title={udbCollapsed ? 'Seitenleiste einblenden' : 'Seitenleiste ausblenden'}`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:294
- **Text:** 'Neues Thema'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Neues Thema"`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:305
- **Text:** 'Thema / Titel...'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Thema / Titel..."`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:313
- **Text:** 'Beschreibung (optional)'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Beschreibung (optional)"`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:319
- **Text:** 'Führung'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="leadership">Führung</option>`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:322
- **Text:** 'Präsentation'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="presentation">Präsentation</option>`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:325
- **Text:** 'Change Management'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="changeManagement">Change Management</option>`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:329
- **Text:** 'Wird erstellt...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {coach.actionLoading === 'creating' ? 'Wird erstellt...' : 'Erstellen'}`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:339
- **Text:** 'Willkommen beim Kommunikations-Coach'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h3>Willkommen beim Kommunikations-Coach</h3>`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:340
- **Text:** 'Erstelle ein Thema, um zu beginnen.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p>Erstelle ein Thema, um zu beginnen.</p>`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:341
- **Text:** 'setShowNewContext(true)}>Neues Thema erstellen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <button className={styles.btnPrimary} onClick={() => setShowNewContext(true)}>Neues Thema erstellen</button>`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:362
- **Text:** 'Wird archiviert...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {coach.actionLoading === 'archiving' ? 'Wird archiviert...' : 'Archivieren'}`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:387
- **Text:** 'Starte eine neue Coaching-Session zu diesem Thema.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p>Starte eine neue Coaching-Session zu diesem Thema.</p>`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:390
- **Text:** 'Gesprächspartner wählen:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label className={styles.personaLabel}>Gesprächspartner wählen:</label>`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:408
- **Text:** 'Wird gestartet...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` ? 'Wird gestartet...'`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:411
- **Text:** 'Session starten'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` : 'Session starten'}`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:418
- **Text:** 'Session aktiv'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span className={styles.sessionLabel}>Session aktiv</span>`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:432
- **Text:** 'Stummschaltung aufheben'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title={voice.muted ? 'Stummschaltung aufheben' : 'Stummschalten'}`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:434
- **Text:** '\\u{1F507} Stumm'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {voice.muted ? '\u{1F507} Stumm' : '\u{1F3A4} Ton an'}`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:434
- **Text:** '\\u{1F3A4} Ton an'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {voice.muted ? '\u{1F507} Stumm' : '\u{1F3A4} Ton an'}`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:437
- **Text:** 'Wird abgeschlossen...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {coach.actionLoading === 'completing' ? 'Wird abgeschlossen...' : 'Abschliessen'}`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:440
- **Text:** 'Wird abgebrochen...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {coach.actionLoading === 'cancelling' ? 'Wird abgebrochen...' : 'Abbrechen'}`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:469
- **Text:** 'Coach denkt nach'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` <div className={styles.typing}>{coach.streamingStatus || 'Coach denkt nach'}<span className={styles.typingDots}>...</span></div>`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:489
- **Text:** 'Tool-Aufrufe vorhanden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {coach.streamingStatus || (coach.agentToolCalls.length > 0 ? 'Tool-Aufrufe vorhanden' : 'Warte auf Agent')}`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:489
- **Text:** 'Warte auf Agent'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {coach.streamingStatus || (coach.agentToolCalls.length > 0 ? 'Tool-Aufrufe vorhanden' : 'Warte auf Agent')}`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:513
- **Text:** 'läuft'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {toolCall.success === true ? 'fertig' : toolCall.success === false ? 'fehler' : 'läuft'}`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:539
- **Text:** 'Stumm Mikrofon aus'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` ? 'Stumm Mikrofon aus'`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:541
- **Text:** 'Coach spricht...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` ? (coach.streamingStatus || 'Coach spricht...')`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:543
- **Text:** 'Coach denkt nach...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` ? (coach.streamingStatus || 'Coach denkt nach...')`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:545
- **Text:** 'Unterbrochen Mikrofon an'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` ? 'Unterbrochen Mikrofon an'`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:547
- **Text:** 'Mikrofon an bitte sprechen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` ? (voice.liveTranscript ? 'Spricht...' : 'Mikrofon an bitte sprechen')`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:548
- **Text:** 'Mikrofon wird gestartet...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` : 'Mikrofon wird gestartet...'}`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:602
- **Text:** 'Nachricht eingeben...'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Nachricht eingeben..."`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:616
- **Text:** 'Datei anhängen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Datei anhängen"`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:641
- **Text:** 'Dateien anhängen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div style={{ padding: '6px 12px', fontSize: 11, color: '#999', fontWeight: 600, borderBottom: '1px solid #f0f0f0' }}>Dateien anhängen</div>`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:671
- **Text:** 'Datenquellen anhängen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Datenquellen anhängen"`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:698
- **Text:** 'Persönliche Quellen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div style={{ padding: '6px 12px', fontSize: 11, color: '#999', fontWeight: 600, borderBottom: '1px solid #f0f0f0' }}>Persönliche Quellen</div>`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:775
- **Text:** 'Neue Aufgabe...'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Neue Aufgabe..."`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:781
- **Text:** 'Wird hinzugefügt...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {coach.actionLoading === 'addingTask' ? 'Wird hinzugefügt...' : 'Hinzufügen'}`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:781
- **Text:** 'Hinzufügen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {coach.actionLoading === 'addingTask' ? 'Wird hinzugefügt...' : 'Hinzufügen'}`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:785
- **Text:** 'Noch keine Aufgaben. Der Coach schlägt während Sessions Aufgaben vor.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.emptyTab}>Noch keine Aufgaben. Der Coach schlägt während Sessions Aufgaben vor.</div>`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:814
- **Text:** 'Noch keine abgeschlossenen Sessions.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.emptyTab}>Noch keine abgeschlossenen Sessions.</div>`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:824
- **Text:** 'Score: {Math.round(s.competenceScore)}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` {s.competenceScore != null && <span className={styles.sessionScore}>Score: {Math.round(s.competenceScore)}</span>}`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:831
- **Text:** '| Persona'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` {s.personaId && <span> | Persona</span>}`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:849
- **Text:** 'Noch keine Bewertungen. Schliesse eine Session ab, um Scores zu erhalten.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.emptyTab}>Noch keine Bewertungen. Schliesse eine Session ab, um Scores zu erhalten.</div>`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:899
- **Text:** 'Coaching (aktiv)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` case 'coaching': return coach.session ? 'Coaching (aktiv)' : 'Coaching';`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:925
- **Text:** 'Einfühlungsvermögen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` empathy: 'Einfühlungsvermögen', clarity: 'Klarheit',`
## `src/pages/views/commcoach/CommcoachDossierView.tsx`:926
- **Text:** 'Zuhören'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` assertiveness: 'Durchsetzung', listening: 'Zuhören',`
## `src/pages/views/commcoach/CommcoachSettingsView.tsx`:5
- **Text:** 'Stimme & Sprache'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` * Voice/language settings are in user-level settings (/settings -> "Stimme & Sprache").`
## `src/pages/views/commcoach/CommcoachSettingsView.tsx`:45
- **Text:** 'Fehler beim Laden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError(err.message || 'Fehler beim Laden');`
## `src/pages/views/commcoach/CommcoachSettingsView.tsx`:65
- **Text:** 'Einstellungen gespeichert'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setSuccess('Einstellungen gespeichert');`
## `src/pages/views/commcoach/CommcoachSettingsView.tsx`:68
- **Text:** 'Fehler beim Speichern'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError(err.message || 'Fehler beim Speichern');`
## `src/pages/views/commcoach/CommcoachSettingsView.tsx`:75
- **Text:** 'Einstellungen werden geladen...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` return <div className={styles.loading}>Einstellungen werden geladen...</div>;`
## `src/pages/views/commcoach/CommcoachSettingsView.tsx`:86
- **Text:** 'Stimme & Sprache'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h3 className={styles.sectionTitle}>Stimme & Sprache</h3>`
## `src/pages/views/commcoach/CommcoachSettingsView.tsx`:91
- **Text:** 'Stimme & Sprache'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` Benutzereinstellungen oeffnen (Tab "Stimme & Sprache")`
## `src/pages/views/commcoach/CommcoachSettingsView.tsx`:121
- **Text:** 'Sessions gesamt'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.statItem}><span className={styles.statValue}>{profile.totalSessions}</span><span className={styles.statLabel}>Sessions gesamt</span></div>`
## `src/pages/views/commcoach/CommcoachSettingsView.tsx`:122
- **Text:** 'Minuten gesamt'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.statItem}><span className={styles.statValue}>{profile.totalMinutes}</span><span className={styles.statLabel}>Minuten gesamt</span></div>`
## `src/pages/views/commcoach/CommcoachSettingsView.tsx`:123
- **Text:** 'Aktueller Streak'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.statItem}><span className={styles.statValue}>{profile.streakDays}</span><span className={styles.statLabel}>Aktueller Streak</span></div>`
## `src/pages/views/commcoach/CommcoachSettingsView.tsx`:124
- **Text:** 'Laengster Streak'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.statItem}><span className={styles.statValue}>{profile.longestStreak}</span><span className={styles.statLabel}>Laengster Streak</span></div>`
## `src/pages/views/commcoach/CommcoachSettingsView.tsx`:130
- **Text:** 'Einstellungen speichern'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {saving ? 'Speichern...' : 'Einstellungen speichern'}`
## `src/pages/views/graphicalEditor/GraphicalEditorPage.tsx`:105
- **Text:** 'Graphical Editor'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h2>Graphical Editor</h2>`
## `src/pages/views/graphicalEditor/GraphicalEditorPage.tsx`:106
- **Text:** 'Keine Feature-Instanz gefunden.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p>Keine Feature-Instanz gefunden.</p>`
## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:80
- **Text:** 'Fehler beim Laden der Vorlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Fehler beim Laden der Vorlagen');`
## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:95
- **Text:** 'Vorlage gelöscht'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Vorlage gelöscht');`
## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:99
- **Text:** 'Löschen fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError(`Fehler: ${e?.message || 'Löschen fehlgeschlagen'}`);`
## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:112
- **Text:** 'Vorlage als Workflow kopiert'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Vorlage als Workflow kopiert');`
## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:114
- **Text:** 'Kopieren fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError(`Fehler: ${e?.message || 'Kopieren fehlgeschlagen'}`);`
## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:131
- **Text:** 'Scope-Änderung fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError(`Fehler: ${e?.message || 'Scope-Änderung fehlgeschlagen'}`);`
## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:144
- **Text:** 'Neuer Name:'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` const newLabel = await promptInput('Neuer Name:', {`
## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:145
- **Text:** 'Vorlage umbenennen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: 'Vorlage umbenennen',`
## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:152
- **Text:** 'Vorlage umbenannt'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Vorlage umbenannt');`
## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:155
- **Text:** 'Umbenennen fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError(`Fehler: ${e?.message || 'Umbenennen fehlgeschlagen'}`);`
## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:170
- **Text:** 'Vorlage'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { key: 'label', label: 'Vorlage', type: 'string', width: 220, sortable: true },`
## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:173
- **Text:** 'Scope'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Scope',`
## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:180
- **Text:** 'Freigegeben'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Freigegeben',`
## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:192
- **Text:** 'Erstellt von'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Erstellt von',`
## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:198
- **Text:** 'Erstellt'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Erstellt',`
## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:208
- **Text:** 'Keine Feature-Instanz gefunden.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p>Keine Feature-Instanz gefunden.</p>`
## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:259
- **Text:** 'Im Editor öffnen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: 'Im Editor öffnen',`
## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:264
- **Text:** 'Löschen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: 'Löschen',`
## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:278
- **Text:** 'Als Workflow kopieren'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: 'Als Workflow kopieren',`
## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:285
- **Text:** 'Scope ändern'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: 'Scope ändern',`
## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:293
- **Text:** 'Keine Vorlagen gefunden. Erstelle eine Vorlage aus einem bestehenden Workflow.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` emptyMessage="Keine Vorlagen gefunden. Erstelle eine Vorlage aus einem bestehenden Workflow."`
## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:310
- **Text:** 'translate(-50%, -50%)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` position: 'fixed', top: '50%', left: '50%', transform: 'translate(-50%, -50%)',`
## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:316
- **Text:** 'Scope ändern'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h4 style={{ margin: '0 0 8px', fontSize: '0.9rem' }}>Scope ändern</h4>`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:71
- **Text:** 'Fehler beim Laden der Workflows'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Fehler beim Laden der Workflows');`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:86
- **Text:** 'Workflow gelöscht'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Workflow gelöscht');`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:90
- **Text:** 'Löschen fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError(`Fehler: ${e?.message || 'Löschen fehlgeschlagen'}`);`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:117
- **Text:** 'Workflow aktiviert'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess(next ? 'Workflow aktiviert' : 'Workflow deaktiviert');`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:117
- **Text:** 'Workflow deaktiviert'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess(next ? 'Workflow aktiviert' : 'Workflow deaktiviert');`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:120
- **Text:** 'Status-Update fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError(`Fehler: ${e?.message || 'Status-Update fehlgeschlagen'}`);`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:131
- **Text:** 'Neuer Name:'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` const newLabel = await promptInput('Neuer Name:', {`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:132
- **Text:** 'Workflow umbenennen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: 'Workflow umbenennen',`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:139
- **Text:** 'Workflow umbenannt'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Workflow umbenannt');`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:142
- **Text:** 'Umbenennen fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError(`Fehler: ${e?.message || 'Umbenennen fehlgeschlagen'}`);`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:162
- **Text:** 'Workflow gestartet und bei Human Task pausiert. Öffne Workflows & Tasks.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Workflow gestartet und bei Human Task pausiert. Öffne Workflows & Tasks.');`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:164
- **Text:** 'Workflow ausgeführt'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Workflow ausgeführt');`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:168
- **Text:** 'Ausführung fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError(result?.error || 'Ausführung fehlgeschlagen');`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:171
- **Text:** 'Ausführung fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError(`Fehler: ${e?.message || 'Ausführung fehlgeschlagen'}`);`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:180
- **Text:** 'Workflow'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { key: 'label', label: 'Workflow', type: 'string', width: 200, sortable: true },`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:183
- **Text:** 'Aktiv'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Aktiv',`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:195
- **Text:** 'Läuft'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Läuft',`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:207
- **Text:** 'Steht bei'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Steht bei',`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:217
- **Text:** 'Erstellt'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Erstellt',`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:224
- **Text:** 'Zuletzt gestartet'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Zuletzt gestartet',`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:231
- **Text:** 'Läufe'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Läufe',`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:247
- **Text:** 'Keine Feature-Instanz gefunden.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p>Keine Feature-Instanz gefunden.</p>`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:256
- **Text:** 'Gespeicherte Workflows'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h1 className={styles.pageTitle}>Gespeicherte Workflows</h1>`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:303
- **Text:** 'Löschen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: 'Löschen',`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:332
- **Text:** 'Ausführen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: 'Ausführen',`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:340
- **Text:** 'Keine Workflows gefunden. Erstelle einen im Editor.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` emptyMessage="Keine Workflows gefunden. Erstelle einen im Editor."`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:34
- **Text:** 'input.upload'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` 'input.upload': 'Upload',`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:34
- **Text:** 'Upload'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` 'input.upload': 'Upload',`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:36
- **Text:** 'Prüfung'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` 'input.review': 'Prüfung',`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:38
- **Text:** 'Bestätigung'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` 'input.confirmation': 'Bestätigung',`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:159
- **Text:** 'Workflow gestartet und bei Human Task pausiert.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Workflow gestartet und bei Human Task pausiert.');`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:161
- **Text:** 'Workflow gestartet'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Workflow gestartet');`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:165
- **Text:** 'Ausführung fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError(result?.error || 'Ausführung fehlgeschlagen');`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:169
- **Text:** 'Ausführung fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` (e as { message?: string })?.message ?? 'Ausführung fehlgeschlagen';`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:185
- **Text:** 'Keine Feature-Instanz gefunden.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p>Keine Feature-Instanz gefunden.</p>`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:194
- **Text:** 'Lade Tasks…'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p>Lade Tasks…</p>`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:212
- **Text:** 'Keine offenen Tasks'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.empty}>Keine offenen Tasks</p>`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:236
- **Text:** 'Erledigte Tasks'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Erledigte Tasks</span>`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:244
- **Text:** 'Keine erledigten Tasks'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.empty}>Keine erledigten Tasks</p>`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:291
- **Text:** 'Workflows starten'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <aside className={styles.startSidebar} aria-label="Workflows starten">`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:292
- **Text:** 'Workflow starten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h3 className={styles.startSidebarTitle}>Workflow starten</h3>`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:315
- **Text:** 'Workflow ausführen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Workflow ausführen"`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:387
- **Text:** 'Kein Output (z.B. Workflow ohne file.create)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.empty}>Kein Output (z.B. Workflow ohne file.create)</p>`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:444
- **Text:** 'Aufgaben konnten nicht geladen werden.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setErr('Aufgaben konnten nicht geladen werden.');`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:482
- **Text:** '— Aufgabe wählen —'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="">— Aufgabe wählen —</option>`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:596
- **Text:** '— Status wählen —'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="">— Status wählen —</option>`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:630
- **Text:** 'Formular ausfüllen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Formular ausfüllen"`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:644
- **Text:** 'Wird gesendet…'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {submitting ? 'Wird gesendet…' : 'Absenden'}`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:736
- **Text:** 'Bestätigen?'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` <p>{(config.question as string) ?? 'Bestätigen?'}</p>`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:743
- **Text:** 'Bestätigen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {typeof config.confirmLabel === 'string' ? config.confirmLabel : 'Bestätigen'}`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:755
- **Text:** 'input.upload'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` case 'input.upload': {`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:765
- **Text:** 'Nur eine Datei erlaubt.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setUploadError('Nur eine Datei erlaubt.');`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:808
- **Text:** 'Upload fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` const msg = (err as { response?: { data?: { detail?: string } }; message?: string })?.response?.data?.detail ?? (err as Error)?.message ?? 'Upload fehlgeschlagen';`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:822
- **Text:** 'Bitte mindestens eine Datei hochladen.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setUploadError('Bitte mindestens eine Datei hochladen.');`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:851
- **Text:** 'Wird hochgeladen…'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` <FaUpload /> {uploading ? 'Wird hochgeladen…' : 'Datei(en) auswählen'}`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:851
- **Text:** 'Datei(en) auswählen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` <FaUpload /> {uploading ? 'Wird hochgeladen…' : 'Datei(en) auswählen'}`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:867
- **Text:** 'Wird gesendet…'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {submitting ? 'Wird gesendet…' : 'Absenden'}`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:875
- **Text:** 'Review Content anzeigen + Feedback'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p>Review Content anzeigen + Feedback</p>`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:877
- **Text:** 'Feedback...'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Feedback..."`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:893
- **Text:** 'Unbekannter Task-Typ: {nodeType}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p>Unbekannter Task-Typ: {nodeType}</p>`
## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:922
- **Text:** 'Fällig'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span className={styles.metaLabel}>Fällig</span>`
## `src/pages/views/neutralization/NeutralizationView.tsx`:75
- **Text:** 'Error loading configuration'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` 'Error loading configuration';`
## `src/pages/views/neutralization/NeutralizationView.tsx`:77
- **Text:** 'Error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Error', message);`
## `src/pages/views/neutralization/NeutralizationView.tsx`:94
- **Text:** 'Missing mandate or instance context'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` throw new Error('Missing mandate or instance context');`
## `src/pages/views/neutralization/NeutralizationView.tsx`:105
- **Text:** 'Configuration saved successfully.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Saved', 'Configuration saved successfully.');`
## `src/pages/views/neutralization/NeutralizationView.tsx`:112
- **Text:** 'Failed to save configuration'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` 'Failed to save configuration';`
## `src/pages/views/neutralization/NeutralizationView.tsx`:114
- **Text:** 'Error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Error', message);`
## `src/pages/views/neutralization/NeutralizationView.tsx`:123
- **Text:** 'Loading configuration...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` return <div className={styles.loading}>Loading configuration...</div>;`
## `src/pages/views/neutralization/NeutralizationView.tsx`:128
- **Text:** 'Neutralization Configuration'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h3 className={styles.sectionTitle}>Neutralization Configuration</h3>`
## `src/pages/views/neutralization/NeutralizationView.tsx`:137
- **Text:** 'Dismiss'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <button type="button" onClick={dismissError} aria-label="Dismiss">`
## `src/pages/views/neutralization/NeutralizationView.tsx`:144
- **Text:** 'Names to Parse (one per line):'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label htmlFor="names-to-parse">Names to Parse (one per line):</label>`
## `src/pages/views/neutralization/NeutralizationView.tsx`:150
- **Text:** 'Enter names to parse, one per line...'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Enter names to parse, one per line..."`
## `src/pages/views/neutralization/NeutralizationView.tsx`:162
- **Text:** 'Save Configuration'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {saving ? 'Saving...' : 'Save Configuration'}`
## `src/pages/views/neutralization/NeutralizationView.tsx`:217
- **Text:** 'Failed to load SharePoint sites'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setBrowseError(typeof detail === 'string' ? detail : 'Failed to load SharePoint sites');`
## `src/pages/views/neutralization/NeutralizationView.tsx`:236
- **Text:** 'Failed to load folders'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setBrowseError(typeof detail === 'string' ? detail : 'Failed to load folders');`
## `src/pages/views/neutralization/NeutralizationView.tsx`:321
- **Text:** 'Error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Error', 'Please enter text to neutralize.');`
## `src/pages/views/neutralization/NeutralizationView.tsx`:321
- **Text:** 'Please enter text to neutralize.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Error', 'Please enter text to neutralize.');`
## `src/pages/views/neutralization/NeutralizationView.tsx`:329
- **Text:** 'Text neutralized successfully.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Done', 'Text neutralized successfully.');`
## `src/pages/views/neutralization/NeutralizationView.tsx`:335
- **Text:** 'Failed to neutralize text'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` 'Failed to neutralize text';`
## `src/pages/views/neutralization/NeutralizationView.tsx`:336
- **Text:** 'Error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Error', message);`
## `src/pages/views/neutralization/NeutralizationView.tsx`:360
- **Text:** 'File neutralized. Download below or find it in your Files.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Done', 'File neutralized. Download below or find it in your Files.');`
## `src/pages/views/neutralization/NeutralizationView.tsx`:364
- **Text:** 'File neutralized. Download or find in Files.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Done', result.neutralized_file_id ? 'File neutralized. Download or find in Files.' : 'File neutralized.');`
## `src/pages/views/neutralization/NeutralizationView.tsx`:364
- **Text:** 'File neutralized.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Done', result.neutralized_file_id ? 'File neutralized. Download or find in Files.' : 'File neutralized.');`
## `src/pages/views/neutralization/NeutralizationView.tsx`:366
- **Text:** 'No result returned'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` const err = (result.processed_info as { error?: string })?.error || 'No result returned';`
## `src/pages/views/neutralization/NeutralizationView.tsx`:368
- **Text:** 'Error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Error', err);`
## `src/pages/views/neutralization/NeutralizationView.tsx`:378
- **Text:** 'Failed to neutralize file'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` 'Failed to neutralize file';`
## `src/pages/views/neutralization/NeutralizationView.tsx`:379
- **Text:** 'Error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Error', message);`
## `src/pages/views/neutralization/NeutralizationView.tsx`:392
- **Text:** 'Error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Error', 'Failed to download file');`
## `src/pages/views/neutralization/NeutralizationView.tsx`:392
- **Text:** 'Failed to download file'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Error', 'Failed to download file');`
## `src/pages/views/neutralization/NeutralizationView.tsx`:409
- **Text:** 'Error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Error', 'Failed to download file');`
## `src/pages/views/neutralization/NeutralizationView.tsx`:409
- **Text:** 'Failed to download file'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Error', 'Failed to download file');`
## `src/pages/views/neutralization/NeutralizationView.tsx`:423
- **Text:** 'Error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Error', 'No file data available to download. The neutralized file may not have been generated.');`
## `src/pages/views/neutralization/NeutralizationView.tsx`:423
- **Text:** 'No file data available to download. The neutralized file may not have been generated.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Error', 'No file data available to download. The neutralized file may not have been generated.');`
## `src/pages/views/neutralization/NeutralizationView.tsx`:428
- **Text:** 'Error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Error', 'No neutralized text to resolve.');`
## `src/pages/views/neutralization/NeutralizationView.tsx`:428
- **Text:** 'No neutralized text to resolve.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Error', 'No neutralized text to resolve.');`
## `src/pages/views/neutralization/NeutralizationView.tsx`:435
- **Text:** 'Text resolved successfully.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Done', 'Text resolved successfully.');`
## `src/pages/views/neutralization/NeutralizationView.tsx`:441
- **Text:** 'Failed to resolve text'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` 'Failed to resolve text';`
## `src/pages/views/neutralization/NeutralizationView.tsx`:442
- **Text:** 'Error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Error', message);`
## `src/pages/views/neutralization/NeutralizationView.tsx`:455
- **Text:** 'Error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Error', 'Both SharePoint source and target paths are required.');`
## `src/pages/views/neutralization/NeutralizationView.tsx`:455
- **Text:** 'Both SharePoint source and target paths are required.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Error', 'Both SharePoint source and target paths are required.');`
## `src/pages/views/neutralization/NeutralizationView.tsx`:462
- **Text:** 'SharePoint files processed successfully.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Done', result.message || 'SharePoint files processed successfully.');`
## `src/pages/views/neutralization/NeutralizationView.tsx`:464
- **Text:** 'Error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Error', result.message || 'Processing failed');`
## `src/pages/views/neutralization/NeutralizationView.tsx`:464
- **Text:** 'Processing failed'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Error', result.message || 'Processing failed');`
## `src/pages/views/neutralization/NeutralizationView.tsx`:471
- **Text:** 'Failed to process SharePoint files'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` 'Failed to process SharePoint files';`
## `src/pages/views/neutralization/NeutralizationView.tsx`:472
- **Text:** 'Error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Error', message);`
## `src/pages/views/neutralization/NeutralizationView.tsx`:481
- **Text:** 'Manual Text &amp; File Neutralization'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h3 className={styles.sectionTitle}>Manual Text &amp; File Neutralization</h3>`
## `src/pages/views/neutralization/NeutralizationView.tsx`:488
- **Text:** '1. Upload file to neutralize:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>1. Upload file to neutralize:</label>`
## `src/pages/views/neutralization/NeutralizationView.tsx`:503
- **Text:** 'Upload & Neutralize File'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {neutralizing ? 'Processing...' : 'Upload & Neutralize File'}`
## `src/pages/views/neutralization/NeutralizationView.tsx`:511
- **Text:** 'Neutralized File'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` Download {fileResult.fileName || 'Neutralized File'}`
## `src/pages/views/neutralization/NeutralizationView.tsx`:523
- **Text:** '2. Or paste text:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label htmlFor="input-text">2. Or paste text:</label>`
## `src/pages/views/neutralization/NeutralizationView.tsx`:529
- **Text:** 'Enter text to neutralize...'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Enter text to neutralize..."`
## `src/pages/views/neutralization/NeutralizationView.tsx`:540
- **Text:** 'Neutralize Text'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {neutralizing ? 'Neutralizing...' : 'Neutralize Text'}`
## `src/pages/views/neutralization/NeutralizationView.tsx`:548
- **Text:** 'Resolve Text'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {resolving ? 'Resolving...' : 'Resolve Text'}`
## `src/pages/views/neutralization/NeutralizationView.tsx`:553
- **Text:** '3. Or neutralize SharePoint files:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label>3. Or neutralize SharePoint files:</label>`
## `src/pages/views/neutralization/NeutralizationView.tsx`:563
- **Text:** 'SharePoint source path...'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="SharePoint source path..."`
## `src/pages/views/neutralization/NeutralizationView.tsx`:570
- **Text:** 'Browse SharePoint'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title={hasMsftConnection ? 'Browse SharePoint' : 'Add a Microsoft connection first (Basisdaten → Connections)'}`
## `src/pages/views/neutralization/NeutralizationView.tsx`:570
- **Text:** 'Add a Microsoft connection first (Basisdaten → Connections)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title={hasMsftConnection ? 'Browse SharePoint' : 'Add a Microsoft connection first (Basisdaten → Connections)'}`
## `src/pages/views/neutralization/NeutralizationView.tsx`:584
- **Text:** 'SharePoint target path...'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="SharePoint target path..."`
## `src/pages/views/neutralization/NeutralizationView.tsx`:591
- **Text:** 'Browse SharePoint'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title={hasMsftConnection ? 'Browse SharePoint' : 'Add a Microsoft connection first (Basisdaten → Connections)'}`
## `src/pages/views/neutralization/NeutralizationView.tsx`:591
- **Text:** 'Add a Microsoft connection first (Basisdaten → Connections)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title={hasMsftConnection ? 'Browse SharePoint' : 'Add a Microsoft connection first (Basisdaten → Connections)'}`
## `src/pages/views/neutralization/NeutralizationView.tsx`:606
- **Text:** 'Enter source and target SharePoint paths to enable'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` ? 'Enter source and target SharePoint paths to enable'`
## `src/pages/views/neutralization/NeutralizationView.tsx`:610
- **Text:** 'Neutralize SharePoint Files'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {processingSharepoint ? 'Processing...' : 'Neutralize SharePoint Files'}`
## `src/pages/views/neutralization/NeutralizationView.tsx`:617
- **Text:** 'Neutralized Text:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label htmlFor="neutralized-text">Neutralized Text:</label>`
## `src/pages/views/neutralization/NeutralizationView.tsx`:653
- **Text:** 'Loading sites...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.loading}>Loading sites...</div>`
## `src/pages/views/neutralization/NeutralizationView.tsx`:663
- **Text:** 'Select a site...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="">Select a site...</option>`
## `src/pages/views/neutralization/NeutralizationView.tsx`:678
- **Text:** 'Loading folders...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.loading}>Loading folders...</div>`
## `src/pages/views/neutralization/NeutralizationView.tsx`:740
- **Text:** 'Configuration'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { id: 'config', label: 'Configuration', content: <ConfigTab /> },`
## `src/pages/views/neutralization/NeutralizationView.tsx`:741
- **Text:** 'Playground'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { id: 'playground', label: 'Playground', content: <PlaygroundTab /> },`
## `src/pages/views/realestate/RealEstateDashboardView.tsx`:57
- **Text:** 'Deine Rolle'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {instance.userRoles.length === 1 ? 'Deine Rolle' : 'Deine Rollen'}`
## `src/pages/views/realestate/RealEstateDashboardView.tsx`:57
- **Text:** 'Deine Rollen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {instance.userRoles.length === 1 ? 'Deine Rolle' : 'Deine Rollen'}`
## `src/pages/views/realestate/RealEstateInstanceRolesPlaceholder.tsx`:4
- **Text:** 'Rollen & Rechte'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` * Platzhalter für die View "Rollen & Rechte" bei Real-Estate-Instanzen.`
## `src/pages/views/realestate/RealEstateInstanceRolesPlaceholder.tsx`:16
- **Text:** 'Rollen & Rechte'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h3>Rollen & Rechte</h3>`
## `src/pages/views/realestate/RealEstateParcelsView.tsx`:134
- **Text:** 'Fehler beim Laden der Parzellen: {error}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.errorMessage}>Fehler beim Laden der Parzellen: {error}</p>`
## `src/pages/views/realestate/RealEstateParcelsView.tsx`:147
- **Text:** 'Parzellen verwalten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.pageSubtitle}>Parzellen verwalten</p>`
## `src/pages/views/realestate/RealEstateParcelsView.tsx`:190
- **Text:** 'Löschen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: 'Löschen',`
## `src/pages/views/realestate/RealEstateParcelsView.tsx`:205
- **Text:** 'Keine Parzellen gefunden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` emptyMessage="Keine Parzellen gefunden"`
## `src/pages/views/realestate/RealEstateParcelsView.tsx`:214
- **Text:** 'Neue Parzelle'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {isCreateMode ? 'Neue Parzelle' : 'Parzelle bearbeiten'}`
## `src/pages/views/realestate/RealEstateParcelsView.tsx`:214
- **Text:** 'Parzelle bearbeiten'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {isCreateMode ? 'Neue Parzelle' : 'Parzelle bearbeiten'}`
## `src/pages/views/realestate/RealEstateParcelsView.tsx`:224
- **Text:** 'Lade Formular...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Lade Formular...</span>`
## `src/pages/views/realestate/RealEstateProjectsView.tsx`:124
- **Text:** 'Fehler beim Laden der Projekte: {error}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.errorMessage}>Fehler beim Laden der Projekte: {error}</p>`
## `src/pages/views/realestate/RealEstateProjectsView.tsx`:137
- **Text:** 'Projekte verwalten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.pageSubtitle}>Projekte verwalten</p>`
## `src/pages/views/realestate/RealEstateProjectsView.tsx`:164
- **Text:** 'Löschen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` ...(canDelete ? [{ type: 'delete' as const, title: 'Löschen', loading: (row: RealEstateProject) => deletingItems.has(row.id) }] : []),`
## `src/pages/views/realestate/RealEstateProjectsView.tsx`:168
- **Text:** 'Keine Projekte gefunden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` emptyMessage="Keine Projekte gefunden"`
## `src/pages/views/realestate/RealEstateProjectsView.tsx`:176
- **Text:** 'Neues Projekt'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` <h2 className={styles.modalTitle}>{isCreateMode ? 'Neues Projekt' : 'Projekt bearbeiten'}</h2>`
## `src/pages/views/realestate/RealEstateProjectsView.tsx`:176
- **Text:** 'Projekt bearbeiten'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` <h2 className={styles.modalTitle}>{isCreateMode ? 'Neues Projekt' : 'Projekt bearbeiten'}</h2>`
## `src/pages/views/realestate/RealEstateProjectsView.tsx`:183
- **Text:** 'Lade Formular...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Lade Formular...</span>`
## `src/pages/views/realestate/pek/PekLocationInput.tsx`:37
- **Text:** 'z.B. Bundesplatz 3'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="z.B. Bundesplatz 3"`
## `src/pages/views/realestate/pek/PekLocationInput.tsx`:38
- **Text:** 'Adresse oder Parzelle'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` label="Adresse oder Parzelle"`
## `src/pages/views/realestate/pek/PekMapView.tsx`:33
- **Text:** 'Alle Parzellen anzeigen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Alle Parzellen anzeigen</span>`
## `src/pages/views/realestate/pek/PekMapView.tsx`:53
- **Text:** 'Klicken Sie auf die Karte, um einen Standort auszuwählen, oder suchen Sie nach einer Adresse oben.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` emptyMessage="Klicken Sie auf die Karte, um einen Standort auszuwählen, oder suchen Sie nach einer Adresse oben."`
## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:12
- **Text:** 'Mein Account'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` * Supports "Mein Account" login with saved credentials and MFA relay.`
## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:55
- **Text:** 'Fehler beim Laden der Sitzungen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError(err.message || 'Fehler beim Laden der Sitzungen');`
## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:103
- **Text:** 'MFA-Zeitlimit ueberschritten. Bitte erneut versuchen.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError('MFA-Zeitlimit ueberschritten. Bitte erneut versuchen.');`
## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:139
- **Text:** 'Fehler beim Speichern der Zugangsdaten'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError(err.message || 'Fehler beim Speichern der Zugangsdaten');`
## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:171
- **Text:** 'Fehler beim Starten der Sitzung'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError(err.message || 'Fehler beim Starten der Sitzung');`
## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:191
- **Text:** 'Fehler beim Senden des MFA-Codes'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError(err.message || 'Fehler beim Senden des MFA-Codes');`
## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:202
- **Text:** 'Fehler beim Loeschen der Zugangsdaten'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError(err.message || 'Fehler beim Loeschen der Zugangsdaten');`
## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:211
- **Text:** 'Fehler beim Stoppen der Sitzung'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError(err.message || 'Fehler beim Stoppen der Sitzung');`
## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:220
- **Text:** 'Fehler beim Loeschen der Sitzung'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError(err.message || 'Fehler beim Loeschen der Sitzung');`
## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:272
- **Text:** 'Code eingeben'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Code eingeben"`
## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:300
- **Text:** 'Neue Bot-Sitzung starten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h3 className={styles.cardTitle}>Neue Bot-Sitzung starten</h3>`
## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:306
- **Text:** 'Teams Meeting-Link *'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label className={styles.label}>Teams Meeting-Link *</label>`
## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:325
- **Text:** 'System-Bot (authentifiziert)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` {_isSysAdmin && <option value="systemBot">System-Bot (authentifiziert)</option>}`
## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:326
- **Text:** 'Anonymer Gast'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="anonymous">Anonymer Gast</option>`
## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:327
- **Text:** 'Mein Account'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="userAccount">Mein Account</option>`
## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:354
- **Text:** 'Microsoft E-Mail'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label className={styles.label}>Microsoft E-Mail</label>`
## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:358
- **Text:** 'name@example.com'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="name@example.com"`
## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:369
- **Text:** 'Microsoft-Passwort'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Microsoft-Passwort"`
## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:393
- **Text:** 'Bot-Name (optional)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label className={styles.label}>Bot-Name (optional)</label>`
## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:397
- **Text:** 'AI Assistant'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="AI Assistant"`
## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:405
- **Text:** 'Session-Kontext (optional)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label className={styles.label}>Session-Kontext (optional)</label>`
## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:408
- **Text:** 'Agenda, Hintergrundinformationen, Dokumente oder andere Informationen fuer den Bot...'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Agenda, Hintergrundinformationen, Dokumente oder andere Informationen fuer den Bot..."`
## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:426
- **Text:** 'Wird gestartet...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {isStarting ? 'Wird gestartet...' : 'Bot ins Meeting senden'}`
## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:426
- **Text:** 'Bot ins Meeting senden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {isStarting ? 'Wird gestartet...' : 'Bot ins Meeting senden'}`
## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:435
- **Text:** 'Aktive Sitzungen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h3 className={styles.sectionTitle}>Aktive Sitzungen</h3>`
## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:448
- **Text:** "Seit: {new Date(session.startedAt).toLocaleTimeString('de-CH')}"
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` {session.startedAt && <span>Seit: {new Date(session.startedAt).toLocaleTimeString('de-CH')}</span>}`
## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:451
- **Text:** 'navigate(`/mandates/${mandateId}/${featureCode}/${instanceId}/sessions?sessionId=${session.id}`)}>Live ansehen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <button className={styles.viewButton} onClick={() => navigate(`/mandates/${mandateId}/${featureCode}/${instanceId}/sessions?sessionId=${session.id}`)}>Live ansehen</button>`
## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:467
- **Text:** 'Lade Sitzungen...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {loading ? 'Lade Sitzungen...' : `Vergangene Sitzungen (${pastSessions.length})`}`
## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:470
- **Text:** 'Noch keine vergangenen Sitzungen.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.emptyState}>Noch keine vergangenen Sitzungen.</p>`
## `src/pages/views/teamsbot/TeamsbotSessionView.tsx`:87
- **Text:** 'Fehler beim Laden der Sitzung'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError(err.message || 'Fehler beim Laden der Sitzung');`
## `src/pages/views/teamsbot/TeamsbotSessionView.tsx`:199
- **Text:** 'Unbekannter Fehler'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` const errMsg = errData.message || 'Unbekannter Fehler';`
## `src/pages/views/teamsbot/TeamsbotSessionView.tsx`:280
- **Text:** 'Lade Sitzung...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` if (loading) return <div className={styles.loading}>Lade Sitzung...</div>;`
## `src/pages/views/teamsbot/TeamsbotSessionView.tsx`:283
- **Text:** 'Keine Sitzungen vorhanden.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p>Keine Sitzungen vorhanden.</p>`
## `src/pages/views/teamsbot/TeamsbotSessionView.tsx`:287
- **Text:** 'Sitzung nicht gefunden'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` if (!session) return <div className={styles.errorBanner}>Sitzung nicht gefunden</div>;`
## `src/pages/views/teamsbot/TeamsbotSessionView.tsx`:305
- **Text:** '2px solid #4A90D9'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: s.id === sessionId ? '2px solid #4A90D9' : '1px solid #ddd',`
## `src/pages/views/teamsbot/TeamsbotSessionView.tsx`:305
- **Text:** '1px solid #ddd'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: s.id === sessionId ? '2px solid #4A90D9' : '1px solid #ddd',`
## `src/pages/views/teamsbot/TeamsbotSessionView.tsx`:313
- **Text:** ' (aktiv)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {['active', 'joining', 'pending'].includes(s.status) && ' (aktiv)'}`
## `src/pages/views/teamsbot/TeamsbotSessionView.tsx`:314
- **Text:** ' (beendet)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {s.status === 'ended' && ' (beendet)'}`
## `src/pages/views/teamsbot/TeamsbotSessionView.tsx`:331
- **Text:** 'Sitzung beenden'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <button className={styles.stopButton} onClick={_handleStop}>Sitzung beenden</button>`
## `src/pages/views/teamsbot/TeamsbotSessionView.tsx`:342
- **Text:** 'Transkript ({transcripts.length} Segmente)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h4 className={styles.panelTitle}>Transkript ({transcripts.length} Segmente)</h4>`
## `src/pages/views/teamsbot/TeamsbotSessionView.tsx`:358
- **Text:** 'Noch kein Transkript vorhanden.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.emptyState}>Noch kein Transkript vorhanden.</div>`
## `src/pages/views/teamsbot/TeamsbotSessionView.tsx`:365
- **Text:** 'Bot-Antworten ({botResponses.length})'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h4 className={styles.panelTitle}>Bot-Antworten ({botResponses.length})</h4>`
## `src/pages/views/teamsbot/TeamsbotSessionView.tsx`:376
- **Text:** 'Reasoning: {r.reasoning}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <em>Reasoning: {r.reasoning}</em>`
## `src/pages/views/teamsbot/TeamsbotSessionView.tsx`:389
- **Text:** 'Noch keine Bot-Antworten.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.emptyState}>Noch keine Bot-Antworten.</div>`
## `src/pages/views/teamsbot/TeamsbotSessionView.tsx`:405
- **Text:** 'TTS Delivery Status'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h4 className={styles.panelTitle}>TTS Delivery Status</h4>`
## `src/pages/views/teamsbot/TeamsbotSessionView.tsx`:407
- **Text:** 'Noch keine TTS-Events.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.emptyState}>Noch keine TTS-Events.</div>`
## `src/pages/views/teamsbot/TeamsbotSessionView.tsx`:414
- **Text:** "ws: {ev.hasWebSocket ? 'yes' : 'no'}"
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>ws: {ev.hasWebSocket ? 'yes' : 'no'}</span>`
## `src/pages/views/teamsbot/TeamsbotSessionView.tsx`:459
- **Text:** 'Screenshots laden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {screenshotsLoading ? 'Laden...' : screenshotsLoaded ? 'Aktualisieren' : 'Screenshots laden'}`
## `src/pages/views/teamsbot/TeamsbotSessionView.tsx`:463
- **Text:** 'Keine Screenshots fuer diese Session.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.emptyState}>Keine Screenshots fuer diese Session.</div>`
## `src/pages/views/teamsbot/TeamsbotSessionView.tsx`:474
- **Text:** 'noopener noreferrer'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` rel="noopener noreferrer"`
## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:8
- **Text:** 'Wavenet A'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `/** Format voice name for display: "de-DE-Wavenet-A" -> "Wavenet A" + gender */`
## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:60
- **Text:** 'Fehler beim Laden der Konfiguration'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError(err.message || 'Fehler beim Laden der Konfiguration');`
## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:81
- **Text:** 'Einstellungen gespeichert'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setSuccessMsg('Einstellungen gespeichert');`
## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:84
- **Text:** 'Fehler beim Speichern'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError(err.message || 'Fehler beim Speichern');`
## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:117
- **Text:** 'AI Assistant'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` const botName = formData.botName || 'AI Assistant';`
## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:135
- **Text:** 'Stimmtest fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError(result.error || 'Stimmtest fehlgeschlagen');`
## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:139
- **Text:** 'Stimmtest fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError(err.message || 'Stimmtest fehlgeschlagen');`
## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:146
- **Text:** 'Lade Konfiguration...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` if (loading) return <div className={styles.loading}>Lade Konfiguration...</div>;`
## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:167
- **Text:** 'AI Assistant'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="AI Assistant"`
## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:170
- **Text:** 'Nyla Larsson'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` Default-Name fuer den Bot im Meeting. Falls keiner angegeben, wird der Name des System-Bots verwendet (z.B. "Nyla Larsson").`
## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:186
- **Text:** 'Beschreibe, wie sich der Bot im Meeting verhalten soll...'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Beschreibe, wie sich der Bot im Meeting verhalten soll..."`
## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:188
- **Text:** 'Instruktionen fuer den AI-Bot: Wann und wie soll er antworten?'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span className={styles.hint}>Instruktionen fuer den AI-Bot: Wann und wie soll er antworten?</span>`
## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:198
- **Text:** 'Automatisch - AI entscheidet selbst'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="auto">Automatisch - AI entscheidet selbst</option>`
## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:199
- **Text:** 'Manuell - Antworten muessen bestaetigt werden'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="manual">Manuell - Antworten muessen bestaetigt werden</option>`
## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:200
- **Text:** 'Nur Transkription - Keine AI-Antworten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="transcribeOnly">Nur Transkription - Keine AI-Antworten</option>`
## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:211
- **Text:** 'Nur Sprache - Bot antwortet per Audio'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="voice">Nur Sprache - Bot antwortet per Audio</option>`
## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:212
- **Text:** 'Nur Chat - Bot antwortet per Textnachricht'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="chat">Nur Chat - Bot antwortet per Textnachricht</option>`
## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:213
- **Text:** 'Sprache + Chat - Bot antwortet per Audio und Text'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="both">Sprache + Chat - Bot antwortet per Audio und Text</option>`
## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:215
- **Text:** 'Wie soll der Bot im Meeting antworten?'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span className={styles.hint}>Wie soll der Bot im Meeting antworten?</span>`
## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:225
- **Text:** 'Automatisch - System waehlt basierend auf Join-Modus'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="auto">Automatisch - System waehlt basierend auf Join-Modus</option>`
## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:226
- **Text:** 'Captions - Teams Live-Captions (nur Englisch verfuegbar)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="caption">Captions - Teams Live-Captions (nur Englisch verfuegbar)</option>`
## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:227
- **Text:** 'Audio-Stream - Echtzeit-Spracherkennung ueber Gateway (alle Sprachen)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="audio">Audio-Stream - Echtzeit-Spracherkennung ueber Gateway (alle Sprachen)</option>`
## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:252
- **Text:** 'Deutsch (Deutschland)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="de-DE">Deutsch (Deutschland)</option>`
## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:253
- **Text:** 'English (US)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="en-US">English (US)</option>`
## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:258
- **Text:** 'Sprache fuer Captions und Sprachausgabe ({languages.length} Sprachen verfuegbar)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span className={styles.hint}>Sprache fuer Captions und Sprachausgabe ({languages.length} Sprachen verfuegbar)</span>`
## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:282
- **Text:** 'Stimme testen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Stimme testen"`
## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:290
- **Text:** 'Lade Stimmen...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {loadingVoices ? 'Lade Stimmen...' : `${voices.length} Stimmen verfuegbar - klicke Test fuer Vorschau`}`
## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:297
- **Text:** 'Erweiterte Einstellungen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h4 className={styles.sectionTitle}>Erweiterte Einstellungen</h4>`
## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:301
- **Text:** 'Analyse-Intervall (Sek.)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label className={styles.label}>Analyse-Intervall (Sek.)</label>`
## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:310
- **Text:** 'Periodisches Analyse-Intervall'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span className={styles.hint}>Periodisches Analyse-Intervall</span>`
## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:314
- **Text:** 'Cooldown (Sek.)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label className={styles.label}>Cooldown (Sek.)</label>`
## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:323
- **Text:** 'Min. Abstand zwischen AI-Calls'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span className={styles.hint}>Min. Abstand zwischen AI-Calls</span>`
## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:327
- **Text:** 'Kontext-Fenster (Segmente)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label className={styles.label}>Kontext-Fenster (Segmente)</label>`
## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:336
- **Text:** 'Anzahl Transkript-Segmente fuer AI-Kontext'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span className={styles.hint}>Anzahl Transkript-Segmente fuer AI-Kontext</span>`
## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:341
- **Text:** 'Browser Bot URL (optional)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <label className={styles.label}>Browser Bot URL (optional)</label>`
## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:347
- **Text:** 'Automatisch aus Umgebungskonfiguration'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Automatisch aus Umgebungskonfiguration"`
## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:349
- **Text:** 'URL des Browser Bot Service. Leer lassen fuer Standard-Konfiguration.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span className={styles.hint}>URL des Browser Bot Service. Leer lassen fuer Standard-Konfiguration.</span>`
## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:375
- **Text:** 'Konfiguration speichern'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {saving ? 'Speichern...' : 'Konfiguration speichern'}`
## `src/pages/views/trustee/TrusteeAccountingSettingsView.tsx`:193
- **Text:** "&middot; {t('Letzter Sync:')} {existingConfig.lastSyncStatus}"
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <> &middot; {t('Letzter Sync:')} {existingConfig.lastSyncStatus}</>`
## `src/pages/views/trustee/TrusteeAccountingSettingsView.tsx`:209
- **Text:** "&middot; {t('Status:')} {existingConfig.lastSyncStatus}"
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <> &middot; {t('Status:')} {existingConfig.lastSyncStatus}</>`
## `src/pages/views/trustee/TrusteeAccountingSettingsView.tsx`:293
- **Text:** 'Save & Test'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h4>Save & Test</h4>`
## `src/pages/views/trustee/TrusteeAccountingSettingsView.tsx`:458
- **Text:** "&middot; {t('Letzter Import:')} {new Date(importStatus.lastSyncAt * 1000).toLocaleString()}"
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <> &middot; {t('Letzter Import:')} {new Date(importStatus.lastSyncAt * 1000).toLocaleString()}</>`
## `src/pages/views/trustee/TrusteeDashboardView.tsx`:81
- **Text:** 'Not configured'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` : 'Not configured'`
## `src/pages/views/trustee/TrusteeDashboardView.tsx`:99
- **Text:** 'Deine Rolle'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {(instance?.userRoles?.length || 0) === 1 ? 'Deine Rolle' : 'Deine Rollen'}`
## `src/pages/views/trustee/TrusteeDashboardView.tsx`:99
- **Text:** 'Deine Rollen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {(instance?.userRoles?.length || 0) === 1 ? 'Deine Rolle' : 'Deine Rollen'}`
## `src/pages/views/trustee/TrusteeDocumentsView.tsx`:139
- **Text:** 'Fehler beim Herunterladen des Dokuments.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Fehler', 'Fehler beim Herunterladen des Dokuments.');`
## `src/pages/views/trustee/TrusteeDocumentsView.tsx`:171
- **Text:** 'Fehler beim Laden der Dokumente: {error}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.errorMessage}>Fehler beim Laden der Dokumente: {error}</p>`
## `src/pages/views/trustee/TrusteeDocumentsView.tsx`:184
- **Text:** 'Belege und Dokumente verwalten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.pageSubtitle}>Belege und Dokumente verwalten</p>`
## `src/pages/views/trustee/TrusteeDocumentsView.tsx`:225
- **Text:** 'Löschen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: 'Löschen',`
## `src/pages/views/trustee/TrusteeDocumentsView.tsx`:247
- **Text:** 'Keine Dokumente gefunden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` emptyMessage="Keine Dokumente gefunden"`
## `src/pages/views/trustee/TrusteeDocumentsView.tsx`:257
- **Text:** 'Neues Dokument'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {isCreateMode ? 'Neues Dokument' : 'Dokument bearbeiten'}`
## `src/pages/views/trustee/TrusteeDocumentsView.tsx`:257
- **Text:** 'Dokument bearbeiten'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {isCreateMode ? 'Neues Dokument' : 'Dokument bearbeiten'}`
## `src/pages/views/trustee/TrusteeDocumentsView.tsx`:270
- **Text:** 'Lade Formular...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Lade Formular...</span>`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:71
- **Text:** 'Trustee Expense Import'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `const EXPENSE_IMPORT_LABEL = 'Trustee Expense Import';`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:72
- **Text:** '0 22 * * *'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `const DAILY_CRON = '0 22 * * *';`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:241
- **Text:** 'Failed to load SharePoint sites'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError(_parseErrorDetail(err.response?.data?.detail) || 'Failed to load SharePoint sites');`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:263
- **Text:** 'Failed to load folders'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError(_parseErrorDetail(err.response?.data?.detail) || 'Failed to load folders');`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:318
- **Text:** 'Microsoft connection failed'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError(err.message || 'Microsoft connection failed');`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:326
- **Text:** 'Missing Connection'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Missing Connection', 'Please select a Microsoft connection first.');`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:326
- **Text:** 'Please select a Microsoft connection first.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Missing Connection', 'Please select a Microsoft connection first.');`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:330
- **Text:** 'Missing Folder'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Missing Folder', 'Please select a SharePoint folder first.');`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:330
- **Text:** 'Please select a SharePoint folder first.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Missing Folder', 'Please select a SharePoint folder first.');`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:334
- **Text:** 'Error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Error', 'Feature instance not found. Please refresh the page.');`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:334
- **Text:** 'Feature instance not found. Please refresh the page.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Error', 'Feature instance not found. Please refresh the page.');`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:357
- **Text:** 'Daily at 22:00'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Daily at 22:00',`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:373
- **Text:** 'Expense import workflow updated and activated!'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` ? 'Expense import workflow updated and activated!'`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:374
- **Text:** 'Expense import workflow updated and deactivated.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` : 'Expense import workflow updated and deactivated.';`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:376
- **Text:** 'Success'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Success', msg);`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:387
- **Text:** 'Expense import workflow created and activated! It will run daily at 22:00.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` const msg = 'Expense import workflow created and activated! It will run daily at 22:00.';`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:389
- **Text:** 'Success'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Success', msg);`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:404
- **Text:** 'Failed to save workflow'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` const errorMsg = _parseErrorDetail(err.response?.data?.detail) || err.message || 'Failed to save workflow';`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:406
- **Text:** 'Error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Error', errorMsg);`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:414
- **Text:** 'Missing data'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Missing data', 'Please select connection and folder first.');`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:414
- **Text:** 'Please select connection and folder first.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Missing data', 'Please select connection and folder first.');`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:431
- **Text:** 'Workflow started. Extract → Process → Sync will run once.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Started', 'Workflow started. Extract → Process → Sync will run once.');`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:433
- **Text:** 'Failed to start workflow'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` const msg = _parseErrorDetail(err.response?.data?.detail) || err.message || 'Failed to start workflow';`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:435
- **Text:** 'Error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Error', msg);`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:454
- **Text:** 'Expense import workflow deactivated.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setSuccessMessage('Expense import workflow deactivated.');`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:455
- **Text:** 'Expense import workflow deactivated.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Deactivated', 'Expense import workflow deactivated.');`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:458
- **Text:** 'Failed to deactivate workflow'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` const errorMsg = _parseErrorDetail(err.response?.data?.detail) || err.message || 'Failed to deactivate workflow';`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:460
- **Text:** 'Error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Error', errorMsg);`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:469
- **Text:** 'Expense Import Setup'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h3 className={styles.sectionTitle}>Expense Import Setup</h3>`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:478
- **Text:** 'How it works'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="How it works"`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:484
- **Text:** 'How it works:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <strong>How it works:</strong>`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:486
- **Text:** 'Place expense PDF documents (receipts, invoices) in the selected SharePoint folder'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <li>Place expense PDF documents (receipts, invoices) in the selected SharePoint folder</li>`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:487
- **Text:** 'The system runs daily at 22:00 and processes all PDF files'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <li>The system runs daily at 22:00 and processes all PDF files</li>`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:488
- **Text:** 'AI extracts expense data: date, amount, VAT, company, description'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <li>AI extracts expense data: date, amount, VAT, company, description</li>`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:489
- **Text:** 'Each expense is saved as a position in this Trustee instance'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <li>Each expense is saved as a position in this Trustee instance</li>`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:490
- **Text:** 'Processed PDFs are moved to a "processed" subfolder'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <li>Processed PDFs are moved to a "processed" subfolder</li>`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:491
- **Text:** 'Failed PDFs are moved to an "error" subfolder'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <li>Failed PDFs are moved to an "error" subfolder</li>`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:492
- **Text:** 'Maximum 50 PDFs are processed per run'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <li>Maximum 50 PDFs are processed per run</li>`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:513
- **Text:** 'Current Status:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <strong>Current Status:</strong> {existingWorkflow.active ? '✓ Active' : '○ Inactive'}`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:513
- **Text:** '✓ Active'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` <strong>Current Status:</strong> {existingWorkflow.active ? '✓ Active' : '○ Inactive'}`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:513
- **Text:** '○ Inactive'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` <strong>Current Status:</strong> {existingWorkflow.active ? '✓ Active' : '○ Inactive'}`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:515
- **Text:** 'Folder: {existingWorkflow.sharepointFolder}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <><br />Folder: {existingWorkflow.sharepointFolder}</>`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:524
- **Text:** 'Microsoft Connection'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h4>Microsoft Connection</h4>`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:531
- **Text:** 'Connect Microsoft Account'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {isConnecting ? 'Connecting...' : 'Connect Microsoft Account'}`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:537
- **Text:** 'Microsoft Account'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` Connected as <strong>{msftConnections[0].accountName || 'Microsoft Account'}</strong>`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:554
- **Text:** 'Select a Microsoft account...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="">Select a Microsoft account...</option>`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:567
- **Text:** 'Add another account'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {isConnecting ? 'Connecting...' : 'Add another account'}`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:579
- **Text:** 'SharePoint Site'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h4>SharePoint Site</h4>`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:581
- **Text:** 'Loading sites...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.loadingText}>Loading sites...</div>`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:588
- **Text:** 'Select a site...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <option value="">Select a site...</option>`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:605
- **Text:** 'Expense Folder'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h4>Expense Folder</h4>`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:610
- **Text:** 'Loading folders...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.loadingText}>Loading folders...</div>`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:651
- **Text:** 'No subfolders found'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.emptyText}>No subfolders found</div>`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:670
- **Text:** 'Update Configuration'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` <h4>{existingWorkflow ? 'Update Configuration' : 'Activate Daily Import'}</h4>`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:670
- **Text:** 'Activate Daily Import'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` <h4>{existingWorkflow ? 'Update Configuration' : 'Activate Daily Import'}</h4>`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:681
- **Text:** 'Save & Activate'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {isActivating ? 'Saving...' : (existingWorkflow ? 'Save & Activate' : 'Activate Daily Import')}`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:681
- **Text:** 'Activate Daily Import'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {isActivating ? 'Saving...' : (existingWorkflow ? 'Save & Activate' : 'Activate Daily Import')}`
## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:688
- **Text:** 'Jetzt ausführen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {isRunningNow ? 'Starting...' : 'Jetzt ausführen'}`
## `src/pages/views/trustee/TrusteeInstanceRolesView.tsx`:56
- **Text:** 'Fehler beim Laden der Rollen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` const errorMsg = err.response?.data?.detail || err.message || 'Fehler beim Laden der Rollen';`
## `src/pages/views/trustee/TrusteeInstanceRolesView.tsx`:76
- **Text:** 'Keine Feature-Instanz ausgewählt'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.error}>Keine Feature-Instanz ausgewählt</div>`
## `src/pages/views/trustee/TrusteeInstanceRolesView.tsx`:84
- **Text:** 'Lade Instanz-Rollen...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <div className={styles.loading}>Lade Instanz-Rollen...</div>`
## `src/pages/views/trustee/TrusteeInstanceRolesView.tsx`:132
- **Text:** 'Keine Instanz-Rollen gefunden'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p>Keine Instanz-Rollen gefunden</p>`
## `src/pages/views/trustee/TrusteePositionDocumentsView.tsx`:139
- **Text:** 'Fehler beim Laden der Verknüpfungen: {error}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.errorMessage}>Fehler beim Laden der Verknüpfungen: {error}</p>`
## `src/pages/views/trustee/TrusteePositionDocumentsView.tsx`:152
- **Text:** 'Belege mit Buchungspositionen verknüpfen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.pageSubtitle}>Belege mit Buchungspositionen verknüpfen</p>`
## `src/pages/views/trustee/TrusteePositionDocumentsView.tsx`:188
- **Text:** 'Verknüpfung bearbeiten'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: 'Verknüpfung bearbeiten',`
## `src/pages/views/trustee/TrusteePositionDocumentsView.tsx`:194
- **Text:** 'Verknüpfung entfernen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: 'Verknüpfung entfernen',`
## `src/pages/views/trustee/TrusteePositionDocumentsView.tsx`:206
- **Text:** 'Keine Verknüpfungen gefunden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` emptyMessage="Keine Verknüpfungen gefunden"`
## `src/pages/views/trustee/TrusteePositionDocumentsView.tsx`:215
- **Text:** 'Neue Verknüpfung erstellen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h2 className={styles.modalTitle}>Neue Verknüpfung erstellen</h2>`
## `src/pages/views/trustee/TrusteePositionDocumentsView.tsx`:227
- **Text:** 'Lade Formular...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Lade Formular...</span>`
## `src/pages/views/trustee/TrusteePositionDocumentsView.tsx`:236
- **Text:** 'Verknüpfung erstellen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` submitButtonText="Verknüpfung erstellen"`
## `src/pages/views/trustee/TrusteePositionDocumentsView.tsx`:251
- **Text:** 'Verknüpfung bearbeiten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h2 className={styles.modalTitle}>Verknüpfung bearbeiten</h2>`
## `src/pages/views/trustee/TrusteePositionDocumentsView.tsx`:263
- **Text:** 'Lade Formular...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Lade Formular...</span>`
## `src/pages/views/trustee/TrusteePositionsView.tsx`:91
- **Text:** 'Sync teilweise fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Sync teilweise fehlgeschlagen', `${res.success} OK, ${res.errors} Fehler.`);`
## `src/pages/views/trustee/TrusteePositionsView.tsx`:94
- **Text:** 'Sync fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Sync fehlgeschlagen', firstError?.errorMessage || `${res.errors} Fehler.`);`
## `src/pages/views/trustee/TrusteePositionsView.tsx`:99
- **Text:** 'Sync fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Sync fehlgeschlagen', err.response?.data?.detail || err.message || 'Unbekannter Fehler.');`
## `src/pages/views/trustee/TrusteePositionsView.tsx`:99
- **Text:** 'Unbekannter Fehler.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Sync fehlgeschlagen', err.response?.data?.detail || err.message || 'Unbekannter Fehler.');`
## `src/pages/views/trustee/TrusteePositionsView.tsx`:127
- **Text:** 'Dokument nicht gefunden.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Fehler', 'Dokument nicht gefunden.');`
## `src/pages/views/trustee/TrusteePositionsView.tsx`:145
- **Text:** 'Fehler beim Herunterladen des Dokuments.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Fehler', 'Fehler beim Herunterladen des Dokuments.');`
## `src/pages/views/trustee/TrusteePositionsView.tsx`:163
- **Text:** 'Belege'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Belege',`
## `src/pages/views/trustee/TrusteePositionsView.tsx`:190
- **Text:** '1px solid var(--border-color, #e5e7eb)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: '1px solid var(--border-color, #e5e7eb)',`
## `src/pages/views/trustee/TrusteePositionsView.tsx`:228
- **Text:** 'Sync-Status'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Sync-Status',`
## `src/pages/views/trustee/TrusteePositionsView.tsx`:393
- **Text:** 'Fehler beim Laden der Positionen: {error}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.errorMessage}>Fehler beim Laden der Positionen: {error}</p>`
## `src/pages/views/trustee/TrusteePositionsView.tsx`:406
- **Text:** 'Buchungspositionen verwalten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.pageSubtitle}>Buchungspositionen verwalten</p>`
## `src/pages/views/trustee/TrusteePositionsView.tsx`:441
- **Text:** 'Buchhaltung synchronisieren'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` label: 'Buchhaltung synchronisieren',`
## `src/pages/views/trustee/TrusteePositionsView.tsx`:455
- **Text:** 'Löschen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: 'Löschen',`
## `src/pages/views/trustee/TrusteePositionsView.tsx`:463
- **Text:** 'In Buchhaltung synchronisieren'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title: 'In Buchhaltung synchronisieren',`
## `src/pages/views/trustee/TrusteePositionsView.tsx`:477
- **Text:** 'Keine Positionen gefunden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` emptyMessage="Keine Positionen gefunden"`
## `src/pages/views/trustee/TrusteePositionsView.tsx`:487
- **Text:** 'Neue Position'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {isCreateMode ? 'Neue Position' : 'Position bearbeiten'}`
## `src/pages/views/trustee/TrusteePositionsView.tsx`:487
- **Text:** 'Position bearbeiten'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {isCreateMode ? 'Neue Position' : 'Position bearbeiten'}`
## `src/pages/views/trustee/TrusteePositionsView.tsx`:500
- **Text:** 'Lade Formular...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Lade Formular...</span>`
## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:77
- **Text:** 'Invalid file'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Invalid file', `${file.name}: only PDF and JPG are supported.`);`
## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:85
- **Text:** 'Upload'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` else showError('Upload', 'Could not get file ID from server.');`
## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:85
- **Text:** 'Could not get file ID from server.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` else showError('Upload', 'Could not get file ID from server.');`
## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:87
- **Text:** 'Upload failed'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Upload failed', result.error || 'Unknown error');`
## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:87
- **Text:** 'Unknown error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Upload failed', result.error || 'Unknown error');`
## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:157
- **Text:** 'Step failed'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` const errMsg = failedStep.error || 'Step failed';`
## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:161
- **Text:** 'Pipeline error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Pipeline error', errMsg);`
## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:168
- **Text:** 'Pipeline completed'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Pipeline completed', 'Extraction and processing workflow finished successfully.');`
## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:168
- **Text:** 'Extraction and processing workflow finished successfully.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Pipeline completed', 'Extraction and processing workflow finished successfully.');`
## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:178
- **Text:** 'Polling failed'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` const msg = _parseErrorDetail(pollErr.response?.data?.detail) || pollErr.message || 'Polling failed';`
## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:182
- **Text:** 'Polling error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Polling error', msg);`
## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:213
- **Text:** 'Missing data'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Missing data', 'Please upload at least one PDF or JPG first.');`
## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:213
- **Text:** 'Please upload at least one PDF or JPG first.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Missing data', 'Please upload at least one PDF or JPG first.');`
## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:219
- **Text:** 'Starting pipeline workflow...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setPipelineSummary('Starting pipeline workflow...');`
## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:233
- **Text:** 'Pipeline completed (synchronous execution).'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setPipelineSummary('Pipeline completed (synchronous execution).');`
## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:234
- **Text:** 'Pipeline finished: Extract → Process → Sync.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Completed', 'Pipeline finished: Extract → Process → Sync.');`
## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:236
- **Text:** 'Workflow executed but no run ID returned.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` throw new Error(response?.data?.error || 'Workflow executed but no run ID returned.');`
## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:242
- **Text:** 'Pipeline started: Extract → Process → Sync. You can follow progress in Workflows.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showSuccess('Started', 'Pipeline started: Extract → Process → Sync. You can follow progress in Workflows.');`
## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:245
- **Text:** 'Failed to start workflow'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` const msg = _parseErrorDetail(err.response?.data?.detail) || err.message || 'Failed to start workflow';`
## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:248
- **Text:** 'Error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` showError('Error', msg);`
## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:257
- **Text:** 'File upload is not available in this context.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p>File upload is not available in this context.</p>`
## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:265
- **Text:** 'Scan / Upload'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h3 className={styles.sectionTitle}>Scan / Upload</h3>`
## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:272
- **Text:** 'Pipeline status:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <strong>Pipeline status:</strong> {pipelineState}`
## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:308
- **Text:** 'Choose files'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` aria-label="Choose files"`
## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:310
- **Text:** 'Choose files'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {uploadingFile ? 'Uploading…' : 'Choose files'}`
## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:320
- **Text:** 'Take photo'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` aria-label="Take photo"`
## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:341
- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` borderBottom: '1px solid var(--border-color, #e0e0e0)',`
## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:364
- **Text:** 'Pipeline running...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` ? 'Pipeline running...'`
## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:365
- **Text:** 'Start pipeline'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` : 'Start pipeline'}`
## `src/pages/views/workspace/ChatStream.tsx`:63
- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` : '1px solid var(--border-color, #e0e0e0)',`
## `src/pages/views/workspace/ChatStream.tsx`:108
- **Text:** '2px solid #ddd'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` borderBottom: '2px solid #ddd',`
## `src/pages/views/workspace/ChatStream.tsx`:120
- **Text:** '1px solid #eee'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` borderBottom: '1px solid #eee',`
## `src/pages/views/workspace/ChatStream.tsx`:201
- **Text:** '1px solid var(--warning-color, #ff9800)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: '1px solid var(--warning-color, #ff9800)',`
## `src/pages/views/workspace/ChatStream.tsx`:246
- **Text:** '1px solid var(--border-color, #ccc)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: '1px solid var(--border-color, #ccc)',`
## `src/pages/views/workspace/ChatStream.tsx`:262
- **Text:** '1px solid var(--progress-border, #c8e6c9)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: '1px solid var(--progress-border, #c8e6c9)',`
## `src/pages/views/workspace/ChatStream.tsx`:354
- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: '1px solid var(--border-color, #e0e0e0)',`
## `src/pages/views/workspace/ChatStream.tsx`:357
- **Text:** 'background 0.15s'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` transition: 'background 0.15s',`
## `src/pages/views/workspace/ChatStream.tsx`:376
- **Text:** 'Download'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <span style={{ fontSize: 14, color: 'var(--primary-color, #F25843)' }} title="Download">&#x2B07;</span>`
## `src/pages/views/workspace/ChatStream.tsx`:451
- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: '1px solid var(--border-color, #e0e0e0)',`
## `src/pages/views/workspace/ChatStream.tsx`:478
- **Text:** 'width 0.2s'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` transition: 'width 0.2s',`
## `src/pages/views/workspace/ChatStream.tsx`:500
- **Text:** 'Stop'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Stop"`
## `src/pages/views/workspace/ChatStream.tsx`:530
- **Text:** 'Consolas, Monaco, "Courier New", monospace'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` fontFamily: 'Consolas, Monaco, "Courier New", monospace',`
## `src/pages/views/workspace/ChatStream.tsx`:557
- **Text:** 'Consolas, Monaco, "Courier New", monospace'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` fontFamily: 'Consolas, Monaco, "Courier New", monospace',`
## `src/pages/views/workspace/FilePreview.tsx`:72
- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` borderBottom: '1px solid var(--border-color, #e0e0e0)',`
## `src/pages/views/workspace/FilePreview.tsx`:106
- **Text:** 'Consolas, Monaco, "Courier New", monospace'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` fontFamily: 'Consolas, Monaco, "Courier New", monospace',`
## `src/pages/views/workspace/FilePreview.tsx`:135
- **Text:** 'File too large for inline preview'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` ? 'File too large for inline preview'`
## `src/pages/views/workspace/NeutralizationPanel.tsx`:214
- **Text:** 'Chat, Prompt & Kontext'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` fileName: 'Chat, Prompt & Kontext',`
## `src/pages/views/workspace/NeutralizationPanel.tsx`:366
- **Text:** '2px solid var(--accent, #4f46e5)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` selectedSource === src.fileId ? '2px solid var(--accent, #4f46e5)' : '1px solid var(--border-color, #e5e7eb)',`
## `src/pages/views/workspace/NeutralizationPanel.tsx`:366
- **Text:** '1px solid var(--border-color, #e5e7eb)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` selectedSource === src.fileId ? '2px solid var(--accent, #4f46e5)' : '1px solid var(--border-color, #e5e7eb)',`
## `src/pages/views/workspace/NeutralizationPanel.tsx`:394
- **Text:** '1px solid var(--border-color, #d1d5db)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: '1px solid var(--border-color, #d1d5db)',`
## `src/pages/views/workspace/NeutralizationPanel.tsx`:423
- **Text:** '1px solid var(--border-color, #f3f4f6)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` borderTop: '1px solid var(--border-color, #f3f4f6)',`
## `src/pages/views/workspace/NeutralizationPanel.tsx`:437
- **Text:** 'Mapping löschen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Mapping löschen"`
## `src/pages/views/workspace/NeutralizationPanel.tsx`:450
- **Text:** 'Keine Mappings ohne Dateizuordnung.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` ? 'Keine Mappings ohne Dateizuordnung.'`
## `src/pages/views/workspace/NeutralizationPanel.tsx`:451
- **Text:** 'Keine gespeicherten Mappings für diese Datenquelle.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` : 'Keine gespeicherten Mappings für diese Datenquelle.'}`
## `src/pages/views/workspace/WorkspaceEditorPage.tsx`:71
- **Text:** 'Zurueck zum Dashboard'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <button onClick={_goBack} style={_btnStyle} title="Zurueck zum Dashboard">`
## `src/pages/views/workspace/WorkspaceEditorPage.tsx`:80
- **Text:** 'Aktualisieren'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` <button onClick={editor.refresh} style={_btnStyle} title="Aktualisieren">`
## `src/pages/views/workspace/WorkspaceEditorPage.tsx`:106
- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` borderBottom: '1px solid var(--border-color, #e0e0e0)',`
## `src/pages/views/workspace/WorkspaceEditorPage.tsx`:153
- **Text:** 'Original: {formatBinaryDataSizeBytes(activeEdit.oldContent.length)}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Original: {formatBinaryDataSizeBytes(activeEdit.oldContent.length)}</span>`
## `src/pages/views/workspace/WorkspaceEditorPage.tsx`:154
- **Text:** 'Geaendert: {formatBinaryDataSizeBytes(activeEdit.newContent.length)}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <span>Geaendert: {formatBinaryDataSizeBytes(activeEdit.newContent.length)}</span>`
## `src/pages/views/workspace/WorkspaceEditorPage.tsx`:177
- **Text:** 'TextModel got disposed'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `// Safe DiffEditor wrapper -- prevents "TextModel got disposed" errors`
## `src/pages/views/workspace/WorkspaceEditorPage.tsx`:239
- **Text:** '2px solid var(--primary-color, #F25843)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` borderBottom: isActive ? '2px solid var(--primary-color, #F25843)' : '2px solid transparent',`
## `src/pages/views/workspace/WorkspaceEditorPage.tsx`:239
- **Text:** '2px solid transparent'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` borderBottom: isActive ? '2px solid var(--primary-color, #F25843)' : '2px solid transparent',`
## `src/pages/views/workspace/WorkspaceGeneralSettings.tsx`:50
- **Text:** 'Fehler beim Laden der Einstellungen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError(err?.message || 'Fehler beim Laden der Einstellungen');`
## `src/pages/views/workspace/WorkspaceGeneralSettings.tsx`:67
- **Text:** 'Wert muss zwischen 1 und 100 liegen.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError('Wert muss zwischen 1 und 100 liegen.');`
## `src/pages/views/workspace/WorkspaceGeneralSettings.tsx`:81
- **Text:** 'Einstellungen gespeichert.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setSuccess('Einstellungen gespeichert.');`
## `src/pages/views/workspace/WorkspaceGeneralSettings.tsx`:84
- **Text:** 'Fehler beim Speichern'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError(err?.message || 'Fehler beim Speichern');`
## `src/pages/views/workspace/WorkspaceGeneralSettings.tsx`:95
- **Text:** 'Lade Einstellungen...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` return <div className={styles.loading}>Lade Einstellungen...</div>;`
## `src/pages/views/workspace/WorkspaceGeneralSettings.tsx`:102
- **Text:** 'Generelle Einstellungen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h2 className={styles.heading}>Generelle Einstellungen</h2>`
## `src/pages/views/workspace/WorkspaceGeneralSettings.tsx`:130
- **Text:** 'Auf Standard zurücksetzen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Auf Standard zurücksetzen"`
## `src/pages/views/workspace/WorkspaceGeneralSettings.tsx`:139
- **Text:** 'Ihr Override: {maxRoundsInfo.userOverride}.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <> Ihr Override: {maxRoundsInfo.userOverride}.</>`
## `src/pages/views/workspace/WorkspaceGeneralSettings.tsx`:151
- **Text:** 'Einstellungen speichern'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` {saving ? 'Speichern...' : 'Einstellungen speichern'}`
## `src/pages/views/workspace/WorkspaceInput.tsx`:14
- **Text:** 'Deutsch'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { code: 'de-DE', label: 'Deutsch' },`
## `src/pages/views/workspace/WorkspaceInput.tsx`:15
- **Text:** 'English (US)'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { code: 'en-US', label: 'English (US)' },`
## `src/pages/views/workspace/WorkspaceInput.tsx`:16
- **Text:** 'English (UK)'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { code: 'en-GB', label: 'English (UK)' },`
## `src/pages/views/workspace/WorkspaceInput.tsx`:17
- **Text:** 'Francais'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { code: 'fr-FR', label: 'Francais' },`
## `src/pages/views/workspace/WorkspaceInput.tsx`:18
- **Text:** 'Italiano'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { code: 'it-IT', label: 'Italiano' },`
## `src/pages/views/workspace/WorkspaceInput.tsx`:19
- **Text:** 'Espanol'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { code: 'es-ES', label: 'Espanol' },`
## `src/pages/views/workspace/WorkspaceInput.tsx`:20
- **Text:** 'Portugues'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { code: 'pt-BR', label: 'Portugues' },`
## `src/pages/views/workspace/WorkspaceInput.tsx`:21
- **Text:** 'Nederlands'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { code: 'nl-NL', label: 'Nederlands' },`
## `src/pages/views/workspace/WorkspaceInput.tsx`:22
- **Text:** 'Polski'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { code: 'pl-PL', label: 'Polski' },`
## `src/pages/views/workspace/WorkspaceInput.tsx`:23
- **Text:** 'Russkij'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { code: 'ru-RU', label: 'Russkij' },`
## `src/pages/views/workspace/WorkspaceInput.tsx`:24
- **Text:** 'Japanese'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { code: 'ja-JP', label: 'Japanese' },`
## `src/pages/views/workspace/WorkspaceInput.tsx`:25
- **Text:** 'Chinese'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { code: 'zh-CN', label: 'Chinese' },`
## `src/pages/views/workspace/WorkspaceInput.tsx`:324
- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` borderTop: '1px solid var(--border-color, #e0e0e0)',`
## `src/pages/views/workspace/WorkspaceInput.tsx`:327
- **Text:** '2px dashed var(--primary-color, #F25843)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` outline: treeDropOver ? '2px dashed var(--primary-color, #F25843)' : 'none',`
## `src/pages/views/workspace/WorkspaceInput.tsx`:329
- **Text:** 'background 0.15s, outline 0.15s'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` transition: 'background 0.15s, outline 0.15s',`
## `src/pages/views/workspace/WorkspaceInput.tsx`:342
- **Text:** '1px solid var(--border-color, #f0f0f0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` borderBottom: '1px solid var(--border-color, #f0f0f0)',`
## `src/pages/views/workspace/WorkspaceInput.tsx`:381
- **Text:** '1px solid var(--border-color, #f0f0f0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` borderBottom: '1px solid var(--border-color, #f0f0f0)',`
## `src/pages/views/workspace/WorkspaceInput.tsx`:471
- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: '1px solid var(--border-color, #e0e0e0)',`
## `src/pages/views/workspace/WorkspaceInput.tsx`:473
- **Text:** '0 -2px 8px rgba(0,0,0,0.1)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` boxShadow: '0 -2px 8px rgba(0,0,0,0.1)',`
## `src/pages/views/workspace/WorkspaceInput.tsx`:484
- **Text:** '1px solid #f0f0f0'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` borderBottom: '1px solid #f0f0f0',`
## `src/pages/views/workspace/WorkspaceInput.tsx`:512
- **Text:** 'Type a message... Use @filename to reference files'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` placeholder="Type a message... Use @filename to reference files"`
## `src/pages/views/workspace/WorkspaceInput.tsx`:521
- **Text:** '1px solid var(--border-color, #ccc)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: '1px solid var(--border-color, #ccc)',`
## `src/pages/views/workspace/WorkspaceInput.tsx`:533
- **Text:** 'Datei anhängen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Datei anhängen"`
## `src/pages/views/workspace/WorkspaceInput.tsx`:551
- **Text:** 'Datenquellen anhängen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Datenquellen anhängen"`
## `src/pages/views/workspace/WorkspaceInput.tsx`:600
- **Text:** '2px solid #2e7d32'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: isSelected ? '2px solid #2e7d32' : '2px solid #ccc',`
## `src/pages/views/workspace/WorkspaceInput.tsx`:600
- **Text:** '2px solid #ccc'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: isSelected ? '2px solid #2e7d32' : '2px solid #ccc',`
## `src/pages/views/workspace/WorkspaceInput.tsx`:634
- **Text:** '2px solid #7b1fa2'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: isSelected ? '2px solid #7b1fa2' : '2px solid #ccc',`
## `src/pages/views/workspace/WorkspaceInput.tsx`:634
- **Text:** '2px solid #ccc'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: isSelected ? '2px solid #7b1fa2' : '2px solid #ccc',`
## `src/pages/views/workspace/WorkspaceInput.tsx`:669
- **Text:** 'Sprache waehlen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** ` title="Sprache waehlen"`
## `src/pages/views/workspace/WorkspaceInput.tsx`:682
- **Text:** 'Aufnahme stoppen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title={voiceActive ? 'Aufnahme stoppen' : 'Sprachaufnahme starten'}`
## `src/pages/views/workspace/WorkspaceInput.tsx`:682
- **Text:** 'Sprachaufnahme starten'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title={voiceActive ? 'Aufnahme stoppen' : 'Sprachaufnahme starten'}`
## `src/pages/views/workspace/WorkspaceInput.tsx`:724
- **Text:** 'Neutralisierung aktiv (klicken zum Deaktivieren)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title={neutralizeActive ? 'Neutralisierung aktiv (klicken zum Deaktivieren)' : 'Neutralisierung aus (klicken zum Aktivieren)'}`
## `src/pages/views/workspace/WorkspaceInput.tsx`:724
- **Text:** 'Neutralisierung aus (klicken zum Aktivieren)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` title={neutralizeActive ? 'Neutralisierung aktiv (klicken zum Deaktivieren)' : 'Neutralisierung aus (klicken zum Aktivieren)'}`
## `src/pages/views/workspace/WorkspaceInput.tsx`:731
- **Text:** 'all 0.15s'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` transition: 'all 0.15s',`
## `src/pages/views/workspace/WorkspacePage.tsx`:223
- **Text:** '2px solid var(--primary-color, #F25843)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` borderBottom: active ? '2px solid var(--primary-color, #F25843)' : '2px solid transparent',`
## `src/pages/views/workspace/WorkspacePage.tsx`:223
- **Text:** '2px solid transparent'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` borderBottom: active ? '2px solid var(--primary-color, #F25843)' : '2px solid transparent',`
## `src/pages/views/workspace/WorkspacePage.tsx`:310
- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` borderRight: '1px solid var(--border-color, #e0e0e0)',`
## `src/pages/views/workspace/WorkspacePage.tsx`:356
- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` borderBottom: '1px solid var(--border-color, #e0e0e0)',`
## `src/pages/views/workspace/WorkspacePage.tsx`:365
- **Text:** '1px solid var(--border-color, #ddd)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: '1px solid var(--border-color, #ddd)',`
## `src/pages/views/workspace/WorkspacePage.tsx`:379
- **Text:** '1px solid var(--border-color, #ddd)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: '1px solid var(--border-color, #ddd)',`
## `src/pages/views/workspace/WorkspacePage.tsx`:392
- **Text:** '1px solid var(--border-color, #ddd)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` border: '1px solid var(--border-color, #ddd)',`
## `src/pages/views/workspace/WorkspacePage.tsx`:465
- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` borderLeft: '1px solid var(--border-color, #e0e0e0)',`
## `src/pages/views/workspace/WorkspacePage.tsx`:498
- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` borderRight: '1px solid var(--border-color, #e0e0e0)',`
## `src/pages/views/workspace/WorkspacePage.tsx`:532
- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` borderLeft: '1px solid var(--border-color, #e0e0e0)',`
## `src/pages/views/workspace/WorkspaceRagInsightsPage.tsx`:28
- **Text:** 'Office (Text)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` office_doc: 'Office (Text)',`
## `src/pages/views/workspace/WorkspaceRagInsightsPage.tsx`:29
- **Text:** 'Office (Tabellen)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` office_sheet: 'Office (Tabellen)',`
## `src/pages/views/workspace/WorkspaceRagInsightsPage.tsx`:30
- **Text:** 'Office (Folien)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` office_slides: 'Office (Folien)',`
## `src/pages/views/workspace/WorkspaceRagInsightsPage.tsx`:87
- **Text:** 'Laden fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` setError(e instanceof Error ? e.message : 'Laden fehlgeschlagen');`
## `src/pages/views/workspace/WorkspaceRagInsightsPage.tsx`:150
- **Text:** 'Indexierte Dokumente'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.kpiLabel}>Indexierte Dokumente</p>`
## `src/pages/views/workspace/WorkspaceRagInsightsPage.tsx`:154
- **Text:** 'Indexiertes Datenvolumen (geschätzt)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.kpiLabel}>Indexiertes Datenvolumen (geschätzt)</p>`
## `src/pages/views/workspace/WorkspaceRagInsightsPage.tsx`:158
- **Text:** 'Inhalts-Fragmente (Chunks)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.kpiLabel}>Inhalts-Fragmente (Chunks)</p>`
## `src/pages/views/workspace/WorkspaceRagInsightsPage.tsx`:164
- **Text:** 'Anteil Fragmente mit Embedding'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.kpiLabel}>Anteil Fragmente mit Embedding</p>`
## `src/pages/views/workspace/WorkspaceRagInsightsPage.tsx`:168
- **Text:** 'Beitragende Benutzer (Anzahl)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.kpiLabel}>Beitragende Benutzer (Anzahl)</p>`
## `src/pages/views/workspace/WorkspaceRagInsightsPage.tsx`:172
- **Text:** 'Workflow-Entitäten (Cache)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.kpiLabel}>Workflow-Entitäten (Cache)</p>`
## `src/pages/views/workspace/WorkspaceRagInsightsPage.tsx`:178
- **Text:** 'Neu indexierte Dokumente pro Tag (letzte Wochen)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h3 className={styles.chartTitle}>Neu indexierte Dokumente pro Tag (letzte Wochen)</h3>`
## `src/pages/views/workspace/WorkspaceRagInsightsPage.tsx`:180
- **Text:** 'Keine Zeitreihen-Daten für den gewählten Zeitraum.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.meta}>Keine Zeitreihen-Daten für den gewählten Zeitraum.</p>`
## `src/pages/views/workspace/WorkspaceRagInsightsPage.tsx`:196
- **Text:** 'Dokumente nach Format-Kategorie'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h3 className={styles.chartTitle}>Dokumente nach Format-Kategorie</h3>`
## `src/pages/views/workspace/WorkspaceRagInsightsPage.tsx`:198
- **Text:** 'Keine Daten.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.meta}>Keine Daten.</p>`
## `src/pages/views/workspace/WorkspaceRagInsightsPage.tsx`:215
- **Text:** 'Keine Daten.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.meta}>Keine Daten.</p>`
## `src/pages/views/workspace/WorkspaceRagInsightsPage.tsx`:241
- **Text:** 'Fragmente nach Inhaltstyp'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <h3 className={styles.chartTitle}>Fragmente nach Inhaltstyp</h3>`
## `src/pages/views/workspace/WorkspaceRagInsightsPage.tsx`:243
- **Text:** 'Keine Chunk-Daten.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.meta}>Keine Chunk-Daten.</p>`
## `src/pages/views/workspace/WorkspaceRagInsightsPage.tsx`:258
- **Text:** 'Stand (UTC): {stats.generatedAtUtc}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` <p className={styles.meta}>Stand (UTC): {stats.generatedAtUtc}</p>`
## `src/pages/views/workspace/WorkspaceSettingsPage.tsx`:5
- **Text:** 'Stimme & Sprache'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` * Voice settings are now in user-level settings (/settings -> "Stimme & Sprache").`
## `src/pages/views/workspace/WorkspaceSettingsPage.tsx`:16
- **Text:** 'Generelle Einstellungen'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { key: 'general', label: 'Generelle Einstellungen' },`
## `src/pages/views/workspace/WorkspaceSettingsPage.tsx`:17
- **Text:** 'Neutralisierung (Workspace)'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** ` { key: 'neutralization', label: 'Neutralisierung (Workspace)' },`
## `src/pages/views/workspace/WorkspaceSettingsPage.tsx`:37
- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` borderBottom: '1px solid var(--border-color, #e0e0e0)',`
## `src/pages/views/workspace/WorkspaceSettingsPage.tsx`:49
- **Text:** '2px solid var(--primary-color, #F25843)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` ? '2px solid var(--primary-color, #F25843)'`
## `src/pages/views/workspace/WorkspaceSettingsPage.tsx`:50
- **Text:** '2px solid transparent'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` : '2px solid transparent',`
## `src/providers/auth/AuthProvider.tsx`:89
- **Text:** 'Loading authentication...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` return <div>Loading authentication...</div>;`
## `src/providers/auth/ProtectedRoute.tsx`:109
- **Text:** 'Checking authentication...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` return <div>Checking authentication...</div>;`
## `src/stores/featureStore.tsx`:124
- **Text:** 'Failed to load features'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` const errorMessage = err instanceof Error ? err.message : 'Failed to load features';`
## `src/stores/featureStore.tsx`:264
- **Text:** 'useFeatureStore must be used within a FeatureProvider'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` throw new Error('useFeatureStore must be used within a FeatureProvider');`