Files
breakpilot-lehrer/studio-v2/components/korrektur/AnnotationToolbar.tsx
Benjamin Boenisch 5a31f52310 Initial commit: breakpilot-lehrer - Lehrer KI Platform
Services: Admin-Lehrer, Backend-Lehrer, Studio v2, Website,
Klausur-Service, School-Service, Voice-Service, Geo-Service,
BreakPilot Drive, Agent-Core

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 23:47:26 +01:00

160 lines
5.3 KiB
TypeScript

'use client'
import type { AnnotationType } from '@/app/korrektur/types'
import { ANNOTATION_COLORS } from '@/app/korrektur/types'
interface AnnotationToolbarProps {
selectedTool: AnnotationType | null
onToolSelect: (tool: AnnotationType | null) => void
className?: string
}
const tools: Array<{
type: AnnotationType
label: string
shortcut: string
icon: React.ReactNode
}> = [
{
type: 'rechtschreibung',
label: 'Rechtschreibung',
shortcut: 'R',
icon: (
<svg className="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z" />
</svg>
),
},
{
type: 'grammatik',
label: 'Grammatik',
shortcut: 'G',
icon: (
<svg className="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M3 5h12M9 3v2m1.048 9.5A18.022 18.022 0 016.412 9m6.088 9h7M11 21l5-10 5 10M12.751 5C11.783 10.77 8.07 15.61 3 18.129" />
</svg>
),
},
{
type: 'inhalt',
label: 'Inhalt',
shortcut: 'I',
icon: (
<svg className="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z" />
</svg>
),
},
{
type: 'struktur',
label: 'Struktur',
shortcut: 'S',
icon: (
<svg className="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M4 6h16M4 10h16M4 14h16M4 18h16" />
</svg>
),
},
{
type: 'stil',
label: 'Stil',
shortcut: 'T',
icon: (
<svg className="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M7 21a4 4 0 01-4-4V5a2 2 0 012-2h4a2 2 0 012 2v12a4 4 0 01-4 4zm0 0h12a2 2 0 002-2v-4a2 2 0 00-2-2h-2.343M11 7.343l1.657-1.657a2 2 0 012.828 0l2.829 2.829a2 2 0 010 2.828l-8.486 8.485M7 17h.01" />
</svg>
),
},
{
type: 'comment',
label: 'Kommentar',
shortcut: 'K',
icon: (
<svg className="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M7 8h10M7 12h4m1 8l-4-4H5a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v8a2 2 0 01-2 2h-3l-4 4z" />
</svg>
),
},
]
export function AnnotationToolbar({
selectedTool,
onToolSelect,
className = '',
}: AnnotationToolbarProps) {
return (
<div className={`flex items-center gap-1 p-2 bg-white/5 rounded-xl ${className}`}>
{tools.map((tool) => {
const isSelected = selectedTool === tool.type
const color = ANNOTATION_COLORS[tool.type]
return (
<button
key={tool.type}
onClick={() => onToolSelect(isSelected ? null : tool.type)}
className={`relative p-2 rounded-lg transition-all ${
isSelected
? 'bg-white/20 shadow-lg'
: 'hover:bg-white/10'
}`}
style={{
color: isSelected ? color : 'rgba(255, 255, 255, 0.6)',
}}
title={`${tool.label} (${tool.shortcut})`}
>
{tool.icon}
{/* Shortcut Badge */}
<span
className={`absolute -bottom-1 -right-1 w-4 h-4 rounded text-[10px] font-bold flex items-center justify-center ${
isSelected ? 'bg-white/20' : 'bg-white/10'
}`}
style={{ color: isSelected ? color : 'rgba(255, 255, 255, 0.4)' }}
>
{tool.shortcut}
</span>
</button>
)
})}
{/* Divider */}
<div className="w-px h-8 bg-white/10 mx-2" />
{/* Clear Tool Button */}
<button
onClick={() => onToolSelect(null)}
className={`p-2 rounded-lg transition-all ${
selectedTool === null
? 'bg-white/20 text-white'
: 'hover:bg-white/10 text-white/60'
}`}
title="Auswahl (Esc)"
>
<svg className="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M15 15l-2 5L9 9l11 4-5 2zm0 0l5 5M7.188 2.239l.777 2.897M5.136 7.965l-2.898-.777M13.95 4.05l-2.122 2.122m-5.657 5.656l-2.12 2.122" />
</svg>
</button>
</div>
)
}
// =============================================================================
// ANNOTATION LEGEND
// =============================================================================
export function AnnotationLegend({ className = '' }: { className?: string }) {
return (
<div className={`flex flex-wrap gap-3 text-xs ${className}`}>
{tools.map((tool) => (
<div key={tool.type} className="flex items-center gap-1.5">
<div
className="w-3 h-3 rounded-full"
style={{ backgroundColor: ANNOTATION_COLORS[tool.type] }}
/>
<span className="text-white/60">{tool.label}</span>
</div>
))}
</div>
)
}