prime-ui-kit 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/internal/ControlSizeContext.tsx","../src/internal/context.ts","../src/internal/cx.ts","../src/components/accordion/Accordion.module.css","../src/components/accordion/Accordion.tsx","../src/internal/data-attributes.ts","../src/components/avatar/Avatar.module.css","../src/components/avatar/Avatar.tsx","../src/components/badge/Badge.module.css","../src/components/badge/Badge.tsx","../src/internal/mergeRefs.ts","../src/internal/slot.tsx","../src/components/button/Button.module.css","../src/components/button/Button.tsx","../src/components/banner/Banner.module.css","../src/components/banner/Banner.tsx","../src/icons/Icon.module.css","../src/icons/Icon.tsx","../src/icons/index.ts","../src/components/link-button/LinkButton.module.css","../src/components/link-button/LinkButton.tsx","../src/components/breadcrumb/Breadcrumb.module.css","../src/components/breadcrumb/Breadcrumb.tsx","../src/components/button-group/ButtonGroup.module.css","../src/components/button-group/ButtonGroup.tsx","../src/components/hint/Hint.module.css","../src/components/hint/Hint.tsx","../src/components/label/Label.module.css","../src/components/label/Label.tsx","../src/hooks/useControllableState.ts","../src/hooks/useMergedRefs.ts","../src/components/checkbox/Checkbox.module.css","../src/components/checkbox/Checkbox.tsx","../src/internal/highlightTsxHtml.ts","../src/components/code-block/CodeBlock.module.css","../src/components/code-block/CodeBlock.tsx","../src/hooks/useFieldIds.ts","../src/components/input/Input.module.css","../src/components/input/Input.tsx","../src/hooks/useEscapeKey.ts","../src/hooks/useOutsideClick.ts","../tokens/primitives.ts","../src/internal/layoutPxFromPrimitives.ts","../src/hooks/usePosition.ts","../src/internal/Portal.tsx","../src/components/select/Select.module.css","../src/components/select/selectListbox.ts","../src/components/select/Select.tsx","../src/components/color-picker/ColorPicker.module.css","../src/components/color-picker/ColorPicker.tsx","../src/hooks/useFocusTrap.ts","../src/hooks/useScrollLock.ts","../src/components/modal/Modal.module.css","../src/components/modal/Modal.tsx","../src/components/command-menu/CommandMenu.module.css","../src/components/command-menu/CommandMenu.tsx","../src/internal/runtimeUnits.ts","../src/components/pagination/Pagination.module.css","../src/components/pagination/Pagination.tsx","../src/components/data-table/DataTable.module.css","../src/components/data-table/DataTable.tsx","../src/components/typography/Typography.module.css","../src/components/typography/Typography.tsx","../src/hooks/useResponsiveMonths.ts","../src/components/datepicker/Datepicker.module.css","../src/components/datepicker/Datepicker.tsx","../src/components/digit-input/DigitInput.module.css","../src/components/digit-input/DigitInput.tsx","../src/components/divider/Divider.module.css","../src/components/divider/Divider.tsx","../src/components/drawer/Drawer.module.css","../src/components/drawer/Drawer.tsx","../src/components/dropdown/Dropdown.module.css","../src/components/dropdown/menuKeyboard.ts","../src/internal/scrollAncestors.ts","../src/components/dropdown/dropdownGeometry.ts","../src/components/dropdown/useDropdownPosition.ts","../src/components/dropdown/Dropdown.tsx","../src/components/segmented-control/SegmentedControl.module.css","../src/components/segmented-control/SegmentedControl.tsx","../src/components/example-frame/ExampleFrame.module.css","../src/components/example-frame/ExampleFrame.tsx","../src/components/progress-bar/ProgressBar.module.css","../src/components/progress-bar/ProgressBar.tsx","../src/components/file-upload/FileUpload.module.css","../src/components/file-upload/FileUpload.tsx","../src/components/kbd/Kbd.module.css","../src/components/kbd/Kbd.tsx","../src/components/notification/Notification.module.css","../src/components/notification/Notification.tsx","../src/components/notification/NotificationStore.tsx","../src/components/page-content/PageContent.module.css","../src/components/page-content/PageContent.tsx","../src/components/page-shell/PageShell.module.css","../src/components/page-shell/PageShell.tsx","../src/components/popover/Popover.module.css","../src/components/popover/popoverGeometry.ts","../src/components/popover/usePopoverPosition.ts","../src/components/popover/Popover.tsx","../src/components/progress-circle/ProgressCircle.module.css","../src/components/progress-circle/ProgressCircle.tsx","../src/components/radio/Radio.module.css","../src/components/radio/Radio.tsx","../src/components/tooltip/Tooltip.module.css","../src/components/tooltip/Tooltip.tsx","../src/components/sidebar/Sidebar.module.css","../src/components/sidebar/Sidebar.tsx","../src/components/slider/Slider.module.css","../src/components/slider/Slider.tsx","../src/components/stepper/StepperAlign.module.css","../src/components/stepper/stepperAlignContext.tsx","../src/components/stepper/HorizontalStepper.tsx","../src/components/stepper/Stepper.module.css","../src/components/stepper/VerticalStepper.tsx","../src/components/stepper/Stepper.tsx","../src/components/switch/Switch.module.css","../src/components/switch/Switch.tsx","../src/components/tabs/Tabs.module.css","../src/components/tabs/Tabs.tsx","../src/components/tag/Tag.module.css","../src/components/tag/Tag.tsx","../src/components/textarea/Textarea.module.css","../src/components/textarea/Textarea.tsx","../src/internal/states.ts"],"names":["React","React2","React3","AccordionRoot","jsx","AccordionItem","AccordionHeader","AccordionTrigger","AccordionContent","React4","React5","jsxs","React6","Fragment","React7","React8","BannerRoot","BannerCloseButton","React9","X","React10","React11","React12","React13","React14","React15","React16","React17","CheckboxLabel","React18","CodeBlockRoot","React19","React20","React21","React22","React23","React24","React25","React26","AriaColorPicker","AriaColorField","AriaColorSlider","AriaColorArea","AriaSliderTrack","AriaColorThumb","AriaColorSwatchPicker","AriaColorSwatchPickerItem","AriaColorSwatch","AriaSliderOutput","EyeDropperButton","React27","React28","React29","ChevronRight","React31","React32","Tag","React33","React34","ChevronLeft","ChevronDown","labels","sizeProp","size","React35","React36","React37","React38","React39","React40","React41","Eye","React42","React43","React44","React45","React46","NotificationStackItem","React47","PageContentRoot","PageContentTitle","PageContentDescription","React48","PageShellRoot","PageShellContentArea","layoutEqual","React49","React50","clampProgress","React51","React52","RadioLabel","React53","React54","clamp","React55","Slider","React56","HorizontalStepperItem","React57","VerticalStepperItem","React58","StepperStep","React59","SwitchLabel","React60","isHorizontal","React61","React62"],"mappings":"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","file":"index.js","sourcesContent":["import * as React from \"react\";\n\nimport type { InputSize } from \"@/internal/states\";\n\n/** Размер «контрольной поверхности» (поля, кнопки, селект и т.д.) для каскада в дочерние `Icon`. */\nexport type ControlSurfaceSize = \"xs\" | InputSize;\n\n/** Для Badge / Tag / Kbd: в ярусе только s–xl, `xs` с контекста маппится в `s`. */\nexport function controlSurfaceToInputSize(surface: ControlSurfaceSize): InputSize {\n return surface === \"xs\" ? \"s\" : surface;\n}\n\nconst ControlSizeContext = React.createContext<ControlSurfaceSize | null>(null);\nControlSizeContext.displayName = \"ControlSizeContext\";\n\nexport type ControlSizeProviderProps = {\n value: ControlSurfaceSize;\n children: React.ReactNode;\n};\n\nexport function ControlSizeProvider({ value, children }: ControlSizeProviderProps) {\n return <ControlSizeContext.Provider value={value}>{children}</ControlSizeContext.Provider>;\n}\n\nControlSizeProvider.displayName = \"ControlSizeProvider\";\n\n/** Для `Icon`: если `size` не передан явно, берётся из ближайшего контрола. */\nexport function useOptionalControlSize(): ControlSurfaceSize | undefined {\n return React.useContext(ControlSizeContext) ?? undefined;\n}\n","import * as React from \"react\";\n\n/**\n * Factory for creating typed React Context + a guard hook that throws\n * a descriptive error when used outside the provider.\n * Standardizes the composable-component pattern across prime-ui-kit.\n *\n * @example\n * const [InputProvider, useInputContext] = createComponentContext<InputContextValue>(\"Input\");\n */\nexport function createComponentContext<T>(displayName: string) {\n const Ctx = React.createContext<T | null>(null);\n Ctx.displayName = `${displayName}Context`;\n\n function useComponentContext(): T {\n const value = React.useContext(Ctx);\n if (value === null) {\n throw new Error(\n `[prime-ui-kit] \\`${displayName}\\` sub-component must be used inside \\`${displayName}.Root\\`.`,\n );\n }\n return value;\n }\n\n return [Ctx.Provider, useComponentContext] as const;\n}\n","export function cx(...classNames: Array<string | false | null | undefined>): string {\n return classNames.filter(Boolean).join(\" \");\n}\n",".root {\n display: flex;\n flex-direction: column;\n width: 100%;\n max-width: 100%;\n min-width: 0;\n box-sizing: border-box;\n border-radius: var(--prime-sys-size-control-m-radius);\n border: var(--prime-sys-unit-1px) solid var(--prime-sys-color-border-subtle);\n background: var(--prime-sys-color-surface-elevated);\n overflow: hidden;\n --prime-accordion-text: var(--prime-sys-size-control-m-text);\n --prime-accordion-icon: var(--prime-sys-size-control-m-icon);\n --prime-accordion-supportText: var(--prime-sys-size-control-m-supportText);\n --prime-accordion-gap: var(--prime-sys-size-control-m-gap);\n --prime-accordion-col-gap: var(--prime-sys-size-control-m-inputPaddingX);\n --prime-accordion-padding-x: var(--prime-sys-size-control-m-buttonPaddingX);\n --prime-accordion-padding-y: var(--prime-sys-size-control-m-buttonPaddingY);\n --prime-accordion-radius: var(--prime-sys-size-control-m-radius);\n}\n\n.root[data-size=\"s\"] {\n --prime-accordion-text: var(--prime-sys-size-control-s-text);\n --prime-accordion-icon: var(--prime-sys-size-control-s-icon);\n --prime-accordion-supportText: var(--prime-sys-size-control-s-supportText);\n --prime-accordion-gap: var(--prime-sys-size-control-s-gap);\n --prime-accordion-col-gap: var(--prime-sys-size-control-s-inputPaddingX);\n --prime-accordion-padding-x: var(--prime-sys-size-control-s-buttonPaddingX);\n --prime-accordion-padding-y: var(--prime-sys-size-control-s-buttonPaddingY);\n --prime-accordion-radius: var(--prime-sys-size-control-s-radius);\n}\n\n.root[data-size=\"m\"] {\n --prime-accordion-text: var(--prime-sys-size-control-m-text);\n --prime-accordion-icon: var(--prime-sys-size-control-m-icon);\n --prime-accordion-supportText: var(--prime-sys-size-control-m-supportText);\n --prime-accordion-gap: var(--prime-sys-size-control-m-gap);\n --prime-accordion-col-gap: var(--prime-sys-size-control-m-inputPaddingX);\n --prime-accordion-padding-x: var(--prime-sys-size-control-m-buttonPaddingX);\n --prime-accordion-padding-y: var(--prime-sys-size-control-m-buttonPaddingY);\n --prime-accordion-radius: var(--prime-sys-size-control-m-radius);\n}\n\n.root[data-size=\"l\"] {\n --prime-accordion-text: var(--prime-sys-size-control-l-text);\n --prime-accordion-icon: var(--prime-sys-size-control-l-icon);\n --prime-accordion-supportText: var(--prime-sys-size-control-l-supportText);\n --prime-accordion-gap: var(--prime-sys-size-control-l-gap);\n --prime-accordion-col-gap: var(--prime-sys-size-control-l-inputPaddingX);\n --prime-accordion-padding-x: var(--prime-sys-size-control-l-buttonPaddingX);\n --prime-accordion-padding-y: var(--prime-sys-size-control-l-buttonPaddingY);\n --prime-accordion-radius: var(--prime-sys-size-control-l-radius);\n}\n\n.root[data-size=\"xl\"] {\n --prime-accordion-text: var(--prime-sys-size-control-xl-text);\n --prime-accordion-icon: var(--prime-sys-size-control-xl-icon);\n --prime-accordion-supportText: var(--prime-sys-size-control-xl-supportText);\n --prime-accordion-gap: var(--prime-sys-size-control-xl-gap);\n --prime-accordion-col-gap: var(--prime-sys-size-control-xl-inputPaddingX);\n --prime-accordion-padding-x: var(--prime-sys-size-control-xl-buttonPaddingX);\n --prime-accordion-padding-y: var(--prime-sys-size-control-xl-buttonPaddingY);\n --prime-accordion-radius: var(--prime-sys-size-control-xl-radius);\n}\n\n.item {\n display: flex;\n flex-direction: column;\n min-width: 0;\n background: transparent;\n border-bottom: var(--prime-sys-unit-1px) solid var(--prime-sys-color-border-subtle);\n transition:\n background-color var(--prime-sys-motion-fast) var(--prime-sys-motion-standard),\n border-color var(--prime-sys-motion-fast) var(--prime-sys-motion-standard);\n}\n\n.item:last-child {\n border-bottom: none;\n}\n\n.item:hover {\n background: var(--prime-sys-color-surface-accentSoft);\n}\n\n.item:focus-within {\n background: var(--prime-sys-color-surface-accentSoft);\n}\n\n.item[data-state=\"open\"] {\n background: var(--prime-sys-color-surface-accentSoft);\n}\n\n.item[data-disabled] {\n opacity: 0.55;\n pointer-events: none;\n}\n\n.header {\n margin: 0;\n display: flex;\n min-width: 0;\n}\n\n.trigger {\n display: flex;\n align-items: center;\n gap: 0;\n width: 100%;\n max-width: 100%;\n min-width: 0;\n box-sizing: border-box;\n padding-inline: var(--prime-accordion-padding-x);\n padding-block: var(--prime-accordion-padding-y);\n border: none;\n font: inherit;\n font-size: var(--prime-accordion-text);\n font-weight: var(--prime-sys-typography-weight-medium);\n color: var(--prime-sys-color-content-primary);\n text-align: left;\n background: transparent;\n cursor: pointer;\n outline: none;\n}\n\n.trigger:focus-visible {\n box-shadow: var(--prime-sys-elevation-shadow-buttonFocus);\n}\n\n.icon {\n display: inline-flex;\n flex-shrink: 0;\n width: var(--prime-accordion-icon);\n height: var(--prime-accordion-icon);\n margin-inline-end: var(--prime-accordion-col-gap);\n color: var(--prime-sys-color-content-secondary);\n}\n\n.arrow {\n display: inline-flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n margin-inline-start: auto;\n padding-inline-start: var(--prime-accordion-col-gap);\n}\n\n.arrowIcon {\n width: var(--prime-accordion-icon);\n height: var(--prime-accordion-icon);\n color: var(--prime-sys-color-content-secondary);\n transition:\n color var(--prime-sys-motion-fast) var(--prime-sys-motion-standard),\n transform var(--prime-sys-motion-fast) var(--prime-sys-motion-standard);\n}\n\n.item:hover .arrowIcon {\n color: var(--prime-sys-color-content-primary);\n}\n\n.arrowIconClosed {\n display: block;\n}\n\n.arrowIconRotate {\n display: block;\n}\n\n.arrowIconOpen {\n display: none;\n color: var(--prime-sys-color-content-primary);\n}\n\n.item[data-state=\"open\"] .arrowIconRotate {\n transform: rotate(180deg);\n color: var(--prime-sys-color-content-primary);\n}\n\n.item[data-state=\"open\"] .arrowIconClosed {\n display: none;\n}\n\n.item[data-state=\"open\"] .arrowIconOpen {\n display: block;\n}\n\n.content {\n max-height: 0;\n width: 100%;\n min-width: 0;\n overflow: hidden;\n opacity: 0;\n visibility: hidden;\n transition:\n max-height var(--prime-sys-motion-medium) var(--prime-sys-motion-standard),\n opacity var(--prime-sys-motion-fast) var(--prime-sys-motion-standard),\n visibility 0s linear var(--prime-sys-motion-fast);\n}\n\n.content[data-state=\"open\"] {\n max-height: var(--prime-accordion-content-height, 0);\n opacity: 1;\n visibility: visible;\n transition-delay: 0s;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .content {\n transition: none;\n }\n}\n\n.contentInner {\n display: flex;\n flex-direction: column;\n width: 100%;\n min-width: 0;\n padding-top: var(--prime-accordion-col-gap);\n padding-bottom: var(--prime-accordion-padding-y);\n padding-inline: var(--prime-accordion-padding-x);\n font-size: var(--prime-accordion-supportText);\n line-height: var(--prime-sys-typography-body-lineHeight);\n color: var(--prime-sys-color-content-secondary);\n overflow-wrap: anywhere;\n word-break: break-word;\n}\n\n.root[data-layout=\"separate\"] {\n gap: var(--prime-sys-spacing-x3);\n border: none;\n background: transparent;\n overflow: visible;\n}\n\n.root[data-layout=\"separate\"] .item {\n border: var(--prime-sys-unit-1px) solid var(--prime-sys-color-border-subtle);\n border-radius: var(--prime-accordion-radius);\n}\n","import { ChevronDown } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { ControlSizeProvider } from \"@/internal/ControlSizeContext\";\nimport { createComponentContext } from \"@/internal/context\";\nimport { cx } from \"@/internal/cx\";\nimport type { AccordionSize } from \"@/internal/states\";\n\nimport styles from \"./Accordion.module.css\";\n\nexport type AccordionType = \"single\" | \"multiple\";\n\nexport type { AccordionSize };\n\nexport type AccordionRootProps = React.HTMLAttributes<HTMLDivElement> & {\n type?: AccordionType;\n value?: string | string[];\n defaultValue?: string | string[];\n onValueChange?: (value: string | string[]) => void;\n /** Только для `type=\"single\"`. Если `false`, в одиночном режиме нельзя закрыть открытый пункт. По умолчанию `true`. */\n collapsible?: boolean;\n /** Размер триггера, иконок и отступов контента. По умолчанию `m`. */\n size?: AccordionSize;\n /** Групповой список без зазоров (`grouped`) или отдельные карточки (`separate`). */\n layout?: \"grouped\" | \"separate\";\n};\n\ntype AccordionContextValue = { size: AccordionSize };\n\nconst [AccordionProvider, useAccordionContext] =\n createComponentContext<AccordionContextValue>(\"Accordion\");\n\ntype AccordionStateContextValue = {\n type: AccordionType;\n collapsible: boolean;\n openValues: string[];\n toggleItem: (value: string, disabled: boolean) => void;\n};\n\nconst [AccordionStateProvider, useAccordionState] =\n createComponentContext<AccordionStateContextValue>(\"Accordion\");\n\ntype AccordionItemContextValue = {\n value: string;\n disabled: boolean;\n open: boolean;\n triggerId: string;\n contentId: string;\n};\n\nconst [AccordionItemProvider, useAccordionItem] =\n createComponentContext<AccordionItemContextValue>(\"Accordion\");\n\nexport type AccordionItemProps = React.HTMLAttributes<HTMLDivElement> & {\n value: string;\n disabled?: boolean;\n};\n\nexport type AccordionHeaderProps = React.HTMLAttributes<HTMLHeadingElement>;\n\nexport type AccordionTriggerProps = React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport type AccordionContentProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport type AccordionIconProps<T extends React.ElementType = \"div\"> = {\n as?: T;\n className?: string;\n children?: React.ReactNode;\n} & Omit<React.ComponentPropsWithoutRef<T>, \"as\" | \"className\">;\n\nexport type AccordionArrowProps = React.HTMLAttributes<HTMLSpanElement> & {\n openIcon?: React.ElementType<{ className?: string; strokeWidth?: number | string }>;\n closeIcon?: React.ElementType<{ className?: string; strokeWidth?: number | string }>;\n};\n\nfunction singleControlledValue(value: string | string[] | undefined): string | undefined {\n if (value === undefined) return undefined;\n if (Array.isArray(value)) return value[0] ?? \"\";\n return value;\n}\n\nfunction singleDefaultValue(defaultValue: string | string[] | undefined): string | undefined {\n if (defaultValue === undefined) return undefined;\n if (Array.isArray(defaultValue)) return defaultValue[0] ?? \"\";\n return defaultValue;\n}\n\nfunction multipleControlledValue(value: string | string[] | undefined): string[] | undefined {\n if (value === undefined) return undefined;\n if (Array.isArray(value)) return value;\n return value === \"\" ? [] : [value];\n}\n\nfunction multipleDefaultValue(defaultValue: string | string[] | undefined): string[] | undefined {\n if (defaultValue === undefined) return undefined;\n if (Array.isArray(defaultValue)) return defaultValue;\n return defaultValue === \"\" ? [] : [defaultValue];\n}\n\nfunction normalizeValues(values: string[]): string[] {\n return Array.from(new Set(values.filter((value) => value !== \"\")));\n}\n\nconst AccordionRoot = React.forwardRef<HTMLDivElement, AccordionRootProps>(function AccordionRoot(\n {\n type = \"single\",\n value,\n defaultValue,\n onValueChange,\n collapsible = true,\n size = \"m\",\n layout = \"grouped\",\n className,\n children,\n ...rest\n },\n ref,\n) {\n const contextValue = React.useMemo(() => ({ size }), [size]);\n const isMultiple = type === \"multiple\";\n const isControlled = value !== undefined;\n\n const initialUncontrolledValues = React.useMemo(() => {\n if (isMultiple) return normalizeValues(multipleDefaultValue(defaultValue) ?? []);\n const initialSingle = singleDefaultValue(defaultValue);\n return initialSingle ? [initialSingle] : [];\n }, [defaultValue, isMultiple]);\n\n const [uncontrolledValues, setUncontrolledValues] =\n React.useState<string[]>(initialUncontrolledValues);\n\n const controlledValues = React.useMemo(() => {\n if (!isControlled) return undefined;\n if (isMultiple) return normalizeValues(multipleControlledValue(value) ?? []);\n const singleValue = singleControlledValue(value);\n return singleValue ? [singleValue] : [];\n }, [isControlled, isMultiple, value]);\n\n const openValues = controlledValues ?? uncontrolledValues;\n\n const updateValues = React.useCallback(\n (nextValues: string[]) => {\n if (!isControlled) {\n setUncontrolledValues(nextValues);\n }\n\n if (isMultiple) {\n onValueChange?.(nextValues);\n } else {\n onValueChange?.(nextValues[0] ?? \"\");\n }\n },\n [isControlled, isMultiple, onValueChange],\n );\n\n const toggleItem = React.useCallback(\n (itemValue: string, disabledItem: boolean) => {\n if (disabledItem) return;\n\n if (isMultiple) {\n if (openValues.includes(itemValue)) {\n updateValues(openValues.filter((valueEntry) => valueEntry !== itemValue));\n return;\n }\n\n updateValues([...openValues, itemValue]);\n return;\n }\n\n const currentValue = openValues[0];\n if (currentValue === itemValue) {\n if (!collapsible) return;\n updateValues([]);\n return;\n }\n\n updateValues([itemValue]);\n },\n [collapsible, isMultiple, openValues, updateValues],\n );\n\n const stateContextValue = React.useMemo<AccordionStateContextValue>(\n () => ({\n type,\n collapsible,\n openValues,\n toggleItem,\n }),\n [collapsible, openValues, toggleItem, type],\n );\n\n return (\n <AccordionStateProvider value={stateContextValue}>\n <AccordionProvider value={contextValue}>\n <div\n ref={ref}\n className={cx(styles.root, className)}\n data-size={size}\n data-type={type}\n data-layout={layout}\n {...rest}\n >\n {children}\n </div>\n </AccordionProvider>\n </AccordionStateProvider>\n );\n});\nAccordionRoot.displayName = \"Accordion.Root\";\n\nconst AccordionItem = React.forwardRef<HTMLDivElement, AccordionItemProps>(function AccordionItem(\n { className, value, disabled = false, children, ...rest },\n ref,\n) {\n const state = useAccordionState();\n const open = state.openValues.includes(value);\n const reactId = React.useId();\n const triggerId = `prime-accordion-trigger-${reactId}`;\n const contentId = `prime-accordion-content-${reactId}`;\n\n const itemContextValue = React.useMemo<AccordionItemContextValue>(\n () => ({\n value,\n disabled,\n open,\n triggerId,\n contentId,\n }),\n [contentId, disabled, open, triggerId, value],\n );\n\n return (\n <AccordionItemProvider value={itemContextValue}>\n <div\n ref={ref}\n className={cx(styles.item, className)}\n data-state={open ? \"open\" : \"closed\"}\n data-disabled={disabled ? \"\" : undefined}\n {...rest}\n >\n {children}\n </div>\n </AccordionItemProvider>\n );\n});\nAccordionItem.displayName = \"Accordion.Item\";\n\nconst AccordionHeader = React.forwardRef<HTMLHeadingElement, AccordionHeaderProps>(\n function AccordionHeader({ className, ...rest }, ref) {\n return <h3 ref={ref} className={cx(styles.header, className)} {...rest} />;\n },\n);\nAccordionHeader.displayName = \"Accordion.Header\";\n\nconst AccordionTrigger = React.forwardRef<HTMLButtonElement, AccordionTriggerProps>(\n function AccordionTrigger({ className, children, ...rest }, ref) {\n const { size } = useAccordionContext();\n const state = useAccordionState();\n const item = useAccordionItem();\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n rest.onClick?.(event);\n if (event.defaultPrevented) return;\n state.toggleItem(item.value, item.disabled);\n };\n\n return (\n <button\n ref={ref}\n type={rest.type ?? \"button\"}\n {...rest}\n id={item.triggerId}\n disabled={item.disabled}\n aria-controls={item.contentId}\n aria-expanded={item.open}\n data-state={item.open ? \"open\" : \"closed\"}\n data-disabled={item.disabled ? \"\" : undefined}\n className={cx(styles.trigger, className)}\n onClick={handleClick}\n >\n <ControlSizeProvider value={size}>{children}</ControlSizeProvider>\n </button>\n );\n },\n);\nAccordionTrigger.displayName = \"Accordion.Trigger\";\n\nconst AccordionContent = React.forwardRef<HTMLDivElement, AccordionContentProps>(\n function AccordionContent({ className, children, style, ...rest }, ref) {\n const { size } = useAccordionContext();\n const item = useAccordionItem();\n const innerRef = React.useRef<HTMLDivElement | null>(null);\n const [contentHeight, setContentHeight] = React.useState(0);\n\n React.useLayoutEffect(() => {\n if (!innerRef.current) return;\n const target = innerRef.current;\n setContentHeight(target.scrollHeight);\n\n if (typeof ResizeObserver === \"undefined\") return;\n const observer = new ResizeObserver(() => {\n setContentHeight(target.scrollHeight);\n });\n observer.observe(target);\n return () => observer.disconnect();\n }, []);\n\n const combinedStyle = React.useMemo<React.CSSProperties>(\n () => ({\n ...style,\n \"--prime-accordion-content-height\": `${contentHeight}px`,\n }),\n [contentHeight, style],\n );\n\n const setRefs = (node: HTMLDivElement | null) => {\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n };\n\n return (\n <section\n ref={setRefs}\n id={item.contentId}\n aria-labelledby={item.triggerId}\n aria-hidden={!item.open}\n data-state={item.open ? \"open\" : \"closed\"}\n className={styles.content}\n style={combinedStyle}\n {...rest}\n >\n <div ref={innerRef} className={cx(styles.contentInner, className)}>\n <ControlSizeProvider value={size}>{children}</ControlSizeProvider>\n </div>\n </section>\n );\n },\n);\nAccordionContent.displayName = \"Accordion.Content\";\n\nfunction AccordionIcon<T extends React.ElementType = \"div\">({\n as,\n className,\n children,\n ...rest\n}: AccordionIconProps<T>) {\n const Component = (as ?? \"div\") as React.ElementType;\n\n return (\n <Component className={cx(styles.icon, className)} {...rest}>\n {children}\n </Component>\n );\n}\nAccordionIcon.displayName = \"Accordion.Icon\";\n\nfunction AccordionArrow({\n className,\n openIcon: OpenIcon = ChevronDown,\n closeIcon: CloseIcon,\n ...rest\n}: AccordionArrowProps) {\n const isRotatingChevron = CloseIcon == null || CloseIcon === OpenIcon;\n\n if (isRotatingChevron) {\n return (\n <span className={cx(styles.arrow, className)} {...rest}>\n <OpenIcon\n aria-hidden\n className={cx(styles.arrowIcon, styles.arrowIconRotate)}\n strokeWidth={1.75}\n />\n </span>\n );\n }\n\n return (\n <span className={cx(styles.arrow, className)} {...rest}>\n <OpenIcon\n aria-hidden\n className={cx(styles.arrowIcon, styles.arrowIconClosed)}\n strokeWidth={1.75}\n />\n <CloseIcon\n aria-hidden\n className={cx(styles.arrowIcon, styles.arrowIconOpen)}\n strokeWidth={1.75}\n />\n </span>\n );\n}\nAccordionArrow.displayName = \"Accordion.Arrow\";\n\nexport const Accordion = {\n Root: AccordionRoot,\n Header: AccordionHeader,\n Item: AccordionItem,\n Trigger: AccordionTrigger,\n Icon: AccordionIcon,\n Arrow: AccordionArrow,\n Content: AccordionContent,\n};\n","type DataPrimitive = string | number | boolean | undefined;\n\ntype DataAttributesInput = Record<string, DataPrimitive>;\ntype DataAttributesOutput = Record<string, string | undefined>;\n\nexport function toDataAttributes(input: DataAttributesInput): DataAttributesOutput {\n const result: DataAttributesOutput = {};\n\n for (const [key, value] of Object.entries(input)) {\n if (value === undefined) {\n continue;\n }\n\n const attributeName = `data-${key}`;\n result[attributeName] = typeof value === \"boolean\" ? String(value) : `${value}`;\n }\n\n return result;\n}\n",".root {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n background: var(--prime-sys-color-surface-accentSoft);\n overflow: hidden;\n flex-shrink: 0;\n}\n\n.root[data-size=\"s\"] {\n width: var(--prime-sys-size-avatar-s-size);\n height: var(--prime-sys-size-avatar-s-size);\n font-size: var(--prime-sys-size-avatar-s-text);\n border-radius: var(--prime-sys-size-avatar-s-radius);\n}\n\n.root[data-size=\"m\"] {\n width: var(--prime-sys-size-avatar-m-size);\n height: var(--prime-sys-size-avatar-m-size);\n font-size: var(--prime-sys-size-avatar-m-text);\n border-radius: var(--prime-sys-size-avatar-m-radius);\n}\n\n.root[data-size=\"l\"] {\n width: var(--prime-sys-size-avatar-l-size);\n height: var(--prime-sys-size-avatar-l-size);\n font-size: var(--prime-sys-size-avatar-l-text);\n border-radius: var(--prime-sys-size-avatar-l-radius);\n}\n\n.root[data-size=\"xl\"] {\n width: var(--prime-sys-size-avatar-xl-size);\n height: var(--prime-sys-size-avatar-xl-size);\n font-size: var(--prime-sys-size-avatar-xl-text);\n border-radius: var(--prime-sys-size-avatar-xl-radius);\n}\n\n.root[data-size=\"2xl\"] {\n width: var(--prime-sys-size-avatar-2xl-size);\n height: var(--prime-sys-size-avatar-2xl-size);\n font-size: var(--prime-sys-size-avatar-2xl-text);\n border-radius: var(--prime-sys-size-avatar-2xl-radius);\n}\n\n.root[data-size=\"3xl\"] {\n width: var(--prime-sys-size-avatar-3xl-size);\n height: var(--prime-sys-size-avatar-3xl-size);\n font-size: var(--prime-sys-size-avatar-3xl-text);\n border-radius: var(--prime-sys-size-avatar-3xl-radius);\n}\n\n.root[data-size=\"4xl\"] {\n width: var(--prime-sys-size-avatar-4xl-size);\n height: var(--prime-sys-size-avatar-4xl-size);\n font-size: var(--prime-sys-size-avatar-4xl-text);\n border-radius: var(--prime-sys-size-avatar-4xl-radius);\n}\n\n.root[data-size=\"5xl\"] {\n width: var(--prime-sys-size-avatar-5xl-size);\n height: var(--prime-sys-size-avatar-5xl-size);\n font-size: var(--prime-sys-size-avatar-5xl-text);\n border-radius: var(--prime-sys-size-avatar-5xl-radius);\n}\n\n.root[data-size=\"6xl\"] {\n width: var(--prime-sys-size-avatar-6xl-size);\n height: var(--prime-sys-size-avatar-6xl-size);\n font-size: var(--prime-sys-size-avatar-6xl-text);\n border-radius: var(--prime-sys-size-avatar-6xl-radius);\n}\n\n.image {\n position: absolute;\n inset: 0;\n z-index: 1;\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n.image[data-status=\"loading\"] {\n opacity: 0;\n}\n\n.image[data-status=\"loaded\"] {\n opacity: 1;\n}\n\n.image[data-status=\"error\"] {\n display: none;\n}\n\n.fallback {\n position: absolute;\n inset: 0;\n z-index: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n font-weight: var(--prime-sys-typography-weight-medium);\n color: var(--prime-sys-color-content-secondary);\n font-size: inherit;\n user-select: none;\n text-align: center;\n}\n\n/* Avatar.Group.Root — горизонтальный ряд: слева направо, последний в DOM перекрывает предыдущие */\n.groupRoot {\n display: inline-flex;\n flex-direction: row;\n align-items: center;\n}\n\n.groupRoot > * {\n position: relative;\n flex-shrink: 0;\n box-sizing: border-box;\n border: var(--prime-sys-unit-2px) solid var(--prime-sys-color-surface-raised);\n border-radius: var(--prime-sys-shape-radius-round);\n}\n\n.groupRoot[data-size=\"s\"] > * + * {\n margin-inline-start: var(--prime-sys-unit-neg-0p56rem);\n}\n\n.groupRoot[data-size=\"m\"] > * + * {\n margin-inline-start: var(--prime-sys-unit-neg-0p7rem);\n}\n\n.groupRoot[data-size=\"l\"] > * + * {\n margin-inline-start: var(--prime-sys-unit-neg-0p84rem);\n}\n\n.groupRoot[data-size=\"xl\"] > * + * {\n margin-inline-start: var(--prime-sys-unit-neg-0p98rem);\n}\n\n.groupRoot[data-size=\"2xl\"] > * + * {\n margin-inline-start: var(--prime-sys-unit-neg-1p12rem);\n}\n\n.groupRoot[data-size=\"3xl\"] > * + * {\n margin-inline-start: var(--prime-sys-unit-neg-1p26rem);\n}\n\n.groupRoot[data-size=\"4xl\"] > * + * {\n margin-inline-start: var(--prime-sys-unit-neg-1p4rem);\n}\n\n.groupRoot[data-size=\"5xl\"] > * + * {\n margin-inline-start: var(--prime-sys-unit-neg-1p54rem);\n}\n\n.groupRoot[data-size=\"6xl\"] > * + * {\n margin-inline-start: var(--prime-sys-unit-neg-1p68rem);\n}\n\n/* Слот +N: тот же диаметр и типографика, что у Avatar.Root этого размера */\n.groupOverflow {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n background: var(--prime-sys-color-surface-accentSoft);\n color: var(--prime-sys-color-content-secondary);\n font-weight: var(--prime-sys-typography-weight-medium);\n user-select: none;\n text-align: center;\n}\n\n.groupOverflow[data-size=\"s\"] {\n width: var(--prime-sys-size-avatar-s-size);\n height: var(--prime-sys-size-avatar-s-size);\n font-size: var(--prime-sys-size-avatar-s-text);\n}\n\n.groupOverflow[data-size=\"m\"] {\n width: var(--prime-sys-size-avatar-m-size);\n height: var(--prime-sys-size-avatar-m-size);\n font-size: var(--prime-sys-size-avatar-m-text);\n}\n\n.groupOverflow[data-size=\"l\"] {\n width: var(--prime-sys-size-avatar-l-size);\n height: var(--prime-sys-size-avatar-l-size);\n font-size: var(--prime-sys-size-avatar-l-text);\n}\n\n.groupOverflow[data-size=\"xl\"] {\n width: var(--prime-sys-size-avatar-xl-size);\n height: var(--prime-sys-size-avatar-xl-size);\n font-size: var(--prime-sys-size-avatar-xl-text);\n}\n\n.groupOverflow[data-size=\"2xl\"] {\n width: var(--prime-sys-size-avatar-2xl-size);\n height: var(--prime-sys-size-avatar-2xl-size);\n font-size: var(--prime-sys-size-avatar-2xl-text);\n}\n\n.groupOverflow[data-size=\"3xl\"] {\n width: var(--prime-sys-size-avatar-3xl-size);\n height: var(--prime-sys-size-avatar-3xl-size);\n font-size: var(--prime-sys-size-avatar-3xl-text);\n}\n\n.groupOverflow[data-size=\"4xl\"] {\n width: var(--prime-sys-size-avatar-4xl-size);\n height: var(--prime-sys-size-avatar-4xl-size);\n font-size: var(--prime-sys-size-avatar-4xl-text);\n}\n\n.groupOverflow[data-size=\"5xl\"] {\n width: var(--prime-sys-size-avatar-5xl-size);\n height: var(--prime-sys-size-avatar-5xl-size);\n font-size: var(--prime-sys-size-avatar-5xl-text);\n}\n\n.groupOverflow[data-size=\"6xl\"] {\n width: var(--prime-sys-size-avatar-6xl-size);\n height: var(--prime-sys-size-avatar-6xl-size);\n font-size: var(--prime-sys-size-avatar-6xl-text);\n}\n","import * as React from \"react\";\n\nimport { createComponentContext } from \"@/internal/context\";\nimport { cx } from \"@/internal/cx\";\nimport { toDataAttributes } from \"@/internal/data-attributes\";\n\nimport styles from \"./Avatar.module.css\";\n\nexport type AvatarSize = \"s\" | \"m\" | \"l\" | \"xl\" | \"2xl\" | \"3xl\" | \"4xl\" | \"5xl\" | \"6xl\";\n\nexport type AvatarImageStatus = \"idle\" | \"loading\" | \"loaded\" | \"error\";\n\ntype AvatarContextValue = {\n size: AvatarSize;\n imageStatus: AvatarImageStatus;\n setImageStatus: React.Dispatch<React.SetStateAction<AvatarImageStatus>>;\n};\n\nconst [AvatarProvider, useAvatarContext] = createComponentContext<AvatarContextValue>(\"Avatar\");\n\nexport type AvatarRootProps = {\n size?: AvatarSize;\n className?: string;\n children?: React.ReactNode;\n} & React.HTMLAttributes<HTMLDivElement>;\n\nconst AvatarRoot = React.forwardRef<HTMLDivElement, AvatarRootProps>(\n ({ size = \"m\", className, children, ...rest }, ref) => {\n const [imageStatus, setImageStatus] = React.useState<AvatarImageStatus>(\"idle\");\n\n const value = React.useMemo(\n () => ({\n size,\n imageStatus,\n setImageStatus,\n }),\n [size, imageStatus],\n );\n\n return (\n <AvatarProvider value={value}>\n <div\n ref={ref}\n className={cx(styles.root, className)}\n {...toDataAttributes({ size })}\n {...rest}\n >\n {children}\n </div>\n </AvatarProvider>\n );\n },\n);\n\nAvatarRoot.displayName = \"AvatarRoot\";\n\nexport type AvatarImageProps = {\n src: string;\n alt?: string;\n className?: string;\n} & Omit<React.ImgHTMLAttributes<HTMLImageElement>, \"src\" | \"alt\">;\n\ntype AvatarImageInnerProps = AvatarImageProps & {\n setImageStatus: React.Dispatch<React.SetStateAction<AvatarImageStatus>>;\n};\n\nconst AvatarImageInner = React.forwardRef<HTMLImageElement, AvatarImageInnerProps>(\n ({ setImageStatus, src, alt = \"\", className, onLoad, onError, ...rest }, ref) => {\n const [status, setStatus] = React.useState<\"loading\" | \"loaded\" | \"error\">(\"loading\");\n\n React.useLayoutEffect(() => {\n setImageStatus(\"loading\");\n return () => {\n setImageStatus(\"idle\");\n };\n }, [setImageStatus]);\n\n const handleLoad = React.useCallback(\n (event: React.SyntheticEvent<HTMLImageElement>) => {\n setStatus(\"loaded\");\n setImageStatus(\"loaded\");\n onLoad?.(event);\n },\n [onLoad, setImageStatus],\n );\n\n const handleError = React.useCallback(\n (event: React.SyntheticEvent<HTMLImageElement>) => {\n setStatus(\"error\");\n setImageStatus(\"error\");\n onError?.(event);\n },\n [onError, setImageStatus],\n );\n\n return (\n <img\n ref={ref}\n src={src}\n alt={alt}\n className={cx(styles.image, className)}\n onLoad={handleLoad}\n onError={handleError}\n {...toDataAttributes({ status })}\n {...rest}\n />\n );\n },\n);\n\nAvatarImageInner.displayName = \"AvatarImageInner\";\n\nconst AvatarImage = React.forwardRef<HTMLImageElement, AvatarImageProps>((props, ref) => {\n const { setImageStatus } = useAvatarContext();\n return <AvatarImageInner key={props.src} ref={ref} setImageStatus={setImageStatus} {...props} />;\n});\n\nAvatarImage.displayName = \"AvatarImage\";\n\nexport type AvatarFallbackProps = {\n children?: React.ReactNode;\n className?: string;\n} & React.HTMLAttributes<HTMLSpanElement>;\n\nfunction AvatarFallback({ children, className, ...rest }: AvatarFallbackProps) {\n const { imageStatus } = useAvatarContext();\n\n return (\n <span\n className={cx(styles.fallback, className)}\n aria-hidden={imageStatus === \"loaded\" ? true : undefined}\n {...rest}\n >\n {children}\n </span>\n );\n}\n\nAvatarFallback.displayName = \"AvatarFallback\";\n\nconst AVATAR_ROOT_DISPLAY = \"AvatarRoot\";\nconst AVATAR_GROUP_OVERFLOW_DISPLAY = \"AvatarGroupOverflow\";\n\nfunction getComponentDisplayName(type: unknown): string | undefined {\n if (typeof type === \"function\" || (typeof type === \"object\" && type !== null)) {\n return (type as { displayName?: string }).displayName;\n }\n return undefined;\n}\n\nfunction isAvatarRootElement(child: React.ReactElement): boolean {\n return child.type === AvatarRoot || getComponentDisplayName(child.type) === AVATAR_ROOT_DISPLAY;\n}\n\nexport type AvatarGroupOverflowProps = {\n size?: AvatarSize;\n className?: string;\n children?: React.ReactNode;\n} & React.HTMLAttributes<HTMLDivElement>;\n\nconst AvatarGroupOverflow = React.forwardRef<HTMLDivElement, AvatarGroupOverflowProps>(\n ({ size = \"m\", className, children, ...rest }, ref) => (\n <div\n ref={ref}\n className={cx(styles.groupOverflow, className)}\n {...toDataAttributes({ size })}\n {...rest}\n >\n {children}\n </div>\n ),\n);\n\nAvatarGroupOverflow.displayName = AVATAR_GROUP_OVERFLOW_DISPLAY;\n\nfunction isAvatarGroupOverflowElement(child: React.ReactElement): boolean {\n return (\n child.type === AvatarGroupOverflow ||\n getComponentDisplayName(child.type) === AVATAR_GROUP_OVERFLOW_DISPLAY\n );\n}\n\nfunction injectAvatarGroupSize(children: React.ReactNode, size: AvatarSize): React.ReactNode {\n return React.Children.map(children, (child) => {\n if (!React.isValidElement(child)) {\n return child;\n }\n if (child.type === React.Fragment) {\n return React.cloneElement(\n child,\n {},\n injectAvatarGroupSize((child.props as { children?: React.ReactNode }).children, size),\n );\n }\n if (isAvatarRootElement(child)) {\n const props = child.props as AvatarRootProps;\n if (props.size !== undefined) {\n return child;\n }\n return React.cloneElement(child, { size } as Partial<AvatarRootProps>);\n }\n if (isAvatarGroupOverflowElement(child)) {\n const props = child.props as AvatarGroupOverflowProps;\n if (props.size !== undefined) {\n return child;\n }\n return React.cloneElement(child, { size } as Partial<AvatarGroupOverflowProps>);\n }\n return child;\n });\n}\n\nexport type AvatarGroupRootProps = {\n size?: AvatarSize;\n className?: string;\n children?: React.ReactNode;\n} & React.HTMLAttributes<HTMLDivElement>;\n\nconst AvatarGroupRoot = React.forwardRef<HTMLDivElement, AvatarGroupRootProps>(\n ({ size = \"m\", className, children, ...rest }, ref) => (\n <div\n ref={ref}\n className={cx(styles.groupRoot, className)}\n {...toDataAttributes({ size })}\n {...rest}\n >\n {injectAvatarGroupSize(children, size)}\n </div>\n ),\n);\n\nAvatarGroupRoot.displayName = \"AvatarGroupRoot\";\n\nexport const Avatar = {\n Root: AvatarRoot,\n Image: AvatarImage,\n Fallback: AvatarFallback,\n Group: {\n Root: AvatarGroupRoot,\n Overflow: AvatarGroupOverflow,\n },\n};\n",".root {\n display: inline-flex;\n align-items: center;\n gap: var(--prime-sys-size-badge-m-gap);\n padding-block: var(--prime-sys-size-badge-m-paddingY);\n padding-inline: var(--prime-sys-size-badge-m-paddingX);\n font-size: var(--prime-sys-size-badge-m-text);\n line-height: 1;\n border-radius: var(--prime-sys-size-badge-m-radius);\n font-weight: var(--prime-sys-typography-weight-medium);\n white-space: nowrap;\n border: var(--prime-sys-unit-1px) solid transparent;\n box-sizing: border-box;\n}\n\n.root[data-size=\"s\"] {\n gap: var(--prime-sys-size-badge-s-gap);\n padding-block: var(--prime-sys-size-badge-s-paddingY);\n padding-inline: var(--prime-sys-size-badge-s-paddingX);\n font-size: var(--prime-sys-size-badge-s-text);\n border-radius: var(--prime-sys-size-badge-s-radius);\n}\n\n.root[data-size=\"l\"] {\n gap: var(--prime-sys-size-badge-l-gap);\n padding-block: var(--prime-sys-size-badge-l-paddingY);\n padding-inline: var(--prime-sys-size-badge-l-paddingX);\n font-size: var(--prime-sys-size-badge-l-text);\n border-radius: var(--prime-sys-size-badge-l-radius);\n}\n\n.root[data-size=\"xl\"] {\n gap: var(--prime-sys-size-badge-xl-gap);\n padding-block: var(--prime-sys-size-badge-xl-paddingY);\n padding-inline: var(--prime-sys-size-badge-xl-paddingX);\n font-size: var(--prime-sys-size-badge-xl-text);\n border-radius: var(--prime-sys-size-badge-xl-radius);\n}\n\n/* gray */\n.root[data-color=\"gray\"][data-variant=\"light\"] {\n background: var(--prime-sys-color-surface-accentSoft);\n color: var(--prime-sys-color-content-primary);\n}\n\n.root[data-color=\"gray\"][data-variant=\"filled\"] {\n background: var(--prime-sys-color-badge-grayFilled-background);\n color: var(--prime-sys-color-action-primaryForeground);\n}\n\n.root[data-color=\"gray\"][data-variant=\"lighter\"] {\n background: var(--prime-sys-color-surface-default);\n color: var(--prime-sys-color-content-secondary);\n}\n\n.root[data-color=\"gray\"][data-variant=\"stroke\"] {\n background: transparent;\n border-color: var(--prime-sys-color-border-subtle);\n color: var(--prime-sys-color-content-secondary);\n}\n\n/* red → error */\n.root[data-color=\"red\"][data-variant=\"light\"] {\n background: var(--prime-sys-color-status-error-background);\n color: var(--prime-sys-color-status-error-foreground);\n}\n\n.root[data-color=\"red\"][data-variant=\"filled\"] {\n background: var(--prime-sys-color-status-error-backgroundEmphasis);\n color: var(--prime-sys-color-action-primaryForeground);\n}\n\n.root[data-color=\"red\"][data-variant=\"lighter\"] {\n background: var(--prime-sys-color-status-error-background);\n color: var(--prime-sys-color-status-error-foreground);\n opacity: 0.7;\n}\n\n.root[data-color=\"red\"][data-variant=\"stroke\"] {\n background: transparent;\n border-color: var(--prime-sys-color-status-error-border);\n color: var(--prime-sys-color-status-error-foreground);\n}\n\n/* blue → information */\n.root[data-color=\"blue\"][data-variant=\"light\"] {\n background: var(--prime-sys-color-status-information-background);\n color: var(--prime-sys-color-status-information-foreground);\n}\n\n.root[data-color=\"blue\"][data-variant=\"filled\"] {\n background: var(--prime-sys-color-status-information-backgroundEmphasis);\n color: var(--prime-sys-color-action-primaryForeground);\n}\n\n.root[data-color=\"blue\"][data-variant=\"lighter\"] {\n background: var(--prime-sys-color-status-information-background);\n color: var(--prime-sys-color-status-information-foreground);\n opacity: 0.7;\n}\n\n.root[data-color=\"blue\"][data-variant=\"stroke\"] {\n background: transparent;\n border-color: var(--prime-sys-color-status-information-border);\n color: var(--prime-sys-color-status-information-foreground);\n}\n\n/* green → success */\n.root[data-color=\"green\"][data-variant=\"light\"] {\n background: var(--prime-sys-color-status-success-background);\n color: var(--prime-sys-color-status-success-foreground);\n}\n\n.root[data-color=\"green\"][data-variant=\"filled\"] {\n background: var(--prime-sys-color-status-success-backgroundEmphasis);\n color: var(--prime-sys-color-action-primaryForeground);\n}\n\n.root[data-color=\"green\"][data-variant=\"lighter\"] {\n background: var(--prime-sys-color-status-success-background);\n color: var(--prime-sys-color-status-success-foreground);\n opacity: 0.7;\n}\n\n.root[data-color=\"green\"][data-variant=\"stroke\"] {\n background: transparent;\n border-color: var(--prime-sys-color-status-success-border);\n color: var(--prime-sys-color-status-success-foreground);\n}\n\n/* orange → warning */\n.root[data-color=\"orange\"][data-variant=\"light\"] {\n background: var(--prime-sys-color-status-warning-background);\n color: var(--prime-sys-color-status-warning-foreground);\n}\n\n.root[data-color=\"orange\"][data-variant=\"filled\"] {\n background: var(--prime-sys-color-status-warning-backgroundEmphasis);\n color: var(--prime-sys-color-action-primaryForeground);\n}\n\n.root[data-color=\"orange\"][data-variant=\"lighter\"] {\n background: var(--prime-sys-color-status-warning-background);\n color: var(--prime-sys-color-status-warning-foreground);\n opacity: 0.7;\n}\n\n.root[data-color=\"orange\"][data-variant=\"stroke\"] {\n background: transparent;\n border-color: var(--prime-sys-color-status-warning-border);\n color: var(--prime-sys-color-status-warning-foreground);\n}\n\n/* yellow → away */\n.root[data-color=\"yellow\"][data-variant=\"light\"] {\n background: var(--prime-sys-color-status-away-background);\n color: var(--prime-sys-color-status-away-foreground);\n}\n\n.root[data-color=\"yellow\"][data-variant=\"filled\"] {\n background: var(--prime-sys-color-status-away-backgroundEmphasis);\n color: var(--prime-sys-color-action-primaryForeground);\n}\n\n.root[data-color=\"yellow\"][data-variant=\"lighter\"] {\n background: var(--prime-sys-color-status-away-background);\n color: var(--prime-sys-color-status-away-foreground);\n opacity: 0.7;\n}\n\n.root[data-color=\"yellow\"][data-variant=\"stroke\"] {\n background: transparent;\n border-color: var(--prime-sys-color-status-away-border);\n color: var(--prime-sys-color-status-away-foreground);\n}\n\n/* purple → feature */\n.root[data-color=\"purple\"][data-variant=\"light\"] {\n background: var(--prime-sys-color-status-feature-background);\n color: var(--prime-sys-color-status-feature-foreground);\n}\n\n.root[data-color=\"purple\"][data-variant=\"filled\"] {\n background: var(--prime-sys-color-status-feature-backgroundEmphasis);\n color: var(--prime-sys-color-action-primaryForeground);\n}\n\n.root[data-color=\"purple\"][data-variant=\"lighter\"] {\n background: var(--prime-sys-color-status-feature-background);\n color: var(--prime-sys-color-status-feature-foreground);\n opacity: 0.7;\n}\n\n.root[data-color=\"purple\"][data-variant=\"stroke\"] {\n background: transparent;\n border-color: var(--prime-sys-color-status-feature-border);\n color: var(--prime-sys-color-status-feature-foreground);\n}\n\n/* sky → verified */\n.root[data-color=\"sky\"][data-variant=\"light\"] {\n background: var(--prime-sys-color-status-verified-background);\n color: var(--prime-sys-color-status-verified-foreground);\n}\n\n.root[data-color=\"sky\"][data-variant=\"filled\"] {\n background: var(--prime-sys-color-status-verified-backgroundEmphasis);\n color: var(--prime-sys-color-action-primaryForeground);\n}\n\n.root[data-color=\"sky\"][data-variant=\"lighter\"] {\n background: var(--prime-sys-color-status-verified-background);\n color: var(--prime-sys-color-status-verified-foreground);\n opacity: 0.7;\n}\n\n.root[data-color=\"sky\"][data-variant=\"stroke\"] {\n background: transparent;\n border-color: var(--prime-sys-color-status-verified-border);\n color: var(--prime-sys-color-status-verified-foreground);\n}\n\n/* pink / teal — семантика `color.badge.*` */\n.root[data-color=\"pink\"][data-variant=\"light\"] {\n background: var(--prime-sys-color-badge-pink-backgroundSoft);\n color: var(--prime-sys-color-badge-pink-foregroundOnSoft);\n}\n\n.root[data-color=\"pink\"][data-variant=\"filled\"] {\n background: var(--prime-sys-color-badge-pink-backgroundEmphasis);\n color: var(--prime-sys-color-action-primaryForeground);\n}\n\n.root[data-color=\"pink\"][data-variant=\"lighter\"] {\n background: var(--prime-sys-color-badge-pink-backgroundSoft);\n color: var(--prime-sys-color-badge-pink-foregroundOnSoft);\n opacity: 0.7;\n}\n\n.root[data-color=\"pink\"][data-variant=\"stroke\"] {\n background: transparent;\n border-color: var(--prime-sys-color-badge-pink-border);\n color: var(--prime-sys-color-badge-pink-foregroundOnSoft);\n}\n\n.root[data-color=\"teal\"][data-variant=\"light\"] {\n background: var(--prime-sys-color-badge-teal-backgroundSoft);\n color: var(--prime-sys-color-badge-teal-foregroundOnSoft);\n}\n\n.root[data-color=\"teal\"][data-variant=\"filled\"] {\n background: var(--prime-sys-color-badge-teal-backgroundEmphasis);\n color: var(--prime-sys-color-action-primaryForeground);\n}\n\n.root[data-color=\"teal\"][data-variant=\"lighter\"] {\n background: var(--prime-sys-color-badge-teal-backgroundSoft);\n color: var(--prime-sys-color-badge-teal-foregroundOnSoft);\n opacity: 0.7;\n}\n\n.root[data-color=\"teal\"][data-variant=\"stroke\"] {\n background: transparent;\n border-color: var(--prime-sys-color-badge-teal-border);\n color: var(--prime-sys-color-badge-teal-foregroundOnSoft);\n}\n\n.root[data-disabled=\"true\"] {\n opacity: 0.5;\n}\n\n.dot {\n width: var(--prime-sys-size-badge-m-dotSize);\n height: var(--prime-sys-size-badge-m-dotSize);\n border-radius: var(--prime-sys-shape-radius-round);\n background: currentcolor;\n flex-shrink: 0;\n}\n\n.root[data-size=\"s\"] .dot {\n width: var(--prime-sys-size-badge-s-dotSize);\n height: var(--prime-sys-size-badge-s-dotSize);\n}\n\n.root[data-size=\"l\"] .dot {\n width: var(--prime-sys-size-badge-l-dotSize);\n height: var(--prime-sys-size-badge-l-dotSize);\n}\n\n.root[data-size=\"xl\"] .dot {\n width: var(--prime-sys-size-badge-xl-dotSize);\n height: var(--prime-sys-size-badge-xl-dotSize);\n}\n\n.icon {\n width: var(--prime-sys-size-badge-m-iconSize);\n height: var(--prime-sys-size-badge-m-iconSize);\n display: inline-flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n}\n\n.root[data-size=\"s\"] .icon {\n width: var(--prime-sys-size-badge-s-iconSize);\n height: var(--prime-sys-size-badge-s-iconSize);\n}\n\n.root[data-size=\"l\"] .icon {\n width: var(--prime-sys-size-badge-l-iconSize);\n height: var(--prime-sys-size-badge-l-iconSize);\n}\n\n.root[data-size=\"xl\"] .icon {\n width: var(--prime-sys-size-badge-xl-iconSize);\n height: var(--prime-sys-size-badge-xl-iconSize);\n}\n\n.icon > * {\n width: 100%;\n height: 100%;\n}\n\n/* ─── variant status: точка + подпись (раньше отдельный StatusBadge) ───────── */\n.root[data-variant=\"status\"] {\n height: auto;\n min-height: 0;\n padding: 0;\n border: none;\n background: transparent;\n font-weight: var(--prime-sys-typography-weight-regular);\n line-height: var(--prime-sys-typography-body-lineHeight);\n color: var(--prime-sys-color-content-primary);\n}\n\n.statusDot {\n width: var(--prime-sys-size-badge-m-dotSize);\n height: var(--prime-sys-size-badge-m-dotSize);\n border-radius: var(--prime-sys-shape-radius-round);\n flex-shrink: 0;\n}\n\n.root[data-size=\"s\"] .statusDot {\n width: var(--prime-sys-size-badge-s-dotSize);\n height: var(--prime-sys-size-badge-s-dotSize);\n}\n\n.root[data-size=\"l\"] .statusDot {\n width: var(--prime-sys-size-badge-l-dotSize);\n height: var(--prime-sys-size-badge-l-dotSize);\n}\n\n.root[data-size=\"xl\"] .statusDot {\n width: var(--prime-sys-size-badge-xl-dotSize);\n height: var(--prime-sys-size-badge-xl-dotSize);\n}\n\n.root[data-variant=\"status\"][data-status=\"online\"] .statusDot {\n background: var(--prime-sys-color-status-success-backgroundEmphasis);\n}\n\n.root[data-variant=\"status\"][data-status=\"offline\"] .statusDot {\n background: var(--prime-sys-color-content-disabled);\n}\n\n.root[data-variant=\"status\"][data-status=\"away\"] .statusDot {\n background: var(--prime-sys-color-status-away-backgroundEmphasis);\n}\n\n.root[data-variant=\"status\"][data-status=\"busy\"] .statusDot {\n background: var(--prime-sys-color-status-error-backgroundEmphasis);\n}\n","import * as React from \"react\";\n\nimport {\n ControlSizeProvider,\n controlSurfaceToInputSize,\n useOptionalControlSize,\n} from \"@/internal/ControlSizeContext\";\nimport { cx } from \"@/internal/cx\";\nimport { toDataAttributes } from \"@/internal/data-attributes\";\n\nimport styles from \"./Badge.module.css\";\n\nexport type BadgeColor =\n | \"gray\"\n | \"red\"\n | \"blue\"\n | \"green\"\n | \"orange\"\n | \"yellow\"\n | \"purple\"\n | \"sky\"\n | \"pink\"\n | \"teal\";\n\n/** Состояние индикатора при `variant=\"status\"`. */\nexport type BadgeStatus = \"online\" | \"offline\" | \"away\" | \"busy\";\n\nexport type BadgeVariant = \"filled\" | \"light\" | \"lighter\" | \"stroke\" | \"status\";\n\nexport type BadgeSize = \"s\" | \"m\" | \"l\" | \"xl\";\n\nexport type BadgeRootProps = {\n color?: BadgeColor;\n variant?: BadgeVariant;\n size?: BadgeSize;\n disabled?: boolean;\n /** При `variant=\"status\"` — цвет точки (online / offline / away / busy). */\n status?: BadgeStatus;\n /** При `variant=\"status\"` — `aria-label` на корне (`role=\"status\"`). */\n label?: string;\n children?: React.ReactNode;\n className?: string;\n} & React.HTMLAttributes<HTMLDivElement>;\n\nexport type BadgeIconProps = {\n children: React.ReactNode;\n className?: string;\n} & Omit<React.HTMLAttributes<HTMLDivElement>, \"children\">;\n\nexport type BadgeDotProps = {\n className?: string;\n} & React.HTMLAttributes<HTMLSpanElement>;\n\nconst BadgeRoot = React.forwardRef<HTMLDivElement, BadgeRootProps>(\n (\n {\n color = \"gray\",\n variant = \"light\",\n size: sizeProp,\n disabled,\n status,\n label,\n children,\n className,\n ...rest\n },\n ref,\n ) => {\n const controlSurface = useOptionalControlSize();\n const size =\n sizeProp ?? (controlSurface !== undefined ? controlSurfaceToInputSize(controlSurface) : \"m\");\n\n const isStatus = variant === \"status\";\n const presence = isStatus ? (status ?? \"online\") : undefined;\n\n const dataProps = isStatus\n ? toDataAttributes({\n variant: \"status\",\n status: presence,\n size,\n disabled: disabled ? true : undefined,\n })\n : toDataAttributes({\n color,\n variant,\n size,\n disabled: disabled ? true : undefined,\n });\n\n if (isStatus) {\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-label={label}\n className={cx(styles.root, className)}\n {...dataProps}\n {...rest}\n >\n <span className={styles.statusDot} aria-hidden=\"true\" />\n <ControlSizeProvider value={size}>{children}</ControlSizeProvider>\n </div>\n );\n }\n\n return (\n <div ref={ref} className={cx(styles.root, className)} {...dataProps} {...rest}>\n <ControlSizeProvider value={size}>{children}</ControlSizeProvider>\n </div>\n );\n },\n);\n\nBadgeRoot.displayName = \"BadgeRoot\";\n\nfunction BadgeIcon({ children, className, ...rest }: BadgeIconProps) {\n return (\n <span className={cx(styles.icon, className)} {...rest}>\n {children}\n </span>\n );\n}\n\nBadgeIcon.displayName = \"BadgeIcon\";\n\nfunction BadgeDot({ className, ...rest }: BadgeDotProps) {\n return <span className={cx(styles.dot, className)} aria-hidden=\"true\" {...rest} />;\n}\n\nBadgeDot.displayName = \"BadgeDot\";\n\nexport const Badge = { Root: BadgeRoot, Icon: BadgeIcon, Dot: BadgeDot };\n","import type * as React from \"react\";\n\n/** Composes multiple refs (callback or object) into one callback — same idea as Radix `composeRefs`. */\nexport function mergeRefs<T>(...refs: Array<React.Ref<T> | undefined>): React.RefCallback<T> {\n return (value) => {\n for (const ref of refs) {\n if (ref == null) continue;\n if (typeof ref === \"function\") {\n ref(value);\n } else {\n (ref as React.MutableRefObject<T | null>).current = value;\n }\n }\n };\n}\n","import * as React from \"react\";\n\nimport { mergeRefs } from \"./mergeRefs\";\n\ntype AnyProps = Record<string, unknown>;\n\nfunction mergeProps(slotProps: AnyProps, childProps: AnyProps): AnyProps {\n const merged: AnyProps = { ...slotProps };\n\n for (const key of Object.keys(childProps)) {\n const slotValue = slotProps[key];\n const childValue = childProps[key];\n\n if (key === \"className\") {\n // NavLink (and similar) pass className as a function receiving route state.\n // When slot has a plain string and child has a function, compose them.\n if (typeof childValue === \"function\" && typeof slotValue === \"string\") {\n const slotClass = slotValue;\n merged[key] = (...args: unknown[]) => {\n const resolved = (childValue as (...a: unknown[]) => unknown)(...args);\n return [slotClass, resolved].filter(Boolean).join(\" \") || undefined;\n };\n } else {\n const parts = [slotValue, childValue].filter(Boolean);\n merged[key] = parts.length > 0 ? parts.join(\" \") : undefined;\n }\n } else if (key === \"style\") {\n merged[key] =\n slotValue != null && childValue != null\n ? { ...(slotValue as object), ...(childValue as object) }\n : (childValue ?? slotValue);\n } else if (\n key.startsWith(\"on\") &&\n typeof slotValue === \"function\" &&\n typeof childValue === \"function\"\n ) {\n // Child handler runs first, then slot handler\n merged[key] = (...args: unknown[]) => {\n (childValue as (...a: unknown[]) => unknown)(...args);\n (slotValue as (...a: unknown[]) => unknown)(...args);\n };\n } else {\n // Child props override slot props\n merged[key] = childValue;\n }\n }\n\n return merged;\n}\n\nexport type SlotProps = { children?: React.ReactNode } & AnyProps;\n\n/**\n * Merges its own props onto the single React child element.\n * The basis of the `asChild` polymorphism pattern (same idea as Radix UI `Slot`).\n *\n * Merge rules:\n * - `className` — space-joined (slot first, child second)\n * - `style` — shallow-merged; child keys win\n * - `on*` handlers — both fire; child handler runs first\n * - All other props — child overrides slot\n * - `ref` — merged via `mergeRefs`\n */\nexport const Slot = React.forwardRef<HTMLElement, SlotProps>(({ children, ...slotProps }, ref) => {\n if (!React.isValidElement(children)) {\n return <>{children}</>;\n }\n\n const child = children as React.ReactElement<AnyProps>;\n const childRef = (child as unknown as { ref?: React.Ref<unknown> }).ref ?? null;\n const composedRef =\n ref != null || childRef != null\n ? mergeRefs<unknown>(ref as React.Ref<unknown> | undefined, childRef ?? undefined)\n : undefined;\n\n const merged = mergeProps(slotProps, child.props);\n\n return React.cloneElement(child, {\n ...merged,\n ...(composedRef !== undefined ? { ref: composedRef } : {}),\n } as AnyProps);\n});\n\nSlot.displayName = \"Slot\";\n",".root {\n --prime-button-font-size: var(--prime-sys-size-control-m-text);\n position: relative;\n border: var(--prime-sys-border-width-control) solid transparent;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--prime-sys-size-control-m-gap);\n font-size: var(--prime-button-font-size);\n font-weight: var(--prime-sys-typography-weight-medium);\n line-height: 1;\n white-space: nowrap;\n box-sizing: border-box;\n text-decoration: none;\n cursor: pointer;\n transition:\n background-color var(--prime-sys-motion-medium) var(--prime-sys-motion-standard),\n border-color var(--prime-sys-motion-medium) var(--prime-sys-motion-standard),\n color var(--prime-sys-motion-medium) var(--prime-sys-motion-standard),\n box-shadow var(--prime-sys-motion-medium) var(--prime-sys-motion-standard),\n transform var(--prime-sys-motion-medium) var(--prime-sys-motion-standard),\n opacity var(--prime-sys-motion-medium) var(--prime-sys-motion-standard);\n}\n\n.root[data-full-width=\"true\"] {\n width: 100%;\n}\n\n.root[data-size=\"m\"] {\n --prime-icon-size: var(--prime-sys-size-control-m-icon);\n --prime-button-font-size: var(--prime-sys-size-control-m-text);\n height: var(--prime-sys-size-control-m-height);\n /* Не ниже высоты (icon-only), но не сужать ниже текста при flex-shrink. */\n min-width: max(var(--prime-sys-size-control-m-height), min-content);\n border-radius: var(--prime-sys-size-control-m-radius);\n gap: var(--prime-sys-size-control-m-gap);\n padding-inline: var(--prime-sys-size-control-m-buttonPaddingX);\n padding-block: var(--prime-sys-size-control-m-buttonPaddingY);\n}\n\n.root[data-size=\"s\"] {\n --prime-icon-size: var(--prime-sys-size-control-s-icon);\n --prime-button-font-size: var(--prime-sys-size-control-s-text);\n height: var(--prime-sys-size-control-s-height);\n min-width: max(var(--prime-sys-size-control-s-height), min-content);\n border-radius: var(--prime-sys-size-control-s-radius);\n gap: var(--prime-sys-size-control-s-gap);\n padding-inline: var(--prime-sys-size-control-s-buttonPaddingX);\n padding-block: var(--prime-sys-size-control-s-buttonPaddingY);\n}\n\n.root[data-size=\"l\"] {\n --prime-icon-size: var(--prime-sys-size-control-l-icon);\n --prime-button-font-size: var(--prime-sys-size-control-l-text);\n height: var(--prime-sys-size-control-l-height);\n min-width: max(var(--prime-sys-size-control-l-height), min-content);\n border-radius: var(--prime-sys-size-control-l-radius);\n gap: var(--prime-sys-size-control-l-gap);\n padding-inline: var(--prime-sys-size-control-l-buttonPaddingX);\n padding-block: var(--prime-sys-size-control-l-buttonPaddingY);\n}\n\n.root[data-size=\"xl\"] {\n --prime-icon-size: var(--prime-sys-size-control-xl-icon);\n --prime-button-font-size: var(--prime-sys-size-control-xl-text);\n height: var(--prime-sys-size-control-xl-height);\n min-width: max(var(--prime-sys-size-control-xl-height), min-content);\n border-radius: var(--prime-sys-size-control-xl-radius);\n gap: var(--prime-sys-size-control-xl-gap);\n padding-inline: var(--prime-sys-size-control-xl-buttonPaddingX);\n padding-block: var(--prime-sys-size-control-xl-buttonPaddingY);\n}\n\n.root:focus-visible {\n outline: none;\n}\n\n.root[data-variant=\"primary\"][data-mode=\"filled\"] {\n background: var(--prime-sys-color-action-primaryBackground);\n color: var(--prime-sys-color-action-primaryForeground);\n}\n\n.root[data-variant=\"primary\"][data-mode=\"filled\"]:hover:not(:disabled) {\n background: var(--prime-sys-color-action-primaryBackgroundHover);\n}\n\n.root[data-variant=\"primary\"][data-mode=\"filled\"]:focus-visible {\n box-shadow: var(--prime-sys-elevation-shadow-primaryFocus);\n}\n\n.root[data-variant=\"primary\"][data-mode=\"stroke\"] {\n background: transparent;\n color: var(--prime-sys-color-action-primaryBackground);\n border-color: var(--prime-sys-color-action-primaryBackground);\n}\n\n.root[data-variant=\"primary\"][data-mode=\"stroke\"]:hover:not(:disabled) {\n background: var(--prime-sys-color-surface-accentSoft);\n border-color: transparent;\n}\n\n.root[data-variant=\"primary\"][data-mode=\"stroke\"]:focus-visible {\n box-shadow: var(--prime-sys-elevation-shadow-primaryFocus);\n}\n\n.root[data-variant=\"primary\"][data-mode=\"lighter\"] {\n background: var(--prime-sys-color-action-primarySoftBackground);\n color: var(--prime-sys-color-action-primarySoftForeground);\n border-color: transparent;\n}\n\n.root[data-variant=\"primary\"][data-mode=\"lighter\"]:hover:not(:disabled) {\n background: var(--prime-sys-color-surface-raised);\n border-color: var(--prime-sys-color-action-primaryBackground);\n color: var(--prime-sys-color-content-primary);\n}\n\n.root[data-variant=\"primary\"][data-mode=\"lighter\"]:focus-visible {\n box-shadow: var(--prime-sys-elevation-shadow-primaryFocus);\n}\n\n.root[data-variant=\"primary\"][data-mode=\"ghost\"] {\n background: transparent;\n color: var(--prime-sys-color-action-primaryBackground);\n border-color: transparent;\n}\n\n.root[data-variant=\"primary\"][data-mode=\"ghost\"]:hover:not(:disabled) {\n background: var(--prime-sys-color-surface-accentSoft);\n}\n\n.root[data-variant=\"primary\"][data-mode=\"ghost\"]:focus-visible {\n box-shadow: var(--prime-sys-elevation-shadow-primaryFocus);\n}\n\n.root[data-variant=\"neutral\"][data-mode=\"filled\"] {\n background: var(--prime-sys-color-content-primary);\n color: var(--prime-sys-color-content-inverse);\n}\n\n.root[data-variant=\"neutral\"][data-mode=\"filled\"]:hover:not(:disabled) {\n background: var(--prime-sys-color-content-secondary);\n color: var(--prime-sys-color-content-inverse);\n}\n\n.root[data-variant=\"neutral\"][data-mode=\"filled\"]:focus-visible {\n box-shadow: var(--prime-sys-elevation-shadow-buttonFocus);\n}\n\n.root[data-variant=\"neutral\"][data-mode=\"stroke\"] {\n background: transparent;\n border-color: var(--prime-sys-color-border-strong);\n color: var(--prime-sys-color-action-neutralForeground);\n box-shadow: none;\n}\n\n.root[data-variant=\"neutral\"][data-mode=\"stroke\"]:hover:not(:disabled) {\n background: var(--prime-sys-color-action-neutralBackgroundHover);\n color: var(--prime-sys-color-content-primary);\n box-shadow: none;\n border-color: transparent;\n}\n\n.root[data-variant=\"neutral\"][data-mode=\"stroke\"]:focus-visible {\n box-shadow: var(--prime-sys-elevation-shadow-buttonFocus);\n border-color: var(--prime-sys-color-content-primary);\n}\n\n.root[data-variant=\"neutral\"][data-mode=\"lighter\"] {\n background: var(--prime-sys-color-action-neutralBackgroundHover);\n color: var(--prime-sys-color-action-neutralForeground);\n border-color: transparent;\n}\n\n.root[data-variant=\"neutral\"][data-mode=\"lighter\"]:hover:not(:disabled) {\n background: var(--prime-sys-color-action-neutralBackground);\n color: var(--prime-sys-color-content-primary);\n border-color: var(--prime-sys-color-border-strong);\n box-shadow: var(--prime-sys-elevation-shadow-surface);\n}\n\n.root[data-variant=\"neutral\"][data-mode=\"lighter\"]:focus-visible {\n box-shadow: var(--prime-sys-elevation-shadow-buttonFocus);\n border-color: var(--prime-sys-color-content-primary);\n}\n\n.root[data-variant=\"neutral\"][data-mode=\"ghost\"] {\n background: transparent;\n color: var(--prime-sys-color-action-neutralForeground);\n border-color: transparent;\n}\n\n.root[data-variant=\"neutral\"][data-mode=\"ghost\"]:hover:not(:disabled) {\n background: var(--prime-sys-color-action-neutralBackgroundHover);\n color: var(--prime-sys-color-content-primary);\n}\n\n.root[data-variant=\"neutral\"][data-mode=\"ghost\"]:focus-visible {\n box-shadow: var(--prime-sys-elevation-shadow-buttonFocus);\n border-color: var(--prime-sys-color-content-primary);\n}\n\n.root[data-variant=\"error\"][data-mode=\"filled\"] {\n background: var(--prime-sys-color-action-errorBackground);\n color: var(--prime-sys-color-action-errorForeground);\n}\n\n.root[data-variant=\"error\"][data-mode=\"filled\"]:hover:not(:disabled) {\n background: var(--prime-sys-color-action-errorBackgroundHover);\n}\n\n.root[data-variant=\"error\"][data-mode=\"filled\"]:focus-visible {\n box-shadow: var(--prime-sys-elevation-shadow-errorFocus);\n}\n\n.root[data-variant=\"error\"][data-mode=\"stroke\"] {\n background: transparent;\n color: var(--prime-sys-color-border-danger);\n border-color: var(--prime-sys-color-border-danger);\n}\n\n.root[data-variant=\"error\"][data-mode=\"stroke\"]:hover:not(:disabled) {\n background: var(--prime-sys-color-surface-dangerSoft);\n border-color: transparent;\n}\n\n.root[data-variant=\"error\"][data-mode=\"stroke\"]:focus-visible {\n box-shadow: var(--prime-sys-elevation-shadow-errorFocus);\n}\n\n.root[data-variant=\"error\"][data-mode=\"lighter\"] {\n background: var(--prime-sys-color-surface-dangerSoft);\n color: var(--prime-sys-color-border-danger);\n border-color: transparent;\n}\n\n.root[data-variant=\"error\"][data-mode=\"lighter\"]:hover:not(:disabled) {\n background: var(--prime-sys-color-surface-raised);\n border-color: var(--prime-sys-color-border-danger);\n}\n\n.root[data-variant=\"error\"][data-mode=\"lighter\"]:focus-visible {\n box-shadow: var(--prime-sys-elevation-shadow-errorFocus);\n}\n\n.root[data-variant=\"error\"][data-mode=\"ghost\"] {\n background: transparent;\n color: var(--prime-sys-color-border-danger);\n border-color: transparent;\n}\n\n.root[data-variant=\"error\"][data-mode=\"ghost\"]:hover:not(:disabled) {\n background: var(--prime-sys-color-surface-dangerSoft);\n}\n\n.root[data-variant=\"error\"][data-mode=\"ghost\"]:focus-visible {\n box-shadow: var(--prime-sys-elevation-shadow-errorFocus);\n}\n\n.icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: var(--prime-icon-size);\n height: var(--prime-icon-size);\n}\n\n.icon svg {\n width: 100%;\n height: 100%;\n display: block;\n}\n\n.spinner {\n width: 1em;\n height: 1em;\n border: var(--prime-sys-unit-2px) solid currentColor;\n border-right-color: transparent;\n border-radius: var(--prime-sys-shape-radius-round);\n animation: spin 0.8s linear infinite;\n}\n\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n/* AlignUI FancyButton: тень, верхний блик (::after), градиентное кольцо (::before) */\n.root[data-mode=\"fancy\"] {\n border-color: transparent;\n isolation: isolate;\n}\n\n.root[data-mode=\"fancy\"] .icon,\n.root[data-mode=\"fancy\"] .spinner {\n position: relative;\n z-index: 2;\n}\n\n.root[data-variant=\"primary\"][data-mode=\"fancy\"] {\n background: var(--prime-sys-color-action-primaryBackground);\n color: var(--prime-sys-color-action-primaryForeground);\n box-shadow: var(--prime-sys-elevation-shadow-fancyButtonPrimary);\n}\n\n.root[data-variant=\"primary\"][data-mode=\"fancy\"]:hover:not(:disabled) {\n background: var(--prime-sys-color-action-primaryBackground);\n}\n\n.root[data-variant=\"primary\"][data-mode=\"fancy\"]:focus-visible {\n box-shadow: var(--prime-sys-elevation-shadow-primaryFocus);\n}\n\n.root[data-variant=\"neutral\"][data-mode=\"fancy\"] {\n background: var(--prime-sys-color-content-primary);\n color: var(--prime-sys-color-content-inverse);\n box-shadow: var(--prime-sys-elevation-shadow-fancyButtonNeutral);\n}\n\n.root[data-variant=\"neutral\"][data-mode=\"fancy\"]:hover:not(:disabled) {\n background: var(--prime-sys-color-content-primary);\n color: var(--prime-sys-color-content-inverse);\n}\n\n.root[data-variant=\"neutral\"][data-mode=\"fancy\"]:focus-visible {\n box-shadow: var(--prime-sys-elevation-shadow-buttonFocus);\n}\n\n.root[data-variant=\"error\"][data-mode=\"fancy\"] {\n background: var(--prime-sys-color-action-errorBackground);\n color: var(--prime-sys-color-action-errorForeground);\n box-shadow: var(--prime-sys-elevation-shadow-fancyButtonError);\n}\n\n.root[data-variant=\"error\"][data-mode=\"fancy\"]:hover:not(:disabled) {\n background: var(--prime-sys-color-action-errorBackground);\n}\n\n.root[data-variant=\"error\"][data-mode=\"fancy\"]:focus-visible {\n box-shadow: var(--prime-sys-elevation-shadow-errorFocus);\n}\n\n.root[data-variant=\"primary\"][data-mode=\"fancy\"]::before,\n.root[data-variant=\"neutral\"][data-mode=\"fancy\"]::before,\n.root[data-variant=\"error\"][data-mode=\"fancy\"]::before {\n content: \"\";\n position: absolute;\n inset: 0;\n z-index: 1;\n border-radius: inherit;\n padding: var(--prime-sys-unit-1px);\n pointer-events: none;\n background: linear-gradient(\n to bottom,\n color-mix(in srgb, var(--prime-sys-color-border-inverse) 12%, transparent),\n transparent\n );\n mask-image:\n linear-gradient(var(--prime-sys-color-border-inverse) 0 0),\n linear-gradient(var(--prime-sys-color-border-inverse) 0 0);\n mask-clip: content-box, border-box;\n mask-composite: exclude;\n mask-origin: border-box;\n -webkit-mask-image:\n linear-gradient(var(--prime-sys-color-border-inverse) 0 0),\n linear-gradient(var(--prime-sys-color-border-inverse) 0 0);\n -webkit-mask-clip: content-box, border-box;\n -webkit-mask-composite: xor;\n}\n\n.root[data-variant=\"primary\"][data-mode=\"fancy\"]::after,\n.root[data-variant=\"neutral\"][data-mode=\"fancy\"]::after,\n.root[data-variant=\"error\"][data-mode=\"fancy\"]::after {\n content: \"\";\n position: absolute;\n inset: 0;\n z-index: 0;\n border-radius: inherit;\n pointer-events: none;\n background: linear-gradient(to bottom, var(--prime-sys-color-border-inverse), transparent);\n opacity: 0.16;\n transition: opacity var(--prime-sys-motion-medium) var(--prime-sys-motion-standard);\n}\n\n.root[data-variant=\"primary\"][data-mode=\"fancy\"]:hover:not(:disabled)::after,\n.root[data-variant=\"neutral\"][data-mode=\"fancy\"]:hover:not(:disabled)::after,\n.root[data-variant=\"error\"][data-mode=\"fancy\"]:hover:not(:disabled)::after {\n opacity: 0.24;\n}\n\n.root:disabled[data-variant][data-mode]:not([data-loading=\"true\"]),\n.root[aria-disabled=\"true\"][data-variant][data-mode]:not([data-loading=\"true\"]) {\n background: var(--prime-sys-color-surface-raised);\n color: var(--prime-sys-color-content-disabled);\n border-color: var(--prime-sys-color-border-subtle);\n box-shadow: none;\n opacity: 0.7;\n cursor: not-allowed;\n}\n\n/* asChild: non-button elements need pointer-events blocked at CSS level */\n.root[aria-disabled=\"true\"]:not([data-loading=\"true\"]) {\n pointer-events: none;\n}\n\n.root:disabled[data-variant][data-mode=\"fancy\"]:not([data-loading=\"true\"]),\n.root[aria-disabled=\"true\"][data-variant][data-mode=\"fancy\"]:not([data-loading=\"true\"]) {\n border-color: transparent;\n}\n\n.root:disabled[data-variant][data-mode=\"fancy\"]:not([data-loading=\"true\"])::before,\n.root:disabled[data-variant][data-mode=\"fancy\"]:not([data-loading=\"true\"])::after,\n.root[aria-disabled=\"true\"][data-variant][data-mode=\"fancy\"]:not([data-loading=\"true\"])::before,\n.root[aria-disabled=\"true\"][data-variant][data-mode=\"fancy\"]:not([data-loading=\"true\"])::after {\n display: none;\n}\n\n.root[data-loading=\"true\"][data-variant][data-mode] {\n opacity: 0.92;\n cursor: progress;\n}\n\n/* Active navigation link when Button.Root is used via asChild (e.g. NavLink sets aria-current). */\n.root[aria-current=\"page\"] {\n background: var(--prime-sys-color-action-neutralBackgroundHover);\n}\n\n.root[data-loading=\"true\"] .icon {\n display: none;\n}\n\n.root[data-loading=\"true\"] .spinner {\n order: -1;\n}\n\n/* Перебить min-width по размеру: на всю ширину родителя в узкой колонке без раздува по min-content. */\n.root[data-full-width=\"true\"] {\n min-width: 0;\n}\n","import * as React from \"react\";\nimport { ControlSizeProvider } from \"@/internal/ControlSizeContext\";\nimport { createComponentContext } from \"@/internal/context\";\nimport { cx } from \"@/internal/cx\";\nimport { toDataAttributes } from \"@/internal/data-attributes\";\nimport { Slot } from \"@/internal/slot\";\nimport type { ButtonMode, ButtonSize, ButtonVariant } from \"@/internal/states\";\n\nimport styles from \"./Button.module.css\";\n\ntype ButtonContextValue = {\n loading: boolean;\n};\n\nconst [ButtonProvider, useButtonContext] = createComponentContext<ButtonContextValue>(\"Button\");\n\nexport type ButtonRootProps = Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"size\"> & {\n variant?: ButtonVariant;\n mode?: ButtonMode;\n size?: ButtonSize;\n fullWidth?: boolean;\n loading?: boolean;\n /**\n * Merges Button props onto its single child element instead of rendering `<button>`.\n * Use when the trigger must be a different element (e.g. `<a>`, React Router `<Link>`).\n *\n * - `disabled` / `loading` → `aria-disabled=\"true\"` + `pointer-events: none` (CSS);\n * native `disabled` attribute is NOT set (invalid on non-button elements).\n * - `type` is not forwarded (irrelevant for non-button elements).\n * - The child must accept `className`, `aria-*`, `data-*`, and event handler props.\n */\n asChild?: boolean;\n};\n\nconst ButtonRoot = React.forwardRef<HTMLButtonElement, ButtonRootProps>(\n (\n {\n children,\n className,\n variant = \"primary\",\n mode = \"filled\",\n size = \"m\",\n fullWidth,\n type = \"button\",\n loading = false,\n disabled,\n asChild = false,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n ...rest\n },\n ref,\n ) => {\n const isDisabled = disabled || loading;\n const contextValue = React.useMemo(() => ({ loading }), [loading]);\n\n const dataAttrs = toDataAttributes({ variant, mode, size, loading, \"full-width\": fullWidth });\n\n if (asChild) {\n const { onClick: userOnClick, ...restWithoutClick } = rest;\n return (\n <ButtonProvider value={contextValue}>\n <ControlSizeProvider value={size}>\n <Slot\n {...restWithoutClick}\n ref={ref as React.Ref<HTMLElement>}\n className={cx(styles.root, className)}\n aria-disabled={isDisabled || undefined}\n aria-busy={loading || undefined}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n onClick={\n isDisabled\n ? (e: React.MouseEvent) => {\n e.preventDefault();\n }\n : userOnClick\n }\n {...dataAttrs}\n >\n {children}\n </Slot>\n </ControlSizeProvider>\n </ButtonProvider>\n );\n }\n\n return (\n <ButtonProvider value={contextValue}>\n <button\n {...rest}\n ref={ref}\n type={type}\n className={cx(styles.root, className)}\n disabled={isDisabled}\n aria-busy={loading || undefined}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n {...dataAttrs}\n >\n <ControlSizeProvider value={size}>{children}</ControlSizeProvider>\n </button>\n </ButtonProvider>\n );\n },\n);\n\nButtonRoot.displayName = \"ButtonRoot\";\n\nexport type ButtonIconProps = {\n children: React.ReactNode;\n className?: string;\n} & Omit<React.HTMLAttributes<HTMLSpanElement>, \"children\">;\n\nfunction ButtonIcon({ children, className, ...rest }: ButtonIconProps) {\n return (\n <span className={cx(styles.icon, className)} aria-hidden=\"true\" {...rest}>\n {children}\n </span>\n );\n}\n\nButtonIcon.displayName = \"ButtonIcon\";\n\nexport type ButtonSpinnerProps = {\n className?: string;\n} & React.HTMLAttributes<HTMLSpanElement>;\n\nfunction ButtonSpinner({ className, ...rest }: ButtonSpinnerProps) {\n const { loading } = useButtonContext();\n if (!loading) return null;\n return <span className={cx(styles.spinner, className)} aria-hidden=\"true\" {...rest} />;\n}\n\nButtonSpinner.displayName = \"ButtonSpinner\";\n\nexport const Button = { Root: ButtonRoot, Icon: ButtonIcon, Spinner: ButtonSpinner };\n",".root {\n position: relative;\n box-sizing: border-box;\n display: grid;\n grid-template-columns: 1fr auto 1fr;\n align-items: center;\n width: 100%;\n border: var(--prime-sys-unit-1px) solid transparent;\n}\n\n.content {\n grid-column: 2;\n justify-self: center;\n display: inline-flex;\n max-width: min(100%, var(--prime-sys-unit-72rem));\n flex-wrap: wrap;\n align-items: center;\n justify-content: center;\n}\n\n.icon {\n display: inline-flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n}\n\n.icon svg {\n width: 100%;\n height: 100%;\n display: block;\n}\n\n.title {\n font-weight: var(--prime-sys-typography-weight-medium);\n line-height: 1.25;\n}\n\n.description {\n line-height: 1.35;\n opacity: 0.92;\n}\n\n.actions {\n display: inline-flex;\n flex-shrink: 0;\n flex-wrap: wrap;\n align-items: center;\n}\n\n.root[data-size=\"s\"] {\n column-gap: var(--prime-sys-size-control-s-gap);\n min-height: var(--prime-sys-size-control-s-height);\n padding-block: var(--prime-sys-spacing-x2);\n padding-inline: var(--prime-sys-size-control-s-inputPaddingX);\n border-radius: var(--prime-sys-size-control-s-radius);\n}\n\n.root[data-size=\"s\"] .content {\n gap: var(--prime-sys-size-control-s-gap);\n}\n\n.root[data-size=\"s\"] .icon {\n width: var(--prime-sys-size-control-s-icon);\n height: var(--prime-sys-size-control-s-icon);\n}\n\n.root[data-size=\"s\"] .title {\n font-size: var(--prime-sys-size-control-s-text);\n}\n\n.root[data-size=\"s\"] .description {\n font-size: var(--prime-sys-size-control-s-supportText);\n}\n\n.root[data-size=\"s\"] .actions {\n gap: var(--prime-sys-size-control-s-gap);\n}\n\n.root[data-size=\"m\"] {\n column-gap: var(--prime-sys-size-control-m-gap);\n min-height: var(--prime-sys-size-control-m-height);\n padding-block: var(--prime-sys-spacing-x2);\n padding-inline: var(--prime-sys-size-control-m-inputPaddingX);\n border-radius: var(--prime-sys-size-control-m-radius);\n}\n\n.root[data-size=\"m\"] .content {\n gap: var(--prime-sys-size-control-m-gap);\n}\n\n.root[data-size=\"m\"] .icon {\n width: var(--prime-sys-size-control-m-icon);\n height: var(--prime-sys-size-control-m-icon);\n}\n\n.root[data-size=\"m\"] .title {\n font-size: var(--prime-sys-size-control-m-text);\n}\n\n.root[data-size=\"m\"] .description {\n font-size: var(--prime-sys-size-control-m-supportText);\n}\n\n.root[data-size=\"m\"] .actions {\n gap: var(--prime-sys-size-control-m-gap);\n}\n\n.root[data-size=\"l\"] {\n column-gap: var(--prime-sys-size-control-l-gap);\n min-height: var(--prime-sys-size-control-l-height);\n padding-block: var(--prime-sys-spacing-x3);\n padding-inline: var(--prime-sys-size-control-l-inputPaddingX);\n border-radius: var(--prime-sys-size-control-l-radius);\n}\n\n.root[data-size=\"l\"] .content {\n gap: var(--prime-sys-size-control-l-gap);\n}\n\n.root[data-size=\"l\"] .icon {\n width: var(--prime-sys-size-control-l-icon);\n height: var(--prime-sys-size-control-l-icon);\n}\n\n.root[data-size=\"l\"] .title {\n font-size: var(--prime-sys-size-control-l-text);\n}\n\n.root[data-size=\"l\"] .description {\n font-size: var(--prime-sys-size-control-l-supportText);\n}\n\n.root[data-size=\"l\"] .actions {\n gap: var(--prime-sys-size-control-l-gap);\n}\n\n.root[data-size=\"xl\"] {\n column-gap: var(--prime-sys-size-control-xl-gap);\n min-height: var(--prime-sys-size-control-xl-height);\n padding-block: var(--prime-sys-spacing-x4);\n padding-inline: var(--prime-sys-size-control-xl-inputPaddingX);\n border-radius: var(--prime-sys-size-control-xl-radius);\n}\n\n.root[data-size=\"xl\"] .content {\n gap: var(--prime-sys-size-control-xl-gap);\n}\n\n.root[data-size=\"xl\"] .icon {\n width: var(--prime-sys-size-control-xl-icon);\n height: var(--prime-sys-size-control-xl-icon);\n}\n\n.root[data-size=\"xl\"] .title {\n font-size: var(--prime-sys-size-control-xl-text);\n}\n\n.root[data-size=\"xl\"] .description {\n font-size: var(--prime-sys-size-control-xl-supportText);\n}\n\n.root[data-size=\"xl\"] .actions {\n gap: var(--prime-sys-size-control-xl-gap);\n}\n\n.closeButton {\n grid-column: 3;\n justify-self: end;\n flex-shrink: 0;\n margin: 0;\n color: inherit;\n transition: opacity var(--prime-sys-motion-medium) var(--prime-sys-motion-standard);\n}\n\n.root[data-variant=\"light\"]\n .closeButton[data-variant=\"neutral\"][data-mode=\"ghost\"]:hover:not(:disabled),\n.root[data-variant=\"lighter\"]\n .closeButton[data-variant=\"neutral\"][data-mode=\"ghost\"]:hover:not(:disabled),\n.root[data-variant=\"stroke\"]\n .closeButton[data-variant=\"neutral\"][data-mode=\"ghost\"]:hover:not(:disabled) {\n color: inherit;\n}\n\n.closeButton:disabled {\n cursor: not-allowed;\n opacity: 0.45;\n}\n\n.root[data-variant=\"filled\"]\n .closeButton[data-variant=\"neutral\"][data-mode=\"ghost\"]:hover:not(:disabled) {\n background: transparent;\n color: inherit;\n}\n\n.root[data-variant=\"filled\"] .closeButton[data-variant=\"neutral\"][data-mode=\"ghost\"]:focus-visible {\n box-shadow: 0 0 0 var(--prime-sys-border-width-focusRing) var(--prime-sys-color-focus-ring);\n border-color: transparent;\n}\n\n.root[data-variant=\"filled\"] .closeButton {\n opacity: 0.72;\n}\n\n.root[data-variant=\"light\"] .closeButton,\n.root[data-variant=\"lighter\"] .closeButton,\n.root[data-variant=\"stroke\"] .closeButton {\n opacity: 0.48;\n}\n\n.root[data-variant=\"light\"] .closeButton:hover:not(:disabled),\n.root[data-variant=\"lighter\"] .closeButton:hover:not(:disabled),\n.root[data-variant=\"stroke\"] .closeButton:hover:not(:disabled) {\n opacity: 0.72;\n}\n\n.root[data-variant=\"filled\"] .closeButton:hover:not(:disabled) {\n opacity: 0.92;\n}\n\n/* --- Filled --- */\n.root[data-variant=\"filled\"][data-status=\"error\"] {\n background: var(--prime-sys-color-status-error-backgroundEmphasis);\n color: var(--prime-sys-color-content-inverse);\n}\n\n.root[data-variant=\"filled\"][data-status=\"warning\"] {\n background: var(--prime-sys-color-status-warning-backgroundEmphasis);\n color: var(--prime-sys-color-content-inverse);\n}\n\n.root[data-variant=\"filled\"][data-status=\"success\"] {\n background: var(--prime-sys-color-status-success-backgroundEmphasis);\n color: var(--prime-sys-color-content-inverse);\n}\n\n.root[data-variant=\"filled\"][data-status=\"information\"] {\n background: var(--prime-sys-color-status-information-backgroundEmphasis);\n color: var(--prime-sys-color-content-inverse);\n}\n\n.root[data-variant=\"filled\"][data-status=\"feature\"] {\n background: var(--prime-sys-color-status-feature-backgroundEmphasis);\n color: var(--prime-sys-color-content-inverse);\n}\n\n/* --- Light --- */\n.root[data-variant=\"light\"][data-status=\"error\"] {\n background: var(--prime-sys-color-status-error-background);\n color: var(--prime-sys-color-status-error-foreground);\n}\n\n.root[data-variant=\"light\"][data-status=\"warning\"] {\n background: var(--prime-sys-color-status-warning-background);\n color: var(--prime-sys-color-status-warning-foreground);\n}\n\n.root[data-variant=\"light\"][data-status=\"success\"] {\n background: var(--prime-sys-color-status-success-background);\n color: var(--prime-sys-color-status-success-foreground);\n}\n\n.root[data-variant=\"light\"][data-status=\"information\"] {\n background: var(--prime-sys-color-status-information-background);\n color: var(--prime-sys-color-status-information-foreground);\n}\n\n.root[data-variant=\"light\"][data-status=\"feature\"] {\n background: var(--prime-sys-color-status-feature-background);\n color: var(--prime-sys-color-status-feature-foreground);\n}\n\n/* --- Lighter --- */\n.root[data-variant=\"lighter\"][data-status=\"error\"] {\n background: color-mix(\n in srgb,\n var(--prime-sys-color-status-error-background) 58%,\n var(--prime-sys-color-surface-default)\n );\n color: var(--prime-sys-color-status-error-foreground);\n}\n\n.root[data-variant=\"lighter\"][data-status=\"warning\"] {\n background: color-mix(\n in srgb,\n var(--prime-sys-color-status-warning-background) 58%,\n var(--prime-sys-color-surface-default)\n );\n color: var(--prime-sys-color-status-warning-foreground);\n}\n\n.root[data-variant=\"lighter\"][data-status=\"success\"] {\n background: color-mix(\n in srgb,\n var(--prime-sys-color-status-success-background) 58%,\n var(--prime-sys-color-surface-default)\n );\n color: var(--prime-sys-color-status-success-foreground);\n}\n\n.root[data-variant=\"lighter\"][data-status=\"information\"] {\n background: color-mix(\n in srgb,\n var(--prime-sys-color-status-information-background) 58%,\n var(--prime-sys-color-surface-default)\n );\n color: var(--prime-sys-color-status-information-foreground);\n}\n\n.root[data-variant=\"lighter\"][data-status=\"feature\"] {\n background: color-mix(\n in srgb,\n var(--prime-sys-color-status-feature-background) 58%,\n var(--prime-sys-color-surface-default)\n );\n color: var(--prime-sys-color-status-feature-foreground);\n}\n\n/* --- Stroke: нижняя акцентная полоса по статусу --- */\n.root[data-variant=\"stroke\"] {\n background: var(--prime-sys-color-surface-raised);\n color: var(--prime-sys-color-content-primary);\n}\n\n.root[data-variant=\"stroke\"]::after {\n content: \"\";\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: var(--prime-sys-unit-1px);\n pointer-events: none;\n}\n\n.root[data-variant=\"stroke\"][data-status=\"error\"] .icon {\n color: var(--prime-sys-color-status-error-foreground);\n}\n\n.root[data-variant=\"stroke\"][data-status=\"error\"]::after {\n background: var(--prime-sys-color-status-error-border);\n}\n\n.root[data-variant=\"stroke\"][data-status=\"warning\"] .icon {\n color: var(--prime-sys-color-status-warning-foreground);\n}\n\n.root[data-variant=\"stroke\"][data-status=\"warning\"]::after {\n background: var(--prime-sys-color-status-warning-border);\n}\n\n.root[data-variant=\"stroke\"][data-status=\"success\"] .icon {\n color: var(--prime-sys-color-status-success-foreground);\n}\n\n.root[data-variant=\"stroke\"][data-status=\"success\"]::after {\n background: var(--prime-sys-color-status-success-border);\n}\n\n.root[data-variant=\"stroke\"][data-status=\"information\"] .icon {\n color: var(--prime-sys-color-status-information-foreground);\n}\n\n.root[data-variant=\"stroke\"][data-status=\"information\"]::after {\n background: var(--prime-sys-color-status-information-border);\n}\n\n.root[data-variant=\"stroke\"][data-status=\"feature\"] .icon {\n color: var(--prime-sys-color-status-feature-foreground);\n}\n\n.root[data-variant=\"stroke\"][data-status=\"feature\"]::after {\n background: var(--prime-sys-color-status-feature-border);\n}\n","import { X } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { Button } from \"@/components/button/Button\";\nimport { ControlSizeProvider, useOptionalControlSize } from \"@/internal/ControlSizeContext\";\nimport { cx } from \"@/internal/cx\";\nimport { toDataAttributes } from \"@/internal/data-attributes\";\nimport type { BannerSize } from \"@/internal/states\";\n\nimport styles from \"./Banner.module.css\";\n\nexport type BannerVariant = \"filled\" | \"light\" | \"lighter\" | \"stroke\";\n\nexport type BannerStatus = \"information\" | \"warning\" | \"error\" | \"success\" | \"feature\";\n\nexport type { BannerSize };\n\nexport type BannerRootProps = {\n variant?: BannerVariant;\n status?: BannerStatus;\n size?: BannerSize;\n onDismiss?: () => void;\n className?: string;\n children?: React.ReactNode;\n} & React.HTMLAttributes<HTMLDivElement>;\n\nfunction childHasCloseButton(children: React.ReactNode): boolean {\n return React.Children.toArray(children).some(\n (c) => React.isValidElement(c) && c.type === BannerCloseButton,\n );\n}\n\nconst BannerRoot = React.forwardRef<HTMLDivElement, BannerRootProps>(function BannerRoot(\n {\n variant = \"filled\",\n status = \"information\",\n size = \"m\",\n onDismiss,\n className,\n children,\n ...rest\n },\n forwardedRef,\n) {\n const showInjectedClose = Boolean(onDismiss) && !childHasCloseButton(children);\n\n return (\n <div\n ref={forwardedRef}\n {...rest}\n className={cx(styles.root, className)}\n {...toDataAttributes({ variant, status, size })}\n >\n <ControlSizeProvider value={size}>\n {children}\n {showInjectedClose ? (\n <BannerCloseButton aria-label=\"Dismiss\" type=\"button\" onClick={onDismiss} />\n ) : null}\n </ControlSizeProvider>\n </div>\n );\n});\nBannerRoot.displayName = \"BannerRoot\";\n\nexport type BannerContentProps = {\n className?: string;\n children?: React.ReactNode;\n} & React.HTMLAttributes<HTMLDivElement>;\n\nfunction BannerContent({ className, children, ...rest }: BannerContentProps) {\n return (\n <div className={cx(styles.content, className)} {...rest}>\n {children}\n </div>\n );\n}\nBannerContent.displayName = \"BannerContent\";\n\nexport type BannerIconProps<T extends React.ElementType = \"div\"> = {\n as?: T;\n className?: string;\n children?: React.ReactNode;\n} & Omit<React.ComponentPropsWithoutRef<T>, \"as\" | \"className\">;\n\nfunction BannerIcon<T extends React.ElementType = \"div\">({\n as,\n className,\n children,\n ...rest\n}: BannerIconProps<T>) {\n const Component = (as ?? \"div\") as React.ElementType;\n\n return (\n <Component className={cx(styles.icon, className)} {...rest}>\n {children}\n </Component>\n );\n}\nBannerIcon.displayName = \"BannerIcon\";\n\nexport type BannerTitleProps = {\n className?: string;\n children?: React.ReactNode;\n} & React.HTMLAttributes<HTMLSpanElement>;\n\nfunction BannerTitle({ className, children, ...rest }: BannerTitleProps) {\n return (\n <span className={cx(styles.title, className)} {...rest}>\n {children}\n </span>\n );\n}\nBannerTitle.displayName = \"BannerTitle\";\n\nexport type BannerDescriptionProps = {\n className?: string;\n children?: React.ReactNode;\n} & React.HTMLAttributes<HTMLSpanElement>;\n\nfunction BannerDescription({ className, children, ...rest }: BannerDescriptionProps) {\n return (\n <span className={cx(styles.description, className)} {...rest}>\n {children}\n </span>\n );\n}\nBannerDescription.displayName = \"BannerDescription\";\n\nexport type BannerActionsProps = {\n className?: string;\n children?: React.ReactNode;\n} & React.HTMLAttributes<HTMLDivElement>;\n\nfunction BannerActions({ className, children, ...rest }: BannerActionsProps) {\n return (\n <div className={cx(styles.actions, className)} {...rest}>\n {children}\n </div>\n );\n}\nBannerActions.displayName = \"BannerActions\";\n\nexport type BannerCloseButtonProps = {\n className?: string;\n children?: React.ReactNode;\n} & Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"size\">;\n\nconst BannerCloseButton = React.forwardRef<HTMLButtonElement, BannerCloseButtonProps>(\n function BannerCloseButton({ className, children, type = \"button\", ...rest }, forwardedRef) {\n const controlSize = useOptionalControlSize() ?? \"m\";\n const buttonSize = controlSize === \"xs\" ? \"s\" : controlSize;\n\n return (\n <Button.Root\n ref={forwardedRef}\n type={type}\n size={buttonSize}\n mode=\"ghost\"\n variant=\"neutral\"\n className={cx(styles.closeButton, className)}\n {...rest}\n >\n {children ?? (\n <Button.Icon>\n <X aria-hidden strokeWidth={2} />\n </Button.Icon>\n )}\n </Button.Root>\n );\n },\n);\nBannerCloseButton.displayName = \"BannerCloseButton\";\n\nexport const Banner = {\n Root: BannerRoot,\n Content: BannerContent,\n Icon: BannerIcon,\n Title: BannerTitle,\n Description: BannerDescription,\n Actions: BannerActions,\n CloseButton: BannerCloseButton,\n};\n",".root {\n display: inline-flex;\n flex: 0 0 auto;\n align-items: center;\n justify-content: center;\n}\n\n/* Размеры = size.control.*.icon из семантических токенов (theme-light/dark.css). */\n.sizeXs {\n width: var(--prime-sys-size-control-xs-icon);\n height: var(--prime-sys-size-control-xs-icon);\n}\n\n.sizeS {\n width: var(--prime-sys-size-control-s-icon);\n height: var(--prime-sys-size-control-s-icon);\n}\n\n.sizeM {\n width: var(--prime-sys-size-control-m-icon);\n height: var(--prime-sys-size-control-m-icon);\n}\n\n.sizeL {\n width: var(--prime-sys-size-control-l-icon);\n height: var(--prime-sys-size-control-l-icon);\n}\n\n.sizeXl {\n width: var(--prime-sys-size-control-xl-icon);\n height: var(--prime-sys-size-control-xl-icon);\n}\n\n.toneDefault {\n color: currentColor;\n}\n\n.toneSubtle {\n color: var(--prime-sys-color-content-secondary);\n}\n\n.toneAccent {\n color: var(--prime-sys-color-content-accent);\n}\n\n.toneDanger {\n color: var(--prime-sys-color-content-danger);\n}\n","import type { LucideProps } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { useOptionalControlSize } from \"@/internal/ControlSizeContext\";\nimport { cx } from \"@/internal/cx\";\n\nimport styles from \"./Icon.module.css\";\n\ntype IconTone = \"default\" | \"subtle\" | \"accent\" | \"danger\";\ntype IconSize = \"s\" | \"m\" | \"l\" | \"xl\";\ntype IconResolvedSize = \"xs\" | IconSize;\n\nconst SIZE_CLASS: Record<IconResolvedSize, string> = {\n xs: styles.sizeXs,\n s: styles.sizeS,\n m: styles.sizeM,\n l: styles.sizeL,\n xl: styles.sizeXl,\n};\n\ntype BaseIconProps = Omit<LucideProps, \"size\" | \"color\"> & {\n size?: IconSize;\n tone?: IconTone;\n};\n\ntype IconComponent = React.ComponentType<LucideProps>;\n\nfunction createIcon(IconGlyph: IconComponent) {\n const WrappedIcon = React.forwardRef<SVGSVGElement, BaseIconProps>(\n ({ className, size: sizeProp, tone = \"default\", strokeWidth = 1.9, style, ...rest }, ref) => {\n const controlSize = useOptionalControlSize();\n const size = (sizeProp ?? controlSize ?? \"m\") as IconResolvedSize;\n\n const toneClassName =\n tone === \"default\"\n ? styles.toneDefault\n : tone === \"subtle\"\n ? styles.toneSubtle\n : tone === \"accent\"\n ? styles.toneAccent\n : styles.toneDanger;\n\n return (\n <IconGlyph\n ref={ref}\n className={cx(styles.root, SIZE_CLASS[size], toneClassName, className)}\n style={style}\n strokeWidth={strokeWidth}\n aria-hidden=\"true\"\n {...rest}\n />\n );\n },\n );\n\n WrappedIcon.displayName = `EsIcon(${IconGlyph.displayName ?? \"Glyph\"})`;\n return WrappedIcon;\n}\n\nexport type { BaseIconProps, IconSize, IconTone };\nexport { createIcon };\n","import {\n Check,\n ChevronRight,\n Circle,\n CircleDot,\n CloudUpload,\n Copy,\n Download,\n Eye,\n EyeOff,\n House,\n LayoutGrid,\n Lock,\n Mail,\n Moon,\n Sun,\n X,\n} from \"lucide-react\";\nimport * as React from \"react\";\n\nimport type { BaseIconProps } from \"./Icon\";\nimport { createIcon } from \"./Icon\";\n\nexport const IconCheck = createIcon(Check);\nexport const IconChevronRight = createIcon(ChevronRight);\nexport const IconCircleDot = createIcon(CircleDot);\nexport const IconNavItemDot = createIcon(Circle);\nexport const IconClose = createIcon(X);\nexport const IconCloudUpload = createIcon(CloudUpload);\nexport const IconCopy = createIcon(Copy);\nexport const IconDownload = createIcon(Download);\nexport const IconMail = createIcon(Mail);\nexport const IconEye = createIcon(Eye);\nexport const IconEyeOff = createIcon(EyeOff);\nexport const IconHouse = createIcon(House);\nexport const IconLayoutGrid = createIcon(LayoutGrid);\nexport const IconLock = createIcon(Lock);\nexport const IconMoon = createIcon(Moon);\nexport const IconSun = createIcon(Sun);\n\nexport const iconRegistry = {\n \"nav.chevronRight\": IconChevronRight,\n \"nav.home\": IconHouse,\n \"nav.itemDot\": IconNavItemDot,\n \"nav.layoutGrid\": IconLayoutGrid,\n \"action.close\": IconClose,\n \"action.copy\": IconCopy,\n \"action.upload\": IconCloudUpload,\n \"field.email\": IconMail,\n \"field.password.show\": IconEye,\n \"field.password.hide\": IconEyeOff,\n \"status.locked\": IconLock,\n \"theme.dark\": IconMoon,\n \"theme.light\": IconSun,\n} as const;\n\nexport type IconName = keyof typeof iconRegistry;\n\nexport type NamedIconProps = BaseIconProps & {\n name: IconName;\n};\n\nexport const Icon = React.forwardRef<SVGSVGElement, NamedIconProps>(({ name, ...rest }, ref) => {\n const IconGlyph = iconRegistry[name];\n return React.createElement(IconGlyph, { ref, ...rest });\n});\n\nIcon.displayName = \"Icon\";\n\nexport type { BaseIconProps, IconSize, IconTone } from \"./Icon\";\n",".root {\n display: inline-flex;\n align-items: center;\n gap: var(--prime-sys-size-control-m-gap);\n font-size: var(--prime-sys-size-control-m-text);\n color: var(--prime-sys-color-content-primary);\n text-decoration-line: underline;\n text-decoration-color: transparent;\n text-underline-offset: var(--prime-sys-unit-2px);\n transition:\n color var(--prime-sys-motion-fast) var(--prime-sys-motion-standard),\n text-decoration-color var(--prime-sys-motion-fast) var(--prime-sys-motion-standard);\n cursor: pointer;\n}\n\n.root:hover {\n color: var(--prime-sys-color-content-accent);\n text-decoration-color: currentColor;\n}\n\n.root:focus-visible {\n outline: var(--prime-sys-unit-2px) solid var(--prime-sys-color-focus-ring);\n outline-offset: var(--prime-sys-unit-2px);\n text-decoration-color: currentColor;\n}\n\n.root[data-disabled=\"true\"] {\n color: var(--prime-sys-color-content-disabled);\n text-decoration: none;\n}\n\n.root[data-size=\"s\"] {\n gap: var(--prime-sys-size-control-s-gap);\n font-size: var(--prime-sys-size-control-s-text);\n}\n\n.root[data-size=\"l\"] {\n gap: var(--prime-sys-size-control-l-gap);\n font-size: var(--prime-sys-size-control-l-text);\n}\n\n.root[data-size=\"xl\"] {\n gap: var(--prime-sys-size-control-xl-gap);\n font-size: var(--prime-sys-size-control-xl-text);\n}\n","import * as React from \"react\";\n\nimport { ControlSizeProvider } from \"@/internal/ControlSizeContext\";\nimport { cx } from \"@/internal/cx\";\nimport { toDataAttributes } from \"@/internal/data-attributes\";\nimport type { LinkButtonSize } from \"@/internal/states\";\n\nimport styles from \"./LinkButton.module.css\";\n\nexport type { LinkButtonSize };\n\nexport type LinkButtonRootProps = {\n size?: LinkButtonSize;\n disabled?: boolean;\n children?: React.ReactNode;\n className?: string;\n} & React.AnchorHTMLAttributes<HTMLAnchorElement>;\n\nconst LinkButtonRoot = React.forwardRef<HTMLAnchorElement, LinkButtonRootProps>(\n (\n {\n size = \"m\",\n disabled = false,\n children,\n className,\n tabIndex,\n \"aria-disabled\": ariaDisabled,\n ...rest\n },\n ref,\n ) => {\n const cls = cx(styles.root, className);\n const dataProps = toDataAttributes({\n size,\n ...(disabled ? { disabled: true } : {}),\n });\n\n if (disabled) {\n return (\n // biome-ignore lint/a11y/useSemanticElements: disabled state is not a navigable <a>; span keeps cursor + a11y without href\n <span\n ref={ref as React.Ref<HTMLSpanElement>}\n role=\"link\"\n aria-disabled=\"true\"\n tabIndex={-1}\n className={cls}\n {...dataProps}\n >\n <ControlSizeProvider value={size}>{children}</ControlSizeProvider>\n </span>\n );\n }\n\n return (\n <a\n {...rest}\n ref={ref}\n className={cls}\n aria-disabled={ariaDisabled}\n tabIndex={tabIndex}\n {...dataProps}\n >\n <ControlSizeProvider value={size}>{children}</ControlSizeProvider>\n </a>\n );\n },\n);\n\nLinkButtonRoot.displayName = \"LinkButton.Root\";\n\nexport const LinkButton = {\n Root: LinkButtonRoot,\n};\n",".root {\n --bc-text: var(--prime-sys-size-control-m-text);\n}\n\n.root[data-size=\"s\"] {\n --bc-text: var(--prime-sys-size-control-s-text);\n}\n\n.root[data-size=\"l\"] {\n --bc-text: var(--prime-sys-size-control-l-text);\n}\n\n.root[data-size=\"xl\"] {\n --bc-text: var(--prime-sys-size-control-xl-text);\n}\n\n.root ol {\n display: flex;\n align-items: center;\n gap: var(--prime-sys-spacing-x2);\n list-style: none;\n padding: 0;\n margin: 0;\n flex-wrap: wrap;\n}\n\n.item {\n display: inline-flex;\n align-items: center;\n}\n\n/* Первый пункт «только иконка» (дом): выравнивание, без лишней высоты строки. */\n.itemHome .breadcrumbLink {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n line-height: 0;\n}\n\n/* Предыдущие сегменты: приглушённый текст; hover чуть сильнее, без «акцентного» цвета ссылки.\n Кегль задаёт LinkButton по `size` у Root. */\n.item a.breadcrumbLink {\n color: var(--prime-sys-color-content-muted);\n}\n\n.item a.breadcrumbLink:hover {\n color: var(--prime-sys-color-content-primary);\n text-decoration-color: transparent;\n}\n\n.item a.breadcrumbLink:focus-visible {\n color: var(--prime-sys-color-content-primary);\n text-decoration-color: transparent;\n}\n\n/* Текущая страница: тот же кегль, что и ссылки при данном `size`. */\n.itemCurrent {\n color: var(--prime-sys-color-content-primary);\n font-size: var(--bc-text);\n}\n\n.separator {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n color: var(--prime-sys-color-content-muted);\n user-select: none;\n}\n\n.ellipsis {\n color: var(--prime-sys-color-content-muted);\n font-size: var(--bc-text);\n}\n","import * as React from \"react\";\n\nimport { Icon } from \"@/icons\";\nimport { ControlSizeProvider } from \"@/internal/ControlSizeContext\";\nimport { cx } from \"@/internal/cx\";\nimport { toDataAttributes } from \"@/internal/data-attributes\";\nimport type { BreadcrumbSize } from \"@/internal/states\";\n\nimport { LinkButton } from \"../link-button/LinkButton\";\n\nimport styles from \"./Breadcrumb.module.css\";\n\nexport type { BreadcrumbSize };\n\nconst BreadcrumbSizeContext = React.createContext<BreadcrumbSize>(\"m\");\nBreadcrumbSizeContext.displayName = \"BreadcrumbSizeContext\";\n\nfunction useBreadcrumbSize(): BreadcrumbSize {\n return React.useContext(BreadcrumbSizeContext);\n}\n\nexport type BreadcrumbRootProps = {\n children: React.ReactNode;\n className?: string;\n /** Кегль ссылок (LinkButton), текущей страницы, многоточия; иконка-разделитель и иконка «дом» — тот же ярус. */\n size?: BreadcrumbSize;\n} & React.HTMLAttributes<HTMLElement>;\n\nfunction BreadcrumbRoot({ children, className, size = \"m\", ...rest }: BreadcrumbRootProps) {\n return (\n <BreadcrumbSizeContext.Provider value={size}>\n <ControlSizeProvider value={size}>\n <nav\n aria-label=\"Breadcrumb\"\n className={cx(styles.root, className)}\n {...toDataAttributes({ size })}\n {...rest}\n >\n <ol>{children}</ol>\n </nav>\n </ControlSizeProvider>\n </BreadcrumbSizeContext.Provider>\n );\n}\nBreadcrumbRoot.displayName = \"Breadcrumb.Root\";\n\nexport type BreadcrumbItemProps = {\n href?: string;\n current?: boolean;\n children?: React.ReactNode;\n className?: string;\n /** Для ссылки без видимого текста (например, только иконка «дом»). */\n \"aria-label\"?: string;\n};\n\nfunction BreadcrumbItem({\n href,\n current,\n children,\n className,\n \"aria-label\": ariaLabel,\n}: BreadcrumbItemProps) {\n const size = useBreadcrumbSize();\n return (\n <li className={cx(styles.item, className)}>\n {href ? (\n <LinkButton.Root\n href={href}\n size={size}\n className={styles.breadcrumbLink}\n aria-label={ariaLabel}\n >\n {children}\n </LinkButton.Root>\n ) : (\n <span\n className={current ? styles.itemCurrent : undefined}\n aria-current={current ? \"page\" : undefined}\n >\n {children}\n </span>\n )}\n </li>\n );\n}\nBreadcrumbItem.displayName = \"Breadcrumb.Item\";\n\nexport type BreadcrumbSeparatorProps = {\n children?: React.ReactNode;\n className?: string;\n};\n\nfunction BreadcrumbSeparator({ children, className }: BreadcrumbSeparatorProps) {\n const size = useBreadcrumbSize();\n return (\n <li aria-hidden=\"true\" className={cx(styles.separator, className)}>\n {children ?? <Icon name=\"nav.chevronRight\" size={size} tone=\"subtle\" />}\n </li>\n );\n}\nBreadcrumbSeparator.displayName = \"Breadcrumb.Separator\";\n\nexport type BreadcrumbEllipsisProps = {\n className?: string;\n};\n\nfunction BreadcrumbEllipsis({ className }: BreadcrumbEllipsisProps) {\n return <li className={cx(styles.ellipsis, className)}>…</li>;\n}\nBreadcrumbEllipsis.displayName = \"Breadcrumb.Ellipsis\";\n\nexport const Breadcrumb = {\n Root: BreadcrumbRoot,\n Item: BreadcrumbItem,\n Separator: BreadcrumbSeparator,\n Ellipsis: BreadcrumbEllipsis,\n};\n","/* Сегментированная группа: общая обводка, скругления только снаружи, стыковка сегментов через var(--prime-sys-unit-neg-1px) */\n\n.root {\n --prime-bg-group-radius: var(--prime-sys-size-control-m-radius);\n --prime-bg-item-height: var(--prime-sys-size-control-m-height);\n /* Чуть шире, чем у Button: сегменты с иконкой+текстом читаются лучше */\n --prime-bg-item-pad-x: var(--prime-sys-spacing-x4);\n --prime-bg-item-font: var(--prime-sys-size-control-m-text);\n --prime-bg-item-icon: var(--prime-sys-size-control-m-icon);\n\n display: inline-flex;\n vertical-align: middle;\n}\n\n.root[data-size=\"s\"] {\n --prime-bg-group-radius: var(--prime-sys-size-control-s-radius);\n --prime-bg-item-height: var(--prime-sys-size-control-s-height);\n --prime-bg-item-pad-x: var(--prime-sys-spacing-x3);\n --prime-bg-item-font: var(--prime-sys-size-control-s-text);\n --prime-bg-item-icon: var(--prime-sys-size-control-s-icon);\n}\n\n.root[data-size=\"l\"] {\n --prime-bg-group-radius: var(--prime-sys-size-control-l-radius);\n --prime-bg-item-height: var(--prime-sys-size-control-l-height);\n --prime-bg-item-pad-x: var(--prime-sys-spacing-x5);\n --prime-bg-item-font: var(--prime-sys-size-control-l-text);\n --prime-bg-item-icon: var(--prime-sys-size-control-l-icon);\n}\n\n.root[data-size=\"xl\"] {\n --prime-bg-group-radius: var(--prime-sys-size-control-xl-radius);\n --prime-bg-item-height: var(--prime-sys-size-control-xl-height);\n --prime-bg-item-pad-x: var(--prime-sys-spacing-x6);\n --prime-bg-item-font: var(--prime-sys-size-control-xl-text);\n --prime-bg-item-icon: var(--prime-sys-size-control-xl-icon);\n}\n\n.root[data-orientation=\"vertical\"] {\n flex-direction: column;\n align-items: stretch;\n}\n\n.item {\n position: relative;\n z-index: 0;\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--prime-bg-item-pad-x);\n height: var(--prime-bg-item-height);\n padding-block: 0;\n padding-inline: var(--prime-bg-item-pad-x);\n margin: 0;\n border: var(--prime-sys-unit-1px) solid var(--prime-sys-color-border-subtle);\n background: var(--prime-sys-color-surface-elevated);\n color: var(--prime-sys-color-content-secondary);\n font-family: inherit;\n font-size: var(--prime-bg-item-font);\n font-weight: var(--prime-sys-typography-weight-medium);\n line-height: 1;\n white-space: nowrap;\n cursor: pointer;\n transition:\n background-color var(--prime-sys-motion-medium) var(--prime-sys-motion-standard),\n color var(--prime-sys-motion-medium) var(--prime-sys-motion-standard),\n box-shadow var(--prime-sys-motion-medium) var(--prime-sys-motion-standard);\n}\n\n.item:hover:not(:disabled) {\n background: var(--prime-sys-color-action-neutralBackgroundHover);\n color: var(--prime-sys-color-content-primary);\n}\n\n.item:focus {\n outline: none;\n}\n\n.item:focus-visible {\n z-index: 1;\n box-shadow: var(--prime-sys-elevation-shadow-buttonFocus);\n}\n\n.item[data-state=\"on\"] {\n background: var(--prime-sys-color-action-neutralBackgroundHover);\n color: var(--prime-sys-color-content-primary);\n}\n\n.item:disabled {\n cursor: not-allowed;\n opacity: 0.65;\n color: var(--prime-sys-color-content-disabled);\n}\n\n.item:disabled:hover {\n background: var(--prime-sys-color-surface-elevated);\n}\n\n/* Horizontal: скругления слева / справа у краёв группы */\n.root:not([data-orientation=\"vertical\"]) > .item:first-child {\n border-start-start-radius: var(--prime-bg-group-radius);\n border-end-start-radius: var(--prime-bg-group-radius);\n}\n\n.root:not([data-orientation=\"vertical\"]) > .item:last-child {\n border-start-end-radius: var(--prime-bg-group-radius);\n border-end-end-radius: var(--prime-bg-group-radius);\n}\n\n.root:not([data-orientation=\"vertical\"]) > .item + .item {\n margin-inline-start: var(--prime-sys-unit-neg-1px);\n}\n\n/* Vertical */\n.root[data-orientation=\"vertical\"] > .item:first-child {\n border-start-start-radius: var(--prime-bg-group-radius);\n border-start-end-radius: var(--prime-bg-group-radius);\n}\n\n.root[data-orientation=\"vertical\"] > .item:last-child {\n border-end-start-radius: var(--prime-bg-group-radius);\n border-end-end-radius: var(--prime-bg-group-radius);\n}\n\n.root[data-orientation=\"vertical\"] > .item + .item {\n margin-top: var(--prime-sys-unit-neg-1px);\n}\n\n.icon {\n display: inline-flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n width: var(--prime-bg-item-icon);\n height: var(--prime-bg-item-icon);\n margin-inline: var(--prime-sys-unit-neg-0p25rem);\n}\n\n.icon > svg {\n width: 100%;\n height: 100%;\n}\n","import * as React from \"react\";\nimport { ControlSizeProvider } from \"@/internal/ControlSizeContext\";\nimport { createComponentContext } from \"@/internal/context\";\nimport { cx } from \"@/internal/cx\";\nimport type { ButtonGroupSize } from \"@/internal/states\";\n\nimport styles from \"./ButtonGroup.module.css\";\n\nexport type ButtonGroupOrientation = \"horizontal\" | \"vertical\";\n\ntype ButtonGroupContextValue = {\n size: ButtonGroupSize;\n};\n\nconst [ButtonGroupProvider, useButtonGroupContext] =\n createComponentContext<ButtonGroupContextValue>(\"ButtonGroup\");\n\nexport type ButtonGroupRootProps = React.HTMLAttributes<HTMLDivElement> & {\n orientation?: ButtonGroupOrientation;\n size?: ButtonGroupSize;\n children: React.ReactNode;\n};\n\nconst ButtonGroupRoot = React.forwardRef<HTMLDivElement, ButtonGroupRootProps>(\n ({ orientation = \"horizontal\", size = \"m\", children, className, ...rest }, ref) => {\n const value = React.useMemo(() => ({ size }), [size]);\n\n return (\n <ButtonGroupProvider value={value}>\n <div\n ref={ref}\n className={cx(styles.root, className)}\n data-orientation={orientation === \"vertical\" ? \"vertical\" : undefined}\n data-size={size}\n {...rest}\n >\n <ControlSizeProvider value={size}>{children}</ControlSizeProvider>\n </div>\n </ButtonGroupProvider>\n );\n },\n);\n\nButtonGroupRoot.displayName = \"ButtonGroupRoot\";\n\nexport type ButtonGroupItemProps = React.ButtonHTMLAttributes<HTMLButtonElement> & {\n /** Включённое состояние сегмента: `data-state=\"on\"` и синхронный `aria-pressed`. */\n pressed?: boolean;\n};\n\nconst ButtonGroupItem = React.forwardRef<HTMLButtonElement, ButtonGroupItemProps>(\n ({ className, pressed, type = \"button\", ...rest }, ref) => {\n useButtonGroupContext();\n\n return (\n <button\n ref={ref}\n type={type}\n className={cx(styles.item, className)}\n data-state={pressed === true ? \"on\" : undefined}\n aria-pressed={typeof pressed === \"boolean\" ? pressed : undefined}\n {...rest}\n />\n );\n },\n);\n\nButtonGroupItem.displayName = \"ButtonGroupItem\";\n\nexport type ButtonGroupIconProps = {\n children: React.ReactNode;\n className?: string;\n} & Omit<React.HTMLAttributes<HTMLSpanElement>, \"children\">;\n\nfunction ButtonGroupIcon({ children, className, ...rest }: ButtonGroupIconProps) {\n useButtonGroupContext();\n\n return (\n <span className={cx(styles.icon, className)} aria-hidden=\"true\" {...rest}>\n {children}\n </span>\n );\n}\n\nButtonGroupIcon.displayName = \"ButtonGroupIcon\";\n\nexport type { ButtonGroupSize };\n\nexport const ButtonGroup = { Root: ButtonGroupRoot, Item: ButtonGroupItem, Icon: ButtonGroupIcon };\n",".root {\n margin: 0;\n display: inline-flex;\n align-items: flex-start;\n color: var(--prime-sys-color-content-secondary);\n}\n\n/*\n * Номинальный `data-size` = размер поля.\n * Визуальный ярус подсказки на ступень ниже: s→xs, m→s, l→m, xl→l.\n */\n.root[data-size=\"s\"] {\n --prime-hint-icon: var(--prime-sys-size-control-xs-icon);\n gap: var(--prime-sys-size-control-xs-gap);\n font-size: var(--prime-sys-size-control-xs-text);\n line-height: var(--prime-sys-typography-lineHeightScale-2xs);\n}\n\n.root[data-size=\"m\"] {\n --prime-hint-icon: var(--prime-sys-size-control-s-icon);\n gap: var(--prime-sys-size-control-s-gap);\n font-size: var(--prime-sys-size-control-s-text);\n line-height: var(--prime-sys-typography-lineHeightScale-xs);\n}\n\n.root[data-size=\"l\"] {\n --prime-hint-icon: var(--prime-sys-size-control-m-icon);\n gap: var(--prime-sys-size-control-m-gap);\n font-size: var(--prime-sys-size-control-m-text);\n line-height: var(--prime-sys-typography-lineHeightScale-s);\n}\n\n.root[data-size=\"xl\"] {\n --prime-hint-icon: var(--prime-sys-size-control-l-icon);\n gap: var(--prime-sys-size-control-l-gap);\n font-size: var(--prime-sys-size-control-l-text);\n line-height: var(--prime-sys-typography-lineHeightScale-m);\n}\n\n.root[data-variant=\"error\"] {\n color: var(--prime-sys-color-content-danger);\n}\n\n.root[data-variant=\"disabled\"] {\n color: var(--prime-sys-color-content-disabled);\n}\n\n.icon {\n flex-shrink: 0;\n display: inline-flex;\n width: var(--prime-hint-icon);\n height: var(--prime-hint-icon);\n}\n\n.icon :where(svg) {\n width: 100%;\n height: 100%;\n display: block;\n}\n","import type * as React from \"react\";\n\nimport { ControlSizeProvider } from \"@/internal/ControlSizeContext\";\nimport { cx } from \"@/internal/cx\";\nimport { toDataAttributes } from \"@/internal/data-attributes\";\nimport type { HintSize } from \"@/internal/states\";\n\nimport styles from \"./Hint.module.css\";\n\nexport type HintVariant = \"default\" | \"error\" | \"disabled\";\n\nexport type { HintSize };\n\nexport type HintRootProps = {\n size?: HintSize;\n variant?: HintVariant;\n children?: React.ReactNode;\n className?: string;\n} & React.HTMLAttributes<HTMLParagraphElement>;\n\nfunction HintRoot({\n className,\n size = \"m\",\n variant = \"default\",\n children,\n ...rest\n}: HintRootProps) {\n return (\n <ControlSizeProvider value={size}>\n <p className={cx(styles.root, className)} {...rest} {...toDataAttributes({ variant, size })}>\n {children}\n </p>\n </ControlSizeProvider>\n );\n}\nHintRoot.displayName = \"HintRoot\";\n\nexport type HintIconProps = {\n children: React.ReactNode;\n className?: string;\n} & React.HTMLAttributes<HTMLSpanElement>;\n\nfunction HintIcon({ className, children, ...rest }: HintIconProps) {\n return (\n <span className={cx(styles.icon, className)} aria-hidden=\"true\" {...rest}>\n {children}\n </span>\n );\n}\nHintIcon.displayName = \"HintIcon\";\n\nexport const Hint = { Root: HintRoot, Icon: HintIcon };\n",".root {\n font-size: var(--prime-sys-size-control-m-text);\n font-weight: var(--prime-sys-typography-weight-medium);\n color: var(--prime-sys-color-content-primary);\n display: inline-flex;\n align-items: center;\n gap: var(--prime-sys-size-control-m-gap);\n}\n\n.root[data-size=\"s\"] {\n font-size: var(--prime-sys-size-control-s-text);\n gap: var(--prime-sys-size-control-s-gap);\n}\n\n.root[data-size=\"l\"] {\n font-size: var(--prime-sys-size-control-l-text);\n gap: var(--prime-sys-size-control-l-gap);\n}\n\n.root[data-size=\"xl\"] {\n font-size: var(--prime-sys-size-control-xl-text);\n gap: var(--prime-sys-size-control-xl-gap);\n}\n\n.iconSlot {\n display: inline-flex;\n flex-shrink: 0;\n align-items: center;\n}\n\n.root[data-disabled=\"true\"] {\n color: var(--prime-sys-color-content-disabled);\n}\n\n.asterisk {\n color: var(--prime-sys-color-content-danger);\n}\n\n.sub {\n color: var(--prime-sys-color-content-secondary);\n font-weight: var(--prime-sys-typography-weight-regular);\n}\n","import * as React from \"react\";\n\nimport { ControlSizeProvider } from \"@/internal/ControlSizeContext\";\nimport { cx } from \"@/internal/cx\";\nimport { toDataAttributes } from \"@/internal/data-attributes\";\nimport type { LabelSize } from \"@/internal/states\";\n\nimport styles from \"./Label.module.css\";\n\nexport type { LabelSize };\n\nconst LabelSizeContext = React.createContext<LabelSize>(\"m\");\n\nexport type LabelRootProps = Omit<React.LabelHTMLAttributes<HTMLLabelElement>, \"size\"> & {\n disabled?: boolean;\n size?: LabelSize;\n};\n\nconst LabelRoot = React.forwardRef<HTMLLabelElement, LabelRootProps>(\n ({ className, disabled, children, size = \"m\", ...rest }, ref) => {\n return (\n // biome-ignore lint/a11y/noLabelWithoutControl: field label primitive; association via htmlFor or wrapping control is caller responsibility\n <label\n ref={ref}\n className={cx(styles.root, className)}\n aria-disabled={disabled || undefined}\n {...rest}\n {...toDataAttributes({ disabled, size })}\n >\n <LabelSizeContext.Provider value={size}>{children}</LabelSizeContext.Provider>\n </label>\n );\n },\n);\nLabelRoot.displayName = \"LabelRoot\";\n\nfunction LabelIcon({ className, children, ...rest }: React.HTMLAttributes<HTMLSpanElement>) {\n const size = React.useContext(LabelSizeContext);\n return (\n <span className={cx(styles.iconSlot, className)} {...rest}>\n <ControlSizeProvider value={size}>{children}</ControlSizeProvider>\n </span>\n );\n}\nLabelIcon.displayName = \"LabelIcon\";\n\nfunction LabelAsterisk({ className, children, ...rest }: React.HTMLAttributes<HTMLSpanElement>) {\n return (\n <span className={cx(styles.asterisk, className)} {...rest}>\n {children ?? \"*\"}\n </span>\n );\n}\nLabelAsterisk.displayName = \"LabelAsterisk\";\n\nfunction LabelSub({ className, children, ...rest }: React.HTMLAttributes<HTMLSpanElement>) {\n return (\n <span className={cx(styles.sub, className)} {...rest}>\n {children}\n </span>\n );\n}\nLabelSub.displayName = \"LabelSub\";\n\nexport const Label = { Root: LabelRoot, Icon: LabelIcon, Asterisk: LabelAsterisk, Sub: LabelSub };\n","import * as React from \"react\";\n\ntype UseControllableStateParams<T> = {\n value?: T;\n defaultValue: T;\n onChange?: (nextValue: T) => void;\n};\n\nexport function useControllableState<T>({\n value,\n defaultValue,\n onChange,\n}: UseControllableStateParams<T>) {\n const [internalValue, setInternalValue] = React.useState<T>(defaultValue);\n\n const isControlled = value !== undefined;\n const currentValue = isControlled ? value : internalValue;\n const currentValueRef = React.useRef(currentValue);\n\n React.useEffect(() => {\n currentValueRef.current = currentValue;\n }, [currentValue]);\n\n const setValue = React.useCallback(\n (nextValue: T | ((prev: T) => T)) => {\n const previousValue = currentValueRef.current;\n const computedValue =\n typeof nextValue === \"function\" ? (nextValue as (prev: T) => T)(previousValue) : nextValue;\n\n if (Object.is(previousValue, computedValue)) {\n return;\n }\n\n if (!isControlled) {\n setInternalValue(computedValue);\n }\n\n onChange?.(computedValue);\n },\n [isControlled, onChange],\n );\n\n return [currentValue, setValue] as const;\n}\n","import * as React from \"react\";\n\nfunction assignRef<T>(ref: React.Ref<T> | undefined, value: T) {\n if (typeof ref === \"function\") {\n ref(value);\n return;\n }\n\n if (ref && \"current\" in ref) {\n (ref as React.MutableRefObject<T>).current = value;\n }\n}\n\nexport function useMergedRefs<T>(...refs: Array<React.Ref<T> | undefined>) {\n return React.useCallback(\n (value: T) => {\n for (const ref of refs) {\n assignRef(ref, value);\n }\n },\n [refs],\n );\n}\n","/*\n * Зазор контрол–текст: не меньше, чем у поля m; для l/xl растёт пропорционально размеру\n * контрола (фиксированный px при крупном чекбоксе выглядел «уже», чем у s).\n */\n.field {\n --prime-choice-control-size: var(--prime-sys-size-choice-m-control);\n --prime-choice-col-gap: var(--prime-sys-size-control-m-inputPaddingX);\n /* Совпадает с левым краем колонки текста в `labelRow` (grid: control | text). */\n --prime-choice-hint-offset: calc(var(--prime-choice-control-size) + var(--prime-choice-col-gap));\n --prime-choice-stack-gap: var(--prime-sys-size-control-m-gap);\n box-sizing: border-box;\n width: 100%;\n min-width: 0;\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: var(--prime-choice-stack-gap);\n}\n\n.field[data-size=\"s\"] {\n --prime-choice-control-size: var(--prime-sys-size-choice-s-control);\n --prime-choice-col-gap: var(--prime-sys-size-control-s-inputPaddingX);\n}\n\n.field[data-size=\"l\"] {\n --prime-choice-control-size: var(--prime-sys-size-choice-l-control);\n --prime-choice-col-gap: var(--prime-sys-size-control-l-inputPaddingX);\n}\n\n.field[data-size=\"xl\"] {\n --prime-choice-control-size: var(--prime-sys-size-choice-xl-control);\n --prime-choice-col-gap: var(--prime-sys-size-control-xl-inputPaddingX);\n}\n\n/* .field — выше специфичность, чем у Label.Root (inline-flex + gap), чтобы сетка не ломалась. */\n.field .labelRow {\n display: grid;\n grid-template-columns: auto 1fr;\n gap: 0;\n row-gap: 0;\n column-gap: var(--prime-choice-col-gap);\n align-items: center;\n width: 100%;\n cursor: pointer;\n}\n\n.controlCell {\n position: relative;\n flex-shrink: 0;\n width: var(--prime-choice-control-size);\n height: var(--prime-choice-control-size);\n}\n\n.input {\n position: absolute;\n opacity: 0;\n pointer-events: none;\n}\n\n.control {\n position: relative;\n width: 100%;\n height: 100%;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.svg {\n width: 100%;\n height: 100%;\n display: inline-flex;\n overflow: visible;\n}\n\n/* ---- rect (background + border) ---- */\n\n.rect {\n fill: var(--prime-sys-color-surface-raised);\n stroke: var(--prime-sys-color-field-border);\n stroke-width: 1;\n transition:\n fill var(--prime-sys-motion-medium) var(--prime-sys-motion-standard),\n stroke var(--prime-sys-motion-medium) var(--prime-sys-motion-standard);\n}\n\n/* ---- checkmark path ---- */\n\n.checkPath {\n fill: none;\n stroke: var(--prime-sys-color-content-inverse);\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n stroke-dasharray: 14;\n stroke-dashoffset: 14;\n transition: stroke-dashoffset var(--prime-sys-motion-fast) var(--prime-sys-motion-standard);\n}\n\n/* ---- indeterminate line ---- */\n\n.indeterminateLine {\n fill: none;\n stroke: var(--prime-sys-color-content-inverse);\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-dasharray: 7;\n stroke-dashoffset: 7;\n transition: stroke-dashoffset var(--prime-sys-motion-fast) var(--prime-sys-motion-standard);\n}\n\n/* Текст подписи наследует кегль от Label.Root; ограничиваем перенос. */\n.text {\n line-height: var(--prime-sys-typography-body-lineHeight);\n min-width: 0;\n}\n\n/* ---- hover (unchecked) ---- */\n\n.labelRow:hover .rect {\n stroke: var(--prime-sys-color-field-borderHover);\n fill: var(--prime-sys-color-action-neutralBackgroundHover);\n}\n\n/* ---- checked / indeterminate — rect fill ---- */\n\n.field[data-checked=\"true\"] .rect,\n.field[data-indeterminate=\"true\"] .rect {\n fill: var(--prime-sys-color-action-primaryBackground);\n stroke: var(--prime-sys-color-action-primaryBackground);\n}\n\n/* ---- checked / indeterminate — hover ---- */\n\n.field[data-checked=\"true\"] .labelRow:hover .rect,\n.field[data-indeterminate=\"true\"] .labelRow:hover .rect {\n fill: var(--prime-sys-color-action-primaryBackgroundHover);\n stroke: var(--prime-sys-color-action-primaryBackgroundHover);\n}\n\n/* ---- animate checkmark ---- */\n\n.field[data-checked=\"true\"] .checkPath {\n stroke-dashoffset: 0;\n}\n\n/* ---- animate indeterminate line ---- */\n\n.field[data-indeterminate=\"true\"] .indeterminateLine {\n stroke-dashoffset: 0;\n}\n\n/* ---- focus-visible ---- */\n\n.input:focus-visible + .control {\n border-radius: var(--prime-sys-shape-radius-s);\n box-shadow: var(--prime-sys-elevation-shadow-buttonFocus);\n}\n\n/* ---- invalid (variant=error или Checkbox.Error) — как у Radio ---- */\n\n.field[data-invalid=\"true\"] .rect {\n stroke: var(--prime-sys-color-field-borderError);\n}\n\n/* ---- disabled ---- */\n\n.field[data-disabled=\"true\"] .labelRow {\n cursor: not-allowed;\n}\n\n.field[data-disabled=\"true\"] .rect {\n stroke: var(--prime-sys-color-border-subtle);\n fill: var(--prime-sys-color-surface-accentSoft);\n}\n\n.field[data-disabled=\"true\"] .checkPath,\n.field[data-disabled=\"true\"] .indeterminateLine {\n stroke: var(--prime-sys-color-content-disabled);\n}\n\n.field[data-disabled=\"true\"] .labelRow:hover .rect {\n stroke: var(--prime-sys-color-border-subtle);\n fill: var(--prime-sys-color-surface-accentSoft);\n}\n\n/* Hint / error — под колонкой текста (как meta у Input), не под квадратом. */\n.hintSlot {\n box-sizing: border-box;\n width: 100%;\n max-width: 100%;\n padding-inline-start: var(--prime-choice-hint-offset);\n justify-content: flex-start;\n}\n","import * as React from \"react\";\nimport { Hint } from \"@/components/hint/Hint\";\nimport { Label } from \"@/components/label/Label\";\nimport { useControllableState } from \"@/hooks/useControllableState\";\nimport { useMergedRefs } from \"@/hooks/useMergedRefs\";\nimport { ControlSizeProvider } from \"@/internal/ControlSizeContext\";\nimport { createComponentContext } from \"@/internal/context\";\nimport { cx } from \"@/internal/cx\";\nimport { toDataAttributes } from \"@/internal/data-attributes\";\nimport type { CheckboxSize, CheckboxVariant, HintSize, LabelSize } from \"@/internal/states\";\n\nimport styles from \"./Checkbox.module.css\";\n\ntype CheckboxContextValue = {\n inputId: string;\n hintId: string;\n errorId: string;\n size: CheckboxSize;\n inputRef: React.Ref<HTMLInputElement>;\n isChecked: boolean;\n invalid: boolean;\n disabled: boolean;\n indeterminate: boolean;\n describedBy: string | undefined;\n handleChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n restInputPropsRef: React.MutableRefObject<React.InputHTMLAttributes<HTMLInputElement>>;\n registerHint: () => void;\n unregisterHint: () => void;\n registerError: () => void;\n unregisterError: () => void;\n};\n\nconst [CheckboxProvider, useCheckboxContext] =\n createComponentContext<CheckboxContextValue>(\"Checkbox\");\n\nexport type CheckboxRootProps = Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"type\" | \"size\"\n> & {\n variant?: CheckboxVariant;\n size?: CheckboxSize;\n indeterminate?: boolean;\n};\n\nconst CheckboxRoot = React.forwardRef<HTMLInputElement, CheckboxRootProps>(\n (\n {\n id,\n variant = \"default\",\n size = \"m\",\n disabled,\n className,\n checked,\n defaultChecked,\n onChange,\n indeterminate = false,\n \"aria-describedby\": ariaDescribedBy,\n children,\n ...inputRest\n },\n ref,\n ) => {\n const rawId = React.useId();\n const inputId = id ?? rawId;\n const hintId = `${inputId}-hint`;\n const errorId = `${inputId}-error`;\n\n const [hasHint, setHasHint] = React.useState(false);\n const [hasError, setHasError] = React.useState(false);\n\n const invalid = variant === \"error\" || hasError;\n\n const [isChecked, setIsChecked] = useControllableState<boolean>({\n value: checked as boolean | undefined,\n defaultValue: Boolean(defaultChecked),\n onChange: undefined,\n });\n\n const internalRef = React.useRef<HTMLInputElement>(null);\n const mergedRef = useMergedRefs(internalRef, ref);\n\n React.useEffect(() => {\n if (internalRef.current) {\n internalRef.current.indeterminate = indeterminate;\n }\n }, [indeterminate]);\n\n const handleChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n setIsChecked(e.target.checked);\n onChange?.(e);\n },\n [onChange, setIsChecked],\n );\n\n const restInputPropsRef = React.useRef<React.InputHTMLAttributes<HTMLInputElement>>(inputRest);\n restInputPropsRef.current = inputRest;\n\n const parts = [\n ariaDescribedBy,\n hasHint ? hintId : undefined,\n hasError ? errorId : undefined,\n ].filter(Boolean);\n const describedBy = parts.length > 0 ? parts.join(\" \") : undefined;\n\n const registerHint = React.useCallback(() => setHasHint(true), []);\n const unregisterHint = React.useCallback(() => setHasHint(false), []);\n const registerError = React.useCallback(() => setHasError(true), []);\n const unregisterError = React.useCallback(() => setHasError(false), []);\n\n const showChecked = isChecked && !indeterminate;\n\n const ctxValue = React.useMemo(\n () => ({\n inputId,\n hintId,\n errorId,\n size,\n inputRef: mergedRef,\n isChecked,\n invalid,\n disabled: Boolean(disabled),\n indeterminate,\n describedBy,\n handleChange,\n restInputPropsRef,\n registerHint,\n unregisterHint,\n registerError,\n unregisterError,\n }),\n [\n inputId,\n hintId,\n errorId,\n size,\n mergedRef,\n isChecked,\n invalid,\n disabled,\n indeterminate,\n describedBy,\n handleChange,\n registerHint,\n unregisterHint,\n registerError,\n unregisterError,\n ],\n );\n\n return (\n <CheckboxProvider value={ctxValue}>\n <ControlSizeProvider value={size}>\n <div\n className={cx(styles.field, className)}\n {...toDataAttributes({\n size,\n variant,\n disabled: Boolean(disabled),\n invalid,\n checked: showChecked,\n indeterminate,\n })}\n >\n {children}\n </div>\n </ControlSizeProvider>\n </CheckboxProvider>\n );\n },\n);\n\nCheckboxRoot.displayName = \"CheckboxRoot\";\n\n// ─── Label ───────────────────────────────────────────────────────────────────\n\nexport type CheckboxLabelProps = {\n children?: React.ReactNode;\n className?: string;\n} & Omit<React.HTMLAttributes<HTMLLabelElement>, \"htmlFor\" | \"size\">;\n\nconst CheckboxLabel = React.forwardRef<HTMLLabelElement, CheckboxLabelProps>(function CheckboxLabel(\n { children, className, ...rest },\n ref,\n) {\n const {\n inputId,\n inputRef,\n isChecked,\n invalid,\n disabled,\n describedBy,\n handleChange,\n restInputPropsRef,\n size,\n } = useCheckboxContext();\n\n const filterId = React.useId();\n const svgFilterId = `es-cb-${filterId.replace(/:/g, \"\")}`;\n\n return (\n <Label.Root\n ref={ref}\n htmlFor={inputId}\n size={size as LabelSize}\n disabled={disabled}\n className={cx(styles.labelRow, className)}\n {...rest}\n >\n <span className={styles.controlCell}>\n <input\n ref={inputRef}\n id={inputId}\n type=\"checkbox\"\n className={styles.input}\n disabled={disabled}\n checked={isChecked}\n onChange={handleChange}\n aria-invalid={invalid || undefined}\n aria-describedby={describedBy || undefined}\n {...restInputPropsRef.current}\n />\n <span className={styles.control} aria-hidden=\"true\">\n <svg viewBox=\"0 0 16 16\" className={styles.svg} aria-hidden=\"true\">\n <defs>\n <filter id={svgFilterId}>\n <feDropShadow dx=\"0\" dy=\"1\" stdDeviation=\"0.5\" floodOpacity=\"0.12\" />\n </filter>\n </defs>\n <rect\n x=\"0.5\"\n y=\"0.5\"\n width=\"15\"\n height=\"15\"\n rx=\"3.5\"\n className={styles.rect}\n filter={`url(#${svgFilterId})`}\n />\n <path d=\"M4 8l2.5 2.5L12 5\" className={styles.checkPath} />\n <line x1=\"4.5\" y1=\"8\" x2=\"11.5\" y2=\"8\" className={styles.indeterminateLine} />\n </svg>\n </span>\n </span>\n {children !== undefined && children !== null ? (\n <span className={styles.text}>{children}</span>\n ) : null}\n </Label.Root>\n );\n});\n\nCheckboxLabel.displayName = \"CheckboxLabel\";\n\n// ─── Hint ────────────────────────────────────────────────────────────────────\n\nexport type CheckboxHintProps = {\n children: React.ReactNode;\n className?: string;\n} & Omit<React.HTMLAttributes<HTMLParagraphElement>, \"id\">;\n\nfunction CheckboxHint({ children, className, ...rest }: CheckboxHintProps) {\n const { hintId, registerHint, unregisterHint, size, disabled } = useCheckboxContext();\n\n React.useLayoutEffect(() => {\n registerHint();\n return () => {\n unregisterHint();\n };\n }, [registerHint, unregisterHint]);\n\n return (\n <Hint.Root\n id={hintId}\n size={size as HintSize}\n variant={disabled ? \"disabled\" : \"default\"}\n className={cx(styles.hintSlot, className)}\n {...rest}\n >\n {children}\n </Hint.Root>\n );\n}\n\nCheckboxHint.displayName = \"CheckboxHint\";\n\n// ─── Error ───────────────────────────────────────────────────────────────────\n\nexport type CheckboxErrorProps = {\n children: React.ReactNode;\n className?: string;\n} & Omit<React.HTMLAttributes<HTMLParagraphElement>, \"id\">;\n\nfunction CheckboxError({ children, className, ...rest }: CheckboxErrorProps) {\n const { errorId, registerError, unregisterError, size } = useCheckboxContext();\n\n React.useLayoutEffect(() => {\n registerError();\n return () => {\n unregisterError();\n };\n }, [registerError, unregisterError]);\n\n return (\n <Hint.Root\n id={errorId}\n size={size as HintSize}\n variant=\"error\"\n className={cx(styles.hintSlot, className)}\n {...rest}\n >\n {children}\n </Hint.Root>\n );\n}\n\nCheckboxError.displayName = \"CheckboxError\";\n\n// ─── Namespace ───────────────────────────────────────────────────────────────\n\nexport const Checkbox = {\n Root: CheckboxRoot,\n Label: CheckboxLabel,\n Hint: CheckboxHint,\n Error: CheckboxError,\n};\n","/** Примитивная подсветка TS/TSX для плейграунда: комментарии, строки, числа, ключевые слова, JSX-теги. */\n\nconst KW = new Set(\n \"break case catch class const continue debugger default delete do else export extends false finally for from function if import in instanceof let new null return super switch this throw true try typeof var void while with yield async await of type interface implements package private protected public static readonly keyof as is enum namespace module declare abstract satisfies using\".split(\n \" \",\n ),\n);\n\nconst INTRINSIC =\n /^(?:div|span|a|button|input|form|label|p|code|pre|section|article|header|footer|nav|main|aside|ul|ol|li|table|tr|td|th|img|svg|path|circle|Fragment|Suspense|h[1-6])\\b/;\n\nfunction esc(s: string): string {\n return s.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n}\n\nfunction span(cls: string, raw: string): string {\n return `<span class=\"${cls}\">${esc(raw)}</span>`;\n}\n\nfunction readString(s: string, start: number, quote: '\"' | \"'\" | \"`\"): number {\n let j = start + 1;\n while (j < s.length) {\n const c = s[j];\n if (c === \"\\\\\" && j + 1 < s.length) {\n j += 2;\n continue;\n }\n if (c === quote) return j + 1;\n j++;\n }\n return s.length;\n}\n\nexport function highlightTsxHtml(source: string): string {\n let i = 0;\n let out = \"\";\n const n = source.length;\n\n while (i < n) {\n const ch = source[i];\n const ch2 = source[i + 1];\n\n if (ch === \" \" || ch === \"\\t\" || ch === \"\\n\" || ch === \"\\r\") {\n out += esc(ch);\n i++;\n continue;\n }\n\n if (ch === \"/\" && ch2 === \"/\") {\n let j = i + 2;\n while (j < n && source[j] !== \"\\n\") j++;\n out += span(\"prime-tok-c\", source.slice(i, j));\n i = j;\n continue;\n }\n\n if (ch === \"/\" && ch2 === \"*\") {\n let j = i + 2;\n while (j + 1 < n && !(source[j] === \"*\" && source[j + 1] === \"/\")) j++;\n j = j + 2 <= n ? j + 2 : n;\n out += span(\"prime-tok-c\", source.slice(i, j));\n i = j;\n continue;\n }\n\n if (ch === \"`\") {\n const j = readString(source, i, \"`\");\n out += span(\"prime-tok-s\", source.slice(i, j));\n i = j;\n continue;\n }\n if (ch === '\"') {\n const j = readString(source, i, '\"');\n out += span(\"prime-tok-s\", source.slice(i, j));\n i = j;\n continue;\n }\n if (ch === \"'\") {\n const j = readString(source, i, \"'\");\n out += span(\"prime-tok-s\", source.slice(i, j));\n i = j;\n continue;\n }\n\n if (ch === \"<\" && source.slice(i, i + 4) === \"<!--\") {\n const end = source.indexOf(\"-->\", i + 4);\n const j = end === -1 ? n : end + 3;\n out += span(\"prime-tok-c\", source.slice(i, j));\n i = j;\n continue;\n }\n\n if (ch === \"<\") {\n const mm = source.slice(i).match(/^<(\\/?)([A-Za-z_][\\w.]*)\\b/);\n if (mm) {\n const name = mm[2];\n const isJsx = /^[A-Z]/.test(name) || INTRINSIC.test(name);\n if (isJsx) {\n const len = mm[0].length;\n out += span(\"prime-tok-x\", source.slice(i, i + len));\n i += len;\n continue;\n }\n }\n out += esc(\"<\");\n i++;\n continue;\n }\n\n if (/\\d/.test(ch)) {\n let j = i + 1;\n while (j < n && /[\\d.eE+-]/.test(source[j])) j++;\n out += span(\"prime-tok-n\", source.slice(i, j));\n i = j;\n continue;\n }\n\n if (/[a-zA-Z_$]/.test(ch)) {\n let j = i + 1;\n while (j < n && /[a-zA-Z0-9_$]/.test(source[j])) j++;\n const w = source.slice(i, j);\n out += KW.has(w) ? span(\"prime-tok-k\", w) : esc(w);\n i = j;\n continue;\n }\n\n out += esc(ch);\n i++;\n }\n\n return out;\n}\n",".root {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n white-space: pre;\n tab-size: 2;\n background: transparent;\n font-family: var(--prime-ref-font-family-mono);\n font-size: inherit;\n line-height: inherit;\n color: var(--prime-sys-color-content-primary);\n}\n\n.code {\n font-family: inherit;\n}\n\n/* Подсветка TS/TSX (`highlightTsxHtml`) */\n.root[data-theme=\"light\"] :global(.prime-tok-k) {\n color: var(--prime-ref-color-purple-800);\n font-weight: var(--prime-sys-typography-weight-medium);\n}\n\n.root[data-theme=\"dark\"] :global(.prime-tok-k) {\n color: var(--prime-ref-color-purple-300);\n font-weight: var(--prime-sys-typography-weight-medium);\n}\n\n.root[data-theme=\"light\"] :global(.prime-tok-s) {\n color: var(--prime-ref-color-teal-800);\n}\n\n.root[data-theme=\"dark\"] :global(.prime-tok-s) {\n color: var(--prime-ref-color-teal-200);\n}\n\n.root[data-theme=\"light\"] :global(.prime-tok-c) {\n color: var(--prime-sys-color-content-muted);\n}\n\n.root[data-theme=\"dark\"] :global(.prime-tok-c) {\n color: var(--prime-sys-color-content-secondary);\n}\n\n.root[data-theme=\"light\"] :global(.prime-tok-n) {\n color: var(--prime-ref-color-orange-700);\n}\n\n.root[data-theme=\"dark\"] :global(.prime-tok-n) {\n color: var(--prime-ref-color-orange-300);\n}\n\n.root[data-theme=\"light\"] :global(.prime-tok-x) {\n color: var(--prime-ref-color-blue-700);\n}\n\n.root[data-theme=\"dark\"] :global(.prime-tok-x) {\n color: var(--prime-ref-color-blue-300);\n}\n","import * as React from \"react\";\n\nimport { cx } from \"@/internal/cx\";\nimport { highlightTsxHtml } from \"@/internal/highlightTsxHtml\";\n\nimport styles from \"./CodeBlock.module.css\";\n\nexport type CodeBlockColorScheme = \"light\" | \"dark\";\n\nexport type CodeBlockRootProps = {\n /** Исходник TS/TSX; подсветка через `highlightTsxHtml`. */\n code: string;\n colorScheme?: CodeBlockColorScheme;\n className?: string;\n} & Omit<React.HTMLAttributes<HTMLPreElement>, \"children\" | \"dangerouslySetInnerHTML\">;\n\nconst CodeBlockRoot = React.forwardRef<HTMLPreElement, CodeBlockRootProps>(function CodeBlockRoot(\n { code, colorScheme = \"light\", className, ...rest },\n ref,\n) {\n const html = React.useMemo(() => highlightTsxHtml(code.trimEnd()), [code]);\n\n return (\n <pre\n ref={ref}\n className={cx(styles.root, className)}\n data-theme={colorScheme}\n {...rest}\n // biome-ignore lint/security/noDangerouslySetInnerHtml: разметка из доверенного `highlightTsxHtml(code)`\n dangerouslySetInnerHTML={{ __html: `<code class=\"${styles.code}\">${html}</code>` }}\n />\n );\n});\nCodeBlockRoot.displayName = \"CodeBlock.Root\";\n\nexport const CodeBlock = {\n Root: CodeBlockRoot,\n};\n","import * as React from \"react\";\n\ntype UseFieldIdsResult = {\n inputId: string;\n hintId: string;\n errorId: string;\n describedBy: string | undefined;\n};\n\n/**\n * Generates stable IDs for form field elements and builds aria-describedby.\n * Shared by Input, Select, Checkbox, Radio, Switch, Textarea.\n */\nexport function useFieldIds(\n explicitId?: string,\n options: { hasHint?: boolean; hasError?: boolean; extraDescribedBy?: string } = {},\n): UseFieldIdsResult {\n const generated = React.useId();\n const inputId = explicitId ?? generated;\n const hintId = `${inputId}-hint`;\n const errorId = `${inputId}-error`;\n\n const parts = [\n options.extraDescribedBy,\n options.hasHint ? hintId : undefined,\n options.hasError ? errorId : undefined,\n ].filter(Boolean);\n\n const describedBy = parts.length > 0 ? parts.join(\" \") : undefined;\n\n return { inputId, hintId, errorId, describedBy };\n}\n","/* ---- Root ---- */\n.root {\n --prime-input-text: var(--prime-sys-size-control-m-text);\n --prime-input-support-text: var(--prime-sys-size-control-m-supportText);\n --prime-input-icon: var(--prime-sys-size-control-m-icon);\n --prime-input-stack-gap: var(--prime-sys-size-control-m-gap);\n box-sizing: border-box;\n width: 100%;\n min-width: 0;\n display: grid;\n gap: var(--prime-input-stack-gap);\n}\n\n.root[data-size=\"s\"] {\n --prime-input-text: var(--prime-sys-size-control-s-text);\n --prime-input-support-text: var(--prime-sys-size-control-s-supportText);\n --prime-input-icon: var(--prime-sys-size-control-s-icon);\n --prime-input-stack-gap: var(--prime-sys-size-control-s-gap);\n}\n\n.root[data-size=\"l\"] {\n --prime-input-text: var(--prime-sys-size-control-l-text);\n --prime-input-support-text: var(--prime-sys-size-control-l-supportText);\n --prime-input-icon: var(--prime-sys-size-control-l-icon);\n --prime-input-stack-gap: var(--prime-sys-size-control-l-gap);\n}\n\n.root[data-size=\"xl\"] {\n --prime-input-text: var(--prime-sys-size-control-xl-text);\n --prime-input-support-text: var(--prime-sys-size-control-xl-supportText);\n --prime-input-icon: var(--prime-sys-size-control-xl-icon);\n --prime-input-stack-gap: var(--prime-sys-size-control-xl-gap);\n}\n\n/* ---- Header ---- */\n.header {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n gap: var(--prime-input-stack-gap);\n}\n\n.label {\n font-size: var(--prime-input-support-text);\n font-weight: var(--prime-sys-typography-weight-medium);\n color: var(--prime-sys-color-content-primary);\n}\n\n.optionalLabel {\n font-size: var(--prime-input-support-text);\n color: var(--prime-sys-color-content-muted);\n}\n\n/* ---- Wrapper ---- */\n.wrapper {\n position: relative;\n display: flex;\n align-items: center;\n overflow: hidden;\n border: var(--prime-sys-border-width-control) solid var(--prime-sys-color-field-border);\n background: var(--prime-sys-color-field-bg);\n color: var(--prime-sys-color-field-text);\n border-radius: var(--prime-sys-size-control-m-radius);\n box-shadow: var(--prime-sys-elevation-shadow-surface);\n transition:\n border-color var(--prime-sys-motion-medium) var(--prime-sys-motion-standard),\n box-shadow var(--prime-sys-motion-medium) var(--prime-sys-motion-standard),\n background-color var(--prime-sys-motion-medium) var(--prime-sys-motion-standard);\n}\n\n/* Hover — fires on wrapper hover, disabled + focus excluded */\n.wrapper:hover:not(:has(input:focus-visible)):not(:has(input:disabled)) {\n border-color: var(--prime-sys-color-field-borderHover);\n background: var(--prime-sys-color-action-neutralBackgroundHover);\n box-shadow: none;\n}\n\n/* Focus ring via :has */\n.wrapper:has(input:focus-visible) {\n border-color: var(--prime-sys-color-field-borderFocus);\n box-shadow: var(--prime-sys-elevation-shadow-buttonFocus);\n}\n\n/* Error */\n.wrapper[data-has-error=\"true\"] {\n border-color: var(--prime-sys-color-field-borderError);\n}\n\n.wrapper[data-has-error=\"true\"]:has(input:focus-visible) {\n box-shadow: var(--prime-sys-elevation-shadow-errorFocus);\n}\n\n/* Disabled */\n.wrapper:has(input:disabled) {\n background: var(--prime-sys-color-surface-accentSoft);\n border-color: transparent;\n box-shadow: none;\n cursor: not-allowed;\n}\n\n/* ---- Size variants ---- */\n.wrapper[data-size=\"s\"] {\n height: var(--prime-sys-size-control-s-height);\n border-radius: var(--prime-sys-size-control-s-radius);\n padding-inline: var(--prime-sys-size-control-s-inputPaddingX);\n padding-block: var(--prime-sys-size-control-s-inputPaddingY);\n gap: var(--prime-sys-size-control-s-gap);\n}\n\n.wrapper[data-size=\"m\"] {\n height: var(--prime-sys-size-control-m-height);\n border-radius: var(--prime-sys-size-control-m-radius);\n padding-inline: var(--prime-sys-size-control-m-inputPaddingX);\n padding-block: var(--prime-sys-size-control-m-inputPaddingY);\n gap: var(--prime-sys-size-control-m-gap);\n}\n\n.wrapper[data-size=\"l\"] {\n height: var(--prime-sys-size-control-l-height);\n border-radius: var(--prime-sys-size-control-l-radius);\n padding-inline: var(--prime-sys-size-control-l-inputPaddingX);\n padding-block: var(--prime-sys-size-control-l-inputPaddingY);\n gap: var(--prime-sys-size-control-l-gap);\n}\n\n.wrapper[data-size=\"xl\"] {\n height: var(--prime-sys-size-control-xl-height);\n border-radius: var(--prime-sys-size-control-xl-radius);\n padding-inline: var(--prime-sys-size-control-xl-inputPaddingX);\n padding-block: var(--prime-sys-size-control-xl-inputPaddingY);\n gap: var(--prime-sys-size-control-xl-gap);\n}\n\n/* When affix is present, remove wrapper padding on that side */\n.wrapper:has(.affix[data-side=\"start\"]) {\n padding-inline-start: 0;\n}\n\n.wrapper:has(.affix[data-side=\"end\"]) {\n padding-inline-end: 0;\n}\n\n/* ---- Field (input element) ---- */\n.field {\n -webkit-appearance: none;\n appearance: none;\n flex: 1 1 auto;\n min-width: 0;\n border: 0;\n background: transparent;\n color: inherit;\n outline: none;\n box-shadow: none;\n font-size: var(--prime-input-text);\n line-height: var(--prime-sys-typography-body-lineHeight);\n}\n\n.field:focus,\n.field:focus-visible {\n outline: none;\n box-shadow: none;\n}\n\n.field::-webkit-search-decoration,\n.field::-webkit-search-cancel-button,\n.field::-webkit-search-results-button,\n.field::-webkit-search-results-decoration {\n -webkit-appearance: none;\n}\n\n.field::placeholder {\n color: var(--prime-sys-color-field-placeholder);\n transition: color var(--prime-sys-motion-medium) var(--prime-sys-motion-standard);\n}\n\n.wrapper:hover .field::placeholder,\n.wrapper:has(input:focus-visible) .field::placeholder {\n color: var(--prime-sys-color-content-secondary);\n}\n\n.field:disabled {\n color: var(--prime-sys-color-content-disabled);\n cursor: not-allowed;\n}\n\n/* ---- Icon ---- */\n.icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: var(--prime-input-icon);\n height: var(--prime-input-icon);\n color: var(--prime-sys-color-content-muted);\n transition: color var(--prime-sys-motion-medium) var(--prime-sys-motion-standard);\n}\n\n.icon svg {\n width: 100%;\n height: 100%;\n display: block;\n}\n\n.icon[data-side=\"start\"] {\n order: -1;\n}\n\n.icon[data-side=\"end\"] {\n order: 1;\n}\n\n.wrapper:hover .icon,\n.wrapper:has(input:focus-visible) .icon {\n color: var(--prime-sys-color-content-secondary);\n}\n\n.wrapper:has(input:disabled) .icon {\n color: var(--prime-sys-color-content-disabled);\n}\n\n/* ---- Affix (sectioned block with border) ---- */\n.affix {\n display: flex;\n align-items: center;\n align-self: stretch;\n background: transparent;\n color: var(--prime-sys-color-content-secondary);\n font-size: var(--prime-input-text);\n white-space: nowrap;\n flex-shrink: 0;\n padding-inline: var(--prime-sys-size-control-m-inputPaddingX);\n}\n\n.affix[data-side=\"start\"] {\n border-right: var(--prime-sys-border-width-control) solid var(--prime-sys-color-border-subtle);\n order: -1;\n}\n\n.affix[data-side=\"end\"] {\n border-left: var(--prime-sys-border-width-control) solid var(--prime-sys-color-border-subtle);\n order: 1;\n}\n\n.wrapper[data-size=\"s\"] .affix {\n padding-inline: var(--prime-sys-size-control-s-inputPaddingX);\n}\n\n.wrapper[data-size=\"m\"] .affix {\n padding-inline: var(--prime-sys-size-control-m-inputPaddingX);\n}\n\n.wrapper[data-size=\"l\"] .affix {\n padding-inline: var(--prime-sys-size-control-l-inputPaddingX);\n}\n\n.wrapper[data-size=\"xl\"] .affix {\n padding-inline: var(--prime-sys-size-control-xl-inputPaddingX);\n}\n\n/* ---- InlineAffix ---- */\n.inlineAffix {\n color: var(--prime-sys-color-content-muted);\n font-size: var(--prime-input-text);\n flex-shrink: 0;\n transition: color var(--prime-sys-motion-medium) var(--prime-sys-motion-standard);\n}\n\n.inlineAffix[data-side=\"start\"] {\n order: -1;\n}\n\n.inlineAffix[data-side=\"end\"] {\n order: 1;\n}\n\n.wrapper:hover .inlineAffix,\n.wrapper:has(input:focus-visible) .inlineAffix {\n color: var(--prime-sys-color-content-secondary);\n}\n\n/* ---- Meta (hint + error) ---- */\n.meta {\n display: grid;\n gap: var(--prime-sys-spacing-x1);\n}\n\n.metaHint {\n width: 100%;\n max-width: 100%;\n}\n","import * as React from \"react\";\nimport { Hint } from \"@/components/hint/Hint\";\nimport { useFieldIds } from \"@/hooks/useFieldIds\";\nimport { ControlSizeProvider } from \"@/internal/ControlSizeContext\";\nimport { createComponentContext } from \"@/internal/context\";\nimport { cx } from \"@/internal/cx\";\nimport { toDataAttributes } from \"@/internal/data-attributes\";\nimport type { HintSize, InputSize } from \"@/internal/states\";\n\nimport composableStyles from \"./Input.module.css\";\n\n// ─── Composable API ──────────────────────────────────────────────────────────\n\ntype InputContextValue = {\n size: InputSize;\n hasError: boolean;\n inputId: string;\n describedBy: string | undefined;\n};\n\nconst [InputProvider, useInputContext] = createComponentContext<InputContextValue>(\"Input\");\n\n// ---- InputRoot ----\n\nexport type InputRootProps = {\n size?: InputSize;\n /** Mark the field as invalid visually and propagate aria-invalid to the input. */\n hasError?: boolean;\n label?: React.ReactNode;\n optionalLabel?: React.ReactNode;\n hint?: React.ReactNode;\n /** Error message rendered below the field; also sets hasError=true. */\n error?: React.ReactNode;\n /** Explicit id for the underlying <input>; auto-generated if omitted. */\n id?: string;\n children: React.ReactNode;\n className?: string;\n};\n\nfunction InputRoot({\n size = \"m\",\n hasError: hasErrorProp = false,\n label,\n optionalLabel,\n hint,\n error,\n id,\n children,\n className,\n}: InputRootProps) {\n const hasError = hasErrorProp || Boolean(error);\n const { inputId, hintId, errorId, describedBy } = useFieldIds(id, {\n hasHint: Boolean(hint),\n hasError: Boolean(error),\n });\n\n return (\n <InputProvider value={{ size, hasError, inputId, describedBy }}>\n <ControlSizeProvider value={size}>\n <div className={cx(composableStyles.root, className)} {...toDataAttributes({ size })}>\n {(label != null || optionalLabel != null) && (\n <div className={composableStyles.header}>\n {label != null ? (\n <label htmlFor={inputId} className={composableStyles.label}>\n {label}\n </label>\n ) : (\n <span />\n )}\n {optionalLabel != null && (\n <span className={composableStyles.optionalLabel}>{optionalLabel}</span>\n )}\n </div>\n )}\n {children}\n {(hint != null || error != null) && (\n <div className={composableStyles.meta}>\n {hint != null && (\n <Hint.Root\n id={hintId}\n size={size as HintSize}\n className={composableStyles.metaHint}\n >\n {hint}\n </Hint.Root>\n )}\n {error != null && (\n <Hint.Root\n id={errorId}\n size={size as HintSize}\n variant=\"error\"\n className={composableStyles.metaHint}\n >\n {error}\n </Hint.Root>\n )}\n </div>\n )}\n </div>\n </ControlSizeProvider>\n </InputProvider>\n );\n}\nInputRoot.displayName = \"Input.Root\";\n\n// ---- InputWrapper ----\n\nexport type InputWrapperProps = {\n children: React.ReactNode;\n className?: string;\n};\n\nfunction InputWrapper({ children, className }: InputWrapperProps) {\n const { size, hasError } = useInputContext();\n\n return (\n <div\n className={cx(composableStyles.wrapper, className)}\n {...toDataAttributes({ size, \"has-error\": hasError })}\n >\n {children}\n </div>\n );\n}\nInputWrapper.displayName = \"Input.Wrapper\";\n\n// ---- InputField ----\n\nexport type InputFieldProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\">;\n\nconst InputField = React.forwardRef<HTMLInputElement, InputFieldProps>(\n ({ className, \"aria-describedby\": ariaDescribedBy, ...rest }, ref) => {\n const { inputId, hasError, describedBy } = useInputContext();\n\n const resolvedDescribedBy =\n [ariaDescribedBy, describedBy].filter(Boolean).join(\" \") || undefined;\n\n return (\n <input\n ref={ref}\n id={inputId}\n className={cx(composableStyles.field, className)}\n aria-invalid={hasError || undefined}\n aria-describedby={resolvedDescribedBy}\n {...rest}\n />\n );\n },\n);\nInputField.displayName = \"Input.Field\";\n\n// ---- InputIcon ----\n\nexport type InputIconProps = {\n side: \"start\" | \"end\";\n children: React.ReactNode;\n className?: string;\n};\n\nfunction InputIcon({ side, children, className }: InputIconProps) {\n return (\n <span className={cx(composableStyles.icon, className)} data-side={side} aria-hidden=\"true\">\n {children}\n </span>\n );\n}\nInputIcon.displayName = \"Input.Icon\";\n\n// ---- InputAffix ----\n\nexport type InputAffixProps = {\n side: \"start\" | \"end\";\n children: React.ReactNode;\n className?: string;\n};\n\nfunction InputAffix({ side, children, className }: InputAffixProps) {\n return (\n <div className={cx(composableStyles.affix, className)} data-side={side} aria-hidden=\"true\">\n {children}\n </div>\n );\n}\nInputAffix.displayName = \"Input.Affix\";\n\n// ---- InputInlineAffix ----\n\nexport type InputInlineAffixProps = {\n side: \"start\" | \"end\";\n children: React.ReactNode;\n className?: string;\n};\n\nfunction InputInlineAffix({ side, children, className }: InputInlineAffixProps) {\n return (\n <span\n className={cx(composableStyles.inlineAffix, className)}\n data-side={side}\n aria-hidden=\"true\"\n >\n {children}\n </span>\n );\n}\nInputInlineAffix.displayName = \"Input.InlineAffix\";\n\n// ---- Namespace export ----\n\nexport const Input = {\n Root: InputRoot,\n Wrapper: InputWrapper,\n Field: InputField,\n Icon: InputIcon,\n Affix: InputAffix,\n InlineAffix: InputInlineAffix,\n};\n\n// Export context hook for advanced consumers (e.g. custom sub-components)\nexport { useInputContext };\n","import * as React from \"react\";\n\ntype UseEscapeKeyOptions = {\n enabled: boolean;\n onEscape: () => void;\n};\n\nexport function useEscapeKey({ enabled, onEscape }: UseEscapeKeyOptions) {\n React.useEffect(() => {\n if (!enabled) {\n return;\n }\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\") {\n return;\n }\n\n onEscape();\n };\n\n document.addEventListener(\"keydown\", onKeyDown);\n return () => document.removeEventListener(\"keydown\", onKeyDown);\n }, [enabled, onEscape]);\n}\n","import * as React from \"react\";\n\n/**\n * Клик по listbox Select в портале: триггер комбобокса лежит внутри `container`\n * (например панель Dropdown), иначе useOutsideClick закроет родителя.\n */\nexport function isPortaledSelectListboxOwnedByContainer(\n target: EventTarget | null,\n container: HTMLElement | null,\n): boolean {\n if (!(target instanceof Element) || !container) {\n return false;\n }\n const listbox = target.closest('[role=\"listbox\"][data-react-aria-top-layer=\"true\"]');\n if (!listbox) {\n return false;\n }\n const triggerId = listbox.getAttribute(\"aria-labelledby\")?.trim().split(/\\s+/)[0];\n if (!triggerId) {\n return false;\n }\n const trigger = listbox.ownerDocument.getElementById(triggerId);\n return Boolean(trigger && container.contains(trigger));\n}\n\ntype UseOutsideClickParams = {\n refs: Array<React.RefObject<HTMLElement | null>>;\n enabled: boolean;\n onOutsideClick: (event: MouseEvent | TouchEvent) => void;\n /** Если вернёт true, клик не считается «снаружи» (порталы внутри refs) */\n shouldSuppressOutsideClick?: (target: EventTarget | null) => boolean;\n};\n\nexport function useOutsideClick({\n refs,\n enabled,\n onOutsideClick,\n shouldSuppressOutsideClick,\n}: UseOutsideClickParams) {\n const suppressRef = React.useRef(shouldSuppressOutsideClick);\n suppressRef.current = shouldSuppressOutsideClick;\n\n React.useEffect(() => {\n if (!enabled) {\n return;\n }\n\n const hasClickedOutside = (target: EventTarget | null) =>\n refs.every((ref) => {\n const node = ref.current;\n return !node || !target || !node.contains(target as Node);\n });\n\n const onPointerDown = (event: MouseEvent | TouchEvent) => {\n if (suppressRef.current?.(event.target)) {\n return;\n }\n if (hasClickedOutside(event.target)) {\n onOutsideClick(event);\n }\n };\n\n document.addEventListener(\"mousedown\", onPointerDown);\n document.addEventListener(\"touchstart\", onPointerDown);\n\n return () => {\n document.removeEventListener(\"mousedown\", onPointerDown);\n document.removeEventListener(\"touchstart\", onPointerDown);\n };\n }, [enabled, onOutsideClick, refs]);\n}\n","export const primitiveTokens = {\n /** Цвета: white/black, нейтраль `gray`, палитры 50–950. */\n color: {\n white: \"#f8f7f4\",\n black: \"#0f1115\",\n /** Скрим модалок/оверлеев (значения вынесены из семантики). */\n overlay: {\n scrimLight: \"rgba(15, 17, 21, 0.58)\",\n scrimDark: \"rgba(8, 10, 14, 0.78)\",\n },\n /** Нейтраль: шкала 50–950 + `0` (бумага), альфы для оверлеев. */\n gray: {\n 0: \"#f8f7f4\",\n 50: \"#f3f4f7\",\n 100: \"#eceef2\",\n 200: \"#dde1e8\",\n 300: \"#c7ced9\",\n 400: \"#9ba6b6\",\n 500: \"#707c8e\",\n 600: \"#566174\",\n 700: \"#3f495a\",\n 800: \"#2b3342\",\n 900: \"#1b2230\",\n 950: \"#121823\",\n alpha10: \"rgba(112, 124, 142, 0.10)\",\n alpha16: \"rgba(112, 124, 142, 0.16)\",\n alpha24: \"rgba(112, 124, 142, 0.24)\",\n },\n /** Палитра red: шкала 50–950 (ориентир — Tailwind v3). */\n red: {\n 50: \"#fef2f2\",\n 100: \"#fee2e2\",\n 200: \"#fecaca\",\n 300: \"#fca5a5\",\n 400: \"#f87171\",\n 500: \"#ef4444\",\n 600: \"#dc2626\",\n 700: \"#b91c1c\",\n 800: \"#991b1b\",\n 900: \"#7f1d1d\",\n 950: \"#450a0a\",\n },\n /** Палитра blue: шкала 50–950 (ориентир — Tailwind v3). */\n blue: {\n 50: \"#eff6ff\",\n 100: \"#dbeafe\",\n 200: \"#bfdbfe\",\n 300: \"#93c5fd\",\n 400: \"#60a5fa\",\n 500: \"#3b82f6\",\n 600: \"#2563eb\",\n 700: \"#1d4ed8\",\n 800: \"#1e40af\",\n 900: \"#1e3a8a\",\n 950: \"#172554\",\n },\n /** Палитра green: шкала 50–950 (ориентир — Tailwind v3). */\n green: {\n 50: \"#f0fdf4\",\n 100: \"#dcfce7\",\n 200: \"#bbf7d0\",\n 300: \"#86efac\",\n 400: \"#4ade80\",\n 500: \"#22c55e\",\n 600: \"#16a34a\",\n 700: \"#15803d\",\n 800: \"#166534\",\n 900: \"#14532d\",\n 950: \"#052e16\",\n },\n /** Палитра orange: шкала 50–950 (ориентир — Tailwind v3). */\n orange: {\n 50: \"#fff7ed\",\n 100: \"#ffedd5\",\n 200: \"#fed7aa\",\n 300: \"#fdba74\",\n 400: \"#fb923c\",\n 500: \"#f97316\",\n 600: \"#ea580c\",\n 700: \"#c2410c\",\n 800: \"#9a3412\",\n 900: \"#7c2d12\",\n 950: \"#431407\",\n },\n /** Палитра yellow: шкала 50–950 (ориентир — Tailwind v3). */\n yellow: {\n 50: \"#fefce8\",\n 100: \"#fef9c3\",\n 200: \"#fef08a\",\n 300: \"#fde047\",\n 400: \"#facc15\",\n 500: \"#eab308\",\n 600: \"#ca8a04\",\n 700: \"#a16207\",\n 800: \"#854d0e\",\n 900: \"#713f12\",\n 950: \"#422006\",\n },\n /** Палитра purple: шкала 50–950 (ориентир — Tailwind v3). */\n purple: {\n 50: \"#faf5ff\",\n 100: \"#f3e8ff\",\n 200: \"#e9d5ff\",\n 300: \"#d8b4fe\",\n 400: \"#c084fc\",\n 500: \"#a855f7\",\n 600: \"#9333ea\",\n 700: \"#7e22ce\",\n 800: \"#6b21a8\",\n 900: \"#581c87\",\n 950: \"#3b0764\",\n },\n /** Палитра sky: шкала 50–950 (ориентир — Tailwind v3). */\n sky: {\n 50: \"#f0f9ff\",\n 100: \"#e0f2fe\",\n 200: \"#bae6fd\",\n 300: \"#7dd3fc\",\n 400: \"#38bdf8\",\n 500: \"#0ea5e9\",\n 600: \"#0284c7\",\n 700: \"#0369a1\",\n 800: \"#075985\",\n 900: \"#0c4a6e\",\n 950: \"#082f49\",\n },\n /** Палитра pink: шкала 50–950 (ориентир — Tailwind v3). */\n pink: {\n 50: \"#fdf2f8\",\n 100: \"#fce7f3\",\n 200: \"#fbcfe8\",\n 300: \"#f9a8d4\",\n 400: \"#f472b6\",\n 500: \"#ec4899\",\n 600: \"#db2777\",\n 700: \"#be185d\",\n 800: \"#9d174d\",\n 900: \"#831843\",\n 950: \"#500724\",\n },\n /** Палитра teal: шкала 50–950 (ориентир — Tailwind v3). */\n teal: {\n 50: \"#f0fdfa\",\n 100: \"#ccfbf1\",\n 200: \"#99f6e4\",\n 300: \"#5eead4\",\n 400: \"#2dd4bf\",\n 500: \"#14b8a6\",\n 600: \"#0d9488\",\n 700: \"#0f766e\",\n 800: \"#115e59\",\n 900: \"#134e4a\",\n 950: \"#042f2e\",\n },\n },\n /** Высота ряда / блока: ось `xs`→`6xl`, шаг **+0.25rem**; в семантике контролы — xs…xl. */\n size: {\n xs: \"1.75rem\",\n s: \"2rem\",\n m: \"2.25rem\",\n l: \"2.5rem\",\n xl: \"2.75rem\",\n \"2xl\": \"3rem\",\n \"3xl\": \"3.25rem\",\n \"4xl\": \"3.5rem\",\n \"5xl\": \"3.75rem\",\n \"6xl\": \"4rem\",\n },\n /**\n * Кольцевой прогресс: диаметр в rem (как в макете) и толщина штриха в px.\n * TS читает те же значения, что и визуальная шкала компонента.\n */\n progressCircle: {\n s: { diameter: \"2.5625rem\", strokeWidth: \"3\" },\n m: { diameter: \"3.375rem\", strokeWidth: \"4\" },\n l: { diameter: \"4.25rem\", strokeWidth: \"5\" },\n xl: { diameter: \"5.125rem\", strokeWidth: \"6\" },\n },\n /** Отступы: `layout` — сетка макета; `control` — ритм внутри контролов. */\n spaces: {\n /** Сетка макета: шаг **0.25rem (4px)**, ось `xs`→`6xl` + `0`; `spacing.x*` — шаги по 4px. */\n layout: {\n 0: \"0\",\n xs: \"0.25rem\",\n s: \"0.5rem\",\n m: \"0.75rem\",\n l: \"1rem\",\n xl: \"1.25rem\",\n \"2xl\": \"1.5rem\",\n \"3xl\": \"2rem\",\n \"4xl\": \"2.5rem\",\n \"5xl\": \"3rem\",\n \"6xl\": \"3.5rem\",\n },\n /** Контролы: горизонтальный ритм (`spacing`) и отступ кнопки (`button`). */\n control: {\n /** Gap и inputPaddingX: ось `xs`→`6xl`, шаг **+0.125rem**. */\n spacing: {\n xs: \"0.375rem\",\n s: \"0.5rem\",\n m: \"0.625rem\",\n l: \"0.75rem\",\n xl: \"0.875rem\",\n \"2xl\": \"1rem\",\n \"3xl\": \"1.125rem\",\n \"4xl\": \"1.25rem\",\n \"5xl\": \"1.375rem\",\n \"6xl\": \"1.5rem\",\n },\n /** Padding кнопки: на **+0.125rem** больше соответствующего `spacing.*`. */\n button: {\n xs: \"0.5rem\",\n s: \"0.625rem\",\n m: \"0.75rem\",\n l: \"0.875rem\",\n xl: \"1rem\",\n \"2xl\": \"1.125rem\",\n \"3xl\": \"1.25rem\",\n \"4xl\": \"1.375rem\",\n \"5xl\": \"1.5rem\",\n \"6xl\": \"1.625rem\",\n },\n },\n },\n /** Скругления: ось `xs`→`6xl` + `circle`; контролы — xs…xl, крупные поверхности — 3xl…6xl. */\n radius: {\n 0: \"0\",\n xs: \"8px\",\n s: \"10px\",\n m: \"11px\",\n l: \"12px\",\n xl: \"13px\",\n \"2xl\": \"16px\",\n \"3xl\": \"20px\",\n \"4xl\": \"24px\",\n \"5xl\": \"32px\",\n \"6xl\": \"40px\",\n round: \"9999px\",\n },\n /** Иконки и маркеры: ось `xs`→`6xl`, шаг **+0.125rem**. */\n icon: {\n xs: \"0.75rem\",\n s: \"0.875rem\",\n m: \"1rem\",\n l: \"1.125rem\",\n xl: \"1.25rem\",\n \"2xl\": \"1.375rem\",\n \"3xl\": \"1.5rem\",\n \"4xl\": \"1.625rem\",\n \"5xl\": \"1.75rem\",\n \"6xl\": \"1.875rem\",\n },\n /** Типографика: семейства, кегль, интерлиньяж, вес, трекинг. */\n font: {\n /** Гарнитуры: базовая и моноширинная. */\n family: {\n base: '\"Roboto Flex\", \"Roboto\", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n mono: '\"Roboto Mono\", ui-monospace, SFMono-Regular, Menlo, monospace',\n },\n /** Кегль: ось `3xs`→`6xl`, шаг **+0.125rem** (дроби n/8 rem). */\n size: {\n \"3xs\": \"0.625rem\",\n \"2xs\": \"0.75rem\",\n xs: \"0.875rem\",\n s: \"1rem\",\n m: \"1.125rem\",\n l: \"1.25rem\",\n xl: \"1.375rem\",\n \"2xl\": \"1.5rem\",\n \"3xl\": \"1.625rem\",\n \"4xl\": \"1.75rem\",\n \"5xl\": \"1.875rem\",\n \"6xl\": \"2rem\",\n },\n /** Межстрочный интервал под шкалу `font.size.*`: шаг **+0.125rem** от `3xs`. */\n lineHeight: {\n \"3xs\": \"0.875rem\",\n \"2xs\": \"1rem\",\n xs: \"1.125rem\",\n s: \"1.25rem\",\n m: \"1.375rem\",\n l: \"1.5rem\",\n xl: \"1.625rem\",\n \"2xl\": \"1.75rem\",\n \"3xl\": \"1.875rem\",\n \"4xl\": \"2rem\",\n \"5xl\": \"2.125rem\",\n \"6xl\": \"2.25rem\",\n },\n /** Начертания (числовые веса шрифта). */\n weight: {\n regular: \"400\",\n medium: \"500\",\n semibold: \"600\",\n bold: \"700\",\n },\n /** Межбуквенный интервал (em). */\n letterSpacing: {\n tighter: \"-0.02em\",\n tight: \"-0.01em\",\n normal: \"0\",\n wide: \"0.04em\",\n wider: \"0.06em\",\n },\n },\n /** Тени: ось `xs`→`6xl`, усиление с размером. */\n shadow: {\n xs: \"0 2px 4px rgba(15, 17, 21, 0.08)\",\n s: \"0 4px 8px rgba(15, 17, 21, 0.1)\",\n m: \"0 8px 16px rgba(15, 17, 21, 0.14)\",\n l: \"0 16px 32px rgba(15, 17, 21, 0.2)\",\n xl: \"0 24px 48px rgba(15, 17, 21, 0.24)\",\n \"2xl\": \"0 32px 64px rgba(15, 17, 21, 0.26)\",\n \"3xl\": \"0 40px 80px rgba(15, 17, 21, 0.28)\",\n \"4xl\": \"0 48px 96px rgba(15, 17, 21, 0.3)\",\n \"5xl\": \"0 56px 112px rgba(15, 17, 21, 0.32)\",\n \"6xl\": \"0 64px 128px rgba(15, 17, 21, 0.34)\",\n },\n /** Движение: длительности и кривые easing. */\n motion: {\n /** Длительности по смыслу (не ось размеров). */\n duration: {\n fast: \"200ms\",\n medium: \"350ms\",\n slow: \"500ms\",\n },\n /** Кривые сглаживания. */\n easing: {\n standard: \"cubic-bezier(0.2, 0, 0, 1)\",\n },\n },\n /**\n * Z-index: именованные роли слоёв (не ось размеров).\n * Иерархия учитывает вложенность компонентов:\n * - base: обычный контент\n * - sticky: прилипающие элементы (header, sidebar)\n * - popover: всплывающие панели (Popover) - ниже dropdown, т.к. часто содержат Select\n * - dropdown: выпадающие списки (Select, Dropdown) - выше popover для работы внутри них\n * - tooltip: подсказки (Tooltip)\n * - modal: модальные окна с оверлеем (Modal, Drawer)\n * - toast: уведомления поверх всего (Notification)\n */\n zIndex: {\n base: \"10\",\n sticky: \"100\",\n popover: \"1000\",\n dropdown: \"1100\",\n tooltip: \"1200\",\n modal: \"2000\",\n /** Выше модалки и всплывающих слоёв — очередь тостов. */\n toast: \"3000\",\n },\n} as const;\n","import { primitiveTokens } from \"../../tokens/primitives\";\n\n/**\n * Fallback, если нет `document` (SSR) или `getComputedStyle` не дал валидный px\n * (должен совпадать с типичным `font-size` на `:root` в `globals`).\n */\nconst FALLBACK_ROOT_FONT_PX = 16;\n\n/**\n * Текущий вычисленный `font-size` корня (`html`) в px — для перевода rem из примитивов\n * в пиксели floating UI / SVG без жёсткой привязки к 16.\n */\nexport function getRootFontSizePx(): number {\n if (typeof document === \"undefined\") {\n return FALLBACK_ROOT_FONT_PX;\n }\n const raw = getComputedStyle(document.documentElement).fontSize;\n const parsed = Number.parseFloat(raw);\n return Number.isFinite(parsed) && parsed > 0 ? parsed : FALLBACK_ROOT_FONT_PX;\n}\n\nexport function remToPx(rem: string, rootPx: number = getRootFontSizePx()): number {\n const n = Number.parseFloat(rem);\n return Number.isFinite(n) ? Math.round(n * rootPx) : 0;\n}\n\n/** Зазор панели от якоря: `spaces.layout.s`. */\nexport function getFloatingPanelOffsetPx(): number {\n return remToPx(primitiveTokens.spaces.layout.s);\n}\n\n/** Зазор listbox от триггера Select: `spaces.layout.xs`. */\nexport function getFloatingSelectListboxOffsetPx(): number {\n return remToPx(primitiveTokens.spaces.layout.xs);\n}\n\n/** Внутренний отступ от края вьюпорта при расчёте позиции / max-height. */\nexport function getFloatingViewportPadPx(): number {\n return remToPx(primitiveTokens.spaces.layout.s);\n}\n","import * as React from \"react\";\n\nimport {\n getFloatingSelectListboxOffsetPx,\n getFloatingViewportPadPx,\n} from \"@/internal/layoutPxFromPrimitives\";\n\nexport type PositionSide = \"bottom\" | \"top\";\nexport type PositionAlign = \"start\" | \"center\" | \"end\";\n\ntype UsePositionOptions = {\n side?: PositionSide;\n align?: PositionAlign;\n offset?: number;\n /** Отступ контента от краёв вьюпорта при расчёте flip/позиции (px). */\n viewportPad?: number;\n flip?: boolean;\n matchTriggerMinWidth?: boolean;\n};\n\ntype PositionStyle = {\n position: \"fixed\";\n top: number;\n left: number;\n minWidth?: number;\n maxHeight?: number;\n};\n\nexport type PositionUpdateMeta = { resolvedSide: PositionSide };\n\nconst MIN_MENU_ESTIMATE = 176;\nconst FALLBACK_VIEWPORT_PAD_PX = 8;\n/** Минимальная высота скролла выпадашки при очень маленьком вьюпорте. */\nconst MIN_FLOATING_MAX_HEIGHT = 120;\n\nexport type ComputeFloatingOptions = {\n preferredSide: PositionSide;\n align: PositionAlign;\n offset: number;\n /** Отступ от краёв вьюпорта (px); по умолчанию 8 при отсутствии (тесты / legacy). */\n viewportPad?: number;\n flip: boolean;\n matchTriggerMinWidth: boolean;\n};\n\nexport type ComputedFloatPosition = {\n top: number;\n left: number;\n resolvedSide: PositionSide;\n minWidth?: number;\n /** Доступная высота под контент (px), со стороны открытия. */\n maxHeight?: number;\n};\n\nfunction pickSideForFlip(\n preferred: PositionSide,\n roomBottom: number,\n roomTop: number,\n contentH: number,\n): PositionSide {\n if (contentH > 0) {\n const fitsB = roomBottom >= contentH;\n const fitsT = roomTop >= contentH;\n if (fitsB && !fitsT) return \"bottom\";\n if (fitsT && !fitsB) return \"top\";\n if (fitsB && fitsT) return \"bottom\";\n }\n if (roomBottom > roomTop) return \"bottom\";\n if (roomTop > roomBottom) return \"top\";\n return preferred;\n}\n\n/** Якорь + размеры слоя + вьюпорт; при flip — сторона с большим запасом / куда влезает контент. */\nexport function computeFloatingPosition(\n anchorRect: DOMRectReadOnly,\n contentW: number,\n contentH: number,\n vw: number,\n vh: number,\n opts: ComputeFloatingOptions,\n): ComputedFloatPosition {\n const { preferredSide, align, offset, flip, matchTriggerMinWidth } = opts;\n const pad = opts.viewportPad ?? FALLBACK_VIEWPORT_PAD_PX;\n const roomBottom = vh - anchorRect.bottom - offset - pad;\n const roomTop = anchorRect.top - offset - pad;\n\n const side = flip ? pickSideForFlip(preferredSide, roomBottom, roomTop, contentH) : preferredSide;\n\n const top =\n contentH === 0\n ? anchorRect.bottom + offset\n : side === \"bottom\"\n ? anchorRect.bottom + offset\n : anchorRect.top - offset - contentH;\n\n const contentWidth =\n contentW > 0\n ? contentW\n : matchTriggerMinWidth\n ? anchorRect.width\n : Math.max(anchorRect.width, MIN_MENU_ESTIMATE);\n\n let left: number;\n if (align === \"start\") left = anchorRect.left;\n else if (align === \"end\") left = anchorRect.right - contentWidth;\n else left = anchorRect.left + anchorRect.width / 2 - contentWidth / 2;\n\n left = Math.max(pad, Math.min(left, vw - contentWidth - pad));\n\n const out: ComputedFloatPosition = {\n top: Math.round(top),\n left: Math.round(left),\n resolvedSide: side,\n };\n if (matchTriggerMinWidth) out.minWidth = anchorRect.width;\n const roomVertical = side === \"bottom\" ? roomBottom : roomTop;\n out.maxHeight = Math.max(MIN_FLOATING_MAX_HEIGHT, Math.floor(roomVertical));\n return out;\n}\n\ntype UsePositionResult = {\n resolvedSide: PositionSide;\n update: () => PositionUpdateMeta | undefined;\n};\n\nexport function usePosition(\n anchorRef: React.RefObject<HTMLElement | null>,\n contentRef: React.RefObject<HTMLElement | null>,\n options: UsePositionOptions = {},\n): UsePositionResult {\n const {\n side: preferredSide = \"bottom\",\n align = \"start\",\n offset = getFloatingSelectListboxOffsetPx(),\n viewportPad: viewportPadOption,\n flip = true,\n matchTriggerMinWidth = true,\n } = options;\n\n const [resolvedSide, setResolvedSide] = React.useState<PositionSide>(preferredSide);\n\n const applyPositionStyle = React.useCallback(\n (pos: PositionStyle) => {\n const content = contentRef.current;\n if (!content) return;\n\n content.style.position = pos.position;\n content.style.top = `${pos.top}px`;\n content.style.left = `${pos.left}px`;\n content.style.minWidth = pos.minWidth !== undefined ? `${pos.minWidth}px` : \"\";\n content.style.maxHeight = pos.maxHeight !== undefined ? `${pos.maxHeight}px` : \"\";\n },\n [contentRef],\n );\n\n const update = React.useCallback((): PositionUpdateMeta | undefined => {\n const anchor = anchorRef.current;\n const content = contentRef.current;\n if (!anchor) return undefined;\n\n const viewportPad = viewportPadOption ?? getFloatingViewportPadPx();\n const anchorRect = anchor.getBoundingClientRect();\n const pos = computeFloatingPosition(\n anchorRect,\n content?.offsetWidth ?? 0,\n content?.offsetHeight ?? 0,\n window.innerWidth,\n window.innerHeight,\n { preferredSide, align, offset, viewportPad, flip, matchTriggerMinWidth },\n );\n\n setResolvedSide(pos.resolvedSide);\n applyPositionStyle({\n position: \"fixed\",\n top: pos.top,\n left: pos.left,\n ...(pos.minWidth !== undefined ? { minWidth: pos.minWidth } : {}),\n ...(pos.maxHeight !== undefined ? { maxHeight: pos.maxHeight } : {}),\n });\n return { resolvedSide: pos.resolvedSide };\n }, [\n anchorRef,\n applyPositionStyle,\n contentRef,\n preferredSide,\n align,\n offset,\n flip,\n matchTriggerMinWidth,\n viewportPadOption,\n ]);\n\n return { resolvedSide, update };\n}\n","import * as React from \"react\";\nimport { createPortal } from \"react-dom\";\n\ntype PortalProps = {\n children: React.ReactNode;\n container?: HTMLElement | null;\n};\n\nexport function Portal({ children, container }: PortalProps) {\n const [mounted, setMounted] = React.useState(false);\n\n // useLayoutEffect: портал в DOM до paint и до layout-эффектов родителя (нужно для ref + позиционирования).\n React.useLayoutEffect(() => {\n setMounted(true);\n return () => setMounted(false);\n }, []);\n\n if (!mounted) return null;\n\n return createPortal(children, container ?? document.body);\n}\n","/* ─── Select (composable) ────────────────────────────────────────────────── */\n\n/* Trigger — горизонтальный ритм как у Input.wrapper: `inputPaddingX` + тот же `control-*-gap` между слотами. */\n\n.trigger {\n --select-trigger-pad-x: var(--prime-sys-size-control-m-inputPaddingX);\n --select-trigger-pad-y: var(--prime-sys-size-control-m-inputPaddingY);\n --select-trigger-gap: var(--prime-sys-size-control-m-gap);\n /* Слот под шеврон = ширина иконки яруса — зеркалит отступ текста при `TriggerIcon` слева. */\n --select-chevron-slot: var(--prime-sys-size-control-m-icon);\n\n position: relative;\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: var(--select-trigger-gap);\n width: 100%;\n min-width: 0;\n padding-inline: var(--select-trigger-pad-x);\n padding-block: var(--select-trigger-pad-y);\n border-radius: var(--prime-sys-size-control-m-radius);\n border: var(--prime-sys-border-width-control) solid var(--prime-sys-color-field-border);\n background: var(--prime-sys-color-field-bg);\n color: var(--prime-sys-color-field-text);\n font-size: var(--prime-sys-typography-control-m);\n line-height: var(--prime-sys-typography-body-lineHeight);\n font-family: inherit;\n box-shadow: var(--prime-sys-elevation-shadow-surface);\n cursor: pointer;\n text-align: left;\n outline: none;\n transition:\n border-color var(--prime-sys-motion-medium) var(--prime-sys-motion-standard),\n box-shadow var(--prime-sys-motion-medium) var(--prime-sys-motion-standard),\n background-color var(--prime-sys-motion-medium) var(--prime-sys-motion-standard);\n}\n\n.trigger[data-size=\"s\"] {\n --select-trigger-pad-x: var(--prime-sys-size-control-s-inputPaddingX);\n --select-trigger-pad-y: var(--prime-sys-size-control-s-inputPaddingY);\n --select-trigger-gap: var(--prime-sys-size-control-s-gap);\n --select-chevron-slot: var(--prime-sys-size-control-s-icon);\n height: var(--prime-sys-size-control-s-height);\n border-radius: var(--prime-sys-size-control-s-radius);\n font-size: var(--prime-sys-typography-support-2xs);\n}\n\n.trigger[data-size=\"m\"] {\n --select-trigger-gap: var(--prime-sys-size-control-m-gap);\n --select-chevron-slot: var(--prime-sys-size-control-m-icon);\n height: var(--prime-sys-size-control-m-height);\n border-radius: var(--prime-sys-size-control-m-radius);\n font-size: var(--prime-sys-typography-control-s);\n}\n\n.trigger[data-size=\"l\"] {\n --select-trigger-pad-x: var(--prime-sys-size-control-l-inputPaddingX);\n --select-trigger-pad-y: var(--prime-sys-size-control-l-inputPaddingY);\n --select-trigger-gap: var(--prime-sys-size-control-l-gap);\n --select-chevron-slot: var(--prime-sys-size-control-l-icon);\n height: var(--prime-sys-size-control-l-height);\n border-radius: var(--prime-sys-size-control-l-radius);\n font-size: var(--prime-sys-typography-control-m);\n}\n\n.trigger[data-size=\"xl\"] {\n --select-trigger-pad-x: var(--prime-sys-size-control-xl-inputPaddingX);\n --select-trigger-pad-y: var(--prime-sys-size-control-xl-inputPaddingY);\n --select-trigger-gap: var(--prime-sys-size-control-xl-gap);\n --select-chevron-slot: var(--prime-sys-size-control-xl-icon);\n height: var(--prime-sys-size-control-xl-height);\n border-radius: var(--prime-sys-size-control-xl-radius);\n font-size: var(--prime-sys-typography-control-l);\n}\n\n.triggerMain {\n display: flex;\n flex: 1 1 auto;\n align-items: center;\n gap: var(--select-trigger-gap);\n min-width: 0;\n}\n\n.trigger:hover {\n border-color: var(--prime-sys-color-field-borderHover);\n /*\n * В dark `action-neutralBackgroundHover` совпадает с `surface-elevated` у Dropdown/меню —\n * ховер неотличим от фона. Смешивание с `field-text` даёт стабильный контраст в обеих темах.\n */\n background: color-mix(\n in srgb,\n var(--prime-sys-color-action-neutralBackgroundHover) 90%,\n var(--prime-sys-color-field-text) 10%\n );\n box-shadow: none;\n}\n\n.trigger:focus-visible {\n border-color: var(--prime-sys-color-field-borderFocus);\n box-shadow: var(--prime-sys-elevation-shadow-buttonFocus);\n}\n\n.trigger[data-has-error=\"true\"] {\n border-color: var(--prime-sys-color-field-borderError);\n}\n\n.trigger[data-has-error=\"true\"]:focus-visible {\n box-shadow: var(--prime-sys-elevation-shadow-errorFocus);\n}\n\n.trigger:disabled {\n background: var(--prime-sys-color-surface-accentSoft);\n border-color: transparent;\n box-shadow: none;\n cursor: not-allowed;\n color: var(--prime-sys-color-content-disabled);\n}\n\n/* Слот шеврона по ширине иконки яруса — глиф по центру, до края поля тот же шаг, что у текста/иконки. */\n.triggerChevronSlot {\n display: inline-flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n width: var(--select-chevron-slot);\n min-width: var(--select-chevron-slot);\n pointer-events: none;\n}\n\n.triggerChevron {\n display: block;\n flex-shrink: 0;\n width: var(--prime-sys-unit-0p45rem);\n height: var(--prime-sys-unit-0p45rem);\n border-right: var(--prime-sys-unit-1p5px) solid currentColor;\n border-bottom: var(--prime-sys-unit-1p5px) solid currentColor;\n transform: rotate(45deg) translateY(-10%);\n opacity: 0.6;\n transition:\n transform var(--prime-sys-motion-medium) var(--prime-sys-motion-standard),\n opacity var(--prime-sys-motion-medium) var(--prime-sys-motion-standard);\n}\n\n.trigger[data-open=\"true\"] .triggerChevron {\n transform: rotate(225deg) translateY(-10%);\n}\n\n.trigger:hover .triggerChevron,\n.trigger:focus-visible .triggerChevron {\n opacity: 0.9;\n}\n\n.trigger:disabled .triggerChevron {\n opacity: 0.3;\n}\n\n/* Trigger value / placeholder */\n\n.triggerValue {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.triggerValue[data-placeholder=\"true\"] {\n color: var(--prime-sys-color-field-placeholder);\n}\n\n/* Trigger custom icon slot */\n\n.triggerIcon {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n color: var(--prime-sys-color-content-muted);\n}\n\n.trigger[data-size=\"s\"] .triggerIcon {\n width: var(--prime-sys-size-control-s-icon);\n height: var(--prime-sys-size-control-s-icon);\n}\n\n.trigger[data-size=\"m\"] .triggerIcon {\n width: var(--prime-sys-size-control-m-icon);\n height: var(--prime-sys-size-control-m-icon);\n}\n\n.trigger[data-size=\"l\"] .triggerIcon {\n width: var(--prime-sys-size-control-l-icon);\n height: var(--prime-sys-size-control-l-icon);\n}\n\n.trigger[data-size=\"xl\"] .triggerIcon {\n width: var(--prime-sys-size-control-xl-icon);\n height: var(--prime-sys-size-control-xl-icon);\n}\n\n.triggerIcon svg {\n width: 100%;\n height: 100%;\n display: block;\n}\n\n/* ─── Content (dropdown) ─────────────────────────────────────────────────── */\n\n.content {\n --select-item-min-height: var(--prime-sys-size-control-m-height);\n --select-item-text: var(--prime-sys-typography-control-s);\n --select-item-pad-x: var(--prime-sys-size-control-m-inputPaddingX);\n --select-item-icon-size: var(--prime-sys-size-control-m-icon);\n /* Один `gap` на ряду пункта: между всеми слотами (иконки, текст, слот галочки). */\n --select-item-gap: var(--prime-sys-size-control-m-gap);\n --select-item-radius: var(--prime-sys-size-control-m-radius);\n\n display: flex;\n flex-direction: column;\n gap: var(--prime-sys-spacing-x1);\n z-index: var(--prime-sys-elevation-zIndex-dropdown);\n /* Как у Dropdown: иначе width:auto у fixed растягивается под вьюпорт, offsetWidth огромный,\n * и clamp в usePosition загоняет left к var(--prime-sys-unit-8px) — список уезжает влево от триггера. */\n width: max-content;\n max-width: min(var(--prime-sys-unit-28rem), 100vw);\n overflow-x: hidden;\n overflow-y: auto;\n /* Основной лимит — inline maxHeight из usePosition; запас на первый кадр до RAF. */\n max-height: min(85dvh, var(--prime-sys-unit-40rem));\n padding: var(--prime-sys-spacing-x1);\n border-radius: var(--prime-sys-shape-radius-l);\n border: var(--prime-sys-border-width-control) solid var(--prime-sys-color-border-subtle);\n background: var(--prime-sys-color-surface-elevated);\n box-shadow: var(--prime-sys-elevation-shadow-modal);\n outline: none;\n font-family: inherit;\n color: var(--prime-sys-color-content-primary);\n}\n\n.content[data-size=\"s\"] {\n --select-item-min-height: var(--prime-sys-size-control-s-height);\n --select-item-text: var(--prime-sys-typography-support-2xs);\n --select-item-pad-x: var(--prime-sys-size-control-s-inputPaddingX);\n --select-item-icon-size: var(--prime-sys-size-control-s-icon);\n --select-item-gap: var(--prime-sys-size-control-s-gap);\n --select-item-radius: var(--prime-sys-size-control-s-radius);\n}\n\n.content[data-size=\"m\"] {\n --select-item-min-height: var(--prime-sys-size-control-m-height);\n --select-item-text: var(--prime-sys-typography-control-s);\n --select-item-pad-x: var(--prime-sys-size-control-m-inputPaddingX);\n --select-item-icon-size: var(--prime-sys-size-control-m-icon);\n --select-item-gap: var(--prime-sys-size-control-m-gap);\n --select-item-radius: var(--prime-sys-size-control-m-radius);\n}\n\n.content[data-size=\"l\"] {\n --select-item-min-height: var(--prime-sys-size-control-l-height);\n --select-item-text: var(--prime-sys-typography-control-m);\n --select-item-pad-x: var(--prime-sys-size-control-l-inputPaddingX);\n --select-item-icon-size: var(--prime-sys-size-control-l-icon);\n --select-item-gap: var(--prime-sys-size-control-l-gap);\n --select-item-radius: var(--prime-sys-size-control-l-radius);\n}\n\n.content[data-size=\"xl\"] {\n --select-item-min-height: var(--prime-sys-size-control-xl-height);\n --select-item-text: var(--prime-sys-typography-control-l);\n --select-item-pad-x: var(--prime-sys-size-control-xl-inputPaddingX);\n --select-item-icon-size: var(--prime-sys-size-control-xl-icon);\n --select-item-gap: var(--prime-sys-size-control-xl-gap);\n --select-item-radius: var(--prime-sys-size-control-xl-radius);\n}\n\n/* ─── Item ───────────────────────────────────────────────────────────────── */\n\n.item {\n display: flex;\n align-items: center;\n gap: var(--select-item-gap);\n box-sizing: border-box;\n width: 100%;\n min-height: var(--select-item-min-height);\n padding-block: 0;\n padding-inline: var(--select-item-pad-x);\n border-radius: var(--select-item-radius);\n cursor: pointer;\n font-size: var(--select-item-text);\n font-weight: var(--prime-sys-typography-weight-medium);\n line-height: 1.2;\n color: var(--prime-sys-color-content-primary);\n text-align: start;\n transition: background-color var(--prime-sys-motion-medium) var(--prime-sys-motion-standard);\n outline: none;\n user-select: none;\n}\n\n.item:hover,\n.item[data-highlighted=\"true\"] {\n background: color-mix(\n in srgb,\n var(--prime-sys-color-action-neutralBackgroundHover) 90%,\n var(--prime-sys-color-field-text) 10%\n );\n}\n\n.item[data-disabled=\"true\"] {\n color: var(--prime-sys-color-content-disabled);\n cursor: not-allowed;\n}\n\n/* Item text area */\n\n.itemText {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n/* Слот галочки = ширина иконки яруса: боковой воздух только `padding-inline` у `.item`, как слева у `ItemIcon`. */\n.itemCheckSlot {\n display: inline-flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n width: var(--select-item-icon-size);\n min-width: var(--select-item-icon-size);\n}\n\n.itemCheck {\n display: block;\n flex-shrink: 0;\n box-sizing: border-box;\n width: var(--prime-sys-unit-0p4rem);\n height: var(--prime-sys-unit-0p72rem);\n border-right: var(--prime-sys-unit-2px) solid var(--prime-sys-color-content-accent);\n border-bottom: var(--prime-sys-unit-2px) solid var(--prime-sys-color-content-accent);\n transform: rotate(45deg) translateY(-15%);\n}\n\n/* Item icon slot */\n\n.itemIcon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: var(--select-item-icon-size);\n height: var(--select-item-icon-size);\n line-height: 1;\n color: var(--prime-sys-color-content-secondary);\n}\n\n.itemIcon svg {\n width: 100%;\n height: 100%;\n display: block;\n}\n\n.item[data-disabled=\"true\"] .itemIcon {\n opacity: 0.55;\n}\n\n/* ─── Group ──────────────────────────────────────────────────────────────── */\n\n.group {\n display: flex;\n flex-direction: column;\n gap: var(--prime-sys-spacing-x1);\n}\n\n.groupLabel {\n display: flex;\n align-items: center;\n padding-inline: var(--select-item-pad-x);\n padding-block: var(--prime-sys-spacing-x1);\n font-size: var(--prime-sys-typography-support-2xs);\n color: var(--prime-sys-color-content-muted);\n font-weight: var(--prime-sys-typography-weight-medium);\n}\n\n/* ─── Separator ──────────────────────────────────────────────────────────── */\n\n.separator {\n flex-shrink: 0;\n align-self: stretch;\n margin: 0;\n border: none;\n border-top: var(--prime-sys-border-width-control) solid var(--prime-sys-color-border-subtle);\n}\n","import type * as React from \"react\";\n\n/** Опции listbox: только включённые пункты (без `data-disabled`). */\nexport function queryEnabledSelectOptions(container: HTMLElement | null): HTMLElement[] {\n if (!container) return [];\n return Array.from(\n container.querySelectorAll<HTMLElement>('[role=\"option\"]:not([data-disabled=\"true\"])'),\n );\n}\n\nexport type SelectListboxKeyboardContext = {\n items: HTMLElement[];\n highlightedValue: string | undefined;\n setHighlightedValue: (value: string | undefined) => void;\n onSelect: (value: string, label: string) => void;\n onClose: () => void;\n};\n\n/** Обработка клавиш для `role=\"listbox\"` (стрелки, Home/End, Enter, Space, Escape). */\nexport function handleSelectListboxKeyDown(\n e: React.KeyboardEvent<HTMLDivElement>,\n ctx: SelectListboxKeyboardContext,\n): void {\n const { items, highlightedValue, setHighlightedValue, onSelect, onClose } = ctx;\n if (items.length === 0) return;\n\n const currentIndex = items.findIndex((i) => i.dataset.value === highlightedValue);\n\n switch (e.key) {\n case \"ArrowDown\": {\n e.preventDefault();\n const next = currentIndex < items.length - 1 ? currentIndex + 1 : 0;\n setHighlightedValue(items[next]?.dataset.value);\n items[next]?.scrollIntoView?.({ block: \"nearest\" });\n break;\n }\n case \"ArrowUp\": {\n e.preventDefault();\n const prev = currentIndex > 0 ? currentIndex - 1 : items.length - 1;\n setHighlightedValue(items[prev]?.dataset.value);\n items[prev]?.scrollIntoView?.({ block: \"nearest\" });\n break;\n }\n case \"Home\": {\n e.preventDefault();\n setHighlightedValue(items[0]?.dataset.value);\n items[0]?.scrollIntoView?.({ block: \"nearest\" });\n break;\n }\n case \"End\": {\n e.preventDefault();\n const last = items[items.length - 1];\n setHighlightedValue(last?.dataset.value);\n last?.scrollIntoView?.({ block: \"nearest\" });\n break;\n }\n case \"Enter\":\n case \" \": {\n e.preventDefault();\n if (highlightedValue) {\n const item = items.find((i) => i.dataset.value === highlightedValue);\n const label = item?.dataset.label ?? item?.textContent?.trim() ?? highlightedValue;\n onSelect(highlightedValue, label);\n }\n break;\n }\n case \"Escape\": {\n e.preventDefault();\n onClose();\n break;\n }\n default:\n break;\n }\n}\n","import * as React from \"react\";\n\nimport { useControllableState } from \"@/hooks/useControllableState\";\nimport { useEscapeKey } from \"@/hooks/useEscapeKey\";\nimport { useOutsideClick } from \"@/hooks/useOutsideClick\";\nimport { usePosition } from \"@/hooks/usePosition\";\nimport { ControlSizeProvider } from \"@/internal/ControlSizeContext\";\nimport { createComponentContext } from \"@/internal/context\";\nimport { cx } from \"@/internal/cx\";\nimport { toDataAttributes } from \"@/internal/data-attributes\";\nimport { Portal } from \"@/internal/Portal\";\nimport type { SelectSize } from \"@/internal/states\";\n\nimport styles from \"./Select.module.css\";\nimport { handleSelectListboxKeyDown, queryEnabledSelectOptions } from \"./selectListbox\";\n\n// ─── Context ─────────────────────────────────────────────────────────────────\n\ntype SelectContextValue = {\n size: SelectSize;\n hasError: boolean;\n isOpen: boolean;\n selectedValue: string | undefined;\n selectedLabel: string | undefined;\n onSelect: (value: string, label: string) => void;\n onClose: () => void;\n onOpen: () => void;\n highlightedValue: string | undefined;\n setHighlightedValue: (v: string | undefined) => void;\n triggerId: string;\n listboxId: string;\n triggerRef: React.RefObject<HTMLButtonElement | null>;\n disabled?: boolean;\n placeholder?: string;\n onInitLabel: (value: string, label: string) => void;\n};\n\nconst [SelectProvider, useSelectContext] = createComponentContext<SelectContextValue>(\"Select\");\n\n// ─── SelectRoot ───────────────────────────────────────────────────────────────\n\nexport type SelectRootProps = {\n size?: SelectSize;\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n disabled?: boolean;\n placeholder?: string;\n hasError?: boolean;\n children: React.ReactNode;\n};\n\nfunction SelectRoot({\n size = \"m\",\n value,\n defaultValue,\n onChange,\n disabled,\n placeholder,\n hasError = false,\n children,\n}: SelectRootProps) {\n const handleChange = React.useCallback(\n (v: string | undefined) => {\n if (v !== undefined) onChange?.(v);\n },\n [onChange],\n );\n\n const [selectedValue, setSelectedValue] = useControllableState<string | undefined>({\n value,\n defaultValue,\n onChange: handleChange,\n });\n\n const [selectedLabel, setSelectedLabel] = React.useState<string | undefined>(undefined);\n const [isOpen, setIsOpen] = React.useState(false);\n const [highlightedValue, setHighlightedValue] = React.useState<string | undefined>(undefined);\n\n const generatedId = React.useId();\n const triggerId = `${generatedId}-trigger`;\n const listboxId = `${generatedId}-listbox`;\n const triggerRef = React.useRef<HTMLButtonElement | null>(null);\n\n // Sync ref so onInitLabel doesn't go stale\n const selectedValueRef = React.useRef(selectedValue);\n selectedValueRef.current = selectedValue;\n\n const onInitLabel = React.useCallback((val: string, label: string) => {\n if (val === selectedValueRef.current) {\n setSelectedLabel(label);\n }\n }, []);\n\n const onSelect = React.useCallback(\n (val: string, label: string) => {\n setSelectedValue(val);\n setSelectedLabel(label);\n setIsOpen(false);\n },\n [setSelectedValue],\n );\n\n const onClose = React.useCallback(() => setIsOpen(false), []);\n const onOpen = React.useCallback(() => setIsOpen(true), []);\n\n return (\n <SelectProvider\n value={{\n size,\n hasError,\n isOpen,\n selectedValue,\n selectedLabel,\n onSelect,\n onClose,\n onOpen,\n highlightedValue,\n setHighlightedValue,\n triggerId,\n listboxId,\n triggerRef,\n disabled,\n placeholder,\n onInitLabel,\n }}\n >\n <ControlSizeProvider value={size}>{children}</ControlSizeProvider>\n </SelectProvider>\n );\n}\nSelectRoot.displayName = \"SelectRoot\";\n\n// ─── SelectTrigger ────────────────────────────────────────────────────────────\n\nexport type SelectTriggerProps = Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n \"id\" | \"type\" | \"role\"\n>;\n\nconst SelectTrigger = React.forwardRef<HTMLButtonElement, SelectTriggerProps>(\n ({ className, children, onClick, onKeyDown, ...rest }, forwardedRef) => {\n const { isOpen, onOpen, onClose, triggerId, listboxId, disabled, size, hasError, triggerRef } =\n useSelectContext();\n\n const setRefs = React.useCallback(\n (el: HTMLButtonElement | null) => {\n (triggerRef as React.MutableRefObject<HTMLButtonElement | null>).current = el;\n if (typeof forwardedRef === \"function\") {\n forwardedRef(el);\n } else if (forwardedRef) {\n (forwardedRef as React.MutableRefObject<HTMLButtonElement | null>).current = el;\n }\n },\n [forwardedRef, triggerRef],\n );\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n if (!disabled) {\n if (isOpen) onClose();\n else onOpen();\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => {\n onKeyDown?.(e);\n if ([\"ArrowDown\", \"ArrowUp\", \" \", \"Enter\"].includes(e.key)) {\n e.preventDefault();\n if (!isOpen) onOpen();\n }\n };\n\n return (\n <button\n ref={setRefs}\n id={triggerId}\n type=\"button\"\n role=\"combobox\"\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-controls={listboxId}\n disabled={disabled}\n className={cx(styles.trigger, className)}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n {...toDataAttributes({ open: isOpen, size, \"has-error\": hasError })}\n {...rest}\n >\n <span className={styles.triggerMain}>{children}</span>\n <span className={styles.triggerChevronSlot} aria-hidden>\n <span className={styles.triggerChevron} />\n </span>\n </button>\n );\n },\n);\nSelectTrigger.displayName = \"SelectTrigger\";\n\n// ─── SelectValue ─────────────────────────────────────────────────────────────\n\nexport type SelectValueProps = {\n className?: string;\n};\n\nfunction SelectValue({ className }: SelectValueProps) {\n const { selectedLabel, selectedValue, placeholder } = useSelectContext();\n /* Пока список закрыт, Option не смонтированы — onInitLabel не вызывается; показываем value */\n const display = selectedLabel ?? selectedValue ?? placeholder;\n return (\n <span\n className={cx(styles.triggerValue, className)}\n {...toDataAttributes({ placeholder: display == null || display === \"\" })}\n >\n {display}\n </span>\n );\n}\nSelectValue.displayName = \"SelectValue\";\n\n// ─── SelectTriggerIcon ────────────────────────────────────────────────────────\n\nexport type SelectTriggerIconProps = React.HTMLAttributes<HTMLSpanElement>;\n\nfunction SelectTriggerIcon({ className, children, ...rest }: SelectTriggerIconProps) {\n return (\n <span className={cx(styles.triggerIcon, className)} {...rest}>\n {children}\n </span>\n );\n}\nSelectTriggerIcon.displayName = \"SelectTriggerIcon\";\n\n// ─── SelectContent ────────────────────────────────────────────────────────────\n\nexport type SelectContentProps = {\n className?: string;\n children: React.ReactNode;\n};\n\nfunction SelectContent({ className, children }: SelectContentProps) {\n const {\n isOpen,\n onClose,\n onSelect,\n triggerId,\n listboxId,\n triggerRef,\n highlightedValue,\n setHighlightedValue,\n selectedValue,\n size,\n } = useSelectContext();\n\n const contentRef = React.useRef<HTMLDivElement | null>(null);\n const { resolvedSide, update } = usePosition(triggerRef, contentRef, {\n side: \"bottom\",\n align: \"start\",\n });\n\n const getItems = React.useCallback(() => queryEnabledSelectOptions(contentRef.current), []);\n\n /* Позиционирование только когда список открыт */\n React.useLayoutEffect(() => {\n if (!isOpen) return;\n update();\n const rafId = requestAnimationFrame(() => update());\n return () => cancelAnimationFrame(rafId);\n }, [isOpen, update]);\n\n React.useEffect(() => {\n if (!isOpen) {\n setHighlightedValue(undefined);\n return;\n }\n\n const reposition = () => {\n requestAnimationFrame(() => update());\n };\n\n const bootstrap = () => {\n requestAnimationFrame(() => {\n const el = contentRef.current;\n if (!el) return;\n el.focus({ preventScroll: true });\n const items = queryEnabledSelectOptions(el);\n const selectedIndex = items.findIndex((i) => i.dataset.value === selectedValue);\n // Выделяем только если есть выбранное значение; иначе оставляем undefined\n if (selectedIndex >= 0 && selectedValue) {\n setHighlightedValue(selectedValue);\n }\n });\n };\n\n bootstrap();\n window.addEventListener(\"resize\", reposition);\n const vv = window.visualViewport;\n vv?.addEventListener(\"resize\", reposition);\n return () => {\n window.removeEventListener(\"resize\", reposition);\n vv?.removeEventListener(\"resize\", reposition);\n };\n }, [isOpen, update, selectedValue, setHighlightedValue]);\n\n useEscapeKey({ enabled: isOpen, onEscape: onClose });\n useOutsideClick({ refs: [triggerRef, contentRef], enabled: isOpen, onOutsideClick: onClose });\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n handleSelectListboxKeyDown(e, {\n items: getItems(),\n highlightedValue,\n setHighlightedValue,\n onSelect,\n onClose,\n });\n };\n\n return (\n <Portal>\n <div\n ref={contentRef}\n id={listboxId}\n role=\"listbox\"\n aria-labelledby={triggerId}\n aria-hidden={!isOpen}\n tabIndex={-1}\n data-react-aria-top-layer=\"true\"\n className={cx(styles.content, className)}\n onKeyDown={handleKeyDown}\n style={{ display: isOpen ? undefined : \"none\" }}\n {...toDataAttributes({ side: resolvedSide, size })}\n >\n {children}\n </div>\n </Portal>\n );\n}\nSelectContent.displayName = \"SelectContent\";\n\n// ─── SelectItemIcon (объявлен до SelectItem — partition по child.type) ───────\n\nexport type SelectItemIconProps = React.HTMLAttributes<HTMLSpanElement>;\n\nfunction SelectItemIcon({ className, children, ...rest }: SelectItemIconProps) {\n return (\n <span className={cx(styles.itemIcon, className)} {...rest}>\n {children}\n </span>\n );\n}\nSelectItemIcon.displayName = \"SelectItemIcon\";\n\nfunction selectItemTextFromRest(rest: React.ReactNode[]): string | undefined {\n const parts: string[] = [];\n for (const node of rest) {\n if (typeof node === \"string\" || typeof node === \"number\") {\n const s = String(node).trim();\n if (s.length > 0) parts.push(s);\n }\n }\n return parts.length > 0 ? parts.join(\" \") : undefined;\n}\n\nfunction partitionSelectItemChildren(children: React.ReactNode) {\n const icons: React.ReactElement[] = [];\n const rest: React.ReactNode[] = [];\n\n React.Children.forEach(children, (child) => {\n if (React.isValidElement(child) && child.type === SelectItemIcon) {\n icons.push(child);\n } else if (child != null && child !== false) {\n rest.push(child);\n }\n });\n\n return { icons, rest };\n}\n\n// ─── SelectItem ───────────────────────────────────────────────────────────────\n\nexport type SelectItemProps = {\n value: string;\n /** Explicit label for display in trigger; falls back to string children, then value */\n label?: string;\n disabled?: boolean;\n className?: string;\n children: React.ReactNode;\n};\n\nconst SelectItem = React.forwardRef<HTMLDivElement, SelectItemProps>(\n ({ value, label, disabled, className, children }, ref) => {\n const { selectedValue, highlightedValue, setHighlightedValue, onSelect, onInitLabel } =\n useSelectContext();\n\n const { icons, rest } = partitionSelectItemChildren(children);\n\n const isSelected = selectedValue === value;\n const isHighlighted = highlightedValue === value;\n const resolvedLabel =\n label ??\n selectItemTextFromRest(rest) ??\n (typeof children === \"string\" ? children : undefined) ??\n value;\n\n React.useEffect(() => {\n onInitLabel(value, resolvedLabel);\n }, [value, resolvedLabel, onInitLabel]);\n\n const handleClick = () => {\n if (!disabled) onSelect(value, resolvedLabel);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if ((e.key === \"Enter\" || e.key === \" \") && !disabled) {\n e.preventDefault();\n onSelect(value, resolvedLabel);\n }\n };\n\n const handleMouseEnter = () => {\n if (!disabled) setHighlightedValue(value);\n };\n\n return (\n <div\n ref={ref}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={disabled || undefined}\n tabIndex={-1}\n className={cx(styles.item, className)}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n onMouseEnter={handleMouseEnter}\n {...toDataAttributes({\n value,\n label: resolvedLabel,\n selected: isSelected,\n highlighted: isHighlighted,\n disabled: Boolean(disabled),\n })}\n >\n {icons.map((icon, index) =>\n React.cloneElement(icon, {\n key: icon.key ?? `prime-select-item-icon-${String(index)}`,\n }),\n )}\n <span className={styles.itemText}>{rest}</span>\n {isSelected ? (\n <span className={styles.itemCheckSlot} aria-hidden=\"true\">\n <span className={styles.itemCheck} />\n </span>\n ) : null}\n </div>\n );\n },\n);\nSelectItem.displayName = \"SelectItem\";\n\n// ─── SelectGroup ──────────────────────────────────────────────────────────────\n\nexport type SelectGroupProps = React.HTMLAttributes<HTMLDivElement>;\n\nfunction SelectGroup({ className, ...rest }: SelectGroupProps) {\n // biome-ignore lint/a11y/useSemanticElements: role=\"group\" is correct for ARIA listbox groups; <fieldset> is not valid inside role=\"listbox\"\n return <div role=\"group\" className={cx(styles.group, className)} {...rest} />;\n}\nSelectGroup.displayName = \"SelectGroup\";\n\n// ─── SelectGroupLabel ─────────────────────────────────────────────────────────\n\nexport type SelectGroupLabelProps = React.HTMLAttributes<HTMLDivElement>;\n\nfunction SelectGroupLabel({ className, ...rest }: SelectGroupLabelProps) {\n return <div className={cx(styles.groupLabel, className)} {...rest} />;\n}\nSelectGroupLabel.displayName = \"SelectGroupLabel\";\n\n// ─── SelectSeparator ─────────────────────────────────────────────────────────\n\nexport type SelectSeparatorProps = React.HTMLAttributes<HTMLHRElement>;\n\nfunction SelectSeparator({ className, ...rest }: SelectSeparatorProps) {\n return <hr className={cx(styles.separator, className)} {...rest} />;\n}\nSelectSeparator.displayName = \"SelectSeparator\";\n\n// ─── Namespace export ─────────────────────────────────────────────────────────\n\nexport const Select = {\n Root: SelectRoot,\n Trigger: SelectTrigger,\n Value: SelectValue,\n TriggerIcon: SelectTriggerIcon,\n Content: SelectContent,\n Item: SelectItem,\n ItemIcon: SelectItemIcon,\n Group: SelectGroup,\n GroupLabel: SelectGroupLabel,\n Separator: SelectSeparator,\n};\n","/* —— Размеры слайдера как у Slider (control-m) —— */\n.slider[data-size=\"m\"] {\n --slider-root-gap: var(--prime-sys-spacing-x3);\n --slider-track-h: var(--prime-sys-spacing-xs);\n --slider-thumb-size: var(--prime-sys-size-control-m-icon);\n --slider-label-size: var(--prime-sys-size-control-m-text);\n}\n\n/* ---- Slider (hue / alpha) — внешний вид как у китового Slider ---- */\n.slider {\n display: flex;\n flex-direction: column;\n gap: var(--slider-root-gap);\n width: 100%;\n}\n\n.slider + .slider {\n margin-block-start: var(--prime-sys-spacing-x2);\n}\n\n.sliderHeader {\n display: flex;\n flex-direction: row;\n align-items: baseline;\n justify-content: space-between;\n gap: var(--prime-sys-spacing-x2);\n width: 100%;\n}\n\n.sliderLabel {\n font-size: var(--slider-label-size);\n font-weight: var(--prime-sys-typography-weight-medium);\n color: var(--prime-sys-color-content-primary);\n}\n\n.sliderValue {\n font-size: var(--prime-sys-size-control-s-supportText);\n font-variant-numeric: tabular-nums;\n color: var(--prime-sys-color-content-muted);\n}\n\n.sliderTrack {\n box-sizing: border-box;\n width: 100%;\n height: var(--slider-track-h);\n border-radius: var(--prime-sys-shape-radius-round);\n outline: none;\n cursor: pointer;\n}\n\n.sliderTrack:focus-visible {\n outline: var(--prime-sys-border-width-focusRing) solid var(--prime-sys-color-focus-ring);\n outline-offset: var(--prime-sys-spacing-xs);\n}\n\n.slider[data-disabled] .sliderTrack {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n/* ---- Thumb на слайдере: тот же вид, что у маркера области (.thumbArea) ---- */\n.thumb {\n z-index: 2;\n box-sizing: border-box;\n width: var(--slider-thumb-size);\n height: var(--slider-thumb-size);\n border-radius: var(--prime-sys-shape-radius-round);\n border: var(--prime-sys-border-width-focusRing) solid var(--prime-sys-color-border-inverse);\n box-shadow:\n 0 0 0 var(--prime-sys-border-width-control) var(--prime-sys-color-border-strong),\n var(--prime-sys-elevation-shadow-surface);\n cursor: pointer;\n transition: box-shadow var(--prime-sys-motion-fast) var(--prime-sys-motion-standard);\n}\n\n.thumb[data-hovered]:not([data-disabled]) {\n box-shadow:\n 0 0 0 var(--prime-sys-border-width-control) var(--prime-sys-color-border-strong),\n var(--prime-sys-elevation-shadow-buttonFocus);\n}\n\n.thumb[data-disabled] {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n/* RAC задаёт только left + translate(-50%,-50%); без top вертикаль не по центру трека */\n.slider[data-orientation=\"horizontal\"] .thumb {\n top: 50%;\n}\n\n/* ---- Область выбора: маркер с белым кольцом (как в референсе) ---- */\n.area {\n --area-thumb-size: var(--prime-sys-size-control-m-icon);\n box-sizing: border-box;\n width: 100%;\n min-height: var(--prime-sys-unit-14p5rem);\n border-radius: var(--prime-sys-size-control-m-radius);\n border: var(--prime-sys-border-width-control) solid var(--prime-sys-color-field-border);\n background-clip: padding-box;\n box-shadow: var(--prime-sys-elevation-shadow-surface);\n outline: none;\n}\n\n.area:focus-visible {\n outline: var(--prime-sys-border-width-focusRing) solid var(--prime-sys-color-focus-ring);\n outline-offset: var(--prime-sys-spacing-xs);\n}\n\n.area[data-disabled] {\n opacity: 0.45;\n pointer-events: none;\n}\n\n.thumbArea {\n z-index: 2;\n box-sizing: border-box;\n width: var(--area-thumb-size);\n height: var(--area-thumb-size);\n border-radius: var(--prime-sys-shape-radius-round);\n border: var(--prime-sys-border-width-focusRing) solid var(--prime-sys-color-border-inverse);\n box-shadow:\n 0 0 0 var(--prime-sys-border-width-control) var(--prime-sys-color-border-strong),\n var(--prime-sys-elevation-shadow-surface);\n cursor: pointer;\n transition: box-shadow var(--prime-sys-motion-fast) var(--prime-sys-motion-standard);\n}\n\n.thumbArea[data-hovered]:not([data-disabled]) {\n box-shadow:\n 0 0 0 var(--prime-sys-border-width-control) var(--prime-sys-color-border-strong),\n var(--prime-sys-elevation-shadow-buttonFocus);\n}\n\n.thumbArea[data-disabled] {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n/* ---- Селектор формата (стандартный Select на всю ширину) ---- */\n.formatSelectWrap {\n display: flex;\n width: 100%;\n min-width: 0;\n flex-direction: column;\n}\n\n/*\n * ColorPicker часто используется внутри Popover (z-index: 1000).\n * Select внутри ColorPicker использует стандартный dropdown (1100), который выше Popover.\n * Дополнительное смещение не требуется.\n */\n.formatSelectContent {\n z-index: var(--prime-sys-elevation-zIndex-dropdown);\n}\n\n/* ---- Полоса: пипетка + сегменты каналов ---- */\n.channelStrip {\n display: flex;\n align-items: stretch;\n width: 100%;\n min-height: var(--prime-sys-size-control-m-height);\n border-radius: var(--prime-sys-size-control-m-radius);\n border: var(--prime-sys-border-width-control) solid var(--prime-sys-color-field-border);\n background: var(--prime-sys-color-field-bg);\n box-shadow: var(--prime-sys-elevation-shadow-surface);\n overflow: hidden;\n}\n\n.channelStrip > * + * {\n border-inline-start: var(--prime-sys-border-width-control) solid\n var(--prime-sys-color-border-subtle);\n}\n\n.channelStripLead {\n display: flex;\n flex-shrink: 0;\n align-items: stretch;\n}\n\n.channelStrip .channelStripEyedropperBtn.channelStripEyedropperBtn {\n min-width: var(--prime-sys-size-control-m-height);\n width: var(--prime-sys-size-control-m-height);\n height: auto;\n min-height: 100%;\n padding: 0;\n border-radius: 0;\n border: none;\n box-shadow: none;\n}\n\n.channelStrip .channelStripEyedropperBtn.channelStripEyedropperBtn:hover:not(:disabled) {\n box-shadow: none;\n}\n\n.channelCell {\n display: flex;\n flex: 1 1 0;\n align-items: center;\n justify-content: center;\n gap: var(--prime-sys-spacing-x1);\n min-width: 0;\n padding-inline: var(--prime-sys-spacing-x2);\n}\n\n.channelCellHex {\n flex: 1 1 auto;\n justify-content: flex-start;\n padding-inline: var(--prime-sys-size-control-m-inputPaddingX);\n}\n\n.channelInput {\n box-sizing: border-box;\n width: 100%;\n min-width: 0;\n border: none;\n background: transparent;\n padding-block: var(--prime-sys-spacing-x2);\n font-size: var(--prime-sys-size-control-s-text);\n font-variant-numeric: tabular-nums;\n line-height: var(--prime-sys-typography-body-lineHeight);\n color: var(--prime-sys-color-field-text);\n text-align: center;\n outline: none;\n}\n\n.channelCellHex .channelInput {\n text-align: start;\n}\n\n.channelInput:focus-visible {\n outline: none;\n}\n\n.channelSuffix {\n flex-shrink: 0;\n font-size: var(--prime-sys-size-control-s-supportText);\n color: var(--prime-sys-color-content-muted);\n}\n\n/* ---- Swatches ---- */\n.swatchPicker {\n display: flex;\n flex-wrap: nowrap;\n gap: var(--prime-sys-spacing-x2);\n width: 100%;\n justify-content: flex-start;\n overflow-x: auto;\n padding-block-end: var(--prime-sys-spacing-x1);\n scrollbar-width: thin;\n}\n\n.swatchItem {\n flex-shrink: 0;\n cursor: pointer;\n padding: var(--prime-sys-spacing-x1);\n border-radius: var(--prime-sys-size-control-s-radius);\n outline: none;\n transition: background-color var(--prime-sys-motion-fast) var(--prime-sys-motion-standard);\n}\n\n.swatchItem[data-hovered]:not([data-disabled]) {\n background: var(--prime-sys-color-action-neutralBackgroundHover);\n}\n\n.swatchItem[data-focus-visible] {\n outline: var(--prime-sys-border-width-focusRing) solid var(--prime-sys-color-focus-ring);\n outline-offset: var(--prime-sys-spacing-xs);\n}\n\n.triggerSwatch {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n overflow: hidden;\n box-sizing: border-box;\n width: var(--prime-sys-unit-1rem);\n height: var(--prime-sys-unit-1rem);\n border-radius: var(--prime-sys-shape-radius-s);\n border: var(--prime-sys-border-width-control) solid var(--prime-sys-color-border-subtle);\n box-shadow: var(--prime-sys-elevation-shadow-surface);\n}\n\n.triggerSwatchSvg {\n position: absolute;\n inset: 0;\n display: block;\n width: 100%;\n height: 100%;\n}\n\n.swatch {\n box-sizing: border-box;\n width: var(--prime-sys-size-control-l-icon);\n height: var(--prime-sys-size-control-l-icon);\n border-radius: var(--prime-sys-shape-radius-round);\n border: var(--prime-sys-border-width-focusRing) solid var(--prime-sys-color-border-inverse);\n box-shadow: var(--prime-sys-elevation-shadow-surface);\n}\n\n.swatchItem[data-selected] .swatch {\n box-shadow: 0 0 0 var(--prime-sys-border-width-focusRing)\n var(--prime-sys-color-action-primaryBackground);\n}\n\n/* ---- RAC ColorField (опционально) ---- */\n.field :global(.react-aria-Group) {\n display: flex;\n align-items: center;\n min-height: var(--prime-sys-size-control-m-height);\n padding-inline: var(--prime-sys-size-control-m-inputPaddingX);\n padding-block: var(--prime-sys-size-control-m-inputPaddingY);\n border-radius: var(--prime-sys-size-control-m-radius);\n border: var(--prime-sys-border-width-control) solid var(--prime-sys-color-field-border);\n background: var(--prime-sys-color-field-bg);\n box-shadow: var(--prime-sys-elevation-shadow-surface);\n transition:\n border-color var(--prime-sys-motion-medium) var(--prime-sys-motion-standard),\n box-shadow var(--prime-sys-motion-medium) var(--prime-sys-motion-standard);\n}\n\n.field :global(.react-aria-Group):focus-within {\n border-color: var(--prime-sys-color-field-borderFocus);\n box-shadow: var(--prime-sys-elevation-shadow-buttonFocus);\n}\n\n.field :global(.react-aria-Input) {\n flex: 1;\n min-width: 0;\n border: none;\n background: transparent;\n font-size: var(--prime-sys-size-control-m-text);\n font-variant-numeric: tabular-nums;\n color: var(--prime-sys-color-field-text);\n outline: none;\n}\n\n.field :global(.react-aria-Label) {\n margin-inline-end: var(--prime-sys-spacing-x2);\n font-size: var(--prime-sys-size-control-s-supportText);\n font-weight: var(--prime-sys-typography-weight-medium);\n color: var(--prime-sys-color-content-secondary);\n white-space: nowrap;\n}\n\n/* ---- Пипетка: отдельная квадратная кнопка (вне полосы) ---- */\n.eyeDropperSquare {\n flex-shrink: 0;\n padding: 0;\n min-width: var(--prime-sys-size-control-m-height);\n}\n","import type { ColorChannel } from \"@react-types/color\";\nimport * as React from \"react\";\nimport {\n ColorArea as AriaColorArea,\n type ColorAreaProps as AriaColorAreaProps,\n ColorField as AriaColorField,\n ColorPicker as AriaColorPicker,\n type ColorPickerProps as AriaColorPickerProps,\n ColorSlider as AriaColorSlider,\n type ColorSliderProps as AriaColorSliderProps,\n ColorSwatch as AriaColorSwatch,\n ColorSwatchPicker as AriaColorSwatchPicker,\n ColorSwatchPickerItem as AriaColorSwatchPickerItem,\n type ColorSwatchPickerItemProps as AriaColorSwatchPickerItemProps,\n type ColorSwatchPickerProps as AriaColorSwatchPickerProps,\n type ColorSwatchProps as AriaColorSwatchProps,\n ColorThumb as AriaColorThumb,\n type ColorThumbProps as AriaColorThumbProps,\n SliderOutput as AriaSliderOutput,\n type SliderOutputProps as AriaSliderOutputProps,\n SliderTrack as AriaSliderTrack,\n type SliderTrackProps as AriaSliderTrackProps,\n ColorPickerStateContext,\n composeRenderProps,\n parseColor,\n} from \"react-aria-components\";\n\nimport { Button } from \"@/components/button/Button\";\nimport { Input } from \"@/components/input/Input\";\nimport { Select } from \"@/components/select/Select\";\nimport selectStyles from \"@/components/select/Select.module.css\";\nimport { cx } from \"@/internal/cx\";\nimport type { InputSize } from \"@/internal/states\";\n\nimport styles from \"./ColorPicker.module.css\";\n\nexport type { Color as ColorPickerColorValue, ColorPickerRenderProps } from \"react-aria-components\";\nexport type ColorPickerRootProps = AriaColorPickerProps;\nexport type ColorValueFormat = \"hsl\" | \"rgb\" | \"hex\";\n\nexport type ColorPickerHexInputProps = {\n size?: InputSize;\n label?: React.ReactNode;\n className?: string;\n};\n\nexport type ColorPickerFormatProviderProps = {\n children: React.ReactNode;\n defaultFormat?: ColorValueFormat;\n};\n\nexport { parseColor };\n\ntype EyeDropperCtor = new () => { open: () => Promise<{ sRGBHex: string }> };\n\nconst CHECKER_GRADIENT =\n \"repeating-conic-gradient(var(--prime-sys-color-border-inverse) 0deg 90deg, color-mix(in srgb, var(--prime-sys-color-content-primary) 22%, transparent) 90deg 180deg)\";\nconst CHECKER_BG = `${CHECKER_GRADIENT} 0% 0% / var(--prime-sys-unit-0p5rem) var(--prime-sys-unit-0p5rem)`;\nconst TRIGGER_SWATCH_FALLBACK_FILL =\n \"color-mix(in srgb, var(--prime-sys-color-content-primary) 12%, transparent)\";\n\ntype ColorPickerCtx = NonNullable<React.ContextType<typeof ColorPickerStateContext>>;\n\nconst CHANNEL_ARIA: Partial<Record<ColorChannel, string>> = {\n hue: \"Оттенок, градусы\",\n saturation: \"Насыщенность, проценты\",\n lightness: \"Яркость, проценты\",\n alpha: \"Непрозрачность, проценты\",\n red: \"Красный, 0–255\",\n green: \"Зелёный, 0–255\",\n blue: \"Синий, 0–255\",\n};\n\nconst ColorValueFormatContext = React.createContext<{\n format: ColorValueFormat;\n setFormat: (f: ColorValueFormat) => void;\n} | null>(null);\n\nfunction useColorValueFormat(): {\n format: ColorValueFormat;\n setFormat: (f: ColorValueFormat) => void;\n} {\n const v = React.useContext(ColorValueFormatContext);\n if (!v) {\n throw new Error(\n \"ColorPicker: оберните разметку в ColorPicker.FormatProvider для формата и полосы каналов.\",\n );\n }\n return v;\n}\n\nfunction FormatProvider({ children, defaultFormat = \"hsl\" }: ColorPickerFormatProviderProps) {\n const [format, setFormat] = React.useState<ColorValueFormat>(defaultFormat);\n const value = React.useMemo(() => ({ format, setFormat }), [format]);\n return (\n <ColorValueFormatContext.Provider value={value}>{children}</ColorValueFormatContext.Provider>\n );\n}\n\nconst FORMAT_SELECT_LABEL: Record<ColorValueFormat, string> = {\n hsl: \"HSL\",\n rgb: \"RGB\",\n hex: \"Hex\",\n};\n\nfunction FormatSelect({ className }: { className?: string }) {\n const ctx = React.useContext(ColorValueFormatContext);\n if (!ctx) {\n return null;\n }\n const { format, setFormat } = ctx;\n\n return (\n <div className={cx(styles.formatSelectWrap, className)}>\n <Select.Root\n value={format}\n onChange={(v) => {\n if (v === \"hsl\" || v === \"rgb\" || v === \"hex\") {\n setFormat(v);\n }\n }}\n >\n <Select.Trigger aria-label=\"Формат значений цвета\">\n <span className={selectStyles.triggerValue}>{FORMAT_SELECT_LABEL[format]}</span>\n </Select.Trigger>\n <Select.Content className={styles.formatSelectContent}>\n <Select.Item label=\"HSL\" value=\"hsl\">\n HSL\n </Select.Item>\n <Select.Item label=\"RGB\" value=\"rgb\">\n RGB\n </Select.Item>\n <Select.Item label=\"Hex\" value=\"hex\">\n Hex\n </Select.Item>\n </Select.Content>\n </Select.Root>\n </div>\n );\n}\n\nfunction displayChannelValue(\n color: ColorPickerCtx[\"color\"],\n channel: ColorChannel,\n space: \"hsl\" | \"rgb\",\n) {\n const c = color.toFormat(space);\n const raw = c.getChannelValue(channel);\n if (channel === \"alpha\") {\n return String(Math.round(raw * 100));\n }\n return String(Math.round(raw));\n}\n\nfunction applyChannelValue(\n state: ColorPickerCtx,\n channel: ColorChannel,\n space: \"hsl\" | \"rgb\",\n text: string,\n) {\n const trimmed = text.trim().replace(\",\", \".\");\n const n = Number.parseFloat(trimmed);\n if (Number.isNaN(n)) {\n return;\n }\n if (channel === \"alpha\") {\n const pct = Math.min(100, Math.max(0, n));\n state.setColor(state.color.withChannelValue(\"alpha\", pct / 100));\n return;\n }\n const c = state.color.toFormat(space);\n const range = c.getChannelRange(channel);\n const v = Math.min(range.maxValue, Math.max(range.minValue, n));\n state.setColor(c.withChannelValue(channel, v));\n}\n\nfunction ChannelField({\n channel,\n space,\n suffix,\n}: {\n channel: ColorChannel;\n space: \"hsl\" | \"rgb\";\n suffix: string;\n}) {\n const state = React.useContext(ColorPickerStateContext);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const [text, setText] = React.useState(() =>\n state ? displayChannelValue(state.color, channel, space) : \"\",\n );\n const fingerprint = state ? state.color.toString(\"hexa\") : \"\";\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: см. HexInput — state стабилен, цвет по fingerprint\n React.useEffect(() => {\n if (!state) {\n return;\n }\n if (inputRef.current && document.activeElement === inputRef.current) {\n return;\n }\n setText(displayChannelValue(state.color, channel, space));\n }, [fingerprint]);\n\n if (!state) {\n return null;\n }\n\n const commit = () => {\n applyChannelValue(state, channel, space, text);\n setText(displayChannelValue(state.color, channel, space));\n };\n\n return (\n <div className={styles.channelCell}>\n <input\n ref={inputRef}\n aria-label={CHANNEL_ARIA[channel] ?? String(channel)}\n className={styles.channelInput}\n inputMode=\"decimal\"\n value={text}\n onBlur={commit}\n onChange={(e) => setText(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n commit();\n inputRef.current?.blur();\n }\n }}\n />\n <span className={styles.channelSuffix}>{suffix}</span>\n </div>\n );\n}\n\nfunction StripHexField() {\n const state = React.useContext(ColorPickerStateContext);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const [text, setText] = React.useState(() => {\n if (!state) {\n return \"\";\n }\n const c = state.color;\n const a = c.getChannelValue(\"alpha\");\n return c.toString(a < 1 ? \"hexa\" : \"hex\");\n });\n const fingerprint = state ? state.color.toString(\"hexa\") : \"\";\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: см. HexInput\n React.useEffect(() => {\n if (!state) {\n return;\n }\n if (inputRef.current && document.activeElement === inputRef.current) {\n return;\n }\n const c = state.color;\n const a = c.getChannelValue(\"alpha\");\n setText(c.toString(a < 1 ? \"hexa\" : \"hex\"));\n }, [fingerprint]);\n\n if (!state) {\n return null;\n }\n\n const commit = () => {\n try {\n state.setColor(parseColor(text.trim()));\n } catch {\n const c = state.color;\n const a = c.getChannelValue(\"alpha\");\n setText(c.toString(a < 1 ? \"hexa\" : \"hex\"));\n }\n };\n\n return (\n <div className={cx(styles.channelCell, styles.channelCellHex)}>\n <input\n ref={inputRef}\n aria-label=\"Hex\"\n autoCapitalize=\"off\"\n autoCorrect=\"off\"\n className={styles.channelInput}\n spellCheck={false}\n value={text}\n onBlur={commit}\n onChange={(e) => setText(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n commit();\n inputRef.current?.blur();\n }\n }}\n />\n </div>\n );\n}\n\n/** Полоса каналов: слева пипетка из {@link EyeDropperButton}, справа — ячейки; иконку пипетки передайте `pipetteIcon`. */\nfunction ChannelStripWithIcon({\n className,\n pipetteIcon,\n}: {\n className?: string;\n pipetteIcon: React.ReactNode;\n}) {\n const { format } = useColorValueFormat();\n\n return (\n <div className={cx(styles.channelStrip, className)}>\n <div className={styles.channelStripLead}>\n <EyeDropperButton className={styles.channelStripEyedropperBtn}>\n <Button.Icon>{pipetteIcon}</Button.Icon>\n </EyeDropperButton>\n </div>\n {format === \"hex\" ? (\n <StripHexField />\n ) : format === \"hsl\" ? (\n <>\n <ChannelField channel=\"hue\" space=\"hsl\" suffix=\"°\" />\n <ChannelField channel=\"saturation\" space=\"hsl\" suffix=\"%\" />\n <ChannelField channel=\"lightness\" space=\"hsl\" suffix=\"%\" />\n <ChannelField channel=\"alpha\" space=\"hsl\" suffix=\"%\" />\n </>\n ) : (\n <>\n <ChannelField channel=\"red\" space=\"rgb\" suffix=\"\" />\n <ChannelField channel=\"green\" space=\"rgb\" suffix=\"\" />\n <ChannelField channel=\"blue\" space=\"rgb\" suffix=\"\" />\n <ChannelField channel=\"alpha\" space=\"rgb\" suffix=\"%\" />\n </>\n )}\n </div>\n );\n}\n\nfunction ColorPickerRoot(props: AriaColorPickerProps) {\n return <AriaColorPicker {...props} />;\n}\n\nfunction Field({ className, ...props }: React.ComponentProps<typeof AriaColorField>) {\n return (\n <AriaColorField\n className={composeRenderProps(className, (c) => cx(styles.field, c))}\n {...props}\n />\n );\n}\n\nfunction Slider({ className, ...props }: AriaColorSliderProps) {\n return (\n <AriaColorSlider\n className={composeRenderProps(className, (c) => cx(styles.slider, c))}\n data-size=\"m\"\n {...props}\n />\n );\n}\n\nfunction Area({ className, ...props }: AriaColorAreaProps) {\n return (\n <AriaColorArea\n className={composeRenderProps(className, (c) => cx(styles.area, c))}\n {...props}\n />\n );\n}\n\nfunction SliderTrack({ className, style, ...props }: AriaSliderTrackProps) {\n return (\n <AriaSliderTrack\n className={composeRenderProps(className, (c) => cx(styles.sliderTrack, c))}\n style={(renderProps) => {\n const fromUser = typeof style === \"function\" ? style(renderProps) : style;\n const baseBg = renderProps.defaultStyle.background;\n const layered =\n renderProps.isDisabled || baseBg === undefined\n ? baseBg\n : `${String(baseBg)}, ${CHECKER_BG}`;\n return {\n ...renderProps.defaultStyle,\n ...fromUser,\n ...(layered !== undefined ? { background: layered } : null),\n };\n }}\n {...props}\n />\n );\n}\n\nfunction Thumb({ className, ...props }: AriaColorThumbProps) {\n return (\n <AriaColorThumb\n className={composeRenderProps(className, (c) => cx(styles.thumb, c))}\n {...props}\n />\n );\n}\n\nfunction AreaThumb({ className, ...props }: AriaColorThumbProps) {\n return (\n <AriaColorThumb\n className={composeRenderProps(className, (c) => cx(styles.thumbArea, c))}\n {...props}\n />\n );\n}\n\nfunction SwatchPicker({ className, ...props }: AriaColorSwatchPickerProps) {\n return (\n <AriaColorSwatchPicker\n className={composeRenderProps(className, (c) => cx(styles.swatchPicker, c))}\n {...props}\n />\n );\n}\n\nfunction SwatchPickerItem({ className, ...props }: AriaColorSwatchPickerItemProps) {\n return (\n <AriaColorSwatchPickerItem\n className={composeRenderProps(className, (c) => cx(styles.swatchItem, c))}\n {...props}\n />\n );\n}\n\nfunction Swatch({ className, style, ...props }: AriaColorSwatchProps) {\n return (\n <AriaColorSwatch\n className={composeRenderProps(className, (c) => cx(styles.swatch, c))}\n style={(renderProps) => {\n const fromUser = typeof style === \"function\" ? style(renderProps) : style;\n const baseBg = renderProps.defaultStyle.background;\n return {\n ...renderProps.defaultStyle,\n ...fromUser,\n ...(baseBg !== undefined ? { background: `${String(baseBg)}, ${CHECKER_BG}` } : null),\n };\n }}\n {...props}\n />\n );\n}\n\nfunction Output(props: AriaSliderOutputProps) {\n return (\n <AriaSliderOutput\n {...props}\n className={composeRenderProps(props.className, (c) => cx(styles.sliderValue, c))}\n />\n );\n}\n\nfunction SliderMeta({ label }: { label: React.ReactNode }) {\n return (\n <div className={styles.sliderHeader}>\n <span className={styles.sliderLabel}>{label}</span>\n <Output />\n </div>\n );\n}\n\nfunction HexInput({ size = \"m\", label = \"Hex\", className }: ColorPickerHexInputProps) {\n const state = React.useContext(ColorPickerStateContext);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const [text, setText] = React.useState(() => {\n if (!state) {\n return \"\";\n }\n const c = state.color;\n const a = c.getChannelValue(\"alpha\");\n return c.toString(a < 1 ? \"hexa\" : \"hex\");\n });\n const colorFingerprint = state ? state.color.toString(\"hexa\") : \"\";\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: объект state от RAC стабилен по ссылке; пересинхрон при смене цвета даёт только colorFingerprint\n React.useEffect(() => {\n if (!state) {\n return;\n }\n if (inputRef.current && document.activeElement === inputRef.current) {\n return;\n }\n const c = state.color;\n const a = c.getChannelValue(\"alpha\");\n setText(c.toString(a < 1 ? \"hexa\" : \"hex\"));\n }, [colorFingerprint]);\n\n if (!state) {\n return null;\n }\n\n const commit = () => {\n try {\n state.setColor(parseColor(text.trim()));\n } catch {\n const c = state.color;\n const a = c.getChannelValue(\"alpha\");\n setText(c.toString(a < 1 ? \"hexa\" : \"hex\"));\n }\n };\n\n return (\n <Input.Root className={className} label={label} size={size}>\n <Input.Wrapper>\n <Input.Field\n ref={inputRef}\n autoCapitalize=\"off\"\n autoCorrect=\"off\"\n spellCheck={false}\n value={text}\n onBlur={commit}\n onChange={(e) => setText(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n commit();\n (e.target as HTMLInputElement).blur();\n }\n }}\n />\n </Input.Wrapper>\n </Input.Root>\n );\n}\n\nconst EyeDropperButton = React.forwardRef<\n HTMLButtonElement,\n Omit<React.ComponentPropsWithoutRef<typeof Button.Root>, \"variant\" | \"mode\" | \"size\">\n>(function EyeDropperButton(\n { children, onClick, type = \"button\", \"aria-label\": ariaLabel, className, ...rest },\n forwardedRef,\n) {\n const state = React.useContext(ColorPickerStateContext);\n const EyeDropperApi =\n typeof globalThis !== \"undefined\"\n ? (globalThis as unknown as { EyeDropper?: EyeDropperCtor }).EyeDropper\n : undefined;\n\n if (!state) {\n return null;\n }\n\n if (!EyeDropperApi) {\n return (\n <Button.Root\n ref={forwardedRef}\n aria-hidden\n className={cx(styles.eyeDropperSquare, className)}\n disabled\n mode=\"stroke\"\n size=\"m\"\n tabIndex={-1}\n type={type}\n variant=\"neutral\"\n {...rest}\n >\n {children}\n </Button.Root>\n );\n }\n\n return (\n <Button.Root\n ref={forwardedRef}\n type={type}\n aria-label={ariaLabel ?? \"Пипетка\"}\n className={cx(styles.eyeDropperSquare, className)}\n mode=\"stroke\"\n size=\"m\"\n variant=\"neutral\"\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented) {\n return;\n }\n void new EyeDropperApi()\n .open()\n .then((result) => state.setColor(parseColor(result.sRGBHex)))\n .catch(() => {});\n }}\n {...rest}\n >\n {children}\n </Button.Root>\n );\n});\n\nEyeDropperButton.displayName = \"EyeDropperButton\";\n\nexport type ColorPickerTriggerSwatchProps = {\n className?: string;\n};\n\n/** Квадратик текущего цвета из {@link ColorPickerStateContext}; для кнопки-триггера поповера и т.п. */\nfunction TriggerSwatch({ className }: ColorPickerTriggerSwatchProps) {\n const state = React.useContext(ColorPickerStateContext);\n const colorCss = state != null ? state.color.toString(\"css\") : TRIGGER_SWATCH_FALLBACK_FILL;\n return (\n <span aria-hidden className={cx(styles.triggerSwatch, className)}>\n <svg\n className={styles.triggerSwatchSvg}\n aria-hidden=\"true\"\n viewBox=\"0 0 1 1\"\n preserveAspectRatio=\"none\"\n >\n <rect width=\"1\" height=\"1\" fill={colorCss} />\n </svg>\n </span>\n );\n}\n\nTriggerSwatch.displayName = \"ColorPicker.TriggerSwatch\";\n\nexport const ColorPicker = {\n Root: ColorPickerRoot,\n TriggerSwatch,\n FormatProvider,\n FormatSelect,\n ChannelStrip: ChannelStripWithIcon,\n Field,\n HexInput,\n Area,\n AreaThumb,\n Slider,\n SliderMeta,\n SliderTrack,\n Thumb,\n Output,\n SwatchPicker,\n SwatchPickerItem,\n Swatch,\n EyeDropperButton,\n};\n","import * as React from \"react\";\n\nconst FOCUSABLE_SELECTORS = [\n 'a[href]:not([tabindex=\"-1\"])',\n 'button:not([disabled]):not([tabindex=\"-1\"])',\n 'input:not([disabled]):not([type=\"hidden\"]):not([tabindex=\"-1\"])',\n 'select:not([disabled]):not([tabindex=\"-1\"])',\n 'textarea:not([disabled]):not([tabindex=\"-1\"])',\n '[tabindex]:not([tabindex=\"-1\"])',\n].join(\", \");\n\nfunction getFocusableElements(container: HTMLElement): HTMLElement[] {\n return Array.from(container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTORS)).filter((el) => {\n if (el.getAttribute(\"aria-hidden\") === \"true\") return false;\n const style = window.getComputedStyle(el);\n return style.display !== \"none\" && style.visibility !== \"hidden\";\n });\n}\n\ntype UseFocusTrapOptions = {\n enabled: boolean;\n /** Whether to restore focus to the previously focused element on disable */\n restoreFocus?: boolean;\n /** Element to focus initially; falls back to first focusable element */\n initialFocusRef?: React.RefObject<HTMLElement | null>;\n};\n\n/**\n * Traps keyboard focus inside a container element.\n * Tab cycles forward through focusable elements, Shift+Tab cycles backward.\n * Shared by Modal.Content, Select.Content, Dropdown.\n */\nexport function useFocusTrap<T extends HTMLElement = HTMLElement>(\n options: UseFocusTrapOptions,\n): React.RefObject<T | null> {\n const { enabled, restoreFocus = true, initialFocusRef } = options;\n const containerRef = React.useRef<T | null>(null);\n const previousFocusRef = React.useRef<HTMLElement | null>(null);\n\n React.useEffect(() => {\n if (!enabled) return;\n\n const container = containerRef.current;\n if (!container) return;\n\n previousFocusRef.current = document.activeElement as HTMLElement;\n\n // Focus initial element or first focusable\n const toFocus = initialFocusRef?.current ?? getFocusableElements(container)[0] ?? container;\n (toFocus as HTMLElement).focus({ preventScroll: true });\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"Tab\") return;\n\n const focusable = getFocusableElements(container);\n if (focusable.length === 0) {\n event.preventDefault();\n return;\n }\n\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n const active = document.activeElement;\n\n if (event.shiftKey) {\n if (active === first || !container.contains(active)) {\n event.preventDefault();\n last.focus();\n }\n } else {\n if (active === last || !container.contains(active)) {\n event.preventDefault();\n first.focus();\n }\n }\n };\n\n document.addEventListener(\"keydown\", onKeyDown);\n\n return () => {\n document.removeEventListener(\"keydown\", onKeyDown);\n if (restoreFocus && previousFocusRef.current) {\n previousFocusRef.current.focus({ preventScroll: true });\n }\n };\n }, [enabled, restoreFocus, initialFocusRef]);\n\n return containerRef;\n}\n","import * as React from \"react\";\n\nlet lockCount = 0;\nlet savedOverflow = \"\";\nlet savedPaddingRight = \"\";\n\nfunction lockScroll() {\n if (lockCount === 0) {\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n savedOverflow = document.body.style.overflow;\n savedPaddingRight = document.body.style.paddingRight;\n\n document.body.style.overflow = \"hidden\";\n if (scrollbarWidth > 0) {\n document.body.style.paddingRight = `${scrollbarWidth}px`;\n }\n }\n lockCount++;\n}\n\nfunction unlockScroll() {\n lockCount = Math.max(0, lockCount - 1);\n if (lockCount === 0) {\n document.body.style.overflow = savedOverflow;\n document.body.style.paddingRight = savedPaddingRight;\n }\n}\n\n/**\n * Locks body scroll when enabled. Supports multiple concurrent callers via\n * a reference-counted lock — the last caller to unmount restores scroll.\n * Compensates for scrollbar width to prevent layout shift.\n * Shared by Modal.Content, Drawer.Content.\n */\nexport function useScrollLock(enabled: boolean) {\n React.useEffect(() => {\n if (!enabled) return;\n lockScroll();\n return () => unlockScroll();\n }, [enabled]);\n}\n",".overlay {\n position: fixed;\n inset: 0;\n z-index: var(--prime-sys-elevation-zIndex-modal);\n background: var(--prime-sys-color-surface-overlay);\n backdrop-filter: blur(var(--prime-sys-unit-8px));\n display: grid;\n place-items: center;\n animation: fadeIn var(--prime-sys-motion-medium) var(--prime-sys-motion-standard);\n}\n\n.overlay[data-size=\"s\"] {\n padding-inline: var(--prime-sys-size-control-s-buttonPaddingX);\n padding-block: var(--prime-sys-size-control-s-buttonPaddingY);\n}\n\n.overlay[data-size=\"m\"] {\n padding-inline: var(--prime-sys-size-control-m-buttonPaddingX);\n padding-block: var(--prime-sys-size-control-m-buttonPaddingY);\n}\n\n.overlay[data-size=\"l\"] {\n padding-inline: var(--prime-sys-size-control-l-buttonPaddingX);\n padding-block: var(--prime-sys-size-control-l-buttonPaddingY);\n}\n\n.overlay[data-size=\"xl\"] {\n padding-inline: var(--prime-sys-size-control-xl-buttonPaddingX);\n padding-block: var(--prime-sys-size-control-xl-buttonPaddingY);\n}\n\n.content {\n box-sizing: border-box;\n background: var(--prime-sys-color-surface-elevated);\n color: var(--prime-sys-color-content-primary);\n box-shadow: var(--prime-sys-elevation-shadow-modal);\n display: grid;\n outline: none;\n animation: scaleIn var(--prime-sys-motion-slow) var(--prime-sys-motion-standard);\n}\n\n.content[data-size=\"s\"] {\n width: min(100%, var(--prime-sys-unit-22rem));\n border-radius: var(--prime-ref-radius-xl);\n padding-inline: var(--prime-sys-spacing-m);\n padding-block: var(--prime-sys-spacing-m);\n gap: var(--prime-sys-size-control-s-gap);\n}\n\n.content[data-size=\"m\"] {\n width: min(100%, var(--prime-sys-size-modal-maxWidth));\n border-radius: var(--prime-ref-radius-2xl);\n padding-inline: var(--prime-sys-spacing-l);\n padding-block: var(--prime-sys-spacing-l);\n gap: var(--prime-sys-size-control-m-gap);\n}\n\n.content[data-size=\"l\"] {\n width: min(100%, var(--prime-sys-unit-28rem));\n border-radius: var(--prime-ref-radius-3xl);\n padding-inline: var(--prime-sys-spacing-xl);\n padding-block: var(--prime-sys-spacing-xl);\n gap: var(--prime-sys-size-control-l-gap);\n}\n\n.content[data-size=\"xl\"] {\n width: min(100%, var(--prime-sys-unit-32rem));\n border-radius: var(--prime-ref-radius-4xl);\n padding-inline: var(--prime-sys-spacing-2xl);\n padding-block: var(--prime-sys-spacing-2xl);\n gap: var(--prime-sys-size-control-xl-gap);\n}\n\n.header,\n.body,\n.footer {\n width: 100%;\n}\n\n.header {\n position: relative;\n display: flex;\n align-items: flex-start;\n}\n\n.content[data-size=\"s\"] .header {\n gap: var(--prime-sys-size-control-s-gap);\n}\n\n.content[data-size=\"m\"] .header {\n gap: var(--prime-sys-size-control-m-gap);\n}\n\n.content[data-size=\"l\"] .header {\n gap: var(--prime-sys-size-control-l-gap);\n}\n\n.content[data-size=\"xl\"] .header {\n gap: var(--prime-sys-size-control-xl-gap);\n}\n\n.title {\n line-height: 1.2;\n font-weight: var(--prime-sys-typography-title-weight);\n}\n\n.content[data-size=\"s\"] .title {\n font-size: var(--prime-sys-size-control-s-text);\n}\n\n.content[data-size=\"m\"] .title {\n font-size: var(--prime-sys-size-control-m-text);\n}\n\n.content[data-size=\"l\"] .title {\n font-size: var(--prime-sys-size-control-l-text);\n}\n\n.content[data-size=\"xl\"] .title {\n font-size: var(--prime-sys-size-control-xl-text);\n}\n\n.description {\n color: var(--prime-sys-color-content-secondary);\n}\n\n.content[data-size=\"s\"] .description {\n font-size: var(--prime-sys-size-control-s-supportText);\n}\n\n.content[data-size=\"m\"] .description {\n font-size: var(--prime-sys-size-control-m-supportText);\n}\n\n.content[data-size=\"l\"] .description {\n font-size: var(--prime-sys-size-control-l-supportText);\n}\n\n.content[data-size=\"xl\"] .description {\n font-size: var(--prime-sys-size-control-xl-supportText);\n}\n\n.headText {\n display: grid;\n}\n\n.content[data-size=\"s\"] .headText {\n gap: var(--prime-sys-spacing-xs);\n padding-right: var(--prime-sys-size-control-s-height);\n}\n\n.content[data-size=\"m\"] .headText {\n gap: var(--prime-sys-spacing-xs);\n padding-right: var(--prime-sys-size-control-m-height);\n}\n\n.content[data-size=\"l\"] .headText {\n gap: var(--prime-sys-spacing-s);\n padding-right: var(--prime-sys-size-control-l-height);\n}\n\n.content[data-size=\"xl\"] .headText {\n gap: var(--prime-sys-spacing-s);\n padding-right: var(--prime-sys-size-control-xl-height);\n}\n\n.headerIcon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n background: var(--prime-sys-color-surface-raised);\n border: var(--prime-sys-border-width-control) solid var(--prime-sys-color-border-subtle);\n color: var(--prime-sys-color-content-secondary);\n flex: 0 0 auto;\n}\n\n.content[data-size=\"s\"] .headerIcon {\n width: var(--prime-sys-size-control-s-height);\n height: var(--prime-sys-size-control-s-height);\n border-radius: var(--prime-sys-size-control-s-radius);\n}\n\n.content[data-size=\"m\"] .headerIcon {\n width: var(--prime-sys-size-control-m-height);\n height: var(--prime-sys-size-control-m-height);\n border-radius: var(--prime-sys-size-control-m-radius);\n}\n\n.content[data-size=\"l\"] .headerIcon {\n width: var(--prime-sys-size-control-l-height);\n height: var(--prime-sys-size-control-l-height);\n border-radius: var(--prime-sys-size-control-l-radius);\n}\n\n.content[data-size=\"xl\"] .headerIcon {\n width: var(--prime-sys-size-control-xl-height);\n height: var(--prime-sys-size-control-xl-height);\n border-radius: var(--prime-sys-size-control-xl-radius);\n}\n\n.closeButton {\n position: absolute;\n right: 0;\n top: 0;\n}\n\n.closeBtn {\n position: absolute;\n right: 0;\n top: 0;\n padding-inline: 0;\n gap: 0;\n}\n\n.content[data-size=\"s\"] .closeBtn {\n width: var(--prime-sys-size-control-s-height);\n min-width: var(--prime-sys-size-control-s-height);\n height: var(--prime-sys-size-control-s-height);\n}\n\n.content[data-size=\"m\"] .closeBtn {\n width: var(--prime-sys-size-control-m-height);\n min-width: var(--prime-sys-size-control-m-height);\n height: var(--prime-sys-size-control-m-height);\n}\n\n.content[data-size=\"l\"] .closeBtn {\n width: var(--prime-sys-size-control-l-height);\n min-width: var(--prime-sys-size-control-l-height);\n height: var(--prime-sys-size-control-l-height);\n}\n\n.content[data-size=\"xl\"] .closeBtn {\n width: var(--prime-sys-size-control-xl-height);\n min-width: var(--prime-sys-size-control-xl-height);\n height: var(--prime-sys-size-control-xl-height);\n}\n\n.body {\n display: grid;\n}\n\n.header + .body {\n border-top: var(--prime-sys-border-width-control) solid var(--prime-sys-color-border-subtle);\n padding-block: var(--prime-sys-size-modal-headerPaddingBottom);\n}\n\n.content[data-size=\"s\"] .body {\n gap: var(--prime-sys-size-control-s-gap);\n font-size: var(--prime-sys-size-control-s-text);\n}\n\n.content[data-size=\"m\"] .body {\n gap: var(--prime-sys-size-control-m-gap);\n font-size: var(--prime-sys-size-control-m-text);\n}\n\n.content[data-size=\"l\"] .body {\n gap: var(--prime-sys-size-control-l-gap);\n font-size: var(--prime-sys-size-control-l-text);\n}\n\n.content[data-size=\"xl\"] .body {\n gap: var(--prime-sys-size-control-xl-gap);\n font-size: var(--prime-sys-size-control-xl-text);\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n}\n\n@keyframes scaleIn {\n from {\n opacity: 0;\n transform: scale(0.96);\n }\n\n to {\n opacity: 1;\n transform: scale(1);\n }\n}\n\n.content[data-state=\"closed\"] {\n animation: none;\n}\n\n.overlay[data-state=\"closed\"] {\n animation: none;\n}\n\n.footer {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n}\n\n.body + .footer {\n border-top: var(--prime-sys-border-width-control) solid var(--prime-sys-color-border-subtle);\n padding-top: var(--prime-sys-size-modal-footerPaddingTop);\n}\n\n.footer > * {\n flex: 1;\n min-width: fit-content;\n}\n\n.content[data-size=\"s\"] .footer {\n gap: var(--prime-sys-size-control-s-gap);\n}\n\n.content[data-size=\"m\"] .footer {\n gap: var(--prime-sys-size-control-m-gap);\n}\n\n.content[data-size=\"l\"] .footer {\n gap: var(--prime-sys-size-control-l-gap);\n}\n\n.content[data-size=\"xl\"] .footer {\n gap: var(--prime-sys-size-control-xl-gap);\n}\n\n.headerOnly {\n border-bottom: 0;\n padding-bottom: 0;\n}\n\n.bodyOnly {\n padding-top: 0;\n}\n\n.closeButton:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n","import * as React from \"react\";\n\nimport { useControllableState } from \"@/hooks/useControllableState\";\nimport { useEscapeKey } from \"@/hooks/useEscapeKey\";\nimport { useFocusTrap } from \"@/hooks/useFocusTrap\";\nimport { useScrollLock } from \"@/hooks/useScrollLock\";\nimport { ControlSizeProvider } from \"@/internal/ControlSizeContext\";\nimport { createComponentContext } from \"@/internal/context\";\nimport { cx } from \"@/internal/cx\";\nimport { toDataAttributes } from \"@/internal/data-attributes\";\nimport { Portal } from \"@/internal/Portal\";\nimport type { ButtonSize, ModalSize } from \"@/internal/states\";\n\nimport styles from \"./Modal.module.css\";\n\n// ─── Context ─────────────────────────────────────────────────────────────────\n\ntype ModalContextValue = {\n open: boolean;\n onOpen: () => void;\n onClose: () => void;\n closeOnEscape: boolean;\n closeOnOverlayClick: boolean;\n shellSize: ModalSize;\n};\n\nconst [ModalProvider, useModalContext] = createComponentContext<ModalContextValue>(\"Modal\");\n\nconst ModalHeaderContext = React.createContext(false);\n\nfunction isButtonRootElement(\n child: React.ReactElement,\n): child is React.ReactElement<{ size?: ButtonSize }> {\n return (\n typeof child.type === \"object\" &&\n child.type !== null &&\n \"displayName\" in child.type &&\n (child.type as { displayName?: string }).displayName === \"ButtonRoot\"\n );\n}\n\n// ─── Root ─────────────────────────────────────────────────────────────────────\n\nexport type ModalRootProps = {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n closeOnEscape?: boolean;\n closeOnOverlayClick?: boolean;\n /** Масштаб оболочки (панель, отступы, типографика шапки) и ярус для каскада `ControlSizeProvider`. По умолчанию `m`. */\n size?: ModalSize;\n children?: React.ReactNode;\n};\n\nfunction ModalRoot({\n open,\n defaultOpen = false,\n onOpenChange,\n closeOnEscape = true,\n closeOnOverlayClick = true,\n size = \"m\",\n children,\n}: ModalRootProps) {\n const [isOpen, setIsOpen] = useControllableState({\n value: open,\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n });\n\n const onOpen = React.useCallback(() => setIsOpen(true), [setIsOpen]);\n const onClose = React.useCallback(() => setIsOpen(false), [setIsOpen]);\n\n return (\n <ModalProvider\n value={{ open: isOpen, onOpen, onClose, closeOnEscape, closeOnOverlayClick, shellSize: size }}\n >\n {children}\n </ModalProvider>\n );\n}\n\n// ─── Trigger ──────────────────────────────────────────────────────────────────\n\nexport type ModalTriggerProps = {\n children: React.ReactElement<{ onClick?: React.MouseEventHandler }>;\n};\n\nfunction ModalTrigger({ children }: ModalTriggerProps) {\n const { onOpen } = useModalContext();\n const child = React.Children.only(children);\n return React.cloneElement(child, {\n onClick: (event: React.MouseEvent) => {\n child.props.onClick?.(event);\n if (!event.defaultPrevented) {\n onOpen();\n }\n },\n });\n}\n\n// ─── Close ────────────────────────────────────────────────────────────────────\n\nexport type ModalCloseProps = {\n children: React.ReactElement<{\n onClick?: React.MouseEventHandler;\n className?: string;\n size?: ButtonSize;\n }>;\n};\n\nfunction ModalClose({ children }: ModalCloseProps) {\n const { onClose, shellSize } = useModalContext();\n const insideHeader = React.useContext(ModalHeaderContext);\n const child = React.Children.only(children);\n\n const headerCloseSize: Partial<{ size: ButtonSize }> =\n insideHeader && isButtonRootElement(child) && child.props.size === undefined\n ? { size: shellSize }\n : {};\n\n return React.cloneElement(child, {\n ...headerCloseSize,\n onClick: (event: React.MouseEvent) => {\n child.props.onClick?.(event);\n if (!event.defaultPrevented) {\n onClose();\n }\n },\n className: cx(child.props.className, insideHeader ? styles.closeBtn : undefined),\n });\n}\n\n// ─── Portal ───────────────────────────────────────────────────────────────────\n\nexport type ModalPortalProps = {\n children: React.ReactNode;\n container?: HTMLElement | null;\n};\n\nfunction ModalPortal({ children, container }: ModalPortalProps) {\n const { open } = useModalContext();\n if (!open) return null;\n return <Portal container={container}>{children}</Portal>;\n}\n\n// ─── Overlay ──────────────────────────────────────────────────────────────────\n\nexport type ModalOverlayProps = React.HTMLAttributes<HTMLDivElement>;\n\nfunction ModalOverlay({ className, onClick, ...rest }: ModalOverlayProps) {\n const { onClose, closeOnOverlayClick, shellSize } = useModalContext();\n\n const handleClick = (event: React.MouseEvent<HTMLDivElement>) => {\n onClick?.(event);\n if (!event.defaultPrevented && closeOnOverlayClick && event.target === event.currentTarget) {\n onClose();\n }\n };\n\n return (\n // biome-ignore lint/a11y/noStaticElementInteractions: backdrop overlay; keyboard dismiss handled by useEscapeKey in ModalContent\n <div\n role=\"presentation\"\n className={cx(styles.overlay, className)}\n onClick={handleClick}\n data-testid=\"modal-overlay\"\n {...toDataAttributes({ size: shellSize })}\n {...rest}\n />\n );\n}\n\n// ─── Content ──────────────────────────────────────────────────────────────────\n\nexport type ModalContentProps = React.HTMLAttributes<HTMLDivElement> & {\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n \"aria-describedby\"?: string;\n};\n\nfunction ModalContent({\n children,\n className,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-describedby\": ariaDescribedBy,\n ...rest\n}: ModalContentProps) {\n const { open, onClose, closeOnEscape, shellSize } = useModalContext();\n\n const trapRef = useFocusTrap<HTMLDivElement>({ enabled: open });\n\n useScrollLock(open);\n\n useEscapeKey({ enabled: closeOnEscape && open, onEscape: onClose });\n\n React.useEffect(() => {\n if (!open) return;\n\n const container = trapRef.current;\n if (!container) return;\n\n let portalRoot: Element | null = container;\n while (portalRoot && portalRoot.parentElement !== document.body) {\n portalRoot = portalRoot.parentElement;\n }\n\n const siblings = Array.from(document.body.children).filter((el) => el !== portalRoot);\n const prev = siblings.map((el) => ({\n el: el as HTMLElement,\n inert: (el as HTMLElement).inert,\n ariaHidden: el.getAttribute(\"aria-hidden\"),\n }));\n\n for (const { el } of prev) {\n el.inert = true;\n el.setAttribute(\"aria-hidden\", \"true\");\n }\n\n return () => {\n for (const { el, inert, ariaHidden } of prev) {\n el.inert = inert;\n if (ariaHidden === null) {\n el.removeAttribute(\"aria-hidden\");\n } else {\n el.setAttribute(\"aria-hidden\", ariaHidden);\n }\n }\n };\n }, [open, trapRef]);\n\n return (\n <div\n ref={trapRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-describedby={ariaDescribedBy}\n tabIndex={-1}\n className={cx(styles.content, className)}\n {...toDataAttributes({ size: shellSize })}\n {...rest}\n >\n <ControlSizeProvider value={shellSize}>{children}</ControlSizeProvider>\n </div>\n );\n}\n\n// ─── Header ───────────────────────────────────────────────────────────────────\n\nexport type ModalHeaderProps = React.HTMLAttributes<HTMLElement> & {\n icon?: React.ReactNode;\n};\n\nfunction ModalHeader({ children, className, icon, ...rest }: ModalHeaderProps) {\n return (\n <ModalHeaderContext.Provider value={true}>\n <header className={cx(styles.header, className)} {...rest}>\n {icon && <div className={styles.headerIcon}>{icon}</div>}\n <div className={styles.headText}>{children}</div>\n </header>\n </ModalHeaderContext.Provider>\n );\n}\n\n// ─── Title ────────────────────────────────────────────────────────────────────\n\nexport type ModalTitleProps = React.HTMLAttributes<HTMLHeadingElement>;\n\nfunction ModalTitle({ children, className, ...rest }: ModalTitleProps) {\n return (\n <h2 className={cx(styles.title, className)} {...rest}>\n {children}\n </h2>\n );\n}\n\n// ─── Description ─────────────────────────────────────────────────────────────\n\nexport type ModalDescriptionProps = React.HTMLAttributes<HTMLParagraphElement>;\n\nfunction ModalDescription({ children, className, ...rest }: ModalDescriptionProps) {\n return (\n <p className={cx(styles.description, className)} {...rest}>\n {children}\n </p>\n );\n}\n\n// ─── Body ─────────────────────────────────────────────────────────────────────\n\nexport type ModalBodyProps = React.HTMLAttributes<HTMLDivElement>;\n\nfunction ModalBody({ children, className, ...rest }: ModalBodyProps) {\n return (\n <div className={cx(styles.body, className)} {...rest}>\n {children}\n </div>\n );\n}\n\n// ─── Footer ───────────────────────────────────────────────────────────────────\n\nexport type ModalFooterProps = React.HTMLAttributes<HTMLElement>;\n\nfunction ModalFooter({ children, className, ...rest }: ModalFooterProps) {\n return (\n <footer className={cx(styles.footer, className)} {...rest}>\n {children}\n </footer>\n );\n}\n\n// ─── Namespace export ─────────────────────────────────────────────────────────\n\nexport const Modal = {\n Root: ModalRoot,\n Trigger: ModalTrigger,\n Close: ModalClose,\n Portal: ModalPortal,\n Overlay: ModalOverlay,\n Content: ModalContent,\n Header: ModalHeader,\n Title: ModalTitle,\n Description: ModalDescription,\n Body: ModalBody,\n Footer: ModalFooter,\n};\n\nexport type { ModalSize };\n","/* Палитра команд: панель сверху экрана */\n.dialogOverlay[data-size] {\n /* Перебиваем Modal overlay (grid + place-items: center), иначе панель не сжимается по ширине вьюпорта (min-width: auto у grid-item). */\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: flex-start;\n padding-top: var(--prime-sys-spacing-x5);\n padding-bottom: max(\n var(--prime-sys-size-control-m-buttonPaddingY),\n env(safe-area-inset-bottom, 0)\n );\n padding-left: max(var(--prime-sys-size-control-m-buttonPaddingX), env(safe-area-inset-left, 0));\n padding-right: max(var(--prime-sys-size-control-m-buttonPaddingX), env(safe-area-inset-right, 0));\n overflow-x: hidden;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n.dialogContent {\n box-sizing: border-box;\n min-width: 0;\n max-width: 100%;\n width: min(100%, var(--prime-sys-unit-45rem));\n max-height: min(88vh, var(--prime-sys-unit-44rem));\n padding: 0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n gap: 0;\n background: var(--prime-sys-color-surface-elevated);\n border-radius: var(--prime-sys-size-modal-radius);\n box-shadow: var(--prime-sys-elevation-shadow-modal);\n}\n\n/*\n * Modal.Content всегда добавляет класс .content из Modal.module.css с правилами\n * `.content[data-size]` (padding, gap, display: grid). У них специфичность выше,\n * чем у одного `.dialogContent`, из‑за чего визуально появляется «вторая оболочка»\n * с отступом ~var(--prime-sys-unit-16px). Комбинируем с role и data-size на том же узле.\n */\n.dialogContent[role=\"dialog\"][data-size] {\n padding: 0;\n gap: 0;\n display: flex;\n flex-direction: column;\n /* Перебиваем width/border-radius из Modal `.content[data-size]` (та же проблема специфичности). */\n box-sizing: border-box;\n min-width: 0;\n max-width: 100%;\n width: min(100%, var(--prime-sys-unit-45rem));\n border-radius: var(--prime-sys-size-modal-radius);\n}\n\n/* Узкая панель (ограничение max-width) */\n.dialogContentNarrow {\n width: min(100%, var(--prime-sys-unit-39p5rem));\n max-width: 100%;\n}\n\n.dialogContent.dialogContentNarrow[role=\"dialog\"][data-size] {\n max-width: 100%;\n width: min(100%, var(--prime-sys-unit-39p5rem));\n}\n\n.dialogContentWide {\n width: min(100%, var(--prime-sys-unit-43p75rem));\n max-width: 100%;\n}\n\n.dialogContent.dialogContentWide[role=\"dialog\"][data-size] {\n max-width: 100%;\n width: min(100%, var(--prime-sys-unit-43p75rem));\n}\n\n/* Компактная высота панели */\n.dialogContent.dialogContentTight[role=\"dialog\"][data-size] {\n max-height: min(88vh, var(--prime-sys-unit-27p5rem));\n}\n\n@media (min-width: var(--prime-sys-unit-768px)) {\n .dialogContent.dialogContentTight[role=\"dialog\"][data-size] {\n height: var(--prime-sys-unit-27p5rem);\n max-height: min(88vh, var(--prime-sys-unit-27p5rem));\n }\n}\n\n/* Split: фиксированная высота на широких вьюпортах */\n.dialogContent.dialogContentSplitMd[role=\"dialog\"][data-size] {\n overflow: hidden;\n}\n\n@media (min-width: var(--prime-sys-unit-768px)) {\n .dialogContent.dialogContentSplitMd[role=\"dialog\"][data-size] {\n height: var(--prime-sys-unit-27p5rem);\n max-height: min(88vh, var(--prime-sys-unit-27p5rem));\n }\n}\n\n.root {\n display: flex;\n flex-direction: column;\n min-height: 0;\n flex: 1;\n}\n\n.inputRow {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n gap: var(--prime-sys-spacing-x2);\n box-sizing: border-box;\n width: 100%;\n min-height: var(--prime-sys-unit-3rem);\n padding-block: 0;\n padding-inline: var(--prime-sys-size-control-m-buttonPaddingX);\n background: var(--prime-sys-color-surface-elevated);\n border-bottom: var(--prime-sys-unit-1px) solid var(--prime-sys-color-border-subtle);\n}\n\n.inputRowComfortable {\n min-height: var(--prime-sys-unit-3p5rem);\n gap: var(--prime-sys-spacing-x3);\n}\n\n.inputIcon {\n flex-shrink: 0;\n width: var(--prime-sys-size-control-m-icon);\n height: var(--prime-sys-size-control-m-icon);\n color: var(--prime-sys-color-content-muted);\n transition: color var(--prime-sys-motion-medium) var(--prime-sys-motion-standard);\n}\n\n.inputRow:focus-within .inputIcon {\n color: var(--prime-sys-color-content-secondary);\n}\n\n.input {\n flex: 1;\n min-width: 0;\n border: none;\n background: transparent;\n color: var(--prime-sys-color-content-primary);\n font-size: var(--prime-sys-size-control-m-text);\n line-height: var(--prime-sys-typography-body-lineHeight);\n outline: none;\n transition: color var(--prime-sys-motion-medium) var(--prime-sys-motion-standard);\n}\n\n.input::placeholder {\n color: var(--prime-sys-color-content-muted);\n transition: color var(--prime-sys-motion-medium) var(--prime-sys-motion-standard);\n}\n\n.inputRow:hover .input::placeholder {\n color: var(--prime-sys-color-content-secondary);\n}\n\n.list {\n flex: 1;\n min-height: 0;\n min-width: 0;\n overflow-y: auto;\n overflow-x: hidden;\n display: flex;\n flex-direction: column;\n}\n\n.group {\n position: relative;\n padding: var(--prime-sys-spacing-x2) var(--prime-sys-spacing-x2);\n}\n\n.groupFlush {\n padding: 0;\n}\n\n.groupHeading {\n font-size: var(--prime-sys-size-control-s-supportText);\n font-weight: var(--prime-sys-typography-weight-semibold);\n line-height: var(--prime-sys-typography-lineHeightScale-s);\n letter-spacing: 0.04em;\n text-transform: uppercase;\n color: var(--prime-sys-color-content-secondary);\n margin: 0 0 var(--prime-sys-spacing-x2);\n padding: var(--prime-sys-spacing-x2) var(--prime-sys-size-control-m-buttonPaddingX) 0;\n}\n\n/* Заголовок из JSX (иконки, счётчики) — без uppercase */\n.groupHeadingRich {\n margin: 0 0 var(--prime-sys-spacing-x2);\n padding: var(--prime-sys-spacing-x2) var(--prime-sys-size-control-m-buttonPaddingX) 0;\n font-size: var(--prime-sys-size-control-m-text);\n line-height: var(--prime-sys-typography-body-lineHeight);\n color: var(--prime-sys-color-content-primary);\n font-weight: var(--prime-sys-typography-weight-regular);\n text-transform: none;\n letter-spacing: normal;\n}\n\n.item {\n display: flex;\n align-items: center;\n gap: var(--prime-sys-size-control-m-gap);\n border-radius: var(--prime-sys-size-control-s-radius);\n background: transparent;\n color: var(--prime-sys-color-content-primary);\n font-size: var(--prime-sys-size-control-m-text);\n line-height: var(--prime-sys-typography-body-lineHeight);\n cursor: pointer;\n border: none;\n width: 100%;\n text-align: left;\n font-family: inherit;\n transition:\n background-color var(--prime-sys-motion-medium) var(--prime-sys-motion-standard),\n color var(--prime-sys-motion-medium) var(--prime-sys-motion-standard);\n}\n\n.item[data-size=\"s\"] {\n padding-block: var(--prime-sys-spacing-x2);\n padding-inline: var(--prime-sys-size-control-m-buttonPaddingX);\n}\n\n.item[data-size=\"m\"] {\n padding-block: var(--prime-sys-spacing-x3);\n padding-inline: var(--prime-sys-size-control-m-buttonPaddingX);\n}\n\n.item:not([data-disabled=\"true\"]):hover {\n background: var(--prime-sys-color-surface-default);\n}\n\n.item[data-selected=\"true\"] {\n background: var(--prime-sys-color-surface-default);\n}\n\n.item[data-disabled=\"true\"] {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.itemAlignStart {\n align-items: flex-start;\n}\n\n.itemIcon {\n flex-shrink: 0;\n width: var(--prime-sys-size-control-m-icon);\n height: var(--prime-sys-size-control-m-icon);\n color: var(--prime-sys-color-content-secondary);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.footer {\n display: flex;\n flex-shrink: 0;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n gap: var(--prime-sys-size-control-m-gap);\n min-height: var(--prime-sys-unit-3rem);\n padding: var(--prime-sys-spacing-x3) var(--prime-sys-size-control-m-buttonPaddingX);\n background: var(--prime-sys-color-surface-elevated);\n border-top: var(--prime-sys-unit-1px) solid var(--prime-sys-color-border-subtle);\n}\n\n.footerDense {\n min-height: var(--prime-sys-unit-3p5rem);\n padding-block: var(--prime-sys-spacing-x3);\n}\n\n.footerMuted {\n background: var(--prime-sys-color-surface-default);\n}\n\n/* Подсказки клавиш в футере — реализованы через Badge (см. CommandMenuFooterKeyBox). */\n.footerKeyBadge {\n flex-shrink: 0;\n}\n\n.footerHint {\n font-size: var(--prime-sys-size-control-s-supportText);\n line-height: var(--prime-sys-typography-body-lineHeight);\n color: var(--prime-sys-color-content-secondary);\n}\n\n.tagSection {\n flex-shrink: 0;\n padding: var(--prime-sys-spacing-x3) var(--prime-sys-size-control-m-buttonPaddingX);\n}\n\n.tagSectionLabel {\n margin: 0 0 var(--prime-sys-spacing-x3);\n font-size: var(--prime-sys-size-control-s-supportText);\n font-weight: var(--prime-sys-typography-weight-semibold);\n color: var(--prime-sys-color-content-secondary);\n}\n\n.tagRow {\n display: flex;\n flex-wrap: wrap;\n gap: var(--prime-sys-spacing-x2);\n}\n\n/* Действие справа в пункте — появляется при hover / выделении */\n.itemAction {\n opacity: 0;\n transition: opacity var(--prime-sys-motion-medium) var(--prime-sys-motion-standard);\n}\n\n.item:hover .itemAction,\n.item:focus-visible .itemAction,\n.item[data-selected=\"true\"] .itemAction {\n opacity: 1;\n}\n","import * as React from \"react\";\n\nimport { Badge } from \"@/components/badge/Badge\";\nimport { Modal, type ModalRootProps } from \"@/components/modal/Modal\";\nimport { createComponentContext } from \"@/internal/context\";\nimport { cx } from \"@/internal/cx\";\nimport { toDataAttributes } from \"@/internal/data-attributes\";\nimport type { ModalSize } from \"@/internal/states\";\n\nimport styles from \"./CommandMenu.module.css\";\n\n// ─── Filtering & item registry ───────────────────────────────────────────────\n\ntype ItemEntry = {\n id: string;\n order: number;\n value: string;\n keywords: string;\n disabled: boolean;\n groupId: string;\n onSelectRef: React.MutableRefObject<(() => void) | undefined>;\n};\n\nfunction normalize(s: string): string {\n return s.trim().toLowerCase();\n}\n\nfunction matchesQuery(entry: ItemEntry, query: string): boolean {\n if (!query) return true;\n const q = normalize(query);\n const hay = `${normalize(entry.value)} ${normalize(entry.keywords)}`;\n return hay.includes(q);\n}\n\n// ─── Context ─────────────────────────────────────────────────────────────────\n\ntype CommandMenuContextValue = {\n search: string;\n setSearch: React.Dispatch<React.SetStateAction<string>>;\n listboxId: string;\n activeId: string | null;\n setActiveId: React.Dispatch<React.SetStateAction<string | null>>;\n registerItem: (\n id: string,\n patch: Omit<ItemEntry, \"id\" | \"order\" | \"onSelectRef\"> & {\n onSelectRef: ItemEntry[\"onSelectRef\"];\n },\n ) => () => void;\n visibleIds: string[];\n itemGet: (id: string) => ItemEntry | undefined;\n moveActive: (delta: number) => void;\n activateSelected: () => void;\n inputRef: React.RefObject<HTMLInputElement | null>;\n};\n\nconst [CommandMenuProvider, useCommandMenuContext] =\n createComponentContext<CommandMenuContextValue>(\"CommandMenu\");\n\nconst CommandMenuGroupContext = React.createContext<string>(\"\");\n\nfunction CommandMenuRootProvider({ children }: { children: React.ReactNode }) {\n const listboxId = React.useId();\n const inputRef = React.useRef<HTMLInputElement>(null);\n const itemsRef = React.useRef<Map<string, ItemEntry>>(new Map());\n const orderSeqRef = React.useRef(0);\n const orderMapRef = React.useRef<Map<string, number>>(new Map());\n const [version, bump] = React.useReducer((n: number) => n + 1, 0);\n\n const [search, setSearch] = React.useState(\"\");\n const [activeId, setActiveId] = React.useState<string | null>(null);\n\n React.useLayoutEffect(() => {\n orderSeqRef.current = 0;\n orderMapRef.current.clear();\n }, []);\n\n React.useEffect(() => {\n setSearch(\"\");\n setActiveId(null);\n const id = requestAnimationFrame(() => inputRef.current?.focus());\n return () => cancelAnimationFrame(id);\n }, []);\n\n const registerItem = React.useCallback(\n (\n id: string,\n patch: Omit<ItemEntry, \"id\" | \"order\" | \"onSelectRef\"> & {\n onSelectRef: ItemEntry[\"onSelectRef\"];\n },\n ) => {\n let order = orderMapRef.current.get(id);\n if (order === undefined) {\n order = orderSeqRef.current++;\n orderMapRef.current.set(id, order);\n }\n itemsRef.current.set(id, { ...patch, id, order });\n bump();\n return () => {\n itemsRef.current.delete(id);\n bump();\n };\n },\n [],\n );\n\n const visibleIds = React.useMemo(() => {\n void version;\n const list = [...itemsRef.current.values()].sort((a, b) => a.order - b.order);\n return list\n .filter((e) => matchesQuery(e, search))\n .filter((e) => !e.disabled)\n .map((e) => e.id);\n }, [search, version]);\n\n const itemGet = React.useCallback((id: string) => itemsRef.current.get(id), []);\n\n React.useLayoutEffect(() => {\n setActiveId((prev) => {\n if (visibleIds.length === 0) return null;\n if (prev && visibleIds.includes(prev)) return prev;\n return visibleIds[0] ?? null;\n });\n }, [visibleIds]);\n\n const moveActive = React.useCallback(\n (delta: number) => {\n if (visibleIds.length === 0) return;\n setActiveId((prev) => {\n const idx = prev ? visibleIds.indexOf(prev) : -1;\n const next = idx < 0 ? 0 : (idx + delta + visibleIds.length) % visibleIds.length;\n return visibleIds[next] ?? null;\n });\n },\n [visibleIds],\n );\n\n const activateSelected = React.useCallback(() => {\n if (!activeId) return;\n itemsRef.current.get(activeId)?.onSelectRef.current?.();\n }, [activeId]);\n\n const value = React.useMemo(\n () => ({\n search,\n setSearch,\n listboxId,\n activeId,\n setActiveId,\n registerItem,\n visibleIds,\n itemGet,\n moveActive,\n activateSelected,\n inputRef,\n }),\n [search, listboxId, activeId, registerItem, visibleIds, itemGet, moveActive, activateSelected],\n );\n\n return <CommandMenuProvider value={value}>{children}</CommandMenuProvider>;\n}\n\n// ─── Dialog ──────────────────────────────────────────────────────────────────\n\nexport type CommandMenuDialogProps = Omit<ModalRootProps, \"children\"> & {\n children?: React.ReactNode;\n overlayClassName?: string;\n /** Дополнительный класс для панели контента (совмещается с внутренними стилями диалога). */\n className?: string;\n contentClassName?: string;\n \"aria-labelledby\"?: string;\n \"aria-describedby\"?: string;\n};\n\nfunction CommandMenuDialog({\n children,\n overlayClassName,\n className,\n contentClassName,\n size = \"l\",\n open,\n defaultOpen,\n onOpenChange,\n closeOnEscape = true,\n closeOnOverlayClick = true,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-describedby\": ariaDescribedBy,\n}: CommandMenuDialogProps) {\n return (\n <Modal.Root\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n closeOnEscape={closeOnEscape}\n closeOnOverlayClick={closeOnOverlayClick}\n size={size as ModalSize}\n >\n <Modal.Portal>\n <Modal.Overlay className={cx(styles.dialogOverlay, overlayClassName)}>\n <Modal.Content\n className={cx(styles.dialogContent, styles.root, contentClassName, className)}\n aria-labelledby={ariaLabelledBy}\n aria-describedby={ariaDescribedBy}\n >\n <CommandMenuRootProvider>{children}</CommandMenuRootProvider>\n </Modal.Content>\n </Modal.Overlay>\n </Modal.Portal>\n </Modal.Root>\n );\n}\n\nconst CommandMenuDialogTitle = Modal.Title;\nconst CommandMenuDialogDescription = Modal.Description;\n\n// ─── Input row + input ───────────────────────────────────────────────────────\n\nexport type CommandMenuInputRowProps = React.HTMLAttributes<HTMLDivElement> & {\n leading?: React.ReactNode;\n trailing?: React.ReactNode;\n /** `compact` — ниже строка поиска, `comfortable` — выше. */\n density?: \"compact\" | \"comfortable\";\n};\n\nfunction CommandMenuInputRow({\n leading,\n trailing,\n children,\n className,\n density = \"compact\",\n ...rest\n}: CommandMenuInputRowProps) {\n return (\n <div\n className={cx(\n styles.inputRow,\n density === \"comfortable\" && styles.inputRowComfortable,\n className,\n )}\n {...rest}\n >\n {leading}\n {children}\n {trailing}\n </div>\n );\n}\n\nexport type CommandMenuInputProps = Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"size\" | \"type\"\n>;\n\nconst CommandMenuInput = React.forwardRef<HTMLInputElement, CommandMenuInputProps>(\n ({ className, onKeyDown, value: valueProp, onChange, ...rest }, forwardedRef) => {\n const {\n search,\n setSearch,\n listboxId,\n activeId,\n moveActive,\n activateSelected,\n inputRef,\n setActiveId,\n visibleIds,\n } = useCommandMenuContext();\n\n const isControlled = valueProp !== undefined;\n\n React.useEffect(() => {\n if (isControlled) {\n setSearch(valueProp !== undefined && valueProp !== null ? String(valueProp) : \"\");\n }\n }, [isControlled, valueProp, setSearch]);\n\n const setRefs = React.useCallback(\n (node: HTMLInputElement | null) => {\n (inputRef as React.MutableRefObject<HTMLInputElement | null>).current = node;\n if (typeof forwardedRef === \"function\") {\n forwardedRef(node);\n } else if (forwardedRef) {\n forwardedRef.current = node;\n }\n },\n [forwardedRef, inputRef],\n );\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(e);\n if (!isControlled) {\n setSearch(e.target.value);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n onKeyDown?.(e);\n if (e.defaultPrevented) return;\n\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n moveActive(1);\n return;\n }\n if (e.key === \"ArrowUp\") {\n e.preventDefault();\n moveActive(-1);\n return;\n }\n if (e.key === \"Home\") {\n e.preventDefault();\n if (visibleIds[0]) setActiveId(visibleIds[0]);\n return;\n }\n if (e.key === \"End\") {\n e.preventDefault();\n const last = visibleIds[visibleIds.length - 1];\n if (last) setActiveId(last);\n return;\n }\n if (e.key === \"Enter\") {\n e.preventDefault();\n activateSelected();\n }\n };\n\n return (\n <input\n {...rest}\n ref={setRefs}\n type=\"search\"\n autoComplete=\"off\"\n autoCorrect=\"off\"\n spellCheck={false}\n role=\"combobox\"\n aria-expanded=\"true\"\n aria-controls={listboxId}\n aria-activedescendant={activeId ? `${activeId}-option` : undefined}\n className={cx(styles.input, className)}\n value={isControlled ? valueProp : search}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n />\n );\n },\n);\n\nCommandMenuInput.displayName = \"CommandMenu.Input\";\n\n// ─── List ────────────────────────────────────────────────────────────────────\n\nexport type CommandMenuListProps = React.HTMLAttributes<HTMLDivElement>;\n\nconst CommandMenuList = React.forwardRef<HTMLDivElement, CommandMenuListProps>(\n ({ className, children, ...rest }, ref) => {\n const { listboxId } = useCommandMenuContext();\n\n return (\n <div\n ref={ref}\n id={listboxId}\n role=\"listbox\"\n aria-multiselectable={false}\n className={cx(styles.list, className)}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\n\nCommandMenuList.displayName = \"CommandMenu.List\";\n\n// ─── Group ───────────────────────────────────────────────────────────────────\n\nexport type CommandMenuGroupProps = React.HTMLAttributes<HTMLDivElement> & {\n heading?: React.ReactNode;\n};\n\nfunction CommandMenuGroup({ heading, className, children, ...rest }: CommandMenuGroupProps) {\n const groupId = React.useId();\n const { visibleIds, itemGet } = useCommandMenuContext();\n\n const hasVisible = visibleIds.some((id) => itemGet(id)?.groupId === groupId);\n\n return (\n <CommandMenuGroupContext.Provider value={groupId}>\n <div className={cx(styles.group, className)} hidden={hasVisible ? undefined : true} {...rest}>\n {heading !== undefined && heading !== null ? (\n typeof heading === \"string\" ? (\n <div className={styles.groupHeading}>{heading}</div>\n ) : (\n <div className={styles.groupHeadingRich}>{heading}</div>\n )\n ) : null}\n {children}\n </div>\n </CommandMenuGroupContext.Provider>\n );\n}\n\n// ─── Item ────────────────────────────────────────────────────────────────────\n\nexport type CommandMenuItemSize = \"s\" | \"m\";\n\nexport type CommandMenuItemProps = Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n \"type\" | \"onSelect\"\n> & {\n /** Текст для фильтрации; пустая строка — пункт всегда виден при любом запросе. */\n value: string;\n keywords?: string;\n size?: CommandMenuItemSize;\n onSelect?: () => void;\n};\n\nconst CommandMenuItem = React.forwardRef<HTMLButtonElement, CommandMenuItemProps>(\n (\n {\n className,\n value,\n keywords = \"\",\n disabled,\n size = \"s\",\n onSelect,\n onClick,\n onPointerMove,\n ...rest\n },\n forwardedRef,\n ) => {\n const id = React.useId();\n const optionId = `${id}-option`;\n const groupId = React.useContext(CommandMenuGroupContext);\n const { registerItem, activeId, setActiveId, visibleIds } = useCommandMenuContext();\n const onSelectRef = React.useRef(onSelect);\n\n React.useEffect(() => {\n onSelectRef.current = onSelect;\n }, [onSelect]);\n\n React.useLayoutEffect(() => {\n return registerItem(id, {\n value,\n keywords,\n disabled: Boolean(disabled),\n groupId,\n onSelectRef,\n });\n }, [id, value, keywords, disabled, groupId, registerItem]);\n\n const filteredIn = visibleIds.includes(id);\n const selected = activeId === id;\n const listRef = React.useRef<HTMLButtonElement>(null);\n\n const setRefs = React.useCallback(\n (node: HTMLButtonElement | null) => {\n listRef.current = node;\n if (typeof forwardedRef === \"function\") {\n forwardedRef(node);\n } else if (forwardedRef) {\n forwardedRef.current = node;\n }\n },\n [forwardedRef],\n );\n\n React.useEffect(() => {\n if (selected && listRef.current) {\n listRef.current.scrollIntoView?.({ block: \"nearest\" });\n }\n }, [selected]);\n\n const handlePointerMove = (e: React.PointerEvent<HTMLButtonElement>) => {\n onPointerMove?.(e);\n if (e.defaultPrevented || disabled) return;\n if (filteredIn) setActiveId(id);\n };\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n if (e.defaultPrevented || disabled) return;\n if (!filteredIn) return;\n setActiveId(id);\n onSelectRef.current?.();\n };\n\n return (\n <button\n ref={setRefs}\n type=\"button\"\n id={optionId}\n role=\"option\"\n tabIndex={-1}\n aria-selected={selected}\n hidden={filteredIn ? undefined : true}\n disabled={disabled}\n className={cx(styles.item, className)}\n {...toDataAttributes({\n size,\n selected: selected ? true : undefined,\n disabled: disabled ? true : undefined,\n })}\n onPointerMove={handlePointerMove}\n onClick={handleClick}\n {...rest}\n />\n );\n },\n);\n\nCommandMenuItem.displayName = \"CommandMenu.Item\";\n\n// ─── Item icon (polymorphic) ─────────────────────────────────────────────────\n\nexport type CommandMenuItemIconProps<T extends React.ElementType = \"span\"> = {\n as?: T;\n className?: string;\n} & Omit<React.ComponentPropsWithoutRef<T>, \"as\" | \"className\">;\n\nfunction CommandMenuItemIcon<T extends React.ElementType = \"span\">({\n as,\n className,\n ...rest\n}: CommandMenuItemIconProps<T>) {\n const Comp = as ?? \"span\";\n return <Comp className={cx(styles.itemIcon, className)} {...rest} />;\n}\n\n// ─── Секция тегов под строкой поиска ─────────────────────────────────────────\n\nexport type CommandMenuTagSectionProps = React.HTMLAttributes<HTMLDivElement>;\n\nfunction CommandMenuTagSection({ className, ...rest }: CommandMenuTagSectionProps) {\n return <div className={cx(styles.tagSection, className)} {...rest} />;\n}\n\nexport type CommandMenuTagSectionLabelProps = React.HTMLAttributes<HTMLDivElement>;\n\nfunction CommandMenuTagSectionLabel({ className, ...rest }: CommandMenuTagSectionLabelProps) {\n return <div className={cx(styles.tagSectionLabel, className)} {...rest} />;\n}\n\nexport type CommandMenuTagRowProps = React.HTMLAttributes<HTMLDivElement>;\n\nfunction CommandMenuTagRow({ className, ...rest }: CommandMenuTagRowProps) {\n return <div className={cx(styles.tagRow, className)} {...rest} />;\n}\n\n// ─── Footer ──────────────────────────────────────────────────────────────────\n\nexport type CommandMenuFooterProps = React.HTMLAttributes<HTMLDivElement>;\n\nfunction CommandMenuFooter({ className, ...rest }: CommandMenuFooterProps) {\n return <div className={cx(styles.footer, className)} {...rest} />;\n}\n\nexport type CommandMenuFooterKeyBoxProps = Omit<React.HTMLAttributes<HTMLDivElement>, \"color\"> & {\n /** На футере с `footerMuted` — бейдж `lighter`, иначе `stroke` (контур). */\n tone?: \"default\" | \"muted\";\n};\n\nconst CommandMenuFooterKeyBox = React.forwardRef<HTMLDivElement, CommandMenuFooterKeyBoxProps>(\n ({ className, children, tone = \"default\", ...rest }, ref) => {\n const variant = tone === \"muted\" ? \"lighter\" : \"stroke\";\n return (\n <Badge.Root\n ref={ref}\n variant={variant}\n color=\"gray\"\n size=\"s\"\n className={cx(styles.footerKeyBadge, className)}\n {...rest}\n >\n <Badge.Icon>{children}</Badge.Icon>\n </Badge.Root>\n );\n },\n);\n\nCommandMenuFooterKeyBox.displayName = \"CommandMenu.FooterKeyBox\";\n\n// ─── Namespace ───────────────────────────────────────────────────────────────\n\nexport const CommandMenu = {\n Dialog: CommandMenuDialog,\n DialogTitle: CommandMenuDialogTitle,\n DialogDescription: CommandMenuDialogDescription,\n InputRow: CommandMenuInputRow,\n Input: CommandMenuInput,\n List: CommandMenuList,\n Group: CommandMenuGroup,\n Item: CommandMenuItem,\n ItemIcon: CommandMenuItemIcon,\n TagSection: CommandMenuTagSection,\n TagSectionLabel: CommandMenuTagSectionLabel,\n TagRow: CommandMenuTagRow,\n Footer: CommandMenuFooter,\n FooterKeyBox: CommandMenuFooterKeyBox,\n};\n\nexport type { ModalSize as CommandMenuDialogSize };\n","export const CSS_PX_SUFFIX = \"px\";\nexport const DATA_TABLE_INFINITE_ROOT_MARGIN = \"0px 0px 120px 0px\";\n",".root {\n display: flex;\n align-items: center;\n gap: var(--prime-sys-size-control-s-gap);\n --pagination-ellipsis-box: var(--prime-sys-size-control-s-height);\n --pagination-ellipsis-text: var(--prime-sys-size-control-s-text);\n}\n\n.root[data-size=\"s\"] {\n gap: var(--prime-sys-size-control-xs-gap);\n --pagination-ellipsis-box: var(--prime-sys-size-control-xs-height);\n --pagination-ellipsis-text: var(--prime-sys-size-control-xs-text);\n}\n\n.root[data-size=\"m\"] {\n gap: var(--prime-sys-size-control-s-gap);\n --pagination-ellipsis-box: var(--prime-sys-size-control-s-height);\n --pagination-ellipsis-text: var(--prime-sys-size-control-s-text);\n}\n\n.root[data-size=\"l\"] {\n gap: var(--prime-sys-size-control-m-gap);\n --pagination-ellipsis-box: var(--prime-sys-size-control-m-height);\n --pagination-ellipsis-text: var(--prime-sys-size-control-m-text);\n}\n\n.root[data-size=\"xl\"] {\n gap: var(--prime-sys-size-control-l-gap);\n --pagination-ellipsis-box: var(--prime-sys-size-control-l-height);\n --pagination-ellipsis-text: var(--prime-sys-size-control-l-text);\n}\n\n.root .pageButton[data-size=\"s\"] {\n --prime-icon-size: var(--prime-sys-size-control-xs-icon);\n --prime-button-font-size: var(--prime-sys-size-control-xs-text);\n height: var(--prime-sys-size-control-xs-height);\n min-width: var(--prime-sys-size-control-xs-height);\n border-radius: var(--prime-sys-size-control-xs-radius);\n gap: var(--prime-sys-size-control-xs-gap);\n padding-inline: var(--prime-sys-size-control-xs-buttonPaddingX);\n padding-block: var(--prime-sys-size-control-xs-buttonPaddingY);\n}\n\n.root .pageButton[data-size=\"m\"] {\n --prime-icon-size: var(--prime-sys-size-control-s-icon);\n --prime-button-font-size: var(--prime-sys-size-control-s-text);\n height: var(--prime-sys-size-control-s-height);\n min-width: var(--prime-sys-size-control-s-height);\n border-radius: var(--prime-sys-size-control-s-radius);\n gap: var(--prime-sys-size-control-s-gap);\n padding-inline: var(--prime-sys-size-control-s-buttonPaddingX);\n padding-block: var(--prime-sys-size-control-s-buttonPaddingY);\n}\n\n.root .pageButton[data-size=\"l\"] {\n --prime-icon-size: var(--prime-sys-size-control-m-icon);\n --prime-button-font-size: var(--prime-sys-size-control-m-text);\n height: var(--prime-sys-size-control-m-height);\n min-width: var(--prime-sys-size-control-m-height);\n border-radius: var(--prime-sys-size-control-m-radius);\n gap: var(--prime-sys-size-control-m-gap);\n padding-inline: var(--prime-sys-size-control-m-buttonPaddingX);\n padding-block: var(--prime-sys-size-control-m-buttonPaddingY);\n}\n\n.root .pageButton[data-size=\"xl\"] {\n --prime-icon-size: var(--prime-sys-size-control-l-icon);\n --prime-button-font-size: var(--prime-sys-size-control-l-text);\n height: var(--prime-sys-size-control-l-height);\n min-width: var(--prime-sys-size-control-l-height);\n border-radius: var(--prime-sys-size-control-l-radius);\n gap: var(--prime-sys-size-control-l-gap);\n padding-inline: var(--prime-sys-size-control-l-buttonPaddingX);\n padding-block: var(--prime-sys-size-control-l-buttonPaddingY);\n}\n\n.control {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.ellipsis {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--pagination-ellipsis-box);\n min-width: var(--pagination-ellipsis-box);\n height: var(--pagination-ellipsis-box);\n color: var(--prime-sys-color-content-muted);\n font-size: var(--pagination-ellipsis-text);\n}\n","import { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport { Button } from \"@/components/button/Button\";\nimport { cx } from \"@/internal/cx\";\nimport { toDataAttributes } from \"@/internal/data-attributes\";\nimport type { PaginationSize } from \"@/internal/states\";\n\nimport styles from \"./Pagination.module.css\";\n\nexport type { PaginationSize };\n\nfunction buildPageRange(page: number, total: number, siblings: number): Array<number | \"...\"> {\n if (total <= 7) return Array.from({ length: total }, (_, i) => i + 1);\n\n const left = Math.max(2, page - siblings);\n const right = Math.min(total - 1, page + siblings);\n\n const showLeftEllipsis = left > 2;\n const showRightEllipsis = right < total - 1;\n\n const pages: Array<number | \"...\"> = [1];\n if (showLeftEllipsis) pages.push(\"...\");\n for (let i = left; i <= right; i++) pages.push(i);\n if (showRightEllipsis) pages.push(\"...\");\n pages.push(total);\n\n return pages;\n}\n\nexport type PaginationRootProps = {\n page: number;\n totalPages: number;\n onPageChange: (page: number) => void;\n siblingCount?: number;\n /** Размер кнопок страниц и стрелок; многоточие — тот же ярус `--prime-sys-size-control-*`. */\n size?: PaginationSize;\n className?: string;\n};\n\nfunction PaginationRoot({\n page,\n totalPages,\n onPageChange,\n siblingCount = 1,\n size = \"m\",\n className,\n}: PaginationRootProps) {\n if (totalPages < 1) {\n return null;\n }\n\n const safePage = Math.min(Math.max(1, page), totalPages);\n const pages = buildPageRange(safePage, totalPages, siblingCount);\n\n return (\n <nav\n aria-label=\"Pagination\"\n className={cx(styles.root, className)}\n {...toDataAttributes({ size })}\n >\n <span className={styles.control}>\n <Button.Root\n className={styles.pageButton}\n size={size}\n variant=\"neutral\"\n mode=\"ghost\"\n disabled={safePage <= 1}\n onClick={() => onPageChange(safePage - 1)}\n aria-label=\"Previous page\"\n >\n <Button.Icon>\n <ChevronLeft strokeWidth={2} />\n </Button.Icon>\n </Button.Root>\n </span>\n {pages.map((p, i) =>\n p === \"...\" ? (\n <span\n key={`ellipsis-after-${pages[i - 1]}-before-${pages[i + 1]}`}\n className={styles.control}\n >\n <span className={styles.ellipsis} aria-hidden=\"true\">\n …\n </span>\n </span>\n ) : (\n <span key={p} className={styles.control}>\n <Button.Root\n className={styles.pageButton}\n size={size}\n variant={p === safePage ? \"primary\" : \"neutral\"}\n mode={p === safePage ? \"filled\" : \"ghost\"}\n onClick={() => onPageChange(p)}\n aria-current={p === safePage ? \"page\" : undefined}\n aria-label={`Page ${p}`}\n >\n {p}\n </Button.Root>\n </span>\n ),\n )}\n <span className={styles.control}>\n <Button.Root\n className={styles.pageButton}\n size={size}\n variant=\"neutral\"\n mode=\"ghost\"\n disabled={safePage >= totalPages}\n onClick={() => onPageChange(safePage + 1)}\n aria-label=\"Next page\"\n >\n <Button.Icon>\n <ChevronRight strokeWidth={2} />\n </Button.Icon>\n </Button.Root>\n </span>\n </nav>\n );\n}\n\nPaginationRoot.displayName = \"PaginationRoot\";\n\nexport const Pagination = { Root: PaginationRoot };\n",".root {\n --dt-row-height: var(--prime-sys-size-control-m-height);\n --dt-cell-gap: var(--prime-sys-size-control-m-gap);\n --dt-cell-pad-x: var(--prime-sys-size-control-m-buttonPaddingX);\n --dt-cell-pad-y: var(--prime-sys-size-control-m-buttonPaddingY);\n --dt-text: var(--prime-sys-size-control-m-text);\n\n display: grid;\n gap: var(--prime-sys-spacing-x3);\n width: 100%;\n --dt-head-bg: var(--prime-sys-color-dataTable-headBackground);\n --dt-row-bg: var(--prime-sys-color-dataTable-rowBackground);\n --dt-divider-color-vertical: var(--prime-sys-color-dataTable-dividerVertical);\n --dt-divider-color-horizontal: var(--prime-sys-color-dataTable-dividerHorizontal);\n --dt-divider-style: solid;\n --dt-divider-width: var(--prime-sys-unit-1px);\n --dt-sort-icon: var(--prime-sys-size-control-m-icon);\n --dt-z-sticky-first-column: 10;\n --dt-z-sticky-header: 20;\n --dt-z-sticky-header-first-column: 30;\n --dt-z-sticky-corner: 40;\n --dt-sticky-header-shadow: 0 var(--prime-sys-unit-1px) 0 0 var(--prime-sys-color-border-subtle);\n --dt-sticky-first-column-shadow:\n var(--prime-sys-unit-1px) 0 0 0 var(--prime-sys-color-border-subtle),\n 8px 0 16px -14px color-mix(in srgb, var(--prime-sys-color-content-primary) 42%, transparent);\n --dt-sticky-corner-shadow:\n var(--prime-sys-unit-1px) 0 0 0 var(--prime-sys-color-border-subtle),\n 0 var(--prime-sys-unit-1px) 0 0 var(--prime-sys-color-border-subtle),\n 8px 0 16px -14px color-mix(in srgb, var(--prime-sys-color-content-primary) 42%, transparent),\n 0 8px 16px -14px color-mix(in srgb, var(--prime-sys-color-content-primary) 42%, transparent);\n /* Подсветки: смесь с фоном строки/шапки, без «заливки» action-hover */\n --dt-row-hover-bg: color-mix(\n in srgb,\n var(--prime-sys-color-content-primary) 7%,\n var(--dt-row-bg)\n );\n --dt-column-hover-bg: color-mix(\n in srgb,\n var(--prime-sys-color-content-primary) 9%,\n var(--dt-row-bg)\n );\n --dt-column-hover-head-bg: color-mix(\n in srgb,\n var(--prime-sys-color-content-primary) 9%,\n var(--dt-head-bg)\n );\n --dt-row-striped-bg: color-mix(\n in srgb,\n var(--prime-sys-color-content-primary) 4.5%,\n var(--dt-row-bg)\n );\n}\n\n.root[data-size=\"s\"] {\n --dt-row-height: var(--prime-sys-size-control-s-height);\n --dt-cell-gap: var(--prime-sys-size-control-s-gap);\n --dt-cell-pad-x: var(--prime-sys-size-control-s-buttonPaddingX);\n --dt-cell-pad-y: var(--prime-sys-size-control-s-buttonPaddingY);\n --dt-text: var(--prime-sys-size-control-s-text);\n --dt-sort-icon: var(--prime-sys-size-control-s-icon);\n}\n\n.root[data-size=\"l\"] {\n --dt-row-height: var(--prime-sys-size-control-l-height);\n --dt-cell-gap: var(--prime-sys-size-control-l-gap);\n --dt-cell-pad-x: var(--prime-sys-size-control-l-buttonPaddingX);\n --dt-cell-pad-y: var(--prime-sys-size-control-l-buttonPaddingY);\n --dt-text: var(--prime-sys-size-control-l-text);\n --dt-sort-icon: var(--prime-sys-size-control-l-icon);\n}\n\n.root[data-size=\"xl\"] {\n --dt-row-height: var(--prime-sys-size-control-xl-height);\n --dt-cell-gap: var(--prime-sys-size-control-xl-gap);\n --dt-cell-pad-x: var(--prime-sys-size-control-xl-buttonPaddingX);\n --dt-cell-pad-y: var(--prime-sys-size-control-xl-buttonPaddingY);\n --dt-text: var(--prime-sys-size-control-xl-text);\n --dt-sort-icon: var(--prime-sys-size-control-xl-icon);\n}\n\n.viewport {\n width: 100%;\n overflow: auto;\n border: var(--prime-sys-unit-1px) solid var(--prime-sys-color-border-subtle);\n border-radius: var(--prime-sys-shape-radius-l);\n background: var(--dt-row-bg);\n isolation: isolate;\n}\n\n.table {\n width: 100%;\n min-width: max-content;\n border-collapse: separate;\n border-spacing: 0;\n}\n\n.head {\n background: var(--dt-head-bg);\n}\n\n.headRow {\n box-shadow: inset 0 var(--prime-sys-unit-neg-1px) 0 0 var(--prime-sys-color-border-subtle);\n}\n\n.headCell {\n height: var(--dt-row-height);\n padding: var(--dt-cell-pad-y) var(--dt-cell-pad-x);\n font-size: var(--dt-text);\n font-weight: var(--prime-sys-typography-weight-semibold);\n color: var(--prime-sys-color-content-primary);\n line-height: 1.25;\n white-space: nowrap;\n vertical-align: middle;\n}\n\n.headCell[data-align=\"start\"] {\n text-align: left;\n}\n\n.headCell[data-align=\"center\"] {\n text-align: center;\n}\n\n.headCell[data-align=\"end\"] {\n text-align: right;\n}\n\n.headCell[data-sortable=\"true\"] {\n cursor: pointer;\n user-select: none;\n}\n\n.headCell + .headCell {\n border-inline-start: var(--dt-divider-width) var(--dt-divider-style)\n var(--dt-divider-color-vertical);\n}\n\n.root[data-sticky-header=\"true\"] .headCell {\n position: sticky;\n top: 0;\n z-index: var(--dt-z-sticky-header);\n background: var(--dt-head-bg);\n box-shadow: var(--dt-sticky-header-shadow);\n}\n\n.headLabel {\n display: inline-flex;\n align-items: center;\n}\n\n.sortButton {\n display: inline-flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--dt-cell-gap);\n width: 100%;\n min-height: 100%;\n padding: 0;\n color: inherit;\n pointer-events: none;\n}\n\n.sortLabel {\n line-height: 1.25;\n font-weight: inherit;\n}\n\n.sortIcon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: var(--prime-sys-color-content-muted);\n width: var(--dt-sort-icon);\n height: var(--dt-sort-icon);\n flex-shrink: 0;\n}\n\n.sortGlyph {\n width: var(--dt-sort-icon);\n height: var(--dt-sort-icon);\n}\n\n.body {\n background: var(--dt-row-bg);\n}\n\n.row {\n background: var(--dt-row-bg);\n transition: background-color var(--prime-sys-motion-fast) var(--prime-sys-motion-standard);\n}\n\n.cell {\n height: var(--dt-row-height);\n padding: var(--dt-cell-pad-y) var(--dt-cell-pad-x);\n font-size: var(--dt-text);\n line-height: 1.25;\n color: var(--prime-sys-color-content-primary);\n vertical-align: middle;\n}\n\n.cell[data-align=\"start\"] {\n text-align: left;\n}\n\n.cell[data-align=\"center\"] {\n text-align: center;\n}\n\n.cell[data-align=\"end\"] {\n text-align: right;\n}\n\n.cell + .cell {\n border-inline-start: var(--dt-divider-width) var(--dt-divider-style)\n var(--dt-divider-color-vertical);\n}\n\n.row + .row .cell {\n border-top: var(--dt-divider-width) var(--dt-divider-style) var(--dt-divider-color-horizontal);\n}\n\n.firstColumnSticky {\n position: sticky;\n left: 0;\n z-index: var(--dt-z-sticky-first-column);\n background: var(--dt-row-bg);\n box-shadow: var(--dt-sticky-first-column-shadow);\n}\n\n.headCell.firstColumnSticky {\n z-index: var(--dt-z-sticky-header-first-column);\n background: var(--dt-head-bg);\n}\n\n.cornerCellSticky {\n top: 0;\n left: 0;\n z-index: var(--dt-z-sticky-corner);\n box-shadow: var(--dt-sticky-corner-shadow);\n}\n\n/* Надежный layering-паттерн для sticky header + first column:\n body first column < header cells < corner 0x0 */\n.root[data-sticky-first-column=\"true\"] .body .cell[data-first-column=\"true\"] {\n z-index: var(--dt-z-sticky-first-column);\n}\n\n.root[data-sticky-header=\"true\"] .head .headCell {\n z-index: var(--dt-z-sticky-header);\n}\n\n.root[data-sticky-header=\"true\"][data-sticky-first-column=\"true\"]\n .head\n .headCell[data-first-column=\"true\"] {\n position: sticky;\n top: 0;\n left: 0;\n z-index: var(--dt-z-sticky-corner);\n}\n\n.root[data-highlight-row=\"true\"] .row:hover {\n background: var(--dt-row-hover-bg);\n}\n\n.root[data-highlight-row=\"true\"] .row:hover .cell {\n background: var(--dt-row-hover-bg);\n}\n\n.root[data-highlight-row=\"true\"] .row:hover .firstColumnSticky {\n background: var(--dt-row-hover-bg);\n}\n\n/* Колонка под курсором */\n.root[data-highlight-column=\"true\"] thead .headCell[data-column-hovered=\"true\"] {\n background: var(--dt-column-hover-head-bg);\n}\n\n.root[data-highlight-column=\"true\"] .cell[data-column-hovered=\"true\"] {\n background: var(--dt-column-hover-bg);\n}\n\n.root[data-highlight-column=\"true\"] .firstColumnSticky[data-column-hovered=\"true\"] {\n background: var(--dt-column-hover-bg);\n}\n\n/* Зебра */\n.root[data-striped=\"true\"] .row[data-stripe=\"alt\"] {\n background: var(--dt-row-striped-bg);\n}\n\n.root[data-striped=\"true\"] .row[data-stripe=\"alt\"] .cell {\n background: var(--dt-row-striped-bg);\n}\n\n.root[data-striped=\"true\"] .row[data-stripe=\"alt\"] .firstColumnSticky {\n background: var(--dt-row-striped-bg);\n}\n\n.stateCell {\n padding: var(--prime-sys-spacing-x8) var(--prime-sys-spacing-x4);\n text-align: center;\n font-size: var(--dt-text);\n color: var(--prime-sys-color-content-secondary);\n}\n\n.sentinel {\n height: var(--prime-sys-unit-2px);\n}\n\n.footer {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n gap: var(--prime-sys-spacing-x3);\n}\n\n.meta {\n margin: 0;\n font-size: var(--dt-text);\n color: var(--prime-sys-color-content-secondary);\n}\n\n.root[data-divider=\"dashed\"] {\n --dt-divider-style: dashed;\n}\n\n.root[data-divider=\"dotted\"] {\n --dt-divider-style: dotted;\n}\n\n.root[data-divider=\"none\"] {\n --dt-divider-width: 0;\n}\n","import { ArrowDown, ArrowUp, ArrowUpDown } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { useControllableState } from \"@/hooks/useControllableState\";\nimport { ControlSizeProvider } from \"@/internal/ControlSizeContext\";\nimport { cx } from \"@/internal/cx\";\nimport { toDataAttributes } from \"@/internal/data-attributes\";\nimport { DATA_TABLE_INFINITE_ROOT_MARGIN } from \"@/internal/runtimeUnits\";\nimport type { DataTableSize } from \"@/internal/states\";\n\nimport { Pagination } from \"../pagination/Pagination\";\nimport styles from \"./DataTable.module.css\";\n\nexport type { DataTableSize };\n\nexport type DataTableOrder = \"asc\" | \"desc\";\nexport type DataTableSortState = { columnId: string; order: DataTableOrder } | null;\nexport type DataTableCellAlign = \"start\" | \"center\" | \"end\";\nexport type DataTableDividerStyle = \"standard\" | \"dashed\" | \"dotted\" | \"none\";\n\nexport type DataTableColumn<Row> = {\n id: string;\n header: React.ReactNode;\n accessor?: keyof Row | ((row: Row) => unknown);\n cell?: (row: Row) => React.ReactNode;\n sortable?: boolean;\n sortAccessor?: (row: Row) => unknown;\n sortComparator?: (a: Row, b: Row, order: DataTableOrder) => number;\n align?: DataTableCellAlign;\n width?: string;\n minWidth?: string;\n onHeaderClick?: (event: React.MouseEvent<HTMLTableCellElement>) => void;\n onCellClick?: (\n row: Row,\n event: React.MouseEvent<HTMLTableCellElement> | React.KeyboardEvent<HTMLTableCellElement>,\n ) => void;\n};\n\nexport type DataTableRootProps<Row> = {\n columns: DataTableColumn<Row>[];\n rows: Row[];\n size?: DataTableSize;\n className?: string;\n showHeader?: boolean;\n stickyHeader?: boolean;\n stickyFirstColumn?: boolean;\n getRowKey?: (row: Row, index: number) => React.Key;\n onRowClick?: (row: Row, index: number, event: React.MouseEvent<HTMLTableRowElement>) => void;\n loading?: boolean;\n loadingText?: React.ReactNode;\n emptyText?: React.ReactNode;\n dividerStyle?: DataTableDividerStyle;\n sort?: DataTableSortState;\n defaultSort?: DataTableSortState;\n onSortChange?: (sort: DataTableSortState) => void;\n page?: number;\n defaultPage?: number;\n onPageChange?: (page: number) => void;\n pageSize?: number;\n showPagination?: boolean;\n siblingCount?: number;\n paginationSize?: DataTableSize;\n infiniteScroll?: boolean;\n initialVisibleRows?: number;\n infiniteBatchSize?: number;\n hasMore?: boolean;\n loadingMore?: boolean;\n onLoadMore?: () => void | Promise<void>;\n scrollHeight?: number | string;\n /** Подсветка строки при наведении (полупрозрачная смесь с фоном строки). */\n highlightRowOnHover?: boolean;\n /** Подсветка колонки под курсором (шапка + ячейки). */\n highlightColumnOnHover?: boolean;\n /** Чередование фона строк (зебра). */\n striped?: boolean;\n};\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n}\n\nfunction isDate(value: unknown): value is Date {\n return value instanceof Date;\n}\n\nfunction comparePrimitive(a: unknown, b: unknown): number {\n if (a == null && b == null) return 0;\n if (a == null) return 1;\n if (b == null) return -1;\n\n if (typeof a === \"number\" && typeof b === \"number\") return a - b;\n if (typeof a === \"boolean\" && typeof b === \"boolean\") return Number(a) - Number(b);\n if (isDate(a) && isDate(b)) return a.getTime() - b.getTime();\n\n return String(a).localeCompare(String(b), undefined, {\n numeric: true,\n sensitivity: \"base\",\n });\n}\n\nfunction getColumnValue<Row>(row: Row, column: DataTableColumn<Row>): unknown {\n if (column.sortAccessor) return column.sortAccessor(row);\n\n if (typeof column.accessor === \"function\") return column.accessor(row);\n\n if (typeof column.accessor === \"string\") {\n const key = column.accessor as keyof Row;\n return row[key];\n }\n\n return undefined;\n}\n\nfunction renderColumnCell<Row>(row: Row, column: DataTableColumn<Row>): React.ReactNode {\n if (column.cell) return column.cell(row);\n const value = getColumnValue(row, column);\n if (value == null) return \"—\";\n return String(value);\n}\n\nfunction nextOrder(current: DataTableSortState, columnId: string): DataTableSortState {\n if (!current || current.columnId !== columnId) return { columnId, order: \"asc\" };\n if (current.order === \"asc\") return { columnId, order: \"desc\" };\n return null;\n}\n\nfunction sortIndicator(sort: DataTableSortState, columnId: string): string {\n if (!sort || sort.columnId !== columnId) return \"none\";\n return sort.order;\n}\n\nfunction DataTableRoot<Row>({\n columns,\n rows,\n size = \"m\",\n className,\n showHeader = true,\n stickyHeader = false,\n stickyFirstColumn = false,\n getRowKey,\n onRowClick,\n loading = false,\n loadingText = \"Загрузка данных…\",\n emptyText = \"Нет данных для отображения.\",\n dividerStyle = \"standard\",\n sort,\n defaultSort = null,\n onSortChange,\n page,\n defaultPage = 1,\n onPageChange,\n pageSize = 10,\n showPagination = true,\n siblingCount = 1,\n paginationSize,\n infiniteScroll = false,\n initialVisibleRows,\n infiniteBatchSize = 20,\n hasMore = false,\n loadingMore = false,\n onLoadMore,\n scrollHeight = 360,\n highlightRowOnHover = true,\n highlightColumnOnHover = false,\n striped = false,\n}: DataTableRootProps<Row>) {\n const [hoveredColumnId, setHoveredColumnId] = React.useState<string | null>(null);\n\n const clearHoveredColumn = React.useCallback(() => {\n setHoveredColumnId(null);\n }, []);\n\n const setHoveredColumn = React.useCallback(\n (columnId: string) => {\n if (highlightColumnOnHover) setHoveredColumnId(columnId);\n },\n [highlightColumnOnHover],\n );\n\n const [sortState, setSortState] = useControllableState<DataTableSortState>({\n value: sort,\n defaultValue: defaultSort,\n onChange: onSortChange,\n });\n\n const [pageState, setPageState] = useControllableState<number>({\n value: page,\n defaultValue: defaultPage,\n onChange: onPageChange,\n });\n\n const initialVisible = Math.max(1, initialVisibleRows ?? pageSize);\n const [visibleRowCount, setVisibleRowCount] = React.useState(initialVisible);\n const scrollRef = React.useRef<HTMLDivElement | null>(null);\n const sentinelRef = React.useRef<HTMLDivElement | null>(null);\n\n React.useLayoutEffect(() => {\n const viewport = scrollRef.current;\n if (!viewport) return;\n\n viewport.style.maxHeight = infiniteScroll\n ? typeof scrollHeight === \"number\"\n ? `${scrollHeight}px`\n : scrollHeight\n : \"\";\n }, [infiniteScroll, scrollHeight]);\n\n const sortableColumns = React.useMemo(\n () => new Set(columns.filter((c) => c.sortable).map((c) => c.id)),\n [columns],\n );\n\n const sortedRows = React.useMemo(() => {\n if (!sortState || !sortableColumns.has(sortState.columnId)) return rows;\n\n const column = columns.find((item) => item.id === sortState.columnId);\n if (!column) return rows;\n\n const direction = sortState.order === \"asc\" ? 1 : -1;\n return rows\n .map((row, index) => ({ row, index }))\n .sort((a, b) => {\n const compared = column.sortComparator\n ? column.sortComparator(a.row, b.row, sortState.order)\n : comparePrimitive(getColumnValue(a.row, column), getColumnValue(b.row, column));\n\n if (compared === 0) return a.index - b.index;\n return compared * direction;\n })\n .map((item) => item.row);\n }, [columns, rows, sortState, sortableColumns]);\n\n const totalRows = sortedRows.length;\n const safePageSize = Math.max(1, pageSize);\n const totalPages = Math.max(1, Math.ceil(totalRows / safePageSize));\n const safePage = clamp(pageState, 1, totalPages);\n\n React.useEffect(() => {\n if (safePage !== pageState) setPageState(safePage);\n }, [pageState, safePage, setPageState]);\n\n React.useEffect(() => {\n if (infiniteScroll) {\n setVisibleRowCount(initialVisible);\n return;\n }\n setPageState(1);\n }, [infiniteScroll, initialVisible, setPageState]);\n\n React.useEffect(() => {\n if (!infiniteScroll) return;\n setVisibleRowCount((prev) => clamp(prev, initialVisible, Math.max(initialVisible, totalRows)));\n }, [infiniteScroll, initialVisible, totalRows]);\n\n const displayedRows = React.useMemo(() => {\n if (infiniteScroll) {\n return sortedRows.slice(0, visibleRowCount);\n }\n const from = (safePage - 1) * safePageSize;\n const to = from + safePageSize;\n return sortedRows.slice(from, to);\n }, [infiniteScroll, safePage, safePageSize, sortedRows, visibleRowCount]);\n\n const hasInternalMore = infiniteScroll && displayedRows.length < totalRows;\n const canRequestMore = infiniteScroll && Boolean(onLoadMore) && hasMore && !loadingMore;\n\n const handleReachEnd = React.useCallback(() => {\n if (!infiniteScroll) return;\n\n if (hasInternalMore) {\n setVisibleRowCount((prev) => Math.min(prev + Math.max(1, infiniteBatchSize), totalRows));\n return;\n }\n\n if (canRequestMore && onLoadMore) {\n void onLoadMore();\n }\n }, [canRequestMore, hasInternalMore, infiniteBatchSize, infiniteScroll, onLoadMore, totalRows]);\n\n React.useEffect(() => {\n if (!infiniteScroll) return;\n const root = scrollRef.current;\n const target = sentinelRef.current;\n if (!root || !target) return;\n\n if (typeof IntersectionObserver === \"undefined\") {\n const onScroll = () => {\n const nearBottom = root.scrollTop + root.clientHeight >= root.scrollHeight - 64;\n if (nearBottom) {\n handleReachEnd();\n }\n };\n root.addEventListener(\"scroll\", onScroll);\n return () => root.removeEventListener(\"scroll\", onScroll);\n }\n\n const observer = new IntersectionObserver(\n (entries) => {\n const [entry] = entries;\n if (entry?.isIntersecting) {\n handleReachEnd();\n }\n },\n { root, rootMargin: DATA_TABLE_INFINITE_ROOT_MARGIN, threshold: 0.01 },\n );\n\n observer.observe(target);\n return () => observer.disconnect();\n }, [handleReachEnd, infiniteScroll]);\n\n const fromRow = totalRows === 0 ? 0 : infiniteScroll ? 1 : (safePage - 1) * safePageSize + 1;\n const toRow =\n totalRows === 0\n ? 0\n : infiniteScroll\n ? displayedRows.length\n : fromRow + displayedRows.length - 1;\n\n return (\n <ControlSizeProvider value={size}>\n <div\n className={cx(styles.root, className)}\n {...toDataAttributes({\n size,\n divider: dividerStyle,\n \"show-header\": showHeader,\n \"sticky-header\": stickyHeader,\n \"sticky-first-column\": stickyFirstColumn,\n \"highlight-row\": highlightRowOnHover,\n \"highlight-column\": highlightColumnOnHover,\n striped,\n })}\n >\n <div ref={scrollRef} className={styles.viewport}>\n <table\n className={styles.table}\n onMouseLeave={highlightColumnOnHover ? clearHoveredColumn : undefined}\n >\n <colgroup>\n {columns.map((column) => (\n <col key={column.id} width={column.width ?? column.minWidth} />\n ))}\n </colgroup>\n\n {showHeader ? (\n <thead className={styles.head}>\n <tr className={styles.headRow}>\n {columns.map((column, columnIndex) => {\n const align = column.align ?? \"start\";\n const indicator = sortIndicator(sortState, column.id);\n const isSortable = Boolean(column.sortable);\n const isFirstColumn = columnIndex === 0;\n return (\n <th\n key={column.id}\n className={cx(\n styles.headCell,\n stickyFirstColumn && isFirstColumn && styles.firstColumnSticky,\n stickyHeader &&\n stickyFirstColumn &&\n isFirstColumn &&\n styles.cornerCellSticky,\n )}\n data-align={align}\n data-sortable={isSortable ? \"true\" : undefined}\n data-first-column={isFirstColumn ? \"true\" : undefined}\n data-column-id={column.id}\n data-column-hovered={\n highlightColumnOnHover && hoveredColumnId === column.id\n ? \"true\"\n : undefined\n }\n scope=\"col\"\n onMouseEnter={() => setHoveredColumn(column.id)}\n onClick={(event) => {\n column.onHeaderClick?.(event);\n if (!isSortable) return;\n const next = nextOrder(sortState, column.id);\n setSortState(next);\n setPageState(1);\n }}\n >\n {column.sortable ? (\n <span className={styles.sortButton}>\n <span className={styles.sortLabel}>{column.header}</span>\n <span className={styles.sortIcon} aria-hidden=\"true\">\n {indicator === \"asc\" ? (\n <ArrowUp className={styles.sortGlyph} strokeWidth={2} />\n ) : indicator === \"desc\" ? (\n <ArrowDown className={styles.sortGlyph} strokeWidth={2} />\n ) : (\n <ArrowUpDown className={styles.sortGlyph} strokeWidth={2} />\n )}\n </span>\n </span>\n ) : (\n <span className={styles.headLabel}>{column.header}</span>\n )}\n </th>\n );\n })}\n </tr>\n </thead>\n ) : null}\n\n <tbody className={styles.body}>\n {loading && displayedRows.length === 0 ? (\n <tr>\n <td colSpan={columns.length} className={styles.stateCell}>\n {loadingText}\n </td>\n </tr>\n ) : null}\n\n {!loading && displayedRows.length === 0 ? (\n <tr>\n <td colSpan={columns.length} className={styles.stateCell}>\n {emptyText}\n </td>\n </tr>\n ) : null}\n\n {displayedRows.map((row, index) => (\n <tr\n key={getRowKey ? getRowKey(row, index) : index}\n className={styles.row}\n data-stripe={striped && index % 2 === 1 ? \"alt\" : undefined}\n onClick={(event) => onRowClick?.(row, index, event)}\n >\n {columns.map((column, columnIndex) => {\n const isFirstColumn = columnIndex === 0;\n const isCellClickable = Boolean(column.onCellClick);\n return (\n <td\n key={column.id}\n className={cx(\n styles.cell,\n stickyFirstColumn && isFirstColumn && styles.firstColumnSticky,\n )}\n data-align={column.align ?? \"start\"}\n data-first-column={isFirstColumn ? \"true\" : undefined}\n data-column-id={column.id}\n data-column-hovered={\n highlightColumnOnHover && hoveredColumnId === column.id\n ? \"true\"\n : undefined\n }\n onMouseEnter={() => setHoveredColumn(column.id)}\n onClick={(event) => column.onCellClick?.(row, event)}\n role={isCellClickable ? \"button\" : undefined}\n tabIndex={isCellClickable ? 0 : undefined}\n onKeyDown={\n isCellClickable\n ? (event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n column.onCellClick?.(row, event);\n }\n }\n : undefined\n }\n >\n {renderColumnCell(row, column)}\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n\n {infiniteScroll ? (\n <div ref={sentinelRef} className={styles.sentinel} aria-hidden=\"true\" />\n ) : null}\n </div>\n\n <div className={styles.footer}>\n <p className={styles.meta}>\n Показано {fromRow}–{toRow} из {totalRows}\n </p>\n\n {!infiniteScroll && showPagination && totalPages > 1 ? (\n <Pagination.Root\n page={safePage}\n totalPages={totalPages}\n onPageChange={setPageState}\n siblingCount={siblingCount}\n size={paginationSize ?? size}\n />\n ) : null}\n\n {infiniteScroll && (hasInternalMore || loadingMore || canRequestMore) ? (\n <p className={styles.meta}>\n {loadingMore ? \"Догружаем строки…\" : \"Прокрутите вниз для загрузки\"}\n </p>\n ) : null}\n </div>\n </div>\n </ControlSizeProvider>\n );\n}\n\nDataTableRoot.displayName = \"DataTableRoot\";\n\nexport const DataTable = {\n Root: DataTableRoot,\n};\n",".root {\n margin: 0;\n color: var(--prime-sys-color-content-primary);\n text-wrap: balance;\n font-style: var(--prime-sys-typography-style-normal);\n font-weight: var(--prime-sys-typography-weight-regular);\n letter-spacing: var(--prime-sys-typography-tracking-normal);\n}\n\n.root[data-tone=\"muted\"] {\n color: var(--prime-sys-color-content-secondary);\n}\n\n.root[data-italic=\"true\"] {\n font-style: var(--prime-sys-typography-style-italic);\n}\n\n.root[data-weight=\"medium\"] {\n font-weight: var(--prime-sys-typography-weight-medium);\n}\n\n.root[data-weight=\"semibold\"] {\n font-weight: var(--prime-sys-typography-weight-semibold);\n}\n\n.root[data-tracking=\"tight\"] {\n letter-spacing: var(--prime-sys-typography-tracking-tight);\n}\n\n.root[data-tracking=\"tighter\"] {\n letter-spacing: var(--prime-sys-typography-tracking-tighter);\n}\n\n.root[data-tracking=\"wide\"] {\n letter-spacing: var(--prime-sys-typography-tracking-wide);\n}\n\n.root[data-size=\"2xs\"] {\n font-size: var(--prime-sys-typography-sizeScale-2xs);\n line-height: var(--prime-sys-typography-lineHeightScale-2xs);\n}\n\n.root[data-size=\"xs\"] {\n font-size: var(--prime-sys-typography-sizeScale-xs);\n line-height: var(--prime-sys-typography-lineHeightScale-xs);\n}\n\n.root[data-size=\"s\"] {\n font-size: var(--prime-sys-typography-sizeScale-s);\n line-height: var(--prime-sys-typography-lineHeightScale-s);\n}\n\n.root[data-size=\"m\"] {\n font-size: var(--prime-sys-typography-sizeScale-m);\n line-height: var(--prime-sys-typography-lineHeightScale-m);\n}\n\n.root[data-size=\"l\"] {\n font-size: var(--prime-sys-typography-sizeScale-l);\n line-height: var(--prime-sys-typography-lineHeightScale-l);\n}\n\n.root[data-size=\"xl\"] {\n font-size: var(--prime-sys-typography-sizeScale-xl);\n line-height: var(--prime-sys-typography-lineHeightScale-xl);\n}\n\n.root[data-size=\"2xl\"] {\n font-size: var(--prime-sys-typography-sizeScale-2xl);\n line-height: var(--prime-sys-typography-lineHeightScale-2xl);\n}\n\n.root[data-size=\"3xl\"] {\n font-size: var(--prime-sys-typography-sizeScale-3xl);\n line-height: var(--prime-sys-typography-lineHeightScale-3xl);\n}\n\n.root[data-size=\"4xl\"] {\n font-size: var(--prime-sys-typography-sizeScale-4xl);\n line-height: var(--prime-sys-typography-lineHeightScale-4xl);\n}\n\n.root[data-size=\"5xl\"] {\n font-size: var(--prime-sys-typography-sizeScale-5xl);\n line-height: var(--prime-sys-typography-lineHeightScale-5xl);\n}\n\n.root[data-size=\"6xl\"] {\n font-size: var(--prime-sys-typography-sizeScale-6xl);\n line-height: var(--prime-sys-typography-lineHeightScale-6xl);\n}\n","import * as React from \"react\";\n\nimport { cx } from \"@/internal/cx\";\nimport { toDataAttributes } from \"@/internal/data-attributes\";\n\nimport styles from \"./Typography.module.css\";\n\nexport type TypographySize =\n | \"2xs\"\n | \"xs\"\n | \"s\"\n | \"m\"\n | \"l\"\n | \"xl\"\n | \"2xl\"\n | \"3xl\"\n | \"4xl\"\n | \"5xl\"\n | \"6xl\";\n\nexport type TypographyWeight = \"regular\" | \"medium\" | \"semibold\";\n\nexport type TypographyTracking = \"normal\" | \"tight\" | \"tighter\" | \"wide\";\n\nexport type TypographyTone = \"default\" | \"muted\";\n\nexport type TypographyAs = \"p\" | \"span\" | \"div\";\n\nexport type TypographyRootProps = {\n as?: TypographyAs;\n size: TypographySize;\n weight?: TypographyWeight;\n tracking?: TypographyTracking;\n italic?: boolean;\n tone?: TypographyTone;\n children?: React.ReactNode;\n className?: string;\n} & React.HTMLAttributes<HTMLElement>;\n\nconst TypographyRoot = React.forwardRef<HTMLElement, TypographyRootProps>(\n (\n {\n as: Tag = \"p\",\n size,\n weight = \"regular\",\n tracking = \"normal\",\n italic = false,\n tone = \"default\",\n className,\n children,\n ...rest\n },\n ref,\n ) => {\n return (\n <Tag\n ref={ref as never}\n className={cx(styles.root, className)}\n {...rest}\n {...toDataAttributes({\n size,\n weight: weight === \"regular\" ? undefined : weight,\n tracking: tracking === \"normal\" ? undefined : tracking,\n tone: tone === \"default\" ? undefined : tone,\n ...(italic ? { italic: true } : {}),\n })}\n >\n {children}\n </Tag>\n );\n },\n);\n\nTypographyRoot.displayName = \"Typography.Root\";\n\nexport const Typography = { Root: TypographyRoot };\n","import * as React from \"react\";\n\nexport type ResponsiveMonthsBreakpoints = {\n /** Минимальная ширина для двух колонок месяцев */\n twoColumns: number;\n};\n\nconst DEFAULT_BREAKPOINTS: ResponsiveMonthsBreakpoints = {\n twoColumns: 520,\n};\n\n/**\n * Число колонок календаря (1 или 2) по ширине DOM-элемента-контейнера.\n *\n * Принимает `HTMLElement | null` напрямую (не RefObject), поэтому правильно\n * реагирует на монтирование через callback-ref + state в компоненте-потребителе:\n *\n * ```tsx\n * const [el, setEl] = useState<HTMLElement | null>(null);\n * const months = useResponsiveMonths(breakpoints, el);\n * // <div ref={setEl}>...</div>\n * ```\n */\nexport function useResponsiveMonths(\n breakpoints: ResponsiveMonthsBreakpoints = DEFAULT_BREAKPOINTS,\n container: HTMLElement | null = null,\n): 1 | 2 {\n const { twoColumns } = breakpoints;\n const [count, setCount] = React.useState<1 | 2>(1);\n\n React.useEffect(() => {\n if (!container) return;\n\n let rafId: number | null = null;\n\n const syncByWidth = (width: number) => {\n setCount(width >= twoColumns ? 2 : 1);\n };\n\n const measure = () => {\n // getBoundingClientRect учитывает CSS-трансформы и более надёжен чем clientWidth\n const width =\n container.getBoundingClientRect().width || container.offsetWidth || container.clientWidth;\n\n if (width > 0) {\n syncByWidth(width);\n } else {\n // Элемент ещё не отрисован — повторить на следующем кадре\n rafId = requestAnimationFrame(measure);\n }\n };\n\n // Первоначальное измерение\n measure();\n\n if (typeof ResizeObserver === \"undefined\")\n return () => {\n if (rafId !== null) cancelAnimationFrame(rafId);\n };\n\n const ro = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (!entry) return;\n // contentRect.width может быть 0 при скрытом элементе; fallback на BoundingRect\n const w =\n entry.contentRect.width || (entry.target as HTMLElement).getBoundingClientRect().width;\n syncByWidth(w);\n });\n\n ro.observe(container);\n\n return () => {\n if (rafId !== null) cancelAnimationFrame(rafId);\n ro.disconnect();\n };\n }, [container, twoColumns]);\n\n return count;\n}\n","/* Дополняет react-day-picker/style.css и синхронизирует датпикер с Prime tokens */\n\n/* ─── Корневой блок календаря ─────────────────────────────────────────────── */\n\n.pickerRoot {\n --dp-control-height: var(--prime-sys-size-control-m-height);\n --dp-control-icon: var(--prime-sys-size-control-m-icon);\n --dp-control-gap: var(--prime-sys-size-control-m-gap);\n --dp-control-text: var(--prime-sys-size-control-m-text);\n --dp-support-text: var(--prime-sys-size-control-m-supportText);\n --dp-shell-gap: var(--prime-sys-spacing-x4);\n --dp-month-gap: var(--prime-sys-spacing-x4);\n --dp-header-pad-x: var(--prime-sys-spacing-x2);\n --dp-header-gap: var(--prime-sys-spacing-x2);\n --dp-nav-control-height: var(--prime-sys-size-control-s-height);\n\n --rdp-accent-color: var(--prime-sys-color-action-primaryBackground);\n --rdp-accent-background-color: var(--prime-sys-color-surface-accentSoft);\n --rdp-day-height: var(--dp-control-height);\n --rdp-day-width: var(--dp-control-height);\n --rdp-day_button-height: var(--dp-control-height);\n --rdp-day_button-width: var(--dp-control-height);\n --rdp-day_button-border-radius: var(--prime-sys-size-control-m-radius);\n --rdp-months-gap: var(--dp-month-gap);\n --rdp-nav_button-height: var(--dp-control-height);\n --rdp-nav_button-width: var(--dp-control-height);\n --rdp-nav-height: var(--dp-control-height);\n --rdp-weekday-padding: var(--prime-sys-spacing-x1) 0;\n --rdp-range_start-color: var(--prime-sys-color-content-inverse);\n --rdp-range_end-color: var(--prime-sys-color-content-inverse);\n\n box-sizing: border-box;\n position: relative;\n width: 100%;\n max-width: 100%;\n padding: 0;\n border: 0;\n border-radius: 0;\n background: transparent;\n box-shadow: none;\n font-family: inherit;\n font-size: var(--dp-control-text);\n color: var(--prime-sys-color-content-primary);\n}\n\n.pickerRoot[data-size=\"s\"] {\n --dp-control-height: var(--prime-sys-size-control-s-height);\n --dp-control-icon: var(--prime-sys-size-control-s-icon);\n --dp-control-gap: var(--prime-sys-size-control-s-gap);\n --dp-control-text: var(--prime-sys-size-control-s-text);\n --dp-support-text: var(--prime-sys-size-control-s-supportText);\n --dp-shell-gap: var(--prime-sys-spacing-x3);\n --dp-month-gap: var(--prime-sys-spacing-x3);\n --dp-header-pad-x: var(--prime-sys-spacing-x2);\n --dp-nav-control-height: var(--prime-sys-size-control-xs-height);\n}\n\n.pickerRoot[data-size=\"l\"] {\n --dp-control-height: var(--prime-sys-size-control-l-height);\n --dp-control-icon: var(--prime-sys-size-control-l-icon);\n --dp-control-gap: var(--prime-sys-size-control-l-gap);\n --dp-control-text: var(--prime-sys-size-control-l-text);\n --dp-support-text: var(--prime-sys-size-control-l-supportText);\n --dp-shell-gap: var(--prime-sys-spacing-x5);\n --dp-month-gap: var(--prime-sys-spacing-x5);\n --dp-header-pad-x: var(--prime-sys-spacing-x3);\n --dp-nav-control-height: var(--prime-sys-size-control-m-height);\n}\n\n.pickerRoot[data-size=\"xl\"] {\n --dp-control-height: var(--prime-sys-size-control-xl-height);\n --dp-control-icon: var(--prime-sys-size-control-xl-icon);\n --dp-control-gap: var(--prime-sys-size-control-xl-gap);\n --dp-control-text: var(--prime-sys-size-control-xl-text);\n --dp-support-text: var(--prime-sys-size-control-xl-supportText);\n --dp-shell-gap: var(--prime-sys-spacing-x6);\n --dp-month-gap: var(--prime-sys-spacing-x6);\n --dp-header-pad-x: var(--prime-sys-spacing-x3);\n --dp-nav-control-height: var(--prime-sys-size-control-l-height);\n}\n\n/* ─── Day-button: transitions, hover, today, selected ───────────────────── */\n\n.pickerRoot :global(.rdp-day_button) {\n transition:\n background-color var(--prime-sys-motion-fast) var(--prime-sys-motion-standard),\n color var(--prime-sys-motion-fast) var(--prime-sys-motion-standard),\n box-shadow var(--prime-sys-motion-fast) var(--prime-sys-motion-standard);\n font-size: var(--dp-control-text);\n font-weight: var(--prime-sys-typography-weight-medium);\n}\n\n.pickerRoot :global(.rdp-day_button:hover:not([disabled]):not([aria-selected=\"true\"])) {\n background-color: var(--prime-sys-color-action-primarySoftBackground);\n color: var(--prime-sys-color-action-primarySoftForeground);\n}\n\n/* Текущая дата: акцентный цвет текста, если не выбрана */\n.pickerRoot :global(.rdp-today:not(.rdp-selected):not(.rdp-range_middle) .rdp-day_button) {\n color: var(--prime-sys-color-action-primaryBackground);\n font-weight: var(--prime-sys-typography-weight-semibold);\n}\n\n/* Выбранная дата (single + range_start + range_end) — единый стиль: залитый фон */\n.pickerRoot :global(.rdp-day_button[aria-selected=\"true\"]) {\n background-color: var(--prime-sys-color-action-primaryBackground);\n color: var(--prime-sys-color-action-primaryForeground);\n box-shadow: var(--prime-sys-elevation-shadow-surface);\n}\n\n/* Средина диапазона перекрывает залитый фон выше */\n.pickerRoot :global(.rdp-range_middle) {\n background-color: var(--prime-sys-color-action-primarySoftBackground);\n}\n\n.pickerRoot :global(.rdp-range_middle .rdp-day_button) {\n background-color: transparent;\n color: var(--prime-sys-color-action-primarySoftForeground);\n font-weight: var(--prime-sys-typography-weight-semibold);\n box-shadow: none;\n}\n\n.pickerRoot :global(.rdp-day_button:focus-visible) {\n outline: none;\n box-shadow: var(--prime-sys-elevation-shadow-buttonFocus);\n}\n\n/* ─── Сетка месяцев ─────────────────────────────────────────────────────── */\n\n.months {\n display: flex;\n flex-wrap: wrap;\n width: 100%;\n max-width: none;\n gap: var(--dp-month-gap);\n}\n\n.month {\n min-width: min(100%, var(--prime-sys-unit-15rem));\n flex: 1 1 min(100%, var(--prime-sys-unit-15rem));\n display: flex;\n flex-direction: column;\n gap: var(--prime-sys-spacing-x2);\n}\n\n/* react-day-picker рендерит <table> без явной ширины */\n.pickerRoot :global(.rdp-month_grid) {\n width: 100%;\n}\n\n/* ─── Навигация (prev/next) ─────────────────────────────────────────────── */\n\n.nav {\n display: none;\n}\n\n.navButton {\n flex: 0 0 auto;\n}\n\n.pickerRoot[data-size=\"s\"] .navButton {\n --prime-icon-size: var(--prime-sys-size-control-xs-icon);\n --prime-button-font-size: var(--prime-sys-size-control-xs-text);\n height: var(--prime-sys-size-control-xs-height);\n min-width: var(--prime-sys-size-control-xs-height);\n border-radius: var(--prime-sys-size-control-xs-radius);\n gap: var(--prime-sys-size-control-xs-gap);\n padding-inline: var(--prime-sys-size-control-xs-buttonPaddingX);\n padding-block: var(--prime-sys-size-control-xs-buttonPaddingY);\n}\n\n.pickerRoot[data-size=\"m\"] .navButton {\n --prime-icon-size: var(--prime-sys-size-control-s-icon);\n --prime-button-font-size: var(--prime-sys-size-control-s-text);\n height: var(--prime-sys-size-control-s-height);\n min-width: var(--prime-sys-size-control-s-height);\n border-radius: var(--prime-sys-size-control-s-radius);\n gap: var(--prime-sys-size-control-s-gap);\n padding-inline: var(--prime-sys-size-control-s-buttonPaddingX);\n padding-block: var(--prime-sys-size-control-s-buttonPaddingY);\n}\n\n.pickerRoot[data-size=\"l\"] .navButton {\n --prime-icon-size: var(--prime-sys-size-control-m-icon);\n --prime-button-font-size: var(--prime-sys-size-control-m-text);\n height: var(--prime-sys-size-control-m-height);\n min-width: var(--prime-sys-size-control-m-height);\n border-radius: var(--prime-sys-size-control-m-radius);\n gap: var(--prime-sys-size-control-m-gap);\n padding-inline: var(--prime-sys-size-control-m-buttonPaddingX);\n padding-block: var(--prime-sys-size-control-m-buttonPaddingY);\n}\n\n.pickerRoot[data-size=\"xl\"] .navButton {\n --prime-icon-size: var(--prime-sys-size-control-l-icon);\n --prime-button-font-size: var(--prime-sys-size-control-l-text);\n height: var(--prime-sys-size-control-l-height);\n min-width: var(--prime-sys-size-control-l-height);\n border-radius: var(--prime-sys-size-control-l-radius);\n gap: var(--prime-sys-size-control-l-gap);\n padding-inline: var(--prime-sys-size-control-l-buttonPaddingX);\n padding-block: var(--prime-sys-size-control-l-buttonPaddingY);\n}\n\n.monthCaption {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--dp-header-gap);\n width: 100%;\n min-height: 0;\n height: auto;\n margin-bottom: 0;\n padding: var(--dp-header-pad-x);\n border-radius: var(--prime-sys-shape-radius-m);\n background: var(--prime-sys-color-action-neutralBackgroundHover);\n box-sizing: border-box;\n font-size: var(--dp-control-text);\n font-weight: var(--prime-sys-typography-weight-semibold);\n text-align: center;\n}\n\n.monthCaptionLabel {\n flex: 1 1 auto;\n min-width: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n/* Текст заголовка месяца внутри общей pill-шапки */\n.monthCaptionLabel :global(.rdp-caption_label) {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-height: 100%;\n padding: 0;\n text-align: center;\n}\n\n.monthCaptionSpacer {\n width: var(--dp-nav-control-height);\n height: var(--dp-nav-control-height);\n flex: 0 0 var(--dp-nav-control-height);\n}\n\n.weekday {\n font-size: var(--dp-support-text);\n color: var(--prime-sys-color-content-secondary);\n font-weight: var(--prime-sys-typography-weight-medium);\n}\n\n/* ─── Shell — карточка-обёртка ───────────────────────────────────────────── */\n\n.shell {\n --dp-shell-gap: var(--prime-sys-spacing-x4);\n --dp-support-text: var(--prime-sys-size-control-m-supportText);\n\n display: flex;\n flex-direction: column;\n gap: var(--prime-sys-spacing-x3);\n width: 100%;\n max-width: 100%;\n min-width: 0;\n}\n\n.shell[data-size=\"s\"] {\n --dp-shell-gap: var(--prime-sys-spacing-x3);\n --dp-support-text: var(--prime-sys-size-control-s-supportText);\n gap: var(--prime-sys-spacing-x2);\n}\n\n.shell[data-size=\"l\"] {\n --dp-shell-gap: var(--prime-sys-spacing-x5);\n --dp-support-text: var(--prime-sys-size-control-l-supportText);\n gap: var(--prime-sys-spacing-x4);\n}\n\n.shell[data-size=\"xl\"] {\n --dp-shell-gap: var(--prime-sys-spacing-x6);\n --dp-support-text: var(--prime-sys-size-control-xl-supportText);\n gap: var(--prime-sys-spacing-x5);\n}\n\n/* ─── .presetsRow — полоса пресетов снизу ───────────────────────────────── */\n\n.presetsRow {\n width: 100%;\n overflow: hidden;\n border-top: var(--prime-sys-border-width-control) solid var(--prime-sys-color-border-subtle);\n background: var(--prime-sys-color-surface-raised);\n}\n\n/* ─── .presetsBlock — горизонтальный скролл-контейнер с кнопками ────────── */\n\n.presetsBlock {\n width: 100%;\n display: flex;\n flex-wrap: nowrap;\n align-items: center;\n gap: var(--prime-sys-spacing-x3);\n padding: var(--prime-sys-spacing-x3) var(--dp-shell-gap);\n overflow-x: auto;\n overflow-y: hidden;\n scrollbar-width: thin;\n box-sizing: border-box;\n}\n\n.presetsBlock[data-size=\"s\"] {\n gap: var(--prime-sys-spacing-x2);\n padding: var(--prime-sys-spacing-x2) var(--dp-shell-gap);\n}\n\n.presetsBlock[data-size=\"l\"] {\n gap: var(--prime-sys-spacing-x3);\n padding: var(--prime-sys-spacing-x3) var(--dp-shell-gap);\n}\n\n.presetsBlock[data-size=\"xl\"] {\n gap: var(--prime-sys-spacing-x4);\n padding: var(--prime-sys-spacing-x4) var(--dp-shell-gap);\n}\n\n.presetsGroup {\n flex-shrink: 0;\n flex-grow: 0;\n}\n\n/* ─── Time section ──────────────────────────────────────────────────────── */\n\n.timeSection {\n display: flex;\n flex-direction: column;\n gap: var(--prime-sys-spacing-x2);\n padding-top: var(--prime-sys-spacing-x3);\n border-top: var(--prime-sys-border-width-control) solid var(--prime-sys-color-border-subtle);\n}\n\n.timeSection[data-size=\"s\"] {\n padding-top: var(--prime-sys-spacing-x2);\n}\n\n.timeSection[data-size=\"l\"] {\n padding-top: var(--prime-sys-spacing-x4);\n}\n\n.timeSection[data-size=\"xl\"] {\n padding-top: var(--prime-sys-spacing-x5);\n}\n\n.timeRow {\n display: flex;\n flex-wrap: wrap;\n gap: var(--prime-sys-spacing-x3);\n}\n\n.timeField {\n flex: 1 1 min(100%, var(--prime-sys-unit-11rem));\n min-width: 0;\n}\n\n.timeInputRoot {\n width: 100%;\n}\n\n.timeInputField {\n font-variant-numeric: tabular-nums;\n}\n\n/* ─── Value text ────────────────────────────────────────────────────────── */\n\n.valueText {\n font-variant-numeric: tabular-nums;\n}\n\n/* ─── Viewport-обёртка Calendar ─────────────────────────────────────────── */\n\n.calendarViewport {\n min-width: 0;\n width: 100%;\n}\n","import { ChevronDown, ChevronLeft, ChevronRight } from \"lucide-react\";\nimport * as React from \"react\";\nimport {\n type ChevronProps,\n type DateRange,\n DayPicker,\n type DayPickerProps,\n getDefaultClassNames,\n useDayPicker,\n} from \"react-day-picker\";\n\nimport { Button } from \"@/components/button/Button\";\nimport { ButtonGroup } from \"@/components/button-group/ButtonGroup\";\nimport { Input } from \"@/components/input/Input\";\nimport type { TypographyRootProps, TypographySize } from \"@/components/typography/Typography\";\nimport { Typography } from \"@/components/typography/Typography\";\nimport { type ResponsiveMonthsBreakpoints, useResponsiveMonths } from \"@/hooks/useResponsiveMonths\";\nimport { cx } from \"@/internal/cx\";\nimport type { InputSize } from \"@/internal/states\";\n\nimport \"react-day-picker/style.css\";\n\nimport styles from \"./Datepicker.module.css\";\n\nexport type { DateRange };\n\n/**\n * Порог для переключения 1 → 2 месяца.\n * Layout не зависит от size: размер влияет только на типографику/отступы/кнопки.\n */\nconst DEFAULT_RESPONSIVE: ResponsiveMonthsBreakpoints = { twoColumns: 500 };\n\nexport type DatepickerSize = InputSize;\n\nconst DatepickerSizeContext = React.createContext<DatepickerSize | undefined>(undefined);\nDatepickerSizeContext.displayName = \"DatepickerSizeContext\";\n\ntype DatepickerMonthContextValue = {\n requestedMonth: Date | undefined;\n requestMonth: (next: Date | undefined) => void;\n};\n\nconst DatepickerMonthContext = React.createContext<DatepickerMonthContextValue | undefined>(\n undefined,\n);\nDatepickerMonthContext.displayName = \"DatepickerMonthContext\";\n\n/**\n * Маппинг размера пикера → размер шрифта Typography для `Datepicker.Value`.\n * Используем шкалу support-text, чтобы подпись выглядела как caption.\n */\nconst VALUE_TYPOGRAPHY_SIZE_BY_PICKER_SIZE: Record<DatepickerSize, TypographySize> = {\n s: \"2xs\",\n m: \"xs\",\n l: \"s\",\n xl: \"m\",\n};\n\nfunction pad2(n: number): string {\n return String(n).padStart(2, \"0\");\n}\n\n/** Значение для `<input type=\"time\" />` в локальном времени */\nexport function formatTimeInputValue(date: Date | undefined): string {\n if (!date) {\n return \"\";\n }\n return `${pad2(date.getHours())}:${pad2(date.getMinutes())}`;\n}\n\n/** Подставляет часы и минуты из строки `HH:mm` в дату */\nexport function mergeTimeIntoDate(date: Date, timeHHmm: string): Date {\n const [h, m] = timeHHmm.split(\":\").map((x) => Number.parseInt(x, 10));\n const next = new Date(date);\n next.setHours(Number.isFinite(h) ? h : 0, Number.isFinite(m) ? m : 0, 0, 0);\n return next;\n}\n\nfunction DatepickerChevron({ orientation, className, size = 17 }: ChevronProps) {\n if (orientation === \"left\") {\n return <ChevronLeft aria-hidden className={className} size={size} strokeWidth={1.75} />;\n }\n if (orientation === \"right\") {\n return <ChevronRight aria-hidden className={className} size={size} strokeWidth={1.75} />;\n }\n return (\n <ChevronDown\n aria-hidden\n className={className}\n size={size}\n strokeWidth={1.75}\n style={orientation === \"up\" ? { transform: \"rotate(180deg)\" } : undefined}\n />\n );\n}\n\ntype DatepickerNavButtonProps = React.ComponentPropsWithoutRef<\"button\"> & {\n direction: \"prev\" | \"next\";\n size: DatepickerSize;\n};\n\nfunction DatepickerNavButton({ className, direction, size, ...rest }: DatepickerNavButtonProps) {\n return (\n <Button.Root\n {...rest}\n className={cx(styles.navButton, className)}\n mode=\"lighter\"\n size={size}\n variant=\"neutral\"\n >\n <Button.Icon>\n {direction === \"prev\" ? (\n <ChevronLeft aria-hidden strokeWidth={1.75} />\n ) : (\n <ChevronRight aria-hidden strokeWidth={1.75} />\n )}\n </Button.Icon>\n </Button.Root>\n );\n}\n\nDatepickerNavButton.displayName = \"DatepickerNavButton\";\n\ntype DatepickerMonthCaptionProps = Parameters<\n NonNullable<NonNullable<DayPickerProps[\"components\"]>[\"MonthCaption\"]>\n>[0];\n\nfunction DatepickerMonthCaption({\n className,\n children,\n displayIndex,\n ...rest\n}: DatepickerMonthCaptionProps) {\n const inheritedSize = React.useContext(DatepickerSizeContext);\n const size = inheritedSize ?? \"m\";\n const { dayPickerProps, goToMonth, previousMonth, nextMonth } = useDayPicker();\n\n const monthsCount = dayPickerProps.numberOfMonths ?? 1;\n const monthIndex = displayIndex ?? 0;\n const canGoPrev = monthIndex === 0 && previousMonth != null;\n const canGoNext = monthIndex === monthsCount - 1 && nextMonth != null;\n\n return (\n <div {...rest} className={cx(styles.monthCaption, className)}>\n {canGoPrev ? (\n <DatepickerNavButton\n aria-label=\"Go to the Previous Month\"\n direction=\"prev\"\n size={size}\n onClick={() => {\n if (previousMonth) {\n goToMonth(previousMonth);\n }\n }}\n />\n ) : (\n <span aria-hidden className={styles.monthCaptionSpacer} />\n )}\n <div className={styles.monthCaptionLabel}>{children}</div>\n {canGoNext ? (\n <DatepickerNavButton\n aria-label=\"Go to the Next Month\"\n direction=\"next\"\n size={size}\n onClick={() => {\n if (nextMonth) {\n goToMonth(nextMonth);\n }\n }}\n />\n ) : (\n <span aria-hidden className={styles.monthCaptionSpacer} />\n )}\n </div>\n );\n}\n\nDatepickerMonthCaption.displayName = \"DatepickerMonthCaption\";\n\nexport type DatepickerCalendarProps = DayPickerProps & {\n /**\n * Подстраивать `numberOfMonths` под ширину контейнера (1 / 2 колонки).\n * Если `true`, проп `numberOfMonths` игнорируется.\n */\n responsiveMonths?: boolean;\n /** Порог ширины для 2 колонок */\n responsiveBreakpoints?: ResponsiveMonthsBreakpoints;\n /** Размер календаря: влияет на кегль, ячейки и кнопки навигации */\n size?: DatepickerSize;\n};\n\nfunction Calendar({\n responsiveMonths,\n responsiveBreakpoints,\n numberOfMonths: numberOfMonthsProp,\n classNames: userClassNames,\n components: userComponents,\n style,\n weekStartsOn,\n navLayout,\n month: monthProp,\n onMonthChange,\n size: sizeProp,\n ...rest\n}: DatepickerCalendarProps) {\n const inheritedSize = React.useContext(DatepickerSizeContext);\n const monthContext = React.useContext(DatepickerMonthContext);\n const size = sizeProp ?? inheritedSize ?? \"m\";\n const breakpoints = responsiveBreakpoints ?? DEFAULT_RESPONSIVE;\n\n /**\n * Callback-ref → state: гарантирует, что хук получит реальный DOM-элемент\n * сразу при монтировании, и ResizeObserver начнёт наблюдение корректно.\n * useRef + useEffect([containerRef]) не работал: ref-объект стабилен,\n * эффект не пересчитывался, clientWidth мог быть 0 до первого paint.\n */\n const [containerEl, setContainerEl] = React.useState<HTMLElement | null>(null);\n const callbackRef = React.useCallback((node: HTMLDivElement | null) => {\n setContainerEl(node);\n }, []);\n\n const responsiveN = useResponsiveMonths(breakpoints, containerEl);\n const numberOfMonths = responsiveMonths === true ? responsiveN : (numberOfMonthsProp ?? 1);\n\n const [localMonth, setLocalMonth] = React.useState<Date | undefined>(() => {\n return monthProp ?? monthContext?.requestedMonth;\n });\n\n React.useEffect(() => {\n if (monthProp === undefined && monthContext?.requestedMonth) {\n setLocalMonth(monthContext.requestedMonth);\n }\n }, [monthContext?.requestedMonth, monthProp]);\n\n const dfn = getDefaultClassNames();\n const classNames = {\n ...dfn,\n ...userClassNames,\n root: cx(dfn.root, styles.pickerRoot, userClassNames?.root),\n months: cx(dfn.months, styles.months, userClassNames?.months),\n month: cx(dfn.month, styles.month, userClassNames?.month),\n nav: cx(dfn.nav, styles.nav, userClassNames?.nav),\n month_caption: cx(dfn.month_caption, styles.monthCaption, userClassNames?.month_caption),\n weekday: cx(dfn.weekday, styles.weekday, userClassNames?.weekday),\n };\n\n const mergedStyle: React.CSSProperties = style && typeof style === \"object\" ? { ...style } : {};\n\n const resolvedMonth = monthProp ?? localMonth;\n\n const handleMonthChange = React.useCallback(\n (next: Date) => {\n if (monthProp === undefined) {\n setLocalMonth(next);\n }\n monthContext?.requestMonth(next);\n onMonthChange?.(next);\n },\n [monthContext, monthProp, onMonthChange],\n );\n\n return (\n <div ref={callbackRef} className={styles.calendarViewport}>\n <DayPicker\n {...rest}\n classNames={classNames}\n components={{\n Chevron: DatepickerChevron,\n MonthCaption: DatepickerMonthCaption,\n ...userComponents,\n }}\n data-size={size}\n navLayout={navLayout ?? \"after\"}\n month={resolvedMonth}\n numberOfMonths={numberOfMonths}\n onMonthChange={handleMonthChange}\n style={mergedStyle}\n weekStartsOn={weekStartsOn ?? 1}\n />\n </div>\n );\n}\n\nCalendar.displayName = \"Datepicker.Calendar\";\n\nexport type DatepickerShellProps = {\n children: React.ReactNode;\n className?: string;\n presets?: React.ReactNode;\n /** Размер всей оболочки датпикера */\n size?: DatepickerSize;\n};\n\nfunction Shell({ children, className, presets, size = \"m\" }: DatepickerShellProps) {\n const has = presets != null;\n const [requestedMonth, requestMonth] = React.useState<Date | undefined>();\n return (\n <DatepickerSizeContext.Provider value={size}>\n <DatepickerMonthContext.Provider value={{ requestedMonth, requestMonth }}>\n <div\n className={cx(styles.shell, className)}\n data-layout={has ? \"with-presets\" : undefined}\n data-size={size}\n >\n {children}\n {has && <div className={styles.presetsRow}>{presets}</div>}\n </div>\n </DatepickerMonthContext.Provider>\n </DatepickerSizeContext.Provider>\n );\n}\n\nShell.displayName = \"Datepicker.Shell\";\n\nexport type DatepickerPresetSingle = { label: string; date: Date | undefined };\nexport type DatepickerPresetRange = { label: string; range: DateRange | undefined };\n\nexport type DatepickerPresetsProps = {\n className?: string;\n title?: string;\n size?: DatepickerSize;\n} & (\n | {\n mode: \"single\";\n presets: DatepickerPresetSingle[];\n onSelect: (date: Date | undefined) => void;\n }\n | {\n mode: \"range\";\n presets: DatepickerPresetRange[];\n onSelect: (range: DateRange | undefined) => void;\n }\n);\n\nfunction Presets(props: DatepickerPresetsProps) {\n const inheritedSize = React.useContext(DatepickerSizeContext);\n const monthContext = React.useContext(DatepickerMonthContext);\n const { className, size: sizeProp } = props;\n const size = sizeProp ?? inheritedSize ?? \"m\";\n return (\n <div className={cx(styles.presetsBlock, className)} data-size={size}>\n <ButtonGroup.Root className={styles.presetsGroup} size={size}>\n {props.mode === \"single\"\n ? props.presets.map((p) => (\n <ButtonGroup.Item\n key={p.label}\n type=\"button\"\n onClick={() => {\n monthContext?.requestMonth(p.date);\n props.onSelect(p.date);\n }}\n >\n {p.label}\n </ButtonGroup.Item>\n ))\n : props.presets.map((p) => (\n <ButtonGroup.Item\n key={p.label}\n type=\"button\"\n onClick={() => {\n monthContext?.requestMonth(p.range?.from);\n props.onSelect(p.range);\n }}\n >\n {p.label}\n </ButtonGroup.Item>\n ))}\n </ButtonGroup.Root>\n </div>\n );\n}\n\nPresets.displayName = \"Datepicker.Presets\";\n\nexport type DatepickerTimeSingleProps = {\n mode?: \"single\";\n size?: DatepickerSize;\n value: Date | undefined;\n onChange: (next: Date) => void;\n labels?: { time?: string };\n};\n\nexport type DatepickerTimeRangeProps = {\n mode: \"range\";\n size?: DatepickerSize;\n from: Date | undefined;\n to: Date | undefined;\n onFromChange: (next: Date) => void;\n onToChange: (next: Date) => void;\n labels?: { from?: string; to?: string };\n};\n\nexport type DatepickerTimeProps = DatepickerTimeSingleProps | DatepickerTimeRangeProps;\n\nfunction Time(props: DatepickerTimeProps) {\n const baseId = React.useId();\n const inheritedSize = React.useContext(DatepickerSizeContext);\n\n if (props.mode === \"range\") {\n const { from, to, onFromChange, onToChange, labels, size: sizeProp } = props;\n const size = sizeProp ?? inheritedSize ?? \"m\";\n const fromT = formatTimeInputValue(from);\n const toT = formatTimeInputValue(to);\n return (\n <div className={styles.timeSection} data-size={size}>\n <div className={styles.timeRow}>\n <div className={styles.timeField}>\n <Input.Root\n className={styles.timeInputRoot}\n id={`${baseId}-from`}\n label={labels?.from ?? \"Начало\"}\n size={size}\n >\n <Input.Wrapper>\n <Input.Field\n className={styles.timeInputField}\n disabled={!from}\n type=\"time\"\n value={fromT}\n onChange={(e) => {\n if (from) {\n onFromChange(mergeTimeIntoDate(from, e.target.value));\n }\n }}\n />\n </Input.Wrapper>\n </Input.Root>\n </div>\n <div className={styles.timeField}>\n <Input.Root\n className={styles.timeInputRoot}\n id={`${baseId}-to`}\n label={labels?.to ?? \"Конец\"}\n size={size}\n >\n <Input.Wrapper>\n <Input.Field\n className={styles.timeInputField}\n disabled={!to}\n type=\"time\"\n value={toT}\n onChange={(e) => {\n if (to) {\n onToChange(mergeTimeIntoDate(to, e.target.value));\n }\n }}\n />\n </Input.Wrapper>\n </Input.Root>\n </div>\n </div>\n </div>\n );\n }\n\n const { value, onChange, labels, size: sizeProp } = props;\n const size = sizeProp ?? inheritedSize ?? \"m\";\n const t = formatTimeInputValue(value);\n return (\n <div className={styles.timeSection} data-size={size}>\n <div className={styles.timeRow}>\n <div className={styles.timeField}>\n <Input.Root\n className={styles.timeInputRoot}\n id={`${baseId}-t`}\n label={labels?.time ?? \"Время\"}\n size={size}\n >\n <Input.Wrapper>\n <Input.Field\n className={styles.timeInputField}\n disabled={!value}\n type=\"time\"\n value={t}\n onChange={(e) => {\n if (value) {\n onChange(mergeTimeIntoDate(value, e.target.value));\n }\n }}\n />\n </Input.Wrapper>\n </Input.Root>\n </div>\n </div>\n </div>\n );\n}\n\nTime.displayName = \"Datepicker.Time\";\n\nexport type DatepickerValueProps = Omit<TypographyRootProps, \"size\"> & {\n size?: DatepickerSize;\n};\n\nfunction Value({ className, size: sizeProp, tone = \"muted\", ...rest }: DatepickerValueProps) {\n const inheritedSize = React.useContext(DatepickerSizeContext);\n const size = sizeProp ?? inheritedSize ?? \"m\";\n return (\n <Typography.Root\n {...rest}\n className={cx(styles.valueText, className)}\n size={VALUE_TYPOGRAPHY_SIZE_BY_PICKER_SIZE[size]}\n tone={tone}\n />\n );\n}\n\nValue.displayName = \"Datepicker.Value\";\n\nexport const Datepicker = {\n Calendar,\n Shell,\n Presets,\n Time,\n Value,\n};\n",".root {\n display: flex;\n justify-content: center;\n gap: var(--prime-digit-gap);\n border: none;\n margin: 0;\n padding: 0;\n min-width: 0;\n}\n\n.root[data-size=\"s\"] {\n --prime-digit-cell-size: var(--prime-sys-size-control-s-height);\n --prime-digit-cell-radius: var(--prime-sys-size-control-s-radius);\n --prime-digit-cell-text: var(--prime-sys-size-control-s-text);\n --prime-digit-gap: var(--prime-sys-size-control-s-gap);\n}\n\n.root[data-size=\"m\"] {\n --prime-digit-cell-size: var(--prime-sys-size-control-m-height);\n --prime-digit-cell-radius: var(--prime-sys-size-control-m-radius);\n --prime-digit-cell-text: var(--prime-sys-size-control-m-text);\n --prime-digit-gap: var(--prime-sys-size-control-m-gap);\n}\n\n.root[data-size=\"l\"] {\n --prime-digit-cell-size: var(--prime-sys-size-control-l-height);\n --prime-digit-cell-radius: var(--prime-sys-size-control-l-radius);\n --prime-digit-cell-text: var(--prime-sys-size-control-l-text);\n --prime-digit-gap: var(--prime-sys-size-control-l-gap);\n}\n\n.root[data-size=\"xl\"] {\n --prime-digit-cell-size: var(--prime-sys-size-control-xl-height);\n --prime-digit-cell-radius: var(--prime-sys-size-control-xl-radius);\n --prime-digit-cell-text: var(--prime-sys-size-control-xl-text);\n --prime-digit-gap: var(--prime-sys-size-control-xl-gap);\n}\n\n.root[data-disabled=\"true\"] {\n cursor: not-allowed;\n}\n\n.cell {\n box-sizing: border-box;\n width: var(--prime-digit-cell-size);\n min-width: 0;\n height: var(--prime-digit-cell-size);\n text-align: center;\n font-size: var(--prime-digit-cell-text);\n font-weight: var(--prime-sys-typography-weight-medium);\n line-height: var(--prime-sys-typography-body-lineHeight);\n border: var(--prime-sys-border-width-control) solid var(--prime-sys-color-field-border);\n border-radius: var(--prime-digit-cell-radius);\n background: var(--prime-sys-color-field-bg);\n color: var(--prime-sys-color-field-text);\n outline: none;\n transition:\n border-color var(--prime-sys-motion-medium),\n box-shadow var(--prime-sys-motion-medium);\n}\n\n.cell:focus {\n border-color: var(--prime-sys-color-field-borderFocus);\n box-shadow: var(--prime-sys-elevation-shadow-buttonFocus);\n}\n\n.root[data-has-error=\"true\"] .cell {\n border-color: var(--prime-sys-color-field-borderError);\n}\n\n.root[data-disabled=\"true\"] .cell {\n background: var(--prime-sys-color-surface-accentSoft);\n color: var(--prime-sys-color-content-disabled);\n cursor: not-allowed;\n}\n","import * as React from \"react\";\n\nimport type { DigitInputSize } from \"@/internal/states\";\n\nimport { useControllableState } from \"../../hooks/useControllableState\";\nimport { cx } from \"../../internal/cx\";\n\nimport styles from \"./DigitInput.module.css\";\n\nexport type { DigitInputSize };\n\nexport type DigitInputRootProps = {\n length?: number;\n size?: DigitInputSize;\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n disabled?: boolean;\n hasError?: boolean;\n onComplete?: (value: string) => void;\n className?: string;\n};\n\nfunction normalizeDigits(raw: string, len: number) {\n return raw.replace(/\\D/g, \"\").slice(0, len);\n}\n\nfunction toCells(value: string, len: number): string[] {\n const digits = normalizeDigits(value, len);\n const cells: string[] = [];\n for (let i = 0; i < len; i++) {\n cells.push(digits[i] ?? \"\");\n }\n return cells;\n}\n\nfunction createSlotKeys(len: number) {\n return Array.from({ length: len }, () => crypto.randomUUID());\n}\n\nfunction DigitInputRoot({\n length: lengthProp = 4,\n size = \"m\",\n value: valueProp,\n defaultValue = \"\",\n onChange,\n disabled,\n hasError,\n onComplete,\n className,\n}: DigitInputRootProps) {\n const length = lengthProp;\n const slotKeysRef = React.useRef<string[] | null>(null);\n if (!slotKeysRef.current || slotKeysRef.current.length !== length) {\n slotKeysRef.current = createSlotKeys(length);\n }\n const slotKeys = slotKeysRef.current;\n const defaultNormalized = normalizeDigits(defaultValue, length);\n const [value, setValue] = useControllableState({\n value: valueProp !== undefined ? normalizeDigits(valueProp, length) : undefined,\n defaultValue: defaultNormalized,\n onChange,\n });\n\n const prevLenRef = React.useRef(0);\n\n React.useEffect(() => {\n prevLenRef.current = normalizeDigits(value, length).length;\n }, [length, value]);\n\n const commit = React.useCallback(\n (nextRaw: string) => {\n const next = normalizeDigits(nextRaw, length);\n const prevLen = prevLenRef.current;\n setValue(next);\n prevLenRef.current = next.length;\n if (next.length === length && prevLen < length) {\n onComplete?.(next);\n }\n },\n [length, onComplete, setValue],\n );\n\n const cells = toCells(value, length);\n const inputRefs = React.useRef<Array<HTMLInputElement | null>>([]);\n\n const setInputRef = React.useCallback((el: HTMLInputElement | null, index: number) => {\n inputRefs.current[index] = el;\n }, []);\n\n const focusAt = React.useCallback((index: number) => {\n const el = inputRefs.current[index];\n if (el) {\n queueMicrotask(() => el.focus());\n }\n }, []);\n\n const handleChangeAt = (index: number, nextChar: string) => {\n const nextCells = [...cells];\n nextCells[index] = nextChar;\n commit(nextCells.join(\"\"));\n if (nextChar && index < length - 1) {\n focusAt(index + 1);\n }\n };\n\n const handlePaste = (startIndex: number, pasted: string) => {\n const digits = normalizeDigits(pasted, length);\n if (digits.length === 0) {\n return;\n }\n const nextCells = [...cells];\n let writeIndex = startIndex;\n for (const d of digits) {\n if (writeIndex >= length) {\n break;\n }\n nextCells[writeIndex] = d;\n writeIndex++;\n }\n commit(nextCells.join(\"\"));\n const focusIndex = Math.min(startIndex + digits.length, length - 1);\n focusAt(focusIndex);\n };\n\n return (\n <fieldset\n aria-label=\"Digit input\"\n className={cx(styles.root, className)}\n data-size={size}\n data-has-error={hasError ? \"true\" : \"false\"}\n data-disabled={disabled ? \"true\" : \"false\"}\n >\n {cells.map((cell, index) => (\n <input\n key={slotKeys[index]}\n ref={(el) => setInputRef(el, index)}\n type=\"text\"\n inputMode=\"numeric\"\n autoComplete=\"one-time-code\"\n maxLength={1}\n disabled={disabled}\n className={styles.cell}\n data-size={size}\n value={cell}\n aria-label={`Digit ${index + 1} of ${length}`}\n onChange={(e) => {\n if (disabled) {\n return;\n }\n const raw = e.target.value;\n const digitsOnly = normalizeDigits(raw, 1);\n const nextChar = digitsOnly.slice(-1) ?? \"\";\n handleChangeAt(index, nextChar);\n }}\n onKeyDown={(e) => {\n if (disabled) {\n return;\n }\n if (e.key === \"Backspace\" && !cells[index] && index > 0) {\n e.preventDefault();\n focusAt(index - 1);\n }\n }}\n onPaste={(e) => {\n if (disabled) {\n return;\n }\n e.preventDefault();\n handlePaste(index, e.clipboardData.getData(\"text\"));\n }}\n />\n ))}\n </fieldset>\n );\n}\n\nDigitInputRoot.displayName = \"DigitInputRoot\";\n\nexport const DigitInput = { Root: DigitInputRoot };\n","/*\n * Номинальный `data-size` = размер родителя.\n * Визуальный ярус на ступень ниже: s→xs, m→xs, l→s, xl→m.\n */\n.root {\n display: flex;\n align-items: center;\n gap: var(--prime-divider-gap);\n color: var(--prime-sys-color-content-secondary);\n box-sizing: border-box;\n}\n\n.root[data-size=\"s\"] {\n --prime-divider-gap: var(--prime-sys-size-control-xs-gap);\n --prime-divider-icon: var(--prime-sys-size-control-xs-icon);\n --prime-divider-inline-pad: var(--prime-sys-size-control-xs-buttonPaddingX);\n --prime-divider-align-stub: var(--prime-sys-size-control-xs-buttonPaddingX);\n --prime-divider-label-font-size: var(--prime-sys-size-control-xs-text);\n --prime-divider-label-line-height: var(--prime-sys-typography-lineHeightScale-2xs);\n}\n\n.root[data-size=\"m\"] {\n --prime-divider-gap: var(--prime-sys-size-control-xs-gap);\n --prime-divider-icon: var(--prime-sys-size-control-xs-icon);\n --prime-divider-inline-pad: var(--prime-sys-size-control-xs-buttonPaddingX);\n --prime-divider-align-stub: var(--prime-sys-size-control-xs-buttonPaddingX);\n --prime-divider-label-font-size: var(--prime-sys-size-control-xs-text);\n --prime-divider-label-line-height: var(--prime-sys-typography-lineHeightScale-2xs);\n}\n\n.root[data-size=\"l\"] {\n --prime-divider-gap: var(--prime-sys-size-control-s-gap);\n --prime-divider-icon: var(--prime-sys-size-control-s-icon);\n --prime-divider-inline-pad: var(--prime-sys-size-control-s-buttonPaddingX);\n --prime-divider-align-stub: var(--prime-sys-size-control-s-buttonPaddingX);\n --prime-divider-label-font-size: var(--prime-sys-size-control-s-text);\n --prime-divider-label-line-height: var(--prime-sys-typography-lineHeightScale-xs);\n}\n\n.root[data-size=\"xl\"] {\n --prime-divider-gap: var(--prime-sys-size-control-m-gap);\n --prime-divider-icon: var(--prime-sys-size-control-m-icon);\n --prime-divider-inline-pad: var(--prime-sys-size-control-m-buttonPaddingX);\n --prime-divider-align-stub: var(--prime-sys-size-control-m-buttonPaddingX);\n --prime-divider-label-font-size: var(--prime-sys-size-control-m-text);\n --prime-divider-label-line-height: var(--prime-sys-typography-lineHeightScale-s);\n}\n\n/* В колонке flex (меню, карточки) тянем линию на всю ширину ряда */\n.root:not([data-orientation=\"vertical\"]) {\n width: 100%;\n min-width: 0;\n}\n\n.content {\n min-width: 0;\n}\n\n.root::before,\n.root::after {\n content: \"\";\n flex: 1;\n height: var(--prime-sys-unit-1px);\n background: var(--prime-sys-color-border-subtle);\n}\n\n.root[data-align=\"start\"]::before {\n flex: 0 0 var(--prime-divider-align-stub);\n}\n\n.root[data-align=\"end\"]::after {\n flex: 0 0 var(--prime-divider-align-stub);\n}\n\n.root:empty::before {\n flex: 1;\n}\n\n.root:empty::after {\n display: none;\n}\n\n.root:empty {\n gap: 0;\n}\n\n.root[data-orientation=\"vertical\"] {\n flex-direction: column;\n width: var(--prime-sys-unit-1px);\n height: 100%;\n}\n\n.root[data-orientation=\"vertical\"]::before,\n.root[data-orientation=\"vertical\"]::after {\n width: var(--prime-sys-unit-1px);\n height: auto;\n flex: 1;\n}\n\n.root[data-variant=\"line-spacing\"] {\n flex: 0 0 auto;\n}\n\n.root[data-variant=\"text\"] {\n flex: 0 0 auto;\n font-size: var(--prime-divider-label-font-size);\n line-height: var(--prime-divider-label-line-height);\n font-weight: var(--prime-sys-typography-weight-medium);\n text-transform: uppercase;\n letter-spacing: 0.06em;\n color: var(--prime-sys-color-content-muted);\n}\n\n.root[data-variant=\"text\"] .content {\n padding-inline: var(--prime-divider-inline-pad);\n}\n\n.root .content :where(svg) {\n width: var(--prime-divider-icon);\n height: var(--prime-divider-icon);\n flex-shrink: 0;\n}\n","import * as React from \"react\";\n\nimport { ControlSizeProvider } from \"@/internal/ControlSizeContext\";\nimport { cx } from \"@/internal/cx\";\nimport { toDataAttributes } from \"@/internal/data-attributes\";\nimport type { DividerSize } from \"@/internal/states\";\n\nimport styles from \"./Divider.module.css\";\n\nexport type { DividerSize };\n\nexport type DividerOrientation = \"horizontal\" | \"vertical\";\nexport type DividerAlign = \"start\" | \"center\" | \"end\";\n\n/** `line-spacing` — маркер для линии между секциями (ритм соседей — через `gap` у flex-родителя); `text` — подпись секции. */\nexport type DividerVariant = \"default\" | \"line-spacing\" | \"text\";\n\nexport type DividerRootProps = {\n orientation?: DividerOrientation;\n align?: DividerAlign;\n variant?: DividerVariant;\n size?: DividerSize;\n children?: React.ReactNode;\n className?: string;\n} & React.HTMLAttributes<HTMLDivElement>;\n\nconst DividerRoot = React.forwardRef<HTMLDivElement, DividerRootProps>(\n (\n {\n orientation = \"horizontal\",\n align: alignProp,\n variant = \"default\",\n size = \"m\",\n children,\n className,\n role = \"separator\",\n ...rest\n },\n ref,\n ) => {\n const align: DividerAlign = alignProp ?? (variant === \"text\" ? \"start\" : \"center\");\n\n return (\n <div\n {...rest}\n ref={ref}\n className={cx(styles.root, className)}\n role={role}\n {...(orientation === \"vertical\" ? { \"aria-orientation\": \"vertical\" as const } : {})}\n {...toDataAttributes({ orientation, align, variant, size })}\n >\n {children != null ? (\n <ControlSizeProvider value={size}>\n <span className={styles.content}>{children}</span>\n </ControlSizeProvider>\n ) : null}\n </div>\n );\n },\n);\n\nDividerRoot.displayName = \"Divider.Root\";\n\nexport const Divider = { Root: DividerRoot };\n",".overlay {\n position: fixed;\n inset: 0;\n background: var(--prime-sys-color-surface-overlay);\n backdrop-filter: blur(var(--prime-sys-unit-8px));\n z-index: var(--prime-sys-elevation-zIndex-modal);\n animation: fadeIn var(--prime-sys-motion-medium) var(--prime-sys-motion-standard);\n}\n\n.content {\n position: fixed;\n z-index: var(--prime-sys-elevation-zIndex-modal);\n background: var(--prime-sys-color-surface-elevated);\n color: var(--prime-sys-color-content-primary);\n box-shadow: var(--prime-sys-elevation-shadow-modal);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n outline: none;\n\n /* default size m — ярус drawer + control */\n --drawer-padding-x: var(--prime-sys-size-drawer-m-paddingX);\n --drawer-padding-y: var(--prime-sys-size-drawer-m-paddingY);\n --drawer-title-gap: var(--prime-sys-size-drawer-m-titleGap);\n --drawer-header-gap: var(--prime-sys-size-drawer-m-headerGap);\n --drawer-footer-gap: var(--prime-sys-size-drawer-m-footerGap);\n --drawer-title-text: var(--prime-sys-size-drawer-m-titleText);\n}\n\n.content[data-size=\"s\"] {\n --drawer-padding-x: var(--prime-sys-size-drawer-s-paddingX);\n --drawer-padding-y: var(--prime-sys-size-drawer-s-paddingY);\n --drawer-title-gap: var(--prime-sys-size-drawer-s-titleGap);\n --drawer-header-gap: var(--prime-sys-size-drawer-s-headerGap);\n --drawer-footer-gap: var(--prime-sys-size-drawer-s-footerGap);\n --drawer-title-text: var(--prime-sys-size-drawer-s-titleText);\n}\n\n.content[data-size=\"l\"] {\n --drawer-padding-x: var(--prime-sys-size-drawer-l-paddingX);\n --drawer-padding-y: var(--prime-sys-size-drawer-l-paddingY);\n --drawer-title-gap: var(--prime-sys-size-drawer-l-titleGap);\n --drawer-header-gap: var(--prime-sys-size-drawer-l-headerGap);\n --drawer-footer-gap: var(--prime-sys-size-drawer-l-footerGap);\n --drawer-title-text: var(--prime-sys-size-drawer-l-titleText);\n}\n\n.content[data-size=\"xl\"] {\n --drawer-padding-x: var(--prime-sys-size-drawer-xl-paddingX);\n --drawer-padding-y: var(--prime-sys-size-drawer-xl-paddingY);\n --drawer-title-gap: var(--prime-sys-size-drawer-xl-titleGap);\n --drawer-header-gap: var(--prime-sys-size-drawer-xl-headerGap);\n --drawer-footer-gap: var(--prime-sys-size-drawer-xl-footerGap);\n --drawer-title-text: var(--prime-sys-size-drawer-xl-titleText);\n}\n\n.content[data-side=\"right\"] {\n top: 0;\n right: 0;\n bottom: 0;\n width: min(var(--prime-sys-unit-28rem), 90vw);\n animation: slideInRight var(--prime-sys-motion-medium) var(--prime-sys-motion-standard);\n}\n\n.content[data-side=\"left\"] {\n top: 0;\n left: 0;\n bottom: 0;\n width: min(var(--prime-sys-unit-28rem), 90vw);\n animation: slideInLeft var(--prime-sys-motion-medium) var(--prime-sys-motion-standard);\n}\n\n.content[data-side=\"bottom\"] {\n left: 0;\n right: 0;\n bottom: 0;\n max-height: 80vh;\n border-radius: var(--prime-sys-shape-radius-4xl) var(--prime-sys-shape-radius-4xl) 0 0;\n animation: slideInBottom var(--prime-sys-motion-medium) var(--prime-sys-motion-standard);\n}\n\n.content[data-side=\"top\"] {\n left: 0;\n right: 0;\n top: 0;\n max-height: 80vh;\n border-radius: 0 0 var(--prime-sys-shape-radius-4xl) var(--prime-sys-shape-radius-4xl);\n animation: slideInTop var(--prime-sys-motion-medium) var(--prime-sys-motion-standard);\n}\n\n.header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--drawer-header-gap);\n padding-inline: var(--drawer-padding-x);\n padding-block: var(--drawer-padding-y);\n border-bottom: var(--prime-sys-border-width-control) solid var(--prime-sys-color-border-subtle);\n flex-shrink: 0;\n}\n\n.headerContent {\n display: flex;\n flex-direction: column;\n gap: var(--drawer-title-gap);\n flex: 1;\n min-width: 0;\n}\n\n.closeBtn {\n flex-shrink: 0;\n align-self: flex-start;\n}\n\n.title {\n font-size: var(--drawer-title-text);\n font-weight: var(--prime-sys-typography-title-weight);\n color: var(--prime-sys-color-content-primary);\n line-height: 1.2;\n}\n\n.body {\n flex: 1;\n overflow-y: auto;\n padding-inline: var(--drawer-padding-x);\n padding-block: var(--drawer-padding-y);\n}\n\n.footer {\n border-top: var(--prime-sys-border-width-control) solid var(--prime-sys-color-border-subtle);\n padding-inline: var(--drawer-padding-x);\n padding-block: var(--drawer-padding-y);\n display: flex;\n gap: var(--drawer-footer-gap);\n justify-content: flex-end;\n flex-shrink: 0;\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n}\n\n@keyframes slideInRight {\n from {\n transform: translateX(100%);\n }\n\n to {\n transform: translateX(0);\n }\n}\n\n@keyframes slideInLeft {\n from {\n transform: translateX(-100%);\n }\n\n to {\n transform: translateX(0);\n }\n}\n\n@keyframes slideInBottom {\n from {\n transform: translateY(100%);\n }\n\n to {\n transform: translateY(0);\n }\n}\n\n@keyframes slideInTop {\n from {\n transform: translateY(-100%);\n }\n\n to {\n transform: translateY(0);\n }\n}\n","import * as React from \"react\";\n\nimport { Button } from \"@/components/button/Button\";\nimport { useControllableState } from \"@/hooks/useControllableState\";\nimport { useEscapeKey } from \"@/hooks/useEscapeKey\";\nimport { useFocusTrap } from \"@/hooks/useFocusTrap\";\nimport { useScrollLock } from \"@/hooks/useScrollLock\";\nimport { Icon } from \"@/icons\";\nimport { ControlSizeProvider } from \"@/internal/ControlSizeContext\";\nimport { createComponentContext } from \"@/internal/context\";\nimport { cx } from \"@/internal/cx\";\nimport { toDataAttributes } from \"@/internal/data-attributes\";\nimport { Portal } from \"@/internal/Portal\";\nimport type { DrawerSize } from \"@/internal/states\";\n\nimport styles from \"./Drawer.module.css\";\n\nexport type { DrawerSize };\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type DrawerSide = \"left\" | \"right\" | \"bottom\" | \"top\";\n\n// ─── Context ──────────────────────────────────────────────────────────────────\n\ntype DrawerContextValue = {\n open: boolean;\n onOpen: () => void;\n onClose: () => void;\n closeOnEscape: boolean;\n closeOnOverlayClick: boolean;\n};\n\nconst [DrawerProvider, useDrawerContext] = createComponentContext<DrawerContextValue>(\"Drawer\");\n\nconst DrawerChromeSizeContext = React.createContext<DrawerSize | null>(null);\n\nfunction useDrawerChromeSize(): DrawerSize {\n const value = React.useContext(DrawerChromeSizeContext);\n if (value === null) {\n throw new Error(\n \"[prime-ui-kit] Drawer.Header, Drawer.Title, Drawer.Body and Drawer.Footer must be used inside Drawer.Content.\",\n );\n }\n return value;\n}\n\n// ─── Root ─────────────────────────────────────────────────────────────────────\n\nexport type DrawerRootProps = {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n closeOnEscape?: boolean;\n closeOnOverlayClick?: boolean;\n children: React.ReactNode;\n};\n\nfunction DrawerRoot({\n open,\n defaultOpen = false,\n onOpenChange,\n closeOnEscape = true,\n closeOnOverlayClick = true,\n children,\n}: DrawerRootProps) {\n const [isOpen, setIsOpen] = useControllableState({\n value: open,\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n });\n\n const onOpen = React.useCallback(() => setIsOpen(true), [setIsOpen]);\n const onClose = React.useCallback(() => setIsOpen(false), [setIsOpen]);\n\n return (\n <DrawerProvider value={{ open: isOpen, onOpen, onClose, closeOnEscape, closeOnOverlayClick }}>\n {children}\n </DrawerProvider>\n );\n}\n\n// ─── Trigger ──────────────────────────────────────────────────────────────────\n\nexport type DrawerTriggerProps = {\n children: React.ReactElement<{ onClick?: React.MouseEventHandler }>;\n};\n\nfunction DrawerTrigger({ children }: DrawerTriggerProps) {\n const { onOpen } = useDrawerContext();\n const child = React.Children.only(children);\n return React.cloneElement(child, {\n onClick: (event: React.MouseEvent) => {\n child.props.onClick?.(event);\n if (!event.defaultPrevented) {\n onOpen();\n }\n },\n });\n}\n\n// ─── Close ────────────────────────────────────────────────────────────────────\n\nexport type DrawerCloseProps = {\n children: React.ReactElement<{\n onClick?: React.MouseEventHandler;\n className?: string;\n }>;\n};\n\nfunction DrawerClose({ children }: DrawerCloseProps) {\n const { onClose } = useDrawerContext();\n const child = React.Children.only(children);\n\n return React.cloneElement(child, {\n onClick: (event: React.MouseEvent) => {\n child.props.onClick?.(event);\n if (!event.defaultPrevented) {\n onClose();\n }\n },\n });\n}\n\n// ─── Portal ───────────────────────────────────────────────────────────────────\n\nexport type DrawerPortalProps = {\n children: React.ReactNode;\n container?: HTMLElement | null;\n};\n\nfunction DrawerPortal({ children, container }: DrawerPortalProps) {\n const { open } = useDrawerContext();\n if (!open) return null;\n return <Portal container={container}>{children}</Portal>;\n}\n\n// ─── Overlay ──────────────────────────────────────────────────────────────────\n\nexport type DrawerOverlayProps = React.HTMLAttributes<HTMLDivElement>;\n\nfunction DrawerOverlay({ className, onClick, ...rest }: DrawerOverlayProps) {\n const { onClose, closeOnOverlayClick } = useDrawerContext();\n\n const handleClick = (event: React.MouseEvent<HTMLDivElement>) => {\n onClick?.(event);\n if (!event.defaultPrevented && closeOnOverlayClick && event.target === event.currentTarget) {\n onClose();\n }\n };\n\n return (\n // biome-ignore lint/a11y/noStaticElementInteractions: backdrop overlay; keyboard dismiss handled by useEscapeKey in DrawerContent\n <div\n role=\"presentation\"\n className={cx(styles.overlay, className)}\n onClick={handleClick}\n data-testid=\"drawer-overlay\"\n {...rest}\n />\n );\n}\n\n// ─── Content ──────────────────────────────────────────────────────────────────\n\nexport type DrawerContentProps = React.HTMLAttributes<HTMLDivElement> & {\n side?: DrawerSide;\n size?: DrawerSize;\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n \"aria-describedby\"?: string;\n};\n\nfunction DrawerContent({\n children,\n className,\n side = \"right\",\n size = \"m\",\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-describedby\": ariaDescribedBy,\n ...rest\n}: DrawerContentProps) {\n const { open, onClose, closeOnEscape } = useDrawerContext();\n\n const trapRef = useFocusTrap<HTMLDivElement>({ enabled: open });\n\n useScrollLock(open);\n\n useEscapeKey({ enabled: closeOnEscape && open, onEscape: onClose });\n\n React.useEffect(() => {\n if (!open) return;\n\n const container = trapRef.current;\n if (!container) return;\n\n let portalRoot: Element | null = container;\n while (portalRoot && portalRoot.parentElement !== document.body) {\n portalRoot = portalRoot.parentElement;\n }\n\n const siblings = Array.from(document.body.children).filter((el) => el !== portalRoot);\n const prev = siblings.map((el) => ({\n el: el as HTMLElement,\n inert: (el as HTMLElement).inert,\n ariaHidden: el.getAttribute(\"aria-hidden\"),\n }));\n\n for (const { el } of prev) {\n el.inert = true;\n el.setAttribute(\"aria-hidden\", \"true\");\n }\n\n return () => {\n for (const { el, inert, ariaHidden } of prev) {\n el.inert = inert;\n if (ariaHidden === null) {\n el.removeAttribute(\"aria-hidden\");\n } else {\n el.setAttribute(\"aria-hidden\", ariaHidden);\n }\n }\n };\n }, [open, trapRef]);\n\n return (\n <DrawerChromeSizeContext.Provider value={size}>\n <div\n ref={trapRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-describedby={ariaDescribedBy}\n tabIndex={-1}\n data-side={side}\n className={cx(styles.content, className)}\n {...toDataAttributes({ size })}\n {...rest}\n >\n {children}\n </div>\n </DrawerChromeSizeContext.Provider>\n );\n}\n\n// ─── Header ───────────────────────────────────────────────────────────────────\n\nexport type DrawerHeaderProps = React.HTMLAttributes<HTMLElement> & {\n showCloseButton?: boolean;\n};\n\nfunction DrawerHeader({ children, className, showCloseButton = true, ...rest }: DrawerHeaderProps) {\n const { onClose } = useDrawerContext();\n const chromeSize = useDrawerChromeSize();\n\n return (\n <header className={cx(styles.header, className)} {...rest}>\n <ControlSizeProvider value={chromeSize}>\n <div className={styles.headerContent}>{children}</div>\n </ControlSizeProvider>\n {showCloseButton && (\n <Button.Root\n size={chromeSize}\n variant=\"neutral\"\n mode=\"ghost\"\n className={styles.closeBtn}\n onClick={onClose}\n aria-label=\"Close drawer\"\n >\n <Button.Icon>\n <Icon name=\"action.close\" tone=\"subtle\" />\n </Button.Icon>\n </Button.Root>\n )}\n </header>\n );\n}\n\n// ─── Title ────────────────────────────────────────────────────────────────────\n\nexport type DrawerTitleProps = React.HTMLAttributes<HTMLHeadingElement>;\n\nfunction DrawerTitle({ children, className, ...rest }: DrawerTitleProps) {\n return (\n <h2 className={cx(styles.title, className)} {...rest}>\n {children}\n </h2>\n );\n}\n\n// ─── Body ─────────────────────────────────────────────────────────────────────\n\nexport type DrawerBodyProps = React.HTMLAttributes<HTMLDivElement>;\n\nfunction DrawerBody({ children, className, ...rest }: DrawerBodyProps) {\n return (\n <div className={cx(styles.body, className)} {...rest}>\n {children}\n </div>\n );\n}\n\n// ─── Footer ───────────────────────────────────────────────────────────────────\n\nexport type DrawerFooterProps = React.HTMLAttributes<HTMLElement>;\n\nfunction DrawerFooter({ children, className, ...rest }: DrawerFooterProps) {\n const chromeSize = useDrawerChromeSize();\n\n return (\n <footer className={cx(styles.footer, className)} {...rest}>\n <ControlSizeProvider value={chromeSize}>{children}</ControlSizeProvider>\n </footer>\n );\n}\n\n// ─── Namespace export ─────────────────────────────────────────────────────────\n\nexport const Drawer = {\n Root: DrawerRoot,\n Trigger: DrawerTrigger,\n Close: DrawerClose,\n Portal: DrawerPortal,\n Overlay: DrawerOverlay,\n Content: DrawerContent,\n Header: DrawerHeader,\n Title: DrawerTitle,\n Body: DrawerBody,\n Footer: DrawerFooter,\n};\n","/* Невидимая колонка внутри Content: доп. отступы от внутренних отступов панели + gap между блоками */\n.inset {\n --dd-inset-pad-block: var(--prime-sys-spacing-x2);\n --dd-inset-pad-inline: var(--prime-sys-spacing-x2);\n --dd-inset-gap: var(--prime-sys-spacing-x3);\n\n display: flex;\n width: 100%;\n min-width: 0;\n flex-direction: column;\n margin: 0;\n box-sizing: border-box;\n padding-block: var(--dd-inset-pad-block);\n padding-inline: var(--dd-inset-pad-inline);\n gap: var(--dd-inset-gap);\n}\n\n.inset[data-inset-padding=\"none\"] {\n --dd-inset-pad-block: 0;\n --dd-inset-pad-inline: 0;\n}\n\n.inset[data-inset-padding=\"x1\"] {\n --dd-inset-pad-block: var(--prime-sys-spacing-x1);\n --dd-inset-pad-inline: var(--prime-sys-spacing-x1);\n}\n\n.inset[data-inset-padding=\"x2\"] {\n --dd-inset-pad-block: var(--prime-sys-spacing-x2);\n --dd-inset-pad-inline: var(--prime-sys-spacing-x2);\n}\n\n.inset[data-inset-padding=\"x3\"] {\n --dd-inset-pad-block: var(--prime-sys-spacing-x3);\n --dd-inset-pad-inline: var(--prime-sys-spacing-x3);\n}\n\n.inset[data-inset-gap=\"none\"] {\n --dd-inset-gap: 0;\n}\n\n.inset[data-inset-gap=\"x2\"] {\n --dd-inset-gap: var(--prime-sys-spacing-x2);\n}\n\n.inset[data-inset-gap=\"x3\"] {\n --dd-inset-gap: var(--prime-sys-spacing-x3);\n}\n\n.inset[data-inset-gap=\"x4\"] {\n --dd-inset-gap: var(--prime-sys-spacing-x4);\n}\n\n.content {\n --dropdown-separator-mix: 40%;\n --dd-pad: var(--prime-sys-spacing-x2);\n --dd-min-w: var(--prime-sys-unit-11rem);\n --dd-item-gap: var(--prime-sys-size-control-m-gap);\n --dd-item-height: var(--prime-sys-size-control-m-height);\n --dd-item-pad-x: var(--prime-sys-size-control-m-buttonPaddingX);\n --dd-item-radius: var(--prime-sys-size-control-m-radius);\n --dd-item-text: var(--prime-sys-size-control-m-text);\n --dd-icon-size: var(--prime-sys-size-control-m-icon);\n --dd-group-label-font: var(--prime-sys-size-control-s-supportText);\n --dd-group-label-pt: var(--prime-sys-spacing-x2);\n --dd-group-label-px: var(--prime-sys-spacing-x3);\n --dd-group-label-pb: var(--prime-sys-spacing-x1);\n --dd-header-gap: var(--prime-sys-spacing-x3);\n --dd-header-pad-inline: var(--prime-sys-spacing-x2);\n --dd-header-pad-block: var(--prime-sys-spacing-x3);\n --dd-header-desc-font: var(--prime-sys-size-control-s-supportText);\n --dd-separator-stack-pad: var(--prime-sys-spacing-x2);\n\n display: flex;\n flex-direction: column;\n align-items: stretch;\n position: fixed;\n z-index: var(--prime-sys-elevation-zIndex-dropdown);\n width: max-content;\n max-width: min(var(--prime-sys-unit-20rem), 100vw);\n background: var(--prime-sys-color-surface-elevated);\n border: none;\n border-radius: var(--prime-sys-shape-radius-l);\n box-shadow: var(--prime-sys-elevation-shadow-surface), var(--prime-sys-elevation-shadow-modal);\n padding: var(--dd-pad);\n min-width: var(--dd-min-w);\n /* max-height задаётся из JS по свободному месту во вьюпорте */\n overflow-y: auto;\n transform-origin: top center;\n}\n\n.content[data-size=\"s\"] {\n --dd-pad: var(--prime-sys-spacing-x2);\n --dd-min-w: var(--prime-sys-unit-9p5rem);\n --dd-item-gap: var(--prime-sys-size-control-s-gap);\n --dd-item-height: var(--prime-sys-size-control-s-height);\n --dd-item-pad-x: var(--prime-sys-size-control-s-buttonPaddingX);\n --dd-item-radius: var(--prime-sys-size-control-s-radius);\n --dd-item-text: var(--prime-sys-size-control-s-text);\n --dd-icon-size: var(--prime-sys-size-control-s-icon);\n --dd-group-label-font: var(--prime-sys-size-control-s-supportText);\n --dd-group-label-pt: var(--prime-sys-spacing-x1);\n --dd-group-label-px: var(--prime-sys-spacing-x2);\n --dd-group-label-pb: var(--prime-sys-spacing-x1);\n --dd-header-gap: var(--prime-sys-spacing-x2);\n --dd-header-pad-inline: var(--prime-sys-spacing-x2);\n --dd-header-pad-block: var(--prime-sys-spacing-x3);\n}\n\n.content[data-size=\"l\"] {\n --dd-pad: var(--prime-sys-spacing-x3);\n --dd-min-w: var(--prime-sys-unit-12p5rem);\n --dd-item-gap: var(--prime-sys-size-control-l-gap);\n --dd-item-height: var(--prime-sys-size-control-l-height);\n --dd-item-pad-x: var(--prime-sys-size-control-l-buttonPaddingX);\n --dd-item-radius: var(--prime-sys-size-control-l-radius);\n --dd-item-text: var(--prime-sys-size-control-l-text);\n --dd-icon-size: var(--prime-sys-size-control-l-icon);\n --dd-group-label-font: var(--prime-sys-size-control-l-supportText);\n --dd-group-label-pt: var(--prime-sys-spacing-x2);\n --dd-group-label-px: var(--prime-sys-spacing-x4);\n --dd-group-label-pb: var(--prime-sys-spacing-x2);\n --dd-header-desc-font: var(--prime-sys-size-control-m-supportText);\n --dd-header-pad-inline: var(--prime-sys-spacing-x3);\n --dd-header-pad-block: var(--prime-sys-spacing-x4);\n --dd-separator-stack-pad: var(--prime-sys-spacing-x3);\n}\n\n.content[data-size=\"xl\"] {\n --dd-pad: var(--prime-sys-spacing-x4);\n --dd-min-w: var(--prime-sys-unit-14rem);\n --dd-item-gap: var(--prime-sys-size-control-xl-gap);\n --dd-item-height: var(--prime-sys-size-control-xl-height);\n --dd-item-pad-x: var(--prime-sys-size-control-xl-buttonPaddingX);\n --dd-item-radius: var(--prime-sys-size-control-xl-radius);\n --dd-item-text: var(--prime-sys-size-control-xl-text);\n --dd-icon-size: var(--prime-sys-size-control-xl-icon);\n --dd-group-label-font: var(--prime-sys-size-control-xl-supportText);\n --dd-group-label-pt: var(--prime-sys-spacing-x3);\n --dd-group-label-px: var(--prime-sys-spacing-x4);\n --dd-group-label-pb: var(--prime-sys-spacing-x2);\n --dd-header-gap: var(--prime-sys-spacing-x3);\n --dd-header-desc-font: var(--prime-sys-size-control-xl-supportText);\n --dd-header-pad-inline: var(--prime-sys-spacing-x3);\n --dd-header-pad-block: var(--prime-sys-spacing-x4);\n --dd-separator-stack-pad: var(--prime-sys-spacing-x3);\n}\n\n/* Тёмная тема: между «серым» elevated (800) и почти чёрным canvas (950) — surface (900) */\n:global([data-theme=\"dark\"]) .content {\n background: var(--prime-sys-color-surface-raised);\n}\n\n.block {\n display: flex;\n flex-direction: column;\n align-items: stretch;\n min-width: 0;\n}\n\n.block > * + * {\n margin-top: var(--dd-pad);\n}\n\n.header {\n display: flex;\n flex-direction: column;\n align-items: stretch;\n min-width: 0;\n width: 100%;\n}\n\n.header > * + * {\n margin-top: var(--prime-sys-spacing-x1);\n}\n\n.headerRow {\n display: flex;\n align-items: center;\n box-sizing: border-box;\n width: 100%;\n min-width: 0;\n padding: var(--dd-header-pad-block) var(--dd-header-pad-inline);\n}\n\n.headerRow > * + * {\n margin-inline-start: var(--dd-header-gap);\n}\n\n.headerLeading {\n flex-shrink: 0;\n}\n\n.headerTrailing {\n flex-shrink: 0;\n align-self: flex-start;\n}\n\n.headerTrailing[data-trailing-align=\"center\"] {\n align-self: center;\n}\n\n.headerMain {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n}\n\n.headerMain > * + * {\n margin-top: var(--prime-sys-spacing-x1);\n}\n\n.headerTitle {\n font-size: var(--dd-item-text);\n font-weight: var(--prime-sys-typography-weight-medium);\n line-height: 1.25;\n color: var(--prime-sys-color-content-primary);\n}\n\n.headerDescription {\n font-size: var(--dd-header-desc-font);\n line-height: 1.25;\n color: var(--prime-sys-color-content-secondary);\n}\n\n.headerDescriptionTruncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.content[data-side=\"bottom\"] {\n animation: dropdownInBottom var(--prime-sys-motion-fast) var(--prime-sys-motion-standard);\n}\n\n.content[data-side=\"top\"] {\n transform-origin: bottom center;\n animation: dropdownInTop var(--prime-sys-motion-fast) var(--prime-sys-motion-standard);\n}\n\n@keyframes dropdownInBottom {\n from {\n opacity: 0;\n transform: scale(0.96) translateY(calc(-1 * var(--prime-sys-unit-4px)));\n }\n to {\n opacity: 1;\n transform: scale(1) translateY(0);\n }\n}\n\n@keyframes dropdownInTop {\n from {\n opacity: 0;\n transform: scale(0.96) translateY(var(--prime-sys-unit-4px));\n }\n to {\n opacity: 1;\n transform: scale(1) translateY(0);\n }\n}\n\n.item {\n display: flex;\n align-items: center;\n min-height: var(--dd-item-height);\n padding-block: 0;\n padding-inline: var(--dd-item-pad-x);\n border-radius: var(--dd-item-radius);\n font-size: var(--dd-item-text);\n font-weight: var(--prime-sys-typography-weight-medium);\n line-height: 1;\n color: var(--prime-sys-color-content-primary);\n cursor: pointer;\n border: none;\n background: none;\n width: 100%;\n text-align: left;\n box-sizing: border-box;\n transition: background var(--prime-sys-motion-fast);\n}\n\n.item:hover,\n.item:focus-visible {\n background: var(--prime-sys-color-action-neutralBackgroundHover);\n outline: none;\n}\n\n.item[data-disabled=\"true\"] {\n color: var(--prime-sys-color-content-disabled);\n cursor: not-allowed;\n}\n\n.item[data-destructive=\"true\"] {\n color: var(--prime-sys-color-content-danger);\n}\n\n.itemIcon {\n display: inline-flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n width: var(--dd-icon-size);\n height: var(--dd-icon-size);\n margin-inline-end: var(--dd-item-gap);\n color: var(--prime-sys-color-content-secondary);\n}\n\n.item[data-destructive=\"true\"] .itemIcon {\n color: var(--prime-sys-color-content-danger);\n}\n\n.group {\n display: flex;\n flex-direction: column;\n min-width: 0;\n}\n\n.group > * + * {\n margin-top: var(--prime-sys-spacing-x1);\n}\n\n.group > .item + .item {\n margin-top: 0;\n}\n\n.groupLabel {\n padding: var(--dd-group-label-pt) var(--dd-group-label-px) var(--dd-group-label-pb);\n font-size: var(--dd-group-label-font);\n font-weight: var(--prime-sys-typography-weight-medium);\n line-height: 1.2;\n color: var(--prime-sys-color-content-muted);\n text-transform: uppercase;\n letter-spacing: 0.06em;\n}\n\n.separator {\n flex: 0 0 auto;\n align-self: stretch;\n box-sizing: border-box;\n min-width: 0;\n display: block;\n width: 100%;\n height: var(--prime-sys-unit-1px);\n margin: 0;\n padding: 0;\n border: none;\n background-color: color-mix(\n in srgb,\n var(--prime-sys-color-border-subtle) var(--dropdown-separator-mix),\n var(--prime-sys-color-surface-elevated)\n );\n}\n\n.content > * + * {\n margin-top: var(--prime-sys-spacing-x1);\n}\n\n.content > .item + .item {\n margin-top: 0;\n}\n\n.content > .separator + * {\n margin-top: 0;\n}\n\n.content > .item + .separator,\n.content > .group + .separator {\n margin-top: var(--dd-separator-stack-pad);\n margin-bottom: var(--dd-separator-stack-pad);\n}\n\n.content > .block + .block {\n margin-top: var(--prime-sys-spacing-x4);\n}\n\n.content > .block + .separator {\n margin-top: var(--dd-separator-stack-pad);\n margin-bottom: var(--dd-separator-stack-pad);\n}\n\n:global([data-theme=\"dark\"]) .content .separator {\n background-color: color-mix(\n in srgb,\n var(--prime-sys-color-border-subtle) var(--dropdown-separator-mix),\n var(--prime-sys-color-surface-raised)\n );\n}\n","import type * as React from \"react\";\n\nconst MENU_ITEM_SELECTOR = '[role=\"menuitem\"]:not([data-disabled=\"true\"])';\n\nexport function queryEnabledMenuItems(container: HTMLElement): HTMLElement[] {\n return Array.from(container.querySelectorAll<HTMLElement>(MENU_ITEM_SELECTOR));\n}\n\nexport function handleMenuNavigationKeyDown(\n e: React.KeyboardEvent<HTMLElement>,\n container: HTMLElement,\n): void {\n const items = queryEnabledMenuItems(container);\n if (items.length === 0) return;\n\n const currentIndex = items.indexOf(document.activeElement as HTMLElement);\n\n switch (e.key) {\n case \"ArrowDown\": {\n e.preventDefault();\n const next = currentIndex < items.length - 1 ? currentIndex + 1 : 0;\n items[next]?.focus();\n break;\n }\n case \"ArrowUp\": {\n e.preventDefault();\n const prev = currentIndex > 0 ? currentIndex - 1 : items.length - 1;\n items[prev]?.focus();\n break;\n }\n case \"Home\": {\n e.preventDefault();\n items[0]?.focus();\n break;\n }\n case \"End\": {\n e.preventDefault();\n items[items.length - 1]?.focus();\n break;\n }\n default:\n break;\n }\n}\n","const SCROLLABLE = /^(auto|scroll|overlay)$/;\n\n/** window, прокручиваемые предки якоря и visualViewport — для пересчёта fixed при scroll. */\nexport function getScrollContainers(\n node: Element | null,\n): Array<Element | Window | VisualViewport> {\n const out: Array<Element | Window | VisualViewport> = [window];\n if (!node || typeof window === \"undefined\") return out;\n\n for (let el: Element | null = node.parentElement; el; el = el.parentElement) {\n const { overflowX, overflowY } = window.getComputedStyle(el);\n if (SCROLLABLE.test(overflowY) || SCROLLABLE.test(overflowX)) {\n out.push(el);\n }\n }\n\n if (window.visualViewport) out.push(window.visualViewport);\n return out;\n}\n","import type { PositionSide } from \"@/hooks/usePosition\";\nimport {\n getFloatingPanelOffsetPx,\n getFloatingViewportPadPx,\n} from \"@/internal/layoutPxFromPrimitives\";\n\nexport const DROPDOWN_MIN_MAX_HEIGHT = 120;\n\n/**\n * Максимальная высота панели по якорю и выбранной стороне (до commit layout панели).\n * `panelOffsetPx` / `viewportPadPx` должны совпадать с вызовом `computeFloatingPosition`.\n */\nexport function getDropdownMaxHeightForAnchorSide(\n anchor: DOMRectReadOnly,\n side: PositionSide,\n viewportHeight: number,\n panelOffsetPx: number,\n viewportPadPx: number,\n): number {\n const raw =\n side === \"bottom\"\n ? viewportHeight - anchor.bottom - panelOffsetPx - viewportPadPx\n : anchor.top - panelOffsetPx - viewportPadPx;\n return Math.floor(Math.max(DROPDOWN_MIN_MAX_HEIGHT, raw));\n}\n\nexport function getDropdownPanelOffsetPx(): number {\n return getFloatingPanelOffsetPx();\n}\n\nexport function getDropdownViewportPadPx(): number {\n return getFloatingViewportPadPx();\n}\n","import * as React from \"react\";\n\nimport type { PositionAlign, PositionSide } from \"@/hooks/usePosition\";\nimport { computeFloatingPosition } from \"@/hooks/usePosition\";\nimport { getScrollContainers } from \"@/internal/scrollAncestors\";\n\nimport {\n getDropdownMaxHeightForAnchorSide,\n getDropdownPanelOffsetPx,\n getDropdownViewportPadPx,\n} from \"./dropdownGeometry\";\n\nexport type DropdownLayout = {\n style: React.CSSProperties;\n resolvedSide: PositionSide;\n};\n\ntype Params = {\n open: boolean;\n triggerRef: React.RefObject<HTMLElement | null>;\n contentRef: React.RefObject<HTMLDivElement | null>;\n side: PositionSide;\n align: PositionAlign;\n sameMinWidthAsTrigger: boolean;\n};\n\nfunction layoutEqual(a: DropdownLayout, b: DropdownLayout): boolean {\n return (\n a.resolvedSide === b.resolvedSide &&\n a.style.top === b.style.top &&\n a.style.left === b.style.left &&\n a.style.maxHeight === b.style.maxHeight &&\n a.style.minWidth === b.style.minWidth\n );\n}\n\n/** Позиция + max-height одним проходом; resize / scroll-предки / ResizeObserver / visualViewport. */\nexport function useDropdownPosition({\n open,\n triggerRef,\n contentRef,\n side,\n align,\n sameMinWidthAsTrigger,\n}: Params): DropdownLayout | null {\n const [layout, setLayout] = React.useState<DropdownLayout | null>(null);\n\n const commit = React.useCallback(() => {\n const trigger = triggerRef.current;\n const panel = contentRef.current;\n if (!trigger || !panel) return;\n\n const anchorRect = trigger.getBoundingClientRect();\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n const panelOffset = getDropdownPanelOffsetPx();\n const viewportPad = getDropdownViewportPadPx();\n const pos = computeFloatingPosition(anchorRect, panel.offsetWidth, panel.offsetHeight, vw, vh, {\n preferredSide: side,\n align,\n offset: panelOffset,\n viewportPad,\n flip: true,\n matchTriggerMinWidth: sameMinWidthAsTrigger,\n });\n\n const next: DropdownLayout = {\n resolvedSide: pos.resolvedSide,\n style: {\n position: \"fixed\",\n top: pos.top,\n left: pos.left,\n maxHeight: getDropdownMaxHeightForAnchorSide(\n anchorRect,\n pos.resolvedSide,\n vh,\n panelOffset,\n viewportPad,\n ),\n ...(pos.minWidth !== undefined ? { minWidth: pos.minWidth } : {}),\n },\n };\n\n setLayout((prev) => (prev && layoutEqual(prev, next) ? prev : next));\n }, [triggerRef, contentRef, side, align, sameMinWidthAsTrigger]);\n\n React.useLayoutEffect(() => {\n if (!open) {\n setLayout(null);\n return;\n }\n\n let rafCoalesce = 0;\n const schedule = () => {\n cancelAnimationFrame(rafCoalesce);\n rafCoalesce = requestAnimationFrame(commit);\n };\n\n commit();\n const rafFollowUp = requestAnimationFrame(commit);\n\n window.addEventListener(\"resize\", schedule);\n const scrollTargets = getScrollContainers(triggerRef.current);\n for (const t of scrollTargets) {\n t.addEventListener(\"scroll\", schedule, { passive: true });\n }\n const vv = window.visualViewport;\n vv?.addEventListener(\"resize\", schedule);\n\n const panel = contentRef.current;\n const ro = panel ? new ResizeObserver(schedule) : null;\n if (panel && ro) ro.observe(panel);\n\n return () => {\n cancelAnimationFrame(rafFollowUp);\n cancelAnimationFrame(rafCoalesce);\n window.removeEventListener(\"resize\", schedule);\n for (const t of scrollTargets) {\n t.removeEventListener(\"scroll\", schedule);\n }\n vv?.removeEventListener(\"resize\", schedule);\n ro?.disconnect();\n };\n }, [open, commit, triggerRef, contentRef]);\n\n return layout;\n}\n","import * as React from \"react\";\n\nimport { useControllableState } from \"@/hooks/useControllableState\";\nimport { useEscapeKey } from \"@/hooks/useEscapeKey\";\nimport { useFocusTrap } from \"@/hooks/useFocusTrap\";\nimport { isPortaledSelectListboxOwnedByContainer, useOutsideClick } from \"@/hooks/useOutsideClick\";\nimport type { PositionAlign, PositionSide } from \"@/hooks/usePosition\";\nimport { ControlSizeProvider } from \"@/internal/ControlSizeContext\";\nimport { createComponentContext } from \"@/internal/context\";\nimport { cx } from \"@/internal/cx\";\nimport { remToPx } from \"@/internal/layoutPxFromPrimitives\";\nimport { mergeRefs } from \"@/internal/mergeRefs\";\nimport { Portal } from \"@/internal/Portal\";\nimport type { DropdownSize } from \"@/internal/states\";\nimport { primitiveTokens } from \"../../../tokens/primitives\";\n\nimport styles from \"./Dropdown.module.css\";\nimport { handleMenuNavigationKeyDown } from \"./menuKeyboard\";\nimport { useDropdownPosition } from \"./useDropdownPosition\";\n\nexport type { DropdownSize };\n\nconst DropdownContentSizeContext = React.createContext<DropdownSize>(\"m\");\n\nfunction useDropdownContentSize(): DropdownSize {\n return React.useContext(DropdownContentSizeContext);\n}\n\nfunction dropdownItemIconPx(menuSize: DropdownSize): number {\n return remToPx(primitiveTokens.icon[menuSize]);\n}\n\ntype Ctx = {\n isOpen: boolean;\n onClose: () => void;\n onToggle: () => void;\n triggerId: string;\n menuId: string;\n triggerRef: React.RefObject<HTMLElement | null>;\n};\n\nconst [DropdownProvider, useDropdownContext] = createComponentContext<Ctx>(\"Dropdown\");\n\nexport type DropdownRootProps = {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n children: React.ReactNode;\n};\n\nfunction DropdownRoot({ open, defaultOpen = false, onOpenChange, children }: DropdownRootProps) {\n const [isOpen, setIsOpen] = useControllableState({\n value: open,\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n });\n const id = React.useId();\n const triggerId = `${id}-trigger`;\n const menuId = `${id}-menu`;\n const triggerRef = React.useRef<HTMLElement | null>(null);\n const onClose = React.useCallback(() => setIsOpen(false), [setIsOpen]);\n const onToggle = React.useCallback(() => setIsOpen((v) => !v), [setIsOpen]);\n\n const value = React.useMemo(\n () => ({ isOpen, onClose, onToggle, triggerId, menuId, triggerRef }),\n [isOpen, onClose, onToggle, triggerId, menuId],\n );\n\n return <DropdownProvider value={value}>{children}</DropdownProvider>;\n}\nDropdownRoot.displayName = \"DropdownRoot\";\n\nexport type DropdownTriggerProps = {\n children: React.ReactElement;\n asChild?: boolean;\n};\n\nfunction DropdownTrigger({ children, asChild: _asChild = true }: DropdownTriggerProps) {\n void _asChild;\n const { isOpen, onToggle, triggerId, menuId, triggerRef } = useDropdownContext();\n const toggleRef = React.useRef(onToggle);\n toggleRef.current = onToggle;\n\n const setNode = React.useCallback(\n (el: HTMLElement | null) => {\n (triggerRef as React.MutableRefObject<HTMLElement | null>).current = el;\n },\n [triggerRef],\n );\n\n // biome-ignore lint/suspicious/noExplicitAny: cloneElement на произвольный элемент\n const child = children as React.ReactElement<any>;\n const childRef =\n (child.props as { ref?: React.Ref<HTMLElement | null> }).ref ??\n (child as unknown as { ref?: React.Ref<HTMLElement | null> }).ref;\n const mergedRef = React.useMemo(() => mergeRefs(childRef, setNode), [childRef, setNode]);\n const userClick = child.props?.onClick as React.MouseEventHandler<HTMLElement> | undefined;\n\n return React.cloneElement(child, {\n ref: mergedRef,\n id: triggerId,\n \"aria-expanded\": isOpen,\n \"aria-haspopup\": \"menu\",\n \"aria-controls\": menuId,\n onClick: (e: React.MouseEvent<HTMLElement>) => {\n userClick?.(e);\n toggleRef.current();\n },\n });\n}\nDropdownTrigger.displayName = \"DropdownTrigger\";\n\nexport type DropdownContentProps = {\n align?: PositionAlign;\n side?: PositionSide;\n sameMinWidthAsTrigger?: boolean;\n size?: DropdownSize;\n children: React.ReactNode;\n className?: string;\n};\n\nfunction DropdownContent({\n align = \"start\",\n side = \"bottom\",\n sameMinWidthAsTrigger = false,\n size = \"m\",\n children,\n className,\n}: DropdownContentProps) {\n const { isOpen, onClose, triggerRef, menuId, triggerId } = useDropdownContext();\n const contentRef = React.useRef<HTMLDivElement | null>(null);\n\n const layout = useDropdownPosition({\n open: isOpen,\n triggerRef,\n contentRef,\n side,\n align,\n sameMinWidthAsTrigger,\n });\n\n const trapRef = useFocusTrap<HTMLDivElement>({ enabled: isOpen, restoreFocus: true });\n const ref = React.useMemo(() => mergeRefs(contentRef, trapRef), [trapRef]);\n\n useEscapeKey({ enabled: isOpen, onEscape: onClose });\n useOutsideClick({\n refs: [triggerRef, contentRef],\n enabled: isOpen,\n onOutsideClick: onClose,\n shouldSuppressOutsideClick: (target) =>\n isPortaledSelectListboxOwnedByContainer(target, contentRef.current),\n });\n\n if (!isOpen) return null;\n\n return (\n <Portal>\n <DropdownContentSizeContext.Provider value={size}>\n <ControlSizeProvider value={size}>\n <div\n ref={ref}\n id={menuId}\n role=\"menu\"\n aria-labelledby={triggerId}\n data-react-aria-top-layer=\"true\"\n data-side={layout?.resolvedSide ?? side}\n data-size={size}\n className={cx(styles.content, className)}\n style={layout?.style}\n onKeyDown={(e) => handleMenuNavigationKeyDown(e, e.currentTarget)}\n >\n {children}\n </div>\n </ControlSizeProvider>\n </DropdownContentSizeContext.Provider>\n </Portal>\n );\n}\nDropdownContent.displayName = \"DropdownContent\";\n\nexport type DropdownItemProps = {\n onSelect?: () => void;\n disabled?: boolean;\n destructive?: boolean;\n children: React.ReactNode;\n className?: string;\n};\n\nfunction DropdownItem({ onSelect, disabled, destructive, children, className }: DropdownItemProps) {\n const { onClose } = useDropdownContext();\n\n const activate = () => {\n if (disabled) return;\n onSelect?.();\n onClose();\n };\n\n return (\n <button\n type=\"button\"\n role=\"menuitem\"\n aria-disabled={disabled || undefined}\n tabIndex={disabled ? -1 : 0}\n className={cx(styles.item, className)}\n data-disabled={disabled ? \"true\" : undefined}\n data-destructive={destructive ? \"true\" : undefined}\n onClick={activate}\n onKeyDown={(e) => {\n if ((e.key === \"Enter\" || e.key === \" \") && !disabled) {\n e.preventDefault();\n activate();\n }\n }}\n >\n {children}\n </button>\n );\n}\nDropdownItem.displayName = \"DropdownItem\";\n\nexport type DropdownItemIconProps = {\n as?: React.ElementType;\n className?: string;\n children?: React.ReactNode;\n} & Record<string, unknown>;\n\nconst DropdownItemIcon = React.forwardRef<HTMLElement, DropdownItemIconProps>(\n ({ as: As = \"span\", className, children, \"aria-hidden\": ariaHidden, ...rest }, ref) => {\n const menuSize = useDropdownContentSize();\n const { size: explicitSize, ...iconRest } = rest as Record<string, unknown> & { size?: number };\n const iconSize = typeof explicitSize === \"number\" ? explicitSize : dropdownItemIconPx(menuSize);\n const Comp = As as React.ElementType;\n return (\n <Comp\n ref={ref}\n className={cx(styles.itemIcon, className as string | undefined)}\n {...iconRest}\n size={iconSize}\n aria-hidden={ariaHidden ?? true}\n >\n {children}\n </Comp>\n );\n },\n);\nDropdownItemIcon.displayName = \"DropdownItemIcon\";\n\nexport type DropdownGroupProps = React.HTMLAttributes<HTMLDivElement>;\n\nfunction DropdownGroup({ className, ...rest }: DropdownGroupProps) {\n // biome-ignore lint/a11y/useSemanticElements: role=\"group\" внутри role=\"menu\"\n return <div role=\"group\" className={cx(styles.group, className)} {...rest} />;\n}\nDropdownGroup.displayName = \"DropdownGroup\";\n\nexport type DropdownGroupLabelProps = { children: React.ReactNode; className?: string };\n\nfunction DropdownGroupLabel({ children, className }: DropdownGroupLabelProps) {\n return <div className={cx(styles.groupLabel, className)}>{children}</div>;\n}\nDropdownGroupLabel.displayName = \"DropdownGroupLabel\";\n\nexport type DropdownSeparatorProps = { className?: string };\n\nfunction DropdownSeparator({ className }: DropdownSeparatorProps) {\n return <hr className={cx(styles.separator, className)} />;\n}\nDropdownSeparator.displayName = \"DropdownSeparator\";\n\nexport type DropdownBlockProps = React.HTMLAttributes<HTMLDivElement>;\n\nfunction DropdownBlock({ className, ...rest }: DropdownBlockProps) {\n return <div className={cx(styles.block, className)} {...rest} />;\n}\nDropdownBlock.displayName = \"DropdownBlock\";\n\nexport type DropdownHeaderProps = React.HTMLAttributes<HTMLDivElement>;\n\nfunction DropdownHeader({ className, ...rest }: DropdownHeaderProps) {\n return <div className={cx(styles.header, className)} {...rest} />;\n}\nDropdownHeader.displayName = \"DropdownHeader\";\n\nexport type DropdownHeaderRowProps = React.HTMLAttributes<HTMLDivElement>;\n\nfunction DropdownHeaderRow({ className, ...rest }: DropdownHeaderRowProps) {\n return <div className={cx(styles.headerRow, className)} {...rest} />;\n}\nDropdownHeaderRow.displayName = \"DropdownHeaderRow\";\n\nexport type DropdownHeaderLeadingProps = React.HTMLAttributes<HTMLDivElement>;\n\nfunction DropdownHeaderLeading({ className, ...rest }: DropdownHeaderLeadingProps) {\n return <div className={cx(styles.headerLeading, className)} {...rest} />;\n}\nDropdownHeaderLeading.displayName = \"DropdownHeaderLeading\";\n\nexport type DropdownHeaderMainProps = React.HTMLAttributes<HTMLDivElement>;\n\nfunction DropdownHeaderMain({ className, ...rest }: DropdownHeaderMainProps) {\n return <div className={cx(styles.headerMain, className)} {...rest} />;\n}\nDropdownHeaderMain.displayName = \"DropdownHeaderMain\";\n\nexport type DropdownHeaderTitleProps = React.HTMLAttributes<HTMLDivElement>;\n\nfunction DropdownHeaderTitle({ className, ...rest }: DropdownHeaderTitleProps) {\n return <div className={cx(styles.headerTitle, className)} {...rest} />;\n}\nDropdownHeaderTitle.displayName = \"DropdownHeaderTitle\";\n\nexport type DropdownHeaderDescriptionProps = React.HTMLAttributes<HTMLDivElement> & {\n truncate?: boolean;\n};\n\nfunction DropdownHeaderDescription({\n className,\n truncate,\n ...rest\n}: DropdownHeaderDescriptionProps) {\n return (\n <div\n className={cx(\n styles.headerDescription,\n truncate ? styles.headerDescriptionTruncate : undefined,\n className,\n )}\n {...rest}\n />\n );\n}\nDropdownHeaderDescription.displayName = \"DropdownHeaderDescription\";\n\nexport type DropdownHeaderTrailingProps = React.HTMLAttributes<HTMLDivElement> & {\n alignSelf?: \"start\" | \"center\";\n};\n\nfunction DropdownHeaderTrailing({\n className,\n alignSelf = \"start\",\n ...rest\n}: DropdownHeaderTrailingProps) {\n return (\n <div\n data-trailing-align={alignSelf === \"center\" ? \"center\" : undefined}\n className={cx(styles.headerTrailing, className)}\n {...rest}\n />\n );\n}\nDropdownHeaderTrailing.displayName = \"DropdownHeaderTrailing\";\n\nexport type DropdownInsetPadding = \"none\" | \"x1\" | \"x2\" | \"x3\";\nexport type DropdownInsetGap = \"none\" | \"x2\" | \"x3\" | \"x4\";\n\nexport type DropdownInsetProps = React.HTMLAttributes<HTMLDivElement> & {\n children: React.ReactNode;\n /** Доп. отступы от внутреннего края `Dropdown.Content`. По умолчанию `x2`. */\n padding?: DropdownInsetPadding;\n /** Вертикальный зазор между прямыми дочерними блоками. По умолчанию `x3`. */\n gap?: DropdownInsetGap;\n};\n\nfunction DropdownInset({\n children,\n className,\n padding = \"x2\",\n gap = \"x3\",\n ...rest\n}: DropdownInsetProps) {\n return (\n <div\n className={cx(styles.inset, className)}\n data-inset-gap={gap}\n data-inset-padding={padding}\n {...rest}\n >\n {children}\n </div>\n );\n}\nDropdownInset.displayName = \"DropdownInset\";\n\nexport const Dropdown = {\n Root: DropdownRoot,\n Trigger: DropdownTrigger,\n Content: DropdownContent,\n Inset: DropdownInset,\n Block: DropdownBlock,\n Header: DropdownHeader,\n HeaderRow: DropdownHeaderRow,\n HeaderLeading: DropdownHeaderLeading,\n HeaderMain: DropdownHeaderMain,\n HeaderTitle: DropdownHeaderTitle,\n HeaderDescription: DropdownHeaderDescription,\n HeaderTrailing: DropdownHeaderTrailing,\n Item: DropdownItem,\n ItemIcon: DropdownItemIcon,\n Group: DropdownGroup,\n GroupLabel: DropdownGroupLabel,\n Separator: DropdownSeparator,\n};\n",".root {\n /* isolate creates a new stacking context so z-index on items works correctly */\n isolation: isolate;\n position: relative;\n display: grid;\n grid-auto-flow: column;\n grid-auto-columns: 1fr;\n justify-content: start;\n gap: var(--prime-seg-gap);\n width: fit-content;\n max-width: 100%;\n box-sizing: border-box;\n padding: var(--prime-seg-pad);\n background: var(--prime-sys-color-surface-accentSoft);\n border-radius: var(--prime-seg-radius);\n}\n\n/* Пилюля: визуальный ярус на ступень ниже номинального размера. */\n.root[data-size=\"s\"] {\n --prime-seg-height: var(--prime-sys-size-control-xs-height);\n --prime-seg-radius: var(--prime-sys-size-control-xs-radius);\n --prime-seg-pad: var(--prime-sys-unit-0p125rem);\n --prime-seg-gap: var(--prime-sys-size-control-xs-gap);\n --prime-seg-text: var(--prime-sys-size-control-xs-text);\n --prime-seg-item-pad-x: var(--prime-sys-size-control-xs-buttonPaddingX);\n --prime-seg-item-pad-y: var(--prime-sys-size-control-xs-buttonPaddingY);\n --prime-seg-indicator-inset-block: var(--prime-sys-unit-0p125rem);\n --prime-seg-indicator-radius: var(--prime-sys-size-control-xs-radius);\n}\n\n.root[data-size=\"m\"] {\n --prime-seg-gap: var(--prime-sys-size-control-s-gap);\n --prime-seg-height: var(--prime-sys-size-control-s-height);\n --prime-seg-text: var(--prime-sys-size-control-s-text);\n --prime-seg-radius: var(--prime-sys-size-control-s-radius);\n --prime-seg-pad: var(--prime-sys-unit-0p1875rem);\n --prime-seg-item-pad-x: var(--prime-sys-spacing-x3);\n --prime-seg-item-pad-y: var(--prime-sys-spacing-x3);\n --prime-seg-indicator-inset-block: var(--prime-sys-unit-0p125rem);\n}\n\n.root[data-size=\"l\"] {\n --prime-seg-gap: var(--prime-sys-size-control-m-gap);\n --prime-seg-height: var(--prime-sys-size-control-m-height);\n --prime-seg-text: var(--prime-sys-size-control-m-text);\n --prime-seg-radius: var(--prime-sys-size-control-m-radius);\n --prime-seg-pad: var(--prime-sys-unit-0p3125rem);\n --prime-seg-item-pad-x: var(--prime-sys-unit-1p25rem);\n --prime-seg-item-pad-y: var(--prime-sys-unit-1p25rem);\n --prime-seg-indicator-inset-block: var(--prime-sys-unit-0p15rem);\n}\n\n.root[data-size=\"xl\"] {\n --prime-seg-gap: var(--prime-sys-size-control-l-gap);\n --prime-seg-height: var(--prime-sys-size-control-l-height);\n --prime-seg-text: var(--prime-sys-size-control-l-text);\n --prime-seg-radius: var(--prime-sys-size-control-l-radius);\n --prime-seg-pad: var(--prime-sys-unit-0p35rem);\n --prime-seg-item-pad-x: var(--prime-sys-unit-1p75rem);\n --prime-seg-item-pad-y: var(--prime-sys-unit-1p75rem);\n --prime-seg-indicator-inset-block: var(--prime-sys-unit-0p175rem);\n}\n\n/* ─── Item ──────────────────────────────────────────────────────────────────── */\n\n.item {\n position: relative;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--prime-seg-gap);\n padding-inline: var(--prime-seg-item-pad-x);\n padding-block: var(--prime-seg-item-pad-y);\n height: var(--prime-seg-height);\n font-size: var(--prime-seg-text);\n font-family: inherit;\n font-weight: var(--prime-sys-typography-weight-medium);\n color: var(--prime-sys-color-content-muted);\n background: transparent;\n border: none;\n border-radius: var(--prime-seg-radius);\n cursor: pointer;\n transition:\n color var(--prime-sys-motion-fast),\n background-color var(--prime-sys-motion-fast),\n box-shadow var(--prime-sys-motion-fast);\n white-space: nowrap;\n user-select: none;\n}\n\n.item[aria-checked=\"true\"] {\n color: var(--prime-sys-color-content-primary);\n}\n\n.item:not([data-disabled=\"true\"]):not([aria-checked=\"true\"]):hover {\n color: var(--prime-sys-color-content-secondary);\n}\n\n.item:focus-visible {\n outline: var(--prime-sys-unit-2px) solid var(--prime-sys-color-focus-ring);\n outline-offset: var(--prime-sys-unit-2px);\n}\n\n/* Тёмная тема: неактивные — text-disabled, hover — muted. */\n[data-theme=\"dark\"] .item:not([aria-checked=\"true\"]):not([data-disabled=\"true\"]) {\n color: var(--prime-sys-color-content-disabled);\n}\n\n[data-theme=\"dark\"] .item:not([data-disabled=\"true\"]):not([aria-checked=\"true\"]):hover {\n color: var(--prime-sys-color-content-muted);\n}\n\n.item[data-disabled=\"true\"] {\n color: var(--prime-sys-color-content-disabled);\n opacity: 0.55;\n cursor: not-allowed;\n}\n\n/* ─── Icon ──────────────────────────────────────────────────────────────────── */\n\n.icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.root[data-size=\"s\"] .icon :global(svg) {\n width: var(--prime-sys-size-control-xs-icon);\n height: var(--prime-sys-size-control-xs-icon);\n}\n\n/* ─── Floating indicator (geometry from TS + inset-block / inset-inline) ─ */\n\n/*\n * Пилюля светлее/выше трека: elevated поверх accentSoft (light) / default (dark),\n * иначе в light трек и индикатор сливались (оба gray.100).\n */\n.indicator {\n position: absolute;\n left: 0;\n top: 0;\n z-index: 0;\n border-radius: var(--prime-seg-indicator-radius, var(--prime-seg-radius));\n background: var(--prime-sys-color-surface-elevated);\n box-shadow:\n var(--prime-sys-elevation-shadow-surface),\n 0 0 0 var(--prime-sys-unit-1px) var(--prime-sys-color-border-subtle);\n transition: none;\n pointer-events: none;\n}\n\n/* Тёмная тема: трек — surface-default; пилюля — elevated + тонкая обводка для отрыва от рельса. */\n:root[data-theme=\"dark\"] .root,\n[data-theme=\"dark\"] .root {\n background: var(--prime-sys-color-surface-default);\n}\n\n.root[data-animate=\"true\"] .indicator {\n transition:\n transform var(--prime-sys-motion-medium) var(--prime-sys-motion-standard),\n width var(--prime-sys-motion-medium) var(--prime-sys-motion-standard),\n height var(--prime-sys-motion-medium) var(--prime-sys-motion-standard);\n}\n","import * as React from \"react\";\n\nimport { useControllableState } from \"@/hooks/useControllableState\";\nimport { ControlSizeProvider } from \"@/internal/ControlSizeContext\";\nimport { createComponentContext } from \"@/internal/context\";\nimport { cx } from \"@/internal/cx\";\nimport { CSS_PX_SUFFIX } from \"@/internal/runtimeUnits\";\nimport type { InputSize } from \"@/internal/states\";\n\nimport styles from \"./SegmentedControl.module.css\";\n\n/**\n * Резолвит длину в px для `width: <expression>` (токены/calc на корне).\n * block — отступ пилюли сверху/снизу от сегмента; inline — слева/справа (fallback = block).\n */\nfunction readCssWidthPx(root: HTMLElement, widthExpression: string): number {\n const doc = root.ownerDocument;\n const win = doc.defaultView;\n if (!win) return 0;\n\n const probe = doc.createElement(\"div\");\n probe.setAttribute(\"aria-hidden\", \"true\");\n probe.style.cssText = `position:absolute;visibility:hidden;pointer-events:none;left:0;top:0;width:${widthExpression};height:0;margin:0;padding:0;border:0;box-sizing:content-box`;\n\n root.appendChild(probe);\n const px = probe.offsetWidth;\n root.removeChild(probe);\n return Number.isFinite(px) ? px : 0;\n}\n\n// ─── Context ─────────────────────────────────────────────────────────────────\n\ntype SegmentedControlContextValue = {\n value: string;\n onSelect: (value: string) => void;\n rootDisabled: boolean;\n};\n\nconst [SegmentedControlProvider, useSegmentedControlContext] =\n createComponentContext<SegmentedControlContextValue>(\"SegmentedControl\");\n\n// ─── Root ─────────────────────────────────────────────────────────────────────\n\nexport type SegmentedControlRootProps = {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n disabled?: boolean;\n size?: InputSize;\n children: React.ReactNode;\n className?: string;\n};\n\nfunction SegmentedControlRoot({\n value,\n defaultValue = \"\",\n onValueChange,\n disabled = false,\n size = \"m\",\n children,\n className,\n}: SegmentedControlRootProps) {\n const [selectedValue, setSelectedValue] = useControllableState<string>({\n value,\n defaultValue,\n onChange: onValueChange,\n });\n\n const [indicator, setIndicator] = React.useState({\n left: 0,\n top: 0,\n width: 0,\n height: 0,\n });\n const [animate, setAnimate] = React.useState(false);\n const containerRef = React.useRef<HTMLDivElement>(null);\n const indicatorRef = React.useRef<HTMLDivElement>(null);\n\n const onSelect = React.useCallback(\n (nextValue: string) => {\n setAnimate(true);\n setSelectedValue(nextValue);\n },\n [setSelectedValue],\n );\n\n React.useLayoutEffect(() => {\n const root = containerRef.current;\n if (!root) return;\n\n const update = () => {\n const active = root.querySelector<HTMLElement>('[role=\"radio\"][aria-checked=\"true\"]');\n if (!active) {\n setIndicator({ left: 0, top: 0, width: 0, height: 0 });\n return;\n }\n\n const insetBlock = readCssWidthPx(root, \"var(--prime-seg-indicator-inset-block)\");\n const insetInline = readCssWidthPx(\n root,\n \"var(--prime-seg-indicator-inset-inline, var(--prime-seg-indicator-inset-block))\",\n );\n const left = active.offsetLeft + insetInline;\n const top = active.offsetTop + insetBlock;\n const width = Math.max(2, active.offsetWidth - 2 * insetInline);\n const height = Math.max(2, active.offsetHeight - 2 * insetBlock);\n setIndicator({ left, top, width, height });\n };\n\n update();\n\n const mo = new MutationObserver(update);\n mo.observe(root, {\n subtree: true,\n attributes: true,\n attributeFilter: [\"aria-checked\", \"data-disabled\"],\n });\n\n let ro: ResizeObserver | undefined;\n if (typeof ResizeObserver !== \"undefined\") {\n ro = new ResizeObserver(update);\n ro.observe(root);\n }\n\n return () => {\n mo.disconnect();\n ro?.disconnect();\n };\n }, []);\n\n React.useEffect(() => {\n if (!animate) return;\n const id = window.setTimeout(() => setAnimate(false), 320);\n return () => window.clearTimeout(id);\n }, [animate]);\n\n React.useLayoutEffect(() => {\n const indicatorEl = indicatorRef.current;\n if (!indicatorEl) return;\n\n indicatorEl.style.transform = `translate3d(${indicator.left}px, ${indicator.top}px, 0)`;\n indicatorEl.style.width = indicator.width > 0 ? `${indicator.width}${CSS_PX_SUFFIX}` : \"0\";\n indicatorEl.style.height = indicator.height > 0 ? `${indicator.height}${CSS_PX_SUFFIX}` : \"0\";\n }, [indicator.height, indicator.left, indicator.top, indicator.width]);\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key !== \"ArrowRight\" && e.key !== \"ArrowLeft\") return;\n e.preventDefault();\n\n const container = e.currentTarget;\n const items = Array.from(\n container.querySelectorAll<HTMLButtonElement>('[role=\"radio\"]:not([data-disabled=\"true\"])'),\n );\n if (!items.length) return;\n\n const activeEl = document.activeElement as HTMLButtonElement;\n const idx = items.indexOf(activeEl);\n\n if (idx === -1) {\n const target = e.key === \"ArrowRight\" ? items[0] : items[items.length - 1];\n target?.focus();\n const tv = target?.dataset.value;\n if (tv) onSelect(tv);\n return;\n }\n\n const next =\n e.key === \"ArrowRight\" ? (idx + 1) % items.length : (idx - 1 + items.length) % items.length;\n\n const nextItem = items[next];\n nextItem?.focus();\n const nextValue = nextItem?.dataset.value;\n if (nextValue) onSelect(nextValue);\n };\n\n const hasSelection = selectedValue !== \"\";\n\n return (\n <SegmentedControlProvider value={{ value: selectedValue, onSelect, rootDisabled: disabled }}>\n <div\n ref={containerRef}\n role=\"radiogroup\"\n aria-disabled={disabled || undefined}\n tabIndex={!disabled && !hasSelection ? 0 : -1}\n className={cx(styles.root, className)}\n onKeyDown={handleKeyDown}\n data-disabled={disabled ? \"true\" : undefined}\n data-size={size}\n data-animate={animate ? \"true\" : undefined}\n >\n <ControlSizeProvider value={size}>{children}</ControlSizeProvider>\n\n <div ref={indicatorRef} className={styles.indicator} aria-hidden=\"true\" />\n </div>\n </SegmentedControlProvider>\n );\n}\n\nSegmentedControlRoot.displayName = \"SegmentedControl.Root\";\n\n// ─── Item ─────────────────────────────────────────────────────────────────────\n\nexport type SegmentedControlItemProps = {\n value: string;\n disabled?: boolean;\n children: React.ReactNode;\n className?: string;\n};\n\nfunction SegmentedControlItem({\n value,\n disabled = false,\n children,\n className,\n}: SegmentedControlItemProps) {\n const ctx = useSegmentedControlContext();\n const isChecked = ctx.value === value;\n const isDisabled = ctx.rootDisabled || disabled;\n\n return (\n // biome-ignore lint/a11y/useSemanticElements: compound component intentionally uses role=\"radio\" with roving tabindex\n <button\n role=\"radio\"\n type=\"button\"\n aria-checked={isChecked}\n aria-disabled={isDisabled || undefined}\n data-disabled={isDisabled ? \"true\" : undefined}\n data-value={value}\n tabIndex={isChecked && !isDisabled ? 0 : -1}\n disabled={isDisabled}\n className={cx(styles.item, className)}\n onClick={() => {\n if (!isDisabled) ctx.onSelect(value);\n }}\n >\n {children}\n </button>\n );\n}\n\nSegmentedControlItem.displayName = \"SegmentedControl.Item\";\n\n// ─── Icon ─────────────────────────────────────────────────────────────────────\n\nexport type SegmentedControlIconProps = {\n children: React.ReactNode;\n className?: string;\n} & Omit<React.HTMLAttributes<HTMLSpanElement>, \"children\">;\n\nfunction SegmentedControlIcon({ children, className, ...rest }: SegmentedControlIconProps) {\n return (\n <span className={cx(styles.icon, className)} aria-hidden=\"true\" {...rest}>\n {children}\n </span>\n );\n}\n\nSegmentedControlIcon.displayName = \"SegmentedControl.Icon\";\n\n// ─── Export ───────────────────────────────────────────────────────────────────\n\nexport const SegmentedControl = {\n Root: SegmentedControlRoot,\n Item: SegmentedControlItem,\n Icon: SegmentedControlIcon,\n};\n",".root {\n display: flex;\n flex-direction: column;\n gap: 0;\n border: var(--prime-sys-unit-1px) solid var(--prime-sys-color-border-subtle);\n border-radius: var(--prime-sys-shape-radius-4xl);\n background: var(--prime-sys-color-surface-elevated);\n overflow: hidden;\n text-align: start;\n /* Иначе длинные строки кода раздувают раскладку и вылезают за родителя playground. */\n min-width: 0;\n max-width: 100%;\n}\n\n/* Сжатие и прокрутка панелей превью/кода в колонке flex */\n.root > * {\n min-width: 0;\n}\n\n/*\n * Тулбар: одна строка, пока помещается; при нехватке места — перенос (flex-wrap).\n * Первая группа — по ширине контента; сегмент устройств прижат вправо (margin-left: auto)\n * и забирает остаток строки (flex-grow). На отдельной строке после переноса — растягивается\n * на всю ширину (единственный flex-grow на линии).\n * Без фиксированных @media/@container: только intrinsic wrap.\n */\n.toolbar {\n flex-shrink: 0;\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-start;\n row-gap: var(--prime-sys-spacing-x3);\n column-gap: var(--prime-sys-spacing-x3);\n padding: var(--prime-sys-spacing-x3) var(--prime-sys-spacing-x4);\n border-bottom: var(--prime-sys-unit-1px) solid var(--prime-sys-color-border-subtle);\n background: var(--prime-sys-color-surface-raised);\n min-width: 0;\n container-type: inline-size;\n}\n\n.toolbarLine1 {\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n align-items: center;\n flex: 0 1 auto;\n min-width: 0;\n gap: var(--prime-sys-spacing-x2);\n}\n\n.toolbarLine1End {\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n align-items: center;\n gap: var(--prime-sys-spacing-x2);\n flex-shrink: 0;\n margin-left: auto;\n}\n\n.toolbarPaneSegment {\n flex: 0 1 auto;\n min-width: 0;\n width: fit-content;\n max-width: 100%;\n}\n\n.toolbarViewportSegment {\n flex: 0 1 auto;\n min-width: 0;\n margin-left: auto;\n width: fit-content;\n}\n\n/* Перебить min-width: max-content у SegmentedControl.root, иначе перенос не срабатывает */\n.toolbar .toolbarPaneSegment,\n.toolbar .toolbarViewportSegment {\n min-width: 0;\n}\n\n@container (max-width: 44rem) {\n .toolbarLine1 {\n flex: 1 1 100%;\n width: 100%;\n }\n\n .toolbarPaneSegment {\n flex: 1 1 auto;\n width: 100%;\n }\n\n .toolbarViewportSegment {\n flex: 1 1 100%;\n width: 100%;\n margin-left: 0;\n }\n\n .toolbarPaneSegment :global([role=\"radio\"]),\n .toolbarViewportSegment :global([role=\"radio\"]) {\n min-width: 0;\n }\n}\n\n.previewShell {\n padding: var(--prime-sys-spacing-x4);\n background: var(--prime-sys-color-surface-default);\n}\n\n.previewViewport {\n margin-inline: auto;\n width: 100%;\n min-width: 0;\n max-width: 100%;\n transition: max-width var(--prime-sys-motion-medium) var(--prime-sys-motion-standard);\n}\n\n.previewViewport[data-viewport=\"desktop\"] {\n max-width: none;\n}\n\n.previewViewport[data-viewport=\"tablet\"] {\n max-width: var(--prime-sys-unit-48rem);\n}\n\n.previewViewport[data-viewport=\"mobile\"] {\n max-width: var(--prime-sys-unit-24p375rem);\n}\n\n.previewInner {\n display: flex;\n flex-direction: column;\n justify-content: center;\n min-width: 0;\n max-width: 100%;\n min-height: var(--prime-sys-unit-10rem);\n padding: var(--prime-sys-spacing-x4);\n border-radius: var(--prime-sys-shape-radius-l);\n border: var(--prime-sys-unit-1px) solid var(--prime-sys-color-border-subtle);\n background: transparent;\n /* Обрезка контента шире карточки (широкие группы кнопок, таблицы без своей прокрутки). */\n overflow: hidden;\n}\n\n/*\n * Без align-self: center дочерний канвас получает stretch по умолчанию и на всю ширину\n * внутренней области — при width: fit-content у контролов (SegmentedControl и т.д.) блок\n * визуально «прилипает» к логическому start, хотя внутри канваса стоит align-items: center.\n */\n.previewInner > * {\n align-self: center;\n margin-inline: auto;\n min-width: 0;\n max-width: 100%;\n}\n\n/* fullWidth в превью: иначе канвас остаётся fit-content + align-self:center и не даёт ширины дочерним 100%. */\n.previewInner > .previewCanvas:global(:has([data-full-width=\"true\"])) {\n align-self: stretch;\n width: 100%;\n margin-inline: 0;\n}\n\n.previewCanvas {\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n min-width: 0;\n max-width: 100%;\n}\n\n/* dense-stack: скролл и плотная колонка на всю ширину. stack / stack-narrow — по ширине контента. */\n.previewCanvas[data-preview-layout=\"dense-stack\"] {\n width: 100%;\n}\n\n/* По ширине содержимого, не шире области превью. */\n.previewCanvas[data-preview-layout=\"default\"],\n.previewCanvas[data-preview-layout=\"stack-center\"],\n.previewCanvas[data-preview-layout=\"row\"],\n.previewCanvas[data-preview-layout=\"row-start\"],\n.previewCanvas[data-preview-layout=\"row-wrap\"] {\n width: fit-content;\n max-width: 100%;\n margin-inline: auto;\n}\n\n/* Раскладка превью: без лишних обёрток в сниппетах (колонка / ряд). */\n.previewCanvas[data-preview-layout=\"stack\"] {\n flex-direction: column;\n align-items: center;\n justify-content: flex-start;\n gap: var(--prime-sys-spacing-x4);\n width: fit-content;\n max-width: 100%;\n margin-inline: auto;\n}\n\n.previewCanvas[data-preview-layout=\"stack\"]:global(:has([data-full-width=\"true\"])),\n.previewCanvas[data-preview-layout=\"stack-narrow\"]:global(:has([data-full-width=\"true\"])) {\n width: 100%;\n align-items: stretch;\n margin-inline: 0;\n}\n\n/*\n * Строка превью для stack / stack-narrow: колонка, чтобы сниппет из одного компонента\n * с Fragment внутри (Input sizes, Textarea sizes…) не оказывался в одном flex-row.\n * Ширина по содержимому (не одна общая полоса на весь превью); max-width 100% — не вылезать за карточку.\n * Узкий лимит на весь блок — previewLayout=\"stack-narrow\" на .previewCanvas.\n */\n.previewStackLine {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: flex-start;\n gap: var(--prime-sys-spacing-x4);\n box-sizing: border-box;\n width: fit-content;\n max-width: 100%;\n min-width: 0;\n}\n\n.previewStackLine:global(:has(.examplePreviewBleed)) {\n width: 100%;\n max-width: none;\n}\n\n.previewStackLine:global(:has(table)) {\n width: 100%;\n max-width: none;\n}\n\n/* fullWidth у Button: строка на ширину канваса + stretch — иначе align-items:center сжимает flex-item по контенту. */\n.previewStackLine:global(:has([data-full-width=\"true\"])) {\n width: 100%;\n max-width: 100%;\n align-items: stretch;\n}\n\n.previewCanvas[data-preview-layout=\"stack-narrow\"] .previewStackLine {\n max-width: 100%;\n}\n\n.previewStackLine > * {\n flex: 0 1 auto;\n min-width: 0;\n max-width: 100%;\n}\n\n.previewCanvas[data-preview-layout=\"stack-center\"] {\n flex-direction: column;\n align-items: center;\n justify-content: flex-start;\n gap: var(--prime-sys-spacing-x3);\n}\n\n.previewCanvas[data-preview-layout=\"row\"] {\n flex-direction: row;\n flex-wrap: wrap;\n align-items: center;\n justify-content: center;\n gap: var(--prime-sys-spacing-x3);\n padding-block: clamp(var(--prime-sys-unit-1p5rem), 4vh, var(--prime-sys-unit-3rem));\n}\n\n.previewCanvas[data-preview-layout=\"row-start\"] {\n flex-direction: row;\n flex-wrap: wrap;\n align-items: flex-start;\n justify-content: flex-start;\n gap: var(--prime-sys-spacing-x3);\n padding-block: clamp(var(--prime-sys-unit-1rem), 3vh, var(--prime-sys-unit-2rem));\n}\n\n.previewCanvas[data-preview-layout=\"row-wrap\"] {\n flex-direction: row;\n flex-wrap: wrap;\n align-items: flex-start;\n justify-content: center;\n gap: var(--prime-sys-spacing-x2);\n}\n\n.previewCanvas[data-preview-layout=\"stack-narrow\"] {\n flex-direction: column;\n align-items: center;\n justify-content: flex-start;\n gap: var(--prime-sys-spacing-x3);\n box-sizing: border-box;\n width: fit-content;\n max-width: min(100%, var(--prime-sys-unit-28rem));\n margin-inline: auto;\n}\n\n.previewCanvas[data-preview-layout=\"dense-stack\"] {\n flex-direction: column;\n align-items: center;\n justify-content: flex-start;\n gap: var(--prime-sys-unit-0p35rem);\n box-sizing: border-box;\n max-height: var(--prime-sys-unit-22rem);\n width: 100%;\n overflow: auto;\n padding-right: var(--prime-sys-unit-0p25rem);\n}\n\n.previewInner[data-theme=\"dark\"] {\n background: transparent;\n border-color: var(--prime-sys-color-border-subtle);\n}\n\n/*\n * Вкладка «Код»: контейнер для `CodeBlock` (подсветка TS/TSX без Shiki).\n */\n.codePane {\n box-sizing: border-box;\n margin: 0;\n padding: var(--prime-sys-spacing-x4);\n background: var(--prime-sys-color-surface-default);\n min-width: 0;\n max-width: 100%;\n max-height: min(var(--prime-sys-unit-32rem), 70vh);\n overflow-x: auto;\n overflow-y: auto;\n font-size: var(--prime-sys-typography-sizeScale-xs);\n line-height: 1.55;\n color: var(--prime-sys-color-content-primary);\n}\n","import { Code2, Eye, Monitor, Smartphone, Tablet } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { Button } from \"@/components/button/Button\";\nimport { CodeBlock } from \"@/components/code-block/CodeBlock\";\nimport { SegmentedControl } from \"@/components/segmented-control/SegmentedControl\";\nimport { Icon } from \"@/icons\";\nimport { createComponentContext } from \"@/internal/context\";\nimport { cx } from \"@/internal/cx\";\n\nimport styles from \"./ExampleFrame.module.css\";\n\ntype Pane = \"preview\" | \"code\";\nexport type ExampleFrameViewport = \"desktop\" | \"tablet\" | \"mobile\";\ntype ColorScheme = \"light\" | \"dark\";\n\n/** Раскладка содержимого превью — чтобы в сниппетах не оборачивать компоненты в div.stack/row. */\nexport type ExampleFramePreviewLayout =\n | \"default\"\n | \"stack\"\n | \"stack-center\"\n | \"stack-narrow\"\n | \"dense-stack\"\n | \"row\"\n | \"row-start\"\n | \"row-wrap\";\n\ntype ExampleFrameContextValue = {\n code: string;\n language: string;\n pane: Pane;\n setPane: (p: Pane) => void;\n viewport: ExampleFrameViewport;\n setViewport: (v: ExampleFrameViewport) => void;\n colorScheme: ColorScheme;\n setColorScheme: (s: ColorScheme) => void;\n showThemeToggle: boolean;\n onCopy?: () => void;\n};\n\nconst [ExampleFrameProvider, useExampleFrameContext] =\n createComponentContext<ExampleFrameContextValue>(\"ExampleFrame\");\n\nexport type ExampleFrameRootProps = {\n /** Исходный текст для вкладки «Код» и для копирования (независимо от активной вкладки). */\n code: string;\n /** Зарезервировано под будущую мультиязычность; сейчас подсветка всегда TS/TSX (`CodeBlock`). */\n language?: string;\n children?: React.ReactNode;\n className?: string;\n /** Управляемая цветовая схема превью (light/dark). */\n colorScheme?: ColorScheme;\n defaultColorScheme?: ColorScheme;\n onColorSchemeChange?: (scheme: ColorScheme) => void;\n /** Управляемая ширина превью (desktop / tablet / mobile). */\n viewport?: ExampleFrameViewport;\n defaultViewport?: ExampleFrameViewport;\n onViewportChange?: (v: ExampleFrameViewport) => void;\n /** Показывать ли кнопку переключения light/dark в тулбаре. */\n showThemeToggle?: boolean;\n /** Вызывается после успешного копирования `code` в буфер. */\n onCopy?: () => void;\n /**\n * Как выстроить детей внутри превью. По умолчанию — по центру (один блок).\n * Для списков из нескольких компонентов используйте `stack` / `stack-center` / `row`.\n */\n previewLayout?: ExampleFramePreviewLayout;\n /**\n * Синхронизация с глобальным бренд-пресетом (например playground: `data-theme-preset` на `html`).\n * Если задан только `data-theme` без пресета, на узле действует «голый» dark/light из theme-*.css —\n * без оверлеев `[data-theme][data-theme-preset]` из playground, цвета превью расходятся с оболочкой.\n */\n themePreset?: string;\n};\n\nfunction ExampleFrameRoot({\n code,\n language = \"tsx\",\n children,\n className,\n colorScheme: colorSchemeProp,\n defaultColorScheme = \"light\",\n onColorSchemeChange,\n viewport: viewportProp,\n defaultViewport = \"tablet\",\n onViewportChange,\n showThemeToggle = true,\n onCopy,\n previewLayout = \"default\",\n themePreset,\n}: ExampleFrameRootProps) {\n const [pane, setPane] = React.useState<Pane>(\"preview\");\n const [uncontrolledViewport, setUncontrolledViewport] =\n React.useState<ExampleFrameViewport>(defaultViewport);\n const [uncontrolledScheme, setUncontrolledScheme] =\n React.useState<ColorScheme>(defaultColorScheme);\n\n const isSchemeControlled = colorSchemeProp !== undefined;\n const colorScheme = isSchemeControlled ? colorSchemeProp : uncontrolledScheme;\n\n const isViewportControlled = viewportProp !== undefined;\n const viewport = isViewportControlled ? viewportProp : uncontrolledViewport;\n\n const setColorScheme = React.useCallback(\n (next: ColorScheme) => {\n if (!isSchemeControlled) {\n setUncontrolledScheme(next);\n }\n onColorSchemeChange?.(next);\n },\n [isSchemeControlled, onColorSchemeChange],\n );\n\n const setViewport = React.useCallback(\n (next: ExampleFrameViewport) => {\n if (!isViewportControlled) {\n setUncontrolledViewport(next);\n }\n onViewportChange?.(next);\n },\n [isViewportControlled, onViewportChange],\n );\n\n const ctxValue = React.useMemo<ExampleFrameContextValue>(\n () => ({\n code,\n language,\n pane,\n setPane,\n viewport,\n setViewport,\n colorScheme,\n setColorScheme,\n showThemeToggle,\n onCopy,\n }),\n [\n code,\n language,\n pane,\n viewport,\n setViewport,\n colorScheme,\n setColorScheme,\n showThemeToggle,\n onCopy,\n ],\n );\n\n let previewChildren: React.ReactNode = null;\n React.Children.forEach(children, (child) => {\n if (React.isValidElement(child) && child.type === ExampleFrameStage) {\n previewChildren = (child.props as { children?: React.ReactNode }).children ?? null;\n }\n });\n if (previewChildren === null) {\n previewChildren = children;\n }\n\n const wrapStackPreviewLines = previewLayout === \"stack\" || previewLayout === \"stack-narrow\";\n /* Fragment в сниппетах — один ребёнок у Root; toArray разворачивает его, иначе все поля\n * попадают в один .previewStackLine с flex-direction: row. */\n const previewCanvasBody = wrapStackPreviewLines\n ? React.Children.toArray(previewChildren).map((child, index) => {\n if (child == null) return child;\n if (!React.isValidElement(child)) return child;\n return (\n <div\n key={child.key ?? `prime-preview-row-${String(index)}`}\n className={styles.previewStackLine}\n >\n {child}\n </div>\n );\n })\n : previewChildren;\n\n return (\n <ExampleFrameProvider value={ctxValue}>\n <div className={cx(styles.root, className)}>\n <ExampleFrameToolbar />\n {pane === \"preview\" ? (\n <div className={styles.previewShell}>\n <div className={styles.previewViewport} data-viewport={viewport}>\n <div\n className={styles.previewInner}\n data-theme={colorScheme}\n {...(themePreset != null && themePreset !== \"\"\n ? { \"data-theme-preset\": themePreset }\n : {})}\n >\n <div className={styles.previewCanvas} data-preview-layout={previewLayout}>\n {previewCanvasBody}\n </div>\n </div>\n </div>\n </div>\n ) : (\n <ExampleFrameCodePane themePreset={themePreset} />\n )}\n </div>\n </ExampleFrameProvider>\n );\n}\n\nExampleFrameRoot.displayName = \"ExampleFrame.Root\";\n\nfunction ExampleFrameToolbar() {\n const ctx = useExampleFrameContext();\n const [copyState, setCopyState] = React.useState<\"idle\" | \"copied\" | \"error\">(\"idle\");\n\n const handleCopy = React.useCallback(async () => {\n try {\n await navigator.clipboard.writeText(ctx.code);\n setCopyState(\"copied\");\n ctx.onCopy?.();\n window.setTimeout(() => setCopyState(\"idle\"), 2000);\n } catch {\n setCopyState(\"error\");\n window.setTimeout(() => setCopyState(\"idle\"), 2000);\n }\n }, [ctx]);\n\n const toggleScheme = () => {\n ctx.setColorScheme(ctx.colorScheme === \"light\" ? \"dark\" : \"light\");\n };\n\n const copyLabel =\n copyState === \"copied\" ? \"Скопировано\" : copyState === \"error\" ? \"Ошибка\" : \"Копировать код\";\n\n return (\n <div className={styles.toolbar}>\n <div className={styles.toolbarLine1}>\n <SegmentedControl.Root\n className={styles.toolbarPaneSegment}\n value={ctx.pane}\n onValueChange={(v) => ctx.setPane(v as Pane)}\n size=\"s\"\n >\n <SegmentedControl.Item value=\"preview\">\n <SegmentedControl.Icon>\n <Eye size={14} strokeWidth={2} aria-hidden />\n </SegmentedControl.Icon>\n Preview\n </SegmentedControl.Item>\n <SegmentedControl.Item value=\"code\">\n <SegmentedControl.Icon>\n <Code2 size={14} strokeWidth={2} aria-hidden />\n </SegmentedControl.Icon>\n Code\n </SegmentedControl.Item>\n </SegmentedControl.Root>\n <div className={styles.toolbarLine1End}>\n {ctx.showThemeToggle ? (\n <Button.Root\n type=\"button\"\n variant=\"neutral\"\n mode=\"lighter\"\n size=\"s\"\n onClick={toggleScheme}\n aria-label={\n ctx.colorScheme === \"light\" ? \"Включить тёмную тему\" : \"Включить светлую тему\"\n }\n >\n <Button.Icon>\n {ctx.colorScheme === \"light\" ? (\n <Icon name=\"theme.dark\" size=\"s\" tone=\"subtle\" />\n ) : (\n <Icon name=\"theme.light\" size=\"s\" tone=\"subtle\" />\n )}\n </Button.Icon>\n </Button.Root>\n ) : null}\n <Button.Root\n type=\"button\"\n variant=\"neutral\"\n mode=\"lighter\"\n size=\"s\"\n onClick={handleCopy}\n aria-label={copyLabel}\n >\n <Button.Icon>\n <Icon name=\"action.copy\" size=\"s\" tone=\"subtle\" />\n </Button.Icon>\n </Button.Root>\n </div>\n </div>\n {ctx.pane === \"preview\" ? (\n <SegmentedControl.Root\n className={styles.toolbarViewportSegment}\n value={ctx.viewport}\n onValueChange={(v) => ctx.setViewport(v as ExampleFrameViewport)}\n size=\"s\"\n >\n <SegmentedControl.Item value=\"desktop\">\n <SegmentedControl.Icon>\n <Monitor size={14} strokeWidth={2} aria-hidden />\n </SegmentedControl.Icon>\n Desktop\n </SegmentedControl.Item>\n <SegmentedControl.Item value=\"tablet\">\n <SegmentedControl.Icon>\n <Tablet size={14} strokeWidth={2} aria-hidden />\n </SegmentedControl.Icon>\n Tablet\n </SegmentedControl.Item>\n <SegmentedControl.Item value=\"mobile\">\n <SegmentedControl.Icon>\n <Smartphone size={14} strokeWidth={2} aria-hidden />\n </SegmentedControl.Icon>\n Mobile\n </SegmentedControl.Item>\n </SegmentedControl.Root>\n ) : null}\n </div>\n );\n}\n\nExampleFrameToolbar.displayName = \"ExampleFrame.Toolbar\";\n\nfunction ExampleFrameCodePane({ themePreset }: { themePreset?: string }) {\n const ctx = useExampleFrameContext();\n const trimmed = ctx.code.trimEnd();\n const presetProps =\n themePreset != null && themePreset !== \"\" ? { \"data-theme-preset\": themePreset } : {};\n\n return (\n <div className={styles.codePane} data-theme={ctx.colorScheme} {...presetProps}>\n <CodeBlock.Root code={trimmed} colorScheme={ctx.colorScheme} />\n </div>\n );\n}\n\nExampleFrameCodePane.displayName = \"ExampleFrame.CodePane\";\n\nexport type ExampleFrameStageProps = {\n children: React.ReactNode;\n};\n\nfunction ExampleFrameStage({ children }: ExampleFrameStageProps) {\n return <>{children}</>;\n}\n\nExampleFrameStage.displayName = \"ExampleFrame.Stage\";\n\nexport const ExampleFrame = {\n Root: ExampleFrameRoot,\n Stage: ExampleFrameStage,\n};\n","/* Высота трека — доля control-height того же яруса, как у Slider. */\n.root {\n display: flex;\n flex-direction: column;\n gap: var(--progress-root-gap);\n width: 100%;\n}\n\n.root[data-size=\"s\"] {\n --progress-root-gap: var(--prime-sys-size-control-s-gap);\n --progress-track-h: var(--prime-sys-spacing-xs);\n --progress-label-size: var(--prime-sys-size-control-s-text);\n}\n\n.root[data-size=\"m\"] {\n --progress-root-gap: var(--prime-sys-size-control-m-gap);\n --progress-track-h: var(--prime-sys-spacing-xs);\n --progress-label-size: var(--prime-sys-size-control-m-text);\n}\n\n.root[data-size=\"l\"] {\n --progress-root-gap: var(--prime-sys-size-control-l-gap);\n --progress-track-h: var(--prime-sys-spacing-s);\n --progress-label-size: var(--prime-sys-size-control-l-text);\n}\n\n.root[data-size=\"xl\"] {\n --progress-root-gap: var(--prime-sys-size-control-xl-gap);\n --progress-track-h: var(--prime-sys-spacing-s);\n --progress-label-size: var(--prime-sys-size-control-xl-text);\n}\n\n.label {\n font-size: var(--progress-label-size);\n color: var(--prime-sys-color-content-primary);\n}\n\n.track {\n -webkit-appearance: none;\n appearance: none;\n width: 100%;\n height: var(--progress-track-h);\n border: 0;\n background: var(--prime-sys-color-surface-accentSoft);\n border-radius: var(--prime-sys-shape-radius-round);\n overflow: hidden;\n}\n\n.track::-webkit-progress-bar {\n background: var(--prime-sys-color-surface-accentSoft);\n}\n\n.track::-webkit-progress-value {\n background: var(--prime-sys-color-action-primaryBackground);\n border-radius: var(--prime-sys-shape-radius-round);\n transition: width var(--prime-sys-motion-medium) var(--prime-sys-motion-standard);\n}\n\n.track::-moz-progress-bar {\n background: var(--prime-sys-color-action-primaryBackground);\n border-radius: var(--prime-sys-shape-radius-round);\n transition: width var(--prime-sys-motion-medium) var(--prime-sys-motion-standard);\n}\n","import * as React from \"react\";\n\nimport { cx } from \"@/internal/cx\";\nimport { toDataAttributes } from \"@/internal/data-attributes\";\nimport type { ProgressBarSize } from \"@/internal/states\";\n\nimport styles from \"./ProgressBar.module.css\";\n\nexport type { ProgressBarSize };\n\nexport type ProgressBarRootProps = {\n value: number;\n max?: number;\n label?: string;\n size?: ProgressBarSize;\n className?: string;\n};\n\nfunction clampProgress(value: number, max: number): number {\n return Math.min(max, Math.max(value, 0));\n}\n\nconst ProgressBarRoot = React.forwardRef<HTMLProgressElement, ProgressBarRootProps>(\n ({ value, max = 100, label, size = \"m\", className }, ref) => {\n const safeMax = max > 0 ? max : 100;\n const safeValue = clampProgress(value, safeMax);\n const labelId = React.useId();\n\n return (\n <div className={cx(styles.root, className)} {...toDataAttributes({ size })}>\n {label ? (\n <span className={styles.label} id={labelId}>\n {label}\n </span>\n ) : null}\n <progress\n ref={ref}\n value={safeValue}\n max={safeMax}\n aria-labelledby={label ? labelId : undefined}\n className={styles.track}\n />\n </div>\n );\n },\n);\n\nProgressBarRoot.displayName = \"ProgressBarRoot\";\n\nexport const ProgressBar = { Root: ProgressBarRoot };\n",".root {\n /* Размер по умолчанию — m (ярлык всегда с data-size из TS) */\n --fu-pad: var(--prime-sys-spacing-x6);\n --fu-stack: var(--prime-sys-spacing-x4);\n --fu-copy-gap: var(--prime-sys-size-control-m-gap);\n --fu-title: var(--prime-sys-size-control-m-text);\n --fu-chip-h: var(--prime-sys-size-control-m-height);\n --fu-chip-px: var(--prime-sys-size-control-m-buttonPaddingX);\n --fu-chip-py: var(--prime-sys-size-control-m-buttonPaddingY);\n --fu-chip-radius: var(--prime-sys-size-control-m-radius);\n --fu-chip-font: var(--prime-sys-size-control-m-supportText);\n --fu-surface-radius: var(--prime-sys-shape-radius-l);\n --fu-maxw: var(--prime-sys-unit-22rem);\n\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n width: 100%;\n box-sizing: border-box;\n padding: var(--fu-pad);\n border: var(--prime-sys-border-width-control) dashed var(--prime-sys-color-border-subtle);\n border-radius: var(--fu-surface-radius);\n background: var(--prime-sys-color-surface-elevated);\n box-shadow: var(--prime-sys-elevation-shadow-surface);\n cursor: pointer;\n text-align: center;\n transition:\n border-color var(--prime-sys-motion-medium) var(--prime-sys-motion-standard),\n background-color var(--prime-sys-motion-medium) var(--prime-sys-motion-standard),\n box-shadow var(--prime-sys-motion-medium) var(--prime-sys-motion-standard);\n}\n\n.root[data-size=\"s\"] {\n --fu-pad: var(--prime-sys-spacing-x5);\n --fu-stack: var(--prime-sys-spacing-x3);\n --fu-copy-gap: var(--prime-sys-size-control-s-gap);\n --fu-title: var(--prime-sys-size-control-s-text);\n --fu-chip-h: var(--prime-sys-size-control-s-height);\n --fu-chip-px: var(--prime-sys-size-control-s-buttonPaddingX);\n --fu-chip-py: var(--prime-sys-size-control-s-buttonPaddingY);\n --fu-chip-radius: var(--prime-sys-size-control-s-radius);\n --fu-chip-font: var(--prime-sys-size-control-s-supportText);\n --fu-surface-radius: var(--prime-sys-shape-radius-m);\n --fu-maxw: var(--prime-sys-unit-18rem);\n}\n\n.root[data-size=\"l\"] {\n --fu-pad: var(--prime-sys-spacing-x8);\n --fu-stack: var(--prime-sys-spacing-x5);\n --fu-copy-gap: var(--prime-sys-size-control-l-gap);\n --fu-title: var(--prime-sys-size-control-l-text);\n --fu-chip-h: var(--prime-sys-size-control-l-height);\n --fu-chip-px: var(--prime-sys-size-control-l-buttonPaddingX);\n --fu-chip-py: var(--prime-sys-size-control-l-buttonPaddingY);\n --fu-chip-radius: var(--prime-sys-size-control-l-radius);\n --fu-chip-font: var(--prime-sys-size-control-l-supportText);\n --fu-surface-radius: var(--prime-sys-shape-radius-4xl);\n --fu-maxw: var(--prime-sys-unit-26rem);\n}\n\n.root[data-size=\"xl\"] {\n --fu-pad: var(--prime-sys-spacing-x10);\n --fu-stack: var(--prime-sys-spacing-x5);\n --fu-copy-gap: var(--prime-sys-size-control-xl-gap);\n --fu-title: var(--prime-sys-size-control-xl-text);\n --fu-chip-h: var(--prime-sys-size-control-xl-height);\n --fu-chip-px: var(--prime-sys-size-control-xl-buttonPaddingX);\n --fu-chip-py: var(--prime-sys-size-control-xl-buttonPaddingY);\n --fu-chip-radius: var(--prime-sys-size-control-xl-radius);\n --fu-chip-font: var(--prime-sys-size-control-xl-supportText);\n --fu-surface-radius: var(--prime-sys-shape-radius-4xl);\n --fu-maxw: var(--prime-sys-unit-28rem);\n}\n\n.root:hover:not([data-disabled=\"true\"]) {\n background: var(--prime-sys-color-action-neutralBackgroundHover);\n border-color: var(--prime-sys-color-border-subtle);\n box-shadow: none;\n}\n\n.root[data-dragover=\"true\"]:not([data-disabled=\"true\"]) {\n border-color: var(--prime-sys-color-border-accent);\n background: var(--prime-sys-color-surface-accentSoft);\n box-shadow: none;\n}\n\n.root:focus-within:not([data-disabled=\"true\"]) {\n border-color: var(--prime-sys-color-content-primary);\n box-shadow: var(--prime-sys-elevation-shadow-buttonFocus);\n}\n\n.root[data-disabled=\"true\"] {\n cursor: not-allowed;\n opacity: 0.55;\n}\n\n/* Модалки Align: сплошная граница, фон как у поля, hover «светлее» */\n.root[data-appearance=\"solid\"] {\n border-style: solid;\n border-color: var(--prime-sys-color-border-subtle);\n background: var(--prime-sys-color-surface-default);\n box-shadow: none;\n}\n\n.root[data-appearance=\"solid\"]:hover:not([data-disabled=\"true\"]) {\n background: var(--prime-sys-color-surface-elevated);\n border-color: var(--prime-sys-color-border-subtle);\n box-shadow: none;\n}\n\n.root[data-appearance=\"solid\"][data-dragover=\"true\"]:not([data-disabled=\"true\"]) {\n border-color: var(--prime-sys-color-border-accent);\n background: var(--prime-sys-color-surface-accentSoft);\n}\n\n.root[data-appearance=\"solid\"]:focus-within:not([data-disabled=\"true\"]) {\n border-color: var(--prime-sys-color-content-primary);\n box-shadow: var(--prime-sys-elevation-shadow-buttonFocus);\n}\n\n.input {\n position: absolute;\n width: var(--prime-sys-unit-1px);\n height: var(--prime-sys-unit-1px);\n margin: 0;\n opacity: 0;\n pointer-events: none;\n}\n\n.inner {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--fu-stack);\n max-width: var(--fu-maxw);\n}\n\n.iconWrap {\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--prime-sys-color-content-muted);\n}\n\n.copy {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--fu-copy-gap);\n}\n\n.title {\n margin: 0;\n font-size: var(--fu-title);\n font-weight: var(--prime-sys-typography-weight-medium);\n line-height: var(--prime-sys-typography-body-lineHeight);\n color: var(--prime-sys-color-content-primary);\n letter-spacing: var(--prime-sys-typography-tracking-normal);\n}\n\n.titleMuted {\n color: var(--prime-sys-color-content-secondary);\n}\n\n/* Чип «Browse» — та же ярусность, что контрол данного size */\n.browse {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n min-height: var(--fu-chip-h);\n padding-inline: var(--fu-chip-px);\n padding-block: var(--fu-chip-py);\n border-radius: var(--fu-chip-radius);\n border: var(--prime-sys-border-width-control) solid var(--prime-sys-color-border-subtle);\n background: var(--prime-sys-color-field-bg);\n box-shadow: var(--prime-sys-elevation-shadow-surface);\n font-size: var(--fu-chip-font);\n font-weight: var(--prime-sys-typography-weight-medium);\n line-height: 1.2;\n color: var(--prime-sys-color-content-secondary);\n pointer-events: none;\n user-select: none;\n}\n\n.root[data-disabled=\"true\"] .browse {\n background: var(--prime-sys-color-surface-accentSoft);\n border-color: transparent;\n box-shadow: none;\n}\n\n.browseLink {\n display: inline;\n margin: 0;\n padding: 0;\n border: none;\n background: none;\n font: inherit;\n cursor: pointer;\n pointer-events: auto;\n font-weight: var(--prime-sys-typography-weight-medium);\n color: var(--prime-sys-color-action-primaryBackground);\n text-decoration: underline;\n text-underline-offset: var(--prime-sys-unit-2px);\n}\n\n.browseLink:hover {\n color: var(--prime-sys-color-action-primaryBackgroundHover);\n}\n\n.browseLink:focus-visible {\n outline: var(--prime-sys-unit-2px) solid var(--prime-sys-color-focus-ring);\n outline-offset: var(--prime-sys-unit-2px);\n border-radius: var(--prime-sys-shape-radius-s);\n}\n\n/* ─── Модалки: тело без pointer-events, интерактив внутри с pointer-events: auto ─ */\n.dropBody {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--fu-stack, var(--prime-sys-spacing-x5));\n width: 100%;\n text-align: center;\n pointer-events: none;\n}\n\n.actionsRow {\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n gap: var(--prime-sys-spacing-x3);\n pointer-events: auto;\n}\n\n.chip {\n display: inline-flex;\n align-items: center;\n gap: var(--prime-sys-spacing-x2);\n box-sizing: border-box;\n min-height: var(--fu-chip-h, var(--prime-sys-unit-2p5rem));\n padding: var(--prime-sys-unit-0p375rem) var(--prime-sys-unit-1rem) var(--prime-sys-unit-0p375rem)\n var(--prime-sys-unit-0p375rem);\n margin: 0;\n border: none;\n border-radius: var(--prime-sys-shape-radius-round);\n background: transparent;\n box-shadow: none;\n cursor: pointer;\n font: inherit;\n color: inherit;\n transition:\n background-color var(--prime-sys-motion-medium) var(--prime-sys-motion-standard),\n box-shadow var(--prime-sys-motion-medium) var(--prime-sys-motion-standard);\n}\n\n.chip:hover {\n background: var(--prime-sys-color-surface-accentSoft);\n box-shadow: var(--prime-sys-elevation-shadow-surface);\n}\n\n.chip:focus-visible {\n outline: var(--prime-sys-unit-2px) solid var(--prime-sys-color-focus-ring);\n outline-offset: var(--prime-sys-unit-2px);\n}\n\n.chipLabel {\n font-size: var(--fu-chip-font, var(--prime-sys-size-control-m-text));\n font-weight: var(--prime-sys-typography-weight-medium);\n line-height: var(--prime-sys-typography-body-lineHeight);\n color: var(--prime-sys-color-content-secondary);\n}\n\n/* ─── Карточка файла (списки загрузки) — ring inset как Align `ring-1 ring-inset` ─ */\n.item {\n --fu-item-pad-block: var(--prime-sys-spacing-x4);\n --fu-item-pad-inline: var(--prime-sys-spacing-x4);\n --fu-item-pad-inline-start: var(--fu-item-pad-inline);\n --fu-item-col-gap: var(--prime-sys-spacing-x4);\n --fu-item-row-gap: var(--prime-sys-spacing-x3);\n --fu-item-main-gap: var(--prime-sys-spacing-x1);\n --fu-item-text-group-gap: var(--prime-sys-spacing-x1);\n --fu-item-stack-gap: var(--prime-sys-spacing-x2);\n --fu-item-name-font: var(--prime-sys-typography-control-m);\n --fu-item-meta-font: var(--prime-sys-typography-support-2xs);\n --fu-item-badge: var(--prime-sys-unit-2p5rem);\n --fu-item-badge-radius: var(--prime-sys-shape-radius-m);\n --fu-item-progress-h: var(--prime-sys-unit-0p5rem);\n --fu-item-status-icon: var(--prime-sys-size-control-m-icon);\n --fu-item-radius: var(--prime-sys-shape-radius-4xl);\n --fu-item-maxw: var(--prime-sys-unit-25rem);\n\n display: flex;\n flex-direction: column;\n gap: var(--fu-item-col-gap);\n box-sizing: border-box;\n width: 100%;\n max-width: var(--fu-item-maxw);\n padding-block: var(--fu-item-pad-block);\n padding-inline: var(--fu-item-pad-inline);\n padding-inline-start: var(--fu-item-pad-inline-start);\n border: none;\n border-radius: var(--fu-item-radius);\n background: var(--prime-sys-color-surface-elevated);\n box-shadow: inset 0 0 0 var(--prime-sys-unit-1px) var(--prime-sys-color-border-subtle);\n}\n\n.item[data-size=\"s\"] {\n --fu-item-pad-block: var(--prime-sys-spacing-x3);\n --fu-item-pad-inline: var(--prime-sys-spacing-x3);\n --fu-item-pad-inline-start: var(--fu-item-pad-inline);\n --fu-item-col-gap: var(--prime-sys-spacing-x3);\n --fu-item-row-gap: var(--prime-sys-spacing-x2);\n --fu-item-main-gap: var(--prime-sys-spacing-x1);\n --fu-item-text-group-gap: var(--prime-sys-spacing-x1);\n --fu-item-stack-gap: var(--prime-sys-spacing-x2);\n --fu-item-name-font: var(--prime-sys-size-control-s-text);\n --fu-item-meta-font: var(--prime-sys-size-control-s-supportText);\n --fu-item-badge: var(--prime-sys-unit-2rem);\n --fu-item-badge-radius: var(--prime-sys-shape-radius-s);\n --fu-item-progress-h: var(--prime-sys-unit-0p375rem);\n --fu-item-status-icon: var(--prime-sys-size-control-s-icon);\n --fu-item-radius: var(--prime-sys-shape-radius-l);\n --fu-item-maxw: var(--prime-sys-unit-22rem);\n}\n\n.item[data-size=\"l\"] {\n --fu-item-pad-block: var(--prime-sys-spacing-x4);\n --fu-item-pad-inline: var(--prime-sys-spacing-x4);\n --fu-item-pad-inline-start: var(--fu-item-pad-inline);\n --fu-item-col-gap: var(--prime-sys-spacing-x4);\n --fu-item-row-gap: var(--prime-sys-spacing-x2);\n --fu-item-main-gap: var(--prime-sys-spacing-x1);\n --fu-item-text-group-gap: var(--prime-sys-spacing-x1);\n --fu-item-stack-gap: var(--prime-sys-spacing-x2);\n --fu-item-name-font: var(--prime-sys-size-control-l-text);\n --fu-item-meta-font: var(--prime-sys-size-control-l-supportText);\n --fu-item-badge: var(--prime-sys-unit-2p75rem);\n --fu-item-badge-radius: var(--prime-sys-shape-radius-m);\n --fu-item-progress-h: var(--prime-sys-unit-0p5rem);\n --fu-item-status-icon: var(--prime-sys-size-control-l-icon);\n --fu-item-radius: var(--prime-sys-shape-radius-4xl);\n --fu-item-maxw: var(--prime-sys-unit-28rem);\n}\n\n.item[data-size=\"xl\"] {\n --fu-item-pad-block: var(--prime-sys-spacing-x5);\n --fu-item-pad-inline: var(--prime-sys-spacing-x5);\n --fu-item-pad-inline-start: var(--fu-item-pad-inline);\n --fu-item-col-gap: var(--prime-sys-spacing-x4);\n --fu-item-row-gap: var(--prime-sys-spacing-x3);\n --fu-item-main-gap: var(--prime-sys-spacing-x1);\n --fu-item-text-group-gap: var(--prime-sys-spacing-x1);\n --fu-item-stack-gap: var(--prime-sys-spacing-x2);\n --fu-item-name-font: var(--prime-sys-size-control-xl-text);\n --fu-item-meta-font: var(--prime-sys-size-control-xl-supportText);\n --fu-item-badge: var(--prime-sys-unit-3rem);\n --fu-item-badge-radius: var(--prime-sys-shape-radius-l);\n --fu-item-progress-h: var(--prime-sys-unit-0p5625rem);\n --fu-item-status-icon: var(--prime-sys-size-control-xl-icon);\n --fu-item-radius: var(--prime-sys-shape-radius-4xl);\n --fu-item-maxw: var(--prime-sys-unit-30rem);\n}\n\n.item[data-variant=\"error\"] {\n box-shadow: inset 0 0 0 var(--prime-sys-unit-1px) var(--prime-sys-color-border-danger);\n}\n\n.itemRow {\n display: flex;\n align-items: flex-start;\n gap: var(--fu-item-row-gap);\n}\n\n.itemMain {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: var(--fu-item-main-gap);\n}\n\n.itemName {\n font-size: var(--fu-item-name-font);\n font-weight: var(--prime-sys-typography-weight-medium);\n line-height: var(--prime-sys-typography-body-lineHeight);\n color: var(--prime-sys-color-content-primary);\n}\n\n.itemNameRow {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--prime-sys-spacing-x2);\n width: 100%;\n}\n\n.itemInlineStatus {\n display: inline-flex;\n align-items: center;\n gap: var(--prime-sys-spacing-x1);\n flex-shrink: 0;\n font-size: var(--fu-item-meta-font);\n line-height: var(--prime-sys-typography-body-lineHeight);\n}\n\n.itemInlineStatus strong {\n font-weight: var(--prime-sys-typography-weight-medium);\n}\n\n.itemMeta {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--prime-sys-spacing-x1);\n font-size: var(--fu-item-meta-font);\n line-height: var(--prime-sys-typography-body-lineHeight);\n color: var(--prime-sys-color-content-secondary);\n}\n\n.itemMeta strong {\n font-weight: var(--prime-sys-typography-weight-medium);\n color: var(--prime-sys-color-content-primary);\n}\n\n.itemMetaSep {\n color: var(--prime-sys-color-content-secondary);\n user-select: none;\n}\n\n.itemStack {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: var(--fu-item-stack-gap);\n flex: 1;\n min-width: 0;\n}\n\n.itemTextGroup {\n display: flex;\n flex-direction: column;\n gap: var(--fu-item-text-group-gap);\n width: 100%;\n min-width: 0;\n}\n\n.itemTryAgain {\n margin: 0;\n padding: 0;\n border: none;\n background: none;\n font: inherit;\n cursor: pointer;\n font-size: var(--fu-item-meta-font);\n font-weight: var(--prime-sys-typography-weight-medium);\n line-height: var(--prime-sys-typography-body-lineHeight);\n text-decoration: underline;\n text-underline-offset: var(--prime-sys-unit-2px);\n color: var(--prime-sys-color-content-danger);\n}\n\n.itemTryAgain:hover {\n color: var(--prime-sys-color-action-errorBackgroundHover);\n}\n\n.itemTryAgain:focus-visible {\n outline: var(--prime-sys-unit-2px) solid var(--prime-sys-color-focus-ring);\n outline-offset: var(--prime-sys-unit-2px);\n border-radius: var(--prime-sys-shape-radius-s);\n}\n\n.itemActions {\n display: flex;\n flex-shrink: 0;\n align-items: flex-start;\n}\n\n.itemFooter {\n width: 100%;\n}\n\n.itemProgress {\n width: 100%;\n}\n\n.itemProgress > * {\n height: var(--fu-item-progress-h, var(--prime-sys-unit-0p5rem));\n}\n\n.formatBadge {\n display: inline-flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n width: var(--fu-item-badge, var(--prime-sys-unit-2p5rem));\n height: var(--fu-item-badge, var(--prime-sys-unit-2p5rem));\n min-width: var(--fu-item-badge, var(--prime-sys-unit-2p5rem));\n padding-inline: 0;\n border-radius: var(--fu-item-badge-radius, var(--prime-sys-shape-radius-m));\n font-size: var(--fu-item-meta-font, var(--prime-sys-typography-support-2xs));\n font-weight: var(--prime-sys-typography-weight-semibold);\n line-height: 1;\n letter-spacing: 0.02em;\n text-transform: uppercase;\n}\n\n.formatBadge[data-color=\"gray\"] {\n background: var(--prime-sys-color-surface-accentSoft);\n color: var(--prime-sys-color-content-secondary);\n}\n\n.formatBadge[data-color=\"red\"] {\n background: var(--prime-sys-color-status-error-background);\n color: var(--prime-sys-color-status-error-foreground);\n}\n\n.formatBadge[data-color=\"blue\"] {\n background: var(--prime-sys-color-status-information-background);\n color: var(--prime-sys-color-status-information-foreground);\n}\n\n.formatBadge[data-color=\"green\"] {\n background: var(--prime-sys-color-status-success-background);\n color: var(--prime-sys-color-status-success-foreground);\n}\n\n.formatBadge[data-color=\"orange\"] {\n background: var(--prime-sys-color-status-warning-background);\n color: var(--prime-sys-color-status-warning-foreground);\n}\n\n.formatBadge[data-color=\"purple\"] {\n background: var(--prime-sys-color-status-feature-background);\n color: var(--prime-sys-color-status-feature-foreground);\n}\n\n.formatBadge[data-color=\"sky\"] {\n background: var(--prime-sys-color-status-verified-background);\n color: var(--prime-sys-color-status-verified-foreground);\n}\n\n.formatBadge[data-color=\"yellow\"] {\n background: var(--prime-sys-color-status-away-background);\n color: var(--prime-sys-color-status-away-foreground);\n}\n\n/* Иконки статуса в мета-строке — размер с `Item` (`data-size`) */\n.itemStatusIcon {\n flex-shrink: 0;\n width: var(--fu-item-status-icon);\n height: var(--fu-item-status-icon);\n}\n\n.itemStatusIcon svg {\n display: block;\n width: 100%;\n height: 100%;\n}\n\n/* Для иконки «загрузка» в мета-строке карточки файла */\n.statusIconSpin {\n animation: fileUploadSpin 0.8s linear infinite;\n}\n\n@keyframes fileUploadSpin {\n to {\n transform: rotate(360deg);\n }\n}\n","import * as React from \"react\";\n\nimport { Hint } from \"@/components/hint/Hint\";\nimport { ProgressBar } from \"@/components/progress-bar/ProgressBar\";\nimport { useMergedRefs } from \"@/hooks/useMergedRefs\";\nimport { Icon } from \"@/icons\";\nimport { ControlSizeProvider, useOptionalControlSize } from \"@/internal/ControlSizeContext\";\nimport { cx } from \"@/internal/cx\";\nimport { toDataAttributes } from \"@/internal/data-attributes\";\nimport type { FileUploadSize, HintSize } from \"@/internal/states\";\n\nimport styles from \"./FileUpload.module.css\";\n\nexport type { FileUploadSize };\n\nexport type FileUploadFormatBadgeColor =\n | \"gray\"\n | \"red\"\n | \"blue\"\n | \"green\"\n | \"orange\"\n | \"purple\"\n | \"sky\"\n | \"yellow\";\n\nexport type FileUploadItemVariant = \"default\" | \"error\";\n\n/** `dashed` — дефолтная зона; `solid` — как в модалках Align (сплошная обводка, фон canvas → elevated при hover). */\nexport type FileUploadAppearance = \"dashed\" | \"solid\";\n\n// ─── Drop zone slots (как AlignUI FileUpload.Icon / Title / Button) ─────────\n\nexport type FileUploadIconProps = React.HTMLAttributes<HTMLSpanElement>;\n\nfunction FileUploadIcon({ className, children, ...rest }: FileUploadIconProps) {\n return (\n <span className={cx(styles.iconWrap, className)} aria-hidden {...rest}>\n {children}\n </span>\n );\n}\nFileUploadIcon.displayName = \"FileUpload.Icon\";\n\nexport type FileUploadTitleProps = React.HTMLAttributes<HTMLParagraphElement> & {\n /** `muted` — как `text-sub-600` в Align (строка подсказки в модалке). */\n tone?: \"default\" | \"muted\";\n};\n\nfunction FileUploadTitle({ className, children, tone = \"default\", ...rest }: FileUploadTitleProps) {\n return (\n <p className={cx(styles.title, tone === \"muted\" && styles.titleMuted, className)} {...rest}>\n {children}\n </p>\n );\n}\nFileUploadTitle.displayName = \"FileUpload.Title\";\n\nexport type FileUploadHintProps = React.HTMLAttributes<HTMLParagraphElement>;\n\nfunction FileUploadHint({ className, children, ...rest }: FileUploadHintProps) {\n const controlSize = useOptionalControlSize() ?? \"m\";\n return (\n <Hint.Root size={controlSize as HintSize} className={className} {...rest}>\n {children}\n </Hint.Root>\n );\n}\nFileUploadHint.displayName = \"FileUpload.Hint\";\n\nexport type FileUploadBrowseLabelProps = React.HTMLAttributes<HTMLSpanElement>;\n\nfunction FileUploadBrowseLabel({ className, children, ...rest }: FileUploadBrowseLabelProps) {\n return (\n <span className={cx(styles.browse, className)} {...rest}>\n {children}\n </span>\n );\n}\nFileUploadBrowseLabel.displayName = \"FileUpload.BrowseLabel\";\n\n/** Кнопка «browse» внутри заголовка модалки (primary + underline, не открывает picker по клику сама по себе — навесьте `onClick`). */\nexport type FileUploadBrowseLinkProps = React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nconst FileUploadBrowseLink = React.forwardRef<HTMLButtonElement, FileUploadBrowseLinkProps>(\n ({ className, type = \"button\", onClick, ...rest }, ref) => (\n <button\n ref={ref}\n type={type}\n className={cx(styles.browseLink, className)}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n onClick?.(e);\n }}\n {...rest}\n />\n ),\n);\nFileUploadBrowseLink.displayName = \"FileUpload.BrowseLink\";\n\n/** Обёртка для модалок: `pointer-events: none` + колонка; вложенные кнопки/ссылки с `pointer-events: auto`. */\nexport type FileUploadDropBodyProps = React.HTMLAttributes<HTMLDivElement>;\n\nfunction FileUploadDropBody({ className, children, ...rest }: FileUploadDropBodyProps) {\n return (\n <div className={cx(styles.dropBody, className)} {...rest}>\n {children}\n </div>\n );\n}\nFileUploadDropBody.displayName = \"FileUpload.DropBody\";\n\n/** Ряд чипов «My Device / Dropbox» — `pointer-events: auto`. */\nexport type FileUploadActionsRowProps = React.HTMLAttributes<HTMLDivElement>;\n\nfunction FileUploadActionsRow({ className, children, ...rest }: FileUploadActionsRowProps) {\n return (\n <div className={cx(styles.actionsRow, className)} {...rest}>\n {children}\n </div>\n );\n}\nFileUploadActionsRow.displayName = \"FileUpload.ActionsRow\";\n\n/** Кнопка-источник внутри `Root` — останавливает всплытие к `label`, не открывает файловый диалог. */\nexport type FileUploadChipProps = React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nconst FileUploadChip = React.forwardRef<HTMLButtonElement, FileUploadChipProps>(\n ({ className, type = \"button\", onClick, ...rest }, ref) => (\n <button\n ref={ref}\n type={type}\n className={cx(styles.chip, className)}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n onClick?.(e);\n }}\n {...rest}\n />\n ),\n);\nFileUploadChip.displayName = \"FileUpload.Chip\";\n\nexport type FileUploadChipLabelProps = React.HTMLAttributes<HTMLSpanElement>;\n\nfunction FileUploadChipLabel({ className, children, ...rest }: FileUploadChipLabelProps) {\n return (\n <span className={cx(styles.chipLabel, className)} {...rest}>\n {children}\n </span>\n );\n}\nFileUploadChipLabel.displayName = \"FileUpload.ChipLabel\";\n\n// ─── File row (блоки 01 / списки загрузки) ───────────────────────────────────\n\nexport type FileUploadFormatBadgeProps = {\n format: string;\n color?: FileUploadFormatBadgeColor;\n className?: string;\n};\n\nfunction FileUploadFormatBadge({ format, color = \"gray\", className }: FileUploadFormatBadgeProps) {\n const label = format.trim().slice(0, 8).toUpperCase();\n return (\n <span\n className={cx(styles.formatBadge, className)}\n {...toDataAttributes({ color })}\n aria-hidden\n >\n {label}\n </span>\n );\n}\nFileUploadFormatBadge.displayName = \"FileUpload.FormatBadge\";\n\nexport type FileUploadItemProps = React.HTMLAttributes<HTMLDivElement> & {\n variant?: FileUploadItemVariant;\n /** Типографика, отступы, бейдж формата, прогресс и иконки статуса — из того же яруса, что контролы. */\n size?: FileUploadSize;\n};\n\nfunction FileUploadItem({\n className,\n variant = \"default\",\n size = \"m\",\n ...rest\n}: FileUploadItemProps) {\n return (\n <div\n className={cx(styles.item, className)}\n {...toDataAttributes({ variant, size })}\n {...rest}\n />\n );\n}\nFileUploadItem.displayName = \"FileUpload.Item\";\n\nexport type FileUploadItemRowProps = React.HTMLAttributes<HTMLDivElement>;\n\nfunction FileUploadItemRow({ className, children, ...rest }: FileUploadItemRowProps) {\n return (\n <div className={cx(styles.itemRow, className)} {...rest}>\n {children}\n </div>\n );\n}\nFileUploadItemRow.displayName = \"FileUpload.ItemRow\";\n\nexport type FileUploadItemMainProps = React.HTMLAttributes<HTMLDivElement>;\n\nfunction FileUploadItemMain({ className, children, ...rest }: FileUploadItemMainProps) {\n return (\n <div className={cx(styles.itemMain, className)} {...rest}>\n {children}\n </div>\n );\n}\nFileUploadItemMain.displayName = \"FileUpload.ItemMain\";\n\n/** Вертикальный стек внутри `ItemMain` (колонка ошибки: текст + «Try again»). */\nexport type FileUploadItemStackProps = React.HTMLAttributes<HTMLDivElement>;\n\nfunction FileUploadItemStack({ className, children, ...rest }: FileUploadItemStackProps) {\n return (\n <div className={cx(styles.itemStack, className)} {...rest}>\n {children}\n </div>\n );\n}\nFileUploadItemStack.displayName = \"FileUpload.ItemStack\";\n\n/** Группа имени файла + мета-строки (`space-y-1`). */\nexport type FileUploadItemTextGroupProps = React.HTMLAttributes<HTMLDivElement>;\n\nfunction FileUploadItemTextGroup({ className, children, ...rest }: FileUploadItemTextGroupProps) {\n return (\n <div className={cx(styles.itemTextGroup, className)} {...rest}>\n {children}\n </div>\n );\n}\nFileUploadItemTextGroup.displayName = \"FileUpload.ItemTextGroup\";\n\nexport type FileUploadItemTryAgainProps = React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nconst FileUploadItemTryAgain = React.forwardRef<HTMLButtonElement, FileUploadItemTryAgainProps>(\n ({ className, type = \"button\", ...rest }, ref) => (\n <button ref={ref} type={type} className={cx(styles.itemTryAgain, className)} {...rest} />\n ),\n);\nFileUploadItemTryAgain.displayName = \"FileUpload.ItemTryAgain\";\n\nexport type FileUploadItemNameProps = React.HTMLAttributes<HTMLDivElement>;\n\nfunction FileUploadItemName({ className, children, ...rest }: FileUploadItemNameProps) {\n return (\n <div className={cx(styles.itemName, className)} {...rest}>\n {children}\n </div>\n );\n}\nFileUploadItemName.displayName = \"FileUpload.ItemName\";\n\nexport type FileUploadItemMetaProps = React.HTMLAttributes<HTMLDivElement>;\n\nfunction FileUploadItemMeta({ className, children, ...rest }: FileUploadItemMetaProps) {\n return (\n <div className={cx(styles.itemMeta, className)} {...rest}>\n {children}\n </div>\n );\n}\nFileUploadItemMeta.displayName = \"FileUpload.ItemMeta\";\n\nexport type FileUploadItemMetaSepProps = React.HTMLAttributes<HTMLSpanElement>;\n\nfunction FileUploadItemMetaSep({ className, ...rest }: FileUploadItemMetaSepProps) {\n return (\n <span className={cx(styles.itemMetaSep, className)} aria-hidden {...rest}>\n {\"\\u2219\"}\n </span>\n );\n}\nFileUploadItemMetaSep.displayName = \"FileUpload.ItemMetaSep\";\n\nexport type FileUploadItemActionsProps = React.HTMLAttributes<HTMLDivElement>;\n\nfunction FileUploadItemActions({ className, children, ...rest }: FileUploadItemActionsProps) {\n return (\n <div className={cx(styles.itemActions, className)} {...rest}>\n {children}\n </div>\n );\n}\nFileUploadItemActions.displayName = \"FileUpload.ItemActions\";\n\nexport type FileUploadItemFooterProps = React.HTMLAttributes<HTMLDivElement>;\n\nfunction FileUploadItemFooter({ className, children, ...rest }: FileUploadItemFooterProps) {\n return (\n <div className={cx(styles.itemFooter, className)} {...rest}>\n {children}\n </div>\n );\n}\nFileUploadItemFooter.displayName = \"FileUpload.ItemFooter\";\n\nexport type FileUploadItemProgressProps = {\n value?: number;\n max?: number;\n className?: string;\n children?: React.ReactNode;\n};\n\nfunction FileUploadItemProgress({ value, max, className, children }: FileUploadItemProgressProps) {\n return (\n <div className={cx(styles.itemProgress, className)}>\n {children ?? (value !== undefined ? <ProgressBar.Root value={value} max={max} /> : null)}\n </div>\n );\n}\nFileUploadItemProgress.displayName = \"FileUpload.ItemProgress\";\n\n// ─── Root ────────────────────────────────────────────────────────────────────\n\nexport type FileUploadRootProps = Omit<React.LabelHTMLAttributes<HTMLLabelElement>, \"children\"> & {\n size?: FileUploadSize;\n appearance?: FileUploadAppearance;\n /** Доступ к скрытому input (программный клик из модалки и т.п.). */\n inputRef?: React.Ref<HTMLInputElement>;\n accept?: string;\n multiple?: boolean;\n /** Блокирует выбор файлов и drag-and-drop. */\n disabled?: boolean;\n onFilesChange?: (files: File[]) => void;\n children?: React.ReactNode;\n};\n\nconst FileUploadRoot = React.forwardRef<HTMLLabelElement, FileUploadRootProps>(\n (\n {\n size = \"m\",\n appearance = \"dashed\",\n inputRef: inputRefProp,\n accept,\n multiple,\n disabled,\n onFilesChange,\n className,\n children,\n ...rest\n },\n ref,\n ) => {\n const [isDragOver, setIsDragOver] = React.useState(false);\n const mergeInputRef = useMergedRefs(inputRefProp);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const list = e.target.files;\n const files = list ? Array.from(list) : [];\n onFilesChange?.(files);\n e.target.value = \"\";\n };\n\n const handleDragOver = (e: React.DragEvent<HTMLLabelElement>) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragOver(true);\n };\n\n const handleDragLeave = (e: React.DragEvent<HTMLLabelElement>) => {\n const related = e.relatedTarget as Node | null;\n if (!related || !e.currentTarget.contains(related)) {\n setIsDragOver(false);\n }\n };\n\n const handleDrop = (e: React.DragEvent<HTMLLabelElement>) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragOver(false);\n if (!disabled) {\n const files = Array.from(e.dataTransfer.files);\n onFilesChange?.(files);\n }\n };\n\n const defaultBody = (\n <div className={styles.inner}>\n <FileUploadIcon>\n <Icon name=\"action.upload\" size={size} tone=\"subtle\" />\n </FileUploadIcon>\n <div className={styles.copy}>\n <FileUploadTitle>{\"Choose a file or drag & drop it here.\"}</FileUploadTitle>\n <FileUploadHint>JPEG, PNG, PDF, MP4 up to 50 MB.</FileUploadHint>\n </div>\n <FileUploadBrowseLabel>Browse file</FileUploadBrowseLabel>\n </div>\n );\n\n return (\n <label\n ref={ref}\n {...rest}\n className={cx(styles.root, className)}\n {...toDataAttributes({ size, appearance })}\n data-dragover={isDragOver ? true : undefined}\n data-disabled={disabled ? true : undefined}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n >\n <input\n ref={mergeInputRef}\n type=\"file\"\n className={styles.input}\n accept={accept}\n multiple={multiple}\n onChange={handleChange}\n disabled={disabled}\n aria-disabled={disabled || undefined}\n />\n <ControlSizeProvider value={size}>{children ?? defaultBody}</ControlSizeProvider>\n </label>\n );\n },\n);\n\nFileUploadRoot.displayName = \"FileUploadRoot\";\n\nexport const FileUpload = {\n Root: FileUploadRoot,\n Icon: FileUploadIcon,\n Title: FileUploadTitle,\n Hint: FileUploadHint,\n BrowseLabel: FileUploadBrowseLabel,\n BrowseLink: FileUploadBrowseLink,\n DropBody: FileUploadDropBody,\n ActionsRow: FileUploadActionsRow,\n Chip: FileUploadChip,\n ChipLabel: FileUploadChipLabel,\n FormatBadge: FileUploadFormatBadge,\n Item: FileUploadItem,\n ItemRow: FileUploadItemRow,\n ItemMain: FileUploadItemMain,\n ItemStack: FileUploadItemStack,\n ItemTextGroup: FileUploadItemTextGroup,\n ItemTryAgain: FileUploadItemTryAgain,\n ItemName: FileUploadItemName,\n ItemMeta: FileUploadItemMeta,\n ItemMetaSep: FileUploadItemMetaSep,\n ItemActions: FileUploadItemActions,\n ItemFooter: FileUploadItemFooter,\n ItemProgress: FileUploadItemProgress,\n};\n",".root {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: var(--prime-sys-size-control-xs-text);\n line-height: var(--prime-sys-typography-lineHeightScale-3xs);\n font-family: var(--prime-sys-typography-family-base);\n font-weight: var(--prime-sys-typography-weight-medium);\n color: var(--prime-sys-color-content-primary);\n background: var(--prime-sys-color-surface-raised);\n border: var(--prime-sys-border-width-control) solid var(--prime-sys-color-border-subtle);\n box-shadow: var(--prime-sys-elevation-shadow-surface);\n white-space: nowrap;\n box-sizing: border-box;\n}\n\n.root > * {\n font-size: inherit;\n line-height: inherit;\n}\n\n/* Номинальный size как у инпута; визуально на ступень ниже кнопки того же имени (`size.control.*`). */\n.root[data-size=\"s\"] {\n --prime-icon-size: var(--prime-sys-size-control-xs-icon);\n height: var(--prime-sys-size-kbd-height);\n min-width: var(--prime-sys-size-kbd-height);\n padding-inline: var(--prime-sys-size-kbd-paddingX);\n padding-block: var(--prime-sys-size-kbd-paddingY);\n font-size: var(--prime-sys-size-kbd-text);\n line-height: var(--prime-sys-typography-lineHeightScale-3xs);\n border-radius: var(--prime-sys-size-kbd-radius);\n gap: var(--prime-sys-size-control-xs-gap);\n}\n\n.root[data-size=\"m\"] {\n --prime-icon-size: var(--prime-sys-size-control-xs-icon);\n height: var(--prime-sys-size-control-xs-height);\n min-width: var(--prime-sys-size-control-xs-height);\n padding-inline: var(--prime-sys-size-control-xs-inputPaddingX);\n padding-block: var(--prime-sys-size-control-xs-inputPaddingY);\n font-size: var(--prime-sys-size-control-xs-text);\n line-height: var(--prime-sys-typography-lineHeightScale-3xs);\n border-radius: var(--prime-sys-size-control-xs-radius);\n gap: var(--prime-sys-size-control-xs-gap);\n}\n\n.root[data-size=\"l\"] {\n --prime-icon-size: var(--prime-sys-size-control-s-icon);\n height: var(--prime-sys-size-control-s-height);\n min-width: var(--prime-sys-size-control-s-height);\n padding-inline: var(--prime-sys-size-control-s-inputPaddingX);\n padding-block: var(--prime-sys-size-control-s-inputPaddingY);\n font-size: var(--prime-sys-size-control-s-text);\n line-height: var(--prime-sys-typography-lineHeightScale-2xs);\n border-radius: var(--prime-sys-size-control-s-radius);\n gap: var(--prime-sys-size-control-s-gap);\n}\n\n.root[data-size=\"xl\"] {\n --prime-icon-size: var(--prime-sys-size-control-m-icon);\n height: var(--prime-sys-size-control-m-height);\n min-width: var(--prime-sys-size-control-m-height);\n padding-inline: var(--prime-sys-size-control-m-inputPaddingX);\n padding-block: var(--prime-sys-size-control-m-inputPaddingY);\n font-size: var(--prime-sys-size-control-m-text);\n line-height: var(--prime-sys-typography-lineHeightScale-xs);\n border-radius: var(--prime-sys-size-control-m-radius);\n gap: var(--prime-sys-size-control-m-gap);\n}\n\n.root :where(svg) {\n width: var(--prime-icon-size);\n height: var(--prime-icon-size);\n flex-shrink: 0;\n}\n","import * as React from \"react\";\nimport {\n ControlSizeProvider,\n controlSurfaceToInputSize,\n useOptionalControlSize,\n} from \"@/internal/ControlSizeContext\";\nimport { cx } from \"@/internal/cx\";\nimport { toDataAttributes } from \"@/internal/data-attributes\";\nimport type { KbdSize } from \"@/internal/states\";\n\nimport styles from \"./Kbd.module.css\";\n\nexport type KbdRootProps = Omit<React.HTMLAttributes<HTMLElement>, \"size\"> & {\n children: React.ReactNode;\n className?: string;\n size?: KbdSize;\n};\n\nconst KbdRoot = React.forwardRef<HTMLElement, KbdRootProps>(\n ({ children, className, size: sizeProp, ...rest }, ref) => {\n const controlSurface = useOptionalControlSize();\n const size =\n sizeProp ?? (controlSurface !== undefined ? controlSurfaceToInputSize(controlSurface) : \"m\");\n\n return (\n <kbd\n ref={ref}\n className={cx(styles.root, className)}\n {...rest}\n {...toDataAttributes({ size })}\n >\n <ControlSizeProvider value={size}>{children}</ControlSizeProvider>\n </kbd>\n );\n },\n);\n\nKbdRoot.displayName = \"Kbd.Root\";\n\nexport const Kbd = { Root: KbdRoot };\n",".viewport {\n position: fixed;\n z-index: var(--prime-sys-elevation-zIndex-toast);\n inset: 0;\n pointer-events: none;\n}\n\n.zone {\n position: absolute;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: var(--prime-sys-spacing-x3);\n width: min(100vw - var(--prime-sys-spacing-x8), var(--prime-sys-unit-26rem));\n pointer-events: none;\n}\n\n.top {\n top: var(--prime-sys-spacing-x5);\n}\n\n.bottom {\n bottom: var(--prime-sys-spacing-x5);\n flex-direction: column-reverse;\n}\n\n.left {\n left: var(--prime-sys-spacing-x5);\n}\n\n.center {\n left: 50%;\n transform: translateX(-50%);\n}\n\n.right {\n right: var(--prime-sys-spacing-x5);\n}\n\n.stack {\n position: relative;\n width: 100%;\n list-style: none;\n margin: 0;\n padding: 0;\n pointer-events: auto;\n}\n\n.item {\n position: relative;\n width: 100%;\n}\n\n.item + .item {\n margin-top: var(--prime-sys-spacing-x2);\n}\n\n.stack[data-expanded=\"false\"] .item {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n margin-top: 0;\n}\n\n.stack[data-expanded=\"false\"] .item[data-stack-index=\"0\"] {\n position: relative;\n}\n\n/* Bottom zone: стек растёт вверх, новая карточка внизу */\n.bottom .stack {\n display: flex;\n flex-direction: column-reverse;\n gap: var(--prime-sys-spacing-x2);\n}\n\n.bottom .stack .item + .item {\n margin-top: 0;\n}\n\n/* Bottom collapsed: абсолютные карточки прибиты к низу (где item[0]) */\n.bottom .stack[data-expanded=\"false\"] .item {\n top: auto;\n bottom: 0;\n}\n\n/* Padding для видимости peek-карточек (fan-эффект) */\n.top .stack[data-expanded=\"false\"][data-stacked=\"true\"] {\n padding-bottom: 14px;\n}\n\n.bottom .stack[data-expanded=\"false\"][data-stacked=\"true\"] {\n padding-top: 14px;\n}\n\n.card {\n position: relative;\n display: grid;\n grid-template-columns: auto minmax(0, 1fr) auto;\n align-items: flex-start;\n gap: var(--prime-sys-spacing-x2);\n width: 100%;\n box-sizing: border-box;\n border: var(--prime-sys-unit-1px) solid var(--prime-sys-color-border-subtle);\n border-radius: var(--prime-sys-shape-radius-l);\n background: var(--prime-sys-color-surface-raised);\n box-shadow: var(--prime-sys-elevation-shadow-surface);\n overflow: hidden;\n}\n\n.card[data-stack-expanded=\"false\"][data-stack-depth=\"0\"] {\n box-shadow:\n var(--prime-sys-elevation-shadow-surface),\n 0 var(--prime-sys-unit-2px) var(--prime-sys-unit-6px)\n color-mix(in srgb, var(--prime-sys-color-content-primary) 10%, transparent);\n}\n\n.card[data-stack-expanded=\"false\"][data-stack-depth=\"1\"],\n.card[data-stack-expanded=\"false\"][data-stack-depth=\"2\"],\n.card[data-stack-expanded=\"false\"][data-stack-depth=\"3\"],\n.card[data-stack-expanded=\"false\"][data-stack-depth=\"4\"] {\n box-shadow:\n var(--prime-sys-elevation-shadow-surface),\n 0 var(--prime-sys-unit-1px) var(--prime-sys-unit-3px)\n color-mix(in srgb, var(--prime-sys-color-content-primary) 7%, transparent);\n}\n\n.card[data-size=\"s\"] {\n padding: var(--prime-sys-spacing-x2);\n}\n\n.card[data-size=\"m\"] {\n padding: var(--prime-sys-spacing-x3);\n}\n\n.card[data-size=\"l\"] {\n padding: var(--prime-sys-spacing-x4);\n}\n\n.card[data-type=\"success\"] {\n --notification-accent: var(--prime-sys-color-status-success-backgroundEmphasis);\n --notification-background-soft: var(--prime-sys-color-status-success-background);\n}\n\n.card[data-type=\"error\"] {\n --notification-accent: var(--prime-sys-color-status-error-backgroundEmphasis);\n --notification-background-soft: var(--prime-sys-color-status-error-background);\n}\n\n.card[data-type=\"warning\"] {\n --notification-accent: var(--prime-sys-color-status-warning-backgroundEmphasis);\n --notification-background-soft: var(--prime-sys-color-status-warning-background);\n}\n\n.card[data-type=\"info\"] {\n --notification-accent: var(--prime-sys-color-status-information-backgroundEmphasis);\n --notification-background-soft: var(--prime-sys-color-status-information-background);\n}\n\n.iconWrap {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: var(--notification-accent);\n background: var(--notification-background-soft);\n border-radius: var(--prime-sys-shape-radius-m);\n}\n\n.card[data-size=\"s\"] .iconWrap {\n width: var(--prime-sys-size-control-s-height);\n height: var(--prime-sys-size-control-s-height);\n}\n\n.card[data-size=\"m\"] .iconWrap {\n width: var(--prime-sys-size-control-m-height);\n height: var(--prime-sys-size-control-m-height);\n}\n\n.card[data-size=\"l\"] .iconWrap {\n width: var(--prime-sys-size-control-l-height);\n height: var(--prime-sys-size-control-l-height);\n}\n\n.icon {\n width: var(--prime-sys-size-control-m-icon);\n height: var(--prime-sys-size-control-m-icon);\n}\n\n.content {\n min-width: 0;\n display: grid;\n gap: var(--prime-sys-spacing-x1);\n}\n\n.header {\n display: flex;\n align-items: center;\n gap: var(--prime-sys-spacing-x2);\n min-width: 0;\n}\n\n.title {\n margin: 0;\n color: var(--prime-sys-color-content-primary);\n font-weight: var(--prime-sys-typography-weight-medium);\n}\n\n.card[data-size=\"s\"] .title {\n font-size: var(--prime-sys-size-control-s-text);\n}\n\n.card[data-size=\"m\"] .title {\n font-size: var(--prime-sys-size-control-m-text);\n}\n\n.card[data-size=\"l\"] .title {\n font-size: var(--prime-sys-size-control-l-text);\n}\n\n.badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n min-height: var(--prime-sys-size-badge-s-height);\n padding-inline: var(--prime-sys-size-badge-s-paddingX);\n border-radius: var(--prime-sys-size-badge-s-radius);\n background: var(--notification-background-soft);\n color: var(--notification-accent);\n font-size: var(--prime-sys-size-badge-s-text);\n font-weight: var(--prime-sys-typography-weight-medium);\n}\n\n.description {\n margin: 0;\n color: var(--prime-sys-color-content-secondary);\n}\n\n.card[data-size=\"s\"] .description {\n font-size: var(--prime-sys-size-control-s-supportText);\n}\n\n.card[data-size=\"m\"] .description {\n font-size: var(--prime-sys-size-control-m-supportText);\n}\n\n.card[data-size=\"l\"] .description {\n font-size: var(--prime-sys-size-control-l-supportText);\n}\n\n.actionRow {\n margin-top: var(--prime-sys-spacing-x1);\n display: flex;\n align-items: center;\n gap: var(--prime-sys-spacing-x2);\n}\n\n.closeButton {\n flex-shrink: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--prime-sys-size-control-s-height);\n height: var(--prime-sys-size-control-s-height);\n border: none;\n border-radius: var(--prime-sys-size-control-s-radius);\n background: transparent;\n color: var(--prime-sys-color-content-secondary);\n cursor: pointer;\n}\n\n.closeButton:hover {\n background: var(--prime-sys-color-surface-accentSoft);\n color: var(--prime-sys-color-content-primary);\n}\n\n.closeButton svg {\n width: var(--prime-sys-size-control-s-icon);\n height: var(--prime-sys-size-control-s-icon);\n}\n\n.closeButton:focus-visible {\n outline: var(--prime-sys-unit-2px) solid var(--prime-sys-color-border-focus);\n outline-offset: var(--prime-sys-unit-2px);\n}\n\n.progressTrack {\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n height: var(--prime-sys-unit-2px);\n background: color-mix(in srgb, var(--notification-accent) 18%, transparent);\n}\n\n.progressValue {\n display: block;\n width: 100%;\n height: 100%;\n transform-origin: left center;\n background: var(--notification-accent);\n}\n\n.card[data-persistent=\"true\"] {\n border-color: color-mix(\n in srgb,\n var(--notification-accent) 50%,\n var(--prime-sys-color-border-subtle)\n );\n box-shadow:\n var(--prime-sys-elevation-shadow-surface),\n 0 0 var(--prime-sys-spacing-x2) color-mix(in srgb, var(--notification-accent) 30%, transparent);\n}\n\n@media (prefers-reduced-motion: no-preference) {\n .card[data-persistent=\"true\"] {\n animation: notification-glow 2s ease-in-out infinite;\n }\n}\n\n@keyframes notification-glow {\n 0%,\n 100% {\n box-shadow:\n var(--prime-sys-elevation-shadow-surface),\n 0 0 var(--prime-sys-spacing-x2)\n color-mix(in srgb, var(--notification-accent) 25%, transparent);\n }\n\n 50% {\n box-shadow:\n var(--prime-sys-elevation-shadow-surface),\n 0 0 var(--prime-sys-spacing-x4)\n color-mix(in srgb, var(--notification-accent) 42%, transparent);\n }\n}\n\n@media (max-width: 48rem) {\n .zone {\n width: min(100vw - var(--prime-sys-spacing-x6), var(--prime-sys-unit-24rem));\n }\n\n .top {\n top: var(--prime-sys-spacing-x3);\n }\n\n .bottom {\n bottom: var(--prime-sys-spacing-x3);\n }\n\n .left {\n left: var(--prime-sys-spacing-x3);\n }\n\n .right {\n right: var(--prime-sys-spacing-x3);\n }\n}\n","import { AlertTriangle, CheckCircle2, Info, X, XCircle } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { Button } from \"@/components/button/Button\";\nimport { cx } from \"@/internal/cx\";\nimport { toDataAttributes } from \"@/internal/data-attributes\";\nimport type { InputSize } from \"@/internal/states\";\n\nimport styles from \"./Notification.module.css\";\n\n// ─── useCountdown ─────────────────────────────────────────────────────────────\n// Хук живёт здесь, чтобы ре-рендеры прогресс-бара не поднимались до motion.li.\n\nexport function useCountdown(\n item: NotificationRecord,\n paused: boolean,\n onExpire: (id: string) => void,\n): number {\n const [progress, setProgress] = React.useState(1);\n const remainingRef = React.useRef(item.duration);\n const lastTsRef = React.useRef<number | null>(null);\n const pausedRef = React.useRef(paused);\n const onExpireRef = React.useRef(onExpire);\n\n pausedRef.current = paused;\n onExpireRef.current = onExpire;\n\n React.useEffect(() => {\n if (item.persistent || item.duration <= 0) return;\n\n remainingRef.current = item.duration;\n lastTsRef.current = null;\n setProgress(1);\n\n let frame: number;\n let cancelled = false;\n\n const tick = (now: number) => {\n if (cancelled) return;\n if (lastTsRef.current !== null && !pausedRef.current) {\n const delta = now - lastTsRef.current;\n remainingRef.current = Math.max(0, remainingRef.current - delta);\n setProgress(remainingRef.current / item.duration);\n if (remainingRef.current <= 0) {\n onExpireRef.current(item.id);\n return;\n }\n }\n lastTsRef.current = now;\n frame = requestAnimationFrame(tick);\n };\n\n frame = requestAnimationFrame(tick);\n return () => {\n cancelled = true;\n cancelAnimationFrame(frame);\n };\n }, [item.id, item.duration, item.persistent]);\n\n return progress;\n}\n\nexport type NotificationType = \"success\" | \"error\" | \"warning\" | \"info\";\nexport type NotificationSize = \"s\" | \"m\" | \"l\";\nexport type NotificationPosition =\n | \"top-left\"\n | \"top-center\"\n | \"top-right\"\n | \"bottom-left\"\n | \"bottom-center\"\n | \"bottom-right\";\n\nexport type NotificationAction = {\n label: string;\n onClick: () => void;\n};\n\nexport type NotificationOptions = {\n type: NotificationType;\n title: string;\n description?: string;\n size?: NotificationSize;\n position?: NotificationPosition;\n duration?: number;\n persistent?: boolean;\n icon?: React.ReactNode;\n badge?: string | number;\n closable?: boolean;\n action?: NotificationAction;\n};\n\nexport type NotificationRecord = NotificationOptions & {\n id: string;\n position: NotificationPosition;\n size: NotificationSize;\n duration: number;\n persistent: boolean;\n closable: boolean;\n createdAt: number;\n};\n\ntype NotificationCardProps = {\n item: NotificationRecord;\n className?: string;\n paused: boolean;\n onDismiss: (id: string) => void;\n stackDepth?: number;\n stackExpanded?: boolean;\n};\n\nconst actionButtonSize: Record<NotificationSize, InputSize> = {\n s: \"s\",\n m: \"s\",\n l: \"m\",\n};\n\nconst defaultIconByType: Record<NotificationType, React.ComponentType<{ className?: string }>> = {\n success: CheckCircle2,\n error: XCircle,\n warning: AlertTriangle,\n info: Info,\n};\n\nexport function NotificationCard({\n item,\n className,\n paused,\n onDismiss,\n stackDepth = 0,\n stackExpanded = false,\n}: NotificationCardProps) {\n const progress = useCountdown(item, paused, onDismiss);\n const DefaultIcon = defaultIconByType[item.type];\n const liveRole = item.type === \"error\" || item.type === \"warning\" ? \"alert\" : \"status\";\n\n return (\n <article\n className={cx(styles.card, className)}\n role={liveRole}\n aria-live={liveRole === \"alert\" ? \"assertive\" : \"polite\"}\n {...toDataAttributes({\n type: item.type,\n size: item.size,\n persistent: item.persistent,\n stackDepth,\n stackExpanded,\n })}\n >\n <div className={styles.iconWrap} aria-hidden=\"true\">\n {item.icon ?? <DefaultIcon className={styles.icon} />}\n </div>\n <div className={styles.content}>\n <header className={styles.header}>\n <p className={styles.title}>{item.title}</p>\n {item.badge !== undefined ? <span className={styles.badge}>{item.badge}</span> : null}\n </header>\n {item.description ? <p className={styles.description}>{item.description}</p> : null}\n {item.action ? (\n <div className={styles.actionRow}>\n <Button.Root\n type=\"button\"\n size={actionButtonSize[item.size]}\n variant=\"neutral\"\n mode=\"stroke\"\n onClick={item.action.onClick}\n >\n {item.action.label}\n </Button.Root>\n </div>\n ) : null}\n </div>\n {item.closable ? (\n <button\n type=\"button\"\n className={styles.closeButton}\n aria-label=\"Dismiss notification\"\n onClick={() => onDismiss(item.id)}\n >\n <X aria-hidden=\"true\" />\n </button>\n ) : null}\n {!item.persistent ? (\n <div className={styles.progressTrack} aria-hidden=\"true\">\n <span className={styles.progressValue} style={{ transform: `scaleX(${progress})` }} />\n </div>\n ) : null}\n </article>\n );\n}\n","import { AnimatePresence, LayoutGroup, motion } from \"framer-motion\";\nimport * as React from \"react\";\n\nimport { Portal } from \"@/internal/Portal\";\nimport { primitiveTokens } from \"../../../tokens/primitives\";\n\nimport {\n NotificationCard,\n type NotificationOptions,\n type NotificationPosition,\n type NotificationRecord,\n type NotificationType,\n} from \"./Notification\";\nimport styles from \"./Notification.module.css\";\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type NotificationProviderProps = {\n children: React.ReactNode;\n position?: NotificationPosition;\n max?: number;\n};\n\ntype StoreValue = {\n items: NotificationRecord[];\n notify: (options: NotificationOptions) => string;\n dismiss: (id: string) => void;\n dismissAll: () => void;\n};\n\n// dismissing — внутренний флаг; не попадает в публичный StoreValue.items\ntype NotificationEntry = NotificationRecord & { dismissing?: true };\n\n// ─── Constants ────────────────────────────────────────────────────────────────\n\nconst DEFAULT_DURATION = 5000;\nconst PEEK_VISIBLE = 3;\nconst PEEK_PX = 8;\n\n// Значения из design-token: primitiveTokens.motion.*\n// Framer-motion принимает duration в секундах и ease как массив чисел\nfunction _msToS(ms: string): number {\n return Number.parseFloat(ms) / 1000;\n}\nfunction _parseBezier(s: string): [number, number, number, number] {\n const m = s.match(/cubic-bezier\\(([^)]+)\\)/);\n const p = m ? m[1].split(\",\").map(Number.parseFloat) : [0.2, 0, 0, 1];\n return [p[0], p[1], p[2], p[3]] as [number, number, number, number];\n}\n\nconst EASE = _parseBezier(primitiveTokens.motion.easing.standard);\nconst DUR_SLOW = _msToS(primitiveTokens.motion.duration.slow); // 500ms → 0.5s\nconst DUR_MEDIUM = _msToS(primitiveTokens.motion.duration.medium); // 350ms → 0.35s\nconst DUR_FAST = _msToS(primitiveTokens.motion.duration.fast); // 200ms → 0.2s\nconst TWEEN_SLOW = { type: \"tween\", duration: DUR_SLOW, ease: EASE } as const;\n\n// DISMISS_CLEANUP_MS: чуть больше exit-анимации (medium = 350ms)\nconst DISMISS_CLEANUP_MS = Math.round(DUR_MEDIUM * 1000) + 100;\nconst POSITIONS: readonly NotificationPosition[] = [\n \"top-left\",\n \"top-center\",\n \"top-right\",\n \"bottom-left\",\n \"bottom-center\",\n \"bottom-right\",\n];\nconst TYPES: readonly NotificationType[] = [\"success\", \"error\", \"warning\", \"info\"];\n\n// ─── Context ──────────────────────────────────────────────────────────────────\n\nconst StoreContext = React.createContext<StoreValue | null>(null);\n\nfunction newId(): string {\n return (\n globalThis.crypto?.randomUUID?.() ?? `ntf-${Date.now()}-${Math.random().toString(16).slice(2)}`\n );\n}\n\nfunction isTop(position: NotificationPosition): boolean {\n return position.startsWith(\"top\");\n}\n\n// ─── NotificationStack ────────────────────────────────────────────────────────\n\nfunction NotificationStack({\n position,\n items,\n onDismiss,\n}: {\n position: NotificationPosition;\n items: NotificationEntry[];\n onDismiss: (id: string) => void;\n}) {\n const [expanded, setExpanded] = React.useState(false);\n const collapseTimerRef = React.useRef<number | null>(null);\n const top = isTop(position);\n\n const handleHover = React.useCallback((hovered: boolean) => {\n if (collapseTimerRef.current !== null) {\n clearTimeout(collapseTimerRef.current);\n collapseTimerRef.current = null;\n }\n if (hovered) {\n setExpanded(true);\n } else {\n collapseTimerRef.current = window.setTimeout(() => setExpanded(false), 100);\n }\n }, []);\n\n React.useEffect(\n () => () => {\n if (collapseTimerRef.current !== null) clearTimeout(collapseTimerRef.current);\n },\n [],\n );\n\n // Только активные (не dismissing) элементы участвуют в визуальном расчёте\n const visible = items.filter((n) => !n.dismissing);\n\n return (\n <motion.ol\n layout\n className={styles.stack}\n aria-label={`Notifications at ${position}`}\n data-expanded={String(expanded)}\n data-stacked={visible.length > 1 ? \"true\" : undefined}\n transition={{ layout: TWEEN_SLOW }}\n onMouseEnter={() => handleHover(true)}\n onMouseLeave={() => handleHover(false)}\n >\n <AnimatePresence>\n {visible.map((item, index) => (\n <NotificationStackItem\n key={item.id}\n item={item}\n index={index}\n expanded={expanded}\n paused={expanded}\n top={top}\n hidden={!expanded && index >= PEEK_VISIBLE}\n onDismiss={onDismiss}\n />\n ))}\n </AnimatePresence>\n </motion.ol>\n );\n}\n\n// React.memo: не перерендериваем, пока props не изменились.\n// Это критично — без мемо каждый setProgress в NotificationCard (60fps) поднимался бы\n// до motion.li layout и засыпал LayoutGroup уведомлениями.\nconst NotificationStackItem = React.memo(function NotificationStackItem({\n item,\n index,\n expanded,\n paused,\n top,\n hidden,\n onDismiss,\n}: {\n item: NotificationRecord;\n index: number;\n expanded: boolean;\n paused: boolean;\n top: boolean;\n hidden: boolean;\n onDismiss: (id: string) => void;\n}) {\n const scale = expanded ? 1 : Math.max(1 - index * 0.04, 0.88);\n const opacity = expanded ? 1 : index === 0 ? 1 : index === 1 ? 0.7 : 0.45;\n const y = expanded ? 0 : (top ? 1 : -1) * index * PEEK_PX;\n\n const rotateEnter = top ? -45 : 45;\n const rotateExit = top ? 25 : -25;\n\n // layoutDependency: layout измеряется только при реальных изменениях позиции/состояния,\n // а не на каждом ре-рендере от внешних причин.\n const layoutDep = `${item.id}-${index}-${String(expanded)}-${String(hidden)}`;\n\n return (\n <motion.li\n className={styles.item}\n data-stack-index={index}\n layout\n layoutDependency={layoutDep}\n initial={{ opacity: 0, y: top ? -16 : 16, rotateX: rotateEnter, transformPerspective: 700 }}\n animate={{\n opacity: hidden ? 0 : opacity,\n y,\n scale,\n rotateX: 0,\n transformPerspective: 700,\n zIndex: 100 - index,\n }}\n exit={{\n opacity: 0,\n rotateX: rotateExit,\n transformPerspective: 700,\n transition: {\n opacity: { type: \"tween\", duration: DUR_MEDIUM, ease: EASE },\n rotateX: { type: \"tween\", duration: DUR_MEDIUM, ease: EASE },\n },\n }}\n transition={{\n opacity: { type: \"tween\", duration: DUR_FAST, ease: EASE },\n y: TWEEN_SLOW,\n scale: TWEEN_SLOW,\n rotateX: TWEEN_SLOW,\n layout: TWEEN_SLOW,\n }}\n style={{\n transformOrigin: top ? \"top center\" : \"bottom center\",\n pointerEvents: hidden ? \"none\" : \"auto\",\n }}\n >\n <NotificationCard\n item={item}\n paused={paused}\n onDismiss={onDismiss}\n stackDepth={index}\n stackExpanded={expanded}\n />\n </motion.li>\n );\n});\n\n// ─── NotificationToaster ──────────────────────────────────────────────────────\n// Получает entries напрямую от провайдера — включая dismissing-элементы,\n// чтобы стек оставался смонтированным во время exit-анимации.\n\nfunction NotificationToaster({\n entries,\n onDismiss,\n}: {\n entries: NotificationEntry[];\n onDismiss: (id: string) => void;\n}) {\n const grouped = React.useMemo(() => {\n const map = new Map<NotificationPosition, Map<NotificationType, NotificationEntry[]>>();\n for (const entry of entries) {\n if (!map.has(entry.position)) map.set(entry.position, new Map());\n const byType = map.get(entry.position);\n if (!byType) continue;\n if (!byType.has(entry.type)) byType.set(entry.type, []);\n byType.get(entry.type)?.push(entry);\n }\n for (const byType of map.values()) {\n for (const list of byType.values()) {\n list.sort((a, b) => b.createdAt - a.createdAt);\n }\n }\n return map;\n }, [entries]);\n\n return (\n <Portal>\n <div className={styles.viewport}>\n {POSITIONS.map((pos) => {\n const byType = grouped.get(pos);\n if (!byType?.size) return null;\n\n const [vertical, horizontal] = pos.split(\"-\") as [\n \"top\" | \"bottom\",\n \"left\" | \"center\" | \"right\",\n ];\n\n const stacks = TYPES.map((type) => ({ type, items: byType.get(type) ?? [] })).filter(\n (s) => s.items.length > 0,\n );\n\n return (\n <section\n key={pos}\n className={`${styles.zone} ${styles[vertical]} ${styles[horizontal]}`}\n >\n <LayoutGroup id={`zone-${pos}`}>\n {stacks.map((s) => (\n <NotificationStack\n key={s.type}\n position={pos}\n items={s.items}\n onDismiss={onDismiss}\n />\n ))}\n </LayoutGroup>\n </section>\n );\n })}\n </div>\n </Portal>\n );\n}\n\n// ─── Public API ───────────────────────────────────────────────────────────────\n\nexport function NotificationProvider({\n children,\n position = \"top-right\",\n max = 5,\n}: NotificationProviderProps) {\n const [entries, setEntries] = React.useState<NotificationEntry[]>([]);\n\n const dismiss = React.useCallback((id: string) => {\n // Фаза 1: помечаем как dismissing → AnimatePresence запускает exit-анимацию\n setEntries((prev) => prev.map((n) => (n.id === id ? { ...n, dismissing: true } : n)));\n // Фаза 2: удаляем из стейта после завершения анимации\n window.setTimeout(() => {\n setEntries((prev) => prev.filter((n) => n.id !== id));\n }, DISMISS_CLEANUP_MS);\n }, []);\n\n const dismissAll = React.useCallback(() => {\n setEntries((prev) => prev.map((n) => ({ ...n, dismissing: true as const })));\n window.setTimeout(() => setEntries([]), DISMISS_CLEANUP_MS);\n }, []);\n\n const notify = React.useCallback(\n (options: NotificationOptions): string => {\n const id = newId();\n const record: NotificationEntry = {\n ...options,\n id,\n size: options.size ?? \"m\",\n position: options.position ?? position,\n duration: options.duration ?? DEFAULT_DURATION,\n persistent: options.persistent ?? false,\n closable: options.closable ?? true,\n createdAt: Date.now(),\n };\n\n setEntries((prev) => {\n const sameStack = prev.filter(\n (n) => n.position === record.position && n.type === record.type && !n.dismissing,\n );\n const otherStacks = prev.filter(\n (n) => n.position !== record.position || n.type !== record.type,\n );\n return [...otherStacks, ...[record, ...sameStack].slice(0, max)];\n });\n\n return id;\n },\n [position, max],\n );\n\n // Публичный items не содержит dismissing-элементов\n const publicItems = React.useMemo(() => entries.filter((n) => !n.dismissing), [entries]);\n\n const value = React.useMemo(\n () => ({ items: publicItems, notify, dismiss, dismissAll }),\n [publicItems, notify, dismiss, dismissAll],\n );\n\n return (\n <StoreContext.Provider value={value}>\n {children}\n <NotificationToaster entries={entries} onDismiss={dismiss} />\n </StoreContext.Provider>\n );\n}\n\nexport function useNotifications(): Pick<StoreValue, \"notify\" | \"dismiss\" | \"dismissAll\"> {\n const ctx = React.useContext(StoreContext);\n if (!ctx) throw new Error(\"useNotifications must be used within NotificationProvider\");\n return { notify: ctx.notify, dismiss: ctx.dismiss, dismissAll: ctx.dismissAll };\n}\n\nexport function useNotificationStore(): StoreValue {\n const ctx = React.useContext(StoreContext);\n if (!ctx) throw new Error(\"useNotificationStore must be used within NotificationProvider\");\n return ctx;\n}\n",".root {\n box-sizing: border-box;\n width: 100%;\n margin: 0 auto;\n padding-block: var(--prime-sys-spacing-5xl);\n padding-inline: var(--prime-sys-spacing-4xl);\n}\n\n.root[data-max-width=\"readable\"] {\n max-width: var(--prime-sys-unit-48rem);\n}\n\n.root[data-max-width=\"wide\"] {\n max-width: var(--prime-sys-unit-72rem);\n}\n\n.header:last-child {\n margin-bottom: 0;\n}\n\n.header {\n display: flex;\n flex-direction: column;\n gap: var(--prime-sys-spacing-x3);\n margin-bottom: var(--prime-sys-spacing-5xl);\n}\n\n.title {\n margin: 0;\n color: var(--prime-sys-color-content-primary);\n font-size: var(--prime-sys-typography-sizeScale-3xl);\n line-height: var(--prime-sys-typography-lineHeightScale-3xl);\n font-weight: var(--prime-sys-typography-weight-semibold);\n letter-spacing: var(--prime-sys-typography-tracking-tight);\n text-wrap: balance;\n}\n\n.description {\n margin: 0;\n max-width: 65ch;\n color: var(--prime-sys-color-content-secondary);\n font-size: var(--prime-sys-typography-sizeScale-s);\n line-height: var(--prime-sys-typography-lineHeightScale-s);\n font-weight: var(--prime-sys-typography-weight-regular);\n}\n\n.body {\n display: flex;\n flex-direction: column;\n gap: var(--prime-sys-spacing-5xl);\n min-width: 0;\n}\n","import * as React from \"react\";\n\nimport { cx } from \"@/internal/cx\";\nimport { toDataAttributes } from \"@/internal/data-attributes\";\n\nimport styles from \"./PageContent.module.css\";\n\n/** Ограничение ширины текстового блока внутри колонки `main`. */\nexport type PageContentMaxWidth = \"full\" | \"readable\" | \"wide\";\n\nexport type PageContentRootProps = {\n maxWidth?: PageContentMaxWidth;\n className?: string;\n children?: React.ReactNode;\n} & React.HTMLAttributes<HTMLDivElement>;\n\nconst PageContentRoot = React.forwardRef<HTMLDivElement, PageContentRootProps>(\n function PageContentRoot({ maxWidth = \"full\", className, children, ...rest }, forwardedRef) {\n return (\n <div\n ref={forwardedRef}\n className={cx(styles.root, className)}\n {...rest}\n {...toDataAttributes({\n \"max-width\": maxWidth === \"full\" ? undefined : maxWidth,\n })}\n >\n {children}\n </div>\n );\n },\n);\nPageContentRoot.displayName = \"PageContent.Root\";\n\nexport type PageContentHeaderProps = {\n className?: string;\n children?: React.ReactNode;\n} & React.HTMLAttributes<HTMLDivElement>;\n\nfunction PageContentHeader({ className, children, ...rest }: PageContentHeaderProps) {\n return (\n <div className={cx(styles.header, className)} {...rest}>\n {children}\n </div>\n );\n}\nPageContentHeader.displayName = \"PageContent.Header\";\n\nexport type PageContentTitleProps = {\n className?: string;\n children?: React.ReactNode;\n} & React.HTMLAttributes<HTMLHeadingElement>;\n\nconst PageContentTitle = React.forwardRef<HTMLHeadingElement, PageContentTitleProps>(\n function PageContentTitle({ className, children, ...rest }, forwardedRef) {\n return (\n <h1 ref={forwardedRef} className={cx(styles.title, className)} {...rest}>\n {children}\n </h1>\n );\n },\n);\nPageContentTitle.displayName = \"PageContent.Title\";\n\nexport type PageContentDescriptionProps = {\n className?: string;\n children?: React.ReactNode;\n} & React.HTMLAttributes<HTMLParagraphElement>;\n\nconst PageContentDescription = React.forwardRef<HTMLParagraphElement, PageContentDescriptionProps>(\n function PageContentDescription({ className, children, ...rest }, forwardedRef) {\n return (\n <p ref={forwardedRef} className={cx(styles.description, className)} {...rest}>\n {children}\n </p>\n );\n },\n);\nPageContentDescription.displayName = \"PageContent.Description\";\n\nexport type PageContentBodyProps = {\n className?: string;\n children?: React.ReactNode;\n} & React.HTMLAttributes<HTMLDivElement>;\n\nfunction PageContentBody({ className, children, ...rest }: PageContentBodyProps) {\n return (\n <div className={cx(styles.body, className)} {...rest}>\n {children}\n </div>\n );\n}\nPageContentBody.displayName = \"PageContent.Body\";\n\nexport const PageContent = {\n Root: PageContentRoot,\n Header: PageContentHeader,\n Title: PageContentTitle,\n Description: PageContentDescription,\n Body: PageContentBody,\n};\n",".root {\n box-sizing: border-box;\n display: flex;\n flex-direction: row;\n align-items: stretch;\n gap: var(--prime-sys-spacing-x3);\n width: 100%;\n min-height: 0;\n padding: var(--prime-sys-spacing-x3);\n background: transparent;\n}\n\n.root[data-fill-viewport=\"true\"] {\n height: 100dvh;\n max-height: 100dvh;\n overflow: hidden;\n}\n\n.navArea {\n box-sizing: border-box;\n display: flex;\n flex: 0 0 auto;\n align-self: stretch;\n min-width: 0;\n min-height: 0;\n max-height: 100%;\n background: transparent;\n}\n\n.contentArea {\n box-sizing: border-box;\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n min-width: 0;\n min-height: 0;\n overflow-x: hidden;\n overflow-y: auto;\n overscroll-behavior: contain;\n padding: var(--prime-sys-spacing-x5);\n border: var(--prime-sys-unit-1px) solid var(--prime-sys-color-border-subtle);\n border-radius: var(--prime-sys-shape-radius-l);\n background: var(--prime-sys-color-surface-elevated);\n box-shadow: var(--prime-sys-elevation-shadow-surface);\n}\n","import * as React from \"react\";\n\nimport { cx } from \"@/internal/cx\";\nimport { toDataAttributes } from \"@/internal/data-attributes\";\n\nimport styles from \"./PageShell.module.css\";\n\nexport type PageShellRootProps = {\n fillViewport?: boolean;\n className?: string;\n children?: React.ReactNode;\n} & React.HTMLAttributes<HTMLDivElement>;\n\nconst PageShellRoot = React.forwardRef<HTMLDivElement, PageShellRootProps>(function PageShellRoot(\n { fillViewport = false, className, children, ...rest },\n forwardedRef,\n) {\n return (\n <div\n ref={forwardedRef}\n className={cx(styles.root, className)}\n {...rest}\n {...toDataAttributes({ \"fill-viewport\": fillViewport ? true : undefined })}\n >\n {children}\n </div>\n );\n});\nPageShellRoot.displayName = \"PageShell.Root\";\n\nexport type PageShellNavAreaProps = {\n className?: string;\n children?: React.ReactNode;\n} & React.HTMLAttributes<HTMLElement>;\n\nfunction PageShellNavArea({ className, children, ...rest }: PageShellNavAreaProps) {\n return (\n <aside className={cx(styles.navArea, className)} {...rest}>\n {children}\n </aside>\n );\n}\nPageShellNavArea.displayName = \"PageShell.NavArea\";\n\nexport type PageShellContentAreaProps = {\n className?: string;\n children?: React.ReactNode;\n} & React.HTMLAttributes<HTMLElement>;\n\nconst PageShellContentArea = React.forwardRef<HTMLElement, PageShellContentAreaProps>(\n function PageShellContentArea({ className, children, ...rest }, forwardedRef) {\n return (\n <main ref={forwardedRef} className={cx(styles.contentArea, className)} {...rest}>\n {children}\n </main>\n );\n },\n);\nPageShellContentArea.displayName = \"PageShell.ContentArea\";\n\nexport const PageShell = {\n Root: PageShellRoot,\n NavArea: PageShellNavArea,\n ContentArea: PageShellContentArea,\n};\n",".inset {\n --po-inset-pad-block: var(--prime-sys-spacing-x2);\n --po-inset-pad-inline: var(--prime-sys-spacing-x2);\n --po-inset-gap: var(--prime-sys-spacing-x3);\n\n display: flex;\n width: 100%;\n min-width: 0;\n flex-direction: column;\n margin: 0;\n box-sizing: border-box;\n padding-block: var(--po-inset-pad-block);\n padding-inline: var(--po-inset-pad-inline);\n gap: var(--po-inset-gap);\n}\n\n.inset[data-inset-padding=\"none\"] {\n --po-inset-pad-block: 0;\n --po-inset-pad-inline: 0;\n}\n\n.inset[data-inset-padding=\"x1\"] {\n --po-inset-pad-block: var(--prime-sys-spacing-x1);\n --po-inset-pad-inline: var(--prime-sys-spacing-x1);\n}\n\n.inset[data-inset-padding=\"x2\"] {\n --po-inset-pad-block: var(--prime-sys-spacing-x2);\n --po-inset-pad-inline: var(--prime-sys-spacing-x2);\n}\n\n.inset[data-inset-padding=\"x3\"] {\n --po-inset-pad-block: var(--prime-sys-spacing-x3);\n --po-inset-pad-inline: var(--prime-sys-spacing-x3);\n}\n\n.inset[data-inset-gap=\"none\"] {\n --po-inset-gap: 0;\n}\n\n.inset[data-inset-gap=\"x2\"] {\n --po-inset-gap: var(--prime-sys-spacing-x2);\n}\n\n.inset[data-inset-gap=\"x3\"] {\n --po-inset-gap: var(--prime-sys-spacing-x3);\n}\n\n.inset[data-inset-gap=\"x4\"] {\n --po-inset-gap: var(--prime-sys-spacing-x4);\n}\n\n.content {\n --po-pad: var(--prime-sys-spacing-x3);\n --po-min-w: var(--prime-sys-unit-12rem);\n --po-text-size: var(--prime-sys-size-control-m-supportText);\n\n display: flex;\n flex-direction: column;\n align-items: stretch;\n position: fixed;\n z-index: var(--prime-sys-elevation-zIndex-popover);\n width: max-content;\n max-width: min(var(--prime-sys-unit-24rem), 100vw);\n background: var(--prime-sys-color-surface-elevated);\n border: none;\n border-radius: var(--prime-sys-shape-radius-l);\n box-shadow: var(--prime-sys-elevation-shadow-surface), var(--prime-sys-elevation-shadow-modal);\n padding: var(--po-pad);\n min-width: var(--po-min-w);\n overflow-y: auto;\n transform-origin: top center;\n font-size: var(--po-text-size);\n line-height: 1.35;\n color: var(--prime-sys-color-content-secondary);\n}\n\n.content[data-size=\"s\"] {\n --po-pad: var(--prime-sys-spacing-x2);\n --po-min-w: var(--prime-sys-unit-10rem);\n --po-text-size: var(--prime-sys-size-control-s-supportText);\n}\n\n.content[data-size=\"l\"] {\n --po-pad: var(--prime-sys-spacing-x3);\n --po-min-w: var(--prime-sys-unit-14rem);\n --po-text-size: var(--prime-sys-size-control-l-supportText);\n}\n\n.content[data-size=\"xl\"] {\n --po-pad: var(--prime-sys-spacing-x4);\n --po-min-w: var(--prime-sys-unit-16rem);\n --po-text-size: var(--prime-sys-size-control-xl-supportText);\n}\n\n:global([data-theme=\"dark\"]) .content {\n background: var(--prime-sys-color-surface-raised);\n}\n\n.content[data-side=\"bottom\"] {\n animation: popoverInBottom var(--prime-sys-motion-fast) var(--prime-sys-motion-standard);\n}\n\n.content[data-side=\"top\"] {\n transform-origin: bottom center;\n animation: popoverInTop var(--prime-sys-motion-fast) var(--prime-sys-motion-standard);\n}\n\n@keyframes popoverInBottom {\n from {\n opacity: 0;\n transform: scale(0.96) translateY(calc(-1 * var(--prime-sys-unit-4px)));\n }\n to {\n opacity: 1;\n transform: scale(1) translateY(0);\n }\n}\n\n@keyframes popoverInTop {\n from {\n opacity: 0;\n transform: scale(0.96) translateY(var(--prime-sys-unit-4px));\n }\n to {\n opacity: 1;\n transform: scale(1) translateY(0);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .content[data-side=\"bottom\"],\n .content[data-side=\"top\"] {\n animation: none;\n }\n}\n","import type { PositionSide } from \"@/hooks/usePosition\";\nimport {\n getFloatingPanelOffsetPx,\n getFloatingViewportPadPx,\n} from \"@/internal/layoutPxFromPrimitives\";\n\nexport const POPOVER_MIN_MAX_HEIGHT = 120;\n\nexport function getPopoverMaxHeightForAnchorSide(\n anchor: DOMRectReadOnly,\n side: PositionSide,\n viewportHeight: number,\n panelOffsetPx: number,\n viewportPadPx: number,\n): number {\n const raw =\n side === \"bottom\"\n ? viewportHeight - anchor.bottom - panelOffsetPx - viewportPadPx\n : anchor.top - panelOffsetPx - viewportPadPx;\n return Math.floor(Math.max(POPOVER_MIN_MAX_HEIGHT, raw));\n}\n\nexport function getPopoverPanelOffsetPx(): number {\n return getFloatingPanelOffsetPx();\n}\n\nexport function getPopoverViewportPadPx(): number {\n return getFloatingViewportPadPx();\n}\n","import * as React from \"react\";\n\nimport type { PositionAlign, PositionSide } from \"@/hooks/usePosition\";\nimport { computeFloatingPosition } from \"@/hooks/usePosition\";\nimport { getScrollContainers } from \"@/internal/scrollAncestors\";\n\nimport {\n getPopoverMaxHeightForAnchorSide,\n getPopoverPanelOffsetPx,\n getPopoverViewportPadPx,\n} from \"./popoverGeometry\";\n\nexport type PopoverLayout = {\n style: React.CSSProperties;\n resolvedSide: PositionSide;\n};\n\ntype Params = {\n open: boolean;\n triggerRef: React.RefObject<HTMLElement | null>;\n contentRef: React.RefObject<HTMLDivElement | null>;\n side: PositionSide;\n align: PositionAlign;\n sameMinWidthAsTrigger: boolean;\n};\n\nfunction layoutEqual(a: PopoverLayout, b: PopoverLayout): boolean {\n return (\n a.resolvedSide === b.resolvedSide &&\n a.style.top === b.style.top &&\n a.style.left === b.style.left &&\n a.style.maxHeight === b.style.maxHeight &&\n a.style.minWidth === b.style.minWidth\n );\n}\n\n/** Позиция + max-height одним проходом; resize / scroll-предки / ResizeObserver / visualViewport. */\nexport function usePopoverPosition({\n open,\n triggerRef,\n contentRef,\n side,\n align,\n sameMinWidthAsTrigger,\n}: Params): PopoverLayout | null {\n const [layout, setLayout] = React.useState<PopoverLayout | null>(null);\n\n const commit = React.useCallback(() => {\n const trigger = triggerRef.current;\n const panel = contentRef.current;\n if (!trigger || !panel) return;\n\n const anchorRect = trigger.getBoundingClientRect();\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n const panelOffset = getPopoverPanelOffsetPx();\n const viewportPad = getPopoverViewportPadPx();\n const pos = computeFloatingPosition(anchorRect, panel.offsetWidth, panel.offsetHeight, vw, vh, {\n preferredSide: side,\n align,\n offset: panelOffset,\n viewportPad,\n flip: true,\n matchTriggerMinWidth: sameMinWidthAsTrigger,\n });\n\n const next: PopoverLayout = {\n resolvedSide: pos.resolvedSide,\n style: {\n position: \"fixed\",\n top: pos.top,\n left: pos.left,\n maxHeight: getPopoverMaxHeightForAnchorSide(\n anchorRect,\n pos.resolvedSide,\n vh,\n panelOffset,\n viewportPad,\n ),\n ...(pos.minWidth !== undefined ? { minWidth: pos.minWidth } : {}),\n },\n };\n\n setLayout((prev) => (prev && layoutEqual(prev, next) ? prev : next));\n }, [triggerRef, contentRef, side, align, sameMinWidthAsTrigger]);\n\n React.useLayoutEffect(() => {\n if (!open) {\n setLayout(null);\n return;\n }\n\n let rafCoalesce = 0;\n const schedule = () => {\n cancelAnimationFrame(rafCoalesce);\n rafCoalesce = requestAnimationFrame(commit);\n };\n\n commit();\n const rafFollowUp = requestAnimationFrame(commit);\n\n window.addEventListener(\"resize\", schedule);\n const scrollTargets = getScrollContainers(triggerRef.current);\n for (const t of scrollTargets) {\n t.addEventListener(\"scroll\", schedule, { passive: true });\n }\n const vv = window.visualViewport;\n vv?.addEventListener(\"resize\", schedule);\n\n const panel = contentRef.current;\n const ro = panel ? new ResizeObserver(schedule) : null;\n if (panel && ro) ro.observe(panel);\n\n return () => {\n cancelAnimationFrame(rafFollowUp);\n cancelAnimationFrame(rafCoalesce);\n window.removeEventListener(\"resize\", schedule);\n for (const t of scrollTargets) {\n t.removeEventListener(\"scroll\", schedule);\n }\n vv?.removeEventListener(\"resize\", schedule);\n ro?.disconnect();\n };\n }, [open, commit, triggerRef, contentRef]);\n\n return layout;\n}\n","import * as React from \"react\";\n\nimport { useControllableState } from \"@/hooks/useControllableState\";\nimport { useEscapeKey } from \"@/hooks/useEscapeKey\";\nimport { useFocusTrap } from \"@/hooks/useFocusTrap\";\nimport { isPortaledSelectListboxOwnedByContainer, useOutsideClick } from \"@/hooks/useOutsideClick\";\nimport type { PositionAlign, PositionSide } from \"@/hooks/usePosition\";\nimport { ControlSizeProvider } from \"@/internal/ControlSizeContext\";\nimport { createComponentContext } from \"@/internal/context\";\nimport { cx } from \"@/internal/cx\";\nimport { mergeRefs } from \"@/internal/mergeRefs\";\nimport { Portal } from \"@/internal/Portal\";\nimport type { DropdownSize } from \"@/internal/states\";\n\nimport styles from \"./Popover.module.css\";\nimport { usePopoverPosition } from \"./usePopoverPosition\";\n\nexport type PopoverSize = DropdownSize;\n\ntype Ctx = {\n isOpen: boolean;\n onClose: () => void;\n onToggle: () => void;\n triggerId: string;\n contentId: string;\n triggerRef: React.RefObject<HTMLElement | null>;\n};\n\nconst [PopoverProvider, usePopoverContext] = createComponentContext<Ctx>(\"Popover\");\n\nexport type PopoverRootProps = {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n children: React.ReactNode;\n};\n\nfunction PopoverRoot({ open, defaultOpen = false, onOpenChange, children }: PopoverRootProps) {\n const [isOpen, setIsOpen] = useControllableState({\n value: open,\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n });\n const id = React.useId();\n const triggerId = `${id}-trigger`;\n const contentId = `${id}-content`;\n const triggerRef = React.useRef<HTMLElement | null>(null);\n const onClose = React.useCallback(() => setIsOpen(false), [setIsOpen]);\n const onToggle = React.useCallback(() => setIsOpen((v) => !v), [setIsOpen]);\n\n const value = React.useMemo(\n () => ({ isOpen, onClose, onToggle, triggerId, contentId, triggerRef }),\n [isOpen, onClose, onToggle, triggerId, contentId],\n );\n\n return <PopoverProvider value={value}>{children}</PopoverProvider>;\n}\nPopoverRoot.displayName = \"PopoverRoot\";\n\nexport type PopoverTriggerProps = {\n children: React.ReactElement;\n asChild?: boolean;\n};\n\nfunction PopoverTrigger({ children, asChild: _asChild = true }: PopoverTriggerProps) {\n void _asChild;\n const { isOpen, onToggle, triggerId, contentId, triggerRef } = usePopoverContext();\n const toggleRef = React.useRef(onToggle);\n toggleRef.current = onToggle;\n\n const setNode = React.useCallback(\n (el: HTMLElement | null) => {\n (triggerRef as React.MutableRefObject<HTMLElement | null>).current = el;\n },\n [triggerRef],\n );\n\n // biome-ignore lint/suspicious/noExplicitAny: cloneElement на произвольный элемент\n const child = children as React.ReactElement<any>;\n const childRef =\n (child.props as { ref?: React.Ref<HTMLElement | null> }).ref ??\n (child as unknown as { ref?: React.Ref<HTMLElement | null> }).ref;\n const mergedRef = React.useMemo(() => mergeRefs(childRef, setNode), [childRef, setNode]);\n const userClick = child.props?.onClick as React.MouseEventHandler<HTMLElement> | undefined;\n\n return React.cloneElement(child, {\n ref: mergedRef,\n id: triggerId,\n \"aria-expanded\": isOpen,\n \"aria-haspopup\": \"dialog\",\n \"aria-controls\": contentId,\n onClick: (e: React.MouseEvent<HTMLElement>) => {\n userClick?.(e);\n toggleRef.current();\n },\n });\n}\nPopoverTrigger.displayName = \"PopoverTrigger\";\n\nexport type PopoverContentProps = {\n align?: PositionAlign;\n side?: PositionSide;\n sameMinWidthAsTrigger?: boolean;\n size?: PopoverSize;\n trapFocus?: boolean;\n children: React.ReactNode;\n className?: string;\n};\n\nfunction PopoverContent({\n align = \"start\",\n side = \"bottom\",\n sameMinWidthAsTrigger = false,\n size = \"m\",\n trapFocus = false,\n children,\n className,\n}: PopoverContentProps) {\n const { isOpen, onClose, triggerRef, contentId, triggerId } = usePopoverContext();\n const contentRef = React.useRef<HTMLDivElement | null>(null);\n\n const layout = usePopoverPosition({\n open: isOpen,\n triggerRef,\n contentRef,\n side,\n align,\n sameMinWidthAsTrigger,\n });\n\n const trapRef = useFocusTrap<HTMLDivElement>({\n enabled: isOpen && trapFocus,\n restoreFocus: true,\n });\n const ref = React.useMemo(() => mergeRefs(contentRef, trapRef), [trapRef]);\n\n useEscapeKey({ enabled: isOpen, onEscape: onClose });\n useOutsideClick({\n refs: [triggerRef, contentRef],\n enabled: isOpen,\n onOutsideClick: onClose,\n shouldSuppressOutsideClick: (target) =>\n isPortaledSelectListboxOwnedByContainer(target, contentRef.current),\n });\n\n if (!isOpen) return null;\n\n return (\n <Portal>\n <ControlSizeProvider value={size}>\n <div\n ref={ref}\n id={contentId}\n role=\"dialog\"\n aria-modal={false}\n aria-labelledby={triggerId}\n data-react-aria-top-layer=\"true\"\n data-side={layout?.resolvedSide ?? side}\n data-size={size}\n className={cx(styles.content, className)}\n style={layout?.style}\n >\n {children}\n </div>\n </ControlSizeProvider>\n </Portal>\n );\n}\nPopoverContent.displayName = \"PopoverContent\";\n\nexport type PopoverInsetPadding = \"none\" | \"x1\" | \"x2\" | \"x3\";\nexport type PopoverInsetGap = \"none\" | \"x2\" | \"x3\" | \"x4\";\n\nexport type PopoverInsetProps = React.HTMLAttributes<HTMLDivElement> & {\n children: React.ReactNode;\n /** Доп. отступы от внутреннего края `Popover.Content`. По умолчанию `x2`. */\n padding?: PopoverInsetPadding;\n /** Вертикальный зазор между прямыми дочерними блоками. По умолчанию `x3`. */\n gap?: PopoverInsetGap;\n};\n\nfunction PopoverInset({\n children,\n className,\n padding = \"x2\",\n gap = \"x3\",\n ...rest\n}: PopoverInsetProps) {\n return (\n <div\n className={cx(styles.inset, className)}\n data-inset-gap={gap}\n data-inset-padding={padding}\n {...rest}\n >\n {children}\n </div>\n );\n}\nPopoverInset.displayName = \"PopoverInset\";\n\nexport const Popover = {\n Root: PopoverRoot,\n Trigger: PopoverTrigger,\n Content: PopoverContent,\n Inset: PopoverInset,\n};\n",".root {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.track {\n stroke: var(--prime-sys-color-surface-accentSoft);\n}\n\n.fill {\n stroke: var(--prime-sys-color-action-primaryBackground);\n stroke-linecap: round;\n transition: stroke-dashoffset var(--prime-sys-motion-medium) var(--prime-sys-motion-standard);\n}\n\n.inner {\n position: absolute;\n display: flex;\n align-items: center;\n justify-content: center;\n font-weight: var(--prime-sys-typography-weight-medium);\n color: var(--prime-sys-color-content-primary);\n width: var(--progress-circle-inner-size);\n height: var(--progress-circle-inner-size);\n padding: var(--prime-sys-spacing-xs);\n box-sizing: border-box;\n}\n\n.root[data-size=\"s\"] .inner {\n font-size: var(--prime-sys-size-control-s-text);\n}\n\n.root[data-size=\"m\"] .inner {\n font-size: var(--prime-sys-size-control-m-text);\n}\n\n.root[data-size=\"l\"] .inner {\n font-size: var(--prime-sys-size-control-l-text);\n}\n\n.root[data-size=\"xl\"] .inner {\n font-size: var(--prime-sys-size-control-xl-text);\n}\n","import * as React from \"react\";\nimport { cx } from \"@/internal/cx\";\nimport { remToPx } from \"@/internal/layoutPxFromPrimitives\";\nimport { primitiveTokens } from \"../../../tokens/primitives\";\n\nimport styles from \"./ProgressCircle.module.css\";\n\nconst pc = primitiveTokens.progressCircle;\n\nexport type ProgressCircleSize = keyof typeof pc;\n\nexport type ProgressCircleRootProps = {\n value: number;\n max?: number;\n size?: ProgressCircleSize;\n label?: string;\n children?: React.ReactNode;\n className?: string;\n};\n\nfunction clampProgress(value: number, max: number): number {\n return Math.min(max, Math.max(value, 0));\n}\n\nconst ProgressCircleRoot = React.forwardRef<HTMLDivElement, ProgressCircleRootProps>(\n ({ value, max = 100, size = \"m\", label, children, className }, ref) => {\n const safeMax = max > 0 ? max : 100;\n const safeValue = clampProgress(value, safeMax);\n const tier = pc[size];\n const sizeVal = remToPx(tier.diameter);\n const strokeWidth = Number.parseInt(tier.strokeWidth, 10);\n const radius = (sizeVal - strokeWidth) / 2;\n const circumference = 2 * Math.PI * radius;\n const offset = circumference * (1 - safeValue / safeMax);\n const center = sizeVal / 2;\n const innerSize = sizeVal - strokeWidth * 2;\n\n return (\n <div\n ref={ref}\n className={cx(styles.root, className)}\n data-size={size}\n style={\n {\n \"--progress-circle-inner-size\": `${innerSize}px`,\n } as React.CSSProperties\n }\n >\n <svg\n width={sizeVal}\n height={sizeVal}\n viewBox={`0 0 ${sizeVal} ${sizeVal}`}\n role=\"progressbar\"\n aria-valuenow={safeValue}\n aria-valuemin={0}\n aria-valuemax={safeMax}\n aria-label={label}\n >\n <circle\n cx={center}\n cy={center}\n r={radius}\n className={styles.track}\n fill=\"none\"\n strokeWidth={strokeWidth}\n />\n <circle\n cx={center}\n cy={center}\n r={radius}\n className={styles.fill}\n fill=\"none\"\n strokeWidth={strokeWidth}\n strokeDasharray={circumference}\n strokeDashoffset={offset}\n transform={`rotate(-90 ${center} ${center})`}\n />\n </svg>\n {children ? <div className={styles.inner}>{children}</div> : null}\n </div>\n );\n },\n);\n\nProgressCircleRoot.displayName = \"ProgressCircleRoot\";\n\nexport const ProgressCircle = { Root: ProgressCircleRoot };\n",".field {\n --prime-choice-control-size: var(--prime-sys-size-choice-m-control);\n --prime-choice-col-gap: var(--prime-sys-size-control-m-inputPaddingX);\n --prime-choice-hint-offset: calc(var(--prime-choice-control-size) + var(--prime-choice-col-gap));\n --prime-choice-stack-gap: var(--prime-sys-size-control-m-gap);\n box-sizing: border-box;\n width: 100%;\n min-width: 0;\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: var(--prime-choice-stack-gap);\n}\n\n.field[data-size=\"s\"] {\n --prime-choice-control-size: var(--prime-sys-size-choice-s-control);\n --prime-choice-col-gap: var(--prime-sys-size-control-s-inputPaddingX);\n}\n\n.field[data-size=\"l\"] {\n --prime-choice-control-size: var(--prime-sys-size-choice-l-control);\n --prime-choice-col-gap: var(--prime-sys-size-control-l-inputPaddingX);\n}\n\n.field[data-size=\"xl\"] {\n --prime-choice-control-size: var(--prime-sys-size-choice-xl-control);\n --prime-choice-col-gap: var(--prime-sys-size-control-xl-inputPaddingX);\n}\n\n.field .labelRow {\n display: grid;\n grid-template-columns: auto 1fr;\n gap: 0;\n row-gap: 0;\n column-gap: var(--prime-choice-col-gap);\n align-items: center;\n width: 100%;\n cursor: pointer;\n}\n\n.controlCell {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: var(--prime-choice-control-size);\n height: var(--prime-choice-control-size);\n}\n\n.input {\n position: absolute;\n opacity: 0;\n pointer-events: none;\n}\n\n.svg {\n width: var(--prime-choice-control-size);\n height: var(--prime-choice-control-size);\n flex-shrink: 0;\n display: inline-flex;\n transition: box-shadow var(--prime-sys-motion-medium) var(--prime-sys-motion-standard);\n}\n\n.outerCircle {\n fill: var(--prime-sys-color-surface-raised);\n stroke: var(--prime-sys-color-field-border);\n stroke-width: 1;\n transition:\n fill var(--prime-sys-motion-medium) var(--prime-sys-motion-standard),\n stroke var(--prime-sys-motion-medium) var(--prime-sys-motion-standard);\n}\n\n.innerCircle {\n fill: var(--prime-sys-color-action-primaryBackground);\n transform-origin: center;\n transform: scale(0);\n opacity: 0;\n transition:\n transform var(--prime-sys-motion-fast) var(--prime-sys-motion-standard),\n opacity var(--prime-sys-motion-fast) var(--prime-sys-motion-standard);\n}\n\n.controlCell .input:checked + .svg .outerCircle {\n stroke: var(--prime-sys-color-action-primaryBackground);\n}\n\n.controlCell .input:checked + .svg .innerCircle {\n transform: scale(1);\n opacity: 1;\n}\n\n.labelRow:hover .svg .outerCircle {\n stroke: var(--prime-sys-color-field-borderHover);\n fill: var(--prime-sys-color-action-neutralBackgroundHover);\n}\n\n.labelRow:hover .controlCell .input:checked + .svg .outerCircle {\n stroke: var(--prime-sys-color-action-primaryBackgroundHover);\n}\n\n.controlCell .input:focus-visible + .svg {\n border-radius: var(--prime-sys-shape-radius-round);\n box-shadow: var(--prime-sys-elevation-shadow-buttonFocus);\n}\n\n.controlCell .input:focus-visible + .svg .outerCircle {\n stroke: var(--prime-sys-color-field-borderFocus);\n}\n\n.field[data-invalid=\"true\"] .svg .outerCircle {\n stroke: var(--prime-sys-color-field-borderError);\n}\n\n.field[data-invalid=\"true\"] .svg .innerCircle {\n fill: var(--prime-sys-color-border-danger);\n}\n\n.field[data-disabled=\"true\"] .labelRow {\n cursor: not-allowed;\n}\n\n.field[data-disabled=\"true\"] .svg .outerCircle {\n filter: none;\n stroke: var(--prime-sys-color-border-subtle);\n fill: var(--prime-sys-color-surface-accentSoft);\n}\n\n.text {\n line-height: var(--prime-sys-typography-body-lineHeight);\n min-width: 0;\n}\n\n.hintSlot {\n box-sizing: border-box;\n width: 100%;\n max-width: 100%;\n padding-inline-start: var(--prime-choice-hint-offset);\n justify-content: flex-start;\n}\n","import * as React from \"react\";\nimport { Hint } from \"@/components/hint/Hint\";\nimport { Label } from \"@/components/label/Label\";\nimport { ControlSizeProvider } from \"@/internal/ControlSizeContext\";\nimport { createComponentContext } from \"@/internal/context\";\nimport { cx } from \"@/internal/cx\";\nimport { toDataAttributes } from \"@/internal/data-attributes\";\nimport type { HintSize, LabelSize, RadioSize, RadioVariant } from \"@/internal/states\";\n\nimport styles from \"./Radio.module.css\";\n\ntype RadioContextValue = {\n inputId: string;\n hintId: string;\n errorId: string;\n size: RadioSize;\n inputRef: React.Ref<HTMLInputElement>;\n invalid: boolean;\n disabled: boolean;\n describedBy: string | undefined;\n restInputPropsRef: React.MutableRefObject<React.InputHTMLAttributes<HTMLInputElement>>;\n registerHint: () => void;\n unregisterHint: () => void;\n registerError: () => void;\n unregisterError: () => void;\n};\n\nconst [RadioProvider, useRadioContext] = createComponentContext<RadioContextValue>(\"Radio\");\n\nexport type RadioRootProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, \"type\" | \"size\"> & {\n variant?: RadioVariant;\n size?: RadioSize;\n};\n\nconst RadioRoot = React.forwardRef<HTMLInputElement, RadioRootProps>(\n (\n {\n id,\n variant = \"default\",\n size = \"m\",\n disabled,\n className,\n \"aria-describedby\": ariaDescribedBy,\n children,\n ...inputRest\n },\n ref,\n ) => {\n const rawId = React.useId();\n const inputId = id ?? rawId;\n const hintId = `${inputId}-hint`;\n const errorId = `${inputId}-error`;\n\n const [hasHint, setHasHint] = React.useState(false);\n const [hasError, setHasError] = React.useState(false);\n\n const invalid = variant === \"error\" || hasError;\n\n const restInputPropsRef = React.useRef<React.InputHTMLAttributes<HTMLInputElement>>(inputRest);\n restInputPropsRef.current = inputRest;\n\n const parts = [\n ariaDescribedBy,\n hasHint ? hintId : undefined,\n hasError ? errorId : undefined,\n ].filter(Boolean);\n const describedBy = parts.length > 0 ? parts.join(\" \") : undefined;\n\n const registerHint = React.useCallback(() => setHasHint(true), []);\n const unregisterHint = React.useCallback(() => setHasHint(false), []);\n const registerError = React.useCallback(() => setHasError(true), []);\n const unregisterError = React.useCallback(() => setHasError(false), []);\n\n const ctxValue = React.useMemo(\n () => ({\n inputId,\n hintId,\n errorId,\n size,\n inputRef: ref,\n invalid,\n disabled: Boolean(disabled),\n describedBy,\n restInputPropsRef,\n registerHint,\n unregisterHint,\n registerError,\n unregisterError,\n }),\n [\n inputId,\n hintId,\n errorId,\n size,\n ref,\n invalid,\n disabled,\n describedBy,\n registerHint,\n unregisterHint,\n registerError,\n unregisterError,\n ],\n );\n\n return (\n <RadioProvider value={ctxValue}>\n <ControlSizeProvider value={size}>\n <div\n className={cx(styles.field, className)}\n {...toDataAttributes({\n size,\n variant,\n disabled: Boolean(disabled),\n invalid,\n })}\n >\n {children}\n </div>\n </ControlSizeProvider>\n </RadioProvider>\n );\n },\n);\n\nRadioRoot.displayName = \"RadioRoot\";\n\n// ─── Label ───────────────────────────────────────────────────────────────────\n\nexport type RadioLabelProps = {\n children?: React.ReactNode;\n className?: string;\n} & Omit<React.HTMLAttributes<HTMLLabelElement>, \"htmlFor\" | \"size\">;\n\nconst RadioLabel = React.forwardRef<HTMLLabelElement, RadioLabelProps>(function RadioLabel(\n { children, className, ...rest },\n ref,\n) {\n const { inputId, inputRef, invalid, disabled, describedBy, restInputPropsRef, size } =\n useRadioContext();\n\n const filterId = React.useId();\n const svgFilterId = `es-radio-${filterId.replace(/:/g, \"\")}`;\n\n return (\n <Label.Root\n ref={ref}\n htmlFor={inputId}\n size={size as LabelSize}\n disabled={disabled}\n className={cx(styles.labelRow, className)}\n {...rest}\n >\n <span className={styles.controlCell}>\n <input\n ref={inputRef}\n id={inputId}\n type=\"radio\"\n className={styles.input}\n disabled={disabled}\n aria-invalid={invalid || undefined}\n aria-describedby={describedBy || undefined}\n {...restInputPropsRef.current}\n />\n <svg viewBox=\"0 0 18 18\" className={styles.svg} aria-hidden=\"true\">\n <defs>\n <filter id={svgFilterId}>\n <feDropShadow dx=\"0\" dy=\"1\" stdDeviation=\"0.5\" floodOpacity=\"0.10\" />\n </filter>\n </defs>\n <circle\n cx=\"9\"\n cy=\"9\"\n r=\"8\"\n className={styles.outerCircle}\n filter={`url(#${svgFilterId})`}\n />\n <circle cx=\"9\" cy=\"9\" r=\"4\" className={styles.innerCircle} />\n </svg>\n </span>\n {children !== undefined && children !== null ? (\n <span className={styles.text}>{children}</span>\n ) : null}\n </Label.Root>\n );\n});\n\nRadioLabel.displayName = \"RadioLabel\";\n\n// ─── Hint ────────────────────────────────────────────────────────────────────\n\nexport type RadioHintProps = {\n children: React.ReactNode;\n className?: string;\n} & Omit<React.HTMLAttributes<HTMLParagraphElement>, \"id\">;\n\nfunction RadioHint({ children, className, ...rest }: RadioHintProps) {\n const { hintId, registerHint, unregisterHint, size, disabled } = useRadioContext();\n\n React.useLayoutEffect(() => {\n registerHint();\n return () => {\n unregisterHint();\n };\n }, [registerHint, unregisterHint]);\n\n return (\n <Hint.Root\n id={hintId}\n size={size as HintSize}\n variant={disabled ? \"disabled\" : \"default\"}\n className={cx(styles.hintSlot, className)}\n {...rest}\n >\n {children}\n </Hint.Root>\n );\n}\n\nRadioHint.displayName = \"RadioHint\";\n\n// ─── Error ───────────────────────────────────────────────────────────────────\n\nexport type RadioErrorProps = {\n children: React.ReactNode;\n className?: string;\n} & Omit<React.HTMLAttributes<HTMLParagraphElement>, \"id\">;\n\nfunction RadioError({ children, className, ...rest }: RadioErrorProps) {\n const { errorId, registerError, unregisterError, size } = useRadioContext();\n\n React.useLayoutEffect(() => {\n registerError();\n return () => {\n unregisterError();\n };\n }, [registerError, unregisterError]);\n\n return (\n <Hint.Root\n id={errorId}\n size={size as HintSize}\n variant=\"error\"\n className={cx(styles.hintSlot, className)}\n {...rest}\n >\n {children}\n </Hint.Root>\n );\n}\n\nRadioError.displayName = \"RadioError\";\n\n// ─── Namespace ───────────────────────────────────────────────────────────────\n\nexport const Radio = {\n Root: RadioRoot,\n Label: RadioLabel,\n Hint: RadioHint,\n Error: RadioError,\n};\n",".content {\n --tt-arrow-size: var(--prime-sys-unit-8px);\n\n display: flex;\n flex-direction: column;\n position: fixed;\n z-index: var(--prime-sys-elevation-zIndex-tooltip);\n pointer-events: none;\n border-radius: var(--prime-sys-size-tooltip-m-radius);\n padding-block: var(--prime-sys-size-tooltip-m-paddingY);\n padding-inline: var(--prime-sys-size-tooltip-m-paddingX);\n font-size: var(--prime-sys-size-tooltip-m-text);\n font-family: var(--prime-sys-typography-family-base);\n line-height: var(--prime-sys-typography-body-lineHeight);\n max-width: var(--prime-sys-unit-16rem);\n word-break: break-word;\n background: var(--prime-sys-color-tooltip-background);\n color: var(--prime-sys-color-tooltip-foreground);\n border: var(--prime-sys-unit-1px) solid var(--prime-sys-color-tooltip-border);\n box-shadow: var(--prime-sys-elevation-shadow-tooltip);\n overflow: visible;\n animation: tooltipIn var(--prime-sys-motion-fast) var(--prime-sys-motion-standard) both;\n}\n\n.content::after {\n content: \"\";\n position: absolute;\n width: var(--tt-arrow-size);\n height: var(--tt-arrow-size);\n background: var(--prime-sys-color-tooltip-background);\n transform: rotate(45deg);\n}\n\n.content[data-side=\"top\"]::after {\n bottom: calc(var(--tt-arrow-size) / -2 - var(--prime-sys-unit-1px));\n left: calc(50% - var(--tt-arrow-size) / 2);\n border-right: var(--prime-sys-unit-1px) solid var(--prime-sys-color-tooltip-border);\n border-bottom: var(--prime-sys-unit-1px) solid var(--prime-sys-color-tooltip-border);\n}\n\n.content[data-side=\"bottom\"]::after {\n top: calc(var(--tt-arrow-size) / -2 - var(--prime-sys-unit-1px));\n left: calc(50% - var(--tt-arrow-size) / 2);\n border-left: var(--prime-sys-unit-1px) solid var(--prime-sys-color-tooltip-border);\n border-top: var(--prime-sys-unit-1px) solid var(--prime-sys-color-tooltip-border);\n}\n\n.content[data-side=\"left\"]::after {\n top: calc(50% - var(--tt-arrow-size) / 2);\n right: calc(var(--tt-arrow-size) / -2 - var(--prime-sys-unit-1px));\n border-top: var(--prime-sys-unit-1px) solid var(--prime-sys-color-tooltip-border);\n border-right: var(--prime-sys-unit-1px) solid var(--prime-sys-color-tooltip-border);\n}\n\n.content[data-side=\"right\"]::after {\n top: calc(50% - var(--tt-arrow-size) / 2);\n left: calc(var(--tt-arrow-size) / -2 - var(--prime-sys-unit-1px));\n border-left: var(--prime-sys-unit-1px) solid var(--prime-sys-color-tooltip-border);\n border-bottom: var(--prime-sys-unit-1px) solid var(--prime-sys-color-tooltip-border);\n}\n\n.content[data-size=\"s\"] {\n --tt-arrow-size: calc(var(--prime-sys-unit-8px) * 0.75);\n\n padding-block: var(--prime-sys-size-tooltip-s-paddingY);\n padding-inline: var(--prime-sys-size-tooltip-s-paddingX);\n font-size: var(--prime-sys-size-tooltip-s-text);\n border-radius: var(--prime-sys-size-tooltip-s-radius);\n}\n\n.content[data-size=\"l\"] {\n --tt-arrow-size: var(--prime-sys-unit-8px);\n\n padding-block: var(--prime-sys-size-tooltip-l-paddingY);\n padding-inline: var(--prime-sys-size-tooltip-l-paddingX);\n font-size: var(--prime-sys-size-tooltip-l-text);\n border-radius: var(--prime-sys-size-tooltip-l-radius);\n}\n\n.content[data-size=\"xl\"] {\n --tt-arrow-size: calc(var(--prime-sys-unit-8px) * 1.25);\n\n padding-block: var(--prime-sys-size-tooltip-xl-paddingY);\n padding-inline: var(--prime-sys-size-tooltip-xl-paddingX);\n font-size: var(--prime-sys-size-tooltip-xl-text);\n border-radius: var(--prime-sys-size-tooltip-xl-radius);\n}\n\n@keyframes tooltipIn {\n from {\n opacity: 0;\n transform: scale(0.97);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n}\n","import * as React from \"react\";\n\nimport { useControllableState } from \"@/hooks/useControllableState\";\nimport { ControlSizeProvider } from \"@/internal/ControlSizeContext\";\nimport { createComponentContext } from \"@/internal/context\";\nimport { cx } from \"@/internal/cx\";\nimport { toDataAttributes } from \"@/internal/data-attributes\";\nimport { Portal } from \"@/internal/Portal\";\n\nimport styles from \"./Tooltip.module.css\";\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type TooltipSize = \"s\" | \"m\" | \"l\" | \"xl\";\nexport type TooltipSide = \"top\" | \"bottom\" | \"left\" | \"right\";\n\n// ─── Provider Context ─────────────────────────────────────────────────────────\n\ntype TooltipProviderContextValue = {\n delayDuration: number;\n};\n\nconst TooltipProviderContext = React.createContext<TooltipProviderContextValue>({\n delayDuration: 400,\n});\n\n// ─── Root Context ─────────────────────────────────────────────────────────────\n\ntype TooltipRootContextValue = {\n isOpen: boolean;\n triggerRef: React.RefObject<HTMLElement | null>;\n contentId: string;\n handleOpen: () => void;\n handleClose: () => void;\n};\n\nconst [TooltipRootProvider, useTooltipRootContext] =\n createComponentContext<TooltipRootContextValue>(\"Tooltip\");\n\n// ─── Provider ─────────────────────────────────────────────────────────────────\n\nexport type TooltipProviderProps = {\n delayDuration?: number;\n children: React.ReactNode;\n};\n\nfunction TooltipProvider({ delayDuration = 400, children }: TooltipProviderProps) {\n const value = React.useMemo(() => ({ delayDuration }), [delayDuration]);\n return (\n <TooltipProviderContext.Provider value={value}>{children}</TooltipProviderContext.Provider>\n );\n}\n\n// ─── Root ─────────────────────────────────────────────────────────────────────\n\nexport type TooltipRootProps = {\n children: React.ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n};\n\nfunction TooltipRoot({ children, open, defaultOpen, onOpenChange }: TooltipRootProps) {\n const { delayDuration } = React.useContext(TooltipProviderContext);\n\n const [isOpen, setIsOpen] = useControllableState<boolean>({\n value: open,\n defaultValue: defaultOpen ?? false,\n onChange: onOpenChange,\n });\n\n const triggerRef = React.useRef<HTMLElement | null>(null);\n const timeoutRef = React.useRef<ReturnType<typeof setTimeout>>(undefined);\n const contentId = React.useId();\n\n const handleOpen = React.useCallback(() => {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => setIsOpen(true), delayDuration);\n }, [delayDuration, setIsOpen]);\n\n const handleClose = React.useCallback(() => {\n clearTimeout(timeoutRef.current);\n setIsOpen(false);\n }, [setIsOpen]);\n\n React.useEffect(() => {\n return () => clearTimeout(timeoutRef.current);\n }, []);\n\n return (\n <TooltipRootProvider value={{ isOpen, triggerRef, contentId, handleOpen, handleClose }}>\n {children}\n </TooltipRootProvider>\n );\n}\n\n// ─── Trigger ─────────────────────────────────────────────────────────────────\n\nexport type TooltipTriggerProps = {\n children: React.ReactElement;\n className?: string;\n};\n\nfunction TooltipTrigger({ children, className }: TooltipTriggerProps) {\n const { triggerRef, contentId, handleOpen, handleClose } = useTooltipRootContext();\n const props = children.props as React.HTMLAttributes<HTMLElement> & {\n ref?: React.Ref<HTMLElement>;\n };\n\n return React.cloneElement(\n children as React.ReactElement<\n React.HTMLAttributes<HTMLElement> & React.RefAttributes<HTMLElement>\n >,\n {\n ref: triggerRef,\n className: cx(props.className, className) || undefined,\n \"aria-describedby\": contentId,\n onMouseEnter: (e: React.MouseEvent<HTMLElement>) => {\n props.onMouseEnter?.(e);\n handleOpen();\n },\n onMouseLeave: (e: React.MouseEvent<HTMLElement>) => {\n props.onMouseLeave?.(e);\n handleClose();\n },\n onFocus: (e: React.FocusEvent<HTMLElement>) => {\n props.onFocus?.(e);\n handleOpen();\n },\n onBlur: (e: React.FocusEvent<HTMLElement>) => {\n props.onBlur?.(e);\n handleClose();\n },\n },\n );\n}\n\n// ─── Positioning ──────────────────────────────────────────────────────────────\n\nconst TOOLTIP_OFFSET = 6;\n\ntype TooltipCoords = { top: number; left: number };\n\nfunction computePosition(\n anchor: HTMLElement,\n content: HTMLElement,\n side: TooltipSide,\n): TooltipCoords {\n const ar = anchor.getBoundingClientRect();\n const cr = content.getBoundingClientRect();\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n\n let top: number;\n let left: number;\n\n switch (side) {\n case \"top\":\n top = ar.top - cr.height - TOOLTIP_OFFSET;\n left = ar.left + ar.width / 2 - cr.width / 2;\n break;\n case \"bottom\":\n top = ar.bottom + TOOLTIP_OFFSET;\n left = ar.left + ar.width / 2 - cr.width / 2;\n break;\n case \"left\":\n top = ar.top + ar.height / 2 - cr.height / 2;\n left = ar.left - cr.width - TOOLTIP_OFFSET;\n break;\n case \"right\":\n top = ar.top + ar.height / 2 - cr.height / 2;\n left = ar.right + TOOLTIP_OFFSET;\n break;\n }\n\n return {\n top: Math.round(Math.max(8, Math.min(top, vh - cr.height - 8))),\n left: Math.round(Math.max(8, Math.min(left, vw - cr.width - 8))),\n };\n}\n\n// ─── Content ─────────────────────────────────────────────────────────────────\n\nexport type TooltipContentProps = {\n children: React.ReactNode;\n size?: TooltipSize;\n side?: TooltipSide;\n className?: string;\n};\n\nfunction TooltipContent({ children, size = \"m\", side = \"top\", className }: TooltipContentProps) {\n const { isOpen, triggerRef, contentId } = useTooltipRootContext();\n const contentRef = React.useRef<HTMLDivElement | null>(null);\n const [coords, setCoords] = React.useState<TooltipCoords | null>(null);\n\n React.useEffect(() => {\n if (!isOpen) {\n setCoords(null);\n return;\n }\n\n const update = () => {\n const anchor = triggerRef.current;\n const content = contentRef.current;\n if (!anchor || !content) return;\n setCoords(computePosition(anchor, content, side));\n };\n\n const frameId = requestAnimationFrame(update);\n window.addEventListener(\"resize\", update);\n window.addEventListener(\"scroll\", update, true);\n\n return () => {\n cancelAnimationFrame(frameId);\n window.removeEventListener(\"resize\", update);\n window.removeEventListener(\"scroll\", update, true);\n };\n }, [isOpen, triggerRef, side]);\n\n if (!isOpen) return null;\n\n const positionStyle: React.CSSProperties = {\n position: \"fixed\",\n top: coords?.top ?? 0,\n left: coords?.left ?? 0,\n };\n\n return (\n <Portal>\n <div\n ref={contentRef}\n id={contentId}\n role=\"tooltip\"\n className={cx(styles.content, className)}\n style={positionStyle}\n {...toDataAttributes({ size, side })}\n >\n <ControlSizeProvider value={size}>{children}</ControlSizeProvider>\n </div>\n </Portal>\n );\n}\n\n// ─── Exports ──────────────────────────────────────────────────────────────────\n\nTooltipProvider.displayName = \"Tooltip.Provider\";\nTooltipRoot.displayName = \"Tooltip.Root\";\nTooltipTrigger.displayName = \"Tooltip.Trigger\";\nTooltipContent.displayName = \"Tooltip.Content\";\n\nexport const Tooltip = {\n Provider: TooltipProvider,\n Root: TooltipRoot,\n Trigger: TooltipTrigger,\n Content: TooltipContent,\n};\n",".root {\n --sb-context-width: var(--prime-sys-unit-4rem);\n --sb-panel-width: var(--prime-sys-unit-20rem);\n --sb-panel-visible-width: var(--sb-panel-width);\n --sb-nav-gap-open: var(--prime-sys-spacing-x2);\n --sb-nav-gap: 0;\n --sb-context-visible-width: 0;\n --sb-shell-width: calc(\n var(--sb-context-visible-width) +\n var(--sb-panel-visible-width) +\n var(--sb-nav-gap)\n );\n --sb-shell-gap: 0;\n --sb-page-inset: var(--prime-sys-spacing-x2);\n --sb-page-gap: var(--prime-sys-spacing-x4);\n --sb-transition-duration: var(--prime-sys-motion-duration-medium);\n --sb-transition-ease: var(--prime-sys-motion-easing-standard);\n --sb-control-height: var(--prime-sys-size-control-m-height);\n --sb-control-radius: var(--prime-sys-size-control-m-radius);\n --sb-control-gap: var(--prime-sys-size-control-m-gap);\n --sb-control-text: var(--prime-sys-size-control-m-text);\n --sb-control-support-text: var(--prime-sys-size-control-s-supportText);\n --sb-control-icon: var(--prime-sys-size-control-m-icon);\n --sb-control-padding-x: var(--prime-sys-size-control-m-buttonPaddingX);\n --sb-control-padding-y: var(--prime-sys-size-control-m-buttonPaddingY);\n --sb-identity-leading-size: var(--prime-sys-size-avatar-m-size);\n --sb-identity-title-text: var(--prime-sys-size-control-m-text);\n --sb-identity-subtitle-text: var(--prime-sys-size-control-s-supportText);\n /* Единый инсет для `.contextBar` и `.navPanel` (можно переопределить на `.root`). */\n --sb-chrome-inset: var(--prime-sys-spacing-x2);\n --sb-panel-padding-inline: var(--sb-chrome-inset);\n --sb-panel-padding-block: var(--sb-chrome-inset);\n\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n min-height: 0;\n width: var(--sb-shell-width);\n min-width: var(--sb-shell-width);\n height: 100%;\n overflow: visible;\n background: transparent;\n position: relative;\n will-change: width;\n transition:\n width var(--sb-transition-duration) var(--sb-transition-ease),\n min-width var(--sb-transition-duration) var(--sb-transition-ease),\n margin var(--sb-transition-duration) var(--sb-transition-ease);\n}\n\n.root[data-variant=\"double\"] {\n --sb-context-visible-width: var(--sb-context-width);\n --sb-nav-gap: var(--sb-nav-gap-open);\n}\n\n.root[data-size=\"s\"] {\n --sb-context-width: var(--prime-sys-unit-3p5rem);\n --sb-panel-width: var(--prime-sys-unit-18rem);\n --sb-control-height: var(--prime-sys-size-control-s-height);\n --sb-control-radius: var(--prime-sys-size-control-s-radius);\n --sb-control-gap: var(--prime-sys-size-control-s-gap);\n --sb-control-text: var(--prime-sys-size-control-s-text);\n --sb-control-support-text: var(--prime-sys-size-control-s-supportText);\n --sb-control-icon: var(--prime-sys-size-control-s-icon);\n --sb-control-padding-x: var(--prime-sys-size-control-s-buttonPaddingX);\n --sb-control-padding-y: var(--prime-sys-size-control-s-buttonPaddingY);\n --sb-identity-leading-size: var(--prime-sys-size-avatar-s-size);\n --sb-identity-title-text: var(--prime-sys-size-control-s-text);\n --sb-identity-subtitle-text: var(--prime-sys-size-control-s-supportText);\n}\n\n.root[data-size=\"l\"] {\n --sb-context-width: var(--prime-sys-unit-4p5rem);\n --sb-panel-width: var(--prime-sys-unit-22rem);\n --sb-control-height: var(--prime-sys-size-control-l-height);\n --sb-control-radius: var(--prime-sys-size-control-l-radius);\n --sb-control-gap: var(--prime-sys-size-control-l-gap);\n --sb-control-text: var(--prime-sys-size-control-l-text);\n --sb-control-support-text: var(--prime-sys-size-control-l-supportText);\n --sb-control-icon: var(--prime-sys-size-control-l-icon);\n --sb-control-padding-x: var(--prime-sys-size-control-l-buttonPaddingX);\n --sb-control-padding-y: var(--prime-sys-size-control-l-buttonPaddingY);\n --sb-identity-leading-size: var(--prime-sys-size-avatar-l-size);\n --sb-identity-title-text: var(--prime-sys-size-control-l-text);\n --sb-identity-subtitle-text: var(--prime-sys-size-control-m-supportText);\n}\n\n.root[data-size=\"xl\"] {\n --sb-context-width: var(--prime-sys-unit-4p5rem);\n --sb-panel-width: var(--prime-sys-unit-24rem);\n --sb-control-height: var(--prime-sys-size-control-xl-height);\n --sb-control-radius: var(--prime-sys-size-control-xl-radius);\n --sb-control-gap: var(--prime-sys-size-control-xl-gap);\n --sb-control-text: var(--prime-sys-size-control-xl-text);\n --sb-control-support-text: var(--prime-sys-size-control-xl-supportText);\n --sb-control-icon: var(--prime-sys-size-control-xl-icon);\n --sb-control-padding-x: var(--prime-sys-size-control-xl-buttonPaddingX);\n --sb-control-padding-y: var(--prime-sys-size-control-xl-buttonPaddingY);\n --sb-identity-leading-size: var(--prime-sys-size-avatar-xl-size);\n --sb-identity-title-text: var(--prime-sys-size-control-xl-text);\n --sb-identity-subtitle-text: var(--prime-sys-size-control-l-supportText);\n}\n\n/* Узкая панель (док-плейграунд и плотные макеты). */\n.root[data-panel-width=\"compact\"] {\n --sb-panel-width: var(--prime-sys-unit-16rem);\n}\n\n/* Сайдбар в слоте навигации рядом с контентом `PageShell`. */\n.root[data-sidebar-slot=\"page-nav\"] {\n flex: 0 0 auto;\n align-self: stretch;\n min-width: 0;\n min-height: auto;\n block-size: calc(100% - (var(--sb-page-inset) * 2));\n height: calc(100% - (var(--sb-page-inset) * 2));\n margin-block: var(--sb-page-inset);\n margin-inline-start: var(--sb-page-inset);\n margin-inline-end: var(--sb-shell-gap);\n --sb-shell-gap: var(--sb-page-gap);\n}\n\n.root[data-sidebar-slot=\"page-nav\"][data-open=\"false\"] {\n width: 0;\n min-width: 0;\n margin-inline-start: 0;\n margin-inline-end: 0;\n margin-block: 0;\n}\n\n.root[data-open=\"false\"] {\n --sb-nav-gap: 0;\n --sb-context-visible-width: 0;\n --sb-panel-visible-width: 0;\n --sb-shell-gap: 0;\n}\n\n:global(.playgroundShellInset:has(.playgroundShellNavOuter [data-sidebar-slot=\"page-nav\"])) {\n gap: 0;\n}\n\n:global(.playgroundShellNavOuter:has([data-sidebar-slot=\"page-nav\"])) {\n margin: 0;\n}\n\n/* Ряд: context rail + nav panel; `gap` — отступ между видимыми обёртками `.contextBar` и `.navPanel`. */\n.navArea {\n box-sizing: border-box;\n display: flex;\n flex-direction: row;\n flex: 0 0 auto;\n align-items: stretch;\n gap: var(--sb-nav-gap);\n width: var(--sb-shell-width);\n min-width: var(--sb-shell-width);\n min-height: 0;\n height: 100%;\n overflow: hidden;\n background: transparent;\n position: relative;\n will-change: width;\n transition:\n gap var(--sb-transition-duration) var(--sb-transition-ease),\n width var(--sb-transition-duration) var(--sb-transition-ease),\n min-width var(--sb-transition-duration) var(--sb-transition-ease);\n}\n\n.backdrop {\n position: absolute;\n inset: 0;\n border: 0;\n margin: 0;\n padding: 0;\n background: transparent;\n opacity: 0;\n pointer-events: none;\n}\n\n.floatingToggle {\n position: fixed;\n left: 0;\n top: 50%;\n right: auto;\n z-index: calc(var(--prime-sys-elevation-zIndex-modal) + 1);\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: calc(var(--sb-control-icon) + var(--prime-sys-spacing-x2));\n height: calc(var(--sb-control-icon) + var(--prime-sys-spacing-x2));\n border: var(--prime-sys-unit-1px) solid var(--prime-sys-color-border-subtle);\n border-radius: 0 var(--sb-control-radius) var(--sb-control-radius) 0;\n background: color-mix(in srgb, var(--prime-sys-color-surface-elevated) 72%, transparent);\n color: var(--prime-sys-color-content-primary);\n font-size: var(--sb-control-icon);\n box-shadow: var(--prime-sys-elevation-shadow-surface);\n cursor: pointer;\n opacity: 0.5;\n transform: translateY(-50%);\n transition:\n background-color var(--prime-sys-motion-fast) var(--sb-transition-ease),\n border-color var(--prime-sys-motion-fast) var(--sb-transition-ease),\n opacity var(--prime-sys-motion-fast) var(--sb-transition-ease);\n}\n\n.floatingToggle:hover {\n background: var(--prime-sys-color-action-neutralBackgroundHover);\n opacity: 1;\n}\n\n.floatingToggle:focus-visible {\n outline: var(--prime-sys-border-width-focusRing) solid var(--prime-sys-color-focus-ring);\n outline-offset: var(--prime-sys-unit-2px);\n opacity: 1;\n}\n\n.contextRail {\n box-sizing: border-box;\n display: flex;\n flex-shrink: 0;\n width: var(--sb-context-visible-width);\n min-width: 0;\n min-height: 0;\n opacity: 1;\n overflow: hidden;\n transition:\n width var(--sb-transition-duration) var(--sb-transition-ease),\n opacity var(--sb-transition-duration) var(--sb-transition-ease);\n}\n\n.root[data-variant=\"simple\"] .contextRail {\n opacity: 0;\n pointer-events: none;\n}\n\n.root[data-open=\"false\"] .contextRail {\n opacity: 0;\n pointer-events: none;\n}\n\n.contextBar {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n width: var(--sb-context-width);\n min-width: var(--sb-context-width);\n min-height: 0;\n height: 100%;\n border-radius: var(--prime-sys-shape-radius-l);\n background: color-mix(\n in srgb,\n var(--prime-sys-color-surface-default) 90%,\n var(--prime-sys-color-surface-raised)\n );\n color: var(--prime-sys-color-content-primary);\n border: var(--prime-sys-unit-1px) solid var(--prime-sys-color-border-subtle);\n box-shadow: none;\n padding: var(--sb-chrome-inset);\n}\n\n.contextBarHeader {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 0 0 auto;\n padding-block: var(--prime-sys-spacing-x1);\n}\n\n.contextBarBody {\n flex: 1 1 auto;\n min-height: 0;\n overflow-y: auto;\n overscroll-behavior: contain;\n}\n\n.contextBarFooter {\n display: flex;\n flex: 0 0 auto;\n align-items: center;\n justify-content: center;\n padding-block: var(--prime-sys-spacing-x1);\n margin-top: var(--prime-sys-spacing-x2);\n}\n\n.contextList {\n display: flex;\n flex-direction: column;\n gap: var(--prime-sys-spacing-x1);\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.contextListItem {\n display: flex;\n}\n\n.contextItemButton {\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n min-height: var(--sb-control-height);\n border: none;\n border-radius: var(--sb-control-radius);\n background: transparent;\n color: var(--prime-sys-color-content-secondary);\n cursor: pointer;\n transition: background-color var(--prime-sys-motion-fast) var(--sb-transition-ease);\n}\n\n.contextItemButton:hover {\n background: var(--prime-sys-color-action-neutralBackgroundHover);\n}\n\n.contextItemButton:focus-visible {\n outline: var(--prime-sys-border-width-focusRing) solid var(--prime-sys-color-focus-ring);\n outline-offset: var(--prime-sys-unit-2px);\n}\n\n.contextItemButton[data-active=\"true\"] {\n background: var(--prime-sys-color-action-neutralBackgroundHover);\n color: var(--prime-sys-color-content-primary);\n}\n\n.contextItemButton:disabled,\n.contextItemButton[aria-disabled=\"true\"] {\n opacity: 0.5;\n cursor: not-allowed;\n pointer-events: none;\n}\n\n.contextItemIcon {\n display: inline-flex;\n width: var(--sb-control-icon);\n height: var(--sb-control-icon);\n align-items: center;\n justify-content: center;\n}\n\n.navPanel {\n box-sizing: border-box;\n display: flex;\n flex: 0 0 auto;\n flex-direction: column;\n align-self: stretch;\n width: var(--sb-panel-width);\n min-width: var(--sb-panel-width);\n min-height: 0;\n gap: var(--prime-sys-spacing-x2);\n overflow: hidden;\n overflow-x: hidden;\n padding-inline: var(--sb-panel-padding-inline);\n padding-block: var(--sb-panel-padding-block);\n border: var(--prime-sys-unit-1px) solid var(--prime-sys-color-border-subtle);\n border-radius: var(--prime-sys-shape-radius-l);\n background: color-mix(\n in srgb,\n var(--prime-sys-color-surface-default) 90%,\n var(--prime-sys-color-surface-raised)\n );\n box-shadow: none;\n opacity: 1;\n transform: translateX(0);\n transition:\n border-color var(--sb-transition-duration) var(--sb-transition-ease),\n opacity var(--sb-transition-duration) var(--sb-transition-ease),\n transform var(--sb-transition-duration) var(--sb-transition-ease);\n}\n\n.root[data-open=\"false\"] .navPanel {\n transform: translateX(calc(-100% - var(--prime-sys-spacing-x2)));\n opacity: 0;\n pointer-events: none;\n}\n\n.panelSwitch {\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n min-width: 0;\n min-height: 0;\n overflow: hidden;\n}\n\n.header {\n flex: 0 0 auto;\n min-width: 0;\n padding: 0;\n}\n\n.headerRow {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: var(--prime-sys-spacing-x2);\n min-width: 0;\n}\n\n.headerMain {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n gap: var(--prime-sys-spacing-x1);\n min-width: 0;\n}\n\n.content {\n flex: 1 1 auto;\n min-height: 0;\n min-width: 0;\n overflow-x: hidden;\n overflow-y: auto;\n overscroll-behavior: contain;\n padding: 0;\n}\n\n.footer {\n flex: 0 0 auto;\n min-width: 0;\n margin-top: auto;\n padding: 0;\n}\n\n.footer[data-variant=\"inset\"] {\n padding: var(--prime-sys-spacing-x3);\n border: var(--prime-sys-unit-1px) solid var(--prime-sys-color-border-subtle);\n border-radius: var(--prime-sys-shape-radius-m);\n background: color-mix(\n in srgb,\n var(--prime-sys-color-surface-elevated) 92%,\n var(--prime-sys-color-surface-default)\n );\n}\n\n.group {\n display: flex;\n flex-direction: column;\n gap: var(--prime-sys-spacing-x1);\n min-width: 0;\n padding-block: 0;\n}\n\n/* Группа без подписи внутри `.content` — сохраняем вертикальный инсет как у строки с `GroupLabel`. */\n.content .group:not(:has(.groupLabel)) {\n padding-block: var(--prime-sys-spacing-x2);\n}\n\n.group + .group {\n margin-block-start: var(--prime-sys-spacing-x2);\n}\n\n.groupLabel {\n padding-inline: var(--prime-sys-spacing-x1);\n padding-block: var(--prime-sys-spacing-x2);\n font-size: var(--sb-control-support-text);\n font-weight: var(--prime-sys-typography-weight-medium);\n line-height: var(--prime-sys-typography-lineHeight-tight);\n color: var(--prime-sys-color-content-muted);\n}\n\n.menu {\n display: flex;\n flex-direction: column;\n gap: var(--prime-sys-spacing-x1);\n min-width: 0;\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n.menuItem {\n display: flex;\n flex-direction: row;\n align-items: stretch;\n gap: var(--prime-sys-spacing-x1);\n min-width: 0;\n}\n\n.menuButton {\n box-sizing: border-box;\n display: inline-flex;\n flex: 1 1 auto;\n flex-direction: row;\n align-items: center;\n justify-content: flex-start;\n gap: var(--sb-control-gap);\n min-width: 0;\n min-height: var(--sb-control-height);\n padding-inline: var(--sb-control-padding-x);\n padding-block: var(--sb-control-padding-y);\n border: none;\n border-radius: var(--sb-control-radius);\n background: transparent;\n appearance: none;\n color: var(--prime-sys-color-content-primary);\n font-size: var(--sb-control-text);\n font-weight: var(--prime-sys-typography-weight-medium);\n line-height: 1.2;\n text-align: left;\n text-decoration: none;\n cursor: pointer;\n transition: background-color var(--prime-sys-motion-fast) var(--sb-transition-ease);\n}\n\n.menuButton:hover {\n background: var(--prime-sys-color-action-neutralBackgroundHover);\n}\n\n.menuButton:focus-visible {\n outline: var(--prime-sys-border-width-focusRing) solid var(--prime-sys-color-focus-ring);\n outline-offset: var(--prime-sys-unit-2px);\n}\n\n.menuButton[data-active=\"true\"],\n.menuButton[aria-current=\"page\"] {\n background: var(--prime-sys-color-action-neutralBackgroundHover);\n}\n\n.menuButton[aria-disabled=\"true\"] {\n opacity: 0.5;\n cursor: not-allowed;\n pointer-events: none;\n}\n\n.menuIcon {\n display: inline-flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n width: var(--sb-control-icon);\n height: var(--sb-control-icon);\n color: var(--prime-sys-color-content-secondary);\n}\n\n.menuIcon > :global(svg) {\n width: 100%;\n height: 100%;\n}\n\n.menuButton[data-active=\"true\"] .menuIcon,\n.menuButton[aria-current=\"page\"] .menuIcon {\n color: var(--prime-sys-color-content-primary);\n}\n\n.menuLabel {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.menuTrailing {\n display: inline-flex;\n margin-inline-start: auto;\n color: var(--prime-sys-color-content-muted);\n}\n\n.identityButton {\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n width: 100%;\n min-height: calc(var(--sb-control-height) + var(--prime-sys-spacing-x2));\n gap: var(--sb-control-gap);\n padding: var(--sb-control-padding-y);\n border: none;\n border-radius: var(--sb-control-radius);\n background: transparent;\n color: var(--prime-sys-color-content-primary);\n text-align: left;\n cursor: pointer;\n transition: background-color var(--prime-sys-motion-fast) var(--sb-transition-ease);\n}\n\n.identityButton:hover {\n background: var(--prime-sys-color-action-neutralBackgroundHover);\n}\n\n.identityButton:focus-visible {\n outline: var(--prime-sys-border-width-focusRing) solid var(--prime-sys-color-focus-ring);\n outline-offset: var(--prime-sys-unit-2px);\n}\n\n.identityButton:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.identityButtonLeading {\n display: inline-flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n width: var(--sb-identity-leading-size);\n height: var(--sb-identity-leading-size);\n border-radius: var(--prime-sys-shape-radius-s);\n overflow: hidden;\n}\n\n.identityButtonMain {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n min-width: 0;\n gap: var(--prime-sys-unit-2px);\n}\n\n.identityButtonTitle {\n font-size: var(--sb-identity-title-text);\n font-weight: var(--prime-sys-typography-weight-medium);\n line-height: 1.2;\n color: var(--prime-sys-color-content-primary);\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.identityButtonSubtitle {\n font-size: var(--sb-identity-subtitle-text);\n line-height: 1.2;\n color: var(--prime-sys-color-content-secondary);\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.identityButtonTrailing {\n display: inline-flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n font-size: var(--sb-control-icon);\n line-height: 1;\n color: var(--prime-sys-color-content-secondary);\n}\n\n.identityButtonTrailing > :global(svg) {\n width: 1em;\n height: 1em;\n}\n\n.toggleButton {\n box-sizing: border-box;\n display: inline-flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n width: var(--sb-control-height);\n height: var(--sb-control-height);\n padding: 0;\n border: none;\n border-radius: var(--sb-control-radius);\n background: transparent;\n color: var(--prime-sys-color-content-secondary);\n cursor: pointer;\n font-size: var(--sb-control-icon);\n transition: background-color var(--prime-sys-motion-fast) var(--sb-transition-ease);\n}\n\n.toggleButton:hover {\n background: var(--prime-sys-color-action-neutralBackgroundHover);\n}\n\n.toggleButton:focus-visible {\n outline: var(--prime-sys-border-width-focusRing) solid var(--prime-sys-color-focus-ring);\n outline-offset: var(--prime-sys-unit-2px);\n}\n\n.menuAction {\n box-sizing: border-box;\n display: inline-flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n width: var(--sb-control-height);\n height: var(--sb-control-height);\n padding: 0;\n border: none;\n border-radius: var(--sb-control-radius);\n background: transparent;\n color: var(--prime-sys-color-content-secondary);\n cursor: pointer;\n transition: background-color var(--prime-sys-motion-fast) var(--sb-transition-ease);\n}\n\n.menuAction:hover {\n background: var(--prime-sys-color-action-neutralBackgroundHover);\n}\n\n.menuAction:focus-visible {\n outline: var(--prime-sys-border-width-focusRing) solid var(--prime-sys-color-focus-ring);\n outline-offset: var(--prime-sys-unit-2px);\n}\n\n.text {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n/* --- Док-навигация внутри `NavPanel` (дерево категорий, стек секций) --- */\n\n.navPanelBody {\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n min-height: 0;\n overflow-y: auto;\n overscroll-behavior: contain;\n gap: var(--prime-sys-spacing-x4);\n padding: 0;\n}\n\n/* Дерево растягивается, чтобы прижать последующие секции (System и т.п.) ко дну. */\n.navDocTree {\n display: flex;\n flex-direction: column;\n flex: 1 0 auto;\n gap: var(--prime-sys-spacing-x4);\n}\n\n.navPanelHeading {\n margin: 0;\n padding-block: var(--prime-sys-spacing-x2);\n font-size: var(--sb-control-text);\n font-weight: var(--prime-sys-typography-weight-medium);\n line-height: var(--prime-sys-typography-lineHeight-tight);\n color: var(--prime-sys-color-content-primary);\n}\n\n.navCategory {\n display: flex;\n flex-direction: column;\n gap: var(--prime-sys-spacing-x1);\n min-width: 0;\n}\n\n.navCategoryTrigger {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: var(--prime-sys-spacing-x2);\n box-sizing: border-box;\n width: 100%;\n padding-block: var(--prime-sys-spacing-x2);\n padding-inline: var(--prime-sys-spacing-x1);\n border: none;\n border-radius: var(--sb-control-radius);\n margin: 0;\n background: transparent;\n color: var(--prime-sys-color-content-muted);\n font: inherit;\n font-size: var(--sb-control-support-text);\n font-weight: var(--prime-sys-typography-weight-medium);\n line-height: var(--prime-sys-typography-lineHeight-tight);\n text-align: left;\n text-decoration: none;\n cursor: pointer;\n appearance: none;\n -webkit-appearance: none;\n}\n\n.navCategoryTrigger:focus-visible {\n outline: var(--prime-sys-border-width-focusRing) solid var(--prime-sys-color-focus-ring);\n outline-offset: 2px;\n}\n\n.navCategoryTrigger svg {\n flex-shrink: 0;\n color: var(--prime-sys-color-content-muted);\n transition: transform var(--prime-sys-motion-duration-medium)\n var(--prime-sys-motion-easing-standard);\n}\n\n.navCategoryTrigger[data-expanded=\"true\"] svg {\n transform: rotate(90deg);\n}\n\n.navCategoryLabel {\n flex: 1 1 auto;\n min-width: 0;\n}\n\n.navCategoryCount {\n flex-shrink: 0;\n color: var(--prime-sys-color-content-muted);\n font-size: var(--sb-control-support-text);\n font-weight: var(--prime-sys-typography-weight-medium);\n}\n\n.navCategoryPanel {\n display: flex;\n flex-direction: column;\n gap: var(--prime-sys-spacing-x1);\n min-width: 0;\n}\n\n@media (max-width: 64rem) {\n .root[data-responsive=\"true\"] {\n position: relative;\n width: 0;\n min-width: 0;\n block-size: 0;\n height: 0;\n margin-inline-start: 0;\n margin-inline-end: 0;\n margin-block: 0;\n }\n\n .root[data-responsive=\"true\"] .navArea {\n position: fixed;\n inset: 0;\n z-index: var(--prime-sys-elevation-zIndex-modal);\n width: 100vw;\n min-width: 100vw;\n overflow: visible;\n pointer-events: none;\n }\n\n .root[data-responsive=\"true\"][data-open=\"true\"] .navArea {\n pointer-events: auto;\n }\n\n .root[data-responsive=\"true\"] .backdrop {\n display: block;\n background: rgb(0 0 0 / 58%);\n opacity: 0;\n transition: opacity var(--sb-transition-duration) var(--sb-transition-ease);\n }\n\n .root[data-responsive=\"true\"][data-open=\"true\"] .backdrop {\n opacity: 1;\n pointer-events: auto;\n }\n\n .root[data-responsive=\"true\"] .contextRail {\n display: none;\n }\n\n .root[data-responsive=\"true\"] .navPanel {\n position: relative;\n z-index: 1;\n width: 90vw;\n min-width: 90vw;\n max-width: 90vw;\n height: 100dvh;\n border-radius: 0 var(--prime-sys-shape-radius-l) var(--prime-sys-shape-radius-l) 0;\n transform: translateX(calc(-100% - var(--prime-sys-spacing-x2)));\n opacity: 0;\n pointer-events: none;\n }\n\n .root[data-responsive=\"true\"][data-open=\"true\"] .navPanel {\n transform: translateX(0);\n opacity: 1;\n pointer-events: auto;\n }\n\n .root[data-responsive=\"true\"][data-open=\"false\"] .navPanel {\n transform: translateX(calc(-100% - var(--prime-sys-spacing-x2)));\n opacity: 0;\n pointer-events: none;\n }\n\n .root[data-responsive=\"true\"] .floatingToggle {\n top: calc(var(--prime-sys-spacing-x3) + var(--sb-control-height) / 2);\n transform: translateY(0);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .contextRail,\n .navArea,\n .navPanel,\n .root[data-responsive=\"true\"] .backdrop,\n .menuButton,\n .menuAction,\n .contextItemButton,\n .navCategoryTrigger svg {\n transition: none;\n }\n}\n","import { ChevronsUpDown, PanelLeftClose, PanelLeftOpen } from \"lucide-react\";\nimport * as React from \"react\";\nimport { NavLink } from \"react-router-dom\";\n\nimport { Tooltip } from \"@/components/tooltip/Tooltip\";\nimport { useControllableState } from \"@/hooks/useControllableState\";\nimport { createComponentContext } from \"@/internal/context\";\nimport { cx } from \"@/internal/cx\";\nimport { toDataAttributes } from \"@/internal/data-attributes\";\nimport { Slot } from \"@/internal/slot\";\nimport type { SidebarSize } from \"@/internal/states\";\n\nimport styles from \"./Sidebar.module.css\";\n\nexport type { SidebarSize };\n\nexport type SidebarVariant = \"simple\" | \"double\";\nexport type SidebarResponsive = boolean;\n\nexport type SidebarContextItem = {\n id: string;\n label: string;\n icon: React.ReactNode;\n tooltip?: React.ReactNode;\n ariaLabel?: string;\n disabled?: boolean;\n};\n\ntype SidebarContextValue = {\n size: SidebarSize;\n variant: SidebarVariant;\n setVariant: (next: SidebarVariant) => void;\n activeSection: string | null;\n setActiveSection: (id: string) => void;\n open: boolean;\n setOpen: (next: boolean) => void;\n toggleOpen: () => void;\n};\n\nconst [SidebarProvider, useSidebarContext] = createComponentContext<SidebarContextValue>(\"Sidebar\");\n\nexport { useSidebarContext };\n\n/**\n * Собирает `to` для пунктов **панели** при `Sidebar.Root variant=\"double\"`: префикс =\n * `activeSection` из контекста (выбранный пункт `ContextBar`). Внутри `PanelSwitch` для\n * каждого раздела рендерите свой `Menu` с `MenuRouterLink`, передавая либо полный `to`,\n * либо короткий путь сюда — например `useSidebarNavTo(\"deals\")` → `/crm/deals` при активном CRM.\n *\n * При `variant=\"simple\"` или пока раздел не выбран — путь от корня: `/${pathWithinSection}`.\n */\nexport function useSidebarNavTo(pathWithinSection: string): string {\n const { variant, activeSection } = useSidebarContext();\n const inner = pathWithinSection.replace(/^\\/+|\\/+$/g, \"\");\n if (variant === \"double\" && activeSection !== null && activeSection !== \"\") {\n if (inner === \"\") {\n return `/${activeSection}`;\n }\n return `/${activeSection}/${inner}`;\n }\n if (inner === \"\") {\n return \"/\";\n }\n return `/${inner}`;\n}\n\nexport type SidebarRootProps = Omit<React.ComponentPropsWithoutRef<\"aside\">, \"children\"> & {\n children: React.ReactNode;\n size?: SidebarSize;\n variant?: SidebarVariant;\n defaultVariant?: SidebarVariant;\n onVariantChange?: (variant: SidebarVariant) => void;\n activeSection?: string;\n defaultActiveSection?: string;\n onActiveSectionChange?: (section: string) => void;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n responsive?: SidebarResponsive;\n /** Узкая ширина панели навигации (`--sb-panel-width`). */\n panelWidth?: \"compact\";\n /** Размещение в колонке навигации рядом с контентом (flex-слот). */\n sidebarSlot?: \"page-nav\";\n};\n\nfunction SidebarRoot({\n children,\n className,\n size = \"m\",\n variant: variantProp,\n defaultVariant = \"double\",\n onVariantChange,\n activeSection: activeSectionProp,\n defaultActiveSection,\n onActiveSectionChange,\n open: openProp,\n defaultOpen = true,\n onOpenChange,\n responsive = true,\n panelWidth,\n sidebarSlot,\n \"aria-label\": ariaLabel = \"Sidebar\",\n ...rest\n}: SidebarRootProps) {\n const initialResponsiveViewport =\n responsive === true &&\n typeof window !== \"undefined\" &&\n typeof window.matchMedia === \"function\" &&\n window.matchMedia(\"(max-width: 64rem)\").matches;\n\n const [variant, setVariantState] = useControllableState<SidebarVariant>({\n value: variantProp,\n defaultValue: defaultVariant,\n onChange: onVariantChange,\n });\n\n const [activeSection, setActiveSection] = useControllableState<string | null>({\n value: activeSectionProp,\n defaultValue: defaultActiveSection ?? null,\n onChange: (nextSection) => {\n if (nextSection !== null) {\n onActiveSectionChange?.(nextSection);\n }\n },\n });\n\n const [open, setOpenState] = useControllableState<boolean>({\n value: openProp,\n defaultValue: initialResponsiveViewport ? false : defaultOpen,\n onChange: onOpenChange,\n });\n\n const [isResponsiveViewport, setIsResponsiveViewport] = React.useState(initialResponsiveViewport);\n const previousResponsiveViewportRef = React.useRef(initialResponsiveViewport);\n\n React.useEffect(() => {\n if (\n responsive !== true ||\n typeof window === \"undefined\" ||\n typeof window.matchMedia !== \"function\"\n ) {\n setIsResponsiveViewport(false);\n previousResponsiveViewportRef.current = false;\n return;\n }\n\n const query = window.matchMedia(\"(max-width: 64rem)\");\n const update = () => setIsResponsiveViewport(query.matches);\n update();\n\n if (typeof query.addEventListener === \"function\") {\n query.addEventListener(\"change\", update);\n return () => query.removeEventListener(\"change\", update);\n }\n\n query.addListener(update);\n return () => query.removeListener(update);\n }, [responsive]);\n\n React.useEffect(() => {\n if (responsive !== true) return;\n const prev = previousResponsiveViewportRef.current;\n if (prev === isResponsiveViewport) return;\n previousResponsiveViewportRef.current = isResponsiveViewport;\n setOpenState(!isResponsiveViewport);\n }, [isResponsiveViewport, responsive, setOpenState]);\n\n const setVariant = React.useCallback(\n (nextVariant: SidebarVariant) => {\n setVariantState(nextVariant === \"double\" ? \"double\" : \"simple\");\n },\n [setVariantState],\n );\n\n const setOpen = React.useCallback(\n (next: boolean) => {\n setOpenState(next);\n },\n [setOpenState],\n );\n\n const toggleOpen = React.useCallback(() => {\n setOpenState((prev) => !prev);\n }, [setOpenState]);\n\n const shouldShowInlineOverlay = responsive === true && isResponsiveViewport && open;\n const shouldShowFloatingToggle = open === false;\n\n const contextValue = React.useMemo(\n () => ({\n size,\n variant,\n setVariant,\n activeSection,\n setActiveSection: (id: string) => setActiveSection(id),\n open,\n setOpen,\n toggleOpen,\n }),\n [activeSection, open, setActiveSection, setOpen, setVariant, size, toggleOpen, variant],\n );\n\n return (\n <SidebarProvider value={contextValue}>\n <aside\n {...rest}\n className={cx(styles.root, className)}\n aria-label={ariaLabel}\n {...toDataAttributes({\n size,\n variant,\n open,\n responsive: responsive ? true : undefined,\n \"panel-width\": panelWidth === \"compact\" ? \"compact\" : undefined,\n \"sidebar-slot\": sidebarSlot,\n })}\n data-collapsed={variant === \"simple\" ? \"true\" : undefined}\n >\n <div className={styles.navArea}>\n <button\n type=\"button\"\n className={styles.backdrop}\n aria-label=\"Закрыть сайдбар\"\n aria-hidden={shouldShowInlineOverlay ? undefined : true}\n tabIndex={shouldShowInlineOverlay ? 0 : -1}\n onClick={() => setOpen(false)}\n />\n {children}\n </div>\n {shouldShowFloatingToggle ? (\n <button\n type=\"button\"\n className={styles.floatingToggle}\n onClick={toggleOpen}\n aria-label={open ? \"Скрыть сайдбар\" : \"Открыть сайдбар\"}\n >\n {open ? (\n <PanelLeftClose size=\"1em\" strokeWidth={2} />\n ) : (\n <PanelLeftOpen size=\"1em\" strokeWidth={2} />\n )}\n </button>\n ) : null}\n </aside>\n </SidebarProvider>\n );\n}\n\nSidebarRoot.displayName = \"SidebarRoot\";\n\nexport type SidebarContextBarProps = React.ComponentPropsWithoutRef<\"nav\"> & {\n items?: SidebarContextItem[];\n activeSection?: string | null;\n onSelectSection?: (sectionId: string) => void;\n logo?: React.ReactNode;\n footer?: React.ReactNode;\n};\n\nfunction SidebarContextBar({\n className,\n items,\n activeSection: activeSectionProp,\n onSelectSection,\n logo,\n footer,\n children,\n ...rest\n}: SidebarContextBarProps) {\n const { activeSection, setActiveSection } = useSidebarContext();\n const resolvedActiveSection = activeSectionProp ?? activeSection;\n const selectSection = onSelectSection ?? setActiveSection;\n\n React.useEffect(() => {\n if (items === undefined || items.length === 0) return;\n if (resolvedActiveSection !== null) return;\n selectSection(items[0].id);\n }, [items, resolvedActiveSection, selectSection]);\n\n return (\n <div className={styles.contextRail}>\n <nav {...rest} className={cx(styles.contextBar, className)} aria-label=\"Context navigation\">\n {logo === undefined ? null : <div className={styles.contextBarHeader}>{logo}</div>}\n\n {items === undefined ? (\n children\n ) : (\n <div className={styles.contextBarBody}>\n <ul className={styles.contextList}>\n {items.map((item) => {\n const button = (\n <SidebarContextItemButton\n aria-label={item.ariaLabel ?? item.label}\n disabled={item.disabled}\n active={resolvedActiveSection === item.id}\n onClick={() => selectSection(item.id)}\n >\n <span className={styles.contextItemIcon} aria-hidden=\"true\">\n {item.icon}\n </span>\n </SidebarContextItemButton>\n );\n\n return (\n <li key={item.id} className={styles.contextListItem}>\n <Tooltip.Root>\n <Tooltip.Trigger>{button}</Tooltip.Trigger>\n <Tooltip.Content side=\"right\">{item.tooltip ?? item.label}</Tooltip.Content>\n </Tooltip.Root>\n </li>\n );\n })}\n </ul>\n </div>\n )}\n\n {footer === undefined ? null : <div className={styles.contextBarFooter}>{footer}</div>}\n </nav>\n </div>\n );\n}\n\nSidebarContextBar.displayName = \"SidebarContextBar\";\n\nexport type SidebarContextBarHeaderProps = React.ComponentPropsWithoutRef<\"div\">;\n\nfunction SidebarContextBarHeader({ className, ...rest }: SidebarContextBarHeaderProps) {\n return <div {...rest} className={cx(styles.contextBarHeader, className)} />;\n}\n\nSidebarContextBarHeader.displayName = \"SidebarContextBarHeader\";\n\nexport type SidebarContextBarBodyProps = React.ComponentPropsWithoutRef<\"div\">;\n\nfunction SidebarContextBarBody({ className, ...rest }: SidebarContextBarBodyProps) {\n return <div {...rest} className={cx(styles.contextBarBody, className)} />;\n}\n\nSidebarContextBarBody.displayName = \"SidebarContextBarBody\";\n\nexport type SidebarContextBarFooterProps = React.ComponentPropsWithoutRef<\"div\">;\n\nfunction SidebarContextBarFooter({ className, ...rest }: SidebarContextBarFooterProps) {\n return <div {...rest} className={cx(styles.contextBarFooter, className)} />;\n}\n\nSidebarContextBarFooter.displayName = \"SidebarContextBarFooter\";\n\nexport type SidebarContextItemButtonProps = React.ComponentPropsWithoutRef<\"button\"> & {\n active?: boolean;\n asChild?: boolean;\n};\n\nconst SidebarContextItemButton = React.forwardRef<HTMLButtonElement, SidebarContextItemButtonProps>(\n ({ className, type = \"button\", active, asChild = false, disabled, onClick, ...rest }, ref) => {\n const cls = cx(styles.contextItemButton, className);\n const dataActive = active ? \"true\" : undefined;\n\n if (asChild) {\n return (\n <Slot\n {...rest}\n ref={ref as React.Ref<HTMLElement>}\n className={cls}\n data-active={dataActive}\n aria-disabled={disabled || undefined}\n onClick={\n disabled\n ? (e: React.MouseEvent) => {\n e.preventDefault();\n }\n : onClick\n }\n />\n );\n }\n\n return (\n <button\n {...rest}\n ref={ref}\n type={type}\n disabled={disabled}\n className={cls}\n data-active={dataActive}\n onClick={onClick}\n />\n );\n },\n);\n\nSidebarContextItemButton.displayName = \"SidebarContextItemButton\";\n\nexport type SidebarNavPanelProps = React.ComponentPropsWithoutRef<\"nav\">;\n\nfunction SidebarNavPanel({ className, ...rest }: SidebarNavPanelProps) {\n return <nav {...rest} className={cx(styles.navPanel, className)} />;\n}\n\nSidebarNavPanel.displayName = \"SidebarNavPanel\";\n\nexport type SidebarNavPanelBodyProps = React.ComponentPropsWithoutRef<\"div\">;\n\nfunction SidebarNavPanelBody({ className, ...rest }: SidebarNavPanelBodyProps) {\n return <div {...rest} className={cx(styles.navPanelBody, className)} />;\n}\n\nSidebarNavPanelBody.displayName = \"SidebarNavPanelBody\";\n\nexport type SidebarNavDocTreeProps = React.ComponentPropsWithoutRef<\"div\">;\n\nfunction SidebarNavDocTree({ className, ...rest }: SidebarNavDocTreeProps) {\n return <div {...rest} className={cx(styles.navDocTree, className)} />;\n}\n\nSidebarNavDocTree.displayName = \"SidebarNavDocTree\";\n\nexport type SidebarNavPanelHeadingProps = React.ComponentPropsWithoutRef<\"h2\">;\n\nfunction SidebarNavPanelHeading({ className, ...rest }: SidebarNavPanelHeadingProps) {\n return <h2 {...rest} className={cx(styles.navPanelHeading, className)} />;\n}\n\nSidebarNavPanelHeading.displayName = \"SidebarNavPanelHeading\";\n\nexport type SidebarNavCategoryProps = React.ComponentPropsWithoutRef<\"div\">;\n\nfunction SidebarNavCategory({ className, ...rest }: SidebarNavCategoryProps) {\n return <div {...rest} className={cx(styles.navCategory, className)} />;\n}\n\nSidebarNavCategory.displayName = \"SidebarNavCategory\";\n\nexport type SidebarNavCategoryTriggerProps = React.ComponentPropsWithoutRef<\"button\">;\n\nconst SidebarNavCategoryTrigger = React.forwardRef<\n HTMLButtonElement,\n SidebarNavCategoryTriggerProps\n>(({ className, type = \"button\", ...rest }, ref) => (\n <button ref={ref} type={type} className={cx(styles.navCategoryTrigger, className)} {...rest} />\n));\nSidebarNavCategoryTrigger.displayName = \"SidebarNavCategoryTrigger\";\n\nexport type SidebarNavCategoryLabelProps = React.ComponentPropsWithoutRef<\"span\">;\n\nfunction SidebarNavCategoryLabel({ className, ...rest }: SidebarNavCategoryLabelProps) {\n return <span {...rest} className={cx(styles.navCategoryLabel, className)} />;\n}\n\nSidebarNavCategoryLabel.displayName = \"SidebarNavCategoryLabel\";\n\nexport type SidebarNavCategoryCountProps = React.ComponentPropsWithoutRef<\"span\">;\n\nfunction SidebarNavCategoryCount({ className, ...rest }: SidebarNavCategoryCountProps) {\n return <span {...rest} className={cx(styles.navCategoryCount, className)} />;\n}\n\nSidebarNavCategoryCount.displayName = \"SidebarNavCategoryCount\";\n\nexport type SidebarNavCategoryPanelProps = React.ComponentPropsWithoutRef<\"div\">;\n\nfunction SidebarNavCategoryPanel({ className, ...rest }: SidebarNavCategoryPanelProps) {\n return <div {...rest} className={cx(styles.navCategoryPanel, className)} />;\n}\n\nSidebarNavCategoryPanel.displayName = \"SidebarNavCategoryPanel\";\n\nexport type SidebarPanelSwitchProps = React.ComponentPropsWithoutRef<\"div\"> & {\n sections?: Record<string, React.ReactNode>;\n renderSection?: (activeSection: string | null) => React.ReactNode;\n fallback?: React.ReactNode;\n};\n\nfunction SidebarPanelSwitch({\n className,\n sections,\n renderSection,\n fallback = null,\n ...rest\n}: SidebarPanelSwitchProps) {\n const { activeSection } = useSidebarContext();\n\n let content: React.ReactNode = fallback;\n if (renderSection !== undefined) {\n content = renderSection(activeSection);\n } else if (sections !== undefined) {\n const keys = Object.keys(sections);\n const sectionKey =\n activeSection !== null && sections[activeSection] !== undefined ? activeSection : keys[0];\n content = sectionKey === undefined ? fallback : sections[sectionKey];\n }\n\n return (\n <div {...rest} className={cx(styles.panelSwitch, className)}>\n {content}\n </div>\n );\n}\n\nSidebarPanelSwitch.displayName = \"SidebarPanelSwitch\";\n\nexport type SidebarHeaderProps = React.ComponentPropsWithoutRef<\"div\">;\n\nfunction SidebarHeader({ className, ...rest }: SidebarHeaderProps) {\n return <div {...rest} className={cx(styles.header, className)} />;\n}\n\nSidebarHeader.displayName = \"SidebarHeader\";\n\nexport type SidebarHeaderRowProps = React.ComponentPropsWithoutRef<\"div\">;\n\nfunction SidebarHeaderRow({ className, ...rest }: SidebarHeaderRowProps) {\n return <div {...rest} className={cx(styles.headerRow, className)} />;\n}\n\nSidebarHeaderRow.displayName = \"SidebarHeaderRow\";\n\nexport type SidebarHeaderMainProps = React.ComponentPropsWithoutRef<\"div\">;\n\nfunction SidebarHeaderMain({ className, ...rest }: SidebarHeaderMainProps) {\n return <div {...rest} className={cx(styles.headerMain, className)} />;\n}\n\nSidebarHeaderMain.displayName = \"SidebarHeaderMain\";\n\nexport type SidebarContentProps = React.ComponentPropsWithoutRef<\"div\">;\n\nfunction SidebarContent({ className, ...rest }: SidebarContentProps) {\n return <div {...rest} className={cx(styles.content, className)} />;\n}\n\nSidebarContent.displayName = \"SidebarContent\";\n\nexport type SidebarFooterProps = React.ComponentPropsWithoutRef<\"div\"> & {\n variant?: \"plain\" | \"inset\";\n};\n\nfunction SidebarFooter({ className, variant = \"plain\", ...rest }: SidebarFooterProps) {\n return (\n <div\n {...rest}\n className={cx(styles.footer, className)}\n data-variant={variant === \"inset\" ? \"inset\" : undefined}\n />\n );\n}\n\nSidebarFooter.displayName = \"SidebarFooter\";\n\nexport type SidebarIdentityButtonProps = Omit<\n React.ComponentPropsWithoutRef<\"button\">,\n \"children\"\n> & {\n leading?: React.ReactNode;\n title: React.ReactNode;\n subtitle?: React.ReactNode;\n trailing?: React.ReactNode;\n};\n\nconst SidebarIdentityButton = React.forwardRef<HTMLButtonElement, SidebarIdentityButtonProps>(\n (\n { className, type = \"button\", leading, title, subtitle, trailing, disabled, onClick, ...rest },\n ref,\n ) => {\n return (\n <button\n {...rest}\n ref={ref}\n type={type}\n disabled={disabled}\n className={cx(styles.identityButton, className)}\n onClick={onClick}\n >\n {leading === undefined ? null : (\n <span className={styles.identityButtonLeading} aria-hidden=\"true\">\n {leading}\n </span>\n )}\n <span className={styles.identityButtonMain}>\n <span className={styles.identityButtonTitle}>{title}</span>\n {subtitle === undefined ? null : (\n <span className={styles.identityButtonSubtitle}>{subtitle}</span>\n )}\n </span>\n <span className={styles.identityButtonTrailing} aria-hidden=\"true\">\n {trailing ?? <ChevronsUpDown size=\"1em\" strokeWidth={2} />}\n </span>\n </button>\n );\n },\n);\n\nSidebarIdentityButton.displayName = \"SidebarIdentityButton\";\n\nexport type SidebarToggleButtonProps = React.ComponentPropsWithoutRef<\"button\"> & {\n openLabel?: string;\n closedLabel?: string;\n};\n\nconst SidebarToggleButton = React.forwardRef<HTMLButtonElement, SidebarToggleButtonProps>(\n (\n {\n className,\n type = \"button\",\n openLabel = \"Скрыть сайдбар\",\n closedLabel = \"Открыть сайдбар\",\n onClick,\n ...rest\n },\n ref,\n ) => {\n const { open, toggleOpen } = useSidebarContext();\n return (\n <button\n {...rest}\n ref={ref}\n type={type}\n className={cx(styles.toggleButton, className)}\n aria-label={open ? openLabel : closedLabel}\n onClick={(event) => {\n onClick?.(event);\n if (!event.defaultPrevented) {\n toggleOpen();\n }\n }}\n >\n {open ? (\n <PanelLeftClose size=\"1em\" strokeWidth={2} />\n ) : (\n <PanelLeftOpen size=\"1em\" strokeWidth={2} />\n )}\n </button>\n );\n },\n);\n\nSidebarToggleButton.displayName = \"SidebarToggleButton\";\n\nexport type SidebarGroupProps = React.ComponentPropsWithoutRef<\"div\">;\n\nfunction SidebarGroup({ className, ...rest }: SidebarGroupProps) {\n return <div {...rest} className={cx(styles.group, className)} />;\n}\n\nSidebarGroup.displayName = \"SidebarGroup\";\n\nexport type SidebarGroupLabelProps = React.ComponentPropsWithoutRef<\"div\">;\n\nfunction SidebarGroupLabel({ className, ...rest }: SidebarGroupLabelProps) {\n return <div {...rest} className={cx(styles.groupLabel, className)} />;\n}\n\nSidebarGroupLabel.displayName = \"SidebarGroupLabel\";\n\nexport type SidebarMenuProps = React.ComponentPropsWithoutRef<\"ul\">;\n\nfunction SidebarMenu({ className, ...rest }: SidebarMenuProps) {\n return <ul {...rest} className={cx(styles.menu, className)} />;\n}\n\nSidebarMenu.displayName = \"SidebarMenu\";\n\nexport type SidebarMenuItemProps = React.ComponentPropsWithoutRef<\"li\">;\n\nfunction SidebarMenuItem({ className, ...rest }: SidebarMenuItemProps) {\n return <li {...rest} className={cx(styles.menuItem, className)} />;\n}\n\nSidebarMenuItem.displayName = \"SidebarMenuItem\";\n\nexport type SidebarMenuButtonProps = React.ComponentPropsWithoutRef<\"button\"> & {\n active?: boolean;\n asChild?: boolean;\n};\n\nconst SidebarMenuButton = React.forwardRef<HTMLButtonElement, SidebarMenuButtonProps>(\n ({ className, type = \"button\", active, asChild = false, disabled, onClick, ...rest }, ref) => {\n const cls = cx(styles.menuButton, className);\n const dataActive = active ? \"true\" : undefined;\n\n if (asChild) {\n return (\n <Slot\n {...rest}\n ref={ref as React.Ref<HTMLElement>}\n className={cls}\n data-active={dataActive}\n aria-disabled={disabled || undefined}\n onClick={\n disabled\n ? (e: React.MouseEvent) => {\n e.preventDefault();\n }\n : onClick\n }\n />\n );\n }\n\n return (\n <button\n {...rest}\n ref={ref}\n type={type}\n disabled={disabled}\n className={cls}\n data-active={dataActive}\n onClick={onClick}\n />\n );\n },\n);\n\nSidebarMenuButton.displayName = \"SidebarMenuButton\";\n\nexport type SidebarMenuLinkProps = React.ComponentPropsWithoutRef<\"a\"> & {\n active?: boolean;\n};\n\nconst SidebarMenuLink = React.forwardRef<HTMLAnchorElement, SidebarMenuLinkProps>(\n ({ active, className, ...rest }, ref) => (\n <SidebarMenuButton asChild active={active} className={className}>\n <a {...rest} ref={ref} />\n </SidebarMenuButton>\n ),\n);\n\nSidebarMenuLink.displayName = \"SidebarMenuLink\";\n\nexport type SidebarMenuRouterLinkProps = React.ComponentPropsWithoutRef<typeof NavLink>;\n\n/**\n * Пункт меню на базе React Router `NavLink` со стилями `menuButton` (активное состояние по URL).\n *\n * **Двухъярусная навигация (`ContextBar` + панель):** верхний ярус переключает `activeSection`\n * и контент `PanelSwitch`; в каждой ветке перечисляйте ссылки через `MenuRouterLink`. Удобно\n * комбинировать с {@link useSidebarNavTo}, чтобы не дублировать префикс раздела в каждом `to`.\n */\nconst SidebarMenuRouterLink = React.forwardRef<HTMLAnchorElement, SidebarMenuRouterLinkProps>(\n ({ className, ...rest }, ref) => (\n <NavLink\n ref={ref}\n {...rest}\n className={(navState) =>\n cx(styles.menuButton, typeof className === \"function\" ? className(navState) : className)\n }\n />\n ),\n);\nSidebarMenuRouterLink.displayName = \"SidebarMenuRouterLink\";\n\nexport type SidebarMenuActionProps = React.ComponentPropsWithoutRef<\"button\">;\n\nconst SidebarMenuAction = React.forwardRef<HTMLButtonElement, SidebarMenuActionProps>(\n ({ className, type = \"button\", ...rest }, ref) => {\n return <button {...rest} ref={ref} type={type} className={cx(styles.menuAction, className)} />;\n },\n);\n\nSidebarMenuAction.displayName = \"SidebarMenuAction\";\n\nexport type SidebarMenuIconProps = React.ComponentPropsWithoutRef<\"span\">;\n\nfunction SidebarMenuIcon({ className, ...rest }: SidebarMenuIconProps) {\n return <span {...rest} className={cx(styles.menuIcon, className)} aria-hidden=\"true\" />;\n}\n\nSidebarMenuIcon.displayName = \"SidebarMenuIcon\";\n\nexport type SidebarMenuLabelProps = React.ComponentPropsWithoutRef<\"span\">;\n\nfunction SidebarMenuLabel({ className, ...rest }: SidebarMenuLabelProps) {\n return <span {...rest} className={cx(styles.menuLabel, className)} />;\n}\n\nSidebarMenuLabel.displayName = \"SidebarMenuLabel\";\n\nexport type SidebarMenuTrailingProps = React.ComponentPropsWithoutRef<\"span\">;\n\nfunction SidebarMenuTrailing({ className, ...rest }: SidebarMenuTrailingProps) {\n return <span {...rest} className={cx(styles.menuTrailing, className)} aria-hidden=\"true\" />;\n}\n\nSidebarMenuTrailing.displayName = \"SidebarMenuTrailing\";\n\nexport type SidebarTextProps = React.ComponentPropsWithoutRef<\"span\">;\n\nfunction SidebarText({ className, ...rest }: SidebarTextProps) {\n return <span {...rest} className={cx(styles.text, className)} />;\n}\n\nSidebarText.displayName = \"SidebarText\";\n\nexport const Sidebar = {\n Root: SidebarRoot,\n ContextBar: SidebarContextBar,\n ContextBarHeader: SidebarContextBarHeader,\n ContextBarBody: SidebarContextBarBody,\n ContextBarFooter: SidebarContextBarFooter,\n ContextItemButton: SidebarContextItemButton,\n NavPanel: SidebarNavPanel,\n NavPanelBody: SidebarNavPanelBody,\n NavDocTree: SidebarNavDocTree,\n NavPanelHeading: SidebarNavPanelHeading,\n NavCategory: SidebarNavCategory,\n NavCategoryTrigger: SidebarNavCategoryTrigger,\n NavCategoryLabel: SidebarNavCategoryLabel,\n NavCategoryCount: SidebarNavCategoryCount,\n NavCategoryPanel: SidebarNavCategoryPanel,\n PanelSwitch: SidebarPanelSwitch,\n Header: SidebarHeader,\n HeaderRow: SidebarHeaderRow,\n HeaderMain: SidebarHeaderMain,\n Content: SidebarContent,\n Footer: SidebarFooter,\n IdentityButton: SidebarIdentityButton,\n ToggleButton: SidebarToggleButton,\n Group: SidebarGroup,\n GroupLabel: SidebarGroupLabel,\n Menu: SidebarMenu,\n MenuItem: SidebarMenuItem,\n MenuButton: SidebarMenuButton,\n MenuLink: SidebarMenuLink,\n MenuRouterLink: SidebarMenuRouterLink,\n MenuAction: SidebarMenuAction,\n MenuIcon: SidebarMenuIcon,\n MenuLabel: SidebarMenuLabel,\n MenuTrailing: SidebarMenuTrailing,\n Text: SidebarText,\n};\n","/* Высота трека и бегунка — доля control-height того же яруса, чтобы масштаб шёл с токенами. */\n.root {\n display: flex;\n flex-direction: column;\n gap: var(--slider-root-gap);\n width: 100%;\n}\n\n.root[data-size=\"s\"] {\n --slider-root-gap: var(--prime-sys-size-control-s-gap);\n --slider-track-h: var(--prime-sys-spacing-xs);\n --slider-thumb-size: var(--prime-sys-size-control-s-icon);\n --slider-label-size: var(--prime-sys-size-control-s-text);\n}\n\n.root[data-size=\"m\"] {\n --slider-root-gap: var(--prime-sys-size-control-m-gap);\n --slider-track-h: var(--prime-sys-spacing-xs);\n --slider-thumb-size: var(--prime-sys-size-control-m-icon);\n --slider-label-size: var(--prime-sys-size-control-m-text);\n}\n\n.root[data-size=\"l\"] {\n --slider-root-gap: var(--prime-sys-size-control-l-gap);\n --slider-track-h: var(--prime-sys-spacing-s);\n --slider-thumb-size: var(--prime-sys-size-control-l-icon);\n --slider-label-size: var(--prime-sys-size-control-l-text);\n}\n\n.root[data-size=\"xl\"] {\n --slider-root-gap: var(--prime-sys-size-control-xl-gap);\n --slider-track-h: var(--prime-sys-spacing-s);\n --slider-thumb-size: var(--prime-sys-size-control-xl-icon);\n --slider-label-size: var(--prime-sys-size-control-xl-text);\n}\n\n.track {\n -webkit-appearance: none;\n appearance: none;\n width: 100%;\n height: var(--slider-track-h);\n border-radius: var(--prime-sys-shape-radius-round);\n outline: none;\n cursor: pointer;\n background: var(--prime-sys-color-surface-accentSoft);\n accent-color: var(--prime-sys-color-action-primaryBackground);\n}\n\n.track::-webkit-slider-thumb {\n -webkit-appearance: none;\n width: var(--slider-thumb-size);\n height: var(--slider-thumb-size);\n border-radius: var(--prime-sys-shape-radius-round);\n background: var(--prime-sys-color-surface-elevated);\n border: var(--prime-sys-border-width-focusRing) solid\n var(--prime-sys-color-action-primaryBackground);\n box-shadow: var(--prime-sys-elevation-shadow-surface);\n cursor: pointer;\n transition: box-shadow var(--prime-sys-motion-fast) var(--prime-sys-motion-standard);\n}\n\n.track:focus-visible {\n outline: var(--prime-sys-unit-2px) solid var(--prime-sys-color-focus-ring);\n outline-offset: var(--prime-sys-unit-2px);\n}\n\n.track::-webkit-slider-thumb:hover {\n box-shadow: var(--prime-sys-elevation-shadow-buttonFocus);\n}\n\n.track:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.track::-moz-range-thumb {\n width: var(--slider-thumb-size);\n height: var(--slider-thumb-size);\n border-radius: var(--prime-sys-shape-radius-round);\n background: var(--prime-sys-color-surface-elevated);\n border: var(--prime-sys-border-width-focusRing) solid\n var(--prime-sys-color-action-primaryBackground);\n box-shadow: var(--prime-sys-elevation-shadow-surface);\n cursor: pointer;\n transition: box-shadow var(--prime-sys-motion-fast) var(--prime-sys-motion-standard);\n}\n\n.track::-moz-range-track {\n height: var(--slider-track-h);\n border-radius: var(--prime-sys-shape-radius-round);\n background: var(--prime-sys-color-surface-accentSoft);\n}\n\n.label {\n font-size: var(--slider-label-size);\n color: var(--prime-sys-color-content-primary);\n}\n","import * as React from \"react\";\n\nimport { ControlSizeProvider } from \"@/internal/ControlSizeContext\";\nimport { toDataAttributes } from \"@/internal/data-attributes\";\nimport type { SliderSize } from \"@/internal/states\";\n\nimport { useControllableState } from \"../../hooks/useControllableState\";\nimport { cx } from \"../../internal/cx\";\n\nimport styles from \"./Slider.module.css\";\n\nexport type { SliderSize };\n\nexport type SliderRootProps = {\n value?: number;\n defaultValue?: number;\n min?: number;\n max?: number;\n step?: number;\n disabled?: boolean;\n onChange?: (value: number) => void;\n label?: string;\n size?: SliderSize;\n className?: string;\n \"aria-label\"?: string;\n};\n\nfunction clamp(n: number, min: number, max: number) {\n return Math.min(max, Math.max(min, n));\n}\n\nfunction SliderRoot({\n value: valueProp,\n defaultValue,\n min: minProp,\n max: maxProp,\n step: stepProp,\n disabled,\n onChange,\n label,\n size = \"m\",\n className,\n \"aria-label\": ariaLabel,\n}: SliderRootProps) {\n const min = minProp ?? 0;\n const max = maxProp ?? 100;\n const step = stepProp ?? 1;\n const initialDefault = defaultValue ?? min;\n const [value, setValue] = useControllableState({\n value: valueProp,\n defaultValue: clamp(initialDefault, min, max),\n onChange,\n });\n\n const id = React.useId();\n const safeValue = clamp(value, min, max);\n\n const applyValueFromInput = (el: HTMLInputElement) => {\n const next = Number.parseFloat(el.value);\n if (Number.isNaN(next)) {\n return;\n }\n setValue(next);\n };\n\n const handleRangeChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n applyValueFromInput(e.currentTarget);\n };\n\n const handleRangeInput = (e: React.FormEvent<HTMLInputElement>) => {\n applyValueFromInput(e.currentTarget);\n };\n\n return (\n <div className={cx(styles.root, className)} {...toDataAttributes({ size })}>\n <ControlSizeProvider value={size}>\n {label ? (\n <label className={styles.label} htmlFor={id}>\n {label}\n </label>\n ) : null}\n <input\n id={label ? id : undefined}\n type=\"range\"\n className={styles.track}\n min={min}\n max={max}\n step={step}\n disabled={disabled}\n value={safeValue}\n onChange={handleRangeChange}\n onInput={handleRangeInput}\n aria-label={ariaLabel}\n />\n </ControlSizeProvider>\n </div>\n );\n}\n\nSliderRoot.displayName = \"SliderRoot\";\n\nexport const Slider = { Root: SliderRoot };\n","/* HorizontalStepper / VerticalStepper: круг от высоты контрола data-size; гепы и паддинги растут с тиром. */\n\n.hRoot,\n.vRoot {\n --st-ctrl-h: var(--prime-sys-size-control-m-height);\n --st-ctrl-icon: var(--prime-sys-size-control-m-icon);\n --st-text: var(--prime-sys-size-control-m-text);\n --st-support: var(--prime-sys-size-control-m-supportText);\n --st-ind-num: var(--prime-sys-typography-support-2xs);\n --st-radius: var(--prime-sys-size-control-m-radius);\n /* Доля высоты контрола — заметный шаг s/m/l/xl; вертикаль больше не «мелкая» vs паддинги */\n --st-circle: var(--prime-sys-unit-1p65rem);\n --st-stepper-chevron: var(--st-ctrl-icon);\n --st-stepper-check: var(--prime-sys-unit-0p86rem);\n /* m: зазор круг–текст; в вертикали шире (сетка 3 колонки) */\n --st-h-gap: var(--prime-sys-spacing-x3);\n --st-v-gap: var(--prime-sys-spacing-x4);\n --st-v-pad: var(--prime-sys-spacing-x2);\n --st-root-h-gap: var(--prime-sys-spacing-x4);\n --st-root-v-gap: var(--prime-sys-spacing-x2);\n}\n\n.hRoot[data-size=\"s\"],\n.vRoot[data-size=\"s\"] {\n --st-ctrl-h: var(--prime-sys-size-control-s-height);\n --st-ctrl-icon: var(--prime-sys-size-control-s-icon);\n --st-text: var(--prime-sys-size-control-s-text);\n --st-support: var(--prime-sys-size-control-s-supportText);\n --st-ind-num: var(--prime-sys-typography-support-2xs);\n --st-radius: var(--prime-sys-size-control-s-radius);\n --st-circle: var(--prime-sys-unit-1p32rem);\n --st-stepper-check: var(--prime-sys-unit-0p69rem);\n --st-h-gap: var(--prime-sys-spacing-x3);\n --st-v-gap: var(--prime-sys-spacing-x3);\n --st-v-pad: var(--prime-sys-spacing-x2);\n --st-root-h-gap: var(--prime-sys-spacing-x3);\n --st-root-v-gap: var(--prime-sys-spacing-x2);\n}\n\n.hRoot[data-size=\"l\"],\n.vRoot[data-size=\"l\"] {\n --st-ctrl-h: var(--prime-sys-size-control-l-height);\n --st-ctrl-icon: var(--prime-sys-size-control-l-icon);\n --st-text: var(--prime-sys-size-control-l-text);\n --st-support: var(--prime-sys-size-control-l-supportText);\n --st-ind-num: var(--prime-sys-typography-support-xs);\n --st-radius: var(--prime-sys-size-control-l-radius);\n --st-circle: var(--prime-sys-unit-1p98rem);\n --st-stepper-check: var(--prime-sys-unit-1p03rem);\n --st-h-gap: var(--prime-sys-spacing-x4);\n --st-v-gap: var(--prime-sys-spacing-x5);\n --st-v-pad: var(--prime-sys-spacing-x3);\n --st-root-h-gap: var(--prime-sys-spacing-x5);\n --st-root-v-gap: var(--prime-sys-spacing-x3);\n}\n\n.hRoot[data-size=\"xl\"],\n.vRoot[data-size=\"xl\"] {\n --st-ctrl-h: var(--prime-sys-size-control-xl-height);\n --st-ctrl-icon: var(--prime-sys-size-control-xl-icon);\n --st-text: var(--prime-sys-size-control-xl-text);\n --st-support: var(--prime-sys-size-control-xl-supportText);\n --st-ind-num: var(--prime-sys-typography-support-xs);\n --st-radius: var(--prime-sys-size-control-xl-radius);\n --st-circle: var(--prime-sys-unit-2p31rem);\n --st-stepper-check: var(--prime-sys-unit-1p2rem);\n --st-h-gap: var(--prime-sys-spacing-x5);\n --st-v-gap: var(--prime-sys-spacing-x6);\n --st-v-pad: var(--prime-sys-spacing-x4);\n --st-root-h-gap: var(--prime-sys-spacing-x6);\n --st-root-v-gap: var(--prime-sys-spacing-x4);\n}\n\n/* ─── Horizontal ─── */\n\n.hRoot {\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n gap: var(--st-root-h-gap);\n}\n\n.hItem {\n appearance: none;\n border: none;\n margin: 0;\n padding: 0;\n font: inherit;\n cursor: pointer;\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: var(--st-h-gap);\n font-size: var(--st-text);\n font-weight: var(--prime-sys-typography-weight-regular);\n line-height: var(--prime-sys-typography-body-lineHeight);\n background: transparent;\n color: var(--prime-sys-color-content-secondary);\n transition: color 0.15s ease;\n}\n\n.hItem[data-state=\"active\"],\n.hItem[data-state=\"completed\"] {\n color: var(--prime-sys-color-content-primary);\n}\n\n.hItem:focus-visible {\n outline: var(--prime-sys-unit-2px) solid var(--prime-sys-color-action-primaryBackground);\n outline-offset: var(--prime-sys-unit-2px);\n}\n\n.hItem:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n.hIndicator {\n display: flex;\n width: var(--st-circle);\n height: var(--st-circle);\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n border-radius: var(--prime-sys-shape-radius-round);\n font-size: var(--st-ind-num);\n font-weight: var(--prime-sys-typography-weight-medium);\n line-height: 1;\n}\n\n.hIndicator[data-state=\"default\"] {\n background: var(--prime-sys-color-surface-elevated);\n color: var(--prime-sys-color-content-secondary);\n box-shadow: inset 0 0 0 var(--prime-sys-unit-1px) var(--prime-sys-color-border-subtle);\n}\n\n.hIndicator[data-state=\"active\"] {\n background: var(--prime-sys-color-action-primaryBackground);\n color: var(--prime-sys-color-action-primaryForeground);\n}\n\n.hIndicator[data-state=\"completed\"] {\n background: var(--prime-sys-color-status-success-backgroundEmphasis);\n color: var(--prime-sys-color-surface-elevated);\n}\n\n.hCheck {\n width: var(--st-stepper-check);\n height: var(--st-stepper-check);\n}\n\n.hSeparator {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n color: var(--prime-sys-color-content-secondary);\n opacity: 0.7;\n}\n\n.hSeparatorIcon {\n width: var(--st-stepper-chevron);\n height: var(--st-stepper-chevron);\n flex-shrink: 0;\n}\n\n/* ─── Vertical ─── */\n\n.vRoot {\n display: flex;\n flex-direction: column;\n gap: var(--st-root-v-gap);\n width: 100%;\n}\n\n.vItem {\n appearance: none;\n border: none;\n margin: 0;\n font: inherit;\n cursor: pointer;\n box-sizing: border-box;\n display: grid;\n width: 100%;\n grid-template-columns: auto minmax(0, 1fr) auto;\n align-items: center;\n gap: var(--st-v-gap);\n padding: var(--st-v-pad);\n border-radius: var(--st-radius);\n text-align: start;\n font-size: var(--st-text);\n font-weight: var(--prime-sys-typography-weight-regular);\n line-height: var(--prime-sys-typography-body-lineHeight);\n transition:\n background-color 0.15s ease,\n color 0.15s ease,\n box-shadow 0.15s ease;\n}\n\n.vItem[data-state=\"completed\"],\n.vItem[data-state=\"default\"] {\n background: var(--prime-sys-color-surface-accentSoft);\n color: var(--prime-sys-color-content-secondary);\n}\n\n.vItem[data-state=\"active\"] {\n background: var(--prime-sys-color-surface-elevated);\n color: var(--prime-sys-color-content-primary);\n box-shadow: var(--prime-sys-elevation-shadow-surface);\n}\n\n.vItem:focus-visible {\n outline: var(--prime-sys-unit-2px) solid var(--prime-sys-color-action-primaryBackground);\n outline-offset: var(--prime-sys-unit-2px);\n}\n\n.vItem:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n.vIndicator {\n display: flex;\n width: var(--st-circle);\n height: var(--st-circle);\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n border-radius: var(--prime-sys-shape-radius-round);\n font-size: var(--st-ind-num);\n font-weight: var(--prime-sys-typography-weight-medium);\n line-height: 1;\n}\n\n.vIndicator[data-state=\"completed\"] {\n background: var(--prime-sys-color-status-success-backgroundEmphasis);\n color: var(--prime-sys-color-surface-elevated);\n}\n\n.vIndicator[data-state=\"active\"] {\n background: var(--prime-sys-color-action-primaryBackground);\n color: var(--prime-sys-color-action-primaryForeground);\n}\n\n.vIndicator[data-state=\"default\"] {\n background: var(--prime-sys-color-surface-elevated);\n color: var(--prime-sys-color-content-secondary);\n box-shadow: var(--prime-sys-elevation-shadow-surface);\n}\n\n.vCheck {\n width: var(--st-stepper-check);\n height: var(--st-stepper-check);\n}\n\n.vArrow {\n flex-shrink: 0;\n width: var(--st-stepper-chevron);\n height: var(--st-stepper-chevron);\n color: var(--prime-sys-color-content-secondary);\n}\n\n/* Высокоуровневый Stepper: статус error (доп. стиль поверх базовых состояний) */\n.hItem[data-legacy-status=\"error\"],\n.vItem[data-legacy-status=\"error\"] {\n background: var(--prime-sys-color-surface-dangerSoft);\n color: var(--prime-sys-color-content-primary);\n}\n\n.hItem[data-legacy-status=\"error\"] {\n background: transparent;\n color: var(--prime-sys-color-content-danger);\n}\n\n.hIndicator[data-legacy-status=\"error\"] {\n background: var(--prime-sys-color-surface-dangerSoft);\n color: var(--prime-sys-color-content-danger);\n box-shadow: inset 0 0 0 var(--prime-sys-unit-1px) var(--prime-sys-color-border-danger);\n}\n\n.vIndicator[data-legacy-status=\"error\"] {\n background: var(--prime-sys-color-surface-dangerSoft);\n color: var(--prime-sys-color-content-danger);\n box-shadow: none;\n}\n","import { createComponentContext } from \"@/internal/context\";\n\n/** Состояние шага в примитивных степперах: `default` соответствует ожиданию до активации (аналог «pending» у высокоуровневого Stepper). */\nexport type StepperAlignItemState = \"completed\" | \"active\" | \"default\";\n\ntype StepperAlignItemContextValue = {\n state: StepperAlignItemState;\n};\n\nexport const [StepperAlignItemProvider, useStepperAlignItemState] =\n createComponentContext<StepperAlignItemContextValue>(\"StepperAlign.Item\");\n\nexport function StepperAlignCheckIcon({ className }: { className?: string }) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 20 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n fill=\"currentColor\"\n d=\"M15.1 7.453 8.726 13.82 4.9 10l1.275-1.274 2.55 2.548 5.1-5.094L15.1 7.453Z\"\n />\n </svg>\n );\n}\n","import * as React from \"react\";\n\nimport { IconChevronRight } from \"@/icons\";\nimport { ControlSizeProvider } from \"@/internal/ControlSizeContext\";\nimport { cx } from \"@/internal/cx\";\nimport type { StepperSize } from \"@/internal/states\";\nimport alignStyles from \"./StepperAlign.module.css\";\nimport {\n StepperAlignCheckIcon,\n StepperAlignItemProvider,\n type StepperAlignItemState,\n useStepperAlignItemState,\n} from \"./stepperAlignContext\";\n\nexport type HorizontalStepperRootProps = React.HTMLAttributes<HTMLDivElement> & {\n size?: StepperSize;\n};\n\nfunction HorizontalStepperRoot({\n className,\n size = \"m\",\n children,\n ...rest\n}: HorizontalStepperRootProps) {\n return (\n <ControlSizeProvider value={size}>\n <div className={cx(alignStyles.hRoot, className)} data-size={size} {...rest}>\n {children}\n </div>\n </ControlSizeProvider>\n );\n}\n\nHorizontalStepperRoot.displayName = \"HorizontalStepper.Root\";\n\nexport type HorizontalStepperSeparatorIconProps<\n T extends React.ElementType = typeof IconChevronRight,\n> = {\n as?: T;\n className?: string;\n} & Omit<React.ComponentPropsWithoutRef<T>, \"as\" | \"className\">;\n\nfunction HorizontalStepperSeparatorIcon<T extends React.ElementType = typeof IconChevronRight>({\n as,\n className,\n ...rest\n}: HorizontalStepperSeparatorIconProps<T>) {\n const Component = (as ?? IconChevronRight) as React.ElementType;\n\n return (\n <span className={alignStyles.hSeparator} aria-hidden=\"true\">\n <Component className={cx(alignStyles.hSeparatorIcon, className)} strokeWidth={2} {...rest} />\n </span>\n );\n}\n\nHorizontalStepperSeparatorIcon.displayName = \"HorizontalStepper.SeparatorIcon\";\n\nexport type HorizontalStepperItemProps = Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n \"type\"\n> & {\n state?: StepperAlignItemState;\n type?: \"button\" | \"submit\" | \"reset\";\n};\n\nconst HorizontalStepperItem = React.forwardRef<HTMLButtonElement, HorizontalStepperItemProps>(\n function HorizontalStepperItem(\n { state = \"default\", className, type = \"button\", children, ...rest },\n ref,\n ) {\n return (\n <StepperAlignItemProvider value={{ state }}>\n <button\n ref={ref}\n type={type}\n className={cx(alignStyles.hItem, className)}\n data-state={state}\n {...rest}\n >\n {children}\n </button>\n </StepperAlignItemProvider>\n );\n },\n);\n\nHorizontalStepperItem.displayName = \"HorizontalStepper.Item\";\n\nexport type HorizontalStepperItemIndicatorProps = React.HTMLAttributes<HTMLDivElement> & {\n state?: StepperAlignItemState;\n};\n\nfunction HorizontalStepperItemIndicator({\n state: stateProp,\n className,\n children,\n ...rest\n}: HorizontalStepperItemIndicatorProps) {\n const { state: ctxState } = useStepperAlignItemState();\n const state = stateProp ?? ctxState;\n\n if (state === \"completed\") {\n return (\n <div className={cx(alignStyles.hIndicator, className)} data-state={state} {...rest}>\n <StepperAlignCheckIcon className={alignStyles.hCheck} />\n </div>\n );\n }\n\n return (\n <div className={cx(alignStyles.hIndicator, className)} data-state={state} {...rest}>\n {children}\n </div>\n );\n}\n\nHorizontalStepperItemIndicator.displayName = \"HorizontalStepper.ItemIndicator\";\n\nexport const HorizontalStepper = {\n Root: HorizontalStepperRoot,\n SeparatorIcon: HorizontalStepperSeparatorIcon,\n Item: HorizontalStepperItem,\n ItemIndicator: HorizontalStepperItemIndicator,\n};\n","/* Stepper: семантический ol + li; визуал шагов — StepperAlign.module.css. */\n\n.root {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.stepLi {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.root[data-orientation=\"horizontal\"] .stepLi {\n flex: 0 0 auto;\n}\n\n.separatorLi {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n align-items: center;\n flex-shrink: 0;\n}\n\n/* Title & description внутри ячейки сетки (vertical) / flex (horizontal) */\n\n.content {\n flex: 1;\n min-width: 0;\n}\n\n.title {\n font-size: var(--st-text, var(--prime-sys-size-control-m-text));\n font-weight: var(--prime-sys-typography-weight-medium);\n color: inherit;\n}\n\n.description {\n font-size: var(--st-support, var(--prime-sys-size-control-m-supportText));\n color: var(--prime-sys-color-content-secondary);\n margin-top: var(--prime-sys-spacing-x1);\n}\n\n.stepLi[data-status=\"pending\"] .title {\n color: inherit;\n}\n\n.stepLi[data-status=\"active\"] .description,\n.stepLi[data-status=\"completed\"] .description,\n.stepLi[data-status=\"error\"] .description {\n color: var(--prime-sys-color-content-secondary);\n}\n","import * as React from \"react\";\n\nimport { IconChevronRight } from \"@/icons\";\nimport { ControlSizeProvider } from \"@/internal/ControlSizeContext\";\nimport { cx } from \"@/internal/cx\";\nimport type { StepperSize } from \"@/internal/states\";\nimport alignStyles from \"./StepperAlign.module.css\";\nimport {\n StepperAlignCheckIcon,\n StepperAlignItemProvider,\n type StepperAlignItemState,\n useStepperAlignItemState,\n} from \"./stepperAlignContext\";\n\nexport type VerticalStepperRootProps = React.HTMLAttributes<HTMLDivElement> & {\n size?: StepperSize;\n};\n\nfunction VerticalStepperRoot({\n className,\n size = \"m\",\n children,\n ...rest\n}: VerticalStepperRootProps) {\n return (\n <ControlSizeProvider value={size}>\n <div className={cx(alignStyles.vRoot, className)} data-size={size} {...rest}>\n {children}\n </div>\n </ControlSizeProvider>\n );\n}\n\nVerticalStepperRoot.displayName = \"VerticalStepper.Root\";\n\nexport type VerticalStepperArrowProps<T extends React.ElementType = typeof IconChevronRight> = {\n as?: T;\n className?: string;\n} & Omit<React.ComponentPropsWithoutRef<T>, \"as\" | \"className\">;\n\nfunction VerticalStepperArrow<T extends React.ElementType = typeof IconChevronRight>({\n as,\n className,\n ...rest\n}: VerticalStepperArrowProps<T>) {\n const Component = (as ?? IconChevronRight) as React.ElementType;\n\n return <Component className={cx(alignStyles.vArrow, className)} strokeWidth={2} {...rest} />;\n}\n\nVerticalStepperArrow.displayName = \"VerticalStepper.Arrow\";\n\nexport type VerticalStepperItemProps = Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n \"type\"\n> & {\n state?: StepperAlignItemState;\n type?: \"button\" | \"submit\" | \"reset\";\n};\n\nconst VerticalStepperItem = React.forwardRef<HTMLButtonElement, VerticalStepperItemProps>(\n function VerticalStepperItem(\n { state = \"default\", className, type = \"button\", children, ...rest },\n ref,\n ) {\n return (\n <StepperAlignItemProvider value={{ state }}>\n <button\n ref={ref}\n type={type}\n className={cx(alignStyles.vItem, className)}\n data-state={state}\n {...rest}\n >\n {children}\n </button>\n </StepperAlignItemProvider>\n );\n },\n);\n\nVerticalStepperItem.displayName = \"VerticalStepper.Item\";\n\nexport type VerticalStepperItemIndicatorProps = React.HTMLAttributes<HTMLDivElement> & {\n state?: StepperAlignItemState;\n};\n\nfunction VerticalStepperItemIndicator({\n state: stateProp,\n className,\n children,\n ...rest\n}: VerticalStepperItemIndicatorProps) {\n const { state: ctxState } = useStepperAlignItemState();\n const state = stateProp ?? ctxState;\n\n if (state === \"completed\") {\n return (\n <div className={cx(alignStyles.vIndicator, className)} data-state={state} {...rest}>\n <StepperAlignCheckIcon className={alignStyles.vCheck} />\n </div>\n );\n }\n\n return (\n <div className={cx(alignStyles.vIndicator, className)} data-state={state} {...rest}>\n {children}\n </div>\n );\n}\n\nVerticalStepperItemIndicator.displayName = \"VerticalStepper.ItemIndicator\";\n\nexport const VerticalStepper = {\n Root: VerticalStepperRoot,\n Arrow: VerticalStepperArrow,\n Item: VerticalStepperItem,\n ItemIndicator: VerticalStepperItemIndicator,\n};\n","import * as React from \"react\";\n\nimport { ControlSizeProvider } from \"@/internal/ControlSizeContext\";\nimport { createComponentContext } from \"@/internal/context\";\nimport { cx } from \"@/internal/cx\";\nimport { toDataAttributes } from \"@/internal/data-attributes\";\nimport type { StepperSize } from \"@/internal/states\";\nimport { HorizontalStepper } from \"./HorizontalStepper\";\nimport styles from \"./Stepper.module.css\";\nimport alignStyles from \"./StepperAlign.module.css\";\nimport {\n StepperAlignCheckIcon,\n StepperAlignItemProvider,\n type StepperAlignItemState,\n} from \"./stepperAlignContext\";\nimport { VerticalStepper } from \"./VerticalStepper\";\n\nexport { HorizontalStepper } from \"./HorizontalStepper\";\nexport { VerticalStepper } from \"./VerticalStepper\";\n\nexport type { StepperSize };\n\nexport type StepperOrientation = \"horizontal\" | \"vertical\";\nexport type StepStatus = \"pending\" | \"active\" | \"completed\" | \"error\";\n\ntype StepperRootContextValue = {\n orientation: StepperOrientation;\n currentStep: number;\n getNextStepIndex: () => number;\n};\n\ntype StepperStepContextValue = {\n status: StepStatus;\n index: number;\n};\n\nconst [StepperRootProvider, useStepperRootContext] =\n createComponentContext<StepperRootContextValue>(\"Stepper\");\n\nconst [StepperStepProvider, useStepperStepContext] =\n createComponentContext<StepperStepContextValue>(\"Stepper.Step\");\n\nfunction toAlignState(status: StepStatus): StepperAlignItemState {\n if (status === \"completed\") return \"completed\";\n if (status === \"active\") return \"active\";\n return \"default\";\n}\n\nfunction computeStepStatus(index: number, currentStep: number): StepStatus {\n if (index < currentStep) return \"completed\";\n if (index === currentStep) return \"active\";\n return \"pending\";\n}\n\nexport type StepperRootProps = {\n orientation?: StepperOrientation;\n currentStep?: number;\n size?: StepperSize;\n children: React.ReactNode;\n className?: string;\n};\n\nfunction StepperRoot({\n orientation = \"vertical\",\n currentStep = 0,\n size = \"m\",\n children,\n className,\n}: StepperRootProps) {\n const indexRef = React.useRef(0);\n indexRef.current = 0;\n const getNextStepIndex = React.useCallback(() => {\n const idx = indexRef.current;\n indexRef.current += 1;\n return idx;\n }, []);\n\n const value = React.useMemo(\n () => ({ orientation, currentStep, getNextStepIndex }),\n [orientation, currentStep, getNextStepIndex],\n );\n\n return (\n <StepperRootProvider value={value}>\n <ControlSizeProvider value={size}>\n <ol\n className={cx(\n styles.root,\n orientation === \"horizontal\" ? alignStyles.hRoot : alignStyles.vRoot,\n className,\n )}\n {...toDataAttributes({ orientation, size })}\n >\n {children}\n </ol>\n </ControlSizeProvider>\n </StepperRootProvider>\n );\n}\n\nStepperRoot.displayName = \"Stepper.Root\";\n\nexport type StepperSeparatorIconProps = {\n className?: string;\n};\n\nfunction StepperSeparatorIcon({ className }: StepperSeparatorIconProps) {\n return (\n <li className={styles.separatorLi} aria-hidden=\"true\">\n <HorizontalStepper.SeparatorIcon className={className} />\n </li>\n );\n}\n\nStepperSeparatorIcon.displayName = \"Stepper.SeparatorIcon\";\n\nexport type StepperArrowProps = {\n className?: string;\n} & Omit<React.ComponentPropsWithoutRef<typeof VerticalStepper.Arrow>, \"className\">;\n\nfunction StepperArrow({ className, ...rest }: StepperArrowProps) {\n return <VerticalStepper.Arrow className={className} {...rest} />;\n}\n\nStepperArrow.displayName = \"Stepper.Arrow\";\n\nexport type StepperIndicatorProps = {\n children?: React.ReactNode;\n className?: string;\n};\n\nfunction StepperIndicator({ children, className }: StepperIndicatorProps) {\n const { status, index } = useStepperStepContext();\n const { orientation } = useStepperRootContext();\n const alignState = toAlignState(status);\n const indClass = orientation === \"horizontal\" ? alignStyles.hIndicator : alignStyles.vIndicator;\n const checkClass = orientation === \"horizontal\" ? alignStyles.hCheck : alignStyles.vCheck;\n\n const defaultChild =\n status === \"completed\" ? <StepperAlignCheckIcon className={checkClass} /> : String(index + 1);\n\n return (\n <span\n className={cx(indClass, className)}\n data-state={alignState}\n data-legacy-status={status === \"error\" ? \"error\" : undefined}\n aria-hidden=\"true\"\n >\n {children ?? defaultChild}\n </span>\n );\n}\n\nStepperIndicator.displayName = \"Stepper.Indicator\";\n\nexport type StepperContentProps = {\n title: string;\n description?: string;\n className?: string;\n};\n\nfunction StepperContent({ title, description, className }: StepperContentProps) {\n return (\n <div className={cx(styles.content, className)}>\n <div className={styles.title}>{title}</div>\n {description ? <p className={styles.description}>{description}</p> : null}\n </div>\n );\n}\n\nStepperContent.displayName = \"Stepper.Content\";\n\nexport type StepperStepProps = Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"type\"> & {\n index?: number;\n status?: StepStatus;\n children: React.ReactNode;\n type?: \"button\" | \"submit\" | \"reset\";\n};\n\nconst StepperStep = React.forwardRef<HTMLButtonElement, StepperStepProps>(function StepperStep(\n { index: indexProp, status: statusProp, children, className, disabled, type = \"button\", ...rest },\n ref,\n) {\n const { currentStep, orientation, getNextStepIndex } = useStepperRootContext();\n const index = indexProp ?? getNextStepIndex();\n const status = statusProp ?? computeStepStatus(index, currentStep);\n const alignState = toAlignState(status);\n const itemClass = orientation === \"horizontal\" ? alignStyles.hItem : alignStyles.vItem;\n\n return (\n <StepperStepProvider value={{ status, index }}>\n <StepperAlignItemProvider value={{ state: alignState }}>\n <li className={styles.stepLi} data-status={status}>\n <button\n ref={ref}\n type={type}\n disabled={disabled}\n className={cx(itemClass, className)}\n data-state={alignState}\n data-legacy-status={status === \"error\" ? \"error\" : undefined}\n aria-current={status === \"active\" ? \"step\" : undefined}\n {...rest}\n >\n {children}\n </button>\n </li>\n </StepperAlignItemProvider>\n </StepperStepProvider>\n );\n});\n\nStepperStep.displayName = \"Stepper.Step\";\n\nexport const Stepper = {\n Root: StepperRoot,\n Step: StepperStep,\n Item: StepperStep,\n Indicator: StepperIndicator,\n ItemIndicator: StepperIndicator,\n Content: StepperContent,\n SeparatorIcon: StepperSeparatorIcon,\n Arrow: StepperArrow,\n};\n",".field {\n --prime-switch-track-width: var(--prime-sys-size-switch-m-trackWidth);\n --prime-switch-track-height: var(--prime-sys-size-switch-m-trackHeight);\n --prime-switch-thumb-size: var(--prime-sys-size-switch-m-thumb);\n --prime-switch-offset: var(--prime-sys-unit-0p125rem);\n --prime-switch-col-gap: var(--prime-sys-size-control-m-inputPaddingX);\n --prime-switch-thumb-translate: var(--prime-sys-unit-0p875rem);\n --prime-switch-thumb-disabled-size: var(--prime-sys-unit-0p75rem);\n --prime-switch-hint-offset: calc(var(--prime-switch-track-width) + var(--prime-switch-col-gap));\n --prime-switch-stack-gap: var(--prime-sys-size-control-m-gap);\n box-sizing: border-box;\n width: 100%;\n min-width: 0;\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: var(--prime-switch-stack-gap);\n}\n\n.field[data-size=\"s\"] {\n --prime-switch-track-width: var(--prime-sys-size-switch-s-trackWidth);\n --prime-switch-track-height: var(--prime-sys-size-switch-s-trackHeight);\n --prime-switch-thumb-size: var(--prime-sys-size-switch-s-thumb);\n --prime-switch-col-gap: var(--prime-sys-size-control-s-inputPaddingX);\n --prime-switch-thumb-translate: var(--prime-sys-unit-0p75rem);\n --prime-switch-thumb-disabled-size: var(--prime-sys-unit-0p625rem);\n}\n\n.field[data-size=\"l\"] {\n --prime-switch-track-width: var(--prime-sys-size-switch-l-trackWidth);\n --prime-switch-track-height: var(--prime-sys-size-switch-l-trackHeight);\n --prime-switch-thumb-size: var(--prime-sys-size-switch-l-thumb);\n --prime-switch-col-gap: var(--prime-sys-size-control-l-inputPaddingX);\n --prime-switch-thumb-translate: var(--prime-sys-unit-1rem);\n --prime-switch-thumb-disabled-size: var(--prime-sys-unit-0p875rem);\n}\n\n.field[data-size=\"xl\"] {\n --prime-switch-track-width: var(--prime-sys-size-switch-xl-trackWidth);\n --prime-switch-track-height: var(--prime-sys-size-switch-xl-trackHeight);\n --prime-switch-thumb-size: var(--prime-sys-size-switch-xl-thumb);\n --prime-switch-col-gap: var(--prime-sys-size-control-xl-inputPaddingX);\n --prime-switch-thumb-translate: var(--prime-sys-unit-1rem);\n --prime-switch-thumb-disabled-size: var(--prime-sys-unit-1p125rem);\n}\n\n.field .labelRow {\n display: grid;\n grid-template-columns: auto 1fr;\n gap: 0;\n row-gap: 0;\n column-gap: var(--prime-switch-col-gap);\n align-items: center;\n width: 100%;\n cursor: pointer;\n}\n\n.controlCell {\n position: relative;\n display: inline-flex;\n align-items: center;\n flex-shrink: 0;\n}\n\n.input {\n position: absolute;\n opacity: 0;\n pointer-events: none;\n}\n\n.track {\n position: relative;\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n width: var(--prime-switch-track-width);\n height: var(--prime-switch-track-height);\n border-radius: var(--prime-sys-shape-radius-round);\n border: var(--prime-sys-border-width-control) solid var(--prime-sys-color-field-border);\n background: var(--prime-sys-color-action-neutralBackgroundHover);\n box-shadow: var(--prime-sys-elevation-shadow-surface);\n transition:\n background-color var(--prime-sys-motion-medium) var(--prime-sys-motion-standard),\n border-color var(--prime-sys-motion-medium) var(--prime-sys-motion-standard),\n box-shadow var(--prime-sys-motion-medium) var(--prime-sys-motion-standard);\n}\n\n.track::before {\n content: \"\";\n box-sizing: border-box;\n position: absolute;\n top: 50%;\n left: var(--prime-switch-offset);\n width: var(--prime-switch-thumb-size);\n height: var(--prime-switch-thumb-size);\n border-radius: var(--prime-sys-shape-radius-round);\n background: var(--prime-sys-color-surface-elevated);\n box-shadow: 0 var(--prime-sys-unit-1px) var(--prime-sys-unit-2px)\n color-mix(in srgb, var(--prime-sys-color-content-primary) 18%, transparent);\n transform: translateY(-50%);\n transition: transform var(--prime-sys-motion-medium) var(--prime-sys-motion-standard);\n}\n\n.text {\n line-height: var(--prime-sys-typography-body-lineHeight);\n min-width: 0;\n}\n\n.controlCell .input:checked + .track {\n background: var(--prime-sys-color-action-primaryBackground);\n border-color: var(--prime-sys-color-action-primaryBackground);\n box-shadow: none;\n}\n\n.controlCell .input:checked + .track::before {\n transform: translate(var(--prime-switch-thumb-translate), -50%);\n}\n\n.labelRow:hover .track {\n border-color: var(--prime-sys-color-field-borderHover);\n background: var(--prime-sys-color-field-bg);\n box-shadow: none;\n}\n\n.labelRow:hover .controlCell .input:checked + .track {\n background: var(--prime-sys-color-action-primaryBackgroundHover);\n border-color: var(--prime-sys-color-action-primaryBackgroundHover);\n}\n\n.controlCell .input:focus-visible + .track {\n box-shadow: var(--prime-sys-elevation-shadow-buttonFocus);\n}\n\n.field[data-invalid=\"true\"] .track {\n border-color: var(--prime-sys-color-field-borderError);\n}\n\n.field[data-disabled=\"true\"] .labelRow {\n cursor: not-allowed;\n}\n\n.field[data-disabled=\"true\"] .track {\n background: var(--prime-sys-color-surface-raised);\n border-color: var(--prime-sys-color-border-subtle);\n box-shadow: 0 0 0 var(--prime-sys-unit-1px) var(--prime-sys-color-border-subtle);\n opacity: 1;\n}\n\n.field[data-disabled=\"true\"] .controlCell .input:checked + .track {\n background: var(--prime-sys-color-surface-raised);\n border-color: var(--prime-sys-color-border-subtle);\n}\n\n.field[data-disabled=\"true\"] .track::before {\n --prime-switch-thumb-size: var(--prime-switch-thumb-disabled-size);\n background: var(--prime-sys-color-border-subtle);\n}\n\n.hintSlot {\n box-sizing: border-box;\n width: 100%;\n max-width: 100%;\n padding-inline-start: var(--prime-switch-hint-offset);\n justify-content: flex-start;\n}\n","import * as React from \"react\";\nimport { Hint } from \"@/components/hint/Hint\";\nimport { Label } from \"@/components/label/Label\";\nimport { useControllableState } from \"@/hooks/useControllableState\";\nimport { ControlSizeProvider } from \"@/internal/ControlSizeContext\";\nimport { createComponentContext } from \"@/internal/context\";\nimport { cx } from \"@/internal/cx\";\nimport { toDataAttributes } from \"@/internal/data-attributes\";\nimport type { HintSize, LabelSize, SwitchSize, SwitchVariant } from \"@/internal/states\";\n\nimport styles from \"./Switch.module.css\";\n\ntype SwitchContextValue = {\n inputId: string;\n hintId: string;\n errorId: string;\n size: SwitchSize;\n inputRef: React.Ref<HTMLInputElement>;\n invalid: boolean;\n disabled: boolean;\n readOnly: boolean;\n isChecked: boolean;\n describedBy: string | undefined;\n handleChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n restInputPropsRef: React.MutableRefObject<\n Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"type\" | \"checked\" | \"defaultChecked\" | \"onChange\"\n >\n >;\n registerHint: () => void;\n unregisterHint: () => void;\n registerError: () => void;\n unregisterError: () => void;\n};\n\nconst [SwitchProvider, useSwitchContext] = createComponentContext<SwitchContextValue>(\"Switch\");\n\nexport type SwitchRootProps = Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"type\" | \"size\" | \"checked\" | \"defaultChecked\" | \"onChange\"\n> & {\n label?: React.ReactNode;\n checked?: boolean;\n defaultChecked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n variant?: SwitchVariant;\n size?: SwitchSize;\n};\n\nconst SwitchRoot = React.forwardRef<HTMLInputElement, SwitchRootProps>(\n (\n {\n id,\n checked,\n defaultChecked = false,\n onCheckedChange,\n variant = \"default\",\n size = \"m\",\n disabled,\n readOnly,\n className,\n \"aria-describedby\": ariaDescribedBy,\n children,\n ...inputRest\n },\n ref,\n ) => {\n const rawId = React.useId();\n const inputId = id ?? rawId;\n const hintId = `${inputId}-hint`;\n const errorId = `${inputId}-error`;\n\n const [hasHint, setHasHint] = React.useState(false);\n const [hasError, setHasError] = React.useState(false);\n\n const invalid = variant === \"error\" || hasError;\n\n const [isChecked, setChecked] = useControllableState<boolean>({\n value: checked,\n defaultValue: defaultChecked,\n onChange: onCheckedChange,\n });\n\n const handleChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (readOnly) {\n e.preventDefault();\n return;\n }\n setChecked(e.target.checked);\n },\n [readOnly, setChecked],\n );\n\n const restInputPropsRef = React.useRef(inputRest);\n restInputPropsRef.current = inputRest;\n\n const parts = [\n ariaDescribedBy,\n hasHint ? hintId : undefined,\n hasError ? errorId : undefined,\n ].filter(Boolean);\n const describedBy = parts.length > 0 ? parts.join(\" \") : undefined;\n\n const registerHint = React.useCallback(() => setHasHint(true), []);\n const unregisterHint = React.useCallback(() => setHasHint(false), []);\n const registerError = React.useCallback(() => setHasError(true), []);\n const unregisterError = React.useCallback(() => setHasError(false), []);\n\n const ctxValue = React.useMemo(\n () => ({\n inputId,\n hintId,\n errorId,\n size,\n inputRef: ref,\n invalid,\n disabled: Boolean(disabled),\n readOnly: Boolean(readOnly),\n isChecked,\n describedBy,\n handleChange,\n restInputPropsRef,\n registerHint,\n unregisterHint,\n registerError,\n unregisterError,\n }),\n [\n inputId,\n hintId,\n errorId,\n size,\n ref,\n invalid,\n disabled,\n readOnly,\n isChecked,\n describedBy,\n handleChange,\n registerHint,\n unregisterHint,\n registerError,\n unregisterError,\n ],\n );\n\n return (\n <SwitchProvider value={ctxValue}>\n <ControlSizeProvider value={size}>\n <div\n className={cx(styles.field, className)}\n {...toDataAttributes({\n size,\n variant,\n disabled: Boolean(disabled),\n invalid,\n checked: isChecked,\n readonly: Boolean(readOnly),\n })}\n >\n {children}\n </div>\n </ControlSizeProvider>\n </SwitchProvider>\n );\n },\n);\n\nSwitchRoot.displayName = \"SwitchRoot\";\n\n// ─── Label ───────────────────────────────────────────────────────────────────\n\nexport type SwitchLabelProps = {\n children?: React.ReactNode;\n className?: string;\n} & Omit<React.HTMLAttributes<HTMLLabelElement>, \"htmlFor\" | \"size\">;\n\nconst SwitchLabel = React.forwardRef<HTMLLabelElement, SwitchLabelProps>(function SwitchLabel(\n { children, className, ...rest },\n ref,\n) {\n const {\n inputId,\n inputRef,\n invalid,\n disabled,\n readOnly,\n isChecked,\n describedBy,\n handleChange,\n restInputPropsRef,\n size,\n } = useSwitchContext();\n\n return (\n <Label.Root\n ref={ref}\n htmlFor={inputId}\n size={size as LabelSize}\n disabled={disabled}\n className={cx(styles.labelRow, className)}\n {...rest}\n >\n <span className={styles.controlCell}>\n <input\n ref={inputRef}\n id={inputId}\n className={styles.input}\n type=\"checkbox\"\n role=\"switch\"\n checked={isChecked}\n disabled={disabled}\n aria-checked={isChecked}\n aria-invalid={invalid || undefined}\n aria-readonly={readOnly || undefined}\n aria-describedby={describedBy}\n onChange={handleChange}\n {...restInputPropsRef.current}\n />\n <span className={styles.track} aria-hidden=\"true\" />\n </span>\n {children !== undefined && children !== null ? (\n <span className={styles.text}>{children}</span>\n ) : null}\n </Label.Root>\n );\n});\n\nSwitchLabel.displayName = \"SwitchLabel\";\n\n// ─── Hint ────────────────────────────────────────────────────────────────────\n\nexport type SwitchHintProps = {\n children: React.ReactNode;\n className?: string;\n} & Omit<React.HTMLAttributes<HTMLParagraphElement>, \"id\">;\n\nfunction SwitchHint({ children, className, ...rest }: SwitchHintProps) {\n const { hintId, registerHint, unregisterHint, size, disabled } = useSwitchContext();\n\n React.useLayoutEffect(() => {\n registerHint();\n return () => {\n unregisterHint();\n };\n }, [registerHint, unregisterHint]);\n\n return (\n <Hint.Root\n id={hintId}\n size={size as HintSize}\n variant={disabled ? \"disabled\" : \"default\"}\n className={cx(styles.hintSlot, className)}\n {...rest}\n >\n {children}\n </Hint.Root>\n );\n}\n\nSwitchHint.displayName = \"SwitchHint\";\n\n// ─── Error ───────────────────────────────────────────────────────────────────\n\nexport type SwitchErrorProps = {\n children: React.ReactNode;\n className?: string;\n} & Omit<React.HTMLAttributes<HTMLParagraphElement>, \"id\">;\n\nfunction SwitchError({ children, className, ...rest }: SwitchErrorProps) {\n const { errorId, registerError, unregisterError, size } = useSwitchContext();\n\n React.useLayoutEffect(() => {\n registerError();\n return () => {\n unregisterError();\n };\n }, [registerError, unregisterError]);\n\n return (\n <Hint.Root\n id={errorId}\n size={size as HintSize}\n variant=\"error\"\n className={cx(styles.hintSlot, className)}\n {...rest}\n >\n {children}\n </Hint.Root>\n );\n}\n\nSwitchError.displayName = \"SwitchError\";\n\n// ─── Namespace ───────────────────────────────────────────────────────────────\n\nexport const Switch = {\n Root: SwitchRoot,\n Label: SwitchLabel,\n Hint: SwitchHint,\n Error: SwitchError,\n};\n",".root {\n --prime-tabs-trigger-height: var(--prime-sys-size-control-m-height);\n --prime-tabs-trigger-text: var(--prime-sys-size-control-m-text);\n --prime-tabs-trigger-gap: var(--prime-sys-size-control-m-gap);\n --prime-tabs-trigger-pad-x: var(--prime-sys-size-control-m-buttonPaddingX);\n --prime-tabs-trigger-pad-y: var(--prime-sys-size-control-m-buttonPaddingY);\n /* Расстояние между триггерами в горизонтальном списке. */\n --prime-tabs-item-gap: var(--prime-sys-spacing-x6);\n --prime-tabs-icon-size: var(--prime-sys-size-control-m-icon);\n}\n\n.root[data-size=\"s\"] {\n --prime-tabs-trigger-height: var(--prime-sys-size-control-s-height);\n --prime-tabs-trigger-text: var(--prime-sys-size-control-s-text);\n --prime-tabs-trigger-gap: var(--prime-sys-size-control-s-gap);\n --prime-tabs-trigger-pad-x: var(--prime-sys-size-control-s-buttonPaddingX);\n --prime-tabs-trigger-pad-y: var(--prime-sys-size-control-s-buttonPaddingY);\n --prime-tabs-item-gap: var(--prime-sys-spacing-x4);\n --prime-tabs-icon-size: var(--prime-sys-size-control-s-icon);\n}\n\n.root[data-size=\"l\"] {\n --prime-tabs-trigger-height: var(--prime-sys-size-control-l-height);\n --prime-tabs-trigger-text: var(--prime-sys-size-control-l-text);\n --prime-tabs-trigger-gap: var(--prime-sys-size-control-l-gap);\n --prime-tabs-trigger-pad-x: var(--prime-sys-size-control-l-buttonPaddingX);\n --prime-tabs-trigger-pad-y: var(--prime-sys-size-control-l-buttonPaddingY);\n --prime-tabs-item-gap: var(--prime-sys-spacing-x8);\n --prime-tabs-icon-size: var(--prime-sys-size-control-l-icon);\n}\n\n.root[data-size=\"xl\"] {\n --prime-tabs-trigger-height: var(--prime-sys-size-control-xl-height);\n --prime-tabs-trigger-text: var(--prime-sys-size-control-xl-text);\n --prime-tabs-trigger-gap: var(--prime-sys-size-control-xl-gap);\n --prime-tabs-trigger-pad-x: var(--prime-sys-size-control-xl-buttonPaddingX);\n --prime-tabs-trigger-pad-y: var(--prime-sys-size-control-xl-buttonPaddingY);\n --prime-tabs-item-gap: var(--prime-sys-spacing-x8);\n --prime-tabs-icon-size: var(--prime-sys-size-control-xl-icon);\n}\n\n.root[data-orientation=\"vertical\"] {\n display: flex;\n gap: var(--prime-sys-spacing-x4);\n}\n\n.list {\n position: relative;\n isolation: isolate;\n display: flex;\n gap: var(--prime-tabs-item-gap);\n box-sizing: border-box;\n}\n\n.root[data-orientation=\"horizontal\"] .list {\n flex-wrap: nowrap;\n align-items: center;\n border-top: var(--prime-sys-unit-1px) solid var(--prime-sys-color-border-subtle);\n border-bottom: var(--prime-sys-unit-1px) solid var(--prime-sys-color-border-subtle);\n}\n\n.root[data-orientation=\"vertical\"] .list {\n flex-direction: column;\n gap: var(--prime-tabs-trigger-gap);\n border-right: var(--prime-sys-unit-1px) solid var(--prime-sys-color-border-subtle);\n}\n\n/* Плавающая полоса активной вкладки (в одном стиле с SegmentedControl). */\n.indicator {\n position: absolute;\n z-index: 0;\n pointer-events: none;\n background: var(--prime-sys-color-action-primaryBackground);\n opacity: 0;\n transition:\n transform var(--prime-sys-motion-medium) var(--prime-sys-motion-standard),\n width var(--prime-sys-motion-medium) var(--prime-sys-motion-standard),\n height var(--prime-sys-motion-medium) var(--prime-sys-motion-standard),\n opacity var(--prime-sys-motion-fast) var(--prime-sys-motion-standard);\n}\n\n.indicator[data-visible=\"true\"] {\n opacity: 1;\n}\n\n.indicatorHorizontal {\n bottom: var(--prime-sys-unit-neg-1px);\n left: 0;\n height: var(--prime-sys-unit-2px);\n width: 0;\n}\n\n.indicatorVertical {\n right: var(--prime-sys-unit-neg-1px);\n top: 0;\n width: var(--prime-sys-unit-2px);\n height: 0;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .indicator {\n transition: none;\n }\n}\n\n.tab {\n position: relative;\n z-index: 1;\n display: inline-flex;\n align-items: center;\n gap: var(--prime-tabs-trigger-gap);\n padding-inline: var(--prime-tabs-trigger-pad-x);\n padding-block: var(--prime-tabs-trigger-pad-y);\n height: var(--prime-tabs-trigger-height);\n box-sizing: border-box;\n font-size: var(--prime-tabs-trigger-text);\n font-family: inherit;\n font-weight: var(--prime-sys-typography-weight-medium);\n line-height: var(--prime-sys-typography-body-lineHeight);\n white-space: nowrap;\n color: var(--prime-sys-color-content-secondary);\n background: none;\n border: none;\n cursor: pointer;\n transition: color var(--prime-sys-motion-fast) var(--prime-sys-motion-standard);\n}\n\n/* Слот иконки — как у Button.Icon (две иконки: слева и справа от подписи). */\n.icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: var(--prime-tabs-icon-size);\n height: var(--prime-tabs-icon-size);\n}\n\n.icon svg {\n width: 100%;\n height: 100%;\n display: block;\n}\n\n/*\n * Явный кегль для всего DOM внутри триггера, кроме дерева слота .icon:\n * иначе Typography / стили превью (.root[data-size]) перебивают с той же специфичностью.\n * Одинаковая жирность у всех вкладок (medium) — без скачка при смене активной; disabled — regular.\n */\n.root .tab *:not(.icon, .icon *) {\n font-size: var(--prime-tabs-trigger-text);\n line-height: var(--prime-sys-typography-body-lineHeight);\n font-weight: var(--prime-sys-typography-weight-medium);\n}\n\n.tab .icon {\n line-height: 0;\n}\n\n/* Опциональная обёртка подписи: сжатие в flex-ряду при длинном тексте. */\n.label {\n min-width: 0;\n flex-shrink: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n/* У активной вкладки первая иконка — primary, остальные слоты остаются subtle. */\n.tab[aria-selected=\"true\"] .icon:first-of-type :global(svg) {\n color: var(--prime-sys-color-action-primaryBackground);\n}\n\n.tab:hover {\n color: var(--prime-sys-color-content-primary);\n}\n\n.tab[aria-selected=\"true\"] {\n color: var(--prime-sys-color-content-primary);\n}\n\n.tab:focus-visible {\n outline: var(--prime-sys-unit-2px) solid var(--prime-sys-color-focus-ring);\n outline-offset: var(--prime-sys-unit-2px);\n border-radius: var(--prime-sys-shape-radius-s);\n}\n\n.tab[data-disabled=\"true\"] {\n color: var(--prime-sys-color-content-disabled);\n cursor: not-allowed;\n font-weight: var(--prime-sys-typography-weight-regular);\n}\n\n.root .tab[data-disabled=\"true\"] *:not(.icon, .icon *) {\n font-weight: var(--prime-sys-typography-weight-regular);\n}\n\n.tab[data-disabled=\"true\"] .icon:first-of-type :global(svg) {\n color: var(--prime-sys-color-content-disabled);\n}\n\n/* Кегль как у триггеров: токен задан на `.root` по `data-size` и наследуется сюда. */\n.panel {\n box-sizing: border-box;\n padding: var(--prime-sys-spacing-x4) 0;\n font-size: var(--prime-tabs-trigger-text);\n line-height: var(--prime-sys-typography-body-lineHeight);\n color: var(--prime-sys-color-content-primary);\n}\n\n/* Вложенная типографика — тот же ярус, что и `size` у Tabs.Root (не фиксированный body). */\n.root .panel\n *:not(a, a *, button, button *, input, textarea, select, code, code *, kbd, kbd *, pre, pre *) {\n font-size: var(--prime-tabs-trigger-text);\n line-height: var(--prime-sys-typography-body-lineHeight);\n}\n\n.panel :where(p, ul, ol) {\n margin: 0;\n}\n","import * as React from \"react\";\nimport { useControllableState } from \"@/hooks/useControllableState\";\nimport { ControlSizeProvider } from \"@/internal/ControlSizeContext\";\nimport { createComponentContext } from \"@/internal/context\";\nimport { cx } from \"@/internal/cx\";\nimport type { TabsSize } from \"@/internal/states\";\n\nimport styles from \"./Tabs.module.css\";\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type TabsOrientation = \"horizontal\" | \"vertical\";\n\nexport type { TabsSize };\n\ntype TabsContextValue = {\n activeValue: string;\n onSelect: (value: string) => void;\n orientation: TabsOrientation;\n rootId: string;\n size: TabsSize;\n};\n\n// ─── Context ──────────────────────────────────────────────────────────────────\n\nconst [TabsProvider, useTabsContext] = createComponentContext<TabsContextValue>(\"Tabs\");\n\n// ─── Root ─────────────────────────────────────────────────────────────────────\n\nexport type TabsRootProps = {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n orientation?: TabsOrientation;\n size?: TabsSize;\n children: React.ReactNode;\n className?: string;\n};\n\nfunction TabsRoot({\n value,\n defaultValue = \"\",\n onValueChange,\n orientation = \"horizontal\",\n size = \"m\",\n children,\n className,\n}: TabsRootProps) {\n const rootId = React.useId();\n\n const [activeValue, setActiveValue] = useControllableState({\n value,\n defaultValue,\n onChange: onValueChange,\n });\n\n const contextValue = React.useMemo<TabsContextValue>(\n () => ({ activeValue, onSelect: setActiveValue, orientation, rootId, size }),\n [activeValue, setActiveValue, orientation, rootId, size],\n );\n\n return (\n <TabsProvider value={contextValue}>\n <div className={cx(styles.root, className)} data-orientation={orientation} data-size={size}>\n {children}\n </div>\n </TabsProvider>\n );\n}\nTabsRoot.displayName = \"TabsRoot\";\n\n// ─── List ─────────────────────────────────────────────────────────────────────\n\nexport type TabsListProps = {\n children: React.ReactNode;\n className?: string;\n};\n\nfunction TabsList({ children, className }: TabsListProps) {\n const { orientation, rootId, activeValue, onSelect, size } = useTabsContext();\n const listRef = React.useRef<HTMLDivElement>(null);\n const [indicator, setIndicator] = React.useState({\n left: 0,\n top: 0,\n width: 0,\n height: 0,\n });\n\n const updateIndicator = React.useCallback(() => {\n const list = listRef.current;\n if (!list) return;\n const active = list.querySelector<HTMLElement>('[role=\"tab\"][aria-selected=\"true\"]');\n if (!active) {\n setIndicator({ left: 0, top: 0, width: 0, height: 0 });\n return;\n }\n setIndicator({\n left: active.offsetLeft,\n top: active.offsetTop,\n width: active.offsetWidth,\n height: active.offsetHeight,\n });\n }, []);\n\n React.useLayoutEffect(() => {\n const list = listRef.current;\n if (!list) return;\n\n updateIndicator();\n\n const mo = new MutationObserver(updateIndicator);\n mo.observe(list, {\n subtree: true,\n childList: true,\n attributes: true,\n attributeFilter: [\"aria-selected\", \"data-disabled\"],\n });\n\n let ro: ResizeObserver | undefined;\n if (typeof ResizeObserver !== \"undefined\") {\n ro = new ResizeObserver(updateIndicator);\n ro.observe(list);\n }\n\n return () => {\n mo.disconnect();\n ro?.disconnect();\n };\n }, [updateIndicator]);\n\n const isHorizontal = orientation === \"horizontal\";\n const hasIndicator = isHorizontal ? indicator.width > 0 : indicator.height > 0;\n\n function handleKeyDown(event: React.KeyboardEvent<HTMLDivElement>) {\n const listEl = event.currentTarget;\n const tabs = Array.from(\n listEl.querySelectorAll<HTMLButtonElement>('[role=\"tab\"]:not([data-disabled=\"true\"])'),\n );\n\n if (tabs.length === 0) return;\n\n const currentIndex = tabs.findIndex(\n (tab) => tab.id === `prime-ui-kit-tab-${rootId}-${activeValue}`,\n );\n\n const isHorizontal = orientation === \"horizontal\";\n const prevKey = isHorizontal ? \"ArrowLeft\" : \"ArrowUp\";\n const nextKey = isHorizontal ? \"ArrowRight\" : \"ArrowDown\";\n\n let targetTab: HTMLButtonElement | null = null;\n\n if (event.key === nextKey) {\n event.preventDefault();\n targetTab = tabs[(currentIndex + 1) % tabs.length];\n } else if (event.key === prevKey) {\n event.preventDefault();\n targetTab = tabs[(currentIndex - 1 + tabs.length) % tabs.length];\n } else if (event.key === \"Home\") {\n event.preventDefault();\n targetTab = tabs[0];\n } else if (event.key === \"End\") {\n event.preventDefault();\n targetTab = tabs[tabs.length - 1];\n }\n\n if (targetTab) {\n const tabValue = targetTab.dataset.value ?? \"\";\n onSelect(tabValue);\n targetTab.focus();\n }\n }\n\n return (\n <div\n ref={listRef}\n role=\"tablist\"\n aria-orientation={orientation}\n data-orientation={orientation}\n className={cx(styles.list, className)}\n onKeyDown={handleKeyDown}\n >\n <ControlSizeProvider value={size}>{children}</ControlSizeProvider>\n <div\n className={cx(\n styles.indicator,\n isHorizontal ? styles.indicatorHorizontal : styles.indicatorVertical,\n )}\n style={\n isHorizontal\n ? {\n transform: `translate3d(${indicator.left}px, 0, 0)`,\n width: `${indicator.width}px`,\n }\n : {\n transform: `translate3d(0, ${indicator.top}px, 0)`,\n height: `${indicator.height}px`,\n }\n }\n aria-hidden=\"true\"\n data-visible={hasIndicator ? \"true\" : \"false\"}\n />\n </div>\n );\n}\nTabsList.displayName = \"TabsList\";\n\n// ─── Tab ──────────────────────────────────────────────────────────────────────\n\nexport type TabsTabProps = {\n value: string;\n disabled?: boolean;\n children: React.ReactNode;\n className?: string;\n};\n\nfunction TabsTab({ value, disabled = false, children, className }: TabsTabProps) {\n const { activeValue, onSelect, rootId } = useTabsContext();\n const isSelected = activeValue === value;\n\n return (\n <button\n role=\"tab\"\n id={`prime-ui-kit-tab-${rootId}-${value}`}\n aria-selected={isSelected}\n aria-controls={`prime-ui-kit-panel-${rootId}-${value}`}\n tabIndex={isSelected ? 0 : -1}\n data-value={value}\n data-disabled={disabled ? \"true\" : undefined}\n disabled={disabled}\n className={cx(styles.tab, className)}\n onClick={() => {\n if (!disabled) onSelect(value);\n }}\n type=\"button\"\n >\n {children}\n </button>\n );\n}\nTabsTab.displayName = \"TabsTab\";\n\n// ─── Icon (слот под глиф, как Button.Icon) ───────────────────────────────────\n\nexport type TabsIconProps = {\n children: React.ReactNode;\n className?: string;\n} & Omit<React.HTMLAttributes<HTMLSpanElement>, \"children\">;\n\nfunction TabsIcon({ children, className, ...rest }: TabsIconProps) {\n return (\n <span className={cx(styles.icon, className)} aria-hidden=\"true\" {...rest}>\n {children}\n </span>\n );\n}\n\nTabsIcon.displayName = \"TabsIcon\";\n\n// ─── Label (подпись в триггере; наследует кегль через правила .root .tab * в CSS) ─\n\nexport type TabsLabelProps = {\n children: React.ReactNode;\n className?: string;\n} & Omit<React.HTMLAttributes<HTMLSpanElement>, \"children\">;\n\nfunction TabsLabel({ children, className, ...rest }: TabsLabelProps) {\n return (\n <span className={cx(styles.label, className)} {...rest}>\n {children}\n </span>\n );\n}\n\nTabsLabel.displayName = \"TabsLabel\";\n\n// ─── Panel ────────────────────────────────────────────────────────────────────\n\nexport type TabsPanelProps = {\n value: string;\n children: React.ReactNode;\n className?: string;\n};\n\nfunction TabsPanel({ value, children, className }: TabsPanelProps) {\n const { activeValue, rootId } = useTabsContext();\n const isActive = activeValue === value;\n\n if (!isActive) return null;\n\n return (\n <div\n role=\"tabpanel\"\n id={`prime-ui-kit-panel-${rootId}-${value}`}\n aria-labelledby={`prime-ui-kit-tab-${rootId}-${value}`}\n className={cx(styles.panel, className)}\n >\n {children}\n </div>\n );\n}\nTabsPanel.displayName = \"TabsPanel\";\n\n// ─── Export ───────────────────────────────────────────────────────────────────\n\nexport const Tabs = {\n Root: TabsRoot,\n List: TabsList,\n Tab: TabsTab,\n Icon: TabsIcon,\n Label: TabsLabel,\n Panel: TabsPanel,\n};\n",".root {\n display: inline-flex;\n align-items: center;\n /* В колонке flex/grid с `align-items: stretch` иначе растягивается на всю ширину родителя */\n width: fit-content;\n max-width: 100%;\n gap: var(--prime-sys-size-tag-m-gap);\n padding-block: var(--prime-sys-size-tag-m-paddingY);\n padding-inline: var(--prime-sys-size-tag-m-paddingX);\n font-size: var(--prime-sys-size-tag-m-text);\n line-height: 1;\n border-radius: var(--prime-sys-size-tag-m-radius);\n background: var(--prime-sys-color-surface-accentSoft);\n color: var(--prime-sys-color-content-primary);\n border: var(--prime-sys-unit-1px) solid var(--prime-sys-color-border-subtle);\n white-space: nowrap;\n box-sizing: border-box;\n}\n\n.root[data-size=\"s\"] {\n gap: var(--prime-sys-size-tag-s-gap);\n padding-block: var(--prime-sys-size-tag-s-paddingY);\n padding-inline: var(--prime-sys-size-tag-s-paddingX);\n font-size: var(--prime-sys-size-tag-s-text);\n border-radius: var(--prime-sys-size-tag-s-radius);\n}\n\n.root[data-size=\"l\"] {\n gap: var(--prime-sys-size-tag-l-gap);\n padding-block: var(--prime-sys-size-tag-l-paddingY);\n padding-inline: var(--prime-sys-size-tag-l-paddingX);\n font-size: var(--prime-sys-size-tag-l-text);\n border-radius: var(--prime-sys-size-tag-l-radius);\n}\n\n.root[data-size=\"xl\"] {\n gap: var(--prime-sys-size-tag-xl-gap);\n padding-block: var(--prime-sys-size-tag-xl-paddingY);\n padding-inline: var(--prime-sys-size-tag-xl-paddingX);\n font-size: var(--prime-sys-size-tag-xl-text);\n border-radius: var(--prime-sys-size-tag-xl-radius);\n}\n\n.root[data-disabled=\"true\"] {\n opacity: 0.5;\n}\n\n.body {\n display: inline-flex;\n align-items: center;\n gap: var(--prime-sys-size-tag-m-gap);\n min-width: 0;\n line-height: 1;\n}\n\n.root[data-size=\"s\"] .body {\n gap: var(--prime-sys-size-tag-s-gap);\n}\n\n.root[data-size=\"l\"] .body {\n gap: var(--prime-sys-size-tag-l-gap);\n}\n\n.root[data-size=\"xl\"] .body {\n gap: var(--prime-sys-size-tag-xl-gap);\n}\n\n.icon {\n display: inline-flex;\n width: var(--prime-sys-size-tag-m-iconSize);\n height: var(--prime-sys-size-tag-m-iconSize);\n flex-shrink: 0;\n color: var(--prime-sys-color-content-secondary);\n}\n\n.root[data-size=\"s\"] .icon {\n width: var(--prime-sys-size-tag-s-iconSize);\n height: var(--prime-sys-size-tag-s-iconSize);\n}\n\n.root[data-size=\"l\"] .icon {\n width: var(--prime-sys-size-tag-l-iconSize);\n height: var(--prime-sys-size-tag-l-iconSize);\n}\n\n.root[data-size=\"xl\"] .icon {\n width: var(--prime-sys-size-tag-xl-iconSize);\n height: var(--prime-sys-size-tag-xl-iconSize);\n}\n\n.icon > * {\n width: 100%;\n height: 100%;\n}\n\n.remove {\n display: inline-flex;\n flex: 0 0 var(--prime-sys-size-tag-m-iconSize);\n align-self: stretch;\n align-items: center;\n justify-content: center;\n width: var(--prime-sys-size-tag-m-iconSize);\n min-width: var(--prime-sys-size-tag-m-iconSize);\n min-height: 0;\n margin: 0;\n padding: 0;\n border: none;\n border-radius: var(--prime-sys-shape-radius-s);\n background: transparent;\n color: var(--prime-sys-color-content-secondary);\n font: inherit;\n line-height: 1;\n cursor: pointer;\n appearance: none;\n -webkit-tap-highlight-color: transparent;\n transition: color var(--prime-sys-motion-medium) var(--prime-sys-motion-standard);\n}\n\n.root[data-size=\"s\"] .remove {\n flex-basis: var(--prime-sys-size-tag-s-iconSize);\n width: var(--prime-sys-size-tag-s-iconSize);\n min-width: var(--prime-sys-size-tag-s-iconSize);\n}\n\n.root[data-size=\"l\"] .remove {\n flex-basis: var(--prime-sys-size-tag-l-iconSize);\n width: var(--prime-sys-size-tag-l-iconSize);\n min-width: var(--prime-sys-size-tag-l-iconSize);\n}\n\n.root[data-size=\"xl\"] .remove {\n flex-basis: var(--prime-sys-size-tag-xl-iconSize);\n width: var(--prime-sys-size-tag-xl-iconSize);\n min-width: var(--prime-sys-size-tag-xl-iconSize);\n}\n\n.remove:hover:not(:disabled) {\n background: transparent;\n color: var(--prime-sys-color-content-primary);\n outline: none;\n box-shadow: none;\n}\n\n.remove:active:not(:disabled) {\n outline: none;\n box-shadow: none;\n}\n\n.remove:focus-visible {\n outline: none;\n box-shadow: var(--prime-sys-elevation-shadow-buttonFocus);\n}\n\n.remove:disabled {\n cursor: not-allowed;\n}\n\n.removeIcon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 62.5%;\n height: 62.5%;\n flex-shrink: 0;\n}\n","import * as React from \"react\";\n\nimport {\n ControlSizeProvider,\n controlSurfaceToInputSize,\n useOptionalControlSize,\n} from \"@/internal/ControlSizeContext\";\nimport { cx } from \"@/internal/cx\";\nimport { toDataAttributes } from \"@/internal/data-attributes\";\n\nimport styles from \"./Tag.module.css\";\n\nexport type TagSize = \"s\" | \"m\" | \"l\" | \"xl\";\n\nexport type TagRootProps = {\n size?: TagSize;\n onRemove?: () => void;\n disabled?: boolean;\n children?: React.ReactNode;\n className?: string;\n} & React.HTMLAttributes<HTMLSpanElement>;\n\nexport type TagIconProps = {\n children: React.ReactNode;\n className?: string;\n};\n\nconst TagRoot = React.forwardRef<HTMLSpanElement, TagRootProps>(\n ({ size: sizeProp, onRemove, disabled, children, className, ...rest }, ref) => {\n const controlSurface = useOptionalControlSize();\n const size =\n sizeProp ?? (controlSurface !== undefined ? controlSurfaceToInputSize(controlSurface) : \"m\");\n\n return (\n <span\n ref={ref}\n className={cx(styles.root, className)}\n aria-disabled={disabled || undefined}\n {...toDataAttributes({\n size,\n disabled: disabled ? true : undefined,\n })}\n {...rest}\n >\n <span className={styles.body}>\n <ControlSizeProvider value={size}>{children}</ControlSizeProvider>\n </span>\n {onRemove ? (\n <button\n type=\"button\"\n className={styles.remove}\n aria-label=\"Remove\"\n onClick={onRemove}\n disabled={disabled}\n >\n <svg className={styles.removeIcon} viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M2 2l8 8M10 2l-8 8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n </button>\n ) : null}\n </span>\n );\n },\n);\n\nTagRoot.displayName = \"TagRoot\";\n\nfunction TagIcon({ children, className }: TagIconProps) {\n return <span className={cx(styles.icon, className)}>{children}</span>;\n}\n\nTagIcon.displayName = \"TagIcon\";\n\nexport const Tag = { Root: TagRoot, Icon: TagIcon };\n",".field {\n --prime-textarea-body-size: var(--prime-sys-size-control-m-text);\n --prime-textarea-line-height: var(--prime-sys-typography-body-lineHeight);\n --prime-textarea-min-height: var(--prime-sys-size-textarea-m-minHeight);\n --prime-textarea-stack-gap: var(--prime-sys-size-control-m-gap);\n box-sizing: border-box;\n width: 100%;\n min-width: 0;\n display: grid;\n gap: var(--prime-textarea-stack-gap);\n}\n\n.field[data-size=\"s\"] {\n --prime-textarea-body-size: var(--prime-sys-size-control-s-text);\n --prime-textarea-min-height: var(--prime-sys-size-textarea-s-minHeight);\n --prime-textarea-stack-gap: var(--prime-sys-size-control-s-gap);\n}\n\n.field[data-size=\"l\"] {\n --prime-textarea-body-size: var(--prime-sys-size-control-l-text);\n --prime-textarea-min-height: var(--prime-sys-size-textarea-l-minHeight);\n --prime-textarea-stack-gap: var(--prime-sys-size-control-l-gap);\n}\n\n.field[data-size=\"xl\"] {\n --prime-textarea-body-size: var(--prime-sys-size-control-xl-text);\n --prime-textarea-min-height: var(--prime-sys-size-textarea-xl-minHeight);\n --prime-textarea-stack-gap: var(--prime-sys-size-control-xl-gap);\n}\n\n.control {\n position: relative;\n box-sizing: border-box;\n width: 100%;\n min-width: 0;\n display: flex;\n flex-direction: column;\n cursor: text;\n border: var(--prime-sys-border-width-control) solid var(--prime-sys-color-field-border);\n background: var(--prime-sys-color-field-bg);\n color: var(--prime-sys-color-field-text);\n box-shadow: var(--prime-sys-elevation-shadow-surface);\n transition:\n border-color var(--prime-sys-motion-medium) var(--prime-sys-motion-standard),\n box-shadow var(--prime-sys-motion-medium) var(--prime-sys-motion-standard),\n background-color var(--prime-sys-motion-medium) var(--prime-sys-motion-standard);\n}\n\n.control[data-size=\"s\"] {\n min-height: var(--prime-sys-size-textarea-s-minHeight);\n border-radius: var(--prime-sys-size-textarea-s-radius);\n padding: var(--prime-sys-size-textarea-s-paddingX);\n}\n\n.control[data-size=\"m\"] {\n min-height: var(--prime-sys-size-textarea-m-minHeight);\n border-radius: var(--prime-sys-size-textarea-m-radius);\n padding: var(--prime-sys-size-textarea-m-paddingX);\n}\n\n.control[data-size=\"l\"] {\n min-height: var(--prime-sys-size-textarea-l-minHeight);\n border-radius: var(--prime-sys-size-textarea-l-radius);\n padding: var(--prime-sys-size-textarea-l-paddingX);\n}\n\n.control[data-size=\"xl\"] {\n min-height: var(--prime-sys-size-textarea-xl-minHeight);\n border-radius: var(--prime-sys-size-textarea-xl-radius);\n padding: var(--prime-sys-size-textarea-xl-paddingX);\n}\n\n.control:hover {\n border-color: var(--prime-sys-color-field-borderHover);\n background: var(--prime-sys-color-action-neutralBackgroundHover);\n box-shadow: none;\n}\n\n.control:focus-within {\n border-color: var(--prime-sys-color-field-borderFocus);\n box-shadow: var(--prime-sys-elevation-shadow-buttonFocus);\n}\n\n.control[data-invalid=\"true\"] {\n border-color: var(--prime-sys-color-field-borderError);\n}\n\n.control[data-invalid=\"true\"]:focus-within {\n box-shadow: var(--prime-sys-elevation-shadow-errorFocus);\n}\n\n.control[data-disabled=\"true\"] {\n background: var(--prime-sys-color-surface-accentSoft);\n border-color: transparent;\n box-shadow: none;\n}\n\n.controlStack {\n flex: 1 1 auto;\n min-height: 0;\n min-width: 0;\n display: flex;\n flex-direction: column;\n}\n\n.textareaRegion {\n flex: 1 1 auto;\n min-height: 0;\n min-width: 0;\n display: flex;\n flex-direction: column;\n}\n\n.controlFooter {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--prime-sys-spacing-x1);\n padding-top: var(--prime-sys-spacing-x1);\n}\n\n/* ── Auto-resize wrapper (CSS grid trick) ── */\n\n.autoResize {\n display: grid;\n flex: 1 1 auto;\n min-height: 0;\n min-width: 0;\n width: 100%;\n}\n\n.autoResize::after {\n content: attr(data-value) \" \";\n white-space: pre-wrap;\n overflow-wrap: break-word;\n word-break: break-word;\n visibility: hidden;\n grid-area: 1 / 1 / 2 / 2;\n font: inherit;\n min-width: 0;\n min-height: var(--prime-textarea-min-height);\n /* padding/border must match .textarea exactly */\n padding: 0;\n border: 0;\n}\n\n/* ── Base textarea ── */\n\n.textarea {\n -webkit-appearance: none;\n appearance: none;\n resize: vertical;\n width: 100%;\n min-width: 0;\n max-width: 100%;\n box-sizing: border-box;\n border: 0;\n background: transparent;\n color: inherit;\n outline: none;\n box-shadow: none;\n font-size: var(--prime-textarea-body-size);\n line-height: var(--prime-textarea-line-height);\n /* Не наследовать nowrap от предков; переносы в value и мягкий перенос длинных строк */\n white-space: pre-wrap;\n overflow-wrap: break-word;\n word-break: break-word;\n}\n\n.textarea:focus,\n.textarea:focus-visible {\n outline: none;\n box-shadow: none;\n}\n\n/* Applied to textarea when autoResize=true — overrides resize/overflow */\n.textareaAutoResize {\n grid-area: 1 / 1 / 2 / 2;\n resize: none;\n overflow: hidden;\n}\n\n.textarea:not(.textareaAutoResize) {\n flex: 1 1 auto;\n min-height: var(--prime-textarea-min-height);\n}\n\n.textarea:disabled {\n color: var(--prime-sys-color-content-disabled);\n}\n\n.textarea::placeholder {\n color: var(--prime-sys-color-field-placeholder);\n transition: color var(--prime-sys-motion-medium) var(--prime-sys-motion-standard);\n}\n\n.control:hover .textarea::placeholder,\n.control:focus-within .textarea::placeholder {\n color: var(--prime-sys-color-content-secondary);\n}\n\n/* ── Hint / error (типографика — Hint.Root) ── */\n\n.hintSlot {\n width: 100%;\n max-width: 100%;\n}\n\n/* ── Char counter (компактно, внутри поля — как AlignUI) ── */\n\n.charCounter {\n font-size: var(--prime-textarea-body-size);\n line-height: var(--prime-textarea-line-height);\n font-variant-numeric: tabular-nums;\n color: var(--prime-sys-color-content-muted);\n letter-spacing: var(--prime-sys-typography-tracking-normal);\n}\n\n.control[data-disabled=\"true\"] .charCounter {\n color: var(--prime-sys-color-content-disabled);\n}\n\n.charCounter[data-overflow=\"true\"] {\n color: var(--prime-sys-color-content-danger);\n}\n","import * as React from \"react\";\nimport { Hint } from \"@/components/hint/Hint\";\nimport { ControlSizeProvider } from \"@/internal/ControlSizeContext\";\nimport { createComponentContext } from \"@/internal/context\";\nimport { cx } from \"@/internal/cx\";\nimport { toDataAttributes } from \"@/internal/data-attributes\";\nimport type { HintSize, TextareaSize, TextareaVariant } from \"@/internal/states\";\n\nimport styles from \"./Textarea.module.css\";\n\n// ─── Context ──────────────────────────────────────────────────────────────────\n\ntype TextareaContextValue = {\n hintId: string;\n errorId: string;\n size: TextareaSize;\n disabled: boolean;\n readOnly: boolean;\n registerHint: () => void;\n unregisterHint: () => void;\n registerError: () => void;\n unregisterError: () => void;\n};\n\nconst [TextareaProvider, useTextareaContext] =\n createComponentContext<TextareaContextValue>(\"Textarea\");\n\n// ─── Char counter (объявлен до Root для partition по child.type) ──────────────\n\nexport type TextareaCharCounterProps = {\n current: number;\n max: number;\n};\n\nfunction TextareaCharCounter({ current, max }: TextareaCharCounterProps) {\n const overflow = current > max;\n return (\n <span\n className={styles.charCounter}\n data-overflow={overflow ? \"true\" : undefined}\n aria-live=\"polite\"\n >\n {current}/{max}\n </span>\n );\n}\n\nTextareaCharCounter.displayName = \"Textarea.CharCounter\";\n\nfunction partitionTextareaChildren(children: React.ReactNode) {\n const counters: React.ReactElement[] = [];\n const rest: React.ReactNode[] = [];\n\n React.Children.forEach(children, (child) => {\n if (React.isValidElement(child) && child.type === TextareaCharCounter) {\n counters.push(child);\n } else if (child != null && child !== false) {\n rest.push(child);\n }\n });\n\n return { counters, rest };\n}\n\n// ─── Root ────────────────────────────────────────────────────────────────────\n\nexport type TextareaRootProps = Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, \"size\"> & {\n variant?: TextareaVariant;\n size?: TextareaSize;\n autoResize?: boolean;\n};\n\nconst TextareaRoot = React.forwardRef<HTMLTextAreaElement, TextareaRootProps>(\n (\n {\n id,\n className,\n variant = \"default\",\n size = \"m\",\n disabled,\n readOnly,\n autoResize = true,\n \"aria-describedby\": ariaDescribedBy,\n \"aria-invalid\": ariaInvalid,\n defaultValue,\n value,\n onInput,\n children,\n ...rest\n },\n ref,\n ) => {\n const rawId = React.useId();\n const inputId = id ?? rawId;\n const hintId = `${inputId}-hint`;\n const errorId = `${inputId}-error`;\n\n const [hasHint, setHasHint] = React.useState(false);\n const [hasError, setHasError] = React.useState(false);\n\n const invalid = variant === \"error\" || hasError;\n const resolvedAriaInvalid = ariaInvalid ?? (invalid || undefined);\n\n const parts = [\n ariaDescribedBy,\n hasHint ? hintId : undefined,\n hasError ? errorId : undefined,\n ].filter(Boolean);\n const describedBy = parts.length > 0 ? parts.join(\" \") : undefined;\n\n const registerHint = React.useCallback(() => setHasHint(true), []);\n const unregisterHint = React.useCallback(() => setHasHint(false), []);\n const registerError = React.useCallback(() => setHasError(true), []);\n const unregisterError = React.useCallback(() => setHasError(false), []);\n\n const wrapperRef = React.useRef<HTMLDivElement>(null);\n const { counters: counterChildren, rest: otherChildren } = partitionTextareaChildren(children);\n const showFooter = counterChildren.length > 0;\n\n // Sync initial value from DOM — handles both controlled and uncontrolled\n React.useLayoutEffect(() => {\n if (!autoResize || !wrapperRef.current) return;\n const textarea = wrapperRef.current.querySelector(\"textarea\");\n if (textarea) {\n wrapperRef.current.dataset.value = textarea.value;\n }\n }, [autoResize]);\n\n // Sync controlled value changes that happen outside of user input\n React.useEffect(() => {\n if (!autoResize || !wrapperRef.current || typeof value !== \"string\") return;\n wrapperRef.current.dataset.value = value;\n }, [autoResize, value]);\n\n const handleInput = React.useCallback<\n NonNullable<React.TextareaHTMLAttributes<HTMLTextAreaElement>[\"onInput\"]>\n >(\n (e) => {\n if (autoResize && wrapperRef.current) {\n wrapperRef.current.dataset.value = (e.currentTarget as HTMLTextAreaElement).value;\n }\n onInput?.(e);\n },\n [autoResize, onInput],\n );\n\n const ctxValue = React.useMemo(\n () => ({\n hintId,\n errorId,\n size,\n disabled: Boolean(disabled),\n readOnly: Boolean(readOnly),\n registerHint,\n unregisterHint,\n registerError,\n unregisterError,\n }),\n [\n hintId,\n errorId,\n size,\n disabled,\n readOnly,\n registerHint,\n unregisterHint,\n registerError,\n unregisterError,\n ],\n );\n\n const textareaEl = (\n <textarea\n ref={ref}\n id={inputId}\n className={cx(styles.textarea, autoResize && styles.textareaAutoResize)}\n disabled={disabled}\n readOnly={readOnly}\n aria-invalid={resolvedAriaInvalid}\n aria-describedby={describedBy}\n defaultValue={defaultValue}\n value={value}\n onInput={handleInput}\n {...rest}\n />\n );\n\n const textareaBlock = autoResize ? (\n <div ref={wrapperRef} className={styles.autoResize}>\n {textareaEl}\n </div>\n ) : (\n textareaEl\n );\n\n return (\n <TextareaProvider value={ctxValue}>\n <ControlSizeProvider value={size}>\n <div className={styles.field} {...toDataAttributes({ size })}>\n <label\n htmlFor={inputId}\n className={cx(styles.control, className)}\n {...toDataAttributes({\n invalid,\n disabled: Boolean(disabled),\n readonly: Boolean(readOnly),\n size,\n })}\n >\n <div className={styles.controlStack}>\n <div className={styles.textareaRegion}>{textareaBlock}</div>\n {showFooter ? <div className={styles.controlFooter}>{counterChildren}</div> : null}\n </div>\n </label>\n {otherChildren}\n </div>\n </ControlSizeProvider>\n </TextareaProvider>\n );\n },\n);\n\nTextareaRoot.displayName = \"Textarea.Root\";\n\n// ─── Hint ────────────────────────────────────────────────────────────────────\n\nexport type TextareaHintProps = {\n children: React.ReactNode;\n className?: string;\n} & Omit<React.HTMLAttributes<HTMLParagraphElement>, \"id\">;\n\nfunction TextareaHint({ children, className, ...rest }: TextareaHintProps) {\n const { hintId, registerHint, unregisterHint, size, disabled, readOnly } = useTextareaContext();\n\n React.useLayoutEffect(() => {\n registerHint();\n return () => {\n unregisterHint();\n };\n }, [registerHint, unregisterHint]);\n\n return (\n <Hint.Root\n id={hintId}\n size={size as HintSize}\n variant={disabled || readOnly ? \"disabled\" : \"default\"}\n className={cx(styles.hintSlot, className)}\n {...rest}\n >\n {children}\n </Hint.Root>\n );\n}\n\nTextareaHint.displayName = \"Textarea.Hint\";\n\n// ─── Error ───────────────────────────────────────────────────────────────────\n\nexport type TextareaErrorProps = {\n children: React.ReactNode;\n className?: string;\n} & Omit<React.HTMLAttributes<HTMLParagraphElement>, \"id\">;\n\nfunction TextareaError({ children, className, ...rest }: TextareaErrorProps) {\n const { errorId, registerError, unregisterError, size } = useTextareaContext();\n\n React.useLayoutEffect(() => {\n registerError();\n return () => {\n unregisterError();\n };\n }, [registerError, unregisterError]);\n\n return (\n <Hint.Root\n id={errorId}\n size={size as HintSize}\n variant=\"error\"\n className={cx(styles.hintSlot, className)}\n {...rest}\n >\n {children}\n </Hint.Root>\n );\n}\n\nTextareaError.displayName = \"Textarea.Error\";\n\n// ─── Namespace ───────────────────────────────────────────────────────────────\n\nexport const Textarea = {\n Root: TextareaRoot,\n CharCounter: TextareaCharCounter,\n Hint: TextareaHint,\n Error: TextareaError,\n};\n","export const interactionStates = [\n \"default\",\n \"hover\",\n \"active\",\n \"focus\",\n \"focus-visible\",\n \"disabled\",\n] as const;\n\nexport const selectionStates = [\"selected\", \"checked\", \"indeterminate\"] as const;\n\nexport const validationStates = [\"valid\", \"invalid\", \"readonly\", \"required\"] as const;\n\nexport const asyncStates = [\"idle\", \"loading\", \"success\", \"error\"] as const;\n\nexport const disclosureStates = [\"open\", \"closed\"] as const;\n\nexport const componentVariants = {\n button: [\"primary\", \"neutral\", \"error\"] as const,\n input: [\"default\", \"error\"] as const,\n textarea: [\"default\", \"error\"] as const,\n checkbox: [\"default\", \"error\"] as const,\n radio: [\"default\", \"error\"] as const,\n switch: [\"default\", \"error\"] as const,\n select: [\"default\", \"error\"] as const,\n modal: [\"default\"] as const,\n} as const;\n\nexport const componentSizes = {\n buttonGroup: [\"s\", \"m\", \"l\", \"xl\"] as const,\n button: [\"s\", \"m\", \"l\", \"xl\"] as const,\n input: [\"s\", \"m\", \"l\", \"xl\"] as const,\n textarea: [\"s\", \"m\", \"l\", \"xl\"] as const,\n checkbox: [\"s\", \"m\", \"l\", \"xl\"] as const,\n radio: [\"s\", \"m\", \"l\", \"xl\"] as const,\n switch: [\"s\", \"m\", \"l\", \"xl\"] as const,\n select: [\"s\", \"m\", \"l\", \"xl\"] as const,\n fileUpload: [\"s\", \"m\", \"l\", \"xl\"] as const,\n linkButton: [\"s\", \"m\", \"l\", \"xl\"] as const,\n breadcrumb: [\"s\", \"m\", \"l\", \"xl\"] as const,\n divider: [\"s\", \"m\", \"l\", \"xl\"] as const,\n label: [\"s\", \"m\", \"l\", \"xl\"] as const,\n modal: [\"s\", \"m\", \"l\", \"xl\"] as const,\n hint: [\"s\", \"m\", \"l\", \"xl\"] as const,\n alert: [\"s\", \"m\", \"l\", \"xl\"] as const,\n banner: [\"s\", \"m\", \"l\", \"xl\"] as const,\n digitInput: [\"s\", \"m\", \"l\", \"xl\"] as const,\n kbd: [\"s\", \"m\", \"l\", \"xl\"] as const,\n slider: [\"s\", \"m\", \"l\", \"xl\"] as const,\n tabs: [\"s\", \"m\", \"l\", \"xl\"] as const,\n pagination: [\"s\", \"m\", \"l\", \"xl\"] as const,\n stepper: [\"s\", \"m\", \"l\", \"xl\"] as const,\n accordion: [\"s\", \"m\", \"l\", \"xl\"] as const,\n dropdown: [\"s\", \"m\", \"l\", \"xl\"] as const,\n progressBar: [\"s\", \"m\", \"l\", \"xl\"] as const,\n sidebar: [\"s\", \"m\", \"l\", \"xl\"] as const,\n drawer: [\"s\", \"m\", \"l\", \"xl\"] as const,\n dataTable: [\"s\", \"m\", \"l\", \"xl\"] as const,\n} as const;\n\nexport const buttonModes = [\"filled\", \"stroke\", \"lighter\", \"ghost\", \"fancy\"] as const;\n\nexport type InteractionState = (typeof interactionStates)[number];\nexport type SelectionState = (typeof selectionStates)[number];\nexport type ValidationState = (typeof validationStates)[number];\nexport type AsyncState = (typeof asyncStates)[number];\nexport type DisclosureState = (typeof disclosureStates)[number];\n\nexport type ButtonVariant = (typeof componentVariants.button)[number];\nexport type InputVariant = (typeof componentVariants.input)[number];\nexport type TextareaVariant = (typeof componentVariants.textarea)[number];\nexport type CheckboxVariant = (typeof componentVariants.checkbox)[number];\nexport type RadioVariant = (typeof componentVariants.radio)[number];\nexport type SwitchVariant = (typeof componentVariants.switch)[number];\nexport type SelectVariant = (typeof componentVariants.select)[number];\nexport type ModalVariant = (typeof componentVariants.modal)[number];\n\nexport type ButtonGroupSize = (typeof componentSizes.buttonGroup)[number];\nexport type ButtonSize = (typeof componentSizes.button)[number];\nexport type InputSize = (typeof componentSizes.input)[number];\nexport type TextareaSize = (typeof componentSizes.textarea)[number];\nexport type CheckboxSize = (typeof componentSizes.checkbox)[number];\nexport type RadioSize = (typeof componentSizes.radio)[number];\nexport type SwitchSize = (typeof componentSizes.switch)[number];\nexport type SelectSize = (typeof componentSizes.select)[number];\nexport type FileUploadSize = (typeof componentSizes.fileUpload)[number];\nexport type LinkButtonSize = (typeof componentSizes.linkButton)[number];\nexport type BreadcrumbSize = (typeof componentSizes.breadcrumb)[number];\nexport type DividerSize = (typeof componentSizes.divider)[number];\nexport type LabelSize = (typeof componentSizes.label)[number];\nexport type ModalSize = (typeof componentSizes.modal)[number];\nexport type HintSize = (typeof componentSizes.hint)[number];\nexport type AlertSize = (typeof componentSizes.alert)[number];\nexport type BannerSize = (typeof componentSizes.banner)[number];\nexport type DigitInputSize = (typeof componentSizes.digitInput)[number];\nexport type KbdSize = (typeof componentSizes.kbd)[number];\nexport type SliderSize = (typeof componentSizes.slider)[number];\nexport type TabsSize = (typeof componentSizes.tabs)[number];\nexport type PaginationSize = (typeof componentSizes.pagination)[number];\nexport type StepperSize = (typeof componentSizes.stepper)[number];\nexport type AccordionSize = (typeof componentSizes.accordion)[number];\nexport type DropdownSize = (typeof componentSizes.dropdown)[number];\nexport type ProgressBarSize = (typeof componentSizes.progressBar)[number];\nexport type SidebarSize = (typeof componentSizes.sidebar)[number];\nexport type DrawerSize = (typeof componentSizes.drawer)[number];\nexport type DataTableSize = (typeof componentSizes.dataTable)[number];\nexport type ButtonMode = (typeof buttonModes)[number];\n"]}