@smworks-cz/ui-kit 1.2.0 → 1.2.1

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/hooks/useTheme.ts","../src/components/Button/Button.tsx","../src/components/Input/Input.tsx","../src/components/NumberInput/NumberInput.tsx","../src/components/Select/Select.tsx","../src/components/Combobox/Combobox.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/SegmentedControl/SegmentedControl.tsx","../src/components/ColorPicker/ColorPicker.tsx","../src/components/Rating/Rating.tsx","../src/components/OTPInput/OTPInput.tsx","../src/components/Skeleton/Skeleton.tsx","../src/components/Table/Table.tsx","../src/components/DataGrid/DataGrid.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/Calendar/Calendar.tsx","../src/components/Timeline/Timeline.tsx","../src/components/DataList/DataList.tsx","../src/components/Tree/Tree.tsx","../src/components/StatusBadge/StatusBadge.tsx","../src/components/Modal/Modal.tsx","../src/components/Drawer/Drawer.tsx","../src/components/Sheet/Sheet.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/CommandMenu/CommandMenu.tsx","../src/components/AppSidebar/AppSidebar.tsx","../src/components/SidebarItem/SidebarItem.tsx","../src/components/Navbar/Navbar.tsx","../src/components/Toast/Toast.tsx","../src/components/Toast/Toaster.tsx","../src/components/Alert/Alert.tsx","../src/components/Notification/Notification.tsx","../src/components/Progress/Progress.tsx","../src/components/Spinner/Spinner.tsx","../src/components/ConfirmDialog/ConfirmDialog.tsx","../src/components/CopyButton/CopyButton.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","NumberInput","min","max","step","prefix","suffix","hoveredBtn","setHoveredBtn","clamp","useCallback","result","increment","decrement","intervalRef","timeoutRef","startHold","action","stopHold","handleInputChange","raw","parsed","handleBlur","canDecrement","canIncrement","buttonStyle","side","canClick","affixStyle","chevronBtnStyle","CaretUpIcon","CaretDownIcon","MinusIcon","PlusIcon","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","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","SelectGroup","Combobox","onInputChange","allowCustom","onCreate","renderOption","notFoundContent","footer","inputRef","inputValue","setInputValue","selectedOpt","handleInputChangeInternal","val","selectOption","handleFocus","MagnifyingGlassIcon","node","DAY_NAMES","MONTH_NAMES","getCalendarDays","year","month","firstDayOfWeek","dayOfWeek","start","days","d","formatDate","dd","mm","formatDateTime","hh","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","handleDayClick","handleTimeChange","which","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","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","snapToStep","Slider","showValue","range","trackRef","draggingThumb","pct","startPct","endPct","getValueFromEvent","clientX","track","ratio","handleTrackMouseDown","rv","distStart","distEnd","handleMouseMove","ev","handleMouseUp","valueDisplay","thumbCommon","formatFileSize","bytes","fileIdCounter","FileUpload","onFiles","accept","maxSize","showFileList","dragging","setDragging","files","setFiles","sizeError","setSizeError","processFiles","fileList","oversized","f","newFiles","file","updated","handleDrop","handleRemove","fileId","zoneStyle","UploadSimpleIcon","FileTextIcon","FolderIcon","SegmentedControl","data","orientation","isVertical","items","activeIndex","item","containerRef","segmentRefs","indicator","setIndicator","updateIndicator","container","activeEl","containerRect","activeRect","isActive","isItemDisabled","DEFAULT_PRESETS","isValidHex","hex","normalizeHex","clean","isLightColor","c","g","ColorPicker","presets","popoverRef","hexInput","setHexInput","popoverPos","setPopoverPos","popoverHeight","handleHexChange","handleHexBlur","handlePresetClick","getPopoverAnimStyle","swatchStyle","popover","EyedropperIcon","Rating","readOnly","hoverIndex","setHoverIndex","isInteractive","handleMouseEnter","handleMouseLeave","stars","_","isFilled","isHovered","StarIcon","OTPInput","length","autoFocus","separatorAfter","separator","inputsRef","focusedIndex","setFocusedIndex","digits","focusInput","updateValue","newDigits","newValue","handleInput","char","handleChange","handlePaste","pasted","nextIndex","getBoxStyle","isFocused","hasDig","ANIM_NAME","KEYFRAMES_CSS","Skeleton","width","height","lines","resolveWidth","resolveHeight","baseStyle","styleTag","Table","columns","emptyText","onSort","sortKey","sortDirection","striped","hoverable","handleSort","col","nextDir","tableStyle","thStyle","tdStyle","CaretUpDownIcon","rowIdx","row","InternalCheckbox","DataGrid","selectable","onSelectionChange","rowKey","onRowClick","stickyHeader","selectedIds","setSelectedIds","hoveredRow","setHoveredRow","allIds","useMemo","allSelected","someSelected","toggleAll","toggleRow","prev","checkboxThStyle","checkboxTdStyle","isLastRow","rowBg","paddingMap","Card","title","subtitle","header","bordered","cardStyle","headerContent","AccordionItem","defaultOpen","_controlled","_open","_onToggle","internalOpen","setInternalOpen","isOpen","contentRef","contentHeight","setContentHeight","handleToggle","Accordion","child","openIndices","setOpenIndices","defaults","Tab","TabPanel","Tabs","childArray","tabs","activePanel","p","tab","tabStyle","Tooltip","position","delay","coords","setCoords","tooltipRef","timerRef","ARROW_SIZE","GAP","trigger","tooltip","tRect","top","left","handleEnter","handleLeave","arrowStyle","tooltipEl","Popover","hoverTimerRef","pop","pRect","getAnimStyle","slideMap","axis","popoverEl","EmptyState","description","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","DAY_LABELS","MONTH_LABELS","startOfWeek","date","diff","getMonthGrid","firstDay","current","getWeekGrid","isDateDisabled","Calendar","view","events","today","currentMonth","setCurrentMonth","currentYear","setCurrentYear","currentWeekStart","setCurrentWeekStart","navigatePrev","navigateNext","getEventsForDay","headerLabel","navBtnStyle","dayKey","dayEvents","cellBg","cellColor","cellBorder","evIdx","Timeline","isLast","dotColor","DataList","cols","getStripedIndex","rowStyle","valueStyle","TreeNodeRow","depth","expanded","selectedId","onToggle","onSelect","hasChildren","isExpanded","setIsHovered","Tree","defaultExpanded","setExpanded","statusColors","pulseStyleInjected","injectPulseStyle","StatusBadge","status","pulse","Modal","onClose","closeOnOverlay","closeOnEscape","showClose","cardRef","previousFocusRef","card","focusableSelector","handleTab","focusable","first","last","getOverlayStyle","getCardAnimStyle","isFullscreen","Drawer","panelRef","resolvedWidth","getTranslateX","state","offscreen","getOverlayOpacity","Sheet","getTranslate","offscreenMap","panelPosition","borderStyle","Breadcrumb","getPageRange","page","totalPages","siblings","showFirst","showLast","Pagination","pages","buttonBase","Stepper","steps","activeStep","clickable","onStepClick","hoveredStep","setHoveredStep","isHorizontal","circleSize","isStepClickable","isCompleted","isFuture","circleBg","circleBorder","circleText","labelColor","descColor","lineColor","DropdownMenu","dropdownWidth","actionableItems","currentActionIdx","isDanger","isHighlighted","textColor","hoverBg","Link","showIcon","onMouseEnter","onMouseLeave","linkStyle","Spotlight","results","flatItems","grouped","categoryMap","group","CommandMenu","groups","query","setQuery","filteredGroups","flatIndex","currentFlatIndex","AppSidebar","collapsed","onCollapse","collapsedWidth","currentWidth","SidebarItem","active","controlledExpanded","onExpandedChange","isControlled","internalExpanded","setInternalExpanded","toggleExpand","iconColor","bgColor","Navbar","logo","actions","sticky","glass","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","isBottom","appeared","onDismiss","onHeightMeasured","isLeaving","scale","peekOffset","translateY","transform","opacity","isHiddenByDepth","zIndex","measuredRef","appearedIds","setAppearedIds","isRight","isCenter","collapsedHeight","expandedHeight","sum","containerHeight","horizontalStyle","arrayIndex","offsetPx","useToast","ctx","useContext","Alert","closable","vt","isLight","WarningIcon","handleClose","Notification","accentColor","barSizeConfig","stripeKeyframesId","ensureStripeKeyframes","styleEl","ProgressBar","animated","clampedValue","stripeStyle","ProgressCircle","strokeWidth","radius","circumference","sizeMap","resolvedSize","strokeColor","ConfirmDialog","onConfirm","onCancel","confirmLabel","cancelLabel","cancelHovered","setCancelHovered","confirmHovered","setConfirmHovered","confirmBg","confirmTextColor","copyToClipboard","text","textarea","CopyButton","successLabel","onCopy","copied","setCopied","handleCopy","CurrentIcon","CopySimpleIcon","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","toggleExpanded","DropIndicator","DragListRow","allowNesting","maxDepth","draggedId","dropState","onDragStart","onDragOver","onDragLeave","onDrop","onDragEnd","onToggleExpand","renderItem","dragMode","gripHover","setGripHover","rowHover","setRowHover","chevronHover","setChevronHover","handleActiveRef","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.mjs","sourcesContent":["import { useState, useEffect } from 'react';\n\nexport type Theme = 'light' | 'dark';\n\n/**\n * Zjistí aktuální téma aplikace.\n * Výchozí je 'light'. Pokud je na html/body nastaven `data-theme`, použije se.\n * Jinak funguje fallback na systémové preference (prefers-color-scheme).\n */\nexport const useTheme = (): Theme => {\n const [theme, setTheme] = useState<Theme>('light');\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n\n const getTheme = (): Theme => {\n const docTheme = document.documentElement.getAttribute('data-theme') || document.body.getAttribute('data-theme');\n if (docTheme === 'dark' || docTheme === 'light') {\n return docTheme as Theme;\n }\n\n // Fallback na systém\n if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {\n return 'dark';\n }\n\n return 'light'; // default\n };\n\n setTheme(getTheme());\n\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const listener = (e: MediaQueryListEvent) => {\n const docTheme = document.documentElement.getAttribute('data-theme') || document.body.getAttribute('data-theme');\n if (!docTheme) {\n setTheme(e.matches ? 'dark' : 'light');\n }\n };\n mediaQuery.addEventListener('change', listener);\n\n // Nasloucháme případným změnám na data-theme v DOM\n const observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (mutation.attributeName === 'data-theme') {\n setTheme(getTheme());\n }\n });\n });\n\n observer.observe(document.documentElement, { attributes: true });\n observer.observe(document.body, { attributes: true });\n\n return () => {\n mediaQuery.removeEventListener('change', listener);\n observer.disconnect();\n };\n }, []);\n\n return theme;\n};\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' | 'danger';\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 * - `danger` — červené vyplnění (#EF3838)\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: '1',\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 case 'danger':\n return {\n backgroundColor: hovered ? '#FF5252' : '#EF3838',\n color: colors.white,\n border: '1px solid transparent',\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 <label htmlFor={inputId} 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 </label>\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, { useCallback, useEffect, useId, useRef, useState } from 'react';\nimport { Minus as MinusIcon, Plus as PlusIcon, CaretUp as CaretUpIcon, CaretDown as 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 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 buttonBg: 'rgba(255,255,255,0.06)',\n buttonHoverBg: 'rgba(255,255,255,0.12)',\n buttonText: '#ffffff',\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 buttonBg: 'rgba(0,0,0,0.04)',\n buttonHoverBg: 'rgba(0,0,0,0.08)',\n buttonText: '#1a1a1a',\n },\n} as const;\n\n// ─── Size config ─────────────────────────────────────────────────────────────\n\nconst sizeConfig = {\n sm: { padding: '6px 10px', fontSize: '14px', iconSize: 14, height: '30px', buttonPadding: '6px' },\n md: { padding: '8px 12px', fontSize: '16px', iconSize: 16, height: '36px', buttonPadding: '8px' },\n lg: { padding: '10px 14px', fontSize: '18px', iconSize: 18, height: '42px', buttonPadding: '10px' },\n} as const;\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport type NumberInputSize = 'sm' | 'md' | 'lg';\nexport type NumberInputVariant = 'default' | 'compact';\n\nexport interface NumberInputProps {\n /** Aktuální numerická hodnota. */\n value: number;\n /** Callback volaný při změně hodnoty. */\n onChange: (value: number) => void;\n /** Minimální povolená hodnota. */\n min?: number;\n /** Maximální povolená hodnota. */\n max?: number;\n /** Krok inkrementace / dekrementace. @default 1 */\n step?: number;\n /** Popisek zobrazený nad polem. Stylizován velkými písmeny dle SM-UI design systému. */\n label?: string;\n /** Při `true` se pole zobrazí jako nevalidní. Při zadání řetězce se zobrazí chybová zpráva. */\n error?: boolean | string;\n /** Zakáže celé pole včetně tlačítek. */\n disabled?: boolean;\n /**\n * Velikostní preset.\n * - `'sm'` -- kompaktní\n * - `'md'` -- výchozí\n * - `'lg'` -- velký\n * @default 'md'\n */\n size?: NumberInputSize;\n /**\n * Varianta rozložení.\n * - `'default'` -- tlačítka −/+ po stranách\n * - `'compact'` -- šipky nahoru/dolů vpravo uvnitř pole\n * @default 'default'\n */\n variant?: NumberInputVariant;\n /** Text zobrazený před hodnotou (např. měna). */\n prefix?: string;\n /** Text zobrazený za hodnotou (např. jednotka). */\n suffix?: string;\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// ─── NumberInput ─────────────────────────────────────────────────────────────\n\n/**\n * Numerické vstupní pole s tlačítky +/− dle SM-UI design systému.\n *\n * Podržením tlačítka se hodnota plynule inkrementuje / dekrementuje.\n * Hodnota je automaticky omezena na rozsah `min`–`max`.\n *\n * @example\n * ```tsx\n * <NumberInput value={count} onChange={setCount} min={0} max={100} step={5} />\n * <NumberInput value={price} onChange={setPrice} prefix=\"$\" suffix=\"USD\" />\n * ```\n */\nexport const NumberInput = React.forwardRef<HTMLInputElement, NumberInputProps>(\n (\n {\n value,\n onChange,\n min,\n max,\n step = 1,\n label,\n error,\n disabled = false,\n size = 'md',\n variant = 'default',\n prefix,\n suffix,\n style,\n className,\n },\n ref\n ) => {\n const theme = useTheme();\n const t = tokens[theme];\n const autoId = useId();\n const inputId = autoId;\n const sc = sizeConfig[size];\n const [focused, setFocused] = useState(false);\n const [hoveredBtn, setHoveredBtn] = useState<'minus' | 'plus' | 'up' | 'down' | null>(null);\n\n const hasError = Boolean(error);\n const errorMessage = typeof error === 'string' ? error : undefined;\n\n // ── Clamp helper ────────────────────────────────────────────────────\n\n const clamp = useCallback(\n (v: number): number => {\n let result = v;\n if (min !== undefined && result < min) result = min;\n if (max !== undefined && result > max) result = max;\n return result;\n },\n [min, max]\n );\n\n // ── Increment / Decrement ───────────────────────────────────────────\n\n const increment = useCallback(() => {\n onChange(clamp(value + step));\n }, [value, step, onChange, clamp]);\n\n const decrement = useCallback(() => {\n onChange(clamp(value - step));\n }, [value, step, onChange, clamp]);\n\n // ── Hold to repeat ──────────────────────────────────────────────────\n\n const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const startHold = useCallback(\n (action: () => void) => {\n if (disabled) return;\n action();\n timeoutRef.current = setTimeout(() => {\n intervalRef.current = setInterval(action, 80);\n }, 400);\n },\n [disabled]\n );\n\n const stopHold = useCallback(() => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n if (intervalRef.current) {\n clearInterval(intervalRef.current);\n intervalRef.current = null;\n }\n }, []);\n\n useEffect(() => {\n return () => stopHold();\n }, [stopHold]);\n\n // ── Direct input handling ───────────────────────────────────────────\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = e.target.value;\n if (raw === '' || raw === '-') return;\n const parsed = parseFloat(raw);\n if (!isNaN(parsed)) {\n onChange(clamp(parsed));\n }\n };\n\n const handleBlur = () => {\n setFocused(false);\n onChange(clamp(value));\n };\n\n // ── Can increment / decrement ───────────────────────────────────────\n\n const canDecrement = min === undefined || value > min;\n const canIncrement = max === undefined || value < max;\n\n // ── Styles ───────────────────────────────────────────────────────────\n\n const wrapperStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n backgroundColor: disabled ? t.backgroundDisabled : t.background,\n border: `1px solid ${hasError ? t.borderError : focused ? t.borderFocus : t.border}`,\n borderRadius: '8px',\n boxSizing: 'border-box',\n transition: 'border-color 0.15s ease',\n opacity: disabled ? 0.6 : 1,\n overflow: 'hidden',\n height: sc.height,\n };\n\n const buttonStyle = (side: 'minus' | 'plus', canClick: boolean): React.CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: sc.buttonPadding,\n border: 'none',\n background: hoveredBtn === side && canClick && !disabled ? t.buttonHoverBg : t.buttonBg,\n color: canClick && !disabled ? t.buttonText : t.placeholder,\n cursor: disabled || !canClick ? 'not-allowed' : 'pointer',\n flexShrink: 0,\n transition: 'background-color 0.12s ease',\n height: '100%',\n minWidth: sc.height,\n userSelect: 'none',\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 textAlign: 'center',\n cursor: disabled ? 'not-allowed' : 'text',\n MozAppearance: 'textfield',\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 affixStyle: React.CSSProperties = {\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: sc.fontSize,\n color: t.placeholder,\n flexShrink: 0,\n userSelect: 'none',\n lineHeight: 'normal',\n };\n\n // ── Compact chevron button style ──────────────────────────────────\n\n const chevronBtnStyle = (side: 'up' | 'down', canClick: boolean): React.CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n border: 'none',\n background: hoveredBtn === side && canClick && !disabled ? t.buttonHoverBg : 'transparent',\n color: canClick && !disabled ? t.buttonText : t.placeholder,\n cursor: disabled || !canClick ? 'not-allowed' : 'pointer',\n padding: '0 6px',\n height: '14px',\n flexShrink: 0,\n transition: 'background-color 0.12s ease',\n userSelect: 'none',\n borderRadius: '2px',\n });\n\n if (variant === 'compact') {\n return (\n <div\n style={{\n display: 'inline-flex',\n flexDirection: 'column',\n gap: '6px',\n ...style,\n }}\n className={className}\n >\n {label && (\n <label htmlFor={inputId} style={labelStyle}>\n {label}\n </label>\n )}\n\n <div style={wrapperStyle}>\n {/* Input area */}\n <div style={{ flex: 1, display: 'flex', alignItems: 'center', gap: '4px', padding: sc.padding, minWidth: 0 }}>\n {prefix && <span style={affixStyle}>{prefix}</span>}\n <input\n ref={ref}\n id={inputId}\n type=\"text\"\n inputMode=\"numeric\"\n value={value}\n onChange={handleInputChange}\n onFocus={() => setFocused(true)}\n onBlur={handleBlur}\n disabled={disabled}\n style={{ ...nativeStyle, textAlign: 'left' }}\n />\n {suffix && <span style={affixStyle}>{suffix}</span>}\n </div>\n\n {/* Compact chevron buttons */}\n <div style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n borderLeft: `1px solid ${hasError ? t.borderError : focused ? t.borderFocus : t.border}`,\n transition: 'border-color 0.15s ease',\n }}>\n <button\n type=\"button\"\n tabIndex={-1}\n aria-label=\"Zvýšit hodnotu\"\n disabled={disabled || !canIncrement}\n style={chevronBtnStyle('up', canIncrement)}\n onMouseDown={() => startHold(increment)}\n onMouseUp={stopHold}\n onMouseLeave={() => { stopHold(); setHoveredBtn(null); }}\n onMouseEnter={() => setHoveredBtn('up')}\n >\n <CaretUpIcon size={10} weight=\"bold\" />\n </button>\n <button\n type=\"button\"\n tabIndex={-1}\n aria-label=\"Snížit hodnotu\"\n disabled={disabled || !canDecrement}\n style={chevronBtnStyle('down', canDecrement)}\n onMouseDown={() => startHold(decrement)}\n onMouseUp={stopHold}\n onMouseLeave={() => { stopHold(); setHoveredBtn(null); }}\n onMouseEnter={() => setHoveredBtn('down')}\n >\n <CaretDownIcon size={10} weight=\"bold\" />\n </button>\n </div>\n </div>\n\n {errorMessage && (\n <span style={{ fontFamily: \"'Zalando Sans', sans-serif\", fontSize: '12px', color: t.borderError, lineHeight: 'normal' }}>\n {errorMessage}\n </span>\n )}\n </div>\n );\n }\n\n return (\n <div\n style={{\n display: 'inline-flex',\n flexDirection: 'column',\n gap: '6px',\n ...style,\n }}\n className={className}\n >\n {label && (\n <label htmlFor={inputId} style={labelStyle}>\n {label}\n </label>\n )}\n\n <div style={wrapperStyle}>\n {/* Minus button */}\n <button\n type=\"button\"\n tabIndex={-1}\n aria-label=\"Snížit hodnotu\"\n disabled={disabled || !canDecrement}\n style={buttonStyle('minus', canDecrement)}\n onMouseDown={() => startHold(decrement)}\n onMouseUp={stopHold}\n onMouseLeave={() => {\n stopHold();\n setHoveredBtn(null);\n }}\n onMouseEnter={() => setHoveredBtn('minus')}\n >\n <MinusIcon size={sc.iconSize} />\n </button>\n\n {/* Input area */}\n <div style={{ flex: 1, display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '4px', padding: '0 4px', minWidth: 0 }}>\n {prefix && <span style={affixStyle}>{prefix}</span>}\n <input\n ref={ref}\n id={inputId}\n type=\"text\"\n inputMode=\"numeric\"\n value={value}\n onChange={handleInputChange}\n onFocus={() => setFocused(true)}\n onBlur={handleBlur}\n disabled={disabled}\n style={nativeStyle}\n />\n {suffix && <span style={affixStyle}>{suffix}</span>}\n </div>\n\n {/* Plus button */}\n <button\n type=\"button\"\n tabIndex={-1}\n aria-label=\"Zvýšit hodnotu\"\n disabled={disabled || !canIncrement}\n style={buttonStyle('plus', canIncrement)}\n onMouseDown={() => startHold(increment)}\n onMouseUp={stopHold}\n onMouseLeave={() => {\n stopHold();\n setHoveredBtn(null);\n }}\n onMouseEnter={() => setHoveredBtn('plus')}\n >\n <PlusIcon size={sc.iconSize} />\n </button>\n </div>\n\n {errorMessage && (\n <span style={{ fontFamily: \"'Zalando Sans', sans-serif\", fontSize: '12px', color: t.borderError, lineHeight: 'normal' }}>\n {errorMessage}\n </span>\n )}\n </div>\n );\n }\n);\n\nNumberInput.displayName = 'NumberInput';\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 /**\n * Popisek zobrazený nad selectem.\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é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 label,\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 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 {/* Label */}\n {label && (\n <label\n htmlFor={selectId}\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: t.text,\n userSelect: 'none',\n }}\n >\n {label}\n </label>\n )}\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 { MagnifyingGlass as MagnifyingGlassIcon, CaretDown as CaretDownIcon, 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 ───────────────────────────────────────────────────────────\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 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 divider: 'rgba(0,0,0,0.06)',\n scrollbarThumb: 'rgba(0,0,0,0.15)',\n },\n} as const;\n\n// ─── Animation ───────────────────────────────────────────────────────────────\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// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport type ComboboxSize = 'sm' | 'md' | 'lg';\n\nexport interface ComboboxOption {\n /** Unikátní hodnota položky. */\n value: string;\n /** Zobrazovaný popisek. Pokud chybí, použije se `value`. */\n label?: string;\n}\n\nexport interface ComboboxProps {\n /** Dostupné položky k výběru. */\n options: ComboboxOption[];\n /** Aktuální vybraná hodnota. */\n value: string;\n /** Callback volaný při výběru položky. */\n onChange: (value: string) => void;\n /** Callback volaný při změně textu ve vyhledávacím poli. Vhodné pro asynchronní filtrování. */\n onInputChange?: (input: string) => void;\n /** Zástupný text zobrazený při prázdném poli. */\n placeholder?: string;\n /** Popisek zobrazený nad polem. Stylizován velkými písmeny dle SM-UI design systému. */\n label?: string;\n /** Při `true` se pole zobrazí jako nevalidní. Při zadání řetězce se zobrazí chybová zpráva. */\n error?: boolean | string;\n /** Zakáže celou komponentu. */\n disabled?: boolean;\n /** Zobrazí spinner místo ikony vyhledávání. Vhodné při načítání položek. */\n loading?: boolean;\n /** Povolí uživateli zadat vlastní hodnotu, která není v seznamu. @default false */\n allowCustom?: boolean;\n /** Callback volaný při vytvoření vlastní hodnoty (Enter při `allowCustom`). */\n onCreate?: (value: string) => void;\n /** Vlastní renderování položky v seznamu. */\n renderOption?: (option: { value: string; label?: string }, highlighted: boolean) => React.ReactNode;\n /** Obsah zobrazený když žádné výsledky neodpovídají. @default \"Žádné výsledky\" */\n notFoundContent?: React.ReactNode;\n /** Obsah zobrazený pod seznamem položek uvnitř dropdownu. */\n footer?: React.ReactNode;\n /**\n * Velikostní preset.\n * @default 'md'\n */\n size?: ComboboxSize;\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// ─── Combobox ────────────────────────────────────────────────────────────────\n\n/**\n * Kombinované vyhledávací pole se seznamem dle SM-UI design systému.\n *\n * Uživatel zadává text pro filtrování položek. Dropdown se vykresluje\n * přes React portál. Podporuje navigaci klávesami, vlastní hodnoty\n * a asynchronní filtrování přes `onInputChange`.\n *\n * @example\n * ```tsx\n * <Combobox\n * options={[{ value: 'cz', label: 'Česko' }, { value: 'sk', label: 'Slovensko' }]}\n * value={zeme}\n * onChange={setZeme}\n * placeholder=\"Hledat zemi…\"\n * />\n * ```\n */\nexport const Combobox = React.forwardRef<HTMLInputElement, ComboboxProps>(\n (\n {\n options,\n value,\n onChange,\n onInputChange,\n placeholder = 'Hledat…',\n label,\n error,\n disabled = false,\n loading = false,\n allowCustom = false,\n onCreate,\n renderOption,\n notFoundContent,\n footer,\n size = 'md',\n style,\n className,\n },\n ref\n ) => {\n const theme = useTheme();\n const t = tokens[theme];\n const autoId = useId();\n const inputId = autoId;\n const sc = sizeConfig[size];\n\n const triggerRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const listRef = 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 [inputValue, setInputValue] = useState('');\n const [highlightIndex, setHighlightIndex] = useState(-1);\n const [focused, setFocused] = useState(false);\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 // ── Sync input value with selected value ────────────────────────────\n\n useEffect(() => {\n if (!focused) {\n const selectedOpt = options.find((o) => o.value === value);\n setInputValue(selectedOpt ? (selectedOpt.label ?? selectedOpt.value) : value || '');\n }\n }, [value, options, focused]);\n\n // ── Filtered options ─────────────────────────────────────────────────\n\n const filteredOptions = inputValue\n ? options.filter((o) =>\n (o.label ?? o.value).toLowerCase().includes(inputValue.toLowerCase())\n )\n : options;\n\n // ── Open / close ─────────────────────────────────────────────────────\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 dropdown ────────────────────────────────────────────────\n\n const updatePosition = useCallback(() => {\n if (!triggerRef.current) return;\n const rect = triggerRef.current.getBoundingClientRect();\n const dropdownHeight = dropdownRef.current?.offsetHeight ?? 240;\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 }, []);\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 if (!triggerRef.current?.contains(target) && !dropdownRef.current?.contains(target)) {\n doClose();\n // Reset input to selected value\n const selectedOpt = options.find((o) => o.value === value);\n if (!allowCustom) {\n setInputValue(selectedOpt ? (selectedOpt.label ?? selectedOpt.value) : '');\n }\n }\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [open, doClose, value, options, allowCustom]);\n\n // ── Scroll highlighted 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 // ── Handlers ─────────────────────────────────────────────────────────\n\n const handleInputChangeInternal = (e: React.ChangeEvent<HTMLInputElement>) => {\n const val = e.target.value;\n setInputValue(val);\n onInputChange?.(val);\n setHighlightIndex(0);\n if (!open) doOpen();\n };\n\n const selectOption = useCallback(\n (optValue: string) => {\n onChange(optValue);\n const opt = options.find((o) => o.value === optValue);\n setInputValue(opt ? (opt.label ?? opt.value) : optValue);\n doClose();\n },\n [onChange, options, doClose]\n );\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 e.preventDefault();\n if (open && highlightIndex >= 0 && filteredOptions[highlightIndex]) {\n selectOption(filteredOptions[highlightIndex].value);\n } else if (allowCustom && inputValue) {\n onChange(inputValue);\n onCreate?.(inputValue);\n doClose();\n }\n break;\n case 'Escape':\n doClose();\n break;\n case 'Tab':\n if (open) doClose();\n break;\n }\n };\n\n const handleFocus = () => {\n setFocused(true);\n if (!open && !isDisabled) {\n doOpen();\n }\n };\n\n const handleBlur = () => {\n setFocused(false);\n if (allowCustom && inputValue) {\n onChange(inputValue);\n }\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 // ── 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 : 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 };\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 // ── 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 <div\n ref={listRef}\n role=\"listbox\"\n style={{\n maxHeight: 240,\n overflowY: 'auto',\n padding: '6px',\n }}\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 {allowCustom && inputValue\n ? 'Stiskněte Enter pro potvrzení'\n : (notFoundContent ?? 'Žádné výsledky')}\n </div>\n )}\n\n {filteredOptions.map((opt, idx) => {\n const selected = opt.value === value;\n const highlighted = idx === highlightIndex;\n\n return (\n <div\n key={opt.value}\n role=\"option\"\n aria-selected={selected}\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 : t.text,\n backgroundColor: highlighted\n ? t.optionHover\n : selected\n ? t.optionSelected\n : 'transparent',\n cursor: 'pointer',\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={() => selectOption(opt.value)}\n onMouseEnter={() => setHighlightIndex(idx)}\n onMouseLeave={() => setHighlightIndex(-1)}\n >\n {renderOption ? (\n renderOption(opt, highlighted)\n ) : (\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 </>\n )}\n </div>\n );\n })}\n </div>\n {footer && (\n <div style={{\n borderTop: `1px solid ${t.divider}`,\n padding: '8px 6px',\n }}>\n {footer}\n </div>\n )}\n </div>,\n document.body\n )\n : null;\n\n return (\n <div\n style={{ display: 'inline-flex', flexDirection: 'column', gap: '6px', ...style }}\n className={className}\n >\n {label && (\n <label htmlFor={inputId} style={labelStyle}>\n {label}\n </label>\n )}\n\n <div ref={triggerRef} style={triggerStyle} onClick={() => inputRef.current?.focus()}>\n <span style={{ display: 'flex', alignItems: 'center', flexShrink: 0, color: t.placeholder }}>\n {loading ? <Spinner size={sc.iconSize} color={t.placeholder} /> : <MagnifyingGlassIcon size={sc.iconSize} color={t.placeholder} />}\n </span>\n\n <input\n ref={(node) => {\n (inputRef as React.MutableRefObject<HTMLInputElement | null>).current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLInputElement | null>).current = node;\n }}\n id={inputId}\n type=\"text\"\n value={inputValue}\n onChange={handleInputChangeInternal}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={loading}\n style={nativeStyle}\n />\n\n <span style={{ display: 'flex', alignItems: 'center', flexShrink: 0 }}>\n <CaretDownIcon\n size={sc.iconSize}\n color={t.placeholder}\n style={{\n transition: 'transform 0.2s ease',\n transform: open ? 'rotate(180deg)' : 'rotate(0deg)',\n }}\n />\n </span>\n </div>\n\n {errorMessage && (\n <span style={{ fontFamily: \"'Zalando Sans', sans-serif\", fontSize: '12px', color: t.borderError, lineHeight: 'normal' }}>\n {errorMessage}\n </span>\n )}\n\n {dropdown}\n </div>\n );\n }\n);\n\nCombobox.displayName = 'Combobox';\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 /**\n * Styl tlačítka u button varianty.\n * - `'default'` — neutrální vstupní pole\n * - `'primary'` — oranžové tlačítko jako primární Button\n * @default 'default'\n */\n buttonStyle?: 'default' | 'primary';\n /**\n * Zda zobrazit seznam nahraných souborů pod komponentou.\n * @default true\n */\n showFileList?: boolean;\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 buttonStyle = 'default',\n showFileList = true,\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 ─────────────────────────────────────────────── */\n buttonStyle === 'primary' ? (\n <button\n type=\"button\"\n disabled={disabled}\n onClick={() => !disabled && inputRef.current?.click()}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '8px',\n padding: '8px 16px',\n borderRadius: '8px',\n border: '1px solid transparent',\n backgroundColor: '#FC4F00',\n color: '#ffffff',\n opacity: disabled ? 0.5 : 1,\n cursor: disabled ? 'not-allowed' : 'pointer',\n fontFamily: \"'Zalando Sans Expanded', sans-serif\",\n fontSize: '14px',\n fontWeight: 400,\n lineHeight: 'normal',\n transition: 'background-color 0.15s ease',\n boxSizing: 'border-box',\n outline: 'none',\n maxWidth: '100%',\n }}\n onMouseEnter={(e) => {\n if (!disabled) (e.currentTarget as HTMLElement).style.backgroundColor = '#FF6D2A';\n }}\n onMouseLeave={(e) => {\n (e.currentTarget as HTMLElement).style.backgroundColor = '#FC4F00';\n }}\n >\n <UploadSimpleIcon size={16} color=\"#ffffff\" style={{ flexShrink: 0 }} />\n <span style={{ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {files.length === 0\n ? 'Nahrát soubor'\n : files.length === 1\n ? files[0].file.name\n : `${files.length} souborů`}\n </span>\n </button>\n ) : (\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\n {/* File list */}\n {showFileList && 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, { 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, { useState, useRef, useEffect, useCallback, useId } from 'react';\nimport { createPortal } from 'react-dom';\nimport { Eyedropper as EyedropperIcon } 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 backgroundDisabled: 'rgba(3,3,3,0.4)',\n border: 'rgba(255,255,255,0.3)',\n borderFocus: 'rgba(255,255,255,0.7)',\n text: '#ffffff',\n placeholder: '#ACACAC',\n label: '#ffffff',\n popoverBg: 'rgba(24,24,24,0.95)',\n popoverBorder: 'rgba(255,255,255,0.12)',\n swatchBorder: 'rgba(255,255,255,0.2)',\n swatchHover: 'rgba(255,255,255,0.12)',\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 text: '#1a1a1a',\n placeholder: '#888888',\n label: '#1a1a1a',\n popoverBg: 'rgba(255,255,255,0.95)',\n popoverBorder: 'rgba(0,0,0,0.1)',\n swatchBorder: 'rgba(0,0,0,0.15)',\n swatchHover: 'rgba(0,0,0,0.06)',\n },\n} as const;\n\n// ─── Animation ───────────────────────────────────────────────────────────────\n\nconst ANIM_DURATION = 180;\n\n// ─── Default presets ─────────────────────────────────────────────────────────\n\nconst DEFAULT_PRESETS = [\n '#FC4F00', '#FF6D2A', '#EF3838', '#E8612D',\n '#00A205', '#2196F3', '#9C27B0', '#FF9800',\n '#F44336', '#4CAF50', '#03A9F4', '#E91E63',\n '#FFC107', '#8BC34A', '#00BCD4', '#673AB7',\n '#795548', '#607D8B', '#000000', '#ffffff',\n];\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface ColorPickerProps {\n /** Aktuální barva v hexadecimálním formátu (např. `#FC4F00`). */\n value: string;\n /** Callback volaný při změně barvy. */\n onChange: (color: string) => void;\n /** Přednastavené barvy zobrazené v mřížce. Pokud chybí, použije se výchozí paleta. */\n presets?: string[];\n /** Popisek zobrazený nad komponentou. Stylizován velkými písmeny dle SM-UI design systému. */\n label?: string;\n /** Zakáže celou komponentu. */\n disabled?: boolean;\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// ─── Helpers ─────────────────────────────────────────────────────────────────\n\nconst isValidHex = (hex: string): boolean => /^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$/.test(hex);\n\nconst normalizeHex = (hex: string): string => {\n const clean = hex.replace(/[^0-9A-Fa-f#]/g, '');\n if (clean.startsWith('#')) return clean.slice(0, 7);\n return `#${clean.slice(0, 6)}`;\n};\n\n/** Zjistí, zda barva je světlá (pro kontrast textu). */\nconst isLightColor = (hex: string): boolean => {\n const c = hex.replace('#', '');\n const r = parseInt(c.length === 3 ? c[0] + c[0] : c.slice(0, 2), 16);\n const g = parseInt(c.length === 3 ? c[1] + c[1] : c.slice(2, 4), 16);\n const b = parseInt(c.length === 3 ? c[2] + c[2] : c.slice(4, 6), 16);\n return (r * 299 + g * 587 + b * 114) / 1000 > 150;\n};\n\n// ─── ColorPicker ─────────────────────────────────────────────────────────────\n\n/**\n * Výběr barvy dle SM-UI design systému.\n *\n * Zobrazuje náhled aktuální barvy, hexadecimální vstup\n * a po kliknutí popover s mřížkou přednastavených barev.\n *\n * @example\n * ```tsx\n * <ColorPicker value={color} onChange={setColor} />\n * <ColorPicker value={color} onChange={setColor} presets={['#FF0000', '#00FF00', '#0000FF']} />\n * ```\n */\nexport const ColorPicker: React.FC<ColorPickerProps> = ({\n value,\n onChange,\n presets = DEFAULT_PRESETS,\n label,\n disabled = false,\n style,\n className,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n const autoId = useId();\n const inputId = autoId;\n\n const triggerRef = useRef<HTMLDivElement>(null);\n const popoverRef = 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 [hexInput, setHexInput] = useState(value);\n const [focused, setFocused] = useState(false);\n const [popoverPos, setPopoverPos] = useState<{ top: number; left: number; openAbove: boolean }>({ top: 0, left: 0, openAbove: false });\n\n // ── Sync hex input with value ──────────────────────────────────────\n\n useEffect(() => {\n if (!focused) {\n setHexInput(value);\n }\n }, [value, focused]);\n\n // ── Open / close ───────────────────────────────────────────────────\n\n const doOpen = useCallback(() => {\n if (disabled) return;\n setOpen(true);\n setVisible(true);\n setAnimState('opening');\n requestAnimationFrame(() => {\n requestAnimationFrame(() => setAnimState('open'));\n });\n }, [disabled]);\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 popover ───────────────────────────────────────────────\n\n const updatePosition = useCallback(() => {\n if (!triggerRef.current) return;\n const rect = triggerRef.current.getBoundingClientRect();\n const popoverHeight = 220;\n const spaceBelow = window.innerHeight - rect.bottom - 8;\n const openAbove = spaceBelow < popoverHeight && rect.top > spaceBelow;\n setPopoverPos({\n top: openAbove ? rect.top - 8 : rect.bottom + 8,\n left: rect.left,\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 if (!triggerRef.current?.contains(target) && !popoverRef.current?.contains(target)) {\n doClose();\n }\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [open, doClose]);\n\n // ── Handlers ───────────────────────────────────────────────────────\n\n const handleHexChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const val = normalizeHex(e.target.value);\n setHexInput(val);\n if (isValidHex(val)) {\n onChange(val);\n }\n };\n\n const handleHexBlur = () => {\n setFocused(false);\n if (isValidHex(hexInput)) {\n onChange(hexInput);\n } else {\n setHexInput(value);\n }\n };\n\n const handlePresetClick = (color: string) => {\n onChange(color);\n setHexInput(color);\n doClose();\n };\n\n // ── Animation styles ───────────────────────────────────────────────\n\n const getPopoverAnimStyle = (): React.CSSProperties => {\n const above = popoverPos.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 // ── Styles ─────────────────────────────────────────────────────────\n\n const wrapperStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: '10px',\n backgroundColor: disabled ? t.backgroundDisabled : t.background,\n border: `1px solid ${focused ? t.borderFocus : t.border}`,\n borderRadius: '8px',\n padding: '8px 12px',\n boxSizing: 'border-box',\n transition: 'border-color 0.15s ease',\n opacity: disabled ? 0.6 : 1,\n cursor: disabled ? 'not-allowed' : 'pointer',\n };\n\n const swatchStyle: React.CSSProperties = {\n width: '24px',\n height: '24px',\n borderRadius: '6px',\n backgroundColor: isValidHex(value) ? value : '#cccccc',\n border: `1px solid ${t.swatchBorder}`,\n flexShrink: 0,\n cursor: disabled ? 'not-allowed' : 'pointer',\n transition: 'transform 0.12s ease',\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 // ── Popover ────────────────────────────────────────────────────────\n\n const popover = visible\n ? createPortal(\n <div\n ref={popoverRef}\n style={{\n position: 'fixed',\n ...(popoverPos.openAbove\n ? { bottom: window.innerHeight - popoverPos.top, left: popoverPos.left }\n : { top: popoverPos.top, left: popoverPos.left }),\n backgroundColor: t.popoverBg,\n border: `1px solid ${t.popoverBorder}`,\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 padding: '12px',\n boxSizing: 'border-box',\n transformOrigin: popoverPos.openAbove ? 'bottom left' : 'top left',\n ...getPopoverAnimStyle(),\n }}\n >\n {/* Preset grid */}\n <div style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(5, 1fr)',\n gap: '6px',\n }}>\n {presets.map((color, idx) => (\n <button\n key={`${color}-${idx}`}\n type=\"button\"\n aria-label={`Vybrat barvu ${color}`}\n onClick={() => handlePresetClick(color)}\n style={{\n width: '32px',\n height: '32px',\n borderRadius: '6px',\n backgroundColor: color,\n border: color === value\n ? '2px solid #FC4F00'\n : `1px solid ${t.swatchBorder}`,\n cursor: 'pointer',\n padding: 0,\n transition: 'transform 0.12s ease, border-color 0.12s ease',\n outline: 'none',\n }}\n onMouseEnter={(e) => { (e.currentTarget as HTMLButtonElement).style.transform = 'scale(1.1)'; }}\n onMouseLeave={(e) => { (e.currentTarget as HTMLButtonElement).style.transform = 'scale(1)'; }}\n />\n ))}\n </div>\n </div>,\n document.body\n )\n : null;\n\n return (\n <div\n style={{ display: 'inline-flex', flexDirection: 'column', gap: '6px', ...style }}\n className={className}\n >\n {label && (\n <label htmlFor={inputId} style={labelStyle}>\n {label}\n </label>\n )}\n\n <div ref={triggerRef} style={wrapperStyle}>\n {/* Color swatch */}\n <div\n style={swatchStyle}\n onClick={() => { if (!disabled) open ? doClose() : doOpen(); }}\n />\n\n {/* Hex input */}\n <input\n id={inputId}\n type=\"text\"\n value={hexInput}\n onChange={handleHexChange}\n onFocus={() => setFocused(true)}\n onBlur={handleHexBlur}\n disabled={disabled}\n maxLength={7}\n style={{\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: '16px',\n lineHeight: 'normal',\n color: t.text,\n cursor: disabled ? 'not-allowed' : 'text',\n }}\n />\n\n {/* Eyedropper icon */}\n <span\n style={{ display: 'flex', alignItems: 'center', flexShrink: 0, color: t.placeholder, cursor: disabled ? 'not-allowed' : 'pointer' }}\n onClick={() => { if (!disabled) open ? doClose() : doOpen(); }}\n >\n <EyedropperIcon\n size={16}\n color={isLightColor(value) && theme === 'light' ? t.placeholder : t.placeholder}\n />\n </span>\n </div>\n\n {popover}\n </div>\n );\n};\n\nColorPicker.displayName = 'ColorPicker';\n","import React, { useState, useCallback, useId } from 'react';\nimport { Star as StarIcon } from '@phosphor-icons/react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ───────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n text: '#ffffff',\n label: '#ffffff',\n starFilled: '#FC4F00',\n starEmpty: 'rgba(255,255,255,0.2)',\n starHover: '#FF6D2A',\n },\n light: {\n text: '#1a1a1a',\n label: '#1a1a1a',\n starFilled: '#FC4F00',\n starEmpty: 'rgba(0,0,0,0.15)',\n starHover: '#FF6D2A',\n },\n} as const;\n\n// ─── Size config ─────────────────────────────────────────────────────────────\n\nconst sizeConfig = {\n sm: { starSize: 18, gap: '2px' },\n md: { starSize: 24, gap: '4px' },\n lg: { starSize: 32, gap: '6px' },\n} as const;\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport type RatingSize = 'sm' | 'md' | 'lg';\n\nexport interface RatingProps {\n /** Aktuální hodnota hodnocení (1–max). */\n value: number;\n /** Callback volaný při změně hodnocení. Pokud chybí, komponenta je v režimu pouze pro čtení. */\n onChange?: (value: number) => void;\n /** Maximální počet hvězd. @default 5 */\n max?: number;\n /**\n * Velikostní preset.\n * @default 'md'\n */\n size?: RatingSize;\n /** Přepne komponentu do režimu pouze pro zobrazení. */\n readOnly?: boolean;\n /** Popisek zobrazený nad komponentou. Stylizován velkými písmeny dle SM-UI design systému. */\n label?: string;\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// ─── Rating ──────────────────────────────────────────────────────────────────\n\n/**\n * Hodnocení hvězdičkami dle SM-UI design systému.\n *\n * Podporuje interaktivní výběr s náhledem při najetí myší\n * a režim pouze pro čtení.\n *\n * @example\n * ```tsx\n * <Rating value={rating} onChange={setRating} />\n * <Rating value={3} max={10} readOnly />\n * <Rating value={4} size=\"lg\" label=\"Hodnocení\" />\n * ```\n */\nexport const Rating: React.FC<RatingProps> = ({\n value,\n onChange,\n max = 5,\n size = 'md',\n readOnly = false,\n label,\n style,\n className,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n const autoId = useId();\n const sc = sizeConfig[size];\n const [hoverIndex, setHoverIndex] = useState<number | null>(null);\n\n const isInteractive = !readOnly && !!onChange;\n\n const handleClick = useCallback(\n (index: number) => {\n if (!isInteractive) return;\n onChange!(index + 1);\n },\n [isInteractive, onChange]\n );\n\n const handleMouseEnter = useCallback(\n (index: number) => {\n if (!isInteractive) return;\n setHoverIndex(index);\n },\n [isInteractive]\n );\n\n const handleMouseLeave = useCallback(() => {\n setHoverIndex(null);\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 stars = Array.from({ length: max }, (_, i) => {\n const displayValue = hoverIndex !== null ? hoverIndex + 1 : value;\n const isFilled = i < displayValue;\n const isHovered = hoverIndex !== null && i <= hoverIndex;\n\n return (\n <span\n key={i}\n role={isInteractive ? 'button' : undefined}\n tabIndex={isInteractive ? 0 : undefined}\n aria-label={isInteractive ? `Hodnocení ${i + 1} z ${max}` : undefined}\n onClick={() => handleClick(i)}\n onMouseEnter={() => handleMouseEnter(i)}\n onMouseLeave={handleMouseLeave}\n onKeyDown={(e) => {\n if (isInteractive && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault();\n handleClick(i);\n }\n }}\n style={{\n display: 'inline-flex',\n cursor: isInteractive ? 'pointer' : 'default',\n transition: 'transform 0.12s ease, color 0.12s ease',\n transform: isHovered ? 'scale(1.15)' : 'scale(1)',\n outline: 'none',\n }}\n >\n <StarIcon\n size={sc.starSize}\n weight={isFilled ? 'fill' : 'regular'}\n color={isFilled\n ? (isHovered ? t.starHover : t.starFilled)\n : t.starEmpty\n }\n />\n </span>\n );\n });\n\n return (\n <div\n style={{ display: 'inline-flex', flexDirection: 'column', gap: '6px', ...style }}\n className={className}\n role=\"group\"\n aria-label={label ?? 'Hodnocení'}\n >\n {label && (\n <label htmlFor={autoId} style={labelStyle}>\n {label}\n </label>\n )}\n\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: sc.gap,\n }}\n onMouseLeave={handleMouseLeave}\n >\n {stars}\n </div>\n </div>\n );\n};\n\nRating.displayName = 'Rating';\n","import React, { useState, useRef, useEffect, useCallback, useId } 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 backgroundFilled: 'rgba(3,3,3,0.85)',\n border: 'rgba(255,255,255,0.3)',\n borderFocus: 'rgba(255,255,255,0.7)',\n borderError: '#EF3838',\n borderFilled: 'rgba(255,255,255,0.5)',\n text: '#ffffff',\n label: '#ffffff',\n caret: '#FC4F00',\n },\n light: {\n background: 'rgba(255,255,255,0.85)',\n backgroundDisabled: 'rgba(240,240,240,0.6)',\n backgroundFilled: 'rgba(255,255,255,0.95)',\n border: 'rgba(0,0,0,0.2)',\n borderFocus: 'rgba(0,0,0,0.6)',\n borderError: '#EF3838',\n borderFilled: 'rgba(0,0,0,0.35)',\n text: '#1a1a1a',\n label: '#1a1a1a',\n caret: '#FC4F00',\n },\n} as const;\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface OTPInputProps {\n /** Počet polí (číslic). @default 6 */\n length?: number;\n /** Aktuální hodnota jako řetězec číslic. */\n value: string;\n /** Callback volaný při změně hodnoty. */\n onChange: (value: string) => void;\n /** Při `true` se pole zobrazí jako nevalidní. Při zadání řetězce se zobrazí chybová zpráva. */\n error?: boolean | string;\n /** Zakáže celou komponentu. */\n disabled?: boolean;\n /** Automaticky zaměří první pole při renderování. @default false */\n autoFocus?: boolean;\n /** Popisek zobrazený nad komponentou. Stylizován velkými písmeny dle SM-UI design systému. */\n label?: string;\n /** Vloží oddělovač po každých N polích. Např. `separatorAfter={3}` u 6místného kódu vytvoří skupiny 3-3. */\n separatorAfter?: number;\n /** Obsah oddělovače. @default '-' */\n separator?: 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// ─── OTPInput ────────────────────────────────────────────────────────────────\n\n/**\n * Pole pro zadání jednorázového kódu (OTP) dle SM-UI design systému.\n *\n * Každá číslice má vlastní pole. Automaticky přesouvá fokus\n * na další pole při zadání a na předchozí při smazání.\n * Podporuje vložení celého kódu ze schránky.\n *\n * @example\n * ```tsx\n * <OTPInput value={otp} onChange={setOtp} autoFocus />\n * <OTPInput value={otp} onChange={setOtp} length={4} error=\"Neplatný kód\" />\n * ```\n */\nexport const OTPInput: React.FC<OTPInputProps> = ({\n length = 6,\n value,\n onChange,\n error,\n disabled = false,\n autoFocus = false,\n label,\n separatorAfter,\n separator = '-',\n style,\n className,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n const autoId = useId();\n\n const inputsRef = useRef<(HTMLInputElement | null)[]>([]);\n const [focusedIndex, setFocusedIndex] = useState<number | null>(null);\n\n const hasError = Boolean(error);\n const errorMessage = typeof error === 'string' ? error : undefined;\n\n // ── Pad value to length ────────────────────────────────────────────\n\n const digits = value.padEnd(length, '').slice(0, length).split('');\n\n // ── Auto-focus first input ─────────────────────────────────────────\n\n useEffect(() => {\n if (autoFocus && inputsRef.current[0]) {\n inputsRef.current[0].focus();\n }\n }, [autoFocus]);\n\n // ── Handlers ───────────────────────────────────────────────────────\n\n const focusInput = useCallback((index: number) => {\n if (index >= 0 && index < length) {\n inputsRef.current[index]?.focus();\n }\n }, [length]);\n\n const updateValue = useCallback(\n (newDigits: string[]) => {\n const newValue = newDigits.join('').replace(/[^0-9]/g, '');\n onChange(newValue);\n },\n [onChange]\n );\n\n const handleInput = useCallback(\n (index: number, char: string) => {\n if (!/^[0-9]$/.test(char)) return;\n\n const newDigits = [...digits];\n newDigits[index] = char;\n updateValue(newDigits);\n\n // Auto-focus next\n if (index < length - 1) {\n focusInput(index + 1);\n }\n },\n [digits, length, updateValue, focusInput]\n );\n\n const handleKeyDown = useCallback(\n (index: number, e: React.KeyboardEvent<HTMLInputElement>) => {\n switch (e.key) {\n case 'Backspace':\n e.preventDefault();\n if (digits[index]) {\n // Clear current\n const newDigits = [...digits];\n newDigits[index] = '';\n updateValue(newDigits);\n } else if (index > 0) {\n // Move to previous and clear\n const newDigits = [...digits];\n newDigits[index - 1] = '';\n updateValue(newDigits);\n focusInput(index - 1);\n }\n break;\n case 'Delete':\n e.preventDefault();\n {\n const newDigits = [...digits];\n newDigits[index] = '';\n updateValue(newDigits);\n }\n break;\n case 'ArrowLeft':\n e.preventDefault();\n if (index > 0) focusInput(index - 1);\n break;\n case 'ArrowRight':\n e.preventDefault();\n if (index < length - 1) focusInput(index + 1);\n break;\n }\n },\n [digits, length, updateValue, focusInput]\n );\n\n const handleChange = useCallback(\n (index: number, e: React.ChangeEvent<HTMLInputElement>) => {\n const inputVal = e.target.value;\n // Take the last character typed (handles overwrite)\n const char = inputVal.slice(-1);\n if (char && /^[0-9]$/.test(char)) {\n handleInput(index, char);\n }\n },\n [handleInput]\n );\n\n const handlePaste = useCallback(\n (e: React.ClipboardEvent) => {\n e.preventDefault();\n const pasted = e.clipboardData.getData('text').replace(/[^0-9]/g, '').slice(0, length);\n if (!pasted) return;\n\n const newDigits = [...digits];\n for (let i = 0; i < pasted.length; i++) {\n newDigits[i] = pasted[i];\n }\n updateValue(newDigits);\n\n // Focus the next empty or last field\n const nextIndex = Math.min(pasted.length, length - 1);\n focusInput(nextIndex);\n },\n [digits, length, updateValue, focusInput]\n );\n\n const handleFocus = useCallback((index: number) => {\n setFocusedIndex(index);\n // Select content on focus\n inputsRef.current[index]?.select();\n }, []);\n\n const handleBlur = useCallback(() => {\n setFocusedIndex(null);\n }, []);\n\n // ── Styles ─────────────────────────────────────────────────────────\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 getBoxStyle = (index: number): React.CSSProperties => {\n const isFocused = focusedIndex === index;\n const hasDig = !!digits[index];\n\n return {\n width: '44px',\n height: '52px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontStyle: 'normal',\n fontWeight: 500,\n fontSize: '20px',\n lineHeight: 'normal',\n color: t.text,\n textAlign: 'center',\n backgroundColor: disabled\n ? t.backgroundDisabled\n : hasDig\n ? t.backgroundFilled\n : t.background,\n border: `1px solid ${\n hasError\n ? t.borderError\n : isFocused\n ? t.borderFocus\n : hasDig\n ? t.borderFilled\n : t.border\n }`,\n borderRadius: '8px',\n outline: 'none',\n boxSizing: 'border-box',\n transition: 'border-color 0.15s ease, background-color 0.15s ease',\n opacity: disabled ? 0.6 : 1,\n cursor: disabled ? 'not-allowed' : 'text',\n caretColor: t.caret,\n };\n };\n\n return (\n <div\n style={{ display: 'inline-flex', flexDirection: 'column', gap: '6px', ...style }}\n className={className}\n >\n {label && (\n <label htmlFor={`${autoId}-0`} style={labelStyle}>\n {label}\n </label>\n )}\n\n <div style={{ display: 'flex', gap: '8px', alignItems: 'center' }} onPaste={handlePaste}>\n {Array.from({ length }, (_, i) => (\n <React.Fragment key={i}>\n {separatorAfter && i > 0 && i % separatorAfter === 0 && (\n <span\n style={{\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '20px',\n fontWeight: 500,\n color: t.text,\n userSelect: 'none',\n lineHeight: 'normal',\n opacity: disabled ? 0.6 : 0.5,\n padding: '0 2px',\n }}\n >\n {separator}\n </span>\n )}\n <input\n ref={(el) => { inputsRef.current[i] = el; }}\n id={`${autoId}-${i}`}\n type=\"text\"\n inputMode=\"numeric\"\n autoComplete=\"one-time-code\"\n maxLength={2}\n value={digits[i] || ''}\n onChange={(e) => handleChange(i, e)}\n onKeyDown={(e) => handleKeyDown(i, e)}\n onFocus={() => handleFocus(i)}\n onBlur={handleBlur}\n disabled={disabled}\n aria-label={`Číslice ${i + 1} z ${length}`}\n style={getBoxStyle(i)}\n />\n </React.Fragment>\n ))}\n </div>\n\n {errorMessage && (\n <span style={{ fontFamily: \"'Zalando Sans', sans-serif\", fontSize: '12px', color: t.borderError, lineHeight: 'normal' }}>\n {errorMessage}\n </span>\n )}\n </div>\n );\n};\n\nOTPInput.displayName = 'OTPInput';\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, { useState, useCallback, useMemo } from '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 textMuted: '#888888',\n rowHover: 'rgba(255,255,255,0.04)',\n selectedRowBg: 'rgba(252,79,0,0.06)',\n checkboxBorder: 'rgba(255,255,255,0.3)',\n checkboxCheckedBg: '#FC4F00',\n checkboxCheckedBorder: '#FC4F00',\n checkboxCheck: '#ffffff',\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 textMuted: '#999999',\n rowHover: 'rgba(0,0,0,0.03)',\n selectedRowBg: 'rgba(252,79,0,0.04)',\n checkboxBorder: 'rgba(0,0,0,0.25)',\n checkboxCheckedBg: '#FC4F00',\n checkboxCheckedBorder: '#FC4F00',\n checkboxCheck: '#ffffff',\n },\n} as const;\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\n/** Definice sloupce pro DataGrid. */\nexport interface DataGridColumn {\n /** Klíč odpovídající hodnotě v datovém objektu. */\n key: string;\n /** Text záhlaví sloupce. */\n header: string;\n /** Šířka sloupce (CSS hodnota). */\n width?: string | number;\n /** Minimální šířka sloupce v pixelech. */\n minWidth?: number;\n /** Zarovnání obsahu. @default 'left' */\n align?: 'left' | 'center' | 'right';\n /** Povolí řazení podle tohoto sloupce. @default false */\n sortable?: boolean;\n /** Povolí editaci buňky (placeholder pro budoucí implementaci). @default false */\n editable?: boolean;\n /** Vlastní vykreslovací funkce pro buňku. */\n render?: (value: any, row: any, index: number) => React.ReactNode;\n}\n\nexport interface DataGridProps {\n /** Definice sloupců. */\n columns: DataGridColumn[];\n /** Data k zobrazení — pole objektů. */\n data: any[];\n /** Povolí výběr řádků pomocí zaškrtávacích políček. @default false */\n selectable?: boolean;\n /** Callback při změně výběru řádků. */\n onSelectionChange?: (ids: string[]) => void;\n /** Při `true` se zobrazí skeleton řádky. @default false */\n loading?: boolean;\n /** Klíč pro identifikaci řádků. @default 'id' */\n rowKey?: string;\n /** Callback při kliknutí na řádek. */\n onRowClick?: (row: any) => void;\n /** Fixní záhlaví při scrollování. @default false */\n stickyHeader?: boolean;\n /** Text zobrazený při prázdných datech. @default 'Žádná data' */\n emptyText?: string;\n /** Další inline styly. */\n style?: React.CSSProperties;\n /** Dodatečná CSS třída. */\n className?: string;\n}\n\n// ─── Checkbox ───────────────────────────────────────────────────────────────\n\ninterface InternalCheckboxProps {\n checked: boolean;\n indeterminate?: boolean;\n onChange: () => void;\n t: (typeof tokens)['dark'] | (typeof tokens)['light'];\n}\n\nconst InternalCheckbox: React.FC<InternalCheckboxProps> = ({\n checked,\n indeterminate,\n onChange,\n t,\n}) => {\n const isActive = checked || indeterminate;\n\n return (\n <span\n role=\"checkbox\"\n aria-checked={indeterminate ? 'mixed' : checked}\n tabIndex={0}\n onClick={(e) => {\n e.stopPropagation();\n onChange();\n }}\n onKeyDown={(e) => {\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault();\n onChange();\n }\n }}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '16px',\n height: '16px',\n borderRadius: '4px',\n border: `1.5px solid ${isActive ? t.checkboxCheckedBorder : t.checkboxBorder}`,\n backgroundColor: isActive ? t.checkboxCheckedBg : 'transparent',\n cursor: 'pointer',\n flexShrink: 0,\n transition: 'all 0.12s ease',\n }}\n >\n {checked && (\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\">\n <path\n d=\"M2 5L4.2 7.5L8 2.5\"\n stroke={t.checkboxCheck}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n {indeterminate && !checked && (\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\">\n <line\n x1=\"2\"\n y1=\"5\"\n x2=\"8\"\n y2=\"5\"\n stroke={t.checkboxCheck}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n )}\n </span>\n );\n};\n\n// ─── DataGrid ───────────────────────────────────────────────────────────────\n\n/**\n * Pokročilá datová mřížka s výběrem řádků, sticky záhlavím a loading stavem.\n *\n * Rozšiřuje vzor Table o zaškrtávací políčka pro výběr,\n * klikání na řádky a skeleton placeholder při načítání.\n *\n * @example\n * ```tsx\n * <DataGrid\n * columns={[\n * { key: 'name', header: 'Jméno', minWidth: 200 },\n * { key: 'email', header: 'E-mail' },\n * { key: 'role', header: 'Role', align: 'center' },\n * ]}\n * data={users}\n * selectable\n * stickyHeader\n * onSelectionChange={(ids) => console.log(ids)}\n * onRowClick={(row) => console.log(row)}\n * />\n * ```\n */\nexport const DataGrid: React.FC<DataGridProps> = ({\n columns,\n data,\n selectable = false,\n onSelectionChange,\n loading = false,\n rowKey = 'id',\n onRowClick,\n stickyHeader = false,\n emptyText = 'Žádná data',\n style,\n className,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n\n const [selectedIds, setSelectedIds] = useState<Set<string>>(new Set());\n const [hoveredRow, setHoveredRow] = useState<string | null>(null);\n\n const allIds = useMemo(() => data.map((row) => String(row[rowKey])), [data, rowKey]);\n\n const allSelected = allIds.length > 0 && allIds.every((id) => selectedIds.has(id));\n const someSelected = allIds.some((id) => selectedIds.has(id)) && !allSelected;\n\n const toggleAll = useCallback(() => {\n const next = allSelected ? new Set<string>() : new Set(allIds);\n setSelectedIds(next);\n onSelectionChange?.(Array.from(next));\n }, [allSelected, allIds, onSelectionChange]);\n\n const toggleRow = useCallback(\n (id: string) => {\n setSelectedIds((prev) => {\n const next = new Set(prev);\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n onSelectionChange?.(Array.from(next));\n return next;\n });\n },\n [onSelectionChange],\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 };\n\n const thStyle = (col: DataGridColumn): React.CSSProperties => ({\n padding: '12px 16px',\n textAlign: col.align || '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 userSelect: 'none',\n width: col.width != null ? (typeof col.width === 'number' ? `${col.width}px` : col.width) : undefined,\n minWidth: col.minWidth != null ? `${col.minWidth}px` : undefined,\n ...(stickyHeader\n ? {\n position: 'sticky' as const,\n top: 0,\n zIndex: 2,\n backdropFilter: 'blur(20px)',\n WebkitBackdropFilter: 'blur(20px)',\n }\n : {}),\n });\n\n const tdStyle = (col: DataGridColumn): React.CSSProperties => ({\n padding: '10px 16px',\n borderBottom: `1px solid ${t.border}`,\n lineHeight: 'normal',\n textAlign: col.align || 'left',\n });\n\n const checkboxThStyle: React.CSSProperties = {\n padding: '12px 12px 12px 16px',\n backgroundColor: t.headerBg,\n borderBottom: `1px solid ${t.border}`,\n width: '40px',\n ...(stickyHeader\n ? {\n position: 'sticky' as const,\n top: 0,\n zIndex: 2,\n backdropFilter: 'blur(20px)',\n WebkitBackdropFilter: 'blur(20px)',\n }\n : {}),\n };\n\n const checkboxTdStyle: React.CSSProperties = {\n padding: '10px 12px 10px 16px',\n borderBottom: `1px solid ${t.border}`,\n width: '40px',\n };\n\n const skeletonRows = 5;\n\n return (\n <div\n className={className}\n style={{\n overflow: stickyHeader ? 'auto' : 'hidden',\n borderRadius: '12px',\n border: `1px solid ${t.border}`,\n ...style,\n }}\n >\n <table style={tableStyle}>\n <thead>\n <tr>\n {selectable && (\n <th style={checkboxThStyle}>\n <InternalCheckbox\n checked={allSelected}\n indeterminate={someSelected}\n onChange={toggleAll}\n t={t}\n />\n </th>\n )}\n {columns.map((col) => (\n <th key={col.key} style={thStyle(col)}>\n {col.header}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {loading\n ? Array.from({ length: skeletonRows }).map((_, rowIdx) => (\n <tr key={`skel-${rowIdx}`}>\n {selectable && (\n <td style={checkboxTdStyle}>\n <Skeleton variant=\"rect\" width={16} height={16} />\n </td>\n )}\n {columns.map((col) => (\n <td key={col.key} style={tdStyle(col)}>\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 + (selectable ? 1 : 0)}\n style={{\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 const id = String(row[rowKey]);\n const isSelected = selectedIds.has(id);\n const isHovered = hoveredRow === id;\n const isLastRow = rowIdx === data.length - 1;\n\n let rowBg = 'transparent';\n if (isSelected) rowBg = t.selectedRowBg;\n else if (isHovered) rowBg = t.rowHover;\n\n return (\n <tr\n key={id}\n style={{\n backgroundColor: rowBg,\n cursor: onRowClick ? 'pointer' : 'default',\n transition: 'background-color 0.12s ease',\n }}\n onMouseEnter={() => setHoveredRow(id)}\n onMouseLeave={() => setHoveredRow(null)}\n onClick={() => onRowClick?.(row)}\n >\n {selectable && (\n <td\n style={{\n ...checkboxTdStyle,\n borderBottom: isLastRow ? 'none' : checkboxTdStyle.borderBottom,\n }}\n >\n <InternalCheckbox\n checked={isSelected}\n onChange={() => toggleRow(id)}\n t={t}\n />\n </td>\n )}\n {columns.map((col) => (\n <td\n key={col.key}\n style={{\n ...tdStyle(col),\n borderBottom: isLastRow ? 'none' : tdStyle(col).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 })}\n </tbody>\n </table>\n </div>\n );\n};\n\nDataGrid.displayName = 'DataGrid';\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, useMemo, useCallback } from 'react';\nimport { CaretLeftIcon, CaretRightIcon } 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 surface: 'rgba(24,24,24,0.95)',\n border: 'rgba(255,255,255,0.08)',\n text: '#ffffff',\n textSecondary: '#ACACAC',\n textMuted: '#888888',\n hover: 'rgba(255,255,255,0.06)',\n todayBg: 'rgba(252,79,0,0.12)',\n todayBorder: '#FC4F00',\n selectedBg: '#FC4F00',\n selectedText: '#ffffff',\n headerBg: 'rgba(255,255,255,0.04)',\n outsideText: 'rgba(255,255,255,0.2)',\n eventDot: '#FC4F00',\n navHover: 'rgba(255,255,255,0.08)',\n },\n light: {\n background: 'rgba(255,255,255,0.85)',\n surface: 'rgba(255,255,255,0.95)',\n border: 'rgba(0,0,0,0.08)',\n text: '#1a1a1a',\n textSecondary: '#888888',\n textMuted: '#999999',\n hover: 'rgba(0,0,0,0.04)',\n todayBg: 'rgba(252,79,0,0.08)',\n todayBorder: '#FC4F00',\n selectedBg: '#FC4F00',\n selectedText: '#ffffff',\n headerBg: 'rgba(0,0,0,0.02)',\n outsideText: 'rgba(0,0,0,0.2)',\n eventDot: '#FC4F00',\n navHover: 'rgba(0,0,0,0.06)',\n },\n} as const;\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\n/** Událost zobrazená v kalendáři. */\nexport interface CalendarEvent {\n /** Datum události. */\n date: Date;\n /** Název události. */\n title: string;\n /** Barva tečky/indikátoru. @default '#FC4F00' */\n color?: string;\n}\n\nexport interface CalendarProps {\n /** Aktuálně vybraný datum. */\n value?: Date | null;\n /** Callback při výběru data. */\n onChange?: (date: Date) => void;\n /** Režim zobrazení. @default 'month' */\n view?: 'month' | 'week';\n /** Události k zobrazení (vizuální indikátory — barevné tečky). */\n events?: CalendarEvent[];\n /** Minimální povolený datum. */\n minDate?: Date;\n /** Maximální povolený datum. */\n maxDate?: Date;\n /** Další inline styly. */\n style?: React.CSSProperties;\n /** Dodatečná CSS třída. */\n className?: string;\n}\n\n// ─── Helpers ────────────────────────────────────────────────────────────────\n\nconst DAY_LABELS = ['Po', 'Út', 'St', 'Čt', 'Pá', 'So', 'Ne'];\nconst MONTH_LABELS = [\n 'Leden', 'Únor', 'Březen', 'Duben', 'Květen', 'Červen',\n 'Červenec', 'Srpen', 'Září', 'Říjen', 'Listopad', 'Prosinec',\n];\n\nconst isSameDay = (a: Date, b: Date) =>\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate();\n\nconst startOfWeek = (date: Date): Date => {\n const d = new Date(date);\n const day = d.getDay();\n const diff = (day === 0 ? -6 : 1) - day; // Monday-first\n d.setDate(d.getDate() + diff);\n d.setHours(0, 0, 0, 0);\n return d;\n};\n\nconst getMonthGrid = (year: number, month: number): Date[] => {\n const firstDay = new Date(year, month, 1);\n const start = startOfWeek(firstDay);\n const days: Date[] = [];\n const current = new Date(start);\n // always generate 42 cells (6 rows)\n for (let i = 0; i < 42; i++) {\n days.push(new Date(current));\n current.setDate(current.getDate() + 1);\n }\n return days;\n};\n\nconst getWeekGrid = (date: Date): Date[] => {\n const start = startOfWeek(date);\n const days: Date[] = [];\n for (let i = 0; i < 7; i++) {\n const d = new Date(start);\n d.setDate(start.getDate() + i);\n days.push(d);\n }\n return days;\n};\n\nconst isDateDisabled = (date: Date, minDate?: Date, maxDate?: Date): boolean => {\n if (minDate) {\n const min = new Date(minDate);\n min.setHours(0, 0, 0, 0);\n if (date < min) return true;\n }\n if (maxDate) {\n const max = new Date(maxDate);\n max.setHours(23, 59, 59, 999);\n if (date > max) return true;\n }\n return false;\n};\n\n// ─── Calendar ───────────────────────────────────────────────────────────────\n\n/**\n * Kalendářní komponenta s měsíčním a týdenním zobrazením.\n *\n * Podporuje výběr data, zobrazení událostí (barevné tečky),\n * navigaci mezi měsíci/týdny a omezení rozsahu dat.\n *\n * @example\n * ```tsx\n * <Calendar\n * value={selectedDate}\n * onChange={setSelectedDate}\n * events={[{ date: new Date(), title: 'Meeting', color: '#00A205' }]}\n * />\n * ```\n */\nexport const Calendar: React.FC<CalendarProps> = ({\n value,\n onChange,\n view = 'month',\n events = [],\n minDate,\n maxDate,\n style,\n className,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n const today = useMemo(() => {\n const d = new Date();\n d.setHours(0, 0, 0, 0);\n return d;\n }, []);\n\n const [currentMonth, setCurrentMonth] = useState(() => value ? value.getMonth() : today.getMonth());\n const [currentYear, setCurrentYear] = useState(() => value ? value.getFullYear() : today.getFullYear());\n const [currentWeekStart, setCurrentWeekStart] = useState(() => startOfWeek(value || today));\n const [hoveredDay, setHoveredDay] = useState<string | null>(null);\n\n const days = useMemo(() => {\n if (view === 'week') return getWeekGrid(currentWeekStart);\n return getMonthGrid(currentYear, currentMonth);\n }, [view, currentYear, currentMonth, currentWeekStart]);\n\n const navigatePrev = useCallback(() => {\n if (view === 'week') {\n setCurrentWeekStart((prev) => {\n const d = new Date(prev);\n d.setDate(d.getDate() - 7);\n return d;\n });\n } else {\n setCurrentMonth((prev) => {\n if (prev === 0) {\n setCurrentYear((y) => y - 1);\n return 11;\n }\n return prev - 1;\n });\n }\n }, [view]);\n\n const navigateNext = useCallback(() => {\n if (view === 'week') {\n setCurrentWeekStart((prev) => {\n const d = new Date(prev);\n d.setDate(d.getDate() + 7);\n return d;\n });\n } else {\n setCurrentMonth((prev) => {\n if (prev === 11) {\n setCurrentYear((y) => y + 1);\n return 0;\n }\n return prev + 1;\n });\n }\n }, [view]);\n\n const getEventsForDay = (date: Date) =>\n events.filter((ev) => isSameDay(ev.date, date));\n\n const headerLabel = view === 'week'\n ? (() => {\n const end = new Date(currentWeekStart);\n end.setDate(end.getDate() + 6);\n const sameMonth = currentWeekStart.getMonth() === end.getMonth();\n if (sameMonth) {\n return `${currentWeekStart.getDate()}. – ${end.getDate()}. ${MONTH_LABELS[end.getMonth()]} ${end.getFullYear()}`;\n }\n return `${currentWeekStart.getDate()}. ${MONTH_LABELS[currentWeekStart.getMonth()].slice(0, 3)} – ${end.getDate()}. ${MONTH_LABELS[end.getMonth()].slice(0, 3)} ${end.getFullYear()}`;\n })()\n : `${MONTH_LABELS[currentMonth]} ${currentYear}`;\n\n const containerStyle: React.CSSProperties = {\n backgroundColor: t.background,\n border: `1px solid ${t.border}`,\n borderRadius: '12px',\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '14px',\n color: t.text,\n overflow: 'hidden',\n userSelect: 'none',\n ...style,\n };\n\n const navBtnStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '32px',\n height: '32px',\n border: 'none',\n borderRadius: '8px',\n background: 'transparent',\n color: t.text,\n cursor: 'pointer',\n transition: 'background-color 0.12s ease',\n };\n\n return (\n <div className={className} style={containerStyle}>\n {/* Header */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '12px 16px',\n backgroundColor: t.headerBg,\n borderBottom: `1px solid ${t.border}`,\n }}\n >\n <button\n style={navBtnStyle}\n onClick={navigatePrev}\n onMouseEnter={(e) => { (e.currentTarget as HTMLElement).style.backgroundColor = t.navHover; }}\n onMouseLeave={(e) => { (e.currentTarget as HTMLElement).style.backgroundColor = 'transparent'; }}\n aria-label=\"Předchozí\"\n >\n <CaretLeftIcon size={16} />\n </button>\n <span\n style={{\n fontFamily: \"'Zalando Sans Expanded', sans-serif\",\n fontWeight: 600,\n fontSize: '14px',\n }}\n >\n {headerLabel}\n </span>\n <button\n style={navBtnStyle}\n onClick={navigateNext}\n onMouseEnter={(e) => { (e.currentTarget as HTMLElement).style.backgroundColor = t.navHover; }}\n onMouseLeave={(e) => { (e.currentTarget as HTMLElement).style.backgroundColor = 'transparent'; }}\n aria-label=\"Další\"\n >\n <CaretRightIcon size={16} />\n </button>\n </div>\n\n {/* Day labels */}\n <div style={{ display: 'grid', gridTemplateColumns: 'repeat(7, 1fr)', gap: '0', padding: '8px 12px 0' }}>\n {DAY_LABELS.map((label) => (\n <div\n key={label}\n style={{\n textAlign: 'center',\n fontFamily: \"'Zalando Sans Expanded', sans-serif\",\n fontSize: '10px',\n fontWeight: 400,\n textTransform: 'uppercase',\n letterSpacing: '0.06em',\n color: t.textMuted,\n padding: '6px 0 8px',\n }}\n >\n {label}\n </div>\n ))}\n </div>\n\n {/* Days grid */}\n <div style={{ display: 'grid', gridTemplateColumns: 'repeat(7, 1fr)', gap: '2px', padding: '0 12px 12px' }}>\n {days.map((day, idx) => {\n const isToday = isSameDay(day, today);\n const isSelected = value ? isSameDay(day, value) : false;\n const isOutside = view === 'month' && day.getMonth() !== currentMonth;\n const disabled = isDateDisabled(day, minDate, maxDate);\n const dayKey = day.toISOString();\n const isHovered = hoveredDay === dayKey;\n const dayEvents = getEventsForDay(day);\n\n let cellBg: string = 'transparent';\n let cellColor: string = isOutside ? t.outsideText : t.text;\n let cellBorder: string = '2px solid transparent';\n\n if (isSelected) {\n cellBg = t.selectedBg;\n cellColor = t.selectedText;\n } else if (isToday) {\n cellBg = t.todayBg;\n cellBorder = `2px solid ${t.todayBorder}`;\n } else if (isHovered && !disabled) {\n cellBg = t.hover;\n }\n\n if (disabled) {\n cellColor = t.textMuted;\n }\n\n return (\n <div\n key={idx}\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '1px',\n minHeight: '44px',\n }}\n >\n <button\n style={{\n width: '36px',\n height: '36px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '8px',\n border: cellBorder,\n background: cellBg,\n color: cellColor,\n fontSize: '13px',\n fontWeight: isToday ? 600 : 400,\n fontFamily: \"'Zalando Sans', sans-serif\",\n cursor: disabled ? 'default' : 'pointer',\n opacity: disabled ? 0.4 : 1,\n transition: 'background-color 0.12s ease',\n }}\n disabled={disabled}\n onClick={() => {\n if (!disabled && onChange) onChange(day);\n }}\n onMouseEnter={() => !disabled && setHoveredDay(dayKey)}\n onMouseLeave={() => setHoveredDay(null)}\n >\n {day.getDate()}\n </button>\n {/* Event dots — visual indicators only */}\n {dayEvents.length > 0 && (\n <div style={{ display: 'flex', gap: '3px', marginTop: '3px', height: '5px' }}>\n {dayEvents.slice(0, 3).map((ev, evIdx) => (\n <div\n key={evIdx}\n title={ev.title}\n style={{\n width: '5px',\n height: '5px',\n borderRadius: '50%',\n backgroundColor: ev.color || t.eventDot,\n }}\n />\n ))}\n </div>\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n};\n\nCalendar.displayName = 'Calendar';\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 textMuted: '#888888',\n line: 'rgba(255,255,255,0.1)',\n dotBorder: '#FC4F00',\n dotBg: 'rgba(252,79,0,0.15)',\n iconBg: 'rgba(252,79,0,0.12)',\n cardBg: 'rgba(255,255,255,0.04)',\n cardBorder: 'rgba(255,255,255,0.08)',\n },\n light: {\n text: '#1a1a1a',\n textSecondary: '#333333',\n textMuted: '#999999',\n line: 'rgba(0,0,0,0.08)',\n dotBorder: '#FC4F00',\n dotBg: 'rgba(252,79,0,0.08)',\n iconBg: 'rgba(252,79,0,0.06)',\n cardBg: 'rgba(0,0,0,0.02)',\n cardBorder: 'rgba(0,0,0,0.06)',\n },\n} as const;\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\n/** Položka časové osy. */\nexport interface TimelineItem {\n /** Nadpis události. */\n title: string;\n /** Volitelný popis události. */\n description?: string;\n /** Volitelný datum / časový údaj. */\n date?: string;\n /** Vlastní ikona místo výchozí tečky. */\n icon?: React.ReactNode;\n /** Barva tečky nebo pozadí ikony. @default '#FC4F00' */\n color?: string;\n}\n\nexport interface TimelineProps {\n /** Položky časové osy. */\n items: TimelineItem[];\n /** Orientace časové osy. @default 'vertical' */\n orientation?: 'vertical' | 'horizontal';\n /** Další inline styly. */\n style?: React.CSSProperties;\n /** Dodatečná CSS třída. */\n className?: string;\n}\n\n// ─── Timeline ───────────────────────────────────────────────────────────────\n\n/**\n * Časová osa s tečkami nebo ikonami.\n *\n * Podporuje vertikální i horizontální orientaci.\n * Každá položka zobrazuje nadpis, volitelný popis a datum.\n * Ikona nebo barevná tečka je propojená čárou.\n *\n * @example\n * ```tsx\n * <Timeline\n * items={[\n * { title: 'Odesláno', date: '10:00', description: 'Objednávka byla vytvořena.' },\n * { title: 'Doručeno', date: '14:30', color: '#00A205' },\n * ]}\n * />\n * ```\n */\nexport const Timeline: React.FC<TimelineProps> = ({ items, orientation = 'vertical', style, className }) => {\n const theme = useTheme();\n const t = tokens[theme];\n\n if (orientation === 'horizontal') {\n return (\n <div\n className={className}\n style={{\n display: 'flex',\n alignItems: 'flex-start',\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '14px',\n color: t.text,\n overflow: 'auto',\n ...style,\n }}\n >\n {items.map((item, idx) => {\n const isLast = idx === items.length - 1;\n const dotColor = item.color || t.dotBorder;\n\n return (\n <div\n key={idx}\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n flex: isLast ? '0 0 auto' : '1 1 0',\n minWidth: '120px',\n position: 'relative',\n }}\n >\n {/* Top row: dot/icon + horizontal line */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n position: 'relative',\n }}\n >\n {/* Line before dot */}\n {idx > 0 && (\n <div\n style={{\n flex: 1,\n height: '2px',\n backgroundColor: t.line,\n }}\n />\n )}\n {idx === 0 && <div style={{ flex: 1 }} />}\n\n {/* Dot or icon */}\n {item.icon ? (\n <div\n style={{\n width: '32px',\n height: '32px',\n borderRadius: '50%',\n backgroundColor: item.color ? `${item.color}18` : t.iconBg,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: dotColor,\n flexShrink: 0,\n }}\n >\n {item.icon}\n </div>\n ) : (\n <div\n style={{\n width: '12px',\n height: '12px',\n borderRadius: '50%',\n border: `2px solid ${dotColor}`,\n backgroundColor: t.dotBg,\n flexShrink: 0,\n }}\n />\n )}\n\n {/* Line after dot */}\n {!isLast && (\n <div\n style={{\n flex: 1,\n height: '2px',\n backgroundColor: t.line,\n }}\n />\n )}\n {isLast && <div style={{ flex: 1 }} />}\n </div>\n\n {/* Content below */}\n <div\n style={{\n textAlign: 'center',\n paddingTop: '10px',\n maxWidth: '140px',\n }}\n >\n <span\n style={{\n fontFamily: \"'Zalando Sans Expanded', sans-serif\",\n fontWeight: 600,\n fontSize: '13px',\n lineHeight: '18px',\n display: 'block',\n }}\n >\n {item.title}\n </span>\n {item.date && (\n <span\n style={{\n fontSize: '11px',\n color: t.textMuted,\n display: 'block',\n marginTop: '2px',\n }}\n >\n {item.date}\n </span>\n )}\n {item.description && (\n <p\n style={{\n margin: '4px 0 0',\n fontSize: '12px',\n color: t.textSecondary,\n lineHeight: '16px',\n }}\n >\n {item.description}\n </p>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n }\n\n // Vertical orientation (default)\n return (\n <div\n className={className}\n style={{\n position: 'relative',\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '14px',\n color: t.text,\n ...style,\n }}\n >\n {items.map((item, idx) => {\n const isLast = idx === items.length - 1;\n const dotColor = item.color || t.dotBorder;\n\n return (\n <div\n key={idx}\n style={{\n display: 'flex',\n position: 'relative',\n paddingBottom: isLast ? 0 : '4px',\n minHeight: item.icon ? '36px' : '28px',\n }}\n >\n {/* Left column: dot/icon + line */}\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n flexShrink: 0,\n width: '32px',\n marginRight: '14px',\n }}\n >\n {/* Dot or icon */}\n {item.icon ? (\n <div\n style={{\n width: '32px',\n height: '32px',\n borderRadius: '50%',\n backgroundColor: item.color\n ? `${item.color}18`\n : t.iconBg,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: dotColor,\n flexShrink: 0,\n }}\n >\n {item.icon}\n </div>\n ) : (\n <div\n style={{\n width: '12px',\n height: '12px',\n borderRadius: '50%',\n border: `2px solid ${dotColor}`,\n backgroundColor: t.dotBg,\n flexShrink: 0,\n marginTop: '4px',\n }}\n />\n )}\n\n {/* Vertical line */}\n {!isLast && (\n <div\n style={{\n width: '2px',\n flex: 1,\n backgroundColor: t.line,\n marginTop: '4px',\n minHeight: '8px',\n }}\n />\n )}\n </div>\n\n {/* Right column: content */}\n <div style={{ flex: 1, minWidth: 0, paddingTop: item.icon ? '5px' : 0 }}>\n <div style={{ display: 'flex', alignItems: 'baseline', gap: '8px' }}>\n <span\n style={{\n fontFamily: \"'Zalando Sans Expanded', sans-serif\",\n fontWeight: 600,\n fontSize: '14px',\n lineHeight: '20px',\n }}\n >\n {item.title}\n </span>\n {item.date && (\n <span\n style={{\n fontSize: '12px',\n color: t.textMuted,\n flexShrink: 0,\n }}\n >\n {item.date}\n </span>\n )}\n </div>\n {item.description && (\n <p\n style={{\n margin: '3px 0 0',\n fontSize: '13px',\n color: t.textSecondary,\n lineHeight: '18px',\n }}\n >\n {item.description}\n </p>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n};\n\nTimeline.displayName = 'Timeline';\n","import React from 'react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ───────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n background: 'transparent',\n text: '#ffffff',\n textMuted: '#888888',\n border: 'rgba(255,255,255,0.08)',\n stripedBg: 'rgba(255,255,255,0.04)',\n },\n light: {\n background: 'transparent',\n text: '#1a1a1a',\n textMuted: '#999999',\n border: 'rgba(0,0,0,0.06)',\n stripedBg: 'rgba(0,0,0,0.02)',\n },\n} as const;\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\n/** Položka klíč-hodnota v seznamu. */\nexport interface DataListItem {\n /** Popisek (klíč). */\n label: string;\n /** Hodnota — řetězec nebo libovolný React uzel. */\n value: React.ReactNode;\n}\n\nexport interface DataListProps {\n /** Položky k zobrazení. */\n items: DataListItem[];\n /** Počet sloupců. @default 1 */\n columns?: number;\n /** Střídání barvy řádků. @default false */\n striped?: boolean;\n /** Další inline styly. */\n style?: React.CSSProperties;\n /** Dodatečná CSS třída. */\n className?: string;\n}\n\n// ─── DataList ───────────────────────────────────────────────────────────────\n\n/**\n * Seznam klíč-hodnota pro detailní zobrazení dat.\n *\n * Zobrazuje popisek vlevo (ztlumený) a hodnotu vpravo.\n * Podporuje rozložení do libovolného počtu sloupců a střídání barvy řádků.\n *\n * @example\n * ```tsx\n * <DataList\n * items={[\n * { label: 'Jméno', value: 'Jan Novák' },\n * { label: 'E-mail', value: 'jan@example.com' },\n * { label: 'Stav', value: <Tag>Aktivní</Tag> },\n * ]}\n * columns={2}\n * striped\n * />\n * ```\n */\nexport const DataList: React.FC<DataListProps> = ({\n items,\n columns = 1,\n striped = false,\n style,\n className,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n const cols = Math.max(1, Math.round(columns));\n\n const containerStyle: React.CSSProperties = {\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '14px',\n color: t.text,\n display: cols > 1 ? 'grid' : 'block',\n gridTemplateColumns: cols > 1 ? `repeat(${cols}, 1fr)` : undefined,\n gap: cols > 1 ? '0 24px' : undefined,\n ...style,\n };\n\n // For striped with multiple columns, we stripe based on visual row index\n const getStripedIndex = (idx: number): number => {\n if (cols <= 1) return idx;\n return Math.floor(idx / cols);\n };\n\n const rowStyle = (idx: number): React.CSSProperties => ({\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'baseline',\n gap: '16px',\n padding: '10px 12px',\n borderBottom: `1px solid ${t.border}`,\n backgroundColor: striped && getStripedIndex(idx) % 2 === 1 ? t.stripedBg : t.background,\n });\n\n const labelStyle: React.CSSProperties = {\n fontFamily: \"'Zalando Sans Expanded', sans-serif\",\n fontSize: '12px',\n fontWeight: 500,\n color: t.textMuted,\n flexShrink: 0,\n letterSpacing: '0.01em',\n };\n\n const valueStyle: React.CSSProperties = {\n textAlign: 'right',\n lineHeight: '20px',\n wordBreak: 'break-word',\n };\n\n return (\n <div className={className} style={containerStyle}>\n {items.map((item, idx) => (\n <div key={idx} style={rowStyle(idx)}>\n <span style={labelStyle}>{item.label}</span>\n <span style={valueStyle}>{item.value}</span>\n </div>\n ))}\n </div>\n );\n};\n\nDataList.displayName = 'DataList';\n","import React, { useState, useCallback } from 'react';\nimport { CaretRightIcon } from '@phosphor-icons/react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ───────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n text: '#ffffff',\n textMuted: '#888888',\n border: 'rgba(255,255,255,0.08)',\n line: 'rgba(255,255,255,0.1)',\n hover: 'rgba(255,255,255,0.06)',\n selectedBg: 'rgba(252,79,0,0.12)',\n selectedBorder: '#FC4F00',\n selectedText: '#ffffff',\n iconColor: 'rgba(255,255,255,0.4)',\n iconExpanded: '#FC4F00',\n },\n light: {\n text: '#1a1a1a',\n textMuted: '#999999',\n border: 'rgba(0,0,0,0.06)',\n line: 'rgba(0,0,0,0.08)',\n hover: 'rgba(0,0,0,0.04)',\n selectedBg: 'rgba(252,79,0,0.08)',\n selectedBorder: '#FC4F00',\n selectedText: '#1a1a1a',\n iconColor: 'rgba(0,0,0,0.3)',\n iconExpanded: '#FC4F00',\n },\n} as const;\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\n/** Uzel stromové struktury. */\nexport interface TreeNode {\n /** Unikátní identifikátor uzlu. */\n id: string;\n /** Zobrazený text uzlu. */\n label: string;\n /** Volitelná ikona vedle popisku. */\n icon?: React.ReactNode;\n /** Podřízené uzly. */\n children?: TreeNode[];\n}\n\nexport interface TreeProps {\n /** Stromová data k zobrazení. */\n data: TreeNode[];\n /** Callback při výběru uzlu. */\n onSelect?: (node: TreeNode) => void;\n /** ID aktuálně vybraného uzlu. */\n selectedId?: string;\n /** ID uzlů, které jsou ve výchozím stavu rozbalené. */\n defaultExpanded?: string[];\n /** Další inline styly. */\n style?: React.CSSProperties;\n /** Dodatečná CSS třída. */\n className?: string;\n}\n\n// ─── TreeNodeRow ────────────────────────────────────────────────────────────\n\ninterface TreeNodeRowProps {\n node: TreeNode;\n depth: number;\n expanded: Set<string>;\n selectedId?: string;\n onToggle: (id: string) => void;\n onSelect?: (node: TreeNode) => void;\n t: (typeof tokens)['dark'] | (typeof tokens)['light'];\n}\n\nconst TreeNodeRow: React.FC<TreeNodeRowProps> = ({\n node,\n depth,\n expanded,\n selectedId,\n onToggle,\n onSelect,\n t,\n}) => {\n const hasChildren = node.children && node.children.length > 0;\n const isExpanded = expanded.has(node.id);\n const isSelected = selectedId === node.id;\n const [isHovered, setIsHovered] = useState(false);\n\n let bg = 'transparent';\n if (isSelected) bg = t.selectedBg;\n else if (isHovered) bg = t.hover;\n\n return (\n <>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n padding: '4px 8px',\n paddingLeft: `${depth * 20 + 8}px`,\n borderRadius: '6px',\n backgroundColor: bg,\n borderLeft: isSelected ? `2px solid ${t.selectedBorder}` : '2px solid transparent',\n cursor: 'pointer',\n transition: 'background-color 0.12s ease',\n userSelect: 'none',\n minHeight: '32px',\n }}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n onClick={() => onSelect?.(node)}\n >\n {/* Expand/collapse chevron */}\n <span\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '20px',\n height: '20px',\n flexShrink: 0,\n marginRight: '4px',\n }}\n onClick={(e) => {\n e.stopPropagation();\n if (hasChildren) onToggle(node.id);\n }}\n >\n {hasChildren && (\n <CaretRightIcon\n size={14}\n color={isExpanded ? t.iconExpanded : t.iconColor}\n style={{\n transform: isExpanded ? 'rotate(90deg)' : 'rotate(0deg)',\n transition: 'transform 180ms cubic-bezier(0.16, 1, 0.3, 1)',\n }}\n />\n )}\n </span>\n\n {/* Icon */}\n {node.icon && (\n <span\n style={{\n display: 'flex',\n alignItems: 'center',\n marginRight: '6px',\n color: isSelected ? t.selectedBorder : t.textMuted,\n flexShrink: 0,\n }}\n >\n {node.icon}\n </span>\n )}\n\n {/* Label */}\n <span\n style={{\n fontSize: '13px',\n fontWeight: isSelected ? 500 : 400,\n color: isSelected ? t.selectedText : t.text,\n lineHeight: '20px',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n >\n {node.label}\n </span>\n </div>\n\n {/* Children */}\n {hasChildren && isExpanded && (\n <div style={{ position: 'relative' }}>\n {/* Tree line */}\n <div\n style={{\n position: 'absolute',\n left: `${depth * 20 + 18}px`,\n top: 0,\n bottom: '16px',\n width: '1px',\n backgroundColor: t.line,\n }}\n />\n {node.children!.map((child) => (\n <TreeNodeRow\n key={child.id}\n node={child}\n depth={depth + 1}\n expanded={expanded}\n selectedId={selectedId}\n onToggle={onToggle}\n onSelect={onSelect}\n t={t}\n />\n ))}\n </div>\n )}\n </>\n );\n};\n\n// ─── Tree ───────────────────────────────────────────────────────────────────\n\n/**\n * Stromový seznam s rozbalitelnými uzly.\n *\n * Podporuje ikony, výběr uzlu, animovanou šipku při rozbalení\n * a spojovací čáry mezi rodičem a potomky.\n *\n * @example\n * ```tsx\n * <Tree\n * data={[\n * { id: '1', label: 'Složka', children: [\n * { id: '1-1', label: 'Soubor A' },\n * { id: '1-2', label: 'Soubor B' },\n * ]},\n * ]}\n * selectedId=\"1-1\"\n * onSelect={(node) => console.log(node.id)}\n * />\n * ```\n */\nexport const Tree: React.FC<TreeProps> = ({\n data,\n onSelect,\n selectedId,\n defaultExpanded = [],\n style,\n className,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n\n const [expanded, setExpanded] = useState<Set<string>>(\n () => new Set(defaultExpanded),\n );\n\n const handleToggle = useCallback((id: string) => {\n setExpanded((prev) => {\n const next = new Set(prev);\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n return next;\n });\n }, []);\n\n const containerStyle: React.CSSProperties = {\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '14px',\n color: t.text,\n ...style,\n };\n\n return (\n <div className={className} style={containerStyle} role=\"tree\">\n {data.map((node) => (\n <TreeNodeRow\n key={node.id}\n node={node}\n depth={0}\n expanded={expanded}\n selectedId={selectedId}\n onToggle={handleToggle}\n onSelect={onSelect}\n t={t}\n />\n ))}\n </div>\n );\n};\n\nTree.displayName = 'Tree';\n","import React from 'react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ──────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n labelColor: '#eaeaea',\n },\n light: {\n labelColor: '#333333',\n },\n} as const;\n\n// ─── Status colors ──────────────────────────────────────────────────────────\n\nconst statusColors: Record<string, string> = {\n online: '#00A205',\n offline: '#888888',\n away: '#F5A623',\n busy: '#EF3838',\n};\n\n// ─── Size config ────────────────────────────────────────────────────────────\n\nconst sizeConfig = {\n sm: { dot: 8, fontSize: '12px', gap: '6px' },\n md: { dot: 10, fontSize: '13px', gap: '8px' },\n lg: { dot: 12, fontSize: '14px', gap: '8px' },\n} as const;\n\n// ─── Types ──────────────────────────────────────────────────────────────────\n\nexport type StatusBadgeStatus = 'online' | 'offline' | 'away' | 'busy' | (string & {});\n\nexport interface StatusBadgeProps {\n /** Stav k zobrazení. Předdefinované: online, offline, away, busy. Lze zadat i vlastní řetězec. */\n status: StatusBadgeStatus;\n /** Volitelný textový popis vedle indikátoru. */\n label?: string;\n /** Velikost indikátoru. @default 'md' */\n size?: 'sm' | 'md' | 'lg';\n /** Zapne pulzující animaci. @default false */\n pulse?: boolean;\n /** Vlastní barva indikátoru — přepíše výchozí barvu stavu. */\n color?: string;\n /** Další inline styly. */\n style?: React.CSSProperties;\n /** Dodatečná CSS třída. */\n className?: string;\n}\n\n// ─── Pulse keyframes (injected once) ────────────────────────────────────────\n\nlet pulseStyleInjected = false;\n\nconst injectPulseStyle = () => {\n if (pulseStyleInjected || typeof document === 'undefined') return;\n const id = 'sm-statusbadge-pulse';\n if (document.getElementById(id)) {\n pulseStyleInjected = true;\n return;\n }\n const style = document.createElement('style');\n style.id = id;\n style.textContent = `\n @keyframes sm-statusbadge-pulse {\n 0% { transform: scale(1); opacity: 1; }\n 50% { transform: scale(1.8); opacity: 0; }\n 100% { transform: scale(1.8); opacity: 0; }\n }\n `;\n document.head.appendChild(style);\n pulseStyleInjected = true;\n};\n\n// ─── StatusBadge ────────────────────────────────────────────────────────────\n\n/**\n * Malý barevný indikátor stavu.\n *\n * Předdefinované stavy: online, offline, away, busy.\n * Lze zadat i vlastní řetězec s vlastní barvou přes prop `color`.\n * Pulzující animace funguje na libovolném stavu.\n *\n * @example\n * ```tsx\n * <StatusBadge status=\"online\" pulse />\n * <StatusBadge status=\"busy\" label=\"Nerušit\" size=\"lg\" />\n * <StatusBadge status=\"streaming\" color=\"#9C27B0\" label=\"Živě\" pulse />\n * ```\n */\nexport const StatusBadge: React.FC<StatusBadgeProps> = ({\n status,\n label,\n size = 'md',\n pulse = false,\n color,\n style,\n className,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n const sc = sizeConfig[size];\n const dotColor = color || statusColors[status] || '#888888';\n\n if (pulse) {\n injectPulseStyle();\n }\n\n return (\n <span\n className={className}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: sc.gap,\n ...style,\n }}\n >\n {/* Tečka indikátoru */}\n <span\n style={{\n position: 'relative',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: `${sc.dot}px`,\n height: `${sc.dot}px`,\n flexShrink: 0,\n }}\n >\n {/* Pulzující kruh */}\n {pulse && (\n <span\n style={{\n position: 'absolute',\n inset: 0,\n borderRadius: '50%',\n backgroundColor: dotColor,\n animation: 'sm-statusbadge-pulse 2s ease-in-out infinite',\n }}\n />\n )}\n {/* Hlavní tečka */}\n <span\n style={{\n position: 'relative',\n width: '100%',\n height: '100%',\n borderRadius: '50%',\n backgroundColor: dotColor,\n }}\n />\n </span>\n\n {/* Textový popis */}\n {label && (\n <span\n style={{\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: sc.fontSize,\n fontWeight: 400,\n color: t.labelColor,\n lineHeight: 'normal',\n whiteSpace: 'nowrap',\n }}\n >\n {label}\n </span>\n )}\n </span>\n );\n};\n\nStatusBadge.displayName = 'StatusBadge';\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, { 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 handleBg: 'rgba(255,255,255,0.2)',\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 handleBg: '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 SheetProps {\n /** Řídí zobrazení sheetu. */\n open: boolean;\n /** Voláno při zavření sheetu. */\n onClose: () => void;\n /** Obsah sheetu. */\n children: React.ReactNode;\n /** Strana, ze které se sheet vysune. @default 'bottom' */\n side?: 'bottom' | 'right' | 'left' | 'top';\n /** Titulek zobrazený v záhlaví. */\n title?: string;\n /** Zobrazí zavírací tlačítko. @default true */\n showClose?: boolean;\n /** Další inline styly. */\n style?: React.CSSProperties;\n /** Dodatečná CSS třída. */\n className?: string;\n}\n\n// ─── Sheet ──────────────────────────────────────────────────────────────────\n\n/**\n * Lehký vysuvný panel, který může přijít z libovolné strany.\n *\n * Na rozdíl od Draweru je Sheet odlehčený a výchozí pozice je zdola\n * (vhodné pro mobilní rozhraní). Používá glass efekt a portálové vykreslení.\n *\n * @example\n * ```tsx\n * <Sheet open={isOpen} onClose={() => setOpen(false)} title=\"Filtry\">\n * <p>Obsah sheetu</p>\n * </Sheet>\n * ```\n */\nexport const Sheet: React.FC<SheetProps> = ({\n open,\n onClose,\n children,\n side = 'bottom',\n title,\n showClose = true,\n style,\n className,\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 isVertical = side === 'left' || side === 'right';\n const isHorizontal = side === 'top' || side === 'bottom';\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 getTranslate = (state: typeof animState) => {\n const offscreenMap = {\n bottom: 'translateY(100%)',\n top: 'translateY(-100%)',\n right: 'translateX(100%)',\n left: 'translateX(-100%)',\n };\n if (state === 'opening' || state === 'idle') return offscreenMap[side];\n if (state === 'open') return 'translate(0, 0)';\n return offscreenMap[side];\n };\n\n const getOverlayOpacity = () => (animState === 'open' ? 1 : 0);\n\n // ── Panel positioning ──────────────────────────────────────────────────\n\n const panelPosition: React.CSSProperties = {};\n if (side === 'bottom') {\n panelPosition.bottom = 0;\n panelPosition.left = 0;\n panelPosition.right = 0;\n panelPosition.maxHeight = '85vh';\n panelPosition.borderTopLeftRadius = '16px';\n panelPosition.borderTopRightRadius = '16px';\n } else if (side === 'top') {\n panelPosition.top = 0;\n panelPosition.left = 0;\n panelPosition.right = 0;\n panelPosition.maxHeight = '85vh';\n panelPosition.borderBottomLeftRadius = '16px';\n panelPosition.borderBottomRightRadius = '16px';\n } else if (side === 'right') {\n panelPosition.top = 0;\n panelPosition.bottom = 0;\n panelPosition.right = 0;\n panelPosition.width = '400px';\n panelPosition.maxWidth = '100vw';\n } else if (side === 'left') {\n panelPosition.top = 0;\n panelPosition.bottom = 0;\n panelPosition.left = 0;\n panelPosition.width = '400px';\n panelPosition.maxWidth = '100vw';\n }\n\n // ── Border per side ────────────────────────────────────────────────────\n\n const borderStyle: React.CSSProperties = {};\n if (side === 'bottom') borderStyle.borderTop = `1px solid ${t.panelBorder}`;\n else if (side === 'top') borderStyle.borderBottom = `1px solid ${t.panelBorder}`;\n else if (side === 'right') borderStyle.borderLeft = `1px solid ${t.panelBorder}`;\n else if (side === 'left') borderStyle.borderRight = `1px solid ${t.panelBorder}`;\n\n if (!visible) return null;\n\n return createPortal(\n <div\n style={{\n position: 'fixed',\n inset: 0,\n zIndex: 99998,\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={onClose}\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 display: 'flex',\n flexDirection: 'column',\n backgroundColor: t.panelBg,\n boxShadow: t.shadow,\n backdropFilter: 'blur(32px) saturate(1.4)',\n WebkitBackdropFilter: 'blur(32px) saturate(1.4)',\n transform: getTranslate(animState),\n transition: `transform ${ANIM_DURATION}ms cubic-bezier(0.16, 1, 0.3, 1)`,\n boxSizing: 'border-box',\n outline: 'none',\n ...panelPosition,\n ...borderStyle,\n ...style,\n }}\n >\n {/* Drag handle pro bottom sheet */}\n {side === 'bottom' && (\n <div\n style={{\n display: 'flex',\n justifyContent: 'center',\n padding: '10px 0 4px',\n flexShrink: 0,\n }}\n >\n <div\n style={{\n width: '36px',\n height: '4px',\n borderRadius: '2px',\n backgroundColor: t.handleBg,\n }}\n />\n </div>\n )}\n\n {/* Záhlaví */}\n {(title || showClose) && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: side === 'bottom' ? '8px 24px 16px' : '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 </div>\n </div>,\n document.body,\n );\n};\n\nSheet.displayName = 'Sheet';\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, { 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 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 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 CommandItem {\n /** Unikátní identifikátor příkazu. */\n id: string;\n /** Hlavní text příkazu. */\n label: string;\n /** Volitelný popis příkazu. */\n description?: string;\n /** Volitelná ikona příkazu. */\n icon?: React.ReactNode;\n /** Klávesová zkratka (zobrazena jako badge). */\n shortcut?: string;\n /** Voláno při výběru příkazu. */\n onSelect: () => void;\n}\n\nexport interface CommandGroup {\n /** Název skupiny příkazů. */\n label: string;\n /** Položky ve skupině. */\n items: CommandItem[];\n}\n\nexport interface CommandMenuProps {\n /** Řídí zobrazení command menu. */\n open: boolean;\n /** Voláno při zavření command menu. */\n onClose: () => void;\n /** Skupiny příkazů k zobrazení. */\n groups: CommandGroup[];\n /** Placeholder text vyhledávacího pole. @default 'Zadejte příkaz...' */\n placeholder?: string;\n /** Další inline styly pro kartu. */\n style?: React.CSSProperties;\n /** Dodatečná CSS třída. */\n className?: string;\n}\n\n// ─── CommandMenu ────────────────────────────────────────────────────────────\n\n/**\n * Rozšířený command palette s podporou skupin příkazů a klávesových zkratek.\n *\n * Filtruje příkazy podle vyhledávacího řetězce, podporuje klávesovou\n * navigaci (šipky, Enter, Escape) a zobrazuje klávesové zkratky.\n *\n * @example\n * ```tsx\n * <CommandMenu\n * open={open}\n * onClose={() => setOpen(false)}\n * groups={[\n * { label: 'Akce', items: [{ id: '1', label: 'Uložit', shortcut: '⌘S', onSelect: save }] },\n * ]}\n * />\n * ```\n */\nexport const CommandMenu: React.FC<CommandMenuProps> = ({\n open,\n onClose,\n groups,\n placeholder = 'Zadejte příkaz...',\n style,\n className,\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 [query, setQuery] = useState('');\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-commandmenu-scrollbar-hide';\n if (document.getElementById(id)) return;\n const s = document.createElement('style');\n s.id = id;\n s.textContent = `.commandmenu-results::-webkit-scrollbar { display: none; }`;\n document.head.appendChild(s);\n }, []);\n\n // ── Filter groups by query ─────────────────────────────────────────────\n\n const filteredGroups = groups\n .map((group) => ({\n ...group,\n items: group.items.filter(\n (item) =>\n item.label.toLowerCase().includes(query.toLowerCase()) ||\n item.description?.toLowerCase().includes(query.toLowerCase()),\n ),\n }))\n .filter((group) => group.items.length > 0);\n\n // ── Flatten for keyboard navigation ────────────────────────────────────\n\n const flatItems: CommandItem[] = filteredGroups.flatMap((g) => g.items);\n\n // ── Open / close animation ─────────────────────────────────────────────\n\n useEffect(() => {\n if (open) {\n setQuery('');\n setHighlightIndex(-1);\n setVisible(true);\n setAnimState('opening');\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 query changes ─────────────────────────────────\n\n useEffect(() => {\n setHighlightIndex(-1);\n }, [query]);\n\n // ── Scroll highlighted item into view ──────────────────────────────────\n\n useEffect(() => {\n if (highlightIndex < 0 || !listRef.current) return;\n const el = listRef.current.querySelector(`[data-cmd-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 // ── Animation styles ───────────────────────────────────────────────────\n\n const getOverlayStyle = (): React.CSSProperties => {\n const base: React.CSSProperties = { transition: `opacity ${ANIM_DURATION}ms ease` };\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 // ── Build flat index counter ───────────────────────────────────────────\n\n let flatIndex = 0;\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 command menu */}\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={query}\n onChange={(e) => setQuery(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=\"commandmenu-results\"\n style={{\n flex: 1,\n overflowY: 'auto',\n padding: '8px',\n scrollbarWidth: 'none',\n msOverflowStyle: 'none' as any,\n }}\n >\n {filteredGroups.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 filteredGroups.map((group) => (\n <div key={group.label} role=\"group\" aria-label={group.label}>\n {/* Záhlaví skupiny */}\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.label}\n </div>\n\n {/* Položky */}\n {group.items.map((item) => {\n const currentFlatIndex = flatIndex++;\n const isHighlighted = currentFlatIndex === highlightIndex;\n\n return (\n <div\n key={item.id}\n role=\"option\"\n aria-selected={isHighlighted}\n data-cmd-index={currentFlatIndex}\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(currentFlatIndex)}\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\n {/* Klávesová zkratka */}\n {item.shortcut && (\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 whiteSpace: 'nowrap',\n }}\n >\n {item.shortcut}\n </kbd>\n )}\n </div>\n );\n })}\n </div>\n ))\n )}\n </div>\n </div>\n </div>,\n document.body,\n );\n};\n\nCommandMenu.displayName = 'CommandMenu';\n","import React from 'react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ──────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n background: 'rgba(24,24,24,0.8)',\n border: 'rgba(255,255,255,0.1)',\n },\n light: {\n background: 'rgba(255,255,255,0.8)',\n border: 'rgba(0,0,0,0.08)',\n },\n} as const;\n\n// ─── Types ──────────────────────────────────────────────────────────────────\n\nexport interface AppSidebarProps {\n /** Obsah postranního panelu (navigace, menu apod.). */\n children: React.ReactNode;\n /** Zda je panel sbalený. @default false */\n collapsed?: boolean;\n /** Voláno při změně stavu sbalení. */\n onCollapse?: (collapsed: boolean) => void;\n /** Šířka rozbalené postranní lišty v px. @default 260 */\n width?: number;\n /** Šířka sbalené postranní lišty v px. @default 64 */\n collapsedWidth?: number;\n /** Další inline styly. */\n style?: React.CSSProperties;\n /** Dodatečná CSS třída. */\n className?: string;\n}\n\n// ─── AppSidebar ─────────────────────────────────────────────────────────────\n\n/**\n * Sbaletelný postranní panel pro navigaci aplikace.\n *\n * Používá glass efekt a plynulou animaci šířky. Tlačítko pro sbalení/rozbalení\n * si řeší konzument sám — komponenta je plně řízená přes `collapsed` a `onCollapse`.\n *\n * @example\n * ```tsx\n * const [collapsed, setCollapsed] = useState(false);\n * <AppSidebar collapsed={collapsed} onCollapse={setCollapsed}>\n * <button onClick={() => setCollapsed(c => !c)}>Toggle</button>\n * <nav>...</nav>\n * </AppSidebar>\n * ```\n */\nexport const AppSidebar: React.FC<AppSidebarProps> = ({\n children,\n collapsed = false,\n onCollapse,\n width = 260,\n collapsedWidth = 64,\n style,\n className,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n\n const currentWidth = collapsed ? collapsedWidth : width;\n\n return (\n <aside\n className={className}\n style={{\n position: 'relative',\n display: 'flex',\n flexDirection: 'column',\n width: `${currentWidth}px`,\n minWidth: `${currentWidth}px`,\n height: '100%',\n backgroundColor: t.background,\n backdropFilter: 'blur(20px)',\n WebkitBackdropFilter: 'blur(20px)',\n borderRight: `1px solid ${t.border}`,\n boxSizing: 'border-box',\n overflow: 'hidden',\n transition: 'width 180ms cubic-bezier(0.16, 1, 0.3, 1), min-width 180ms cubic-bezier(0.16, 1, 0.3, 1)',\n ...style,\n }}\n >\n {/* Obsah */}\n <div\n style={{\n flex: 1,\n overflowY: 'auto',\n overflowX: 'hidden',\n padding: collapsed ? '8px 8px' : '8px 12px',\n display: 'flex',\n flexDirection: 'column' as const,\n alignItems: collapsed ? 'center' : 'stretch',\n transition: 'padding 180ms cubic-bezier(0.16, 1, 0.3, 1)',\n }}\n >\n {children}\n </div>\n </aside>\n );\n};\n\nAppSidebar.displayName = 'AppSidebar';\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 text: 'rgba(255,255,255,0.7)',\n textHover: '#ffffff',\n textActive: '#ffffff',\n icon: 'rgba(255,255,255,0.4)',\n iconHover: 'rgba(255,255,255,0.8)',\n iconActive: '#FC4F00',\n hoverBg: 'rgba(255,255,255,0.06)',\n activeBg: 'rgba(232,97,45,0.1)',\n chevron: 'rgba(255,255,255,0.3)',\n chevronHover: 'rgba(255,255,255,0.7)',\n },\n light: {\n text: 'rgba(0,0,0,0.6)',\n textHover: '#1a1a1a',\n textActive: '#1a1a1a',\n icon: 'rgba(0,0,0,0.35)',\n iconHover: 'rgba(0,0,0,0.7)',\n iconActive: '#FC4F00',\n hoverBg: 'rgba(0,0,0,0.04)',\n activeBg: 'rgba(232,97,45,0.07)',\n chevron: 'rgba(0,0,0,0.25)',\n chevronHover: 'rgba(0,0,0,0.6)',\n },\n} as const;\n\n// ─── Types ──────────────────────────────────────────────────────────────────\n\nexport interface SidebarItemProps {\n /** Textový popisek položky. */\n label: string;\n /** Volitelná ikona zobrazená před textem. */\n icon?: React.ReactNode;\n /** Zda je položka aktivní (vybraná). @default false */\n active?: boolean;\n /** Zda je skupina výchozně rozbalená. @default false */\n defaultExpanded?: boolean;\n /** Řízené rozbalení. Pokud zadáno, přepíše defaultExpanded. */\n expanded?: boolean;\n /** Callback při změně rozbalení. */\n onExpandedChange?: (expanded: boolean) => void;\n /** Callback při kliknutí na položku (ne na chevron). */\n onClick?: () => void;\n /** Potomci — vnořené SidebarItem komponenty. Přítomnost aktivuje rozbalovací režim. */\n children?: React.ReactNode;\n /** Zda je sidebar sbalený (jen ikona). @default false */\n collapsed?: boolean;\n /** Zakáže interakci. @default false */\n disabled?: boolean;\n /** Další inline styly. */\n style?: React.CSSProperties;\n /** Dodatečná CSS třída. */\n className?: string;\n}\n\n// ─── SidebarItem ────────────────────────────────────────────────────────────\n\n/**\n * Položka navigace pro AppSidebar.\n *\n * Podporuje ikonu, aktivní stav, hover efekt a vnořené položky\n * s animovaným rozbalováním/sbalováním.\n *\n * @example\n * ```tsx\n * <SidebarItem label=\"Dashboard\" icon={<HouseIcon size={18} />} active onClick={...} />\n *\n * <SidebarItem label=\"Settings\" icon={<GearIcon size={18} />} defaultExpanded>\n * <SidebarItem label=\"General\" onClick={...} />\n * <SidebarItem label=\"Security\" onClick={...} />\n * <SidebarItem label=\"Billing\" onClick={...} />\n * </SidebarItem>\n * ```\n */\nexport const SidebarItem: React.FC<SidebarItemProps> = ({\n label,\n icon,\n active = false,\n defaultExpanded = false,\n expanded: controlledExpanded,\n onExpandedChange,\n onClick,\n children,\n collapsed = false,\n disabled = false,\n style,\n className,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n\n const hasChildren = React.Children.count(children) > 0;\n const isControlled = controlledExpanded !== undefined;\n\n const [internalExpanded, setInternalExpanded] = useState(defaultExpanded);\n const isExpanded = isControlled ? controlledExpanded : internalExpanded;\n\n const [hovered, setHovered] = useState(false);\n const contentRef = useRef<HTMLDivElement>(null);\n const [contentHeight, setContentHeight] = useState(0);\n\n // ── Measure children height ──────────────────────────────────────────\n\n useEffect(() => {\n if (contentRef.current) {\n setContentHeight(contentRef.current.scrollHeight);\n }\n }, [children, isExpanded]);\n\n // ── Toggle expand ────────────────────────────────────────────────────\n\n const toggleExpand = useCallback(() => {\n if (isControlled) {\n onExpandedChange?.(!controlledExpanded);\n } else {\n setInternalExpanded((prev) => {\n const next = !prev;\n onExpandedChange?.(next);\n return next;\n });\n }\n }, [isControlled, controlledExpanded, onExpandedChange]);\n\n // ── Handle click ─────────────────────────────────────────────────────\n\n const handleClick = useCallback(() => {\n if (disabled) return;\n\n if (hasChildren) {\n toggleExpand();\n }\n\n onClick?.();\n }, [disabled, hasChildren, toggleExpand, onClick]);\n\n // ── Colors ───────────────────────────────────────────────────────────\n\n const textColor = disabled\n ? `${t.text}66`\n : active\n ? t.textActive\n : hovered\n ? t.textHover\n : t.text;\n\n const iconColor = disabled\n ? `${t.icon}66`\n : active\n ? t.iconActive\n : hovered\n ? t.iconHover\n : t.icon;\n\n const bgColor = active\n ? t.activeBg\n : hovered && !disabled\n ? t.hoverBg\n : 'transparent';\n\n // ── Collapsed mode — icon only ───────────────────────────────────────\n\n if (collapsed) {\n return (\n <button\n type=\"button\"\n onClick={handleClick}\n disabled={disabled}\n title={label}\n className={className}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '100%',\n height: 40,\n border: '0 none',\n borderStyle: 'none',\n outline: 'none',\n borderRadius: 8,\n backgroundColor: bgColor,\n color: iconColor,\n cursor: disabled ? 'not-allowed' : 'pointer',\n transition: 'background-color 0.12s ease, color 0.12s ease',\n flexShrink: 0,\n ...style,\n }}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n >\n {icon || <span style={{ fontSize: 13, fontWeight: 600, color: textColor }}>{label[0]}</span>}\n </button>\n );\n }\n\n // ── Full mode ────────────────────────────────────────────────────────\n\n return (\n <div className={className} style={style}>\n <button\n type=\"button\"\n onClick={handleClick}\n disabled={disabled}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 10,\n width: '100%',\n padding: '8px 10px',\n border: '0 none',\n borderStyle: 'none',\n outline: 'none',\n borderRadius: 8,\n backgroundColor: bgColor,\n color: textColor,\n cursor: disabled ? 'not-allowed' : 'pointer',\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: 13,\n fontWeight: active ? 500 : 400,\n textAlign: 'left',\n transition: 'background-color 0.12s ease, color 0.12s ease',\n lineHeight: 'normal',\n userSelect: 'none',\n }}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n >\n {/* Icon */}\n {icon && (\n <span\n style={{\n display: 'flex',\n alignItems: 'center',\n flexShrink: 0,\n color: iconColor,\n transition: 'color 0.12s ease',\n }}\n >\n {icon}\n </span>\n )}\n\n {/* Label */}\n <span\n style={{\n flex: 1,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {label}\n </span>\n\n {/* Chevron for expandable */}\n {hasChildren && (\n <CaretDownIcon\n size={14}\n color={hovered ? t.chevronHover : t.chevron}\n style={{\n flexShrink: 0,\n transition: 'transform 0.2s ease, color 0.12s ease',\n transform: isExpanded ? 'rotate(0deg)' : 'rotate(-90deg)',\n }}\n />\n )}\n </button>\n\n {/* Children — collapsible */}\n {hasChildren && (\n <div\n ref={contentRef}\n style={{\n overflow: 'hidden',\n maxHeight: isExpanded ? `${contentHeight}px` : '0px',\n transition: 'max-height 200ms cubic-bezier(0.16, 1, 0.3, 1)',\n paddingLeft: 12,\n }}\n >\n <div style={{ display: 'flex', flexDirection: 'column', gap: 2, paddingTop: 4, paddingBottom: 4 }}>\n {children}\n </div>\n </div>\n )}\n </div>\n );\n};\n\nSidebarItem.displayName = 'SidebarItem';\n","import React from 'react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ──────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n background: 'rgba(26,26,26,0.7)',\n backgroundSolid: '#1a1a1a',\n border: 'rgba(255,255,255,0.1)',\n shadow: '0 1px 0 rgba(255,255,255,0.04)',\n },\n light: {\n background: 'rgba(255,255,255,0.7)',\n backgroundSolid: '#ffffff',\n border: 'rgba(0,0,0,0.08)',\n shadow: '0 1px 0 rgba(0,0,0,0.03)',\n },\n} as const;\n\n// ─── Types ──────────────────────────────────────────────────────────────────\n\nexport interface NavbarProps {\n /** Logo nebo název aplikace (vykresleno vlevo). */\n logo?: React.ReactNode;\n /** Navigační obsah (vykresleno uprostřed). */\n children?: React.ReactNode;\n /** Akční prvky – tlačítka, avatar apod. (vykresleno vpravo). */\n actions?: React.ReactNode;\n /** Zda je navbar přilepený k hornímu okraji. @default true */\n sticky?: boolean;\n /** Zda použít glass efekt (průhledné pozadí s rozmazáním). @default true */\n glass?: boolean;\n /** Další inline styly. */\n style?: React.CSSProperties;\n /** Dodatečná CSS třída. */\n className?: string;\n}\n\n// ─── Navbar ─────────────────────────────────────────────────────────────────\n\n/**\n * Horní navigační lišta aplikace.\n *\n * Obsahuje tři sloty: logo (vlevo), children (uprostřed)\n * a actions (vpravo). Podporuje glass efekt a sticky pozici.\n *\n * @example\n * ```tsx\n * <Navbar\n * logo={<span>MyApp</span>}\n * actions={<Button size=\"sm\">Přihlásit</Button>}\n * >\n * <a href=\"/about\">O nás</a>\n * </Navbar>\n * ```\n */\nexport const Navbar: React.FC<NavbarProps> = ({\n logo,\n children,\n actions,\n sticky = true,\n glass = true,\n style,\n className,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n\n return (\n <header\n className={className}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n height: '56px',\n padding: '0 20px',\n backgroundColor: glass ? t.background : t.backgroundSolid,\n borderBottom: `1px solid ${t.border}`,\n boxShadow: t.shadow,\n boxSizing: 'border-box',\n ...(glass\n ? {\n backdropFilter: 'blur(20px)',\n WebkitBackdropFilter: 'blur(20px)',\n }\n : {}),\n ...(sticky\n ? {\n position: 'sticky',\n top: 0,\n zIndex: 1000,\n }\n : {}),\n ...style,\n }}\n >\n {/* Logo – vlevo */}\n {logo && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n flexShrink: 0,\n }}\n >\n {logo}\n </div>\n )}\n\n {/* Navigační obsah – uprostřed */}\n {children && (\n <nav\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n flex: 1,\n justifyContent: 'center',\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '14px',\n fontWeight: 500,\n }}\n >\n {children}\n </nav>\n )}\n\n {/* Akce – vpravo */}\n {actions && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n flexShrink: 0,\n }}\n >\n {actions}\n </div>\n )}\n </header>\n );\n};\n\nNavbar.displayName = 'Navbar';\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, { useState } from 'react';\nimport {\n Info as InfoIcon,\n CheckCircle as CheckCircleIcon,\n Warning as WarningIcon,\n XCircle as XCircleIcon,\n X as XIcon,\n} from '@phosphor-icons/react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ──────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n titleText: '#ffffff',\n bodyText: 'rgba(255,255,255,0.85)',\n closeColor: 'rgba(255,255,255,0.6)',\n closeHover: 'rgba(255,255,255,0.9)',\n border: 'rgba(255,255,255,0.1)',\n },\n light: {\n titleText: '#1a1a1a',\n bodyText: 'rgba(0,0,0,0.7)',\n closeColor: 'rgba(0,0,0,0.4)',\n closeHover: 'rgba(0,0,0,0.8)',\n border: 'rgba(0,0,0,0.08)',\n },\n} as const;\n\nconst variantTokens = {\n info: {\n bg: 'rgba(255,255,255,0.06)',\n bgLight: 'rgba(0,0,0,0.04)',\n accent: 'rgba(255,255,255,0.7)',\n accentLight: 'rgba(0,0,0,0.5)',\n },\n success: {\n bg: 'rgba(0,162,5,0.08)',\n bgLight: 'rgba(0,162,5,0.06)',\n accent: '#00A205',\n accentLight: '#00A205',\n },\n warning: {\n bg: 'rgba(245,166,35,0.08)',\n bgLight: 'rgba(245,166,35,0.06)',\n accent: '#F5A623',\n accentLight: '#F5A623',\n },\n error: {\n bg: 'rgba(222,0,0,0.08)',\n bgLight: 'rgba(222,0,0,0.06)',\n accent: '#DE0000',\n accentLight: '#DE0000',\n },\n} as const;\n\n// ─── Types ──────────────────────────────────────────────────────────────────\n\nexport type NotificationVariant = 'info' | 'success' | 'warning' | 'error';\n\nexport interface NotificationProps {\n /** Vizuální varianta notifikace. @default 'info' */\n variant?: NotificationVariant;\n /** Titulek notifikace. */\n title: string;\n /** Obsah / popis notifikace. */\n children?: React.ReactNode;\n /** Zobrazí tlačítko zavření. @default false */\n closable?: boolean;\n /** Voláno při zavření notifikace. */\n onClose?: () => void;\n /** Vlastní ikona (nahradí výchozí ikonu varianty). */\n icon?: React.ReactNode;\n /** Akční prvek zobrazený na pravé straně (tlačítko apod.). */\n action?: React.ReactNode;\n /** Další inline styly. */\n style?: React.CSSProperties;\n /** Dodatečná CSS třída. */\n className?: string;\n}\n\n// ─── Notification ───────────────────────────────────────────────────────────\n\n/**\n * Inline notifikační banner pro trvalé zobrazení v layoutu.\n *\n * Na rozdíl od `Toast` se nejedná o plovoucí overlay, ale o součást\n * obsahu stránky. Podporuje varianty info/success/warning/error,\n * volitelný akční prvek a zavírací tlačítko.\n *\n * @example\n * ```tsx\n * <Notification variant=\"success\" title=\"Uloženo\" closable>\n * Změny byly úspěšně uloženy.\n * </Notification>\n * <Notification\n * variant=\"warning\"\n * title=\"Nová verze\"\n * action={<Button size=\"sm\">Aktualizovat</Button>}\n * >\n * Je dostupná nová verze aplikace.\n * </Notification>\n * ```\n */\nexport const Notification: React.FC<NotificationProps> = ({\n variant = 'info',\n title,\n children,\n closable = false,\n onClose,\n icon,\n action,\n style,\n className,\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 bgColor = isLight ? vt.bgLight : vt.bg;\n const accentColor = isLight ? vt.accentLight : vt.accent;\n\n const defaultIcons: Record<NotificationVariant, React.ReactNode> = {\n info: <InfoIcon size={20} color={accentColor} />,\n success: <CheckCircleIcon size={20} color={accentColor} />,\n warning: <WarningIcon size={20} color={accentColor} />,\n error: <XCircleIcon size={20} color={accentColor} />,\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=\"status\"\n className={className}\n style={{\n display: 'flex',\n alignItems: 'flex-start',\n gap: '12px',\n padding: '14px 16px',\n backgroundColor: bgColor,\n border: `1px solid ${t.border}`,\n borderRadius: '12px',\n boxSizing: 'border-box',\n ...style,\n }}\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\n style={{\n fontFamily: \"'Zalando Sans Expanded', sans-serif\",\n fontWeight: 700,\n fontSize: '14px',\n lineHeight: 'normal',\n color: t.titleText,\n }}\n >\n {title}\n </span>\n {children && (\n <div\n style={{\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontWeight: 400,\n fontSize: '13px',\n lineHeight: '1.4',\n color: t.bodyText,\n }}\n >\n {children}\n </div>\n )}\n </div>\n\n {/* Akce */}\n {action && (\n <div style={{ display: 'flex', alignItems: 'center', flexShrink: 0, marginTop: '1px' }}>\n {action}\n </div>\n )}\n\n {/* Tlačítko zavření */}\n {closable && (\n <button\n type=\"button\"\n onClick={handleClose}\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: '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\nNotification.displayName = 'Notification';\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, { useState, useEffect, useCallback, useRef } from 'react';\nimport { useTheme } from '../../hooks/useTheme';\nimport { Modal } from '../Modal';\n\n// ─── Design tokens ──────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n titleText: '#ffffff',\n descriptionText: '#eaeaea',\n cancelBg: 'transparent',\n cancelHover: 'rgba(255,255,255,0.08)',\n cancelBorder: 'rgba(255,255,255,0.15)',\n cancelText: '#eaeaea',\n confirmBg: '#FC4F00',\n confirmHover: '#FF6D2A',\n confirmText: '#ffffff',\n dangerBg: '#EF3838',\n dangerHover: '#ff5252',\n dangerText: '#ffffff',\n },\n light: {\n titleText: '#1a1a1a',\n descriptionText: '#333333',\n cancelBg: 'transparent',\n cancelHover: 'rgba(0,0,0,0.05)',\n cancelBorder: 'rgba(0,0,0,0.12)',\n cancelText: '#333333',\n confirmBg: '#FC4F00',\n confirmHover: '#FF6D2A',\n confirmText: '#ffffff',\n dangerBg: '#EF3838',\n dangerHover: '#ff5252',\n dangerText: '#ffffff',\n },\n} as const;\n\n// ─── Types ──────────────────────────────────────────────────────────────────\n\nexport interface ConfirmDialogProps {\n /** Řídí zobrazení potvrzovacího dialogu. */\n open: boolean;\n /** Voláno při potvrzení akce. */\n onConfirm: () => void;\n /** Voláno při zrušení (zavření) dialogu. */\n onCancel: () => void;\n /** Titulek dialogu. */\n title: string;\n /** Volitelný popis akce. */\n description?: string;\n /** Text potvrzovacího tlačítka. @default 'Potvrdit' */\n confirmLabel?: string;\n /** Text zrušovacího tlačítka. @default 'Zrušit' */\n cancelLabel?: string;\n /** Varianta dialogu – 'danger' zvýrazní potvrzovací tlačítko červeně. @default 'default' */\n variant?: 'default' | 'danger';\n /** Stav načítání potvrzovacího tlačítka. @default false */\n loading?: boolean;\n /** Další inline styly. */\n style?: React.CSSProperties;\n /** Dodatečná CSS třída. */\n className?: string;\n}\n\n// ─── ConfirmDialog ──────────────────────────────────────────────────────────\n\n/**\n * Předpřipravený modální dialog pro potvrzení akce.\n *\n * Interně používá komponentu `Modal`. Podporuje standardní a danger variantu\n * s volitelným stavem načítání.\n *\n * @example\n * ```tsx\n * <ConfirmDialog\n * open={isOpen}\n * onConfirm={handleDelete}\n * onCancel={() => setOpen(false)}\n * title=\"Smazat položku?\"\n * description=\"Tato akce je nevratná.\"\n * variant=\"danger\"\n * />\n * ```\n */\nexport const ConfirmDialog: React.FC<ConfirmDialogProps> = ({\n open,\n onConfirm,\n onCancel,\n title,\n description,\n confirmLabel = 'Potvrdit',\n cancelLabel = 'Zrušit',\n variant = 'default',\n loading = false,\n style,\n className,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n\n const [cancelHovered, setCancelHovered] = useState(false);\n const [confirmHovered, setConfirmHovered] = useState(false);\n\n const isDanger = variant === 'danger';\n const confirmBg = isDanger\n ? confirmHovered ? t.dangerHover : t.dangerBg\n : confirmHovered ? t.confirmHover : t.confirmBg;\n const confirmTextColor = isDanger ? t.dangerText : t.confirmText;\n\n return (\n <Modal\n open={open}\n onClose={onCancel}\n title={title}\n size=\"sm\"\n className={className}\n style={style}\n footer={\n <>\n {/* Tlačítko Zrušit */}\n <button\n type=\"button\"\n onClick={onCancel}\n onMouseEnter={() => setCancelHovered(true)}\n onMouseLeave={() => setCancelHovered(false)}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '8px 16px',\n background: cancelHovered ? t.cancelHover : t.cancelBg,\n border: `1px solid ${t.cancelBorder}`,\n borderRadius: '6px',\n cursor: 'pointer',\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '14px',\n fontWeight: 500,\n color: t.cancelText,\n lineHeight: 'normal',\n transition: 'background-color 0.12s ease',\n }}\n >\n {cancelLabel}\n </button>\n\n {/* Tlačítko Potvrdit */}\n <button\n type=\"button\"\n onClick={onConfirm}\n disabled={loading}\n onMouseEnter={() => setConfirmHovered(true)}\n onMouseLeave={() => setConfirmHovered(false)}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '8px 16px',\n background: confirmBg,\n border: 'none',\n borderRadius: '6px',\n cursor: loading ? 'not-allowed' : 'pointer',\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '14px',\n fontWeight: 500,\n color: confirmTextColor,\n lineHeight: 'normal',\n opacity: loading ? 0.7 : 1,\n transition: 'background-color 0.12s ease, opacity 0.12s ease',\n }}\n >\n {loading ? 'Zpracovávám...' : confirmLabel}\n </button>\n </>\n }\n >\n {description && (\n <p\n style={{\n margin: 0,\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '14px',\n lineHeight: '1.6',\n color: t.descriptionText,\n }}\n >\n {description}\n </p>\n )}\n </Modal>\n );\n};\n\nConfirmDialog.displayName = 'ConfirmDialog';\n","import React, { useState, useCallback, useRef } from 'react';\nimport { CopySimpleIcon, CheckIcon } from '@phosphor-icons/react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ──────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n iconColor: '#ACACAC',\n iconHover: '#ffffff',\n successColor: '#00A205',\n buttonBg: 'transparent',\n buttonHover: 'rgba(255,255,255,0.08)',\n buttonBorder: 'rgba(255,255,255,0.15)',\n buttonText: '#eaeaea',\n },\n light: {\n iconColor: '#888888',\n iconHover: '#1a1a1a',\n successColor: '#00A205',\n buttonBg: 'transparent',\n buttonHover: 'rgba(0,0,0,0.05)',\n buttonBorder: 'rgba(0,0,0,0.12)',\n buttonText: '#333333',\n },\n} as const;\n\n// ─── Size config ────────────────────────────────────────────────────────────\n\nconst sizeConfig = {\n sm: { iconSize: 14, buttonPadding: '4px 10px', iconPadding: '4px', fontSize: '12px' },\n md: { iconSize: 16, buttonPadding: '6px 14px', iconPadding: '6px', fontSize: '13px' },\n lg: { iconSize: 18, buttonPadding: '8px 16px', iconPadding: '8px', fontSize: '14px' },\n} as const;\n\n// ─── Types ──────────────────────────────────────────────────────────────────\n\nexport interface CopyButtonProps {\n /** Text ke zkopírování do schránky. */\n text: string;\n /** Vlastní obsah tlačítka (nahrazuje výchozí ikonu/text). */\n children?: React.ReactNode;\n /** Velikost tlačítka. @default 'md' */\n size?: 'sm' | 'md' | 'lg';\n /** Varianta zobrazení. @default 'icon' */\n variant?: 'icon' | 'button';\n /** Popisek tlačítka ve variantě 'button'. @default 'Kopírovat' */\n label?: string;\n /** Popisek po úspěšném zkopírování. @default 'Zkopírováno' */\n successLabel?: string;\n /** Callback volaný po úspěšném zkopírování do schránky. */\n onCopy?: () => void;\n /** Další inline styly. */\n style?: React.CSSProperties;\n /** Dodatečná CSS třída. */\n className?: string;\n}\n\n// ─── Clipboard helper ───────────────────────────────────────────────────────\n\nconst copyToClipboard = async (text: string): Promise<boolean> => {\n try {\n if (navigator.clipboard && navigator.clipboard.writeText) {\n await navigator.clipboard.writeText(text);\n return true;\n }\n } catch {\n // Fallback below\n }\n\n // Fallback: textarea + execCommand\n try {\n const textarea = document.createElement('textarea');\n textarea.value = text;\n textarea.style.position = 'fixed';\n textarea.style.opacity = '0';\n textarea.style.left = '-9999px';\n document.body.appendChild(textarea);\n textarea.select();\n const result = document.execCommand('copy');\n document.body.removeChild(textarea);\n return result;\n } catch {\n return false;\n }\n};\n\n// ─── CopyButton ─────────────────────────────────────────────────────────────\n\n/**\n * Tlačítko pro zkopírování textu do schránky.\n *\n * Podporuje dvě varianty: minimální ikonovou (jen ikona kopírování)\n * a plnou tlačítkovou (s textem). Po úspěšném zkopírování se na 2 sekundy\n * zobrazí ikona zaškrtnutí.\n *\n * @example\n * ```tsx\n * <CopyButton text=\"npm install sm-ui\" variant=\"button\" label=\"Kopírovat příkaz\" />\n * <CopyButton text={code} />\n * ```\n */\nexport const CopyButton: React.FC<CopyButtonProps> = ({\n text,\n children,\n size = 'md',\n variant = 'icon',\n label = 'Kopírovat',\n successLabel = 'Zkopírováno',\n onCopy,\n style,\n className,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n const sc = sizeConfig[size];\n\n const [copied, setCopied] = useState(false);\n const [hovered, setHovered] = useState(false);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const handleCopy = useCallback(async () => {\n const success = await copyToClipboard(text);\n if (success) {\n setCopied(true);\n onCopy?.();\n if (timerRef.current) clearTimeout(timerRef.current);\n timerRef.current = setTimeout(() => {\n setCopied(false);\n timerRef.current = null;\n }, 2000);\n }\n }, [text, onCopy]);\n\n const iconColor = copied ? t.successColor : hovered ? t.iconHover : t.iconColor;\n\n const CurrentIcon = copied ? CheckIcon : CopySimpleIcon;\n\n if (children) {\n return (\n <button\n type=\"button\"\n aria-label={copied ? successLabel : label}\n onClick={handleCopy}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n className={className}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '6px',\n padding: sc.iconPadding,\n background: hovered ? t.buttonHover : t.buttonBg,\n border: 'none',\n borderRadius: '6px',\n cursor: 'pointer',\n transition: 'background-color 0.12s ease',\n color: iconColor,\n ...style,\n }}\n >\n {children}\n </button>\n );\n }\n\n if (variant === 'icon') {\n return (\n <button\n type=\"button\"\n aria-label={copied ? successLabel : label}\n onClick={handleCopy}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n className={className}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: sc.iconPadding,\n background: hovered ? t.buttonHover : t.buttonBg,\n border: 'none',\n borderRadius: '6px',\n cursor: 'pointer',\n transition: 'background-color 0.12s ease, color 0.12s ease',\n color: iconColor,\n ...style,\n }}\n >\n <CurrentIcon size={sc.iconSize} color={iconColor} />\n </button>\n );\n }\n\n // Varianta 'button'\n return (\n <button\n type=\"button\"\n aria-label={copied ? successLabel : label}\n onClick={handleCopy}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n className={className}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '6px',\n padding: sc.buttonPadding,\n background: hovered ? t.buttonHover : t.buttonBg,\n border: `1px solid ${t.buttonBorder}`,\n borderRadius: '6px',\n cursor: 'pointer',\n transition: 'background-color 0.12s ease',\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: sc.fontSize,\n fontWeight: 500,\n color: copied ? t.successColor : t.buttonText,\n lineHeight: 'normal',\n ...style,\n }}\n >\n <CurrentIcon size={sc.iconSize} color={copied ? t.successColor : t.buttonText} />\n {copied ? successLabel : label}\n </button>\n );\n};\n\nCopyButton.displayName = 'CopyButton';\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"]}
1
+ {"version":3,"sources":["../src/hooks/useTheme.ts","../src/components/Button/Button.tsx","../src/components/Input/Input.tsx","../src/components/NumberInput/NumberInput.tsx","../src/components/Select/Select.tsx","../src/components/Combobox/Combobox.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/SegmentedControl/SegmentedControl.tsx","../src/components/ColorPicker/ColorPicker.tsx","../src/components/Rating/Rating.tsx","../src/components/OTPInput/OTPInput.tsx","../src/components/Skeleton/Skeleton.tsx","../src/components/Table/Table.tsx","../src/components/DataGrid/DataGrid.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/Calendar/Calendar.tsx","../src/components/Timeline/Timeline.tsx","../src/components/DataList/DataList.tsx","../src/components/Tree/Tree.tsx","../src/components/StatusBadge/StatusBadge.tsx","../src/components/Modal/Modal.tsx","../src/components/Drawer/Drawer.tsx","../src/components/Sheet/Sheet.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/CommandMenu/CommandMenu.tsx","../src/components/AppSidebar/AppSidebar.tsx","../src/components/SidebarItem/SidebarItem.tsx","../src/components/Navbar/Navbar.tsx","../src/components/Toast/Toast.tsx","../src/components/Toast/Toaster.tsx","../src/components/Alert/Alert.tsx","../src/components/Notification/Notification.tsx","../src/components/Progress/Progress.tsx","../src/components/Spinner/Spinner.tsx","../src/components/ConfirmDialog/ConfirmDialog.tsx","../src/components/CopyButton/CopyButton.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","height","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","NumberInput","min","max","step","prefix","suffix","hoveredBtn","setHoveredBtn","clamp","useCallback","result","increment","decrement","intervalRef","timeoutRef","startHold","action","stopHold","handleInputChange","raw","parsed","handleBlur","canDecrement","canIncrement","buttonStyle","side","canClick","affixStyle","chevronBtnStyle","CaretUpIcon","CaretDownIcon","MinusIcon","PlusIcon","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","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","SelectGroup","Combobox","onInputChange","allowCustom","onCreate","renderOption","notFoundContent","footer","inputRef","inputValue","setInputValue","selectedOpt","handleInputChangeInternal","val","selectOption","handleFocus","MagnifyingGlassIcon","node","DAY_NAMES","MONTH_NAMES","getCalendarDays","year","month","firstDayOfWeek","dayOfWeek","start","days","d","formatDate","dd","mm","formatDateTime","hh","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","handleDayClick","handleTimeChange","which","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","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","snapToStep","Slider","showValue","range","trackRef","draggingThumb","pct","startPct","endPct","getValueFromEvent","clientX","track","ratio","handleTrackMouseDown","rv","distStart","distEnd","handleMouseMove","ev","handleMouseUp","valueDisplay","thumbCommon","formatFileSize","bytes","fileIdCounter","FileUpload","onFiles","accept","maxSize","showFileList","buttonLabel","dragging","setDragging","files","setFiles","sizeError","setSizeError","processFiles","fileList","oversized","f","newFiles","file","updated","handleDrop","handleRemove","fileId","zoneStyle","UploadSimpleIcon","FileTextIcon","FolderIcon","SegmentedControl","data","orientation","isVertical","items","activeIndex","item","containerRef","segmentRefs","indicator","setIndicator","updateIndicator","container","activeEl","containerRect","activeRect","isActive","isItemDisabled","DEFAULT_PRESETS","isValidHex","hex","normalizeHex","clean","isLightColor","c","g","ColorPicker","presets","popoverRef","hexInput","setHexInput","popoverPos","setPopoverPos","popoverHeight","handleHexChange","handleHexBlur","handlePresetClick","getPopoverAnimStyle","swatchStyle","popover","EyedropperIcon","Rating","readOnly","hoverIndex","setHoverIndex","isInteractive","handleMouseEnter","handleMouseLeave","stars","_","isFilled","isHovered","StarIcon","OTPInput","length","autoFocus","separatorAfter","separator","inputsRef","focusedIndex","setFocusedIndex","digits","focusInput","updateValue","newDigits","newValue","handleInput","char","handleChange","handlePaste","pasted","nextIndex","getBoxStyle","isFocused","hasDig","ANIM_NAME","KEYFRAMES_CSS","Skeleton","width","lines","resolveWidth","resolveHeight","baseStyle","styleTag","Table","columns","emptyText","onSort","sortKey","sortDirection","striped","hoverable","handleSort","col","nextDir","tableStyle","thStyle","tdStyle","CaretUpDownIcon","rowIdx","row","InternalCheckbox","DataGrid","selectable","onSelectionChange","rowKey","onRowClick","stickyHeader","selectedIds","setSelectedIds","hoveredRow","setHoveredRow","allIds","useMemo","allSelected","someSelected","toggleAll","toggleRow","prev","checkboxThStyle","checkboxTdStyle","isLastRow","rowBg","paddingMap","Card","title","subtitle","header","bordered","cardStyle","headerContent","AccordionItem","defaultOpen","_controlled","_open","_onToggle","internalOpen","setInternalOpen","isOpen","contentRef","contentHeight","setContentHeight","handleToggle","Accordion","child","openIndices","setOpenIndices","defaults","Tab","TabPanel","Tabs","childArray","tabs","activePanel","p","tab","tabStyle","Tooltip","position","delay","coords","setCoords","tooltipRef","timerRef","ARROW_SIZE","GAP","trigger","tooltip","tRect","top","left","handleEnter","handleLeave","arrowStyle","tooltipEl","Popover","hoverTimerRef","pop","pRect","getAnimStyle","slideMap","axis","popoverEl","EmptyState","description","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","DAY_LABELS","MONTH_LABELS","startOfWeek","date","diff","getMonthGrid","firstDay","current","getWeekGrid","isDateDisabled","Calendar","view","events","today","currentMonth","setCurrentMonth","currentYear","setCurrentYear","currentWeekStart","setCurrentWeekStart","navigatePrev","navigateNext","getEventsForDay","headerLabel","navBtnStyle","dayKey","dayEvents","cellBg","cellColor","cellBorder","evIdx","Timeline","isLast","dotColor","DataList","cols","getStripedIndex","rowStyle","valueStyle","TreeNodeRow","depth","expanded","selectedId","onToggle","onSelect","hasChildren","isExpanded","setIsHovered","Tree","defaultExpanded","setExpanded","statusColors","pulseStyleInjected","injectPulseStyle","StatusBadge","status","pulse","Modal","onClose","closeOnOverlay","closeOnEscape","showClose","cardRef","previousFocusRef","card","focusableSelector","handleTab","focusable","first","last","getOverlayStyle","getCardAnimStyle","isFullscreen","Drawer","panelRef","resolvedWidth","getTranslateX","state","offscreen","getOverlayOpacity","Sheet","getTranslate","offscreenMap","panelPosition","borderStyle","Breadcrumb","getPageRange","page","totalPages","siblings","showFirst","showLast","Pagination","pages","buttonBase","Stepper","steps","activeStep","clickable","onStepClick","hoveredStep","setHoveredStep","isHorizontal","circleSize","isStepClickable","isCompleted","isFuture","circleBg","circleBorder","circleText","labelColor","descColor","lineColor","DropdownMenu","dropdownWidth","actionableItems","currentActionIdx","isDanger","isHighlighted","textColor","hoverBg","Link","showIcon","onMouseEnter","onMouseLeave","linkStyle","Spotlight","results","flatItems","grouped","categoryMap","group","CommandMenu","groups","query","setQuery","filteredGroups","flatIndex","currentFlatIndex","AppSidebar","collapsed","onCollapse","collapsedWidth","currentWidth","SidebarItem","active","controlledExpanded","onExpandedChange","isControlled","internalExpanded","setInternalExpanded","toggleExpand","iconColor","bgColor","Navbar","logo","actions","sticky","glass","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","isBottom","appeared","onDismiss","onHeightMeasured","isLeaving","scale","peekOffset","translateY","transform","opacity","isHiddenByDepth","zIndex","measuredRef","appearedIds","setAppearedIds","isRight","isCenter","collapsedHeight","expandedHeight","sum","containerHeight","horizontalStyle","arrayIndex","offsetPx","useToast","ctx","useContext","variantTokens","Alert","closable","vt","isLight","WarningIcon","handleClose","Notification","accentColor","barSizeConfig","stripeKeyframesId","ensureStripeKeyframes","styleEl","ProgressBar","animated","clampedValue","stripeStyle","ProgressCircle","strokeWidth","radius","circumference","sizeMap","resolvedSize","strokeColor","ConfirmDialog","onConfirm","onCancel","confirmLabel","cancelLabel","cancelHovered","setCancelHovered","confirmHovered","setConfirmHovered","confirmBg","confirmTextColor","copyToClipboard","text","textarea","CopyButton","successLabel","onCopy","copied","setCopied","handleCopy","CurrentIcon","CopySimpleIcon","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","toggleExpanded","DropIndicator","DragListRow","allowNesting","maxDepth","draggedId","dropState","onDragStart","onDragOver","onDragLeave","onDrop","onDragEnd","onToggleExpand","renderItem","dragMode","gripHover","setGripHover","rowHover","setRowHover","chevronHover","setChevronHover","handleActiveRef","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.mjs","sourcesContent":["import { useState, useEffect } from 'react';\n\nexport type Theme = 'light' | 'dark';\n\n/**\n * Zjistí aktuální téma aplikace.\n * Výchozí je 'light'. Pokud je na html/body nastaven `data-theme`, použije se.\n * Jinak funguje fallback na systémové preference (prefers-color-scheme).\n */\nexport const useTheme = (): Theme => {\n const [theme, setTheme] = useState<Theme>('light');\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n\n const getTheme = (): Theme => {\n const docTheme = document.documentElement.getAttribute('data-theme') || document.body.getAttribute('data-theme');\n if (docTheme === 'dark' || docTheme === 'light') {\n return docTheme as Theme;\n }\n\n // Fallback na systém\n if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {\n return 'dark';\n }\n\n return 'light'; // default\n };\n\n setTheme(getTheme());\n\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const listener = (e: MediaQueryListEvent) => {\n const docTheme = document.documentElement.getAttribute('data-theme') || document.body.getAttribute('data-theme');\n if (!docTheme) {\n setTheme(e.matches ? 'dark' : 'light');\n }\n };\n mediaQuery.addEventListener('change', listener);\n\n // Nasloucháme případným změnám na data-theme v DOM\n const observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (mutation.attributeName === 'data-theme') {\n setTheme(getTheme());\n }\n });\n });\n\n observer.observe(document.documentElement, { attributes: true });\n observer.observe(document.body, { attributes: true });\n\n return () => {\n mediaQuery.removeEventListener('change', listener);\n observer.disconnect();\n };\n }, []);\n\n return theme;\n};\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', height: '30px' },\n md: { paddingText: '8px 16px', paddingSquare: '8px', fontSize: '14px', gap: '8px', height: '36px' },\n lg: { paddingText: '12px 20px', paddingSquare: '12px', fontSize: '16px', gap: '10px', height: '42px' },\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' | 'danger';\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 * - `danger` — červené vyplnění (#EF3838)\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, height } = 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 height: isSquare ? height : height,\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: '1',\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 case 'danger':\n return {\n backgroundColor: hovered ? '#FF5252' : '#EF3838',\n color: colors.white,\n border: '1px solid transparent',\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 <label htmlFor={inputId} 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 </label>\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, { useCallback, useEffect, useId, useRef, useState } from 'react';\nimport { Minus as MinusIcon, Plus as PlusIcon, CaretUp as CaretUpIcon, CaretDown as 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 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 buttonBg: 'rgba(255,255,255,0.06)',\n buttonHoverBg: 'rgba(255,255,255,0.12)',\n buttonText: '#ffffff',\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 buttonBg: 'rgba(0,0,0,0.04)',\n buttonHoverBg: 'rgba(0,0,0,0.08)',\n buttonText: '#1a1a1a',\n },\n} as const;\n\n// ─── Size config ─────────────────────────────────────────────────────────────\n\nconst sizeConfig = {\n sm: { padding: '6px 10px', fontSize: '14px', iconSize: 14, height: '30px', buttonPadding: '6px' },\n md: { padding: '8px 12px', fontSize: '16px', iconSize: 16, height: '36px', buttonPadding: '8px' },\n lg: { padding: '10px 14px', fontSize: '18px', iconSize: 18, height: '42px', buttonPadding: '10px' },\n} as const;\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport type NumberInputSize = 'sm' | 'md' | 'lg';\nexport type NumberInputVariant = 'default' | 'compact';\n\nexport interface NumberInputProps {\n /** Aktuální numerická hodnota. */\n value: number;\n /** Callback volaný při změně hodnoty. */\n onChange: (value: number) => void;\n /** Minimální povolená hodnota. */\n min?: number;\n /** Maximální povolená hodnota. */\n max?: number;\n /** Krok inkrementace / dekrementace. @default 1 */\n step?: number;\n /** Popisek zobrazený nad polem. Stylizován velkými písmeny dle SM-UI design systému. */\n label?: string;\n /** Při `true` se pole zobrazí jako nevalidní. Při zadání řetězce se zobrazí chybová zpráva. */\n error?: boolean | string;\n /** Zakáže celé pole včetně tlačítek. */\n disabled?: boolean;\n /**\n * Velikostní preset.\n * - `'sm'` -- kompaktní\n * - `'md'` -- výchozí\n * - `'lg'` -- velký\n * @default 'md'\n */\n size?: NumberInputSize;\n /**\n * Varianta rozložení.\n * - `'default'` -- tlačítka −/+ po stranách\n * - `'compact'` -- šipky nahoru/dolů vpravo uvnitř pole\n * @default 'default'\n */\n variant?: NumberInputVariant;\n /** Text zobrazený před hodnotou (např. měna). */\n prefix?: string;\n /** Text zobrazený za hodnotou (např. jednotka). */\n suffix?: string;\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// ─── NumberInput ─────────────────────────────────────────────────────────────\n\n/**\n * Numerické vstupní pole s tlačítky +/− dle SM-UI design systému.\n *\n * Podržením tlačítka se hodnota plynule inkrementuje / dekrementuje.\n * Hodnota je automaticky omezena na rozsah `min`–`max`.\n *\n * @example\n * ```tsx\n * <NumberInput value={count} onChange={setCount} min={0} max={100} step={5} />\n * <NumberInput value={price} onChange={setPrice} prefix=\"$\" suffix=\"USD\" />\n * ```\n */\nexport const NumberInput = React.forwardRef<HTMLInputElement, NumberInputProps>(\n (\n {\n value,\n onChange,\n min,\n max,\n step = 1,\n label,\n error,\n disabled = false,\n size = 'md',\n variant = 'default',\n prefix,\n suffix,\n style,\n className,\n },\n ref\n ) => {\n const theme = useTheme();\n const t = tokens[theme];\n const autoId = useId();\n const inputId = autoId;\n const sc = sizeConfig[size];\n const [focused, setFocused] = useState(false);\n const [hoveredBtn, setHoveredBtn] = useState<'minus' | 'plus' | 'up' | 'down' | null>(null);\n\n const hasError = Boolean(error);\n const errorMessage = typeof error === 'string' ? error : undefined;\n\n // ── Clamp helper ────────────────────────────────────────────────────\n\n const clamp = useCallback(\n (v: number): number => {\n let result = v;\n if (min !== undefined && result < min) result = min;\n if (max !== undefined && result > max) result = max;\n return result;\n },\n [min, max]\n );\n\n // ── Increment / Decrement ───────────────────────────────────────────\n\n const increment = useCallback(() => {\n onChange(clamp(value + step));\n }, [value, step, onChange, clamp]);\n\n const decrement = useCallback(() => {\n onChange(clamp(value - step));\n }, [value, step, onChange, clamp]);\n\n // ── Hold to repeat ──────────────────────────────────────────────────\n\n const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const startHold = useCallback(\n (action: () => void) => {\n if (disabled) return;\n action();\n timeoutRef.current = setTimeout(() => {\n intervalRef.current = setInterval(action, 80);\n }, 400);\n },\n [disabled]\n );\n\n const stopHold = useCallback(() => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n if (intervalRef.current) {\n clearInterval(intervalRef.current);\n intervalRef.current = null;\n }\n }, []);\n\n useEffect(() => {\n return () => stopHold();\n }, [stopHold]);\n\n // ── Direct input handling ───────────────────────────────────────────\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = e.target.value;\n if (raw === '' || raw === '-') return;\n const parsed = parseFloat(raw);\n if (!isNaN(parsed)) {\n onChange(clamp(parsed));\n }\n };\n\n const handleBlur = () => {\n setFocused(false);\n onChange(clamp(value));\n };\n\n // ── Can increment / decrement ───────────────────────────────────────\n\n const canDecrement = min === undefined || value > min;\n const canIncrement = max === undefined || value < max;\n\n // ── Styles ───────────────────────────────────────────────────────────\n\n const wrapperStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n backgroundColor: disabled ? t.backgroundDisabled : t.background,\n border: `1px solid ${hasError ? t.borderError : focused ? t.borderFocus : t.border}`,\n borderRadius: '8px',\n boxSizing: 'border-box',\n transition: 'border-color 0.15s ease',\n opacity: disabled ? 0.6 : 1,\n overflow: 'hidden',\n height: sc.height,\n };\n\n const buttonStyle = (side: 'minus' | 'plus', canClick: boolean): React.CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: sc.buttonPadding,\n border: 'none',\n background: hoveredBtn === side && canClick && !disabled ? t.buttonHoverBg : t.buttonBg,\n color: canClick && !disabled ? t.buttonText : t.placeholder,\n cursor: disabled || !canClick ? 'not-allowed' : 'pointer',\n flexShrink: 0,\n transition: 'background-color 0.12s ease',\n height: '100%',\n minWidth: sc.height,\n userSelect: 'none',\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 textAlign: 'center',\n cursor: disabled ? 'not-allowed' : 'text',\n MozAppearance: 'textfield',\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 affixStyle: React.CSSProperties = {\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: sc.fontSize,\n color: t.placeholder,\n flexShrink: 0,\n userSelect: 'none',\n lineHeight: 'normal',\n };\n\n // ── Compact chevron button style ──────────────────────────────────\n\n const chevronBtnStyle = (side: 'up' | 'down', canClick: boolean): React.CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n border: 'none',\n background: hoveredBtn === side && canClick && !disabled ? t.buttonHoverBg : 'transparent',\n color: canClick && !disabled ? t.buttonText : t.placeholder,\n cursor: disabled || !canClick ? 'not-allowed' : 'pointer',\n padding: '0 6px',\n height: '14px',\n flexShrink: 0,\n transition: 'background-color 0.12s ease',\n userSelect: 'none',\n borderRadius: '2px',\n });\n\n if (variant === 'compact') {\n return (\n <div\n style={{\n display: 'inline-flex',\n flexDirection: 'column',\n gap: '6px',\n ...style,\n }}\n className={className}\n >\n {label && (\n <label htmlFor={inputId} style={labelStyle}>\n {label}\n </label>\n )}\n\n <div style={wrapperStyle}>\n {/* Input area */}\n <div style={{ flex: 1, display: 'flex', alignItems: 'center', gap: '4px', padding: sc.padding, minWidth: 0 }}>\n {prefix && <span style={affixStyle}>{prefix}</span>}\n <input\n ref={ref}\n id={inputId}\n type=\"text\"\n inputMode=\"numeric\"\n value={value}\n onChange={handleInputChange}\n onFocus={() => setFocused(true)}\n onBlur={handleBlur}\n disabled={disabled}\n style={{ ...nativeStyle, textAlign: 'left' }}\n />\n {suffix && <span style={affixStyle}>{suffix}</span>}\n </div>\n\n {/* Compact chevron buttons */}\n <div style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n borderLeft: `1px solid ${hasError ? t.borderError : focused ? t.borderFocus : t.border}`,\n transition: 'border-color 0.15s ease',\n }}>\n <button\n type=\"button\"\n tabIndex={-1}\n aria-label=\"Zvýšit hodnotu\"\n disabled={disabled || !canIncrement}\n style={chevronBtnStyle('up', canIncrement)}\n onMouseDown={() => startHold(increment)}\n onMouseUp={stopHold}\n onMouseLeave={() => { stopHold(); setHoveredBtn(null); }}\n onMouseEnter={() => setHoveredBtn('up')}\n >\n <CaretUpIcon size={10} weight=\"bold\" />\n </button>\n <button\n type=\"button\"\n tabIndex={-1}\n aria-label=\"Snížit hodnotu\"\n disabled={disabled || !canDecrement}\n style={chevronBtnStyle('down', canDecrement)}\n onMouseDown={() => startHold(decrement)}\n onMouseUp={stopHold}\n onMouseLeave={() => { stopHold(); setHoveredBtn(null); }}\n onMouseEnter={() => setHoveredBtn('down')}\n >\n <CaretDownIcon size={10} weight=\"bold\" />\n </button>\n </div>\n </div>\n\n {errorMessage && (\n <span style={{ fontFamily: \"'Zalando Sans', sans-serif\", fontSize: '12px', color: t.borderError, lineHeight: 'normal' }}>\n {errorMessage}\n </span>\n )}\n </div>\n );\n }\n\n return (\n <div\n style={{\n display: 'inline-flex',\n flexDirection: 'column',\n gap: '6px',\n ...style,\n }}\n className={className}\n >\n {label && (\n <label htmlFor={inputId} style={labelStyle}>\n {label}\n </label>\n )}\n\n <div style={wrapperStyle}>\n {/* Minus button */}\n <button\n type=\"button\"\n tabIndex={-1}\n aria-label=\"Snížit hodnotu\"\n disabled={disabled || !canDecrement}\n style={buttonStyle('minus', canDecrement)}\n onMouseDown={() => startHold(decrement)}\n onMouseUp={stopHold}\n onMouseLeave={() => {\n stopHold();\n setHoveredBtn(null);\n }}\n onMouseEnter={() => setHoveredBtn('minus')}\n >\n <MinusIcon size={sc.iconSize} />\n </button>\n\n {/* Input area */}\n <div style={{ flex: 1, display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '4px', padding: '0 4px', minWidth: 0 }}>\n {prefix && <span style={affixStyle}>{prefix}</span>}\n <input\n ref={ref}\n id={inputId}\n type=\"text\"\n inputMode=\"numeric\"\n value={value}\n onChange={handleInputChange}\n onFocus={() => setFocused(true)}\n onBlur={handleBlur}\n disabled={disabled}\n style={nativeStyle}\n />\n {suffix && <span style={affixStyle}>{suffix}</span>}\n </div>\n\n {/* Plus button */}\n <button\n type=\"button\"\n tabIndex={-1}\n aria-label=\"Zvýšit hodnotu\"\n disabled={disabled || !canIncrement}\n style={buttonStyle('plus', canIncrement)}\n onMouseDown={() => startHold(increment)}\n onMouseUp={stopHold}\n onMouseLeave={() => {\n stopHold();\n setHoveredBtn(null);\n }}\n onMouseEnter={() => setHoveredBtn('plus')}\n >\n <PlusIcon size={sc.iconSize} />\n </button>\n </div>\n\n {errorMessage && (\n <span style={{ fontFamily: \"'Zalando Sans', sans-serif\", fontSize: '12px', color: t.borderError, lineHeight: 'normal' }}>\n {errorMessage}\n </span>\n )}\n </div>\n );\n }\n);\n\nNumberInput.displayName = 'NumberInput';\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 /**\n * Popisek zobrazený nad selectem.\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é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 label,\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 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 {/* Label */}\n {label && (\n <label\n htmlFor={selectId}\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: t.text,\n userSelect: 'none',\n }}\n >\n {label}\n </label>\n )}\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 { MagnifyingGlass as MagnifyingGlassIcon, CaretDown as CaretDownIcon, 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 ───────────────────────────────────────────────────────────\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 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 divider: 'rgba(0,0,0,0.06)',\n scrollbarThumb: 'rgba(0,0,0,0.15)',\n },\n} as const;\n\n// ─── Animation ───────────────────────────────────────────────────────────────\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// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport type ComboboxSize = 'sm' | 'md' | 'lg';\n\nexport interface ComboboxOption {\n /** Unikátní hodnota položky. */\n value: string;\n /** Zobrazovaný popisek. Pokud chybí, použije se `value`. */\n label?: string;\n}\n\nexport interface ComboboxProps {\n /** Dostupné položky k výběru. */\n options: ComboboxOption[];\n /** Aktuální vybraná hodnota. */\n value: string;\n /** Callback volaný při výběru položky. */\n onChange: (value: string) => void;\n /** Callback volaný při změně textu ve vyhledávacím poli. Vhodné pro asynchronní filtrování. */\n onInputChange?: (input: string) => void;\n /** Zástupný text zobrazený při prázdném poli. */\n placeholder?: string;\n /** Popisek zobrazený nad polem. Stylizován velkými písmeny dle SM-UI design systému. */\n label?: string;\n /** Při `true` se pole zobrazí jako nevalidní. Při zadání řetězce se zobrazí chybová zpráva. */\n error?: boolean | string;\n /** Zakáže celou komponentu. */\n disabled?: boolean;\n /** Zobrazí spinner místo ikony vyhledávání. Vhodné při načítání položek. */\n loading?: boolean;\n /** Povolí uživateli zadat vlastní hodnotu, která není v seznamu. @default false */\n allowCustom?: boolean;\n /** Callback volaný při vytvoření vlastní hodnoty (Enter při `allowCustom`). */\n onCreate?: (value: string) => void;\n /** Vlastní renderování položky v seznamu. */\n renderOption?: (option: { value: string; label?: string }, highlighted: boolean) => React.ReactNode;\n /** Obsah zobrazený když žádné výsledky neodpovídají. @default \"Žádné výsledky\" */\n notFoundContent?: React.ReactNode;\n /** Obsah zobrazený pod seznamem položek uvnitř dropdownu. */\n footer?: React.ReactNode;\n /**\n * Velikostní preset.\n * @default 'md'\n */\n size?: ComboboxSize;\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// ─── Combobox ────────────────────────────────────────────────────────────────\n\n/**\n * Kombinované vyhledávací pole se seznamem dle SM-UI design systému.\n *\n * Uživatel zadává text pro filtrování položek. Dropdown se vykresluje\n * přes React portál. Podporuje navigaci klávesami, vlastní hodnoty\n * a asynchronní filtrování přes `onInputChange`.\n *\n * @example\n * ```tsx\n * <Combobox\n * options={[{ value: 'cz', label: 'Česko' }, { value: 'sk', label: 'Slovensko' }]}\n * value={zeme}\n * onChange={setZeme}\n * placeholder=\"Hledat zemi…\"\n * />\n * ```\n */\nexport const Combobox = React.forwardRef<HTMLInputElement, ComboboxProps>(\n (\n {\n options,\n value,\n onChange,\n onInputChange,\n placeholder = 'Hledat…',\n label,\n error,\n disabled = false,\n loading = false,\n allowCustom = false,\n onCreate,\n renderOption,\n notFoundContent,\n footer,\n size = 'md',\n style,\n className,\n },\n ref\n ) => {\n const theme = useTheme();\n const t = tokens[theme];\n const autoId = useId();\n const inputId = autoId;\n const sc = sizeConfig[size];\n\n const triggerRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const listRef = 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 [inputValue, setInputValue] = useState('');\n const [highlightIndex, setHighlightIndex] = useState(-1);\n const [focused, setFocused] = useState(false);\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 // ── Sync input value with selected value ────────────────────────────\n\n useEffect(() => {\n if (!focused) {\n const selectedOpt = options.find((o) => o.value === value);\n setInputValue(selectedOpt ? (selectedOpt.label ?? selectedOpt.value) : value || '');\n }\n }, [value, options, focused]);\n\n // ── Filtered options ─────────────────────────────────────────────────\n\n const filteredOptions = inputValue\n ? options.filter((o) =>\n (o.label ?? o.value).toLowerCase().includes(inputValue.toLowerCase())\n )\n : options;\n\n // ── Open / close ─────────────────────────────────────────────────────\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 dropdown ────────────────────────────────────────────────\n\n const updatePosition = useCallback(() => {\n if (!triggerRef.current) return;\n const rect = triggerRef.current.getBoundingClientRect();\n const dropdownHeight = dropdownRef.current?.offsetHeight ?? 240;\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 }, []);\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 if (!triggerRef.current?.contains(target) && !dropdownRef.current?.contains(target)) {\n doClose();\n // Reset input to selected value\n const selectedOpt = options.find((o) => o.value === value);\n if (!allowCustom) {\n setInputValue(selectedOpt ? (selectedOpt.label ?? selectedOpt.value) : '');\n }\n }\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [open, doClose, value, options, allowCustom]);\n\n // ── Scroll highlighted 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 // ── Handlers ─────────────────────────────────────────────────────────\n\n const handleInputChangeInternal = (e: React.ChangeEvent<HTMLInputElement>) => {\n const val = e.target.value;\n setInputValue(val);\n onInputChange?.(val);\n setHighlightIndex(0);\n if (!open) doOpen();\n };\n\n const selectOption = useCallback(\n (optValue: string) => {\n onChange(optValue);\n const opt = options.find((o) => o.value === optValue);\n setInputValue(opt ? (opt.label ?? opt.value) : optValue);\n doClose();\n },\n [onChange, options, doClose]\n );\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 e.preventDefault();\n if (open && highlightIndex >= 0 && filteredOptions[highlightIndex]) {\n selectOption(filteredOptions[highlightIndex].value);\n } else if (allowCustom && inputValue) {\n onChange(inputValue);\n onCreate?.(inputValue);\n doClose();\n }\n break;\n case 'Escape':\n doClose();\n break;\n case 'Tab':\n if (open) doClose();\n break;\n }\n };\n\n const handleFocus = () => {\n setFocused(true);\n if (!open && !isDisabled) {\n doOpen();\n }\n };\n\n const handleBlur = () => {\n setFocused(false);\n if (allowCustom && inputValue) {\n onChange(inputValue);\n }\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 // ── 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 : 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 };\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 // ── 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 <div\n ref={listRef}\n role=\"listbox\"\n style={{\n maxHeight: 240,\n overflowY: 'auto',\n padding: '6px',\n }}\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 {allowCustom && inputValue\n ? 'Stiskněte Enter pro potvrzení'\n : (notFoundContent ?? 'Žádné výsledky')}\n </div>\n )}\n\n {filteredOptions.map((opt, idx) => {\n const selected = opt.value === value;\n const highlighted = idx === highlightIndex;\n\n return (\n <div\n key={opt.value}\n role=\"option\"\n aria-selected={selected}\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 : t.text,\n backgroundColor: highlighted\n ? t.optionHover\n : selected\n ? t.optionSelected\n : 'transparent',\n cursor: 'pointer',\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={() => selectOption(opt.value)}\n onMouseEnter={() => setHighlightIndex(idx)}\n onMouseLeave={() => setHighlightIndex(-1)}\n >\n {renderOption ? (\n renderOption(opt, highlighted)\n ) : (\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 </>\n )}\n </div>\n );\n })}\n </div>\n {footer && (\n <div style={{\n borderTop: `1px solid ${t.divider}`,\n padding: '8px 6px',\n }}>\n {footer}\n </div>\n )}\n </div>,\n document.body\n )\n : null;\n\n return (\n <div\n style={{ display: 'inline-flex', flexDirection: 'column', gap: '6px', ...style }}\n className={className}\n >\n {label && (\n <label htmlFor={inputId} style={labelStyle}>\n {label}\n </label>\n )}\n\n <div ref={triggerRef} style={triggerStyle} onClick={() => inputRef.current?.focus()}>\n <span style={{ display: 'flex', alignItems: 'center', flexShrink: 0, color: t.placeholder }}>\n {loading ? <Spinner size={sc.iconSize} color={t.placeholder} /> : <MagnifyingGlassIcon size={sc.iconSize} color={t.placeholder} />}\n </span>\n\n <input\n ref={(node) => {\n (inputRef as React.MutableRefObject<HTMLInputElement | null>).current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLInputElement | null>).current = node;\n }}\n id={inputId}\n type=\"text\"\n value={inputValue}\n onChange={handleInputChangeInternal}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={loading}\n style={nativeStyle}\n />\n\n <span style={{ display: 'flex', alignItems: 'center', flexShrink: 0 }}>\n <CaretDownIcon\n size={sc.iconSize}\n color={t.placeholder}\n style={{\n transition: 'transform 0.2s ease',\n transform: open ? 'rotate(180deg)' : 'rotate(0deg)',\n }}\n />\n </span>\n </div>\n\n {errorMessage && (\n <span style={{ fontFamily: \"'Zalando Sans', sans-serif\", fontSize: '12px', color: t.borderError, lineHeight: 'normal' }}>\n {errorMessage}\n </span>\n )}\n\n {dropdown}\n </div>\n );\n }\n);\n\nCombobox.displayName = 'Combobox';\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 /**\n * Styl tlačítka u button varianty.\n * - `'default'` — neutrální vstupní pole\n * - `'primary'` — oranžové tlačítko jako primární Button\n * @default 'default'\n */\n buttonStyle?: 'default' | 'primary';\n /**\n * Zda zobrazit seznam nahraných souborů pod komponentou.\n * @default true\n */\n showFileList?: boolean;\n /**\n * Text tlačítka u button varianty.\n * Pokud zadáno, zobrazí se vždy tento text místo názvu souboru.\n */\n buttonLabel?: 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 buttonStyle = 'default',\n showFileList = true,\n buttonLabel,\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 ─────────────────────────────────────────────── */\n buttonStyle === 'primary' ? (\n <button\n type=\"button\"\n disabled={disabled}\n onClick={() => !disabled && inputRef.current?.click()}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '8px',\n padding: '8px 16px',\n borderRadius: '8px',\n border: '1px solid transparent',\n backgroundColor: '#FC4F00',\n color: '#ffffff',\n opacity: disabled ? 0.5 : 1,\n cursor: disabled ? 'not-allowed' : 'pointer',\n fontFamily: \"'Zalando Sans Expanded', sans-serif\",\n fontSize: '14px',\n fontWeight: 400,\n lineHeight: 'normal',\n transition: 'background-color 0.15s ease',\n boxSizing: 'border-box',\n outline: 'none',\n maxWidth: '100%',\n }}\n onMouseEnter={(e) => {\n if (!disabled) (e.currentTarget as HTMLElement).style.backgroundColor = '#FF6D2A';\n }}\n onMouseLeave={(e) => {\n (e.currentTarget as HTMLElement).style.backgroundColor = '#FC4F00';\n }}\n >\n <UploadSimpleIcon size={16} color=\"#ffffff\" style={{ flexShrink: 0 }} />\n <span style={{ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {buttonLabel\n ? buttonLabel\n : files.length === 0\n ? 'Nahrát soubor'\n : files.length === 1\n ? files[0].file.name\n : `${files.length} souborů`}\n </span>\n </button>\n ) : (\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 {buttonLabel\n ? buttonLabel\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\n {/* File list */}\n {showFileList && 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, { 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 /** Ikona zobrazená v segmentu. Může být samostatně nebo s label. */\n icon?: React.ReactNode;\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 display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '6px',\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.icon && <span style={{ display: 'inline-flex', alignItems: 'center', flexShrink: 0 }}>{item.icon}</span>}\n {(item.label || (!item.icon && item.value)) && <span>{item.label ?? item.value}</span>}\n </button>\n );\n })}\n </div>\n );\n};\n\nSegmentedControl.displayName = 'SegmentedControl';\n","import React, { useState, useRef, useEffect, useCallback, useId } from 'react';\nimport { createPortal } from 'react-dom';\nimport { Eyedropper as EyedropperIcon } 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 backgroundDisabled: 'rgba(3,3,3,0.4)',\n border: 'rgba(255,255,255,0.3)',\n borderFocus: 'rgba(255,255,255,0.7)',\n text: '#ffffff',\n placeholder: '#ACACAC',\n label: '#ffffff',\n popoverBg: 'rgba(24,24,24,0.95)',\n popoverBorder: 'rgba(255,255,255,0.12)',\n swatchBorder: 'rgba(255,255,255,0.2)',\n swatchHover: 'rgba(255,255,255,0.12)',\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 text: '#1a1a1a',\n placeholder: '#888888',\n label: '#1a1a1a',\n popoverBg: 'rgba(255,255,255,0.95)',\n popoverBorder: 'rgba(0,0,0,0.1)',\n swatchBorder: 'rgba(0,0,0,0.15)',\n swatchHover: 'rgba(0,0,0,0.06)',\n },\n} as const;\n\n// ─── Animation ───────────────────────────────────────────────────────────────\n\nconst ANIM_DURATION = 180;\n\n// ─── Default presets ─────────────────────────────────────────────────────────\n\nconst DEFAULT_PRESETS = [\n '#FC4F00', '#FF6D2A', '#EF3838', '#E8612D',\n '#00A205', '#2196F3', '#9C27B0', '#FF9800',\n '#F44336', '#4CAF50', '#03A9F4', '#E91E63',\n '#FFC107', '#8BC34A', '#00BCD4', '#673AB7',\n '#795548', '#607D8B', '#000000', '#ffffff',\n];\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface ColorPickerProps {\n /** Aktuální barva v hexadecimálním formátu (např. `#FC4F00`). */\n value: string;\n /** Callback volaný při změně barvy. */\n onChange: (color: string) => void;\n /** Přednastavené barvy zobrazené v mřížce. Pokud chybí, použije se výchozí paleta. */\n presets?: string[];\n /** Popisek zobrazený nad komponentou. Stylizován velkými písmeny dle SM-UI design systému. */\n label?: string;\n /** Zakáže celou komponentu. */\n disabled?: boolean;\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// ─── Helpers ─────────────────────────────────────────────────────────────────\n\nconst isValidHex = (hex: string): boolean => /^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$/.test(hex);\n\nconst normalizeHex = (hex: string): string => {\n const clean = hex.replace(/[^0-9A-Fa-f#]/g, '');\n if (clean.startsWith('#')) return clean.slice(0, 7);\n return `#${clean.slice(0, 6)}`;\n};\n\n/** Zjistí, zda barva je světlá (pro kontrast textu). */\nconst isLightColor = (hex: string): boolean => {\n const c = hex.replace('#', '');\n const r = parseInt(c.length === 3 ? c[0] + c[0] : c.slice(0, 2), 16);\n const g = parseInt(c.length === 3 ? c[1] + c[1] : c.slice(2, 4), 16);\n const b = parseInt(c.length === 3 ? c[2] + c[2] : c.slice(4, 6), 16);\n return (r * 299 + g * 587 + b * 114) / 1000 > 150;\n};\n\n// ─── ColorPicker ─────────────────────────────────────────────────────────────\n\n/**\n * Výběr barvy dle SM-UI design systému.\n *\n * Zobrazuje náhled aktuální barvy, hexadecimální vstup\n * a po kliknutí popover s mřížkou přednastavených barev.\n *\n * @example\n * ```tsx\n * <ColorPicker value={color} onChange={setColor} />\n * <ColorPicker value={color} onChange={setColor} presets={['#FF0000', '#00FF00', '#0000FF']} />\n * ```\n */\nexport const ColorPicker: React.FC<ColorPickerProps> = ({\n value,\n onChange,\n presets = DEFAULT_PRESETS,\n label,\n disabled = false,\n style,\n className,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n const autoId = useId();\n const inputId = autoId;\n\n const triggerRef = useRef<HTMLDivElement>(null);\n const popoverRef = 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 [hexInput, setHexInput] = useState(value);\n const [focused, setFocused] = useState(false);\n const [popoverPos, setPopoverPos] = useState<{ top: number; left: number; openAbove: boolean }>({ top: 0, left: 0, openAbove: false });\n\n // ── Sync hex input with value ──────────────────────────────────────\n\n useEffect(() => {\n if (!focused) {\n setHexInput(value);\n }\n }, [value, focused]);\n\n // ── Open / close ───────────────────────────────────────────────────\n\n const doOpen = useCallback(() => {\n if (disabled) return;\n setOpen(true);\n setVisible(true);\n setAnimState('opening');\n requestAnimationFrame(() => {\n requestAnimationFrame(() => setAnimState('open'));\n });\n }, [disabled]);\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 popover ───────────────────────────────────────────────\n\n const updatePosition = useCallback(() => {\n if (!triggerRef.current) return;\n const rect = triggerRef.current.getBoundingClientRect();\n const popoverHeight = 220;\n const spaceBelow = window.innerHeight - rect.bottom - 8;\n const openAbove = spaceBelow < popoverHeight && rect.top > spaceBelow;\n setPopoverPos({\n top: openAbove ? rect.top - 8 : rect.bottom + 8,\n left: rect.left,\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 if (!triggerRef.current?.contains(target) && !popoverRef.current?.contains(target)) {\n doClose();\n }\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [open, doClose]);\n\n // ── Handlers ───────────────────────────────────────────────────────\n\n const handleHexChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const val = normalizeHex(e.target.value);\n setHexInput(val);\n if (isValidHex(val)) {\n onChange(val);\n }\n };\n\n const handleHexBlur = () => {\n setFocused(false);\n if (isValidHex(hexInput)) {\n onChange(hexInput);\n } else {\n setHexInput(value);\n }\n };\n\n const handlePresetClick = (color: string) => {\n onChange(color);\n setHexInput(color);\n doClose();\n };\n\n // ── Animation styles ───────────────────────────────────────────────\n\n const getPopoverAnimStyle = (): React.CSSProperties => {\n const above = popoverPos.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 // ── Styles ─────────────────────────────────────────────────────────\n\n const wrapperStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: '10px',\n backgroundColor: disabled ? t.backgroundDisabled : t.background,\n border: `1px solid ${focused ? t.borderFocus : t.border}`,\n borderRadius: '8px',\n padding: '8px 12px',\n boxSizing: 'border-box',\n transition: 'border-color 0.15s ease',\n opacity: disabled ? 0.6 : 1,\n cursor: disabled ? 'not-allowed' : 'pointer',\n };\n\n const swatchStyle: React.CSSProperties = {\n width: '24px',\n height: '24px',\n borderRadius: '6px',\n backgroundColor: isValidHex(value) ? value : '#cccccc',\n border: `1px solid ${t.swatchBorder}`,\n flexShrink: 0,\n cursor: disabled ? 'not-allowed' : 'pointer',\n transition: 'transform 0.12s ease',\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 // ── Popover ────────────────────────────────────────────────────────\n\n const popover = visible\n ? createPortal(\n <div\n ref={popoverRef}\n style={{\n position: 'fixed',\n ...(popoverPos.openAbove\n ? { bottom: window.innerHeight - popoverPos.top, left: popoverPos.left }\n : { top: popoverPos.top, left: popoverPos.left }),\n backgroundColor: t.popoverBg,\n border: `1px solid ${t.popoverBorder}`,\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 padding: '12px',\n boxSizing: 'border-box',\n transformOrigin: popoverPos.openAbove ? 'bottom left' : 'top left',\n ...getPopoverAnimStyle(),\n }}\n >\n {/* Preset grid */}\n <div style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(5, 1fr)',\n gap: '6px',\n }}>\n {presets.map((color, idx) => (\n <button\n key={`${color}-${idx}`}\n type=\"button\"\n aria-label={`Vybrat barvu ${color}`}\n onClick={() => handlePresetClick(color)}\n style={{\n width: '32px',\n height: '32px',\n borderRadius: '6px',\n backgroundColor: color,\n border: color === value\n ? '2px solid #FC4F00'\n : `1px solid ${t.swatchBorder}`,\n cursor: 'pointer',\n padding: 0,\n transition: 'transform 0.12s ease, border-color 0.12s ease',\n outline: 'none',\n }}\n onMouseEnter={(e) => { (e.currentTarget as HTMLButtonElement).style.transform = 'scale(1.1)'; }}\n onMouseLeave={(e) => { (e.currentTarget as HTMLButtonElement).style.transform = 'scale(1)'; }}\n />\n ))}\n </div>\n </div>,\n document.body\n )\n : null;\n\n return (\n <div\n style={{ display: 'inline-flex', flexDirection: 'column', gap: '6px', ...style }}\n className={className}\n >\n {label && (\n <label htmlFor={inputId} style={labelStyle}>\n {label}\n </label>\n )}\n\n <div ref={triggerRef} style={wrapperStyle}>\n {/* Color swatch */}\n <div\n style={swatchStyle}\n onClick={() => { if (!disabled) open ? doClose() : doOpen(); }}\n />\n\n {/* Hex input */}\n <input\n id={inputId}\n type=\"text\"\n value={hexInput}\n onChange={handleHexChange}\n onFocus={() => setFocused(true)}\n onBlur={handleHexBlur}\n disabled={disabled}\n maxLength={7}\n style={{\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: '16px',\n lineHeight: 'normal',\n color: t.text,\n cursor: disabled ? 'not-allowed' : 'text',\n }}\n />\n\n {/* Eyedropper icon */}\n <span\n style={{ display: 'flex', alignItems: 'center', flexShrink: 0, color: t.placeholder, cursor: disabled ? 'not-allowed' : 'pointer' }}\n onClick={() => { if (!disabled) open ? doClose() : doOpen(); }}\n >\n <EyedropperIcon\n size={16}\n color={isLightColor(value) && theme === 'light' ? t.placeholder : t.placeholder}\n />\n </span>\n </div>\n\n {popover}\n </div>\n );\n};\n\nColorPicker.displayName = 'ColorPicker';\n","import React, { useState, useCallback, useId } from 'react';\nimport { Star as StarIcon } from '@phosphor-icons/react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ───────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n text: '#ffffff',\n label: '#ffffff',\n starFilled: '#FC4F00',\n starEmpty: 'rgba(255,255,255,0.2)',\n starHover: '#FF6D2A',\n },\n light: {\n text: '#1a1a1a',\n label: '#1a1a1a',\n starFilled: '#FC4F00',\n starEmpty: 'rgba(0,0,0,0.15)',\n starHover: '#FF6D2A',\n },\n} as const;\n\n// ─── Size config ─────────────────────────────────────────────────────────────\n\nconst sizeConfig = {\n sm: { starSize: 18, gap: '2px' },\n md: { starSize: 24, gap: '4px' },\n lg: { starSize: 32, gap: '6px' },\n} as const;\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport type RatingSize = 'sm' | 'md' | 'lg';\n\nexport interface RatingProps {\n /** Aktuální hodnota hodnocení (1–max). */\n value: number;\n /** Callback volaný při změně hodnocení. Pokud chybí, komponenta je v režimu pouze pro čtení. */\n onChange?: (value: number) => void;\n /** Maximální počet hvězd. @default 5 */\n max?: number;\n /**\n * Velikostní preset.\n * @default 'md'\n */\n size?: RatingSize;\n /** Přepne komponentu do režimu pouze pro zobrazení. */\n readOnly?: boolean;\n /** Popisek zobrazený nad komponentou. Stylizován velkými písmeny dle SM-UI design systému. */\n label?: string;\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// ─── Rating ──────────────────────────────────────────────────────────────────\n\n/**\n * Hodnocení hvězdičkami dle SM-UI design systému.\n *\n * Podporuje interaktivní výběr s náhledem při najetí myší\n * a režim pouze pro čtení.\n *\n * @example\n * ```tsx\n * <Rating value={rating} onChange={setRating} />\n * <Rating value={3} max={10} readOnly />\n * <Rating value={4} size=\"lg\" label=\"Hodnocení\" />\n * ```\n */\nexport const Rating: React.FC<RatingProps> = ({\n value,\n onChange,\n max = 5,\n size = 'md',\n readOnly = false,\n label,\n style,\n className,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n const autoId = useId();\n const sc = sizeConfig[size];\n const [hoverIndex, setHoverIndex] = useState<number | null>(null);\n\n const isInteractive = !readOnly && !!onChange;\n\n const handleClick = useCallback(\n (index: number) => {\n if (!isInteractive) return;\n onChange!(index + 1);\n },\n [isInteractive, onChange]\n );\n\n const handleMouseEnter = useCallback(\n (index: number) => {\n if (!isInteractive) return;\n setHoverIndex(index);\n },\n [isInteractive]\n );\n\n const handleMouseLeave = useCallback(() => {\n setHoverIndex(null);\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 stars = Array.from({ length: max }, (_, i) => {\n const displayValue = hoverIndex !== null ? hoverIndex + 1 : value;\n const isFilled = i < displayValue;\n const isHovered = hoverIndex !== null && i <= hoverIndex;\n\n return (\n <span\n key={i}\n role={isInteractive ? 'button' : undefined}\n tabIndex={isInteractive ? 0 : undefined}\n aria-label={isInteractive ? `Hodnocení ${i + 1} z ${max}` : undefined}\n onClick={() => handleClick(i)}\n onMouseEnter={() => handleMouseEnter(i)}\n onMouseLeave={handleMouseLeave}\n onKeyDown={(e) => {\n if (isInteractive && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault();\n handleClick(i);\n }\n }}\n style={{\n display: 'inline-flex',\n cursor: isInteractive ? 'pointer' : 'default',\n transition: 'transform 0.12s ease, color 0.12s ease',\n transform: isHovered ? 'scale(1.15)' : 'scale(1)',\n outline: 'none',\n }}\n >\n <StarIcon\n size={sc.starSize}\n weight={isFilled ? 'fill' : 'regular'}\n color={isFilled\n ? (isHovered ? t.starHover : t.starFilled)\n : t.starEmpty\n }\n />\n </span>\n );\n });\n\n return (\n <div\n style={{ display: 'inline-flex', flexDirection: 'column', gap: '6px', ...style }}\n className={className}\n role=\"group\"\n aria-label={label ?? 'Hodnocení'}\n >\n {label && (\n <label htmlFor={autoId} style={labelStyle}>\n {label}\n </label>\n )}\n\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: sc.gap,\n }}\n onMouseLeave={handleMouseLeave}\n >\n {stars}\n </div>\n </div>\n );\n};\n\nRating.displayName = 'Rating';\n","import React, { useState, useRef, useEffect, useCallback, useId } 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 backgroundFilled: 'rgba(3,3,3,0.85)',\n border: 'rgba(255,255,255,0.3)',\n borderFocus: 'rgba(255,255,255,0.7)',\n borderError: '#EF3838',\n borderFilled: 'rgba(255,255,255,0.5)',\n text: '#ffffff',\n label: '#ffffff',\n caret: '#FC4F00',\n },\n light: {\n background: 'rgba(255,255,255,0.85)',\n backgroundDisabled: 'rgba(240,240,240,0.6)',\n backgroundFilled: 'rgba(255,255,255,0.95)',\n border: 'rgba(0,0,0,0.2)',\n borderFocus: 'rgba(0,0,0,0.6)',\n borderError: '#EF3838',\n borderFilled: 'rgba(0,0,0,0.35)',\n text: '#1a1a1a',\n label: '#1a1a1a',\n caret: '#FC4F00',\n },\n} as const;\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface OTPInputProps {\n /** Počet polí (číslic). @default 6 */\n length?: number;\n /** Aktuální hodnota jako řetězec číslic. */\n value: string;\n /** Callback volaný při změně hodnoty. */\n onChange: (value: string) => void;\n /** Při `true` se pole zobrazí jako nevalidní. Při zadání řetězce se zobrazí chybová zpráva. */\n error?: boolean | string;\n /** Zakáže celou komponentu. */\n disabled?: boolean;\n /** Automaticky zaměří první pole při renderování. @default false */\n autoFocus?: boolean;\n /** Popisek zobrazený nad komponentou. Stylizován velkými písmeny dle SM-UI design systému. */\n label?: string;\n /** Vloží oddělovač po každých N polích. Např. `separatorAfter={3}` u 6místného kódu vytvoří skupiny 3-3. */\n separatorAfter?: number;\n /** Obsah oddělovače. @default '-' */\n separator?: 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// ─── OTPInput ────────────────────────────────────────────────────────────────\n\n/**\n * Pole pro zadání jednorázového kódu (OTP) dle SM-UI design systému.\n *\n * Každá číslice má vlastní pole. Automaticky přesouvá fokus\n * na další pole při zadání a na předchozí při smazání.\n * Podporuje vložení celého kódu ze schránky.\n *\n * @example\n * ```tsx\n * <OTPInput value={otp} onChange={setOtp} autoFocus />\n * <OTPInput value={otp} onChange={setOtp} length={4} error=\"Neplatný kód\" />\n * ```\n */\nexport const OTPInput: React.FC<OTPInputProps> = ({\n length = 6,\n value,\n onChange,\n error,\n disabled = false,\n autoFocus = false,\n label,\n separatorAfter,\n separator = '-',\n style,\n className,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n const autoId = useId();\n\n const inputsRef = useRef<(HTMLInputElement | null)[]>([]);\n const [focusedIndex, setFocusedIndex] = useState<number | null>(null);\n\n const hasError = Boolean(error);\n const errorMessage = typeof error === 'string' ? error : undefined;\n\n // ── Pad value to length ────────────────────────────────────────────\n\n const digits = value.padEnd(length, '').slice(0, length).split('');\n\n // ── Auto-focus first input ─────────────────────────────────────────\n\n useEffect(() => {\n if (autoFocus && inputsRef.current[0]) {\n inputsRef.current[0].focus();\n }\n }, [autoFocus]);\n\n // ── Handlers ───────────────────────────────────────────────────────\n\n const focusInput = useCallback((index: number) => {\n if (index >= 0 && index < length) {\n inputsRef.current[index]?.focus();\n }\n }, [length]);\n\n const updateValue = useCallback(\n (newDigits: string[]) => {\n const newValue = newDigits.join('').replace(/[^0-9]/g, '');\n onChange(newValue);\n },\n [onChange]\n );\n\n const handleInput = useCallback(\n (index: number, char: string) => {\n if (!/^[0-9]$/.test(char)) return;\n\n const newDigits = [...digits];\n newDigits[index] = char;\n updateValue(newDigits);\n\n // Auto-focus next\n if (index < length - 1) {\n focusInput(index + 1);\n }\n },\n [digits, length, updateValue, focusInput]\n );\n\n const handleKeyDown = useCallback(\n (index: number, e: React.KeyboardEvent<HTMLInputElement>) => {\n switch (e.key) {\n case 'Backspace':\n e.preventDefault();\n if (digits[index]) {\n // Clear current\n const newDigits = [...digits];\n newDigits[index] = '';\n updateValue(newDigits);\n } else if (index > 0) {\n // Move to previous and clear\n const newDigits = [...digits];\n newDigits[index - 1] = '';\n updateValue(newDigits);\n focusInput(index - 1);\n }\n break;\n case 'Delete':\n e.preventDefault();\n {\n const newDigits = [...digits];\n newDigits[index] = '';\n updateValue(newDigits);\n }\n break;\n case 'ArrowLeft':\n e.preventDefault();\n if (index > 0) focusInput(index - 1);\n break;\n case 'ArrowRight':\n e.preventDefault();\n if (index < length - 1) focusInput(index + 1);\n break;\n }\n },\n [digits, length, updateValue, focusInput]\n );\n\n const handleChange = useCallback(\n (index: number, e: React.ChangeEvent<HTMLInputElement>) => {\n const inputVal = e.target.value;\n // Take the last character typed (handles overwrite)\n const char = inputVal.slice(-1);\n if (char && /^[0-9]$/.test(char)) {\n handleInput(index, char);\n }\n },\n [handleInput]\n );\n\n const handlePaste = useCallback(\n (e: React.ClipboardEvent) => {\n e.preventDefault();\n const pasted = e.clipboardData.getData('text').replace(/[^0-9]/g, '').slice(0, length);\n if (!pasted) return;\n\n const newDigits = [...digits];\n for (let i = 0; i < pasted.length; i++) {\n newDigits[i] = pasted[i];\n }\n updateValue(newDigits);\n\n // Focus the next empty or last field\n const nextIndex = Math.min(pasted.length, length - 1);\n focusInput(nextIndex);\n },\n [digits, length, updateValue, focusInput]\n );\n\n const handleFocus = useCallback((index: number) => {\n setFocusedIndex(index);\n // Select content on focus\n inputsRef.current[index]?.select();\n }, []);\n\n const handleBlur = useCallback(() => {\n setFocusedIndex(null);\n }, []);\n\n // ── Styles ─────────────────────────────────────────────────────────\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 getBoxStyle = (index: number): React.CSSProperties => {\n const isFocused = focusedIndex === index;\n const hasDig = !!digits[index];\n\n return {\n width: '44px',\n height: '52px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontStyle: 'normal',\n fontWeight: 500,\n fontSize: '20px',\n lineHeight: 'normal',\n color: t.text,\n textAlign: 'center',\n backgroundColor: disabled\n ? t.backgroundDisabled\n : hasDig\n ? t.backgroundFilled\n : t.background,\n border: `1px solid ${\n hasError\n ? t.borderError\n : isFocused\n ? t.borderFocus\n : hasDig\n ? t.borderFilled\n : t.border\n }`,\n borderRadius: '8px',\n outline: 'none',\n boxSizing: 'border-box',\n transition: 'border-color 0.15s ease, background-color 0.15s ease',\n opacity: disabled ? 0.6 : 1,\n cursor: disabled ? 'not-allowed' : 'text',\n caretColor: t.caret,\n };\n };\n\n return (\n <div\n style={{ display: 'inline-flex', flexDirection: 'column', gap: '6px', ...style }}\n className={className}\n >\n {label && (\n <label htmlFor={`${autoId}-0`} style={labelStyle}>\n {label}\n </label>\n )}\n\n <div style={{ display: 'flex', gap: '8px', alignItems: 'center' }} onPaste={handlePaste}>\n {Array.from({ length }, (_, i) => (\n <React.Fragment key={i}>\n {separatorAfter && i > 0 && i % separatorAfter === 0 && (\n <span\n style={{\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '20px',\n fontWeight: 500,\n color: t.text,\n userSelect: 'none',\n lineHeight: 'normal',\n opacity: disabled ? 0.6 : 0.5,\n padding: '0 2px',\n }}\n >\n {separator}\n </span>\n )}\n <input\n ref={(el) => { inputsRef.current[i] = el; }}\n id={`${autoId}-${i}`}\n type=\"text\"\n inputMode=\"numeric\"\n autoComplete=\"one-time-code\"\n maxLength={2}\n value={digits[i] || ''}\n onChange={(e) => handleChange(i, e)}\n onKeyDown={(e) => handleKeyDown(i, e)}\n onFocus={() => handleFocus(i)}\n onBlur={handleBlur}\n disabled={disabled}\n aria-label={`Číslice ${i + 1} z ${length}`}\n style={getBoxStyle(i)}\n />\n </React.Fragment>\n ))}\n </div>\n\n {errorMessage && (\n <span style={{ fontFamily: \"'Zalando Sans', sans-serif\", fontSize: '12px', color: t.borderError, lineHeight: 'normal' }}>\n {errorMessage}\n </span>\n )}\n </div>\n );\n};\n\nOTPInput.displayName = 'OTPInput';\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, { useState, useCallback, useMemo } from '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 textMuted: '#888888',\n rowHover: 'rgba(255,255,255,0.04)',\n selectedRowBg: 'rgba(252,79,0,0.06)',\n checkboxBorder: 'rgba(255,255,255,0.3)',\n checkboxCheckedBg: '#FC4F00',\n checkboxCheckedBorder: '#FC4F00',\n checkboxCheck: '#ffffff',\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 textMuted: '#999999',\n rowHover: 'rgba(0,0,0,0.03)',\n selectedRowBg: 'rgba(252,79,0,0.04)',\n checkboxBorder: 'rgba(0,0,0,0.25)',\n checkboxCheckedBg: '#FC4F00',\n checkboxCheckedBorder: '#FC4F00',\n checkboxCheck: '#ffffff',\n },\n} as const;\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\n/** Definice sloupce pro DataGrid. */\nexport interface DataGridColumn {\n /** Klíč odpovídající hodnotě v datovém objektu. */\n key: string;\n /** Text záhlaví sloupce. */\n header: string;\n /** Šířka sloupce (CSS hodnota). */\n width?: string | number;\n /** Minimální šířka sloupce v pixelech. */\n minWidth?: number;\n /** Zarovnání obsahu. @default 'left' */\n align?: 'left' | 'center' | 'right';\n /** Povolí řazení podle tohoto sloupce. @default false */\n sortable?: boolean;\n /** Povolí editaci buňky (placeholder pro budoucí implementaci). @default false */\n editable?: boolean;\n /** Vlastní vykreslovací funkce pro buňku. */\n render?: (value: any, row: any, index: number) => React.ReactNode;\n}\n\nexport interface DataGridProps {\n /** Definice sloupců. */\n columns: DataGridColumn[];\n /** Data k zobrazení — pole objektů. */\n data: any[];\n /** Povolí výběr řádků pomocí zaškrtávacích políček. @default false */\n selectable?: boolean;\n /** Callback při změně výběru řádků. */\n onSelectionChange?: (ids: string[]) => void;\n /** Při `true` se zobrazí skeleton řádky. @default false */\n loading?: boolean;\n /** Klíč pro identifikaci řádků. @default 'id' */\n rowKey?: string;\n /** Callback při kliknutí na řádek. */\n onRowClick?: (row: any) => void;\n /** Fixní záhlaví při scrollování. @default false */\n stickyHeader?: boolean;\n /** Text zobrazený při prázdných datech. @default 'Žádná data' */\n emptyText?: string;\n /** Další inline styly. */\n style?: React.CSSProperties;\n /** Dodatečná CSS třída. */\n className?: string;\n}\n\n// ─── Checkbox ───────────────────────────────────────────────────────────────\n\ninterface InternalCheckboxProps {\n checked: boolean;\n indeterminate?: boolean;\n onChange: () => void;\n t: (typeof tokens)['dark'] | (typeof tokens)['light'];\n}\n\nconst InternalCheckbox: React.FC<InternalCheckboxProps> = ({\n checked,\n indeterminate,\n onChange,\n t,\n}) => {\n const isActive = checked || indeterminate;\n\n return (\n <span\n role=\"checkbox\"\n aria-checked={indeterminate ? 'mixed' : checked}\n tabIndex={0}\n onClick={(e) => {\n e.stopPropagation();\n onChange();\n }}\n onKeyDown={(e) => {\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault();\n onChange();\n }\n }}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '16px',\n height: '16px',\n borderRadius: '4px',\n border: `1.5px solid ${isActive ? t.checkboxCheckedBorder : t.checkboxBorder}`,\n backgroundColor: isActive ? t.checkboxCheckedBg : 'transparent',\n cursor: 'pointer',\n flexShrink: 0,\n transition: 'all 0.12s ease',\n }}\n >\n {checked && (\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\">\n <path\n d=\"M2 5L4.2 7.5L8 2.5\"\n stroke={t.checkboxCheck}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n {indeterminate && !checked && (\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\">\n <line\n x1=\"2\"\n y1=\"5\"\n x2=\"8\"\n y2=\"5\"\n stroke={t.checkboxCheck}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n )}\n </span>\n );\n};\n\n// ─── DataGrid ───────────────────────────────────────────────────────────────\n\n/**\n * Pokročilá datová mřížka s výběrem řádků, sticky záhlavím a loading stavem.\n *\n * Rozšiřuje vzor Table o zaškrtávací políčka pro výběr,\n * klikání na řádky a skeleton placeholder při načítání.\n *\n * @example\n * ```tsx\n * <DataGrid\n * columns={[\n * { key: 'name', header: 'Jméno', minWidth: 200 },\n * { key: 'email', header: 'E-mail' },\n * { key: 'role', header: 'Role', align: 'center' },\n * ]}\n * data={users}\n * selectable\n * stickyHeader\n * onSelectionChange={(ids) => console.log(ids)}\n * onRowClick={(row) => console.log(row)}\n * />\n * ```\n */\nexport const DataGrid: React.FC<DataGridProps> = ({\n columns,\n data,\n selectable = false,\n onSelectionChange,\n loading = false,\n rowKey = 'id',\n onRowClick,\n stickyHeader = false,\n emptyText = 'Žádná data',\n style,\n className,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n\n const [selectedIds, setSelectedIds] = useState<Set<string>>(new Set());\n const [hoveredRow, setHoveredRow] = useState<string | null>(null);\n\n const allIds = useMemo(() => data.map((row) => String(row[rowKey])), [data, rowKey]);\n\n const allSelected = allIds.length > 0 && allIds.every((id) => selectedIds.has(id));\n const someSelected = allIds.some((id) => selectedIds.has(id)) && !allSelected;\n\n const toggleAll = useCallback(() => {\n const next = allSelected ? new Set<string>() : new Set(allIds);\n setSelectedIds(next);\n onSelectionChange?.(Array.from(next));\n }, [allSelected, allIds, onSelectionChange]);\n\n const toggleRow = useCallback(\n (id: string) => {\n setSelectedIds((prev) => {\n const next = new Set(prev);\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n onSelectionChange?.(Array.from(next));\n return next;\n });\n },\n [onSelectionChange],\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 };\n\n const thStyle = (col: DataGridColumn): React.CSSProperties => ({\n padding: '12px 16px',\n textAlign: col.align || '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 userSelect: 'none',\n width: col.width != null ? (typeof col.width === 'number' ? `${col.width}px` : col.width) : undefined,\n minWidth: col.minWidth != null ? `${col.minWidth}px` : undefined,\n ...(stickyHeader\n ? {\n position: 'sticky' as const,\n top: 0,\n zIndex: 2,\n backdropFilter: 'blur(20px)',\n WebkitBackdropFilter: 'blur(20px)',\n }\n : {}),\n });\n\n const tdStyle = (col: DataGridColumn): React.CSSProperties => ({\n padding: '10px 16px',\n borderBottom: `1px solid ${t.border}`,\n lineHeight: 'normal',\n textAlign: col.align || 'left',\n });\n\n const checkboxThStyle: React.CSSProperties = {\n padding: '12px 12px 12px 16px',\n backgroundColor: t.headerBg,\n borderBottom: `1px solid ${t.border}`,\n width: '40px',\n ...(stickyHeader\n ? {\n position: 'sticky' as const,\n top: 0,\n zIndex: 2,\n backdropFilter: 'blur(20px)',\n WebkitBackdropFilter: 'blur(20px)',\n }\n : {}),\n };\n\n const checkboxTdStyle: React.CSSProperties = {\n padding: '10px 12px 10px 16px',\n borderBottom: `1px solid ${t.border}`,\n width: '40px',\n };\n\n const skeletonRows = 5;\n\n return (\n <div\n className={className}\n style={{\n overflow: stickyHeader ? 'auto' : 'hidden',\n borderRadius: '12px',\n border: `1px solid ${t.border}`,\n ...style,\n }}\n >\n <table style={tableStyle}>\n <thead>\n <tr>\n {selectable && (\n <th style={checkboxThStyle}>\n <InternalCheckbox\n checked={allSelected}\n indeterminate={someSelected}\n onChange={toggleAll}\n t={t}\n />\n </th>\n )}\n {columns.map((col) => (\n <th key={col.key} style={thStyle(col)}>\n {col.header}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {loading\n ? Array.from({ length: skeletonRows }).map((_, rowIdx) => (\n <tr key={`skel-${rowIdx}`}>\n {selectable && (\n <td style={checkboxTdStyle}>\n <Skeleton variant=\"rect\" width={16} height={16} />\n </td>\n )}\n {columns.map((col) => (\n <td key={col.key} style={tdStyle(col)}>\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 + (selectable ? 1 : 0)}\n style={{\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 const id = String(row[rowKey]);\n const isSelected = selectedIds.has(id);\n const isHovered = hoveredRow === id;\n const isLastRow = rowIdx === data.length - 1;\n\n let rowBg = 'transparent';\n if (isSelected) rowBg = t.selectedRowBg;\n else if (isHovered) rowBg = t.rowHover;\n\n return (\n <tr\n key={id}\n style={{\n backgroundColor: rowBg,\n cursor: onRowClick ? 'pointer' : 'default',\n transition: 'background-color 0.12s ease',\n }}\n onMouseEnter={() => setHoveredRow(id)}\n onMouseLeave={() => setHoveredRow(null)}\n onClick={() => onRowClick?.(row)}\n >\n {selectable && (\n <td\n style={{\n ...checkboxTdStyle,\n borderBottom: isLastRow ? 'none' : checkboxTdStyle.borderBottom,\n }}\n >\n <InternalCheckbox\n checked={isSelected}\n onChange={() => toggleRow(id)}\n t={t}\n />\n </td>\n )}\n {columns.map((col) => (\n <td\n key={col.key}\n style={{\n ...tdStyle(col),\n borderBottom: isLastRow ? 'none' : tdStyle(col).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 })}\n </tbody>\n </table>\n </div>\n );\n};\n\nDataGrid.displayName = 'DataGrid';\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, useMemo, useCallback } from 'react';\nimport { CaretLeftIcon, CaretRightIcon } 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 surface: 'rgba(24,24,24,0.95)',\n border: 'rgba(255,255,255,0.08)',\n text: '#ffffff',\n textSecondary: '#ACACAC',\n textMuted: '#888888',\n hover: 'rgba(255,255,255,0.06)',\n todayBg: 'rgba(252,79,0,0.12)',\n todayBorder: '#FC4F00',\n selectedBg: '#FC4F00',\n selectedText: '#ffffff',\n headerBg: 'rgba(255,255,255,0.04)',\n outsideText: 'rgba(255,255,255,0.2)',\n eventDot: '#FC4F00',\n navHover: 'rgba(255,255,255,0.08)',\n },\n light: {\n background: 'rgba(255,255,255,0.85)',\n surface: 'rgba(255,255,255,0.95)',\n border: 'rgba(0,0,0,0.08)',\n text: '#1a1a1a',\n textSecondary: '#888888',\n textMuted: '#999999',\n hover: 'rgba(0,0,0,0.04)',\n todayBg: 'rgba(252,79,0,0.08)',\n todayBorder: '#FC4F00',\n selectedBg: '#FC4F00',\n selectedText: '#ffffff',\n headerBg: 'rgba(0,0,0,0.02)',\n outsideText: 'rgba(0,0,0,0.2)',\n eventDot: '#FC4F00',\n navHover: 'rgba(0,0,0,0.06)',\n },\n} as const;\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\n/** Událost zobrazená v kalendáři. */\nexport interface CalendarEvent {\n /** Datum události. */\n date: Date;\n /** Název události. */\n title: string;\n /** Barva tečky/indikátoru. @default '#FC4F00' */\n color?: string;\n}\n\nexport interface CalendarProps {\n /** Aktuálně vybraný datum. */\n value?: Date | null;\n /** Callback při výběru data. */\n onChange?: (date: Date) => void;\n /** Režim zobrazení. @default 'month' */\n view?: 'month' | 'week';\n /** Události k zobrazení (vizuální indikátory — barevné tečky). */\n events?: CalendarEvent[];\n /** Minimální povolený datum. */\n minDate?: Date;\n /** Maximální povolený datum. */\n maxDate?: Date;\n /** Další inline styly. */\n style?: React.CSSProperties;\n /** Dodatečná CSS třída. */\n className?: string;\n}\n\n// ─── Helpers ────────────────────────────────────────────────────────────────\n\nconst DAY_LABELS = ['Po', 'Út', 'St', 'Čt', 'Pá', 'So', 'Ne'];\nconst MONTH_LABELS = [\n 'Leden', 'Únor', 'Březen', 'Duben', 'Květen', 'Červen',\n 'Červenec', 'Srpen', 'Září', 'Říjen', 'Listopad', 'Prosinec',\n];\n\nconst isSameDay = (a: Date, b: Date) =>\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate();\n\nconst startOfWeek = (date: Date): Date => {\n const d = new Date(date);\n const day = d.getDay();\n const diff = (day === 0 ? -6 : 1) - day; // Monday-first\n d.setDate(d.getDate() + diff);\n d.setHours(0, 0, 0, 0);\n return d;\n};\n\nconst getMonthGrid = (year: number, month: number): Date[] => {\n const firstDay = new Date(year, month, 1);\n const start = startOfWeek(firstDay);\n const days: Date[] = [];\n const current = new Date(start);\n // always generate 42 cells (6 rows)\n for (let i = 0; i < 42; i++) {\n days.push(new Date(current));\n current.setDate(current.getDate() + 1);\n }\n return days;\n};\n\nconst getWeekGrid = (date: Date): Date[] => {\n const start = startOfWeek(date);\n const days: Date[] = [];\n for (let i = 0; i < 7; i++) {\n const d = new Date(start);\n d.setDate(start.getDate() + i);\n days.push(d);\n }\n return days;\n};\n\nconst isDateDisabled = (date: Date, minDate?: Date, maxDate?: Date): boolean => {\n if (minDate) {\n const min = new Date(minDate);\n min.setHours(0, 0, 0, 0);\n if (date < min) return true;\n }\n if (maxDate) {\n const max = new Date(maxDate);\n max.setHours(23, 59, 59, 999);\n if (date > max) return true;\n }\n return false;\n};\n\n// ─── Calendar ───────────────────────────────────────────────────────────────\n\n/**\n * Kalendářní komponenta s měsíčním a týdenním zobrazením.\n *\n * Podporuje výběr data, zobrazení událostí (barevné tečky),\n * navigaci mezi měsíci/týdny a omezení rozsahu dat.\n *\n * @example\n * ```tsx\n * <Calendar\n * value={selectedDate}\n * onChange={setSelectedDate}\n * events={[{ date: new Date(), title: 'Meeting', color: '#00A205' }]}\n * />\n * ```\n */\nexport const Calendar: React.FC<CalendarProps> = ({\n value,\n onChange,\n view = 'month',\n events = [],\n minDate,\n maxDate,\n style,\n className,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n const today = useMemo(() => {\n const d = new Date();\n d.setHours(0, 0, 0, 0);\n return d;\n }, []);\n\n const [currentMonth, setCurrentMonth] = useState(() => value ? value.getMonth() : today.getMonth());\n const [currentYear, setCurrentYear] = useState(() => value ? value.getFullYear() : today.getFullYear());\n const [currentWeekStart, setCurrentWeekStart] = useState(() => startOfWeek(value || today));\n const [hoveredDay, setHoveredDay] = useState<string | null>(null);\n\n const days = useMemo(() => {\n if (view === 'week') return getWeekGrid(currentWeekStart);\n return getMonthGrid(currentYear, currentMonth);\n }, [view, currentYear, currentMonth, currentWeekStart]);\n\n const navigatePrev = useCallback(() => {\n if (view === 'week') {\n setCurrentWeekStart((prev) => {\n const d = new Date(prev);\n d.setDate(d.getDate() - 7);\n return d;\n });\n } else {\n setCurrentMonth((prev) => {\n if (prev === 0) {\n setCurrentYear((y) => y - 1);\n return 11;\n }\n return prev - 1;\n });\n }\n }, [view]);\n\n const navigateNext = useCallback(() => {\n if (view === 'week') {\n setCurrentWeekStart((prev) => {\n const d = new Date(prev);\n d.setDate(d.getDate() + 7);\n return d;\n });\n } else {\n setCurrentMonth((prev) => {\n if (prev === 11) {\n setCurrentYear((y) => y + 1);\n return 0;\n }\n return prev + 1;\n });\n }\n }, [view]);\n\n const getEventsForDay = (date: Date) =>\n events.filter((ev) => isSameDay(ev.date, date));\n\n const headerLabel = view === 'week'\n ? (() => {\n const end = new Date(currentWeekStart);\n end.setDate(end.getDate() + 6);\n const sameMonth = currentWeekStart.getMonth() === end.getMonth();\n if (sameMonth) {\n return `${currentWeekStart.getDate()}. – ${end.getDate()}. ${MONTH_LABELS[end.getMonth()]} ${end.getFullYear()}`;\n }\n return `${currentWeekStart.getDate()}. ${MONTH_LABELS[currentWeekStart.getMonth()].slice(0, 3)} – ${end.getDate()}. ${MONTH_LABELS[end.getMonth()].slice(0, 3)} ${end.getFullYear()}`;\n })()\n : `${MONTH_LABELS[currentMonth]} ${currentYear}`;\n\n const containerStyle: React.CSSProperties = {\n backgroundColor: t.background,\n border: `1px solid ${t.border}`,\n borderRadius: '12px',\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '14px',\n color: t.text,\n overflow: 'hidden',\n userSelect: 'none',\n ...style,\n };\n\n const navBtnStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '32px',\n height: '32px',\n border: 'none',\n borderRadius: '8px',\n background: 'transparent',\n color: t.text,\n cursor: 'pointer',\n transition: 'background-color 0.12s ease',\n };\n\n return (\n <div className={className} style={containerStyle}>\n {/* Header */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '12px 16px',\n backgroundColor: t.headerBg,\n borderBottom: `1px solid ${t.border}`,\n }}\n >\n <button\n style={navBtnStyle}\n onClick={navigatePrev}\n onMouseEnter={(e) => { (e.currentTarget as HTMLElement).style.backgroundColor = t.navHover; }}\n onMouseLeave={(e) => { (e.currentTarget as HTMLElement).style.backgroundColor = 'transparent'; }}\n aria-label=\"Předchozí\"\n >\n <CaretLeftIcon size={16} />\n </button>\n <span\n style={{\n fontFamily: \"'Zalando Sans Expanded', sans-serif\",\n fontWeight: 600,\n fontSize: '14px',\n }}\n >\n {headerLabel}\n </span>\n <button\n style={navBtnStyle}\n onClick={navigateNext}\n onMouseEnter={(e) => { (e.currentTarget as HTMLElement).style.backgroundColor = t.navHover; }}\n onMouseLeave={(e) => { (e.currentTarget as HTMLElement).style.backgroundColor = 'transparent'; }}\n aria-label=\"Další\"\n >\n <CaretRightIcon size={16} />\n </button>\n </div>\n\n {/* Day labels */}\n <div style={{ display: 'grid', gridTemplateColumns: 'repeat(7, 1fr)', gap: '0', padding: '8px 12px 0' }}>\n {DAY_LABELS.map((label) => (\n <div\n key={label}\n style={{\n textAlign: 'center',\n fontFamily: \"'Zalando Sans Expanded', sans-serif\",\n fontSize: '10px',\n fontWeight: 400,\n textTransform: 'uppercase',\n letterSpacing: '0.06em',\n color: t.textMuted,\n padding: '6px 0 8px',\n }}\n >\n {label}\n </div>\n ))}\n </div>\n\n {/* Days grid */}\n <div style={{ display: 'grid', gridTemplateColumns: 'repeat(7, 1fr)', gap: '2px', padding: '0 12px 12px' }}>\n {days.map((day, idx) => {\n const isToday = isSameDay(day, today);\n const isSelected = value ? isSameDay(day, value) : false;\n const isOutside = view === 'month' && day.getMonth() !== currentMonth;\n const disabled = isDateDisabled(day, minDate, maxDate);\n const dayKey = day.toISOString();\n const isHovered = hoveredDay === dayKey;\n const dayEvents = getEventsForDay(day);\n\n let cellBg: string = 'transparent';\n let cellColor: string = isOutside ? t.outsideText : t.text;\n let cellBorder: string = '2px solid transparent';\n\n if (isSelected) {\n cellBg = t.selectedBg;\n cellColor = t.selectedText;\n } else if (isToday) {\n cellBg = t.todayBg;\n cellBorder = `2px solid ${t.todayBorder}`;\n } else if (isHovered && !disabled) {\n cellBg = t.hover;\n }\n\n if (disabled) {\n cellColor = t.textMuted;\n }\n\n return (\n <div\n key={idx}\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '1px',\n minHeight: '44px',\n }}\n >\n <button\n style={{\n width: '36px',\n height: '36px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '8px',\n border: cellBorder,\n background: cellBg,\n color: cellColor,\n fontSize: '13px',\n fontWeight: isToday ? 600 : 400,\n fontFamily: \"'Zalando Sans', sans-serif\",\n cursor: disabled ? 'default' : 'pointer',\n opacity: disabled ? 0.4 : 1,\n transition: 'background-color 0.12s ease',\n }}\n disabled={disabled}\n onClick={() => {\n if (!disabled && onChange) onChange(day);\n }}\n onMouseEnter={() => !disabled && setHoveredDay(dayKey)}\n onMouseLeave={() => setHoveredDay(null)}\n >\n {day.getDate()}\n </button>\n {/* Event dots — visual indicators only */}\n {dayEvents.length > 0 && (\n <div style={{ display: 'flex', gap: '3px', marginTop: '3px', height: '5px' }}>\n {dayEvents.slice(0, 3).map((ev, evIdx) => (\n <div\n key={evIdx}\n title={ev.title}\n style={{\n width: '5px',\n height: '5px',\n borderRadius: '50%',\n backgroundColor: ev.color || t.eventDot,\n }}\n />\n ))}\n </div>\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n};\n\nCalendar.displayName = 'Calendar';\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 textMuted: '#888888',\n line: 'rgba(255,255,255,0.1)',\n dotBorder: '#FC4F00',\n dotBg: 'rgba(252,79,0,0.15)',\n iconBg: 'rgba(252,79,0,0.12)',\n cardBg: 'rgba(255,255,255,0.04)',\n cardBorder: 'rgba(255,255,255,0.08)',\n },\n light: {\n text: '#1a1a1a',\n textSecondary: '#333333',\n textMuted: '#999999',\n line: 'rgba(0,0,0,0.08)',\n dotBorder: '#FC4F00',\n dotBg: 'rgba(252,79,0,0.08)',\n iconBg: 'rgba(252,79,0,0.06)',\n cardBg: 'rgba(0,0,0,0.02)',\n cardBorder: 'rgba(0,0,0,0.06)',\n },\n} as const;\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\n/** Položka časové osy. */\nexport interface TimelineItem {\n /** Nadpis události. */\n title: string;\n /** Volitelný popis události. */\n description?: string;\n /** Volitelný datum / časový údaj. */\n date?: string;\n /** Vlastní ikona místo výchozí tečky. */\n icon?: React.ReactNode;\n /** Barva tečky nebo pozadí ikony. @default '#FC4F00' */\n color?: string;\n}\n\nexport interface TimelineProps {\n /** Položky časové osy. */\n items: TimelineItem[];\n /** Orientace časové osy. @default 'vertical' */\n orientation?: 'vertical' | 'horizontal';\n /** Další inline styly. */\n style?: React.CSSProperties;\n /** Dodatečná CSS třída. */\n className?: string;\n}\n\n// ─── Timeline ───────────────────────────────────────────────────────────────\n\n/**\n * Časová osa s tečkami nebo ikonami.\n *\n * Podporuje vertikální i horizontální orientaci.\n * Každá položka zobrazuje nadpis, volitelný popis a datum.\n * Ikona nebo barevná tečka je propojená čárou.\n *\n * @example\n * ```tsx\n * <Timeline\n * items={[\n * { title: 'Odesláno', date: '10:00', description: 'Objednávka byla vytvořena.' },\n * { title: 'Doručeno', date: '14:30', color: '#00A205' },\n * ]}\n * />\n * ```\n */\nexport const Timeline: React.FC<TimelineProps> = ({ items, orientation = 'vertical', style, className }) => {\n const theme = useTheme();\n const t = tokens[theme];\n\n if (orientation === 'horizontal') {\n return (\n <div\n className={className}\n style={{\n display: 'flex',\n alignItems: 'flex-start',\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '14px',\n color: t.text,\n overflow: 'auto',\n ...style,\n }}\n >\n {items.map((item, idx) => {\n const isLast = idx === items.length - 1;\n const dotColor = item.color || t.dotBorder;\n\n return (\n <div\n key={idx}\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n flex: isLast ? '0 0 auto' : '1 1 0',\n minWidth: '120px',\n position: 'relative',\n }}\n >\n {/* Top row: dot/icon + horizontal line */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n position: 'relative',\n }}\n >\n {/* Line before dot */}\n {idx > 0 && (\n <div\n style={{\n flex: 1,\n height: '2px',\n backgroundColor: t.line,\n }}\n />\n )}\n {idx === 0 && <div style={{ flex: 1 }} />}\n\n {/* Dot or icon */}\n {item.icon ? (\n <div\n style={{\n width: '32px',\n height: '32px',\n borderRadius: '50%',\n backgroundColor: item.color ? `${item.color}18` : t.iconBg,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: dotColor,\n flexShrink: 0,\n }}\n >\n {item.icon}\n </div>\n ) : (\n <div\n style={{\n width: '12px',\n height: '12px',\n borderRadius: '50%',\n border: `2px solid ${dotColor}`,\n backgroundColor: t.dotBg,\n flexShrink: 0,\n }}\n />\n )}\n\n {/* Line after dot */}\n {!isLast && (\n <div\n style={{\n flex: 1,\n height: '2px',\n backgroundColor: t.line,\n }}\n />\n )}\n {isLast && <div style={{ flex: 1 }} />}\n </div>\n\n {/* Content below */}\n <div\n style={{\n textAlign: 'center',\n paddingTop: '10px',\n maxWidth: '140px',\n }}\n >\n <span\n style={{\n fontFamily: \"'Zalando Sans Expanded', sans-serif\",\n fontWeight: 600,\n fontSize: '13px',\n lineHeight: '18px',\n display: 'block',\n }}\n >\n {item.title}\n </span>\n {item.date && (\n <span\n style={{\n fontSize: '11px',\n color: t.textMuted,\n display: 'block',\n marginTop: '2px',\n }}\n >\n {item.date}\n </span>\n )}\n {item.description && (\n <p\n style={{\n margin: '4px 0 0',\n fontSize: '12px',\n color: t.textSecondary,\n lineHeight: '16px',\n }}\n >\n {item.description}\n </p>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n }\n\n // Vertical orientation (default)\n return (\n <div\n className={className}\n style={{\n position: 'relative',\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '14px',\n color: t.text,\n ...style,\n }}\n >\n {items.map((item, idx) => {\n const isLast = idx === items.length - 1;\n const dotColor = item.color || t.dotBorder;\n\n return (\n <div\n key={idx}\n style={{\n display: 'flex',\n position: 'relative',\n paddingBottom: isLast ? 0 : '4px',\n minHeight: item.icon ? '36px' : '28px',\n }}\n >\n {/* Left column: dot/icon + line */}\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n flexShrink: 0,\n width: '32px',\n marginRight: '14px',\n }}\n >\n {/* Dot or icon */}\n {item.icon ? (\n <div\n style={{\n width: '32px',\n height: '32px',\n borderRadius: '50%',\n backgroundColor: item.color\n ? `${item.color}18`\n : t.iconBg,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: dotColor,\n flexShrink: 0,\n }}\n >\n {item.icon}\n </div>\n ) : (\n <div\n style={{\n width: '12px',\n height: '12px',\n borderRadius: '50%',\n border: `2px solid ${dotColor}`,\n backgroundColor: t.dotBg,\n flexShrink: 0,\n marginTop: '4px',\n }}\n />\n )}\n\n {/* Vertical line */}\n {!isLast && (\n <div\n style={{\n width: '2px',\n flex: 1,\n backgroundColor: t.line,\n marginTop: '4px',\n minHeight: '8px',\n }}\n />\n )}\n </div>\n\n {/* Right column: content */}\n <div style={{ flex: 1, minWidth: 0, paddingTop: item.icon ? '5px' : 0 }}>\n <div style={{ display: 'flex', alignItems: 'baseline', gap: '8px' }}>\n <span\n style={{\n fontFamily: \"'Zalando Sans Expanded', sans-serif\",\n fontWeight: 600,\n fontSize: '14px',\n lineHeight: '20px',\n }}\n >\n {item.title}\n </span>\n {item.date && (\n <span\n style={{\n fontSize: '12px',\n color: t.textMuted,\n flexShrink: 0,\n }}\n >\n {item.date}\n </span>\n )}\n </div>\n {item.description && (\n <p\n style={{\n margin: '3px 0 0',\n fontSize: '13px',\n color: t.textSecondary,\n lineHeight: '18px',\n }}\n >\n {item.description}\n </p>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n};\n\nTimeline.displayName = 'Timeline';\n","import React from 'react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ───────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n background: 'transparent',\n text: '#ffffff',\n textMuted: '#888888',\n border: 'rgba(255,255,255,0.08)',\n stripedBg: 'rgba(255,255,255,0.04)',\n },\n light: {\n background: 'transparent',\n text: '#1a1a1a',\n textMuted: '#999999',\n border: 'rgba(0,0,0,0.06)',\n stripedBg: 'rgba(0,0,0,0.02)',\n },\n} as const;\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\n/** Položka klíč-hodnota v seznamu. */\nexport interface DataListItem {\n /** Popisek (klíč). */\n label: string;\n /** Hodnota — řetězec nebo libovolný React uzel. */\n value: React.ReactNode;\n}\n\nexport interface DataListProps {\n /** Položky k zobrazení. */\n items: DataListItem[];\n /** Počet sloupců. @default 1 */\n columns?: number;\n /** Střídání barvy řádků. @default false */\n striped?: boolean;\n /** Další inline styly. */\n style?: React.CSSProperties;\n /** Dodatečná CSS třída. */\n className?: string;\n}\n\n// ─── DataList ───────────────────────────────────────────────────────────────\n\n/**\n * Seznam klíč-hodnota pro detailní zobrazení dat.\n *\n * Zobrazuje popisek vlevo (ztlumený) a hodnotu vpravo.\n * Podporuje rozložení do libovolného počtu sloupců a střídání barvy řádků.\n *\n * @example\n * ```tsx\n * <DataList\n * items={[\n * { label: 'Jméno', value: 'Jan Novák' },\n * { label: 'E-mail', value: 'jan@example.com' },\n * { label: 'Stav', value: <Tag>Aktivní</Tag> },\n * ]}\n * columns={2}\n * striped\n * />\n * ```\n */\nexport const DataList: React.FC<DataListProps> = ({\n items,\n columns = 1,\n striped = false,\n style,\n className,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n const cols = Math.max(1, Math.round(columns));\n\n const containerStyle: React.CSSProperties = {\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '14px',\n color: t.text,\n display: cols > 1 ? 'grid' : 'block',\n gridTemplateColumns: cols > 1 ? `repeat(${cols}, 1fr)` : undefined,\n gap: cols > 1 ? '0 24px' : undefined,\n ...style,\n };\n\n // For striped with multiple columns, we stripe based on visual row index\n const getStripedIndex = (idx: number): number => {\n if (cols <= 1) return idx;\n return Math.floor(idx / cols);\n };\n\n const rowStyle = (idx: number): React.CSSProperties => ({\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'baseline',\n gap: '16px',\n padding: '10px 12px',\n borderBottom: `1px solid ${t.border}`,\n backgroundColor: striped && getStripedIndex(idx) % 2 === 1 ? t.stripedBg : t.background,\n });\n\n const labelStyle: React.CSSProperties = {\n fontFamily: \"'Zalando Sans Expanded', sans-serif\",\n fontSize: '12px',\n fontWeight: 500,\n color: t.textMuted,\n flexShrink: 0,\n letterSpacing: '0.01em',\n };\n\n const valueStyle: React.CSSProperties = {\n textAlign: 'right',\n lineHeight: '20px',\n wordBreak: 'break-word',\n };\n\n return (\n <div className={className} style={containerStyle}>\n {items.map((item, idx) => (\n <div key={idx} style={rowStyle(idx)}>\n <span style={labelStyle}>{item.label}</span>\n <span style={valueStyle}>{item.value}</span>\n </div>\n ))}\n </div>\n );\n};\n\nDataList.displayName = 'DataList';\n","import React, { useState, useCallback } from 'react';\nimport { CaretRightIcon } from '@phosphor-icons/react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ───────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n text: '#ffffff',\n textMuted: '#888888',\n border: 'rgba(255,255,255,0.08)',\n line: 'rgba(255,255,255,0.1)',\n hover: 'rgba(255,255,255,0.06)',\n selectedBg: 'rgba(252,79,0,0.12)',\n selectedBorder: '#FC4F00',\n selectedText: '#ffffff',\n iconColor: 'rgba(255,255,255,0.4)',\n iconExpanded: '#FC4F00',\n },\n light: {\n text: '#1a1a1a',\n textMuted: '#999999',\n border: 'rgba(0,0,0,0.06)',\n line: 'rgba(0,0,0,0.08)',\n hover: 'rgba(0,0,0,0.04)',\n selectedBg: 'rgba(252,79,0,0.08)',\n selectedBorder: '#FC4F00',\n selectedText: '#1a1a1a',\n iconColor: 'rgba(0,0,0,0.3)',\n iconExpanded: '#FC4F00',\n },\n} as const;\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\n/** Uzel stromové struktury. */\nexport interface TreeNode {\n /** Unikátní identifikátor uzlu. */\n id: string;\n /** Zobrazený text uzlu. */\n label: string;\n /** Volitelná ikona vedle popisku. */\n icon?: React.ReactNode;\n /** Podřízené uzly. */\n children?: TreeNode[];\n}\n\nexport interface TreeProps {\n /** Stromová data k zobrazení. */\n data: TreeNode[];\n /** Callback při výběru uzlu. */\n onSelect?: (node: TreeNode) => void;\n /** ID aktuálně vybraného uzlu. */\n selectedId?: string;\n /** ID uzlů, které jsou ve výchozím stavu rozbalené. */\n defaultExpanded?: string[];\n /** Další inline styly. */\n style?: React.CSSProperties;\n /** Dodatečná CSS třída. */\n className?: string;\n}\n\n// ─── TreeNodeRow ────────────────────────────────────────────────────────────\n\ninterface TreeNodeRowProps {\n node: TreeNode;\n depth: number;\n expanded: Set<string>;\n selectedId?: string;\n onToggle: (id: string) => void;\n onSelect?: (node: TreeNode) => void;\n t: (typeof tokens)['dark'] | (typeof tokens)['light'];\n}\n\nconst TreeNodeRow: React.FC<TreeNodeRowProps> = ({\n node,\n depth,\n expanded,\n selectedId,\n onToggle,\n onSelect,\n t,\n}) => {\n const hasChildren = node.children && node.children.length > 0;\n const isExpanded = expanded.has(node.id);\n const isSelected = selectedId === node.id;\n const [isHovered, setIsHovered] = useState(false);\n\n let bg = 'transparent';\n if (isSelected) bg = t.selectedBg;\n else if (isHovered) bg = t.hover;\n\n return (\n <>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n padding: '4px 8px',\n paddingLeft: `${depth * 20 + 8}px`,\n borderRadius: '6px',\n backgroundColor: bg,\n borderLeft: isSelected ? `2px solid ${t.selectedBorder}` : '2px solid transparent',\n cursor: 'pointer',\n transition: 'background-color 0.12s ease',\n userSelect: 'none',\n minHeight: '32px',\n }}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n onClick={() => onSelect?.(node)}\n >\n {/* Expand/collapse chevron */}\n <span\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '20px',\n height: '20px',\n flexShrink: 0,\n marginRight: '4px',\n }}\n onClick={(e) => {\n e.stopPropagation();\n if (hasChildren) onToggle(node.id);\n }}\n >\n {hasChildren && (\n <CaretRightIcon\n size={14}\n color={isExpanded ? t.iconExpanded : t.iconColor}\n style={{\n transform: isExpanded ? 'rotate(90deg)' : 'rotate(0deg)',\n transition: 'transform 180ms cubic-bezier(0.16, 1, 0.3, 1)',\n }}\n />\n )}\n </span>\n\n {/* Icon */}\n {node.icon && (\n <span\n style={{\n display: 'flex',\n alignItems: 'center',\n marginRight: '6px',\n color: isSelected ? t.selectedBorder : t.textMuted,\n flexShrink: 0,\n }}\n >\n {node.icon}\n </span>\n )}\n\n {/* Label */}\n <span\n style={{\n fontSize: '13px',\n fontWeight: isSelected ? 500 : 400,\n color: isSelected ? t.selectedText : t.text,\n lineHeight: '20px',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n >\n {node.label}\n </span>\n </div>\n\n {/* Children */}\n {hasChildren && isExpanded && (\n <div style={{ position: 'relative' }}>\n {/* Tree line */}\n <div\n style={{\n position: 'absolute',\n left: `${depth * 20 + 18}px`,\n top: 0,\n bottom: '16px',\n width: '1px',\n backgroundColor: t.line,\n }}\n />\n {node.children!.map((child) => (\n <TreeNodeRow\n key={child.id}\n node={child}\n depth={depth + 1}\n expanded={expanded}\n selectedId={selectedId}\n onToggle={onToggle}\n onSelect={onSelect}\n t={t}\n />\n ))}\n </div>\n )}\n </>\n );\n};\n\n// ─── Tree ───────────────────────────────────────────────────────────────────\n\n/**\n * Stromový seznam s rozbalitelnými uzly.\n *\n * Podporuje ikony, výběr uzlu, animovanou šipku při rozbalení\n * a spojovací čáry mezi rodičem a potomky.\n *\n * @example\n * ```tsx\n * <Tree\n * data={[\n * { id: '1', label: 'Složka', children: [\n * { id: '1-1', label: 'Soubor A' },\n * { id: '1-2', label: 'Soubor B' },\n * ]},\n * ]}\n * selectedId=\"1-1\"\n * onSelect={(node) => console.log(node.id)}\n * />\n * ```\n */\nexport const Tree: React.FC<TreeProps> = ({\n data,\n onSelect,\n selectedId,\n defaultExpanded = [],\n style,\n className,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n\n const [expanded, setExpanded] = useState<Set<string>>(\n () => new Set(defaultExpanded),\n );\n\n const handleToggle = useCallback((id: string) => {\n setExpanded((prev) => {\n const next = new Set(prev);\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n return next;\n });\n }, []);\n\n const containerStyle: React.CSSProperties = {\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '14px',\n color: t.text,\n ...style,\n };\n\n return (\n <div className={className} style={containerStyle} role=\"tree\">\n {data.map((node) => (\n <TreeNodeRow\n key={node.id}\n node={node}\n depth={0}\n expanded={expanded}\n selectedId={selectedId}\n onToggle={handleToggle}\n onSelect={onSelect}\n t={t}\n />\n ))}\n </div>\n );\n};\n\nTree.displayName = 'Tree';\n","import React from 'react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ──────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n labelColor: '#eaeaea',\n },\n light: {\n labelColor: '#333333',\n },\n} as const;\n\n// ─── Status colors ──────────────────────────────────────────────────────────\n\nconst statusColors: Record<string, string> = {\n online: '#00A205',\n offline: '#888888',\n away: '#F5A623',\n busy: '#EF3838',\n};\n\n// ─── Size config ────────────────────────────────────────────────────────────\n\nconst sizeConfig = {\n sm: { dot: 8, fontSize: '12px', gap: '6px' },\n md: { dot: 10, fontSize: '13px', gap: '8px' },\n lg: { dot: 12, fontSize: '14px', gap: '8px' },\n} as const;\n\n// ─── Types ──────────────────────────────────────────────────────────────────\n\nexport type StatusBadgeStatus = 'online' | 'offline' | 'away' | 'busy' | (string & {});\n\nexport interface StatusBadgeProps {\n /** Stav k zobrazení. Předdefinované: online, offline, away, busy. Lze zadat i vlastní řetězec. */\n status: StatusBadgeStatus;\n /** Volitelný textový popis vedle indikátoru. */\n label?: string;\n /** Velikost indikátoru. @default 'md' */\n size?: 'sm' | 'md' | 'lg';\n /** Zapne pulzující animaci. @default false */\n pulse?: boolean;\n /** Vlastní barva indikátoru — přepíše výchozí barvu stavu. */\n color?: string;\n /** Další inline styly. */\n style?: React.CSSProperties;\n /** Dodatečná CSS třída. */\n className?: string;\n}\n\n// ─── Pulse keyframes (injected once) ────────────────────────────────────────\n\nlet pulseStyleInjected = false;\n\nconst injectPulseStyle = () => {\n if (pulseStyleInjected || typeof document === 'undefined') return;\n const id = 'sm-statusbadge-pulse';\n if (document.getElementById(id)) {\n pulseStyleInjected = true;\n return;\n }\n const style = document.createElement('style');\n style.id = id;\n style.textContent = `\n @keyframes sm-statusbadge-pulse {\n 0% { transform: scale(1); opacity: 1; }\n 50% { transform: scale(1.8); opacity: 0; }\n 100% { transform: scale(1.8); opacity: 0; }\n }\n `;\n document.head.appendChild(style);\n pulseStyleInjected = true;\n};\n\n// ─── StatusBadge ────────────────────────────────────────────────────────────\n\n/**\n * Malý barevný indikátor stavu.\n *\n * Předdefinované stavy: online, offline, away, busy.\n * Lze zadat i vlastní řetězec s vlastní barvou přes prop `color`.\n * Pulzující animace funguje na libovolném stavu.\n *\n * @example\n * ```tsx\n * <StatusBadge status=\"online\" pulse />\n * <StatusBadge status=\"busy\" label=\"Nerušit\" size=\"lg\" />\n * <StatusBadge status=\"streaming\" color=\"#9C27B0\" label=\"Živě\" pulse />\n * ```\n */\nexport const StatusBadge: React.FC<StatusBadgeProps> = ({\n status,\n label,\n size = 'md',\n pulse = false,\n color,\n style,\n className,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n const sc = sizeConfig[size];\n const dotColor = color || statusColors[status] || '#888888';\n\n if (pulse) {\n injectPulseStyle();\n }\n\n return (\n <span\n className={className}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: sc.gap,\n ...style,\n }}\n >\n {/* Tečka indikátoru */}\n <span\n style={{\n position: 'relative',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: `${sc.dot}px`,\n height: `${sc.dot}px`,\n flexShrink: 0,\n }}\n >\n {/* Pulzující kruh */}\n {pulse && (\n <span\n style={{\n position: 'absolute',\n inset: 0,\n borderRadius: '50%',\n backgroundColor: dotColor,\n animation: 'sm-statusbadge-pulse 2s ease-in-out infinite',\n }}\n />\n )}\n {/* Hlavní tečka */}\n <span\n style={{\n position: 'relative',\n width: '100%',\n height: '100%',\n borderRadius: '50%',\n backgroundColor: dotColor,\n }}\n />\n </span>\n\n {/* Textový popis */}\n {label && (\n <span\n style={{\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: sc.fontSize,\n fontWeight: 400,\n color: t.labelColor,\n lineHeight: 'normal',\n whiteSpace: 'nowrap',\n }}\n >\n {label}\n </span>\n )}\n </span>\n );\n};\n\nStatusBadge.displayName = 'StatusBadge';\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, { 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 handleBg: 'rgba(255,255,255,0.2)',\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 handleBg: '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 SheetProps {\n /** Řídí zobrazení sheetu. */\n open: boolean;\n /** Voláno při zavření sheetu. */\n onClose: () => void;\n /** Obsah sheetu. */\n children: React.ReactNode;\n /** Strana, ze které se sheet vysune. @default 'bottom' */\n side?: 'bottom' | 'right' | 'left' | 'top';\n /** Titulek zobrazený v záhlaví. */\n title?: string;\n /** Zobrazí zavírací tlačítko. @default true */\n showClose?: boolean;\n /** Další inline styly. */\n style?: React.CSSProperties;\n /** Dodatečná CSS třída. */\n className?: string;\n}\n\n// ─── Sheet ──────────────────────────────────────────────────────────────────\n\n/**\n * Lehký vysuvný panel, který může přijít z libovolné strany.\n *\n * Na rozdíl od Draweru je Sheet odlehčený a výchozí pozice je zdola\n * (vhodné pro mobilní rozhraní). Používá glass efekt a portálové vykreslení.\n *\n * @example\n * ```tsx\n * <Sheet open={isOpen} onClose={() => setOpen(false)} title=\"Filtry\">\n * <p>Obsah sheetu</p>\n * </Sheet>\n * ```\n */\nexport const Sheet: React.FC<SheetProps> = ({\n open,\n onClose,\n children,\n side = 'bottom',\n title,\n showClose = true,\n style,\n className,\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 isVertical = side === 'left' || side === 'right';\n const isHorizontal = side === 'top' || side === 'bottom';\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 getTranslate = (state: typeof animState) => {\n const offscreenMap = {\n bottom: 'translateY(100%)',\n top: 'translateY(-100%)',\n right: 'translateX(100%)',\n left: 'translateX(-100%)',\n };\n if (state === 'opening' || state === 'idle') return offscreenMap[side];\n if (state === 'open') return 'translate(0, 0)';\n return offscreenMap[side];\n };\n\n const getOverlayOpacity = () => (animState === 'open' ? 1 : 0);\n\n // ── Panel positioning ──────────────────────────────────────────────────\n\n const panelPosition: React.CSSProperties = {};\n if (side === 'bottom') {\n panelPosition.bottom = 0;\n panelPosition.left = 0;\n panelPosition.right = 0;\n panelPosition.maxHeight = '85vh';\n panelPosition.borderTopLeftRadius = '16px';\n panelPosition.borderTopRightRadius = '16px';\n } else if (side === 'top') {\n panelPosition.top = 0;\n panelPosition.left = 0;\n panelPosition.right = 0;\n panelPosition.maxHeight = '85vh';\n panelPosition.borderBottomLeftRadius = '16px';\n panelPosition.borderBottomRightRadius = '16px';\n } else if (side === 'right') {\n panelPosition.top = 0;\n panelPosition.bottom = 0;\n panelPosition.right = 0;\n panelPosition.width = '400px';\n panelPosition.maxWidth = '100vw';\n } else if (side === 'left') {\n panelPosition.top = 0;\n panelPosition.bottom = 0;\n panelPosition.left = 0;\n panelPosition.width = '400px';\n panelPosition.maxWidth = '100vw';\n }\n\n // ── Border per side ────────────────────────────────────────────────────\n\n const borderStyle: React.CSSProperties = {};\n if (side === 'bottom') borderStyle.borderTop = `1px solid ${t.panelBorder}`;\n else if (side === 'top') borderStyle.borderBottom = `1px solid ${t.panelBorder}`;\n else if (side === 'right') borderStyle.borderLeft = `1px solid ${t.panelBorder}`;\n else if (side === 'left') borderStyle.borderRight = `1px solid ${t.panelBorder}`;\n\n if (!visible) return null;\n\n return createPortal(\n <div\n style={{\n position: 'fixed',\n inset: 0,\n zIndex: 99998,\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={onClose}\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 display: 'flex',\n flexDirection: 'column',\n backgroundColor: t.panelBg,\n boxShadow: t.shadow,\n backdropFilter: 'blur(32px) saturate(1.4)',\n WebkitBackdropFilter: 'blur(32px) saturate(1.4)',\n transform: getTranslate(animState),\n transition: `transform ${ANIM_DURATION}ms cubic-bezier(0.16, 1, 0.3, 1)`,\n boxSizing: 'border-box',\n outline: 'none',\n ...panelPosition,\n ...borderStyle,\n ...style,\n }}\n >\n {/* Drag handle pro bottom sheet */}\n {side === 'bottom' && (\n <div\n style={{\n display: 'flex',\n justifyContent: 'center',\n padding: '10px 0 4px',\n flexShrink: 0,\n }}\n >\n <div\n style={{\n width: '36px',\n height: '4px',\n borderRadius: '2px',\n backgroundColor: t.handleBg,\n }}\n />\n </div>\n )}\n\n {/* Záhlaví */}\n {(title || showClose) && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: side === 'bottom' ? '8px 24px 16px' : '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 </div>\n </div>,\n document.body,\n );\n};\n\nSheet.displayName = 'Sheet';\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, { 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 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 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 CommandItem {\n /** Unikátní identifikátor příkazu. */\n id: string;\n /** Hlavní text příkazu. */\n label: string;\n /** Volitelný popis příkazu. */\n description?: string;\n /** Volitelná ikona příkazu. */\n icon?: React.ReactNode;\n /** Klávesová zkratka (zobrazena jako badge). */\n shortcut?: string;\n /** Voláno při výběru příkazu. */\n onSelect: () => void;\n}\n\nexport interface CommandGroup {\n /** Název skupiny příkazů. */\n label: string;\n /** Položky ve skupině. */\n items: CommandItem[];\n}\n\nexport interface CommandMenuProps {\n /** Řídí zobrazení command menu. */\n open: boolean;\n /** Voláno při zavření command menu. */\n onClose: () => void;\n /** Skupiny příkazů k zobrazení. */\n groups: CommandGroup[];\n /** Placeholder text vyhledávacího pole. @default 'Zadejte příkaz...' */\n placeholder?: string;\n /** Další inline styly pro kartu. */\n style?: React.CSSProperties;\n /** Dodatečná CSS třída. */\n className?: string;\n}\n\n// ─── CommandMenu ────────────────────────────────────────────────────────────\n\n/**\n * Rozšířený command palette s podporou skupin příkazů a klávesových zkratek.\n *\n * Filtruje příkazy podle vyhledávacího řetězce, podporuje klávesovou\n * navigaci (šipky, Enter, Escape) a zobrazuje klávesové zkratky.\n *\n * @example\n * ```tsx\n * <CommandMenu\n * open={open}\n * onClose={() => setOpen(false)}\n * groups={[\n * { label: 'Akce', items: [{ id: '1', label: 'Uložit', shortcut: '⌘S', onSelect: save }] },\n * ]}\n * />\n * ```\n */\nexport const CommandMenu: React.FC<CommandMenuProps> = ({\n open,\n onClose,\n groups,\n placeholder = 'Zadejte příkaz...',\n style,\n className,\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 [query, setQuery] = useState('');\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-commandmenu-scrollbar-hide';\n if (document.getElementById(id)) return;\n const s = document.createElement('style');\n s.id = id;\n s.textContent = `.commandmenu-results::-webkit-scrollbar { display: none; }`;\n document.head.appendChild(s);\n }, []);\n\n // ── Filter groups by query ─────────────────────────────────────────────\n\n const filteredGroups = groups\n .map((group) => ({\n ...group,\n items: group.items.filter(\n (item) =>\n item.label.toLowerCase().includes(query.toLowerCase()) ||\n item.description?.toLowerCase().includes(query.toLowerCase()),\n ),\n }))\n .filter((group) => group.items.length > 0);\n\n // ── Flatten for keyboard navigation ────────────────────────────────────\n\n const flatItems: CommandItem[] = filteredGroups.flatMap((g) => g.items);\n\n // ── Open / close animation ─────────────────────────────────────────────\n\n useEffect(() => {\n if (open) {\n setQuery('');\n setHighlightIndex(-1);\n setVisible(true);\n setAnimState('opening');\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 query changes ─────────────────────────────────\n\n useEffect(() => {\n setHighlightIndex(-1);\n }, [query]);\n\n // ── Scroll highlighted item into view ──────────────────────────────────\n\n useEffect(() => {\n if (highlightIndex < 0 || !listRef.current) return;\n const el = listRef.current.querySelector(`[data-cmd-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 // ── Animation styles ───────────────────────────────────────────────────\n\n const getOverlayStyle = (): React.CSSProperties => {\n const base: React.CSSProperties = { transition: `opacity ${ANIM_DURATION}ms ease` };\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 // ── Build flat index counter ───────────────────────────────────────────\n\n let flatIndex = 0;\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 command menu */}\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={query}\n onChange={(e) => setQuery(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=\"commandmenu-results\"\n style={{\n flex: 1,\n overflowY: 'auto',\n padding: '8px',\n scrollbarWidth: 'none',\n msOverflowStyle: 'none' as any,\n }}\n >\n {filteredGroups.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 filteredGroups.map((group) => (\n <div key={group.label} role=\"group\" aria-label={group.label}>\n {/* Záhlaví skupiny */}\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.label}\n </div>\n\n {/* Položky */}\n {group.items.map((item) => {\n const currentFlatIndex = flatIndex++;\n const isHighlighted = currentFlatIndex === highlightIndex;\n\n return (\n <div\n key={item.id}\n role=\"option\"\n aria-selected={isHighlighted}\n data-cmd-index={currentFlatIndex}\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(currentFlatIndex)}\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\n {/* Klávesová zkratka */}\n {item.shortcut && (\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 whiteSpace: 'nowrap',\n }}\n >\n {item.shortcut}\n </kbd>\n )}\n </div>\n );\n })}\n </div>\n ))\n )}\n </div>\n </div>\n </div>,\n document.body,\n );\n};\n\nCommandMenu.displayName = 'CommandMenu';\n","import React from 'react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ──────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n background: 'rgba(24,24,24,0.8)',\n border: 'rgba(255,255,255,0.1)',\n },\n light: {\n background: 'rgba(255,255,255,0.8)',\n border: 'rgba(0,0,0,0.08)',\n },\n} as const;\n\n// ─── Types ──────────────────────────────────────────────────────────────────\n\nexport interface AppSidebarProps {\n /** Obsah postranního panelu (navigace, menu apod.). */\n children: React.ReactNode;\n /** Zda je panel sbalený. @default false */\n collapsed?: boolean;\n /** Voláno při změně stavu sbalení. */\n onCollapse?: (collapsed: boolean) => void;\n /** Šířka rozbalené postranní lišty v px. @default 260 */\n width?: number;\n /** Šířka sbalené postranní lišty v px. @default 64 */\n collapsedWidth?: number;\n /** Další inline styly. */\n style?: React.CSSProperties;\n /** Dodatečná CSS třída. */\n className?: string;\n}\n\n// ─── AppSidebar ─────────────────────────────────────────────────────────────\n\n/**\n * Sbaletelný postranní panel pro navigaci aplikace.\n *\n * Používá glass efekt a plynulou animaci šířky. Tlačítko pro sbalení/rozbalení\n * si řeší konzument sám — komponenta je plně řízená přes `collapsed` a `onCollapse`.\n *\n * @example\n * ```tsx\n * const [collapsed, setCollapsed] = useState(false);\n * <AppSidebar collapsed={collapsed} onCollapse={setCollapsed}>\n * <button onClick={() => setCollapsed(c => !c)}>Toggle</button>\n * <nav>...</nav>\n * </AppSidebar>\n * ```\n */\nexport const AppSidebar: React.FC<AppSidebarProps> = ({\n children,\n collapsed = false,\n onCollapse,\n width = 260,\n collapsedWidth = 64,\n style,\n className,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n\n const currentWidth = collapsed ? collapsedWidth : width;\n\n return (\n <aside\n className={className}\n style={{\n position: 'relative',\n display: 'flex',\n flexDirection: 'column',\n width: `${currentWidth}px`,\n minWidth: `${currentWidth}px`,\n height: '100%',\n backgroundColor: t.background,\n backdropFilter: 'blur(20px)',\n WebkitBackdropFilter: 'blur(20px)',\n borderRight: `1px solid ${t.border}`,\n boxSizing: 'border-box',\n overflow: 'hidden',\n transition: 'width 180ms cubic-bezier(0.16, 1, 0.3, 1), min-width 180ms cubic-bezier(0.16, 1, 0.3, 1)',\n ...style,\n }}\n >\n {/* Obsah */}\n <div\n style={{\n flex: 1,\n overflowY: 'auto',\n overflowX: 'hidden',\n padding: collapsed ? '8px 8px' : '8px 12px',\n display: 'flex',\n flexDirection: 'column' as const,\n alignItems: collapsed ? 'center' : 'stretch',\n transition: 'padding 180ms cubic-bezier(0.16, 1, 0.3, 1)',\n }}\n >\n {children}\n </div>\n </aside>\n );\n};\n\nAppSidebar.displayName = 'AppSidebar';\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 text: 'rgba(255,255,255,0.7)',\n textHover: '#ffffff',\n textActive: '#ffffff',\n icon: 'rgba(255,255,255,0.4)',\n iconHover: 'rgba(255,255,255,0.8)',\n iconActive: '#FC4F00',\n hoverBg: 'rgba(255,255,255,0.06)',\n activeBg: 'rgba(232,97,45,0.1)',\n chevron: 'rgba(255,255,255,0.3)',\n chevronHover: 'rgba(255,255,255,0.7)',\n },\n light: {\n text: 'rgba(0,0,0,0.6)',\n textHover: '#1a1a1a',\n textActive: '#1a1a1a',\n icon: 'rgba(0,0,0,0.35)',\n iconHover: 'rgba(0,0,0,0.7)',\n iconActive: '#FC4F00',\n hoverBg: 'rgba(0,0,0,0.04)',\n activeBg: 'rgba(232,97,45,0.07)',\n chevron: 'rgba(0,0,0,0.25)',\n chevronHover: 'rgba(0,0,0,0.6)',\n },\n} as const;\n\n// ─── Types ──────────────────────────────────────────────────────────────────\n\nexport interface SidebarItemProps {\n /** Textový popisek položky. */\n label: string;\n /** Volitelná ikona zobrazená před textem. */\n icon?: React.ReactNode;\n /** Zda je položka aktivní (vybraná). @default false */\n active?: boolean;\n /** Zda je skupina výchozně rozbalená. @default false */\n defaultExpanded?: boolean;\n /** Řízené rozbalení. Pokud zadáno, přepíše defaultExpanded. */\n expanded?: boolean;\n /** Callback při změně rozbalení. */\n onExpandedChange?: (expanded: boolean) => void;\n /** Callback při kliknutí na položku (ne na chevron). */\n onClick?: () => void;\n /** Potomci — vnořené SidebarItem komponenty. Přítomnost aktivuje rozbalovací režim. */\n children?: React.ReactNode;\n /** Zda je sidebar sbalený (jen ikona). @default false */\n collapsed?: boolean;\n /** Zakáže interakci. @default false */\n disabled?: boolean;\n /** Další inline styly. */\n style?: React.CSSProperties;\n /** Dodatečná CSS třída. */\n className?: string;\n}\n\n// ─── SidebarItem ────────────────────────────────────────────────────────────\n\n/**\n * Položka navigace pro AppSidebar.\n *\n * Podporuje ikonu, aktivní stav, hover efekt a vnořené položky\n * s animovaným rozbalováním/sbalováním.\n *\n * @example\n * ```tsx\n * <SidebarItem label=\"Dashboard\" icon={<HouseIcon size={18} />} active onClick={...} />\n *\n * <SidebarItem label=\"Settings\" icon={<GearIcon size={18} />} defaultExpanded>\n * <SidebarItem label=\"General\" onClick={...} />\n * <SidebarItem label=\"Security\" onClick={...} />\n * <SidebarItem label=\"Billing\" onClick={...} />\n * </SidebarItem>\n * ```\n */\nexport const SidebarItem: React.FC<SidebarItemProps> = ({\n label,\n icon,\n active = false,\n defaultExpanded = false,\n expanded: controlledExpanded,\n onExpandedChange,\n onClick,\n children,\n collapsed = false,\n disabled = false,\n style,\n className,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n\n const hasChildren = React.Children.count(children) > 0;\n const isControlled = controlledExpanded !== undefined;\n\n const [internalExpanded, setInternalExpanded] = useState(defaultExpanded);\n const isExpanded = isControlled ? controlledExpanded : internalExpanded;\n\n const [hovered, setHovered] = useState(false);\n const contentRef = useRef<HTMLDivElement>(null);\n const [contentHeight, setContentHeight] = useState(0);\n\n // ── Measure children height ──────────────────────────────────────────\n\n useEffect(() => {\n if (contentRef.current) {\n setContentHeight(contentRef.current.scrollHeight);\n }\n }, [children, isExpanded]);\n\n // ── Toggle expand ────────────────────────────────────────────────────\n\n const toggleExpand = useCallback(() => {\n if (isControlled) {\n onExpandedChange?.(!controlledExpanded);\n } else {\n setInternalExpanded((prev) => {\n const next = !prev;\n onExpandedChange?.(next);\n return next;\n });\n }\n }, [isControlled, controlledExpanded, onExpandedChange]);\n\n // ── Handle click ─────────────────────────────────────────────────────\n\n const handleClick = useCallback(() => {\n if (disabled) return;\n\n if (hasChildren) {\n toggleExpand();\n }\n\n onClick?.();\n }, [disabled, hasChildren, toggleExpand, onClick]);\n\n // ── Colors ───────────────────────────────────────────────────────────\n\n const textColor = disabled\n ? `${t.text}66`\n : active\n ? t.textActive\n : hovered\n ? t.textHover\n : t.text;\n\n const iconColor = disabled\n ? `${t.icon}66`\n : active\n ? t.iconActive\n : hovered\n ? t.iconHover\n : t.icon;\n\n const bgColor = active\n ? t.activeBg\n : hovered && !disabled\n ? t.hoverBg\n : 'transparent';\n\n // ── Collapsed mode — icon only ───────────────────────────────────────\n\n if (collapsed) {\n return (\n <button\n type=\"button\"\n onClick={handleClick}\n disabled={disabled}\n title={label}\n className={className}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '100%',\n height: 40,\n border: '0 none',\n borderStyle: 'none',\n outline: 'none',\n borderRadius: 8,\n backgroundColor: bgColor,\n color: iconColor,\n cursor: disabled ? 'not-allowed' : 'pointer',\n transition: 'background-color 0.12s ease, color 0.12s ease',\n flexShrink: 0,\n ...style,\n }}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n >\n {icon || <span style={{ fontSize: 13, fontWeight: 600, color: textColor }}>{label[0]}</span>}\n </button>\n );\n }\n\n // ── Full mode ────────────────────────────────────────────────────────\n\n return (\n <div className={className} style={style}>\n <button\n type=\"button\"\n onClick={handleClick}\n disabled={disabled}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 10,\n width: '100%',\n padding: '8px 10px',\n border: '0 none',\n borderStyle: 'none',\n outline: 'none',\n borderRadius: 8,\n backgroundColor: bgColor,\n color: textColor,\n cursor: disabled ? 'not-allowed' : 'pointer',\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: 13,\n fontWeight: active ? 500 : 400,\n textAlign: 'left',\n transition: 'background-color 0.12s ease, color 0.12s ease',\n lineHeight: 'normal',\n userSelect: 'none',\n }}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n >\n {/* Icon */}\n {icon && (\n <span\n style={{\n display: 'flex',\n alignItems: 'center',\n flexShrink: 0,\n color: iconColor,\n transition: 'color 0.12s ease',\n }}\n >\n {icon}\n </span>\n )}\n\n {/* Label */}\n <span\n style={{\n flex: 1,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {label}\n </span>\n\n {/* Chevron for expandable */}\n {hasChildren && (\n <CaretDownIcon\n size={14}\n color={hovered ? t.chevronHover : t.chevron}\n style={{\n flexShrink: 0,\n transition: 'transform 0.2s ease, color 0.12s ease',\n transform: isExpanded ? 'rotate(0deg)' : 'rotate(-90deg)',\n }}\n />\n )}\n </button>\n\n {/* Children — collapsible */}\n {hasChildren && (\n <div\n ref={contentRef}\n style={{\n overflow: 'hidden',\n maxHeight: isExpanded ? `${contentHeight}px` : '0px',\n transition: 'max-height 200ms cubic-bezier(0.16, 1, 0.3, 1)',\n paddingLeft: 12,\n }}\n >\n <div style={{ display: 'flex', flexDirection: 'column', gap: 2, paddingTop: 4, paddingBottom: 4 }}>\n {children}\n </div>\n </div>\n )}\n </div>\n );\n};\n\nSidebarItem.displayName = 'SidebarItem';\n","import React from 'react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ──────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n background: 'rgba(26,26,26,0.7)',\n backgroundSolid: '#1a1a1a',\n border: 'rgba(255,255,255,0.1)',\n shadow: '0 1px 0 rgba(255,255,255,0.04)',\n },\n light: {\n background: 'rgba(255,255,255,0.7)',\n backgroundSolid: '#ffffff',\n border: 'rgba(0,0,0,0.08)',\n shadow: '0 1px 0 rgba(0,0,0,0.03)',\n },\n} as const;\n\n// ─── Types ──────────────────────────────────────────────────────────────────\n\nexport interface NavbarProps {\n /** Logo nebo název aplikace (vykresleno vlevo). */\n logo?: React.ReactNode;\n /** Navigační obsah (vykresleno uprostřed). */\n children?: React.ReactNode;\n /** Akční prvky – tlačítka, avatar apod. (vykresleno vpravo). */\n actions?: React.ReactNode;\n /** Zda je navbar přilepený k hornímu okraji. @default true */\n sticky?: boolean;\n /** Zda použít glass efekt (průhledné pozadí s rozmazáním). @default true */\n glass?: boolean;\n /** Další inline styly. */\n style?: React.CSSProperties;\n /** Dodatečná CSS třída. */\n className?: string;\n}\n\n// ─── Navbar ─────────────────────────────────────────────────────────────────\n\n/**\n * Horní navigační lišta aplikace.\n *\n * Obsahuje tři sloty: logo (vlevo), children (uprostřed)\n * a actions (vpravo). Podporuje glass efekt a sticky pozici.\n *\n * @example\n * ```tsx\n * <Navbar\n * logo={<span>MyApp</span>}\n * actions={<Button size=\"sm\">Přihlásit</Button>}\n * >\n * <a href=\"/about\">O nás</a>\n * </Navbar>\n * ```\n */\nexport const Navbar: React.FC<NavbarProps> = ({\n logo,\n children,\n actions,\n sticky = true,\n glass = true,\n style,\n className,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n\n return (\n <header\n className={className}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n height: '56px',\n padding: '0 20px',\n backgroundColor: glass ? t.background : t.backgroundSolid,\n borderBottom: `1px solid ${t.border}`,\n boxShadow: t.shadow,\n boxSizing: 'border-box',\n ...(glass\n ? {\n backdropFilter: 'blur(20px)',\n WebkitBackdropFilter: 'blur(20px)',\n }\n : {}),\n ...(sticky\n ? {\n position: 'sticky',\n top: 0,\n zIndex: 1000,\n }\n : {}),\n ...style,\n }}\n >\n {/* Logo – vlevo */}\n {logo && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n flexShrink: 0,\n }}\n >\n {logo}\n </div>\n )}\n\n {/* Navigační obsah – uprostřed */}\n {children && (\n <nav\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n flex: 1,\n justifyContent: 'center',\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '14px',\n fontWeight: 500,\n }}\n >\n {children}\n </nav>\n )}\n\n {/* Akce – vpravo */}\n {actions && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n flexShrink: 0,\n }}\n >\n {actions}\n </div>\n )}\n </header>\n );\n};\n\nNavbar.displayName = 'Navbar';\n","import React from 'react';\nimport { Info as InfoIcon, CheckCircle as CheckCircleIcon, 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 info: { border: 'rgba(255,255,255,0.5)', background: 'rgba(3,3,3,0.55)' },\n success: { border: 'rgba(0,162,5,0.7)', background: 'rgba(3,21,4,0.55)' },\n error: { border: 'rgba(222,0,0,0.7)', background: 'rgba(21,3,3,0.55)' },\n text: '#ffffff',\n textSecondary: '#ffffff',\n iconColor: '#ffffff',\n closeColor: '#ffffff',\n },\n light: {\n info: { border: 'rgba(0,0,0,0.12)', background: 'rgba(255,255,255,0.7)' },\n success: { border: 'rgba(0,162,5,0.3)', background: 'rgba(240,255,240,0.7)' },\n error: { border: 'rgba(222,0,0,0.3)', background: 'rgba(255,240,240,0.7)' },\n text: '#1a1a1a',\n textSecondary: '#333333',\n iconColor: '#1a1a1a',\n closeColor: '#888888',\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 theme = useTheme();\n const t = tokens[theme];\n const { border, background } = t[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: t.iconColor }}>\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: t.text,\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: t.textSecondary,\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: t.closeColor,\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, { useState } from 'react';\nimport {\n Info as InfoIcon,\n CheckCircle as CheckCircleIcon,\n Warning as WarningIcon,\n XCircle as XCircleIcon,\n X as XIcon,\n} from '@phosphor-icons/react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ──────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n titleText: '#ffffff',\n bodyText: 'rgba(255,255,255,0.85)',\n closeColor: 'rgba(255,255,255,0.6)',\n closeHover: 'rgba(255,255,255,0.9)',\n border: 'rgba(255,255,255,0.1)',\n },\n light: {\n titleText: '#1a1a1a',\n bodyText: 'rgba(0,0,0,0.7)',\n closeColor: 'rgba(0,0,0,0.4)',\n closeHover: 'rgba(0,0,0,0.8)',\n border: 'rgba(0,0,0,0.08)',\n },\n} as const;\n\nconst variantTokens = {\n info: {\n bg: 'rgba(255,255,255,0.06)',\n bgLight: 'rgba(0,0,0,0.04)',\n accent: 'rgba(255,255,255,0.7)',\n accentLight: 'rgba(0,0,0,0.5)',\n },\n success: {\n bg: 'rgba(0,162,5,0.08)',\n bgLight: 'rgba(0,162,5,0.06)',\n accent: '#00A205',\n accentLight: '#00A205',\n },\n warning: {\n bg: 'rgba(245,166,35,0.08)',\n bgLight: 'rgba(245,166,35,0.06)',\n accent: '#F5A623',\n accentLight: '#F5A623',\n },\n error: {\n bg: 'rgba(222,0,0,0.08)',\n bgLight: 'rgba(222,0,0,0.06)',\n accent: '#DE0000',\n accentLight: '#DE0000',\n },\n} as const;\n\n// ─── Types ──────────────────────────────────────────────────────────────────\n\nexport type NotificationVariant = 'info' | 'success' | 'warning' | 'error';\n\nexport interface NotificationProps {\n /** Vizuální varianta notifikace. @default 'info' */\n variant?: NotificationVariant;\n /** Titulek notifikace. */\n title: string;\n /** Obsah / popis notifikace. */\n children?: React.ReactNode;\n /** Zobrazí tlačítko zavření. @default false */\n closable?: boolean;\n /** Voláno při zavření notifikace. */\n onClose?: () => void;\n /** Vlastní ikona (nahradí výchozí ikonu varianty). */\n icon?: React.ReactNode;\n /** Akční prvek zobrazený na pravé straně (tlačítko apod.). */\n action?: React.ReactNode;\n /** Další inline styly. */\n style?: React.CSSProperties;\n /** Dodatečná CSS třída. */\n className?: string;\n}\n\n// ─── Notification ───────────────────────────────────────────────────────────\n\n/**\n * Inline notifikační banner pro trvalé zobrazení v layoutu.\n *\n * Na rozdíl od `Toast` se nejedná o plovoucí overlay, ale o součást\n * obsahu stránky. Podporuje varianty info/success/warning/error,\n * volitelný akční prvek a zavírací tlačítko.\n *\n * @example\n * ```tsx\n * <Notification variant=\"success\" title=\"Uloženo\" closable>\n * Změny byly úspěšně uloženy.\n * </Notification>\n * <Notification\n * variant=\"warning\"\n * title=\"Nová verze\"\n * action={<Button size=\"sm\">Aktualizovat</Button>}\n * >\n * Je dostupná nová verze aplikace.\n * </Notification>\n * ```\n */\nexport const Notification: React.FC<NotificationProps> = ({\n variant = 'info',\n title,\n children,\n closable = false,\n onClose,\n icon,\n action,\n style,\n className,\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 bgColor = isLight ? vt.bgLight : vt.bg;\n const accentColor = isLight ? vt.accentLight : vt.accent;\n\n const defaultIcons: Record<NotificationVariant, React.ReactNode> = {\n info: <InfoIcon size={20} color={accentColor} />,\n success: <CheckCircleIcon size={20} color={accentColor} />,\n warning: <WarningIcon size={20} color={accentColor} />,\n error: <XCircleIcon size={20} color={accentColor} />,\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=\"status\"\n className={className}\n style={{\n display: 'flex',\n alignItems: 'flex-start',\n gap: '12px',\n padding: '14px 16px',\n backgroundColor: bgColor,\n border: `1px solid ${t.border}`,\n borderRadius: '12px',\n boxSizing: 'border-box',\n ...style,\n }}\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\n style={{\n fontFamily: \"'Zalando Sans Expanded', sans-serif\",\n fontWeight: 700,\n fontSize: '14px',\n lineHeight: 'normal',\n color: t.titleText,\n }}\n >\n {title}\n </span>\n {children && (\n <div\n style={{\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontWeight: 400,\n fontSize: '13px',\n lineHeight: '1.4',\n color: t.bodyText,\n }}\n >\n {children}\n </div>\n )}\n </div>\n\n {/* Akce */}\n {action && (\n <div style={{ display: 'flex', alignItems: 'center', flexShrink: 0, marginTop: '1px' }}>\n {action}\n </div>\n )}\n\n {/* Tlačítko zavření */}\n {closable && (\n <button\n type=\"button\"\n onClick={handleClose}\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: '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\nNotification.displayName = 'Notification';\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, { useState, useEffect, useCallback, useRef } from 'react';\nimport { useTheme } from '../../hooks/useTheme';\nimport { Modal } from '../Modal';\n\n// ─── Design tokens ──────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n titleText: '#ffffff',\n descriptionText: '#eaeaea',\n cancelBg: 'transparent',\n cancelHover: 'rgba(255,255,255,0.08)',\n cancelBorder: 'rgba(255,255,255,0.15)',\n cancelText: '#eaeaea',\n confirmBg: '#FC4F00',\n confirmHover: '#FF6D2A',\n confirmText: '#ffffff',\n dangerBg: '#EF3838',\n dangerHover: '#ff5252',\n dangerText: '#ffffff',\n },\n light: {\n titleText: '#1a1a1a',\n descriptionText: '#333333',\n cancelBg: 'transparent',\n cancelHover: 'rgba(0,0,0,0.05)',\n cancelBorder: 'rgba(0,0,0,0.12)',\n cancelText: '#333333',\n confirmBg: '#FC4F00',\n confirmHover: '#FF6D2A',\n confirmText: '#ffffff',\n dangerBg: '#EF3838',\n dangerHover: '#ff5252',\n dangerText: '#ffffff',\n },\n} as const;\n\n// ─── Types ──────────────────────────────────────────────────────────────────\n\nexport interface ConfirmDialogProps {\n /** Řídí zobrazení potvrzovacího dialogu. */\n open: boolean;\n /** Voláno při potvrzení akce. */\n onConfirm: () => void;\n /** Voláno při zrušení (zavření) dialogu. */\n onCancel: () => void;\n /** Titulek dialogu. */\n title: string;\n /** Volitelný popis akce. */\n description?: string;\n /** Text potvrzovacího tlačítka. @default 'Potvrdit' */\n confirmLabel?: string;\n /** Text zrušovacího tlačítka. @default 'Zrušit' */\n cancelLabel?: string;\n /** Varianta dialogu – 'danger' zvýrazní potvrzovací tlačítko červeně. @default 'default' */\n variant?: 'default' | 'danger';\n /** Stav načítání potvrzovacího tlačítka. @default false */\n loading?: boolean;\n /** Další inline styly. */\n style?: React.CSSProperties;\n /** Dodatečná CSS třída. */\n className?: string;\n}\n\n// ─── ConfirmDialog ──────────────────────────────────────────────────────────\n\n/**\n * Předpřipravený modální dialog pro potvrzení akce.\n *\n * Interně používá komponentu `Modal`. Podporuje standardní a danger variantu\n * s volitelným stavem načítání.\n *\n * @example\n * ```tsx\n * <ConfirmDialog\n * open={isOpen}\n * onConfirm={handleDelete}\n * onCancel={() => setOpen(false)}\n * title=\"Smazat položku?\"\n * description=\"Tato akce je nevratná.\"\n * variant=\"danger\"\n * />\n * ```\n */\nexport const ConfirmDialog: React.FC<ConfirmDialogProps> = ({\n open,\n onConfirm,\n onCancel,\n title,\n description,\n confirmLabel = 'Potvrdit',\n cancelLabel = 'Zrušit',\n variant = 'default',\n loading = false,\n style,\n className,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n\n const [cancelHovered, setCancelHovered] = useState(false);\n const [confirmHovered, setConfirmHovered] = useState(false);\n\n const isDanger = variant === 'danger';\n const confirmBg = isDanger\n ? confirmHovered ? t.dangerHover : t.dangerBg\n : confirmHovered ? t.confirmHover : t.confirmBg;\n const confirmTextColor = isDanger ? t.dangerText : t.confirmText;\n\n return (\n <Modal\n open={open}\n onClose={onCancel}\n title={title}\n size=\"sm\"\n className={className}\n style={style}\n footer={\n <>\n {/* Tlačítko Zrušit */}\n <button\n type=\"button\"\n onClick={onCancel}\n onMouseEnter={() => setCancelHovered(true)}\n onMouseLeave={() => setCancelHovered(false)}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '8px 16px',\n background: cancelHovered ? t.cancelHover : t.cancelBg,\n border: `1px solid ${t.cancelBorder}`,\n borderRadius: '6px',\n cursor: 'pointer',\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '14px',\n fontWeight: 500,\n color: t.cancelText,\n lineHeight: 'normal',\n transition: 'background-color 0.12s ease',\n }}\n >\n {cancelLabel}\n </button>\n\n {/* Tlačítko Potvrdit */}\n <button\n type=\"button\"\n onClick={onConfirm}\n disabled={loading}\n onMouseEnter={() => setConfirmHovered(true)}\n onMouseLeave={() => setConfirmHovered(false)}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '8px 16px',\n background: confirmBg,\n border: 'none',\n borderRadius: '6px',\n cursor: loading ? 'not-allowed' : 'pointer',\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '14px',\n fontWeight: 500,\n color: confirmTextColor,\n lineHeight: 'normal',\n opacity: loading ? 0.7 : 1,\n transition: 'background-color 0.12s ease, opacity 0.12s ease',\n }}\n >\n {loading ? 'Zpracovávám...' : confirmLabel}\n </button>\n </>\n }\n >\n {description && (\n <p\n style={{\n margin: 0,\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: '14px',\n lineHeight: '1.6',\n color: t.descriptionText,\n }}\n >\n {description}\n </p>\n )}\n </Modal>\n );\n};\n\nConfirmDialog.displayName = 'ConfirmDialog';\n","import React, { useState, useCallback, useRef } from 'react';\nimport { CopySimpleIcon, CheckIcon } from '@phosphor-icons/react';\nimport { useTheme } from '../../hooks/useTheme';\n\n// ─── Design tokens ──────────────────────────────────────────────────────────\n\nconst tokens = {\n dark: {\n iconColor: '#ACACAC',\n iconHover: '#ffffff',\n successColor: '#00A205',\n buttonBg: 'transparent',\n buttonHover: 'rgba(255,255,255,0.08)',\n buttonBorder: 'rgba(255,255,255,0.15)',\n buttonText: '#eaeaea',\n },\n light: {\n iconColor: '#888888',\n iconHover: '#1a1a1a',\n successColor: '#00A205',\n buttonBg: 'transparent',\n buttonHover: 'rgba(0,0,0,0.05)',\n buttonBorder: 'rgba(0,0,0,0.12)',\n buttonText: '#333333',\n },\n} as const;\n\n// ─── Size config ────────────────────────────────────────────────────────────\n\nconst sizeConfig = {\n sm: { iconSize: 14, buttonPadding: '4px 10px', iconPadding: '4px', fontSize: '12px' },\n md: { iconSize: 16, buttonPadding: '6px 14px', iconPadding: '6px', fontSize: '13px' },\n lg: { iconSize: 18, buttonPadding: '8px 16px', iconPadding: '8px', fontSize: '14px' },\n} as const;\n\n// ─── Types ──────────────────────────────────────────────────────────────────\n\nexport interface CopyButtonProps {\n /** Text ke zkopírování do schránky. */\n text: string;\n /** Vlastní obsah tlačítka (nahrazuje výchozí ikonu/text). */\n children?: React.ReactNode;\n /** Velikost tlačítka. @default 'md' */\n size?: 'sm' | 'md' | 'lg';\n /** Varianta zobrazení. @default 'icon' */\n variant?: 'icon' | 'button';\n /** Popisek tlačítka ve variantě 'button'. @default 'Kopírovat' */\n label?: string;\n /** Popisek po úspěšném zkopírování. @default 'Zkopírováno' */\n successLabel?: string;\n /** Callback volaný po úspěšném zkopírování do schránky. */\n onCopy?: () => void;\n /** Další inline styly. */\n style?: React.CSSProperties;\n /** Dodatečná CSS třída. */\n className?: string;\n}\n\n// ─── Clipboard helper ───────────────────────────────────────────────────────\n\nconst copyToClipboard = async (text: string): Promise<boolean> => {\n try {\n if (navigator.clipboard && navigator.clipboard.writeText) {\n await navigator.clipboard.writeText(text);\n return true;\n }\n } catch {\n // Fallback below\n }\n\n // Fallback: textarea + execCommand\n try {\n const textarea = document.createElement('textarea');\n textarea.value = text;\n textarea.style.position = 'fixed';\n textarea.style.opacity = '0';\n textarea.style.left = '-9999px';\n document.body.appendChild(textarea);\n textarea.select();\n const result = document.execCommand('copy');\n document.body.removeChild(textarea);\n return result;\n } catch {\n return false;\n }\n};\n\n// ─── CopyButton ─────────────────────────────────────────────────────────────\n\n/**\n * Tlačítko pro zkopírování textu do schránky.\n *\n * Podporuje dvě varianty: minimální ikonovou (jen ikona kopírování)\n * a plnou tlačítkovou (s textem). Po úspěšném zkopírování se na 2 sekundy\n * zobrazí ikona zaškrtnutí.\n *\n * @example\n * ```tsx\n * <CopyButton text=\"npm install sm-ui\" variant=\"button\" label=\"Kopírovat příkaz\" />\n * <CopyButton text={code} />\n * ```\n */\nexport const CopyButton: React.FC<CopyButtonProps> = ({\n text,\n children,\n size = 'md',\n variant = 'icon',\n label = 'Kopírovat',\n successLabel = 'Zkopírováno',\n onCopy,\n style,\n className,\n}) => {\n const theme = useTheme();\n const t = tokens[theme];\n const sc = sizeConfig[size];\n\n const [copied, setCopied] = useState(false);\n const [hovered, setHovered] = useState(false);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const handleCopy = useCallback(async () => {\n const success = await copyToClipboard(text);\n if (success) {\n setCopied(true);\n onCopy?.();\n if (timerRef.current) clearTimeout(timerRef.current);\n timerRef.current = setTimeout(() => {\n setCopied(false);\n timerRef.current = null;\n }, 2000);\n }\n }, [text, onCopy]);\n\n const iconColor = copied ? t.successColor : hovered ? t.iconHover : t.iconColor;\n\n const CurrentIcon = copied ? CheckIcon : CopySimpleIcon;\n\n if (children) {\n return (\n <button\n type=\"button\"\n aria-label={copied ? successLabel : label}\n onClick={handleCopy}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n className={className}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '6px',\n padding: sc.iconPadding,\n background: hovered ? t.buttonHover : t.buttonBg,\n border: 'none',\n borderRadius: '6px',\n cursor: 'pointer',\n transition: 'background-color 0.12s ease',\n color: iconColor,\n ...style,\n }}\n >\n {children}\n </button>\n );\n }\n\n if (variant === 'icon') {\n return (\n <button\n type=\"button\"\n aria-label={copied ? successLabel : label}\n onClick={handleCopy}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n className={className}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: sc.iconPadding,\n background: hovered ? t.buttonHover : t.buttonBg,\n border: 'none',\n borderRadius: '6px',\n cursor: 'pointer',\n transition: 'background-color 0.12s ease, color 0.12s ease',\n color: iconColor,\n ...style,\n }}\n >\n <CurrentIcon size={sc.iconSize} color={iconColor} />\n </button>\n );\n }\n\n // Varianta 'button'\n return (\n <button\n type=\"button\"\n aria-label={copied ? successLabel : label}\n onClick={handleCopy}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n className={className}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '6px',\n padding: sc.buttonPadding,\n background: hovered ? t.buttonHover : t.buttonBg,\n border: `1px solid ${t.buttonBorder}`,\n borderRadius: '6px',\n cursor: 'pointer',\n transition: 'background-color 0.12s ease',\n fontFamily: \"'Zalando Sans', sans-serif\",\n fontSize: sc.fontSize,\n fontWeight: 500,\n color: copied ? t.successColor : t.buttonText,\n lineHeight: 'normal',\n ...style,\n }}\n >\n <CurrentIcon size={sc.iconSize} color={copied ? t.successColor : t.buttonText} />\n {copied ? successLabel : label}\n </button>\n );\n};\n\nCopyButton.displayName = 'CopyButton';\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"]}