@smworks-cz/ui-kit 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/useTheme.ts","../src/components/Button/Button.tsx","../src/components/Input/Input.tsx","../src/components/Select/Select.tsx","../src/components/DatePicker/DatePicker.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/Radio/Radio.tsx","../src/components/Switch/Switch.tsx","../src/components/Textarea/Textarea.tsx","../src/components/Slider/Slider.tsx","../src/components/FileUpload/FileUpload.tsx","../src/components/Skeleton/Skeleton.tsx","../src/components/Table/Table.tsx","../src/components/Card/Card.tsx","../src/components/Accordion/Accordion.tsx","../src/components/Tabs/Tabs.tsx","../src/components/Tooltip/Tooltip.tsx","../src/components/Popover/Popover.tsx","../src/components/EmptyState/EmptyState.tsx","../src/components/Stat/Stat.tsx","../src/components/Avatar/Avatar.tsx","../src/components/Tag/Tag.tsx","../src/components/Modal/Modal.tsx","../src/components/Drawer/Drawer.tsx","../src/components/Breadcrumb/Breadcrumb.tsx","../src/components/Pagination/Pagination.tsx","../src/components/Stepper/Stepper.tsx","../src/components/DropdownMenu/DropdownMenu.tsx","../src/components/Link/Link.tsx","../src/components/Spotlight/Spotlight.tsx","../src/components/SegmentedControl/SegmentedControl.tsx","../src/components/Toast/Toast.tsx","../src/components/Toast/Toaster.tsx","../src/components/Alert/Alert.tsx","../src/components/Progress/Progress.tsx","../src/components/Spinner/Spinner.tsx","../src/components/Divider/Divider.tsx","../src/components/Stack/Stack.tsx","../src/components/Container/Container.tsx","../src/components/DragList/DragList.tsx"],"names":["useTheme","theme","setTheme","useState","useEffect","getTheme","docTheme","mediaQuery","listener","e","observer","mutations","mutation","colors","sizeConfig","Spinner","size","angle","setAngle","rafRef","useRef","startRef","animate","ts","jsxs","jsx","Button","React","variant","icon","iconPosition","loading","fullWidth","children","style","className","rest","ref","hovered","setHovered","isDark","isAnchor","isDisabled","hasText","hasIcon","isSquare","paddingText","paddingSquare","fontSize","gap","base","variantStyle","iconSlot","showIconSlot","content","Fragment","sharedProps","href","target","rel","anchorRest","disabled","type","buttonRest","color","tokens","Input","label","error","helperText","clearable","passwordToggle","inputStyle","required","value","onChange","onFocus","onBlur","t","autoId","useId","inputId","focused","setFocused","passwordVisible","setPasswordVisible","isPassword","showPasswordToggle","resolvedType","hasError","errorMessage","hasValue","showClear","sc","handleClear","iconEl","passwordToggleEl","v","EyeSlashIcon","EyeIcon","rightSlot","XIcon","leftSlot","wrapperStyle","nativeStyle","labelStyle","bottomTextStyle","InputGroup","htmlFor","labelFor","containerStyle","ANIM_DURATION","Select","options","multiple","searchable","placeholder","maxDropdownHeight","selectId","triggerRef","dropdownRef","searchRef","listRef","open","setOpen","visible","setVisible","animState","setAnimState","search","setSearch","highlightIndex","setHighlightIndex","dropdownPos","setDropdownPos","doOpen","useCallback","doClose","timer","selectedValues","isSelected","filteredOptions","o","updatePosition","rect","dropdownHeight","spaceBelow","spaceAbove","openAbove","toggleOption","optValue","next","handleTriggerClick","handleKeyDown","i","handler","inTrigger","inDropdown","getLabel","getDropdownAnimStyle","above","slideIn","slideOut","triggerStyle","dropdown","createPortal","opt","idx","selected","highlighted","CheckIcon","CaretDownIcon","SelectGroup","DAY_NAMES","MONTH_NAMES","getCalendarDays","year","month","firstDayOfWeek","dayOfWeek","start","days","formatDate","d","dd","mm","formatDateTime","hh","min","isSameDay","a","b","isInRange","end","s","isToday","DatePicker","mode","showTime","minDate","maxDate","hoveredDay","setHoveredDay","now","viewYear","setViewYear","viewMonth","setViewMonth","viewMode","setViewMode","rangePhase","setRangePhase","singleValue","rangeValue","displayValue","fmt","placeholderText","refDate","isDayDisabled","max","handleDayClick","handleTimeChange","which","val","index","num","arr","prevMonth","y","m","nextMonth","calendarDays","renderTimeInputs","dateVal","rangeIdx","h","renderMonthView","name","isCurrentMonth","renderYearView","startYear","years","_","CaretLeftIcon","CaretRightIcon","isCurrent","day","isOutside","isDis","isTod","isRangeStart","isRangeEnd","isRangeMiddle","bg","CalendarBlankIcon","DatePickerGroup","Checkbox","checked","indeterminate","id","inputRef","handleClick","borderColor","boxStyle","CheckboxGroup","groupLabelStyle","Radio","circleStyle","RadioGroup","direction","Switch","borderW","pad","thumbTravel","thumbTranslate","trackStyle","thumbStyle","Textarea","rows","maxLength","resize","autoHeight","minRows","maxRows","textareaId","internalRef","adjustHeight","el","computed","lineHeight","paddingTop","paddingBottom","padding","minHeight","maxHeight","newHeight","setRefs","effectiveResize","effectiveRows","currentLength","clamp","snapToStep","step","Slider","showValue","range","trackRef","draggingThumb","pct","startPct","endPct","getValueFromEvent","clientX","track","ratio","raw","handleTrackMouseDown","rv","distStart","distEnd","handleMouseMove","ev","handleMouseUp","valueDisplay","thumbCommon","formatFileSize","bytes","fileIdCounter","FileUpload","onFiles","accept","maxSize","dragging","setDragging","files","setFiles","sizeError","setSizeError","processFiles","fileList","oversized","f","newFiles","file","updated","handleDrop","handleRemove","fileId","zoneStyle","UploadSimpleIcon","FileTextIcon","FolderIcon","ANIM_NAME","KEYFRAMES_CSS","Skeleton","width","height","lines","resolveWidth","resolveHeight","baseStyle","styleTag","Table","columns","data","emptyText","onSort","sortKey","sortDirection","striped","hoverable","handleSort","col","nextDir","tableStyle","thStyle","tdStyle","CaretUpDownIcon","rowIdx","row","paddingMap","Card","title","subtitle","header","footer","bordered","cardStyle","headerContent","AccordionItem","defaultOpen","_controlled","_open","_onToggle","internalOpen","setInternalOpen","isOpen","contentRef","contentHeight","setContentHeight","handleToggle","Accordion","items","child","openIndices","setOpenIndices","defaults","item","prev","Tab","TabPanel","Tabs","childArray","tabs","activePanel","p","tab","isActive","tabStyle","Tooltip","position","delay","coords","setCoords","tooltipRef","timerRef","ARROW_SIZE","GAP","trigger","tooltip","tRect","top","left","handleEnter","handleLeave","arrowStyle","tooltipEl","Popover","popoverRef","hoverTimerRef","pop","pRect","getAnimStyle","slideMap","axis","handleMouseEnter","handleMouseLeave","popoverEl","EmptyState","description","action","Stat","change","changeLabel","trend","trendColor","formatChange","TrendUpIcon","TrendDownIcon","resolveSize","Avatar","initials","borderRadius","ariaLabel","px","textStyle","ActionBtn","onClick","Tag","onRemove","Badge","TagItem","onFilter","onEdit","onDelete","showActions","hasAnyAction","FunnelIcon","PencilSimpleIcon","TrashIcon","Modal","onClose","closeOnOverlay","closeOnEscape","showClose","cardRef","previousFocusRef","card","focusableSelector","handleTab","focusable","first","last","getOverlayStyle","getCardAnimStyle","isFullscreen","Drawer","panelRef","resolvedWidth","getTranslateX","state","offscreen","getOverlayOpacity","Breadcrumb","separator","isLast","getPageRange","page","totalPages","siblings","showFirst","showLast","Pagination","pages","buttonBase","Stepper","steps","activeStep","orientation","clickable","onStepClick","hoveredStep","setHoveredStep","isHorizontal","circleSize","isStepClickable","isCompleted","isFuture","canClick","isHovered","circleBg","circleBorder","circleText","labelColor","descColor","lineColor","DropdownMenu","dropdownWidth","actionableItems","currentActionIdx","isDanger","isHighlighted","textColor","hoverBg","Link","showIcon","onMouseEnter","onMouseLeave","linkStyle","Spotlight","results","flatItems","grouped","categoryMap","MagnifyingGlassIcon","group","SegmentedControl","isVertical","activeIndex","containerRef","segmentRefs","indicator","setIndicator","updateIndicator","container","activeEl","containerRect","activeRect","isItemDisabled","variantTokens","defaultIcons","InfoIcon","CheckCircleIcon","XCircleIcon","Toast","role","border","background","resolvedIcon","MAX_VISIBLE_COLLAPSED","STACK_SCALE_STEP","STACK_PEEK_PX","TRANSITION_DURATION","ToastContext","createContext","_counter","uid","ToasterProvider","toastWidth","offset","maxToasts","globalDuration","toasts","setToasts","dismiss","toast","effectiveDuration","handleHeightMeasured","StackContainerWrapper","CardWithOverride","expandedTransformOverride","depthIndex","stackSize","expanded","isBottom","appeared","onDismiss","onHeightMeasured","isLeaving","scale","peekOffset","translateY","transform","opacity","isHiddenByDepth","zIndex","measuredRef","setExpanded","appearedIds","setAppearedIds","isRight","isCenter","collapsedHeight","expandedHeight","sum","containerHeight","horizontalStyle","arrayIndex","offsetPx","useToast","ctx","useContext","Alert","closable","vt","isLight","bgColor","iconColor","WarningIcon","handleClose","barSizeConfig","stripeKeyframesId","ensureStripeKeyframes","styleEl","ProgressBar","animated","clampedValue","stripeStyle","ProgressCircle","strokeWidth","radius","circumference","sizeMap","resolvedSize","strokeColor","Divider","alignMap","justifyMap","Stack","align","justify","wrap","maxWidthMap","Container","maxWidth","centered","resolvedMaxWidth","resolvedPadding","findItem","found","isDescendant","ancestorId","descendantId","ancestor","removeItem","removed","acc","newChildren","insertItem","targetId","itemToInsert","result","toggleExpanded","DropIndicator","DragListRow","depth","allowNesting","maxDepth","draggedId","dropState","onDragStart","onDragOver","onDragLeave","onDrop","onDragEnd","onToggleExpand","renderItem","dragMode","gripHover","setGripHover","rowHover","setRowHover","chevronHover","setChevronHover","handleActiveRef","hasChildren","isExpanded","isDragged","isDragging","isHandleMode","isDropTarget","showIndicatorBefore","showIndicatorAfter","showNestHighlight","cardBg","cardBorder","ghost","related","DotsSixVerticalIcon","ArrowBendDownRightIcon","DragList","onReorder","setDraggedId","setDropState","leaveTimerRef","expandTimerRef","lastPosRef","handleDragStart","handleDragOver","targetDepth","newState","handleDragLeave","_e","_cardEl","withoutDragged","draggedItem","newItems","handleDragEnd","handleToggleExpand"],"mappings":"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","file":"index.js","sourcesContent":["import { useState, useEffect } from 'react';\r\n\r\nexport type Theme = 'light' | 'dark';\r\n\r\n/**\r\n * Zjistí aktuální téma aplikace.\r\n * Výchozí je 'light'. Pokud je na html/body nastaven `data-theme`, použije se.\r\n * Jinak funguje fallback na systémové preference (prefers-color-scheme).\r\n */\r\nexport const useTheme = (): Theme => {\r\n const [theme, setTheme] = useState<Theme>('light');\r\n\r\n useEffect(() => {\r\n if (typeof window === 'undefined') return;\r\n\r\n const getTheme = (): Theme => {\r\n const docTheme = document.documentElement.getAttribute('data-theme') || document.body.getAttribute('data-theme');\r\n if (docTheme === 'dark' || docTheme === 'light') {\r\n return docTheme as Theme;\r\n }\r\n\r\n // Fallback na systém\r\n if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {\r\n return 'dark';\r\n }\r\n\r\n return 'light'; // default\r\n };\r\n\r\n setTheme(getTheme());\r\n\r\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\r\n const listener = (e: MediaQueryListEvent) => {\r\n const docTheme = document.documentElement.getAttribute('data-theme') || document.body.getAttribute('data-theme');\r\n if (!docTheme) {\r\n setTheme(e.matches ? 'dark' : 'light');\r\n }\r\n };\r\n mediaQuery.addEventListener('change', listener);\r\n\r\n // Nasloucháme případným změnám na data-theme v DOM\r\n const observer = new MutationObserver((mutations) => {\r\n mutations.forEach((mutation) => {\r\n if (mutation.attributeName === 'data-theme') {\r\n setTheme(getTheme());\r\n }\r\n });\r\n });\r\n\r\n observer.observe(document.documentElement, { attributes: true });\r\n observer.observe(document.body, { attributes: true });\r\n\r\n return () => {\r\n mediaQuery.removeEventListener('change', listener);\r\n observer.disconnect();\r\n };\r\n }, []);\r\n\r\n return theme;\r\n};\r\n","import React, { useEffect, useRef, useState } from 'react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ───────────────────────────────────────────────────────────\n\nconst colors = {\n primary: '#FC4F00',\n primaryHover: '#FF6D2A',\n secondaryHoverDark: 'rgba(0,0,0,0.7)',\n secondaryHoverLight: 'rgba(0,0,0,0.05)',\n borderDark: 'rgba(255,255,255,0.3)',\n borderLight: 'rgba(0,0,0,0.2)',\n white: '#ffffff',\n black: '#1a1a1a',\n} as const;\n\n// ─── Size config ─────────────────────────────────────────────────────────────\n\nconst sizeConfig = {\n sm: { paddingText: '6px 12px', paddingSquare: '6px', fontSize: '12px', gap: '6px' },\n md: { paddingText: '8px 16px', paddingSquare: '8px', fontSize: '14px', gap: '8px' },\n lg: { paddingText: '12px 20px', paddingSquare: '12px', fontSize: '16px', gap: '10px' },\n} as const;\n\n// ─── Spinner (no CSS required — rAF-driven rotation) ─────────────────────────\n\nconst Spinner: React.FC<{ size?: number }> = ({ size = 14 }) => {\n const [angle, setAngle] = useState(0);\n const rafRef = useRef<number | undefined>(undefined);\n const startRef = useRef<number | undefined>(undefined);\n\n useEffect(() => {\n const animate = (ts: number) => {\n if (startRef.current === undefined) startRef.current = ts;\n setAngle(((ts - startRef.current) / 800 * 360) % 360);\n rafRef.current = requestAnimationFrame(animate);\n };\n rafRef.current = requestAnimationFrame(animate);\n return () => {\n if (rafRef.current !== undefined) cancelAnimationFrame(rafRef.current);\n };\n }, []);\n\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n style={{ transform: `rotate(${angle}deg)`, flexShrink: 0, display: 'block' }}\n >\n <circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"currentColor\" strokeWidth=\"2\" strokeOpacity=\"0.25\" />\n <path\n d=\"M8 2a6 6 0 0 1 6 6\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n};\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'outline';\nexport type ButtonSize = 'sm' | 'md' | 'lg';\nexport type ButtonIconPosition = 'left' | 'right';\n\n/** Sdílené props pro režim `<button>` i `<a>`. */\ninterface ButtonBaseProps {\n /**\n * Vizuální varianta tlačítka.\n * - `primary` — oranžové vyplnění (#FC4F00)\n * - `secondary` — průhledné, bez okraje\n * - `outline` — průhledné s bílým okrajem\n * @default 'primary'\n */\n variant?: ButtonVariant;\n /**\n * Velikostní preset.\n * @default 'md'\n */\n size?: ButtonSize;\n /**\n * Volitelná ikona — libovolný React uzel (SVG, komponenta…).\n * Při použití bez `children` se tlačítko vykreslí jako čtverec.\n */\n icon?: React.ReactNode;\n /**\n * Na které straně se ikona zobrazí vzhledem k textu.\n * @default 'left'\n */\n iconPosition?: ButtonIconPosition;\n /**\n * Při `true` je tlačítko neaktivní a místo ikony se zobrazí spinner\n * (nebo samotný spinner, pokud ikona chybí).\n * Ukazatel myši je blokován; `onClick` se nevyvolá.\n */\n loading?: boolean;\n /**\n * Roztáhne tlačítko na celou šířku kontejneru.\n */\n fullWidth?: boolean;\n /**\n * Další inline styly aplikované na kořenový element (`<button>` nebo `<a>`).\n * Sloučeny za všechny variantní / velikostní styly — pro jednorázové přepsání.\n */\n style?: React.CSSProperties;\n /**\n * Dodatečná CSS třída pro kořenový element.\n */\n className?: string;\n /**\n * Textový obsah tlačítka.\n * Při vynechání (pokud je zadána `icon`) se tlačítko vykreslí jako čtverec.\n */\n children?: React.ReactNode;\n}\n\n/** Vykreslení jako nativní `<button>` (výchozí). Dědí všechny standardní atributy — včetně `onClick`, `type`, `form`, `name`, `value`, `aria-*` apod. */\nexport interface ButtonAsButtonProps\n extends ButtonBaseProps,\n Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, keyof ButtonBaseProps> {\n /** Při vynechání se komponenta vykreslí jako `<button>`. */\n href?: undefined;\n}\n\n/** Vykreslení jako `<a>` odkaz, pokud je zadáno `href`. Vhodné pro navigační tlačítka. */\nexport interface ButtonAsAnchorProps\n extends ButtonBaseProps,\n Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, keyof ButtonBaseProps> {\n href: string;\n}\n\nexport type ButtonProps = ButtonAsButtonProps | ButtonAsAnchorProps;\n\n// ─── Component ───────────────────────────────────────────────────────────────\n\nexport const Button = React.forwardRef<\n HTMLButtonElement | HTMLAnchorElement,\n ButtonProps\n>(\n (\n {\n variant = 'primary',\n size = 'md',\n icon,\n iconPosition = 'left',\n loading = false,\n fullWidth = false,\n children,\n style,\n className,\n ...rest\n },\n ref\n ) => {\n const [hovered, setHovered] = useState(false);\n const theme = useTheme();\n const isDark = theme === 'dark';\n\n const isAnchor = typeof (rest as ButtonAsAnchorProps).href === 'string';\n const isDisabled =\n loading || (isAnchor ? false : !!(rest as ButtonAsButtonProps).disabled);\n\n const hasText = children !== undefined && children !== null && children !== '';\n const hasIcon = icon !== undefined && icon !== null;\n const isSquare = (hasIcon || loading) && !hasText;\n\n const { paddingText, paddingSquare, fontSize, gap } = sizeConfig[size];\n\n // ── Base styles ──────────────────────────────────────────────────────────\n const base: React.CSSProperties = {\n display: fullWidth ? 'flex' : 'inline-flex',\n width: fullWidth ? '100%' : undefined,\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n gap: hasText && (hasIcon || loading) ? gap : undefined,\n padding: isSquare ? paddingSquare : paddingText,\n borderRadius: '8px',\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n opacity: isDisabled ? 0.5 : 1,\n outline: 'none',\n textDecoration: 'none',\n fontFamily: \"'Zalando Sans Expanded', sans-serif\",\n fontStyle: 'normal',\n fontWeight: 400,\n fontSize,\n lineHeight: 'normal',\n whiteSpace: 'nowrap',\n transition: 'background-color 0.15s ease, border-color 0.15s ease',\n userSelect: 'none',\n WebkitUserSelect: 'none',\n boxSizing: 'border-box',\n pointerEvents: isDisabled ? 'none' : undefined,\n };\n\n // ── Variant styles ────────────────────────────────────────────────────────\n const variantStyle = ((): React.CSSProperties => {\n switch (variant) {\n case 'primary':\n return {\n backgroundColor: hovered ? colors.primaryHover : colors.primary,\n color: colors.white,\n border: '1px solid transparent',\n };\n case 'secondary':\n return {\n backgroundColor: hovered\n ? (isDark ? colors.secondaryHoverDark : colors.secondaryHoverLight)\n : 'transparent',\n color: isDark ? colors.white : colors.black,\n border: '1px solid transparent',\n };\n case 'outline':\n return {\n backgroundColor: hovered\n ? (isDark ? colors.secondaryHoverDark : colors.secondaryHoverLight)\n : 'transparent',\n color: isDark ? colors.white : colors.black,\n border: `1px solid ${hovered\n ? (isDark ? 'rgba(255,255,255,0.5)' : 'rgba(0,0,0,0.5)')\n : (isDark ? colors.borderDark : colors.borderLight)\n }`,\n };\n }\n })();\n\n // ── Icon / spinner slot ───────────────────────────────────────────────────\n const iconSlot = (\n <span style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', flexShrink: 0 }}>\n {loading ? <Spinner size={parseInt(fontSize) - 1} /> : icon}\n </span>\n );\n const showIconSlot = loading || hasIcon;\n\n // ── Content layout ────────────────────────────────────────────────────────\n const content =\n iconPosition === 'right' ? (\n <>\n {hasText && <span>{children}</span>}\n {showIconSlot && iconSlot}\n </>\n ) : (\n <>\n {showIconSlot && iconSlot}\n {hasText && <span>{children}</span>}\n </>\n );\n\n const sharedProps = {\n style: { ...base, ...variantStyle, ...style },\n className,\n onMouseEnter: (e: React.MouseEvent) => {\n setHovered(true);\n (rest as React.HTMLAttributes<HTMLElement>).onMouseEnter?.(\n e as React.MouseEvent<HTMLElement>\n );\n },\n onMouseLeave: (e: React.MouseEvent) => {\n setHovered(false);\n (rest as React.HTMLAttributes<HTMLElement>).onMouseLeave?.(\n e as React.MouseEvent<HTMLElement>\n );\n },\n };\n\n if (isAnchor) {\n const { href, target, rel, ...anchorRest } = rest as ButtonAsAnchorProps;\n return (\n <a\n ref={ref as React.Ref<HTMLAnchorElement>}\n href={href}\n target={target}\n rel={rel ?? (target === '_blank' ? 'noopener noreferrer' : undefined)}\n aria-disabled={isDisabled || undefined}\n {...(anchorRest as React.AnchorHTMLAttributes<HTMLAnchorElement>)}\n {...sharedProps}\n >\n {content}\n </a>\n );\n }\n\n const { disabled, type = 'button', ...buttonRest } = rest as ButtonAsButtonProps;\n return (\n <button\n ref={ref as React.Ref<HTMLButtonElement>}\n type={type}\n disabled={isDisabled}\n aria-busy={loading || undefined}\n {...(buttonRest as React.ButtonHTMLAttributes<HTMLButtonElement>)}\n {...sharedProps}\n >\n {content}\n </button>\n );\n }\n);\n\nButton.displayName = 'Button';\n","import React, { useEffect, useId, useRef, useState } from 'react';\nimport { X as XIcon, Eye as EyeIcon, EyeSlash as EyeSlashIcon } from '@phosphor-icons/react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Spinner ─────────────────────────────────────────────────────────────────\n\nconst Spinner: React.FC<{ size?: number; color?: string }> = ({ size = 16, color }) => {\n const [angle, setAngle] = useState(0);\n const rafRef = useRef<number | undefined>(undefined);\n const startRef = useRef<number | undefined>(undefined);\n\n useEffect(() => {\n const animate = (ts: number) => {\n if (startRef.current === undefined) startRef.current = ts;\n setAngle(((ts - startRef.current) / 800 * 360) % 360);\n rafRef.current = requestAnimationFrame(animate);\n };\n rafRef.current = requestAnimationFrame(animate);\n return () => {\n if (rafRef.current !== undefined) cancelAnimationFrame(rafRef.current);\n };\n }, []);\n\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n style={{ transform: `rotate(${angle}deg)`, flexShrink: 0, display: 'block' }}\n >\n <circle cx=\"8\" cy=\"8\" r=\"6\" stroke={color ?? 'currentColor'} strokeWidth=\"2\" strokeOpacity=\"0.25\" />\n <path d=\"M8 2a6 6 0 0 1 6 6\" stroke={color ?? 'currentColor'} strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n );\n};\n\n// ─── Design tokens ───────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n background: 'rgba(3,3,3,0.75)',\n backgroundDisabled: 'rgba(3,3,3,0.4)',\n border: 'rgba(255,255,255,0.3)',\n borderFocus: 'rgba(255,255,255,0.7)',\n borderError: '#EF3838',\n text: '#ffffff',\n placeholder: '#ACACAC',\n label: '#ffffff',\n helperText: '#ACACAC',\n },\n light: {\n background: 'rgba(255,255,255,0.85)',\n backgroundDisabled: 'rgba(240,240,240,0.6)',\n border: 'rgba(0,0,0,0.2)',\n borderFocus: 'rgba(0,0,0,0.6)',\n borderError: '#EF3838',\n text: '#1a1a1a',\n placeholder: '#888888',\n label: '#1a1a1a',\n helperText: '#888888',\n },\n} as const;\n\n// ─── Size config ─────────────────────────────────────────────────────────────\n\nconst sizeConfig = {\n sm: { padding: '6px 10px', fontSize: '14px', iconSize: 14, gap: '8px' },\n md: { padding: '8px 12px', fontSize: '16px', iconSize: 16, gap: '10px' },\n lg: { padding: '10px 14px', fontSize: '18px', iconSize: 18, gap: '12px' },\n} as const;\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport type InputSize = 'sm' | 'md' | 'lg';\n\nexport interface InputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'> {\n /**\n * Popisek zobrazený nad vstupním polem.\n * Stylizován velkými písmeny dle SM-UI design systému.\n * Pokud je `required`, zobrazí se hvězdička.\n */\n label?: string;\n /**\n * Ikona vykreslená uvnitř vstupního pole.\n * Typicky SVG nebo komponenta ikony.\n */\n icon?: React.ReactNode;\n /**\n * Na které straně se ikona zobrazí.\n * @default 'left'\n */\n iconPosition?: 'left' | 'right';\n /**\n * Při `true` se pole zobrazí jako nevalidní (červený okraj).\n * Při zadání řetězce se pod polem zobrazí chybová zpráva.\n */\n error?: boolean | string;\n /**\n * Nápovědný text zobrazený pod vstupním polem.\n * Nezobrazí se pokud je aktivní chybová zpráva.\n */\n helperText?: string;\n /**\n * Při `true` se zobrazí spinner a pole přejde do režimu pouze pro čtení.\n * Vhodné pro asynchronní validaci nebo načítání dat.\n */\n loading?: boolean;\n /**\n * Zobrazí tlačítko pro vymazání obsahu pole (✕).\n * Funguje pouze pokud pole obsahuje hodnotu.\n * @default false\n */\n clearable?: boolean;\n /**\n * Zobrazí tlačítko pro přepínání viditelnosti hesla (oko).\n * Při `type=\"password\"` se aktivuje automaticky.\n * Nastavte na `false` pro vypnutí.\n */\n passwordToggle?: boolean;\n /**\n * Velikostní preset.\n * - `'sm'` — kompaktní (padding 6px, font 14px)\n * - `'md'` — výchozí (padding 8px, font 16px)\n * - `'lg'` — velký (padding 10px, font 18px)\n * @default 'md'\n */\n size?: InputSize;\n /**\n * Roztáhne pole na celou šířku kontejneru.\n * @default false\n */\n fullWidth?: boolean;\n /**\n * Další inline styly pro **obalový** `<div>` (ne pro nativní input).\n * Pro stylování nativního `<input>` použijte `inputStyle`.\n */\n style?: React.CSSProperties;\n /**\n * Dodatečná CSS třída pro **obalový** `<div>`.\n */\n className?: string;\n /**\n * Další inline styly aplikované přímo na nativní `<input>` element.\n */\n inputStyle?: React.CSSProperties;\n}\n\nexport interface InputGroupProps {\n /**\n * Text popisku vykreslený nad vstupním polem.\n * Zobrazuje se velkými písmeny dle SM-UI design systému.\n */\n label: string;\n /**\n * Hodnota `htmlFor` propojující `<label>` s potomkem `<input>`.\n * Automaticky generováno, pokud není zadáno.\n */\n htmlFor?: string;\n /**\n * Vstupní element(y) vykreslené uvnitř skupiny.\n * Při vynechání se vykreslí výchozí `<Input />`.\n */\n children?: React.ReactNode;\n /** Další inline styly pro obalový `<div>`. */\n style?: React.CSSProperties;\n /** Dodatečná CSS třída pro obalový `<div>`. */\n className?: string;\n}\n\n// ─── Input ───────────────────────────────────────────────────────────────────\n\n/**\n * Řízené / neřízené textové pole dle SM-UI design systému.\n *\n * Podporuje popisek, ikonu, chybový stav, nápovědný text,\n * vymazání hodnoty, velikostní presety a tmavý / světlý režim.\n *\n * Všechny nativní atributy `<input>` (`value`, `onChange`, `onBlur`, `placeholder`,\n * `type`, `autoComplete`, `maxLength`, `readOnly`, `disabled`, …) jsou přesměrovány.\n *\n * @example\n * ```tsx\n * <Input label=\"E-mail\" placeholder=\"jmeno@priklad.cz\" required />\n * <Input icon={<SearchIcon />} placeholder=\"Hledat…\" clearable />\n * <Input error=\"Toto pole je povinné\" value=\"\" />\n * <Input label=\"Heslo\" type=\"password\" helperText=\"Min. 8 znaků\" />\n * ```\n */\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n label,\n icon,\n iconPosition = 'left',\n error,\n helperText,\n loading = false,\n clearable = false,\n passwordToggle,\n size = 'md',\n fullWidth = false,\n style,\n className,\n inputStyle,\n disabled,\n required,\n value,\n onChange,\n onFocus,\n onBlur,\n type,\n ...rest\n },\n ref\n ) => {\n const theme = useTheme();\n const t = tokens[theme];\n const autoId = useId();\n const inputId = rest.id ?? autoId;\n const [focused, setFocused] = useState(false);\n const [passwordVisible, setPasswordVisible] = useState(false);\n\n const isPassword = type === 'password';\n const showPasswordToggle = passwordToggle ?? isPassword;\n const resolvedType = isPassword && passwordVisible ? 'text' : type;\n\n const isDisabled = disabled || loading;\n const hasError = Boolean(error);\n const errorMessage = typeof error === 'string' ? error : undefined;\n const hasValue = value !== undefined && value !== null && value !== '';\n const showClear = clearable && hasValue && !isDisabled && !showPasswordToggle;\n const sc = sizeConfig[size];\n\n const handleClear = () => {\n if (!onChange) return;\n const syntheticEvent = {\n target: { value: '' },\n currentTarget: { value: '' },\n } as React.ChangeEvent<HTMLInputElement>;\n onChange(syntheticEvent);\n };\n\n // ── Icon slot ────────────────────────────────────────────────────────\n\n const iconEl = icon ? (\n <span style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n color: t.placeholder,\n }}>\n {icon}\n </span>\n ) : null;\n\n // ── Right-side slot (loading > password toggle > clear > icon-right)\n\n const passwordToggleEl = showPasswordToggle && !isDisabled ? (\n <span\n role=\"button\"\n tabIndex={-1}\n aria-label={passwordVisible ? 'Skrýt heslo' : 'Zobrazit heslo'}\n onClick={() => setPasswordVisible((v) => !v)}\n style={{\n display: 'flex',\n alignItems: 'center',\n flexShrink: 0,\n cursor: 'pointer',\n color: t.placeholder,\n padding: '2px',\n }}\n >\n {passwordVisible\n ? <EyeSlashIcon color={t.placeholder} size={sc.iconSize} />\n : <EyeIcon color={t.placeholder} size={sc.iconSize} />\n }\n </span>\n ) : null;\n\n const rightSlot = loading ? (\n <span style={{ display: 'flex', alignItems: 'center', flexShrink: 0, color: t.placeholder }}>\n <Spinner size={sc.iconSize} color={t.placeholder} />\n </span>\n ) : passwordToggleEl ? passwordToggleEl\n : showClear ? (\n <span\n role=\"button\"\n tabIndex={-1}\n aria-label=\"Vymazat pole\"\n onClick={handleClear}\n style={{\n display: 'flex',\n alignItems: 'center',\n flexShrink: 0,\n cursor: 'pointer',\n color: t.placeholder,\n padding: '2px',\n }}\n >\n <XIcon size={sc.iconSize - 2} color={t.placeholder} />\n </span>\n ) : (iconPosition === 'right' && iconEl) ? iconEl : null;\n\n const leftSlot = iconPosition === 'left' ? iconEl : null;\n\n // ── Styles ───────────────────────────────────────────────────────────\n\n const wrapperStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: sc.gap,\n backgroundColor: isDisabled ? t.backgroundDisabled : t.background,\n border: `1px solid ${hasError ? t.borderError : focused ? t.borderFocus : t.border}`,\n borderRadius: '8px',\n padding: sc.padding,\n boxSizing: 'border-box',\n transition: 'border-color 0.15s ease',\n opacity: isDisabled ? 0.6 : 1,\n cursor: isDisabled ? 'not-allowed' : 'text',\n };\n\n const nativeStyle: React.CSSProperties = {\n flex: 1,\n minWidth: 0,\n background: 'transparent',\n border: 'none',\n outline: 'none',\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontStyle: 'normal',\n fontWeight: 400,\n fontSize: sc.fontSize,\n lineHeight: 'normal',\n color: t.text,\n cursor: isDisabled ? 'not-allowed' : 'text',\n ...inputStyle,\n };\n\n const labelStyle: React.CSSProperties = {\n fontFamily: \"'Zalando Sans Expanded', sans-serif\",\n fontStyle: 'normal',\n fontWeight: 400,\n fontSize: '10px',\n lineHeight: 'normal',\n textTransform: 'uppercase',\n color: t.label,\n userSelect: 'none',\n };\n\n const bottomTextStyle: React.CSSProperties = {\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '12px',\n lineHeight: 'normal',\n };\n\n return (\n <div\n style={{\n display: fullWidth ? 'flex' : 'inline-flex',\n flexDirection: 'column',\n gap: '6px',\n width: fullWidth ? '100%' : undefined,\n ...style,\n }}\n className={className}\n >\n {label && (\n <label htmlFor={inputId} style={labelStyle}>\n {label}\n {required && <span style={{ color: t.borderError, marginLeft: '3px' }}>*</span>}\n </label>\n )}\n\n <div style={wrapperStyle}>\n {leftSlot}\n <input\n ref={ref}\n id={inputId}\n type={resolvedType}\n disabled={disabled}\n required={required}\n readOnly={loading || rest.readOnly}\n value={value}\n onChange={onChange}\n style={nativeStyle}\n onFocus={(e) => { setFocused(true); onFocus?.(e); }}\n onBlur={(e) => { setFocused(false); onBlur?.(e); }}\n {...rest}\n />\n {rightSlot}\n </div>\n\n {errorMessage && (\n <span style={{ ...bottomTextStyle, color: t.borderError }}>\n {errorMessage}\n </span>\n )}\n {!errorMessage && helperText && (\n <span style={{ ...bottomTextStyle, color: t.helperText }}>\n {helperText}\n </span>\n )}\n </div>\n );\n }\n);\n\nInput.displayName = 'Input';\n\n// ─── InputGroup ──────────────────────────────────────────────────────────────\n\n/**\n * Obalí `<Input>` (nebo jiný formulářový prvek) skupinou s popiskem.\n * Popisek je stylizován velkými písmeny dle SM-UI design systému.\n *\n * Pro jednoduché případy lze použít přímo `<Input label=\"...\" />`.\n * `InputGroup` je vhodný pro kompozici více prvků pod jedním popiskem.\n *\n * @example\n * ```tsx\n * <InputGroup label=\"Adresa\">\n * <Input placeholder=\"Ulice\" />\n * <Input placeholder=\"Město\" />\n * </InputGroup>\n * ```\n */\nexport const InputGroup: React.FC<InputGroupProps> = ({\n label,\n htmlFor,\n children,\n style,\n className,\n}) => {\n const theme = useTheme();\n const autoId = useId();\n const labelFor = htmlFor ?? autoId;\n\n const containerStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n ...style,\n };\n\n const labelStyle: React.CSSProperties = {\n fontFamily: \"'Zalando Sans Expanded', sans-serif\",\n fontStyle: 'normal',\n fontWeight: 400,\n fontSize: '10px',\n lineHeight: 'normal',\n textTransform: 'uppercase',\n color: tokens[theme].label,\n userSelect: 'none',\n };\n\n return (\n <div style={containerStyle} className={className}>\n <label htmlFor={labelFor} style={labelStyle}>{label}</label>\n {children ?? <Input id={labelFor} />}\n </div>\n );\n};\n","import React, { useState, useRef, useEffect, useCallback, useId } from 'react';\nimport { createPortal } from 'react-dom';\nimport { CaretDown as CaretDownIcon, X as XIcon, Check as CheckIcon } from '@phosphor-icons/react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Spinner ─────────────────────────────────────────────────────────────────\n\nconst Spinner: React.FC<{ size?: number; color?: string }> = ({ size = 16, color }) => {\n const [angle, setAngle] = useState(0);\n const rafRef = useRef<number | undefined>(undefined);\n const startRef = useRef<number | undefined>(undefined);\n\n useEffect(() => {\n const animate = (ts: number) => {\n if (startRef.current === undefined) startRef.current = ts;\n setAngle(((ts - startRef.current) / 800 * 360) % 360);\n rafRef.current = requestAnimationFrame(animate);\n };\n rafRef.current = requestAnimationFrame(animate);\n return () => {\n if (rafRef.current !== undefined) cancelAnimationFrame(rafRef.current);\n };\n }, []);\n\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n style={{ transform: `rotate(${angle}deg)`, flexShrink: 0, display: 'block' }}\n >\n <circle cx=\"8\" cy=\"8\" r=\"6\" stroke={color ?? 'currentColor'} strokeWidth=\"2\" strokeOpacity=\"0.25\" />\n <path d=\"M8 2a6 6 0 0 1 6 6\" stroke={color ?? 'currentColor'} strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n );\n};\n\n// ─── Design tokens (mirroring Input) ────────────────────────────────────────\n\nconst tokens = {\n dark: {\n background: 'rgba(3,3,3,0.75)',\n backgroundDisabled: 'rgba(3,3,3,0.4)',\n border: 'rgba(255,255,255,0.3)',\n borderFocus: 'rgba(255,255,255,0.7)',\n borderError: '#EF3838',\n text: '#ffffff',\n placeholder: '#ACACAC',\n label: '#ffffff',\n dropdownBg: 'rgba(24,24,24,0.95)',\n dropdownBorder: 'rgba(255,255,255,0.12)',\n optionHover: 'rgba(255,255,255,0.06)',\n optionSelected: 'rgba(232,97,45,0.12)',\n optionSelectedText: '#E8612D',\n tagBg: 'rgba(255,255,255,0.12)',\n tagText: '#eaeaea',\n divider: 'rgba(255,255,255,0.08)',\n scrollbarThumb: 'rgba(255,255,255,0.15)',\n },\n light: {\n background: 'rgba(255,255,255,0.85)',\n backgroundDisabled: 'rgba(240,240,240,0.6)',\n border: 'rgba(0,0,0,0.2)',\n borderFocus: 'rgba(0,0,0,0.6)',\n borderError: '#EF3838',\n text: '#1a1a1a',\n placeholder: '#888888',\n label: '#1a1a1a',\n dropdownBg: 'rgba(255,255,255,0.95)',\n dropdownBorder: 'rgba(0,0,0,0.1)',\n optionHover: 'rgba(0,0,0,0.04)',\n optionSelected: 'rgba(232,97,45,0.08)',\n optionSelectedText: '#E8612D',\n tagBg: 'rgba(0,0,0,0.08)',\n tagText: '#1a1a1a',\n divider: 'rgba(0,0,0,0.06)',\n scrollbarThumb: 'rgba(0,0,0,0.15)',\n },\n} as const;\n\n// ─── Animation duration ──────────────────────────────────────────────────────\n\nconst ANIM_DURATION = 180; // ms\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface SelectOption {\n /** Unikátní hodnota položky. */\n value: string;\n /** Zobrazovaný popisek. Pokud chybí, použije se `value`. */\n label?: string;\n /** Při `true` nelze položku vybrat. */\n disabled?: boolean;\n}\n\nexport interface SelectProps {\n /** Dostupné položky k výběru. */\n options: SelectOption[];\n\n // ── Hodnota ────────────────────────────────────────────────────────────\n\n /**\n * Aktuální hodnota.\n * - Jednoduchý výběr: `string | null`\n * - Vícenásobný výběr: `string[]`\n */\n value?: string | string[] | null;\n /**\n * Voláno při změně výběru.\n * - Jednoduchý výběr: `(value: string | null) => void`\n * - Vícenásobný výběr: `(value: string[]) => void`\n */\n onChange?: (value: any) => void;\n\n // ── Chování ────────────────────────────────────────────────────────────\n\n /** Umožní vybrat více položek najednou. @default false */\n multiple?: boolean;\n /** Zobrazí textové pole pro filtrování položek. @default false */\n searchable?: boolean;\n /** Zobrazí tlačítko pro vymazání výběru. @default false */\n clearable?: boolean;\n /** Zakáže celý select. @default false */\n disabled?: boolean;\n /**\n * Při `true` je select neinteraktivní a místo šipky se zobrazí spinner.\n * Vhodné při asynchronním načítání položek.\n * @default false\n */\n loading?: boolean;\n /** Označí select jako nevalidní — přijímá `true` nebo textovou chybovou zprávu. */\n error?: boolean | string;\n\n // ── Zobrazení ──────────────────────────────────────────────────────────\n\n /** Zástupný text zobrazený při prázdném výběru. */\n placeholder?: string;\n /** Maximální výška (px) rozbalovacího seznamu před scrollováním. @default 240 */\n maxDropdownHeight?: number;\n /** Další inline styly pro kořenový obal. */\n style?: React.CSSProperties;\n /** Dodatečná CSS třída pro kořenový obal. */\n className?: string;\n}\n\nexport interface SelectGroupProps {\n /** Text popisku nad selectem, velkými písmeny dle SM-UI design systému. */\n label: string;\n /** `htmlFor` propojující `<label>` se selectem. Automaticky generováno, pokud chybí. */\n htmlFor?: string;\n /** Select element(y) vykreslené uvnitř skupiny. */\n children?: React.ReactNode;\n /** Další inline styly pro obal. */\n style?: React.CSSProperties;\n /** Dodatečná CSS třída pro obal. */\n className?: string;\n}\n\n// ─── Select ──────────────────────────────────────────────────────────────────\n\n/**\n * Vlastní rozbalovací výběr dle SM-UI design systému.\n *\n * Podporuje jednoduchý / vícenásobný výběr, fulltextové vyhledávání,\n * vymazání hodnoty, chybový stav a tmavý / světlý režim přes `useTheme`.\n *\n * Dropdown se vykresluje přes React portál, takže ho neořízne\n * rodičovský kontejner s `overflow: hidden`.\n *\n * @example\n * ```tsx\n * // Jednoduchý výběr\n * <Select\n * options={[{ value: 'cz', label: 'Česko' }, { value: 'sk', label: 'Slovensko' }]}\n * value={zeme}\n * onChange={setZeme}\n * placeholder=\"Vyberte zemi\"\n * clearable\n * />\n *\n * // Vícenásobný výběr s vyhledáváním\n * <Select\n * options={tagy}\n * value={vybraneTaxy}\n * onChange={setVybraneTaxy}\n * multiple\n * searchable\n * placeholder=\"Vyberte tagy…\"\n * />\n * ```\n */\nexport const Select: React.FC<SelectProps> = ({\n options,\n value,\n onChange,\n multiple = false,\n searchable = false,\n clearable = false,\n disabled = false,\n loading = false,\n error,\n placeholder = 'Vyberte…',\n maxDropdownHeight = 240,\n style,\n className,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n const selectId = useId();\n\n const triggerRef = useRef<HTMLDivElement>(null);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const searchRef = useRef<HTMLInputElement>(null);\n const listRef = useRef<HTMLDivElement>(null);\n\n const [open, setOpen] = useState(false);\n const [visible, setVisible] = useState(false); // controls portal mount\n const [animState, setAnimState] = useState<'idle' | 'opening' | 'open' | 'closing'>('idle');\n const [search, setSearch] = useState('');\n const [highlightIndex, setHighlightIndex] = useState(-1);\n const [dropdownPos, setDropdownPos] = useState<{ top: number; left: number; width: number; openAbove: boolean }>({ top: 0, left: 0, width: 0, openAbove: false });\n\n const isDisabled = disabled || loading;\n const hasError = Boolean(error);\n const errorMessage = typeof error === 'string' ? error : undefined;\n\n // ── Open / close with animation ────────────────────────────────────────\n\n const doOpen = useCallback(() => {\n setOpen(true);\n setVisible(true);\n setAnimState('opening');\n requestAnimationFrame(() => {\n requestAnimationFrame(() => setAnimState('open'));\n });\n }, []);\n\n const doClose = useCallback(() => {\n setOpen(false);\n setAnimState('closing');\n setSearch('');\n const timer = setTimeout(() => {\n setVisible(false);\n setAnimState('idle');\n }, ANIM_DURATION);\n return () => clearTimeout(timer);\n }, []);\n\n // ── Normalise value ────────────────────────────────────────────────────\n\n const selectedValues: string[] = multiple\n ? Array.isArray(value) ? value : []\n : value != null && value !== '' ? [value as string] : [];\n\n const isSelected = (v: string) => selectedValues.includes(v);\n\n // ── Filtered options ───────────────────────────────────────────────────\n\n const filteredOptions = search\n ? options.filter((o) =>\n (o.label ?? o.value).toLowerCase().includes(search.toLowerCase())\n )\n : options;\n\n // ── Position the portal dropdown ───────────────────────────────────────\n\n const updatePosition = useCallback(() => {\n if (!triggerRef.current) return;\n const rect = triggerRef.current.getBoundingClientRect();\n const dropdownHeight = dropdownRef.current?.offsetHeight ?? maxDropdownHeight + 60;\n const spaceBelow = window.innerHeight - rect.bottom - 6;\n const spaceAbove = rect.top - 6;\n const openAbove = spaceBelow < dropdownHeight && spaceAbove > spaceBelow;\n setDropdownPos({\n top: openAbove ? rect.top - 6 : rect.bottom + 6,\n left: rect.left,\n width: rect.width,\n openAbove,\n });\n }, [maxDropdownHeight]);\n\n useEffect(() => {\n if (!visible) return;\n updatePosition();\n window.addEventListener('scroll', updatePosition, true);\n window.addEventListener('resize', updatePosition);\n return () => {\n window.removeEventListener('scroll', updatePosition, true);\n window.removeEventListener('resize', updatePosition);\n };\n }, [visible, updatePosition]);\n\n // ── Handlers ───────────────────────────────────────────────────────────\n\n const toggleOption = useCallback(\n (optValue: string) => {\n if (!onChange) return;\n if (multiple) {\n const next = isSelected(optValue)\n ? selectedValues.filter((v) => v !== optValue)\n : [...selectedValues, optValue];\n onChange(next);\n } else {\n onChange(optValue);\n doClose();\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [multiple, onChange, selectedValues, doClose]\n );\n\n const handleClear = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n if (!onChange) return;\n onChange(multiple ? [] : null);\n setSearch('');\n },\n [multiple, onChange]\n );\n\n const handleTriggerClick = () => {\n if (isDisabled) return;\n if (open) {\n doClose();\n } else {\n doOpen();\n }\n setHighlightIndex(-1);\n };\n\n // ── Keyboard navigation ────────────────────────────────────────────────\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (isDisabled) return;\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!open) {\n doOpen();\n setHighlightIndex(0);\n } else {\n setHighlightIndex((i) => Math.min(i + 1, filteredOptions.length - 1));\n }\n break;\n case 'ArrowUp':\n e.preventDefault();\n setHighlightIndex((i) => Math.max(i - 1, 0));\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (open && highlightIndex >= 0 && filteredOptions[highlightIndex] && !filteredOptions[highlightIndex].disabled) {\n toggleOption(filteredOptions[highlightIndex].value);\n } else if (!open) {\n doOpen();\n setHighlightIndex(0);\n }\n break;\n case 'Escape':\n doClose();\n break;\n case 'Tab':\n doClose();\n break;\n }\n };\n\n // ── Scroll highlighted option into view ────────────────────────────────\n\n useEffect(() => {\n if (highlightIndex >= 0 && listRef.current) {\n const child = listRef.current.children[highlightIndex] as HTMLElement | undefined;\n child?.scrollIntoView({ block: 'nearest' });\n }\n }, [highlightIndex]);\n\n // ── Close on outside click ─────────────────────────────────────────────\n\n useEffect(() => {\n if (!open) return;\n const handler = (e: MouseEvent) => {\n const target = e.target as Node;\n const inTrigger = triggerRef.current?.contains(target);\n const inDropdown = dropdownRef.current?.contains(target);\n if (!inTrigger && !inDropdown) {\n doClose();\n }\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [open, doClose]);\n\n // ── Focus search on open ───────────────────────────────────────────────\n\n useEffect(() => {\n if (open && searchable && searchRef.current) {\n searchRef.current.focus();\n }\n }, [open, searchable]);\n\n // ── Display value ──────────────────────────────────────────────────────\n\n const getLabel = (v: string) => {\n const opt = options.find((o) => o.value === v);\n return opt?.label ?? v;\n };\n\n const showClear = clearable && selectedValues.length > 0 && !isDisabled;\n\n // ── Animation styles ───────────────────────────────────────────────────\n\n const getDropdownAnimStyle = (): React.CSSProperties => {\n const above = dropdownPos.openAbove;\n const slideIn = above ? 'translateY(8px)' : 'translateY(-8px)';\n const slideOut = above ? 'translateY(6px)' : 'translateY(-6px)';\n const base: React.CSSProperties = {\n transition: `opacity ${ANIM_DURATION}ms cubic-bezier(0.16, 1, 0.3, 1), transform ${ANIM_DURATION}ms cubic-bezier(0.16, 1, 0.3, 1)`,\n };\n if (animState === 'opening' || animState === 'idle') {\n return { ...base, opacity: 0, transform: `${slideIn} scale(0.97)` };\n }\n if (animState === 'open') {\n return { ...base, opacity: 1, transform: 'translateY(0) scale(1)' };\n }\n // closing\n return { ...base, opacity: 0, transform: `${slideOut} scale(0.98)`, pointerEvents: 'none' };\n };\n\n // ── Styles ─────────────────────────────────────────────────────────────\n\n const triggerStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: '10px',\n backgroundColor: isDisabled ? t.backgroundDisabled : t.background,\n border: `1px solid ${hasError ? t.borderError : open ? t.borderFocus : t.border}`,\n borderRadius: '8px',\n padding: '8px 12px',\n boxSizing: 'border-box',\n transition: 'border-color 0.15s ease',\n opacity: isDisabled ? 0.6 : 1,\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n minHeight: '40px',\n userSelect: 'none',\n outline: 'none',\n };\n\n // ── Dropdown (rendered via portal) ─────────────────────────────────────\n\n const dropdown = visible\n ? createPortal(\n <div\n ref={dropdownRef}\n style={{\n position: 'fixed',\n ...(dropdownPos.openAbove\n ? { bottom: window.innerHeight - dropdownPos.top, left: dropdownPos.left }\n : { top: dropdownPos.top, left: dropdownPos.left }),\n width: dropdownPos.width,\n backgroundColor: t.dropdownBg,\n border: `1px solid ${t.dropdownBorder}`,\n borderRadius: '12px',\n boxShadow: theme === 'dark'\n ? '0 12px 40px rgba(0,0,0,0.5), 0 0 0 1px rgba(255,255,255,0.04) inset'\n : '0 12px 40px rgba(0,0,0,0.12), 0 0 0 1px rgba(0,0,0,0.03) inset',\n backdropFilter: 'blur(20px)',\n WebkitBackdropFilter: 'blur(20px)',\n zIndex: 99999,\n overflow: 'hidden',\n boxSizing: 'border-box',\n transformOrigin: dropdownPos.openAbove ? 'bottom center' : 'top center',\n ...getDropdownAnimStyle(),\n }}\n >\n {/* Search */}\n {searchable && (\n <div style={{\n padding: '10px 12px',\n borderBottom: `1px solid ${t.divider}`,\n }}>\n <input\n ref={searchRef}\n type=\"text\"\n value={search}\n onChange={(e) => { setSearch(e.target.value); setHighlightIndex(0); }}\n onKeyDown={handleKeyDown}\n placeholder=\"Hledat…\"\n style={{\n width: '100%',\n background: 'transparent',\n border: 'none',\n outline: 'none',\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '14px',\n color: t.text,\n boxSizing: 'border-box',\n padding: 0,\n }}\n />\n </div>\n )}\n\n {/* Options list */}\n <div\n ref={listRef}\n role=\"listbox\"\n aria-multiselectable={multiple}\n className={`sm-select-list-${selectId}`}\n style={{\n maxHeight: maxDropdownHeight,\n overflowY: 'auto',\n padding: '6px',\n }}\n >\n {/* Custom scrollbar styles */}\n <style>{`\n .sm-select-list-${selectId}::-webkit-scrollbar {\n width: 6px;\n }\n .sm-select-list-${selectId}::-webkit-scrollbar-track {\n background: transparent;\n }\n .sm-select-list-${selectId}::-webkit-scrollbar-thumb {\n background: ${t.scrollbarThumb};\n border-radius: 3px;\n }\n `}</style>\n\n {filteredOptions.length === 0 && (\n <div style={{\n padding: '16px',\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '13px',\n color: t.placeholder,\n textAlign: 'center',\n }}>\n Nic nenalezeno\n </div>\n )}\n\n {filteredOptions.map((opt, idx) => {\n const selected = isSelected(opt.value);\n const highlighted = idx === highlightIndex;\n\n return (\n <div\n key={opt.value}\n role=\"option\"\n aria-selected={selected}\n aria-disabled={opt.disabled}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: '10px',\n padding: '9px 10px',\n borderRadius: '6px',\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '14px',\n fontWeight: selected ? 500 : 400,\n lineHeight: 'normal',\n color: selected ? t.optionSelectedText : opt.disabled ? t.placeholder : t.text,\n backgroundColor: highlighted\n ? t.optionHover\n : selected\n ? t.optionSelected\n : 'transparent',\n cursor: opt.disabled ? 'not-allowed' : 'pointer',\n opacity: opt.disabled ? 0.45 : 1,\n transition: 'background-color 0.12s ease, color 0.12s ease',\n userSelect: 'none',\n marginBottom: idx < filteredOptions.length - 1 ? '2px' : 0,\n }}\n onClick={() => {\n if (!opt.disabled) toggleOption(opt.value);\n }}\n onMouseEnter={() => setHighlightIndex(idx)}\n onMouseLeave={() => setHighlightIndex(-1)}\n >\n <span style={{ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {opt.label ?? opt.value}\n </span>\n {selected && <CheckIcon size={16} color={t.optionSelectedText} />}\n </div>\n );\n })}\n </div>\n </div>,\n document.body\n )\n : null;\n\n return (\n <div\n style={{ position: 'relative', display: 'flex', flexDirection: 'column', gap: '4px', ...style }}\n className={className}\n >\n {/* Trigger */}\n <div\n ref={triggerRef}\n role=\"combobox\"\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n tabIndex={isDisabled ? -1 : 0}\n style={triggerStyle}\n onClick={handleTriggerClick}\n onKeyDown={handleKeyDown}\n >\n {/* Value area */}\n <div style={{ flex: 1, minWidth: 0, display: 'flex', flexWrap: 'nowrap', gap: '4px', alignItems: 'center', overflowX: 'auto', overflowY: 'hidden', scrollbarWidth: 'none' }}>\n {selectedValues.length === 0 && (\n <span style={{\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '16px',\n color: t.placeholder,\n lineHeight: 'normal',\n }}>\n {placeholder}\n </span>\n )}\n\n {multiple\n ? selectedValues.map((v) => (\n <span\n key={v}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '4px',\n backgroundColor: t.tagBg,\n color: t.tagText,\n borderRadius: '4px',\n padding: '2px 8px',\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '13px',\n lineHeight: 'normal',\n flexShrink: 0,\n whiteSpace: 'nowrap',\n }}\n >\n <span style={{ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {getLabel(v)}\n </span>\n {!isDisabled && (\n <span\n role=\"button\"\n tabIndex={-1}\n style={{ cursor: 'pointer', display: 'flex', opacity: 0.7 }}\n onClick={(e) => {\n e.stopPropagation();\n toggleOption(v);\n }}\n >\n <XIcon size={14} color={t.tagText} />\n </span>\n )}\n </span>\n ))\n : selectedValues.length > 0 && (\n <span style={{\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '16px',\n color: t.text,\n lineHeight: 'normal',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}>\n {getLabel(selectedValues[0])}\n </span>\n )}\n </div>\n\n {/* Actions */}\n <div style={{ display: 'flex', alignItems: 'center', gap: '4px', flexShrink: 0 }}>\n {showClear && (\n <span\n role=\"button\"\n tabIndex={-1}\n aria-label=\"Vymazat výběr\"\n style={{ cursor: 'pointer', display: 'flex', padding: '2px' }}\n onClick={handleClear}\n >\n <XIcon size={14} color={t.placeholder} />\n </span>\n )}\n {loading\n ? <Spinner size={16} color={t.placeholder} />\n : <CaretDownIcon size={16} color={t.placeholder} style={{ transition: 'transform 0.2s ease', transform: open ? 'rotate(180deg)' : 'rotate(0deg)', flexShrink: 0 }} />\n }\n </div>\n </div>\n\n {/* Error message */}\n {errorMessage && (\n <span style={{\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '12px',\n color: t.borderError,\n lineHeight: 'normal',\n }}>\n {errorMessage}\n </span>\n )}\n\n {/* Portal dropdown */}\n {dropdown}\n </div>\n );\n};\n\nSelect.displayName = 'Select';\n\n// ─── SelectGroup ─────────────────────────────────────────────────────────────\n\n/**\n * Obalí `<Select>` skupinou s popiskem, vizuálně odpovídá `InputGroup`.\n *\n * @example\n * ```tsx\n * <SelectGroup label=\"Země\">\n * <Select options={zeme} value={zeme} onChange={setZeme} />\n * </SelectGroup>\n * ```\n */\nexport const SelectGroup: React.FC<SelectGroupProps> = ({\n label,\n htmlFor,\n children,\n style,\n className,\n}) => {\n const theme = useTheme();\n const autoId = useId();\n const labelFor = htmlFor ?? autoId;\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '8px', ...style }} className={className}>\n <label\n htmlFor={labelFor}\n style={{\n fontFamily: \"'Zalando Sans Expanded', sans-serif\",\n fontStyle: 'normal',\n fontWeight: 400,\n fontSize: '10px',\n lineHeight: 'normal',\n textTransform: 'uppercase',\n color: tokens[theme].label,\n userSelect: 'none',\n }}\n >\n {label}\n </label>\n {children ?? <Select options={[]} />}\n </div>\n );\n};\n\nSelectGroup.displayName = 'SelectGroup';\n","import React, { useState, useRef, useEffect, useCallback, useId } from 'react';\nimport { createPortal } from 'react-dom';\nimport { CalendarBlank as CalendarBlankIcon, X as XIcon, CaretLeft as CaretLeftIcon, CaretRight as CaretRightIcon } from '@phosphor-icons/react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Spinner ─────────────────────────────────────────────────────────────────\n\nconst Spinner: React.FC<{ size?: number; color?: string }> = ({ size = 16, color }) => {\n const [angle, setAngle] = useState(0);\n const rafRef = useRef<number | undefined>(undefined);\n const startRef = useRef<number | undefined>(undefined);\n\n useEffect(() => {\n const animate = (ts: number) => {\n if (startRef.current === undefined) startRef.current = ts;\n setAngle(((ts - startRef.current) / 800 * 360) % 360);\n rafRef.current = requestAnimationFrame(animate);\n };\n rafRef.current = requestAnimationFrame(animate);\n return () => {\n if (rafRef.current !== undefined) cancelAnimationFrame(rafRef.current);\n };\n }, []);\n\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n style={{ transform: `rotate(${angle}deg)`, flexShrink: 0, display: 'block' }}\n >\n <circle cx=\"8\" cy=\"8\" r=\"6\" stroke={color ?? 'currentColor'} strokeWidth=\"2\" strokeOpacity=\"0.25\" />\n <path d=\"M8 2a6 6 0 0 1 6 6\" stroke={color ?? 'currentColor'} strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n );\n};\n\n// ─── Design tokens ──────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n background: 'rgba(3,3,3,0.75)',\n backgroundDisabled: 'rgba(3,3,3,0.4)',\n border: 'rgba(255,255,255,0.3)',\n borderFocus: 'rgba(255,255,255,0.7)',\n borderError: '#EF3838',\n text: '#ffffff',\n placeholder: '#ACACAC',\n label: '#ffffff',\n helperText: '#ACACAC',\n dropdownBg: 'rgba(24,24,24,0.95)',\n dropdownBorder: 'rgba(255,255,255,0.12)',\n dayHover: 'rgba(255,255,255,0.06)',\n daySelected: '#E8612D',\n daySelectedText: '#ffffff',\n dayRangeMiddle: 'rgba(232,97,45,0.15)',\n dayToday: 'rgba(255,255,255,0.2)',\n dayOutside: 'rgba(255,255,255,0.25)',\n dayDisabled: 'rgba(255,255,255,0.12)',\n divider: 'rgba(255,255,255,0.08)',\n scrollbarThumb: 'rgba(255,255,255,0.15)',\n },\n light: {\n background: 'rgba(255,255,255,0.85)',\n backgroundDisabled: 'rgba(240,240,240,0.6)',\n border: 'rgba(0,0,0,0.2)',\n borderFocus: 'rgba(0,0,0,0.6)',\n borderError: '#EF3838',\n text: '#1a1a1a',\n placeholder: '#888888',\n label: '#1a1a1a',\n helperText: '#888888',\n dropdownBg: 'rgba(255,255,255,0.95)',\n dropdownBorder: 'rgba(0,0,0,0.1)',\n dayHover: 'rgba(0,0,0,0.04)',\n daySelected: '#E8612D',\n daySelectedText: '#ffffff',\n dayRangeMiddle: 'rgba(232,97,45,0.10)',\n dayToday: 'rgba(0,0,0,0.1)',\n dayOutside: 'rgba(0,0,0,0.3)',\n dayDisabled: 'rgba(0,0,0,0.15)',\n divider: 'rgba(0,0,0,0.06)',\n scrollbarThumb: 'rgba(0,0,0,0.15)',\n },\n} as const;\n\n// ─── Animation duration ─────────────────────────────────────────────────────\n\nconst ANIM_DURATION = 180;\n\n// ─── Size config ────────────────────────────────────────────────────────────\n\nconst sizeConfig = {\n sm: { padding: '6px 10px', fontSize: '14px', iconSize: 14, gap: '8px' },\n md: { padding: '8px 12px', fontSize: '16px', iconSize: 16, gap: '10px' },\n lg: { padding: '10px 14px', fontSize: '18px', iconSize: 18, gap: '12px' },\n} as const;\n\n// ─── Helpers ────────────────────────────────────────────────────────────────\n\nconst DAY_NAMES = ['Po', 'Út', 'St', 'Čt', 'Pá', 'So', 'Ne'];\nconst MONTH_NAMES = [\n 'Leden', 'Únor', 'Březen', 'Duben', 'Květen', 'Červen',\n 'Červenec', 'Srpen', 'Září', 'Říjen', 'Listopad', 'Prosinec',\n];\n\n/** Vrátí pole dat pro kalendářní mřížku (6 řádků × 7 sloupců). */\nfunction getCalendarDays(year: number, month: number, firstDayOfWeek: number): Date[] {\n const firstOfMonth = new Date(year, month, 1);\n let dayOfWeek = firstOfMonth.getDay(); // 0=Sunday\n // Převod na ISO index (0=Monday) a posun dle firstDayOfWeek\n dayOfWeek = (dayOfWeek === 0 ? 7 : dayOfWeek) - firstDayOfWeek;\n if (dayOfWeek < 0) dayOfWeek += 7;\n\n const start = new Date(year, month, 1 - dayOfWeek);\n const days: Date[] = [];\n for (let i = 0; i < 42; i++) {\n const d = new Date(start);\n d.setDate(start.getDate() + i);\n days.push(d);\n }\n return days;\n}\n\n/** Formátuje datum jako dd.mm.yyyy */\nfunction formatDate(d: Date): string {\n const dd = String(d.getDate()).padStart(2, '0');\n const mm = String(d.getMonth() + 1).padStart(2, '0');\n return `${dd}.${mm}.${d.getFullYear()}`;\n}\n\n/** Formátuje datum s časem jako dd.mm.yyyy HH:mm */\nfunction formatDateTime(d: Date): string {\n const hh = String(d.getHours()).padStart(2, '0');\n const min = String(d.getMinutes()).padStart(2, '0');\n return `${formatDate(d)} ${hh}:${min}`;\n}\n\n/** Porovná dva datumy jen podle dne (bez času). */\nfunction isSameDay(a: Date, b: Date): boolean {\n return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();\n}\n\n/** Je datum v rozmezí (inkluzivně)? */\nfunction isInRange(d: Date, start: Date, end: Date): boolean {\n const t = d.getTime();\n const s = Math.min(start.getTime(), end.getTime());\n const e = Math.max(start.getTime(), end.getTime());\n return t >= s && t <= e;\n}\n\n/** Je datum dnešní? */\nfunction isToday(d: Date): boolean {\n return isSameDay(d, new Date());\n}\n\n// ─── Types ──────────────────────────────────────────────────────────────────\n\nexport type DatePickerSize = 'sm' | 'md' | 'lg';\n\nexport interface DatePickerProps {\n /**\n * Režim výběru data.\n * - `'single'` — výběr jednoho data\n * - `'range'` — výběr rozsahu (od–do)\n * @default 'single'\n */\n mode?: 'single' | 'range';\n /**\n * Zobrazí výběr času (hodiny a minuty) pod kalendářem.\n * @default false\n */\n showTime?: boolean;\n /**\n * Aktuální hodnota.\n * - `single` režim: `Date | null`\n * - `range` režim: `[Date | null, Date | null]`\n */\n value?: Date | null | [Date | null, Date | null];\n /**\n * Voláno při změně výběru.\n * - `single` režim: `(value: Date | null) => void`\n * - `range` režim: `(value: [Date | null, Date | null]) => void`\n */\n onChange?: (value: any) => void;\n /**\n * Popisek zobrazený nad vstupním polem.\n * Stylizován velkými písmeny dle SM-UI design systému.\n */\n label?: string;\n /** Zástupný text zobrazený při prázdné hodnotě. */\n placeholder?: string;\n /**\n * Při `true` se pole zobrazí jako nevalidní (červený okraj).\n * Při zadání řetězce se pod polem zobrazí chybová zpráva.\n */\n error?: boolean | string;\n /** Nápovědný text zobrazený pod vstupním polem. */\n helperText?: string;\n /** Zakáže celý DatePicker. @default false */\n disabled?: boolean;\n /**\n * Při `true` je DatePicker neinteraktivní a zobrazí spinner.\n * @default false\n */\n loading?: boolean;\n /** Zobrazí tlačítko pro vymazání výběru. @default false */\n clearable?: boolean;\n /**\n * Velikostní preset.\n * @default 'md'\n */\n size?: DatePickerSize;\n /** Roztáhne pole na celou šířku kontejneru. @default false */\n fullWidth?: boolean;\n /** Označí pole jako povinné (hvězdička u popisku). */\n required?: boolean;\n /** Minimální datum, které lze vybrat. */\n minDate?: Date;\n /** Maximální datum, které lze vybrat. */\n maxDate?: Date;\n /**\n * První den v týdnu (ISO: 1=pondělí).\n * @default 1\n */\n firstDayOfWeek?: number;\n /** Další inline styly pro kořenový obal. */\n style?: React.CSSProperties;\n /** Dodatečná CSS třída pro kořenový obal. */\n className?: string;\n}\n\nexport interface DatePickerGroupProps {\n /** Text popisku nad DatePickerem, velkými písmeny dle SM-UI design systému. */\n label: string;\n /** `htmlFor` propojující `<label>` s DatePickerem. Automaticky generováno, pokud chybí. */\n htmlFor?: string;\n /** DatePicker element(y) vykreslené uvnitř skupiny. */\n children?: React.ReactNode;\n /** Další inline styly pro obal. */\n style?: React.CSSProperties;\n /** Dodatečná CSS třída pro obal. */\n className?: string;\n}\n\n// ─── DatePicker ─────────────────────────────────────────────────────────────\n\n/**\n * Výběr data (a volitelně času) dle SM-UI design systému.\n *\n * Podporuje jednoduchý výběr / rozsah, volitelný výběr času,\n * omezení min/max datem, chybový stav a tmavý / světlý režim.\n *\n * Dropdown se vykresluje přes React portál, takže ho neořízne\n * rodičovský kontejner s `overflow: hidden`.\n *\n * @example\n * ```tsx\n * // Jednoduchý výběr\n * <DatePicker\n * label=\"Datum narození\"\n * value={datum}\n * onChange={setDatum}\n * clearable\n * />\n *\n * // Rozsah s časem\n * <DatePicker\n * mode=\"range\"\n * showTime\n * value={rozsah}\n * onChange={setRozsah}\n * placeholder=\"Vyberte rozsah…\"\n * />\n * ```\n */\nexport const DatePicker: React.FC<DatePickerProps> = ({\n mode = 'single',\n showTime = false,\n value,\n onChange,\n label,\n placeholder,\n error,\n helperText,\n disabled = false,\n loading = false,\n clearable = false,\n size = 'md',\n fullWidth = false,\n required,\n minDate,\n maxDate,\n firstDayOfWeek = 1,\n style,\n className,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n const autoId = useId();\n const sc = sizeConfig[size];\n\n const triggerRef = useRef<HTMLDivElement>(null);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n const [open, setOpen] = useState(false);\n const [visible, setVisible] = useState(false);\n const [animState, setAnimState] = useState<'idle' | 'opening' | 'open' | 'closing'>('idle');\n const [dropdownPos, setDropdownPos] = useState<{ top: number; left: number; width: number; openAbove: boolean }>({ top: 0, left: 0, width: 0, openAbove: false });\n const [hoveredDay, setHoveredDay] = useState<Date | null>(null);\n\n // Kalendář stav\n const now = new Date();\n const [viewYear, setViewYear] = useState(now.getFullYear());\n const [viewMonth, setViewMonth] = useState(now.getMonth());\n const [viewMode, setViewMode] = useState<'days' | 'months' | 'years'>('days');\n\n // Range: fáze výběru (0 = žádný start, 1 = start vybrán, čeká se na konec)\n const [rangePhase, setRangePhase] = useState<0 | 1>(0);\n\n const isDisabled = disabled || loading;\n const hasError = Boolean(error);\n const errorMessage = typeof error === 'string' ? error : undefined;\n\n // ── Normalizace hodnoty ────────────────────────────────────────────────\n\n const singleValue: Date | null = mode === 'single' && value instanceof Date ? value : null;\n const rangeValue: [Date | null, Date | null] = mode === 'range' && Array.isArray(value)\n ? value as [Date | null, Date | null]\n : [null, null];\n\n const hasValue = mode === 'single' ? singleValue !== null : (rangeValue[0] !== null || rangeValue[1] !== null);\n const showClear = clearable && hasValue && !isDisabled;\n\n // ── Zobrazení formátované hodnoty ──────────────────────────────────────\n\n const displayValue = (() => {\n if (mode === 'single') {\n if (!singleValue) return '';\n return showTime ? formatDateTime(singleValue) : formatDate(singleValue);\n }\n const [s, e] = rangeValue;\n if (!s && !e) return '';\n const fmt = showTime ? formatDateTime : formatDate;\n return `${s ? fmt(s) : '…'} – ${e ? fmt(e) : '…'}`;\n })();\n\n const placeholderText = placeholder ?? (mode === 'single'\n ? (showTime ? 'dd.mm.rrrr hh:mm' : 'dd.mm.rrrr')\n : (showTime ? 'dd.mm.rrrr hh:mm – dd.mm.rrrr hh:mm' : 'dd.mm.rrrr – dd.mm.rrrr'));\n\n // ── Open / close with animation ───────────────────────────────────────\n\n const doOpen = useCallback(() => {\n // Nastavit view na aktuální vybraný měsíc\n const refDate = mode === 'single' ? singleValue : rangeValue[0];\n if (refDate) {\n setViewYear(refDate.getFullYear());\n setViewMonth(refDate.getMonth());\n }\n setViewMode('days');\n setOpen(true);\n setVisible(true);\n setAnimState('opening');\n requestAnimationFrame(() => {\n requestAnimationFrame(() => setAnimState('open'));\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [mode, singleValue, rangeValue]);\n\n const doClose = useCallback(() => {\n setOpen(false);\n setAnimState('closing');\n const timer = setTimeout(() => {\n setVisible(false);\n setAnimState('idle');\n }, ANIM_DURATION);\n return () => clearTimeout(timer);\n }, []);\n\n // ── Position the portal dropdown ──────────────────────────────────────\n\n const updatePosition = useCallback(() => {\n if (!triggerRef.current) return;\n const rect = triggerRef.current.getBoundingClientRect();\n const dropdownHeight = dropdownRef.current?.offsetHeight ?? 380;\n const spaceBelow = window.innerHeight - rect.bottom - 6;\n const spaceAbove = rect.top - 6;\n const openAbove = spaceBelow < dropdownHeight && spaceAbove > spaceBelow;\n setDropdownPos({\n top: openAbove ? rect.top - 6 : rect.bottom + 6,\n left: rect.left,\n width: Math.max(rect.width, 300),\n openAbove,\n });\n }, []);\n\n useEffect(() => {\n if (!visible) return;\n updatePosition();\n window.addEventListener('scroll', updatePosition, true);\n window.addEventListener('resize', updatePosition);\n return () => {\n window.removeEventListener('scroll', updatePosition, true);\n window.removeEventListener('resize', updatePosition);\n };\n }, [visible, updatePosition]);\n\n // ── Close on outside click ────────────────────────────────────────────\n\n useEffect(() => {\n if (!open) return;\n const handler = (e: MouseEvent) => {\n const target = e.target as Node;\n const inTrigger = triggerRef.current?.contains(target);\n const inDropdown = dropdownRef.current?.contains(target);\n if (!inTrigger && !inDropdown) {\n doClose();\n }\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [open, doClose]);\n\n // ── Keyboard ──────────────────────────────────────────────────────────\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (isDisabled) return;\n if (e.key === 'Escape' && open) {\n e.preventDefault();\n doClose();\n }\n if ((e.key === 'Enter' || e.key === ' ') && !open) {\n e.preventDefault();\n doOpen();\n }\n };\n\n // ── Day click handler ─────────────────────────────────────────────────\n\n const isDayDisabled = useCallback((d: Date): boolean => {\n if (minDate) {\n const min = new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate());\n if (d < min) return true;\n }\n if (maxDate) {\n const max = new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate());\n if (d > max) return true;\n }\n return false;\n }, [minDate, maxDate]);\n\n const handleDayClick = useCallback((d: Date) => {\n if (isDayDisabled(d)) return;\n if (!onChange) return;\n\n if (mode === 'single') {\n // Přenést čas z předchozí hodnoty, pokud showTime\n if (showTime && singleValue) {\n d.setHours(singleValue.getHours(), singleValue.getMinutes());\n }\n onChange(new Date(d));\n if (!showTime) doClose();\n } else {\n // Range mode\n if (rangePhase === 0) {\n // Přenést čas\n if (showTime && rangeValue[0]) {\n d.setHours(rangeValue[0].getHours(), rangeValue[0].getMinutes());\n }\n onChange([new Date(d), null]);\n setRangePhase(1);\n } else {\n const start = rangeValue[0]!;\n if (showTime && rangeValue[1]) {\n d.setHours(rangeValue[1].getHours(), rangeValue[1].getMinutes());\n }\n const [s, e] = d >= start ? [start, new Date(d)] : [new Date(d), start];\n onChange([s, e]);\n setRangePhase(0);\n if (!showTime) doClose();\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [mode, showTime, singleValue, rangeValue, rangePhase, onChange, doClose, isDayDisabled]);\n\n // ── Time change handlers ──────────────────────────────────────────────\n\n const handleTimeChange = useCallback((which: 'hour' | 'minute', val: string, index?: number) => {\n if (!onChange) return;\n let num = parseInt(val, 10);\n if (isNaN(num)) num = 0;\n if (which === 'hour') num = Math.max(0, Math.min(23, num));\n if (which === 'minute') num = Math.max(0, Math.min(59, num));\n\n if (mode === 'single') {\n const d = singleValue ? new Date(singleValue) : new Date();\n if (which === 'hour') d.setHours(num);\n else d.setMinutes(num);\n onChange(d);\n } else {\n const idx = index ?? 0;\n const arr: [Date | null, Date | null] = [\n rangeValue[0] ? new Date(rangeValue[0]) : null,\n rangeValue[1] ? new Date(rangeValue[1]) : null,\n ];\n const d = arr[idx] ?? new Date();\n if (which === 'hour') d.setHours(num);\n else d.setMinutes(num);\n arr[idx] = d;\n onChange(arr);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [mode, singleValue, rangeValue, onChange]);\n\n // ── Navigation ────────────────────────────────────────────────────────\n\n const prevMonth = () => {\n if (viewMonth === 0) { setViewMonth(11); setViewYear((y) => y - 1); }\n else setViewMonth((m) => m - 1);\n };\n\n const nextMonth = () => {\n if (viewMonth === 11) { setViewMonth(0); setViewYear((y) => y + 1); }\n else setViewMonth((m) => m + 1);\n };\n\n // ── Clear handler ─────────────────────────────────────────────────────\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n if (!onChange) return;\n if (mode === 'single') onChange(null);\n else onChange([null, null]);\n setRangePhase(0);\n };\n\n // ── Animation styles ──────────────────────────────────────────────────\n\n const getDropdownAnimStyle = (): React.CSSProperties => {\n const above = dropdownPos.openAbove;\n const slideIn = above ? 'translateY(8px)' : 'translateY(-8px)';\n const slideOut = above ? 'translateY(6px)' : 'translateY(-6px)';\n const base: React.CSSProperties = {\n transition: `opacity ${ANIM_DURATION}ms cubic-bezier(0.16, 1, 0.3, 1), transform ${ANIM_DURATION}ms cubic-bezier(0.16, 1, 0.3, 1)`,\n };\n if (animState === 'opening' || animState === 'idle') {\n return { ...base, opacity: 0, transform: `${slideIn} scale(0.97)` };\n }\n if (animState === 'open') {\n return { ...base, opacity: 1, transform: 'translateY(0) scale(1)' };\n }\n return { ...base, opacity: 0, transform: `${slideOut} scale(0.98)`, pointerEvents: 'none' };\n };\n\n // ── Calendar days ─────────────────────────────────────────────────────\n\n const calendarDays = getCalendarDays(viewYear, viewMonth, firstDayOfWeek);\n\n // ── Render time inputs ────────────────────────────────────────────────\n\n const renderTimeInputs = (dateVal: Date | null, rangeIdx?: number) => {\n const h = dateVal ? dateVal.getHours() : 0;\n const m = dateVal ? dateVal.getMinutes() : 0;\n\n const inputStyle: React.CSSProperties = {\n width: '42px',\n background: 'transparent',\n border: `1px solid ${t.border}`,\n borderRadius: '4px',\n padding: '4px 6px',\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '13px',\n color: t.text,\n textAlign: 'center',\n outline: 'none',\n boxSizing: 'border-box',\n };\n\n return (\n <div style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <input\n type=\"text\"\n value={String(h).padStart(2, '0')}\n onChange={(e) => handleTimeChange('hour', e.target.value, rangeIdx)}\n style={inputStyle}\n maxLength={2}\n aria-label=\"Hodiny\"\n />\n <span style={{ color: t.text, fontFamily: \"'Zalando Sans', sans-serif\", fontSize: '13px' }}>:</span>\n <input\n type=\"text\"\n value={String(m).padStart(2, '0')}\n onChange={(e) => handleTimeChange('minute', e.target.value, rangeIdx)}\n style={inputStyle}\n maxLength={2}\n aria-label=\"Minuty\"\n />\n </div>\n );\n };\n\n // ── Render month selection ────────────────────────────────────────────\n\n const renderMonthView = () => (\n <div style={{ display: 'grid', gridTemplateColumns: 'repeat(3, 1fr)', gap: '6px', padding: '8px 12px' }}>\n {MONTH_NAMES.map((name, idx) => {\n const isCurrentMonth = idx === viewMonth;\n return (\n <button\n key={idx}\n type=\"button\"\n onClick={() => { setViewMonth(idx); setViewMode('days'); }}\n style={{\n background: isCurrentMonth ? t.daySelected : 'transparent',\n color: isCurrentMonth ? t.daySelectedText : t.text,\n border: 'none',\n borderRadius: '6px',\n padding: '8px 4px',\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '13px',\n cursor: 'pointer',\n transition: 'background-color 0.12s ease',\n }}\n onMouseEnter={(e) => {\n if (!isCurrentMonth) (e.target as HTMLElement).style.backgroundColor = t.dayHover;\n }}\n onMouseLeave={(e) => {\n if (!isCurrentMonth) (e.target as HTMLElement).style.backgroundColor = 'transparent';\n }}\n >\n {name}\n </button>\n );\n })}\n </div>\n );\n\n // ── Render year selection ─────────────────────────────────────────────\n\n const renderYearView = () => {\n const startYear = Math.floor(viewYear / 12) * 12;\n const years = Array.from({ length: 12 }, (_, i) => startYear + i);\n\n return (\n <>\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', padding: '8px 12px' }}>\n <button\n type=\"button\"\n onClick={() => setViewYear((y) => y - 12)}\n style={{\n background: 'none', border: 'none', cursor: 'pointer', padding: '4px',\n borderRadius: '4px', display: 'flex', alignItems: 'center',\n }}\n >\n <CaretLeftIcon size={16} color={t.text} />\n </button>\n <span style={{ fontFamily: \"'Zalando Sans', sans-serif\", fontSize: '13px', color: t.text }}>\n {startYear} – {startYear + 11}\n </span>\n <button\n type=\"button\"\n onClick={() => setViewYear((y) => y + 12)}\n style={{\n background: 'none', border: 'none', cursor: 'pointer', padding: '4px',\n borderRadius: '4px', display: 'flex', alignItems: 'center',\n }}\n >\n <CaretRightIcon size={16} color={t.text} />\n </button>\n </div>\n <div style={{ display: 'grid', gridTemplateColumns: 'repeat(3, 1fr)', gap: '6px', padding: '8px 12px' }}>\n {years.map((y) => {\n const isCurrent = y === viewYear;\n return (\n <button\n key={y}\n type=\"button\"\n onClick={() => { setViewYear(y); setViewMode('months'); }}\n style={{\n background: isCurrent ? t.daySelected : 'transparent',\n color: isCurrent ? t.daySelectedText : t.text,\n border: 'none',\n borderRadius: '6px',\n padding: '8px 4px',\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '13px',\n cursor: 'pointer',\n transition: 'background-color 0.12s ease',\n }}\n onMouseEnter={(e) => {\n if (!isCurrent) (e.target as HTMLElement).style.backgroundColor = t.dayHover;\n }}\n onMouseLeave={(e) => {\n if (!isCurrent) (e.target as HTMLElement).style.backgroundColor = 'transparent';\n }}\n >\n {y}\n </button>\n );\n })}\n </div>\n </>\n );\n };\n\n // ── Dropdown ──────────────────────────────────────────────────────────\n\n const dropdown = visible\n ? createPortal(\n <div\n ref={dropdownRef}\n style={{\n position: 'fixed',\n ...(dropdownPos.openAbove\n ? { bottom: window.innerHeight - dropdownPos.top, left: dropdownPos.left }\n : { top: dropdownPos.top, left: dropdownPos.left }),\n width: dropdownPos.width,\n backgroundColor: t.dropdownBg,\n border: `1px solid ${t.dropdownBorder}`,\n borderRadius: '12px',\n boxShadow: theme === 'dark'\n ? '0 12px 40px rgba(0,0,0,0.5), 0 0 0 1px rgba(255,255,255,0.04) inset'\n : '0 12px 40px rgba(0,0,0,0.12), 0 0 0 1px rgba(0,0,0,0.03) inset',\n backdropFilter: 'blur(20px)',\n WebkitBackdropFilter: 'blur(20px)',\n zIndex: 99999,\n overflow: 'hidden',\n boxSizing: 'border-box',\n transformOrigin: dropdownPos.openAbove ? 'bottom center' : 'top center',\n ...getDropdownAnimStyle(),\n }}\n >\n {viewMode === 'years' ? renderYearView() : viewMode === 'months' ? (\n <>\n {/* Hlavička — zpět na rok */}\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', padding: '10px 12px' }}>\n <button\n type=\"button\"\n onClick={() => setViewMode('years')}\n style={{\n background: 'none', border: 'none', cursor: 'pointer',\n fontFamily: \"'Zalando Sans Expanded', sans-serif\", fontSize: '14px',\n fontWeight: 500, color: t.text, padding: '4px 8px', borderRadius: '4px',\n }}\n >\n {viewYear}\n </button>\n </div>\n {renderMonthView()}\n </>\n ) : (\n <>\n {/* Hlavička měsíce */}\n <div style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '10px 12px',\n }}>\n <button\n type=\"button\"\n onClick={prevMonth}\n style={{\n background: 'none', border: 'none', cursor: 'pointer', padding: '4px',\n borderRadius: '4px', display: 'flex', alignItems: 'center',\n }}\n >\n <CaretLeftIcon size={16} color={t.text} />\n </button>\n\n <div style={{ display: 'flex', alignItems: 'center', gap: '6px' }}>\n <button\n type=\"button\"\n onClick={() => setViewMode('months')}\n style={{\n background: 'none', border: 'none', cursor: 'pointer',\n fontFamily: \"'Zalando Sans Expanded', sans-serif\", fontSize: '14px',\n fontWeight: 500, color: t.text, padding: '4px 8px', borderRadius: '4px',\n }}\n >\n {MONTH_NAMES[viewMonth]}\n </button>\n <button\n type=\"button\"\n onClick={() => setViewMode('years')}\n style={{\n background: 'none', border: 'none', cursor: 'pointer',\n fontFamily: \"'Zalando Sans Expanded', sans-serif\", fontSize: '14px',\n fontWeight: 500, color: t.text, padding: '4px 8px', borderRadius: '4px',\n }}\n >\n {viewYear}\n </button>\n </div>\n\n <button\n type=\"button\"\n onClick={nextMonth}\n style={{\n background: 'none', border: 'none', cursor: 'pointer', padding: '4px',\n borderRadius: '4px', display: 'flex', alignItems: 'center',\n }}\n >\n <CaretRightIcon size={16} color={t.text} />\n </button>\n </div>\n\n {/* Dny v týdnu */}\n <div style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(7, 1fr)',\n padding: '0 12px 4px',\n gap: '0',\n }}>\n {DAY_NAMES.map((name) => (\n <div\n key={name}\n style={{\n textAlign: 'center',\n fontFamily: \"'Zalando Sans Expanded', sans-serif\",\n fontSize: '11px',\n fontWeight: 400,\n color: t.placeholder,\n padding: '4px 0',\n userSelect: 'none',\n }}\n >\n {name}\n </div>\n ))}\n </div>\n\n {/* Kalendářní mřížka */}\n <div style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(7, 1fr)',\n padding: '0 12px 8px',\n gap: '2px',\n }}>\n {calendarDays.map((day, idx) => {\n const isOutside = day.getMonth() !== viewMonth;\n const isDis = isDayDisabled(day);\n const isTod = isToday(day);\n\n // Výběr logika\n let isSelected = false;\n let isRangeStart = false;\n let isRangeEnd = false;\n let isRangeMiddle = false;\n\n if (mode === 'single' && singleValue) {\n isSelected = isSameDay(day, singleValue);\n } else if (mode === 'range') {\n const [s, e] = rangeValue;\n if (s && isSameDay(day, s)) { isRangeStart = true; isSelected = true; }\n if (e && isSameDay(day, e)) { isRangeEnd = true; isSelected = true; }\n if (s && e && isInRange(day, s, e) && !isRangeStart && !isRangeEnd) {\n isRangeMiddle = true;\n }\n // Hover preview pro range\n if (rangePhase === 1 && s && hoveredDay && !isDis) {\n if (isSameDay(day, hoveredDay) && !isSameDay(day, s)) {\n isSelected = true;\n }\n if (isInRange(day, s, hoveredDay) && !isSameDay(day, s) && !isSameDay(day, hoveredDay)) {\n isRangeMiddle = true;\n }\n }\n }\n\n let bg: string = 'transparent';\n let color: string = t.text;\n\n if (isSelected) {\n bg = t.daySelected;\n color = t.daySelectedText;\n } else if (isRangeMiddle) {\n bg = t.dayRangeMiddle;\n }\n\n if (isOutside) {\n color = isSelected ? t.daySelectedText : t.dayOutside;\n }\n if (isDis) {\n color = t.dayDisabled;\n }\n\n return (\n <button\n key={idx}\n type=\"button\"\n disabled={isDis}\n onClick={() => handleDayClick(day)}\n onMouseEnter={() => { if (!isDis) setHoveredDay(day); }}\n onMouseLeave={() => setHoveredDay(null)}\n style={{\n position: 'relative',\n width: '100%',\n aspectRatio: '1',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: bg,\n color,\n border: 'none',\n borderRadius: isRangeStart ? '6px 0 0 6px'\n : isRangeEnd ? '0 6px 6px 0'\n : isRangeMiddle ? '0'\n : '6px',\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '13px',\n fontWeight: isSelected ? 600 : 400,\n cursor: isDis ? 'not-allowed' : 'pointer',\n opacity: isDis ? 0.4 : 1,\n transition: 'background-color 0.1s ease',\n outline: isTod && !isSelected ? `1.5px solid ${t.dayToday}` : 'none',\n outlineOffset: '-1.5px',\n padding: 0,\n boxSizing: 'border-box',\n }}\n >\n {day.getDate()}\n </button>\n );\n })}\n </div>\n\n {/* Výběr času */}\n {showTime && (\n <div style={{\n borderTop: `1px solid ${t.divider}`,\n padding: '10px 12px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: mode === 'range' ? 'space-between' : 'center',\n gap: '8px',\n }}>\n {mode === 'single' ? (\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <span style={{ fontFamily: \"'Zalando Sans', sans-serif\", fontSize: '12px', color: t.placeholder }}>Čas:</span>\n {renderTimeInputs(singleValue)}\n </div>\n ) : (\n <>\n <div style={{ display: 'flex', alignItems: 'center', gap: '6px' }}>\n <span style={{ fontFamily: \"'Zalando Sans', sans-serif\", fontSize: '12px', color: t.placeholder }}>Od:</span>\n {renderTimeInputs(rangeValue[0], 0)}\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '6px' }}>\n <span style={{ fontFamily: \"'Zalando Sans', sans-serif\", fontSize: '12px', color: t.placeholder }}>Do:</span>\n {renderTimeInputs(rangeValue[1], 1)}\n </div>\n </>\n )}\n </div>\n )}\n </>\n )}\n </div>,\n document.body\n )\n : null;\n\n // ── Trigger styles ────────────────────────────────────────────────────\n\n const triggerStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: sc.gap,\n backgroundColor: isDisabled ? t.backgroundDisabled : t.background,\n border: `1px solid ${hasError ? t.borderError : open ? t.borderFocus : t.border}`,\n borderRadius: '8px',\n padding: sc.padding,\n boxSizing: 'border-box',\n transition: 'border-color 0.15s ease',\n opacity: isDisabled ? 0.6 : 1,\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n userSelect: 'none',\n outline: 'none',\n };\n\n const labelStyle: React.CSSProperties = {\n fontFamily: \"'Zalando Sans Expanded', sans-serif\",\n fontStyle: 'normal',\n fontWeight: 400,\n fontSize: '10px',\n lineHeight: 'normal',\n textTransform: 'uppercase',\n color: t.label,\n userSelect: 'none',\n };\n\n const bottomTextStyle: React.CSSProperties = {\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '12px',\n lineHeight: 'normal',\n };\n\n return (\n <div\n style={{\n display: fullWidth ? 'flex' : 'inline-flex',\n flexDirection: 'column',\n gap: '6px',\n width: fullWidth ? '100%' : undefined,\n ...style,\n }}\n className={className}\n >\n {label && (\n <label htmlFor={autoId} style={labelStyle}>\n {label}\n {required && <span style={{ color: t.borderError, marginLeft: '3px' }}>*</span>}\n </label>\n )}\n\n <div\n ref={triggerRef}\n role=\"button\"\n tabIndex={isDisabled ? -1 : 0}\n style={triggerStyle}\n onClick={() => { if (!isDisabled) { open ? doClose() : doOpen(); } }}\n onKeyDown={handleKeyDown}\n >\n {/* Hodnota */}\n <div style={{ flex: 1, minWidth: 0, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {displayValue ? (\n <span style={{\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: sc.fontSize,\n color: t.text,\n lineHeight: 'normal',\n }}>\n {displayValue}\n </span>\n ) : (\n <span style={{\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: sc.fontSize,\n color: t.placeholder,\n lineHeight: 'normal',\n }}>\n {placeholderText}\n </span>\n )}\n </div>\n\n {/* Akce */}\n <div style={{ display: 'flex', alignItems: 'center', gap: '4px', flexShrink: 0 }}>\n {showClear && (\n <span\n role=\"button\"\n tabIndex={-1}\n aria-label=\"Vymazat výběr\"\n style={{ cursor: 'pointer', display: 'flex', padding: '2px' }}\n onClick={handleClear}\n >\n <XIcon size={sc.iconSize - 2} color={t.placeholder} />\n </span>\n )}\n {loading\n ? <Spinner size={sc.iconSize} color={t.placeholder} />\n : <CalendarBlankIcon size={sc.iconSize} color={t.placeholder} />\n }\n </div>\n </div>\n\n {errorMessage && (\n <span style={{ ...bottomTextStyle, color: t.borderError }}>\n {errorMessage}\n </span>\n )}\n {!errorMessage && helperText && (\n <span style={{ ...bottomTextStyle, color: t.helperText }}>\n {helperText}\n </span>\n )}\n\n {dropdown}\n </div>\n );\n};\n\nDatePicker.displayName = 'DatePicker';\n\n// ─── DatePickerGroup ────────────────────────────────────────────────────────\n\n/**\n * Obalí `<DatePicker>` skupinou s popiskem, vizuálně odpovídá `InputGroup`.\n *\n * @example\n * ```tsx\n * <DatePickerGroup label=\"Datum akce\">\n * <DatePicker value={datum} onChange={setDatum} />\n * </DatePickerGroup>\n * ```\n */\nexport const DatePickerGroup: React.FC<DatePickerGroupProps> = ({\n label,\n htmlFor,\n children,\n style,\n className,\n}) => {\n const theme = useTheme();\n const autoId = useId();\n const labelFor = htmlFor ?? autoId;\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '8px', ...style }} className={className}>\n <label\n htmlFor={labelFor}\n style={{\n fontFamily: \"'Zalando Sans Expanded', sans-serif\",\n fontStyle: 'normal',\n fontWeight: 400,\n fontSize: '10px',\n lineHeight: 'normal',\n textTransform: 'uppercase',\n color: tokens[theme].label,\n userSelect: 'none',\n }}\n >\n {label}\n </label>\n {children ?? <DatePicker />}\n </div>\n );\n};\n\nDatePickerGroup.displayName = 'DatePickerGroup';\n","import React, { useEffect, useId, useRef } from 'react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ───────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n border: 'rgba(255,255,255,0.3)',\n borderHover: 'rgba(255,255,255,0.5)',\n borderError: '#EF3838',\n background: 'rgba(3,3,3,0.75)',\n backgroundDisabled: 'rgba(3,3,3,0.4)',\n text: '#ffffff',\n label: '#ffffff',\n helperText: '#ACACAC',\n checkBg: '#FC4F00',\n checkMark: '#ffffff',\n },\n light: {\n border: 'rgba(0,0,0,0.2)',\n borderHover: 'rgba(0,0,0,0.5)',\n borderError: '#EF3838',\n background: 'rgba(255,255,255,0.85)',\n backgroundDisabled: 'rgba(240,240,240,0.6)',\n text: '#1a1a1a',\n label: '#1a1a1a',\n helperText: '#888888',\n checkBg: '#FC4F00',\n checkMark: '#ffffff',\n },\n} as const;\n\n// ─── Size config ─────────────────────────────────────────────────────────────\n\nconst sizeConfig = {\n sm: { box: 16, fontSize: '14px', gap: '6px', radius: 3, strokeWidth: 2 },\n md: { box: 20, fontSize: '16px', gap: '8px', radius: 4, strokeWidth: 2 },\n lg: { box: 24, fontSize: '18px', gap: '10px', radius: 5, strokeWidth: 2.5 },\n} as const;\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport type CheckboxSize = 'sm' | 'md' | 'lg';\n\nexport interface CheckboxProps {\n /** Stav zaškrtnutí. */\n checked?: boolean;\n /** Callback volaný při změně stavu. */\n onChange?: (checked: boolean) => void;\n /** Textový popisek zobrazený vedle zaškrtávacího pole. */\n label?: string;\n /** Deaktivuje zaškrtávací pole. */\n disabled?: boolean;\n /**\n * Chybový stav. Při `true` se zobrazí červený okraj.\n * Při zadání řetězce se pod polem zobrazí chybová zpráva.\n */\n error?: boolean | string;\n /**\n * Velikostní preset.\n * @default 'md'\n */\n size?: CheckboxSize;\n /** Neurčitý stav — zobrazí pomlčku místo zaškrtnutí. */\n indeterminate?: boolean;\n /** Dodatečná CSS třída pro obalový element. */\n className?: string;\n /** Další inline styly pro obalový element. */\n style?: React.CSSProperties;\n}\n\nexport interface CheckboxGroupProps {\n /** Popisek skupiny. */\n label?: string;\n /** Potomci — typicky komponenty `<Checkbox>`. */\n children: React.ReactNode;\n /** Chybový stav skupiny. Při řetězci se zobrazí chybová zpráva. */\n error?: boolean | string;\n /** Dodatečná CSS třída. */\n className?: string;\n /** Další inline styly. */\n style?: React.CSSProperties;\n}\n\n// ─── Checkbox ────────────────────────────────────────────────────────────────\n\n/**\n * Zaškrtávací pole dle SM-UI design systému.\n *\n * Podporuje vlastní SVG zaškrtnutí, neurčitý stav,\n * chybový stav, velikostní presety a tmavý / světlý režim.\n *\n * @example\n * ```tsx\n * <Checkbox label=\"Souhlasím s podmínkami\" checked={agreed} onChange={setAgreed} />\n * <Checkbox indeterminate label=\"Vybrat vše\" />\n * ```\n */\nexport const Checkbox: React.FC<CheckboxProps> = ({\n checked = false,\n onChange,\n label,\n disabled = false,\n error,\n size = 'md',\n indeterminate = false,\n className,\n style,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n const sc = sizeConfig[size];\n const id = useId();\n const inputRef = useRef<HTMLInputElement>(null);\n\n const hasError = Boolean(error);\n const errorMessage = typeof error === 'string' ? error : undefined;\n\n useEffect(() => {\n if (inputRef.current) {\n inputRef.current.indeterminate = indeterminate;\n }\n }, [indeterminate]);\n\n const handleClick = () => {\n if (disabled) return;\n onChange?.(!checked);\n };\n\n const borderColor = hasError ? t.borderError : checked || indeterminate ? t.checkBg : t.border;\n const bg = checked || indeterminate ? t.checkBg : disabled ? t.backgroundDisabled : t.background;\n\n const boxStyle: React.CSSProperties = {\n width: sc.box,\n height: sc.box,\n borderRadius: sc.radius,\n border: `1.5px solid ${borderColor}`,\n backgroundColor: bg,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n cursor: disabled ? 'not-allowed' : 'pointer',\n transition: 'background-color 0.15s ease, border-color 0.15s ease',\n opacity: disabled ? 0.5 : 1,\n };\n\n const labelStyle: React.CSSProperties = {\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: sc.fontSize,\n color: t.text,\n cursor: disabled ? 'not-allowed' : 'pointer',\n userSelect: 'none',\n lineHeight: 'normal',\n };\n\n const bottomTextStyle: React.CSSProperties = {\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '12px',\n lineHeight: 'normal',\n };\n\n return (\n <div\n style={{\n display: 'inline-flex',\n flexDirection: 'column',\n gap: '4px',\n ...style,\n }}\n className={className}\n >\n <label\n htmlFor={id}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: sc.gap,\n cursor: disabled ? 'not-allowed' : 'pointer',\n }}\n onClick={(e) => {\n e.preventDefault();\n handleClick();\n }}\n >\n <input\n ref={inputRef}\n id={id}\n type=\"checkbox\"\n checked={checked}\n disabled={disabled}\n onChange={() => onChange?.(!checked)}\n style={{ position: 'absolute', opacity: 0, width: 0, height: 0, pointerEvents: 'none' }}\n aria-invalid={hasError || undefined}\n />\n <span style={boxStyle}>\n {checked && !indeterminate && (\n <svg width={sc.box - 6} height={sc.box - 6} viewBox=\"0 0 12 12\" fill=\"none\">\n <path\n d=\"M2 6l3 3 5-5\"\n stroke={t.checkMark}\n strokeWidth={sc.strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n {indeterminate && (\n <svg width={sc.box - 6} height={sc.box - 6} viewBox=\"0 0 12 12\" fill=\"none\">\n <path\n d=\"M2.5 6h7\"\n stroke={t.checkMark}\n strokeWidth={sc.strokeWidth}\n strokeLinecap=\"round\"\n />\n </svg>\n )}\n </span>\n {label && <span style={labelStyle}>{label}</span>}\n </label>\n\n {errorMessage && (\n <span style={{ ...bottomTextStyle, color: t.borderError, marginLeft: `${sc.box + parseInt(sc.gap)}px` }}>\n {errorMessage}\n </span>\n )}\n </div>\n );\n};\n\nCheckbox.displayName = 'Checkbox';\n\n// ─── CheckboxGroup ───────────────────────────────────────────────────────────\n\n/**\n * Skupina zaškrtávacích polí s volitelným popiskem.\n *\n * @example\n * ```tsx\n * <CheckboxGroup label=\"Zájmy\">\n * <Checkbox label=\"Sport\" checked={...} onChange={...} />\n * <Checkbox label=\"Hudba\" checked={...} onChange={...} />\n * </CheckboxGroup>\n * ```\n */\nexport const CheckboxGroup: React.FC<CheckboxGroupProps> = ({\n label,\n children,\n error,\n className,\n style,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n const errorMessage = typeof error === 'string' ? error : undefined;\n\n const groupLabelStyle: React.CSSProperties = {\n fontFamily: \"'Zalando Sans Expanded', sans-serif\",\n fontStyle: 'normal',\n fontWeight: 400,\n fontSize: '10px',\n lineHeight: 'normal',\n textTransform: 'uppercase',\n color: t.label,\n userSelect: 'none',\n };\n\n const bottomTextStyle: React.CSSProperties = {\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '12px',\n lineHeight: 'normal',\n };\n\n return (\n <div\n role=\"group\"\n aria-label={label}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n ...style,\n }}\n className={className}\n >\n {label && <span style={groupLabelStyle}>{label}</span>}\n <div style={{ display: 'flex', flexDirection: 'column', gap: '6px' }}>\n {children}\n </div>\n {errorMessage && (\n <span style={{ ...bottomTextStyle, color: t.borderError }}>\n {errorMessage}\n </span>\n )}\n </div>\n );\n};\n\nCheckboxGroup.displayName = 'CheckboxGroup';\n","import React, { useId } from 'react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ───────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n border: 'rgba(255,255,255,0.3)',\n borderError: '#EF3838',\n background: 'rgba(3,3,3,0.75)',\n backgroundDisabled: 'rgba(3,3,3,0.4)',\n text: '#ffffff',\n label: '#ffffff',\n helperText: '#ACACAC',\n dot: '#FC4F00',\n dotRing: '#FC4F00',\n },\n light: {\n border: 'rgba(0,0,0,0.2)',\n borderError: '#EF3838',\n background: 'rgba(255,255,255,0.85)',\n backgroundDisabled: 'rgba(240,240,240,0.6)',\n text: '#1a1a1a',\n label: '#1a1a1a',\n helperText: '#888888',\n dot: '#FC4F00',\n dotRing: '#FC4F00',\n },\n} as const;\n\n// ─── Size config ─────────────────────────────────────────────────────────────\n\nconst sizeConfig = {\n sm: { box: 16, dot: 6, fontSize: '14px', gap: '6px' },\n md: { box: 20, dot: 8, fontSize: '16px', gap: '8px' },\n lg: { box: 24, dot: 10, fontSize: '18px', gap: '10px' },\n} as const;\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport type RadioSize = 'sm' | 'md' | 'lg';\n\nexport interface RadioProps {\n /** Hodnota tohoto přepínače. */\n value: string;\n /** Zda je tento přepínač vybrán. */\n checked?: boolean;\n /** Callback volaný při výběru. */\n onChange?: (value: string) => void;\n /** Textový popisek. */\n label?: string;\n /** Deaktivuje přepínač. */\n disabled?: boolean;\n /**\n * Velikostní preset.\n * @default 'md'\n */\n size?: RadioSize;\n /** Dodatečná CSS třída. */\n className?: string;\n /** Další inline styly. */\n style?: React.CSSProperties;\n}\n\nexport interface RadioGroupOption {\n /** Hodnota volby. */\n value: string;\n /** Zobrazený popisek. */\n label: string;\n /** Deaktivuje tuto volbu. */\n disabled?: boolean;\n}\n\nexport interface RadioGroupProps {\n /** Aktuálně vybraná hodnota. */\n value?: string;\n /** Callback volaný při změně výběru. */\n onChange?: (value: string) => void;\n /** Popisek skupiny. */\n label?: string;\n /** Seznam voleb. */\n options: RadioGroupOption[];\n /**\n * Směr rozložení voleb.\n * @default 'vertical'\n */\n direction?: 'vertical' | 'horizontal';\n /**\n * Chybový stav. Při řetězci se zobrazí chybová zpráva.\n */\n error?: boolean | string;\n /** Nápovědný text pod skupinou. */\n helperText?: string;\n /**\n * Velikostní preset pro všechny přepínače ve skupině.\n * @default 'md'\n */\n size?: RadioSize;\n /** Dodatečná CSS třída. */\n className?: string;\n /** Další inline styly. */\n style?: React.CSSProperties;\n}\n\n// ─── Radio ───────────────────────────────────────────────────────────────────\n\n/**\n * Přepínací tlačítko (radio) dle SM-UI design systému.\n *\n * Používá vlastní SVG kruh s oranžovou tečkou při výběru.\n * Podporuje velikostní presety a tmavý / světlý režim.\n *\n * @example\n * ```tsx\n * <Radio value=\"a\" label=\"Volba A\" checked={selected === 'a'} onChange={setSelected} />\n * ```\n */\nexport const Radio: React.FC<RadioProps> = ({\n value,\n checked = false,\n onChange,\n label,\n disabled = false,\n size = 'md',\n className,\n style,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n const sc = sizeConfig[size];\n const id = useId();\n\n const handleClick = () => {\n if (disabled) return;\n onChange?.(value);\n };\n\n const borderColor = checked ? t.dotRing : t.border;\n const bg = disabled ? t.backgroundDisabled : t.background;\n\n const circleStyle: React.CSSProperties = {\n width: sc.box,\n height: sc.box,\n borderRadius: '50%',\n border: `1.5px solid ${borderColor}`,\n backgroundColor: bg,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n cursor: disabled ? 'not-allowed' : 'pointer',\n transition: 'border-color 0.15s ease',\n opacity: disabled ? 0.5 : 1,\n };\n\n const labelStyle: React.CSSProperties = {\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: sc.fontSize,\n color: t.text,\n cursor: disabled ? 'not-allowed' : 'pointer',\n userSelect: 'none',\n lineHeight: 'normal',\n };\n\n return (\n <div style={{ display: 'inline-flex', ...style }} className={className}>\n <label\n htmlFor={id}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: sc.gap,\n cursor: disabled ? 'not-allowed' : 'pointer',\n }}\n onClick={(e) => {\n e.preventDefault();\n handleClick();\n }}\n >\n <input\n id={id}\n type=\"radio\"\n value={value}\n checked={checked}\n disabled={disabled}\n onChange={() => onChange?.(value)}\n style={{ position: 'absolute', opacity: 0, width: 0, height: 0, pointerEvents: 'none' }}\n />\n <span style={circleStyle}>\n {checked && (\n <span\n style={{\n width: sc.dot,\n height: sc.dot,\n borderRadius: '50%',\n backgroundColor: t.dot,\n transition: 'transform 0.15s ease',\n }}\n />\n )}\n </span>\n {label && <span style={labelStyle}>{label}</span>}\n </label>\n </div>\n );\n};\n\nRadio.displayName = 'Radio';\n\n// ─── RadioGroup ──────────────────────────────────────────────────────────────\n\n/**\n * Skupina přepínačů s popiskem, chybovým stavem a nápovědným textem.\n *\n * @example\n * ```tsx\n * <RadioGroup\n * label=\"Pohlaví\"\n * value={gender}\n * onChange={setGender}\n * options={[\n * { value: 'male', label: 'Muž' },\n * { value: 'female', label: 'Žena' },\n * ]}\n * />\n * ```\n */\nexport const RadioGroup: React.FC<RadioGroupProps> = ({\n value,\n onChange,\n label,\n options,\n direction = 'vertical',\n error,\n helperText,\n size = 'md',\n className,\n style,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n\n const hasError = Boolean(error);\n const errorMessage = typeof error === 'string' ? error : undefined;\n\n const groupLabelStyle: React.CSSProperties = {\n fontFamily: \"'Zalando Sans Expanded', sans-serif\",\n fontStyle: 'normal',\n fontWeight: 400,\n fontSize: '10px',\n lineHeight: 'normal',\n textTransform: 'uppercase',\n color: t.label,\n userSelect: 'none',\n };\n\n const bottomTextStyle: React.CSSProperties = {\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '12px',\n lineHeight: 'normal',\n };\n\n return (\n <div\n role=\"radiogroup\"\n aria-label={label}\n aria-invalid={hasError || undefined}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n ...style,\n }}\n className={className}\n >\n {label && <span style={groupLabelStyle}>{label}</span>}\n <div\n style={{\n display: 'flex',\n flexDirection: direction === 'horizontal' ? 'row' : 'column',\n gap: direction === 'horizontal' ? '16px' : '6px',\n }}\n >\n {options.map((opt) => (\n <Radio\n key={opt.value}\n value={opt.value}\n label={opt.label}\n checked={value === opt.value}\n onChange={onChange}\n disabled={opt.disabled}\n size={size}\n />\n ))}\n </div>\n\n {errorMessage && (\n <span style={{ ...bottomTextStyle, color: t.borderError }}>\n {errorMessage}\n </span>\n )}\n {!errorMessage && helperText && (\n <span style={{ ...bottomTextStyle, color: t.helperText }}>\n {helperText}\n </span>\n )}\n </div>\n );\n};\n\nRadioGroup.displayName = 'RadioGroup';\n","import React, { useId } from 'react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ───────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n trackOff: 'rgba(255,255,255,0.2)',\n trackOffBorder: 'rgba(255,255,255,0.35)',\n trackOn: '#FC4F00',\n trackOnBorder: '#FC4F00',\n thumb: '#ffffff',\n text: '#ffffff',\n },\n light: {\n trackOff: 'rgba(0,0,0,0.12)',\n trackOffBorder: 'rgba(0,0,0,0.22)',\n trackOn: '#FC4F00',\n trackOnBorder: '#FC4F00',\n thumb: '#ffffff',\n text: '#1a1a1a',\n },\n} as const;\n\n// ─── Size config ─────────────────────────────────────────────────────────────\n\nconst sizeConfig = {\n sm: { trackW: 32, trackH: 20, thumb: 14, offset: 2, fontSize: '14px', gap: '8px' },\n md: { trackW: 40, trackH: 24, thumb: 18, offset: 2, fontSize: '16px', gap: '10px' },\n lg: { trackW: 48, trackH: 28, thumb: 22, offset: 2, fontSize: '18px', gap: '12px' },\n} as const;\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport type SwitchSize = 'sm' | 'md' | 'lg';\n\nexport interface SwitchProps {\n /** Stav přepínače. */\n checked?: boolean;\n /** Callback volaný při změně stavu. */\n onChange?: (checked: boolean) => void;\n /** Textový popisek zobrazený napravo od přepínače. */\n label?: string;\n /** Deaktivuje přepínač. */\n disabled?: boolean;\n /**\n * Velikostní preset.\n * @default 'md'\n */\n size?: SwitchSize;\n /** Dodatečná CSS třída. */\n className?: string;\n /** Další inline styly. */\n style?: React.CSSProperties;\n}\n\n// ─── Switch ──────────────────────────────────────────────────────────────────\n\n/**\n * Přepínač (switch/toggle) dle SM-UI design systému.\n *\n * Pilulkový tvar s plynulou animací posunu.\n * Oranžový ve stavu zapnuto, jemný okraj ve stavu vypnuto.\n *\n * @example\n * ```tsx\n * <Switch label=\"Noční režim\" checked={dark} onChange={setDark} />\n * ```\n */\nexport const Switch: React.FC<SwitchProps> = ({\n checked = false,\n onChange,\n label,\n disabled = false,\n size = 'md',\n className,\n style,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n const sc = sizeConfig[size];\n const id = useId();\n\n const handleClick = () => {\n if (disabled) return;\n onChange?.(!checked);\n };\n\n const borderW = 1.5;\n // Padding from inner edge of border to thumb\n const pad = 2;\n // Total travel distance for the thumb\n const innerW = sc.trackW - borderW * 2;\n const thumbTravel = innerW - sc.thumb - pad;\n const thumbTranslate = checked ? thumbTravel : 0;\n\n const trackStyle: React.CSSProperties = {\n width: sc.trackW,\n height: sc.trackH,\n borderRadius: sc.trackH / 2,\n backgroundColor: checked ? t.trackOn : t.trackOff,\n border: `${borderW}px solid ${checked ? t.trackOnBorder : t.trackOffBorder}`,\n position: 'relative',\n cursor: disabled ? 'not-allowed' : 'pointer',\n transition: 'background-color 0.2s ease, border-color 0.2s ease',\n flexShrink: 0,\n opacity: disabled ? 0.5 : 1,\n boxSizing: 'border-box',\n };\n\n const thumbStyle: React.CSSProperties = {\n width: sc.thumb,\n height: sc.thumb,\n borderRadius: '50%',\n backgroundColor: t.thumb,\n position: 'absolute',\n top: '50%',\n left: pad,\n transform: `translateY(-50%) translateX(${thumbTranslate}px)`,\n transition: 'transform 0.2s ease',\n boxShadow: '0 1px 3px rgba(0,0,0,0.2)',\n };\n\n const labelStyle: React.CSSProperties = {\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: sc.fontSize,\n color: t.text,\n cursor: disabled ? 'not-allowed' : 'pointer',\n userSelect: 'none',\n lineHeight: `${sc.trackH}px`,\n };\n\n return (\n <div style={{ display: 'inline-flex', alignItems: 'center', ...style }} className={className}>\n <label\n htmlFor={id}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: sc.gap,\n cursor: disabled ? 'not-allowed' : 'pointer',\n }}\n onClick={(e) => {\n e.preventDefault();\n handleClick();\n }}\n >\n <input\n id={id}\n type=\"checkbox\"\n role=\"switch\"\n checked={checked}\n disabled={disabled}\n onChange={() => onChange?.(!checked)}\n style={{ position: 'absolute', opacity: 0, width: 0, height: 0, pointerEvents: 'none' }}\n aria-checked={checked}\n />\n <span style={trackStyle}>\n <span style={thumbStyle} />\n </span>\n {label && <span style={labelStyle}>{label}</span>}\n </label>\n </div>\n );\n};\n\nSwitch.displayName = 'Switch';\n","import React, { useId, useState, useRef, useEffect, useCallback } from 'react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ───────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n background: 'rgba(3,3,3,0.75)',\n backgroundDisabled: 'rgba(3,3,3,0.4)',\n border: 'rgba(255,255,255,0.3)',\n borderFocus: 'rgba(255,255,255,0.7)',\n borderError: '#EF3838',\n text: '#ffffff',\n placeholder: '#ACACAC',\n label: '#ffffff',\n helperText: '#ACACAC',\n counter: '#ACACAC',\n },\n light: {\n background: 'rgba(255,255,255,0.85)',\n backgroundDisabled: 'rgba(240,240,240,0.6)',\n border: 'rgba(0,0,0,0.2)',\n borderFocus: 'rgba(0,0,0,0.6)',\n borderError: '#EF3838',\n text: '#1a1a1a',\n placeholder: '#888888',\n label: '#1a1a1a',\n helperText: '#888888',\n counter: '#888888',\n },\n} as const;\n\n// ─── Size config ─────────────────────────────────────────────────────────────\n\nconst sizeConfig = {\n sm: { padding: '6px 10px', fontSize: '14px' },\n md: { padding: '8px 12px', fontSize: '16px' },\n lg: { padding: '10px 14px', fontSize: '18px' },\n} as const;\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport type TextareaSize = 'sm' | 'md' | 'lg';\nexport type TextareaResize = 'none' | 'vertical' | 'both';\n\nexport interface TextareaProps\n extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'size'> {\n /**\n * Popisek zobrazený nad textovým polem.\n * Stylizován velkými písmeny dle SM-UI design systému.\n */\n label?: string;\n /**\n * Při `true` se pole zobrazí jako nevalidní (červený okraj).\n * Při zadání řetězce se pod polem zobrazí chybová zpráva.\n */\n error?: boolean | string;\n /** Nápovědný text zobrazený pod polem. */\n helperText?: string;\n /** Při `true` se pole zobrazí jako neaktivní. */\n disabled?: boolean;\n /**\n * Při `true` se pole zobrazí pouze pro čtení se sníženou opacitou.\n */\n loading?: boolean;\n /**\n * Velikostní preset.\n * @default 'md'\n */\n size?: TextareaSize;\n /**\n * Roztáhne pole na celou šířku kontejneru.\n * @default false\n */\n fullWidth?: boolean;\n /** Povinné pole — zobrazí hvězdičku u popisku. */\n required?: boolean;\n /**\n * Počet řádků.\n * @default 4\n */\n rows?: number;\n /**\n * Maximální počet znaků. Při zadání se zobrazí počítadlo.\n */\n maxLength?: number;\n /**\n * Režim změny velikosti textového pole.\n * Ignorováno, pokud je `autoHeight` zapnuto.\n * @default 'vertical'\n */\n resize?: TextareaResize;\n /**\n * Automatická výška — pole se přizpůsobí obsahu.\n * Při zapnutí je `resize` automaticky nastaven na `'none'`.\n * @default false\n */\n autoHeight?: boolean;\n /**\n * Minimální počet řádků (použito společně s `autoHeight`).\n * Pokud `autoHeight` není zapnuto, funguje jako `rows`.\n * @default 1\n */\n minRows?: number;\n /**\n * Maximální počet řádků (použito společně s `autoHeight`).\n * Po dosažení se zobrazí scrollbar.\n */\n maxRows?: number;\n /** Dodatečná CSS třída pro obalový element. */\n className?: string;\n /**\n * Další inline styly pro **obalový** element.\n */\n style?: React.CSSProperties;\n}\n\n// ─── Textarea ────────────────────────────────────────────────────────────────\n\n/**\n * Víceřádkové textové pole dle SM-UI design systému.\n *\n * Sdílí API s komponentou `Input` — podporuje popisek, chybový stav,\n * nápovědný text, počítadlo znaků a velikostní presety.\n *\n * @example\n * ```tsx\n * <Textarea label=\"Poznámka\" placeholder=\"Napište poznámku…\" rows={5} />\n * <Textarea label=\"Bio\" maxLength={200} helperText=\"Krátký popis\" />\n * ```\n */\nexport const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n (\n {\n label,\n error,\n helperText,\n disabled,\n loading = false,\n size = 'md',\n fullWidth = false,\n required,\n rows = 4,\n maxLength,\n resize = 'vertical',\n autoHeight = false,\n minRows,\n maxRows,\n className,\n style,\n value,\n onChange,\n onFocus,\n onBlur,\n ...rest\n },\n ref\n ) => {\n const theme = useTheme();\n const t = tokens[theme];\n const sc = sizeConfig[size];\n const autoId = useId();\n const textareaId = rest.id ?? autoId;\n const [focused, setFocused] = useState(false);\n const internalRef = useRef<HTMLTextAreaElement | null>(null);\n\n // ── Auto-height logic ───────────────────────────────────────────────\n\n const adjustHeight = useCallback(() => {\n const el = internalRef.current;\n if (!el || !autoHeight) return;\n\n // Reset height to measure scrollHeight correctly\n el.style.height = 'auto';\n\n // Calculate line height from computed styles\n const computed = getComputedStyle(el);\n const lineHeight = parseFloat(computed.lineHeight) || parseFloat(computed.fontSize) * 1.5;\n const paddingTop = parseFloat(computed.paddingTop) || 0;\n const paddingBottom = parseFloat(computed.paddingBottom) || 0;\n const padding = paddingTop + paddingBottom;\n\n // Calculate min/max heights based on rows\n const effectiveMinRows = minRows ?? 1;\n const minHeight = lineHeight * effectiveMinRows + padding;\n const maxHeight = maxRows ? lineHeight * maxRows + padding : Infinity;\n\n // Apply\n const newHeight = Math.min(Math.max(el.scrollHeight, minHeight), maxHeight);\n el.style.height = `${newHeight}px`;\n el.style.overflowY = el.scrollHeight > maxHeight ? 'auto' : 'hidden';\n }, [autoHeight, minRows, maxRows]);\n\n useEffect(() => {\n adjustHeight();\n }, [value, adjustHeight]);\n\n // Combine refs\n const setRefs = useCallback(\n (el: HTMLTextAreaElement | null) => {\n internalRef.current = el;\n if (typeof ref === 'function') ref(el);\n else if (ref) (ref as React.MutableRefObject<HTMLTextAreaElement | null>).current = el;\n },\n [ref],\n );\n\n // Effective resize — disable when autoHeight\n const effectiveResize = autoHeight ? 'none' : resize;\n // Effective rows — use minRows for initial when autoHeight\n const effectiveRows = autoHeight ? (minRows ?? 1) : rows;\n\n const isDisabled = disabled || loading;\n const hasError = Boolean(error);\n const errorMessage = typeof error === 'string' ? error : undefined;\n\n const currentLength = typeof value === 'string' ? value.length : 0;\n\n const wrapperStyle: React.CSSProperties = {\n backgroundColor: isDisabled ? t.backgroundDisabled : t.background,\n border: `1px solid ${hasError ? t.borderError : focused ? t.borderFocus : t.border}`,\n borderRadius: '8px',\n padding: sc.padding,\n boxSizing: 'border-box',\n transition: 'border-color 0.15s ease',\n opacity: isDisabled ? 0.6 : 1,\n cursor: isDisabled ? 'not-allowed' : 'text',\n };\n\n const nativeStyle: React.CSSProperties = {\n width: '100%',\n minWidth: 0,\n background: 'transparent',\n border: 'none',\n outline: 'none',\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontStyle: 'normal',\n fontWeight: 400,\n fontSize: sc.fontSize,\n lineHeight: '1.5',\n color: t.text,\n cursor: isDisabled ? 'not-allowed' : 'text',\n resize: effectiveResize,\n boxSizing: 'border-box',\n overflow: autoHeight ? 'hidden' : undefined,\n };\n\n const labelStyle: React.CSSProperties = {\n fontFamily: \"'Zalando Sans Expanded', sans-serif\",\n fontStyle: 'normal',\n fontWeight: 400,\n fontSize: '10px',\n lineHeight: 'normal',\n textTransform: 'uppercase',\n color: t.label,\n userSelect: 'none',\n };\n\n const bottomTextStyle: React.CSSProperties = {\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '12px',\n lineHeight: 'normal',\n };\n\n return (\n <div\n style={{\n display: fullWidth ? 'flex' : 'inline-flex',\n flexDirection: 'column',\n gap: '6px',\n width: fullWidth ? '100%' : undefined,\n ...style,\n }}\n className={className}\n >\n {label && (\n <label htmlFor={textareaId} style={labelStyle}>\n {label}\n {required && <span style={{ color: t.borderError, marginLeft: '3px' }}>*</span>}\n </label>\n )}\n\n <div style={wrapperStyle}>\n <textarea\n ref={setRefs}\n id={textareaId}\n rows={effectiveRows}\n maxLength={maxLength}\n disabled={disabled}\n required={required}\n readOnly={loading || rest.readOnly}\n value={value}\n onChange={onChange}\n style={nativeStyle}\n onFocus={(e) => { setFocused(true); onFocus?.(e); }}\n onBlur={(e) => { setFocused(false); onBlur?.(e); }}\n {...rest}\n />\n </div>\n\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'flex-start' }}>\n <div style={{ flex: 1 }}>\n {errorMessage && (\n <span style={{ ...bottomTextStyle, color: t.borderError }}>\n {errorMessage}\n </span>\n )}\n {!errorMessage && helperText && (\n <span style={{ ...bottomTextStyle, color: t.helperText }}>\n {helperText}\n </span>\n )}\n </div>\n {maxLength !== undefined && (\n <span style={{ ...bottomTextStyle, color: currentLength > maxLength ? t.borderError : t.counter, flexShrink: 0 }}>\n {currentLength}/{maxLength}\n </span>\n )}\n </div>\n </div>\n );\n }\n);\n\nTextarea.displayName = 'Textarea';\n","import React, { useCallback, useId, useRef } from 'react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ───────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n trackBg: 'rgba(255,255,255,0.15)',\n trackFill: '#FC4F00',\n thumb: '#ffffff',\n thumbBorder: '#FC4F00',\n text: '#ffffff',\n label: '#ffffff',\n valueBg: 'rgba(3,3,3,0.75)',\n },\n light: {\n trackBg: 'rgba(0,0,0,0.1)',\n trackFill: '#FC4F00',\n thumb: '#ffffff',\n thumbBorder: '#FC4F00',\n text: '#1a1a1a',\n label: '#1a1a1a',\n valueBg: 'rgba(255,255,255,0.85)',\n },\n} as const;\n\n// ─── Size config ─────────────────────────────────────────────────────────────\n\nconst sizeConfig = {\n sm: { trackH: 4, thumb: 14, fontSize: '12px' },\n md: { trackH: 6, thumb: 18, fontSize: '14px' },\n lg: { trackH: 8, thumb: 22, fontSize: '16px' },\n} as const;\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport type SliderSize = 'sm' | 'md' | 'lg';\n\nexport interface SliderProps {\n /** Aktuální hodnota. Při `range` je to `[number, number]`. */\n value: number | [number, number];\n /** Callback volaný při změně hodnoty. */\n onChange?: (value: number | [number, number]) => void;\n /**\n * Minimální hodnota.\n * @default 0\n */\n min?: number;\n /**\n * Maximální hodnota.\n * @default 100\n */\n max?: number;\n /**\n * Krok posunu.\n * @default 1\n */\n step?: number;\n /** Popisek nad sliderem. */\n label?: string;\n /** Deaktivuje slider. */\n disabled?: boolean;\n /**\n * Zobrazí aktuální hodnotu vedle slideru.\n * @default false\n */\n showValue?: boolean;\n /**\n * Režim rozsahu — value musí být `[number, number]`.\n * @default false\n */\n range?: boolean;\n /**\n * Velikostní preset.\n * @default 'md'\n */\n size?: SliderSize;\n /** Dodatečná CSS třída. */\n className?: string;\n /** Další inline styly. */\n style?: React.CSSProperties;\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\nfunction clamp(val: number, min: number, max: number) {\n return Math.min(Math.max(val, min), max);\n}\n\nfunction snapToStep(val: number, min: number, step: number) {\n return Math.round((val - min) / step) * step + min;\n}\n\n// ─── Slider ──────────────────────────────────────────────────────────────────\n\n/**\n * Posuvník dle SM-UI design systému.\n *\n * Podporuje jednoduchý i rozsahový režim, zobrazení hodnoty,\n * velikostní presety a tmavý / světlý režim.\n *\n * @example\n * ```tsx\n * <Slider label=\"Hlasitost\" value={volume} onChange={setVolume} showValue />\n * <Slider range value={[20, 80]} onChange={setRange} label=\"Cenový rozsah\" />\n * ```\n */\nexport const Slider: React.FC<SliderProps> = ({\n value,\n onChange,\n min = 0,\n max = 100,\n step = 1,\n label,\n disabled = false,\n showValue = false,\n range = false,\n size = 'md',\n className,\n style,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n const sc = sizeConfig[size];\n const id = useId();\n const trackRef = useRef<HTMLDivElement>(null);\n const draggingThumb = useRef<'start' | 'end' | null>(null);\n\n const rangeValue = range\n ? (value as [number, number])\n : [min, value as number] as [number, number];\n\n const pct = (v: number) => ((v - min) / (max - min)) * 100;\n const startPct = pct(rangeValue[0]);\n const endPct = pct(rangeValue[1]);\n\n const getValueFromEvent = useCallback(\n (clientX: number) => {\n const track = trackRef.current;\n if (!track) return min;\n const rect = track.getBoundingClientRect();\n const ratio = clamp((clientX - rect.left) / rect.width, 0, 1);\n const raw = min + ratio * (max - min);\n return clamp(snapToStep(raw, min, step), min, max);\n },\n [min, max, step]\n );\n\n const handleTrackMouseDown = useCallback(\n (e: React.MouseEvent) => {\n if (disabled) return;\n e.preventDefault();\n const val = getValueFromEvent(e.clientX);\n\n if (range) {\n const rv = value as [number, number];\n const distStart = Math.abs(val - rv[0]);\n const distEnd = Math.abs(val - rv[1]);\n const which = distStart <= distEnd ? 'start' : 'end';\n draggingThumb.current = which;\n const next: [number, number] =\n which === 'start' ? [Math.min(val, rv[1]), rv[1]] : [rv[0], Math.max(val, rv[0])];\n onChange?.(next);\n } else {\n draggingThumb.current = 'end';\n onChange?.(val);\n }\n\n const handleMouseMove = (ev: MouseEvent) => {\n const v = getValueFromEvent(ev.clientX);\n if (range) {\n const rv = value as [number, number];\n if (draggingThumb.current === 'start') {\n onChange?.([Math.min(v, rv[1]), rv[1]]);\n } else {\n onChange?.([rv[0], Math.max(v, rv[0])]);\n }\n } else {\n onChange?.(v);\n }\n };\n\n const handleMouseUp = () => {\n draggingThumb.current = null;\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n },\n [disabled, getValueFromEvent, onChange, range, value]\n );\n\n const labelStyle: React.CSSProperties = {\n fontFamily: \"'Zalando Sans Expanded', sans-serif\",\n fontStyle: 'normal',\n fontWeight: 400,\n fontSize: '10px',\n lineHeight: 'normal',\n textTransform: 'uppercase',\n color: t.label,\n userSelect: 'none',\n };\n\n const valueDisplay = range\n ? `${rangeValue[0]} – ${rangeValue[1]}`\n : `${value}`;\n\n const thumbCommon: React.CSSProperties = {\n width: sc.thumb,\n height: sc.thumb,\n borderRadius: '50%',\n backgroundColor: t.thumb,\n border: `2px solid ${t.thumbBorder}`,\n position: 'absolute',\n top: '50%',\n transform: 'translate(-50%, -50%)',\n cursor: disabled ? 'not-allowed' : 'grab',\n boxShadow: '0 1px 3px rgba(0,0,0,0.2)',\n boxSizing: 'border-box',\n zIndex: 2,\n };\n\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n opacity: disabled ? 0.5 : 1,\n ...style,\n }}\n className={className}\n >\n {(label || showValue) && (\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n {label && <label htmlFor={id} style={labelStyle}>{label}</label>}\n {showValue && (\n <span style={{\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: sc.fontSize,\n color: t.text,\n userSelect: 'none',\n }}>\n {valueDisplay}\n </span>\n )}\n </div>\n )}\n\n <div\n ref={trackRef}\n role=\"slider\"\n id={id}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={range ? undefined : (value as number)}\n aria-disabled={disabled || undefined}\n onMouseDown={handleTrackMouseDown}\n style={{\n position: 'relative',\n width: '100%',\n height: sc.thumb,\n cursor: disabled ? 'not-allowed' : 'pointer',\n touchAction: 'none',\n userSelect: 'none',\n }}\n >\n {/* Track background */}\n <div style={{\n position: 'absolute',\n top: '50%',\n left: 0,\n right: 0,\n height: sc.trackH,\n transform: 'translateY(-50%)',\n borderRadius: sc.trackH / 2,\n backgroundColor: t.trackBg,\n }} />\n {/* Track fill */}\n <div style={{\n position: 'absolute',\n top: '50%',\n left: `${range ? startPct : 0}%`,\n width: `${endPct - (range ? startPct : 0)}%`,\n height: sc.trackH,\n transform: 'translateY(-50%)',\n borderRadius: sc.trackH / 2,\n backgroundColor: t.trackFill,\n }} />\n {/* Start thumb (range only) */}\n {range && (\n <span style={{ ...thumbCommon, left: `${startPct}%` }} />\n )}\n {/* End thumb */}\n <span style={{ ...thumbCommon, left: `${endPct}%` }} />\n </div>\n </div>\n );\n};\n\nSlider.displayName = 'Slider';\n","import React, { useCallback, useId, useRef, useState } from 'react';\nimport { FileText as FileTextIcon, UploadSimple as UploadSimpleIcon, Folder as FolderIcon, X as XIcon } from '@phosphor-icons/react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ───────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n border: 'rgba(255,255,255,0.3)',\n borderDrag: '#FC4F00',\n borderError: '#EF3838',\n background: 'rgba(3,3,3,0.75)',\n backgroundDrag: 'rgba(252,79,0,0.08)',\n backgroundDisabled: 'rgba(3,3,3,0.4)',\n text: '#ffffff',\n textSecondary: '#ACACAC',\n label: '#ffffff',\n helperText: '#ACACAC',\n fileText: '#ffffff',\n fileBg: 'rgba(255,255,255,0.05)',\n removeColor: '#ACACAC',\n removeHover: '#EF3838',\n },\n light: {\n border: 'rgba(0,0,0,0.2)',\n borderDrag: '#FC4F00',\n borderError: '#EF3838',\n background: 'rgba(255,255,255,0.85)',\n backgroundDrag: 'rgba(252,79,0,0.05)',\n backgroundDisabled: 'rgba(240,240,240,0.6)',\n text: '#1a1a1a',\n textSecondary: '#888888',\n label: '#1a1a1a',\n helperText: '#888888',\n fileText: '#1a1a1a',\n fileBg: 'rgba(0,0,0,0.03)',\n removeColor: '#888888',\n removeHover: '#EF3838',\n },\n} as const;\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface UploadedFile {\n /** Objekt nativního souboru. */\n file: File;\n /** Unikátní ID pro klíč. */\n id: string;\n}\n\nexport type FileUploadVariant = 'dropzone' | 'button';\n\nexport interface FileUploadProps {\n /**\n * Vizuální varianta.\n * - `'dropzone'` — velká zóna s drag & drop (výchozí)\n * - `'button'` — kompaktní vstup ve stylu tlačítka/inputu\n * @default 'dropzone'\n */\n variant?: FileUploadVariant;\n /** Callback volaný při přidání souborů. Vrací pole nativních `File` objektů. */\n onFiles?: (files: File[]) => void;\n /**\n * Povolené typy souborů (atribut `accept`).\n * @example 'image/*,.pdf'\n */\n accept?: string;\n /** Povolit výběr více souborů najednou. */\n multiple?: boolean;\n /** Maximální velikost souboru v bajtech. */\n maxSize?: number;\n /** Deaktivuje zónu pro nahrávání. */\n disabled?: boolean;\n /** Popisek nad zónou. */\n label?: string;\n /** Nápovědný text pod zónou. */\n helperText?: string;\n /**\n * Chybový stav. Při řetězci se zobrazí chybová zpráva.\n */\n error?: boolean | string;\n /** Dodatečná CSS třída. */\n className?: string;\n /** Další inline styly. */\n style?: React.CSSProperties;\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\nfunction formatFileSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nlet fileIdCounter = 0;\n\n\n// ─── FileUpload ──────────────────────────────────────────────────────────────\n\n/**\n * Zóna pro nahrávání souborů dle SM-UI design systému.\n *\n * Podporuje přetažení (drag & drop), výběr kliknutím,\n * seznam nahraných souborů s možností odebrání a validaci velikosti.\n *\n * @example\n * ```tsx\n * <FileUpload\n * label=\"Přílohy\"\n * accept=\"image/*,.pdf\"\n * multiple\n * maxSize={5 * 1024 * 1024}\n * onFiles={(files) => console.log(files)}\n * />\n * ```\n */\nexport const FileUpload: React.FC<FileUploadProps> = ({\n variant = 'dropzone',\n onFiles,\n accept,\n multiple = false,\n maxSize,\n disabled = false,\n label,\n helperText,\n error,\n className,\n style,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n const id = useId();\n const inputRef = useRef<HTMLInputElement>(null);\n const [dragging, setDragging] = useState(false);\n const [files, setFiles] = useState<UploadedFile[]>([]);\n const [sizeError, setSizeError] = useState<string | null>(null);\n\n const hasError = Boolean(error) || Boolean(sizeError);\n const errorMessage = typeof error === 'string' ? error : sizeError ?? undefined;\n\n const processFiles = useCallback(\n (fileList: FileList | File[]) => {\n const arr = Array.from(fileList);\n setSizeError(null);\n\n if (maxSize) {\n const oversized = arr.find((f) => f.size > maxSize);\n if (oversized) {\n setSizeError(\n `Soubor „${oversized.name}\" překračuje maximální velikost ${formatFileSize(maxSize)}.`\n );\n return;\n }\n }\n\n const newFiles: UploadedFile[] = arr.map((file) => ({\n file,\n id: `file-${++fileIdCounter}`,\n }));\n\n const updated = multiple ? [...files, ...newFiles] : newFiles;\n setFiles(updated);\n onFiles?.(updated.map((f) => f.file));\n },\n [files, maxSize, multiple, onFiles]\n );\n\n const handleDrop = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n setDragging(false);\n if (disabled) return;\n if (e.dataTransfer.files.length > 0) {\n processFiles(e.dataTransfer.files);\n }\n },\n [disabled, processFiles]\n );\n\n const handleRemove = useCallback(\n (fileId: string) => {\n const updated = files.filter((f) => f.id !== fileId);\n setFiles(updated);\n onFiles?.(updated.map((f) => f.file));\n },\n [files, onFiles]\n );\n\n const labelStyle: React.CSSProperties = {\n fontFamily: \"'Zalando Sans Expanded', sans-serif\",\n fontStyle: 'normal',\n fontWeight: 400,\n fontSize: '10px',\n lineHeight: 'normal',\n textTransform: 'uppercase',\n color: t.label,\n userSelect: 'none',\n };\n\n const zoneStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '8px',\n padding: '24px',\n border: `2px dashed ${hasError ? t.borderError : dragging ? t.borderDrag : t.border}`,\n borderRadius: '8px',\n backgroundColor: dragging ? t.backgroundDrag : disabled ? t.backgroundDisabled : t.background,\n cursor: disabled ? 'not-allowed' : 'pointer',\n transition: 'border-color 0.15s ease, background-color 0.15s ease',\n opacity: disabled ? 0.5 : 1,\n };\n\n const bottomTextStyle: React.CSSProperties = {\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '12px',\n lineHeight: 'normal',\n };\n\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '6px',\n ...style,\n }}\n className={className}\n >\n {label && <span style={labelStyle}>{label}</span>}\n\n {/* Skrytý input */}\n <input\n ref={inputRef}\n id={id}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n onChange={(e) => {\n if (e.target.files && e.target.files.length > 0) {\n processFiles(e.target.files);\n }\n e.target.value = '';\n }}\n style={{ display: 'none' }}\n />\n\n {variant === 'dropzone' ? (\n /* ── Dropzone varianta ──────────────────────────────────────────── */\n <div\n style={zoneStyle}\n onClick={() => !disabled && inputRef.current?.click()}\n onDragOver={(e) => {\n e.preventDefault();\n if (!disabled) setDragging(true);\n }}\n onDragLeave={() => setDragging(false)}\n onDrop={handleDrop}\n >\n <UploadSimpleIcon size={32} color={t.textSecondary} />\n <span\n style={{\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '14px',\n color: t.textSecondary,\n textAlign: 'center',\n userSelect: 'none',\n }}\n >\n Přetáhněte soubory nebo klikněte\n </span>\n </div>\n ) : (\n /* ── Button varianta (input-style) ──────────────────────────────── */\n <div\n onClick={() => !disabled && inputRef.current?.click()}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '10px',\n padding: '8px 12px',\n borderRadius: '8px',\n border: `1px solid ${hasError ? t.borderError : t.border}`,\n backgroundColor: disabled ? t.backgroundDisabled : t.background,\n opacity: disabled ? 0.5 : 1,\n cursor: disabled ? 'not-allowed' : 'pointer',\n transition: 'border-color 0.15s ease',\n boxSizing: 'border-box',\n }}\n onMouseEnter={(e) => {\n if (!disabled) {\n (e.currentTarget as HTMLElement).style.borderColor = hasError ? t.borderError : theme === 'dark' ? 'rgba(255,255,255,0.5)' : 'rgba(0,0,0,0.4)';\n }\n }}\n onMouseLeave={(e) => {\n (e.currentTarget as HTMLElement).style.borderColor = hasError ? t.borderError : t.border;\n }}\n >\n {/* Ikona souboru nebo upload */}\n <span style={{ display: 'flex', alignItems: 'center', flexShrink: 0, color: t.textSecondary }}>\n {files.length > 0 ? <FileTextIcon size={18} color={t.textSecondary} /> : <UploadSimpleIcon size={18} color={t.textSecondary} />}\n </span>\n\n {/* Text */}\n <span\n style={{\n flex: 1,\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '14px',\n color: files.length > 0 ? t.text : t.textSecondary,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {files.length === 0\n ? 'Vyberte soubor...'\n : files.length === 1\n ? files[0].file.name\n : `${files.length} souborů`}\n </span>\n\n {/* Velikost souboru */}\n {files.length === 1 && (\n <span style={{ fontFamily: \"'Zalando Sans', sans-serif\", fontSize: '12px', color: t.textSecondary, flexShrink: 0 }}>\n {formatFileSize(files[0].file.size)}\n </span>\n )}\n\n {/* Browse ikona */}\n <span style={{ display: 'flex', alignItems: 'center', flexShrink: 0, color: t.textSecondary }}>\n <FolderIcon size={16} color={t.textSecondary} />\n </span>\n </div>\n )}\n\n {/* File list */}\n {files.length > 0 && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '4px' }}>\n {files.map((f) => (\n <div\n key={f.id}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '6px 8px',\n borderRadius: '6px',\n backgroundColor: t.fileBg,\n }}\n >\n <FileTextIcon size={24} color={t.textSecondary} />\n <span\n style={{\n flex: 1,\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '13px',\n color: t.fileText,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {f.file.name}\n </span>\n <span\n style={{\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '12px',\n color: t.textSecondary,\n flexShrink: 0,\n }}\n >\n {formatFileSize(f.file.size)}\n </span>\n <span\n role=\"button\"\n tabIndex={0}\n aria-label={`Odebrat ${f.file.name}`}\n onClick={(e) => {\n e.stopPropagation();\n handleRemove(f.id);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') handleRemove(f.id);\n }}\n style={{\n display: 'flex',\n alignItems: 'center',\n cursor: 'pointer',\n padding: '2px',\n flexShrink: 0,\n }}\n >\n <XIcon size={14} color={t.removeColor} />\n </span>\n </div>\n ))}\n </div>\n )}\n\n {errorMessage && (\n <span style={{ ...bottomTextStyle, color: t.borderError }}>\n {errorMessage}\n </span>\n )}\n {!errorMessage && helperText && (\n <span style={{ ...bottomTextStyle, color: t.helperText }}>\n {helperText}\n </span>\n )}\n </div>\n );\n};\n\nFileUpload.displayName = 'FileUpload';\n","import React from 'react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ───────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n base: 'rgba(255,255,255,0.06)',\n shimmer: 'rgba(255,255,255,0.13)',\n },\n light: {\n base: 'rgba(0,0,0,0.06)',\n shimmer: 'rgba(0,0,0,0.11)',\n },\n} as const;\n\n// ─── Keyframes CSS ───────────────────────────────────────────────────────────\n\nconst ANIM_NAME = 'smSkeletonShimmer';\nconst KEYFRAMES_CSS = `@keyframes ${ANIM_NAME}{0%{background-position:100% 0}100%{background-position:-100% 0}}`;\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface SkeletonProps {\n /**\n * Tvar skeletonu.\n * - `'text'` — obdélník s malou výškou, může vykreslovat více řádků\n * - `'circle'` — kruh\n * - `'rect'` — obdélník\n * @default 'text'\n */\n variant?: 'text' | 'circle' | 'rect';\n /** Šířka skeletonu. Přijímá číslo (px) nebo CSS řetězec. @default '100%' */\n width?: number | string;\n /** Výška skeletonu. Přijímá číslo (px) nebo CSS řetězec. */\n height?: number | string;\n /** Počet řádků pro variantu `'text'`. @default 1 */\n lines?: number;\n /** Zapne/vypne shimmer animaci. @default true */\n animate?: boolean;\n /** Dodatečná CSS třída. */\n className?: string;\n /** Další inline styly. */\n style?: React.CSSProperties;\n}\n\n// ─── Skeleton ────────────────────────────────────────────────────────────────\n\n/**\n * Zástupný prvek zobrazený při načítání obsahu.\n *\n * Podporuje tři varianty (`text`, `circle`, `rect`), shimmer animaci\n * a tmavý / světlý režim přes `useTheme`.\n *\n * @example\n * ```tsx\n * <Skeleton variant=\"text\" lines={3} />\n * <Skeleton variant=\"circle\" width={48} height={48} />\n * <Skeleton variant=\"rect\" width=\"100%\" height={200} />\n * ```\n */\nexport const Skeleton: React.FC<SkeletonProps> = ({\n variant = 'text',\n width,\n height,\n lines = 1,\n animate = true,\n className,\n style,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n\n const resolveWidth = width ?? (variant === 'circle' ? 40 : '100%');\n const resolveHeight =\n height ?? (variant === 'circle' ? 40 : variant === 'text' ? '1em' : 100);\n\n const baseStyle: React.CSSProperties = {\n backgroundColor: t.base,\n backgroundImage: animate\n ? `linear-gradient(90deg, ${t.base} 25%, ${t.shimmer} 50%, ${t.base} 75%)`\n : undefined,\n backgroundSize: animate ? '200% 100%' : undefined,\n animation: animate ? `${ANIM_NAME} 1.5s ease-in-out infinite` : undefined,\n borderRadius: variant === 'circle' ? '50%' : '6px',\n width: typeof resolveWidth === 'number' ? `${resolveWidth}px` : resolveWidth,\n height: typeof resolveHeight === 'number' ? `${resolveHeight}px` : resolveHeight,\n };\n\n const styleTag = animate ? <style dangerouslySetInnerHTML={{ __html: KEYFRAMES_CSS }} /> : null;\n\n if (variant === 'text' && lines > 1) {\n return (\n <div\n className={className}\n style={{ display: 'flex', flexDirection: 'column', gap: '8px', ...style }}\n >\n {styleTag}\n {Array.from({ length: lines }).map((_, i) => (\n <div\n key={i}\n style={{\n ...baseStyle,\n width: i === lines - 1 ? '75%' : baseStyle.width,\n }}\n />\n ))}\n </div>\n );\n }\n\n return (\n <>\n {styleTag}\n <div className={className} style={{ ...baseStyle, ...style }} />\n </>\n );\n};\n\nSkeleton.displayName = 'Skeleton';\n","import React from 'react';\nimport { CaretUpDownIcon } from '@phosphor-icons/react';\nimport { useTheme } from '../../hooks/useTheme';\nimport { Skeleton } from '../Skeleton/Skeleton';\n\n// ─── Design tokens ───────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n background: 'rgba(3,3,3,0.75)',\n headerBg: 'rgba(255,255,255,0.04)',\n border: 'rgba(255,255,255,0.08)',\n text: '#ffffff',\n textSecondary: '#ACACAC',\n rowHover: 'rgba(255,255,255,0.04)',\n stripedBg: 'rgba(255,255,255,0.06)',\n sortActive: '#E8612D',\n sortInactive: 'rgba(255,255,255,0.25)',\n },\n light: {\n background: 'rgba(255,255,255,0.85)',\n headerBg: 'rgba(0,0,0,0.02)',\n border: 'rgba(0,0,0,0.08)',\n text: '#1a1a1a',\n textSecondary: '#888888',\n rowHover: 'rgba(0,0,0,0.03)',\n stripedBg: 'rgba(0,0,0,0.04)',\n sortActive: '#E8612D',\n sortInactive: 'rgba(0,0,0,0.2)',\n },\n} as const;\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface TableColumn {\n /** Klíč odpovídající hodnotě v datovém objektu. */\n key: string;\n /** Text záhlaví sloupce. */\n header: string;\n /** Povolí řazení podle tohoto sloupce. @default false */\n sortable?: boolean;\n /** Šířka sloupce (CSS hodnota). */\n width?: string | number;\n /** Vlastní vykreslovací funkce pro buňku. */\n render?: (value: any, row: any, index: number) => React.ReactNode;\n}\n\nexport interface TableProps {\n /** Definice sloupců tabulky. */\n columns: TableColumn[];\n /** Data k zobrazení — pole objektů. */\n data: any[];\n /** Při `true` se místo dat zobrazí skeleton řádky. @default false */\n loading?: boolean;\n /** Text zobrazený při prázdných datech. @default 'Žádná data' */\n emptyText?: string;\n /** Voláno při kliknutí na řaditelný sloupec. Řazení dat je na straně uživatele — komponenta pouze informuje o zvoleném klíči a směru. */\n onSort?: (key: string, direction: 'asc' | 'desc') => void;\n /** Aktuální klíč řazení (pouze vizuální indikátor, samotné řazení provádí uživatel). */\n sortKey?: string;\n /** Aktuální směr řazení (pouze vizuální indikátor). */\n sortDirection?: 'asc' | 'desc';\n /** Střídání barvy řádků. @default false */\n striped?: boolean;\n /** Zvýraznění řádku při najetí myší. @default true */\n hoverable?: boolean;\n /** Dodatečná CSS třída. */\n className?: string;\n /** Další inline styly. */\n style?: React.CSSProperties;\n}\n\n// ─── Table ───────────────────────────────────────────────────────────────────\n\n/**\n * Datová tabulka dle SM-UI design systému.\n *\n * Podporuje řazení, loading stav se Skeleton řádky,\n * prázdný stav, střídání barev řádků a tmavý / světlý režim.\n *\n * @example\n * ```tsx\n * <Table\n * columns={[\n * { key: 'name', header: 'Jméno', sortable: true },\n * { key: 'email', header: 'E-mail' },\n * ]}\n * data={users}\n * onSort={handleSort}\n * sortKey=\"name\"\n * sortDirection=\"asc\"\n * striped\n * />\n * ```\n */\nexport const Table: React.FC<TableProps> = ({\n columns,\n data,\n loading = false,\n emptyText = 'Žádná data',\n onSort,\n sortKey,\n sortDirection,\n striped = false,\n hoverable = true,\n className,\n style,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n\n const handleSort = (col: TableColumn) => {\n if (!col.sortable || !onSort) return;\n const nextDir: 'asc' | 'desc' =\n sortKey === col.key && sortDirection === 'asc' ? 'desc' : 'asc';\n onSort(col.key, nextDir);\n };\n\n const tableStyle: React.CSSProperties = {\n width: '100%',\n borderCollapse: 'separate',\n borderSpacing: 0,\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '14px',\n color: t.text,\n backgroundColor: t.background,\n border: `1px solid ${t.border}`,\n borderRadius: '12px',\n overflow: 'hidden',\n ...style,\n };\n\n const thStyle = (col: TableColumn): React.CSSProperties => ({\n padding: '12px 16px',\n textAlign: 'left',\n fontFamily: \"'Zalando Sans Expanded', sans-serif\",\n fontWeight: 500,\n fontSize: '11px',\n textTransform: 'uppercase',\n letterSpacing: '0.03em',\n color: t.textSecondary,\n backgroundColor: t.headerBg,\n borderBottom: `1px solid ${t.border}`,\n whiteSpace: 'nowrap',\n cursor: col.sortable ? 'pointer' : 'default',\n userSelect: 'none',\n width: col.width != null ? (typeof col.width === 'number' ? `${col.width}px` : col.width) : undefined,\n });\n\n const tdStyle: React.CSSProperties = {\n padding: '10px 16px',\n borderBottom: `1px solid ${t.border}`,\n lineHeight: 'normal',\n };\n\n const skeletonRows = 5;\n\n return (\n <table className={className} style={tableStyle}>\n <thead>\n <tr>\n {columns.map((col) => (\n <th\n key={col.key}\n style={thStyle(col)}\n onClick={() => handleSort(col)}\n >\n <span style={{ display: 'inline-flex', alignItems: 'center' }}>\n {col.header}\n {col.sortable && (\n <CaretUpDownIcon\n size={14}\n color={sortKey === col.key ? t.sortActive : t.sortInactive}\n style={{ flexShrink: 0, marginLeft: '4px' }}\n />\n )}\n </span>\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {loading\n ? Array.from({ length: skeletonRows }).map((_, rowIdx) => (\n <tr key={`skel-${rowIdx}`}>\n {columns.map((col) => (\n <td key={col.key} style={tdStyle}>\n <Skeleton variant=\"text\" width=\"80%\" />\n </td>\n ))}\n </tr>\n ))\n : data.length === 0\n ? (\n <tr>\n <td\n colSpan={columns.length}\n style={{\n ...tdStyle,\n textAlign: 'center',\n padding: '32px 16px',\n color: t.textSecondary,\n borderBottom: 'none',\n }}\n >\n {emptyText}\n </td>\n </tr>\n )\n : data.map((row, rowIdx) => (\n <tr\n key={rowIdx}\n style={{\n backgroundColor:\n striped && rowIdx % 2 === 1 ? t.stripedBg : 'transparent',\n transition: 'background-color 0.12s ease',\n }}\n onMouseEnter={(e) => {\n if (hoverable) {\n (e.currentTarget as HTMLElement).style.backgroundColor = t.rowHover;\n }\n }}\n onMouseLeave={(e) => {\n if (hoverable) {\n (e.currentTarget as HTMLElement).style.backgroundColor =\n striped && rowIdx % 2 === 1 ? t.stripedBg : 'transparent';\n }\n }}\n >\n {columns.map((col) => (\n <td\n key={col.key}\n style={{\n ...tdStyle,\n borderBottom:\n rowIdx === data.length - 1 ? 'none' : tdStyle.borderBottom,\n }}\n >\n {col.render\n ? col.render(row[col.key], row, rowIdx)\n : row[col.key]}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n );\n};\n\nTable.displayName = 'Table';\n","import React from 'react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ───────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n background: 'rgba(3,3,3,0.75)',\n border: 'rgba(255,255,255,0.12)',\n borderHover: 'rgba(255,255,255,0.25)',\n text: '#ffffff',\n textSecondary: '#ACACAC',\n divider: 'rgba(255,255,255,0.08)',\n },\n light: {\n background: 'rgba(255,255,255,0.85)',\n border: 'rgba(0,0,0,0.1)',\n borderHover: 'rgba(0,0,0,0.2)',\n text: '#1a1a1a',\n textSecondary: '#888888',\n divider: 'rgba(0,0,0,0.06)',\n },\n} as const;\n\n// ─── Padding config ──────────────────────────────────────────────────────────\n\nconst paddingMap = {\n none: '0',\n sm: '12px',\n md: '20px',\n lg: '28px',\n} as const;\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface CardProps {\n /** Titulek karty. */\n title?: string;\n /** Podtitulek karty. */\n subtitle?: string;\n /** Vlastní obsah záhlaví — přepíše `title` a `subtitle`. */\n header?: React.ReactNode;\n /** Obsah patičky karty. */\n footer?: React.ReactNode;\n /** Obsah karty. */\n children?: React.ReactNode;\n /** Při `true` se karta jemně zvedne při najetí myší. @default false */\n hoverable?: boolean;\n /** Zobrazí rámeček kolem karty. @default true */\n bordered?: boolean;\n /**\n * Velikost vnitřního odsazení.\n * @default 'md'\n */\n padding?: 'none' | 'sm' | 'md' | 'lg';\n /** Dodatečná CSS třída. */\n className?: string;\n /** Další inline styly. */\n style?: React.CSSProperties;\n}\n\n// ─── Card ────────────────────────────────────────────────────────────────────\n\n/**\n * Karta dle SM-UI design systému.\n *\n * Podporuje titulek, záhlaví, patičku, hoverable efekt\n * a tmavý / světlý režim přes `useTheme`.\n *\n * @example\n * ```tsx\n * <Card title=\"Statistiky\" subtitle=\"Přehled za poslední měsíc\">\n * <p>Obsah karty…</p>\n * </Card>\n * ```\n */\nexport const Card: React.FC<CardProps> = ({\n title,\n subtitle,\n header,\n footer,\n children,\n hoverable = false,\n bordered = true,\n padding = 'md',\n className,\n style,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n const pad = paddingMap[padding];\n\n const cardStyle: React.CSSProperties = {\n backgroundColor: t.background,\n border: bordered ? `1px solid ${t.border}` : 'none',\n borderRadius: '12px',\n overflow: 'hidden',\n transition: 'border-color 0.15s ease, box-shadow 0.2s ease, transform 0.2s ease',\n cursor: hoverable ? 'pointer' : undefined,\n ...style,\n };\n\n const headerContent = header ?? (\n (title || subtitle) ? (\n <div style={{ padding: pad, paddingBottom: children || footer ? '0' : pad }}>\n {title && (\n <div\n style={{\n fontFamily: \"'Zalando Sans Expanded', sans-serif\",\n fontWeight: 500,\n fontSize: '16px',\n lineHeight: 'normal',\n color: t.text,\n }}\n >\n {title}\n </div>\n )}\n {subtitle && (\n <div\n style={{\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '13px',\n lineHeight: 'normal',\n color: t.textSecondary,\n marginTop: '4px',\n }}\n >\n {subtitle}\n </div>\n )}\n </div>\n ) : null\n );\n\n return (\n <div\n className={className}\n style={cardStyle}\n onMouseEnter={(e) => {\n if (hoverable) {\n e.currentTarget.style.borderColor = t.borderHover;\n e.currentTarget.style.transform = 'translateY(-2px)';\n e.currentTarget.style.boxShadow =\n theme === 'dark'\n ? '0 8px 24px rgba(0,0,0,0.4)'\n : '0 8px 24px rgba(0,0,0,0.08)';\n }\n }}\n onMouseLeave={(e) => {\n if (hoverable) {\n e.currentTarget.style.borderColor = bordered ? t.border : 'transparent';\n e.currentTarget.style.transform = 'translateY(0)';\n e.currentTarget.style.boxShadow = 'none';\n }\n }}\n >\n {headerContent}\n\n {children && (\n <div style={{ padding: pad }}>\n {children}\n </div>\n )}\n\n {footer && (\n <>\n <div style={{ borderTop: `1px solid ${t.divider}` }} />\n <div style={{ padding: pad }}>\n {footer}\n </div>\n </>\n )}\n </div>\n );\n};\n\nCard.displayName = 'Card';\n","import React, { useState, useRef, useEffect, useCallback } from 'react';\nimport { CaretDownIcon } from '@phosphor-icons/react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ───────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n background: 'rgba(3,3,3,0.75)',\n border: 'rgba(255,255,255,0.08)',\n text: '#ffffff',\n textSecondary: '#ACACAC',\n textDisabled: 'rgba(255,255,255,0.3)',\n chevron: '#ACACAC',\n chevronDisabled: 'rgba(255,255,255,0.2)',\n hoverBg: 'rgba(255,255,255,0.03)',\n },\n light: {\n background: 'rgba(255,255,255,0.85)',\n border: 'rgba(0,0,0,0.06)',\n text: '#1a1a1a',\n textSecondary: '#888888',\n textDisabled: 'rgba(0,0,0,0.25)',\n chevron: '#888888',\n chevronDisabled: 'rgba(0,0,0,0.15)',\n hoverBg: 'rgba(0,0,0,0.02)',\n },\n} as const;\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface AccordionItemProps {\n /** Titulek položky. */\n title: string;\n /** Obsah zobrazený po rozbalení. */\n children: React.ReactNode;\n /** Při `true` bude položka výchozně rozbalena. @default false */\n defaultOpen?: boolean;\n /** Zakáže interakci s položkou. @default false */\n disabled?: boolean;\n}\n\nexport interface AccordionProps {\n /**\n * Potomci — typicky komponenty `<AccordionItem>`.\n */\n children: React.ReactNode;\n /** Povolí více současně otevřených položek. @default false */\n multiple?: boolean;\n /** Dodatečná CSS třída. */\n className?: string;\n /** Další inline styly. */\n style?: React.CSSProperties;\n}\n\n// ─── AccordionItem ───────────────────────────────────────────────────────────\n\n/**\n * Položka akordéonu. Používejte uvnitř `<Accordion>`.\n *\n * @example\n * ```tsx\n * <AccordionItem title=\"Sekce 1\">\n * Obsah první sekce.\n * </AccordionItem>\n * ```\n */\nexport const AccordionItem: React.FC<\n AccordionItemProps & {\n /** @internal Řízeno rodičem Accordion. */\n _controlled?: boolean;\n /** @internal */\n _open?: boolean;\n /** @internal */\n _onToggle?: () => void;\n }\n> = ({\n title,\n children,\n defaultOpen = false,\n disabled = false,\n _controlled,\n _open,\n _onToggle,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const isOpen = _controlled ? !!_open : internalOpen;\n\n const contentRef = useRef<HTMLDivElement>(null);\n const [contentHeight, setContentHeight] = useState<number>(0);\n\n useEffect(() => {\n if (contentRef.current) {\n setContentHeight(contentRef.current.scrollHeight);\n }\n }, [children, isOpen]);\n\n const handleToggle = useCallback(() => {\n if (disabled) return;\n if (_controlled && _onToggle) {\n _onToggle();\n } else {\n setInternalOpen((v) => !v);\n }\n }, [disabled, _controlled, _onToggle]);\n\n return (\n <div\n style={{\n borderBottom: `1px solid ${t.border}`,\n }}\n >\n <button\n type=\"button\"\n disabled={disabled}\n onClick={handleToggle}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n padding: '14px 16px',\n border: 'none',\n background: 'transparent',\n cursor: disabled ? 'not-allowed' : 'pointer',\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '15px',\n fontWeight: 500,\n color: disabled ? t.textDisabled : t.text,\n lineHeight: 'normal',\n textAlign: 'left',\n outline: 'none',\n transition: 'background-color 0.12s ease',\n }}\n onMouseEnter={(e) => {\n if (!disabled) e.currentTarget.style.backgroundColor = t.hoverBg;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n }}\n >\n <span>{title}</span>\n <CaretDownIcon size={16} color={disabled ? t.chevronDisabled : t.chevron} style={{ transition: 'transform 0.25s ease', transform: isOpen ? 'rotate(180deg)' : 'rotate(0deg)', flexShrink: 0 }} />\n </button>\n\n <div\n ref={contentRef}\n style={{\n overflow: 'hidden',\n maxHeight: isOpen ? `${contentHeight}px` : '0px',\n transition: 'max-height 0.25s ease',\n }}\n >\n <div\n style={{\n padding: '10px 16px 16px',\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '14px',\n lineHeight: '1.5',\n color: t.textSecondary,\n }}\n >\n {children}\n </div>\n </div>\n </div>\n );\n};\n\nAccordionItem.displayName = 'AccordionItem';\n\n// ─── Accordion ───────────────────────────────────────────────────────────────\n\n/**\n * Akordéon dle SM-UI design systému.\n *\n * Obalí skupinu `<AccordionItem>` a řídí jejich otevírání.\n * Ve výchozím stavu se otevře vždy pouze jedna položka najednou.\n * Pro více současně otevřených položek nastavte `multiple`.\n *\n * @example\n * ```tsx\n * <Accordion>\n * <AccordionItem title=\"Sekce 1\">Obsah 1</AccordionItem>\n * <AccordionItem title=\"Sekce 2\">Obsah 2</AccordionItem>\n * </Accordion>\n * ```\n */\nexport const Accordion: React.FC<AccordionProps> = ({\n children,\n multiple = false,\n className,\n style,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n\n const items = React.Children.toArray(children).filter(\n (child): child is React.ReactElement<AccordionItemProps> =>\n React.isValidElement(child)\n );\n\n const [openIndices, setOpenIndices] = useState<Set<number>>(() => {\n const defaults = new Set<number>();\n items.forEach((item, idx) => {\n if (item.props.defaultOpen) defaults.add(idx);\n });\n return defaults;\n });\n\n const handleToggle = useCallback(\n (idx: number) => {\n setOpenIndices((prev) => {\n const next = new Set(prev);\n if (next.has(idx)) {\n next.delete(idx);\n } else {\n if (!multiple) next.clear();\n next.add(idx);\n }\n return next;\n });\n },\n [multiple]\n );\n\n return (\n <div\n className={className}\n style={{\n backgroundColor: t.background,\n border: `1px solid ${t.border}`,\n borderRadius: '12px',\n overflow: 'hidden',\n ...style,\n }}\n >\n {items.map((item, idx) =>\n React.cloneElement(item, {\n key: idx,\n _controlled: true,\n _open: openIndices.has(idx),\n _onToggle: () => handleToggle(idx),\n } as any)\n )}\n </div>\n );\n};\n\nAccordion.displayName = 'Accordion';\n","import React from 'react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ───────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n text: '#ffffff',\n textInactive: '#ACACAC',\n textDisabled: 'rgba(255,255,255,0.3)',\n border: 'rgba(255,255,255,0.08)',\n activeUnderline: '#E8612D',\n pillBg: '#E8612D',\n pillText: '#ffffff',\n pillInactiveBg: 'transparent',\n hoverBg: 'rgba(255,255,255,0.04)',\n },\n light: {\n text: '#1a1a1a',\n textInactive: '#888888',\n textDisabled: 'rgba(0,0,0,0.25)',\n border: 'rgba(0,0,0,0.08)',\n activeUnderline: '#E8612D',\n pillBg: '#E8612D',\n pillText: '#ffffff',\n pillInactiveBg: 'transparent',\n hoverBg: 'rgba(0,0,0,0.03)',\n },\n} as const;\n\n// ─── Size config ─────────────────────────────────────────────────────────────\n\nconst sizeConfig = {\n sm: { padding: '6px 12px', fontSize: '13px' },\n md: { padding: '8px 16px', fontSize: '14px' },\n lg: { padding: '10px 20px', fontSize: '16px' },\n} as const;\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface TabsProps {\n /** Aktuální aktivní hodnota. */\n value: string;\n /** Voláno při změně aktivní záložky. */\n onChange: (value: string) => void;\n /** Potomci — komponenty `<Tab>` a `<TabPanel>`. */\n children: React.ReactNode;\n /**\n * Vizuální varianta.\n * - `'underline'` — spodní linka na aktivní záložce\n * - `'pills'` — oranžová pilulka na aktivní záložce\n * @default 'underline'\n */\n variant?: 'underline' | 'pills';\n /** Roztáhne záložky na celou šířku. @default false */\n fullWidth?: boolean;\n /**\n * Velikostní preset.\n * @default 'md'\n */\n size?: 'sm' | 'md' | 'lg';\n /** Dodatečná CSS třída. */\n className?: string;\n /** Další inline styly. */\n style?: React.CSSProperties;\n}\n\nexport interface TabProps {\n /** Unikátní hodnota záložky. */\n value: string;\n /** Text záložky. */\n label: string;\n /** Zakáže záložku. @default false */\n disabled?: boolean;\n /** Ikona zobrazená před textem. */\n icon?: React.ReactNode;\n}\n\nexport interface TabPanelProps {\n /** Hodnota odpovídající záložce — panel se zobrazí, když je aktivní. */\n value: string;\n /** Obsah panelu. */\n children: React.ReactNode;\n}\n\n// ─── Tab ─────────────────────────────────────────────────────────────────────\n\n/**\n * Záložka uvnitř `<Tabs>`. Definuje jednu záložku v navigaci.\n *\n * @example\n * ```tsx\n * <Tab value=\"general\" label=\"Obecné\" />\n * ```\n */\nexport const Tab: React.FC<TabProps> = () => {\n // Renderování je řízeno rodičem <Tabs>.\n return null;\n};\n\nTab.displayName = 'Tab';\n\n// ─── TabPanel ────────────────────────────────────────────────────────────────\n\n/**\n * Panel obsahu spojený s konkrétní záložkou.\n *\n * @example\n * ```tsx\n * <TabPanel value=\"general\">\n * Obsah záložky „Obecné\".\n * </TabPanel>\n * ```\n */\nexport const TabPanel: React.FC<TabPanelProps> = () => {\n // Renderování je řízeno rodičem <Tabs>.\n return null;\n};\n\nTabPanel.displayName = 'TabPanel';\n\n// ─── Tabs ────────────────────────────────────────────────────────────────────\n\n/**\n * Záložkový komponent dle SM-UI design systému.\n *\n * Podporuje varianty `underline` a `pills`, velikostní presety\n * a tmavý / světlý režim přes `useTheme`.\n *\n * @example\n * ```tsx\n * <Tabs value={active} onChange={setActive} variant=\"underline\">\n * <Tab value=\"general\" label=\"Obecné\" />\n * <Tab value=\"advanced\" label=\"Pokročilé\" />\n * <TabPanel value=\"general\">Obsah 1</TabPanel>\n * <TabPanel value=\"advanced\">Obsah 2</TabPanel>\n * </Tabs>\n * ```\n */\nexport const Tabs: React.FC<TabsProps> = ({\n value,\n onChange,\n children,\n variant = 'underline',\n fullWidth = false,\n size = 'md',\n className,\n style,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n const sc = sizeConfig[size];\n\n const childArray = React.Children.toArray(children);\n\n const tabs = childArray.filter(\n (child): child is React.ReactElement<TabProps> =>\n React.isValidElement(child) && (child.type as any)?.displayName === 'Tab'\n );\n\n const panels = childArray.filter(\n (child): child is React.ReactElement<TabPanelProps> =>\n React.isValidElement(child) && (child.type as any)?.displayName === 'TabPanel'\n );\n\n const activePanel = panels.find((p) => p.props.value === value);\n\n return (\n <div className={className} style={style}>\n {/* Tab bar */}\n <div\n style={{\n display: 'flex',\n gap: variant === 'pills' ? '4px' : '0',\n borderBottom: variant === 'underline' ? `1px solid ${t.border}` : 'none',\n }}\n >\n {tabs.map((tab) => {\n const isActive = tab.props.value === value;\n const isDisabled = tab.props.disabled;\n\n const tabStyle: React.CSSProperties =\n variant === 'underline'\n ? {\n padding: sc.padding,\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: sc.fontSize,\n fontWeight: isActive ? 500 : 400,\n color: isDisabled\n ? t.textDisabled\n : isActive\n ? t.text\n : t.textInactive,\n background: 'transparent',\n border: 'none',\n borderBottom: `2px solid ${isActive ? t.activeUnderline : 'transparent'}`,\n marginBottom: '-1px',\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n outline: 'none',\n transition: 'color 0.15s ease, border-color 0.15s ease',\n flex: fullWidth ? 1 : undefined,\n textAlign: 'center',\n whiteSpace: 'nowrap',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '6px',\n }\n : {\n padding: sc.padding,\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: sc.fontSize,\n fontWeight: isActive ? 500 : 400,\n color: isDisabled\n ? t.textDisabled\n : isActive\n ? t.pillText\n : t.textInactive,\n backgroundColor: isActive ? t.pillBg : t.pillInactiveBg,\n border: 'none',\n borderRadius: '8px',\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n outline: 'none',\n transition:\n 'color 0.15s ease, background-color 0.15s ease',\n flex: fullWidth ? 1 : undefined,\n textAlign: 'center',\n whiteSpace: 'nowrap',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '6px',\n };\n\n return (\n <button\n key={tab.props.value}\n type=\"button\"\n disabled={isDisabled}\n style={tabStyle}\n onClick={() => {\n if (!isDisabled) onChange(tab.props.value);\n }}\n onMouseEnter={(e) => {\n if (!isDisabled && !isActive) {\n e.currentTarget.style.backgroundColor = variant === 'pills' && !isActive ? t.hoverBg : t.hoverBg;\n }\n }}\n onMouseLeave={(e) => {\n if (!isDisabled) {\n e.currentTarget.style.backgroundColor =\n variant === 'pills' && isActive ? t.pillBg : 'transparent';\n }\n }}\n >\n {tab.props.icon && (\n <span style={{ display: 'flex', alignItems: 'center' }}>\n {tab.props.icon}\n </span>\n )}\n {tab.props.label}\n </button>\n );\n })}\n </div>\n\n {/* Active panel */}\n {activePanel && (\n <div style={{ paddingTop: '16px' }}>\n {activePanel.props.children}\n </div>\n )}\n </div>\n );\n};\n\nTabs.displayName = 'Tabs';\n","import React, { useState, useRef, useCallback, useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ───────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n background: 'rgba(255,255,255,0.92)',\n text: '#1a1a1a',\n },\n light: {\n background: 'rgba(30,30,30,0.92)',\n text: '#ffffff',\n },\n} as const;\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface TooltipProps {\n /** Obsah tooltipu — text nebo ReactNode. */\n content: string | React.ReactNode;\n /** Trigger element obalený tooltipem. */\n children: React.ReactElement;\n /**\n * Pozice tooltipu vůči triggeru.\n * @default 'top'\n */\n position?: 'top' | 'bottom' | 'left' | 'right';\n /**\n * Prodleva před zobrazením (ms).\n * @default 200\n */\n delay?: number;\n /** Dodatečná CSS třída pro tooltip. */\n className?: string;\n /** Další inline styly pro tooltip. */\n style?: React.CSSProperties;\n}\n\n// ─── Tooltip ─────────────────────────────────────────────────────────────────\n\n/**\n * Tooltip dle SM-UI design systému.\n *\n * Zobrazí se po najetí myší na trigger element s volitelnou prodlevou.\n * Vykresluje se přes React portál, takže ho neořízne rodičovský kontejner.\n *\n * @example\n * ```tsx\n * <Tooltip content=\"Uložit změny\">\n * <button>Uložit</button>\n * </Tooltip>\n * ```\n */\nexport const Tooltip: React.FC<TooltipProps> = ({\n content,\n children,\n position = 'top',\n delay = 200,\n className,\n style,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n\n const [visible, setVisible] = useState(false);\n const [coords, setCoords] = useState({ top: 0, left: 0 });\n const triggerRef = useRef<HTMLElement>(null);\n const tooltipRef = useRef<HTMLDivElement>(null);\n const timerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n\n const ARROW_SIZE = 6;\n const GAP = 8;\n\n const updatePosition = useCallback(() => {\n const trigger = triggerRef.current;\n const tooltip = tooltipRef.current;\n if (!trigger || !tooltip) return;\n\n const rect = trigger.getBoundingClientRect();\n const tRect = tooltip.getBoundingClientRect();\n\n let top = 0;\n let left = 0;\n\n switch (position) {\n case 'top':\n top = rect.top - tRect.height - GAP;\n left = rect.left + rect.width / 2 - tRect.width / 2;\n break;\n case 'bottom':\n top = rect.bottom + GAP;\n left = rect.left + rect.width / 2 - tRect.width / 2;\n break;\n case 'left':\n top = rect.top + rect.height / 2 - tRect.height / 2;\n left = rect.left - tRect.width - GAP;\n break;\n case 'right':\n top = rect.top + rect.height / 2 - tRect.height / 2;\n left = rect.right + GAP;\n break;\n }\n\n setCoords({ top, left });\n }, [position]);\n\n useEffect(() => {\n if (visible) {\n // Initial position then recalc after render\n requestAnimationFrame(updatePosition);\n }\n }, [visible, updatePosition]);\n\n const handleEnter = useCallback(() => {\n timerRef.current = setTimeout(() => setVisible(true), delay);\n }, [delay]);\n\n const handleLeave = useCallback(() => {\n if (timerRef.current) clearTimeout(timerRef.current);\n setVisible(false);\n }, []);\n\n useEffect(() => {\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n };\n }, []);\n\n // Arrow styles per position\n const arrowStyle: React.CSSProperties = (() => {\n const base: React.CSSProperties = {\n position: 'absolute',\n width: 0,\n height: 0,\n border: `${ARROW_SIZE}px solid transparent`,\n };\n switch (position) {\n case 'top':\n return {\n ...base,\n bottom: -ARROW_SIZE,\n left: '50%',\n transform: 'translateX(-50%)',\n borderTopColor: t.background,\n borderBottomWidth: 0,\n };\n case 'bottom':\n return {\n ...base,\n top: -ARROW_SIZE,\n left: '50%',\n transform: 'translateX(-50%)',\n borderBottomColor: t.background,\n borderTopWidth: 0,\n };\n case 'left':\n return {\n ...base,\n right: -ARROW_SIZE,\n top: '50%',\n transform: 'translateY(-50%)',\n borderLeftColor: t.background,\n borderRightWidth: 0,\n };\n case 'right':\n return {\n ...base,\n left: -ARROW_SIZE,\n top: '50%',\n transform: 'translateY(-50%)',\n borderRightColor: t.background,\n borderLeftWidth: 0,\n };\n }\n })();\n\n const tooltipEl = visible\n ? createPortal(\n <div\n ref={tooltipRef}\n className={className}\n style={{\n position: 'fixed',\n top: coords.top,\n left: coords.left,\n zIndex: 99999,\n padding: '6px 12px',\n backgroundColor: t.background,\n color: t.text,\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '13px',\n lineHeight: 'normal',\n borderRadius: '8px',\n whiteSpace: 'nowrap',\n pointerEvents: 'none',\n boxShadow: '0 4px 12px rgba(0,0,0,0.15)',\n opacity: 1,\n transition: 'opacity 0.12s ease',\n ...style,\n }}\n >\n {content}\n <div style={arrowStyle} />\n </div>,\n document.body\n )\n : null;\n\n return (\n <>\n {React.cloneElement(children, {\n ref: triggerRef,\n onMouseEnter: (e: React.MouseEvent) => {\n handleEnter();\n children.props.onMouseEnter?.(e);\n },\n onMouseLeave: (e: React.MouseEvent) => {\n handleLeave();\n children.props.onMouseLeave?.(e);\n },\n } as any)}\n {tooltipEl}\n </>\n );\n};\n\nTooltip.displayName = 'Tooltip';\n","import React, { useState, useRef, useCallback, useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ───────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n background: 'rgba(24,24,24,0.95)',\n border: 'rgba(255,255,255,0.12)',\n text: '#ffffff',\n shadow: '0 12px 40px rgba(0,0,0,0.5), 0 0 0 1px rgba(255,255,255,0.04) inset',\n },\n light: {\n background: 'rgba(255,255,255,0.95)',\n border: 'rgba(0,0,0,0.1)',\n text: '#1a1a1a',\n shadow: '0 12px 40px rgba(0,0,0,0.12), 0 0 0 1px rgba(0,0,0,0.03) inset',\n },\n} as const;\n\nconst ANIM_DURATION = 180;\nconst GAP = 8;\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface PopoverProps {\n /** Obsah popoveru. */\n content: React.ReactNode;\n /** Trigger element. */\n children: React.ReactElement;\n /**\n * Pozice popoveru vůči triggeru.\n * @default 'bottom'\n */\n position?: 'top' | 'bottom' | 'left' | 'right';\n /**\n * Způsob otevření.\n * @default 'click'\n */\n trigger?: 'click' | 'hover';\n /** Dodatečná CSS třída pro popover. */\n className?: string;\n /** Další inline styly pro popover. */\n style?: React.CSSProperties;\n}\n\n// ─── Popover ─────────────────────────────────────────────────────────────────\n\n/**\n * Popover dle SM-UI design systému.\n *\n * Podobný Tooltipu, ale větší, s kartovým stylem.\n * Otevírá se kliknutím nebo hoverem, zavírá kliknutím mimo nebo Escape.\n * Vykresluje se přes React portál.\n *\n * @example\n * ```tsx\n * <Popover content={<div>Obsah popoveru</div>} trigger=\"click\">\n * <button>Klikni</button>\n * </Popover>\n * ```\n */\nexport const Popover: React.FC<PopoverProps> = ({\n content,\n children,\n position = 'bottom',\n trigger = 'click',\n className,\n style,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n\n const [open, setOpen] = useState(false);\n const [visible, setVisible] = useState(false);\n const [animState, setAnimState] = useState<'idle' | 'opening' | 'open' | 'closing'>('idle');\n const [coords, setCoords] = useState({ top: 0, left: 0 });\n\n const triggerRef = useRef<HTMLElement>(null);\n const popoverRef = useRef<HTMLDivElement>(null);\n const hoverTimerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n\n // ── Open / close with animation ────────────────────────────────────────\n\n const doOpen = useCallback(() => {\n setOpen(true);\n setVisible(true);\n setAnimState('opening');\n requestAnimationFrame(() => {\n requestAnimationFrame(() => setAnimState('open'));\n });\n }, []);\n\n const doClose = useCallback(() => {\n setOpen(false);\n setAnimState('closing');\n const timer = setTimeout(() => {\n setVisible(false);\n setAnimState('idle');\n }, ANIM_DURATION);\n return () => clearTimeout(timer);\n }, []);\n\n // ── Position ───────────────────────────────────────────────────────────\n\n const updatePosition = useCallback(() => {\n const el = triggerRef.current;\n const pop = popoverRef.current;\n if (!el || !pop) return;\n\n const rect = el.getBoundingClientRect();\n const pRect = pop.getBoundingClientRect();\n\n let top = 0;\n let left = 0;\n\n switch (position) {\n case 'top':\n top = rect.top - pRect.height - GAP;\n left = rect.left + rect.width / 2 - pRect.width / 2;\n break;\n case 'bottom':\n top = rect.bottom + GAP;\n left = rect.left + rect.width / 2 - pRect.width / 2;\n break;\n case 'left':\n top = rect.top + rect.height / 2 - pRect.height / 2;\n left = rect.left - pRect.width - GAP;\n break;\n case 'right':\n top = rect.top + rect.height / 2 - pRect.height / 2;\n left = rect.right + GAP;\n break;\n }\n\n setCoords({ top, left });\n }, [position]);\n\n useEffect(() => {\n if (visible) {\n requestAnimationFrame(updatePosition);\n window.addEventListener('scroll', updatePosition, true);\n window.addEventListener('resize', updatePosition);\n return () => {\n window.removeEventListener('scroll', updatePosition, true);\n window.removeEventListener('resize', updatePosition);\n };\n }\n }, [visible, updatePosition]);\n\n // ── Outside click ──────────────────────────────────────────────────────\n\n useEffect(() => {\n if (!open) return;\n const handler = (e: MouseEvent) => {\n const target = e.target as Node;\n if (\n !triggerRef.current?.contains(target) &&\n !popoverRef.current?.contains(target)\n ) {\n doClose();\n }\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [open, doClose]);\n\n // ── Escape ─────────────────────────────────────────────────────────────\n\n useEffect(() => {\n if (!open) return;\n const handler = (e: KeyboardEvent) => {\n if (e.key === 'Escape') doClose();\n };\n document.addEventListener('keydown', handler);\n return () => document.removeEventListener('keydown', handler);\n }, [open, doClose]);\n\n // ── Animation style ────────────────────────────────────────────────────\n\n const getAnimStyle = (): React.CSSProperties => {\n const base: React.CSSProperties = {\n transition: `opacity ${ANIM_DURATION}ms cubic-bezier(0.16, 1, 0.3, 1), transform ${ANIM_DURATION}ms cubic-bezier(0.16, 1, 0.3, 1)`,\n };\n const slideMap = { top: '8px', bottom: '-8px', left: '8px', right: '-8px' };\n const axis = position === 'top' || position === 'bottom' ? 'Y' : 'X';\n\n if (animState === 'opening' || animState === 'idle') {\n return { ...base, opacity: 0, transform: `translate${axis}(${slideMap[position]}) scale(0.97)` };\n }\n if (animState === 'open') {\n return { ...base, opacity: 1, transform: 'translateY(0) scale(1)' };\n }\n return { ...base, opacity: 0, transform: `translate${axis}(${slideMap[position]}) scale(0.98)`, pointerEvents: 'none' };\n };\n\n // ── Trigger handlers ───────────────────────────────────────────────────\n\n const handleClick = useCallback(() => {\n if (trigger !== 'click') return;\n if (open) doClose();\n else doOpen();\n }, [trigger, open, doClose, doOpen]);\n\n const handleMouseEnter = useCallback(() => {\n if (trigger !== 'hover') return;\n if (hoverTimerRef.current) clearTimeout(hoverTimerRef.current);\n if (!open) doOpen();\n }, [trigger, open, doOpen]);\n\n const handleMouseLeave = useCallback(() => {\n if (trigger !== 'hover') return;\n hoverTimerRef.current = setTimeout(() => {\n doClose();\n }, 150);\n }, [trigger, doClose]);\n\n useEffect(() => {\n return () => {\n if (hoverTimerRef.current) clearTimeout(hoverTimerRef.current);\n };\n }, []);\n\n // ── Portal ─────────────────────────────────────────────────────────────\n\n const popoverEl = visible\n ? createPortal(\n <div\n ref={popoverRef}\n className={className}\n onMouseEnter={() => {\n if (trigger === 'hover' && hoverTimerRef.current) {\n clearTimeout(hoverTimerRef.current);\n }\n }}\n onMouseLeave={handleMouseLeave}\n style={{\n position: 'fixed',\n top: coords.top,\n left: coords.left,\n zIndex: 99999,\n padding: '16px',\n backgroundColor: t.background,\n border: `1px solid ${t.border}`,\n borderRadius: '12px',\n color: t.text,\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '14px',\n lineHeight: 'normal',\n boxShadow: t.shadow,\n backdropFilter: 'blur(20px)',\n WebkitBackdropFilter: 'blur(20px)',\n minWidth: '120px',\n ...getAnimStyle(),\n ...style,\n }}\n >\n {content}\n </div>,\n document.body\n )\n : null;\n\n return (\n <>\n {React.cloneElement(children, {\n ref: triggerRef,\n onClick: (e: React.MouseEvent) => {\n handleClick();\n children.props.onClick?.(e);\n },\n onMouseEnter: (e: React.MouseEvent) => {\n handleMouseEnter();\n children.props.onMouseEnter?.(e);\n },\n onMouseLeave: (e: React.MouseEvent) => {\n handleMouseLeave();\n children.props.onMouseLeave?.(e);\n },\n } as any)}\n {popoverEl}\n </>\n );\n};\n\nPopover.displayName = 'Popover';\n","import React from 'react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ───────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n text: '#ffffff',\n textSecondary: '#ACACAC',\n iconColor: 'rgba(255,255,255,0.2)',\n },\n light: {\n text: '#1a1a1a',\n textSecondary: '#888888',\n iconColor: 'rgba(0,0,0,0.15)',\n },\n} as const;\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface EmptyStateProps {\n /** Ikona zobrazená nad titulkem. */\n icon?: React.ReactNode;\n /** Hlavní titulek prázdného stavu. */\n title: string;\n /** Doplňkový popis. */\n description?: string;\n /** Akční prvek — typicky tlačítko. */\n action?: React.ReactNode;\n /** Dodatečná CSS třída. */\n className?: string;\n /** Další inline styly. */\n style?: React.CSSProperties;\n}\n\n// ─── EmptyState ──────────────────────────────────────────────────────────────\n\n/**\n * Prázdný stav dle SM-UI design systému.\n *\n * Centrovaný layout s volitelnou ikonou, titulkem,\n * popisem a akčním tlačítkem.\n *\n * @example\n * ```tsx\n * <EmptyState\n * icon={<InboxIcon />}\n * title=\"Žádné výsledky\"\n * description=\"Zkuste upravit filtr nebo vytvořit nový záznam.\"\n * action={<Button>Vytvořit záznam</Button>}\n * />\n * ```\n */\nexport const EmptyState: React.FC<EmptyStateProps> = ({\n icon,\n title,\n description,\n action,\n className,\n style,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n\n return (\n <div\n className={className}\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n textAlign: 'center',\n padding: '48px 24px',\n gap: '12px',\n ...style,\n }}\n >\n {icon && (\n <div\n style={{\n fontSize: '48px',\n lineHeight: 1,\n color: t.iconColor,\n marginBottom: '4px',\n }}\n >\n {icon}\n </div>\n )}\n\n <div\n style={{\n fontFamily: \"'Zalando Sans Expanded', sans-serif\",\n fontWeight: 500,\n fontSize: '18px',\n lineHeight: 'normal',\n color: t.text,\n }}\n >\n {title}\n </div>\n\n {description && (\n <div\n style={{\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '14px',\n lineHeight: '1.5',\n color: t.textSecondary,\n maxWidth: '360px',\n }}\n >\n {description}\n </div>\n )}\n\n {action && (\n <div style={{ marginTop: '8px' }}>\n {action}\n </div>\n )}\n </div>\n );\n};\n\nEmptyState.displayName = 'EmptyState';\n","import React from 'react';\nimport { TrendUpIcon, TrendDownIcon } from '@phosphor-icons/react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ───────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n background: 'rgba(3,3,3,0.75)',\n border: 'rgba(255,255,255,0.08)',\n text: '#ffffff',\n label: '#ACACAC',\n trendUp: '#34C759',\n trendDown: '#EF3838',\n trendNeutral: '#ACACAC',\n iconColor: 'rgba(255,255,255,0.15)',\n },\n light: {\n background: 'rgba(255,255,255,0.85)',\n border: 'rgba(0,0,0,0.08)',\n text: '#1a1a1a',\n label: '#888888',\n trendUp: '#28A745',\n trendDown: '#EF3838',\n trendNeutral: '#888888',\n iconColor: 'rgba(0,0,0,0.08)',\n },\n} as const;\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface StatProps {\n /** Popisek statistiky. */\n label: string;\n /** Hodnota statistiky. */\n value: string | number;\n /** Procentuální změna (zobrazí se se znaménkem). */\n change?: number;\n /** Doplňkový text k procentuální změně. */\n changeLabel?: string;\n /** Ikona zobrazená vedle hodnoty. */\n icon?: React.ReactNode;\n /**\n * Směr trendu — ovlivňuje barvu a ikonu šipky.\n * @default 'neutral'\n */\n trend?: 'up' | 'down' | 'neutral';\n /** Dodatečná CSS třída. */\n className?: string;\n /** Další inline styly. */\n style?: React.CSSProperties;\n}\n\n// ─── Stat ────────────────────────────────────────────────────────────────────\n\n/**\n * Statistický ukazatel dle SM-UI design systému.\n *\n * Kompaktní kartička s popiskem, hodnotou, procentuální změnou\n * a volitelnou ikonou. Barva trendu se řídí hodnotou `trend`.\n *\n * @example\n * ```tsx\n * <Stat label=\"Objednávky\" value={1284} change={12.5} trend=\"up\" />\n * <Stat label=\"Náklady\" value=\"€ 45 320\" change={-3.2} trend=\"down\" />\n * ```\n */\nexport const Stat: React.FC<StatProps> = ({\n label,\n value,\n change,\n changeLabel,\n icon,\n trend = 'neutral',\n className,\n style,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n\n const trendColor =\n trend === 'up' ? t.trendUp : trend === 'down' ? t.trendDown : t.trendNeutral;\n\n const formatChange = (val: number) => {\n const sign = val > 0 ? '+' : '';\n return `${sign}${val.toFixed(1)} %`;\n };\n\n return (\n <div\n className={className}\n style={{\n display: 'flex',\n alignItems: 'flex-start',\n gap: '12px',\n backgroundColor: t.background,\n border: `1px solid ${t.border}`,\n borderRadius: '12px',\n padding: '16px 20px',\n ...style,\n }}\n >\n {icon && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '40px',\n height: '40px',\n borderRadius: '10px',\n backgroundColor: t.iconColor,\n flexShrink: 0,\n color: t.text,\n }}\n >\n {icon}\n </div>\n )}\n\n <div style={{ flex: 1, minWidth: 0 }}>\n <div\n style={{\n fontFamily: \"'Zalando Sans Expanded', sans-serif\",\n fontWeight: 400,\n fontSize: '11px',\n textTransform: 'uppercase',\n letterSpacing: '0.03em',\n color: t.label,\n lineHeight: 'normal',\n marginBottom: '4px',\n }}\n >\n {label}\n </div>\n\n <div\n style={{\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontWeight: 600,\n fontSize: '24px',\n lineHeight: 'normal',\n color: t.text,\n }}\n >\n {value}\n </div>\n\n {change !== undefined && (\n <div\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '4px',\n marginTop: '6px',\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '13px',\n lineHeight: 'normal',\n color: trendColor,\n }}\n >\n {trend === 'up' && <TrendUpIcon size={14} color={trendColor} />}\n {trend === 'down' && <TrendDownIcon size={14} color={trendColor} />}\n <span>{formatChange(change)}</span>\n {changeLabel && (\n <span style={{ color: t.label, marginLeft: '2px' }}>\n {changeLabel}\n </span>\n )}\n </div>\n )}\n </div>\n </div>\n );\n};\n\nStat.displayName = 'Stat';\n","import React from 'react';\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport type AvatarSize = 'sm' | 'md' | 'lg' | number;\n\nexport interface AvatarProps {\n /**\n * Iniciály zobrazené uvnitř avataru (např. `\"DC\"`, `\"JN\"`).\n * Automaticky převedeny na velká písmena.\n */\n initials: string;\n /**\n * Velikost avataru.\n * - `'sm'` — 40 px\n * - `'md'` — 70 px *(výchozí)*\n * - `'lg'` — 96 px\n * - `number` — přesná hodnota v pixelech\n * @default 'md'\n */\n size?: AvatarSize;\n /**\n * Zaoblení rohů kontejneru avataru.\n * @default '8px'\n */\n borderRadius?: React.CSSProperties['borderRadius'];\n /**\n * Přístupný popisek čtený čtečkami obrazovky.\n * Pokud není zadán, použije se `\"Avatar {initials}\"`.\n */\n 'aria-label'?: string;\n /** Další inline styly pro kořenový element. */\n style?: React.CSSProperties;\n /** Dodatečná CSS třída pro kořenový element. */\n className?: string;\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\nconst resolveSize = (size: AvatarSize): number => {\n if (typeof size === 'number') return size;\n return { sm: 40, md: 70, lg: 96 }[size];\n};\n\n// ─── Component ───────────────────────────────────────────────────────────────\n\n/**\n * Kruhový / čtvercový avatar zobrazující iniciály uživatele\n * na oranžovém gradientním pozadí.\n *\n * @example\n * ```tsx\n * <Avatar initials=\"DC\" />\n * <Avatar initials=\"JN\" size=\"lg\" />\n * <Avatar initials=\"AB\" size={56} borderRadius=\"50%\" />\n * ```\n */\nexport const Avatar: React.FC<AvatarProps> = ({\n initials,\n size = 'md',\n borderRadius = '8px',\n style,\n className,\n 'aria-label': ariaLabel,\n}) => {\n const px = resolveSize(size);\n\n const containerStyle: React.CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: px,\n height: px,\n borderRadius,\n backgroundImage: 'linear-gradient(128deg, #EC6608 0%, #F6540E 100%)',\n flexShrink: 0,\n userSelect: 'none',\n WebkitUserSelect: 'none',\n ...style,\n };\n\n const textStyle: React.CSSProperties = {\n fontFamily: \"'Zalando Sans Expanded', sans-serif\",\n fontWeight: 700,\n fontStyle: 'normal',\n // Scale font roughly to 34 % of the container size\n fontSize: Math.round(px * 0.34),\n color: '#ffffff',\n textTransform: 'uppercase',\n textAlign: 'center',\n lineHeight: 'normal',\n whiteSpace: 'nowrap',\n };\n\n return (\n <div\n style={containerStyle}\n className={className}\n role=\"img\"\n aria-label={ariaLabel ?? `Avatar ${initials.toUpperCase()}`}\n >\n <span style={textStyle}>{initials.toUpperCase()}</span>\n </div>\n );\n};\n","import React from 'react';\nimport { Funnel as FunnelIcon, PencilSimple as PencilSimpleIcon, Trash as TrashIcon } from '@phosphor-icons/react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ───────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n tagBg: '#1e1e1e',\n tagBorder: 'rgba(255,255,255,0.3)',\n tagText: '#ffffff',\n itemBg: 'rgba(3,3,3,0.6)',\n itemBorder: 'rgba(255,255,255,0.3)',\n itemText: '#ffffff',\n actionColor: 'rgba(255,255,255,0.5)',\n },\n light: {\n tagBg: '#f0f0f0',\n tagBorder: 'rgba(0,0,0,0.15)',\n tagText: '#1a1a1a',\n itemBg: 'rgba(255,255,255,0.85)',\n itemBorder: 'rgba(0,0,0,0.15)',\n itemText: '#1a1a1a',\n actionColor: 'rgba(0,0,0,0.4)',\n },\n} as const;\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface TagProps {\n /**\n * Textový popisek zobrazený uvnitř tagu.\n */\n label: string;\n /**\n * Callback volaný při kliknutí na tlačítko odebrání (✕).\n * Pokud není zadán, tlačítko se nezobrazí.\n */\n onRemove?: () => void;\n /** Další inline styly pro kořenový element. */\n style?: React.CSSProperties;\n /** Dodatečná CSS třída pro kořenový element. */\n className?: string;\n}\n\nexport interface BadgeProps {\n /**\n * Text zobrazený uvnitř badge.\n * Automaticky převeden na velká písmena dle SM-UI design systému.\n */\n label: string;\n /** Další inline styly pro kořenový element. */\n style?: React.CSSProperties;\n /** Dodatečná CSS třída pro kořenový element. */\n className?: string;\n}\n\nexport interface TagItemProps {\n /**\n * Hlavní popisek / název zobrazený v řádku seznamu.\n */\n label: string;\n /**\n * Callback volaný při kliknutí na tlačítko **filtrování**.\n * Pokud není zadán, tlačítko se nezobrazí.\n */\n onFilter?: () => void;\n /**\n * Callback volaný při kliknutí na tlačítko **úpravy** (tužka).\n * Pokud není zadán, tlačítko se nezobrazí.\n */\n onEdit?: () => void;\n /**\n * Callback volaný při kliknutí na tlačítko **smazání** (koš).\n * Pokud není zadán, tlačítko se nezobrazí.\n */\n onDelete?: () => void;\n /**\n * Zda zobrazit sloupec s akcemi.\n * Nastavte na `false` pro řádek pouze ke čtení.\n * @default true\n */\n showActions?: boolean;\n /** Další inline styly pro kořenový element. */\n style?: React.CSSProperties;\n /** Dodatečná CSS třída pro kořenový element. */\n className?: string;\n}\n\n// ─── Internal icon button ─────────────────────────────────────────────────────\n\ninterface ActionBtnProps {\n onClick?: () => void;\n title: string;\n color: string;\n children: React.ReactNode;\n}\n\nconst ActionBtn: React.FC<ActionBtnProps> = ({ onClick, title, color, children }) => (\n <button\n type=\"button\"\n onClick={onClick}\n title={title}\n aria-label={title}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n padding: 0,\n color,\n width: 16,\n height: 16,\n flexShrink: 0,\n transition: 'opacity 0.15s ease',\n }}\n >\n {children}\n </button>\n);\n\n// ─── Tag ─────────────────────────────────────────────────────────────────────\n\n/**\n * Malý odebíratelný štítek pro kategorizaci nebo označení položek.\n * Tlačítko odebrání (✕) se zobrazí pouze pokud je zadáno `onRemove`.\n *\n * @example\n * ```tsx\n * <Tag label=\"React\" />\n * <Tag label=\"TypeScript\" onRemove={() => removeTag('ts')} />\n * ```\n */\nexport const Tag: React.FC<TagProps> = ({ label, onRemove, style, className }) => {\n const t = tokens[useTheme()];\n\n return (\n <div\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '8px',\n padding: '4px 8px',\n backgroundColor: t.tagBg,\n border: `1px solid ${t.tagBorder}`,\n borderRadius: '4px',\n ...style,\n }}\n className={className}\n >\n <span style={{\n fontFamily: \"'Zalando Sans Expanded', sans-serif\",\n fontWeight: 400,\n fontSize: '10px',\n color: t.tagText,\n whiteSpace: 'nowrap',\n lineHeight: 'normal',\n }}>\n {label}\n </span>\n {onRemove && (\n <button\n type=\"button\"\n onClick={onRemove}\n aria-label={`Odebrat ${label}`}\n style={{\n display: 'flex',\n alignItems: 'center',\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n padding: 0,\n color: t.tagText,\n opacity: 0.6,\n fontSize: '8px',\n lineHeight: 1,\n }}\n >\n ✕\n </button>\n )}\n </div>\n );\n};\n\n// ─── Badge ────────────────────────────────────────────────────────────────────\n\n/**\n * Malý stavový badge vykreslený jako oranžová pilulka.\n * Text je automaticky převeden na velká písmena.\n *\n * @example\n * ```tsx\n * <Badge label=\"Novinka\" />\n * <Badge label=\"Beta\" />\n * ```\n */\nexport const Badge: React.FC<BadgeProps> = ({ label, style, className }) => (\n <div\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '2px 16px',\n backgroundColor: 'rgba(246,84,14,0.8)',\n borderRadius: '12px',\n fontFamily: \"'Zalando Sans Expanded', sans-serif\",\n fontWeight: 400,\n fontSize: '10px',\n color: '#ffffff',\n textTransform: 'uppercase',\n whiteSpace: 'nowrap',\n lineHeight: 'normal',\n ...style,\n }}\n className={className}\n >\n {label}\n </div>\n);\n\n// ─── TagItem ──────────────────────────────────────────────────────────────────\n\n/**\n * Řádek seznamu zobrazující pojmenovaný tag s volitelnými akčními tlačítky\n * (filtrování, úprava, smazání).\n *\n * Tlačítka se jednotlivě skryjí, pokud nejsou zadány příslušné callbacky.\n * Nastavte `showActions={false}` pro skrytí celého sloupce akcí.\n *\n * @example\n * ```tsx\n * <TagItem label=\"Domovská stránka\" onEdit={editTag} onDelete={deleteTag} />\n * <TagItem label=\"Blog\" showActions={false} />\n * ```\n */\nexport const TagItem: React.FC<TagItemProps> = ({\n label,\n onFilter,\n onEdit,\n onDelete,\n showActions = true,\n style,\n className,\n}) => {\n const t = tokens[useTheme()];\n const hasAnyAction = onFilter || onEdit || onDelete;\n\n return (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '12px',\n backgroundColor: t.itemBg,\n border: `1px solid ${t.itemBorder}`,\n borderRadius: '8px',\n ...style,\n }}\n className={className}\n >\n <span style={{\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontWeight: 400,\n fontSize: '16px',\n color: t.itemText,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n flex: 1,\n minWidth: 0,\n lineHeight: 'normal',\n }}>\n {label}\n </span>\n\n {showActions && hasAnyAction && (\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px', marginLeft: '12px', flexShrink: 0 }}>\n {onFilter && (\n <ActionBtn onClick={onFilter} title=\"Filtrovat\" color={t.actionColor}>\n <FunnelIcon size={14} color=\"currentColor\" />\n </ActionBtn>\n )}\n {onEdit && (\n <ActionBtn onClick={onEdit} title=\"Upravit\" color={t.actionColor}>\n <PencilSimpleIcon size={14} color=\"currentColor\" />\n </ActionBtn>\n )}\n {onDelete && (\n <ActionBtn onClick={onDelete} title=\"Smazat\" color={t.actionColor}>\n <TrashIcon size={14} color=\"currentColor\" />\n </ActionBtn>\n )}\n </div>\n )}\n </div>\n );\n};\n","import React, { useState, useEffect, useCallback, useRef } from 'react';\nimport { createPortal } from 'react-dom';\nimport { XIcon } from '@phosphor-icons/react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ──────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n overlay: 'rgba(0,0,0,0.4)',\n cardBg: 'rgba(24,24,24,0.65)',\n cardBorder: 'rgba(255,255,255,0.1)',\n titleText: '#ffffff',\n bodyText: '#eaeaea',\n closeHover: 'rgba(255,255,255,0.08)',\n closeColor: '#ACACAC',\n divider: 'rgba(255,255,255,0.08)',\n shadow: '0 24px 60px rgba(0,0,0,0.6), 0 0 0 1px rgba(255,255,255,0.04) inset',\n },\n light: {\n overlay: 'rgba(0,0,0,0.18)',\n cardBg: 'rgba(255,255,255,0.65)',\n cardBorder: 'rgba(0,0,0,0.08)',\n titleText: '#1a1a1a',\n bodyText: '#333333',\n closeHover: 'rgba(0,0,0,0.05)',\n closeColor: '#888888',\n divider: 'rgba(0,0,0,0.06)',\n shadow: '0 24px 60px rgba(0,0,0,0.15), 0 0 0 1px rgba(0,0,0,0.03) inset',\n },\n} as const;\n\n// ─── Animation duration ─────────────────────────────────────────────────────\n\nconst ANIM_DURATION = 180; // ms\n\n// ─── Size config ────────────────────────────────────────────────────────────\n\nconst sizeConfig = {\n sm: { width: '400px', maxHeight: '70vh' },\n md: { width: '560px', maxHeight: '80vh' },\n lg: { width: '720px', maxHeight: '85vh' },\n fullscreen: { width: '100vw', maxHeight: '100vh' },\n} as const;\n\n// ─── Types ──────────────────────────────────────────────────────────────────\n\nexport interface ModalProps {\n /** Řídí zobrazení modálního okna. */\n open: boolean;\n /** Voláno při zavření modálu. */\n onClose: () => void;\n /** Titulek zobrazený v záhlaví modálu. */\n title?: string;\n /** Obsah těla modálu. */\n children: React.ReactNode;\n /** Obsah patičky modálu (tlačítka apod.). */\n footer?: React.ReactNode;\n /** Velikostní preset modálu. @default 'md' */\n size?: 'sm' | 'md' | 'lg' | 'fullscreen';\n /** Zavře modál kliknutím na překryvnou vrstvu. @default true */\n closeOnOverlay?: boolean;\n /** Zavře modál stisknutím klávesy Escape. @default true */\n closeOnEscape?: boolean;\n /** Zobrazí zavírací tlačítko (×) v záhlaví. @default true */\n showClose?: boolean;\n /** Dodatečná CSS třída pro kartu modálu. */\n className?: string;\n /** Další inline styly pro kartu modálu. */\n style?: React.CSSProperties;\n}\n\n// ─── Modal ──────────────────────────────────────────────────────────────────\n\n/**\n * Modální dialog dle SM-UI design systému.\n *\n * Vykresluje se přes React portál s překryvnou vrstvou,\n * podporuje animace otevření / zavření, focus trap\n * a zamezení scrollu pozadí.\n *\n * @example\n * ```tsx\n * <Modal open={isOpen} onClose={() => setOpen(false)} title=\"Potvrzení\">\n * <p>Opravdu chcete pokračovat?</p>\n * </Modal>\n * ```\n */\nexport const Modal: React.FC<ModalProps> = ({\n open,\n onClose,\n title,\n children,\n footer,\n size = 'md',\n closeOnOverlay = true,\n closeOnEscape = true,\n showClose = true,\n className,\n style,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n const sc = sizeConfig[size];\n\n const [visible, setVisible] = useState(false);\n const [animState, setAnimState] = useState<'idle' | 'opening' | 'open' | 'closing'>('idle');\n const cardRef = useRef<HTMLDivElement>(null);\n const previousFocusRef = useRef<Element | null>(null);\n\n // ── Open / close animation ──────────────────────────────────────────────\n\n useEffect(() => {\n if (open) {\n previousFocusRef.current = document.activeElement;\n setVisible(true);\n setAnimState('opening');\n requestAnimationFrame(() => {\n requestAnimationFrame(() => setAnimState('open'));\n });\n // Zabránit scrollu těla\n document.body.style.overflow = 'hidden';\n } else if (visible) {\n setAnimState('closing');\n const timer = setTimeout(() => {\n setVisible(false);\n setAnimState('idle');\n document.body.style.overflow = '';\n // Vrátit focus\n if (previousFocusRef.current instanceof HTMLElement) {\n previousFocusRef.current.focus();\n }\n }, ANIM_DURATION);\n return () => clearTimeout(timer);\n }\n }, [open]);\n\n // ── Cleanup při unmount ─────────────────────────────────────────────────\n\n useEffect(() => {\n return () => {\n document.body.style.overflow = '';\n };\n }, []);\n\n // ── Escape key ──────────────────────────────────────────────────────────\n\n useEffect(() => {\n if (!visible || !closeOnEscape) return;\n const handler = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose();\n };\n document.addEventListener('keydown', handler);\n return () => document.removeEventListener('keydown', handler);\n }, [visible, closeOnEscape, onClose]);\n\n // ── Focus trap ──────────────────────────────────────────────────────────\n\n useEffect(() => {\n if (!visible || !cardRef.current) return;\n const card = cardRef.current;\n const focusableSelector = 'a[href], button:not([disabled]), textarea, input, select, [tabindex]:not([tabindex=\"-1\"])';\n\n const handleTab = (e: KeyboardEvent) => {\n if (e.key !== 'Tab') return;\n const focusable = card.querySelectorAll(focusableSelector);\n if (focusable.length === 0) {\n e.preventDefault();\n return;\n }\n const first = focusable[0] as HTMLElement;\n const last = focusable[focusable.length - 1] as HTMLElement;\n\n if (e.shiftKey) {\n if (document.activeElement === first) {\n e.preventDefault();\n last.focus();\n }\n } else {\n if (document.activeElement === last) {\n e.preventDefault();\n first.focus();\n }\n }\n };\n\n document.addEventListener('keydown', handleTab);\n // Automatický focus na kartu\n card.focus();\n return () => document.removeEventListener('keydown', handleTab);\n }, [visible]);\n\n // ── Animation styles ────────────────────────────────────────────────────\n\n const getOverlayStyle = (): React.CSSProperties => {\n const base: React.CSSProperties = {\n transition: `opacity ${ANIM_DURATION}ms ease`,\n };\n if (animState === 'opening' || animState === 'idle') return { ...base, opacity: 0 };\n if (animState === 'open') return { ...base, opacity: 1 };\n return { ...base, opacity: 0, pointerEvents: 'none' };\n };\n\n const getCardAnimStyle = (): React.CSSProperties => {\n const base: React.CSSProperties = {\n transition: `opacity ${ANIM_DURATION}ms cubic-bezier(0.16, 1, 0.3, 1), transform ${ANIM_DURATION}ms cubic-bezier(0.16, 1, 0.3, 1)`,\n };\n if (animState === 'opening' || animState === 'idle') {\n return { ...base, opacity: 0, transform: 'scale(0.95)' };\n }\n if (animState === 'open') {\n return { ...base, opacity: 1, transform: 'scale(1)' };\n }\n return { ...base, opacity: 0, transform: 'scale(0.97)', pointerEvents: 'none' };\n };\n\n if (!visible) return null;\n\n const isFullscreen = size === 'fullscreen';\n\n return createPortal(\n <div\n style={{\n position: 'fixed',\n inset: 0,\n zIndex: 99998,\n display: 'flex',\n alignItems: isFullscreen ? 'stretch' : 'center',\n justifyContent: 'center',\n ...getOverlayStyle(),\n }}\n >\n {/* Překryvná vrstva */}\n <div\n style={{\n position: 'absolute',\n inset: 0,\n backgroundColor: t.overlay,\n backdropFilter: 'blur(8px)',\n WebkitBackdropFilter: 'blur(8px)',\n }}\n onClick={closeOnOverlay ? onClose : undefined}\n aria-hidden=\"true\"\n />\n\n {/* Karta modálu */}\n <div\n ref={cardRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={title}\n tabIndex={-1}\n className={className}\n style={{\n position: 'relative',\n display: 'flex',\n flexDirection: 'column',\n width: sc.width,\n maxWidth: isFullscreen ? undefined : 'calc(100vw - 32px)',\n maxHeight: isFullscreen ? '100vh' : sc.maxHeight,\n backgroundColor: t.cardBg,\n border: isFullscreen ? 'none' : `1px solid ${t.cardBorder}`,\n borderRadius: isFullscreen ? 0 : '16px',\n boxShadow: t.shadow,\n backdropFilter: 'blur(32px) saturate(1.4)',\n WebkitBackdropFilter: 'blur(32px) saturate(1.4)',\n outline: 'none',\n overflow: 'hidden',\n boxSizing: 'border-box',\n ...getCardAnimStyle(),\n ...style,\n }}\n >\n {/* Záhlaví */}\n {(title || showClose) && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '20px 24px 16px',\n flexShrink: 0,\n borderBottom: `1px solid ${t.divider}`,\n }}\n >\n {title && (\n <h2\n style={{\n margin: 0,\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '18px',\n fontWeight: 600,\n lineHeight: 'normal',\n color: t.titleText,\n }}\n >\n {title}\n </h2>\n )}\n {showClose && (\n <button\n type=\"button\"\n aria-label=\"Zavřít\"\n onClick={onClose}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '32px',\n height: '32px',\n border: 'none',\n background: 'transparent',\n borderRadius: '8px',\n cursor: 'pointer',\n color: t.closeColor,\n marginLeft: 'auto',\n flexShrink: 0,\n transition: 'background-color 0.12s ease',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = t.closeHover;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n }}\n >\n <XIcon size={16} color={t.closeColor} />\n </button>\n )}\n </div>\n )}\n\n {/* Tělo */}\n <div\n style={{\n flex: 1,\n overflowY: 'auto',\n padding: '20px 24px',\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '14px',\n lineHeight: '1.6',\n color: t.bodyText,\n }}\n >\n {children}\n </div>\n\n {/* Patička */}\n {footer && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: '12px',\n padding: '16px 24px 20px',\n flexShrink: 0,\n borderTop: `1px solid ${t.divider}`,\n }}\n >\n {footer}\n </div>\n )}\n </div>\n </div>,\n document.body\n );\n};\n\nModal.displayName = 'Modal';\n","import React, { useState, useEffect, useRef } from 'react';\nimport { createPortal } from 'react-dom';\nimport { XIcon } from '@phosphor-icons/react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ──────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n overlay: 'rgba(0,0,0,0.4)',\n panelBg: 'rgba(24,24,24,0.65)',\n panelBorder: 'rgba(255,255,255,0.1)',\n titleText: '#ffffff',\n bodyText: '#eaeaea',\n closeHover: 'rgba(255,255,255,0.08)',\n closeColor: '#ACACAC',\n divider: 'rgba(255,255,255,0.08)',\n shadow: '0 0 60px rgba(0,0,0,0.5)',\n },\n light: {\n overlay: 'rgba(0,0,0,0.18)',\n panelBg: 'rgba(255,255,255,0.65)',\n panelBorder: 'rgba(0,0,0,0.08)',\n titleText: '#1a1a1a',\n bodyText: '#333333',\n closeHover: 'rgba(0,0,0,0.05)',\n closeColor: '#888888',\n divider: 'rgba(0,0,0,0.06)',\n shadow: '0 0 60px rgba(0,0,0,0.12)',\n },\n} as const;\n\n// ─── Animation duration ─────────────────────────────────────────────────────\n\nconst ANIM_DURATION = 220; // ms — lehce delší pro slide\n\n// ─── Types ──────────────────────────────────────────────────────────────────\n\nexport interface DrawerProps {\n /** Řídí zobrazení šuplíku. */\n open: boolean;\n /** Voláno při zavření šuplíku. */\n onClose: () => void;\n /** Strana, ze které se šuplík vysune. @default 'right' */\n position?: 'left' | 'right';\n /** Titulek zobrazený v záhlaví šuplíku. */\n title?: string;\n /** Obsah těla šuplíku. */\n children: React.ReactNode;\n /** Obsah patičky šuplíku. */\n footer?: React.ReactNode;\n /** Šířka panelu (px nebo CSS řetězec). @default 400 */\n width?: string | number;\n /** Zobrazí zavírací tlačítko (×). @default true */\n showClose?: boolean;\n /** Zavře šuplík kliknutím na překryvnou vrstvu. @default true */\n closeOnOverlay?: boolean;\n /** Dodatečná CSS třída pro panel šuplíku. */\n className?: string;\n /** Další inline styly pro panel šuplíku. */\n style?: React.CSSProperties;\n}\n\n// ─── Drawer ─────────────────────────────────────────────────────────────────\n\n/**\n * Vysuvný panel (Drawer) dle SM-UI design systému.\n *\n * Vykresluje se přes React portál, vysune se z levé nebo pravé strany\n * s překryvnou vrstvou a plynulou animací.\n *\n * @example\n * ```tsx\n * <Drawer open={isOpen} onClose={() => setOpen(false)} title=\"Nastavení\">\n * <p>Obsah šuplíku</p>\n * </Drawer>\n * ```\n */\nexport const Drawer: React.FC<DrawerProps> = ({\n open,\n onClose,\n position = 'right',\n title,\n children,\n footer,\n width = 400,\n showClose = true,\n closeOnOverlay = true,\n className,\n style,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n\n const [visible, setVisible] = useState(false);\n const [animState, setAnimState] = useState<'idle' | 'opening' | 'open' | 'closing'>('idle');\n const panelRef = useRef<HTMLDivElement>(null);\n\n const resolvedWidth = typeof width === 'number' ? `${width}px` : width;\n\n // ── Open / close animation ──────────────────────────────────────────────\n\n useEffect(() => {\n if (open) {\n setVisible(true);\n setAnimState('opening');\n requestAnimationFrame(() => {\n requestAnimationFrame(() => setAnimState('open'));\n });\n document.body.style.overflow = 'hidden';\n } else if (visible) {\n setAnimState('closing');\n const timer = setTimeout(() => {\n setVisible(false);\n setAnimState('idle');\n document.body.style.overflow = '';\n }, ANIM_DURATION);\n return () => clearTimeout(timer);\n }\n }, [open]);\n\n useEffect(() => {\n return () => {\n document.body.style.overflow = '';\n };\n }, []);\n\n // ── Escape key ──────────────────────────────────────────────────────────\n\n useEffect(() => {\n if (!visible) return;\n const handler = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose();\n };\n document.addEventListener('keydown', handler);\n return () => document.removeEventListener('keydown', handler);\n }, [visible, onClose]);\n\n // ── Animation styles ────────────────────────────────────────────────────\n\n const getTranslateX = (state: typeof animState) => {\n const offscreen = position === 'right' ? '100%' : '-100%';\n if (state === 'opening' || state === 'idle') return offscreen;\n if (state === 'open') return '0%';\n return offscreen;\n };\n\n const getOverlayOpacity = () => {\n if (animState === 'open') return 1;\n return 0;\n };\n\n if (!visible) return null;\n\n return createPortal(\n <div\n style={{\n position: 'fixed',\n inset: 0,\n zIndex: 99998,\n display: 'flex',\n }}\n >\n {/* Překryvná vrstva */}\n <div\n style={{\n position: 'absolute',\n inset: 0,\n backgroundColor: t.overlay,\n backdropFilter: 'blur(8px)',\n WebkitBackdropFilter: 'blur(8px)',\n opacity: getOverlayOpacity(),\n transition: `opacity ${ANIM_DURATION}ms ease`,\n ...(animState === 'closing' ? { pointerEvents: 'none' as const } : {}),\n }}\n onClick={closeOnOverlay ? onClose : undefined}\n aria-hidden=\"true\"\n />\n\n {/* Panel */}\n <div\n ref={panelRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={title}\n className={className}\n style={{\n position: 'absolute',\n top: 0,\n bottom: 0,\n [position]: 0,\n width: resolvedWidth,\n maxWidth: '100vw',\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: t.panelBg,\n borderLeft: position === 'right' ? `1px solid ${t.panelBorder}` : 'none',\n borderRight: position === 'left' ? `1px solid ${t.panelBorder}` : 'none',\n boxShadow: t.shadow,\n backdropFilter: 'blur(32px) saturate(1.4)',\n WebkitBackdropFilter: 'blur(32px) saturate(1.4)',\n transform: `translateX(${getTranslateX(animState)})`,\n transition: `transform ${ANIM_DURATION}ms cubic-bezier(0.16, 1, 0.3, 1)`,\n boxSizing: 'border-box',\n outline: 'none',\n ...style,\n }}\n >\n {/* Záhlaví */}\n {(title || showClose) && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '20px 24px 16px',\n flexShrink: 0,\n borderBottom: `1px solid ${t.divider}`,\n }}\n >\n {title && (\n <h2\n style={{\n margin: 0,\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '18px',\n fontWeight: 600,\n lineHeight: 'normal',\n color: t.titleText,\n }}\n >\n {title}\n </h2>\n )}\n {showClose && (\n <button\n type=\"button\"\n aria-label=\"Zavřít\"\n onClick={onClose}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '32px',\n height: '32px',\n border: 'none',\n background: 'transparent',\n borderRadius: '8px',\n cursor: 'pointer',\n color: t.closeColor,\n marginLeft: 'auto',\n flexShrink: 0,\n transition: 'background-color 0.12s ease',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = t.closeHover;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n }}\n >\n <XIcon size={16} color={t.closeColor} />\n </button>\n )}\n </div>\n )}\n\n {/* Tělo */}\n <div\n style={{\n flex: 1,\n overflowY: 'auto',\n padding: '20px 24px',\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '14px',\n lineHeight: '1.6',\n color: t.bodyText,\n }}\n >\n {children}\n </div>\n\n {/* Patička */}\n {footer && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: '12px',\n padding: '16px 24px 20px',\n flexShrink: 0,\n borderTop: `1px solid ${t.divider}`,\n }}\n >\n {footer}\n </div>\n )}\n </div>\n </div>,\n document.body\n );\n};\n\nDrawer.displayName = 'Drawer';\n","import React from 'react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ──────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n text: '#ACACAC',\n activeText: '#ffffff',\n linkHover: '#E8612D',\n separator: 'rgba(255,255,255,0.3)',\n },\n light: {\n text: '#888888',\n activeText: '#1a1a1a',\n linkHover: '#E8612D',\n separator: 'rgba(0,0,0,0.25)',\n },\n} as const;\n\n// ─── Types ──────────────────────────────────────────────────────────────────\n\nexport interface BreadcrumbItem {\n /** Zobrazovaný text položky. */\n label: string;\n /** URL odkazu. Pokud chybí, položka se vykreslí jako prostý text. */\n href?: string;\n /** Voláno při kliknutí na položku. */\n onClick?: (e: React.MouseEvent) => void;\n /** Volitelná ikona vykreslená před textem. */\n icon?: React.ReactNode;\n}\n\nexport interface BreadcrumbProps {\n /** Seznam položek drobečkové navigace. */\n items: BreadcrumbItem[];\n /** Oddělovací znak mezi položkami. @default '/' */\n separator?: React.ReactNode;\n /** Dodatečná CSS třída pro obalový element. */\n className?: string;\n /** Další inline styly pro obalový element. */\n style?: React.CSSProperties;\n}\n\n// ─── Breadcrumb ─────────────────────────────────────────────────────────────\n\n/**\n * Drobečková navigace dle SM-UI design systému.\n *\n * Poslední položka je vždy zobrazena jako aktuální stránka\n * (tučnější písmo, bez odkazu).\n *\n * @example\n * ```tsx\n * <Breadcrumb\n * items={[\n * { label: 'Domů', href: '/' },\n * { label: 'Projekty', href: '/projekty' },\n * { label: 'Detail' },\n * ]}\n * />\n * ```\n */\nexport const Breadcrumb: React.FC<BreadcrumbProps> = ({\n items,\n separator = '/',\n className,\n style,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n\n return (\n <nav\n aria-label=\"Drobečková navigace\"\n className={className}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '14px',\n lineHeight: 'normal',\n ...style,\n }}\n >\n {items.map((item, idx) => {\n const isLast = idx === items.length - 1;\n\n return (\n <React.Fragment key={idx}>\n {idx > 0 && (\n <span\n aria-hidden=\"true\"\n style={{\n color: t.separator,\n userSelect: 'none',\n fontSize: '13px',\n }}\n >\n {separator}\n </span>\n )}\n\n {isLast ? (\n <span\n aria-current=\"page\"\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '6px',\n color: t.activeText,\n fontWeight: 600,\n }}\n >\n {item.icon && (\n <span style={{ display: 'flex', alignItems: 'center', flexShrink: 0 }}>\n {item.icon}\n </span>\n )}\n {item.label}\n </span>\n ) : (\n <a\n href={item.href ?? '#'}\n onClick={item.onClick}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '6px',\n color: t.text,\n fontWeight: 400,\n textDecoration: 'none',\n cursor: 'pointer',\n transition: 'color 0.12s ease',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.color = t.linkHover;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.color = t.text;\n }}\n >\n {item.icon && (\n <span style={{ display: 'flex', alignItems: 'center', flexShrink: 0 }}>\n {item.icon}\n </span>\n )}\n {item.label}\n </a>\n )}\n </React.Fragment>\n );\n })}\n </nav>\n );\n};\n\nBreadcrumb.displayName = 'Breadcrumb';\n","import React from 'react';\nimport { CaretLeftIcon, CaretRightIcon } from '@phosphor-icons/react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ──────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n text: '#ACACAC',\n activeText: '#ffffff',\n activeBg: '#E8612D',\n hoverBg: 'rgba(255,255,255,0.08)',\n disabledText: 'rgba(255,255,255,0.2)',\n border: 'rgba(255,255,255,0.12)',\n },\n light: {\n text: '#666666',\n activeText: '#ffffff',\n activeBg: '#E8612D',\n hoverBg: 'rgba(0,0,0,0.05)',\n disabledText: 'rgba(0,0,0,0.15)',\n border: 'rgba(0,0,0,0.08)',\n },\n} as const;\n\n// ─── Size config ────────────────────────────────────────────────────────────\n\nconst sizeConfig = {\n sm: { size: 28, fontSize: '12px', iconSize: 14 },\n md: { size: 36, fontSize: '14px', iconSize: 16 },\n lg: { size: 44, fontSize: '16px', iconSize: 18 },\n} as const;\n\n// ─── Types ──────────────────────────────────────────────────────────────────\n\nexport interface PaginationProps {\n /** Aktuální číslo stránky (1-indexed). */\n page: number;\n /** Celkový počet stránek. */\n totalPages: number;\n /** Voláno při změně stránky. */\n onChange: (page: number) => void;\n /** Počet stránek zobrazených kolem aktuální. @default 1 */\n siblings?: number;\n /** Zobrazí tlačítko pro první stránku. @default true */\n showFirst?: boolean;\n /** Zobrazí tlačítko pro poslední stránku. @default true */\n showLast?: boolean;\n /** Velikostní preset. @default 'md' */\n size?: 'sm' | 'md' | 'lg';\n /** Dodatečná CSS třída pro obalový element. */\n className?: string;\n /** Další inline styly pro obalový element. */\n style?: React.CSSProperties;\n}\n\n// ─── Helpers ────────────────────────────────────────────────────────────────\n\n/**\n * Vygeneruje pole stránek s trojtečkami pro mezerné úseky.\n */\nfunction getPageRange(\n page: number,\n totalPages: number,\n siblings: number,\n showFirst: boolean,\n showLast: boolean,\n): (number | 'ellipsis-start' | 'ellipsis-end')[] {\n const range: (number | 'ellipsis-start' | 'ellipsis-end')[] = [];\n\n const start = Math.max(2, page - siblings);\n const end = Math.min(totalPages - 1, page + siblings);\n\n // Vždy první stránka\n if (showFirst || page - siblings <= 1) {\n range.push(1);\n }\n\n // Trojtečka vlevo\n if (start > 2) {\n if (showFirst && !range.includes(1)) range.push(1);\n range.push('ellipsis-start');\n }\n\n // Středové stránky\n for (let i = start; i <= end; i++) {\n if (!range.includes(i)) range.push(i);\n }\n\n // Trojtečka vpravo\n if (end < totalPages - 1) {\n range.push('ellipsis-end');\n }\n\n // Vždy poslední stránka\n if ((showLast || page + siblings >= totalPages) && totalPages > 1) {\n if (!range.includes(totalPages)) range.push(totalPages);\n }\n\n return range;\n}\n\n// ─── Pagination ─────────────────────────────────────────────────────────────\n\n/**\n * Stránkovací komponenta dle SM-UI design systému.\n *\n * Zobrazuje číselné tlačítka stránek s trojtečkami pro velké rozsahy,\n * tlačítka Předchozí / Další a volitelně první / poslední stránku.\n *\n * @example\n * ```tsx\n * <Pagination page={3} totalPages={20} onChange={setPage} />\n * ```\n */\nexport const Pagination: React.FC<PaginationProps> = ({\n page,\n totalPages,\n onChange,\n siblings = 1,\n showFirst = true,\n showLast = true,\n size = 'md',\n className,\n style,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n const sc = sizeConfig[size];\n\n if (totalPages <= 0) return null;\n\n const pages = getPageRange(page, totalPages, siblings, showFirst, showLast);\n\n const buttonBase: React.CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: sc.size,\n height: sc.size,\n border: 'none',\n borderRadius: '8px',\n background: 'transparent',\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: sc.fontSize,\n fontWeight: 500,\n cursor: 'pointer',\n transition: 'background-color 0.12s ease, color 0.12s ease',\n flexShrink: 0,\n padding: 0,\n lineHeight: 'normal',\n };\n\n return (\n <nav\n aria-label=\"Stránkování\"\n className={className}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n ...style,\n }}\n >\n {/* Předchozí */}\n <button\n type=\"button\"\n aria-label=\"Předchozí stránka\"\n disabled={page <= 1}\n onClick={() => onChange(page - 1)}\n style={{\n ...buttonBase,\n color: page <= 1 ? t.disabledText : t.text,\n cursor: page <= 1 ? 'not-allowed' : 'pointer',\n }}\n onMouseEnter={(e) => {\n if (page > 1) e.currentTarget.style.backgroundColor = t.hoverBg;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n }}\n >\n <CaretLeftIcon size={sc.iconSize} color={page <= 1 ? t.disabledText : t.text} />\n </button>\n\n {/* Stránky */}\n {pages.map((item, idx) => {\n if (item === 'ellipsis-start' || item === 'ellipsis-end') {\n return (\n <span\n key={item}\n style={{\n ...buttonBase,\n cursor: 'default',\n color: t.text,\n }}\n aria-hidden=\"true\"\n >\n ...\n </span>\n );\n }\n\n const isActive = item === page;\n\n return (\n <button\n key={item}\n type=\"button\"\n aria-current={isActive ? 'page' : undefined}\n aria-label={`Stránka ${item}`}\n onClick={() => onChange(item)}\n style={{\n ...buttonBase,\n color: isActive ? t.activeText : t.text,\n backgroundColor: isActive ? t.activeBg : 'transparent',\n fontWeight: isActive ? 600 : 500,\n }}\n onMouseEnter={(e) => {\n if (!isActive) e.currentTarget.style.backgroundColor = t.hoverBg;\n }}\n onMouseLeave={(e) => {\n if (!isActive) e.currentTarget.style.backgroundColor = 'transparent';\n }}\n >\n {item}\n </button>\n );\n })}\n\n {/* Další */}\n <button\n type=\"button\"\n aria-label=\"Další stránka\"\n disabled={page >= totalPages}\n onClick={() => onChange(page + 1)}\n style={{\n ...buttonBase,\n color: page >= totalPages ? t.disabledText : t.text,\n cursor: page >= totalPages ? 'not-allowed' : 'pointer',\n }}\n onMouseEnter={(e) => {\n if (page < totalPages) e.currentTarget.style.backgroundColor = t.hoverBg;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n }}\n >\n <CaretRightIcon size={sc.iconSize} color={page >= totalPages ? t.disabledText : t.text} />\n </button>\n </nav>\n );\n};\n\nPagination.displayName = 'Pagination';\n","import React, { useState } from 'react';\nimport { CheckIcon } from '@phosphor-icons/react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ──────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n completedBg: '#E8612D',\n completedText: '#ffffff',\n activeBorder: '#E8612D',\n activeText: '#E8612D',\n activeBg: 'transparent',\n futureText: '#ACACAC',\n futureBg: 'transparent',\n futureBorder: 'rgba(255,255,255,0.2)',\n lineCompleted: '#E8612D',\n lineFuture: 'rgba(255,255,255,0.15)',\n labelText: '#ffffff',\n labelFuture: '#ACACAC',\n descText: '#ACACAC',\n descFuture: 'rgba(255,255,255,0.3)',\n hoverBg: 'rgba(232,97,45,0.12)',\n },\n light: {\n completedBg: '#E8612D',\n completedText: '#ffffff',\n activeBorder: '#E8612D',\n activeText: '#E8612D',\n activeBg: 'transparent',\n futureText: '#888888',\n futureBg: 'transparent',\n futureBorder: 'rgba(0,0,0,0.15)',\n lineCompleted: '#E8612D',\n lineFuture: 'rgba(0,0,0,0.1)',\n labelText: '#1a1a1a',\n labelFuture: '#888888',\n descText: '#888888',\n descFuture: 'rgba(0,0,0,0.3)',\n hoverBg: 'rgba(232,97,45,0.08)',\n },\n} as const;\n\n// ─── Types ──────────────────────────────────────────────────────────────────\n\nexport interface StepItem {\n /** Popisek kroku. */\n label: string;\n /** Volitelný popis kroku. */\n description?: string;\n}\n\nexport interface StepperProps {\n /** Definice kroků. */\n steps: StepItem[];\n /** Index aktivního kroku (0-indexed). */\n activeStep: number;\n /** Orientace stepperu. @default 'horizontal' */\n orientation?: 'horizontal' | 'vertical';\n /**\n * Umožní klikání na kroky pro přechod mezi nimi.\n * Lze nastavit na `true` (klikatelné všechny kroky),\n * `'completed'` (pouze dokončené a aktivní krok),\n * nebo `false` (vypnuto).\n * @default false\n */\n clickable?: boolean | 'completed';\n /** Voláno při kliknutí na krok. Vrací index zvoleného kroku. */\n onStepClick?: (stepIndex: number) => void;\n /** Dodatečná CSS třída pro obalový element. */\n className?: string;\n /** Další inline styly pro obalový element. */\n style?: React.CSSProperties;\n}\n\n// ─── Stepper ────────────────────────────────────────────────────────────────\n\n/**\n * Kroková komponenta (Stepper) dle SM-UI design systému.\n *\n * Zobrazuje číslované kroky s propojovacími čarami.\n * Dokončené kroky mají oranžové pozadí se zaškrtnutím,\n * aktivní krok má oranžový obrys, budoucí kroky jsou ztlumené.\n *\n * Lze zapnout klikatelnost kroků pomocí `clickable` a `onStepClick`,\n * což uživateli umožní přecházet mezi kroky kliknutím.\n *\n * @example\n * ```tsx\n * <Stepper\n * steps={[\n * { label: 'Kontaktní údaje' },\n * { label: 'Adresa', description: 'Doručovací adresa' },\n * { label: 'Platba' },\n * { label: 'Souhrn' },\n * ]}\n * activeStep={1}\n * clickable\n * onStepClick={(idx) => setStep(idx)}\n * />\n * ```\n */\nexport const Stepper: React.FC<StepperProps> = ({\n steps,\n activeStep,\n orientation = 'horizontal',\n clickable = false,\n onStepClick,\n className,\n style,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n const [hoveredStep, setHoveredStep] = useState<number | null>(null);\n\n const isHorizontal = orientation === 'horizontal';\n const circleSize = 32;\n\n const isStepClickable = (idx: number): boolean => {\n if (!clickable || !onStepClick) return false;\n if (clickable === 'completed') return idx <= activeStep;\n return true;\n };\n\n return (\n <div\n className={className}\n style={{\n display: 'flex',\n flexDirection: isHorizontal ? 'row' : 'column',\n alignItems: isHorizontal ? 'flex-start' : 'stretch',\n gap: 0,\n ...style,\n }}\n >\n {steps.map((step, idx) => {\n const isCompleted = idx < activeStep;\n const isActive = idx === activeStep;\n const isFuture = idx > activeStep;\n const isLast = idx === steps.length - 1;\n const canClick = isStepClickable(idx);\n const isHovered = hoveredStep === idx && canClick;\n\n // Barvy kruhu\n const circleBg = isCompleted ? t.completedBg : isHovered ? t.hoverBg : t.activeBg;\n const circleBorder = isCompleted\n ? t.completedBg\n : isActive\n ? t.activeBorder\n : isHovered\n ? t.activeBorder\n : t.futureBorder;\n const circleText = isCompleted\n ? t.completedText\n : isActive\n ? t.activeText\n : isHovered\n ? t.activeText\n : t.futureText;\n\n // Barvy textu\n const labelColor = isHovered ? t.activeText : isFuture ? t.labelFuture : t.labelText;\n const descColor = isFuture ? t.descFuture : t.descText;\n\n // Barva čáry\n const lineColor = isCompleted ? t.lineCompleted : t.lineFuture;\n\n return (\n <div\n key={idx}\n style={{\n display: 'flex',\n flexDirection: isHorizontal ? 'column' : 'row',\n alignItems: isHorizontal ? 'center' : 'flex-start',\n flex: isLast ? '0 0 auto' : '1 1 0',\n minWidth: 0,\n cursor: canClick ? 'pointer' : 'default',\n }}\n onClick={() => canClick && onStepClick?.(idx)}\n onMouseEnter={() => setHoveredStep(idx)}\n onMouseLeave={() => setHoveredStep(null)}\n >\n {/* Řádek s kruhem a čárou */}\n <div\n style={{\n display: 'flex',\n flexDirection: isHorizontal ? 'row' : 'column',\n alignItems: 'center',\n width: isHorizontal ? '100%' : 'auto',\n }}\n >\n {/* Kruh */}\n <div\n style={{\n width: circleSize,\n height: circleSize,\n borderRadius: '50%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: circleBg,\n border: `2px solid ${circleBorder}`,\n flexShrink: 0,\n boxSizing: 'border-box',\n transition: 'all 0.2s ease',\n }}\n >\n {isCompleted ? (\n <CheckIcon size={14} color={t.completedText} weight=\"bold\" />\n ) : (\n <span\n style={{\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '13px',\n fontWeight: 600,\n color: circleText,\n lineHeight: 1,\n transition: 'color 0.2s ease',\n }}\n >\n {idx + 1}\n </span>\n )}\n </div>\n\n {/* Propojovací čára */}\n {!isLast && (\n <div\n style={\n isHorizontal\n ? {\n flex: 1,\n height: '2px',\n backgroundColor: lineColor,\n margin: '0 8px',\n transition: 'background-color 0.2s ease',\n }\n : {\n width: '2px',\n flex: 1,\n minHeight: '24px',\n backgroundColor: lineColor,\n margin: '6px 0',\n marginLeft: `${circleSize / 2 - 1}px`,\n alignSelf: 'flex-start',\n transition: 'background-color 0.2s ease',\n }\n }\n />\n )}\n </div>\n\n {/* Textový popis */}\n <div\n style={{\n marginTop: isHorizontal ? '10px' : 0,\n marginLeft: isHorizontal ? 0 : '14px',\n paddingTop: isHorizontal ? 0 : '4px',\n textAlign: isHorizontal ? 'center' : 'left',\n minHeight: isHorizontal ? undefined : !isLast ? '48px' : undefined,\n }}\n >\n <div\n style={{\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '13px',\n fontWeight: isActive || isHovered ? 600 : 500,\n color: labelColor,\n lineHeight: 'normal',\n transition: 'color 0.2s ease',\n }}\n >\n {step.label}\n </div>\n {step.description && (\n <div\n style={{\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '12px',\n fontWeight: 400,\n color: descColor,\n lineHeight: 'normal',\n marginTop: '4px',\n transition: 'color 0.2s ease',\n }}\n >\n {step.description}\n </div>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n};\n\nStepper.displayName = 'Stepper';\n","import React, { useState, useRef, useEffect, useCallback } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ──────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n dropdownBg: 'rgba(24,24,24,0.95)',\n dropdownBorder: 'rgba(255,255,255,0.12)',\n text: '#eaeaea',\n textDisabled: '#666666',\n hoverBg: 'rgba(255,255,255,0.06)',\n dangerText: '#EF3838',\n dangerHover: 'rgba(239,56,56,0.08)',\n divider: 'rgba(255,255,255,0.08)',\n shadow: '0 12px 40px rgba(0,0,0,0.5), 0 0 0 1px rgba(255,255,255,0.04) inset',\n },\n light: {\n dropdownBg: 'rgba(255,255,255,0.95)',\n dropdownBorder: 'rgba(0,0,0,0.1)',\n text: '#1a1a1a',\n textDisabled: '#bbbbbb',\n hoverBg: 'rgba(0,0,0,0.04)',\n dangerText: '#EF3838',\n dangerHover: 'rgba(239,56,56,0.06)',\n divider: 'rgba(0,0,0,0.06)',\n shadow: '0 12px 40px rgba(0,0,0,0.12), 0 0 0 1px rgba(0,0,0,0.03) inset',\n },\n} as const;\n\n// ─── Animation duration ─────────────────────────────────────────────────────\n\nconst ANIM_DURATION = 180; // ms\n\n// ─── Types ──────────────────────────────────────────────────────────────────\n\nexport interface DropdownMenuItem {\n /** Zobrazovaný popisek položky. */\n label: string;\n /** Volitelná ikona vykreslená před textem. */\n icon?: React.ReactNode;\n /** Voláno při kliknutí na položku. */\n onClick?: () => void;\n /** Při `true` nelze položku vybrat. @default false */\n disabled?: boolean;\n /** Při `true` se položka zobrazí červeně (nebezpečná akce). @default false */\n danger?: boolean;\n /** Při `true` se místo položky vykreslí oddělovací čára. @default false */\n divider?: boolean;\n}\n\nexport interface DropdownMenuProps {\n /** Spouštěcí element (tlačítko apod.). */\n trigger: React.ReactNode;\n /** Seznam položek nabídky. */\n items: DropdownMenuItem[];\n /** Pozice rozbalovací nabídky vůči triggeru. @default 'bottom-left' */\n position?: 'bottom-left' | 'bottom-right';\n /** Dodatečná CSS třída pro obalový element. */\n className?: string;\n /** Další inline styly pro obalový element. */\n style?: React.CSSProperties;\n}\n\n// ─── DropdownMenu ───────────────────────────────────────────────────────────\n\n/**\n * Rozbalovací nabídka dle SM-UI design systému.\n *\n * Otevírá se kliknutím na trigger element, zavírá se kliknutím\n * mimo nebo klávesou Escape. Používá React portál\n * s chytrým pozicováním (otevře se nad triggerem, pokud pod ním není místo).\n *\n * @example\n * ```tsx\n * <DropdownMenu\n * trigger={<Button>Akce</Button>}\n * items={[\n * { label: 'Upravit', onClick: () => {} },\n * { label: 'Duplikovat', onClick: () => {} },\n * { divider: true, label: '' },\n * { label: 'Smazat', danger: true, onClick: () => {} },\n * ]}\n * />\n * ```\n */\nexport const DropdownMenu: React.FC<DropdownMenuProps> = ({\n trigger,\n items,\n position = 'bottom-left',\n className,\n style,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n\n const triggerRef = useRef<HTMLDivElement>(null);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n const [open, setOpen] = useState(false);\n const [visible, setVisible] = useState(false);\n const [animState, setAnimState] = useState<'idle' | 'opening' | 'open' | 'closing'>('idle');\n const [dropdownPos, setDropdownPos] = useState<{\n top: number;\n left: number;\n openAbove: boolean;\n }>({ top: 0, left: 0, openAbove: false });\n const [highlightIndex, setHighlightIndex] = useState(-1);\n\n // ── Open / close with animation ─────────────────────────────────────────\n\n const doOpen = useCallback(() => {\n setOpen(true);\n setVisible(true);\n setAnimState('opening');\n setHighlightIndex(-1);\n requestAnimationFrame(() => {\n requestAnimationFrame(() => setAnimState('open'));\n });\n }, []);\n\n const doClose = useCallback(() => {\n setOpen(false);\n setAnimState('closing');\n const timer = setTimeout(() => {\n setVisible(false);\n setAnimState('idle');\n }, ANIM_DURATION);\n return () => clearTimeout(timer);\n }, []);\n\n // ── Position the portal dropdown ────────────────────────────────────────\n\n const updatePosition = useCallback(() => {\n if (!triggerRef.current) return;\n const rect = triggerRef.current.getBoundingClientRect();\n const dropdownHeight = dropdownRef.current?.offsetHeight ?? 200;\n const dropdownWidth = dropdownRef.current?.offsetWidth ?? 200;\n const spaceBelow = window.innerHeight - rect.bottom - 6;\n const spaceAbove = rect.top - 6;\n const openAbove = spaceBelow < dropdownHeight && spaceAbove > spaceBelow;\n\n let left: number;\n if (position === 'bottom-right') {\n left = rect.right - dropdownWidth;\n // Zajistit, aby nepřesáhl levý okraj\n if (left < 4) left = 4;\n } else {\n left = rect.left;\n // Zajistit, aby nepřesáhl pravý okraj\n if (left + dropdownWidth > window.innerWidth - 4) {\n left = window.innerWidth - dropdownWidth - 4;\n }\n }\n\n setDropdownPos({\n top: openAbove ? rect.top - 6 : rect.bottom + 6,\n left,\n openAbove,\n });\n }, [position]);\n\n useEffect(() => {\n if (!visible) return;\n updatePosition();\n window.addEventListener('scroll', updatePosition, true);\n window.addEventListener('resize', updatePosition);\n return () => {\n window.removeEventListener('scroll', updatePosition, true);\n window.removeEventListener('resize', updatePosition);\n };\n }, [visible, updatePosition]);\n\n // ── Close on outside click ──────────────────────────────────────────────\n\n useEffect(() => {\n if (!open) return;\n const handler = (e: MouseEvent) => {\n const target = e.target as Node;\n const inTrigger = triggerRef.current?.contains(target);\n const inDropdown = dropdownRef.current?.contains(target);\n if (!inTrigger && !inDropdown) doClose();\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [open, doClose]);\n\n // ── Keyboard ────────────────────────────────────────────────────────────\n\n useEffect(() => {\n if (!open) return;\n const actionableItems = items\n .map((item, idx) => ({ item, idx }))\n .filter(({ item }) => !item.divider && !item.disabled);\n\n const handler = (e: KeyboardEvent) => {\n switch (e.key) {\n case 'Escape':\n e.preventDefault();\n doClose();\n break;\n case 'ArrowDown': {\n e.preventDefault();\n const currentActionIdx = actionableItems.findIndex(({ idx }) => idx === highlightIndex);\n const next = currentActionIdx < actionableItems.length - 1 ? currentActionIdx + 1 : 0;\n setHighlightIndex(actionableItems[next]?.idx ?? -1);\n break;\n }\n case 'ArrowUp': {\n e.preventDefault();\n const currentActionIdx = actionableItems.findIndex(({ idx }) => idx === highlightIndex);\n const prev = currentActionIdx > 0 ? currentActionIdx - 1 : actionableItems.length - 1;\n setHighlightIndex(actionableItems[prev]?.idx ?? -1);\n break;\n }\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (highlightIndex >= 0) {\n const item = items[highlightIndex];\n if (item && !item.divider && !item.disabled) {\n item.onClick?.();\n doClose();\n }\n }\n break;\n }\n };\n document.addEventListener('keydown', handler);\n return () => document.removeEventListener('keydown', handler);\n }, [open, highlightIndex, items, doClose]);\n\n // ── Animation styles ────────────────────────────────────────────────────\n\n const getDropdownAnimStyle = (): React.CSSProperties => {\n const above = dropdownPos.openAbove;\n const slideIn = above ? 'translateY(8px)' : 'translateY(-8px)';\n const slideOut = above ? 'translateY(6px)' : 'translateY(-6px)';\n const base: React.CSSProperties = {\n transition: `opacity ${ANIM_DURATION}ms cubic-bezier(0.16, 1, 0.3, 1), transform ${ANIM_DURATION}ms cubic-bezier(0.16, 1, 0.3, 1)`,\n };\n if (animState === 'opening' || animState === 'idle') {\n return { ...base, opacity: 0, transform: `${slideIn} scale(0.97)` };\n }\n if (animState === 'open') {\n return { ...base, opacity: 1, transform: 'translateY(0) scale(1)' };\n }\n return { ...base, opacity: 0, transform: `${slideOut} scale(0.98)`, pointerEvents: 'none' };\n };\n\n // ── Dropdown portal ─────────────────────────────────────────────────────\n\n const dropdown = visible\n ? createPortal(\n <div\n ref={dropdownRef}\n role=\"menu\"\n style={{\n position: 'fixed',\n ...(dropdownPos.openAbove\n ? { bottom: window.innerHeight - dropdownPos.top, left: dropdownPos.left }\n : { top: dropdownPos.top, left: dropdownPos.left }),\n minWidth: '180px',\n backgroundColor: t.dropdownBg,\n border: `1px solid ${t.dropdownBorder}`,\n borderRadius: '12px',\n boxShadow: t.shadow,\n backdropFilter: 'blur(20px)',\n WebkitBackdropFilter: 'blur(20px)',\n zIndex: 99999,\n overflow: 'hidden',\n boxSizing: 'border-box',\n padding: '6px',\n transformOrigin: dropdownPos.openAbove ? 'bottom center' : 'top center',\n ...getDropdownAnimStyle(),\n }}\n >\n {items.map((item, idx) => {\n if (item.divider) {\n return (\n <div\n key={idx}\n role=\"separator\"\n style={{\n height: '1px',\n backgroundColor: t.divider,\n margin: '4px 6px',\n }}\n />\n );\n }\n\n const isDanger = item.danger;\n const isDisabled = item.disabled;\n const isHighlighted = idx === highlightIndex;\n const textColor = isDisabled\n ? t.textDisabled\n : isDanger\n ? t.dangerText\n : t.text;\n const hoverBg = isDanger ? t.dangerHover : t.hoverBg;\n\n return (\n <div\n key={idx}\n role=\"menuitem\"\n aria-disabled={isDisabled}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '10px',\n padding: '9px 10px',\n borderRadius: '6px',\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '14px',\n fontWeight: 400,\n lineHeight: 'normal',\n color: textColor,\n backgroundColor: isHighlighted ? hoverBg : 'transparent',\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n opacity: isDisabled ? 0.5 : 1,\n transition: 'background-color 0.12s ease',\n userSelect: 'none',\n }}\n onClick={() => {\n if (isDisabled) return;\n item.onClick?.();\n doClose();\n }}\n onMouseEnter={() => {\n if (!isDisabled) setHighlightIndex(idx);\n }}\n onMouseLeave={() => setHighlightIndex(-1)}\n >\n {item.icon && (\n <span style={{ display: 'flex', alignItems: 'center', flexShrink: 0 }}>\n {item.icon}\n </span>\n )}\n <span style={{ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {item.label}\n </span>\n </div>\n );\n })}\n </div>,\n document.body\n )\n : null;\n\n return (\n <div\n className={className}\n style={{ display: 'inline-flex', position: 'relative', ...style }}\n >\n <div\n ref={triggerRef}\n onClick={() => {\n if (open) doClose();\n else doOpen();\n }}\n style={{ display: 'inline-flex', cursor: 'pointer' }}\n >\n {trigger}\n </div>\n {dropdown}\n </div>\n );\n};\n\nDropdownMenu.displayName = 'DropdownMenu';\n","import React, { useState } from 'react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ───────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n default: '#ffffff',\n danger: '#EF3838',\n hoverBg: 'rgba(0,0,0,0.7)',\n },\n light: {\n default: '#1a1a1a',\n danger: '#EF3838',\n hoverBg: 'rgba(0,0,0,0.06)',\n },\n} as const;\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport type LinkVariant = 'default' | 'danger';\n\nexport interface LinkProps\n extends Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, 'color'> {\n /**\n * Barevná varianta.\n * - `'default'` — bílá (tmavý režim) / tmavá (světlý režim)\n * - `'danger'` — červená `#EF3838` v obou režimech\n * @default 'default'\n */\n variant?: LinkVariant;\n /**\n * Ikona vykreslená vedle textu odkazu.\n * Typicky 14×14 SVG nebo komponenta ikony.\n */\n icon?: React.ReactNode;\n /**\n * Na které straně se ikona zobrazí vzhledem k textu.\n * @default 'left'\n */\n iconPosition?: 'left' | 'right';\n /**\n * Zda zobrazit ikonu.\n * Umožňuje podmíněně skrýt ikonu bez odebrání prop.\n * @default true\n */\n showIcon?: boolean;\n /** Další inline styly pro `<a>` element. */\n style?: React.CSSProperties;\n /** Dodatečná CSS třída pro `<a>` element. */\n className?: string;\n}\n\n// ─── Component ───────────────────────────────────────────────────────────────\n\n/**\n * Inline odkaz / akční trigger dle SM-UI design systému.\n * Vykresluje se jako nativní `<a>` element a dědí všechny anchor atributy\n * (`href`, `target`, `rel`, `onClick`, `aria-*`, …).\n *\n * Ve variantě `danger` používá červenou (#EF3838) pro destruktivní akce.\n * Při hoveru se přidá jemné tmavé pozadí.\n *\n * @example\n * ```tsx\n * <Link href=\"/nastaveni\">Nastavení</Link>\n * <Link variant=\"danger\" onClick={onDelete} icon={<TrashIcon />}>Smazat</Link>\n * <Link icon={<ArrowIcon />} iconPosition=\"right\" href=\"/dalsi\">Další krok</Link>\n * ```\n */\nexport const Link: React.FC<LinkProps> = ({\n variant = 'default',\n icon,\n iconPosition = 'left',\n showIcon = true,\n children,\n style,\n className,\n onMouseEnter,\n onMouseLeave,\n target,\n rel,\n ...rest\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n const [hovered, setHovered] = useState(false);\n\n const color = variant === 'danger' ? t.danger : t.default;\n\n const linkStyle: React.CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '6px',\n padding: '4px 8px',\n borderRadius: '4px',\n backgroundColor: hovered ? t.hoverBg : 'transparent',\n fontFamily: \"'Zalando Sans Expanded', sans-serif\",\n fontStyle: 'normal',\n fontWeight: 400,\n fontSize: '12px',\n lineHeight: 'normal',\n color,\n textDecoration: 'none',\n cursor: 'pointer',\n whiteSpace: 'nowrap',\n transition: 'background-color 0.15s ease',\n userSelect: 'none',\n WebkitUserSelect: 'none',\n ...style,\n };\n\n const iconEl = showIcon && icon\n ? <span style={{ display: 'flex', alignItems: 'center', flexShrink: 0 }}>{icon}</span>\n : null;\n\n return (\n <a\n style={linkStyle}\n className={className}\n target={target}\n rel={rel ?? (target === '_blank' ? 'noopener noreferrer' : undefined)}\n onMouseEnter={(e) => { setHovered(true); onMouseEnter?.(e); }}\n onMouseLeave={(e) => { setHovered(false); onMouseLeave?.(e); }}\n {...rest}\n >\n {iconPosition === 'right' ? (\n <>{children}{iconEl}</>\n ) : (\n <>{iconEl}{children}</>\n )}\n </a>\n );\n};\n","import React, { useState, useEffect, useRef, useCallback } from 'react';\nimport { createPortal } from 'react-dom';\nimport { MagnifyingGlassIcon } from '@phosphor-icons/react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ──────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n overlay: 'rgba(0,0,0,0.4)',\n cardBg: 'rgba(24,24,24,0.65)',\n cardBorder: 'rgba(255,255,255,0.1)',\n inputBg: 'rgba(255,255,255,0.06)',\n inputBorder: 'rgba(255,255,255,0.1)',\n inputText: '#ffffff',\n inputPlaceholder: '#888888',\n text: '#eaeaea',\n textSecondary: '#888888',\n categoryText: 'rgba(255,255,255,0.4)',\n hoverBg: 'rgba(255,255,255,0.06)',\n activeBg: 'rgba(255,255,255,0.1)',\n divider: 'rgba(255,255,255,0.08)',\n kbdBg: 'rgba(255,255,255,0.08)',\n kbdBorder: 'rgba(255,255,255,0.12)',\n kbdText: '#888888',\n shadow: '0 24px 60px rgba(0,0,0,0.6), 0 0 0 1px rgba(255,255,255,0.04) inset',\n emptyText: '#666666',\n },\n light: {\n overlay: 'rgba(0,0,0,0.18)',\n cardBg: 'rgba(255,255,255,0.65)',\n cardBorder: 'rgba(0,0,0,0.08)',\n inputBg: 'rgba(0,0,0,0.04)',\n inputBorder: 'rgba(0,0,0,0.08)',\n inputText: '#1a1a1a',\n inputPlaceholder: '#999999',\n text: '#1a1a1a',\n textSecondary: '#666666',\n categoryText: 'rgba(0,0,0,0.4)',\n hoverBg: 'rgba(0,0,0,0.04)',\n activeBg: 'rgba(0,0,0,0.07)',\n divider: 'rgba(0,0,0,0.06)',\n kbdBg: 'rgba(0,0,0,0.05)',\n kbdBorder: 'rgba(0,0,0,0.1)',\n kbdText: '#999999',\n shadow: '0 24px 60px rgba(0,0,0,0.15), 0 0 0 1px rgba(0,0,0,0.03) inset',\n emptyText: '#999999',\n },\n} as const;\n\n// ─── Animation duration ─────────────────────────────────────────────────────\n\nconst ANIM_DURATION = 180; // ms\n\n// ─── Types ──────────────────────────────────────────────────────────────────\n\nexport interface SpotlightItem {\n /** Unikátní identifikátor položky. */\n id: string;\n /** Hlavní zobrazovaný text. */\n label: string;\n /** Volitelný sekundární popis. */\n description?: string;\n /** Kategorie pro vizuální seskupení (např. \"Komponenty\", \"Hooky\"). */\n category: string;\n /** Volitelná ikona vedle textu. */\n icon?: React.ReactNode;\n /** Voláno při výběru položky (klik nebo Enter). */\n onSelect: () => void;\n}\n\nexport interface SpotlightProps {\n /** Řídí zobrazení spotlightu. */\n open: boolean;\n /** Voláno při zavření spotlightu. */\n onClose: () => void;\n /** Aktuální hodnota vyhledávacího vstupu (řízená komponenta). */\n value: string;\n /** Voláno při změně vyhledávacího vstupu. */\n onChange: (value: string) => void;\n /** Již filtrované výsledky k zobrazení, seskupené dle `category`. */\n results: SpotlightItem[];\n /** Placeholder text pro vyhledávací vstup. @default 'Hledat...' */\n placeholder?: string;\n /** Dodatečná CSS třída pro kartu spotlightu. */\n className?: string;\n /** Další inline styly pro kartu spotlightu. */\n style?: React.CSSProperties;\n}\n\n// ─── Spotlight ──────────────────────────────────────────────────────────────\n\n/**\n * Command-palette / spotlight overlay dle SM-UI design systému.\n *\n * Řízená komponenta – přijímá `value`, `onChange` a předfiltrované `results`.\n * Logika filtrování zůstává na konzumentovi.\n *\n * @example\n * ```tsx\n * const [open, setOpen] = useState(false);\n * const [query, setQuery] = useState('');\n * const filtered = items.filter(i => i.label.toLowerCase().includes(query.toLowerCase()));\n *\n * <Spotlight\n * open={open}\n * onClose={() => setOpen(false)}\n * value={query}\n * onChange={setQuery}\n * results={filtered}\n * />\n * ```\n */\nexport const Spotlight: React.FC<SpotlightProps> = ({\n open,\n onClose,\n value,\n onChange,\n results,\n placeholder = 'Hledat...',\n className,\n style,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n\n const [visible, setVisible] = useState(false);\n const [animState, setAnimState] = useState<'idle' | 'opening' | 'open' | 'closing'>('idle');\n const [highlightIndex, setHighlightIndex] = useState(-1);\n\n const inputRef = useRef<HTMLInputElement>(null);\n const listRef = useRef<HTMLDivElement>(null);\n\n // ── Hide scrollbar (webkit) ──────────────────────────────────────────\n\n useEffect(() => {\n const id = 'sm-spotlight-scrollbar-hide';\n if (document.getElementById(id)) return;\n const style = document.createElement('style');\n style.id = id;\n style.textContent = `.spotlight-results::-webkit-scrollbar { display: none; }`;\n document.head.appendChild(style);\n }, []);\n\n // ── Flatten results for keyboard navigation ─────────────────────────────\n\n const flatItems = results;\n\n // ── Open / close animation ──────────────────────────────────────────────\n\n useEffect(() => {\n if (open) {\n setVisible(true);\n setAnimState('opening');\n setHighlightIndex(-1);\n requestAnimationFrame(() => {\n requestAnimationFrame(() => setAnimState('open'));\n });\n } else if (visible) {\n setAnimState('closing');\n const timer = setTimeout(() => {\n setVisible(false);\n setAnimState('idle');\n }, ANIM_DURATION);\n return () => clearTimeout(timer);\n }\n }, [open]);\n\n // ── Auto-focus input ────────────────────────────────────────────────────\n\n useEffect(() => {\n if (visible && animState === 'open') {\n inputRef.current?.focus();\n }\n }, [visible, animState]);\n\n // ── Reset highlight when results change ─────────────────────────────────\n\n useEffect(() => {\n setHighlightIndex(-1);\n }, [results]);\n\n // ── Scroll highlighted item into view ───────────────────────────────────\n\n useEffect(() => {\n if (highlightIndex < 0 || !listRef.current) return;\n const el = listRef.current.querySelector(`[data-spotlight-index=\"${highlightIndex}\"]`);\n if (el) {\n el.scrollIntoView({ block: 'nearest' });\n }\n }, [highlightIndex]);\n\n // ── Keyboard ────────────────────────────────────────────────────────────\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n switch (e.key) {\n case 'Escape':\n e.preventDefault();\n onClose();\n break;\n case 'ArrowDown': {\n e.preventDefault();\n setHighlightIndex((prev) => {\n const next = prev + 1;\n return next >= flatItems.length ? 0 : next;\n });\n break;\n }\n case 'ArrowUp': {\n e.preventDefault();\n setHighlightIndex((prev) => {\n const next = prev - 1;\n return next < 0 ? flatItems.length - 1 : next;\n });\n break;\n }\n case 'Enter': {\n e.preventDefault();\n if (highlightIndex >= 0 && highlightIndex < flatItems.length) {\n flatItems[highlightIndex].onSelect();\n onClose();\n }\n break;\n }\n }\n },\n [flatItems, highlightIndex, onClose],\n );\n\n // ── Group results by category ───────────────────────────────────────────\n\n const grouped: { category: string; items: (SpotlightItem & { flatIndex: number })[] }[] = [];\n const categoryMap = new Map<string, (SpotlightItem & { flatIndex: number })[]>();\n\n flatItems.forEach((item, idx) => {\n let arr = categoryMap.get(item.category);\n if (!arr) {\n arr = [];\n categoryMap.set(item.category, arr);\n grouped.push({ category: item.category, items: arr });\n }\n arr.push({ ...item, flatIndex: idx });\n });\n\n // ── Animation styles ────────────────────────────────────────────────────\n\n const getOverlayStyle = (): React.CSSProperties => {\n const base: React.CSSProperties = {\n transition: `opacity ${ANIM_DURATION}ms ease`,\n };\n if (animState === 'opening' || animState === 'idle') return { ...base, opacity: 0 };\n if (animState === 'open') return { ...base, opacity: 1 };\n return { ...base, opacity: 0, pointerEvents: 'none' };\n };\n\n const getCardAnimStyle = (): React.CSSProperties => {\n const base: React.CSSProperties = {\n transition: `opacity ${ANIM_DURATION}ms cubic-bezier(0.16, 1, 0.3, 1), transform ${ANIM_DURATION}ms cubic-bezier(0.16, 1, 0.3, 1)`,\n };\n if (animState === 'opening' || animState === 'idle') {\n return { ...base, opacity: 0, transform: 'scale(0.95) translateY(-10px)' };\n }\n if (animState === 'open') {\n return { ...base, opacity: 1, transform: 'scale(1) translateY(0)' };\n }\n return { ...base, opacity: 0, transform: 'scale(0.97) translateY(-6px)', pointerEvents: 'none' };\n };\n\n if (!visible) return null;\n\n return createPortal(\n <div\n style={{\n position: 'fixed',\n inset: 0,\n zIndex: 99998,\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'center',\n paddingTop: '18vh',\n ...getOverlayStyle(),\n }}\n onKeyDown={handleKeyDown}\n >\n {/* Překryvná vrstva */}\n <div\n style={{\n position: 'absolute',\n inset: 0,\n backgroundColor: t.overlay,\n backdropFilter: 'blur(8px)',\n WebkitBackdropFilter: 'blur(8px)',\n }}\n onClick={onClose}\n aria-hidden=\"true\"\n />\n\n {/* Karta spotlightu */}\n <div\n role=\"combobox\"\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n className={className}\n style={{\n position: 'relative',\n display: 'flex',\n flexDirection: 'column',\n width: '560px',\n maxWidth: 'calc(100vw - 32px)',\n maxHeight: '60vh',\n backgroundColor: t.cardBg,\n border: `1px solid ${t.cardBorder}`,\n borderRadius: '16px',\n boxShadow: t.shadow,\n backdropFilter: 'blur(32px) saturate(1.4)',\n WebkitBackdropFilter: 'blur(32px) saturate(1.4)',\n overflow: 'hidden',\n boxSizing: 'border-box',\n ...getCardAnimStyle(),\n ...style,\n }}\n >\n {/* Vyhledávací vstup */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n padding: '14px 18px',\n borderBottom: `1px solid ${t.divider}`,\n }}\n >\n <MagnifyingGlassIcon size={18} color={t.textSecondary} />\n <input\n ref={inputRef}\n type=\"text\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n placeholder={placeholder}\n autoComplete=\"off\"\n spellCheck={false}\n style={{\n flex: 1,\n background: 'none',\n border: 'none',\n outline: 'none',\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '16px',\n fontWeight: 400,\n color: t.inputText,\n caretColor: '#FC4F00',\n }}\n />\n <kbd\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '2px 8px',\n borderRadius: '6px',\n backgroundColor: t.kbdBg,\n border: `1px solid ${t.kbdBorder}`,\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '11px',\n fontWeight: 500,\n color: t.kbdText,\n lineHeight: 'normal',\n flexShrink: 0,\n }}\n >\n Esc\n </kbd>\n </div>\n\n {/* Výsledky */}\n <div\n ref={listRef}\n role=\"listbox\"\n className=\"spotlight-results\"\n style={{\n flex: 1,\n overflowY: 'auto',\n padding: '8px',\n scrollbarWidth: 'none', /* Firefox */\n msOverflowStyle: 'none' as any, /* IE/Edge */\n }}\n >\n {grouped.length === 0 ? (\n <div\n style={{\n padding: '24px 10px',\n textAlign: 'center',\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '14px',\n color: t.emptyText,\n }}\n >\n Žádné výsledky\n </div>\n ) : (\n grouped.map((group) => (\n <div key={group.category} role=\"group\" aria-label={group.category}>\n {/* Záhlaví kategorie */}\n <div\n style={{\n padding: '8px 10px 4px',\n fontFamily: \"'Zalando Sans Expanded', sans-serif\",\n fontSize: '10px',\n fontWeight: 400,\n textTransform: 'uppercase',\n letterSpacing: '0.06em',\n color: t.categoryText,\n userSelect: 'none',\n }}\n >\n {group.category}\n </div>\n\n {/* Položky */}\n {group.items.map((item) => {\n const isHighlighted = item.flatIndex === highlightIndex;\n\n return (\n <div\n key={item.id}\n role=\"option\"\n aria-selected={isHighlighted}\n data-spotlight-index={item.flatIndex}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n padding: '10px 10px',\n borderRadius: '8px',\n cursor: 'pointer',\n backgroundColor: isHighlighted ? t.hoverBg : 'transparent',\n transition: 'background-color 0.1s ease',\n userSelect: 'none',\n }}\n onClick={() => {\n item.onSelect();\n onClose();\n }}\n onMouseEnter={() => setHighlightIndex(item.flatIndex)}\n onMouseLeave={() => setHighlightIndex(-1)}\n >\n {/* Ikona */}\n {item.icon && (\n <span\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 28,\n height: 28,\n flexShrink: 0,\n borderRadius: '8px',\n backgroundColor: isHighlighted ? t.activeBg : t.hoverBg,\n color: t.text,\n transition: 'background-color 0.1s ease',\n }}\n >\n {item.icon}\n </span>\n )}\n\n {/* Text */}\n <div style={{ flex: 1, minWidth: 0 }}>\n <div\n style={{\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '14px',\n fontWeight: 500,\n color: t.text,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {item.label}\n </div>\n {item.description && (\n <div\n style={{\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '12px',\n fontWeight: 400,\n color: t.textSecondary,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n marginTop: '1px',\n }}\n >\n {item.description}\n </div>\n )}\n </div>\n </div>\n );\n })}\n </div>\n ))\n )}\n </div>\n </div>\n </div>,\n document.body,\n );\n};\n\nSpotlight.displayName = 'Spotlight';\n","import React, { useRef, useState, useEffect, useCallback } from 'react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ──────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n bg: 'rgba(255,255,255,0.06)',\n border: 'rgba(255,255,255,0.08)',\n text: 'rgba(255,255,255,0.55)',\n textHover: 'rgba(255,255,255,0.8)',\n textActive: '#ffffff', // white on orange indicator\n textDisabled: 'rgba(255,255,255,0.25)',\n indicator: '#FC4F00',\n indicatorBorder: 'rgba(255,255,255,0.05)',\n indicatorShadow: '0 1px 6px rgba(252,79,0,0.3)',\n },\n light: {\n bg: 'rgba(0,0,0,0.04)',\n border: 'rgba(0,0,0,0.06)',\n text: 'rgba(0,0,0,0.45)',\n textHover: 'rgba(0,0,0,0.7)',\n textActive: '#ffffff', // white on orange indicator\n textDisabled: 'rgba(0,0,0,0.2)',\n indicator: '#FC4F00',\n indicatorBorder: 'rgba(0,0,0,0.03)',\n indicatorShadow: '0 1px 6px rgba(252,79,0,0.2)',\n },\n} as const;\n\n// ─── Size config ────────────────────────────────────────────────────────────\n\nconst sizeConfig = {\n sm: { padding: '4px', itemPadding: '4px 10px', fontSize: '12px', borderRadius: '6px', itemRadius: '4px' },\n md: { padding: '4px', itemPadding: '6px 14px', fontSize: '13px', borderRadius: '8px', itemRadius: '6px' },\n lg: { padding: '5px', itemPadding: '8px 18px', fontSize: '14px', borderRadius: '10px', itemRadius: '7px' },\n} as const;\n\n// ─── Types ──────────────────────────────────────────────────────────────────\n\nexport type SegmentedControlSize = 'sm' | 'md' | 'lg';\n\nexport interface SegmentedControlItem {\n /** Unikátní hodnota segmentu. */\n value: string;\n /** Zobrazovaný text. Výchozí: `value`. */\n label?: string;\n /** Zakáže tento segment. */\n disabled?: boolean;\n}\n\nexport interface SegmentedControlProps {\n /**\n * Data — pole řetězců nebo objektů `{ value, label?, disabled? }`.\n * Řetězce jsou automaticky převedeny na objekty s `value === label`.\n */\n data: (string | SegmentedControlItem)[];\n /** Aktuálně vybraná hodnota (řízená komponenta). */\n value: string;\n /** Callback volaný při změně výběru. */\n onChange: (value: string) => void;\n /**\n * Velikostní preset.\n * @default 'md'\n */\n size?: SegmentedControlSize;\n /**\n * Roztáhne komponentu na celou šířku kontejneru.\n * @default false\n */\n fullWidth?: boolean;\n /**\n * Orientace segmentů.\n * @default 'horizontal'\n */\n orientation?: 'horizontal' | 'vertical';\n /**\n * Zakáže celou komponentu.\n * @default false\n */\n disabled?: boolean;\n /** Dodatečná CSS třída. */\n className?: string;\n /** Další inline styly. */\n style?: React.CSSProperties;\n}\n\n// ─── SegmentedControl ───────────────────────────────────────────────────────\n\n/**\n * Segmentovaný přepínač dle SM-UI design systému.\n *\n * Podobný záložkám, ale v kompaktnějším inline formátu\n * s animovaným indikátorem posuvným mezi segmenty.\n *\n * @example\n * ```tsx\n * const [view, setView] = useState('list');\n *\n * <SegmentedControl\n * data={['list', 'grid', 'table']}\n * value={view}\n * onChange={setView}\n * />\n * ```\n */\nexport const SegmentedControl: React.FC<SegmentedControlProps> = ({\n data,\n value,\n onChange,\n size = 'md',\n fullWidth = false,\n orientation = 'horizontal',\n disabled = false,\n className,\n style,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n const sc = sizeConfig[size];\n\n const isVertical = orientation === 'vertical';\n\n // Normalize data\n const items: SegmentedControlItem[] = data.map((d) =>\n typeof d === 'string' ? { value: d, label: d } : d,\n );\n\n const activeIndex = items.findIndex((item) => item.value === value);\n\n // ── Refs for measuring segment positions ────────────────────────────────\n\n const containerRef = useRef<HTMLDivElement>(null);\n const segmentRefs = useRef<(HTMLButtonElement | null)[]>([]);\n\n const [indicator, setIndicator] = useState<{\n offset: number;\n size: number;\n }>({ offset: 0, size: 0 });\n\n const updateIndicator = useCallback(() => {\n const container = containerRef.current;\n const activeEl = segmentRefs.current[activeIndex];\n if (!container || !activeEl || activeIndex < 0) return;\n\n const containerRect = container.getBoundingClientRect();\n const activeRect = activeEl.getBoundingClientRect();\n\n if (isVertical) {\n setIndicator({\n offset: activeRect.top - containerRect.top,\n size: activeRect.height,\n });\n } else {\n setIndicator({\n offset: activeRect.left - containerRect.left,\n size: activeRect.width,\n });\n }\n }, [activeIndex, isVertical]);\n\n useEffect(() => {\n updateIndicator();\n }, [updateIndicator, value, data, size]);\n\n // Update on resize\n useEffect(() => {\n window.addEventListener('resize', updateIndicator);\n return () => window.removeEventListener('resize', updateIndicator);\n }, [updateIndicator]);\n\n // ── Render ──────────────────────────────────────────────────────────────\n\n return (\n <div\n ref={containerRef}\n role=\"radiogroup\"\n className={className}\n style={{\n position: 'relative',\n display: 'inline-flex',\n width: fullWidth ? '100%' : undefined,\n flexDirection: isVertical ? 'column' : 'row',\n backgroundColor: t.bg,\n border: `1px solid ${t.border}`,\n borderRadius: sc.borderRadius,\n padding: sc.padding,\n boxSizing: 'border-box',\n opacity: disabled ? 0.5 : 1,\n cursor: disabled ? 'not-allowed' : undefined,\n ...style,\n }}\n >\n {/* Sliding indicator */}\n {activeIndex >= 0 && indicator.size > 0 && (\n <div\n aria-hidden=\"true\"\n style={{\n position: 'absolute',\n borderRadius: sc.itemRadius,\n backgroundColor: t.indicator,\n border: `1px solid ${t.indicatorBorder}`,\n boxShadow: t.indicatorShadow,\n transition: `all 180ms cubic-bezier(0.16, 1, 0.3, 1)`,\n pointerEvents: 'none',\n zIndex: 0,\n ...(isVertical\n ? {\n left: sc.padding,\n right: sc.padding,\n top: indicator.offset,\n height: indicator.size,\n }\n : {\n top: sc.padding,\n bottom: sc.padding,\n left: indicator.offset,\n width: indicator.size,\n }),\n }}\n />\n )}\n\n {/* Segments */}\n {items.map((item, idx) => {\n const isActive = item.value === value;\n const isItemDisabled = disabled || item.disabled;\n\n return (\n <button\n key={item.value}\n ref={(el) => { segmentRefs.current[idx] = el; }}\n type=\"button\"\n role=\"radio\"\n aria-checked={isActive}\n disabled={isItemDisabled}\n onClick={() => {\n if (!isItemDisabled) onChange(item.value);\n }}\n style={{\n position: 'relative',\n zIndex: 1,\n flex: fullWidth ? 1 : undefined,\n padding: sc.itemPadding,\n border: '0 none',\n borderStyle: 'none',\n outline: 'none',\n borderRadius: sc.itemRadius,\n backgroundColor: 'transparent',\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: sc.fontSize,\n fontWeight: isActive ? 500 : 400,\n color: isItemDisabled\n ? t.textDisabled\n : isActive\n ? t.textActive\n : t.text,\n cursor: isItemDisabled ? 'not-allowed' : 'pointer',\n transition: 'color 180ms ease',\n textAlign: 'center',\n whiteSpace: 'nowrap',\n userSelect: 'none',\n lineHeight: 'normal',\n }}\n onMouseEnter={(e) => {\n if (!isItemDisabled && !isActive) {\n e.currentTarget.style.color = t.textHover;\n }\n }}\n onMouseLeave={(e) => {\n if (!isItemDisabled && !isActive) {\n e.currentTarget.style.color = t.text;\n }\n }}\n >\n {item.label ?? item.value}\n </button>\n );\n })}\n </div>\n );\n};\n\nSegmentedControl.displayName = 'SegmentedControl';\n","import React from 'react';\nimport { Info as InfoIcon, CheckCircle as CheckCircleIcon, XCircle as XCircleIcon, X as XIcon } from '@phosphor-icons/react';\n\n// ─── Design tokens ───────────────────────────────────────────────────────────\n// Toast is always dark-themed by design (overlays / notification tray).\n\nconst variantTokens = {\n info: {\n border: 'rgba(255,255,255,0.5)',\n background: 'rgba(3,3,3,0.55)',\n },\n success: {\n border: 'rgba(0,162,5,0.7)',\n background: 'rgba(3,21,4,0.55)',\n },\n error: {\n border: 'rgba(222,0,0,0.7)',\n background: 'rgba(21,3,3,0.55)',\n },\n} as const;\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport type ToastVariant = 'info' | 'success' | 'error';\n\nexport interface ToastProps {\n /**\n * Vizuální varianta určující barvu okraje a tón pozadí.\n * - `'info'` — bílý / neutrální okraj, tmavé pozadí\n * - `'success'` — zelený okraj (#00A205), tmavé nazelenalé pozadí\n * - `'error'` — červený okraj (#DE0000), tmavé načervenalé pozadí\n * @default 'info'\n */\n variant?: ToastVariant;\n /**\n * Tučný nadpis notifikace.\n */\n title: string;\n /**\n * Volitelný sekundární popis vykreslený pod nadpisem menším písmem.\n */\n content?: string;\n /**\n * Vlastní ikona vykreslená na levé straně.\n * Pokud chybí, použije se vestavěná SVG ikona odpovídající variantě.\n */\n icon?: React.ReactNode;\n /**\n * Callback volaný při kliknutí na tlačítko zavření (✕).\n * Pokud není zadán, tlačítko zavření se nezobrazí.\n */\n onClose?: () => void;\n /**\n * ARIA role pro přístupnost.\n * Použijte `'alert'` pro naléhavé zprávy, `'status'` pro běžné.\n * @default 'alert'\n */\n role?: 'alert' | 'status' | 'log';\n /** Další inline styly pro kořenový element. */\n style?: React.CSSProperties;\n /** Dodatečná CSS třída pro kořenový element. */\n className?: string;\n}\n\nconst defaultIcons: Record<ToastVariant, React.ReactNode> = {\n info: <InfoIcon size={28} color=\"currentColor\" />,\n success: <CheckCircleIcon size={28} color=\"#00A205\" />,\n error: <XCircleIcon size={28} color=\"#DE0000\" />,\n};\n\n// ─── Component ───────────────────────────────────────────────────────────────\n\n/**\n * Notifikace se třemi úrovněmi závažnosti.\n * Vykresluje se s efektem rozmazaného skla, vždy v tmavém režimu.\n *\n * Tlačítko zavření se zobrazí pouze pokud je zadáno `onClose`.\n * Vlastní ikona může nahradit výchozí variantní ikonu přes prop `icon`.\n *\n * @example\n * ```tsx\n * <Toast variant=\"success\" title=\"Uloženo\" content=\"Změny byly uloženy.\" onClose={dismiss} />\n * <Toast variant=\"error\" title=\"Chyba\" content=\"Něco se pokazilo.\" onClose={dismiss} />\n * <Toast variant=\"info\" title=\"Upozornění\" onClose={dismiss} />\n * ```\n */\nexport const Toast: React.FC<ToastProps> = ({\n variant = 'info',\n title,\n content,\n icon,\n onClose,\n role = 'alert',\n style,\n className,\n}) => {\n const { border, background } = variantTokens[variant];\n const resolvedIcon = icon ?? defaultIcons[variant];\n\n return (\n <div\n role={role}\n aria-live={role === 'alert' ? 'assertive' : 'polite'}\n style={{\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n gap: '8px',\n padding: '12px 12px 12px 16px',\n backgroundColor: background,\n border: `2px solid ${border}`,\n borderRadius: '8px',\n /* backdrop-filter moved to Toaster wrapper for stacking context compatibility */\n boxSizing: 'border-box',\n ...style,\n }}\n className={className}\n >\n {/* Body: icon + text */}\n <div style={{ display: 'flex', alignItems: 'center', gap: '12px', flex: 1, minWidth: 0 }}>\n <span style={{ display: 'flex', alignItems: 'center', flexShrink: 0, color: '#ffffff' }}>\n {resolvedIcon}\n </span>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '4px', flex: 1, minWidth: 0 }}>\n <span style={{\n fontFamily: \"'Zalando Sans Expanded', sans-serif\",\n fontWeight: 700,\n fontSize: '16px',\n color: '#ffffff',\n lineHeight: 'normal',\n }}>\n {title}\n </span>\n {content && (\n <span style={{\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontWeight: 400,\n fontSize: '12px',\n color: '#ffffff',\n lineHeight: 'normal',\n }}>\n {content}\n </span>\n )}\n </div>\n </div>\n\n {/* Close button */}\n {onClose && (\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Zavřít notifikaci\"\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n padding: 0,\n color: '#ffffff',\n opacity: 0.7,\n flexShrink: 0,\n }}\n >\n <XIcon size={16} color=\"currentColor\" />\n </button>\n )}\n </div>\n );\n};\n","import React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useState,\n} from 'react';\nimport { Toast } from './Toast';\nimport type { ToastVariant } from './Toast';\n\n// ─── Constants ────────────────────────────────────────────────────────────────\n\n/** How many toasts peek out behind the front one in collapsed mode. */\nconst MAX_VISIBLE_COLLAPSED = 3;\n\n/** Scale reduction per step back in the stack. */\nconst STACK_SCALE_STEP = 0.06;\n\n/** How many px each toast peeks above the one in front (collapsed mode). */\nconst STACK_PEEK_PX = 12;\n\n/** Duration of all layout transitions (ms). */\nconst TRANSITION_DURATION = 320;\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport type ToastPosition =\n | 'top-left'\n | 'top-center'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-center'\n | 'bottom-right';\n\ntype ToastLifecycle = 'entering' | 'visible' | 'leaving';\n\n/** Nastavení předávaná do `toast()` při vyvolání notifikace. */\nexport interface ToastOptions {\n /**\n * Úroveň závažnosti — ovládá barvu okraje a výchozí ikonu.\n * @default 'info'\n */\n variant?: ToastVariant;\n /** Tučný nadpis notifikace. */\n title: string;\n /** Volitelný popis vykreslený pod nadpisem. */\n content?: string;\n /**\n * Vlastní ikona nahrazující vestavěnou variantní ikonu.\n * Libovolný React uzel — SVG, obrázek, komponenta…\n */\n icon?: React.ReactNode;\n /**\n * Časový limit automatického zavření v ms.\n * Nastavte na `0` pro trvalou notifikaci, kterou je nutné zavřít ručně.\n * @default 4000\n */\n duration?: number;\n}\n\ninterface ToastItem extends Required<Pick<ToastOptions, 'variant' | 'title' | 'duration'>> {\n id: string;\n content?: string;\n icon?: React.ReactNode;\n lifecycle: ToastLifecycle;\n /** Measured height in px — filled in after first render. */\n height: number;\n}\n\n/** Hodnota vrácená hookem `useToast()`. */\nexport interface ToastContextValue {\n /**\n * Vyvolá novou notifikaci.\n * Vrací vygenerované `id` pro případné ruční zavření.\n *\n * @example\n * ```tsx\n * const { toast } = useToast();\n * toast({ variant: 'success', title: 'Uloženo', content: 'Změny byly uloženy.' });\n * ```\n */\n toast: (options: ToastOptions) => string;\n /**\n * Ručně zavře notifikaci podle jejího `id`.\n * Toast se nejprve animovaně vysune a poté se odebere z DOM.\n *\n * @example\n * ```tsx\n * const id = toast({ variant: 'info', title: 'Načítání…', duration: 0 });\n * await work();\n * dismiss(id);\n * ```\n */\n dismiss: (id: string) => void;\n}\n\n/** Props pro `<ToasterProvider>`. */\nexport interface ToasterProviderProps {\n children: React.ReactNode;\n /**\n * Pozice notifikací na obrazovce.\n * @default 'bottom-right'\n */\n position?: ToastPosition;\n /**\n * Šířka jednotlivé notifikace v px.\n * @default 380\n */\n toastWidth?: number;\n /**\n * Vertikální mezera mezi notifikacemi v **rozbalené** (hovered) podobě, v px.\n * @default 8\n */\n gap?: number;\n /**\n * Vzdálenost od okraje obrazovky v px.\n * @default 16\n */\n offset?: number;\n /**\n * Maximální počet notifikací v DOM najednou.\n * Nejstarší se odebírají při překročení limitu.\n * @default 5\n */\n maxToasts?: number;\n /**\n * Globální výchozí doba trvání notifikace v ms.\n * Přepíše se hodnotou `duration` v `toast()`, pokud je zadána.\n * Nastavte na `0` pro trvalé notifikace.\n * @default 4000\n */\n duration?: number;\n}\n\n// ─── Context ─────────────────────────────────────────────────────────────────\n\nconst ToastContext = createContext<ToastContextValue | null>(null);\n\n// ─── ID generator ─────────────────────────────────────────────────────────────\n\nlet _counter = 0;\nconst uid = () => `sm-toast-${++_counter}-${Date.now()}`;\n\n// ─── Provider ────────────────────────────────────────────────────────────────\n\n/**\n * Poskytuje toast kontext a vykresluje overlay s notifikacemi.\n * Umístěte **jednou** blízko kořene vaší aplikace.\n *\n * @example\n * ```tsx\n * // main.tsx / App.tsx\n * <ToasterProvider position=\"bottom-right\">\n * <App />\n * </ToasterProvider>\n * ```\n */\nexport const ToasterProvider: React.FC<ToasterProviderProps> = ({\n children,\n position = 'bottom-right',\n toastWidth = 380,\n gap = 8,\n offset = 16,\n maxToasts = 5,\n duration: globalDuration = 4000,\n}) => {\n const [toasts, setToasts] = useState<ToastItem[]>([]);\n\n const dismiss = useCallback((id: string) => {\n setToasts((prev) =>\n prev.map((t) => (t.id === id ? { ...t, lifecycle: 'leaving' as ToastLifecycle } : t)),\n );\n setTimeout(() => {\n setToasts((prev) => prev.filter((t) => t.id !== id));\n }, TRANSITION_DURATION + 100);\n }, []);\n\n const toast = useCallback(\n (options: ToastOptions): string => {\n const id = uid();\n const effectiveDuration = options.duration ?? globalDuration;\n const item: ToastItem = {\n id,\n variant: options.variant ?? 'info',\n title: options.title,\n content: options.content,\n icon: options.icon,\n duration: effectiveDuration,\n lifecycle: 'entering',\n height: 0,\n };\n\n setToasts((prev) => {\n const next = [...prev, item];\n return next.length > maxToasts ? next.slice(next.length - maxToasts) : next;\n });\n\n // entering → visible on next frame (triggers slide-in)\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n setToasts((prev) =>\n prev.map((t) =>\n t.id === id ? { ...t, lifecycle: 'visible' as ToastLifecycle } : t,\n ),\n );\n });\n });\n\n // Auto-dismiss\n if (effectiveDuration > 0) {\n setTimeout(() => dismiss(id), effectiveDuration);\n }\n\n return id;\n },\n [maxToasts, dismiss, globalDuration],\n );\n\n const handleHeightMeasured = useCallback((id: string, height: number) => {\n setToasts((prev) =>\n prev.map((t) => (t.id === id && t.height !== height ? { ...t, height } : t)),\n );\n }, []);\n\n return (\n <ToastContext.Provider value={{ toast, dismiss }}>\n {children}\n {toasts.length > 0 && (\n <StackContainerWrapper\n toasts={toasts}\n position={position}\n toastWidth={toastWidth}\n gap={gap}\n offset={offset}\n onDismiss={dismiss}\n onHeightMeasured={handleHeightMeasured}\n />\n )}\n </ToastContext.Provider>\n );\n};\n\n// ─── StackContainerWrapper + expanded card logic ──────────────────────────────\n// Extracted to avoid TypeScript complaints about the expandedTransformOverride prop.\n\ninterface CardWithOverrideProps {\n item: ToastItem;\n depthIndex: number;\n stackSize: number;\n expanded: boolean;\n isBottom: boolean;\n appeared: boolean;\n toastWidth: number;\n onDismiss: (id: string) => void;\n onHeightMeasured: (id: string, h: number) => void;\n expandedTransformOverride?: string;\n}\n\nconst CardWithOverride: React.FC<CardWithOverrideProps> = ({\n expandedTransformOverride,\n item,\n depthIndex,\n stackSize,\n expanded,\n isBottom,\n appeared,\n toastWidth,\n onDismiss,\n onHeightMeasured,\n}) => {\n const isLeaving = item.lifecycle === 'leaving';\n const slideOut = !appeared || isLeaving;\n\n const scale = expanded ? 1 : Math.max(0.7, 1 - depthIndex * STACK_SCALE_STEP);\n const peekOffset = expanded ? 0 : depthIndex * STACK_PEEK_PX;\n const translateY = isBottom ? -peekOffset : peekOffset;\n\n // Slide-in direction follows the toaster position:\n // bottom-* → toast enters from below, top-* → from above\n const slideTransform = isBottom\n ? 'translateY(calc(100% + 32px))'\n : 'translateY(calc(-100% - 32px))';\n\n const transform = slideOut\n ? slideTransform\n : expandedTransformOverride\n ? expandedTransformOverride\n : `scale(${scale}) translateY(${translateY}px)`;\n\n const opacity = (() => {\n if (slideOut) return 0;\n if (expanded) return 1;\n return Math.max(0.4, 1 - depthIndex * 0.18);\n })();\n\n const isHiddenByDepth = !expanded && depthIndex >= MAX_VISIBLE_COLLAPSED;\n const zIndex = stackSize - depthIndex;\n\n const measuredRef = useCallback(\n (el: HTMLDivElement | null) => {\n if (el && item.height === 0) onHeightMeasured(item.id, el.offsetHeight);\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [item.id, item.height === 0],\n );\n\n return (\n <div\n ref={measuredRef}\n style={{\n position: 'absolute',\n bottom: isBottom ? 0 : 'auto',\n top: isBottom ? 'auto' : 0,\n left: 0,\n right: 0,\n transformOrigin: isBottom ? 'bottom center' : 'top center',\n transform,\n opacity: isHiddenByDepth ? 0 : opacity,\n zIndex,\n transition: [\n `transform ${TRANSITION_DURATION}ms cubic-bezier(0.16, 1, 0.3, 1)`,\n `opacity ${TRANSITION_DURATION}ms ease`,\n ].join(', '),\n pointerEvents: depthIndex === 0 ? 'auto' : expanded ? 'auto' : 'none',\n backdropFilter: 'blur(32px) saturate(1.4)',\n WebkitBackdropFilter: 'blur(32px) saturate(1.4)',\n borderRadius: '8px',\n }}\n >\n <Toast\n variant={item.variant}\n title={item.title}\n content={item.content}\n icon={item.icon}\n onClose={() => onDismiss(item.id)}\n style={{ width: toastWidth, maxWidth: '100%', boxSizing: 'border-box' }}\n />\n </div>\n );\n};\n\ninterface StackContainerWrapperProps {\n toasts: ToastItem[];\n position: ToastPosition;\n toastWidth: number;\n gap: number;\n offset: number;\n onDismiss: (id: string) => void;\n onHeightMeasured: (id: string, h: number) => void;\n}\n\nconst StackContainerWrapper: React.FC<StackContainerWrapperProps> = ({\n toasts,\n position,\n toastWidth,\n gap,\n offset,\n onDismiss,\n onHeightMeasured,\n}) => {\n const [expanded, setExpanded] = useState(false);\n const [appearedIds, setAppearedIds] = useState<Set<string>>(new Set());\n\n const isBottom = position.startsWith('bottom');\n const isRight = position.endsWith('right');\n const isCenter = position.endsWith('center');\n\n // Track appeared toasts\n useEffect(() => {\n setAppearedIds((prev) => {\n const next = new Set(prev);\n toasts.forEach((t) => { if (t.lifecycle === 'visible') next.add(t.id); });\n // Clean up removed\n [...next].forEach((id) => { if (!toasts.find((t) => t.id === id)) next.delete(id); });\n return next;\n });\n }, [toasts]);\n\n const frontToast = toasts[toasts.length - 1];\n const frontHeight = frontToast?.height || 80;\n\n const collapsedHeight =\n frontHeight + Math.min(toasts.length - 1, MAX_VISIBLE_COLLAPSED - 1) * STACK_PEEK_PX;\n\n const expandedHeight =\n toasts.reduce((sum, t) => sum + (t.height || 80), 0) +\n Math.max(0, toasts.length - 1) * gap;\n\n const containerHeight = expanded ? expandedHeight : collapsedHeight;\n\n const horizontalStyle: React.CSSProperties = isCenter\n ? { left: '50%', transform: 'translateX(-50%)' }\n : isRight\n ? { right: offset }\n : { left: offset };\n\n return (\n <div\n style={{\n position: 'fixed',\n zIndex: 9999,\n width: toastWidth,\n maxWidth: `calc(100vw - ${offset * 2}px)`,\n height: containerHeight,\n ...(isBottom ? { bottom: offset } : { top: offset }),\n ...horizontalStyle,\n transition: `height ${TRANSITION_DURATION}ms cubic-bezier(0.16, 1, 0.3, 1)`,\n }}\n onMouseEnter={() => setExpanded(true)}\n onMouseLeave={() => setExpanded(false)}\n aria-live=\"polite\"\n aria-atomic=\"false\"\n >\n {toasts.map((item, arrayIndex) => {\n const depthIndex = toasts.length - 1 - arrayIndex;\n const appeared = appearedIds.has(item.id);\n const isLeaving = item.lifecycle === 'leaving';\n const slideOut = !appeared || isLeaving;\n\n // In expanded mode, offset each card so they stack vertically\n let expandedTransformOverride: string | undefined;\n if (expanded && !slideOut) {\n // Sum up heights of toasts that appear \"after\" (closer to front) this one\n const toastsInFront = toasts.slice(arrayIndex + 1);\n const offsetPx = toastsInFront.reduce(\n (sum, t) => sum + (t.height || 80) + gap,\n 0,\n );\n // bottom positions: container anchored at bottom, older toasts must go UP → negative Y\n // top positions: container anchored at top, older toasts must go DOWN → positive Y\n const yOffset = isBottom ? -offsetPx : offsetPx;\n expandedTransformOverride = `translateY(${yOffset}px)`;\n }\n\n return (\n <CardWithOverride\n key={item.id}\n item={item}\n depthIndex={depthIndex}\n stackSize={toasts.length}\n expanded={expanded}\n isBottom={isBottom}\n appeared={appeared}\n toastWidth={toastWidth}\n onDismiss={onDismiss}\n onHeightMeasured={onHeightMeasured}\n expandedTransformOverride={expandedTransformOverride}\n />\n );\n })}\n </div>\n );\n};\n\n// ─── Hook ─────────────────────────────────────────────────────────────────────\n\n/**\n * Vrací `{ toast, dismiss }` pro vyvolání a zavření notifikací.\n * Musí být volán uvnitř stromu `<ToasterProvider>`.\n *\n * @throws Při volání mimo `<ToasterProvider>`.\n *\n * @example\n * ```tsx\n * function UlozitTlacitko() {\n * const { toast } = useToast();\n * return (\n * <Button onClick={() => toast({ variant: 'success', title: 'Uloženo!' })}>\n * Uložit\n * </Button>\n * );\n * }\n * ```\n */\nexport const useToast = (): ToastContextValue => {\n const ctx = useContext(ToastContext);\n if (!ctx) {\n throw new Error(\n '[sm-ui] useToast() musí být volán uvnitř <ToasterProvider>. ' +\n 'Obalte kořen vaší aplikace pomocí <ToasterProvider>.',\n );\n }\n return ctx;\n};\n","import React, { useState } from 'react';\nimport { Info as InfoIcon, CheckCircle as CheckCircleIcon, Warning as WarningIcon, XCircle as XCircleIcon, X as XIcon } from '@phosphor-icons/react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ───────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n text: '#ffffff',\n titleText: '#ffffff',\n descriptionText: 'rgba(255,255,255,0.85)',\n closeColor: 'rgba(255,255,255,0.6)',\n closeHover: 'rgba(255,255,255,0.9)',\n },\n light: {\n text: '#1a1a1a',\n titleText: '#1a1a1a',\n descriptionText: 'rgba(0,0,0,0.7)',\n closeColor: 'rgba(0,0,0,0.4)',\n closeHover: 'rgba(0,0,0,0.8)',\n },\n} as const;\n\nconst variantTokens = {\n info: {\n border: 'rgba(255,255,255,0.7)',\n borderLight: 'rgba(0,0,0,0.3)',\n background: 'rgba(255,255,255,0.06)',\n backgroundLight: 'rgba(0,0,0,0.04)',\n iconColor: 'rgba(255,255,255,0.7)',\n iconColorLight: 'rgba(0,0,0,0.5)',\n },\n success: {\n border: '#00A205',\n borderLight: '#00A205',\n background: 'rgba(0,162,5,0.08)',\n backgroundLight: 'rgba(0,162,5,0.06)',\n iconColor: '#00A205',\n iconColorLight: '#00A205',\n },\n warning: {\n border: '#F5A623',\n borderLight: '#F5A623',\n background: 'rgba(245,166,35,0.08)',\n backgroundLight: 'rgba(245,166,35,0.06)',\n iconColor: '#F5A623',\n iconColorLight: '#F5A623',\n },\n error: {\n border: '#DE0000',\n borderLight: '#DE0000',\n background: 'rgba(222,0,0,0.08)',\n backgroundLight: 'rgba(222,0,0,0.06)',\n iconColor: '#DE0000',\n iconColorLight: '#DE0000',\n },\n} as const;\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport type AlertVariant = 'info' | 'success' | 'warning' | 'error';\n\nexport interface AlertProps {\n /**\n * Vizuální varianta určující barvu levého okraje a tón pozadí.\n * - `'info'` — neutrální / informační\n * - `'success'` — úspěch (zelená)\n * - `'warning'` — varování (oranžovo-žlutá)\n * - `'error'` — chyba (červená)\n * @default 'info'\n */\n variant?: AlertVariant;\n /**\n * Tučný nadpis upozornění.\n */\n title: string;\n /**\n * Volitelný popis vykreslený pod nadpisem menším písmem.\n */\n children?: React.ReactNode;\n /**\n * Vlastní ikona vykreslená na levé straně.\n * Pokud chybí, použije se vestavěná SVG ikona odpovídající variantě.\n */\n icon?: React.ReactNode;\n /**\n * Zobrazí tlačítko zavření (✕).\n * @default false\n */\n closable?: boolean;\n /**\n * Callback volaný při kliknutí na tlačítko zavření.\n */\n onClose?: () => void;\n /** Dodatečná CSS třída pro kořenový element. */\n className?: string;\n /** Další inline styly pro kořenový element. */\n style?: React.CSSProperties;\n}\n\n\n// ─── Component ───────────────────────────────────────────────────────────────\n\n/**\n * Statický banner pro zobrazení důležitých informací, varování nebo chyb.\n * Na rozdíl od `Toast` se jedná o inline prvek, nikoliv plovoucí notifikaci.\n *\n * Zobrazuje barevný levý okraj (4 px) a jemně tónované pozadí\n * odpovídající zvolené variantě. Obsahuje vestavěné ikony pro každou\n * variantu, které lze nahradit vlastní ikonou přes prop `icon`.\n *\n * @example\n * ```tsx\n * <Alert variant=\"success\" title=\"Uloženo\">Změny byly úspěšně uloženy.</Alert>\n * <Alert variant=\"error\" title=\"Chyba\" closable onClose={handleClose}>Něco se pokazilo.</Alert>\n * <Alert variant=\"warning\" title=\"Pozor\">Tato akce je nevratná.</Alert>\n * ```\n */\nexport const Alert: React.FC<AlertProps> = ({\n variant = 'info',\n title,\n children,\n icon,\n closable = false,\n onClose,\n className,\n style,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n const vt = variantTokens[variant];\n const [visible, setVisible] = useState(true);\n\n if (!visible) return null;\n\n const isLight = theme === 'light';\n const borderColor = isLight ? vt.borderLight : vt.border;\n const bgColor = isLight ? vt.backgroundLight : vt.background;\n const iconColor = isLight ? vt.iconColorLight : vt.iconColor;\n\n const defaultIcons: Record<AlertVariant, React.ReactNode> = {\n info: <InfoIcon size={24} color={iconColor} />,\n success: <CheckCircleIcon size={24} color={iconColor} />,\n warning: <WarningIcon size={24} color={iconColor} />,\n error: <XCircleIcon size={24} color={iconColor} />,\n };\n\n const resolvedIcon = icon ?? defaultIcons[variant];\n\n const handleClose = () => {\n setVisible(false);\n onClose?.();\n };\n\n return (\n <div\n role=\"alert\"\n style={{\n display: 'flex',\n alignItems: 'flex-start',\n gap: '12px',\n padding: '12px 16px',\n backgroundColor: bgColor,\n borderLeft: `4px solid ${borderColor}`,\n borderRadius: '4px',\n boxSizing: 'border-box',\n ...style,\n }}\n className={className}\n >\n {/* Ikona */}\n <span style={{ display: 'flex', alignItems: 'center', flexShrink: 0, marginTop: '1px' }}>\n {resolvedIcon}\n </span>\n\n {/* Obsah */}\n <div style={{ display: 'flex', flexDirection: 'column', gap: '4px', flex: 1, minWidth: 0 }}>\n <span style={{\n fontFamily: \"'Zalando Sans Expanded', sans-serif\",\n fontWeight: 700,\n fontSize: '14px',\n lineHeight: 'normal',\n color: t.titleText,\n }}>\n {title}\n </span>\n {children && (\n <div style={{\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontWeight: 400,\n fontSize: '13px',\n lineHeight: '1.4',\n color: t.descriptionText,\n }}>\n {children}\n </div>\n )}\n </div>\n\n {/* Tlačítko zavření */}\n {closable && (\n <button\n type=\"button\"\n onClick={handleClose}\n aria-label=\"Zavřít upozornění\"\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n padding: '2px',\n color: t.closeColor,\n flexShrink: 0,\n marginTop: '1px',\n }}\n >\n <XIcon size={16} color=\"currentColor\" />\n </button>\n )}\n </div>\n );\n};\n","import React, { useEffect, useRef, useState } from 'react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ───────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n trackBg: 'rgba(255,255,255,0.1)',\n text: '#ffffff',\n label: '#ffffff',\n },\n light: {\n trackBg: 'rgba(0,0,0,0.08)',\n text: '#1a1a1a',\n label: '#1a1a1a',\n },\n} as const;\n\n// ─── Size config ─────────────────────────────────────────────────────────────\n\nconst barSizeConfig = {\n sm: { height: 6, fontSize: '11px' },\n md: { height: 10, fontSize: '12px' },\n lg: { height: 16, fontSize: '14px' },\n} as const;\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport type ProgressBarSize = 'sm' | 'md' | 'lg';\n\nexport interface ProgressBarProps {\n /**\n * Aktuální hodnota průběhu v rozsahu 0–100.\n */\n value: number;\n /**\n * Velikostní preset určující výšku lišty.\n * - `'sm'` — 6 px\n * - `'md'` — 10 px\n * - `'lg'` — 16 px\n * @default 'md'\n */\n size?: ProgressBarSize;\n /**\n * Barva vyplněné části lišty.\n * @default '#E8612D'\n */\n color?: string;\n /**\n * Zobrazí procentuální hodnotu vedle lišty.\n * @default false\n */\n showValue?: boolean;\n /**\n * Volitelný popisek zobrazený nad lištou.\n */\n label?: string;\n /**\n * Zobrazí pruhovaný vzor na vyplněné části.\n * @default false\n */\n striped?: boolean;\n /**\n * Animuje pruhovaný vzor (vyžaduje `striped`).\n * @default false\n */\n animated?: boolean;\n /** Dodatečná CSS třída pro kořenový element. */\n className?: string;\n /** Další inline styly pro kořenový element. */\n style?: React.CSSProperties;\n}\n\nexport interface ProgressCircleProps {\n /**\n * Aktuální hodnota průběhu v rozsahu 0–100.\n */\n value: number;\n /**\n * Velikost SVG v pixelech (šířka i výška).\n * @default 64\n */\n size?: number;\n /**\n * Šířka tahu (stroke) kruhu.\n * @default 4\n */\n strokeWidth?: number;\n /**\n * Barva vyplněné části kruhu.\n * @default '#E8612D'\n */\n color?: string;\n /**\n * Zobrazí procentuální hodnotu uprostřed kruhu.\n * @default false\n */\n showValue?: boolean;\n /**\n * Volitelný popisek zobrazený pod kruhem.\n */\n label?: string;\n /** Dodatečná CSS třída pro kořenový element. */\n className?: string;\n /** Další inline styly pro kořenový element. */\n style?: React.CSSProperties;\n}\n\n// ─── Stripe animation ────────────────────────────────────────────────────────\n\nconst stripeKeyframesId = 'sm-ui-progress-stripes';\n\nconst ensureStripeKeyframes = () => {\n if (typeof document === 'undefined') return;\n if (document.getElementById(stripeKeyframesId)) return;\n const styleEl = document.createElement('style');\n styleEl.id = stripeKeyframesId;\n styleEl.textContent = `@keyframes sm-ui-progress-stripes { 0% { background-position: 1rem 0; } 100% { background-position: 0 0; } }`;\n document.head.appendChild(styleEl);\n};\n\n// ─── ProgressBar ─────────────────────────────────────────────────────────────\n\n/**\n * Horizontální lišta zobrazující průběh operace.\n *\n * Podporuje tři velikosti, volitelné pruhy (s animací),\n * zobrazení procentuální hodnoty a popisek.\n *\n * @example\n * ```tsx\n * <ProgressBar value={45} showValue />\n * <ProgressBar value={70} size=\"lg\" striped animated label=\"Nahrávání\" />\n * ```\n */\nexport const ProgressBar: React.FC<ProgressBarProps> = ({\n value,\n size = 'md',\n color = '#E8612D',\n showValue = false,\n label,\n striped = false,\n animated = false,\n className,\n style,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n const sc = barSizeConfig[size];\n const clampedValue = Math.max(0, Math.min(100, value));\n\n if (striped && animated) ensureStripeKeyframes();\n\n const stripeStyle: React.CSSProperties = striped\n ? {\n backgroundImage: `linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)`,\n backgroundSize: '1rem 1rem',\n ...(animated ? { animation: 'sm-ui-progress-stripes 1s linear infinite' } : {}),\n }\n : {};\n\n return (\n <div\n role=\"progressbar\"\n aria-valuenow={clampedValue}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={label}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '6px',\n width: '100%',\n ...style,\n }}\n className={className}\n >\n {(label || showValue) && (\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n {label && (\n <span style={{\n fontFamily: \"'Zalando Sans Expanded', sans-serif\",\n fontWeight: 400,\n fontSize: '10px',\n lineHeight: 'normal',\n textTransform: 'uppercase',\n color: t.label,\n userSelect: 'none',\n }}>\n {label}\n </span>\n )}\n {showValue && (\n <span style={{\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontWeight: 400,\n fontSize: sc.fontSize,\n color: t.text,\n userSelect: 'none',\n marginLeft: 'auto',\n }}>\n {Math.round(clampedValue)}%\n </span>\n )}\n </div>\n )}\n <div style={{\n width: '100%',\n height: sc.height,\n backgroundColor: t.trackBg,\n borderRadius: sc.height / 2,\n overflow: 'hidden',\n }}>\n <div style={{\n width: `${clampedValue}%`,\n height: '100%',\n backgroundColor: color,\n borderRadius: sc.height / 2,\n transition: 'width 0.3s ease',\n ...stripeStyle,\n }} />\n </div>\n </div>\n );\n};\n\n// ─── ProgressCircle ──────────────────────────────────────────────────────────\n\n/**\n * Kruhový indikátor průběhu pomocí SVG.\n *\n * Hodnota 0–100 se vykresluje jako oblouk kolem kruhu pomocí\n * `stroke-dasharray` / `stroke-dashoffset`. Volitelně zobrazí\n * procentuální hodnotu uprostřed a popisek pod kruhem.\n *\n * @example\n * ```tsx\n * <ProgressCircle value={75} showValue />\n * <ProgressCircle value={50} size={80} strokeWidth={6} color=\"#00A205\" label=\"Stahování\" />\n * ```\n */\nexport const ProgressCircle: React.FC<ProgressCircleProps> = ({\n value,\n size = 64,\n strokeWidth = 4,\n color = '#E8612D',\n showValue = false,\n label,\n className,\n style,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n const clampedValue = Math.max(0, Math.min(100, value));\n\n const radius = (size - strokeWidth) / 2;\n const circumference = 2 * Math.PI * radius;\n const offset = circumference - (clampedValue / 100) * circumference;\n\n return (\n <div\n role=\"progressbar\"\n aria-valuenow={clampedValue}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={label}\n style={{\n display: 'inline-flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '6px',\n ...style,\n }}\n className={className}\n >\n <svg width={size} height={size} viewBox={`0 0 ${size} ${size}`} style={{ transform: 'rotate(-90deg)' }}>\n {/* Pozadí kruhu */}\n <circle\n cx={size / 2}\n cy={size / 2}\n r={radius}\n fill=\"none\"\n stroke={t.trackBg}\n strokeWidth={strokeWidth}\n />\n {/* Vyplněný oblouk */}\n <circle\n cx={size / 2}\n cy={size / 2}\n r={radius}\n fill=\"none\"\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeDasharray={circumference}\n strokeDashoffset={offset}\n style={{ transition: 'stroke-dashoffset 0.3s ease' }}\n />\n </svg>\n {showValue && (\n <span style={{\n position: 'relative',\n marginTop: -size / 2 - 6,\n marginBottom: size / 2 - 6,\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontWeight: 700,\n fontSize: `${Math.max(11, size * 0.22)}px`,\n color: t.text,\n userSelect: 'none',\n transform: 'translateY(-50%)',\n top: '50%',\n display: 'block',\n textAlign: 'center',\n }}>\n {Math.round(clampedValue)}%\n </span>\n )}\n {label && (\n <span style={{\n fontFamily: \"'Zalando Sans Expanded', sans-serif\",\n fontWeight: 400,\n fontSize: '10px',\n lineHeight: 'normal',\n textTransform: 'uppercase',\n color: t.label,\n userSelect: 'none',\n }}>\n {label}\n </span>\n )}\n </div>\n );\n};\n","import React, { useEffect, useRef, useState } from 'react';\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport type SpinnerSize = 'sm' | 'md' | 'lg';\n\nexport interface SpinnerProps {\n /**\n * Velikost spinneru.\n * - `'sm'` — 16 px\n * - `'md'` — 24 px\n * - `'lg'` — 40 px\n * - `number` — vlastní velikost v pixelech\n * @default 'md'\n */\n size?: SpinnerSize | number;\n /**\n * Barva spinneru. Pokud není zadána, dědí `currentColor`.\n */\n color?: string;\n /**\n * Text pro přístupnost (screen reader). Vykreslí se jako `aria-label`.\n * @default 'Načítání'\n */\n label?: string;\n /** Dodatečná CSS třída pro kořenový element. */\n className?: string;\n /** Další inline styly pro kořenový element. */\n style?: React.CSSProperties;\n}\n\n// ─── Size map ────────────────────────────────────────────────────────────────\n\nconst sizeMap: Record<string, number> = {\n sm: 16,\n md: 24,\n lg: 40,\n};\n\n// ─── Component ───────────────────────────────────────────────────────────────\n\n/**\n * Animovaný spinner (indikátor načítání) využívající requestAnimationFrame.\n *\n * Jedná se o samostatnou verzi interního spinneru používaného\n * v komponentách Input, Select a Button. Rotace je řízena pomocí\n * rAF pro plynulou animaci bez CSS keyframes.\n *\n * @example\n * ```tsx\n * <Spinner />\n * <Spinner size=\"lg\" color=\"#E8612D\" />\n * <Spinner size={32} label=\"Ukládání dat\" />\n * ```\n */\nexport const Spinner: React.FC<SpinnerProps> = ({\n size = 'md',\n color,\n label = 'Načítání',\n className,\n style,\n}) => {\n const [angle, setAngle] = useState(0);\n const rafRef = useRef<number | undefined>(undefined);\n const startRef = useRef<number | undefined>(undefined);\n\n useEffect(() => {\n const animate = (ts: number) => {\n if (startRef.current === undefined) startRef.current = ts;\n setAngle(((ts - startRef.current) / 800 * 360) % 360);\n rafRef.current = requestAnimationFrame(animate);\n };\n rafRef.current = requestAnimationFrame(animate);\n return () => {\n if (rafRef.current !== undefined) cancelAnimationFrame(rafRef.current);\n };\n }, []);\n\n const resolvedSize = typeof size === 'number' ? size : (sizeMap[size] ?? 24);\n const strokeColor = color ?? 'currentColor';\n\n return (\n <span\n role=\"status\"\n aria-label={label}\n className={className}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n ...style,\n }}\n >\n <svg\n width={resolvedSize}\n height={resolvedSize}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n style={{ transform: `rotate(${angle}deg)`, flexShrink: 0, display: 'block' }}\n >\n <circle\n cx=\"8\"\n cy=\"8\"\n r=\"6\"\n stroke={strokeColor}\n strokeWidth=\"2\"\n strokeOpacity=\"0.25\"\n />\n <path\n d=\"M8 2a6 6 0 0 1 6 6\"\n stroke={strokeColor}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n </span>\n );\n};\n","import React from 'react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ───────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n border: 'rgba(255,255,255,0.15)',\n labelColor: 'rgba(255,255,255,0.5)',\n labelBg: '#1a1a1a',\n },\n light: {\n border: 'rgba(0,0,0,0.12)',\n labelColor: 'rgba(0,0,0,0.4)',\n labelBg: '#ffffff',\n },\n} as const;\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport type DividerOrientation = 'horizontal' | 'vertical';\n\nexport interface DividerProps {\n /**\n * Orientace oddělovače.\n * - `'horizontal'` — plná šířka, horizontální čára\n * - `'vertical'` — plná výška, vertikální čára\n * @default 'horizontal'\n */\n orientation?: DividerOrientation;\n /**\n * Volitelný text zobrazený uprostřed oddělovače.\n * Podporováno pouze pro horizontální orientaci.\n */\n label?: string;\n /** Dodatečná CSS třída pro kořenový element. */\n className?: string;\n /** Další inline styly pro kořenový element. */\n style?: React.CSSProperties;\n}\n\n// ─── Component ───────────────────────────────────────────────────────────────\n\n/**\n * Vizuální oddělovač obsahu — horizontální nebo vertikální čára.\n *\n * V horizontálním režimu zabírá celou šířku kontejneru a volitelně\n * zobrazí text uprostřed. Ve vertikálním režimu zabírá celou výšku.\n *\n * @example\n * ```tsx\n * <Divider />\n * <Divider label=\"nebo\" />\n * <Divider orientation=\"vertical\" />\n * ```\n */\nexport const Divider: React.FC<DividerProps> = ({\n orientation = 'horizontal',\n label,\n className,\n style,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n\n if (orientation === 'vertical') {\n return (\n <div\n role=\"separator\"\n aria-orientation=\"vertical\"\n className={className}\n style={{\n width: '1px',\n alignSelf: 'stretch',\n backgroundColor: t.border,\n flexShrink: 0,\n ...style,\n }}\n />\n );\n }\n\n // Horizontální bez textu\n if (!label) {\n return (\n <div\n role=\"separator\"\n aria-orientation=\"horizontal\"\n className={className}\n style={{\n width: '100%',\n height: '1px',\n backgroundColor: t.border,\n flexShrink: 0,\n ...style,\n }}\n />\n );\n }\n\n // Horizontální s textem\n return (\n <div\n role=\"separator\"\n aria-orientation=\"horizontal\"\n className={className}\n style={{\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n gap: '12px',\n ...style,\n }}\n >\n <div style={{ flex: 1, height: '1px', backgroundColor: t.border }} />\n <span style={{\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontWeight: 400,\n fontSize: '12px',\n lineHeight: 'normal',\n color: t.labelColor,\n whiteSpace: 'nowrap',\n userSelect: 'none',\n flexShrink: 0,\n }}>\n {label}\n </span>\n <div style={{ flex: 1, height: '1px', backgroundColor: t.border }} />\n </div>\n );\n};\n","import React from 'react';\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport type StackDirection = 'row' | 'column';\nexport type StackAlign = 'start' | 'center' | 'end' | 'stretch';\nexport type StackJustify = 'start' | 'center' | 'end' | 'between' | 'around';\n\nexport interface StackProps {\n /**\n * Směr rozložení potomků.\n * @default 'column'\n */\n direction?: StackDirection;\n /**\n * Mezera mezi potomky v pixelech nebo jako CSS hodnota.\n * @default 8\n */\n gap?: number | string;\n /**\n * Zarovnání na příčné ose (align-items).\n * @default 'stretch'\n */\n align?: StackAlign;\n /**\n * Rozložení na hlavní ose (justify-content).\n * @default 'start'\n */\n justify?: StackJustify;\n /**\n * Povolí zalamování prvků do dalších řádků / sloupců.\n * @default false\n */\n wrap?: boolean;\n /**\n * Roztáhne komponentu na celou šířku kontejneru.\n * @default false\n */\n fullWidth?: boolean;\n /**\n * Potomci rozmístění uvnitř stacku.\n */\n children?: React.ReactNode;\n /** Dodatečná CSS třída pro kořenový element. */\n className?: string;\n /** Další inline styly pro kořenový element. */\n style?: React.CSSProperties;\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\nconst alignMap: Record<StackAlign, string> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n stretch: 'stretch',\n};\n\nconst justifyMap: Record<StackJustify, string> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n between: 'space-between',\n around: 'space-around',\n};\n\n// ─── Component ───────────────────────────────────────────────────────────────\n\n/**\n * Jednoduchý layout helper využívající CSS flexbox.\n *\n * Usnadňuje běžné rozložení prvků ve sloupcích nebo řádcích\n * s konzistentními mezerami, zarovnáním a zalamováním.\n *\n * @example\n * ```tsx\n * <Stack gap={16}>\n * <Input label=\"Jméno\" />\n * <Input label=\"Příjmení\" />\n * </Stack>\n *\n * <Stack direction=\"row\" gap={12} align=\"center\">\n * <Button>Uložit</Button>\n * <Button variant=\"outline\">Zrušit</Button>\n * </Stack>\n * ```\n */\nexport const Stack: React.FC<StackProps> = ({\n direction = 'column',\n gap = 8,\n align = 'stretch',\n justify = 'start',\n wrap = false,\n fullWidth = false,\n children,\n className,\n style,\n}) => {\n return (\n <div\n className={className}\n style={{\n display: 'flex',\n flexDirection: direction,\n gap: typeof gap === 'number' ? `${gap}px` : gap,\n alignItems: alignMap[align],\n justifyContent: justifyMap[justify],\n flexWrap: wrap ? 'wrap' : 'nowrap',\n width: fullWidth ? '100%' : undefined,\n ...style,\n }}\n >\n {children}\n </div>\n );\n};\n","import React from 'react';\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport type ContainerMaxWidth = 'sm' | 'md' | 'lg' | 'xl';\n\nexport interface ContainerProps {\n /**\n * Maximální šířka kontejneru.\n * - `'sm'` — 640 px\n * - `'md'` — 768 px\n * - `'lg'` — 1024 px\n * - `'xl'` — 1280 px\n * - `number` — vlastní hodnota v pixelech\n * @default 'lg'\n */\n maxWidth?: ContainerMaxWidth | number;\n /**\n * Vnitřní odsazení (padding). Číslo v pixelech nebo CSS hodnota.\n * @default 16\n */\n padding?: number | string;\n /**\n * Vycentruje kontejner pomocí automatických okrajů.\n * @default true\n */\n centered?: boolean;\n /**\n * Potomci vykreslení uvnitř kontejneru.\n */\n children?: React.ReactNode;\n /** Dodatečná CSS třída pro kořenový element. */\n className?: string;\n /** Další inline styly pro kořenový element. */\n style?: React.CSSProperties;\n}\n\n// ─── Size map ────────────────────────────────────────────────────────────────\n\nconst maxWidthMap: Record<ContainerMaxWidth, number> = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n};\n\n// ─── Component ───────────────────────────────────────────────────────────────\n\n/**\n * Layout kontejner s maximální šířkou a volitelným centrováním.\n *\n * Usnadňuje tvorbu stránek s konzistentní šířkou obsahu\n * a odsazením. Ve výchozím nastavení centruje obsah pomocí\n * automatických okrajů a aplikuje vnitřní padding.\n *\n * @example\n * ```tsx\n * <Container>\n * <h1>Obsah stránky</h1>\n * <p>Tento obsah bude omezený na 1024 px a vycentrovaný.</p>\n * </Container>\n *\n * <Container maxWidth=\"sm\" padding={24}>\n * <LoginForm />\n * </Container>\n * ```\n */\nexport const Container: React.FC<ContainerProps> = ({\n maxWidth = 'lg',\n padding = 16,\n centered = true,\n children,\n className,\n style,\n}) => {\n const resolvedMaxWidth = typeof maxWidth === 'number' ? maxWidth : maxWidthMap[maxWidth];\n const resolvedPadding = typeof padding === 'number' ? `${padding}px` : padding;\n\n return (\n <div\n className={className}\n style={{\n maxWidth: `${resolvedMaxWidth}px`,\n width: '100%',\n padding: resolvedPadding,\n boxSizing: 'border-box',\n ...(centered ? { marginLeft: 'auto', marginRight: 'auto' } : {}),\n ...style,\n }}\n >\n {children}\n </div>\n );\n};\n","import React, { useState, useCallback, useRef, useEffect } from 'react';\nimport { DotsSixVertical as DotsSixVerticalIcon, CaretRight as CaretRightIcon, ArrowBendDownRight as ArrowBendDownRightIcon } from '@phosphor-icons/react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ───────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n itemBg: 'rgba(255,255,255,0.04)',\n itemBorder: 'rgba(255,255,255,0.08)',\n itemHoverBg: 'rgba(255,255,255,0.07)',\n text: '#ffffff',\n textSecondary: '#ACACAC',\n gripColor: 'rgba(255,255,255,0.2)',\n gripHover: 'rgba(255,255,255,0.5)',\n dropIndicator: '#E8612D',\n nestHighlight: 'rgba(232,97,45,0.10)',\n nestBorder: 'rgba(232,97,45,0.4)',\n chevron: 'rgba(255,255,255,0.4)',\n chevronHover: '#ffffff',\n treeLine: 'rgba(255,255,255,0.08)',\n },\n light: {\n itemBg: 'rgba(0,0,0,0.02)',\n itemBorder: 'rgba(0,0,0,0.07)',\n itemHoverBg: 'rgba(0,0,0,0.04)',\n text: '#1a1a1a',\n textSecondary: '#888888',\n gripColor: 'rgba(0,0,0,0.15)',\n gripHover: 'rgba(0,0,0,0.4)',\n dropIndicator: '#FC4F00',\n nestHighlight: 'rgba(252,79,0,0.06)',\n nestBorder: 'rgba(252,79,0,0.35)',\n chevron: 'rgba(0,0,0,0.3)',\n chevronHover: '#1a1a1a',\n treeLine: 'rgba(0,0,0,0.06)',\n },\n} as const;\n\n// ─── Keyframes ──────────────────────────────────────────────────────────────\n\nconst ANIM_NAME = 'smDragListPulse';\nconst KEYFRAMES_CSS = `@keyframes ${ANIM_NAME}{0%,100%{opacity:1}50%{opacity:0.5}}`;\n\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface DragListItem {\n /** Unikátní identifikátor položky. */\n id: string;\n /** Textový popisek položky. */\n label: string;\n /** Volitelná ikona zobrazená před popiskem. */\n icon?: React.ReactNode;\n /** Potomci položky (pro stromový režim). */\n children?: DragListItem[];\n /** Zda je položka rozbalena (pro stromový režim). @default false */\n expanded?: boolean;\n /** Libovolná uživatelská data. */\n data?: any;\n}\n\ntype DropPosition = 'before' | 'after' | 'inside';\n\ninterface DragState {\n targetId: string;\n position: DropPosition;\n}\n\n/** Props předané do `renderItem` funkce pro ovládání drag handlu. */\nexport interface DragHandleProps {\n /** Spread na element, který má sloužit jako drag handle. */\n handleProps: {\n onMouseDown: (e: React.MouseEvent) => void;\n style: React.CSSProperties;\n 'aria-label': string;\n };\n /** Zda je položka právě přetahována. */\n isDragging: boolean;\n /** Hloubka vnoření (0 = root). */\n depth: number;\n /** Zda je položka rozbalena (stromový režim). */\n isExpanded: boolean;\n /** Přepne rozbalení/sbalení potomků. */\n toggleExpand: () => void;\n /** Zda má položka potomky. */\n hasChildren: boolean;\n}\n\nexport interface DragListProps {\n /** Seznam položek k zobrazení. */\n items: DragListItem[];\n /** Callback volaný při změně pořadí položek. */\n onReorder: (items: DragListItem[]) => void;\n /**\n * Vlastní vykreslovací funkce pro položku.\n * Přijímá `item`, `dragHandleProps` a další metadata.\n * Pokud není zadána, použije se výchozí vykreslení s gripem a textem.\n *\n * @example\n * ```tsx\n * renderItem={(item, { handleProps, isDragging }) => (\n * <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n * <span {...handleProps}>⠿</span>\n * <span>{item.label}</span>\n * </div>\n * )}\n * ```\n */\n renderItem?: (item: DragListItem, props: DragHandleProps) => React.ReactNode;\n /** Povolí vnořování položek (stromový režim). @default false */\n allowNesting?: boolean;\n /** Maximální hloubka vnoření. @default 3 */\n maxDepth?: number;\n /**\n * Zda je celá karta přetahovatelná, nebo jen grip handle.\n * Při `'handle'` je karta přetahovatelná jen za grip/handle element.\n * @default 'full'\n */\n dragMode?: 'full' | 'handle';\n /** Dodatečná CSS třída. */\n className?: string;\n /** Další inline styly. */\n style?: React.CSSProperties;\n}\n\n// ─── Helpers ────────────────────────────────────────────────────────────────\n\nfunction findItem(items: DragListItem[], id: string): DragListItem | null {\n for (const item of items) {\n if (item.id === id) return item;\n if (item.children) {\n const found = findItem(item.children, id);\n if (found) return found;\n }\n }\n return null;\n}\n\nfunction isDescendant(items: DragListItem[], ancestorId: string, descendantId: string): boolean {\n const ancestor = findItem(items, ancestorId);\n if (!ancestor || !ancestor.children) return false;\n for (const child of ancestor.children) {\n if (child.id === descendantId) return true;\n if (isDescendant([child], child.id, descendantId)) return true;\n }\n return false;\n}\n\nfunction removeItem(items: DragListItem[], id: string): [DragListItem[], DragListItem | null] {\n let removed: DragListItem | null = null;\n const result = items.reduce<DragListItem[]>((acc, item) => {\n if (item.id === id) {\n removed = item;\n return acc;\n }\n if (item.children) {\n const [newChildren, found] = removeItem(item.children, id);\n if (found) removed = found;\n acc.push({ ...item, children: newChildren.length > 0 ? newChildren : undefined });\n } else {\n acc.push(item);\n }\n return acc;\n }, []);\n return [result, removed];\n}\n\nfunction insertItem(\n items: DragListItem[],\n targetId: string,\n position: DropPosition,\n itemToInsert: DragListItem,\n): DragListItem[] {\n if (position === 'inside') {\n return items.map((item) => {\n if (item.id === targetId) {\n return {\n ...item,\n children: [...(item.children || []), itemToInsert],\n expanded: true,\n };\n }\n if (item.children) {\n return { ...item, children: insertItem(item.children, targetId, position, itemToInsert) };\n }\n return item;\n });\n }\n\n const result: DragListItem[] = [];\n for (const item of items) {\n if (item.id === targetId) {\n if (position === 'before') {\n result.push(itemToInsert);\n result.push(item);\n } else {\n result.push(item);\n result.push(itemToInsert);\n }\n } else {\n if (item.children) {\n result.push({ ...item, children: insertItem(item.children, targetId, position, itemToInsert) });\n } else {\n result.push(item);\n }\n }\n }\n return result;\n}\n\nfunction toggleExpanded(items: DragListItem[], id: string): DragListItem[] {\n return items.map((item) => {\n if (item.id === id) {\n return { ...item, expanded: !item.expanded };\n }\n if (item.children) {\n return { ...item, children: toggleExpanded(item.children, id) };\n }\n return item;\n });\n}\n\nfunction setExpanded(items: DragListItem[], id: string, expanded: boolean): DragListItem[] {\n return items.map((item) => {\n if (item.id === id) {\n return { ...item, expanded };\n }\n if (item.children) {\n return { ...item, children: setExpanded(item.children, id, expanded) };\n }\n return item;\n });\n}\n\n// ─── Drop indicator ─────────────────────────────────────────────────────────\n\nconst DropIndicator: React.FC<{ color: string }> = ({ color }) => (\n <div style={{\n height: '2px',\n backgroundColor: color,\n borderRadius: '1px',\n position: 'relative',\n animation: `${ANIM_NAME} 1.2s ease-in-out infinite`,\n width: '100%',\n }}>\n <div style={{\n position: 'absolute',\n left: '-3px',\n top: '-3px',\n width: '8px',\n height: '8px',\n borderRadius: '50%',\n backgroundColor: color,\n }} />\n </div>\n);\n\n// ─── DragListRow ────────────────────────────────────────────────────────────\n\ninterface DragListRowProps {\n item: DragListItem;\n depth: number;\n allowNesting: boolean;\n maxDepth: number;\n draggedId: string | null;\n dropState: DragState | null;\n onDragStart: (id: string) => void;\n onDragOver: (e: React.DragEvent, id: string, depth: number) => void;\n onDragLeave: (e: React.DragEvent, cardEl: HTMLElement) => void;\n onDrop: (e: React.DragEvent) => void;\n onDragEnd: () => void;\n onToggleExpand: (id: string) => void;\n renderItem?: (item: DragListItem, props: DragHandleProps) => React.ReactNode;\n dragMode: 'full' | 'handle';\n tokens: (typeof tokens)['dark'] | (typeof tokens)['light'];\n}\n\nconst DragListRow: React.FC<DragListRowProps> = ({\n item,\n depth,\n allowNesting,\n maxDepth,\n draggedId,\n dropState,\n onDragStart,\n onDragOver,\n onDragLeave,\n onDrop,\n onDragEnd,\n onToggleExpand,\n renderItem,\n dragMode,\n tokens: t,\n}) => {\n const [gripHover, setGripHover] = useState(false);\n const [rowHover, setRowHover] = useState(false);\n const [chevronHover, setChevronHover] = useState(false);\n const handleActiveRef = useRef(false);\n const cardRef = useRef<HTMLDivElement>(null);\n const hasChildren = item.children && item.children.length > 0;\n const isExpanded = item.expanded ?? false;\n const isDragged = draggedId === item.id;\n const isDragging = draggedId !== null;\n const isHandleMode = dragMode === 'handle';\n const isDropTarget = dropState?.targetId === item.id;\n\n const showIndicatorBefore = isDropTarget && dropState?.position === 'before';\n const showIndicatorAfter = isDropTarget && dropState?.position === 'after';\n const showNestHighlight = isDropTarget && dropState?.position === 'inside';\n\n // Barva pozadí karty\n const cardBg = isDragged\n ? 'transparent'\n : showNestHighlight\n ? t.nestHighlight\n : rowHover && !isDragging\n ? t.itemHoverBg\n : t.itemBg;\n\n const cardBorder = showNestHighlight ? t.nestBorder : isDragged ? 'transparent' : t.itemBorder;\n\n return (\n <div style={{\n paddingLeft: depth > 0 ? `${depth * 28}px` : 0,\n position: 'relative',\n }}>\n {/* Indikátor PŘED */}\n {showIndicatorBefore && (\n <div style={{\n position: 'absolute',\n top: '-4px',\n left: depth > 0 ? `${depth * 28 + 4}px` : '4px',\n right: '4px',\n zIndex: 10,\n pointerEvents: 'none',\n }}>\n <DropIndicator color={t.dropIndicator} />\n </div>\n )}\n\n {/* Karta položky */}\n <div\n ref={cardRef}\n draggable\n onDragStart={(e) => {\n if (isHandleMode && !handleActiveRef.current) {\n e.preventDefault();\n return;\n }\n handleActiveRef.current = false;\n e.dataTransfer.effectAllowed = 'move';\n e.dataTransfer.setData('text/plain', item.id);\n if (cardRef.current) {\n const ghost = cardRef.current.cloneNode(true) as HTMLElement;\n ghost.style.width = `${cardRef.current.offsetWidth}px`;\n ghost.style.opacity = '0.85';\n ghost.style.transform = 'rotate(1.5deg) scale(1.02)';\n ghost.style.boxShadow = '0 8px 24px rgba(0,0,0,0.25)';\n ghost.style.position = 'fixed';\n ghost.style.top = '-1000px';\n document.body.appendChild(ghost);\n e.dataTransfer.setDragImage(ghost, e.nativeEvent.offsetX, e.nativeEvent.offsetY);\n requestAnimationFrame(() => document.body.removeChild(ghost));\n }\n onDragStart(item.id);\n }}\n onDragOver={(e) => {\n e.preventDefault();\n e.stopPropagation();\n onDragOver(e, item.id, depth);\n }}\n onDragLeave={(e) => {\n const related = e.relatedTarget as Node | null;\n if (cardRef.current && related && cardRef.current.contains(related)) return;\n e.stopPropagation();\n onDragLeave(e, cardRef.current!);\n setRowHover(false);\n }}\n onDrop={(e) => {\n e.preventDefault();\n e.stopPropagation();\n onDrop(e);\n }}\n onDragEnd={onDragEnd}\n onMouseEnter={() => setRowHover(true)}\n onMouseLeave={() => setRowHover(false)}\n style={{\n display: 'flex',\n alignItems: 'center',\n padding: '10px 14px',\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '14px',\n color: isDragged ? 'transparent' : t.text,\n cursor: isDragging ? 'grabbing' : isHandleMode ? 'default' : 'grab',\n opacity: isDragged ? 0.35 : 1,\n backgroundColor: cardBg,\n borderWidth: '1px',\n borderColor: cardBorder,\n borderStyle: isDragged ? 'dashed' : 'solid',\n borderRadius: '10px',\n transition: 'background-color 0.2s ease, border-color 0.2s ease, opacity 0.2s ease, box-shadow 0.2s ease, transform 0.15s ease',\n userSelect: 'none',\n gap: '10px',\n minHeight: '44px',\n boxSizing: 'border-box',\n boxShadow: showNestHighlight\n ? `inset 0 0 0 1px ${t.nestBorder}`\n : rowHover && !isDragging\n ? '0 2px 8px rgba(0,0,0,0.08)'\n : 'none',\n transform: showNestHighlight ? 'scale(1.01)' : 'scale(1)',\n }}\n >\n {/* Grip handle (výchozí — skrytý při custom renderItem) */}\n {!renderItem && (\n <span\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n cursor: isDragging ? 'grabbing' : 'grab',\n padding: '4px 2px',\n borderRadius: '4px',\n visibility: isDragged ? 'hidden' : 'visible',\n }}\n onMouseEnter={() => setGripHover(true)}\n onMouseLeave={() => setGripHover(false)}\n onMouseDown={() => { handleActiveRef.current = true; }}\n >\n <DotsSixVerticalIcon size={14} color={gripHover ? t.gripHover : t.gripColor} />\n </span>\n )}\n\n {/* Nest indikátor — šipka \"vnoření\" místo before/after */}\n {showNestHighlight && (\n <span style={{\n display: 'inline-flex',\n alignItems: 'center',\n position: 'absolute',\n right: '14px',\n opacity: 0.6,\n }}>\n <ArrowBendDownRightIcon size={16} color={t.dropIndicator} />\n </span>\n )}\n\n {/* Chevron pro expand/collapse */}\n {hasChildren ? (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onToggleExpand(item.id);\n }}\n onMouseEnter={() => setChevronHover(true)}\n onMouseLeave={() => setChevronHover(false)}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '22px',\n height: '22px',\n border: 'none',\n background: 'transparent',\n cursor: 'pointer',\n padding: 0,\n flexShrink: 0,\n borderRadius: '4px',\n visibility: isDragged ? 'hidden' : 'visible',\n }}\n >\n <CaretRightIcon size={16} color={chevronHover ? t.chevronHover : t.chevron} style={{ transition: 'transform 0.2s ease', transform: isExpanded ? 'rotate(90deg)' : 'rotate(0deg)', flexShrink: 0 }} />\n </button>\n ) : null}\n\n {/* Obsah */}\n <div style={{ display: 'flex', alignItems: 'center', gap: '10px', flex: 1, minWidth: 0, visibility: isDragged ? 'hidden' : 'visible' }}>\n {renderItem ? (\n renderItem(item, {\n handleProps: {\n onMouseDown: () => { handleActiveRef.current = true; },\n style: { cursor: isDragging ? 'grabbing' : 'grab', userSelect: 'none' as const },\n 'aria-label': 'Přetáhnout položku',\n },\n isDragging: isDragged,\n depth,\n isExpanded,\n toggleExpand: () => onToggleExpand(item.id),\n hasChildren: !!hasChildren,\n })\n ) : (\n <>\n {item.icon && (\n <span style={{ display: 'inline-flex', alignItems: 'center', flexShrink: 0, opacity: 0.7 }}>\n {item.icon}\n </span>\n )}\n <span style={{\n flex: 1,\n lineHeight: 'normal',\n fontWeight: depth === 0 ? 500 : 400,\n fontSize: depth === 0 ? '14px' : '13px',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}>\n {item.label}\n </span>\n </>\n )}\n </div>\n </div>\n\n {/* Indikátor ZA */}\n {showIndicatorAfter && (\n <div style={{\n position: 'absolute',\n bottom: '-4px',\n left: depth > 0 ? `${depth * 28 + 4}px` : '4px',\n right: '4px',\n zIndex: 10,\n pointerEvents: 'none',\n }}>\n <DropIndicator color={t.dropIndicator} />\n </div>\n )}\n\n {/* Potomci */}\n {hasChildren && isExpanded && (\n <div style={{\n marginTop: '6px',\n paddingLeft: '4px',\n borderLeft: `2px solid ${t.treeLine}`,\n marginLeft: '18px',\n display: 'flex',\n flexDirection: 'column',\n gap: '6px',\n }}>\n {item.children!.map((child) => (\n <DragListRow\n key={child.id}\n item={child}\n depth={depth + 1}\n allowNesting={allowNesting}\n maxDepth={maxDepth}\n draggedId={draggedId}\n dropState={dropState}\n onDragStart={onDragStart}\n onDragOver={onDragOver}\n onDragLeave={onDragLeave}\n onDrop={onDrop}\n onDragEnd={onDragEnd}\n onToggleExpand={onToggleExpand}\n renderItem={renderItem}\n dragMode={dragMode}\n tokens={t}\n />\n ))}\n </div>\n )}\n </div>\n );\n};\n\n// ─── DragList ───────────────────────────────────────────────────────────────\n\n/**\n * Přetahovací seznam dle SM-UI design systému.\n *\n * Umožňuje řazení položek přetažením (drag & drop).\n * Volitelně podporuje stromovou strukturu s vnořováním.\n * Využívá nativní HTML5 Drag and Drop API bez externích závislostí.\n *\n * Při přetahování na střed karty se položka vnoří jako potomek.\n * Při podržení nad sbaleným uzlem se uzel automaticky rozbalí.\n *\n * @example\n * ```tsx\n * <DragList\n * items={[\n * { id: '1', label: 'Položka 1' },\n * { id: '2', label: 'Položka 2' },\n * { id: '3', label: 'Položka 3' },\n * ]}\n * onReorder={setItems}\n * />\n * ```\n */\nexport const DragList: React.FC<DragListProps> = ({\n items,\n onReorder,\n renderItem,\n allowNesting = false,\n maxDepth = 3,\n dragMode = 'full',\n className,\n style,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n\n const [draggedId, setDraggedId] = useState<string | null>(null);\n const [dropState, setDropState] = useState<DragState | null>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const leaveTimerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const expandTimerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const lastPosRef = useRef<DragState | null>(null);\n\n const handleDragStart = useCallback((id: string) => {\n setDraggedId(id);\n }, []);\n\n const handleDragOver = useCallback(\n (e: React.DragEvent, targetId: string, targetDepth: number) => {\n if (!draggedId || draggedId === targetId) return;\n if (isDescendant(items, draggedId, targetId)) return;\n\n // Zrušit pending leave\n if (leaveTimerRef.current) {\n clearTimeout(leaveTimerRef.current);\n leaveTimerRef.current = undefined;\n }\n\n const rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n const y = e.clientY - rect.top;\n const height = rect.height;\n\n let position: DropPosition;\n\n if (allowNesting && targetDepth < maxDepth) {\n // Tři zóny: horní 25% = before, dolní 25% = after, střed 50% = inside\n if (y < height * 0.25) {\n position = 'before';\n } else if (y > height * 0.75) {\n position = 'after';\n } else {\n position = 'inside';\n }\n } else {\n // Bez nestingu: horní/dolní polovina s mrtvou zónou\n if (y < height * 0.35) {\n position = 'before';\n } else if (y > height * 0.65) {\n position = 'after';\n } else if (lastPosRef.current?.targetId === targetId) {\n position = lastPosRef.current.position;\n } else {\n position = y < height / 2 ? 'before' : 'after';\n }\n }\n\n const newState: DragState = { targetId, position };\n\n // Auto-expand: při podržení na 'inside' nad sbaleným uzlem po 600ms rozbalíme\n const target = findItem(items, targetId);\n if (\n position === 'inside' &&\n target?.children &&\n target.children.length > 0 &&\n !target.expanded\n ) {\n if (lastPosRef.current?.targetId !== targetId || lastPosRef.current?.position !== 'inside') {\n // Začátek hoveru na inside → nastartovat timer\n if (expandTimerRef.current) clearTimeout(expandTimerRef.current);\n expandTimerRef.current = setTimeout(() => {\n onReorder(setExpanded(items, targetId, true));\n }, 600);\n }\n } else {\n // Jiná pozice nebo jiný target → zrušit expand timer\n if (expandTimerRef.current) {\n clearTimeout(expandTimerRef.current);\n expandTimerRef.current = undefined;\n }\n }\n\n lastPosRef.current = newState;\n setDropState(newState);\n },\n [draggedId, items, allowNesting, maxDepth, onReorder],\n );\n\n const handleDragLeave = useCallback((_e: React.DragEvent, _cardEl: HTMLElement) => {\n if (leaveTimerRef.current) clearTimeout(leaveTimerRef.current);\n leaveTimerRef.current = setTimeout(() => {\n setDropState(null);\n lastPosRef.current = null;\n }, 60);\n if (expandTimerRef.current) {\n clearTimeout(expandTimerRef.current);\n expandTimerRef.current = undefined;\n }\n }, []);\n\n const handleDrop = useCallback(() => {\n if (leaveTimerRef.current) {\n clearTimeout(leaveTimerRef.current);\n leaveTimerRef.current = undefined;\n }\n if (expandTimerRef.current) {\n clearTimeout(expandTimerRef.current);\n expandTimerRef.current = undefined;\n }\n\n if (!draggedId || !dropState) return;\n const { targetId, position } = dropState;\n if (draggedId === targetId) return;\n if (isDescendant(items, draggedId, targetId)) return;\n\n const [withoutDragged, draggedItem] = removeItem(items, draggedId);\n if (!draggedItem) return;\n\n const newItems = insertItem(withoutDragged, targetId, position, draggedItem);\n onReorder(newItems);\n\n setDraggedId(null);\n setDropState(null);\n lastPosRef.current = null;\n }, [draggedId, dropState, items, onReorder]);\n\n const handleDragEnd = useCallback(() => {\n if (leaveTimerRef.current) {\n clearTimeout(leaveTimerRef.current);\n leaveTimerRef.current = undefined;\n }\n if (expandTimerRef.current) {\n clearTimeout(expandTimerRef.current);\n expandTimerRef.current = undefined;\n }\n setDraggedId(null);\n setDropState(null);\n lastPosRef.current = null;\n }, []);\n\n const handleToggleExpand = useCallback(\n (id: string) => {\n onReorder(toggleExpanded(items, id));\n },\n [items, onReorder],\n );\n\n useEffect(() => {\n return () => {\n if (leaveTimerRef.current) clearTimeout(leaveTimerRef.current);\n if (expandTimerRef.current) clearTimeout(expandTimerRef.current);\n };\n }, []);\n\n return (\n <div\n ref={containerRef}\n className={className}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '6px',\n ...style,\n }}\n >\n <style dangerouslySetInnerHTML={{ __html: KEYFRAMES_CSS }} />\n {items.length === 0 ? (\n <div\n style={{\n padding: '32px 16px',\n textAlign: 'center',\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '14px',\n color: t.textSecondary,\n backgroundColor: t.itemBg,\n borderRadius: '10px',\n border: `1px solid ${t.itemBorder}`,\n }}\n >\n Žádné položky\n </div>\n ) : (\n items.map((item) => (\n <DragListRow\n key={item.id}\n item={item}\n depth={0}\n allowNesting={allowNesting}\n maxDepth={maxDepth}\n draggedId={draggedId}\n dropState={dropState}\n onDragStart={handleDragStart}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n onDragEnd={handleDragEnd}\n onToggleExpand={handleToggleExpand}\n renderItem={renderItem}\n dragMode={dragMode}\n tokens={t}\n />\n ))\n )}\n </div>\n );\n};\n\nDragList.displayName = 'DragList';\n"]}