@zelelo/iskra-ui 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +3 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +12 -7
- package/dist/index.css.map +1 -1
- package/dist/index.d.cts +4 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/utils.ts","../src/components/Accordion/context.ts","../src/components/Accordion/hooks/useAccordionState.ts","../src/components/Accordion/AccordionProvider/AccordionProvider.tsx","../src/components/Accordion/Accordion.module.css","../src/components/Accordion/Accordion.tsx","../src/components/Accordion/hooks/useAccordionItem.ts","../src/components/Accordion/components/AccordionContent.tsx","../src/components/Accordion/AccordionProvider/AccordionItemProvider.tsx","../src/components/Accordion/hooks/useAccordion.ts","../src/components/Accordion/components/AccordionItem.tsx","../src/components/Accordion/components/AccordionTrigger.tsx","../src/components/Alert/Alert.tsx","../src/components/Alert/Alert.module.css","../src/components/Badge/Badge.module.css","../src/components/Badge/Badge.tsx","../src/components/Button/Button.tsx","../src/components/Button/Button.module.css","../src/components/Checkbox/Checkbox.tsx","../src/components/Checkbox/Checkbox.module.css","../src/components/Input/Input.tsx","../src/components/Input/Input.module.css","../src/components/Modal/Modal.tsx","../src/components/Modal/Modal.module.css","../src/components/Radio/Radio.tsx","../src/components/RadioGroup/RadioGroupProvider/context.ts","../src/components/Radio/Radio.module.css","../src/components/RadioGroup/RadioGroup.tsx","../src/components/RadioGroup/RadioGroupProvider/RadioGroupProvider.tsx","../src/components/RadioGroup/RadioGroup.module.css","../src/components/Skeleton/Skeleton.module.css","../src/components/Skeleton/Skeleton.tsx","../src/components/Spinner/constants.ts","../src/components/Spinner/Spinner.module.css","../src/components/Spinner/Spinner.tsx","../src/components/Switch/Switch.tsx","../src/components/Switch/Switch.module.css","../src/components/Tabs/Tabs.tsx","../src/components/Tabs/Tabs.module.css","../src/components/Toast/Toast.tsx","../src/components/Toast/Toast.module.css","../src/components/Toast/ToastProvider/ToastProvider.tsx","../src/components/Toast/ToastProvider/ToastContainer.module.css","../src/components/Toast/ToastProvider/hook/useToast.ts","../src/components/Tooltip/Tooltip.tsx","../src/components/Tooltip/Tooltip.module.css"],"sourcesContent":["/**\n * Склеивает CSS-классы в одну строку через пробел, отбрасывая пустые значения\n * (`false`, `undefined`, `\"\"`)\n *\n * @example\n * cx(styles.button, isActive && styles.active, className);\n * // isActive = false, className = undefined → \"Button_button\"\n */\nexport const cx = (...classes: Array<string | false | undefined>): string =>\n classes.filter(Boolean).join(\" \");\n\n/** Размер для CSS-свойства: число (в пикселях) или готовая CSS-строка. */\nexport type TCssSize = number | string;\n\n/**\n * Приводит размер к значению для inline-стиля: число превращает в пиксели,\n * строку возвращает как есть, `undefined` пропускает (React тогда не выставит свойство).\n *\n * @example\n * toCss(200); // \"200px\"\n * toCss(\"50%\"); // \"50%\"\n * toCss(); // undefined\n */\nexport const toCss = (value?: TCssSize): string | undefined =>\n typeof value === \"number\" ? `${value}px` : value;\n","import { createContext } from \"react\";\n\nexport type TAccordionContextValue = {\n openValues: string[];\n toggleItem: (itemValue: string) => void;\n disabled?: boolean;\n};\n\nexport const AccordionContext = createContext<TAccordionContextValue | null>(null);\n\nexport type TAccordionItemContextValue = {\n value: string;\n isOpen: boolean;\n baseId: string;\n disabled?: boolean;\n};\n\nexport const AccordionItemContext = createContext<TAccordionItemContextValue | null>(null);\n","import { useState } from \"react\";\n\ninterface IUseAccordionStateParams {\n type: \"single\" | \"multiple\";\n defaultValue?: string[];\n value?: string[];\n onValueChange?: (value: string[]) => void;\n}\n\nexport interface IUseAccordionStateReturn {\n openValues: string[];\n toggleItem: (itemValue: string) => void;\n}\n\nexport const useAccordionState = ({\n type,\n defaultValue = [],\n value: controlledValue,\n onValueChange,\n}: IUseAccordionStateParams): IUseAccordionStateReturn => {\n const [uncontrolledValue, setUncontrolledValue] = useState<string[]>(defaultValue);\n const isControlled = controlledValue !== undefined;\n const openValues = isControlled ? controlledValue : uncontrolledValue;\n\n const toggleItem = (itemValue: string) => {\n const isCurrentlyOpen = openValues.includes(itemValue);\n\n let nextValue: string[];\n\n if (type === \"single\") {\n nextValue = isCurrentlyOpen ? [] : [itemValue];\n } else {\n nextValue = isCurrentlyOpen\n ? openValues.filter((v) => v !== itemValue)\n : [...openValues, itemValue];\n }\n\n if (!isControlled) {\n setUncontrolledValue(nextValue);\n }\n onValueChange?.(nextValue);\n };\n\n return { openValues, toggleItem };\n};\n","import type { ReactNode } from \"react\";\n\nimport { AccordionContext } from \"../context\";\nimport { useAccordionState } from \"../hooks/useAccordionState\";\n\ninterface IAccordionProviderProps {\n type?: \"single\" | \"multiple\";\n defaultValue?: string[];\n value?: string[];\n onValueChange?: (value: string[]) => void;\n disabled?: boolean;\n children: ReactNode;\n}\n\nexport const AccordionProvider = ({\n type = \"single\",\n defaultValue,\n value,\n onValueChange,\n disabled,\n children,\n}: IAccordionProviderProps): ReactNode => {\n const { openValues, toggleItem } = useAccordionState({\n type,\n defaultValue,\n value,\n onValueChange,\n });\n\n return (\n <AccordionContext.Provider value={{ openValues, toggleItem, disabled }}>\n {children}\n </AccordionContext.Provider>\n );\n};\n","@import \"../../styles/tokens.css\";\n\n.accordion {\n display: flex;\n flex-direction: column;\n width: 100%;\n border-radius: var(--uikit-radius-md);\n border: 1px solid var(--uikit-color-border);\n overflow: hidden;\n}\n\n.item {\n border-bottom: 1px solid var(--uikit-color-border);\n}\n\n.item:last-child {\n border-bottom: none;\n}\n\n.item.disabled {\n opacity: 0.5;\n}\n\n.header {\n margin: 0;\n}\n\n.trigger {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n padding: 16px;\n background-color: transparent;\n border: none;\n font-family: inherit;\n font-size: var(--uikit-font-size-md);\n font-weight: var(--uikit-font-weight-medium);\n color: var(--uikit-color-text);\n cursor: pointer;\n text-align: left;\n transition: background-color 0.2s ease;\n}\n\n.trigger:hover:not(:disabled) {\n background-color: var(--uikit-color-surface-hover);\n}\n\n.trigger:focus-visible {\n outline: 2px solid var(--uikit-color-accent);\n outline-offset: -2px;\n}\n\n.trigger:disabled {\n cursor: not-allowed;\n}\n\n.icon {\n transition: transform 0.2s ease;\n flex-shrink: 0;\n}\n\n.iconOpen {\n transform: rotate(180deg);\n}\n\n.contentWrapper {\n display: grid;\n grid-template-rows: 0fr;\n transition: grid-template-rows 0.3s ease-out;\n}\n\n.contentWrapperOpen {\n grid-template-rows: 1fr;\n}\n\n.contentInner {\n overflow: hidden;\n}\n\n.contentInner > * {\n padding: 0 16px 16px 16px;\n margin: 0;\n font-size: var(--uikit-font-size-sm);\n color: var(--uikit-color-text-muted);\n line-height: 1.5;\n}\n","import type { ReactNode } from \"react\";\n\nimport { cx } from \"src/utils/utils\";\n\nimport { AccordionProvider } from \"./AccordionProvider/AccordionProvider\";\n\nimport type { IAccordionProps } from \"./types\";\n\nimport styles from \"./Accordion.module.css\";\n\nexport const Accordion = ({\n type = \"single\",\n defaultValue,\n value,\n onValueChange,\n disabled,\n className,\n children,\n ...props\n}: IAccordionProps): ReactNode => (\n <AccordionProvider\n type={type}\n defaultValue={defaultValue}\n value={value}\n onValueChange={onValueChange}\n disabled={disabled}\n >\n <div className={cx(styles.accordion, className)} {...props}>\n {children}\n </div>\n </AccordionProvider>\n);\n\nAccordion.displayName = \"Accordion\";\n","import { useContext } from \"react\";\n\nimport { AccordionItemContext } from \"../context\";\n\nimport type { TAccordionItemContextValue } from \"../context\";\n\nexport const useAccordionItem = (): TAccordionItemContextValue => {\n const context = useContext(AccordionItemContext);\n if (!context) {\n throw new Error(\"useAccordionItem использован вне AccordionItem\");\n }\n return context;\n};\n","import type { ReactNode } from \"react\";\n\nimport { cx } from \"src/utils/utils\";\n\nimport { useAccordionItem } from \"../hooks/useAccordionItem\";\n\nimport type { IAccordionContentProps } from \"../types\";\n\nimport styles from \"../Accordion.module.css\";\n\nexport const AccordionContent = ({\n className,\n children,\n ...props\n}: IAccordionContentProps): ReactNode => {\n const { isOpen, baseId } = useAccordionItem();\n\n return (\n <div\n id={`content-${baseId}`}\n role=\"region\"\n aria-labelledby={`trigger-${baseId}`}\n className={cx(styles.contentWrapper, isOpen && styles.contentWrapperOpen, className)}\n {...props}\n >\n <div className={styles.contentInner}>{children}</div>\n </div>\n );\n};\n\nAccordionContent.displayName = \"AccordionContent\";\n","import { type ReactNode, useId } from \"react\";\n\nimport { AccordionItemContext } from \"../context\";\nimport { useAccordion } from \"../hooks/useAccordion\";\n\ninterface IAccordionItemProviderProps {\n value: string;\n disabled?: boolean;\n children: ReactNode;\n}\n\nexport const AccordionItemProvider = ({\n value,\n disabled: itemDisabled,\n children,\n}: IAccordionItemProviderProps): ReactNode => {\n const { openValues, disabled: rootDisabled } = useAccordion();\n\n const isOpen = openValues.includes(value);\n const disabled = rootDisabled || itemDisabled;\n\n const baseId = useId();\n\n return (\n <AccordionItemContext.Provider value={{ value, isOpen, baseId, disabled }}>\n {children}\n </AccordionItemContext.Provider>\n );\n};\n","import { useContext } from \"react\";\n\nimport { AccordionContext } from \"../context\";\n\nimport type { TAccordionContextValue } from \"../context\";\n\nexport const useAccordion = (): TAccordionContextValue => {\n const context = useContext(AccordionContext);\n if (!context) {\n throw new Error(\"useAccordion использован вне Accordion\");\n }\n return context;\n};\n","import type { ReactNode } from \"react\";\n\nimport { cx } from \"src/utils/utils\";\n\nimport { AccordionItemProvider } from \"../AccordionProvider/AccordionItemProvider\";\n\nimport type { IAccordionItemProps } from \"../types\";\n\nimport styles from \"../Accordion.module.css\";\n\nexport const AccordionItem = ({\n value,\n disabled,\n className,\n children,\n ...props\n}: IAccordionItemProps): ReactNode => (\n <AccordionItemProvider value={value} disabled={disabled}>\n <div className={cx(styles.item, disabled && styles.disabled, className)} {...props}>\n {children}\n </div>\n </AccordionItemProvider>\n);\n","import type { ReactNode } from \"react\";\n\nimport { cx } from \"src/utils/utils\";\n\nimport { useAccordion } from \"../hooks/useAccordion\";\nimport { useAccordionItem } from \"../hooks/useAccordionItem\";\n\nimport type { IAccordionTriggerProps } from \"../types\";\n\nimport styles from \"../Accordion.module.css\";\n\nexport const AccordionTrigger = ({\n className,\n children,\n disabled: triggerDisabled,\n ...props\n}: IAccordionTriggerProps): ReactNode => {\n const { toggleItem } = useAccordion();\n const { value, isOpen, baseId, disabled } = useAccordionItem();\n\n const isDisabled = disabled || triggerDisabled;\n\n return (\n <h3 className={styles.header}>\n <button\n type=\"button\"\n id={`trigger-${baseId}`}\n aria-expanded={isOpen}\n aria-controls={`content-${baseId}`}\n disabled={isDisabled}\n className={cx(styles.trigger, className)}\n onClick={() => toggleItem(value)}\n {...props}\n >\n {children}\n <svg\n className={cx(styles.icon, isOpen && styles.iconOpen)}\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M4 6L8 10L12 6\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n </h3>\n );\n};\n\nAccordionTrigger.displayName = \"AccordionTrigger\";\n","import type { ReactNode } from \"react\";\nimport { useState } from \"react\";\n\nimport { cx } from \"src/utils/utils\";\n\nimport type { IAlertProps } from \"./types\";\n\nimport styles from \"./Alert.module.css\";\n\nexport const Alert = ({\n variant = \"info\",\n title,\n closable = false,\n onClose,\n children,\n className,\n ...props\n}: IAlertProps): ReactNode => {\n const [visible, setVisible] = useState(true);\n\n if (!visible) {\n return null;\n }\n\n const handleClose = () => {\n setVisible(false);\n onClose?.();\n };\n\n const classes = cx(styles.alert, styles[variant], className);\n\n return (\n <div className={classes} role=\"alert\" {...props}>\n <div className={styles.content}>\n {title && <div className={styles.title}>{title}</div>}\n {title && <div className={styles.description}>{children}</div>}\n </div>\n\n {closable && (\n <button\n type=\"button\"\n className={styles.closeButton}\n onClick={handleClose}\n aria-label=\"Close alert\"\n >\n ×\n </button>\n )}\n </div>\n );\n};\n\nAlert.displayName = \"Alert\";\n","@import \"../../styles/tokens.css\";\n\n.alert {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n padding: 12px 16px;\n border-radius: 8px;\n}\n\n.content {\n flex: 1;\n min-width: 0;\n}\n\n.title {\n font-size: var(--uikit-font-size-lg);\n font-weight: var(--uikit-font-weight-bold);\n margin-bottom: 4px;\n}\n\n.description {\n font-size: var(--uikit-font-size-sm);\n line-height: 1.5;\n}\n\n.closeButton {\n background: none;\n border: none;\n cursor: pointer;\n font-size: var(--uikit-font-size-xl);\n line-height: 1;\n padding: 0;\n color: inherit;\n opacity: 0.6;\n}\n\n.closeButton:hover {\n opacity: 1;\n}\n\n.info {\n background-color: var(--uikit-color-info-bg);\n color: var(--uikit-color-info-text);\n}\n\n.success {\n background-color: var(--uikit-color-success-bg);\n color: var(--uikit-color-success-text);\n}\n\n.warning {\n background-color: var(--uikit-color-warning-bg);\n color: var(--uikit-color-warning-text);\n}\n\n.error {\n background-color: var(--uikit-color-error-bg);\n color: var(--uikit-color-error-text);\n}\n","@import \"../../styles/tokens.css\";\n\n.badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n align-self: flex-start;\n flex: none;\n border-radius: 999px;\n}\n\n.count {\n padding: 2px 8px;\n font-size: var(--uikit-font-size-xs);\n font-weight: var(--uikit-font-weight-medium);\n line-height: 1.4;\n}\n\n.dot {\n width: 8px;\n height: 8px;\n padding: 0;\n}\n\n.blue {\n background-color: var(--uikit-color-accent);\n color: var(--uikit-color-text-on-accent);\n}\n\n.red {\n background-color: var(--uikit-color-danger);\n color: var(--uikit-color-text-on-accent);\n}\n\n.green {\n background-color: var(--uikit-color-success);\n color: var(--uikit-color-text-on-accent);\n}\n","import type { ReactNode } from \"react\";\n\nimport { cx } from \"src/utils/utils\";\n\nimport type { IBadgeProps } from \"./types\";\n\nimport styles from \"./Badge.module.css\";\n\nconst formatCount = (count: number, max: number): string => {\n if (count > max) {\n return `${max}+`;\n }\n return String(count);\n};\n\nexport const Badge = ({\n color = \"blue\",\n max = 999,\n count,\n className,\n ...props\n}: IBadgeProps): ReactNode => {\n const isDot = count === undefined;\n const classes = cx(styles.badge, isDot ? styles.dot : styles.count, styles[color], className);\n\n return (\n <span className={classes} {...props}>\n {isDot ? null : formatCount(count, max)}\n </span>\n );\n};\n\nBadge.displayName = \"Badge\";\n","import { forwardRef } from \"react\";\n\nimport { cx } from \"src/utils/utils\";\n\nimport type { IButtonProps } from \"./types\";\n\nimport styles from \"./Button.module.css\";\n\nexport const Button = forwardRef<HTMLButtonElement, IButtonProps>(\n ({ variant = \"primary\", size = \"md\", type = \"button\", className, ...props }, ref) => {\n const classes = cx(styles.button, styles[variant], styles[size], className);\n\n return <button ref={ref} type={type} className={classes} {...props} />;\n },\n);\n\nButton.displayName = \"Button\";\n","@import \"../../styles/tokens.css\";\n\n.button {\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 0.5em;\n border: 1px solid transparent;\n border-radius: 6px;\n line-height: 1.2;\n cursor: pointer;\n transition:\n background-color 0.15s ease,\n border-color 0.15s ease;\n}\n\n.button:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n.primary {\n background-color: var(--uikit-color-accent);\n color: var(--uikit-color-text-on-accent);\n}\n\n.primary:not(:disabled):hover {\n background-color: var(--uikit-color-accent-hover);\n}\n\n.secondary {\n background-color: var(--uikit-color-surface);\n border-color: var(--uikit-color-border);\n color: var(--uikit-color-text);\n}\n\n.secondary:not(:disabled):hover {\n background-color: var(--uikit-color-surface-hover);\n}\n\n.sm {\n height: 32px;\n padding: 0 10px;\n font-size: var(--uikit-font-size-xs);\n font-weight: var(--uikit-font-weight-medium);\n}\n\n.md {\n height: 40px;\n padding: 0 16px;\n font-size: var(--uikit-font-size-sm);\n font-weight: var(--uikit-font-weight-medium);\n}\n\n.lg {\n height: 48px;\n padding: 0 20px;\n font-size: var(--uikit-font-size-md);\n font-weight: var(--uikit-font-weight-medium);\n}\n","import type { ReactElement } from \"react\";\nimport { forwardRef, useEffect, useId, useImperativeHandle, useRef } from \"react\";\n\nimport { cx } from \"src/utils/utils\";\n\nimport type { ICheckboxProps } from \"./types\";\n\nimport styles from \"./Checkbox.module.css\";\n\nexport const Checkbox = forwardRef<HTMLInputElement, ICheckboxProps>(\n (\n {\n size = \"md\",\n label,\n indeterminate,\n error,\n className,\n disabled,\n required,\n id,\n \"aria-describedby\": ariaDescribedBy,\n ...props\n },\n ref,\n ): ReactElement => {\n const innerRef = useRef<HTMLInputElement>(null);\n const autoId = useId();\n const checkboxId = id ?? autoId;\n\n const hasError = Boolean(error);\n const messageId = hasError ? `${checkboxId}-message` : undefined;\n const describeBy = [ariaDescribedBy, messageId].filter(Boolean).join(\" \") || undefined;\n\n useImperativeHandle(ref, () => innerRef.current as HTMLInputElement, []);\n\n useEffect(() => {\n if (innerRef.current) {\n innerRef.current.indeterminate = Boolean(indeterminate);\n }\n }, [indeterminate]);\n\n return (\n <div className={cx(styles.root, styles[size], disabled && styles.disabled, className)}>\n <label className={styles.label}>\n <input\n id={checkboxId}\n ref={innerRef}\n type=\"checkbox\"\n className={styles.input}\n disabled={disabled}\n required={required}\n aria-invalid={hasError || undefined}\n aria-describedby={describeBy}\n {...props}\n />\n {label}\n {required && (\n <span className={styles.required} aria-hidden=\"true\">\n {\" *\"}\n </span>\n )}\n </label>\n {hasError && (\n <p id={messageId} className={styles.error}>\n {error}\n </p>\n )}\n </div>\n );\n },\n);\n\nCheckbox.displayName = \"Checkbox\";\n","@import \"../../styles/tokens.css\";\n\n.sm {\n --checkbox-size: 14px;\n --checkbox-radius: 3px;\n --checkbox-gap: 6px;\n --checkbox-label-size: var(--uikit-font-size-xs);\n --checkbox-message-size: var(--uikit-font-size-2xs);\n}\n.md {\n --checkbox-size: 16px;\n --checkbox-radius: 4px;\n --checkbox-gap: 8px;\n --checkbox-label-size: var(--uikit-font-size-sm);\n --checkbox-message-size: var(--uikit-font-size-xs);\n}\n.lg {\n --checkbox-size: 20px;\n --checkbox-radius: 4px;\n --checkbox-gap: 10px;\n --checkbox-label-size: var(--uikit-font-size-md);\n --checkbox-message-size: var(--uikit-font-size-sm);\n}\n\n.root {\n display: inline-flex;\n flex-direction: column;\n}\n\n.label {\n display: inline-flex;\n align-items: center;\n gap: var(--checkbox-gap);\n font-size: var(--checkbox-label-size);\n color: var(--uikit-color-text);\n cursor: pointer;\n}\n\n.input {\n appearance: none;\n flex: none;\n box-sizing: border-box;\n width: var(--checkbox-size);\n height: var(--checkbox-size);\n margin: 0;\n border: 1.5px solid var(--uikit-color-text-muted);\n border-radius: var(--checkbox-radius);\n background: var(--uikit-color-surface) center / 100% no-repeat;\n cursor: pointer;\n transition:\n background-color 0.15s ease,\n border-color 0.15s ease;\n}\n\n.input:hover:not(:disabled) {\n border-color: var(--uikit-color-accent);\n}\n\n.input:checked,\n.input:indeterminate {\n border-color: var(--uikit-color-accent);\n background-color: var(--uikit-color-accent);\n}\n\n.input:checked:hover:not(:disabled),\n.input:indeterminate:hover:not(:disabled) {\n border-color: var(--uikit-color-accent-hover);\n background-color: var(--uikit-color-accent-hover);\n}\n\n.input:checked {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='3.5 8.5 6.5 11.5 12.5 4.5'/%3E%3C/svg%3E\");\n}\n\n.input:indeterminate {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='white' stroke-width='2' stroke-linecap='round'%3E%3Cline x1='4' y1='8' x2='12' y2='8'/%3E%3C/svg%3E\");\n}\n\n.input:focus-visible {\n outline: none;\n box-shadow: 0 0 0 3px var(--uikit-color-ring-accent);\n}\n\n.input[aria-invalid=\"true\"]:not(:checked):not(:indeterminate) {\n border-color: var(--uikit-color-danger);\n}\n.input[aria-invalid=\"true\"]:focus-visible {\n box-shadow: 0 0 0 3px var(--uikit-color-ring-error);\n}\n\n.disabled {\n opacity: 0.5;\n}\n.disabled .label,\n.disabled .input {\n cursor: not-allowed;\n}\n\n.required {\n color: var(--uikit-color-danger);\n}\n\n.error {\n margin: 4px 0 0;\n padding-left: calc(var(--checkbox-size) + var(--checkbox-gap));\n font-size: var(--checkbox-message-size);\n color: var(--uikit-color-danger);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .input {\n transition: none;\n }\n}\n","import { forwardRef, useId } from \"react\";\n\nimport { cx } from \"src/utils/utils\";\n\nimport type { IInputProps } from \"./types\";\n\nimport styles from \"./Input.module.css\";\n\nexport const Input = forwardRef<HTMLInputElement, IInputProps>(\n (\n {\n size = \"md\",\n label,\n hint,\n error,\n startIcon,\n endIcon,\n className,\n id,\n required,\n disabled,\n \"aria-describedby\": ariaDescribedBy,\n ...props\n },\n ref,\n ) => {\n const autoId = useId();\n const inputId = id ?? autoId;\n\n const hasError = Boolean(error);\n const message = hasError ? error : hint;\n const messageId = message ? `${inputId}-message` : undefined;\n const describeBy = [ariaDescribedBy, messageId].filter(Boolean).join(\" \") || undefined;\n\n return (\n <div className={cx(styles.root, styles[size], className)}>\n {label && (\n <label htmlFor={inputId} className={styles.label}>\n {label}{\" \"}\n {required && (\n <span className={styles.required} aria-hidden=\"true\">\n {\" *\"}\n </span>\n )}\n </label>\n )}\n <div className={cx(styles.field, hasError && styles.invalid, disabled && styles.disabled)}>\n {startIcon && <span className={styles.icon}>{startIcon}</span>}\n <input\n ref={ref}\n id={inputId}\n required={required}\n disabled={disabled}\n aria-invalid={hasError || undefined}\n aria-describedby={describeBy}\n className={styles.input}\n {...props}\n />\n {endIcon && <span className={styles.icon}>{endIcon}</span>}\n </div>\n {message && (\n <p id={messageId} className={cx(styles.message, hasError && styles.error)}>\n {message}\n </p>\n )}\n </div>\n );\n },\n);\n\nInput.displayName = \"Input\";\n","@import \"../../styles/tokens.css\";\n\n.sm {\n --input-height: var(--uikit-input-height-sm);\n --input-font-size: var(--uikit-font-size-xs);\n --input-label-size: var(--uikit-font-size-xs);\n --input-message-size: var(--uikit-font-size-2xs);\n}\n.md {\n --input-height: var(--uikit-input-height-md);\n --input-font-size: var(--uikit-font-size-sm);\n --input-label-size: var(--uikit-font-size-sm);\n --input-message-size: var(--uikit-font-size-xs);\n}\n.lg {\n --input-height: var(--uikit-input-height-lg);\n --input-font-size: var(--uikit-font-size-md);\n --input-label-size: var(--uikit-font-size-md);\n --input-message-size: var(--uikit-font-size-sm);\n}\n\n.root {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.label {\n font-size: var(--uikit-font-size-sm);\n font-weight: var(--uikit-font-weight-medium);\n color: var(--uikit-color-text);\n font-size: var(--input-label-size);\n}\n\n.required {\n color: var(--uikit-color-danger);\n}\n\n.field {\n height: var(--input-height);\n font-size: var(--input-font-size);\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 0 12px;\n border: 1px solid var(--uikit-color-border);\n border-radius: var(--uikit-radius-md);\n background: var(--uikit-color-surface);\n transition:\n border-color 0.15s ease,\n box-shadow 0.15s ease;\n}\n\n.field:hover:not(.disabled) {\n border-color: var(--uikit-color-border-hover);\n}\n\n.field:focus-within {\n border-color: var(--uikit-color-border-focus);\n box-shadow: 0 0 0 3px var(--uikit-color-ring-accent);\n}\n\n.invalid,\n.invalid:hover:not(.disabled) {\n border-color: var(--uikit-color-danger);\n}\n\n.invalid:focus-within {\n box-shadow: 0 0 0 3px var(--uikit-color-ring-error);\n}\n\n.disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.input {\n flex: 1;\n min-width: 0;\n height: 100%;\n padding: 0;\n border: none;\n outline: none;\n background: transparent;\n color: var(--uikit-color-text);\n font: inherit;\n}\n\n.input::placeholder {\n color: var(--uikit-color-text-placeholder);\n}\n\n.input:disabled {\n cursor: not-allowed;\n pointer-events: none;\n}\n\n.icon {\n display: inline-flex;\n flex: none;\n color: var(--uikit-color-text-muted);\n}\n\n.message {\n margin: 0;\n font-size: var(--input-message-size);\n color: var(--uikit-color-text-muted);\n}\n.error {\n color: var(--uikit-color-danger);\n}\n","import type { ReactNode } from \"react\";\nimport { useEffect, useId, useRef } from \"react\";\n\nimport { cx, toCss } from \"src/utils/utils\";\n\nimport type { IModalProps } from \"./types\";\n\nimport styles from \"./Modal.module.css\";\n\nexport const Modal = ({\n open,\n onClose,\n title,\n footer,\n size = \"md\",\n width,\n children,\n}: IModalProps): ReactNode => {\n const ref = useRef<HTMLDialogElement>(null);\n const titleId = useId();\n\n useEffect(() => {\n if (open) {\n ref.current?.showModal();\n } else {\n ref.current?.close();\n }\n }, [open]);\n\n const close = () => ref.current?.close();\n\n return (\n // Escape у <dialog> уже закрывает модалку с клавиатуры\n // oxlint-disable-next-line jsx-a11y/click-events-have-key-events jsx-a11y/no-noninteractive-element-interactions\n <dialog\n ref={ref}\n className={cx(styles.modal, styles[size])}\n style={{ maxWidth: toCss(width) }}\n aria-labelledby={title ? titleId : undefined}\n onClose={onClose}\n onClick={(e) => e.target === e.currentTarget && close()}\n >\n <div className={styles.content}>\n {title && (\n <header className={styles.header}>\n <h2 id={titleId} className={styles.title}>\n {title}\n </h2>\n <button type=\"button\" className={styles.close} aria-label=\"Закрыть\" onClick={close}>\n ×\n </button>\n </header>\n )}\n <div className={styles.body}>{children}</div>\n {footer && <footer className={styles.footer}>{footer}</footer>}\n </div>\n </dialog>\n );\n};\n\nModal.displayName = \"Modal\";\n","@import \"../../styles/tokens.css\";\n\n:global(body):has(.modal[open]) {\n overflow: hidden;\n}\n\n.modal {\n width: calc(100% - 32px);\n max-height: calc(100dvh - 32px);\n padding: 0;\n border: none;\n border-radius: var(--uikit-radius-lg, 12px);\n background: var(--uikit-color-surface, #fff);\n color: var(--uikit-color-text, #111827);\n box-shadow: 0 20px 50px rgb(0 0 0 / 0.2);\n}\n\n.modal[open] {\n display: flex;\n flex-direction: column;\n animation: modal-in 0.2s ease-out;\n}\n\n.modal::backdrop {\n background: var(--uikit-color-overlay, rgb(0 0 0 / 0.5));\n}\n.modal[open]::backdrop {\n animation: fade-in 0.2s ease-out;\n}\n\n.sm {\n max-width: 400px;\n}\n.md {\n max-width: 560px;\n}\n.lg {\n max-width: 800px;\n}\n\n.content {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n}\n\n.header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n padding: 16px 20px;\n border-bottom: 1px solid var(--uikit-color-border, #e5e7eb);\n}\n\n.title {\n margin: 0;\n font-size: 1.125rem;\n font-weight: 600;\n}\n\n.close {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n margin: -4px -8px -4px 0;\n border: none;\n border-radius: 50%;\n background: none;\n color: inherit;\n font-size: 1.5rem;\n line-height: 1;\n cursor: pointer;\n}\n.close:hover {\n background: var(--uikit-color-hover, rgb(0 0 0 / 0.06));\n}\n\n.body {\n flex: 1;\n padding: 20px;\n overflow-y: auto;\n}\n\n.footer {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n padding: 16px 20px;\n border-top: 1px solid var(--uikit-color-border);\n}\n\n.close:focus-visible {\n outline: 2px solid var(--uikit-color-accent-focus);\n outline-offset: 2px;\n}\n\n@keyframes modal-in {\n from {\n opacity: 0;\n transform: translateY(8px) scale(0.98);\n }\n}\n@keyframes fade-in {\n from {\n opacity: 0;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .modal[open],\n .modal[open]::backdrop {\n animation: none;\n }\n}\n","import { forwardRef, useContext, useId, type ChangeEvent } from \"react\";\n\nimport { cx } from \"src/utils/utils\";\n\nimport { RadioGroupContext } from \"../RadioGroup/RadioGroupProvider/context\";\n\nimport type { IRadioProps } from \"./types\";\n\nimport styles from \"./Radio.module.css\";\n\nexport const Radio = forwardRef<HTMLInputElement, IRadioProps>(\n (\n {\n size = \"md\",\n label,\n error,\n className,\n disabled,\n required,\n id,\n name,\n value,\n checked,\n onChange,\n \"aria-describedby\": ariaDescribedBy,\n ...props\n },\n ref,\n ) => {\n const group = useContext(RadioGroupContext);\n\n const autoId = useId();\n const radioId = id ?? autoId;\n\n const hasError = Boolean(error);\n const messageId = hasError ? `${radioId}-message` : undefined;\n const describeBy = [ariaDescribedBy, messageId].filter(Boolean).join(\" \") || undefined;\n\n const inputName = group ? group.name : name;\n const isChecked = group ? group.value === String(value) : checked;\n const isDisabled = group?.disabled || disabled;\n const isRequired = group ? group.required : required;\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n onChange?.(event);\n group?.onChange(event.target.value);\n };\n\n return (\n <div\n className={cx(\n styles.root,\n styles[size],\n disabled && styles.disabled,\n hasError && styles.hasError,\n className,\n )}\n >\n <label className={styles.label}>\n <input\n ref={ref}\n id={radioId}\n name={inputName}\n type=\"radio\"\n value={value}\n checked={isChecked}\n onChange={handleChange}\n className={styles.input}\n disabled={isDisabled}\n required={isRequired}\n aria-describedby={describeBy}\n {...props}\n />\n {label}\n {required && !group && (\n <span className={styles.required} aria-hidden=\"true\">\n {\" *\"}\n </span>\n )}\n </label>\n {hasError && (\n <p id={messageId} className={styles.error}>\n {error}\n </p>\n )}\n </div>\n );\n },\n);\n\nRadio.displayName = \"Radio\";\n","import { createContext } from \"react\";\n\nexport interface IRadioGroupContext {\n name: string;\n value?: string;\n onChange: (value: string) => void;\n disabled?: boolean;\n required?: boolean;\n}\n\nexport const RadioGroupContext = createContext<IRadioGroupContext | null>(null);\n","@import \"../../styles/tokens.css\";\n\n.sm {\n --radio-size: 14px;\n --radio-dot-space: 2px;\n --radio-gap: 6px;\n --radio-label-size: var(--uikit-font-size-xs);\n --radio-message-size: var(--uikit-font-size-2xs);\n}\n.md {\n --radio-size: 16px;\n --radio-dot-space: 3px;\n --radio-gap: 8px;\n --radio-label-size: var(--uikit-font-size-sm);\n --radio-message-size: var(--uikit-font-size-xs);\n}\n.lg {\n --radio-size: 20px;\n --radio-dot-space: 4px;\n --radio-gap: 10px;\n --radio-label-size: var(--uikit-font-size-md);\n --radio-message-size: var(--uikit-font-size-sm);\n}\n\n.root {\n display: inline-flex;\n flex-direction: column;\n}\n\n.label {\n display: inline-flex;\n align-items: center;\n gap: var(--radio-gap);\n font-size: var(--radio-label-size);\n color: var(--uikit-color-text);\n cursor: pointer;\n}\n\n.input {\n appearance: none;\n flex: none;\n box-sizing: border-box;\n width: var(--radio-size);\n height: var(--radio-size);\n margin: 0;\n border: 1.5px solid var(--uikit-color-text-muted);\n border-radius: 50%;\n background: var(--uikit-color-surface) center / 100% no-repeat;\n cursor: pointer;\n transition:\n background-color 0.15s ease,\n border-color 0.15s ease;\n}\n\n.input:hover:not(:disabled) {\n border-color: var(--uikit-color-accent);\n}\n\n.input:checked {\n border-color: var(--uikit-color-accent);\n background-color: var(--uikit-color-accent);\n padding: var(--radio-dot-space);\n background-clip: content-box;\n}\n\n.input:checked:hover:not(:disabled) {\n border-color: var(--uikit-color-accent-hover);\n background-color: var(--uikit-color-accent-hover);\n}\n\n.input:focus-visible {\n outline: none;\n box-shadow: 0 0 0 3px var(--uikit-color-ring-accent);\n}\n\n.hasError .input:not(:checked) {\n border-color: var(--uikit-color-danger);\n}\n\n.hasError .input:focus-visible {\n box-shadow: 0 0 0 3px var(--uikit-color-ring-error);\n}\n\n.disabled {\n opacity: 0.5;\n}\n.disabled .label,\n.disabled .input {\n cursor: not-allowed;\n}\n\n.required {\n color: var(--uikit-color-danger);\n}\n\n.error {\n margin: 4px 0 0;\n padding-left: calc(var(--radio-size) + var(--radio-gap));\n font-size: var(--radio-message-size);\n color: var(--uikit-color-danger);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .input {\n transition: none;\n }\n}\n","import { useId, type ReactElement } from \"react\";\n\nimport { cx } from \"src/utils/utils\";\n\nimport { RadioGroupProvider } from \"./RadioGroupProvider/RadioGroupProvider\";\n\nimport type { IRadioGroupProps } from \"./types\";\n\nimport styles from \"./RadioGroup.module.css\";\n\nexport const RadioGroup = ({\n value,\n defaultValue,\n onChange,\n name,\n label,\n error,\n required,\n disabled,\n className,\n children,\n ...props\n}: IRadioGroupProps): ReactElement => {\n const labelId = useId();\n const messageId = useId();\n const hasError = Boolean(error);\n\n return (\n <RadioGroupProvider\n name={name}\n value={value}\n defaultValue={defaultValue}\n onChange={onChange}\n disabled={disabled}\n required={required}\n >\n <div\n className={cx(styles.root, disabled && styles.disabled, className)}\n role=\"radiogroup\"\n aria-labelledby={label ? labelId : undefined}\n aria-invalid={hasError || undefined}\n aria-describedby={hasError ? messageId : undefined}\n aria-required={required || undefined}\n {...props}\n >\n {label && (\n <div id={labelId} className={styles.groupLabel}>\n {label}\n {required && (\n <span className={styles.required} aria-hidden=\"true\">\n {\" *\"}\n </span>\n )}\n </div>\n )}\n\n <div className={styles.options}>{children}</div>\n\n {hasError && (\n <p id={messageId} className={styles.error}>\n {error}\n </p>\n )}\n </div>\n </RadioGroupProvider>\n );\n};\n\nRadioGroup.displayName = \"RadioGroup\";\n","import { useId, useState, type ReactElement, type ReactNode } from \"react\";\n\nimport { RadioGroupContext } from \"./context\";\n\ninterface IRadioGroupProviderProps {\n name?: string;\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n disabled?: boolean;\n required?: boolean;\n children: ReactNode;\n}\n\nexport const RadioGroupProvider = ({\n name,\n value: controlledValue,\n defaultValue,\n onChange,\n disabled,\n required,\n children,\n}: IRadioGroupProviderProps): ReactElement => {\n const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue);\n\n const isControlled = controlledValue !== undefined;\n const currentValue = isControlled ? controlledValue : uncontrolledValue;\n\n const autoId = useId();\n const finalName = name ?? `radiogroup-${autoId}`;\n\n const handleChange = (newValue: string) => {\n if (!isControlled) {\n setUncontrolledValue(newValue);\n }\n onChange?.(newValue);\n };\n\n return (\n <RadioGroupContext.Provider\n value={{\n name: finalName,\n value: currentValue,\n onChange: handleChange,\n disabled,\n required,\n }}\n >\n {children}\n </RadioGroupContext.Provider>\n );\n};\n","@import \"../../styles/tokens.css\";\n\n.root {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.groupLabel {\n font-size: var(--uikit-font-size-sm);\n font-weight: var(--uikit-font-weight-medium);\n color: var(--uikit-color-text);\n margin-bottom: 4px;\n}\n\n.required {\n color: var(--uikit-color-danger);\n}\n\n.options {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.error {\n font-size: var(--uikit-font-size-xs);\n color: var(--uikit-color-danger);\n margin: 4px 0 0 0;\n}\n","@import \"../../styles/tokens.css\";\n\n.skeleton {\n position: relative;\n display: block;\n overflow: hidden;\n background-color: var(--uikit-color-surface-subtle);\n border-radius: var(--uikit-radius-sm);\n}\n\n.text {\n height: 1em;\n}\n.rect {\n border-radius: var(--uikit-radius-md);\n}\n.circle {\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n.lines {\n display: flex;\n flex-direction: column;\n gap: 0.5em;\n}\n\n.withChildren {\n width: fit-content;\n height: auto;\n}\n.hidden {\n visibility: hidden;\n}\n\n.pulse {\n animation: pulse 1.5s ease-in-out infinite;\n}\n\n.wave::after {\n content: \"\";\n position: absolute;\n inset: 0;\n transform: translateX(-100%);\n background: linear-gradient(\n 90deg,\n transparent,\n var(--uikit-color-skeleton-highlight),\n transparent\n );\n animation: wave 1.6s linear infinite;\n}\n\n@keyframes pulse {\n 50% {\n opacity: 0.5;\n }\n}\n@keyframes wave {\n to {\n transform: translateX(100%);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .pulse,\n .wave::after {\n animation: none;\n }\n}\n","import type { CSSProperties, ReactNode } from \"react\";\n\nimport { cx, toCss } from \"src/utils/utils\";\n\nimport type { ISkeletonProps } from \"./types\";\n\nimport styles from \"./Skeleton.module.css\";\n\nexport const Skeleton = ({\n variant = \"text\",\n width,\n height,\n radius,\n lines = 1,\n animation = \"pulse\",\n loading = true,\n className,\n style,\n children,\n ...props\n}: ISkeletonProps): ReactNode => {\n if (!loading) {\n return children;\n }\n\n const baseClasses = cx(styles.skeleton, styles[variant], styles[animation]);\n\n const sizeStyle: CSSProperties = {\n width: toCss(width),\n height: toCss(variant === \"circle\" ? (height ?? width) : height),\n borderRadius: toCss(radius),\n };\n\n if (variant === \"text\" && lines > 1) {\n return (\n <span\n className={cx(styles.lines, className)}\n style={{ width: sizeStyle.width, ...style }}\n aria-hidden=\"true\"\n {...props}\n >\n {Array.from({ length: lines }, (_, i) => (\n <span\n key={i}\n className={baseClasses}\n style={{ ...sizeStyle, width: i === lines - 1 ? \"70%\" : \"100%\" }}\n />\n ))}\n </span>\n );\n }\n\n return (\n <span\n className={cx(baseClasses, children != null && styles.withChildren, className)}\n style={{ ...sizeStyle, ...style }}\n aria-hidden=\"true\"\n {...props}\n >\n {children != null && <span className={styles.hidden}>{children}</span>}\n </span>\n );\n};\n\nSkeleton.displayName = \"Skeleton\";\n","export const SPINNER_VARIANTS = {\n circle: { items: 0 },\n dots: { items: 3 },\n spiral: { items: 5 },\n propagate: { items: 6 },\n} as const satisfies Record<string, { items: number }>;\n","@import \"../../styles/tokens.css\";\n\n.spinner {\n --speed: 1;\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--spinner-size);\n height: var(--spinner-size);\n color: var(--uikit-color-accent);\n flex-shrink: 0;\n}\n\n.sm {\n --spinner-size: var(--uikit-spinner-size-sm);\n}\n.md {\n --spinner-size: var(--uikit-spinner-size-md);\n}\n.lg {\n --spinner-size: var(--uikit-spinner-size-lg);\n}\n\n.item {\n display: block;\n flex-shrink: 0;\n background-color: currentColor;\n}\n\n.circle {\n border: calc(var(--spinner-size) / 8) solid currentColor;\n border-right-color: transparent;\n border-radius: 50%;\n animation: spin calc(0.75s * var(--speed)) linear infinite;\n}\n\n.dots {\n gap: calc(var(--spinner-size) / 8);\n}\n.dots .item {\n width: calc(var(--spinner-size) / 4);\n height: calc(var(--spinner-size) / 4);\n border-radius: 50%;\n animation: beat calc(0.7s * var(--speed)) linear infinite both;\n animation-delay: calc(var(--i) * 0.35s * var(--speed));\n}\n\n.spiral .item {\n position: absolute;\n top: calc(var(--i) * 1.75%);\n left: calc(var(--i) * 0.875%);\n width: calc(100% - var(--i) * 20%);\n height: calc(100% - var(--i) * 20%);\n box-sizing: border-box;\n background-color: transparent;\n border-radius: 50%;\n border-top: calc(var(--spinner-size) / 16) solid currentColor;\n border-left: calc(var(--spinner-size) / 16) solid currentColor;\n animation: spin calc(1s * var(--speed)) linear infinite;\n animation-delay: calc(var(--i) * 0.2s * var(--speed));\n}\n\n.propagate {\n width: calc(var(--spinner-size) / 4 * 11);\n}\n.propagate .item {\n --step: calc(var(--spinner-size) / 4);\n --dir: -1;\n position: absolute;\n width: var(--step);\n height: var(--step);\n border-radius: 50%;\n animation: propagate calc(1.5s * var(--speed)) ease infinite;\n}\n.propagate .item:nth-child(n + 4) {\n --dir: 1;\n}\n.propagate .item:is(:nth-child(1), :nth-child(6)) {\n --x50: 3;\n --s50: 0.6;\n --x75: 5;\n --s75: 0.5;\n}\n.propagate .item:is(:nth-child(2), :nth-child(5)) {\n --x50: 3;\n --s50: 0.6;\n --x75: 3;\n --s75: 0.6;\n}\n.propagate .item:is(:nth-child(3), :nth-child(4)) {\n --x50: 1;\n --s50: 0.75;\n --x75: 1;\n --s75: 0.75;\n}\n\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n@keyframes beat {\n 50% {\n transform: scale(0.75);\n opacity: 0.2;\n }\n\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n\n@keyframes propagate {\n 25% {\n transform: translateX(calc(var(--dir) * var(--step))) scale(0.75);\n }\n 50% {\n transform: translateX(calc(var(--dir) * var(--x50) * var(--step))) scale(var(--s50));\n }\n 75% {\n transform: translateX(calc(var(--dir) * var(--x75) * var(--step))) scale(var(--s75));\n }\n 95% {\n transform: none;\n }\n}\n","import type { CSSProperties, ReactNode } from \"react\";\n\nimport { cx } from \"src/utils/utils\";\n\nimport { SPINNER_VARIANTS } from \"./constants\";\n\nimport type { ISpinnerProps } from \"./types\";\n\nimport styles from \"./Spinner.module.css\";\n\nexport const Spinner = ({\n variant = \"circle\",\n size = \"md\",\n label = \"Загрузка\",\n color,\n className,\n style,\n ...props\n}: ISpinnerProps): ReactNode => {\n const { items } = SPINNER_VARIANTS[variant];\n\n return (\n <span\n role=\"status\"\n aria-label={label}\n className={cx(styles.spinner, styles[variant], styles[size], className)}\n style={{ ...style, ...(color && { color }) }}\n {...props}\n >\n {Array.from({ length: items }, (_, i) => (\n <span key={i} className={styles.item} style={{ \"--i\": i } as CSSProperties} />\n ))}\n </span>\n );\n};\n\nSpinner.displayName = \"Spinner\";\n","import type { ReactElement } from \"react\";\nimport { forwardRef } from \"react\";\n\nimport { cx } from \"src/utils/utils\";\n\nimport type { ISwitchProps } from \"./types\";\n\nimport styles from \"./Switch.module.css\";\n\nexport const Switch = forwardRef<HTMLInputElement, ISwitchProps>(\n ({ size = \"md\", label, className, disabled, ...props }, ref): ReactElement => (\n <label className={cx(styles.root, styles[size], disabled && styles.disabled, className)}>\n <input\n ref={ref}\n aria-checked\n type=\"checkbox\"\n role=\"switch\"\n disabled={disabled}\n className={styles.input}\n {...props}\n />\n <span className={styles.track} aria-hidden=\"true\">\n <span className={styles.thumb} />\n </span>\n {label && <span className={styles.label}>{label}</span>}\n </label>\n ),\n);\n","@import \"../../styles/tokens.css\";\n\n.sm {\n --switch-width: 28px;\n --switch-height: 16px;\n --switch-font-size: var(--uikit-font-size-xs);\n}\n.md {\n --switch-width: 36px;\n --switch-height: 20px;\n --switch-font-size: var(--uikit-font-size-sm);\n}\n.lg {\n --switch-width: 44px;\n --switch-height: 24px;\n --switch-font-size: var(--uikit-font-size-md);\n}\n\n.root {\n --switch-gap: 2px;\n --switch-thumb: calc(var(--switch-height) - var(--switch-gap) * 2);\n position: relative;\n display: inline-flex;\n align-items: center;\n gap: 8px;\n font-size: var(--switch-font-size);\n color: var(--uikit-color-text);\n cursor: pointer;\n}\n\n/* Скрыт визуально, но остаётся в таб-порядке и для скринридера.\n Не display:none — иначе переключатель пропадёт с клавиатуры. */\n.input {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: 0;\n opacity: 0;\n}\n\n.track {\n position: relative;\n flex: none;\n width: var(--switch-width);\n height: var(--switch-height);\n border-radius: 999px;\n background: var(--uikit-color-border);\n transition: background-color 0.15s ease;\n}\n\n.thumb {\n position: absolute;\n top: var(--switch-gap);\n left: var(--switch-gap);\n width: var(--switch-thumb);\n height: var(--switch-thumb);\n border-radius: 50%;\n background: var(--uikit-white);\n box-shadow: 0 1px 2px rgb(0 0 0 / 0.2);\n transition: transform 0.15s ease;\n}\n\n.input:checked + .track {\n background: var(--uikit-color-accent);\n}\n.input:checked + .track .thumb {\n transform: translateX(calc(var(--switch-width) - var(--switch-thumb) - var(--switch-gap) * 2));\n}\n\n.root:hover .input:not(:disabled):not(:checked) + .track {\n background: var(--uikit-color-border-hover);\n}\n.root:hover .input:not(:disabled):checked + .track {\n background: var(--uikit-color-accent-hover);\n}\n\n.input:focus-visible + .track {\n box-shadow: 0 0 0 3px var(--uikit-color-ring-accent);\n}\n\n.disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .track,\n .thumb {\n transition: none;\n }\n}\n","import type { KeyboardEvent, ReactNode } from \"react\";\nimport { useId, useRef, useState } from \"react\";\n\nimport { cx } from \"src/utils/utils\";\n\nimport type { ITabsProps } from \"./types\";\n\nimport styles from \"./Tabs.module.css\";\n\nexport const Tabs = ({ items, defaultValue, onChange, className }: ITabsProps): ReactNode => {\n const [active, setActive] = useState(() => {\n const isSelectable = items.some((item) => item.value === defaultValue && !item.disabled);\n return isSelectable ? defaultValue : items.find((item) => !item.disabled)?.value;\n });\n const id = useId();\n const tabRefs = useRef<Array<HTMLButtonElement | null>>([]);\n\n const activeIndex = items.findIndex((item) => item.value === active);\n\n const select = (value: string) => {\n if (value === active) return;\n setActive(value);\n onChange?.(value);\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLButtonElement>, index: number) => {\n const enabled = items.flatMap((item, i) => (item.disabled ? [] : [i]));\n const position = enabled.indexOf(index);\n\n let next: number;\n switch (event.key) {\n case \"ArrowRight\":\n next = enabled[(position + 1) % enabled.length];\n break;\n case \"ArrowLeft\":\n next = enabled[(position - 1 + enabled.length) % enabled.length];\n break;\n case \"Home\":\n next = enabled[0];\n break;\n case \"End\":\n next = enabled[enabled.length - 1];\n break;\n default:\n return;\n }\n\n event.preventDefault();\n tabRefs.current[next]?.focus();\n select(items[next].value);\n };\n\n return (\n <div className={cx(styles.tabs, className)}>\n <div role=\"tablist\" className={styles.list}>\n {items.map((item, index) => {\n const selected = index === activeIndex;\n\n return (\n <button\n key={item.value}\n ref={(el) => {\n tabRefs.current[index] = el;\n }}\n type=\"button\"\n role=\"tab\"\n id={`${id}-tab-${index}`}\n aria-selected={selected}\n aria-controls={`${id}-panel`}\n tabIndex={selected ? 0 : -1}\n disabled={item.disabled}\n className={styles.tab}\n onClick={() => select(item.value)}\n onKeyDown={(event) => handleKeyDown(event, index)}\n >\n {item.label}\n </button>\n );\n })}\n </div>\n\n <div\n role=\"tabpanel\"\n id={`${id}-panel`}\n aria-labelledby={activeIndex >= 0 ? `${id}-tab-${activeIndex}` : undefined}\n tabIndex={0}\n className={styles.panel}\n >\n {items[activeIndex]?.content}\n </div>\n </div>\n );\n};\n","@import \"../../styles/tokens.css\";\n\n.tabs {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.list {\n display: flex;\n gap: 4px;\n border-bottom: 1px solid var(--uikit-color-border);\n}\n\n.tab {\n padding: 8px 12px;\n margin-bottom: -1px;\n border: none;\n border-bottom: 2px solid transparent;\n background: none;\n color: var(--uikit-color-text-muted);\n font: inherit;\n cursor: pointer;\n}\n\n.tab:hover:not(:disabled) {\n color: var(--uikit-color-text);\n}\n\n.tab[aria-selected=\"true\"] {\n color: var(--uikit-color-text);\n border-bottom-color: var(--uikit-color-accent);\n}\n\n.tab:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.tab:focus-visible,\n.panel:focus-visible {\n outline: 2px solid var(--uikit-color-accent-focus);\n outline-offset: 2px;\n}\n\n.panel {\n color: var(--uikit-color-text);\n}\n","import { useCallback, useEffect, useRef, useState, type ReactNode } from \"react\";\n\nimport { cx } from \"src/utils/utils\";\n\nimport type { IToastProps } from \"./types\";\n\nimport styles from \"./Toast.module.css\";\n\nexport const Toast = ({\n variant = \"info\",\n title,\n closable = true,\n duration = 5000,\n onClose,\n children,\n className,\n onMouseEnter,\n onMouseLeave,\n ...props\n}: IToastProps): ReactNode => {\n const [visible, setVisible] = useState(true);\n const timerRef = useRef<ReturnType<typeof setTimeout>>();\n const remainingRef = useRef(duration);\n const startedAtRef = useRef(0);\n const onCloseRef = useRef(onClose);\n\n useEffect(() => {\n onCloseRef.current = onClose;\n }, [onClose]);\n\n const handleClose = useCallback(() => {\n setVisible(false);\n onCloseRef.current?.();\n }, []);\n\n const clearTimer = useCallback(() => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n timerRef.current = undefined;\n }\n }, []);\n\n const startTimer = useCallback(\n (ms: number) => {\n if (ms <= 0) return;\n startedAtRef.current = Date.now();\n timerRef.current = setTimeout(handleClose, ms);\n },\n [handleClose],\n );\n\n useEffect(() => {\n startTimer(remainingRef.current);\n return clearTimer;\n }, [startTimer, clearTimer]);\n\n const handleMouseEnter: React.MouseEventHandler<HTMLDivElement> = (e) => {\n clearTimer();\n remainingRef.current -= Date.now() - startedAtRef.current;\n onMouseEnter?.(e);\n };\n\n const handleMouseLeave: React.MouseEventHandler<HTMLDivElement> = (e) => {\n startTimer(remainingRef.current);\n onMouseLeave?.(e);\n };\n\n if (!visible) {\n return null;\n }\n\n const classes = cx(styles.toast, styles[variant], className);\n\n return (\n <div\n className={classes}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n {...props}\n >\n <div className={styles.content} role=\"status\" aria-live=\"polite\">\n {title && <div className={styles.title}>{title}</div>}\n {children && <div className={styles.description}>{children}</div>}\n </div>\n\n {closable && (\n <button\n type=\"button\"\n className={styles.closeButton}\n onClick={handleClose}\n aria-label=\"Close toast\"\n >\n ×\n </button>\n )}\n </div>\n );\n};\n\nToast.displayName = \"Button\";\n","@import \"../../styles/tokens.css\";\n\n.toast {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n padding: 12px 16px;\n border-radius: 8px;\n min-width: 280px;\n max-width: 400px;\n box-shadow: var(--uikit-shadow-md, 0 4px 12px rgba(0, 0, 0, 0.15));\n animation: toast-in 0.2s ease-out;\n}\n\n@keyframes toast-in {\n from {\n opacity: 0;\n transform: translateX(16px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n\n.content {\n flex: 1;\n min-width: 0;\n}\n\n.title {\n font-size: var(--uikit-font-size-lg);\n font-weight: var(--uikit-font-weight-bold);\n margin-bottom: 4px;\n}\n\n.description {\n font-size: var(--uikit-font-size-sm);\n line-height: 1.5;\n}\n\n.closeButton {\n background: none;\n border: none;\n cursor: pointer;\n font-size: var(--uikit-font-size-xl);\n line-height: 1;\n padding: 0;\n color: inherit;\n opacity: 0.6;\n}\n\n.closeButton:hover {\n opacity: 1;\n}\n\n.info {\n background-color: var(--uikit-color-info-bg);\n color: var(--uikit-color-info-text);\n}\n\n.success {\n background-color: var(--uikit-color-success-bg);\n color: var(--uikit-color-success-text);\n}\n\n.warning {\n background-color: var(--uikit-color-warning-bg);\n color: var(--uikit-color-warning-text);\n}\n\n.error {\n background-color: var(--uikit-color-error-bg);\n color: var(--uikit-color-error-text);\n}\n","import { createContext, type ReactNode, useCallback, useMemo, useState } from \"react\";\n\nimport { createPortal } from \"react-dom\";\n\nimport { Toast } from \"src/components/Toast/Toast\";\nimport type { IToastProps } from \"src/components/Toast/types\";\nimport { cx } from \"src/utils/utils\";\n\nimport styles from \"./ToastContainer.module.css\";\n\nexport interface IToastOptions extends Pick<\n IToastProps,\n \"variant\" | \"title\" | \"duration\" | \"closable\"\n> {\n description?: ReactNode;\n}\n\ninterface IToastItem extends IToastOptions {\n id: string;\n}\n\ntype TToastPosition =\n | \"top-right\"\n | \"top-left\"\n | \"top-center\"\n | \"bottom-right\"\n | \"bottom-left\"\n | \"bottom-center\";\n\ninterface IToastContextValue {\n show: (options: IToastOptions) => string;\n close: (id: string) => void;\n}\n\nexport interface IToastProviderProps {\n children: ReactNode;\n position?: TToastPosition;\n}\n\nlet idCounter = 0;\nconst nextId = () => `toast-${Date.now()}-${idCounter++}`;\n\nexport const ToastContext = createContext<IToastContextValue | null>(null);\n\nexport const ToastProvider = ({\n children,\n position = \"top-right\",\n}: IToastProviderProps): ReactNode => {\n const [toasts, setToasts] = useState<IToastItem[]>([]);\n\n const close = useCallback((id: string) => {\n setToasts((prev) => prev.filter((toast) => toast.id !== id));\n }, []);\n\n const show = useCallback((options: IToastOptions) => {\n const id = nextId();\n setToasts((prev) => [...prev, { id, ...options }]);\n return id;\n }, []);\n\n const value = useMemo(() => {\n return { show, close };\n }, [show, close]);\n\n return (\n <ToastContext.Provider value={value}>\n {children}\n {typeof document !== \"undefined\" &&\n createPortal(\n <div className={cx(styles.container, styles[position])}>\n {toasts.map(({ id, description, ...rest }) => (\n <Toast key={id} {...rest} onClose={() => close(id)}>\n {description}\n </Toast>\n ))}\n </div>,\n document.body,\n )}\n </ToastContext.Provider>\n );\n};\n",".container {\n position: fixed;\n display: flex;\n flex-direction: column;\n gap: 8px;\n z-index: var(--uikit-z-index-toast);\n padding: 16px;\n pointer-events: none;\n}\n\n.container > * {\n pointer-events: auto;\n}\n\n.top-right {\n top: 0;\n right: 0;\n align-items: flex-end;\n}\n\n.top-left {\n top: 0;\n left: 0;\n align-items: flex-start;\n}\n\n.top-center {\n top: 0;\n left: 50%;\n transform: translateX(-50%);\n align-items: center;\n}\n\n.bottom-right {\n bottom: 0;\n right: 0;\n align-items: flex-end;\n flex-direction: column-reverse;\n}\n\n.bottom-left {\n bottom: 0;\n left: 0;\n align-items: flex-start;\n flex-direction: column-reverse;\n}\n\n.bottom-center {\n bottom: 0;\n left: 50%;\n transform: translateX(-50%);\n align-items: center;\n flex-direction: column-reverse;\n}\n","import { useContext } from \"react\";\n\nimport type { IToastOptions } from \"src/components/Toast/ToastProvider/ToastProvider\";\nimport { ToastContext } from \"src/components/Toast/ToastProvider/ToastProvider\";\nimport type { TToastVariant } from \"src/components/Toast/types\";\n\ntype TShowByVariant = (options?: Omit<IToastOptions, \"variant\">) => string;\n\nexport interface IUseToastResult {\n show: (options: IToastOptions) => string;\n close: (id: string) => void;\n info: TShowByVariant;\n success: TShowByVariant;\n warning: TShowByVariant;\n error: TShowByVariant;\n}\n\nexport const useToast = (): IUseToastResult => {\n const ctx = useContext(ToastContext);\n if (!ctx) {\n throw new Error(\"useToast использован вне ToastProvider\");\n }\n\n const make =\n (variant: TToastVariant) =>\n (options: Omit<IToastOptions, \"variant\"> = {}) =>\n ctx.show({ variant, ...options });\n\n return {\n show: ctx.show,\n close: ctx.close,\n info: make(\"info\"),\n success: make(\"success\"),\n warning: make(\"warning\"),\n error: make(\"error\"),\n };\n};\n","import type { ReactElement, ReactNode } from \"react\";\nimport { cloneElement, isValidElement, useState } from \"react\";\n\nimport {\n autoUpdate,\n flip,\n offset,\n shift,\n useFloating,\n useFocus,\n useHover,\n useInteractions,\n useMergeRefs,\n useRole,\n} from \"@floating-ui/react\";\n\nimport { cx } from \"src/utils/utils\";\n\nimport type { ITooltipProps } from \"./types\";\n\nimport styles from \"./Tooltip.module.css\";\n\nexport const Tooltip = ({\n content,\n children,\n placement = \"top\",\n delay = 200,\n className,\n ...props\n}: ITooltipProps): ReactNode => {\n const [open, setOpen] = useState(false);\n\n const {\n refs,\n floatingStyles,\n context,\n placement: finalPlacement,\n } = useFloating({\n open,\n onOpenChange: setOpen,\n placement,\n whileElementsMounted: autoUpdate,\n middleware: [offset(8), flip(), shift({ padding: 8 })],\n });\n\n const hover = useHover(context, { delay: { open: delay, close: 0 } });\n const focus = useFocus(context);\n const role = useRole(context, { role: \"tooltip\" });\n\n const { getReferenceProps, getFloatingProps } = useInteractions([hover, focus, role]);\n\n const childRef = isValidElement(children)\n ? ((children as any).props?.ref ?? (children as any).ref)\n : null;\n const mergedRef = useMergeRefs([refs.setReference, childRef]);\n\n const child = isValidElement(children) ? (\n cloneElement(\n children as ReactElement<any>,\n getReferenceProps({\n ...(children as ReactElement<any>).props,\n ref: mergedRef,\n }),\n )\n ) : (\n <span ref={refs.setReference} {...getReferenceProps()}>\n {children}\n </span>\n );\n\n return (\n <>\n {child}\n {open && (\n <div\n // oxlint-disable-next-line react/refs\n ref={refs.setFloating}\n style={floatingStyles}\n data-placement={finalPlacement}\n className={cx(styles.tooltip, className)}\n {...getFloatingProps(props)}\n >\n {content}\n <div className={styles.arrow} />\n </div>\n )}\n </>\n );\n};\n","@import \"../../styles/tokens.css\";\n\n.tooltip {\n z-index: var(--uikit-z-index-tooltip);\n max-width: 250px;\n padding: 6px 12px;\n font-size: var(--uikit-font-size-xs);\n font-weight: var(--uikit-font-weight-medium);\n line-height: 1.4;\n color: var(--uikit-color-text-inverse);\n background-color: var(--uikit-color-surface-inverse);\n border-radius: var(--uikit-radius-sm);\n box-shadow:\n 0 4px 6px -1px rgba(0, 0, 0, 0.1),\n 0 2px 4px -1px rgba(0, 0, 0, 0.06);\n pointer-events: none;\n animation: fadeIn 0.15s ease-out;\n}\n\n.arrow {\n position: absolute;\n width: 8px;\n height: 8px;\n background-color: inherit;\n transform: rotate(45deg);\n}\n\n/* ---------- TOP ---------- */\n.tooltip[data-placement^=\"top\"] .arrow {\n bottom: -4px;\n left: calc(50% - 4px);\n}\n\n.tooltip[data-placement=\"top-start\"] .arrow {\n left: 12px;\n right: auto;\n}\n\n.tooltip[data-placement=\"top-end\"] .arrow {\n left: auto;\n right: 12px;\n}\n\n/* ---------- BOTTOM ---------- */\n.tooltip[data-placement^=\"bottom\"] .arrow {\n top: -4px;\n left: calc(50% - 4px);\n}\n\n.tooltip[data-placement=\"bottom-start\"] .arrow {\n left: 12px;\n right: auto;\n}\n\n.tooltip[data-placement=\"bottom-end\"] .arrow {\n left: auto;\n right: 12px;\n}\n\n/* ---------- LEFT ---------- */\n.tooltip[data-placement^=\"left\"] .arrow {\n right: -4px;\n top: calc(50% - 4px);\n}\n\n.tooltip[data-placement=\"left-start\"] .arrow {\n top: 8px;\n bottom: auto;\n}\n\n.tooltip[data-placement=\"left-end\"] .arrow {\n top: auto;\n bottom: 8px;\n}\n\n/* ---------- RIGHT ---------- */\n.tooltip[data-placement^=\"right\"] .arrow {\n left: -4px;\n top: calc(50% - 4px);\n}\n\n.tooltip[data-placement=\"right-start\"] .arrow {\n top: 8px;\n bottom: auto;\n}\n\n.tooltip[data-placement=\"right-end\"] .arrow {\n top: auto;\n bottom: 8px;\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n}\n"],"mappings":"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","names":["accordion","item","disabled","header","trigger","icon","iconOpen","contentWrapper","contentWrapperOpen","contentInner","jsx","jsx","useContext","useContext","jsx","jsx","jsx","useState","alert","content","title","description","closeButton","info","success","warning","error","jsx","jsxs","useState","badge","count","dot","blue","red","green","jsx","button","primary","secondary","sm","md","lg","jsx","forwardRef","useId","sm","md","lg","root","label","input","disabled","required","error","jsx","jsxs","forwardRef","useId","forwardRef","useId","sm","md","lg","root","label","required","field","disabled","invalid","input","icon","message","error","jsx","jsxs","forwardRef","useId","useEffect","useId","useRef","modal","modal-in","fade-in","sm","md","lg","content","header","title","close","body","footer","jsx","jsxs","useRef","useId","useEffect","forwardRef","useContext","useId","createContext","sm","md","lg","root","label","input","hasError","disabled","required","error","jsx","jsxs","forwardRef","useContext","useId","useId","useId","useState","jsx","useState","useId","root","disabled","groupLabel","required","options","error","jsx","jsxs","useId","skeleton","text","rect","circle","lines","withChildren","hidden","pulse","wave","jsx","spinner","sm","md","lg","item","circle","spin","dots","beat","spiral","propagate","jsx","forwardRef","sm","md","lg","root","input","track","thumb","disabled","jsx","jsxs","forwardRef","useId","useRef","useState","tabs","list","tab","panel","jsx","jsxs","useState","useId","useRef","useEffect","useRef","useState","toast","toast-in","content","title","description","closeButton","info","success","warning","error","jsx","jsxs","useState","useRef","useEffect","createContext","useCallback","useState","container","top-right","top-left","top-center","bottom-right","bottom-left","bottom-center","jsx","jsxs","createContext","useState","useCallback","useContext","useContext","useState","tooltip","fadeIn","arrow","jsx","jsxs","useState"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/utils.ts","../src/components/Accordion/context.ts","../src/components/Accordion/hooks/useAccordionState.ts","../src/components/Accordion/AccordionProvider/AccordionProvider.tsx","../src/components/Accordion/Accordion.module.css","../src/components/Accordion/Accordion.tsx","../src/components/Accordion/hooks/useAccordionItem.ts","../src/components/Accordion/components/AccordionContent.tsx","../src/components/Accordion/AccordionProvider/AccordionItemProvider.tsx","../src/components/Accordion/hooks/useAccordion.ts","../src/components/Accordion/components/AccordionItem.tsx","../src/components/Accordion/components/AccordionTrigger.tsx","../src/components/Alert/Alert.tsx","../src/components/Alert/Alert.module.css","../src/components/Badge/Badge.module.css","../src/components/Badge/Badge.tsx","../src/components/Button/Button.tsx","../src/components/Button/Button.module.css","../src/components/Checkbox/Checkbox.tsx","../src/components/Checkbox/Checkbox.module.css","../src/components/Input/Input.tsx","../src/components/Input/Input.module.css","../src/components/Modal/Modal.tsx","../src/components/Modal/Modal.module.css","../src/components/Radio/Radio.tsx","../src/components/RadioGroup/RadioGroupProvider/context.ts","../src/components/Radio/Radio.module.css","../src/components/RadioGroup/RadioGroup.tsx","../src/components/RadioGroup/RadioGroupProvider/RadioGroupProvider.tsx","../src/components/RadioGroup/RadioGroup.module.css","../src/components/Skeleton/Skeleton.module.css","../src/components/Skeleton/Skeleton.tsx","../src/components/Spinner/constants.ts","../src/components/Spinner/Spinner.module.css","../src/components/Spinner/Spinner.tsx","../src/components/Switch/Switch.tsx","../src/components/Switch/Switch.module.css","../src/components/Tabs/Tabs.tsx","../src/components/Tabs/Tabs.module.css","../src/components/Toast/Toast.tsx","../src/components/Toast/Toast.module.css","../src/components/Toast/ToastProvider/ToastProvider.tsx","../src/components/Toast/ToastProvider/ToastContainer.module.css","../src/components/Toast/ToastProvider/hook/useToast.ts","../src/components/Tooltip/Tooltip.tsx","../src/components/Tooltip/Tooltip.module.css"],"sourcesContent":["/**\n * Склеивает CSS-классы в одну строку через пробел, отбрасывая пустые значения\n * (`false`, `undefined`, `\"\"`)\n *\n * @example\n * cx(styles.button, isActive && styles.active, className);\n * // isActive = false, className = undefined → \"Button_button\"\n */\nexport const cx = (...classes: Array<string | false | undefined>): string =>\n classes.filter(Boolean).join(\" \");\n\n/** Размер для CSS-свойства: число (в пикселях) или готовая CSS-строка. */\nexport type TCssSize = number | string;\n\n/**\n * Приводит размер к значению для inline-стиля: число превращает в пиксели,\n * строку возвращает как есть, `undefined` пропускает (React тогда не выставит свойство).\n *\n * @example\n * toCss(200); // \"200px\"\n * toCss(\"50%\"); // \"50%\"\n * toCss(); // undefined\n */\nexport const toCss = (value?: TCssSize): string | undefined =>\n typeof value === \"number\" ? `${value}px` : value;\n","import { createContext } from \"react\";\n\nexport type TAccordionContextValue = {\n openValues: string[];\n toggleItem: (itemValue: string) => void;\n disabled?: boolean;\n};\n\nexport const AccordionContext = createContext<TAccordionContextValue | null>(null);\n\nexport type TAccordionItemContextValue = {\n value: string;\n isOpen: boolean;\n baseId: string;\n disabled?: boolean;\n};\n\nexport const AccordionItemContext = createContext<TAccordionItemContextValue | null>(null);\n","import { useState } from \"react\";\n\ninterface IUseAccordionStateParams {\n type: \"single\" | \"multiple\";\n defaultValue?: string[];\n value?: string[];\n onValueChange?: (value: string[]) => void;\n}\n\nexport interface IUseAccordionStateReturn {\n openValues: string[];\n toggleItem: (itemValue: string) => void;\n}\n\nexport const useAccordionState = ({\n type,\n defaultValue = [],\n value: controlledValue,\n onValueChange,\n}: IUseAccordionStateParams): IUseAccordionStateReturn => {\n const [uncontrolledValue, setUncontrolledValue] = useState<string[]>(defaultValue);\n const isControlled = controlledValue !== undefined;\n const openValues = isControlled ? controlledValue : uncontrolledValue;\n\n const toggleItem = (itemValue: string) => {\n const isCurrentlyOpen = openValues.includes(itemValue);\n\n let nextValue: string[];\n\n if (type === \"single\") {\n nextValue = isCurrentlyOpen ? [] : [itemValue];\n } else {\n nextValue = isCurrentlyOpen\n ? openValues.filter((v) => v !== itemValue)\n : [...openValues, itemValue];\n }\n\n if (!isControlled) {\n setUncontrolledValue(nextValue);\n }\n onValueChange?.(nextValue);\n };\n\n return { openValues, toggleItem };\n};\n","import type { ReactNode } from \"react\";\n\nimport { AccordionContext } from \"../context\";\nimport { useAccordionState } from \"../hooks/useAccordionState\";\n\ninterface IAccordionProviderProps {\n type?: \"single\" | \"multiple\";\n defaultValue?: string[];\n value?: string[];\n onValueChange?: (value: string[]) => void;\n disabled?: boolean;\n children: ReactNode;\n}\n\nexport const AccordionProvider = ({\n type = \"single\",\n defaultValue,\n value,\n onValueChange,\n disabled,\n children,\n}: IAccordionProviderProps): ReactNode => {\n const { openValues, toggleItem } = useAccordionState({\n type,\n defaultValue,\n value,\n onValueChange,\n });\n\n return (\n <AccordionContext.Provider value={{ openValues, toggleItem, disabled }}>\n {children}\n </AccordionContext.Provider>\n );\n};\n","@import \"../../styles/tokens.css\";\n\n.accordion {\n display: flex;\n flex-direction: column;\n width: 100%;\n border-radius: var(--uikit-radius-md);\n border: 1px solid var(--uikit-color-border);\n overflow: hidden;\n}\n\n.item {\n border-bottom: 1px solid var(--uikit-color-border);\n}\n\n.item:last-child {\n border-bottom: none;\n}\n\n.item.disabled {\n opacity: 0.5;\n}\n\n.header {\n margin: 0;\n}\n\n.trigger {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n padding: 16px;\n background-color: transparent;\n border: none;\n font-family: inherit;\n font-size: var(--uikit-font-size-md);\n font-weight: var(--uikit-font-weight-medium);\n color: var(--uikit-color-text);\n cursor: pointer;\n text-align: left;\n transition: background-color 0.2s ease;\n}\n\n.trigger:hover:not(:disabled) {\n background-color: var(--uikit-color-surface-hover);\n}\n\n.trigger:focus-visible {\n outline: 2px solid var(--uikit-color-accent);\n outline-offset: -2px;\n}\n\n.trigger:disabled {\n cursor: not-allowed;\n}\n\n.icon {\n transition: transform 0.2s ease;\n flex-shrink: 0;\n}\n\n.iconOpen {\n transform: rotate(180deg);\n}\n\n.contentWrapper {\n display: grid;\n grid-template-rows: 0fr;\n transition: grid-template-rows 0.3s ease-out;\n}\n\n.contentWrapperOpen {\n grid-template-rows: 1fr;\n}\n\n.contentInner {\n overflow: hidden;\n}\n\n.contentInner > * {\n padding: 0 16px 16px 16px;\n margin: 0;\n font-size: var(--uikit-font-size-sm);\n color: var(--uikit-color-text-muted);\n line-height: 1.5;\n}\n","import type { ReactNode } from \"react\";\n\nimport { cx } from \"src/utils/utils\";\n\nimport { AccordionProvider } from \"./AccordionProvider/AccordionProvider\";\n\nimport type { IAccordionProps } from \"./types\";\n\nimport styles from \"./Accordion.module.css\";\n\nexport const Accordion = ({\n type = \"single\",\n defaultValue,\n value,\n onValueChange,\n disabled,\n className,\n children,\n ...props\n}: IAccordionProps): ReactNode => (\n <AccordionProvider\n type={type}\n defaultValue={defaultValue}\n value={value}\n onValueChange={onValueChange}\n disabled={disabled}\n >\n <div className={cx(styles.accordion, className)} {...props}>\n {children}\n </div>\n </AccordionProvider>\n);\n\nAccordion.displayName = \"Accordion\";\n","import { useContext } from \"react\";\n\nimport { AccordionItemContext } from \"../context\";\n\nimport type { TAccordionItemContextValue } from \"../context\";\n\nexport const useAccordionItem = (): TAccordionItemContextValue => {\n const context = useContext(AccordionItemContext);\n if (!context) {\n throw new Error(\"useAccordionItem использован вне AccordionItem\");\n }\n return context;\n};\n","import type { ReactNode } from \"react\";\n\nimport { cx } from \"src/utils/utils\";\n\nimport { useAccordionItem } from \"../hooks/useAccordionItem\";\n\nimport type { IAccordionContentProps } from \"../types\";\n\nimport styles from \"../Accordion.module.css\";\n\nexport const AccordionContent = ({\n className,\n children,\n ...props\n}: IAccordionContentProps): ReactNode => {\n const { isOpen, baseId } = useAccordionItem();\n\n return (\n <div\n id={`content-${baseId}`}\n role=\"region\"\n aria-labelledby={`trigger-${baseId}`}\n className={cx(styles.contentWrapper, isOpen && styles.contentWrapperOpen, className)}\n {...props}\n >\n <div className={styles.contentInner}>{children}</div>\n </div>\n );\n};\n\nAccordionContent.displayName = \"AccordionContent\";\n","import { type ReactNode, useId } from \"react\";\n\nimport { AccordionItemContext } from \"../context\";\nimport { useAccordion } from \"../hooks/useAccordion\";\n\ninterface IAccordionItemProviderProps {\n value: string;\n disabled?: boolean;\n children: ReactNode;\n}\n\nexport const AccordionItemProvider = ({\n value,\n disabled: itemDisabled,\n children,\n}: IAccordionItemProviderProps): ReactNode => {\n const { openValues, disabled: rootDisabled } = useAccordion();\n\n const isOpen = openValues.includes(value);\n const disabled = rootDisabled || itemDisabled;\n\n const baseId = useId();\n\n return (\n <AccordionItemContext.Provider value={{ value, isOpen, baseId, disabled }}>\n {children}\n </AccordionItemContext.Provider>\n );\n};\n","import { useContext } from \"react\";\n\nimport { AccordionContext } from \"../context\";\n\nimport type { TAccordionContextValue } from \"../context\";\n\nexport const useAccordion = (): TAccordionContextValue => {\n const context = useContext(AccordionContext);\n if (!context) {\n throw new Error(\"useAccordion использован вне Accordion\");\n }\n return context;\n};\n","import type { ReactNode } from \"react\";\n\nimport { cx } from \"src/utils/utils\";\n\nimport { AccordionItemProvider } from \"../AccordionProvider/AccordionItemProvider\";\n\nimport type { IAccordionItemProps } from \"../types\";\n\nimport styles from \"../Accordion.module.css\";\n\nexport const AccordionItem = ({\n value,\n disabled,\n className,\n children,\n ...props\n}: IAccordionItemProps): ReactNode => (\n <AccordionItemProvider value={value} disabled={disabled}>\n <div className={cx(styles.item, disabled && styles.disabled, className)} {...props}>\n {children}\n </div>\n </AccordionItemProvider>\n);\n","import type { ReactNode } from \"react\";\n\nimport { cx } from \"src/utils/utils\";\n\nimport { useAccordion } from \"../hooks/useAccordion\";\nimport { useAccordionItem } from \"../hooks/useAccordionItem\";\n\nimport type { IAccordionTriggerProps } from \"../types\";\n\nimport styles from \"../Accordion.module.css\";\n\nexport const AccordionTrigger = ({\n className,\n children,\n disabled: triggerDisabled,\n ...props\n}: IAccordionTriggerProps): ReactNode => {\n const { toggleItem } = useAccordion();\n const { value, isOpen, baseId, disabled } = useAccordionItem();\n\n const isDisabled = disabled || triggerDisabled;\n\n return (\n <h3 className={styles.header}>\n <button\n type=\"button\"\n id={`trigger-${baseId}`}\n aria-expanded={isOpen}\n aria-controls={`content-${baseId}`}\n disabled={isDisabled}\n className={cx(styles.trigger, className)}\n onClick={() => toggleItem(value)}\n {...props}\n >\n {children}\n <svg\n className={cx(styles.icon, isOpen && styles.iconOpen)}\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M4 6L8 10L12 6\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n </h3>\n );\n};\n\nAccordionTrigger.displayName = \"AccordionTrigger\";\n","import type { ReactNode } from \"react\";\nimport { useState } from \"react\";\n\nimport { cx } from \"src/utils/utils\";\n\nimport type { IAlertProps } from \"./types\";\n\nimport styles from \"./Alert.module.css\";\n\nexport const Alert = ({\n variant = \"info\",\n title,\n closable = false,\n onClose,\n children,\n className,\n ...props\n}: IAlertProps): ReactNode => {\n const [visible, setVisible] = useState(true);\n\n if (!visible) {\n return null;\n }\n\n const handleClose = () => {\n setVisible(false);\n onClose?.();\n };\n\n const classes = cx(styles.alert, styles[variant], className);\n\n return (\n <div className={classes} role=\"alert\" {...props}>\n <div className={styles.content}>\n {title && <div className={styles.title}>{title}</div>}\n {children && <div className={styles.description}>{children}</div>}\n </div>\n\n {closable && (\n <button\n type=\"button\"\n className={styles.closeButton}\n onClick={handleClose}\n aria-label=\"Close alert\"\n >\n ×\n </button>\n )}\n </div>\n );\n};\n\nAlert.displayName = \"Alert\";\n","@import \"../../styles/tokens.css\";\n\n.alert {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n padding: 12px 16px;\n border-radius: 8px;\n}\n\n.content {\n flex: 1;\n min-width: 0;\n}\n\n.title {\n font-size: var(--uikit-font-size-lg);\n font-weight: var(--uikit-font-weight-bold);\n margin-bottom: 4px;\n}\n\n.description {\n font-size: var(--uikit-font-size-sm);\n line-height: 1.5;\n}\n\n.closeButton {\n background: none;\n border: none;\n cursor: pointer;\n font-size: var(--uikit-font-size-xl);\n line-height: 1;\n padding: 0;\n color: inherit;\n opacity: 0.6;\n}\n\n.closeButton:hover {\n opacity: 1;\n}\n\n.info {\n background-color: var(--uikit-color-info-bg);\n color: var(--uikit-color-info-text);\n}\n\n.success {\n background-color: var(--uikit-color-success-bg);\n color: var(--uikit-color-success-text);\n}\n\n.warning {\n background-color: var(--uikit-color-warning-bg);\n color: var(--uikit-color-warning-text);\n}\n\n.error {\n background-color: var(--uikit-color-error-bg);\n color: var(--uikit-color-error-text);\n}\n","@import \"../../styles/tokens.css\";\n\n.badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n align-self: flex-start;\n flex: none;\n border-radius: 999px;\n}\n\n.count {\n padding: 2px 8px;\n font-size: var(--uikit-font-size-xs);\n font-weight: var(--uikit-font-weight-medium);\n line-height: 1.4;\n}\n\n.dot {\n width: 8px;\n height: 8px;\n padding: 0;\n}\n\n.blue {\n background-color: var(--uikit-color-accent);\n color: var(--uikit-color-text-on-accent);\n}\n\n.red {\n background-color: var(--uikit-color-danger);\n color: var(--uikit-color-text-on-accent);\n}\n\n.green {\n background-color: var(--uikit-color-success);\n color: var(--uikit-color-text-on-accent);\n}\n","import type { ReactNode } from \"react\";\n\nimport { cx } from \"src/utils/utils\";\n\nimport type { IBadgeProps } from \"./types\";\n\nimport styles from \"./Badge.module.css\";\n\nconst formatCount = (count: number, max: number): string => {\n if (count > max) {\n return `${max}+`;\n }\n return String(count);\n};\n\nexport const Badge = ({\n color = \"blue\",\n max = 999,\n count,\n className,\n ...props\n}: IBadgeProps): ReactNode => {\n const isDot = count === undefined;\n const classes = cx(styles.badge, isDot ? styles.dot : styles.count, styles[color], className);\n\n return (\n <span className={classes} {...props}>\n {isDot ? null : formatCount(count, max)}\n </span>\n );\n};\n\nBadge.displayName = \"Badge\";\n","import { forwardRef } from \"react\";\n\nimport { cx } from \"src/utils/utils\";\n\nimport type { IButtonProps } from \"./types\";\n\nimport styles from \"./Button.module.css\";\n\nexport const Button = forwardRef<HTMLButtonElement, IButtonProps>(\n ({ variant = \"primary\", size = \"md\", type = \"button\", className, ...props }, ref) => {\n const classes = cx(styles.button, styles[variant], styles[size], className);\n\n return <button ref={ref} type={type} className={classes} {...props} />;\n },\n);\n\nButton.displayName = \"Button\";\n","@import \"../../styles/tokens.css\";\n\n.button {\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 0.5em;\n border: 1px solid transparent;\n border-radius: 6px;\n line-height: 1.2;\n cursor: pointer;\n transition:\n background-color 0.15s ease,\n border-color 0.15s ease;\n}\n\n.button:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n.primary {\n background-color: var(--uikit-color-accent);\n color: var(--uikit-color-text-on-accent);\n}\n\n.primary:not(:disabled):hover {\n background-color: var(--uikit-color-accent-hover);\n}\n\n.secondary {\n background-color: var(--uikit-color-surface);\n border-color: var(--uikit-color-border);\n color: var(--uikit-color-text);\n}\n\n.secondary:not(:disabled):hover {\n background-color: var(--uikit-color-surface-hover);\n}\n\n.sm {\n height: 32px;\n padding: 0 10px;\n font-size: var(--uikit-font-size-xs);\n font-weight: var(--uikit-font-weight-medium);\n}\n\n.md {\n height: 40px;\n padding: 0 16px;\n font-size: var(--uikit-font-size-sm);\n font-weight: var(--uikit-font-weight-medium);\n}\n\n.lg {\n height: 48px;\n padding: 0 20px;\n font-size: var(--uikit-font-size-md);\n font-weight: var(--uikit-font-weight-medium);\n}\n","import type { ReactElement } from \"react\";\nimport { forwardRef, useEffect, useId, useImperativeHandle, useRef } from \"react\";\n\nimport { cx } from \"src/utils/utils\";\n\nimport type { ICheckboxProps } from \"./types\";\n\nimport styles from \"./Checkbox.module.css\";\n\nexport const Checkbox = forwardRef<HTMLInputElement, ICheckboxProps>(\n (\n {\n size = \"md\",\n label,\n indeterminate,\n error,\n className,\n disabled,\n required,\n id,\n \"aria-describedby\": ariaDescribedBy,\n ...props\n },\n ref,\n ): ReactElement => {\n const innerRef = useRef<HTMLInputElement>(null);\n const autoId = useId();\n const checkboxId = id ?? autoId;\n\n const hasError = Boolean(error);\n const messageId = hasError ? `${checkboxId}-message` : undefined;\n const describeBy = [ariaDescribedBy, messageId].filter(Boolean).join(\" \") || undefined;\n\n useImperativeHandle(ref, () => innerRef.current as HTMLInputElement, []);\n\n useEffect(() => {\n if (innerRef.current) {\n innerRef.current.indeterminate = Boolean(indeterminate);\n }\n }, [indeterminate]);\n\n return (\n <div className={cx(styles.root, styles[size], disabled && styles.disabled, className)}>\n <label className={styles.label}>\n <input\n id={checkboxId}\n ref={innerRef}\n type=\"checkbox\"\n className={styles.input}\n disabled={disabled}\n required={required}\n aria-invalid={hasError || undefined}\n aria-describedby={describeBy}\n {...props}\n />\n {label}\n {required && (\n <span className={styles.required} aria-hidden=\"true\">\n {\" *\"}\n </span>\n )}\n </label>\n {hasError && (\n <p id={messageId} className={styles.error}>\n {error}\n </p>\n )}\n </div>\n );\n },\n);\n\nCheckbox.displayName = \"Checkbox\";\n","@import \"../../styles/tokens.css\";\n\n.sm {\n --checkbox-size: 14px;\n --checkbox-radius: 3px;\n --checkbox-gap: 6px;\n --checkbox-label-size: var(--uikit-font-size-xs);\n --checkbox-message-size: var(--uikit-font-size-2xs);\n}\n.md {\n --checkbox-size: 16px;\n --checkbox-radius: 4px;\n --checkbox-gap: 8px;\n --checkbox-label-size: var(--uikit-font-size-sm);\n --checkbox-message-size: var(--uikit-font-size-xs);\n}\n.lg {\n --checkbox-size: 20px;\n --checkbox-radius: 4px;\n --checkbox-gap: 10px;\n --checkbox-label-size: var(--uikit-font-size-md);\n --checkbox-message-size: var(--uikit-font-size-sm);\n}\n\n.root {\n display: inline-flex;\n flex-direction: column;\n}\n\n.label {\n display: inline-flex;\n align-items: center;\n gap: var(--checkbox-gap);\n font-size: var(--checkbox-label-size);\n color: var(--uikit-color-text);\n cursor: pointer;\n}\n\n.input {\n appearance: none;\n flex: none;\n box-sizing: border-box;\n width: var(--checkbox-size);\n height: var(--checkbox-size);\n margin: 0;\n border: 1.5px solid var(--uikit-color-text-muted);\n border-radius: var(--checkbox-radius);\n background: var(--uikit-color-surface) center / 100% no-repeat;\n cursor: pointer;\n transition:\n background-color 0.15s ease,\n border-color 0.15s ease;\n}\n\n.input:hover:not(:disabled) {\n border-color: var(--uikit-color-accent);\n}\n\n.input:checked,\n.input:indeterminate {\n border-color: var(--uikit-color-accent);\n background-color: var(--uikit-color-accent);\n}\n\n.input:checked:hover:not(:disabled),\n.input:indeterminate:hover:not(:disabled) {\n border-color: var(--uikit-color-accent-hover);\n background-color: var(--uikit-color-accent-hover);\n}\n\n.input:checked {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='3.5 8.5 6.5 11.5 12.5 4.5'/%3E%3C/svg%3E\");\n}\n\n.input:indeterminate {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='white' stroke-width='2' stroke-linecap='round'%3E%3Cline x1='4' y1='8' x2='12' y2='8'/%3E%3C/svg%3E\");\n}\n\n.input:focus-visible {\n outline: none;\n box-shadow: 0 0 0 3px var(--uikit-color-ring-accent);\n}\n\n.input[aria-invalid=\"true\"]:not(:checked):not(:indeterminate) {\n border-color: var(--uikit-color-danger);\n}\n.input[aria-invalid=\"true\"]:focus-visible {\n box-shadow: 0 0 0 3px var(--uikit-color-ring-error);\n}\n\n.disabled {\n opacity: 0.5;\n}\n.disabled .label,\n.disabled .input {\n cursor: not-allowed;\n}\n\n.required {\n color: var(--uikit-color-danger);\n}\n\n.error {\n margin: 4px 0 0;\n padding-left: calc(var(--checkbox-size) + var(--checkbox-gap));\n font-size: var(--checkbox-message-size);\n color: var(--uikit-color-danger);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .input {\n transition: none;\n }\n}\n","import { forwardRef, useId } from \"react\";\n\nimport { cx } from \"src/utils/utils\";\n\nimport type { IInputProps } from \"./types\";\n\nimport styles from \"./Input.module.css\";\n\nexport const Input = forwardRef<HTMLInputElement, IInputProps>(\n (\n {\n size = \"md\",\n label,\n hint,\n error,\n startIcon,\n endIcon,\n className,\n id,\n required,\n disabled,\n \"aria-describedby\": ariaDescribedBy,\n ...props\n },\n ref,\n ) => {\n const autoId = useId();\n const inputId = id ?? autoId;\n\n const hasError = Boolean(error);\n const message = hasError ? error : hint;\n const messageId = message ? `${inputId}-message` : undefined;\n const describeBy = [ariaDescribedBy, messageId].filter(Boolean).join(\" \") || undefined;\n\n return (\n <div className={cx(styles.root, styles[size], className)}>\n {label && (\n <label htmlFor={inputId} className={styles.label}>\n {label}{\" \"}\n {required && (\n <span className={styles.required} aria-hidden=\"true\">\n {\" *\"}\n </span>\n )}\n </label>\n )}\n <div className={cx(styles.field, hasError && styles.invalid, disabled && styles.disabled)}>\n {startIcon && <span className={styles.icon}>{startIcon}</span>}\n <input\n ref={ref}\n id={inputId}\n required={required}\n disabled={disabled}\n aria-invalid={hasError || undefined}\n aria-describedby={describeBy}\n className={styles.input}\n {...props}\n />\n {endIcon && <span className={styles.icon}>{endIcon}</span>}\n </div>\n {message && (\n <p id={messageId} className={cx(styles.message, hasError && styles.error)}>\n {message}\n </p>\n )}\n </div>\n );\n },\n);\n\nInput.displayName = \"Input\";\n","@import \"../../styles/tokens.css\";\n\n.sm {\n --input-height: var(--uikit-input-height-sm);\n --input-font-size: var(--uikit-font-size-xs);\n --input-label-size: var(--uikit-font-size-xs);\n --input-message-size: var(--uikit-font-size-2xs);\n}\n.md {\n --input-height: var(--uikit-input-height-md);\n --input-font-size: var(--uikit-font-size-sm);\n --input-label-size: var(--uikit-font-size-sm);\n --input-message-size: var(--uikit-font-size-xs);\n}\n.lg {\n --input-height: var(--uikit-input-height-lg);\n --input-font-size: var(--uikit-font-size-md);\n --input-label-size: var(--uikit-font-size-md);\n --input-message-size: var(--uikit-font-size-sm);\n}\n\n.root {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.label {\n font-size: var(--uikit-font-size-sm);\n font-weight: var(--uikit-font-weight-medium);\n color: var(--uikit-color-text);\n font-size: var(--input-label-size);\n}\n\n.required {\n color: var(--uikit-color-danger);\n}\n\n.field {\n height: var(--input-height);\n font-size: var(--input-font-size);\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 0 12px;\n border: 1px solid var(--uikit-color-border);\n border-radius: var(--uikit-radius-md);\n background: var(--uikit-color-surface);\n transition:\n border-color 0.15s ease,\n box-shadow 0.15s ease;\n}\n\n.field:hover:not(.disabled) {\n border-color: var(--uikit-color-border-hover);\n}\n\n.field:focus-within {\n border-color: var(--uikit-color-border-focus);\n box-shadow: 0 0 0 3px var(--uikit-color-ring-accent);\n}\n\n.invalid,\n.invalid:hover:not(.disabled) {\n border-color: var(--uikit-color-danger);\n}\n\n.invalid:focus-within {\n box-shadow: 0 0 0 3px var(--uikit-color-ring-error);\n}\n\n.disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.input {\n flex: 1;\n min-width: 0;\n height: 100%;\n padding: 0;\n border: none;\n outline: none;\n background: transparent;\n color: var(--uikit-color-text);\n font: inherit;\n}\n\n.input::placeholder {\n color: var(--uikit-color-text-placeholder);\n}\n\n.input:disabled {\n cursor: not-allowed;\n pointer-events: none;\n}\n\n.icon {\n display: inline-flex;\n flex: none;\n color: var(--uikit-color-text-muted);\n}\n\n.message {\n margin: 0;\n font-size: var(--input-message-size);\n color: var(--uikit-color-text-muted);\n}\n.error {\n color: var(--uikit-color-danger);\n}\n","import type { ReactNode } from \"react\";\nimport { useEffect, useId, useRef } from \"react\";\n\nimport { cx, toCss } from \"src/utils/utils\";\n\nimport type { IModalProps } from \"./types\";\n\nimport styles from \"./Modal.module.css\";\n\nexport const Modal = ({\n open,\n onClose,\n title,\n footer,\n size = \"md\",\n width,\n children,\n}: IModalProps): ReactNode => {\n const ref = useRef<HTMLDialogElement>(null);\n const titleId = useId();\n\n useEffect(() => {\n if (open) {\n ref.current?.showModal();\n } else {\n ref.current?.close();\n }\n }, [open]);\n\n const close = () => ref.current?.close();\n\n return (\n // Escape у <dialog> уже закрывает модалку с клавиатуры\n // oxlint-disable-next-line jsx-a11y/click-events-have-key-events jsx-a11y/no-noninteractive-element-interactions\n <dialog\n ref={ref}\n className={cx(styles.modal, styles[size])}\n style={{ maxWidth: toCss(width) }}\n aria-labelledby={title ? titleId : undefined}\n onClose={onClose}\n onClick={(e) => e.target === e.currentTarget && close()}\n >\n <div className={styles.content}>\n {title && (\n <header className={styles.header}>\n <h2 id={titleId} className={styles.title}>\n {title}\n </h2>\n <button type=\"button\" className={styles.close} aria-label=\"Закрыть\" onClick={close}>\n ×\n </button>\n </header>\n )}\n <div className={styles.body}>{children}</div>\n {footer && <footer className={styles.footer}>{footer}</footer>}\n </div>\n </dialog>\n );\n};\n\nModal.displayName = \"Modal\";\n","@import \"../../styles/tokens.css\";\n\n:global(body):has(.modal[open]) {\n overflow: hidden;\n}\n\n.modal {\n width: calc(100% - 32px);\n max-height: calc(100dvh - 32px);\n padding: 0;\n border: none;\n border-radius: var(--uikit-radius-lg);\n background: var(--uikit-color-surface);\n color: var(--uikit-color-text);\n box-shadow: 0 20px 50px rgb(0 0 0 / 0.2);\n}\n\n.modal[open] {\n display: flex;\n flex-direction: column;\n animation: modal-in 0.2s ease-out;\n}\n\n.modal::backdrop {\n background: var(--uikit-color-overlay);\n}\n.modal[open]::backdrop {\n animation: fade-in 0.2s ease-out;\n}\n\n.sm {\n max-width: 400px;\n}\n.md {\n max-width: 560px;\n}\n.lg {\n max-width: 800px;\n}\n\n.content {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n}\n\n.header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n padding: 16px 20px;\n border-bottom: 1px solid var(--uikit-color-border);\n}\n\n.title {\n margin: 0;\n font-size: 1.125rem;\n font-weight: 600;\n}\n\n.close {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n margin: -4px -8px -4px 0;\n border: none;\n border-radius: 50%;\n background: none;\n color: inherit;\n font-size: 1.5rem;\n line-height: 1;\n cursor: pointer;\n}\n.close:hover {\n background: var(--uikit-color-surface-hover);\n}\n\n.body {\n flex: 1;\n padding: 20px;\n overflow-y: auto;\n}\n\n.footer {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n padding: 16px 20px;\n border-top: 1px solid var(--uikit-color-border);\n}\n\n.close:focus-visible {\n outline: 2px solid var(--uikit-color-accent-focus);\n outline-offset: 2px;\n}\n\n@keyframes modal-in {\n from {\n opacity: 0;\n transform: translateY(8px) scale(0.98);\n }\n}\n@keyframes fade-in {\n from {\n opacity: 0;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .modal[open],\n .modal[open]::backdrop {\n animation: none;\n }\n}\n","import { forwardRef, useContext, useId, type ChangeEvent } from \"react\";\n\nimport { cx } from \"src/utils/utils\";\n\nimport { RadioGroupContext } from \"../RadioGroup/RadioGroupProvider/context\";\n\nimport type { IRadioProps } from \"./types\";\n\nimport styles from \"./Radio.module.css\";\n\nexport const Radio = forwardRef<HTMLInputElement, IRadioProps>(\n (\n {\n size = \"md\",\n label,\n error,\n className,\n disabled,\n required,\n id,\n name,\n value,\n checked,\n onChange,\n \"aria-describedby\": ariaDescribedBy,\n ...props\n },\n ref,\n ) => {\n const group = useContext(RadioGroupContext);\n\n const autoId = useId();\n const radioId = id ?? autoId;\n\n const hasError = Boolean(error);\n const messageId = hasError ? `${radioId}-message` : undefined;\n const describeBy = [ariaDescribedBy, messageId].filter(Boolean).join(\" \") || undefined;\n\n const inputName = group ? group.name : name;\n const isChecked = group ? group.value === String(value) : checked;\n const isDisabled = group?.disabled || disabled;\n const isRequired = group ? group.required : required;\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n onChange?.(event);\n group?.onChange(event.target.value);\n };\n\n return (\n <div\n className={cx(\n styles.root,\n styles[size],\n disabled && styles.disabled,\n hasError && styles.hasError,\n className,\n )}\n >\n <label className={styles.label}>\n <input\n ref={ref}\n id={radioId}\n name={inputName}\n type=\"radio\"\n value={value}\n checked={isChecked}\n onChange={handleChange}\n className={styles.input}\n disabled={isDisabled}\n required={isRequired}\n aria-describedby={describeBy}\n {...props}\n />\n {label}\n {required && !group && (\n <span className={styles.required} aria-hidden=\"true\">\n {\" *\"}\n </span>\n )}\n </label>\n {hasError && (\n <p id={messageId} className={styles.error}>\n {error}\n </p>\n )}\n </div>\n );\n },\n);\n\nRadio.displayName = \"Radio\";\n","import { createContext } from \"react\";\n\nexport interface IRadioGroupContext {\n name: string;\n value?: string;\n onChange: (value: string) => void;\n disabled?: boolean;\n required?: boolean;\n}\n\nexport const RadioGroupContext = createContext<IRadioGroupContext | null>(null);\n","@import \"../../styles/tokens.css\";\n\n.sm {\n --radio-size: 14px;\n --radio-dot-space: 2px;\n --radio-gap: 6px;\n --radio-label-size: var(--uikit-font-size-xs);\n --radio-message-size: var(--uikit-font-size-2xs);\n}\n.md {\n --radio-size: 16px;\n --radio-dot-space: 3px;\n --radio-gap: 8px;\n --radio-label-size: var(--uikit-font-size-sm);\n --radio-message-size: var(--uikit-font-size-xs);\n}\n.lg {\n --radio-size: 20px;\n --radio-dot-space: 4px;\n --radio-gap: 10px;\n --radio-label-size: var(--uikit-font-size-md);\n --radio-message-size: var(--uikit-font-size-sm);\n}\n\n.root {\n display: inline-flex;\n flex-direction: column;\n}\n\n.label {\n display: inline-flex;\n align-items: center;\n gap: var(--radio-gap);\n font-size: var(--radio-label-size);\n color: var(--uikit-color-text);\n cursor: pointer;\n}\n\n.input {\n appearance: none;\n flex: none;\n box-sizing: border-box;\n width: var(--radio-size);\n height: var(--radio-size);\n margin: 0;\n border: 1.5px solid var(--uikit-color-text-muted);\n border-radius: 50%;\n background: var(--uikit-color-surface) center / 100% no-repeat;\n cursor: pointer;\n transition:\n background-color 0.15s ease,\n border-color 0.15s ease;\n}\n\n.input:hover:not(:disabled) {\n border-color: var(--uikit-color-accent);\n}\n\n.input:checked {\n border-color: var(--uikit-color-accent);\n background-color: var(--uikit-color-accent);\n padding: var(--radio-dot-space);\n background-clip: content-box;\n}\n\n.input:checked:hover:not(:disabled) {\n border-color: var(--uikit-color-accent-hover);\n background-color: var(--uikit-color-accent-hover);\n}\n\n.input:focus-visible {\n outline: none;\n box-shadow: 0 0 0 3px var(--uikit-color-ring-accent);\n}\n\n.hasError .input:not(:checked) {\n border-color: var(--uikit-color-danger);\n}\n\n.hasError .input:focus-visible {\n box-shadow: 0 0 0 3px var(--uikit-color-ring-error);\n}\n\n.disabled {\n opacity: 0.5;\n}\n.disabled .label,\n.disabled .input {\n cursor: not-allowed;\n}\n\n.required {\n color: var(--uikit-color-danger);\n}\n\n.error {\n margin: 4px 0 0;\n padding-left: calc(var(--radio-size) + var(--radio-gap));\n font-size: var(--radio-message-size);\n color: var(--uikit-color-danger);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .input {\n transition: none;\n }\n}\n","import { useId, type ReactElement } from \"react\";\n\nimport { cx } from \"src/utils/utils\";\n\nimport { RadioGroupProvider } from \"./RadioGroupProvider/RadioGroupProvider\";\n\nimport type { IRadioGroupProps } from \"./types\";\n\nimport styles from \"./RadioGroup.module.css\";\n\nexport const RadioGroup = ({\n value,\n defaultValue,\n onChange,\n name,\n label,\n error,\n required,\n disabled,\n className,\n children,\n ...props\n}: IRadioGroupProps): ReactElement => {\n const labelId = useId();\n const messageId = useId();\n const hasError = Boolean(error);\n\n return (\n <RadioGroupProvider\n name={name}\n value={value}\n defaultValue={defaultValue}\n onChange={onChange}\n disabled={disabled}\n required={required}\n >\n <div\n className={cx(styles.root, disabled && styles.disabled, className)}\n role=\"radiogroup\"\n aria-labelledby={label ? labelId : undefined}\n aria-invalid={hasError || undefined}\n aria-describedby={hasError ? messageId : undefined}\n aria-required={required || undefined}\n {...props}\n >\n {label && (\n <div id={labelId} className={styles.groupLabel}>\n {label}\n {required && (\n <span className={styles.required} aria-hidden=\"true\">\n {\" *\"}\n </span>\n )}\n </div>\n )}\n\n <div className={styles.options}>{children}</div>\n\n {hasError && (\n <p id={messageId} className={styles.error}>\n {error}\n </p>\n )}\n </div>\n </RadioGroupProvider>\n );\n};\n\nRadioGroup.displayName = \"RadioGroup\";\n","import { useId, useState, type ReactElement, type ReactNode } from \"react\";\n\nimport { RadioGroupContext } from \"./context\";\n\ninterface IRadioGroupProviderProps {\n name?: string;\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n disabled?: boolean;\n required?: boolean;\n children: ReactNode;\n}\n\nexport const RadioGroupProvider = ({\n name,\n value: controlledValue,\n defaultValue,\n onChange,\n disabled,\n required,\n children,\n}: IRadioGroupProviderProps): ReactElement => {\n const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue);\n\n const isControlled = controlledValue !== undefined;\n const currentValue = isControlled ? controlledValue : uncontrolledValue;\n\n const autoId = useId();\n const finalName = name ?? `radiogroup-${autoId}`;\n\n const handleChange = (newValue: string) => {\n if (!isControlled) {\n setUncontrolledValue(newValue);\n }\n onChange?.(newValue);\n };\n\n return (\n <RadioGroupContext.Provider\n value={{\n name: finalName,\n value: currentValue,\n onChange: handleChange,\n disabled,\n required,\n }}\n >\n {children}\n </RadioGroupContext.Provider>\n );\n};\n","@import \"../../styles/tokens.css\";\n\n.root {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.groupLabel {\n font-size: var(--uikit-font-size-sm);\n font-weight: var(--uikit-font-weight-medium);\n color: var(--uikit-color-text);\n margin-bottom: 4px;\n}\n\n.required {\n color: var(--uikit-color-danger);\n}\n\n.options {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.error {\n font-size: var(--uikit-font-size-xs);\n color: var(--uikit-color-danger);\n margin: 4px 0 0 0;\n}\n","@import \"../../styles/tokens.css\";\n\n.skeleton {\n position: relative;\n display: block;\n overflow: hidden;\n background-color: var(--uikit-color-surface-subtle);\n border-radius: var(--uikit-radius-sm);\n}\n\n.text {\n height: 1em;\n}\n.rect {\n border-radius: var(--uikit-radius-md);\n}\n.circle {\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n.lines {\n display: flex;\n flex-direction: column;\n gap: 0.5em;\n}\n\n.withChildren {\n width: fit-content;\n height: auto;\n}\n.hidden {\n visibility: hidden;\n}\n\n.pulse {\n animation: pulse 1.5s ease-in-out infinite;\n}\n\n.wave::after {\n content: \"\";\n position: absolute;\n inset: 0;\n transform: translateX(-100%);\n background: linear-gradient(\n 90deg,\n transparent,\n var(--uikit-color-skeleton-highlight),\n transparent\n );\n animation: wave 1.6s linear infinite;\n}\n\n@keyframes pulse {\n 50% {\n opacity: 0.5;\n }\n}\n@keyframes wave {\n to {\n transform: translateX(100%);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .pulse,\n .wave::after {\n animation: none;\n }\n}\n","import type { CSSProperties, ReactNode } from \"react\";\n\nimport { cx, toCss } from \"src/utils/utils\";\n\nimport type { ISkeletonProps } from \"./types\";\n\nimport styles from \"./Skeleton.module.css\";\n\nexport const Skeleton = ({\n variant = \"text\",\n width,\n height,\n radius,\n lines = 1,\n animation = \"pulse\",\n loading = true,\n className,\n style,\n children,\n ...props\n}: ISkeletonProps): ReactNode => {\n if (!loading) {\n return children;\n }\n\n const baseClasses = cx(styles.skeleton, styles[variant], styles[animation]);\n\n const sizeStyle: CSSProperties = {\n width: toCss(width),\n height: toCss(variant === \"circle\" ? (height ?? width) : height),\n borderRadius: toCss(radius),\n };\n\n if (variant === \"text\" && lines > 1) {\n return (\n <span\n className={cx(styles.lines, className)}\n style={{ width: sizeStyle.width, ...style }}\n aria-hidden=\"true\"\n {...props}\n >\n {Array.from({ length: lines }, (_, i) => (\n <span\n key={i}\n className={baseClasses}\n style={{ ...sizeStyle, width: i === lines - 1 ? \"70%\" : \"100%\" }}\n />\n ))}\n </span>\n );\n }\n\n return (\n <span\n className={cx(baseClasses, children != null && styles.withChildren, className)}\n style={{ ...sizeStyle, ...style }}\n aria-hidden=\"true\"\n {...props}\n >\n {children != null && <span className={styles.hidden}>{children}</span>}\n </span>\n );\n};\n\nSkeleton.displayName = \"Skeleton\";\n","export const SPINNER_VARIANTS = {\n circle: { items: 0 },\n dots: { items: 3 },\n spiral: { items: 5 },\n propagate: { items: 6 },\n} as const satisfies Record<string, { items: number }>;\n","@import \"../../styles/tokens.css\";\n\n.spinner {\n --speed: 1;\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--spinner-size);\n height: var(--spinner-size);\n color: var(--uikit-color-accent);\n flex-shrink: 0;\n}\n\n.sm {\n --spinner-size: var(--uikit-spinner-size-sm);\n}\n.md {\n --spinner-size: var(--uikit-spinner-size-md);\n}\n.lg {\n --spinner-size: var(--uikit-spinner-size-lg);\n}\n\n.item {\n display: block;\n flex-shrink: 0;\n background-color: currentColor;\n}\n\n.circle {\n border: calc(var(--spinner-size) / 8) solid currentColor;\n border-right-color: transparent;\n border-radius: 50%;\n animation: spin calc(0.75s * var(--speed)) linear infinite;\n}\n\n.dots {\n gap: calc(var(--spinner-size) / 8);\n}\n.dots .item {\n width: calc(var(--spinner-size) / 4);\n height: calc(var(--spinner-size) / 4);\n border-radius: 50%;\n animation: beat calc(0.7s * var(--speed)) linear infinite both;\n animation-delay: calc(var(--i) * 0.35s * var(--speed));\n}\n\n.spiral .item {\n position: absolute;\n top: calc(var(--i) * 1.75%);\n left: calc(var(--i) * 0.875%);\n width: calc(100% - var(--i) * 20%);\n height: calc(100% - var(--i) * 20%);\n box-sizing: border-box;\n background-color: transparent;\n border-radius: 50%;\n border-top: calc(var(--spinner-size) / 16) solid currentColor;\n border-left: calc(var(--spinner-size) / 16) solid currentColor;\n animation: spin calc(1s * var(--speed)) linear infinite;\n animation-delay: calc(var(--i) * 0.2s * var(--speed));\n}\n\n.propagate {\n width: calc(var(--spinner-size) / 4 * 11);\n}\n.propagate .item {\n --step: calc(var(--spinner-size) / 4);\n --dir: -1;\n position: absolute;\n width: var(--step);\n height: var(--step);\n border-radius: 50%;\n animation: propagate calc(1.5s * var(--speed)) ease infinite;\n}\n.propagate .item:nth-child(n + 4) {\n --dir: 1;\n}\n.propagate .item:is(:nth-child(1), :nth-child(6)) {\n --x50: 3;\n --s50: 0.6;\n --x75: 5;\n --s75: 0.5;\n}\n.propagate .item:is(:nth-child(2), :nth-child(5)) {\n --x50: 3;\n --s50: 0.6;\n --x75: 3;\n --s75: 0.6;\n}\n.propagate .item:is(:nth-child(3), :nth-child(4)) {\n --x50: 1;\n --s50: 0.75;\n --x75: 1;\n --s75: 0.75;\n}\n\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n@keyframes beat {\n 50% {\n transform: scale(0.75);\n opacity: 0.2;\n }\n\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n\n@keyframes propagate {\n 25% {\n transform: translateX(calc(var(--dir) * var(--step))) scale(0.75);\n }\n 50% {\n transform: translateX(calc(var(--dir) * var(--x50) * var(--step))) scale(var(--s50));\n }\n 75% {\n transform: translateX(calc(var(--dir) * var(--x75) * var(--step))) scale(var(--s75));\n }\n 95% {\n transform: none;\n }\n}\n","import type { CSSProperties, ReactNode } from \"react\";\n\nimport { cx } from \"src/utils/utils\";\n\nimport { SPINNER_VARIANTS } from \"./constants\";\n\nimport type { ISpinnerProps } from \"./types\";\n\nimport styles from \"./Spinner.module.css\";\n\nexport const Spinner = ({\n variant = \"circle\",\n size = \"md\",\n label = \"Загрузка\",\n color,\n className,\n style,\n ...props\n}: ISpinnerProps): ReactNode => {\n const { items } = SPINNER_VARIANTS[variant];\n\n return (\n <span\n role=\"status\"\n aria-label={label}\n className={cx(styles.spinner, styles[variant], styles[size], className)}\n style={{ ...style, ...(color && { color }) }}\n {...props}\n >\n {Array.from({ length: items }, (_, i) => (\n <span key={i} className={styles.item} style={{ \"--i\": i } as CSSProperties} />\n ))}\n </span>\n );\n};\n\nSpinner.displayName = \"Spinner\";\n","import type { ReactElement } from \"react\";\nimport { forwardRef } from \"react\";\n\nimport { cx } from \"src/utils/utils\";\n\nimport type { ISwitchProps } from \"./types\";\n\nimport styles from \"./Switch.module.css\";\n\nexport const Switch = forwardRef<HTMLInputElement, ISwitchProps>(\n ({ size = \"md\", label, className, disabled, ...props }, ref): ReactElement => (\n <label className={cx(styles.root, styles[size], disabled && styles.disabled, className)}>\n <input\n ref={ref}\n aria-checked\n type=\"checkbox\"\n role=\"switch\"\n disabled={disabled}\n className={styles.input}\n {...props}\n />\n <span className={styles.track} aria-hidden=\"true\">\n <span className={styles.thumb} />\n </span>\n {label && <span className={styles.label}>{label}</span>}\n </label>\n ),\n);\n","@import \"../../styles/tokens.css\";\n\n.sm {\n --switch-width: 28px;\n --switch-height: 16px;\n --switch-font-size: var(--uikit-font-size-xs);\n}\n.md {\n --switch-width: 36px;\n --switch-height: 20px;\n --switch-font-size: var(--uikit-font-size-sm);\n}\n.lg {\n --switch-width: 44px;\n --switch-height: 24px;\n --switch-font-size: var(--uikit-font-size-md);\n}\n\n.root {\n --switch-gap: 2px;\n --switch-thumb: calc(var(--switch-height) - var(--switch-gap) * 2);\n position: relative;\n display: inline-flex;\n align-items: center;\n gap: 8px;\n font-size: var(--switch-font-size);\n color: var(--uikit-color-text);\n cursor: pointer;\n}\n\n/* Скрыт визуально, но остаётся в таб-порядке и для скринридера.\n Не display:none — иначе переключатель пропадёт с клавиатуры. */\n.input {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: 0;\n opacity: 0;\n}\n\n.track {\n position: relative;\n flex: none;\n width: var(--switch-width);\n height: var(--switch-height);\n border-radius: 999px;\n background: var(--uikit-color-border);\n transition: background-color 0.15s ease;\n}\n\n.thumb {\n position: absolute;\n top: var(--switch-gap);\n left: var(--switch-gap);\n width: var(--switch-thumb);\n height: var(--switch-thumb);\n border-radius: 50%;\n background: var(--uikit-white);\n box-shadow: 0 1px 2px rgb(0 0 0 / 0.2);\n transition: transform 0.15s ease;\n}\n\n.input:checked + .track {\n background: var(--uikit-color-accent);\n}\n.input:checked + .track .thumb {\n transform: translateX(calc(var(--switch-width) - var(--switch-thumb) - var(--switch-gap) * 2));\n}\n\n.root:hover .input:not(:disabled):not(:checked) + .track {\n background: var(--uikit-color-border-hover);\n}\n.root:hover .input:not(:disabled):checked + .track {\n background: var(--uikit-color-accent-hover);\n}\n\n.input:focus-visible + .track {\n box-shadow: 0 0 0 3px var(--uikit-color-ring-accent);\n}\n\n.disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .track,\n .thumb {\n transition: none;\n }\n}\n","import type { KeyboardEvent, ReactNode } from \"react\";\nimport { useId, useRef, useState } from \"react\";\n\nimport { cx } from \"src/utils/utils\";\n\nimport type { ITabsProps } from \"./types\";\n\nimport styles from \"./Tabs.module.css\";\n\nexport const Tabs = ({ items, defaultValue, onChange, className }: ITabsProps): ReactNode => {\n const [active, setActive] = useState(() => {\n const isSelectable = items.some((item) => item.value === defaultValue && !item.disabled);\n return isSelectable ? defaultValue : items.find((item) => !item.disabled)?.value;\n });\n const id = useId();\n const tabRefs = useRef<Array<HTMLButtonElement | null>>([]);\n\n const activeIndex = items.findIndex((item) => item.value === active);\n\n const select = (value: string) => {\n if (value === active) return;\n setActive(value);\n onChange?.(value);\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLButtonElement>, index: number) => {\n const enabled = items.flatMap((item, i) => (item.disabled ? [] : [i]));\n const position = enabled.indexOf(index);\n\n let next: number;\n switch (event.key) {\n case \"ArrowRight\":\n next = enabled[(position + 1) % enabled.length];\n break;\n case \"ArrowLeft\":\n next = enabled[(position - 1 + enabled.length) % enabled.length];\n break;\n case \"Home\":\n next = enabled[0];\n break;\n case \"End\":\n next = enabled[enabled.length - 1];\n break;\n default:\n return;\n }\n\n event.preventDefault();\n tabRefs.current[next]?.focus();\n select(items[next].value);\n };\n\n return (\n <div className={cx(styles.tabs, className)}>\n <div role=\"tablist\" className={styles.list}>\n {items.map((item, index) => {\n const selected = index === activeIndex;\n\n return (\n <button\n key={item.value}\n ref={(el) => {\n tabRefs.current[index] = el;\n }}\n type=\"button\"\n role=\"tab\"\n id={`${id}-tab-${index}`}\n aria-selected={selected}\n aria-controls={`${id}-panel`}\n tabIndex={selected ? 0 : -1}\n disabled={item.disabled}\n className={styles.tab}\n onClick={() => select(item.value)}\n onKeyDown={(event) => handleKeyDown(event, index)}\n >\n {item.label}\n </button>\n );\n })}\n </div>\n\n <div\n role=\"tabpanel\"\n id={`${id}-panel`}\n aria-labelledby={activeIndex >= 0 ? `${id}-tab-${activeIndex}` : undefined}\n tabIndex={0}\n className={styles.panel}\n >\n {items[activeIndex]?.content}\n </div>\n </div>\n );\n};\n\nTabs.displayName = \"Tabs\";\n","@import \"../../styles/tokens.css\";\n\n.tabs {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.list {\n display: flex;\n gap: 4px;\n border-bottom: 1px solid var(--uikit-color-border);\n}\n\n.tab {\n padding: 8px 12px;\n margin-bottom: -1px;\n border: none;\n border-bottom: 2px solid transparent;\n background: none;\n color: var(--uikit-color-text-muted);\n font: inherit;\n cursor: pointer;\n}\n\n.tab:hover:not(:disabled) {\n color: var(--uikit-color-text);\n}\n\n.tab[aria-selected=\"true\"] {\n color: var(--uikit-color-text);\n border-bottom-color: var(--uikit-color-accent);\n}\n\n.tab:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.tab:focus-visible,\n.panel:focus-visible {\n outline: 2px solid var(--uikit-color-accent-focus);\n outline-offset: 2px;\n}\n\n.panel {\n color: var(--uikit-color-text);\n}\n","import { useCallback, useEffect, useRef, useState, type ReactNode } from \"react\";\n\nimport { cx } from \"src/utils/utils\";\n\nimport type { IToastProps } from \"./types\";\n\nimport styles from \"./Toast.module.css\";\n\nexport const Toast = ({\n variant = \"info\",\n title,\n closable = true,\n duration = 5000,\n onClose,\n children,\n className,\n onMouseEnter,\n onMouseLeave,\n ...props\n}: IToastProps): ReactNode => {\n const [visible, setVisible] = useState(true);\n const timerRef = useRef<ReturnType<typeof setTimeout>>();\n const remainingRef = useRef(duration);\n const startedAtRef = useRef(0);\n const onCloseRef = useRef(onClose);\n\n useEffect(() => {\n onCloseRef.current = onClose;\n }, [onClose]);\n\n const handleClose = useCallback(() => {\n setVisible(false);\n onCloseRef.current?.();\n }, []);\n\n const clearTimer = useCallback(() => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n timerRef.current = undefined;\n }\n }, []);\n\n const startTimer = useCallback(\n (ms: number) => {\n if (ms <= 0) return;\n startedAtRef.current = Date.now();\n timerRef.current = setTimeout(handleClose, ms);\n },\n [handleClose],\n );\n\n useEffect(() => {\n startTimer(remainingRef.current);\n return clearTimer;\n }, [startTimer, clearTimer]);\n\n const handleMouseEnter: React.MouseEventHandler<HTMLDivElement> = (e) => {\n clearTimer();\n remainingRef.current -= Date.now() - startedAtRef.current;\n onMouseEnter?.(e);\n };\n\n const handleMouseLeave: React.MouseEventHandler<HTMLDivElement> = (e) => {\n startTimer(remainingRef.current);\n onMouseLeave?.(e);\n };\n\n if (!visible) {\n return null;\n }\n\n const classes = cx(styles.toast, styles[variant], className);\n\n return (\n <div\n className={classes}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n {...props}\n >\n <div className={styles.content} role=\"status\" aria-live=\"polite\">\n {title && <div className={styles.title}>{title}</div>}\n {children && <div className={styles.description}>{children}</div>}\n </div>\n\n {closable && (\n <button\n type=\"button\"\n className={styles.closeButton}\n onClick={handleClose}\n aria-label=\"Close toast\"\n >\n ×\n </button>\n )}\n </div>\n );\n};\n\nToast.displayName = \"Toast\";\n","@import \"../../styles/tokens.css\";\n\n.toast {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n padding: 12px 16px;\n border-radius: 8px;\n min-width: 280px;\n max-width: 400px;\n box-shadow: var(--uikit-shadow-md);\n animation: toast-in 0.2s ease-out;\n}\n\n@keyframes toast-in {\n from {\n opacity: 0;\n transform: translateX(16px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n\n.content {\n flex: 1;\n min-width: 0;\n}\n\n.title {\n font-size: var(--uikit-font-size-lg);\n font-weight: var(--uikit-font-weight-bold);\n margin-bottom: 4px;\n}\n\n.description {\n font-size: var(--uikit-font-size-sm);\n line-height: 1.5;\n}\n\n.closeButton {\n background: none;\n border: none;\n cursor: pointer;\n font-size: var(--uikit-font-size-xl);\n line-height: 1;\n padding: 0;\n color: inherit;\n opacity: 0.6;\n}\n\n.closeButton:hover {\n opacity: 1;\n}\n\n.info {\n background-color: var(--uikit-color-info-bg);\n color: var(--uikit-color-info-text);\n}\n\n.success {\n background-color: var(--uikit-color-success-bg);\n color: var(--uikit-color-success-text);\n}\n\n.warning {\n background-color: var(--uikit-color-warning-bg);\n color: var(--uikit-color-warning-text);\n}\n\n.error {\n background-color: var(--uikit-color-error-bg);\n color: var(--uikit-color-error-text);\n}\n","import { createContext, type ReactNode, useCallback, useMemo, useState } from \"react\";\n\nimport { createPortal } from \"react-dom\";\n\nimport { Toast } from \"src/components/Toast/Toast\";\nimport type { IToastProps } from \"src/components/Toast/types\";\nimport { cx } from \"src/utils/utils\";\n\nimport styles from \"./ToastContainer.module.css\";\n\nexport interface IToastOptions extends Pick<\n IToastProps,\n \"variant\" | \"title\" | \"duration\" | \"closable\"\n> {\n description?: ReactNode;\n}\n\ninterface IToastItem extends IToastOptions {\n id: string;\n}\n\ntype TToastPosition =\n | \"top-right\"\n | \"top-left\"\n | \"top-center\"\n | \"bottom-right\"\n | \"bottom-left\"\n | \"bottom-center\";\n\ninterface IToastContextValue {\n show: (options: IToastOptions) => string;\n close: (id: string) => void;\n}\n\nexport interface IToastProviderProps {\n children: ReactNode;\n position?: TToastPosition;\n}\n\nlet idCounter = 0;\nconst nextId = () => `toast-${Date.now()}-${idCounter++}`;\n\nexport const ToastContext = createContext<IToastContextValue | null>(null);\n\nexport const ToastProvider = ({\n children,\n position = \"top-right\",\n}: IToastProviderProps): ReactNode => {\n const [toasts, setToasts] = useState<IToastItem[]>([]);\n\n const close = useCallback((id: string) => {\n setToasts((prev) => prev.filter((toast) => toast.id !== id));\n }, []);\n\n const show = useCallback((options: IToastOptions) => {\n const id = nextId();\n setToasts((prev) => [...prev, { id, ...options }]);\n return id;\n }, []);\n\n const value = useMemo(() => {\n return { show, close };\n }, [show, close]);\n\n return (\n <ToastContext.Provider value={value}>\n {children}\n {typeof document !== \"undefined\" &&\n createPortal(\n <div className={cx(styles.container, styles[position])}>\n {toasts.map(({ id, description, ...rest }) => (\n <Toast key={id} {...rest} onClose={() => close(id)}>\n {description}\n </Toast>\n ))}\n </div>,\n document.body,\n )}\n </ToastContext.Provider>\n );\n};\n",".container {\n position: fixed;\n display: flex;\n flex-direction: column;\n gap: 8px;\n z-index: var(--uikit-z-index-toast);\n padding: 16px;\n pointer-events: none;\n}\n\n.container > * {\n pointer-events: auto;\n}\n\n.top-right {\n top: 0;\n right: 0;\n align-items: flex-end;\n}\n\n.top-left {\n top: 0;\n left: 0;\n align-items: flex-start;\n}\n\n.top-center {\n top: 0;\n left: 50%;\n transform: translateX(-50%);\n align-items: center;\n}\n\n.bottom-right {\n bottom: 0;\n right: 0;\n align-items: flex-end;\n flex-direction: column-reverse;\n}\n\n.bottom-left {\n bottom: 0;\n left: 0;\n align-items: flex-start;\n flex-direction: column-reverse;\n}\n\n.bottom-center {\n bottom: 0;\n left: 50%;\n transform: translateX(-50%);\n align-items: center;\n flex-direction: column-reverse;\n}\n","import { useContext } from \"react\";\n\nimport type { IToastOptions } from \"src/components/Toast/ToastProvider/ToastProvider\";\nimport { ToastContext } from \"src/components/Toast/ToastProvider/ToastProvider\";\nimport type { TToastVariant } from \"src/components/Toast/types\";\n\ntype TShowByVariant = (options?: Omit<IToastOptions, \"variant\">) => string;\n\nexport interface IUseToastResult {\n show: (options: IToastOptions) => string;\n close: (id: string) => void;\n info: TShowByVariant;\n success: TShowByVariant;\n warning: TShowByVariant;\n error: TShowByVariant;\n}\n\nexport const useToast = (): IUseToastResult => {\n const ctx = useContext(ToastContext);\n if (!ctx) {\n throw new Error(\"useToast использован вне ToastProvider\");\n }\n\n const make =\n (variant: TToastVariant) =>\n (options: Omit<IToastOptions, \"variant\"> = {}) =>\n ctx.show({ variant, ...options });\n\n return {\n show: ctx.show,\n close: ctx.close,\n info: make(\"info\"),\n success: make(\"success\"),\n warning: make(\"warning\"),\n error: make(\"error\"),\n };\n};\n","import type { ReactElement, ReactNode } from \"react\";\nimport { cloneElement, isValidElement, useState } from \"react\";\n\nimport {\n autoUpdate,\n flip,\n offset,\n shift,\n useFloating,\n useFocus,\n useHover,\n useInteractions,\n useMergeRefs,\n useRole,\n} from \"@floating-ui/react\";\n\nimport { cx } from \"src/utils/utils\";\n\nimport type { ITooltipProps } from \"./types\";\n\nimport styles from \"./Tooltip.module.css\";\n\nexport const Tooltip = ({\n content,\n children,\n placement = \"top\",\n delay = 200,\n className,\n ...props\n}: ITooltipProps): ReactNode => {\n const [open, setOpen] = useState(false);\n\n const {\n refs,\n floatingStyles,\n context,\n placement: finalPlacement,\n } = useFloating({\n open,\n onOpenChange: setOpen,\n placement,\n whileElementsMounted: autoUpdate,\n middleware: [offset(8), flip(), shift({ padding: 8 })],\n });\n\n const hover = useHover(context, { delay: { open: delay, close: 0 } });\n const focus = useFocus(context);\n const role = useRole(context, { role: \"tooltip\" });\n\n const { getReferenceProps, getFloatingProps } = useInteractions([hover, focus, role]);\n\n const childRef = isValidElement(children)\n ? ((children as any).props?.ref ?? (children as any).ref)\n : null;\n const mergedRef = useMergeRefs([refs.setReference, childRef]);\n\n const child = isValidElement(children) ? (\n cloneElement(\n children as ReactElement<any>,\n getReferenceProps({\n ...(children as ReactElement<any>).props,\n ref: mergedRef,\n }),\n )\n ) : (\n <span ref={refs.setReference} {...getReferenceProps()}>\n {children}\n </span>\n );\n\n return (\n <>\n {child}\n {open && (\n <div\n // oxlint-disable-next-line react/refs\n ref={refs.setFloating}\n style={floatingStyles}\n data-placement={finalPlacement}\n className={cx(styles.tooltip, className)}\n {...getFloatingProps(props)}\n >\n {content}\n <div className={styles.arrow} />\n </div>\n )}\n </>\n );\n};\n","@import \"../../styles/tokens.css\";\n\n.tooltip {\n z-index: var(--uikit-z-index-tooltip);\n max-width: 250px;\n padding: 6px 12px;\n font-size: var(--uikit-font-size-xs);\n font-weight: var(--uikit-font-weight-medium);\n line-height: 1.4;\n color: var(--uikit-color-text-inverse);\n background-color: var(--uikit-color-surface-inverse);\n border-radius: var(--uikit-radius-sm);\n box-shadow:\n 0 4px 6px -1px rgba(0, 0, 0, 0.1),\n 0 2px 4px -1px rgba(0, 0, 0, 0.06);\n pointer-events: none;\n animation: fadeIn 0.15s ease-out;\n}\n\n.arrow {\n position: absolute;\n width: 8px;\n height: 8px;\n background-color: inherit;\n transform: rotate(45deg);\n}\n\n/* ---------- TOP ---------- */\n.tooltip[data-placement^=\"top\"] .arrow {\n bottom: -4px;\n left: calc(50% - 4px);\n}\n\n.tooltip[data-placement=\"top-start\"] .arrow {\n left: 12px;\n right: auto;\n}\n\n.tooltip[data-placement=\"top-end\"] .arrow {\n left: auto;\n right: 12px;\n}\n\n/* ---------- BOTTOM ---------- */\n.tooltip[data-placement^=\"bottom\"] .arrow {\n top: -4px;\n left: calc(50% - 4px);\n}\n\n.tooltip[data-placement=\"bottom-start\"] .arrow {\n left: 12px;\n right: auto;\n}\n\n.tooltip[data-placement=\"bottom-end\"] .arrow {\n left: auto;\n right: 12px;\n}\n\n/* ---------- LEFT ---------- */\n.tooltip[data-placement^=\"left\"] .arrow {\n right: -4px;\n top: calc(50% - 4px);\n}\n\n.tooltip[data-placement=\"left-start\"] .arrow {\n top: 8px;\n bottom: auto;\n}\n\n.tooltip[data-placement=\"left-end\"] .arrow {\n top: auto;\n bottom: 8px;\n}\n\n/* ---------- RIGHT ---------- */\n.tooltip[data-placement^=\"right\"] .arrow {\n left: -4px;\n top: calc(50% - 4px);\n}\n\n.tooltip[data-placement=\"right-start\"] .arrow {\n top: 8px;\n bottom: auto;\n}\n\n.tooltip[data-placement=\"right-end\"] .arrow {\n top: auto;\n bottom: 8px;\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n}\n"],"mappings":"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","names":["accordion","item","disabled","header","trigger","icon","iconOpen","contentWrapper","contentWrapperOpen","contentInner","jsx","jsx","useContext","useContext","jsx","jsx","jsx","useState","alert","content","title","description","closeButton","info","success","warning","error","jsx","jsxs","useState","badge","count","dot","blue","red","green","jsx","button","primary","secondary","sm","md","lg","jsx","forwardRef","useId","sm","md","lg","root","label","input","disabled","required","error","jsx","jsxs","forwardRef","useId","forwardRef","useId","sm","md","lg","root","label","required","field","disabled","invalid","input","icon","message","error","jsx","jsxs","forwardRef","useId","useEffect","useId","useRef","modal","modal-in","fade-in","sm","md","lg","content","header","title","close","body","footer","jsx","jsxs","useRef","useId","useEffect","forwardRef","useContext","useId","createContext","sm","md","lg","root","label","input","hasError","disabled","required","error","jsx","jsxs","forwardRef","useContext","useId","useId","useId","useState","jsx","useState","useId","root","disabled","groupLabel","required","options","error","jsx","jsxs","useId","skeleton","text","rect","circle","lines","withChildren","hidden","pulse","wave","jsx","spinner","sm","md","lg","item","circle","spin","dots","beat","spiral","propagate","jsx","forwardRef","sm","md","lg","root","input","track","thumb","disabled","jsx","jsxs","forwardRef","useId","useRef","useState","tabs","list","tab","panel","jsx","jsxs","useState","useId","useRef","useEffect","useRef","useState","toast","toast-in","content","title","description","closeButton","info","success","warning","error","jsx","jsxs","useState","useRef","useEffect","createContext","useCallback","useState","container","top-right","top-left","top-center","bottom-right","bottom-left","bottom-center","jsx","jsxs","createContext","useState","useCallback","useContext","useContext","useState","tooltip","fadeIn","arrow","jsx","jsxs","useState"]}
|