// frontend\src\components\ui\LoadingSpinner.tsx 'use client' import * as React from 'react' type SpinnerSize = 'xs' | 'sm' | 'md' | 'lg' | number export type LoadingSpinnerProps = { /** Größe als Preset oder px (number) */ size?: SpinnerSize /** Farbe via Tailwind (z.B. "text-indigo-500") */ className?: string /** Optionaler Text neben dem Spinner (sichtbar) */ label?: React.ReactNode /** Screenreader-Text (wenn label nicht gesetzt ist) */ srLabel?: string /** Zentriert Spinner + Label als Inline-Flex */ center?: boolean } function sizeToPx(size: SpinnerSize): number { if (typeof size === 'number') return size if (size === 'xs') return 12 if (size === 'sm') return 16 if (size === 'lg') return 28 return 20 // md default } function cn(...parts: Array) { return parts.filter(Boolean).join(' ') } export default function LoadingSpinner({ size = 'md', className, label, srLabel = 'Lädt…', center = false, }: LoadingSpinnerProps) { const px = sizeToPx(size) return ( {label ? ( {label} ) : ( {srLabel} )} ) }