137 Zeilen
6.4 KiB
TypeScript
137 Zeilen
6.4 KiB
TypeScript
import { useState } from 'react'
|
|
import { useThemeStore } from '../stores/themeStore'
|
|
|
|
export default function Settings() {
|
|
const { isDarkMode, toggleTheme } = useThemeStore()
|
|
// Barrierefreiheit-Einstellungen (Platzhalter mit sinnvollen Optionen)
|
|
const [a11y, setA11y] = useState({
|
|
highContrast: false,
|
|
largeText: false,
|
|
reduceMotion: false,
|
|
underlineLinks: true,
|
|
alwaysShowFocusOutline: true,
|
|
dyslexiaFriendlyFont: false
|
|
})
|
|
|
|
const handleSave = () => {
|
|
// TODO: Save settings to backend/electron store
|
|
console.log('Settings saved:', { syncConfig, isDarkMode })
|
|
}
|
|
|
|
return (
|
|
<div>
|
|
<h1 className="text-title-lg font-poppins font-bold text-primary mb-8">
|
|
Einstellungen
|
|
</h1>
|
|
|
|
<div className="max-w-4xl space-y-6">
|
|
<div className="card">
|
|
<h2 className="text-title-card font-poppins font-semibold text-primary mb-6">
|
|
Darstellung
|
|
</h2>
|
|
|
|
<div className="space-y-4">
|
|
<div className="flex items-center justify-between">
|
|
<div>
|
|
<h3 className="text-body font-medium text-secondary">Dark Mode</h3>
|
|
<p className="text-small text-tertiary">
|
|
Aktiviert das dunkle Farbschema der Anwendung
|
|
</p>
|
|
</div>
|
|
<button
|
|
onClick={toggleTheme}
|
|
className={`relative inline-flex h-6 w-11 items-center rounded-full transition-colors ${
|
|
isDarkMode ? 'bg-primary-blue' : 'bg-border-input'
|
|
}`}
|
|
>
|
|
<span
|
|
className={`inline-block h-4 w-4 transform rounded-full bg-white transition-transform ${
|
|
isDarkMode ? 'translate-x-6' : 'translate-x-1'
|
|
}`}
|
|
/>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div className="card">
|
|
<h2 className="text-title-card font-poppins font-semibold text-primary mb-6">
|
|
Barrierefreiheit
|
|
</h2>
|
|
<div className="space-y-4">
|
|
<label className="flex items-center space-x-3">
|
|
<input type="checkbox" className="w-5 h-5 rounded border-border-input text-primary-blue" checked={a11y.highContrast} onChange={(e) => setA11y(prev => ({ ...prev, highContrast: e.target.checked }))} />
|
|
<div>
|
|
<span className="text-body font-medium text-secondary">Hoher Kontrast</span>
|
|
<p className="text-small text-tertiary">Erhöht den Kontrast für bessere Lesbarkeit (BITV-konform)</p>
|
|
</div>
|
|
</label>
|
|
<label className="flex items-center space-x-3">
|
|
<input type="checkbox" className="w-5 h-5 rounded border-border-input text-primary-blue" checked={a11y.largeText} onChange={(e) => setA11y(prev => ({ ...prev, largeText: e.target.checked }))} />
|
|
<div>
|
|
<span className="text-body font-medium text-secondary">Große Schrift</span>
|
|
<p className="text-small text-tertiary">Vergrößert die Schriftgröße für bessere Lesbarkeit</p>
|
|
</div>
|
|
</label>
|
|
<label className="flex items-center space-x-3">
|
|
<input type="checkbox" className="w-5 h-5 rounded border-border-input text-primary-blue" checked={a11y.reduceMotion} onChange={(e) => setA11y(prev => ({ ...prev, reduceMotion: e.target.checked }))} />
|
|
<div>
|
|
<span className="text-body font-medium text-secondary">Reduzierte Bewegungen</span>
|
|
<p className="text-small text-tertiary">Deaktiviert Animationen für weniger Ablenkung</p>
|
|
</div>
|
|
</label>
|
|
<label className="flex items-center space-x-3">
|
|
<input type="checkbox" className="w-5 h-5 rounded border-border-input text-primary-blue" checked={a11y.underlineLinks} onChange={(e) => setA11y(prev => ({ ...prev, underlineLinks: e.target.checked }))} />
|
|
<div>
|
|
<span className="text-body font-medium text-secondary">Links unterstreichen</span>
|
|
<p className="text-small text-tertiary">Links werden grundsätzlich unterstrichen dargestellt</p>
|
|
</div>
|
|
</label>
|
|
<label className="flex items-center space-x-3">
|
|
<input type="checkbox" className="w-5 h-5 rounded border-border-input text-primary-blue" checked={a11y.alwaysShowFocusOutline} onChange={(e) => setA11y(prev => ({ ...prev, alwaysShowFocusOutline: e.target.checked }))} />
|
|
<div>
|
|
<span className="text-body font-medium text-secondary">Fokusrahmen immer anzeigen</span>
|
|
<p className="text-small text-tertiary">Hebt fokussierte Elemente dauerhaft für Tastaturbedienung hervor</p>
|
|
</div>
|
|
</label>
|
|
<label className="flex items-center space-x-3">
|
|
<input type="checkbox" className="w-5 h-5 rounded border-border-input text-primary-blue" checked={a11y.dyslexiaFriendlyFont} onChange={(e) => setA11y(prev => ({ ...prev, dyslexiaFriendlyFont: e.target.checked }))} />
|
|
<div>
|
|
<span className="text-body font-medium text-secondary">Dyslexie-freundliche Schrift</span>
|
|
<p className="text-small text-tertiary">Verwendet eine besser unterscheidbare Schriftart</p>
|
|
</div>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
|
|
<div className="card">
|
|
<h2 className="text-title-card font-poppins font-semibold text-primary mb-6">
|
|
Über SkillMate
|
|
</h2>
|
|
|
|
<div className="space-y-2 text-body">
|
|
<p className="text-secondary">
|
|
<span className="font-medium">Version:</span> 1.0.0
|
|
</p>
|
|
<p className="text-secondary">
|
|
<span className="font-medium">Entwickelt für:</span> Sicherheitsbehörden
|
|
</p>
|
|
<p className="text-small text-tertiary mt-4">
|
|
SkillMate ist eine spezialisierte Anwendung zur Verwaltung von Fähigkeiten und Kompetenzen der Mitarbeitenden in Sicherheitsbehörden.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
|
|
<div className="flex justify-end space-x-3">
|
|
<button className="btn-secondary">
|
|
Abbrechen
|
|
</button>
|
|
<button onClick={handleSave} className="btn-primary">
|
|
Einstellungen speichern
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
)
|
|
}
|