mainbase-ui 1.2.4 → 1.2.5-b
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/README.md +22 -266
- package/dist/index.cjs +148 -55
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +97 -49
- package/dist/index.css.map +1 -1
- package/dist/index.d.cts +23 -3
- package/dist/index.d.ts +23 -3
- package/dist/index.js +145 -51
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/provider/MainbaseProvider.tsx","../src/provider/MainbaseContext.ts","../src/provider/defaultTheme.ts","../src/provider/PortalContext.ts","../src/provider/themeToVariables.ts","../src/provider/useMainbaseTheme.ts","../src/provider/useComponentDefaults.ts","../src/components/Icon/Icon.tsx","../src/components/Alert/Alert.tsx","../src/components/Badge/Badge.tsx","../src/components/Button/Button.tsx","../src/components/Spinner/Spinner.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/Group/Group.tsx","../src/components/Modal/Modal.tsx","../src/hooks/useClickOutside.ts","../src/hooks/useControllableState.ts","../src/hooks/useDisclosure.ts","../src/hooks/useLockScroll.ts","../src/utils/cx.ts","../src/components/Portal/Portal.tsx","../src/components/Radio/Radio.tsx","../src/components/Radio/RadioGroup.tsx","../src/components/Select/Select.tsx","../src/components/Stack/Stack.tsx","../src/components/Switch/Switch.tsx","../src/components/Toast/ToastProvider.tsx","../src/components/Toast/Toast.tsx","../src/components/Toast/ToastContext.ts","../src/components/Toast/useToast.ts","../src/components/Avatar/Avatar.tsx","../src/components/Avatar/AvatarGroup.tsx","../src/components/Progress/Progress.tsx","../src/components/Skeleton/Skeleton.tsx","../src/components/Tabs/Tabs.tsx","../src/components/Tooltip/Tooltip.tsx","../src/components/Accordion/Accordion.tsx","../src/components/Drawer/Drawer.tsx","../src/components/Menu/Menu.tsx","../src/components/Popover/Popover.tsx","../src/components/Divider/Divider.tsx","../src/components/PasswordInput/PasswordInput.tsx","../src/components/PinInput/PinInput.tsx","../src/components/FileInput/FileInput.tsx","../src/components/Pagination/Pagination.tsx","../src/components/DatePicker/DatePicker.tsx","../src/components/Card/Card.tsx","../src/components/IconButton/IconButton.tsx","../src/components/Input/Input.tsx","../src/components/Textarea/Textarea.tsx","../src/components/Text/Text.tsx","../src/components/Title/Title.tsx"],"sourcesContent":["import \"./styles/variables.css\";\r\n\r\nexport * from \"./provider\";\r\n\r\nexport * from \"./components/Alert\";\r\nexport * from \"./components/Badge\";\r\nexport * from \"./components/Button\";\r\nexport * from \"./components/Checkbox\";\r\nexport * from \"./components/Group\";\r\nexport * from \"./components/Icon\";\r\nexport * from \"./components/Modal\";\r\nexport * from \"./components/Portal\";\r\nexport * from \"./components/Radio\";\r\nexport * from \"./components/Select\";\r\nexport * from \"./components/Spinner\";\r\nexport * from \"./components/Stack\";\r\nexport * from \"./components/Switch\";\r\nexport * from \"./components/Toast\";\r\nexport * from \"./components/Avatar\";\r\nexport * from \"./components/Progress\";\r\nexport * from \"./components/Skeleton\";\r\nexport * from \"./components/Tabs\";\r\nexport * from \"./components/Tooltip\";\r\nexport * from \"./components/Accordion\";\r\nexport * from \"./components/Drawer\";\r\nexport * from \"./components/Menu\";\r\nexport * from \"./components/Popover\";\r\nexport * from \"./components/Divider\";\r\nexport * from \"./components/PasswordInput\";\r\nexport * from \"./components/PinInput\";\r\nexport * from \"./components/FileInput\";\r\nexport * from \"./components/Pagination\";\r\nexport * from \"./components/DatePicker\";\r\n\r\nexport * from \"./hooks\";\r\nexport * from \"./utils\";\r\n\r\nexport {\r\n Card,\r\n} from \"./components/Card/Card\";\r\n\r\nexport type {\r\n CardProps,\r\n} from \"./components/Card/Card\";\r\n\r\nexport {\r\n IconButton,\r\n} from \"./components/IconButton/IconButton\";\r\n\r\nexport type {\r\n IconButtonProps,\r\n} from \"./components/IconButton/IconButton\";\r\n\r\nexport {\r\n Input,\r\n} from \"./components/Input/Input\";\r\n\r\nexport type {\r\n InputProps,\r\n} from \"./components/Input/Input\";\r\n\r\nexport {\r\n Textarea,\r\n} from \"./components/Textarea/Textarea\";\r\n\r\nexport type {\r\n TextareaProps,\r\n} from \"./components/Textarea/Textarea\";\r\n\r\nexport {\r\n Text,\r\n} from \"./components/Text/Text\";\r\n\r\nexport type {\r\n TextProps,\r\n} from \"./components/Text/Text\";\r\n\r\nexport {\r\n Title,\r\n} from \"./components/Title/Title\";\r\n\r\nexport type {\r\n TitleProps,\r\n} from \"./components/Title/Title\";","import {\r\n useContext,\r\n useMemo,\r\n useRef,\r\n useState,\r\n type CSSProperties,\r\n} from \"react\";\r\n\r\nimport { MainbaseContext } from \"./MainbaseContext\";\r\nimport { MainbasePortalContext } from \"./PortalContext\";\r\nimport { defaultMainbaseTheme } from \"./defaultTheme\";\r\nimport { themeToVariables } from \"./themeToVariables\";\r\n\r\nimport type {\r\n MainbaseProviderProps,\r\n MainbaseTheme,\r\n MainbaseThemeOverride,\r\n} from \"./types\";\r\n\r\nfunction mergeTheme(\r\n parentTheme: MainbaseTheme,\r\n override?: MainbaseThemeOverride,\r\n): MainbaseTheme {\r\n if (!override) {\r\n return parentTheme;\r\n }\r\n\r\n return {\r\n colorScheme:\r\n override.colorScheme ??\r\n parentTheme.colorScheme,\r\n\r\n colors: {\r\n ...parentTheme.colors,\r\n ...override.colors,\r\n },\r\n\r\n radii: {\r\n ...parentTheme.radii,\r\n ...override.radii,\r\n },\r\n\r\n shadows: {\r\n ...parentTheme.shadows,\r\n ...override.shadows,\r\n },\r\n\r\n spacing: {\r\n ...parentTheme.spacing,\r\n ...override.spacing,\r\n },\r\n\r\n typography: {\r\n ...parentTheme.typography,\r\n ...override.typography,\r\n },\r\n\r\n transitions: {\r\n ...parentTheme.transitions,\r\n ...override.transitions,\r\n },\r\n\r\n zIndex: {\r\n ...parentTheme.zIndex,\r\n ...override.zIndex,\r\n },\r\n\r\n focusRingWidth:\r\n override.focusRingWidth ??\r\n parentTheme.focusRingWidth,\r\n\r\n components: {\r\n ...parentTheme.components,\r\n ...override.components,\r\n\r\n Button: {\r\n ...parentTheme.components.Button,\r\n ...override.components?.Button,\r\n },\r\n\r\n IconButton: {\r\n ...parentTheme.components.IconButton,\r\n ...override.components?.IconButton,\r\n },\r\n\r\n Input: {\r\n ...parentTheme.components.Input,\r\n ...override.components?.Input,\r\n },\r\n\r\n Select: {\r\n ...parentTheme.components.Select,\r\n ...override.components?.Select,\r\n },\r\n\r\n Text: {\r\n ...parentTheme.components.Text,\r\n ...override.components?.Text,\r\n },\r\n\r\n Title: {\r\n ...parentTheme.components.Title,\r\n ...override.components?.Title,\r\n },\r\n\r\n Card: {\r\n ...parentTheme.components.Card,\r\n ...override.components?.Card,\r\n },\r\n\r\n Badge: {\r\n ...parentTheme.components.Badge,\r\n ...override.components?.Badge,\r\n },\r\n\r\n Modal: {\r\n ...parentTheme.components.Modal,\r\n ...override.components?.Modal,\r\n },\r\n\r\n Toast: {\r\n ...parentTheme.components.Toast,\r\n ...override.components?.Toast,\r\n },\r\n \r\n Tabs: {\r\n ...parentTheme.components.Tabs,\r\n ...override.components?.Tabs,\r\n },\r\n\r\n Accordion: {\r\n ...parentTheme.components.Accordion,\r\n ...override.components?.Accordion,\r\n },\r\n\r\n Drawer: {\r\n ...parentTheme.components.Drawer,\r\n ...override.components?.Drawer,\r\n },\r\n\r\n Divider: {\r\n ...parentTheme.components.Divider,\r\n ...override.components?.Divider,\r\n },\r\n\r\n PasswordInput: {\r\n ...parentTheme.components.PasswordInput,\r\n ...override.components?.PasswordInput,\r\n },\r\n\r\n PinInput: {\r\n ...parentTheme.components.PinInput,\r\n ...override.components?.PinInput,\r\n },\r\n\r\n FileInput: {\r\n ...parentTheme.components.FileInput,\r\n ...override.components?.FileInput,\r\n },\r\n\r\n Pagination: {\r\n ...parentTheme.components.Pagination,\r\n ...override.components?.Pagination,\r\n },\r\n\r\n DatePicker: {\r\n ...parentTheme.components.DatePicker,\r\n ...override.components?.DatePicker,\r\n },\r\n },\r\n };\r\n}\r\n\r\nexport function MainbaseProvider({\r\n children,\r\n theme,\r\n className = \"\",\r\n style,\r\n}: MainbaseProviderProps) {\r\n const parentTheme =\r\n useContext(MainbaseContext);\r\n\r\n const resolvedParentTheme =\r\n parentTheme ??\r\n defaultMainbaseTheme;\r\n\r\n const mergedTheme = useMemo(\r\n () =>\r\n mergeTheme(\r\n resolvedParentTheme,\r\n theme,\r\n ),\r\n [\r\n resolvedParentTheme,\r\n theme,\r\n ],\r\n );\r\n\r\n const variables = useMemo(\r\n () => themeToVariables(mergedTheme),\r\n [mergedTheme],\r\n );\r\n\r\n const portalRef =\r\n useRef<HTMLDivElement | null>(null);\r\n\r\n const [\r\n portalTarget,\r\n setPortalTarget,\r\n ] = useState<HTMLDivElement | null>(null);\r\n\r\n const providerStyle = {\r\n ...variables,\r\n ...style,\r\n } as CSSProperties;\r\n\r\n return (\r\n <MainbaseContext.Provider\r\n value={mergedTheme}\r\n >\r\n <div\r\n className={[\r\n \"mb-provider\",\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \")}\r\n data-mb-theme={\r\n mergedTheme.colorScheme\r\n }\r\n style={providerStyle}\r\n >\r\n <MainbasePortalContext.Provider\r\n value={portalTarget}\r\n >\r\n {children}\r\n\r\n <div\r\n ref={(element) => {\r\n portalRef.current = element;\r\n setPortalTarget(element);\r\n }}\r\n className=\"mb-portal-root\"\r\n />\r\n </MainbasePortalContext.Provider>\r\n </div>\r\n </MainbaseContext.Provider>\r\n );\r\n}","import {\r\n createContext,\r\n} from \"react\";\r\n\r\nimport {\r\n defaultMainbaseTheme,\r\n} from \"./defaultTheme\";\r\n\r\nimport type {\r\n MainbaseTheme,\r\n} from \"./types\";\r\n\r\nexport const MainbaseContext =\r\n createContext<MainbaseTheme>(\r\n defaultMainbaseTheme,\r\n );","import type {\r\n MainbaseTheme,\r\n} from \"./types\";\r\n\r\nexport const defaultMainbaseTheme: MainbaseTheme = {\r\n colorScheme: \"light\",\r\n\r\n colors: {\r\n primary: \"#30d5c8\",\r\n primaryHover: \"#2bc8bc\",\r\n primaryActive: \"#27b9ae\",\r\n\r\n text: \"#172322\",\r\n textSecondary: \"#5e666a\",\r\n textMuted: \"#7d868b\",\r\n\r\n background: \"#ffffff\",\r\n backgroundSecondary: \"#f3f5f5\",\r\n backgroundTertiary: \"#f8f9fa\",\r\n\r\n border: \"#d8dde0\",\r\n borderHover: \"#bfc7cb\",\r\n\r\n success: \"#22c55e\",\r\n warning: \"#f59e0b\",\r\n danger: \"#ef4444\",\r\n info: \"#30d5c8\",\r\n\r\n overlay: \"rgba(17, 24, 39, 0.42)\",\r\n },\r\n\r\n radii: {\r\n sm: 10,\r\n md: 14,\r\n lg: 18,\r\n xl: 24,\r\n full: 999,\r\n },\r\n\r\n shadows: {\r\n xs: \"0 1px 3px rgba(23, 35, 34, 0.05)\",\r\n sm: \"0 2px 6px rgba(23, 35, 34, 0.06)\",\r\n md: \"0 8px 24px rgba(23, 35, 34, 0.10)\",\r\n lg: \"0 16px 40px rgba(23, 35, 34, 0.14)\",\r\n xl: \"0 24px 64px rgba(23, 35, 34, 0.18)\",\r\n },\r\n\r\n spacing: {\r\n xs: 4,\r\n sm: 8,\r\n md: 16,\r\n lg: 24,\r\n xl: 32,\r\n },\r\n\r\n typography: {\r\n fontFamily: \"inherit\",\r\n fontFamilyMonospace:\r\n \"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace\",\r\n\r\n fontSizeXs: 12,\r\n fontSizeSm: 13,\r\n fontSizeMd: 14,\r\n fontSizeLg: 16,\r\n fontSizeXl: 18,\r\n\r\n lineHeight: 1.5,\r\n },\r\n\r\n transitions: {\r\n fast: \"0.15s ease\",\r\n normal: \"0.18s ease\",\r\n slow: \"0.25s ease\",\r\n },\r\n\r\n zIndex: {\r\n dropdown: 1000,\r\n sticky: 1100,\r\n modal: 1200,\r\n toast: 1300,\r\n tooltip: 1400,\r\n },\r\n\r\n focusRingWidth: 2,\r\n\r\n components: {\r\n Button: {\r\n variant: \"primary\",\r\n size: \"md\",\r\n },\r\n\r\n IconButton: {\r\n variant: \"primary\",\r\n size: \"md\",\r\n },\r\n\r\n Input: {\r\n size: \"md\",\r\n },\r\n\r\n Select: {\r\n size: \"md\",\r\n },\r\n\r\n Text: {\r\n size: \"md\",\r\n weight: \"regular\",\r\n color: \"default\",\r\n },\r\n\r\n Title: {\r\n order: 2,\r\n weight: \"semibold\",\r\n },\r\n\r\n Card: {\r\n padding: \"md\",\r\n radius: \"md\",\r\n shadow: \"sm\",\r\n },\r\n\r\n Badge: {\r\n variant: \"default\",\r\n size: \"md\",\r\n },\r\n\r\n Modal: {\r\n size: \"md\",\r\n closeOnEscape: true,\r\n closeOnOverlayClick: true,\r\n withCloseButton: true,\r\n },\r\n\r\n Toast: {\r\n position: \"top-right\",\r\n duration: 4000,\r\n maxToasts: 5,\r\n },\r\n \r\n Tabs: {\r\n variant: \"underline\",\r\n size: \"md\",\r\n },\r\n \r\n Accordion: {\r\n variant: \"default\",\r\n size: \"md\",\r\n },\r\n\r\n Drawer: {\r\n position: \"right\",\r\n size: \"md\",\r\n closeOnEscape: true,\r\n closeOnOverlayClick: true,\r\n withCloseButton: true,\r\n },\r\n \r\n Divider: {\r\n orientation: \"horizontal\",\r\n variant: \"solid\",\r\n labelPosition: \"center\",\r\n },\r\n\r\n PasswordInput: {\r\n size: \"md\",\r\n visibilityToggle: true,\r\n },\r\n \r\n PinInput: {\r\n size: \"md\",\r\n length: 4,\r\n type: \"number\",\r\n mask: false,\r\n },\r\n\r\n FileInput: {\r\n size: \"md\",\r\n multiple: false,\r\n },\r\n\r\n Pagination: {\r\n size: \"md\",\r\n variant: \"default\",\r\n siblings: 1,\r\n boundaries: 1,\r\n withEdges: false,\r\n withControls: true,\r\n },\r\n\r\n DatePicker: {\r\n size: \"md\",\r\n firstDayOfWeek: 1,\r\n clearable: true,\r\n },\r\n },\r\n \r\n};","import { createContext } from \"react\";\r\n\r\nexport const MainbasePortalContext =\r\n createContext<HTMLElement | null>(null);","import type {\r\n MainbaseCSSVariables,\r\n MainbaseRadius,\r\n MainbaseTheme,\r\n} from \"./types\";\r\n\r\nfunction toCssValue(\r\n value: MainbaseRadius,\r\n): string {\r\n return typeof value === \"number\"\r\n ? `${value}px`\r\n : value;\r\n}\r\n\r\nexport function themeToVariables(\r\n theme: MainbaseTheme,\r\n): MainbaseCSSVariables {\r\n return {\r\n \"--mb-font-family\":\r\n theme.typography.fontFamily,\r\n\r\n \"--mb-font-family-monospace\":\r\n theme.typography.fontFamilyMonospace,\r\n\r\n \"--mb-font-size-xs\":\r\n toCssValue(\r\n theme.typography.fontSizeXs,\r\n ),\r\n\r\n \"--mb-font-size-sm\":\r\n toCssValue(\r\n theme.typography.fontSizeSm,\r\n ),\r\n\r\n \"--mb-font-size-md\":\r\n toCssValue(\r\n theme.typography.fontSizeMd,\r\n ),\r\n\r\n \"--mb-font-size-lg\":\r\n toCssValue(\r\n theme.typography.fontSizeLg,\r\n ),\r\n\r\n \"--mb-font-size-xl\":\r\n toCssValue(\r\n theme.typography.fontSizeXl,\r\n ),\r\n\r\n \"--mb-line-height\":\r\n String(theme.typography.lineHeight),\r\n\r\n \"--mb-primary\":\r\n theme.colors.primary,\r\n\r\n \"--mb-primary-hover\":\r\n theme.colors.primaryHover,\r\n\r\n \"--mb-primary-active\":\r\n theme.colors.primaryActive,\r\n\r\n \"--mb-text-color\":\r\n theme.colors.text,\r\n\r\n \"--mb-text-secondary\":\r\n theme.colors.textSecondary,\r\n\r\n \"--mb-text-muted\":\r\n theme.colors.textMuted,\r\n\r\n \"--mb-background\":\r\n theme.colors.background,\r\n\r\n \"--mb-background-secondary\":\r\n theme.colors.backgroundSecondary,\r\n\r\n \"--mb-background-tertiary\":\r\n theme.colors.backgroundTertiary,\r\n\r\n \"--mb-border-color\":\r\n theme.colors.border,\r\n\r\n \"--mb-border-hover\":\r\n theme.colors.borderHover,\r\n\r\n \"--mb-success\":\r\n theme.colors.success,\r\n\r\n \"--mb-warning\":\r\n theme.colors.warning,\r\n\r\n \"--mb-danger\":\r\n theme.colors.danger,\r\n\r\n \"--mb-info\":\r\n theme.colors.info,\r\n\r\n \"--mb-overlay\":\r\n theme.colors.overlay,\r\n\r\n \"--mb-focus-color\":\r\n theme.colors.primary,\r\n\r\n \"--mb-focus-ring-width\":\r\n toCssValue(theme.focusRingWidth),\r\n\r\n \"--mb-radius-sm\":\r\n toCssValue(theme.radii.sm),\r\n\r\n \"--mb-radius\":\r\n toCssValue(theme.radii.md),\r\n\r\n \"--mb-radius-lg\":\r\n toCssValue(theme.radii.lg),\r\n\r\n \"--mb-radius-xl\":\r\n toCssValue(theme.radii.xl),\r\n\r\n \"--mb-radius-full\":\r\n toCssValue(theme.radii.full),\r\n\r\n \"--mb-shadow-xs\":\r\n theme.shadows.xs,\r\n\r\n \"--mb-shadow-sm\":\r\n theme.shadows.sm,\r\n\r\n \"--mb-shadow-md\":\r\n theme.shadows.md,\r\n\r\n \"--mb-shadow-lg\":\r\n theme.shadows.lg,\r\n\r\n \"--mb-shadow-xl\":\r\n theme.shadows.xl,\r\n\r\n \"--mb-space-xs\":\r\n toCssValue(theme.spacing.xs),\r\n\r\n \"--mb-space-sm\":\r\n toCssValue(theme.spacing.sm),\r\n\r\n \"--mb-space-md\":\r\n toCssValue(theme.spacing.md),\r\n\r\n \"--mb-space-lg\":\r\n toCssValue(theme.spacing.lg),\r\n\r\n \"--mb-space-xl\":\r\n toCssValue(theme.spacing.xl),\r\n\r\n \"--mb-transition-fast\":\r\n theme.transitions.fast,\r\n\r\n \"--mb-transition\":\r\n theme.transitions.normal,\r\n\r\n \"--mb-transition-slow\":\r\n theme.transitions.slow,\r\n\r\n \"--mb-z-dropdown\":\r\n theme.zIndex.dropdown,\r\n\r\n \"--mb-z-sticky\":\r\n theme.zIndex.sticky,\r\n\r\n \"--mb-z-modal\":\r\n theme.zIndex.modal,\r\n\r\n \"--mb-z-toast\":\r\n theme.zIndex.toast,\r\n\r\n \"--mb-z-tooltip\":\r\n theme.zIndex.tooltip,\r\n };\r\n}","import {\r\n useContext,\r\n} from \"react\";\r\n\r\nimport {\r\n MainbaseContext,\r\n} from \"./MainbaseContext\";\r\n\r\nexport function useMainbaseTheme() {\r\n return useContext(MainbaseContext);\r\n}","import type {\r\n MainbaseComponentDefaults,\r\n} from \"./types\";\r\n\r\nimport {\r\n useMainbaseTheme,\r\n} from \"./useMainbaseTheme\";\r\n\r\nexport function useComponentDefaults<\r\n T extends keyof MainbaseComponentDefaults,\r\n>(\r\n component: T,\r\n): NonNullable<\r\n MainbaseComponentDefaults[T]\r\n> {\r\n const theme = useMainbaseTheme();\r\n\r\n return (\r\n theme.components[component] ?? {}\r\n ) as NonNullable<\r\n MainbaseComponentDefaults[T]\r\n >;\r\n}","import {\r\n cloneElement,\r\n isValidElement,\r\n type CSSProperties,\r\n type HTMLAttributes,\r\n type ReactNode,\r\n} from \"react\";\r\n\r\nimport \"./Icon.css\";\r\n\r\nexport interface IconProps\r\n extends HTMLAttributes<HTMLSpanElement> {\r\n children: ReactNode;\r\n size?: number;\r\n color?: string;\r\n decorative?: boolean;\r\n}\r\n\r\nexport function Icon({\r\n children,\r\n size = 18,\r\n color = \"currentColor\",\r\n decorative = true,\r\n className = \"\",\r\n style,\r\n ...props\r\n}: IconProps) {\r\n const classes = [\r\n \"mb-icon\",\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n const iconStyle = {\r\n \"--mb-icon-size\": `${size}px`,\r\n color,\r\n ...style,\r\n } as CSSProperties;\r\n\r\n const renderedIcon = isValidElement<{\r\n size?: number | string;\r\n color?: string;\r\n }>(children)\r\n ? cloneElement(children, {\r\n size,\r\n color,\r\n })\r\n : children;\r\n\r\n return (\r\n <span\r\n className={classes}\r\n style={iconStyle}\r\n aria-hidden={decorative ? true : undefined}\r\n {...props}\r\n >\r\n {renderedIcon}\r\n </span>\r\n );\r\n}","import type {\r\n HTMLAttributes,\r\n ReactNode,\r\n} from \"react\";\r\n\r\nimport { Icon } from \"../Icon\";\r\n\r\nimport \"./Alert.css\";\r\n\r\nexport interface AlertProps\r\n extends Omit<\r\n HTMLAttributes<HTMLDivElement>,\r\n \"title\"\r\n > {\r\n variant?: \"info\" | \"success\" | \"warning\" | \"danger\";\r\n title?: ReactNode;\r\n leftSection?: ReactNode;\r\n action?: ReactNode;\r\n}\r\n\r\nexport function Alert({\r\n variant = \"info\",\r\n title,\r\n leftSection,\r\n action,\r\n className = \"\",\r\n children,\r\n ...props\r\n}: AlertProps) {\r\n const classes = [\r\n \"mb-alert\",\r\n `mb-alert--${variant}`,\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n return (\r\n <div\r\n className={classes}\r\n role=\"alert\"\r\n {...props}\r\n >\r\n {leftSection ? (\r\n <div className=\"mb-alert__icon\">\r\n <Icon size={20}>\r\n {leftSection}\r\n </Icon>\r\n </div>\r\n ) : null}\r\n\r\n <div className=\"mb-alert__body\">\r\n {title ? (\r\n <div className=\"mb-alert__title\">\r\n {title}\r\n </div>\r\n ) : null}\r\n\r\n {children ? (\r\n <div className=\"mb-alert__content\">\r\n {children}\r\n </div>\r\n ) : null}\r\n </div>\r\n\r\n {action ? (\r\n <div className=\"mb-alert__action\">\r\n {action}\r\n </div>\r\n ) : null}\r\n </div>\r\n );\r\n}","import type {\r\n HTMLAttributes,\r\n ReactNode,\r\n} from \"react\";\r\n\r\nimport { useComponentDefaults } from \"../../provider\";\r\nimport { Icon } from \"../Icon\";\r\n\r\nimport \"./Badge.css\";\r\n\r\nexport interface BadgeProps\r\n extends HTMLAttributes<HTMLSpanElement> {\r\n variant?:\r\n | \"default\"\r\n | \"primary\"\r\n | \"success\"\r\n | \"warning\"\r\n | \"danger\";\r\n\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n\r\n leftSection?: ReactNode;\r\n rightSection?: ReactNode;\r\n}\r\n\r\nexport function Badge({\r\n variant,\r\n size,\r\n\r\n leftSection,\r\n rightSection,\r\n\r\n className = \"\",\r\n children,\r\n\r\n ...props\r\n}: BadgeProps) {\r\n const defaults =\r\n useComponentDefaults(\"Badge\");\r\n\r\n const resolvedVariant =\r\n variant ??\r\n defaults.variant ??\r\n \"default\";\r\n\r\n const resolvedSize =\r\n size ??\r\n defaults.size ??\r\n \"md\";\r\n\r\n const classes = [\r\n \"mb-badge\",\r\n `mb-badge--${resolvedVariant}`,\r\n `mb-badge--${resolvedSize}`,\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n const iconSize = {\r\n sm: 12,\r\n md: 14,\r\n lg: 16,\r\n }[resolvedSize];\r\n\r\n return (\r\n <span\r\n className={classes}\r\n {...props}\r\n >\r\n {leftSection != null ? (\r\n <Icon size={iconSize}>\r\n {leftSection}\r\n </Icon>\r\n ) : null}\r\n\r\n <span className=\"mb-badge__content\">\r\n {children}\r\n </span>\r\n\r\n {rightSection != null ? (\r\n <Icon size={iconSize}>\r\n {rightSection}\r\n </Icon>\r\n ) : null}\r\n </span>\r\n );\r\n}","import {\r\n forwardRef,\r\n type ButtonHTMLAttributes,\r\n type ReactNode,\r\n} from \"react\";\r\n\r\nimport {\r\n useComponentDefaults,\r\n} from \"../../provider\";\r\n\r\nimport { Icon } from \"../Icon\";\r\nimport { Spinner } from \"../Spinner\";\r\n\r\nimport \"./Button.css\";\r\n\r\nexport interface ButtonProps\r\n extends ButtonHTMLAttributes<HTMLButtonElement> {\r\n variant?:\r\n | \"primary\"\r\n | \"secondary\"\r\n | \"outline\"\r\n | \"ghost\";\r\n\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n\r\n loading?: boolean;\r\n\r\n leftSection?: ReactNode;\r\n rightSection?: ReactNode;\r\n}\r\n\r\nexport const Button = forwardRef<\r\n HTMLButtonElement,\r\n ButtonProps\r\n>(function Button(\r\n {\r\n variant,\r\n size,\r\n loading = false,\r\n\r\n leftSection,\r\n rightSection,\r\n\r\n disabled,\r\n className = \"\",\r\n children,\r\n type = \"button\",\r\n\r\n ...props\r\n },\r\n ref,\r\n) {\r\n const defaults =\r\n useComponentDefaults(\"Button\");\r\n\r\n const resolvedVariant =\r\n variant ??\r\n defaults.variant ??\r\n \"primary\";\r\n\r\n const resolvedSize =\r\n size ??\r\n defaults.size ??\r\n \"md\";\r\n\r\n const classes = [\r\n \"mb-button\",\r\n `mb-button--${resolvedVariant}`,\r\n `mb-button--${resolvedSize}`,\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n const iconSize = {\r\n sm: 16,\r\n md: 18,\r\n lg: 20,\r\n }[resolvedSize];\r\n\r\n return (\r\n <button\r\n ref={ref}\r\n type={type}\r\n className={classes}\r\n disabled={disabled || loading}\r\n aria-busy={loading || undefined}\r\n {...props}\r\n >\r\n {loading ? (\r\n <Spinner\r\n size={14}\r\n thickness={2}\r\n color=\"currentColor\"\r\n trackColor=\"transparent\"\r\n aria-hidden=\"true\"\r\n />\r\n ) : leftSection != null ? (\r\n <Icon size={iconSize}>\r\n {leftSection}\r\n </Icon>\r\n ) : null}\r\n\r\n <span className=\"mb-button__content\">\r\n {children}\r\n </span>\r\n\r\n {!loading && rightSection != null ? (\r\n <Icon size={iconSize}>\r\n {rightSection}\r\n </Icon>\r\n ) : null}\r\n </button>\r\n );\r\n});","import type { CSSProperties, HTMLAttributes } from \"react\";\r\nimport \"./Spinner.css\";\r\n\r\nexport interface SpinnerProps\r\n extends HTMLAttributes<HTMLSpanElement> {\r\n size?: number;\r\n thickness?: number;\r\n color?: string;\r\n trackColor?: string;\r\n label?: string;\r\n}\r\n\r\nexport function Spinner({\r\n size = 40,\r\n thickness = 3,\r\n color,\r\n trackColor,\r\n label = \"Загрузка\",\r\n className = \"\",\r\n style,\r\n ...props\r\n}: SpinnerProps) {\r\n const spinnerStyle = {\r\n \"--mb-spinner-size\": `${size}px`,\r\n \"--mb-spinner-thickness\": `${thickness}px`,\r\n \"--mb-spinner-color\": color,\r\n \"--mb-spinner-track\": trackColor,\r\n ...style,\r\n } as CSSProperties;\r\n\r\n return (\r\n <span\r\n className={`mb-spinner ${className}`}\r\n style={spinnerStyle}\r\n role=\"status\"\r\n aria-label={label}\r\n {...props}\r\n />\r\n );\r\n}","import type {\r\n InputHTMLAttributes,\r\n ReactNode,\r\n} from \"react\";\r\n\r\nimport \"./Checkbox.css\";\r\n\r\nexport interface CheckboxProps\r\n extends Omit<\r\n InputHTMLAttributes<HTMLInputElement>,\r\n \"type\"\r\n > {\r\n label?: ReactNode;\r\n description?: ReactNode;\r\n}\r\n\r\nexport function Checkbox({\r\n label,\r\n description,\r\n className = \"\",\r\n disabled,\r\n ...props\r\n}: CheckboxProps) {\r\n const classes = [\r\n \"mb-checkbox\",\r\n disabled && \"mb-checkbox--disabled\",\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n return (\r\n <label className={classes}>\r\n <input\r\n type=\"checkbox\"\r\n className=\"mb-checkbox__input\"\r\n disabled={disabled}\r\n {...props}\r\n />\r\n\r\n <span\r\n className=\"mb-checkbox__control\"\r\n aria-hidden=\"true\"\r\n >\r\n <svg\r\n className=\"mb-checkbox__check\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n >\r\n <path\r\n d=\"M3.5 8.5L6.5 11.5L12.5 4.5\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n </span>\r\n\r\n {(label || description) && (\r\n <span className=\"mb-checkbox__body\">\r\n {label && (\r\n <span className=\"mb-checkbox__label\">\r\n {label}\r\n </span>\r\n )}\r\n\r\n {description && (\r\n <span className=\"mb-checkbox__description\">\r\n {description}\r\n </span>\r\n )}\r\n </span>\r\n )}\r\n </label>\r\n );\r\n}","import type {\r\n CSSProperties,\r\n HTMLAttributes,\r\n} from \"react\";\r\n\r\nimport \"./Group.css\";\r\n\r\nexport interface GroupProps\r\n extends HTMLAttributes<HTMLDivElement> {\r\n gap?: number;\r\n align?:\r\n | \"start\"\r\n | \"center\"\r\n | \"end\"\r\n | \"stretch\";\r\n justify?:\r\n | \"start\"\r\n | \"center\"\r\n | \"end\"\r\n | \"between\";\r\n wrap?: boolean;\r\n}\r\n\r\nexport function Group({\r\n gap = 12,\r\n align = \"center\",\r\n justify = \"start\",\r\n wrap = true,\r\n className = \"\",\r\n style,\r\n children,\r\n ...props\r\n}: GroupProps) {\r\n const groupStyle = {\r\n \"--mb-group-gap\": `${gap}px`,\r\n ...style,\r\n } as CSSProperties;\r\n\r\n const classes = [\r\n \"mb-group\",\r\n `mb-group--align-${align}`,\r\n `mb-group--justify-${justify}`,\r\n wrap\r\n ? \"mb-group--wrap\"\r\n : \"mb-group--nowrap\",\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n return (\r\n <div\r\n className={classes}\r\n style={groupStyle}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}","import {\r\n useEffect,\r\n useId,\r\n useRef,\r\n type HTMLAttributes,\r\n type ReactNode,\r\n} from \"react\";\r\n\r\nimport { useLockScroll } from \"../../hooks\";\r\nimport { useComponentDefaults } from \"../../provider\";\r\nimport { cx } from \"../../utils\";\r\n\r\nimport { Portal } from \"../Portal\";\r\n\r\nimport \"./Modal.css\";\r\n\r\nexport interface ModalProps\r\n extends Omit<\r\n HTMLAttributes<HTMLDivElement>,\r\n \"title\"\r\n > {\r\n opened: boolean;\r\n onClose: () => void;\r\n\r\n title?: ReactNode;\r\n description?: ReactNode;\r\n children?: ReactNode;\r\n footer?: ReactNode;\r\n\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n\r\n closeOnEscape?: boolean;\r\n closeOnOverlayClick?: boolean;\r\n withCloseButton?: boolean;\r\n}\r\n\r\nconst focusableSelector = [\r\n \"button:not([disabled])\",\r\n \"[href]\",\r\n \"input:not([disabled])\",\r\n \"select:not([disabled])\",\r\n \"textarea:not([disabled])\",\r\n '[tabindex]:not([tabindex=\"-1\"])',\r\n].join(\",\");\r\n\r\nexport function Modal({\r\n opened,\r\n onClose,\r\n\r\n title,\r\n description,\r\n children,\r\n footer,\r\n\r\n size,\r\n\r\n closeOnEscape,\r\n closeOnOverlayClick,\r\n withCloseButton,\r\n\r\n className = \"\",\r\n\r\n ...props\r\n}: ModalProps) {\r\n const defaults =\r\n useComponentDefaults(\"Modal\");\r\n\r\n const resolvedSize =\r\n size ??\r\n defaults.size ??\r\n \"md\";\r\n\r\n const resolvedCloseOnEscape =\r\n closeOnEscape ??\r\n defaults.closeOnEscape ??\r\n true;\r\n\r\n const resolvedCloseOnOverlayClick =\r\n closeOnOverlayClick ??\r\n defaults.closeOnOverlayClick ??\r\n true;\r\n\r\n const resolvedWithCloseButton =\r\n withCloseButton ??\r\n defaults.withCloseButton ??\r\n true;\r\n\r\n const titleId = useId();\r\n const descriptionId = useId();\r\n\r\n const modalRef =\r\n useRef<HTMLDivElement>(null);\r\n\r\n const previouslyFocusedRef =\r\n useRef<HTMLElement | null>(null);\r\n\r\n useLockScroll(opened);\r\n\r\n useEffect(() => {\r\n if (!opened) {\r\n return;\r\n }\r\n\r\n previouslyFocusedRef.current =\r\n document.activeElement instanceof HTMLElement\r\n ? document.activeElement\r\n : null;\r\n\r\n requestAnimationFrame(() => {\r\n const modal = modalRef.current;\r\n\r\n const firstFocusable =\r\n modal?.querySelector<HTMLElement>(\r\n focusableSelector,\r\n );\r\n\r\n if (firstFocusable) {\r\n firstFocusable.focus();\r\n } else {\r\n modal?.focus();\r\n }\r\n });\r\n\r\n function handleKeyDown(\r\n event: KeyboardEvent,\r\n ) {\r\n const modal = modalRef.current;\r\n\r\n if (!modal) {\r\n return;\r\n }\r\n\r\n if (\r\n event.key === \"Escape\" &&\r\n resolvedCloseOnEscape\r\n ) {\r\n event.preventDefault();\r\n onClose();\r\n return;\r\n }\r\n\r\n if (event.key !== \"Tab\") {\r\n return;\r\n }\r\n\r\n const focusableElements = Array.from(\r\n modal.querySelectorAll<HTMLElement>(\r\n focusableSelector,\r\n ),\r\n );\r\n\r\n if (focusableElements.length === 0) {\r\n event.preventDefault();\r\n modal.focus();\r\n return;\r\n }\r\n\r\n const firstElement =\r\n focusableElements[0];\r\n\r\n const lastElement =\r\n focusableElements[\r\n focusableElements.length - 1\r\n ];\r\n\r\n if (\r\n event.shiftKey &&\r\n document.activeElement === firstElement\r\n ) {\r\n event.preventDefault();\r\n lastElement.focus();\r\n\r\n return;\r\n }\r\n\r\n if (\r\n !event.shiftKey &&\r\n document.activeElement === lastElement\r\n ) {\r\n event.preventDefault();\r\n firstElement.focus();\r\n }\r\n }\r\n\r\n document.addEventListener(\r\n \"keydown\",\r\n handleKeyDown,\r\n );\r\n\r\n return () => {\r\n document.removeEventListener(\r\n \"keydown\",\r\n handleKeyDown,\r\n );\r\n\r\n requestAnimationFrame(() => {\r\n previouslyFocusedRef.current?.focus();\r\n });\r\n };\r\n }, [\r\n opened,\r\n onClose,\r\n resolvedCloseOnEscape,\r\n ]);\r\n\r\n if (!opened) {\r\n return null;\r\n }\r\n\r\n return (\r\n <Portal>\r\n <div\r\n className=\"mb-modal-root\"\r\n role=\"presentation\"\r\n >\r\n <div\r\n className=\"mb-modal__overlay\"\r\n aria-hidden=\"true\"\r\n onMouseDown={(event) => {\r\n if (\r\n resolvedCloseOnOverlayClick &&\r\n event.target === event.currentTarget\r\n ) {\r\n onClose();\r\n }\r\n }}\r\n >\r\n <div\r\n ref={modalRef}\r\n className={cx(\r\n \"mb-modal\",\r\n `mb-modal--${resolvedSize}`,\r\n className,\r\n )}\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n aria-labelledby={\r\n title != null\r\n ? titleId\r\n : undefined\r\n }\r\n aria-describedby={\r\n description != null\r\n ? descriptionId\r\n : undefined\r\n }\r\n tabIndex={-1}\r\n {...props}\r\n >\r\n {title != null ||\r\n description != null ||\r\n resolvedWithCloseButton ? (\r\n <div className=\"mb-modal__header\">\r\n <div className=\"mb-modal__heading\">\r\n {title != null ? (\r\n <div\r\n id={titleId}\r\n className=\"mb-modal__title\"\r\n >\r\n {title}\r\n </div>\r\n ) : null}\r\n\r\n {description != null ? (\r\n <div\r\n id={descriptionId}\r\n className=\"mb-modal__description\"\r\n >\r\n {description}\r\n </div>\r\n ) : null}\r\n </div>\r\n\r\n {resolvedWithCloseButton ? (\r\n <button\r\n type=\"button\"\r\n className=\"mb-modal__close\"\r\n aria-label=\"Закрыть модальное окно\"\r\n onClick={onClose}\r\n >\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n d=\"M7 7L17 17\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n />\r\n\r\n <path\r\n d=\"M17 7L7 17\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n ) : null}\r\n </div>\r\n ) : null}\r\n\r\n <div className=\"mb-modal__content\">\r\n {children}\r\n </div>\r\n\r\n {footer != null ? (\r\n <div className=\"mb-modal__footer\">\r\n {footer}\r\n </div>\r\n ) : null}\r\n </div>\r\n </div>\r\n </div>\r\n </Portal>\r\n );\r\n}","import {\r\n useEffect,\r\n useRef,\r\n type RefObject,\r\n} from \"react\";\r\n\r\nexport type ClickOutsideEvent =\r\n | \"mousedown\"\r\n | \"touchstart\"\r\n | \"pointerdown\";\r\n\r\nexport interface UseClickOutsideOptions {\r\n enabled?: boolean;\r\n events?: ClickOutsideEvent[];\r\n}\r\n\r\nconst defaultEvents: ClickOutsideEvent[] = [\r\n \"pointerdown\",\r\n];\r\n\r\nexport function useClickOutside<\r\n T extends HTMLElement,\r\n>(\r\n handler: (event: Event) => void,\r\n options: UseClickOutsideOptions = {},\r\n): RefObject<T | null> {\r\n const {\r\n enabled = true,\r\n events = defaultEvents,\r\n } = options;\r\n\r\n const elementRef =\r\n useRef<T | null>(null);\r\n\r\n const handlerRef =\r\n useRef(handler);\r\n\r\n useEffect(() => {\r\n handlerRef.current = handler;\r\n }, [handler]);\r\n\r\n useEffect(() => {\r\n if (!enabled) {\r\n return;\r\n }\r\n\r\n function listener(event: Event) {\r\n const element =\r\n elementRef.current;\r\n\r\n const target =\r\n event.target;\r\n\r\n if (\r\n !element ||\r\n !(target instanceof Node) ||\r\n element.contains(target)\r\n ) {\r\n return;\r\n }\r\n\r\n handlerRef.current(event);\r\n }\r\n\r\n events.forEach((eventName) => {\r\n document.addEventListener(\r\n eventName,\r\n listener,\r\n );\r\n });\r\n\r\n return () => {\r\n events.forEach((eventName) => {\r\n document.removeEventListener(\r\n eventName,\r\n listener,\r\n );\r\n });\r\n };\r\n }, [\r\n enabled,\r\n events,\r\n ]);\r\n\r\n return elementRef;\r\n}","import {\r\n useCallback,\r\n useState,\r\n} from \"react\";\r\n\r\nexport interface UseControllableStateOptions<T> {\r\n value?: T;\r\n defaultValue: T;\r\n onChange?: (value: T) => void;\r\n}\r\n\r\nexport function useControllableState<T>({\r\n value,\r\n defaultValue,\r\n onChange,\r\n}: UseControllableStateOptions<T>) {\r\n const [internalValue, setInternalValue] =\r\n useState(defaultValue);\r\n\r\n const controlled = value !== undefined;\r\n\r\n const currentValue = controlled\r\n ? value\r\n : internalValue;\r\n\r\n const setValue = useCallback(\r\n (\r\n nextValue:\r\n | T\r\n | ((current: T) => T),\r\n ) => {\r\n const resolvedValue =\r\n typeof nextValue === \"function\"\r\n ? (\r\n nextValue as (\r\n current: T,\r\n ) => T\r\n )(currentValue)\r\n : nextValue;\r\n\r\n if (!controlled) {\r\n setInternalValue(resolvedValue);\r\n }\r\n\r\n onChange?.(resolvedValue);\r\n },\r\n [\r\n controlled,\r\n currentValue,\r\n onChange,\r\n ],\r\n );\r\n\r\n return [\r\n currentValue,\r\n setValue,\r\n ] as const;\r\n}","import {\r\n useCallback,\r\n useState,\r\n} from \"react\";\r\n\r\nexport interface UseDisclosureHandlers {\r\n open: () => void;\r\n close: () => void;\r\n toggle: () => void;\r\n}\r\n\r\nexport type UseDisclosureReturn = [\r\n boolean,\r\n UseDisclosureHandlers,\r\n];\r\n\r\nexport function useDisclosure(\r\n initialValue = false,\r\n): UseDisclosureReturn {\r\n const [opened, setOpened] =\r\n useState(initialValue);\r\n\r\n const open = useCallback(() => {\r\n setOpened(true);\r\n }, []);\r\n\r\n const close = useCallback(() => {\r\n setOpened(false);\r\n }, []);\r\n\r\n const toggle = useCallback(() => {\r\n setOpened((current) => !current);\r\n }, []);\r\n\r\n return [\r\n opened,\r\n {\r\n open,\r\n close,\r\n toggle,\r\n },\r\n ];\r\n}","import { useEffect } from \"react\";\r\n\r\nexport function useLockScroll(\r\n locked = true,\r\n): void {\r\n useEffect(() => {\r\n if (!locked) {\r\n return;\r\n }\r\n\r\n const body = document.body;\r\n\r\n const previousOverflow =\r\n body.style.overflow;\r\n\r\n const previousPaddingRight =\r\n body.style.paddingRight;\r\n\r\n const scrollbarWidth =\r\n window.innerWidth -\r\n document.documentElement.clientWidth;\r\n\r\n body.style.overflow = \"hidden\";\r\n\r\n if (scrollbarWidth > 0) {\r\n body.style.paddingRight =\r\n `${scrollbarWidth}px`;\r\n }\r\n\r\n return () => {\r\n body.style.overflow =\r\n previousOverflow;\r\n\r\n body.style.paddingRight =\r\n previousPaddingRight;\r\n };\r\n }, [locked]);\r\n}","export type ClassValue =\r\n | string\r\n | number\r\n | bigint\r\n | false\r\n | null\r\n | undefined;\r\n\r\nexport function cx(\r\n ...classes: ClassValue[]\r\n): string {\r\n return classes\r\n .filter((value) => Boolean(value))\r\n .join(\" \");\r\n}","import {\r\n useContext,\r\n useEffect,\r\n useState,\r\n type ReactNode,\r\n} from \"react\";\r\n\r\nimport { createPortal } from \"react-dom\";\r\n\r\nimport {\r\n MainbasePortalContext,\r\n} from \"../../provider/PortalContext\";\r\n\r\nexport interface PortalProps {\r\n children: ReactNode;\r\n target?: HTMLElement | null;\r\n}\r\n\r\nexport function Portal({\r\n children,\r\n target,\r\n}: PortalProps) {\r\n const providerTarget =\r\n useContext(MainbasePortalContext);\r\n\r\n const [mounted, setMounted] =\r\n useState(false);\r\n\r\n useEffect(() => {\r\n setMounted(true);\r\n }, []);\r\n\r\n if (!mounted) {\r\n return null;\r\n }\r\n\r\n const resolvedTarget =\r\n target ??\r\n providerTarget ??\r\n document.body;\r\n\r\n return createPortal(\r\n children,\r\n resolvedTarget,\r\n );\r\n}","import type {\r\n InputHTMLAttributes,\r\n ReactNode,\r\n} from \"react\";\r\n\r\nimport \"./Radio.css\";\r\n\r\nexport interface RadioProps\r\n extends Omit<\r\n InputHTMLAttributes<HTMLInputElement>,\r\n \"type\"\r\n > {\r\n label?: ReactNode;\r\n description?: ReactNode;\r\n}\r\n\r\nexport function Radio({\r\n label,\r\n description,\r\n className = \"\",\r\n disabled,\r\n ...props\r\n}: RadioProps) {\r\n const classes = [\r\n \"mb-radio\",\r\n disabled && \"mb-radio--disabled\",\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n return (\r\n <label className={classes}>\r\n <input\r\n type=\"radio\"\r\n className=\"mb-radio__input\"\r\n disabled={disabled}\r\n {...props}\r\n />\r\n\r\n <span\r\n className=\"mb-radio__control\"\r\n aria-hidden=\"true\"\r\n >\r\n <span className=\"mb-radio__dot\" />\r\n </span>\r\n\r\n {(label || description) ? (\r\n <span className=\"mb-radio__body\">\r\n {label ? (\r\n <span className=\"mb-radio__label\">\r\n {label}\r\n </span>\r\n ) : null}\r\n\r\n {description ? (\r\n <span className=\"mb-radio__description\">\r\n {description}\r\n </span>\r\n ) : null}\r\n </span>\r\n ) : null}\r\n </label>\r\n );\r\n}","import type {\r\n HTMLAttributes,\r\n ReactNode,\r\n} from \"react\";\r\n\r\nimport \"./Radio.css\";\r\n\r\nexport interface RadioGroupProps\r\n extends HTMLAttributes<HTMLDivElement> {\r\n label?: ReactNode;\r\n description?: ReactNode;\r\n orientation?: \"vertical\" | \"horizontal\";\r\n}\r\n\r\nexport function RadioGroup({\r\n label,\r\n description,\r\n orientation = \"vertical\",\r\n className = \"\",\r\n children,\r\n ...props\r\n}: RadioGroupProps) {\r\n const classes = [\r\n \"mb-radio-group\",\r\n `mb-radio-group--${orientation}`,\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n return (\r\n <div\r\n className={classes}\r\n role=\"radiogroup\"\r\n {...props}\r\n >\r\n {(label || description) ? (\r\n <div className=\"mb-radio-group__header\">\r\n {label ? (\r\n <div className=\"mb-radio-group__label\">\r\n {label}\r\n </div>\r\n ) : null}\r\n\r\n {description ? (\r\n <div className=\"mb-radio-group__description\">\r\n {description}\r\n </div>\r\n ) : null}\r\n </div>\r\n ) : null}\r\n\r\n <div className=\"mb-radio-group__items\">\r\n {children}\r\n </div>\r\n </div>\r\n );\r\n}","import {\r\n useEffect,\r\n useId,\r\n useRef,\r\n type KeyboardEvent,\r\n type ReactNode,\r\n} from \"react\";\r\n\r\nimport {\r\n useClickOutside,\r\n useControllableState,\r\n useDisclosure,\r\n} from \"../../hooks\";\r\n\r\nimport {\r\n useComponentDefaults,\r\n} from \"../../provider\";\r\n\r\nimport { cx } from \"../../utils\";\r\n\r\nimport { Icon } from \"../Icon\";\r\n\r\nimport \"./Select.css\";\r\n\r\nexport interface SelectOption {\r\n value: string;\r\n label: ReactNode;\r\n disabled?: boolean;\r\n leftSection?: ReactNode;\r\n}\r\n\r\nexport interface SelectProps {\r\n options: SelectOption[];\r\n\r\n value?: string;\r\n defaultValue?: string;\r\n\r\n placeholder?: string;\r\n\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n\r\n leftSection?: ReactNode;\r\n\r\n disabled?: boolean;\r\n error?: boolean;\r\n\r\n className?: string;\r\n name?: string;\r\n\r\n onChange?: (\r\n value: string,\r\n option: SelectOption,\r\n ) => void;\r\n}\r\n\r\nexport function Select({\r\n options,\r\n\r\n value,\r\n defaultValue = \"\",\r\n\r\n placeholder = \"Выберите значение\",\r\n\r\n size,\r\n\r\n leftSection,\r\n\r\n disabled = false,\r\n error = false,\r\n\r\n className = \"\",\r\n name,\r\n\r\n onChange,\r\n}: SelectProps) {\r\n const defaults =\r\n useComponentDefaults(\"Select\");\r\n\r\n const resolvedSize =\r\n size ??\r\n defaults.size ??\r\n \"md\";\r\n\r\n const listboxId = useId();\r\n\r\n const triggerRef =\r\n useRef<HTMLButtonElement>(null);\r\n\r\n const optionRefs =\r\n useRef<Array<HTMLButtonElement | null>>([]);\r\n\r\n const [\r\n opened,\r\n {\r\n open,\r\n close,\r\n },\r\n ] = useDisclosure();\r\n\r\n const [\r\n selectedValue,\r\n setSelectedValue,\r\n ] = useControllableState<string>({\r\n value,\r\n defaultValue,\r\n });\r\n\r\n const selectedOption = options.find(\r\n (option) =>\r\n option.value === selectedValue,\r\n );\r\n\r\n const selectedIndex = options.findIndex(\r\n (option) =>\r\n option.value === selectedValue,\r\n );\r\n\r\n const firstEnabledIndex =\r\n options.findIndex(\r\n (option) => !option.disabled,\r\n );\r\n\r\n const [\r\n activeIndex,\r\n setActiveIndex,\r\n ] = useControllableState<number>({\r\n defaultValue:\r\n selectedIndex >= 0\r\n ? selectedIndex\r\n : firstEnabledIndex,\r\n });\r\n\r\n const rootRef =\r\n useClickOutside<HTMLDivElement>(\r\n () => close(),\r\n {\r\n enabled: opened,\r\n },\r\n );\r\n\r\n const iconSize = {\r\n sm: 16,\r\n md: 18,\r\n lg: 20,\r\n }[resolvedSize];\r\n\r\n const classes = cx(\r\n \"mb-select\",\r\n `mb-select--${resolvedSize}`,\r\n opened\r\n ? \"mb-select--opened\"\r\n : undefined,\r\n error\r\n ? \"mb-select--error\"\r\n : undefined,\r\n disabled\r\n ? \"mb-select--disabled\"\r\n : undefined,\r\n leftSection != null\r\n ? \"mb-select--with-section\"\r\n : undefined,\r\n className,\r\n );\r\n\r\n function getFirstEnabledIndex() {\r\n return options.findIndex(\r\n (option) => !option.disabled,\r\n );\r\n }\r\n\r\n function getLastEnabledIndex() {\r\n for (\r\n let index = options.length - 1;\r\n index >= 0;\r\n index -= 1\r\n ) {\r\n if (!options[index]?.disabled) {\r\n return index;\r\n }\r\n }\r\n\r\n return -1;\r\n }\r\n\r\n function findNextEnabled(\r\n startIndex: number,\r\n direction: 1 | -1,\r\n ) {\r\n if (options.length === 0) {\r\n return -1;\r\n }\r\n\r\n let index = startIndex;\r\n\r\n for (\r\n let attempt = 0;\r\n attempt < options.length;\r\n attempt += 1\r\n ) {\r\n index =\r\n (\r\n index +\r\n direction +\r\n options.length\r\n ) % options.length;\r\n\r\n if (!options[index]?.disabled) {\r\n return index;\r\n }\r\n }\r\n\r\n return -1;\r\n }\r\n\r\n function openSelect() {\r\n if (disabled) {\r\n return;\r\n }\r\n\r\n setActiveIndex(\r\n selectedIndex >= 0\r\n ? selectedIndex\r\n : getFirstEnabledIndex(),\r\n );\r\n\r\n open();\r\n }\r\n\r\n function closeSelect(\r\n restoreFocus = false,\r\n ) {\r\n close();\r\n\r\n if (restoreFocus) {\r\n requestAnimationFrame(() => {\r\n triggerRef.current?.focus();\r\n });\r\n }\r\n }\r\n\r\n function selectOption(\r\n option: SelectOption,\r\n ) {\r\n if (option.disabled) {\r\n return;\r\n }\r\n\r\n setSelectedValue(option.value);\r\n onChange?.(option.value, option);\r\n\r\n closeSelect(true);\r\n }\r\n\r\n function handleTriggerClick() {\r\n if (disabled) {\r\n return;\r\n }\r\n\r\n if (opened) {\r\n close();\r\n } else {\r\n openSelect();\r\n }\r\n }\r\n\r\n function handleTriggerKeyDown(\r\n event: KeyboardEvent<HTMLButtonElement>,\r\n ) {\r\n if (disabled) {\r\n return;\r\n }\r\n\r\n if (\r\n event.key === \"ArrowDown\" ||\r\n event.key === \"ArrowUp\"\r\n ) {\r\n event.preventDefault();\r\n\r\n if (!opened) {\r\n openSelect();\r\n return;\r\n }\r\n\r\n setActiveIndex((current) =>\r\n findNextEnabled(\r\n current,\r\n event.key === \"ArrowDown\"\r\n ? 1\r\n : -1,\r\n ),\r\n );\r\n\r\n return;\r\n }\r\n\r\n if (\r\n event.key === \"Enter\" ||\r\n event.key === \" \"\r\n ) {\r\n event.preventDefault();\r\n\r\n if (!opened) {\r\n openSelect();\r\n return;\r\n }\r\n\r\n const option =\r\n options[activeIndex];\r\n\r\n if (option) {\r\n selectOption(option);\r\n }\r\n\r\n return;\r\n }\r\n\r\n if (event.key === \"Escape\") {\r\n if (opened) {\r\n event.preventDefault();\r\n closeSelect(true);\r\n }\r\n\r\n return;\r\n }\r\n\r\n if (event.key === \"Home\") {\r\n event.preventDefault();\r\n\r\n if (!opened) {\r\n openSelect();\r\n }\r\n\r\n setActiveIndex(\r\n getFirstEnabledIndex(),\r\n );\r\n\r\n return;\r\n }\r\n\r\n if (event.key === \"End\") {\r\n event.preventDefault();\r\n\r\n if (!opened) {\r\n openSelect();\r\n }\r\n\r\n setActiveIndex(\r\n getLastEnabledIndex(),\r\n );\r\n }\r\n }\r\n\r\n function handleOptionKeyDown(\r\n event: KeyboardEvent<HTMLButtonElement>,\r\n index: number,\r\n ) {\r\n if (event.key === \"ArrowDown\") {\r\n event.preventDefault();\r\n\r\n setActiveIndex(\r\n findNextEnabled(index, 1),\r\n );\r\n\r\n return;\r\n }\r\n\r\n if (event.key === \"ArrowUp\") {\r\n event.preventDefault();\r\n\r\n setActiveIndex(\r\n findNextEnabled(index, -1),\r\n );\r\n\r\n return;\r\n }\r\n\r\n if (event.key === \"Home\") {\r\n event.preventDefault();\r\n\r\n setActiveIndex(\r\n getFirstEnabledIndex(),\r\n );\r\n\r\n return;\r\n }\r\n\r\n if (event.key === \"End\") {\r\n event.preventDefault();\r\n\r\n setActiveIndex(\r\n getLastEnabledIndex(),\r\n );\r\n\r\n return;\r\n }\r\n\r\n if (event.key === \"Escape\") {\r\n event.preventDefault();\r\n closeSelect(true);\r\n\r\n return;\r\n }\r\n\r\n if (event.key === \"Tab\") {\r\n close();\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if (\r\n !opened ||\r\n activeIndex < 0\r\n ) {\r\n return;\r\n }\r\n\r\n optionRefs.current[\r\n activeIndex\r\n ]?.focus();\r\n }, [\r\n opened,\r\n activeIndex,\r\n ]);\r\n\r\n useEffect(() => {\r\n if (selectedIndex >= 0) {\r\n setActiveIndex(selectedIndex);\r\n }\r\n }, [\r\n selectedIndex,\r\n setActiveIndex,\r\n ]);\r\n\r\n return (\r\n <div\r\n ref={rootRef}\r\n className={classes}\r\n >\r\n {name ? (\r\n <input\r\n type=\"hidden\"\r\n name={name}\r\n value={selectedValue}\r\n />\r\n ) : null}\r\n\r\n <button\r\n ref={triggerRef}\r\n type=\"button\"\r\n className=\"mb-select__trigger\"\r\n disabled={disabled}\r\n aria-haspopup=\"listbox\"\r\n aria-expanded={opened}\r\n aria-controls={listboxId}\r\n aria-invalid={error || undefined}\r\n onClick={handleTriggerClick}\r\n onKeyDown={handleTriggerKeyDown}\r\n >\r\n {leftSection != null ? (\r\n <span className=\"mb-select__section\">\r\n <Icon size={iconSize}>\r\n {leftSection}\r\n </Icon>\r\n </span>\r\n ) : null}\r\n\r\n <span\r\n className={cx(\r\n \"mb-select__value\",\r\n !selectedOption\r\n ? \"mb-select__placeholder\"\r\n : undefined,\r\n )}\r\n >\r\n {selectedOption\r\n ? selectedOption.label\r\n : placeholder}\r\n </span>\r\n\r\n <span\r\n className=\"mb-select__chevron\"\r\n aria-hidden=\"true\"\r\n >\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n >\r\n <path\r\n d=\"M7 10L12 15L17 10\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n </span>\r\n </button>\r\n\r\n {opened ? (\r\n <div\r\n id={listboxId}\r\n className=\"mb-select__dropdown\"\r\n role=\"listbox\"\r\n aria-label={placeholder}\r\n >\r\n <div className=\"mb-select__options\">\r\n {options.map(\r\n (option, index) => {\r\n const selected =\r\n option.value ===\r\n selectedValue;\r\n\r\n const active =\r\n index === activeIndex;\r\n\r\n return (\r\n <button\r\n key={option.value}\r\n ref={(element) => {\r\n optionRefs.current[\r\n index\r\n ] = element;\r\n }}\r\n type=\"button\"\r\n role=\"option\"\r\n aria-selected={selected}\r\n disabled={option.disabled}\r\n tabIndex={\r\n active ? 0 : -1\r\n }\r\n className={cx(\r\n \"mb-select__option\",\r\n selected\r\n ? \"mb-select__option--selected\"\r\n : undefined,\r\n active\r\n ? \"mb-select__option--active\"\r\n : undefined,\r\n )}\r\n onMouseEnter={() => {\r\n if (\r\n !option.disabled\r\n ) {\r\n setActiveIndex(index);\r\n }\r\n }}\r\n onClick={() => {\r\n selectOption(option);\r\n }}\r\n onKeyDown={(event) => {\r\n handleOptionKeyDown(\r\n event,\r\n index,\r\n );\r\n }}\r\n >\r\n {option.leftSection != null ? (\r\n <span className=\"mb-select__option-icon\">\r\n <Icon size={18}>\r\n {option.leftSection}\r\n </Icon>\r\n </span>\r\n ) : null}\r\n\r\n <span className=\"mb-select__option-label\">\r\n {option.label}\r\n </span>\r\n\r\n {selected ? (\r\n <span\r\n className=\"mb-select__check\"\r\n aria-hidden=\"true\"\r\n >\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n >\r\n <path\r\n d=\"M5 12.5L9.5 17L19 7.5\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2.2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n </span>\r\n ) : null}\r\n </button>\r\n );\r\n },\r\n )}\r\n </div>\r\n </div>\r\n ) : null}\r\n </div>\r\n );\r\n}","import type {\r\n CSSProperties,\r\n HTMLAttributes,\r\n} from \"react\";\r\n\r\nimport \"./Stack.css\";\r\n\r\nexport interface StackProps\r\n extends HTMLAttributes<HTMLDivElement> {\r\n gap?: number;\r\n align?:\r\n | \"stretch\"\r\n | \"start\"\r\n | \"center\"\r\n | \"end\";\r\n justify?:\r\n | \"start\"\r\n | \"center\"\r\n | \"end\"\r\n | \"between\";\r\n}\r\n\r\nexport function Stack({\r\n gap = 16,\r\n align = \"stretch\",\r\n justify = \"start\",\r\n className = \"\",\r\n style,\r\n children,\r\n ...props\r\n}: StackProps) {\r\n const stackStyle = {\r\n \"--mb-stack-gap\": `${gap}px`,\r\n ...style,\r\n } as CSSProperties;\r\n\r\n const classes = [\r\n \"mb-stack\",\r\n `mb-stack--align-${align}`,\r\n `mb-stack--justify-${justify}`,\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n return (\r\n <div\r\n className={classes}\r\n style={stackStyle}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}","import type {\r\n InputHTMLAttributes,\r\n ReactNode,\r\n} from \"react\";\r\n\r\nimport \"./Switch.css\";\r\n\r\nexport interface SwitchProps\r\n extends Omit<\r\n InputHTMLAttributes<HTMLInputElement>,\r\n \"type\"\r\n > {\r\n label?: ReactNode;\r\n description?: ReactNode;\r\n}\r\n\r\nexport function Switch({\r\n label,\r\n description,\r\n className = \"\",\r\n disabled,\r\n ...props\r\n}: SwitchProps) {\r\n const classes = [\r\n \"mb-switch\",\r\n disabled && \"mb-switch--disabled\",\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n return (\r\n <label className={classes}>\r\n <input\r\n type=\"checkbox\"\r\n className=\"mb-switch__input\"\r\n disabled={disabled}\r\n {...props}\r\n />\r\n\r\n <span\r\n className=\"mb-switch__control\"\r\n aria-hidden=\"true\"\r\n >\r\n <span className=\"mb-switch__thumb\" />\r\n </span>\r\n\r\n {(label || description) && (\r\n <span className=\"mb-switch__body\">\r\n {label ? (\r\n <span className=\"mb-switch__label\">\r\n {label}\r\n </span>\r\n ) : null}\r\n\r\n {description ? (\r\n <span className=\"mb-switch__description\">\r\n {description}\r\n </span>\r\n ) : null}\r\n </span>\r\n )}\r\n </label>\r\n );\r\n}","import {\r\n useCallback,\r\n useMemo,\r\n useState,\r\n type PropsWithChildren,\r\n} from \"react\";\r\n\r\nimport {\r\n useComponentDefaults,\r\n} from \"../../provider\";\r\n\r\nimport { Toast } from \"./Toast\";\r\nimport { ToastContext } from \"./ToastContext\";\r\n\r\nimport type {\r\n ToastApi,\r\n ToastItem,\r\n ToastOptions,\r\n ToastPosition,\r\n ToastShortcutInput,\r\n ToastVariant,\r\n} from \"./types\";\r\n\r\nimport \"./Toast.css\";\r\n\r\nexport interface ToastProviderProps\r\n extends PropsWithChildren {\r\n position?: ToastPosition;\r\n defaultDuration?: number;\r\n maxToasts?: number;\r\n}\r\n\r\nfunction createToastId() {\r\n return [\r\n \"mb-toast\",\r\n Date.now().toString(36),\r\n Math.random().toString(36).slice(2),\r\n ].join(\"-\");\r\n}\r\n\r\nfunction normalizeShortcut(\r\n input: ToastShortcutInput,\r\n variant: ToastVariant,\r\n): ToastOptions {\r\n if (typeof input === \"string\") {\r\n return {\r\n message: input,\r\n variant,\r\n };\r\n }\r\n\r\n return {\r\n ...input,\r\n variant,\r\n };\r\n}\r\n\r\nexport function ToastProvider({\r\n children,\r\n position,\r\n defaultDuration,\r\n maxToasts,\r\n}: ToastProviderProps) {\r\n const defaults =\r\n useComponentDefaults(\"Toast\");\r\n\r\n const resolvedPosition =\r\n position ??\r\n defaults.position ??\r\n \"top-right\";\r\n\r\n const resolvedDuration =\r\n defaultDuration ??\r\n defaults.duration ??\r\n 4000;\r\n\r\n const resolvedMaxToasts =\r\n maxToasts ??\r\n defaults.maxToasts ??\r\n 5;\r\n\r\n const [toasts, setToasts] =\r\n useState<ToastItem[]>([]);\r\n\r\n const remove = useCallback((id: string) => {\r\n setToasts((current) =>\r\n current.filter(\r\n (toast) => toast.id !== id,\r\n ),\r\n );\r\n }, []);\r\n\r\n const clear = useCallback(() => {\r\n setToasts([]);\r\n }, []);\r\n\r\n const show = useCallback(\r\n (input: ToastOptions | string) => {\r\n const options: ToastOptions =\r\n typeof input === \"string\"\r\n ? {\r\n message: input,\r\n }\r\n : input;\r\n\r\n const id =\r\n options.id ??\r\n createToastId();\r\n\r\n const toast: ToastItem = {\r\n id,\r\n\r\n title: options.title,\r\n message: options.message,\r\n\r\n variant:\r\n options.variant ??\r\n \"info\",\r\n\r\n duration:\r\n options.duration ??\r\n resolvedDuration,\r\n\r\n closable:\r\n options.closable ??\r\n true,\r\n\r\n icon: options.icon,\r\n };\r\n\r\n setToasts((current) => {\r\n const filtered =\r\n current.filter(\r\n (item) => item.id !== id,\r\n );\r\n\r\n return [\r\n ...filtered,\r\n toast,\r\n ].slice(-resolvedMaxToasts);\r\n });\r\n\r\n return id;\r\n },\r\n [\r\n resolvedDuration,\r\n resolvedMaxToasts,\r\n ],\r\n );\r\n\r\n const createShortcut = useCallback(\r\n (variant: ToastVariant) =>\r\n (input: ToastShortcutInput) =>\r\n show(\r\n normalizeShortcut(\r\n input,\r\n variant,\r\n ),\r\n ),\r\n [show],\r\n );\r\n\r\n const api = useMemo<ToastApi>(\r\n () => ({\r\n show,\r\n\r\n info:\r\n createShortcut(\"info\"),\r\n\r\n success:\r\n createShortcut(\"success\"),\r\n\r\n warning:\r\n createShortcut(\"warning\"),\r\n\r\n danger:\r\n createShortcut(\"danger\"),\r\n\r\n remove,\r\n clear,\r\n }),\r\n [\r\n show,\r\n createShortcut,\r\n remove,\r\n clear,\r\n ],\r\n );\r\n\r\n return (\r\n <ToastContext.Provider value={api}>\r\n {children}\r\n\r\n <div\r\n className={[\r\n \"mb-toast-viewport\",\r\n `mb-toast-viewport--${resolvedPosition}`,\r\n ].join(\" \")}\r\n aria-label=\"Уведомления\"\r\n >\r\n {toasts.map((toast) => (\r\n <Toast\r\n key={toast.id}\r\n toast={toast}\r\n onClose={remove}\r\n />\r\n ))}\r\n </div>\r\n </ToastContext.Provider>\r\n );\r\n}","import {\r\n useCallback,\r\n useEffect,\r\n useRef,\r\n useState,\r\n} from \"react\";\r\n\r\nimport { Icon } from \"../Icon\";\r\n\r\nimport type { ToastItem } from \"./types\";\r\n\r\ninterface ToastProps {\r\n toast: ToastItem;\r\n onClose: (id: string) => void;\r\n}\r\n\r\nfunction DefaultToastIcon({\r\n variant,\r\n}: {\r\n variant: ToastItem[\"variant\"];\r\n}) {\r\n if (variant === \"success\") {\r\n return (\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n d=\"M5 12.5L9.5 17L19 7.5\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2.2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n }\r\n\r\n if (variant === \"warning\") {\r\n return (\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n d=\"M12 8V13\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2.2\"\r\n strokeLinecap=\"round\"\r\n />\r\n\r\n <path\r\n d=\"M12 17H12.01\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2.8\"\r\n strokeLinecap=\"round\"\r\n />\r\n\r\n <path\r\n d=\"M10.3 4.8L3.4 17.1C2.8 18.2 3.6 19.5 4.9 19.5H19.1C20.4 19.5 21.2 18.2 20.6 17.1L13.7 4.8C13 3.6 11 3.6 10.3 4.8Z\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.8\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n }\r\n\r\n if (variant === \"danger\") {\r\n return (\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n d=\"M8 8L16 16\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2.2\"\r\n strokeLinecap=\"round\"\r\n />\r\n\r\n <path\r\n d=\"M16 8L8 16\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2.2\"\r\n strokeLinecap=\"round\"\r\n />\r\n </svg>\r\n );\r\n }\r\n\r\n return (\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n d=\"M12 11V17\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2.2\"\r\n strokeLinecap=\"round\"\r\n />\r\n\r\n <path\r\n d=\"M12 7H12.01\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2.8\"\r\n strokeLinecap=\"round\"\r\n />\r\n\r\n <circle\r\n cx=\"12\"\r\n cy=\"12\"\r\n r=\"9\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.8\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function Toast({\r\n toast,\r\n onClose,\r\n}: ToastProps) {\r\n const [closing, setClosing] = useState(false);\r\n\r\n const timerRef =\r\n useRef<ReturnType<typeof setTimeout> | null>(null);\r\n\r\n const startedAtRef = useRef(0);\r\n const remainingRef = useRef(toast.duration);\r\n\r\n const finishClose = useCallback(() => {\r\n setClosing(true);\r\n\r\n window.setTimeout(() => {\r\n onClose(toast.id);\r\n }, 180);\r\n }, [onClose, toast.id]);\r\n\r\n const clearTimer = useCallback(() => {\r\n if (!timerRef.current) {\r\n return;\r\n }\r\n\r\n clearTimeout(timerRef.current);\r\n timerRef.current = null;\r\n\r\n const elapsed =\r\n Date.now() - startedAtRef.current;\r\n\r\n remainingRef.current = Math.max(\r\n remainingRef.current - elapsed,\r\n 0,\r\n );\r\n }, []);\r\n\r\n const startTimer = useCallback(() => {\r\n if (toast.duration <= 0 || closing) {\r\n return;\r\n }\r\n\r\n startedAtRef.current = Date.now();\r\n\r\n timerRef.current = setTimeout(() => {\r\n finishClose();\r\n }, remainingRef.current);\r\n }, [\r\n closing,\r\n finishClose,\r\n toast.duration,\r\n ]);\r\n\r\n useEffect(() => {\r\n startTimer();\r\n\r\n return clearTimer;\r\n }, [clearTimer, startTimer]);\r\n\r\n const role =\r\n toast.variant === \"danger\" ||\r\n toast.variant === \"warning\"\r\n ? \"alert\"\r\n : \"status\";\r\n\r\n return (\r\n <div\r\n className={[\r\n \"mb-toast\",\r\n `mb-toast--${toast.variant}`,\r\n closing && \"mb-toast--closing\",\r\n ]\r\n .filter(Boolean)\r\n .join(\" \")}\r\n role={role}\r\n aria-live={\r\n role === \"alert\"\r\n ? \"assertive\"\r\n : \"polite\"\r\n }\r\n onMouseEnter={clearTimer}\r\n onMouseLeave={startTimer}\r\n >\r\n <div className=\"mb-toast__icon\">\r\n <Icon size={20}>\r\n {toast.icon ?? (\r\n <DefaultToastIcon\r\n variant={toast.variant}\r\n />\r\n )}\r\n </Icon>\r\n </div>\r\n\r\n <div className=\"mb-toast__body\">\r\n {toast.title ? (\r\n <div className=\"mb-toast__title\">\r\n {toast.title}\r\n </div>\r\n ) : null}\r\n\r\n <div className=\"mb-toast__message\">\r\n {toast.message}\r\n </div>\r\n </div>\r\n\r\n {toast.closable ? (\r\n <button\r\n type=\"button\"\r\n className=\"mb-toast__close\"\r\n aria-label=\"Закрыть уведомление\"\r\n onClick={finishClose}\r\n >\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n d=\"M7 7L17 17\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n />\r\n\r\n <path\r\n d=\"M17 7L7 17\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n ) : null}\r\n\r\n {toast.duration > 0 ? (\r\n <div\r\n className=\"mb-toast__progress\"\r\n style={{\r\n animationDuration:\r\n `${toast.duration}ms`,\r\n }}\r\n />\r\n ) : null}\r\n </div>\r\n );\r\n}","import { createContext } from \"react\";\r\n\r\nimport type { ToastApi } from \"./types\";\r\n\r\nexport const ToastContext =\r\n createContext<ToastApi | null>(null);","import { useContext } from \"react\";\r\n\r\nimport { ToastContext } from \"./ToastContext\";\r\n\r\nexport function useToast() {\r\n const context = useContext(ToastContext);\r\n\r\n if (!context) {\r\n throw new Error(\r\n \"useToast должен использоваться внутри ToastProvider\",\r\n );\r\n }\r\n\r\n return context;\r\n}","import {\r\n useState,\r\n type HTMLAttributes,\r\n type ImgHTMLAttributes,\r\n type ReactNode,\r\n} from \"react\";\r\n\r\nimport { useMainbaseTheme } from \"../../provider\";\r\nimport { cx } from \"../../utils\";\r\n\r\nimport \"./Avatar.css\";\r\n\r\nexport interface AvatarProps\r\n extends Omit<HTMLAttributes<HTMLDivElement>, \"color\"> {\r\n src?: string;\r\n alt?: string;\r\n\r\n children?: ReactNode;\r\n\r\n size?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\r\n radius?: \"sm\" | \"md\" | \"lg\" | \"full\";\r\n\r\n color?: string;\r\n background?: string;\r\n\r\n status?:\r\n | \"online\"\r\n | \"offline\"\r\n | \"busy\"\r\n | \"away\";\r\n\r\n imageProps?: Omit<\r\n ImgHTMLAttributes<HTMLImageElement>,\r\n \"src\" | \"alt\"\r\n >;\r\n}\r\n\r\nfunction getInitials(value: ReactNode) {\r\n if (typeof value !== \"string\") {\r\n return value;\r\n }\r\n\r\n const parts = value\r\n .trim()\r\n .split(/\\s+/)\r\n .filter(Boolean);\r\n\r\n if (parts.length === 0) {\r\n return \"\";\r\n }\r\n\r\n if (parts.length === 1) {\r\n return parts[0].slice(0, 2).toUpperCase();\r\n }\r\n\r\n return (\r\n parts[0][0] +\r\n parts[parts.length - 1][0]\r\n ).toUpperCase();\r\n}\r\n\r\nexport function Avatar({\r\n src,\r\n alt = \"\",\r\n children,\r\n\r\n size = \"md\",\r\n radius = \"full\",\r\n\r\n color,\r\n background,\r\n\r\n status,\r\n\r\n imageProps,\r\n\r\n className = \"\",\r\n style,\r\n\r\n ...props\r\n}: AvatarProps) {\r\n const theme = useMainbaseTheme();\r\n\r\n const [imageFailed, setImageFailed] =\r\n useState(false);\r\n\r\n const showImage =\r\n Boolean(src) && !imageFailed;\r\n\r\n const classes = cx(\r\n \"mb-avatar\",\r\n `mb-avatar--${size}`,\r\n `mb-avatar--radius-${radius}`,\r\n className,\r\n );\r\n\r\n return (\r\n <div\r\n className={classes}\r\n style={{\r\n color:\r\n color ??\r\n theme.colors.text,\r\n background:\r\n background ??\r\n `color-mix(in srgb, ${theme.colors.primary} 16%, transparent)`,\r\n ...style,\r\n }}\r\n {...props}\r\n >\r\n {showImage ? (\r\n <img\r\n {...imageProps}\r\n src={src}\r\n alt={alt}\r\n className={cx(\r\n \"mb-avatar__image\",\r\n imageProps?.className,\r\n )}\r\n onError={(event) => {\r\n setImageFailed(true);\r\n imageProps?.onError?.(event);\r\n }}\r\n />\r\n ) : (\r\n <span className=\"mb-avatar__fallback\">\r\n {getInitials(children)}\r\n </span>\r\n )}\r\n\r\n {status ? (\r\n <span\r\n className={cx(\r\n \"mb-avatar__status\",\r\n `mb-avatar__status--${status}`,\r\n )}\r\n aria-label={status}\r\n />\r\n ) : null}\r\n </div>\r\n );\r\n}","import {\r\n Children,\r\n cloneElement,\r\n isValidElement,\r\n type HTMLAttributes,\r\n type ReactElement,\r\n type ReactNode,\r\n} from \"react\";\r\n\r\nimport { cx } from \"../../utils\";\r\n\r\nimport type {\r\n AvatarProps,\r\n} from \"./Avatar\";\r\n\r\nimport \"./Avatar.css\";\r\n\r\nexport interface AvatarGroupProps\r\n extends HTMLAttributes<HTMLDivElement> {\r\n children: ReactNode;\r\n\r\n max?: number;\r\n\r\n spacing?: \"sm\" | \"md\" | \"lg\";\r\n\r\n size?: AvatarProps[\"size\"];\r\n radius?: AvatarProps[\"radius\"];\r\n\r\n total?: number;\r\n\r\n renderOverflow?: (\r\n hiddenCount: number,\r\n ) => ReactNode;\r\n}\r\n\r\nexport function AvatarGroup({\r\n children,\r\n\r\n max,\r\n spacing = \"md\",\r\n\r\n size,\r\n radius,\r\n\r\n total,\r\n\r\n renderOverflow,\r\n\r\n className = \"\",\r\n\r\n ...props\r\n}: AvatarGroupProps) {\r\n const items = Children\r\n .toArray(children)\r\n .filter(isValidElement) as ReactElement<\r\n AvatarProps\r\n >[];\r\n\r\n const visibleItems =\r\n max === undefined\r\n ? items\r\n : items.slice(0, max);\r\n\r\n const actualTotal =\r\n total ?? items.length;\r\n\r\n const hiddenCount = Math.max(\r\n actualTotal - visibleItems.length,\r\n 0,\r\n );\r\n\r\n return (\r\n <div\r\n className={cx(\r\n \"mb-avatar-group\",\r\n `mb-avatar-group--spacing-${spacing}`,\r\n className,\r\n )}\r\n {...props}\r\n >\r\n {visibleItems.map((child, index) =>\r\n cloneElement(child, {\r\n size: child.props.size ?? size,\r\n radius:\r\n child.props.radius ?? radius,\r\n className: cx(\r\n \"mb-avatar-group__item\",\r\n child.props.className,\r\n ),\r\n style: {\r\n zIndex:\r\n visibleItems.length - index,\r\n ...child.props.style,\r\n },\r\n }),\r\n )}\r\n\r\n {hiddenCount > 0 ? (\r\n renderOverflow ? (\r\n <div className=\"mb-avatar-group__overflow\">\r\n {renderOverflow(hiddenCount)}\r\n </div>\r\n ) : (\r\n <div\r\n className={cx(\r\n \"mb-avatar\",\r\n `mb-avatar--${size ?? \"md\"}`,\r\n `mb-avatar--radius-${\r\n radius ?? \"full\"\r\n }`,\r\n \"mb-avatar-group__item\",\r\n \"mb-avatar-group__more\",\r\n )}\r\n aria-label={`Ещё ${hiddenCount}`}\r\n style={{\r\n zIndex: 0,\r\n }}\r\n >\r\n +{hiddenCount}\r\n </div>\r\n )\r\n ) : null}\r\n </div>\r\n );\r\n}","import type {\r\n CSSProperties,\r\n HTMLAttributes,\r\n ReactNode,\r\n} from \"react\";\r\n\r\nimport { cx } from \"../../utils\";\r\n\r\nimport \"./Progress.css\";\r\n\r\nexport interface ProgressProps\r\n extends Omit<\r\n HTMLAttributes<HTMLDivElement>,\r\n \"color\"\r\n > {\r\n value?: number;\r\n\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n\r\n variant?:\r\n | \"primary\"\r\n | \"success\"\r\n | \"warning\"\r\n | \"danger\";\r\n\r\n label?: ReactNode;\r\n\r\n showValue?: boolean;\r\n\r\n indeterminate?: boolean;\r\n}\r\n\r\nfunction clampValue(value: number) {\r\n return Math.min(\r\n Math.max(value, 0),\r\n 100,\r\n );\r\n}\r\n\r\nexport function Progress({\r\n value = 0,\r\n\r\n size = \"md\",\r\n\r\n variant = \"primary\",\r\n\r\n label,\r\n\r\n showValue = false,\r\n\r\n indeterminate = false,\r\n\r\n className = \"\",\r\n style,\r\n\r\n ...props\r\n}: ProgressProps) {\r\n const safeValue =\r\n clampValue(value);\r\n\r\n const progressStyle = {\r\n \"--mb-progress-value\":\r\n `${safeValue}%`,\r\n ...style,\r\n } as CSSProperties;\r\n\r\n return (\r\n <div\r\n className={cx(\r\n \"mb-progress\",\r\n `mb-progress--${size}`,\r\n `mb-progress--${variant}`,\r\n indeterminate\r\n ? \"mb-progress--indeterminate\"\r\n : undefined,\r\n className,\r\n )}\r\n style={progressStyle}\r\n {...props}\r\n >\r\n {label != null || showValue ? (\r\n <div className=\"mb-progress__header\">\r\n {label != null ? (\r\n <div className=\"mb-progress__label\">\r\n {label}\r\n </div>\r\n ) : (\r\n <span />\r\n )}\r\n\r\n {showValue && !indeterminate ? (\r\n <div className=\"mb-progress__value\">\r\n {safeValue}%\r\n </div>\r\n ) : null}\r\n </div>\r\n ) : null}\r\n\r\n <div\r\n className=\"mb-progress__track\"\r\n role=\"progressbar\"\r\n aria-valuemin={0}\r\n aria-valuemax={100}\r\n aria-valuenow={\r\n indeterminate\r\n ? undefined\r\n : safeValue\r\n }\r\n aria-valuetext={\r\n indeterminate\r\n ? \"Загрузка\"\r\n : `${safeValue}%`\r\n }\r\n >\r\n <div className=\"mb-progress__bar\" />\r\n </div>\r\n </div>\r\n );\r\n}","import type {\r\n CSSProperties,\r\n HTMLAttributes,\r\n} from \"react\";\r\n\r\nimport { cx } from \"../../utils\";\r\n\r\nimport \"./Skeleton.css\";\r\n\r\nexport interface SkeletonProps\r\n extends HTMLAttributes<HTMLDivElement> {\r\n width?: number | string;\r\n height?: number | string;\r\n\r\n circle?: boolean;\r\n\r\n radius?: \"sm\" | \"md\" | \"lg\";\r\n\r\n visible?: boolean;\r\n\r\n animate?: boolean;\r\n}\r\n\r\nexport function Skeleton({\r\n width,\r\n height,\r\n\r\n circle = false,\r\n\r\n radius = \"md\",\r\n\r\n visible = true,\r\n\r\n animate = true,\r\n\r\n className = \"\",\r\n style,\r\n\r\n ...props\r\n}: SkeletonProps) {\r\n if (!visible) {\r\n return null;\r\n }\r\n\r\n const skeletonStyle = {\r\n width,\r\n height,\r\n ...style,\r\n } as CSSProperties;\r\n\r\n return (\r\n <div\r\n className={cx(\r\n \"mb-skeleton\",\r\n `mb-skeleton--radius-${radius}`,\r\n circle && \"mb-skeleton--circle\",\r\n animate && \"mb-skeleton--animate\",\r\n className,\r\n )}\r\n style={skeletonStyle}\r\n aria-hidden=\"true\"\r\n {...props}\r\n />\r\n );\r\n}","import {\r\n Children,\r\n cloneElement,\r\n createContext,\r\n isValidElement,\r\n useContext,\r\n useId,\r\n useMemo,\r\n useRef,\r\n type ButtonHTMLAttributes,\r\n type HTMLAttributes,\r\n type KeyboardEvent,\r\n type ReactElement,\r\n type ReactNode,\r\n} from \"react\";\r\n\r\nimport {\r\n useControllableState,\r\n} from \"../../hooks\";\r\n\r\nimport {\r\n useComponentDefaults,\r\n} from \"../../provider\";\r\n\r\nimport {\r\n cx,\r\n} from \"../../utils\";\r\n\r\nimport {\r\n Icon,\r\n} from \"../Icon\";\r\n\r\nimport \"./Tabs.css\";\r\n\r\nexport type TabsOrientation =\r\n | \"horizontal\"\r\n | \"vertical\";\r\n\r\nexport type TabsVariant =\r\n | \"underline\"\r\n | \"pill\";\r\n\r\nexport type TabsSize =\r\n | \"sm\"\r\n | \"md\"\r\n | \"lg\";\r\n\r\ninterface TabsContextValue {\r\n value: string | null;\r\n\r\n setValue: (\r\n value: string,\r\n ) => void;\r\n\r\n orientation: TabsOrientation;\r\n variant: TabsVariant;\r\n size: TabsSize;\r\n\r\n id: string;\r\n}\r\n\r\nconst TabsContext =\r\n createContext<TabsContextValue | null>(\r\n null,\r\n );\r\n\r\nfunction useTabsContext() {\r\n const context =\r\n useContext(TabsContext);\r\n\r\n if (!context) {\r\n throw new Error(\r\n \"Компоненты Tabs должны использоваться внутри <Tabs>\",\r\n );\r\n }\r\n\r\n return context;\r\n}\r\n\r\n/* ==========================================================\r\n Tabs Root\r\n========================================================== */\r\n\r\nexport interface TabsProps\r\n extends Omit<\r\n HTMLAttributes<HTMLDivElement>,\r\n \"defaultValue\" | \"onChange\"\r\n > {\r\n value?: string | null;\r\n defaultValue?: string | null;\r\n\r\n onChange?: (\r\n value: string,\r\n ) => void;\r\n\r\n orientation?: TabsOrientation;\r\n variant?: TabsVariant;\r\n size?: TabsSize;\r\n}\r\n\r\nexport function Tabs({\r\n value,\r\n defaultValue = null,\r\n onChange,\r\n\r\n orientation = \"horizontal\",\r\n variant,\r\n size,\r\n\r\n className = \"\",\r\n children,\r\n\r\n ...props\r\n}: TabsProps) {\r\n const defaults =\r\n useComponentDefaults(\"Tabs\");\r\n\r\n const resolvedVariant =\r\n variant ??\r\n defaults.variant ??\r\n \"underline\";\r\n\r\n const resolvedSize =\r\n size ??\r\n defaults.size ??\r\n \"md\";\r\n\r\n const [\r\n currentValue,\r\n setCurrentValue,\r\n ] = useControllableState<\r\n string | null\r\n >({\r\n value,\r\n defaultValue,\r\n onChange: (nextValue) => {\r\n if (nextValue !== null) {\r\n onChange?.(nextValue);\r\n }\r\n },\r\n });\r\n\r\n const generatedId = useId();\r\n\r\n const contextValue =\r\n useMemo<TabsContextValue>(\r\n () => ({\r\n value: currentValue,\r\n\r\n setValue: (\r\n nextValue: string,\r\n ) => {\r\n setCurrentValue(nextValue);\r\n },\r\n\r\n orientation,\r\n variant: resolvedVariant,\r\n size: resolvedSize,\r\n\r\n id: generatedId,\r\n }),\r\n [\r\n currentValue,\r\n generatedId,\r\n orientation,\r\n resolvedSize,\r\n resolvedVariant,\r\n setCurrentValue,\r\n ],\r\n );\r\n\r\n return (\r\n <TabsContext.Provider\r\n value={contextValue}\r\n >\r\n <div\r\n className={cx(\r\n \"mb-tabs\",\r\n `mb-tabs--${orientation}`,\r\n `mb-tabs--${resolvedVariant}`,\r\n `mb-tabs--${resolvedSize}`,\r\n className,\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n </TabsContext.Provider>\r\n );\r\n}\r\n\r\n/* ==========================================================\r\n Tabs List\r\n========================================================== */\r\n\r\nexport interface TabsListProps\r\n extends HTMLAttributes<HTMLDivElement> {\r\n grow?: boolean;\r\n}\r\n\r\nexport function TabsList({\r\n grow = false,\r\n className = \"\",\r\n children,\r\n onKeyDown,\r\n ...props\r\n}: TabsListProps) {\r\n const {\r\n orientation,\r\n value,\r\n setValue,\r\n } = useTabsContext();\r\n\r\n const listRef =\r\n useRef<HTMLDivElement>(null);\r\n\r\n function getEnabledTabs() {\r\n if (!listRef.current) {\r\n return [];\r\n }\r\n\r\n return Array.from(\r\n listRef.current.querySelectorAll<\r\n HTMLButtonElement\r\n >(\r\n '.mb-tabs__tab:not(:disabled)',\r\n ),\r\n );\r\n }\r\n\r\n function activateTab(\r\n tab: HTMLButtonElement,\r\n ) {\r\n const tabValue =\r\n tab.dataset.value;\r\n\r\n if (!tabValue) {\r\n return;\r\n }\r\n\r\n setValue(tabValue);\r\n tab.focus();\r\n }\r\n\r\n function handleKeyDown(\r\n event: KeyboardEvent<HTMLDivElement>,\r\n ) {\r\n onKeyDown?.(event);\r\n\r\n if (event.defaultPrevented) {\r\n return;\r\n }\r\n\r\n const horizontal =\r\n orientation === \"horizontal\";\r\n\r\n const isNextKey =\r\n horizontal\r\n ? event.key === \"ArrowRight\"\r\n : event.key === \"ArrowDown\";\r\n\r\n const isPreviousKey =\r\n horizontal\r\n ? event.key === \"ArrowLeft\"\r\n : event.key === \"ArrowUp\";\r\n\r\n if (\r\n !isNextKey &&\r\n !isPreviousKey &&\r\n event.key !== \"Home\" &&\r\n event.key !== \"End\"\r\n ) {\r\n return;\r\n }\r\n\r\n const tabs = getEnabledTabs();\r\n\r\n if (tabs.length === 0) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n\r\n const activeElement =\r\n document.activeElement;\r\n\r\n let currentIndex =\r\n tabs.findIndex(\r\n (tab) =>\r\n tab === activeElement,\r\n );\r\n\r\n if (currentIndex < 0) {\r\n currentIndex =\r\n tabs.findIndex(\r\n (tab) =>\r\n tab.dataset.value ===\r\n value,\r\n );\r\n }\r\n\r\n if (event.key === \"Home\") {\r\n activateTab(tabs[0]);\r\n return;\r\n }\r\n\r\n if (event.key === \"End\") {\r\n activateTab(\r\n tabs[tabs.length - 1],\r\n );\r\n\r\n return;\r\n }\r\n\r\n const direction =\r\n isNextKey ? 1 : -1;\r\n\r\n const nextIndex =\r\n (\r\n currentIndex +\r\n direction +\r\n tabs.length\r\n ) % tabs.length;\r\n\r\n activateTab(tabs[nextIndex]);\r\n }\r\n\r\n return (\r\n <div\r\n ref={listRef}\r\n className={cx(\r\n \"mb-tabs__list\",\r\n grow\r\n ? \"mb-tabs__list--grow\"\r\n : undefined,\r\n className,\r\n )}\r\n role=\"tablist\"\r\n aria-orientation={orientation}\r\n onKeyDown={handleKeyDown}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\n/* ==========================================================\r\n Tabs Tab\r\n========================================================== */\r\n\r\nexport interface TabsTabProps\r\n extends ButtonHTMLAttributes<HTMLButtonElement> {\r\n value: string;\r\n\r\n leftSection?: ReactNode;\r\n rightSection?: ReactNode;\r\n}\r\n\r\nexport function TabsTab({\r\n value,\r\n\r\n leftSection,\r\n rightSection,\r\n\r\n disabled = false,\r\n\r\n className = \"\",\r\n children,\r\n\r\n onClick,\r\n\r\n ...props\r\n}: TabsTabProps) {\r\n const {\r\n value: currentValue,\r\n setValue,\r\n size,\r\n id,\r\n } = useTabsContext();\r\n\r\n const selected =\r\n currentValue === value;\r\n\r\n const iconSize = {\r\n sm: 14,\r\n md: 16,\r\n lg: 18,\r\n }[size];\r\n\r\n const tabId =\r\n `${id}-tab-${value}`;\r\n\r\n const panelId =\r\n `${id}-panel-${value}`;\r\n\r\n return (\r\n <button\r\n type=\"button\"\r\n id={tabId}\r\n className={cx(\r\n \"mb-tabs__tab\",\r\n selected\r\n ? \"mb-tabs__tab--active\"\r\n : undefined,\r\n className,\r\n )}\r\n role=\"tab\"\r\n data-value={value}\r\n aria-selected={selected}\r\n aria-controls={panelId}\r\n disabled={disabled}\r\n tabIndex={selected ? 0 : -1}\r\n onClick={(event) => {\r\n onClick?.(event);\r\n\r\n if (\r\n event.defaultPrevented ||\r\n disabled\r\n ) {\r\n return;\r\n }\r\n\r\n setValue(value);\r\n }}\r\n {...props}\r\n >\r\n {leftSection != null ? (\r\n <span className=\"mb-tabs__section\">\r\n <Icon size={iconSize}>\r\n {leftSection}\r\n </Icon>\r\n </span>\r\n ) : null}\r\n\r\n <span className=\"mb-tabs__label\">\r\n {children}\r\n </span>\r\n\r\n {rightSection != null ? (\r\n <span className=\"mb-tabs__section\">\r\n <Icon size={iconSize}>\r\n {rightSection}\r\n </Icon>\r\n </span>\r\n ) : null}\r\n </button>\r\n );\r\n}\r\n\r\n/* ==========================================================\r\n Tabs Panel\r\n========================================================== */\r\n\r\nexport interface TabsPanelProps\r\n extends HTMLAttributes<HTMLDivElement> {\r\n value: string;\r\n\r\n keepMounted?: boolean;\r\n}\r\n\r\nexport function TabsPanel({\r\n value,\r\n keepMounted = false,\r\n\r\n className = \"\",\r\n children,\r\n\r\n ...props\r\n}: TabsPanelProps) {\r\n const {\r\n value: currentValue,\r\n id,\r\n } = useTabsContext();\r\n\r\n const active =\r\n currentValue === value;\r\n\r\n if (!active && !keepMounted) {\r\n return null;\r\n }\r\n\r\n return (\r\n <div\r\n id={`${id}-panel-${value}`}\r\n className={cx(\r\n \"mb-tabs__panel\",\r\n active\r\n ? \"mb-tabs__panel--active\"\r\n : undefined,\r\n className,\r\n )}\r\n role=\"tabpanel\"\r\n aria-labelledby={\r\n `${id}-tab-${value}`\r\n }\r\n hidden={!active}\r\n tabIndex={0}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\n/* ==========================================================\r\n Compound API\r\n========================================================== */\r\n\r\nTabs.List = TabsList;\r\nTabs.Tab = TabsTab;\r\nTabs.Panel = TabsPanel;","import {\r\n cloneElement,\r\n isValidElement,\r\n useCallback,\r\n useEffect,\r\n useId,\r\n useRef,\r\n useState,\r\n type FocusEvent,\r\n type MouseEvent,\r\n type MutableRefObject,\r\n type ReactElement,\r\n type ReactNode,\r\n type Ref,\r\n} from \"react\";\r\n\r\nimport { cx } from \"../../utils\";\r\nimport { Portal } from \"../Portal\";\r\n\r\nimport \"./Tooltip.css\";\r\n\r\nexport type TooltipPosition =\r\n | \"top\"\r\n | \"right\"\r\n | \"bottom\"\r\n | \"left\";\r\n\r\nexport interface TooltipProps {\r\n children: ReactElement;\r\n label: ReactNode;\r\n\r\n position?: TooltipPosition;\r\n\r\n offset?: number;\r\n openDelay?: number;\r\n closeDelay?: number;\r\n\r\n disabled?: boolean;\r\n withArrow?: boolean;\r\n\r\n className?: string;\r\n}\r\n\r\ninterface TooltipCoordinates {\r\n top: number;\r\n left: number;\r\n}\r\n\r\nfunction assignRef<T>(\r\n ref: Ref<T> | undefined,\r\n value: T | null,\r\n) {\r\n if (typeof ref === \"function\") {\r\n ref(value);\r\n return;\r\n }\r\n\r\n if (ref && \"current\" in ref) {\r\n (\r\n ref as MutableRefObject<T | null>\r\n ).current = value;\r\n }\r\n}\r\n\r\nexport function Tooltip({\r\n children,\r\n label,\r\n\r\n position = \"top\",\r\n\r\n offset = 8,\r\n openDelay = 300,\r\n closeDelay = 100,\r\n\r\n disabled = false,\r\n withArrow = true,\r\n\r\n className = \"\",\r\n}: TooltipProps) {\r\n const tooltipId = useId();\r\n\r\n const triggerRef =\r\n useRef<HTMLElement | null>(null);\r\n\r\n const tooltipRef =\r\n useRef<HTMLDivElement | null>(null);\r\n\r\n const openTimerRef =\r\n useRef<ReturnType<typeof setTimeout> | null>(\r\n null,\r\n );\r\n\r\n const closeTimerRef =\r\n useRef<ReturnType<typeof setTimeout> | null>(\r\n null,\r\n );\r\n\r\n const [opened, setOpened] =\r\n useState(false);\r\n\r\n const [positioned, setPositioned] =\r\n useState(false);\r\n\r\n const [coordinates, setCoordinates] =\r\n useState<TooltipCoordinates>({\r\n top: 0,\r\n left: 0,\r\n });\r\n\r\n const clearTimers = useCallback(() => {\r\n if (openTimerRef.current) {\r\n clearTimeout(openTimerRef.current);\r\n openTimerRef.current = null;\r\n }\r\n\r\n if (closeTimerRef.current) {\r\n clearTimeout(closeTimerRef.current);\r\n closeTimerRef.current = null;\r\n }\r\n }, []);\r\n\r\n const openTooltip = useCallback(() => {\r\n if (disabled) {\r\n return;\r\n }\r\n\r\n clearTimers();\r\n\r\n openTimerRef.current = setTimeout(() => {\r\n setPositioned(false);\r\n setOpened(true);\r\n }, openDelay);\r\n }, [\r\n clearTimers,\r\n disabled,\r\n openDelay,\r\n ]);\r\n\r\n const closeTooltip = useCallback(() => {\r\n clearTimers();\r\n\r\n closeTimerRef.current = setTimeout(() => {\r\n setOpened(false);\r\n setPositioned(false);\r\n }, closeDelay);\r\n }, [\r\n clearTimers,\r\n closeDelay,\r\n ]);\r\n\r\n const updatePosition = useCallback(() => {\r\n const trigger =\r\n triggerRef.current;\r\n\r\n const tooltip =\r\n tooltipRef.current;\r\n\r\n if (!trigger || !tooltip) {\r\n return;\r\n }\r\n\r\n const triggerRect =\r\n trigger.getBoundingClientRect();\r\n\r\n const tooltipRect =\r\n tooltip.getBoundingClientRect();\r\n\r\n let top = 0;\r\n let left = 0;\r\n\r\n switch (position) {\r\n case \"top\": {\r\n top =\r\n triggerRect.top -\r\n tooltipRect.height -\r\n offset;\r\n\r\n left =\r\n triggerRect.left +\r\n triggerRect.width / 2 -\r\n tooltipRect.width / 2;\r\n\r\n break;\r\n }\r\n\r\n case \"bottom\": {\r\n top =\r\n triggerRect.bottom +\r\n offset;\r\n\r\n left =\r\n triggerRect.left +\r\n triggerRect.width / 2 -\r\n tooltipRect.width / 2;\r\n\r\n break;\r\n }\r\n\r\n case \"left\": {\r\n top =\r\n triggerRect.top +\r\n triggerRect.height / 2 -\r\n tooltipRect.height / 2;\r\n\r\n left =\r\n triggerRect.left -\r\n tooltipRect.width -\r\n offset;\r\n\r\n break;\r\n }\r\n\r\n case \"right\": {\r\n top =\r\n triggerRect.top +\r\n triggerRect.height / 2 -\r\n tooltipRect.height / 2;\r\n\r\n left =\r\n triggerRect.right +\r\n offset;\r\n\r\n break;\r\n }\r\n }\r\n\r\n const viewportPadding = 8;\r\n\r\n left = Math.max(\r\n viewportPadding,\r\n Math.min(\r\n left,\r\n window.innerWidth -\r\n tooltipRect.width -\r\n viewportPadding,\r\n ),\r\n );\r\n\r\n top = Math.max(\r\n viewportPadding,\r\n Math.min(\r\n top,\r\n window.innerHeight -\r\n tooltipRect.height -\r\n viewportPadding,\r\n ),\r\n );\r\n\r\n setCoordinates({\r\n top,\r\n left,\r\n });\r\n\r\n setPositioned(true);\r\n }, [\r\n position,\r\n offset,\r\n ]);\r\n\r\n const setTooltipRef = useCallback(\r\n (\r\n element: HTMLDivElement | null,\r\n ) => {\r\n tooltipRef.current =\r\n element;\r\n\r\n if (element) {\r\n requestAnimationFrame(() => {\r\n updatePosition();\r\n });\r\n }\r\n },\r\n [updatePosition],\r\n );\r\n\r\n useEffect(() => {\r\n if (!opened) {\r\n return;\r\n }\r\n\r\n requestAnimationFrame(() => {\r\n updatePosition();\r\n });\r\n\r\n window.addEventListener(\r\n \"resize\",\r\n updatePosition,\r\n );\r\n\r\n window.addEventListener(\r\n \"scroll\",\r\n updatePosition,\r\n true,\r\n );\r\n\r\n return () => {\r\n window.removeEventListener(\r\n \"resize\",\r\n updatePosition,\r\n );\r\n\r\n window.removeEventListener(\r\n \"scroll\",\r\n updatePosition,\r\n true,\r\n );\r\n };\r\n }, [\r\n opened,\r\n updatePosition,\r\n ]);\r\n\r\n useEffect(() => {\r\n function handleKeyDown(\r\n event: KeyboardEvent,\r\n ) {\r\n if (\r\n event.key === \"Escape\" &&\r\n opened\r\n ) {\r\n setOpened(false);\r\n setPositioned(false);\r\n }\r\n }\r\n\r\n document.addEventListener(\r\n \"keydown\",\r\n handleKeyDown,\r\n );\r\n\r\n return () => {\r\n document.removeEventListener(\r\n \"keydown\",\r\n handleKeyDown,\r\n );\r\n\r\n clearTimers();\r\n };\r\n }, [\r\n opened,\r\n clearTimers,\r\n ]);\r\n\r\n if (!isValidElement(children)) {\r\n return null;\r\n }\r\n\r\n const child =\r\n children as ReactElement<{\r\n ref?: Ref<HTMLElement>;\r\n\r\n onMouseEnter?: (\r\n event: MouseEvent<HTMLElement>,\r\n ) => void;\r\n\r\n onMouseLeave?: (\r\n event: MouseEvent<HTMLElement>,\r\n ) => void;\r\n\r\n onFocus?: (\r\n event: FocusEvent<HTMLElement>,\r\n ) => void;\r\n\r\n onBlur?: (\r\n event: FocusEvent<HTMLElement>,\r\n ) => void;\r\n\r\n \"aria-describedby\"?: string;\r\n }>;\r\n\r\n const mergedChild = cloneElement(child, {\r\n ref: (\r\n node: HTMLElement | null,\r\n ) => {\r\n triggerRef.current = node;\r\n\r\n assignRef(\r\n child.props.ref,\r\n node,\r\n );\r\n },\r\n\r\n onMouseEnter: (event) => {\r\n child.props.onMouseEnter?.(event);\r\n openTooltip();\r\n },\r\n\r\n onMouseLeave: (event) => {\r\n child.props.onMouseLeave?.(event);\r\n closeTooltip();\r\n },\r\n\r\n onFocus: (event) => {\r\n child.props.onFocus?.(event);\r\n openTooltip();\r\n },\r\n\r\n onBlur: (event) => {\r\n child.props.onBlur?.(event);\r\n closeTooltip();\r\n },\r\n\r\n \"aria-describedby\":\r\n opened\r\n ? tooltipId\r\n : child.props[\r\n \"aria-describedby\"\r\n ],\r\n });\r\n\r\n return (\r\n <>\r\n {mergedChild}\r\n\r\n {opened ? (\r\n <Portal>\r\n <div\r\n ref={setTooltipRef}\r\n id={tooltipId}\r\n role=\"tooltip\"\r\n className={cx(\r\n \"mb-tooltip\",\r\n `mb-tooltip--${position}`,\r\n withArrow\r\n ? \"mb-tooltip--with-arrow\"\r\n : undefined,\r\n className,\r\n )}\r\n style={{\r\n top: coordinates.top,\r\n left: coordinates.left,\r\n\r\n visibility:\r\n positioned\r\n ? \"visible\"\r\n : \"hidden\",\r\n }}\r\n onMouseEnter={() => {\r\n clearTimers();\r\n }}\r\n onMouseLeave={closeTooltip}\r\n >\r\n <span className=\"mb-tooltip__label\">\r\n {label}\r\n </span>\r\n\r\n {withArrow ? (\r\n <span\r\n className=\"mb-tooltip__arrow\"\r\n aria-hidden=\"true\"\r\n />\r\n ) : null}\r\n </div>\r\n </Portal>\r\n ) : null}\r\n </>\r\n );\r\n}","import {\r\n createContext,\r\n useContext,\r\n useId,\r\n useMemo,\r\n useRef,\r\n type ButtonHTMLAttributes,\r\n type HTMLAttributes,\r\n type KeyboardEvent,\r\n type ReactNode,\r\n} from \"react\";\r\n\r\nimport {\r\n useControllableState,\r\n} from \"../../hooks\";\r\n\r\nimport {\r\n useComponentDefaults,\r\n} from \"../../provider\";\r\n\r\nimport {\r\n cx,\r\n} from \"../../utils\";\r\n\r\nimport {\r\n Icon,\r\n} from \"../Icon\";\r\n\r\nimport \"./Accordion.css\";\r\n\r\nexport type AccordionType =\r\n | \"single\"\r\n | \"multiple\";\r\n\r\nexport type AccordionVariant =\r\n | \"default\"\r\n | \"separated\";\r\n\r\nexport type AccordionSize =\r\n | \"sm\"\r\n | \"md\"\r\n | \"lg\";\r\n\r\nexport type AccordionChevronPosition =\r\n | \"left\"\r\n | \"right\";\r\n\r\nexport type AccordionValue =\r\n | string\r\n | string[]\r\n | null;\r\n\r\ninterface AccordionContextValue {\r\n type: AccordionType;\r\n value: AccordionValue;\r\n\r\n toggleItem: (\r\n itemValue: string,\r\n ) => void;\r\n\r\n variant: AccordionVariant;\r\n size: AccordionSize;\r\n\r\n chevronPosition:\r\n AccordionChevronPosition;\r\n\r\n rootId: string;\r\n\r\n rootRef:\r\n React.RefObject<HTMLDivElement | null>;\r\n}\r\n\r\ninterface AccordionItemContextValue {\r\n value: string;\r\n opened: boolean;\r\n disabled: boolean;\r\n\r\n controlId: string;\r\n panelId: string;\r\n}\r\n\r\nconst AccordionContext =\r\n createContext<AccordionContextValue | null>(\r\n null,\r\n );\r\n\r\nconst AccordionItemContext =\r\n createContext<AccordionItemContextValue | null>(\r\n null,\r\n );\r\n\r\nfunction useAccordionContext() {\r\n const context =\r\n useContext(AccordionContext);\r\n\r\n if (!context) {\r\n throw new Error(\r\n \"Accordion-компоненты должны использоваться внутри <Accordion>\",\r\n );\r\n }\r\n\r\n return context;\r\n}\r\n\r\nfunction useAccordionItemContext() {\r\n const context =\r\n useContext(AccordionItemContext);\r\n\r\n if (!context) {\r\n throw new Error(\r\n \"Accordion.Control и Accordion.Panel должны использоваться внутри <Accordion.Item>\",\r\n );\r\n }\r\n\r\n return context;\r\n}\r\n\r\nfunction normalizeValue(\r\n type: AccordionType,\r\n value: AccordionValue,\r\n): AccordionValue {\r\n if (type === \"multiple\") {\r\n if (Array.isArray(value)) {\r\n return value;\r\n }\r\n\r\n return value == null\r\n ? []\r\n : [value];\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n return value[0] ?? null;\r\n }\r\n\r\n return value ?? null;\r\n}\r\n\r\n/* ==========================================================\r\n Accordion Root\r\n========================================================== */\r\n\r\nexport interface AccordionProps\r\n extends Omit<\r\n HTMLAttributes<HTMLDivElement>,\r\n \"defaultValue\" | \"onChange\"\r\n > {\r\n type?: AccordionType;\r\n\r\n value?: AccordionValue;\r\n defaultValue?: AccordionValue;\r\n\r\n onChange?: (\r\n value: AccordionValue,\r\n ) => void;\r\n\r\n variant?: AccordionVariant;\r\n size?: AccordionSize;\r\n\r\n chevronPosition?:\r\n AccordionChevronPosition;\r\n\r\n allowCollapse?: boolean;\r\n}\r\n\r\nfunction AccordionRoot({\r\n type = \"single\",\r\n\r\n value,\r\n defaultValue,\r\n\r\n onChange,\r\n\r\n variant,\r\n size,\r\n\r\n chevronPosition = \"right\",\r\n allowCollapse = true,\r\n\r\n className = \"\",\r\n children,\r\n\r\n ...props\r\n}: AccordionProps) {\r\n const defaults =\r\n useComponentDefaults(\"Accordion\");\r\n\r\n const resolvedVariant =\r\n variant ??\r\n defaults.variant ??\r\n \"default\";\r\n\r\n const resolvedSize =\r\n size ??\r\n defaults.size ??\r\n \"md\";\r\n\r\n const initialValue =\r\n normalizeValue(\r\n type,\r\n defaultValue ??\r\n (type === \"multiple\"\r\n ? []\r\n : null),\r\n );\r\n\r\n const [\r\n currentValue,\r\n setCurrentValue,\r\n ] = useControllableState<AccordionValue>({\r\n value:\r\n value === undefined\r\n ? undefined\r\n : normalizeValue(type, value),\r\n\r\n defaultValue: initialValue,\r\n\r\n onChange,\r\n });\r\n\r\n const rootId = useId();\r\n\r\n const rootRef =\r\n useRef<HTMLDivElement>(null);\r\n\r\n function toggleItem(\r\n itemValue: string,\r\n ) {\r\n if (type === \"multiple\") {\r\n const currentItems =\r\n Array.isArray(currentValue)\r\n ? currentValue\r\n : [];\r\n\r\n const itemOpened =\r\n currentItems.includes(itemValue);\r\n\r\n const nextValue = itemOpened\r\n ? currentItems.filter(\r\n (valueItem) =>\r\n valueItem !== itemValue,\r\n )\r\n : [\r\n ...currentItems,\r\n itemValue,\r\n ];\r\n\r\n setCurrentValue(nextValue);\r\n\r\n return;\r\n }\r\n\r\n const itemOpened =\r\n currentValue === itemValue;\r\n\r\n if (\r\n itemOpened &&\r\n !allowCollapse\r\n ) {\r\n return;\r\n }\r\n\r\n setCurrentValue(\r\n itemOpened\r\n ? null\r\n : itemValue,\r\n );\r\n }\r\n\r\n const contextValue =\r\n useMemo<AccordionContextValue>(\r\n () => ({\r\n type,\r\n value: currentValue,\r\n\r\n toggleItem,\r\n\r\n variant: resolvedVariant,\r\n size: resolvedSize,\r\n\r\n chevronPosition,\r\n\r\n rootId,\r\n rootRef,\r\n }),\r\n [\r\n type,\r\n currentValue,\r\n resolvedVariant,\r\n resolvedSize,\r\n chevronPosition,\r\n rootId,\r\n ],\r\n );\r\n\r\n return (\r\n <AccordionContext.Provider\r\n value={contextValue}\r\n >\r\n <div\r\n ref={rootRef}\r\n className={cx(\r\n \"mb-accordion\",\r\n `mb-accordion--${resolvedVariant}`,\r\n `mb-accordion--${resolvedSize}`,\r\n `mb-accordion--chevron-${chevronPosition}`,\r\n className,\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n </AccordionContext.Provider>\r\n );\r\n}\r\n\r\n/* ==========================================================\r\n Accordion Item\r\n========================================================== */\r\n\r\nexport interface AccordionItemProps\r\n extends HTMLAttributes<HTMLDivElement> {\r\n value: string;\r\n disabled?: boolean;\r\n}\r\n\r\nfunction AccordionItem({\r\n value,\r\n disabled = false,\r\n\r\n className = \"\",\r\n children,\r\n\r\n ...props\r\n}: AccordionItemProps) {\r\n const accordion =\r\n useAccordionContext();\r\n\r\n const opened =\r\n accordion.type === \"multiple\"\r\n ? Array.isArray(\r\n accordion.value,\r\n ) &&\r\n accordion.value.includes(value)\r\n : accordion.value === value;\r\n\r\n const safeValue =\r\n value.replace(\r\n /[^a-zA-Z0-9_-]/g,\r\n \"-\",\r\n );\r\n\r\n const controlId =\r\n `${accordion.rootId}-control-${safeValue}`;\r\n\r\n const panelId =\r\n `${accordion.rootId}-panel-${safeValue}`;\r\n\r\n const contextValue =\r\n useMemo<AccordionItemContextValue>(\r\n () => ({\r\n value,\r\n opened,\r\n disabled,\r\n\r\n controlId,\r\n panelId,\r\n }),\r\n [\r\n value,\r\n opened,\r\n disabled,\r\n controlId,\r\n panelId,\r\n ],\r\n );\r\n\r\n return (\r\n <AccordionItemContext.Provider\r\n value={contextValue}\r\n >\r\n <div\r\n className={cx(\r\n \"mb-accordion__item\",\r\n opened\r\n ? \"mb-accordion__item--opened\"\r\n : undefined,\r\n disabled\r\n ? \"mb-accordion__item--disabled\"\r\n : undefined,\r\n className,\r\n )}\r\n data-value={value}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n </AccordionItemContext.Provider>\r\n );\r\n}\r\n\r\n/* ==========================================================\r\n Accordion Control\r\n========================================================== */\r\n\r\nexport interface AccordionControlProps\r\n extends ButtonHTMLAttributes<HTMLButtonElement> {\r\n leftSection?: ReactNode;\r\n rightSection?: ReactNode;\r\n\r\n chevron?: ReactNode;\r\n}\r\n\r\nfunction AccordionControl({\r\n leftSection,\r\n rightSection,\r\n\r\n chevron,\r\n\r\n className = \"\",\r\n children,\r\n\r\n onClick,\r\n onKeyDown,\r\n\r\n ...props\r\n}: AccordionControlProps) {\r\n const accordion =\r\n useAccordionContext();\r\n\r\n const item =\r\n useAccordionItemContext();\r\n\r\n const iconSize = {\r\n sm: 16,\r\n md: 18,\r\n lg: 20,\r\n }[accordion.size];\r\n\r\n function getControls() {\r\n const root =\r\n accordion.rootRef.current;\r\n\r\n if (!root) {\r\n return [];\r\n }\r\n\r\n return Array.from(\r\n root.querySelectorAll<HTMLButtonElement>(\r\n \".mb-accordion__control:not(:disabled)\",\r\n ),\r\n );\r\n }\r\n\r\n function handleKeyboard(\r\n event: KeyboardEvent<HTMLButtonElement>,\r\n ) {\r\n onKeyDown?.(event);\r\n\r\n if (event.defaultPrevented) {\r\n return;\r\n }\r\n\r\n const validKeys = [\r\n \"ArrowDown\",\r\n \"ArrowUp\",\r\n \"Home\",\r\n \"End\",\r\n ];\r\n\r\n if (\r\n !validKeys.includes(event.key)\r\n ) {\r\n return;\r\n }\r\n\r\n const controls =\r\n getControls();\r\n\r\n if (controls.length === 0) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n\r\n const currentIndex =\r\n controls.indexOf(\r\n event.currentTarget,\r\n );\r\n\r\n if (event.key === \"Home\") {\r\n controls[0]?.focus();\r\n\r\n return;\r\n }\r\n\r\n if (event.key === \"End\") {\r\n controls[\r\n controls.length - 1\r\n ]?.focus();\r\n\r\n return;\r\n }\r\n\r\n const direction =\r\n event.key === \"ArrowDown\"\r\n ? 1\r\n : -1;\r\n\r\n const nextIndex =\r\n (\r\n currentIndex +\r\n direction +\r\n controls.length\r\n ) % controls.length;\r\n\r\n controls[nextIndex]?.focus();\r\n }\r\n\r\n const chevronNode =\r\n chevron ?? (\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n >\r\n <path\r\n d=\"M7 10L12 15L17 10\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n\r\n const renderedChevron = (\r\n <span\r\n className=\"mb-accordion__chevron\"\r\n aria-hidden=\"true\"\r\n >\r\n <Icon size={iconSize}>\r\n {chevronNode}\r\n </Icon>\r\n </span>\r\n );\r\n\r\n return (\r\n <button\r\n type=\"button\"\r\n id={item.controlId}\r\n className={cx(\r\n \"mb-accordion__control\",\r\n className,\r\n )}\r\n aria-expanded={item.opened}\r\n aria-controls={item.panelId}\r\n disabled={item.disabled}\r\n onClick={(event) => {\r\n onClick?.(event);\r\n\r\n if (\r\n event.defaultPrevented ||\r\n item.disabled\r\n ) {\r\n return;\r\n }\r\n\r\n accordion.toggleItem(\r\n item.value,\r\n );\r\n }}\r\n onKeyDown={handleKeyboard}\r\n {...props}\r\n >\r\n {accordion.chevronPosition ===\r\n \"left\"\r\n ? renderedChevron\r\n : null}\r\n\r\n {leftSection != null ? (\r\n <span className=\"mb-accordion__section\">\r\n <Icon size={iconSize}>\r\n {leftSection}\r\n </Icon>\r\n </span>\r\n ) : null}\r\n\r\n <span className=\"mb-accordion__label\">\r\n {children}\r\n </span>\r\n\r\n {rightSection != null ? (\r\n <span className=\"mb-accordion__section\">\r\n <Icon size={iconSize}>\r\n {rightSection}\r\n </Icon>\r\n </span>\r\n ) : null}\r\n\r\n {accordion.chevronPosition ===\r\n \"right\"\r\n ? renderedChevron\r\n : null}\r\n </button>\r\n );\r\n}\r\n\r\n/* ==========================================================\r\n Accordion Panel\r\n========================================================== */\r\n\r\nexport interface AccordionPanelProps\r\n extends HTMLAttributes<HTMLDivElement> {\r\n keepMounted?: boolean;\r\n}\r\n\r\nfunction AccordionPanel({\r\n keepMounted = true,\r\n\r\n className = \"\",\r\n children,\r\n\r\n ...props\r\n}: AccordionPanelProps) {\r\n const item =\r\n useAccordionItemContext();\r\n\r\n if (\r\n !keepMounted &&\r\n !item.opened\r\n ) {\r\n return null;\r\n }\r\n\r\n return (\r\n <div\r\n id={item.panelId}\r\n className={cx(\r\n \"mb-accordion__panel\",\r\n item.opened\r\n ? \"mb-accordion__panel--opened\"\r\n : undefined,\r\n className,\r\n )}\r\n role=\"region\"\r\n aria-labelledby={item.controlId}\r\n aria-hidden={!item.opened}\r\n {...props}\r\n >\r\n <div className=\"mb-accordion__panel-inner\">\r\n <div className=\"mb-accordion__content\">\r\n {children}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\n/* ==========================================================\r\n Compound API\r\n========================================================== */\r\n\r\nexport const Accordion =\r\n Object.assign(\r\n AccordionRoot,\r\n {\r\n Item: AccordionItem,\r\n Control: AccordionControl,\r\n Panel: AccordionPanel,\r\n },\r\n );","import {\r\n useEffect,\r\n useId,\r\n useRef,\r\n type HTMLAttributes,\r\n type ReactNode,\r\n} from \"react\";\r\n\r\nimport { useLockScroll } from \"../../hooks\";\r\nimport { useComponentDefaults } from \"../../provider\";\r\nimport { cx } from \"../../utils\";\r\n\r\nimport { Portal } from \"../Portal\";\r\n\r\nimport \"./Drawer.css\";\r\n\r\nexport type DrawerPosition =\r\n | \"left\"\r\n | \"right\"\r\n | \"top\"\r\n | \"bottom\";\r\n\r\nexport type DrawerSize =\r\n | \"sm\"\r\n | \"md\"\r\n | \"lg\"\r\n | \"full\";\r\n\r\nexport interface DrawerProps\r\n extends Omit<\r\n HTMLAttributes<HTMLDivElement>,\r\n \"title\"\r\n > {\r\n opened: boolean;\r\n onClose: () => void;\r\n\r\n title?: ReactNode;\r\n description?: ReactNode;\r\n children?: ReactNode;\r\n footer?: ReactNode;\r\n\r\n position?: DrawerPosition;\r\n size?: DrawerSize;\r\n\r\n closeOnEscape?: boolean;\r\n closeOnOverlayClick?: boolean;\r\n withCloseButton?: boolean;\r\n}\r\n\r\nconst focusableSelector = [\r\n \"button:not([disabled])\",\r\n \"[href]\",\r\n \"input:not([disabled])\",\r\n \"select:not([disabled])\",\r\n \"textarea:not([disabled])\",\r\n '[tabindex]:not([tabindex=\"-1\"])',\r\n].join(\",\");\r\n\r\nexport function Drawer({\r\n opened,\r\n onClose,\r\n\r\n title,\r\n description,\r\n children,\r\n footer,\r\n\r\n position,\r\n size,\r\n\r\n closeOnEscape,\r\n closeOnOverlayClick,\r\n withCloseButton,\r\n\r\n className = \"\",\r\n\r\n ...props\r\n}: DrawerProps) {\r\n const defaults =\r\n useComponentDefaults(\"Drawer\");\r\n\r\n const resolvedPosition =\r\n position ??\r\n defaults.position ??\r\n \"right\";\r\n\r\n const resolvedSize =\r\n size ??\r\n defaults.size ??\r\n \"md\";\r\n\r\n const resolvedCloseOnEscape =\r\n closeOnEscape ??\r\n defaults.closeOnEscape ??\r\n true;\r\n\r\n const resolvedCloseOnOverlayClick =\r\n closeOnOverlayClick ??\r\n defaults.closeOnOverlayClick ??\r\n true;\r\n\r\n const resolvedWithCloseButton =\r\n withCloseButton ??\r\n defaults.withCloseButton ??\r\n true;\r\n\r\n const titleId = useId();\r\n const descriptionId = useId();\r\n\r\n const drawerRef =\r\n useRef<HTMLDivElement>(null);\r\n\r\n const previouslyFocusedRef =\r\n useRef<HTMLElement | null>(null);\r\n\r\n useLockScroll(opened);\r\n\r\n useEffect(() => {\r\n if (!opened) {\r\n return;\r\n }\r\n\r\n previouslyFocusedRef.current =\r\n document.activeElement instanceof HTMLElement\r\n ? document.activeElement\r\n : null;\r\n\r\n requestAnimationFrame(() => {\r\n const drawer = drawerRef.current;\r\n\r\n const firstFocusable =\r\n drawer?.querySelector<HTMLElement>(\r\n focusableSelector,\r\n );\r\n\r\n if (firstFocusable) {\r\n firstFocusable.focus();\r\n } else {\r\n drawer?.focus();\r\n }\r\n });\r\n\r\n function handleKeyDown(\r\n event: KeyboardEvent,\r\n ) {\r\n const drawer = drawerRef.current;\r\n\r\n if (!drawer) {\r\n return;\r\n }\r\n\r\n if (\r\n event.key === \"Escape\" &&\r\n resolvedCloseOnEscape\r\n ) {\r\n event.preventDefault();\r\n onClose();\r\n\r\n return;\r\n }\r\n\r\n if (event.key !== \"Tab\") {\r\n return;\r\n }\r\n\r\n const focusableElements = Array.from(\r\n drawer.querySelectorAll<HTMLElement>(\r\n focusableSelector,\r\n ),\r\n );\r\n\r\n if (focusableElements.length === 0) {\r\n event.preventDefault();\r\n drawer.focus();\r\n\r\n return;\r\n }\r\n\r\n const firstElement =\r\n focusableElements[0];\r\n\r\n const lastElement =\r\n focusableElements[\r\n focusableElements.length - 1\r\n ];\r\n\r\n if (\r\n event.shiftKey &&\r\n document.activeElement === firstElement\r\n ) {\r\n event.preventDefault();\r\n lastElement.focus();\r\n\r\n return;\r\n }\r\n\r\n if (\r\n !event.shiftKey &&\r\n document.activeElement === lastElement\r\n ) {\r\n event.preventDefault();\r\n firstElement.focus();\r\n }\r\n }\r\n\r\n document.addEventListener(\r\n \"keydown\",\r\n handleKeyDown,\r\n );\r\n\r\n return () => {\r\n document.removeEventListener(\r\n \"keydown\",\r\n handleKeyDown,\r\n );\r\n\r\n requestAnimationFrame(() => {\r\n previouslyFocusedRef.current?.focus();\r\n });\r\n };\r\n }, [\r\n opened,\r\n onClose,\r\n resolvedCloseOnEscape,\r\n ]);\r\n\r\n if (!opened) {\r\n return null;\r\n }\r\n\r\n return (\r\n <Portal>\r\n <div\r\n className={cx(\r\n \"mb-drawer-root\",\r\n `mb-drawer-root--${resolvedPosition}`,\r\n )}\r\n role=\"presentation\"\r\n >\r\n <div\r\n className=\"mb-drawer__overlay\"\r\n aria-hidden=\"true\"\r\n onMouseDown={(event) => {\r\n if (\r\n resolvedCloseOnOverlayClick &&\r\n event.target === event.currentTarget\r\n ) {\r\n onClose();\r\n }\r\n }}\r\n >\r\n <div\r\n ref={drawerRef}\r\n className={cx(\r\n \"mb-drawer\",\r\n `mb-drawer--${resolvedPosition}`,\r\n `mb-drawer--${resolvedSize}`,\r\n className,\r\n )}\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n aria-labelledby={\r\n title != null\r\n ? titleId\r\n : undefined\r\n }\r\n aria-describedby={\r\n description != null\r\n ? descriptionId\r\n : undefined\r\n }\r\n tabIndex={-1}\r\n {...props}\r\n >\r\n {title != null ||\r\n description != null ||\r\n resolvedWithCloseButton ? (\r\n <div className=\"mb-drawer__header\">\r\n <div className=\"mb-drawer__heading\">\r\n {title != null ? (\r\n <div\r\n id={titleId}\r\n className=\"mb-drawer__title\"\r\n >\r\n {title}\r\n </div>\r\n ) : null}\r\n\r\n {description != null ? (\r\n <div\r\n id={descriptionId}\r\n className=\"mb-drawer__description\"\r\n >\r\n {description}\r\n </div>\r\n ) : null}\r\n </div>\r\n\r\n {resolvedWithCloseButton ? (\r\n <button\r\n type=\"button\"\r\n className=\"mb-drawer__close\"\r\n aria-label=\"Закрыть панель\"\r\n onClick={onClose}\r\n >\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n d=\"M7 7L17 17\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n />\r\n\r\n <path\r\n d=\"M17 7L7 17\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n ) : null}\r\n </div>\r\n ) : null}\r\n\r\n <div className=\"mb-drawer__content\">\r\n {children}\r\n </div>\r\n\r\n {footer != null ? (\r\n <div className=\"mb-drawer__footer\">\r\n {footer}\r\n </div>\r\n ) : null}\r\n </div>\r\n </div>\r\n </div>\r\n </Portal>\r\n );\r\n}","import {\r\n Children,\r\n cloneElement,\r\n createContext,\r\n isValidElement,\r\n useContext,\r\n useEffect,\r\n useId,\r\n useRef,\r\n useState,\r\n type ButtonHTMLAttributes,\r\n type HTMLAttributes,\r\n type KeyboardEvent,\r\n type MouseEvent,\r\n type ReactElement,\r\n type ReactNode,\r\n} from \"react\";\r\n\r\nimport {\r\n useClickOutside,\r\n useDisclosure,\r\n} from \"../../hooks\";\r\n\r\nimport {\r\n cx,\r\n} from \"../../utils\";\r\n\r\nimport {\r\n Icon,\r\n} from \"../Icon\";\r\n\r\nimport {\r\n Portal,\r\n} from \"../Portal\";\r\n\r\nimport \"./Menu.css\";\r\n\r\nexport type MenuPosition =\r\n | \"bottom-start\"\r\n | \"bottom-end\"\r\n | \"top-start\"\r\n | \"top-end\";\r\n\r\nexport type MenuWidth =\r\n | number\r\n | string;\r\n\r\ninterface MenuContextValue {\r\n opened: boolean;\r\n\r\n open: () => void;\r\n close: () => void;\r\n toggle: () => void;\r\n\r\n triggerRef:\r\n React.RefObject<HTMLElement | null>;\r\n\r\n dropdownRef:\r\n React.RefObject<HTMLDivElement | null>;\r\n\r\n menuId: string;\r\n\r\n position: MenuPosition;\r\n offset: number;\r\n width?: MenuWidth;\r\n\r\n closeOnItemClick: boolean;\r\n}\r\n\r\nconst MenuContext =\r\n createContext<MenuContextValue | null>(\r\n null,\r\n );\r\n\r\nfunction useMenuContext() {\r\n const context =\r\n useContext(MenuContext);\r\n\r\n if (!context) {\r\n throw new Error(\r\n \"Menu-компоненты должны использоваться внутри <Menu>\",\r\n );\r\n }\r\n\r\n return context;\r\n}\r\n\r\n/* ==========================================================\r\n Menu Root\r\n========================================================== */\r\n\r\nexport interface MenuProps {\r\n children: ReactNode;\r\n\r\n position?: MenuPosition;\r\n\r\n offset?: number;\r\n\r\n width?: MenuWidth;\r\n\r\n disabled?: boolean;\r\n\r\n closeOnItemClick?: boolean;\r\n}\r\n\r\nfunction MenuRoot({\r\n children,\r\n\r\n position = \"bottom-start\",\r\n\r\n offset = 8,\r\n\r\n width,\r\n\r\n disabled = false,\r\n\r\n closeOnItemClick = true,\r\n}: MenuProps) {\r\n const [\r\n opened,\r\n {\r\n open,\r\n close,\r\n toggle,\r\n },\r\n ] = useDisclosure();\r\n\r\n const menuId = useId();\r\n\r\n const triggerRef =\r\n useRef<HTMLElement | null>(null);\r\n\r\n const dropdownRef =\r\n useRef<HTMLDivElement | null>(null);\r\n\r\n const wrapperRef =\r\n useClickOutside<HTMLDivElement>(\r\n () => close(),\r\n {\r\n enabled: opened,\r\n },\r\n );\r\n\r\n useEffect(() => {\r\n function handleKeyDown(\r\n event: globalThis.KeyboardEvent,\r\n ) {\r\n if (!opened) {\r\n return;\r\n }\r\n\r\n if (event.key === \"Escape\") {\r\n event.preventDefault();\r\n\r\n close();\r\n\r\n requestAnimationFrame(() => {\r\n triggerRef.current?.focus();\r\n });\r\n }\r\n }\r\n\r\n document.addEventListener(\r\n \"keydown\",\r\n handleKeyDown,\r\n );\r\n\r\n return () => {\r\n document.removeEventListener(\r\n \"keydown\",\r\n handleKeyDown,\r\n );\r\n };\r\n }, [\r\n opened,\r\n close,\r\n ]);\r\n\r\n const contextValue: MenuContextValue = {\r\n opened,\r\n\r\n open: disabled\r\n ? () => undefined\r\n : open,\r\n\r\n close,\r\n\r\n toggle: disabled\r\n ? () => undefined\r\n : toggle,\r\n\r\n triggerRef,\r\n dropdownRef,\r\n\r\n menuId,\r\n\r\n position,\r\n offset,\r\n width,\r\n\r\n closeOnItemClick,\r\n };\r\n\r\n return (\r\n <MenuContext.Provider\r\n value={contextValue}\r\n >\r\n <div\r\n ref={wrapperRef}\r\n className=\"mb-menu-root\"\r\n >\r\n {children}\r\n </div>\r\n </MenuContext.Provider>\r\n );\r\n}\r\n\r\n/* ==========================================================\r\n Menu Target\r\n========================================================== */\r\n\r\nexport interface MenuTargetProps {\r\n children: ReactElement;\r\n}\r\n\r\nfunction MenuTarget({\r\n children,\r\n}: MenuTargetProps) {\r\n const menu =\r\n useMenuContext();\r\n\r\n if (!isValidElement(children)) {\r\n return null;\r\n }\r\n\r\n const child =\r\n children as ReactElement<{\r\n ref?: React.Ref<HTMLElement>;\r\n\r\n onClick?: (\r\n event: MouseEvent<HTMLElement>,\r\n ) => void;\r\n\r\n onKeyDown?: (\r\n event: KeyboardEvent<HTMLElement>,\r\n ) => void;\r\n\r\n \"aria-haspopup\"?: string;\r\n \"aria-expanded\"?: boolean;\r\n \"aria-controls\"?: string;\r\n }>;\r\n\r\n return cloneElement(child, {\r\n ref: (\r\n element: HTMLElement | null,\r\n ) => {\r\n menu.triggerRef.current =\r\n element;\r\n\r\n const originalRef =\r\n child.props.ref;\r\n\r\n if (\r\n typeof originalRef ===\r\n \"function\"\r\n ) {\r\n originalRef(element);\r\n } else if (\r\n originalRef &&\r\n \"current\" in originalRef\r\n ) {\r\n (\r\n originalRef as React.MutableRefObject<\r\n HTMLElement | null\r\n >\r\n ).current = element;\r\n }\r\n },\r\n\r\n onClick: (event) => {\r\n child.props.onClick?.(event);\r\n\r\n if (\r\n event.defaultPrevented\r\n ) {\r\n return;\r\n }\r\n\r\n menu.toggle();\r\n },\r\n\r\n onKeyDown: (event) => {\r\n child.props.onKeyDown?.(event);\r\n\r\n if (\r\n event.defaultPrevented\r\n ) {\r\n return;\r\n }\r\n\r\n if (\r\n event.key === \"Enter\" ||\r\n event.key === \" \"\r\n ) {\r\n event.preventDefault();\r\n\r\n menu.toggle();\r\n }\r\n\r\n if (\r\n event.key === \"ArrowDown\"\r\n ) {\r\n event.preventDefault();\r\n\r\n menu.open();\r\n\r\n requestAnimationFrame(() => {\r\n const firstItem =\r\n menu.dropdownRef.current\r\n ?.querySelector<HTMLButtonElement>(\r\n \".mb-menu__item:not(:disabled)\",\r\n );\r\n\r\n firstItem?.focus();\r\n });\r\n }\r\n },\r\n\r\n \"aria-haspopup\": \"menu\",\r\n \"aria-expanded\": menu.opened,\r\n \"aria-controls\": menu.menuId,\r\n });\r\n}\r\n\r\n/* ==========================================================\r\n Menu Dropdown\r\n========================================================== */\r\n\r\nexport interface MenuDropdownProps\r\n extends HTMLAttributes<HTMLDivElement> {\r\n children: ReactNode;\r\n}\r\n\r\ninterface MenuCoordinates {\r\n top: number;\r\n left: number;\r\n}\r\n\r\nfunction MenuDropdown({\r\n children,\r\n className = \"\",\r\n style,\r\n ...props\r\n}: MenuDropdownProps) {\r\n const menu =\r\n useMenuContext();\r\n\r\n const [\r\n coordinates,\r\n setCoordinates,\r\n ] = useState<MenuCoordinates>({\r\n top: 0,\r\n left: 0,\r\n });\r\n\r\n function updatePosition() {\r\n const trigger =\r\n menu.triggerRef.current;\r\n\r\n const dropdown =\r\n menu.dropdownRef.current;\r\n\r\n if (!trigger || !dropdown) {\r\n return;\r\n }\r\n\r\n const triggerRect =\r\n trigger.getBoundingClientRect();\r\n\r\n const dropdownRect =\r\n dropdown.getBoundingClientRect();\r\n\r\n let top = 0;\r\n let left = 0;\r\n\r\n if (\r\n menu.position ===\r\n \"bottom-start\"\r\n ) {\r\n top =\r\n triggerRect.bottom +\r\n menu.offset;\r\n\r\n left =\r\n triggerRect.left;\r\n }\r\n\r\n if (\r\n menu.position ===\r\n \"bottom-end\"\r\n ) {\r\n top =\r\n triggerRect.bottom +\r\n menu.offset;\r\n\r\n left =\r\n triggerRect.right -\r\n dropdownRect.width;\r\n }\r\n\r\n if (\r\n menu.position ===\r\n \"top-start\"\r\n ) {\r\n top =\r\n triggerRect.top -\r\n dropdownRect.height -\r\n menu.offset;\r\n\r\n left =\r\n triggerRect.left;\r\n }\r\n\r\n if (\r\n menu.position ===\r\n \"top-end\"\r\n ) {\r\n top =\r\n triggerRect.top -\r\n dropdownRect.height -\r\n menu.offset;\r\n\r\n left =\r\n triggerRect.right -\r\n dropdownRect.width;\r\n }\r\n\r\n const viewportPadding = 8;\r\n\r\n left = Math.max(\r\n viewportPadding,\r\n Math.min(\r\n left,\r\n window.innerWidth -\r\n dropdownRect.width -\r\n viewportPadding,\r\n ),\r\n );\r\n\r\n top = Math.max(\r\n viewportPadding,\r\n Math.min(\r\n top,\r\n window.innerHeight -\r\n dropdownRect.height -\r\n viewportPadding,\r\n ),\r\n );\r\n\r\n setCoordinates({\r\n top,\r\n left,\r\n });\r\n }\r\n\r\n useEffect(() => {\r\n if (!menu.opened) {\r\n return;\r\n }\r\n\r\n requestAnimationFrame(\r\n updatePosition,\r\n );\r\n\r\n window.addEventListener(\r\n \"resize\",\r\n updatePosition,\r\n );\r\n\r\n window.addEventListener(\r\n \"scroll\",\r\n updatePosition,\r\n true,\r\n );\r\n\r\n return () => {\r\n window.removeEventListener(\r\n \"resize\",\r\n updatePosition,\r\n );\r\n\r\n window.removeEventListener(\r\n \"scroll\",\r\n updatePosition,\r\n true,\r\n );\r\n };\r\n }, [\r\n menu.opened,\r\n menu.position,\r\n menu.offset,\r\n ]);\r\n\r\n function handleKeyDown(\r\n event: KeyboardEvent<HTMLDivElement>,\r\n ) {\r\n const dropdown =\r\n menu.dropdownRef.current;\r\n\r\n if (!dropdown) {\r\n return;\r\n }\r\n\r\n const items = Array.from(\r\n dropdown.querySelectorAll<\r\n HTMLButtonElement\r\n >(\r\n \".mb-menu__item:not(:disabled)\",\r\n ),\r\n );\r\n\r\n if (items.length === 0) {\r\n return;\r\n }\r\n\r\n const currentIndex =\r\n items.indexOf(\r\n document.activeElement as HTMLButtonElement,\r\n );\r\n\r\n if (\r\n event.key === \"ArrowDown\"\r\n ) {\r\n event.preventDefault();\r\n\r\n const nextIndex =\r\n (\r\n currentIndex +\r\n 1 +\r\n items.length\r\n ) % items.length;\r\n\r\n items[nextIndex]?.focus();\r\n }\r\n\r\n if (\r\n event.key === \"ArrowUp\"\r\n ) {\r\n event.preventDefault();\r\n\r\n const nextIndex =\r\n (\r\n currentIndex -\r\n 1 +\r\n items.length\r\n ) % items.length;\r\n\r\n items[nextIndex]?.focus();\r\n }\r\n\r\n if (event.key === \"Home\") {\r\n event.preventDefault();\r\n\r\n items[0]?.focus();\r\n }\r\n\r\n if (event.key === \"End\") {\r\n event.preventDefault();\r\n\r\n items[\r\n items.length - 1\r\n ]?.focus();\r\n }\r\n\r\n if (event.key === \"Tab\") {\r\n menu.close();\r\n }\r\n }\r\n\r\n if (!menu.opened) {\r\n return null;\r\n }\r\n\r\n const resolvedWidth =\r\n typeof menu.width === \"number\"\r\n ? `${menu.width}px`\r\n : menu.width;\r\n\r\n return (\r\n <Portal>\r\n <div\r\n ref={menu.dropdownRef}\r\n id={menu.menuId}\r\n className={cx(\r\n \"mb-menu\",\r\n `mb-menu--${menu.position}`,\r\n className,\r\n )}\r\n role=\"menu\"\r\n tabIndex={-1}\r\n style={{\r\n top: coordinates.top,\r\n left: coordinates.left,\r\n width: resolvedWidth,\r\n ...style,\r\n }}\r\n onKeyDown={handleKeyDown}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n </Portal>\r\n );\r\n}\r\n\r\n/* ==========================================================\r\n Menu Item\r\n========================================================== */\r\n\r\nexport interface MenuItemProps\r\n extends ButtonHTMLAttributes<HTMLButtonElement> {\r\n leftSection?: ReactNode;\r\n rightSection?: ReactNode;\r\n\r\n color?: \"default\" | \"danger\";\r\n\r\n closeMenuOnClick?: boolean;\r\n}\r\n\r\nfunction MenuItem({\r\n leftSection,\r\n rightSection,\r\n\r\n color = \"default\",\r\n\r\n closeMenuOnClick,\r\n\r\n disabled = false,\r\n\r\n className = \"\",\r\n children,\r\n\r\n onClick,\r\n\r\n ...props\r\n}: MenuItemProps) {\r\n const menu =\r\n useMenuContext();\r\n\r\n return (\r\n <button\r\n type=\"button\"\r\n className={cx(\r\n \"mb-menu__item\",\r\n `mb-menu__item--${color}`,\r\n className,\r\n )}\r\n role=\"menuitem\"\r\n disabled={disabled}\r\n tabIndex={-1}\r\n onClick={(event) => {\r\n onClick?.(event);\r\n\r\n if (\r\n event.defaultPrevented ||\r\n disabled\r\n ) {\r\n return;\r\n }\r\n\r\n const shouldClose =\r\n closeMenuOnClick ??\r\n menu.closeOnItemClick;\r\n\r\n if (shouldClose) {\r\n menu.close();\r\n\r\n requestAnimationFrame(() => {\r\n menu.triggerRef.current?.focus();\r\n });\r\n }\r\n }}\r\n {...props}\r\n >\r\n {leftSection != null ? (\r\n <span className=\"mb-menu__section\">\r\n <Icon size={18}>\r\n {leftSection}\r\n </Icon>\r\n </span>\r\n ) : null}\r\n\r\n <span className=\"mb-menu__label\">\r\n {children}\r\n </span>\r\n\r\n {rightSection != null ? (\r\n <span className=\"mb-menu__section\">\r\n {rightSection}\r\n </span>\r\n ) : null}\r\n </button>\r\n );\r\n}\r\n\r\n/* ==========================================================\r\n Menu Label\r\n========================================================== */\r\n\r\nexport interface MenuLabelProps\r\n extends HTMLAttributes<HTMLDivElement> {}\r\n\r\nfunction MenuLabel({\r\n className = \"\",\r\n children,\r\n ...props\r\n}: MenuLabelProps) {\r\n return (\r\n <div\r\n className={cx(\r\n \"mb-menu__group-label\",\r\n className,\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\n/* ==========================================================\r\n Menu Divider\r\n========================================================== */\r\n\r\nexport interface MenuDividerProps\r\n extends HTMLAttributes<HTMLDivElement> {}\r\n\r\nfunction MenuDivider({\r\n className = \"\",\r\n ...props\r\n}: MenuDividerProps) {\r\n return (\r\n <div\r\n className={cx(\r\n \"mb-menu__divider\",\r\n className,\r\n )}\r\n role=\"separator\"\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\n/* ==========================================================\r\n Compound API\r\n========================================================== */\r\n\r\nexport const Menu =\r\n Object.assign(\r\n MenuRoot,\r\n {\r\n Target: MenuTarget,\r\n Dropdown: MenuDropdown,\r\n Item: MenuItem,\r\n Label: MenuLabel,\r\n Divider: MenuDivider,\r\n },\r\n );","import {\r\n cloneElement,\r\n createContext,\r\n isValidElement,\r\n useCallback,\r\n useContext,\r\n useEffect,\r\n useId,\r\n useMemo,\r\n useRef,\r\n useState,\r\n type CSSProperties,\r\n type HTMLAttributes,\r\n type KeyboardEvent,\r\n type MouseEvent,\r\n type MutableRefObject,\r\n type ReactElement,\r\n type ReactNode,\r\n type Ref,\r\n} from \"react\";\r\n\r\nimport {\r\n useControllableState,\r\n} from \"../../hooks\";\r\n\r\nimport { cx } from \"../../utils\";\r\n\r\nimport { Portal } from \"../Portal\";\r\n\r\nimport \"./Popover.css\";\r\n\r\nexport type PopoverPosition =\r\n | \"bottom-start\"\r\n | \"bottom-end\"\r\n | \"top-start\"\r\n | \"top-end\";\r\n\r\nexport interface PopoverContextValue {\r\n opened: boolean;\r\n\r\n open: () => void;\r\n close: () => void;\r\n toggle: () => void;\r\n\r\n position: PopoverPosition;\r\n offset: number;\r\n width?: number | string;\r\n\r\n withArrow: boolean;\r\n closeOnClickOutside: boolean;\r\n closeOnEscape: boolean;\r\n\r\n triggerRef:\r\n MutableRefObject<HTMLElement | null>;\r\n\r\n dropdownRef:\r\n MutableRefObject<HTMLDivElement | null>;\r\n\r\n popoverId: string;\r\n}\r\n\r\nconst PopoverContext =\r\n createContext<PopoverContextValue | null>(\r\n null,\r\n );\r\n\r\nfunction usePopoverContext() {\r\n const context =\r\n useContext(PopoverContext);\r\n\r\n if (!context) {\r\n throw new Error(\r\n \"Popover-компоненты должны использоваться внутри <Popover>\",\r\n );\r\n }\r\n\r\n return context;\r\n}\r\n\r\n/* ==========================================================\r\n Helpers\r\n========================================================== */\r\n\r\nfunction assignRef<T>(\r\n ref: Ref<T> | undefined,\r\n value: T | null,\r\n) {\r\n if (typeof ref === \"function\") {\r\n ref(value);\r\n return;\r\n }\r\n\r\n if (ref && \"current\" in ref) {\r\n (\r\n ref as MutableRefObject<T | null>\r\n ).current = value;\r\n }\r\n}\r\n\r\n/* ==========================================================\r\n Popover Root\r\n========================================================== */\r\n\r\nexport interface PopoverProps {\r\n children: ReactNode;\r\n\r\n opened?: boolean;\r\n defaultOpened?: boolean;\r\n\r\n onChange?: (\r\n opened: boolean,\r\n ) => void;\r\n\r\n position?: PopoverPosition;\r\n\r\n offset?: number;\r\n\r\n width?: number | string;\r\n\r\n withArrow?: boolean;\r\n\r\n closeOnClickOutside?: boolean;\r\n closeOnEscape?: boolean;\r\n}\r\n\r\nfunction PopoverRoot({\r\n children,\r\n\r\n opened,\r\n defaultOpened = false,\r\n\r\n onChange,\r\n\r\n position = \"bottom-start\",\r\n\r\n offset = 8,\r\n\r\n width,\r\n\r\n withArrow = false,\r\n\r\n closeOnClickOutside = true,\r\n closeOnEscape = true,\r\n}: PopoverProps) {\r\n const [\r\n currentOpened,\r\n setCurrentOpened,\r\n ] = useControllableState<boolean>({\r\n value: opened,\r\n defaultValue: defaultOpened,\r\n onChange,\r\n });\r\n\r\n const popoverId = useId();\r\n\r\n const triggerRef =\r\n useRef<HTMLElement | null>(null);\r\n\r\n const dropdownRef =\r\n useRef<HTMLDivElement | null>(null);\r\n\r\n const open = useCallback(() => {\r\n setCurrentOpened(true);\r\n }, [setCurrentOpened]);\r\n\r\n const close = useCallback(() => {\r\n setCurrentOpened(false);\r\n }, [setCurrentOpened]);\r\n\r\n const toggle = useCallback(() => {\r\n setCurrentOpened(\r\n (current) => !current,\r\n );\r\n }, [setCurrentOpened]);\r\n\r\n useEffect(() => {\r\n if (\r\n !currentOpened ||\r\n !closeOnEscape\r\n ) {\r\n return;\r\n }\r\n\r\n function handleKeyDown(\r\n event: globalThis.KeyboardEvent,\r\n ) {\r\n if (event.key !== \"Escape\") {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n\r\n close();\r\n\r\n requestAnimationFrame(() => {\r\n triggerRef.current?.focus();\r\n });\r\n }\r\n\r\n document.addEventListener(\r\n \"keydown\",\r\n handleKeyDown,\r\n );\r\n\r\n return () => {\r\n document.removeEventListener(\r\n \"keydown\",\r\n handleKeyDown,\r\n );\r\n };\r\n }, [\r\n currentOpened,\r\n closeOnEscape,\r\n close,\r\n ]);\r\n\r\n const contextValue =\r\n useMemo<PopoverContextValue>(\r\n () => ({\r\n opened: currentOpened,\r\n\r\n open,\r\n close,\r\n toggle,\r\n\r\n position,\r\n offset,\r\n width,\r\n\r\n withArrow,\r\n closeOnClickOutside,\r\n closeOnEscape,\r\n\r\n triggerRef,\r\n dropdownRef,\r\n\r\n popoverId,\r\n }),\r\n [\r\n currentOpened,\r\n open,\r\n close,\r\n toggle,\r\n position,\r\n offset,\r\n width,\r\n withArrow,\r\n closeOnClickOutside,\r\n closeOnEscape,\r\n popoverId,\r\n ],\r\n );\r\n\r\n return (\r\n <PopoverContext.Provider\r\n value={contextValue}\r\n >\r\n {children}\r\n </PopoverContext.Provider>\r\n );\r\n}\r\n\r\n/* ==========================================================\r\n Popover Target\r\n========================================================== */\r\n\r\nexport interface PopoverTargetProps {\r\n children: ReactElement;\r\n}\r\n\r\nfunction PopoverTarget({\r\n children,\r\n}: PopoverTargetProps) {\r\n const popover =\r\n usePopoverContext();\r\n\r\n if (!isValidElement(children)) {\r\n return null;\r\n }\r\n\r\n const child =\r\n children as ReactElement<{\r\n ref?: Ref<HTMLElement>;\r\n\r\n onClick?: (\r\n event: MouseEvent<HTMLElement>,\r\n ) => void;\r\n\r\n onKeyDown?: (\r\n event: KeyboardEvent<HTMLElement>,\r\n ) => void;\r\n\r\n \"aria-haspopup\"?: string;\r\n \"aria-expanded\"?: boolean;\r\n \"aria-controls\"?: string;\r\n }>;\r\n\r\n return cloneElement(child, {\r\n ref: (\r\n element: HTMLElement | null,\r\n ) => {\r\n popover.triggerRef.current =\r\n element;\r\n\r\n assignRef(\r\n child.props.ref,\r\n element,\r\n );\r\n },\r\n\r\n onClick: (event) => {\r\n child.props.onClick?.(event);\r\n\r\n if (event.defaultPrevented) {\r\n return;\r\n }\r\n\r\n popover.toggle();\r\n },\r\n\r\n onKeyDown: (event) => {\r\n child.props.onKeyDown?.(event);\r\n\r\n if (event.defaultPrevented) {\r\n return;\r\n }\r\n\r\n if (\r\n event.key === \"Enter\" ||\r\n event.key === \" \"\r\n ) {\r\n event.preventDefault();\r\n popover.toggle();\r\n }\r\n\r\n if (event.key === \"ArrowDown\") {\r\n event.preventDefault();\r\n popover.open();\r\n }\r\n },\r\n\r\n \"aria-haspopup\": \"dialog\",\r\n \"aria-expanded\": popover.opened,\r\n \"aria-controls\": popover.popoverId,\r\n });\r\n}\r\n\r\n/* ==========================================================\r\n Popover Dropdown\r\n========================================================== */\r\n\r\nexport interface PopoverDropdownProps\r\n extends HTMLAttributes<HTMLDivElement> {\r\n children: ReactNode;\r\n}\r\n\r\ninterface PopoverCoordinates {\r\n top: number;\r\n left: number;\r\n}\r\n\r\nfunction PopoverDropdown({\r\n children,\r\n className = \"\",\r\n style,\r\n ...props\r\n}: PopoverDropdownProps) {\r\n const popover =\r\n usePopoverContext();\r\n\r\n const [\r\n coordinates,\r\n setCoordinates,\r\n ] = useState<PopoverCoordinates>({\r\n top: 0,\r\n left: 0,\r\n });\r\n\r\n const [positioned, setPositioned] =\r\n useState(false);\r\n\r\n const updatePosition =\r\n useCallback(() => {\r\n const trigger =\r\n popover.triggerRef.current;\r\n\r\n const dropdown =\r\n popover.dropdownRef.current;\r\n\r\n if (!trigger || !dropdown) {\r\n return;\r\n }\r\n\r\n const triggerRect =\r\n trigger.getBoundingClientRect();\r\n\r\n const dropdownRect =\r\n dropdown.getBoundingClientRect();\r\n\r\n let top = 0;\r\n let left = 0;\r\n\r\n switch (popover.position) {\r\n case \"bottom-start\": {\r\n top =\r\n triggerRect.bottom +\r\n popover.offset;\r\n\r\n left =\r\n triggerRect.left;\r\n\r\n break;\r\n }\r\n\r\n case \"bottom-end\": {\r\n top =\r\n triggerRect.bottom +\r\n popover.offset;\r\n\r\n left =\r\n triggerRect.right -\r\n dropdownRect.width;\r\n\r\n break;\r\n }\r\n\r\n case \"top-start\": {\r\n top =\r\n triggerRect.top -\r\n dropdownRect.height -\r\n popover.offset;\r\n\r\n left =\r\n triggerRect.left;\r\n\r\n break;\r\n }\r\n\r\n case \"top-end\": {\r\n top =\r\n triggerRect.top -\r\n dropdownRect.height -\r\n popover.offset;\r\n\r\n left =\r\n triggerRect.right -\r\n dropdownRect.width;\r\n\r\n break;\r\n }\r\n }\r\n\r\n const viewportPadding = 8;\r\n\r\n left = Math.max(\r\n viewportPadding,\r\n Math.min(\r\n left,\r\n window.innerWidth -\r\n dropdownRect.width -\r\n viewportPadding,\r\n ),\r\n );\r\n\r\n top = Math.max(\r\n viewportPadding,\r\n Math.min(\r\n top,\r\n window.innerHeight -\r\n dropdownRect.height -\r\n viewportPadding,\r\n ),\r\n );\r\n\r\n setCoordinates({\r\n top,\r\n left,\r\n });\r\n\r\n setPositioned(true);\r\n }, [\r\n popover.position,\r\n popover.offset,\r\n popover.triggerRef,\r\n popover.dropdownRef,\r\n ]);\r\n\r\n const setDropdownRef =\r\n useCallback(\r\n (\r\n element: HTMLDivElement | null,\r\n ) => {\r\n popover.dropdownRef.current =\r\n element;\r\n\r\n if (element) {\r\n requestAnimationFrame(() => {\r\n updatePosition();\r\n });\r\n }\r\n },\r\n [\r\n popover.dropdownRef,\r\n updatePosition,\r\n ],\r\n );\r\n\r\n useEffect(() => {\r\n if (!popover.opened) {\r\n setPositioned(false);\r\n return;\r\n }\r\n\r\n requestAnimationFrame(() => {\r\n updatePosition();\r\n });\r\n\r\n window.addEventListener(\r\n \"resize\",\r\n updatePosition,\r\n );\r\n\r\n window.addEventListener(\r\n \"scroll\",\r\n updatePosition,\r\n true,\r\n );\r\n\r\n return () => {\r\n window.removeEventListener(\r\n \"resize\",\r\n updatePosition,\r\n );\r\n\r\n window.removeEventListener(\r\n \"scroll\",\r\n updatePosition,\r\n true,\r\n );\r\n };\r\n }, [\r\n popover.opened,\r\n updatePosition,\r\n ]);\r\n\r\n useEffect(() => {\r\n if (\r\n !popover.opened ||\r\n !popover.closeOnClickOutside\r\n ) {\r\n return;\r\n }\r\n\r\n function handlePointerDown(\r\n event: PointerEvent,\r\n ) {\r\n const target =\r\n event.target;\r\n\r\n if (!(target instanceof Node)) {\r\n return;\r\n }\r\n\r\n const trigger =\r\n popover.triggerRef.current;\r\n\r\n const dropdown =\r\n popover.dropdownRef.current;\r\n\r\n if (\r\n trigger?.contains(target) ||\r\n dropdown?.contains(target)\r\n ) {\r\n return;\r\n }\r\n\r\n popover.close();\r\n }\r\n\r\n document.addEventListener(\r\n \"pointerdown\",\r\n handlePointerDown,\r\n );\r\n\r\n return () => {\r\n document.removeEventListener(\r\n \"pointerdown\",\r\n handlePointerDown,\r\n );\r\n };\r\n }, [\r\n popover.opened,\r\n popover.closeOnClickOutside,\r\n popover.close,\r\n popover.triggerRef,\r\n popover.dropdownRef,\r\n ]);\r\n\r\n if (!popover.opened) {\r\n return null;\r\n }\r\n\r\n const resolvedWidth =\r\n typeof popover.width === \"number\"\r\n ? `${popover.width}px`\r\n : popover.width;\r\n\r\n const dropdownStyle = {\r\n top: coordinates.top,\r\n left: coordinates.left,\r\n width: resolvedWidth,\r\n\r\n visibility:\r\n positioned\r\n ? \"visible\"\r\n : \"hidden\",\r\n\r\n ...style,\r\n } as CSSProperties;\r\n\r\n return (\r\n <Portal>\r\n <div\r\n ref={setDropdownRef}\r\n id={popover.popoverId}\r\n role=\"dialog\"\r\n className={cx(\r\n \"mb-popover\",\r\n `mb-popover--${popover.position}`,\r\n popover.withArrow\r\n ? \"mb-popover--with-arrow\"\r\n : undefined,\r\n className,\r\n )}\r\n style={dropdownStyle}\r\n {...props}\r\n >\r\n <div className=\"mb-popover__content\">\r\n {children}\r\n </div>\r\n\r\n {popover.withArrow ? (\r\n <span\r\n className=\"mb-popover__arrow\"\r\n aria-hidden=\"true\"\r\n />\r\n ) : null}\r\n </div>\r\n </Portal>\r\n );\r\n}\r\n\r\n/* ==========================================================\r\n Compound API\r\n========================================================== */\r\n\r\nexport const Popover =\r\n Object.assign(\r\n PopoverRoot,\r\n {\r\n Target: PopoverTarget,\r\n Dropdown: PopoverDropdown,\r\n },\r\n );","import type {\r\n CSSProperties,\r\n HTMLAttributes,\r\n ReactNode,\r\n} from \"react\";\r\n\r\nimport {\r\n useComponentDefaults,\r\n} from \"../../provider\";\r\n\r\nimport {\r\n cx,\r\n} from \"../../utils\";\r\n\r\nimport \"./Divider.css\";\r\n\r\nexport type DividerOrientation =\r\n | \"horizontal\"\r\n | \"vertical\";\r\n\r\nexport type DividerLabelPosition =\r\n | \"left\"\r\n | \"center\"\r\n | \"right\";\r\n\r\nexport type DividerVariant =\r\n | \"solid\"\r\n | \"dashed\"\r\n | \"dotted\";\r\n\r\nexport interface DividerProps\r\n extends HTMLAttributes<HTMLDivElement> {\r\n orientation?: DividerOrientation;\r\n\r\n label?: ReactNode;\r\n\r\n labelPosition?: DividerLabelPosition;\r\n\r\n variant?: DividerVariant;\r\n\r\n size?: number | string;\r\n\r\n color?: string;\r\n}\r\n\r\ntype DividerCSSProperties =\r\n CSSProperties &\r\n Record<\r\n `--mb-divider-${string}`,\r\n string | number | undefined\r\n >;\r\n\r\nexport function Divider({\r\n orientation,\r\n\r\n label,\r\n\r\n labelPosition,\r\n\r\n variant,\r\n\r\n size,\r\n\r\n color,\r\n\r\n className = \"\",\r\n\r\n style,\r\n\r\n ...props\r\n}: DividerProps) {\r\n const defaults =\r\n useComponentDefaults(\"Divider\");\r\n\r\n const resolvedOrientation =\r\n orientation ??\r\n defaults.orientation ??\r\n \"horizontal\";\r\n\r\n const resolvedVariant =\r\n variant ??\r\n defaults.variant ??\r\n \"solid\";\r\n\r\n const resolvedLabelPosition =\r\n labelPosition ??\r\n defaults.labelPosition ??\r\n \"center\";\r\n\r\n const hasLabel =\r\n label !== null &&\r\n label !== undefined;\r\n\r\n const dividerStyle: DividerCSSProperties = {\r\n \"--mb-divider-size\":\r\n typeof size === \"number\"\r\n ? `${size}px`\r\n : size,\r\n\r\n \"--mb-divider-color\":\r\n color,\r\n\r\n ...style,\r\n };\r\n\r\n return (\r\n <div\r\n className={cx(\r\n \"mb-divider\",\r\n `mb-divider--${resolvedOrientation}`,\r\n `mb-divider--${resolvedVariant}`,\r\n hasLabel\r\n ? `mb-divider--with-label mb-divider--label-${resolvedLabelPosition}`\r\n : undefined,\r\n className,\r\n )}\r\n style={dividerStyle}\r\n role=\"separator\"\r\n aria-orientation={\r\n resolvedOrientation\r\n }\r\n {...props}\r\n >\r\n {hasLabel ? (\r\n <span className=\"mb-divider__label\">\r\n {label}\r\n </span>\r\n ) : null}\r\n </div>\r\n );\r\n}","import {\r\n forwardRef,\r\n type InputHTMLAttributes,\r\n type ReactNode,\r\n} from \"react\";\r\n\r\nimport {\r\n useControllableState,\r\n} from \"../../hooks\";\r\n\r\nimport {\r\n useComponentDefaults,\r\n} from \"../../provider\";\r\n\r\nimport {\r\n cx,\r\n} from \"../../utils\";\r\n\r\nimport {\r\n Icon,\r\n} from \"../Icon\";\r\n\r\nimport \"./PasswordInput.css\";\r\n\r\nexport type PasswordInputSize =\r\n | \"sm\"\r\n | \"md\"\r\n | \"lg\";\r\n\r\nexport interface PasswordInputProps\r\n extends Omit<\r\n InputHTMLAttributes<HTMLInputElement>,\r\n \"size\" | \"type\"\r\n > {\r\n size?: PasswordInputSize;\r\n\r\n leftSection?: ReactNode;\r\n\r\n visible?: boolean;\r\n defaultVisible?: boolean;\r\n\r\n onVisibilityChange?: (\r\n visible: boolean,\r\n ) => void;\r\n\r\n visibilityToggle?: boolean;\r\n\r\n visibleIcon?: ReactNode;\r\n hiddenIcon?: ReactNode;\r\n\r\n visibleLabel?: string;\r\n hiddenLabel?: string;\r\n\r\n error?: boolean;\r\n}\r\n\r\nfunction EyeIcon() {\r\n return (\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n d=\"M2.5 12C4.6 7.8 8 5.5 12 5.5C16 5.5 19.4 7.8 21.5 12C19.4 16.2 16 18.5 12 18.5C8 18.5 4.6 16.2 2.5 12Z\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.8\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n\r\n <circle\r\n cx=\"12\"\r\n cy=\"12\"\r\n r=\"3\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.8\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nfunction EyeSlashIcon() {\r\n return (\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n d=\"M3 3L21 21\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.8\"\r\n strokeLinecap=\"round\"\r\n />\r\n\r\n <path\r\n d=\"M10.6 5.7C11.1 5.6 11.5 5.5 12 5.5C16 5.5 19.4 7.8 21.5 12C20.8 13.4 19.9 14.6 18.9 15.6\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.8\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n\r\n <path\r\n d=\"M6.2 7.1C4.7 8.2 3.4 9.9 2.5 12C4.6 16.2 8 18.5 12 18.5C13.4 18.5 14.7 18.2 15.9 17.6\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.8\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n\r\n <path\r\n d=\"M9.9 9.9C9.3 10.4 9 11.2 9 12C9 13.7 10.3 15 12 15C12.8 15 13.6 14.7 14.1 14.1\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.8\"\r\n strokeLinecap=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport const PasswordInput = forwardRef<\r\n HTMLInputElement,\r\n PasswordInputProps\r\n>(function PasswordInput(\r\n {\r\n size,\r\n\r\n leftSection,\r\n\r\n visible,\r\n defaultVisible = false,\r\n\r\n onVisibilityChange,\r\n\r\n visibilityToggle,\r\n\r\n visibleIcon,\r\n hiddenIcon,\r\n\r\n visibleLabel = \"Скрыть пароль\",\r\n hiddenLabel = \"Показать пароль\",\r\n\r\n error = false,\r\n disabled = false,\r\n\r\n className = \"\",\r\n\r\n ...props\r\n },\r\n ref,\r\n) {\r\n const defaults =\r\n useComponentDefaults(\r\n \"PasswordInput\",\r\n );\r\n\r\n const resolvedSize =\r\n size ??\r\n defaults.size ??\r\n \"md\";\r\n\r\n const resolvedVisibilityToggle =\r\n visibilityToggle ??\r\n defaults.visibilityToggle ??\r\n true;\r\n\r\n const [\r\n currentVisible,\r\n setCurrentVisible,\r\n ] = useControllableState<boolean>({\r\n value: visible,\r\n defaultValue: defaultVisible,\r\n onChange: onVisibilityChange,\r\n });\r\n\r\n const iconSize = {\r\n sm: 16,\r\n md: 18,\r\n lg: 20,\r\n }[resolvedSize];\r\n\r\n const classes = cx(\r\n \"mb-password-input\",\r\n `mb-password-input--${resolvedSize}`,\r\n leftSection != null\r\n ? \"mb-password-input--with-left-section\"\r\n : undefined,\r\n resolvedVisibilityToggle\r\n ? \"mb-password-input--with-toggle\"\r\n : undefined,\r\n error\r\n ? \"mb-password-input--error\"\r\n : undefined,\r\n disabled\r\n ? \"mb-password-input--disabled\"\r\n : undefined,\r\n className,\r\n );\r\n\r\n return (\r\n <div className={classes}>\r\n {leftSection != null ? (\r\n <span className=\"mb-password-input__section mb-password-input__section--left\">\r\n <Icon size={iconSize}>\r\n {leftSection}\r\n </Icon>\r\n </span>\r\n ) : null}\r\n\r\n <input\r\n ref={ref}\r\n type={\r\n currentVisible\r\n ? \"text\"\r\n : \"password\"\r\n }\r\n className=\"mb-password-input__control\"\r\n disabled={disabled}\r\n aria-invalid={\r\n error || undefined\r\n }\r\n {...props}\r\n />\r\n\r\n {resolvedVisibilityToggle ? (\r\n <button\r\n type=\"button\"\r\n className=\"mb-password-input__toggle\"\r\n disabled={disabled}\r\n aria-label={\r\n currentVisible\r\n ? visibleLabel\r\n : hiddenLabel\r\n }\r\n aria-pressed={\r\n currentVisible\r\n }\r\n onClick={() => {\r\n setCurrentVisible(\r\n (current) => !current,\r\n );\r\n }}\r\n >\r\n <Icon size={iconSize}>\r\n {currentVisible\r\n ? (\r\n visibleIcon ?? (\r\n <EyeSlashIcon />\r\n )\r\n )\r\n : (\r\n hiddenIcon ?? (\r\n <EyeIcon />\r\n )\r\n )}\r\n </Icon>\r\n </button>\r\n ) : null}\r\n </div>\r\n );\r\n});","import {\r\n forwardRef,\r\n useEffect,\r\n useImperativeHandle,\r\n useRef,\r\n type ClipboardEvent,\r\n type HTMLAttributes,\r\n type KeyboardEvent,\r\n} from \"react\";\r\n\r\nimport {\r\n useControllableState,\r\n} from \"../../hooks\";\r\n\r\nimport {\r\n useComponentDefaults,\r\n} from \"../../provider\";\r\n\r\nimport {\r\n cx,\r\n} from \"../../utils\";\r\n\r\nimport \"./PinInput.css\";\r\n\r\nexport type PinInputSize =\r\n | \"sm\"\r\n | \"md\"\r\n | \"lg\";\r\n\r\nexport type PinInputType =\r\n | \"number\"\r\n | \"alphanumeric\";\r\n\r\nexport interface PinInputProps\r\n extends Omit<\r\n HTMLAttributes<HTMLDivElement>,\r\n \"defaultValue\" | \"onChange\"\r\n > {\r\n length?: number;\r\n\r\n value?: string;\r\n defaultValue?: string;\r\n\r\n onChange?: (value: string) => void;\r\n onComplete?: (value: string) => void;\r\n\r\n size?: PinInputSize;\r\n type?: PinInputType;\r\n\r\n mask?: boolean;\r\n oneTimeCode?: boolean;\r\n\r\n disabled?: boolean;\r\n error?: boolean;\r\n\r\n autoFocus?: boolean;\r\n\r\n name?: string;\r\n placeholder?: string;\r\n\r\n \"aria-label\"?: string;\r\n}\r\n\r\nfunction normalizeValue(\r\n value: string,\r\n length: number,\r\n type: PinInputType,\r\n): string {\r\n const filtered =\r\n type === \"number\"\r\n ? value.replace(/\\D/g, \"\")\r\n : value.replace(\r\n /[^a-zA-Z0-9]/g,\r\n \"\",\r\n );\r\n\r\n return filtered.slice(0, length);\r\n}\r\n\r\nfunction replaceCharacter(\r\n value: string,\r\n index: number,\r\n character: string,\r\n): string {\r\n const characters = value.split(\"\");\r\n\r\n if (character) {\r\n characters[index] = character;\r\n } else {\r\n characters.splice(index, 1);\r\n }\r\n\r\n return characters.join(\"\");\r\n}\r\n\r\nexport const PinInput = forwardRef<\r\n HTMLInputElement,\r\n PinInputProps\r\n>(function PinInput(\r\n {\r\n length,\r\n\r\n value,\r\n defaultValue = \"\",\r\n\r\n onChange,\r\n onComplete,\r\n\r\n size,\r\n type,\r\n\r\n mask,\r\n oneTimeCode = true,\r\n\r\n disabled = false,\r\n error = false,\r\n\r\n autoFocus = false,\r\n\r\n name,\r\n placeholder = \"\",\r\n\r\n className = \"\",\r\n \"aria-label\": ariaLabel =\r\n \"Введите код подтверждения\",\r\n\r\n ...props\r\n },\r\n forwardedRef,\r\n) {\r\n const defaults =\r\n useComponentDefaults(\"PinInput\");\r\n\r\n const resolvedLength = Math.max(\r\n 1,\r\n Math.floor(\r\n length ??\r\n defaults.length ??\r\n 4,\r\n ),\r\n );\r\n\r\n const resolvedSize =\r\n size ??\r\n defaults.size ??\r\n \"md\";\r\n\r\n const resolvedType =\r\n type ??\r\n defaults.type ??\r\n \"number\";\r\n\r\n const resolvedMask =\r\n mask ??\r\n defaults.mask ??\r\n false;\r\n\r\n const inputRefs =\r\n useRef<\r\n Array<HTMLInputElement | null>\r\n >([]);\r\n\r\n const completedValueRef =\r\n useRef<string | null>(null);\r\n\r\n const [\r\n internalValue,\r\n setInternalValue,\r\n ] = useControllableState<string>({\r\n value,\r\n defaultValue: normalizeValue(\r\n defaultValue,\r\n resolvedLength,\r\n resolvedType,\r\n ),\r\n onChange,\r\n });\r\n\r\n const currentValue =\r\n normalizeValue(\r\n internalValue,\r\n resolvedLength,\r\n resolvedType,\r\n );\r\n\r\n useImperativeHandle(\r\n forwardedRef,\r\n () =>\r\n inputRefs.current[0] as HTMLInputElement,\r\n );\r\n\r\n useEffect(() => {\r\n if (\r\n currentValue.length !==\r\n resolvedLength\r\n ) {\r\n completedValueRef.current = null;\r\n return;\r\n }\r\n\r\n if (\r\n completedValueRef.current ===\r\n currentValue\r\n ) {\r\n return;\r\n }\r\n\r\n completedValueRef.current =\r\n currentValue;\r\n\r\n onComplete?.(currentValue);\r\n }, [\r\n currentValue,\r\n resolvedLength,\r\n onComplete,\r\n ]);\r\n\r\n function focusInput(\r\n index: number,\r\n select = true,\r\n ) {\r\n const safeIndex = Math.max(\r\n 0,\r\n Math.min(\r\n index,\r\n resolvedLength - 1,\r\n ),\r\n );\r\n\r\n const input =\r\n inputRefs.current[safeIndex];\r\n\r\n input?.focus();\r\n\r\n if (select) {\r\n input?.select();\r\n }\r\n }\r\n\r\n function commitValue(\r\n nextValue: string,\r\n ) {\r\n setInternalValue(\r\n normalizeValue(\r\n nextValue,\r\n resolvedLength,\r\n resolvedType,\r\n ),\r\n );\r\n }\r\n\r\n function handleInputChange(\r\n index: number,\r\n rawValue: string,\r\n ) {\r\n const enteredValue =\r\n normalizeValue(\r\n rawValue,\r\n resolvedLength,\r\n resolvedType,\r\n );\r\n\r\n if (!enteredValue) {\r\n commitValue(\r\n replaceCharacter(\r\n currentValue,\r\n index,\r\n \"\",\r\n ),\r\n );\r\n\r\n return;\r\n }\r\n\r\n /*\r\n * Браузер или менеджер OTP может вставить\r\n * сразу несколько символов в одно поле.\r\n */\r\n if (enteredValue.length > 1) {\r\n const before =\r\n currentValue.slice(0, index);\r\n\r\n const afterIndex =\r\n index + enteredValue.length;\r\n\r\n const after =\r\n currentValue.slice(afterIndex);\r\n\r\n const nextValue =\r\n before +\r\n enteredValue +\r\n after;\r\n\r\n commitValue(nextValue);\r\n\r\n const nextFocusIndex = Math.min(\r\n index + enteredValue.length,\r\n resolvedLength - 1,\r\n );\r\n\r\n requestAnimationFrame(() => {\r\n focusInput(nextFocusIndex);\r\n });\r\n\r\n return;\r\n }\r\n\r\n const character =\r\n enteredValue[enteredValue.length - 1];\r\n\r\n const nextValue =\r\n replaceCharacter(\r\n currentValue,\r\n index,\r\n character,\r\n );\r\n\r\n commitValue(nextValue);\r\n\r\n if (index < resolvedLength - 1) {\r\n requestAnimationFrame(() => {\r\n focusInput(index + 1);\r\n });\r\n }\r\n }\r\n\r\n function handleKeyDown(\r\n event: KeyboardEvent<HTMLInputElement>,\r\n index: number,\r\n ) {\r\n if (event.key === \"Backspace\") {\r\n event.preventDefault();\r\n\r\n const currentCharacter =\r\n currentValue[index];\r\n\r\n if (currentCharacter) {\r\n commitValue(\r\n replaceCharacter(\r\n currentValue,\r\n index,\r\n \"\",\r\n ),\r\n );\r\n\r\n return;\r\n }\r\n\r\n if (index > 0) {\r\n commitValue(\r\n replaceCharacter(\r\n currentValue,\r\n index - 1,\r\n \"\",\r\n ),\r\n );\r\n\r\n requestAnimationFrame(() => {\r\n focusInput(index - 1);\r\n });\r\n }\r\n\r\n return;\r\n }\r\n\r\n if (event.key === \"Delete\") {\r\n event.preventDefault();\r\n\r\n commitValue(\r\n replaceCharacter(\r\n currentValue,\r\n index,\r\n \"\",\r\n ),\r\n );\r\n\r\n return;\r\n }\r\n\r\n if (event.key === \"ArrowLeft\") {\r\n event.preventDefault();\r\n focusInput(index - 1);\r\n\r\n return;\r\n }\r\n\r\n if (event.key === \"ArrowRight\") {\r\n event.preventDefault();\r\n focusInput(index + 1);\r\n\r\n return;\r\n }\r\n\r\n if (event.key === \"Home\") {\r\n event.preventDefault();\r\n focusInput(0);\r\n\r\n return;\r\n }\r\n\r\n if (event.key === \"End\") {\r\n event.preventDefault();\r\n focusInput(resolvedLength - 1);\r\n }\r\n }\r\n\r\n function handlePaste(\r\n event: ClipboardEvent<HTMLInputElement>,\r\n index: number,\r\n ) {\r\n event.preventDefault();\r\n\r\n const pastedValue =\r\n normalizeValue(\r\n event.clipboardData.getData(\r\n \"text\",\r\n ),\r\n resolvedLength,\r\n resolvedType,\r\n );\r\n\r\n if (!pastedValue) {\r\n return;\r\n }\r\n\r\n const before =\r\n currentValue.slice(0, index);\r\n\r\n const afterIndex =\r\n index + pastedValue.length;\r\n\r\n const after =\r\n currentValue.slice(afterIndex);\r\n\r\n const nextValue =\r\n normalizeValue(\r\n before +\r\n pastedValue +\r\n after,\r\n resolvedLength,\r\n resolvedType,\r\n );\r\n\r\n commitValue(nextValue);\r\n\r\n const nextFocusIndex = Math.min(\r\n index + pastedValue.length,\r\n resolvedLength - 1,\r\n );\r\n\r\n requestAnimationFrame(() => {\r\n focusInput(nextFocusIndex);\r\n });\r\n }\r\n\r\n const classes = cx(\r\n \"mb-pin-input\",\r\n `mb-pin-input--${resolvedSize}`,\r\n error\r\n ? \"mb-pin-input--error\"\r\n : undefined,\r\n disabled\r\n ? \"mb-pin-input--disabled\"\r\n : undefined,\r\n className,\r\n );\r\n\r\n return (\r\n <div\r\n className={classes}\r\n role=\"group\"\r\n aria-label={ariaLabel}\r\n {...props}\r\n >\r\n {name ? (\r\n <input\r\n type=\"hidden\"\r\n name={name}\r\n value={currentValue}\r\n />\r\n ) : null}\r\n\r\n {Array.from({\r\n length: resolvedLength,\r\n }).map((_, index) => {\r\n const character =\r\n currentValue[index] ?? \"\";\r\n\r\n return (\r\n <input\r\n key={index}\r\n ref={(element) => {\r\n inputRefs.current[index] =\r\n element;\r\n }}\r\n className=\"mb-pin-input__control\"\r\n type={\r\n resolvedMask\r\n ? \"password\"\r\n : \"text\"\r\n }\r\n inputMode={\r\n resolvedType === \"number\"\r\n ? \"numeric\"\r\n : \"text\"\r\n }\r\n pattern={\r\n resolvedType === \"number\"\r\n ? \"[0-9]*\"\r\n : undefined\r\n }\r\n autoComplete={\r\n oneTimeCode && index === 0\r\n ? \"one-time-code\"\r\n : \"off\"\r\n }\r\n value={character}\r\n placeholder={\r\n placeholder.slice(0, 1)\r\n }\r\n disabled={disabled}\r\n aria-invalid={\r\n error || undefined\r\n }\r\n aria-label={`Символ ${\r\n index + 1\r\n } из ${resolvedLength}`}\r\n maxLength={\r\n index === 0\r\n ? resolvedLength\r\n : 1\r\n }\r\n autoFocus={\r\n autoFocus && index === 0\r\n }\r\n onFocus={(event) => {\r\n event.currentTarget.select();\r\n }}\r\n onChange={(event) => {\r\n handleInputChange(\r\n index,\r\n event.currentTarget.value,\r\n );\r\n }}\r\n onKeyDown={(event) => {\r\n handleKeyDown(\r\n event,\r\n index,\r\n );\r\n }}\r\n onPaste={(event) => {\r\n handlePaste(event, index);\r\n }}\r\n />\r\n );\r\n })}\r\n </div>\r\n );\r\n});","import {\r\n forwardRef,\r\n useId,\r\n useImperativeHandle,\r\n useRef,\r\n useState,\r\n type ChangeEvent,\r\n type DragEvent,\r\n type HTMLAttributes,\r\n type ReactNode,\r\n} from \"react\";\r\n\r\nimport {\r\n useComponentDefaults,\r\n} from \"../../provider\";\r\n\r\nimport {\r\n cx,\r\n} from \"../../utils\";\r\n\r\nimport {\r\n Icon,\r\n} from \"../Icon\";\r\n\r\nimport \"./FileInput.css\";\r\n\r\nexport type FileInputSize =\r\n | \"sm\"\r\n | \"md\"\r\n | \"lg\";\r\n\r\nexport interface FileInputProps\r\n extends Omit<\r\n HTMLAttributes<HTMLDivElement>,\r\n \"onChange\" | \"title\"\r\n > {\r\n name?: string;\r\n\r\n accept?: string;\r\n multiple?: boolean;\r\n\r\n maxSize?: number;\r\n\r\n disabled?: boolean;\r\n error?: boolean;\r\n\r\n size?: FileInputSize;\r\n\r\n title?: ReactNode;\r\n description?: ReactNode;\r\n\r\n acceptLabel?: ReactNode;\r\n maxSizeLabel?: ReactNode;\r\n\r\n icon?: ReactNode;\r\n\r\n showFileList?: boolean;\r\n\r\n onFilesChange?: (\r\n files: File[],\r\n ) => void;\r\n\r\n onRejected?: (\r\n files: File[],\r\n reason: \"type\" | \"size\",\r\n ) => void;\r\n}\r\n\r\nfunction UploadIcon() {\r\n return (\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n d=\"M12 15V3\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.7\"\r\n strokeLinecap=\"round\"\r\n />\r\n\r\n <path\r\n d=\"M8.5 6.5L12 3L15.5 6.5\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.7\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n\r\n <path\r\n d=\"M7 10H5.8C4.81 10 4 10.81 4 11.8V18.2C4 19.19 4.81 20 5.8 20H18.2C19.19 20 20 19.19 20 18.2V11.8C20 10.81 19.19 10 18.2 10H17\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.7\"\r\n strokeLinecap=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nfunction formatBytes(bytes: number) {\r\n if (bytes === 0) {\r\n return \"0 Б\";\r\n }\r\n\r\n const units = [\r\n \"Б\",\r\n \"КБ\",\r\n \"МБ\",\r\n \"ГБ\",\r\n \"ТБ\",\r\n ];\r\n\r\n const unitIndex = Math.min(\r\n Math.floor(\r\n Math.log(bytes) /\r\n Math.log(1024),\r\n ),\r\n units.length - 1,\r\n );\r\n\r\n const value =\r\n bytes /\r\n 1024 ** unitIndex;\r\n\r\n return `${Number(\r\n value.toFixed(1),\r\n )} ${units[unitIndex]}`;\r\n}\r\n\r\nfunction getAcceptTokens(\r\n accept?: string,\r\n) {\r\n if (!accept) {\r\n return [];\r\n }\r\n\r\n return accept\r\n .split(\",\")\r\n .map((token) =>\r\n token.trim().toLowerCase(),\r\n )\r\n .filter(Boolean);\r\n}\r\n\r\nfunction isFileAccepted(\r\n file: File,\r\n accept?: string,\r\n) {\r\n const tokens =\r\n getAcceptTokens(accept);\r\n\r\n if (tokens.length === 0) {\r\n return true;\r\n }\r\n\r\n const fileName =\r\n file.name.toLowerCase();\r\n\r\n const fileType =\r\n file.type.toLowerCase();\r\n\r\n return tokens.some((token) => {\r\n if (token.startsWith(\".\")) {\r\n return fileName.endsWith(token);\r\n }\r\n\r\n if (token.endsWith(\"/*\")) {\r\n const category =\r\n token.slice(0, -1);\r\n\r\n return fileType.startsWith(\r\n category,\r\n );\r\n }\r\n\r\n return fileType === token;\r\n });\r\n}\r\n\r\nexport const FileInput = forwardRef<\r\n HTMLInputElement,\r\n FileInputProps\r\n>(function FileInput(\r\n {\r\n name,\r\n\r\n accept,\r\n multiple = false,\r\n\r\n maxSize,\r\n\r\n disabled = false,\r\n error = false,\r\n\r\n size,\r\n\r\n title = (\r\n <>\r\n Перенесите файлы сюда или\r\n нажмите, чтобы загрузить\r\n </>\r\n ),\r\n\r\n description,\r\n\r\n acceptLabel,\r\n maxSizeLabel,\r\n\r\n icon,\r\n\r\n showFileList = true,\r\n\r\n onFilesChange,\r\n onRejected,\r\n\r\n className = \"\",\r\n children,\r\n\r\n ...props\r\n },\r\n forwardedRef,\r\n) {\r\n const defaults =\r\n useComponentDefaults(\r\n \"FileInput\",\r\n );\r\n\r\n const resolvedSize =\r\n size ??\r\n defaults.size ??\r\n \"md\";\r\n\r\n const resolvedMultiple =\r\n multiple ??\r\n defaults.multiple ??\r\n false;\r\n\r\n const resolvedMaxSize =\r\n maxSize ??\r\n defaults.maxSize;\r\n\r\n const inputId = useId();\r\n\r\n const inputRef =\r\n useRef<HTMLInputElement | null>(\r\n null,\r\n );\r\n\r\n const [\r\n dragging,\r\n setDragging,\r\n ] = useState(false);\r\n\r\n const [\r\n selectedFiles,\r\n setSelectedFiles,\r\n ] = useState<File[]>([]);\r\n\r\n useImperativeHandle(\r\n forwardedRef,\r\n () =>\r\n inputRef.current as HTMLInputElement,\r\n );\r\n\r\n function validateFiles(\r\n incomingFiles: File[],\r\n ) {\r\n const acceptedFiles: File[] = [];\r\n const typeRejected: File[] = [];\r\n const sizeRejected: File[] = [];\r\n\r\n incomingFiles.forEach((file) => {\r\n if (\r\n !isFileAccepted(\r\n file,\r\n accept,\r\n )\r\n ) {\r\n typeRejected.push(file);\r\n return;\r\n }\r\n\r\n if (\r\n resolvedMaxSize !==\r\n undefined &&\r\n file.size >\r\n resolvedMaxSize\r\n ) {\r\n sizeRejected.push(file);\r\n return;\r\n }\r\n\r\n acceptedFiles.push(file);\r\n });\r\n\r\n if (\r\n typeRejected.length > 0\r\n ) {\r\n onRejected?.(\r\n typeRejected,\r\n \"type\",\r\n );\r\n }\r\n\r\n if (\r\n sizeRejected.length > 0\r\n ) {\r\n onRejected?.(\r\n sizeRejected,\r\n \"size\",\r\n );\r\n }\r\n\r\n return resolvedMultiple\r\n ? acceptedFiles\r\n : acceptedFiles.slice(0, 1);\r\n }\r\n\r\n function commitFiles(\r\n incomingFiles: File[],\r\n ) {\r\n const nextFiles =\r\n validateFiles(incomingFiles);\r\n\r\n setSelectedFiles(nextFiles);\r\n onFilesChange?.(nextFiles);\r\n }\r\n\r\n function openFileDialog() {\r\n if (disabled) {\r\n return;\r\n }\r\n\r\n inputRef.current?.click();\r\n }\r\n\r\n function handleInputChange(\r\n event: ChangeEvent<HTMLInputElement>,\r\n ) {\r\n const files =\r\n Array.from(\r\n event.currentTarget.files ??\r\n [],\r\n );\r\n\r\n commitFiles(files);\r\n\r\n event.currentTarget.value = \"\";\r\n }\r\n\r\n function handleDragEnter(\r\n event: DragEvent<HTMLDivElement>,\r\n ) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (!disabled) {\r\n setDragging(true);\r\n }\r\n }\r\n\r\n function handleDragOver(\r\n event: DragEvent<HTMLDivElement>,\r\n ) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (\r\n !disabled &&\r\n event.dataTransfer\r\n ) {\r\n event.dataTransfer.dropEffect =\r\n \"copy\";\r\n }\r\n }\r\n\r\n function handleDragLeave(\r\n event: DragEvent<HTMLDivElement>,\r\n ) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (\r\n event.currentTarget.contains(\r\n event.relatedTarget as Node,\r\n )\r\n ) {\r\n return;\r\n }\r\n\r\n setDragging(false);\r\n }\r\n\r\n function handleDrop(\r\n event: DragEvent<HTMLDivElement>,\r\n ) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n setDragging(false);\r\n\r\n if (disabled) {\r\n return;\r\n }\r\n\r\n const files = Array.from(\r\n event.dataTransfer.files,\r\n );\r\n\r\n commitFiles(files);\r\n }\r\n\r\n function removeFile(\r\n index: number,\r\n ) {\r\n const nextFiles =\r\n selectedFiles.filter(\r\n (_, fileIndex) =>\r\n fileIndex !== index,\r\n );\r\n\r\n setSelectedFiles(nextFiles);\r\n onFilesChange?.(nextFiles);\r\n }\r\n\r\n const classes = cx(\r\n \"mb-file-input\",\r\n `mb-file-input--${resolvedSize}`,\r\n dragging\r\n ? \"mb-file-input--dragging\"\r\n : undefined,\r\n error\r\n ? \"mb-file-input--error\"\r\n : undefined,\r\n disabled\r\n ? \"mb-file-input--disabled\"\r\n : undefined,\r\n className,\r\n );\r\n\r\n const resolvedAcceptLabel =\r\n acceptLabel ??\r\n (accept\r\n ? `Формат: ${accept}`\r\n : null);\r\n\r\n const resolvedMaxSizeLabel =\r\n maxSizeLabel ??\r\n (resolvedMaxSize !== undefined\r\n ? `Максимальный размер: ${formatBytes(\r\n resolvedMaxSize,\r\n )}`\r\n : null);\r\n\r\n return (\r\n <div\r\n className={classes}\r\n {...props}\r\n >\r\n <input\r\n ref={inputRef}\r\n id={inputId}\r\n type=\"file\"\r\n name={name}\r\n className=\"mb-file-input__native\"\r\n accept={accept}\r\n multiple={resolvedMultiple}\r\n disabled={disabled}\r\n tabIndex={-1}\r\n onChange={handleInputChange}\r\n />\r\n\r\n <div\r\n className=\"mb-file-input__dropzone\"\r\n role=\"button\"\r\n tabIndex={\r\n disabled ? -1 : 0\r\n }\r\n aria-disabled={\r\n disabled || undefined\r\n }\r\n aria-describedby={\r\n `${inputId}-description`\r\n }\r\n onClick={openFileDialog}\r\n onKeyDown={(event) => {\r\n if (\r\n event.key === \"Enter\" ||\r\n event.key === \" \"\r\n ) {\r\n event.preventDefault();\r\n openFileDialog();\r\n }\r\n }}\r\n onDragEnter={\r\n handleDragEnter\r\n }\r\n onDragOver={handleDragOver}\r\n onDragLeave={\r\n handleDragLeave\r\n }\r\n onDrop={handleDrop}\r\n >\r\n <span className=\"mb-file-input__icon\">\r\n <Icon\r\n size={\r\n resolvedSize === \"lg\"\r\n ? 30\r\n : resolvedSize ===\r\n \"sm\"\r\n ? 22\r\n : 26\r\n }\r\n >\r\n {icon ?? <UploadIcon />}\r\n </Icon>\r\n </span>\r\n\r\n <div className=\"mb-file-input__body\">\r\n <div className=\"mb-file-input__title\">\r\n {title}\r\n </div>\r\n\r\n {description != null ? (\r\n <div className=\"mb-file-input__description\">\r\n {description}\r\n </div>\r\n ) : null}\r\n\r\n {resolvedAcceptLabel !=\r\n null ||\r\n resolvedMaxSizeLabel !=\r\n null ? (\r\n <div\r\n id={`${inputId}-description`}\r\n className=\"mb-file-input__meta\"\r\n >\r\n {resolvedAcceptLabel !=\r\n null ? (\r\n <span>\r\n {resolvedAcceptLabel}\r\n </span>\r\n ) : null}\r\n\r\n {resolvedMaxSizeLabel !=\r\n null ? (\r\n <span>\r\n {\r\n resolvedMaxSizeLabel\r\n }\r\n </span>\r\n ) : null}\r\n </div>\r\n ) : null}\r\n\r\n {children}\r\n </div>\r\n </div>\r\n\r\n {showFileList &&\r\n selectedFiles.length > 0 ? (\r\n <div className=\"mb-file-input__files\">\r\n {selectedFiles.map(\r\n (file, index) => (\r\n <div\r\n key={`${file.name}-${file.lastModified}-${index}`}\r\n className=\"mb-file-input__file\"\r\n >\r\n <div className=\"mb-file-input__file-info\">\r\n <span className=\"mb-file-input__file-name\">\r\n {file.name}\r\n </span>\r\n\r\n <span className=\"mb-file-input__file-size\">\r\n {formatBytes(\r\n file.size,\r\n )}\r\n </span>\r\n </div>\r\n\r\n <button\r\n type=\"button\"\r\n className=\"mb-file-input__remove\"\r\n aria-label={`Удалить файл ${file.name}`}\r\n disabled={disabled}\r\n onClick={() => {\r\n removeFile(index);\r\n }}\r\n >\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n d=\"M7 7L17 17\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n />\r\n\r\n <path\r\n d=\"M17 7L7 17\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n </div>\r\n ),\r\n )}\r\n </div>\r\n ) : null}\r\n </div>\r\n );\r\n});","import {\r\n forwardRef,\r\n type ButtonHTMLAttributes,\r\n type HTMLAttributes,\r\n type ReactNode,\r\n} from \"react\";\r\n\r\nimport {\r\n useControllableState,\r\n} from \"../../hooks\";\r\n\r\nimport {\r\n useComponentDefaults,\r\n} from \"../../provider\";\r\n\r\nimport {\r\n cx,\r\n} from \"../../utils\";\r\n\r\nimport \"./Pagination.css\";\r\n\r\nexport type PaginationSize =\r\n | \"sm\"\r\n | \"md\"\r\n | \"lg\";\r\n\r\nexport type PaginationVariant =\r\n | \"default\"\r\n | \"filled\";\r\n\r\nexport interface PaginationProps\r\n extends Omit<\r\n HTMLAttributes<HTMLElement>,\r\n \"onChange\"\r\n > {\r\n total: number;\r\n\r\n value?: number;\r\n defaultValue?: number;\r\n\r\n onChange?: (page: number) => void;\r\n\r\n siblings?: number;\r\n boundaries?: number;\r\n\r\n size?: PaginationSize;\r\n variant?: PaginationVariant;\r\n\r\n disabled?: boolean;\r\n\r\n withEdges?: boolean;\r\n withControls?: boolean;\r\n\r\n previousLabel?: string;\r\n nextLabel?: string;\r\n firstLabel?: string;\r\n lastLabel?: string;\r\n\r\n previousIcon?: ReactNode;\r\n nextIcon?: ReactNode;\r\n firstIcon?: ReactNode;\r\n lastIcon?: ReactNode;\r\n}\r\n\r\ntype PaginationItem =\r\n | number\r\n | \"dots-left\"\r\n | \"dots-right\";\r\n\r\nfunction clampPage(\r\n page: number,\r\n total: number,\r\n) {\r\n return Math.min(\r\n Math.max(\r\n Math.floor(page),\r\n 1,\r\n ),\r\n total,\r\n );\r\n}\r\n\r\nfunction range(\r\n start: number,\r\n end: number,\r\n) {\r\n if (end < start) {\r\n return [];\r\n }\r\n\r\n return Array.from(\r\n {\r\n length:\r\n end - start + 1,\r\n },\r\n (_, index) =>\r\n start + index,\r\n );\r\n}\r\n\r\nfunction getPaginationItems({\r\n total,\r\n page,\r\n siblings,\r\n boundaries,\r\n}: {\r\n total: number;\r\n page: number;\r\n siblings: number;\r\n boundaries: number;\r\n}): PaginationItem[] {\r\n const visiblePages =\r\n siblings * 2 +\r\n boundaries * 2 +\r\n 3;\r\n\r\n if (\r\n total <= visiblePages\r\n ) {\r\n return range(1, total);\r\n }\r\n\r\n const leftBoundaryEnd =\r\n boundaries;\r\n\r\n const rightBoundaryStart =\r\n total -\r\n boundaries +\r\n 1;\r\n\r\n const siblingsStart =\r\n Math.max(\r\n page - siblings,\r\n leftBoundaryEnd + 2,\r\n );\r\n\r\n const siblingsEnd =\r\n Math.min(\r\n page + siblings,\r\n rightBoundaryStart - 2,\r\n );\r\n\r\n const showLeftDots =\r\n siblingsStart >\r\n leftBoundaryEnd + 2;\r\n\r\n const showRightDots =\r\n siblingsEnd <\r\n rightBoundaryStart - 2;\r\n\r\n const items: PaginationItem[] = [\r\n ...range(\r\n 1,\r\n leftBoundaryEnd,\r\n ),\r\n ];\r\n\r\n if (showLeftDots) {\r\n items.push(\"dots-left\");\r\n } else {\r\n items.push(\r\n ...range(\r\n leftBoundaryEnd + 1,\r\n siblingsStart - 1,\r\n ),\r\n );\r\n }\r\n\r\n items.push(\r\n ...range(\r\n siblingsStart,\r\n siblingsEnd,\r\n ),\r\n );\r\n\r\n if (showRightDots) {\r\n items.push(\"dots-right\");\r\n } else {\r\n items.push(\r\n ...range(\r\n siblingsEnd + 1,\r\n rightBoundaryStart - 1,\r\n ),\r\n );\r\n }\r\n\r\n items.push(\r\n ...range(\r\n rightBoundaryStart,\r\n total,\r\n ),\r\n );\r\n\r\n return items;\r\n}\r\n\r\nfunction ChevronLeftIcon() {\r\n return (\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n d=\"M14.5 6.5L9 12L14.5 17.5\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nfunction ChevronRightIcon() {\r\n return (\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n d=\"M9.5 6.5L15 12L9.5 17.5\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nfunction ChevronsLeftIcon() {\r\n return (\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n d=\"M11 7L6 12L11 17\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n\r\n <path\r\n d=\"M18 7L13 12L18 17\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nfunction ChevronsRightIcon() {\r\n return (\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n d=\"M13 7L18 12L13 17\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n\r\n <path\r\n d=\"M6 7L11 12L6 17\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\ninterface PaginationButtonProps\r\n extends ButtonHTMLAttributes<HTMLButtonElement> {\r\n active?: boolean;\r\n children: ReactNode;\r\n}\r\n\r\nconst PaginationButton =\r\n forwardRef<\r\n HTMLButtonElement,\r\n PaginationButtonProps\r\n >(function PaginationButton(\r\n {\r\n active = false,\r\n className = \"\",\r\n children,\r\n ...props\r\n },\r\n ref,\r\n ) {\r\n return (\r\n <button\r\n ref={ref}\r\n type=\"button\"\r\n className={cx(\r\n \"mb-pagination__control\",\r\n active\r\n ? \"mb-pagination__control--active\"\r\n : undefined,\r\n className,\r\n )}\r\n aria-current={\r\n active\r\n ? \"page\"\r\n : undefined\r\n }\r\n {...props}\r\n >\r\n {children}\r\n </button>\r\n );\r\n });\r\n\r\nexport const Pagination =\r\n forwardRef<\r\n HTMLElement,\r\n PaginationProps\r\n >(function Pagination(\r\n {\r\n total,\r\n\r\n value,\r\n defaultValue = 1,\r\n\r\n onChange,\r\n\r\n siblings = 1,\r\n boundaries = 1,\r\n\r\n size,\r\n variant,\r\n\r\n disabled = false,\r\n\r\n withEdges = false,\r\n withControls = true,\r\n\r\n previousLabel =\r\n \"Предыдущая страница\",\r\n\r\n nextLabel =\r\n \"Следующая страница\",\r\n\r\n firstLabel =\r\n \"Первая страница\",\r\n\r\n lastLabel =\r\n \"Последняя страница\",\r\n\r\n previousIcon,\r\n nextIcon,\r\n firstIcon,\r\n lastIcon,\r\n\r\n className = \"\",\r\n\r\n ...props\r\n },\r\n ref,\r\n ) {\r\n const defaults =\r\n useComponentDefaults(\r\n \"Pagination\",\r\n );\r\n\r\n const resolvedTotal =\r\n Math.max(\r\n 1,\r\n Math.floor(total),\r\n );\r\n\r\n const resolvedSize =\r\n size ??\r\n defaults.size ??\r\n \"md\";\r\n\r\n const resolvedVariant =\r\n variant ??\r\n defaults.variant ??\r\n \"default\";\r\n\r\n const resolvedSiblings =\r\n Math.max(\r\n 0,\r\n Math.floor(\r\n siblings ??\r\n defaults.siblings ??\r\n 1,\r\n ),\r\n );\r\n\r\n const resolvedBoundaries =\r\n Math.max(\r\n 0,\r\n Math.floor(\r\n boundaries ??\r\n defaults.boundaries ??\r\n 1,\r\n ),\r\n );\r\n\r\n const resolvedWithEdges =\r\n withEdges ??\r\n defaults.withEdges ??\r\n false;\r\n\r\n const resolvedWithControls =\r\n withControls ??\r\n defaults.withControls ??\r\n true;\r\n\r\n const [\r\n currentPage,\r\n setCurrentPage,\r\n ] =\r\n useControllableState<number>({\r\n value:\r\n value === undefined\r\n ? undefined\r\n : clampPage(\r\n value,\r\n resolvedTotal,\r\n ),\r\n\r\n defaultValue:\r\n clampPage(\r\n defaultValue,\r\n resolvedTotal,\r\n ),\r\n\r\n onChange: (\r\n nextPage,\r\n ) => {\r\n onChange?.(\r\n clampPage(\r\n nextPage,\r\n resolvedTotal,\r\n ),\r\n );\r\n },\r\n });\r\n\r\n const page =\r\n clampPage(\r\n currentPage,\r\n resolvedTotal,\r\n );\r\n\r\n const items =\r\n getPaginationItems({\r\n total:\r\n resolvedTotal,\r\n page,\r\n siblings:\r\n resolvedSiblings,\r\n boundaries:\r\n resolvedBoundaries,\r\n });\r\n\r\n function setPage(\r\n nextPage: number,\r\n ) {\r\n if (disabled) {\r\n return;\r\n }\r\n\r\n const safePage =\r\n clampPage(\r\n nextPage,\r\n resolvedTotal,\r\n );\r\n\r\n if (\r\n safePage === page\r\n ) {\r\n return;\r\n }\r\n\r\n setCurrentPage(\r\n safePage,\r\n );\r\n }\r\n\r\n return (\r\n <nav\r\n ref={ref}\r\n className={cx(\r\n \"mb-pagination\",\r\n `mb-pagination--${resolvedSize}`,\r\n `mb-pagination--${resolvedVariant}`,\r\n disabled\r\n ? \"mb-pagination--disabled\"\r\n : undefined,\r\n className,\r\n )}\r\n aria-label=\"Пагинация\"\r\n {...props}\r\n >\r\n {resolvedWithEdges ? (\r\n <PaginationButton\r\n aria-label={\r\n firstLabel\r\n }\r\n disabled={\r\n disabled ||\r\n page === 1\r\n }\r\n onClick={() => {\r\n setPage(1);\r\n }}\r\n >\r\n <span className=\"mb-pagination__icon\">\r\n {firstIcon ?? (\r\n <ChevronsLeftIcon />\r\n )}\r\n </span>\r\n </PaginationButton>\r\n ) : null}\r\n\r\n {resolvedWithControls ? (\r\n <PaginationButton\r\n aria-label={\r\n previousLabel\r\n }\r\n disabled={\r\n disabled ||\r\n page === 1\r\n }\r\n onClick={() => {\r\n setPage(\r\n page - 1,\r\n );\r\n }}\r\n >\r\n <span className=\"mb-pagination__icon\">\r\n {previousIcon ?? (\r\n <ChevronLeftIcon />\r\n )}\r\n </span>\r\n </PaginationButton>\r\n ) : null}\r\n\r\n {items.map(\r\n (item) => {\r\n if (\r\n typeof item ===\r\n \"number\"\r\n ) {\r\n return (\r\n <PaginationButton\r\n key={item}\r\n active={\r\n item === page\r\n }\r\n disabled={\r\n disabled\r\n }\r\n aria-label={`Страница ${item}`}\r\n onClick={() => {\r\n setPage(item);\r\n }}\r\n >\r\n {item}\r\n </PaginationButton>\r\n );\r\n }\r\n\r\n return (\r\n <span\r\n key={item}\r\n className=\"mb-pagination__dots\"\r\n aria-hidden=\"true\"\r\n >\r\n …\r\n </span>\r\n );\r\n },\r\n )}\r\n\r\n {resolvedWithControls ? (\r\n <PaginationButton\r\n aria-label={\r\n nextLabel\r\n }\r\n disabled={\r\n disabled ||\r\n page ===\r\n resolvedTotal\r\n }\r\n onClick={() => {\r\n setPage(\r\n page + 1,\r\n );\r\n }}\r\n >\r\n <span className=\"mb-pagination__icon\">\r\n {nextIcon ?? (\r\n <ChevronRightIcon />\r\n )}\r\n </span>\r\n </PaginationButton>\r\n ) : null}\r\n\r\n {resolvedWithEdges ? (\r\n <PaginationButton\r\n aria-label={\r\n lastLabel\r\n }\r\n disabled={\r\n disabled ||\r\n page ===\r\n resolvedTotal\r\n }\r\n onClick={() => {\r\n setPage(\r\n resolvedTotal,\r\n );\r\n }}\r\n >\r\n <span className=\"mb-pagination__icon\">\r\n {lastIcon ?? (\r\n <ChevronsRightIcon />\r\n )}\r\n </span>\r\n </PaginationButton>\r\n ) : null}\r\n </nav>\r\n );\r\n });","import {\r\n useEffect,\r\n useMemo,\r\n useState,\r\n type HTMLAttributes,\r\n} from \"react\";\r\n\r\nimport {\r\n useControllableState,\r\n} from \"../../hooks\";\r\n\r\nimport {\r\n useComponentDefaults,\r\n} from \"../../provider\";\r\n\r\nimport {\r\n cx,\r\n} from \"../../utils\";\r\n\r\nimport {\r\n Popover,\r\n} from \"../Popover\";\r\n\r\nimport \"./DatePicker.css\";\r\n\r\nexport type DatePickerSize =\r\n | \"sm\"\r\n | \"md\"\r\n | \"lg\";\r\n\r\nexport type DatePickerType =\r\n | \"single\"\r\n | \"range\";\r\n\r\nexport type DateRangeValue = [\r\n Date | null,\r\n Date | null,\r\n];\r\n\r\nexport type DatePickerValue =\r\n | Date\r\n | null\r\n | DateRangeValue;\r\n\r\nexport interface DatePickerProps\r\n extends Omit<\r\n HTMLAttributes<HTMLDivElement>,\r\n \"defaultValue\" | \"onChange\"\r\n > {\r\n type?: DatePickerType;\r\n\r\n value?: DatePickerValue;\r\n defaultValue?: DatePickerValue;\r\n\r\n onChange?: (\r\n value: DatePickerValue,\r\n ) => void;\r\n\r\n size?: DatePickerSize;\r\n\r\n placeholder?: string;\r\n rangeSeparator?: string;\r\n\r\n locale?: string;\r\n firstDayOfWeek?: 0 | 1;\r\n\r\n minDate?: Date;\r\n maxDate?: Date;\r\n\r\n disabled?: boolean;\r\n error?: boolean;\r\n clearable?: boolean;\r\n\r\n name?: string;\r\n\r\n dateFormat?:\r\n Intl.DateTimeFormatOptions;\r\n}\r\n\r\nconst DEFAULT_DATE_FORMAT:\r\n Intl.DateTimeFormatOptions = {\r\n day: \"2-digit\",\r\n month: \"2-digit\",\r\n year: \"numeric\",\r\n };\r\n\r\nfunction CalendarIcon() {\r\n return (\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden=\"true\"\r\n >\r\n <rect\r\n x=\"3\"\r\n y=\"5\"\r\n width=\"18\"\r\n height=\"16\"\r\n rx=\"2.5\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.8\"\r\n />\r\n\r\n <path\r\n d=\"M8 3V7\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.8\"\r\n strokeLinecap=\"round\"\r\n />\r\n\r\n <path\r\n d=\"M16 3V7\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.8\"\r\n strokeLinecap=\"round\"\r\n />\r\n\r\n <path\r\n d=\"M3 9H21\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.8\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nfunction ChevronLeftIcon() {\r\n return (\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n d=\"M14.5 6.5L9 12L14.5 17.5\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nfunction ChevronRightIcon() {\r\n return (\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n d=\"M9.5 6.5L15 12L9.5 17.5\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nfunction CloseIcon() {\r\n return (\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n d=\"M7 7L17 17\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n />\r\n\r\n <path\r\n d=\"M17 7L7 17\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nfunction startOfDay(\r\n date: Date,\r\n): Date {\r\n return new Date(\r\n date.getFullYear(),\r\n date.getMonth(),\r\n date.getDate(),\r\n );\r\n}\r\n\r\nfunction startOfMonth(\r\n date: Date,\r\n): Date {\r\n return new Date(\r\n date.getFullYear(),\r\n date.getMonth(),\r\n 1,\r\n );\r\n}\r\n\r\nfunction endOfMonth(\r\n date: Date,\r\n): Date {\r\n return new Date(\r\n date.getFullYear(),\r\n date.getMonth() + 1,\r\n 0,\r\n );\r\n}\r\n\r\nfunction addDays(\r\n date: Date,\r\n amount: number,\r\n): Date {\r\n return new Date(\r\n date.getFullYear(),\r\n date.getMonth(),\r\n date.getDate() + amount,\r\n );\r\n}\r\n\r\nfunction addMonths(\r\n date: Date,\r\n amount: number,\r\n): Date {\r\n return new Date(\r\n date.getFullYear(),\r\n date.getMonth() + amount,\r\n 1,\r\n );\r\n}\r\n\r\nfunction isSameDay(\r\n first: Date,\r\n second: Date,\r\n): boolean {\r\n return (\r\n first.getFullYear() ===\r\n second.getFullYear() &&\r\n first.getMonth() ===\r\n second.getMonth() &&\r\n first.getDate() ===\r\n second.getDate()\r\n );\r\n}\r\n\r\nfunction isBeforeDay(\r\n first: Date,\r\n second: Date,\r\n): boolean {\r\n return (\r\n startOfDay(first).getTime() <\r\n startOfDay(second).getTime()\r\n );\r\n}\r\n\r\nfunction isAfterDay(\r\n first: Date,\r\n second: Date,\r\n): boolean {\r\n return (\r\n startOfDay(first).getTime() >\r\n startOfDay(second).getTime()\r\n );\r\n}\r\n\r\nfunction isDateInRange(\r\n date: Date,\r\n start: Date | null,\r\n end: Date | null,\r\n): boolean {\r\n if (!start || !end) {\r\n return false;\r\n }\r\n\r\n return (\r\n !isBeforeDay(date, start) &&\r\n !isAfterDay(date, end)\r\n );\r\n}\r\n\r\nfunction isDateDisabled(\r\n date: Date,\r\n minDate?: Date,\r\n maxDate?: Date,\r\n): boolean {\r\n if (\r\n minDate &&\r\n isBeforeDay(date, minDate)\r\n ) {\r\n return true;\r\n }\r\n\r\n if (\r\n maxDate &&\r\n isAfterDay(date, maxDate)\r\n ) {\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction getCalendarDays(\r\n month: Date,\r\n firstDayOfWeek: 0 | 1,\r\n): Date[] {\r\n const firstDate =\r\n startOfMonth(month);\r\n\r\n const weekday =\r\n firstDate.getDay();\r\n\r\n const offset =\r\n firstDayOfWeek === 1\r\n ? (weekday + 6) % 7\r\n : weekday;\r\n\r\n const gridStart =\r\n addDays(firstDate, -offset);\r\n\r\n return Array.from(\r\n {\r\n length: 42,\r\n },\r\n (_, index) =>\r\n addDays(gridStart, index),\r\n );\r\n}\r\n\r\nfunction getWeekdayLabels(\r\n locale: string,\r\n firstDayOfWeek: 0 | 1,\r\n): string[] {\r\n const sunday =\r\n new Date(2024, 0, 7);\r\n\r\n return Array.from(\r\n {\r\n length: 7,\r\n },\r\n (_, index) => {\r\n const dayOffset =\r\n firstDayOfWeek === 1\r\n ? index + 1\r\n : index;\r\n\r\n return new Intl.DateTimeFormat(\r\n locale,\r\n {\r\n weekday: \"short\",\r\n },\r\n )\r\n .format(\r\n addDays(\r\n sunday,\r\n dayOffset,\r\n ),\r\n )\r\n .replace(\".\", \"\");\r\n },\r\n );\r\n}\r\n\r\nfunction normalizeSingleValue(\r\n value: DatePickerValue | undefined,\r\n): Date | null {\r\n if (\r\n value instanceof Date &&\r\n !Number.isNaN(value.getTime())\r\n ) {\r\n return startOfDay(value);\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction normalizeRangeValue(\r\n value: DatePickerValue | undefined,\r\n): DateRangeValue {\r\n if (!Array.isArray(value)) {\r\n return [null, null];\r\n }\r\n\r\n const start =\r\n value[0] instanceof Date &&\r\n !Number.isNaN(\r\n value[0].getTime(),\r\n )\r\n ? startOfDay(value[0])\r\n : null;\r\n\r\n const end =\r\n value[1] instanceof Date &&\r\n !Number.isNaN(\r\n value[1].getTime(),\r\n )\r\n ? startOfDay(value[1])\r\n : null;\r\n\r\n return [start, end];\r\n}\r\n\r\nfunction formatDate(\r\n date: Date,\r\n locale: string,\r\n options:\r\n Intl.DateTimeFormatOptions,\r\n): string {\r\n return new Intl.DateTimeFormat(\r\n locale,\r\n options,\r\n ).format(date);\r\n}\r\n\r\nfunction toInputDate(\r\n date: Date | null,\r\n): string {\r\n if (!date) {\r\n return \"\";\r\n }\r\n\r\n const year =\r\n date.getFullYear();\r\n\r\n const month =\r\n String(\r\n date.getMonth() + 1,\r\n ).padStart(2, \"0\");\r\n\r\n const day =\r\n String(\r\n date.getDate(),\r\n ).padStart(2, \"0\");\r\n\r\n return `${year}-${month}-${day}`;\r\n}\r\n\r\nexport function DatePicker({\r\n type = \"single\",\r\n\r\n value,\r\n defaultValue,\r\n\r\n onChange,\r\n\r\n size,\r\n\r\n placeholder,\r\n rangeSeparator = \"—\",\r\n\r\n locale = \"ru-RU\",\r\n firstDayOfWeek,\r\n\r\n minDate,\r\n maxDate,\r\n\r\n disabled = false,\r\n error = false,\r\n clearable,\r\n\r\n name,\r\n\r\n dateFormat =\r\n DEFAULT_DATE_FORMAT,\r\n\r\n className = \"\",\r\n\r\n ...props\r\n}: DatePickerProps) {\r\n const defaults =\r\n useComponentDefaults(\r\n \"DatePicker\",\r\n );\r\n\r\n const resolvedSize =\r\n size ??\r\n defaults.size ??\r\n \"md\";\r\n\r\n const resolvedFirstDayOfWeek =\r\n firstDayOfWeek ??\r\n defaults.firstDayOfWeek ??\r\n 1;\r\n\r\n const resolvedClearable =\r\n clearable ??\r\n defaults.clearable ??\r\n true;\r\n\r\n const resolvedPlaceholder =\r\n placeholder ??\r\n (type === \"range\"\r\n ? \"Выберите период\"\r\n : \"Выберите дату\");\r\n\r\n const normalizedDefaultValue =\r\n type === \"range\"\r\n ? normalizeRangeValue(\r\n defaultValue,\r\n )\r\n : normalizeSingleValue(\r\n defaultValue,\r\n );\r\n\r\n const normalizedControlledValue =\r\n value === undefined\r\n ? undefined\r\n : type === \"range\"\r\n ? normalizeRangeValue(value)\r\n : normalizeSingleValue(value);\r\n\r\n const [\r\n currentValue,\r\n setCurrentValue,\r\n ] =\r\n useControllableState<\r\n DatePickerValue\r\n >({\r\n value:\r\n normalizedControlledValue,\r\n defaultValue:\r\n normalizedDefaultValue,\r\n onChange,\r\n });\r\n\r\n const singleValue =\r\n type === \"single\"\r\n ? normalizeSingleValue(\r\n currentValue,\r\n )\r\n : null;\r\n\r\n const rangeValue =\r\n type === \"range\"\r\n ? normalizeRangeValue(\r\n currentValue,\r\n )\r\n : ([null, null] as DateRangeValue);\r\n\r\n const [\r\n rangeStart,\r\n rangeEnd,\r\n ] = rangeValue;\r\n\r\n const [\r\n opened,\r\n setOpened,\r\n ] = useState(false);\r\n\r\n const initialVisibleDate =\r\n singleValue ??\r\n rangeStart ??\r\n minDate ??\r\n new Date();\r\n\r\n const [\r\n visibleMonth,\r\n setVisibleMonth,\r\n ] = useState<Date>(\r\n startOfMonth(\r\n initialVisibleDate,\r\n ),\r\n );\r\n\r\n useEffect(() => {\r\n const selected =\r\n type === \"range\"\r\n ? rangeStart\r\n : singleValue;\r\n\r\n if (selected) {\r\n setVisibleMonth(\r\n startOfMonth(selected),\r\n );\r\n }\r\n }, [\r\n type,\r\n singleValue,\r\n rangeStart,\r\n ]);\r\n\r\n const days = useMemo(\r\n () =>\r\n getCalendarDays(\r\n visibleMonth,\r\n resolvedFirstDayOfWeek,\r\n ),\r\n [\r\n visibleMonth,\r\n resolvedFirstDayOfWeek,\r\n ],\r\n );\r\n\r\n const weekdayLabels =\r\n useMemo(\r\n () =>\r\n getWeekdayLabels(\r\n locale,\r\n resolvedFirstDayOfWeek,\r\n ),\r\n [\r\n locale,\r\n resolvedFirstDayOfWeek,\r\n ],\r\n );\r\n\r\n const today =\r\n startOfDay(new Date());\r\n\r\n const monthLabel =\r\n new Intl.DateTimeFormat(\r\n locale,\r\n {\r\n month: \"long\",\r\n year: \"numeric\",\r\n },\r\n ).format(visibleMonth);\r\n\r\n const formattedValue =\r\n type === \"range\"\r\n ? rangeStart\r\n ? rangeEnd\r\n ? `${formatDate(\r\n rangeStart,\r\n locale,\r\n dateFormat,\r\n )} ${rangeSeparator} ${formatDate(\r\n rangeEnd,\r\n locale,\r\n dateFormat,\r\n )}`\r\n : `${formatDate(\r\n rangeStart,\r\n locale,\r\n dateFormat,\r\n )} ${rangeSeparator} ...`\r\n : null\r\n : singleValue\r\n ? formatDate(\r\n singleValue,\r\n locale,\r\n dateFormat,\r\n )\r\n : null;\r\n\r\n const hasValue =\r\n type === \"range\"\r\n ? rangeStart !== null ||\r\n rangeEnd !== null\r\n : singleValue !== null;\r\n\r\n const previousMonth =\r\n addMonths(\r\n visibleMonth,\r\n -1,\r\n );\r\n\r\n const nextMonth =\r\n addMonths(\r\n visibleMonth,\r\n 1,\r\n );\r\n\r\n function canOpenMonth(\r\n month: Date,\r\n ): boolean {\r\n const first =\r\n startOfMonth(month);\r\n\r\n const last =\r\n endOfMonth(month);\r\n\r\n if (\r\n minDate &&\r\n isBeforeDay(\r\n last,\r\n minDate,\r\n )\r\n ) {\r\n return false;\r\n }\r\n\r\n if (\r\n maxDate &&\r\n isAfterDay(\r\n first,\r\n maxDate,\r\n )\r\n ) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n function handleDateSelect(\r\n date: Date,\r\n ) {\r\n if (\r\n disabled ||\r\n isDateDisabled(\r\n date,\r\n minDate,\r\n maxDate,\r\n )\r\n ) {\r\n return;\r\n }\r\n\r\n const selectedDate =\r\n startOfDay(date);\r\n\r\n if (type === \"single\") {\r\n setCurrentValue(\r\n selectedDate,\r\n );\r\n\r\n setOpened(false);\r\n\r\n return;\r\n }\r\n\r\n if (\r\n !rangeStart ||\r\n rangeEnd\r\n ) {\r\n setCurrentValue([\r\n selectedDate,\r\n null,\r\n ]);\r\n\r\n return;\r\n }\r\n\r\n if (\r\n isBeforeDay(\r\n selectedDate,\r\n rangeStart,\r\n )\r\n ) {\r\n setCurrentValue([\r\n selectedDate,\r\n rangeStart,\r\n ]);\r\n } else {\r\n setCurrentValue([\r\n rangeStart,\r\n selectedDate,\r\n ]);\r\n }\r\n\r\n setOpened(false);\r\n }\r\n\r\n function clearValue() {\r\n if (type === \"range\") {\r\n setCurrentValue([\r\n null,\r\n null,\r\n ]);\r\n\r\n return;\r\n }\r\n\r\n setCurrentValue(null);\r\n }\r\n\r\n function selectToday() {\r\n if (\r\n isDateDisabled(\r\n today,\r\n minDate,\r\n maxDate,\r\n )\r\n ) {\r\n return;\r\n }\r\n\r\n setVisibleMonth(\r\n startOfMonth(today),\r\n );\r\n\r\n if (type === \"range\") {\r\n setCurrentValue([\r\n today,\r\n today,\r\n ]);\r\n } else {\r\n setCurrentValue(today);\r\n }\r\n\r\n setOpened(false);\r\n }\r\n\r\n const classes = cx(\r\n \"mb-date-picker\",\r\n `mb-date-picker--${resolvedSize}`,\r\n type === \"range\"\r\n ? \"mb-date-picker--range\"\r\n : \"mb-date-picker--single\",\r\n error\r\n ? \"mb-date-picker--error\"\r\n : undefined,\r\n disabled\r\n ? \"mb-date-picker--disabled\"\r\n : undefined,\r\n className,\r\n );\r\n\r\n return (\r\n <div\r\n className={classes}\r\n {...props}\r\n >\r\n {name ? (\r\n type === \"range\" ? (\r\n <>\r\n <input\r\n type=\"hidden\"\r\n name={`${name}Start`}\r\n value={toInputDate(\r\n rangeStart,\r\n )}\r\n />\r\n\r\n <input\r\n type=\"hidden\"\r\n name={`${name}End`}\r\n value={toInputDate(\r\n rangeEnd,\r\n )}\r\n />\r\n </>\r\n ) : (\r\n <input\r\n type=\"hidden\"\r\n name={name}\r\n value={toInputDate(\r\n singleValue,\r\n )}\r\n />\r\n )\r\n ) : null}\r\n\r\n <Popover\r\n opened={opened}\r\n onChange={setOpened}\r\n position=\"bottom-start\"\r\n width={320}\r\n offset={8}\r\n >\r\n <Popover.Target>\r\n <div className=\"mb-date-picker__target\">\r\n <button\r\n type=\"button\"\r\n className=\"mb-date-picker__trigger\"\r\n disabled={disabled}\r\n aria-invalid={\r\n error || undefined\r\n }\r\n >\r\n <span className=\"mb-date-picker__calendar-icon\">\r\n <CalendarIcon />\r\n </span>\r\n\r\n <span\r\n className={cx(\r\n \"mb-date-picker__value\",\r\n !formattedValue\r\n ? \"mb-date-picker__placeholder\"\r\n : undefined,\r\n )}\r\n >\r\n {formattedValue ??\r\n resolvedPlaceholder}\r\n </span>\r\n </button>\r\n\r\n {resolvedClearable &&\r\n hasValue &&\r\n !disabled ? (\r\n <button\r\n type=\"button\"\r\n className=\"mb-date-picker__clear\"\r\n aria-label=\"Очистить дату\"\r\n onClick={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n clearValue();\r\n setOpened(false);\r\n }}\r\n >\r\n <CloseIcon />\r\n </button>\r\n ) : null}\r\n </div>\r\n </Popover.Target>\r\n\r\n <Popover.Dropdown\r\n className=\"mb-date-picker__dropdown\"\r\n >\r\n <div className=\"mb-date-picker__calendar\">\r\n <div className=\"mb-date-picker__header\">\r\n <button\r\n type=\"button\"\r\n className=\"mb-date-picker__navigation\"\r\n aria-label=\"Предыдущий месяц\"\r\n disabled={\r\n !canOpenMonth(\r\n previousMonth,\r\n )\r\n }\r\n onClick={() => {\r\n setVisibleMonth(\r\n previousMonth,\r\n );\r\n }}\r\n >\r\n <ChevronLeftIcon />\r\n </button>\r\n\r\n <div className=\"mb-date-picker__month\">\r\n {monthLabel}\r\n </div>\r\n\r\n <button\r\n type=\"button\"\r\n className=\"mb-date-picker__navigation\"\r\n aria-label=\"Следующий месяц\"\r\n disabled={\r\n !canOpenMonth(\r\n nextMonth,\r\n )\r\n }\r\n onClick={() => {\r\n setVisibleMonth(\r\n nextMonth,\r\n );\r\n }}\r\n >\r\n <ChevronRightIcon />\r\n </button>\r\n </div>\r\n\r\n <div className=\"mb-date-picker__weekdays\">\r\n {weekdayLabels.map(\r\n (\r\n weekday,\r\n index,\r\n ) => (\r\n <div\r\n key={`${weekday}-${index}`}\r\n className=\"mb-date-picker__weekday\"\r\n >\r\n {weekday}\r\n </div>\r\n ),\r\n )}\r\n </div>\r\n\r\n <div className=\"mb-date-picker__days\">\r\n {days.map((date) => {\r\n const outside =\r\n date.getMonth() !==\r\n visibleMonth.getMonth();\r\n\r\n const dateDisabled =\r\n isDateDisabled(\r\n date,\r\n minDate,\r\n maxDate,\r\n );\r\n\r\n const selected =\r\n type === \"single\" &&\r\n singleValue !== null &&\r\n isSameDay(\r\n date,\r\n singleValue,\r\n );\r\n\r\n const rangeStartSelected =\r\n type === \"range\" &&\r\n rangeStart !== null &&\r\n isSameDay(\r\n date,\r\n rangeStart,\r\n );\r\n\r\n const rangeEndSelected =\r\n type === \"range\" &&\r\n rangeEnd !== null &&\r\n isSameDay(\r\n date,\r\n rangeEnd,\r\n );\r\n\r\n const inRange =\r\n type === \"range\" &&\r\n isDateInRange(\r\n date,\r\n rangeStart,\r\n rangeEnd,\r\n );\r\n\r\n const current =\r\n isSameDay(\r\n date,\r\n today,\r\n );\r\n\r\n return (\r\n <button\r\n key={\r\n date.toISOString()\r\n }\r\n type=\"button\"\r\n className={cx(\r\n \"mb-date-picker__day\",\r\n outside\r\n ? \"mb-date-picker__day--outside\"\r\n : undefined,\r\n current\r\n ? \"mb-date-picker__day--today\"\r\n : undefined,\r\n selected\r\n ? \"mb-date-picker__day--selected\"\r\n : undefined,\r\n inRange\r\n ? \"mb-date-picker__day--in-range\"\r\n : undefined,\r\n rangeStartSelected\r\n ? \"mb-date-picker__day--range-start\"\r\n : undefined,\r\n rangeEndSelected\r\n ? \"mb-date-picker__day--range-end\"\r\n : undefined,\r\n )}\r\n disabled={\r\n dateDisabled\r\n }\r\n aria-pressed={\r\n selected ||\r\n rangeStartSelected ||\r\n rangeEndSelected\r\n }\r\n aria-label={\r\n formatDate(\r\n date,\r\n locale,\r\n {\r\n day: \"numeric\",\r\n month: \"long\",\r\n year: \"numeric\",\r\n },\r\n )\r\n }\r\n onClick={() => {\r\n handleDateSelect(\r\n date,\r\n );\r\n }}\r\n >\r\n {date.getDate()}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n\r\n <div className=\"mb-date-picker__footer\">\r\n <button\r\n type=\"button\"\r\n className=\"mb-date-picker__today\"\r\n disabled={\r\n isDateDisabled(\r\n today,\r\n minDate,\r\n maxDate,\r\n )\r\n }\r\n onClick={\r\n selectToday\r\n }\r\n >\r\n Сегодня\r\n </button>\r\n\r\n {type === \"range\" &&\r\n rangeStart &&\r\n !rangeEnd ? (\r\n <span className=\"mb-date-picker__range-hint\">\r\n Выберите конец периода\r\n </span>\r\n ) : null}\r\n </div>\r\n </div>\r\n </Popover.Dropdown>\r\n </Popover>\r\n </div>\r\n );\r\n}","import type {\r\n HTMLAttributes,\r\n ReactNode,\r\n} from \"react\";\r\n\r\nimport { useComponentDefaults } from \"../../provider\";\r\n\r\nimport \"./Card.css\";\r\n\r\nexport interface CardProps\r\n extends HTMLAttributes<HTMLDivElement> {\r\n padding?: \"sm\" | \"md\" | \"lg\";\r\n radius?: \"sm\" | \"md\" | \"lg\";\r\n shadow?: \"none\" | \"sm\" | \"md\";\r\n\r\n header?: ReactNode;\r\n footer?: ReactNode;\r\n}\r\n\r\nexport function Card({\r\n padding,\r\n radius,\r\n shadow,\r\n\r\n header,\r\n footer,\r\n\r\n className = \"\",\r\n children,\r\n\r\n ...props\r\n}: CardProps) {\r\n const defaults =\r\n useComponentDefaults(\"Card\");\r\n\r\n const resolvedPadding =\r\n padding ??\r\n defaults.padding ??\r\n \"md\";\r\n\r\n const resolvedRadius =\r\n radius ??\r\n defaults.radius ??\r\n \"md\";\r\n\r\n const resolvedShadow =\r\n shadow ??\r\n defaults.shadow ??\r\n \"sm\";\r\n\r\n const classes = [\r\n \"mb-card\",\r\n `mb-card--padding-${resolvedPadding}`,\r\n `mb-card--radius-${resolvedRadius}`,\r\n `mb-card--shadow-${resolvedShadow}`,\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n return (\r\n <div\r\n className={classes}\r\n {...props}\r\n >\r\n {header != null ? (\r\n <div className=\"mb-card__header\">\r\n {header}\r\n </div>\r\n ) : null}\r\n\r\n <div className=\"mb-card__content\">\r\n {children}\r\n </div>\r\n\r\n {footer != null ? (\r\n <div className=\"mb-card__footer\">\r\n {footer}\r\n </div>\r\n ) : null}\r\n </div>\r\n );\r\n}","import {\r\n forwardRef,\r\n type ButtonHTMLAttributes,\r\n type ReactNode,\r\n} from \"react\";\r\n\r\nimport {\r\n useComponentDefaults,\r\n} from \"../../provider\";\r\n\r\nimport { Icon } from \"../Icon\";\r\nimport { Spinner } from \"../Spinner\";\r\n\r\nimport \"./IconButton.css\";\r\n\r\nexport interface IconButtonProps\r\n extends ButtonHTMLAttributes<HTMLButtonElement> {\r\n icon: ReactNode;\r\n label: string;\r\n\r\n variant?:\r\n | \"primary\"\r\n | \"secondary\"\r\n | \"outline\"\r\n | \"ghost\";\r\n\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n\r\n loading?: boolean;\r\n}\r\n\r\nexport const IconButton = forwardRef<\r\n HTMLButtonElement,\r\n IconButtonProps\r\n>(function IconButton(\r\n {\r\n icon,\r\n label,\r\n\r\n variant,\r\n size,\r\n\r\n loading = false,\r\n disabled,\r\n\r\n className = \"\",\r\n type = \"button\",\r\n\r\n ...props\r\n },\r\n ref,\r\n) {\r\n const defaults =\r\n useComponentDefaults(\"IconButton\");\r\n\r\n const resolvedVariant =\r\n variant ??\r\n defaults.variant ??\r\n \"primary\";\r\n\r\n const resolvedSize =\r\n size ??\r\n defaults.size ??\r\n \"md\";\r\n\r\n const classes = [\r\n \"mb-icon-button\",\r\n `mb-icon-button--${resolvedVariant}`,\r\n `mb-icon-button--${resolvedSize}`,\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n const iconSize = {\r\n sm: 16,\r\n md: 18,\r\n lg: 20,\r\n }[resolvedSize];\r\n\r\n return (\r\n <button\r\n ref={ref}\r\n type={type}\r\n className={classes}\r\n disabled={disabled || loading}\r\n aria-label={label}\r\n aria-busy={loading || undefined}\r\n {...props}\r\n >\r\n {loading ? (\r\n <Spinner\r\n size={14}\r\n thickness={2}\r\n color=\"currentColor\"\r\n trackColor=\"transparent\"\r\n aria-hidden=\"true\"\r\n />\r\n ) : (\r\n <Icon size={iconSize}>\r\n {icon}\r\n </Icon>\r\n )}\r\n </button>\r\n );\r\n});","import type {\r\n InputHTMLAttributes,\r\n ReactNode,\r\n} from \"react\";\r\n\r\nimport { Icon } from \"../Icon\";\r\n\r\nimport \"./Input.css\";\r\n\r\nexport interface InputProps\r\n extends InputHTMLAttributes<HTMLInputElement> {\r\n leftSection?: ReactNode;\r\n rightSection?: ReactNode;\r\n error?: boolean;\r\n}\r\n\r\nexport function Input({\r\n leftSection,\r\n rightSection,\r\n error = false,\r\n className = \"\",\r\n disabled,\r\n ...props\r\n}: InputProps) {\r\n const classes = [\r\n \"mb-input\",\r\n leftSection && \"mb-input--with-left-section\",\r\n rightSection && \"mb-input--with-right-section\",\r\n error && \"mb-input--error\",\r\n disabled && \"mb-input--disabled\",\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n return (\r\n <div className={classes}>\r\n {leftSection ? (\r\n <span className=\"mb-input__section mb-input__section--left\">\r\n <Icon size={18}>\r\n {leftSection}\r\n </Icon>\r\n </span>\r\n ) : null}\r\n\r\n <input\r\n className=\"mb-input__control\"\r\n disabled={disabled}\r\n aria-invalid={error || undefined}\r\n {...props}\r\n />\r\n\r\n {rightSection ? (\r\n <span className=\"mb-input__section mb-input__section--right\">\r\n <Icon size={18}>\r\n {rightSection}\r\n </Icon>\r\n </span>\r\n ) : null}\r\n </div>\r\n );\r\n}","import type { TextareaHTMLAttributes } from \"react\";\r\nimport \"./Textarea.css\";\r\n\r\nexport interface TextareaProps\r\n extends TextareaHTMLAttributes<HTMLTextAreaElement> {}\r\n\r\nexport function Textarea({\r\n className = \"\",\r\n ...props\r\n}: TextareaProps) {\r\n return (\r\n <textarea\r\n className={`mb-textarea ${className}`}\r\n {...props}\r\n />\r\n );\r\n}","import type {\r\n ElementType,\r\n HTMLAttributes,\r\n ReactNode,\r\n} from \"react\";\r\n\r\nimport { useComponentDefaults } from \"../../provider\";\r\nimport { Icon } from \"../Icon\";\r\n\r\nimport \"./Text.css\";\r\n\r\nexport interface TextProps\r\n extends HTMLAttributes<HTMLElement> {\r\n as?: ElementType;\r\n\r\n size?: \"xs\" | \"sm\" | \"md\" | \"lg\";\r\n\r\n weight?:\r\n | \"regular\"\r\n | \"medium\"\r\n | \"semibold\"\r\n | \"bold\";\r\n\r\n color?:\r\n | \"default\"\r\n | \"muted\"\r\n | \"primary\";\r\n\r\n leftSection?: ReactNode;\r\n rightSection?: ReactNode;\r\n}\r\n\r\nexport function Text({\r\n as: Component = \"p\",\r\n\r\n size,\r\n weight,\r\n color,\r\n\r\n leftSection,\r\n rightSection,\r\n\r\n className = \"\",\r\n children,\r\n\r\n ...props\r\n}: TextProps) {\r\n const defaults =\r\n useComponentDefaults(\"Text\");\r\n\r\n const resolvedSize =\r\n size ??\r\n defaults.size ??\r\n \"md\";\r\n\r\n const resolvedWeight =\r\n weight ??\r\n defaults.weight ??\r\n \"regular\";\r\n\r\n const resolvedColor =\r\n color ??\r\n defaults.color ??\r\n \"default\";\r\n\r\n const classes = [\r\n \"mb-text\",\r\n `mb-text--${resolvedSize}`,\r\n `mb-text--${resolvedWeight}`,\r\n `mb-text--${resolvedColor}`,\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n const iconSize = {\r\n xs: 12,\r\n sm: 14,\r\n md: 16,\r\n lg: 18,\r\n }[resolvedSize];\r\n\r\n return (\r\n <Component\r\n className={classes}\r\n {...props}\r\n >\r\n {leftSection != null ? (\r\n <Icon size={iconSize}>\r\n {leftSection}\r\n </Icon>\r\n ) : null}\r\n\r\n <span className=\"mb-text__content\">\r\n {children}\r\n </span>\r\n\r\n {rightSection != null ? (\r\n <Icon size={iconSize}>\r\n {rightSection}\r\n </Icon>\r\n ) : null}\r\n </Component>\r\n );\r\n}","import type {\r\n HTMLAttributes,\r\n ReactNode,\r\n} from \"react\";\r\n\r\nimport { useComponentDefaults } from \"../../provider\";\r\nimport { Icon } from \"../Icon\";\r\n\r\nimport \"./Title.css\";\r\n\r\nexport interface TitleProps\r\n extends HTMLAttributes<HTMLHeadingElement> {\r\n order?: 1 | 2 | 3 | 4 | 5 | 6;\r\n\r\n size?:\r\n | \"xs\"\r\n | \"sm\"\r\n | \"md\"\r\n | \"lg\"\r\n | \"xl\";\r\n\r\n weight?:\r\n | \"medium\"\r\n | \"semibold\"\r\n | \"bold\";\r\n\r\n color?:\r\n | \"default\"\r\n | \"muted\"\r\n | \"primary\";\r\n\r\n leftSection?: ReactNode;\r\n rightSection?: ReactNode;\r\n}\r\n\r\nexport function Title({\r\n order,\r\n size,\r\n weight,\r\n color = \"default\",\r\n\r\n leftSection,\r\n rightSection,\r\n\r\n className = \"\",\r\n children,\r\n\r\n ...props\r\n}: TitleProps) {\r\n const defaults =\r\n useComponentDefaults(\"Title\");\r\n\r\n const resolvedOrder =\r\n order ??\r\n defaults.order ??\r\n 2;\r\n\r\n const resolvedWeight =\r\n weight ??\r\n defaults.weight ??\r\n \"semibold\";\r\n\r\n const resolvedSize =\r\n size ??\r\n ({\r\n 1: \"xl\",\r\n 2: \"lg\",\r\n 3: \"md\",\r\n 4: \"sm\",\r\n 5: \"xs\",\r\n 6: \"xs\",\r\n }[resolvedOrder] as NonNullable<\r\n TitleProps[\"size\"]\r\n >);\r\n\r\n const Component =\r\n `h${resolvedOrder}` as const;\r\n\r\n const iconSize = {\r\n xs: 16,\r\n sm: 20,\r\n md: 24,\r\n lg: 32,\r\n xl: 40,\r\n }[resolvedSize];\r\n\r\n const classes = [\r\n \"mb-title\",\r\n `mb-title--${resolvedSize}`,\r\n `mb-title--${resolvedWeight}`,\r\n `mb-title--${color}`,\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n return (\r\n <Component\r\n className={classes}\r\n {...props}\r\n >\r\n {leftSection != null ? (\r\n <Icon size={iconSize}>\r\n {leftSection}\r\n </Icon>\r\n ) : null}\r\n\r\n <span className=\"mb-title__content\">\r\n {children}\r\n </span>\r\n\r\n {rightSection != null ? (\r\n <Icon size={iconSize}>\r\n {rightSection}\r\n </Icon>\r\n ) : null}\r\n </Component>\r\n );\r\n}"],"mappings":"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","names":["import_react","import_react","import_react","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","Button","import_jsx_runtime","import_jsx_runtime","import_react","import_react","import_react","import_react","import_react","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","itemOpened","import_react","import_jsx_runtime","focusableSelector","import_react","import_jsx_runtime","import_react","import_jsx_runtime","assignRef","import_jsx_runtime","import_react","import_jsx_runtime","PasswordInput","import_react","import_jsx_runtime","normalizeValue","PinInput","nextValue","import_react","import_jsx_runtime","FileInput","import_react","import_jsx_runtime","PaginationButton","Pagination","import_react","import_jsx_runtime","ChevronLeftIcon","ChevronRightIcon","import_jsx_runtime","import_react","import_jsx_runtime","IconButton","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/provider/MainbaseProvider.tsx","../src/provider/MainbaseContext.ts","../src/provider/defaultTheme.ts","../src/provider/PortalContext.ts","../src/provider/themeToVariables.ts","../src/provider/useMainbaseTheme.ts","../src/provider/useComponentDefaults.ts","../src/components/Icon/Icon.tsx","../src/components/Alert/Alert.tsx","../src/components/Badge/Badge.tsx","../src/components/Button/Button.tsx","../src/utils/cx.ts","../src/components/Spinner/Spinner.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/Group/Group.tsx","../src/components/Modal/Modal.tsx","../src/hooks/useClickOutside.ts","../src/hooks/useControllableState.ts","../src/hooks/useDisclosure.ts","../src/hooks/useLockScroll.ts","../src/components/Portal/Portal.tsx","../src/components/Radio/Radio.tsx","../src/components/Radio/RadioGroup.tsx","../src/components/Select/Select.tsx","../src/components/Stack/Stack.tsx","../src/components/Switch/Switch.tsx","../src/components/Toast/ToastProvider.tsx","../src/components/Toast/Toast.tsx","../src/components/Toast/ToastContext.ts","../src/components/Toast/useToast.ts","../src/components/Avatar/Avatar.tsx","../src/components/Avatar/AvatarGroup.tsx","../src/components/Progress/Progress.tsx","../src/components/Skeleton/Skeleton.tsx","../src/components/Tabs/Tabs.tsx","../src/components/Tooltip/Tooltip.tsx","../src/components/Accordion/Accordion.tsx","../src/components/Drawer/Drawer.tsx","../src/components/Menu/Menu.tsx","../src/components/Popover/Popover.tsx","../src/components/Divider/Divider.tsx","../src/components/PasswordInput/PasswordInput.tsx","../src/components/PinInput/PinInput.tsx","../src/components/FileInput/FileInput.tsx","../src/components/Pagination/Pagination.tsx","../src/components/DatePicker/DatePicker.tsx","../src/components/Image/Image.tsx","../src/components/Highlight/Highlight.tsx","../src/components/Card/Card.tsx","../src/components/IconButton/IconButton.tsx","../src/components/Input/Input.tsx","../src/components/Textarea/Textarea.tsx","../src/components/Text/Text.tsx","../src/components/Title/Title.tsx"],"sourcesContent":["import \"./styles/variables.css\";\r\n\r\nexport * from \"./provider\";\r\n\r\nexport * from \"./components/Alert\";\r\nexport * from \"./components/Badge\";\r\nexport * from \"./components/Button\";\r\nexport * from \"./components/Checkbox\";\r\nexport * from \"./components/Group\";\r\nexport * from \"./components/Icon\";\r\nexport * from \"./components/Modal\";\r\nexport * from \"./components/Portal\";\r\nexport * from \"./components/Radio\";\r\nexport * from \"./components/Select\";\r\nexport * from \"./components/Spinner\";\r\nexport * from \"./components/Stack\";\r\nexport * from \"./components/Switch\";\r\nexport * from \"./components/Toast\";\r\nexport * from \"./components/Avatar\";\r\nexport * from \"./components/Progress\";\r\nexport * from \"./components/Skeleton\";\r\nexport * from \"./components/Tabs\";\r\nexport * from \"./components/Tooltip\";\r\nexport * from \"./components/Accordion\";\r\nexport * from \"./components/Drawer\";\r\nexport * from \"./components/Menu\";\r\nexport * from \"./components/Popover\";\r\nexport * from \"./components/Divider\";\r\nexport * from \"./components/PasswordInput\";\r\nexport * from \"./components/PinInput\";\r\nexport * from \"./components/FileInput\";\r\nexport * from \"./components/Pagination\";\r\nexport * from \"./components/DatePicker\";\r\nexport * from \"./components/Image\";\r\nexport * from \"./components/Highlight\";\r\n\r\nexport * from \"./hooks\";\r\nexport * from \"./utils\";\r\n\r\nexport {\r\n Card,\r\n} from \"./components/Card/Card\";\r\n\r\nexport type {\r\n CardProps,\r\n} from \"./components/Card/Card\";\r\n\r\nexport {\r\n IconButton,\r\n} from \"./components/IconButton/IconButton\";\r\n\r\nexport type {\r\n IconButtonProps,\r\n} from \"./components/IconButton/IconButton\";\r\n\r\nexport {\r\n Input,\r\n} from \"./components/Input/Input\";\r\n\r\nexport type {\r\n InputProps,\r\n} from \"./components/Input/Input\";\r\n\r\nexport {\r\n Textarea,\r\n} from \"./components/Textarea/Textarea\";\r\n\r\nexport type {\r\n TextareaProps,\r\n} from \"./components/Textarea/Textarea\";\r\n\r\nexport {\r\n Text,\r\n} from \"./components/Text/Text\";\r\n\r\nexport type {\r\n TextProps,\r\n} from \"./components/Text/Text\";\r\n\r\nexport {\r\n Title,\r\n} from \"./components/Title/Title\";\r\n\r\nexport type {\r\n TitleProps,\r\n} from \"./components/Title/Title\";","import {\r\n useContext,\r\n useMemo,\r\n useRef,\r\n useState,\r\n type CSSProperties,\r\n} from \"react\";\r\n\r\nimport { MainbaseContext } from \"./MainbaseContext\";\r\nimport { MainbasePortalContext } from \"./PortalContext\";\r\nimport { defaultMainbaseTheme } from \"./defaultTheme\";\r\nimport { themeToVariables } from \"./themeToVariables\";\r\n\r\nimport type {\r\n MainbaseProviderProps,\r\n MainbaseTheme,\r\n MainbaseThemeOverride,\r\n} from \"./types\";\r\n\r\nfunction mergeTheme(\r\n parentTheme: MainbaseTheme,\r\n override?: MainbaseThemeOverride,\r\n): MainbaseTheme {\r\n if (!override) {\r\n return parentTheme;\r\n }\r\n\r\n return {\r\n colorScheme:\r\n override.colorScheme ??\r\n parentTheme.colorScheme,\r\n\r\n colors: {\r\n ...parentTheme.colors,\r\n ...override.colors,\r\n },\r\n\r\n radii: {\r\n ...parentTheme.radii,\r\n ...override.radii,\r\n },\r\n\r\n shadows: {\r\n ...parentTheme.shadows,\r\n ...override.shadows,\r\n },\r\n\r\n spacing: {\r\n ...parentTheme.spacing,\r\n ...override.spacing,\r\n },\r\n\r\n typography: {\r\n ...parentTheme.typography,\r\n ...override.typography,\r\n },\r\n\r\n transitions: {\r\n ...parentTheme.transitions,\r\n ...override.transitions,\r\n },\r\n\r\n zIndex: {\r\n ...parentTheme.zIndex,\r\n ...override.zIndex,\r\n },\r\n\r\n focusRingWidth:\r\n override.focusRingWidth ??\r\n parentTheme.focusRingWidth,\r\n\r\n components: {\r\n ...parentTheme.components,\r\n ...override.components,\r\n\r\n Button: {\r\n ...parentTheme.components.Button,\r\n ...override.components?.Button,\r\n },\r\n\r\n IconButton: {\r\n ...parentTheme.components.IconButton,\r\n ...override.components?.IconButton,\r\n },\r\n\r\n Input: {\r\n ...parentTheme.components.Input,\r\n ...override.components?.Input,\r\n },\r\n\r\n Select: {\r\n ...parentTheme.components.Select,\r\n ...override.components?.Select,\r\n },\r\n\r\n Text: {\r\n ...parentTheme.components.Text,\r\n ...override.components?.Text,\r\n },\r\n\r\n Title: {\r\n ...parentTheme.components.Title,\r\n ...override.components?.Title,\r\n },\r\n\r\n Card: {\r\n ...parentTheme.components.Card,\r\n ...override.components?.Card,\r\n },\r\n\r\n Badge: {\r\n ...parentTheme.components.Badge,\r\n ...override.components?.Badge,\r\n },\r\n\r\n Modal: {\r\n ...parentTheme.components.Modal,\r\n ...override.components?.Modal,\r\n },\r\n\r\n Toast: {\r\n ...parentTheme.components.Toast,\r\n ...override.components?.Toast,\r\n },\r\n \r\n Tabs: {\r\n ...parentTheme.components.Tabs,\r\n ...override.components?.Tabs,\r\n },\r\n\r\n Accordion: {\r\n ...parentTheme.components.Accordion,\r\n ...override.components?.Accordion,\r\n },\r\n\r\n Drawer: {\r\n ...parentTheme.components.Drawer,\r\n ...override.components?.Drawer,\r\n },\r\n\r\n Divider: {\r\n ...parentTheme.components.Divider,\r\n ...override.components?.Divider,\r\n },\r\n\r\n PasswordInput: {\r\n ...parentTheme.components.PasswordInput,\r\n ...override.components?.PasswordInput,\r\n },\r\n\r\n PinInput: {\r\n ...parentTheme.components.PinInput,\r\n ...override.components?.PinInput,\r\n },\r\n\r\n FileInput: {\r\n ...parentTheme.components.FileInput,\r\n ...override.components?.FileInput,\r\n },\r\n\r\n Pagination: {\r\n ...parentTheme.components.Pagination,\r\n ...override.components?.Pagination,\r\n },\r\n\r\n DatePicker: {\r\n ...parentTheme.components.DatePicker,\r\n ...override.components?.DatePicker,\r\n },\r\n\r\n Image: {\r\n ...parentTheme.components.Image,\r\n ...override.components?.Image,\r\n },\r\n },\r\n };\r\n}\r\n\r\nexport function MainbaseProvider({\r\n children,\r\n theme,\r\n className = \"\",\r\n style,\r\n}: MainbaseProviderProps) {\r\n const parentTheme =\r\n useContext(MainbaseContext);\r\n\r\n const resolvedParentTheme =\r\n parentTheme ??\r\n defaultMainbaseTheme;\r\n\r\n const mergedTheme = useMemo(\r\n () =>\r\n mergeTheme(\r\n resolvedParentTheme,\r\n theme,\r\n ),\r\n [\r\n resolvedParentTheme,\r\n theme,\r\n ],\r\n );\r\n\r\n const variables = useMemo(\r\n () => themeToVariables(mergedTheme),\r\n [mergedTheme],\r\n );\r\n\r\n const portalRef =\r\n useRef<HTMLDivElement | null>(null);\r\n\r\n const [\r\n portalTarget,\r\n setPortalTarget,\r\n ] = useState<HTMLDivElement | null>(null);\r\n\r\n const providerStyle = {\r\n ...variables,\r\n ...style,\r\n } as CSSProperties;\r\n\r\n return (\r\n <MainbaseContext.Provider\r\n value={mergedTheme}\r\n >\r\n <div\r\n className={[\r\n \"mb-provider\",\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \")}\r\n data-mb-theme={\r\n mergedTheme.colorScheme\r\n }\r\n style={providerStyle}\r\n >\r\n <MainbasePortalContext.Provider\r\n value={portalTarget}\r\n >\r\n {children}\r\n\r\n <div\r\n ref={(element) => {\r\n portalRef.current = element;\r\n setPortalTarget(element);\r\n }}\r\n className=\"mb-portal-root\"\r\n />\r\n </MainbasePortalContext.Provider>\r\n </div>\r\n </MainbaseContext.Provider>\r\n );\r\n}","import {\r\n createContext,\r\n} from \"react\";\r\n\r\nimport {\r\n defaultMainbaseTheme,\r\n} from \"./defaultTheme\";\r\n\r\nimport type {\r\n MainbaseTheme,\r\n} from \"./types\";\r\n\r\nexport const MainbaseContext =\r\n createContext<MainbaseTheme>(\r\n defaultMainbaseTheme,\r\n );","import type {\r\n MainbaseTheme,\r\n} from \"./types\";\r\n\r\nexport const defaultMainbaseTheme: MainbaseTheme = {\r\n colorScheme: \"light\",\r\n\r\n colors: {\r\n primary: \"#30d5c8\",\r\n primaryHover: \"#2bc8bc\",\r\n primaryActive: \"#27b9ae\",\r\n\r\n text: \"#172322\",\r\n textSecondary: \"#5e666a\",\r\n textMuted: \"#7d868b\",\r\n\r\n background: \"#ffffff\",\r\n backgroundSecondary: \"#f3f5f5\",\r\n backgroundTertiary: \"#f8f9fa\",\r\n\r\n border: \"#d8dde0\",\r\n borderHover: \"#bfc7cb\",\r\n\r\n success: \"#22c55e\",\r\n warning: \"#f59e0b\",\r\n danger: \"#ef4444\",\r\n info: \"#30d5c8\",\r\n\r\n overlay: \"rgba(17, 24, 39, 0.42)\",\r\n },\r\n\r\n radii: {\r\n sm: 10,\r\n md: 14,\r\n lg: 18,\r\n xl: 24,\r\n full: 999,\r\n },\r\n\r\n shadows: {\r\n xs: \"0 1px 3px rgba(23, 35, 34, 0.05)\",\r\n sm: \"0 2px 6px rgba(23, 35, 34, 0.06)\",\r\n md: \"0 8px 24px rgba(23, 35, 34, 0.10)\",\r\n lg: \"0 16px 40px rgba(23, 35, 34, 0.14)\",\r\n xl: \"0 24px 64px rgba(23, 35, 34, 0.18)\",\r\n },\r\n\r\n spacing: {\r\n xs: 4,\r\n sm: 8,\r\n md: 16,\r\n lg: 24,\r\n xl: 32,\r\n },\r\n\r\n typography: {\r\n fontFamily: \"inherit\",\r\n fontFamilyMonospace:\r\n \"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace\",\r\n\r\n fontSizeXs: 12,\r\n fontSizeSm: 13,\r\n fontSizeMd: 14,\r\n fontSizeLg: 16,\r\n fontSizeXl: 18,\r\n\r\n lineHeight: 1.5,\r\n },\r\n\r\n transitions: {\r\n fast: \"0.15s ease\",\r\n normal: \"0.18s ease\",\r\n slow: \"0.25s ease\",\r\n },\r\n\r\n zIndex: {\r\n dropdown: 1000,\r\n sticky: 1100,\r\n modal: 1200,\r\n toast: 1300,\r\n tooltip: 1400,\r\n },\r\n\r\n focusRingWidth: 2,\r\n\r\n components: {\r\n Button: {\r\n variant: \"primary\",\r\n size: \"md\",\r\n },\r\n\r\n IconButton: {\r\n variant: \"primary\",\r\n size: \"md\",\r\n },\r\n\r\n Input: {\r\n size: \"md\",\r\n },\r\n\r\n Select: {\r\n size: \"md\",\r\n },\r\n\r\n Text: {\r\n size: \"md\",\r\n weight: \"regular\",\r\n color: \"default\",\r\n },\r\n\r\n Title: {\r\n order: 2,\r\n weight: \"semibold\",\r\n },\r\n\r\n Card: {\r\n padding: \"md\",\r\n radius: \"md\",\r\n shadow: \"sm\",\r\n },\r\n\r\n Badge: {\r\n variant: \"default\",\r\n size: \"md\",\r\n },\r\n\r\n Modal: {\r\n size: \"md\",\r\n closeOnEscape: true,\r\n closeOnOverlayClick: true,\r\n withCloseButton: true,\r\n },\r\n\r\n Toast: {\r\n position: \"top-right\",\r\n duration: 4000,\r\n maxToasts: 5,\r\n },\r\n \r\n Tabs: {\r\n variant: \"underline\",\r\n size: \"md\",\r\n },\r\n \r\n Accordion: {\r\n variant: \"default\",\r\n size: \"md\",\r\n },\r\n\r\n Drawer: {\r\n position: \"right\",\r\n size: \"md\",\r\n closeOnEscape: true,\r\n closeOnOverlayClick: true,\r\n withCloseButton: true,\r\n },\r\n \r\n Divider: {\r\n orientation: \"horizontal\",\r\n variant: \"solid\",\r\n labelPosition: \"center\",\r\n },\r\n\r\n PasswordInput: {\r\n size: \"md\",\r\n visibilityToggle: true,\r\n },\r\n \r\n PinInput: {\r\n size: \"md\",\r\n length: 4,\r\n type: \"number\",\r\n mask: false,\r\n },\r\n\r\n FileInput: {\r\n size: \"md\",\r\n multiple: false,\r\n },\r\n\r\n Pagination: {\r\n size: \"md\",\r\n variant: \"default\",\r\n siblings: 1,\r\n boundaries: 1,\r\n withEdges: false,\r\n withControls: true,\r\n },\r\n\r\n DatePicker: {\r\n size: \"md\",\r\n firstDayOfWeek: 1,\r\n clearable: true,\r\n },\r\n\r\n Image: {\r\n radius: \"md\",\r\n fit: \"cover\",\r\n },\r\n },\r\n \r\n};","import { createContext } from \"react\";\r\n\r\nexport const MainbasePortalContext =\r\n createContext<HTMLElement | null>(null);","import type {\r\n MainbaseCSSVariables,\r\n MainbaseRadius,\r\n MainbaseTheme,\r\n} from \"./types\";\r\n\r\nfunction toCssValue(\r\n value: MainbaseRadius,\r\n): string {\r\n return typeof value === \"number\"\r\n ? `${value}px`\r\n : value;\r\n}\r\n\r\nexport function themeToVariables(\r\n theme: MainbaseTheme,\r\n): MainbaseCSSVariables {\r\n return {\r\n \"--mb-font-family\":\r\n theme.typography.fontFamily,\r\n\r\n \"--mb-font-family-monospace\":\r\n theme.typography.fontFamilyMonospace,\r\n\r\n \"--mb-font-size-xs\":\r\n toCssValue(\r\n theme.typography.fontSizeXs,\r\n ),\r\n\r\n \"--mb-font-size-sm\":\r\n toCssValue(\r\n theme.typography.fontSizeSm,\r\n ),\r\n\r\n \"--mb-font-size-md\":\r\n toCssValue(\r\n theme.typography.fontSizeMd,\r\n ),\r\n\r\n \"--mb-font-size-lg\":\r\n toCssValue(\r\n theme.typography.fontSizeLg,\r\n ),\r\n\r\n \"--mb-font-size-xl\":\r\n toCssValue(\r\n theme.typography.fontSizeXl,\r\n ),\r\n\r\n \"--mb-line-height\":\r\n String(theme.typography.lineHeight),\r\n\r\n \"--mb-primary\":\r\n theme.colors.primary,\r\n\r\n \"--mb-primary-hover\":\r\n theme.colors.primaryHover,\r\n\r\n \"--mb-primary-active\":\r\n theme.colors.primaryActive,\r\n\r\n \"--mb-text-color\":\r\n theme.colors.text,\r\n\r\n \"--mb-text-secondary\":\r\n theme.colors.textSecondary,\r\n\r\n \"--mb-text-muted\":\r\n theme.colors.textMuted,\r\n\r\n \"--mb-background\":\r\n theme.colors.background,\r\n\r\n \"--mb-background-secondary\":\r\n theme.colors.backgroundSecondary,\r\n\r\n \"--mb-background-tertiary\":\r\n theme.colors.backgroundTertiary,\r\n\r\n \"--mb-border-color\":\r\n theme.colors.border,\r\n\r\n \"--mb-border-hover\":\r\n theme.colors.borderHover,\r\n\r\n \"--mb-success\":\r\n theme.colors.success,\r\n\r\n \"--mb-warning\":\r\n theme.colors.warning,\r\n\r\n \"--mb-danger\":\r\n theme.colors.danger,\r\n\r\n \"--mb-info\":\r\n theme.colors.info,\r\n\r\n \"--mb-overlay\":\r\n theme.colors.overlay,\r\n\r\n \"--mb-focus-color\":\r\n theme.colors.primary,\r\n\r\n \"--mb-focus-ring-width\":\r\n toCssValue(theme.focusRingWidth),\r\n\r\n \"--mb-radius-sm\":\r\n toCssValue(theme.radii.sm),\r\n\r\n \"--mb-radius\":\r\n toCssValue(theme.radii.md),\r\n\r\n \"--mb-radius-lg\":\r\n toCssValue(theme.radii.lg),\r\n\r\n \"--mb-radius-xl\":\r\n toCssValue(theme.radii.xl),\r\n\r\n \"--mb-radius-full\":\r\n toCssValue(theme.radii.full),\r\n\r\n \"--mb-shadow-xs\":\r\n theme.shadows.xs,\r\n\r\n \"--mb-shadow-sm\":\r\n theme.shadows.sm,\r\n\r\n \"--mb-shadow-md\":\r\n theme.shadows.md,\r\n\r\n \"--mb-shadow-lg\":\r\n theme.shadows.lg,\r\n\r\n \"--mb-shadow-xl\":\r\n theme.shadows.xl,\r\n\r\n \"--mb-space-xs\":\r\n toCssValue(theme.spacing.xs),\r\n\r\n \"--mb-space-sm\":\r\n toCssValue(theme.spacing.sm),\r\n\r\n \"--mb-space-md\":\r\n toCssValue(theme.spacing.md),\r\n\r\n \"--mb-space-lg\":\r\n toCssValue(theme.spacing.lg),\r\n\r\n \"--mb-space-xl\":\r\n toCssValue(theme.spacing.xl),\r\n\r\n \"--mb-transition-fast\":\r\n theme.transitions.fast,\r\n\r\n \"--mb-transition\":\r\n theme.transitions.normal,\r\n\r\n \"--mb-transition-slow\":\r\n theme.transitions.slow,\r\n\r\n \"--mb-z-dropdown\":\r\n theme.zIndex.dropdown,\r\n\r\n \"--mb-z-sticky\":\r\n theme.zIndex.sticky,\r\n\r\n \"--mb-z-modal\":\r\n theme.zIndex.modal,\r\n\r\n \"--mb-z-toast\":\r\n theme.zIndex.toast,\r\n\r\n \"--mb-z-tooltip\":\r\n theme.zIndex.tooltip,\r\n };\r\n}","import {\r\n useContext,\r\n} from \"react\";\r\n\r\nimport {\r\n MainbaseContext,\r\n} from \"./MainbaseContext\";\r\n\r\nexport function useMainbaseTheme() {\r\n return useContext(MainbaseContext);\r\n}","import type {\r\n MainbaseComponentDefaults,\r\n} from \"./types\";\r\n\r\nimport {\r\n useMainbaseTheme,\r\n} from \"./useMainbaseTheme\";\r\n\r\nexport function useComponentDefaults<\r\n T extends keyof MainbaseComponentDefaults,\r\n>(\r\n component: T,\r\n): NonNullable<\r\n MainbaseComponentDefaults[T]\r\n> {\r\n const theme = useMainbaseTheme();\r\n\r\n return (\r\n theme.components[component] ?? {}\r\n ) as NonNullable<\r\n MainbaseComponentDefaults[T]\r\n >;\r\n}","import {\r\n cloneElement,\r\n isValidElement,\r\n type CSSProperties,\r\n type HTMLAttributes,\r\n type ReactNode,\r\n} from \"react\";\r\n\r\nimport \"./Icon.css\";\r\n\r\nexport interface IconProps\r\n extends HTMLAttributes<HTMLSpanElement> {\r\n children: ReactNode;\r\n size?: number;\r\n color?: string;\r\n decorative?: boolean;\r\n}\r\n\r\nexport function Icon({\r\n children,\r\n size = 18,\r\n color = \"currentColor\",\r\n decorative = true,\r\n className = \"\",\r\n style,\r\n ...props\r\n}: IconProps) {\r\n const classes = [\r\n \"mb-icon\",\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n const iconStyle = {\r\n \"--mb-icon-size\": `${size}px`,\r\n color,\r\n ...style,\r\n } as CSSProperties;\r\n\r\n const renderedIcon = isValidElement<{\r\n size?: number | string;\r\n color?: string;\r\n }>(children)\r\n ? cloneElement(children, {\r\n size,\r\n color,\r\n })\r\n : children;\r\n\r\n return (\r\n <span\r\n className={classes}\r\n style={iconStyle}\r\n aria-hidden={decorative ? true : undefined}\r\n {...props}\r\n >\r\n {renderedIcon}\r\n </span>\r\n );\r\n}","import type {\r\n HTMLAttributes,\r\n ReactNode,\r\n} from \"react\";\r\n\r\nimport { Icon } from \"../Icon\";\r\n\r\nimport \"./Alert.css\";\r\n\r\nexport interface AlertProps\r\n extends Omit<\r\n HTMLAttributes<HTMLDivElement>,\r\n \"title\"\r\n > {\r\n variant?: \"info\" | \"success\" | \"warning\" | \"danger\";\r\n title?: ReactNode;\r\n leftSection?: ReactNode;\r\n action?: ReactNode;\r\n}\r\n\r\nexport function Alert({\r\n variant = \"info\",\r\n title,\r\n leftSection,\r\n action,\r\n className = \"\",\r\n children,\r\n ...props\r\n}: AlertProps) {\r\n const classes = [\r\n \"mb-alert\",\r\n `mb-alert--${variant}`,\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n return (\r\n <div\r\n className={classes}\r\n role=\"alert\"\r\n {...props}\r\n >\r\n {leftSection ? (\r\n <div className=\"mb-alert__icon\">\r\n <Icon size={20}>\r\n {leftSection}\r\n </Icon>\r\n </div>\r\n ) : null}\r\n\r\n <div className=\"mb-alert__body\">\r\n {title ? (\r\n <div className=\"mb-alert__title\">\r\n {title}\r\n </div>\r\n ) : null}\r\n\r\n {children ? (\r\n <div className=\"mb-alert__content\">\r\n {children}\r\n </div>\r\n ) : null}\r\n </div>\r\n\r\n {action ? (\r\n <div className=\"mb-alert__action\">\r\n {action}\r\n </div>\r\n ) : null}\r\n </div>\r\n );\r\n}","import type {\r\n HTMLAttributes,\r\n ReactNode,\r\n} from \"react\";\r\n\r\nimport { useComponentDefaults } from \"../../provider\";\r\nimport { Icon } from \"../Icon\";\r\n\r\nimport \"./Badge.css\";\r\n\r\nexport interface BadgeProps\r\n extends HTMLAttributes<HTMLSpanElement> {\r\n variant?:\r\n | \"default\"\r\n | \"primary\"\r\n | \"success\"\r\n | \"warning\"\r\n | \"danger\";\r\n\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n\r\n leftSection?: ReactNode;\r\n rightSection?: ReactNode;\r\n}\r\n\r\nexport function Badge({\r\n variant,\r\n size,\r\n\r\n leftSection,\r\n rightSection,\r\n\r\n className = \"\",\r\n children,\r\n\r\n ...props\r\n}: BadgeProps) {\r\n const defaults =\r\n useComponentDefaults(\"Badge\");\r\n\r\n const resolvedVariant =\r\n variant ??\r\n defaults.variant ??\r\n \"default\";\r\n\r\n const resolvedSize =\r\n size ??\r\n defaults.size ??\r\n \"md\";\r\n\r\n const classes = [\r\n \"mb-badge\",\r\n `mb-badge--${resolvedVariant}`,\r\n `mb-badge--${resolvedSize}`,\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n const iconSize = {\r\n sm: 12,\r\n md: 14,\r\n lg: 16,\r\n }[resolvedSize];\r\n\r\n return (\r\n <span\r\n className={classes}\r\n {...props}\r\n >\r\n {leftSection != null ? (\r\n <Icon size={iconSize}>\r\n {leftSection}\r\n </Icon>\r\n ) : null}\r\n\r\n <span className=\"mb-badge__content\">\r\n {children}\r\n </span>\r\n\r\n {rightSection != null ? (\r\n <Icon size={iconSize}>\r\n {rightSection}\r\n </Icon>\r\n ) : null}\r\n </span>\r\n );\r\n}","import {\r\n forwardRef,\r\n type ButtonHTMLAttributes,\r\n type ReactNode,\r\n} from \"react\";\r\n\r\nimport {\r\n useComponentDefaults,\r\n} from \"../../provider\";\r\n\r\nimport {\r\n cx,\r\n} from \"../../utils\";\r\n\r\nimport {\r\n Icon,\r\n} from \"../Icon\";\r\n\r\nimport {\r\n Spinner,\r\n} from \"../Spinner\";\r\n\r\nimport \"./Button.css\";\r\n\r\n\r\nexport type ButtonVariant =\r\n | \"primary\"\r\n | \"secondary\"\r\n | \"outline\"\r\n | \"ghost\"\r\n | \"danger\";\r\n\r\n\r\nexport type ButtonSize =\r\n | \"sm\"\r\n | \"md\"\r\n | \"lg\";\r\n\r\n\r\nexport interface ButtonProps\r\n extends ButtonHTMLAttributes<HTMLButtonElement> {\r\n\r\n variant?: ButtonVariant;\r\n\r\n size?: ButtonSize;\r\n\r\n loading?: boolean;\r\n\r\n leftSection?: ReactNode;\r\n\r\n rightSection?: ReactNode;\r\n}\r\n\r\n\r\nexport const Button =\r\n forwardRef<\r\n HTMLButtonElement,\r\n ButtonProps\r\n >(function Button(\r\n {\r\n variant,\r\n\r\n size,\r\n\r\n loading = false,\r\n\r\n leftSection,\r\n\r\n rightSection,\r\n\r\n disabled,\r\n\r\n className = \"\",\r\n\r\n children,\r\n\r\n type = \"button\",\r\n\r\n ...props\r\n },\r\n\r\n ref,\r\n ) {\r\n\r\n const defaults =\r\n useComponentDefaults(\r\n \"Button\",\r\n );\r\n\r\n\r\n const resolvedVariant =\r\n variant ??\r\n defaults.variant ??\r\n \"primary\";\r\n\r\n\r\n const resolvedSize =\r\n size ??\r\n defaults.size ??\r\n \"md\";\r\n\r\n\r\n return (\r\n <button\r\n ref={ref}\r\n\r\n type={type}\r\n\r\n className={cx(\r\n \"mb-button\",\r\n\r\n `mb-button--${resolvedVariant}`,\r\n\r\n `mb-button--${resolvedSize}`,\r\n\r\n loading\r\n ? \"mb-button--loading\"\r\n : undefined,\r\n\r\n className,\r\n )}\r\n\r\n disabled={\r\n disabled ||\r\n loading\r\n }\r\n\r\n {...props}\r\n >\r\n\r\n {\r\n loading ? (\r\n <Spinner\r\n size={16}\r\n />\r\n ) : (\r\n leftSection && (\r\n <span\r\n className=\"mb-button__icon\"\r\n >\r\n <Icon size={18}>\r\n {leftSection}\r\n </Icon>\r\n </span>\r\n )\r\n )\r\n }\r\n\r\n\r\n <span\r\n className=\"mb-button__label\"\r\n >\r\n {children}\r\n </span>\r\n\r\n\r\n {\r\n rightSection && !loading ? (\r\n <span\r\n className=\"mb-button__icon\"\r\n >\r\n <Icon size={18}>\r\n {rightSection}\r\n </Icon>\r\n </span>\r\n ) : null\r\n }\r\n\r\n\r\n </button>\r\n );\r\n });","export type ClassValue =\r\n | string\r\n | number\r\n | bigint\r\n | false\r\n | null\r\n | undefined;\r\n\r\nexport function cx(\r\n ...classes: ClassValue[]\r\n): string {\r\n return classes\r\n .filter((value) => Boolean(value))\r\n .join(\" \");\r\n}","import type { CSSProperties, HTMLAttributes } from \"react\";\r\nimport \"./Spinner.css\";\r\n\r\nexport interface SpinnerProps\r\n extends HTMLAttributes<HTMLSpanElement> {\r\n size?: number;\r\n thickness?: number;\r\n color?: string;\r\n trackColor?: string;\r\n label?: string;\r\n}\r\n\r\nexport function Spinner({\r\n size = 40,\r\n thickness = 3,\r\n color,\r\n trackColor,\r\n label = \"Загрузка\",\r\n className = \"\",\r\n style,\r\n ...props\r\n}: SpinnerProps) {\r\n const spinnerStyle = {\r\n \"--mb-spinner-size\": `${size}px`,\r\n \"--mb-spinner-thickness\": `${thickness}px`,\r\n \"--mb-spinner-color\": color,\r\n \"--mb-spinner-track\": trackColor,\r\n ...style,\r\n } as CSSProperties;\r\n\r\n return (\r\n <span\r\n className={`mb-spinner ${className}`}\r\n style={spinnerStyle}\r\n role=\"status\"\r\n aria-label={label}\r\n {...props}\r\n />\r\n );\r\n}","import type {\r\n InputHTMLAttributes,\r\n ReactNode,\r\n} from \"react\";\r\n\r\nimport \"./Checkbox.css\";\r\n\r\nexport interface CheckboxProps\r\n extends Omit<\r\n InputHTMLAttributes<HTMLInputElement>,\r\n \"type\"\r\n > {\r\n label?: ReactNode;\r\n description?: ReactNode;\r\n}\r\n\r\nexport function Checkbox({\r\n label,\r\n description,\r\n className = \"\",\r\n disabled,\r\n ...props\r\n}: CheckboxProps) {\r\n const classes = [\r\n \"mb-checkbox\",\r\n disabled && \"mb-checkbox--disabled\",\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n return (\r\n <label className={classes}>\r\n <input\r\n type=\"checkbox\"\r\n className=\"mb-checkbox__input\"\r\n disabled={disabled}\r\n {...props}\r\n />\r\n\r\n <span\r\n className=\"mb-checkbox__control\"\r\n aria-hidden=\"true\"\r\n >\r\n <svg\r\n className=\"mb-checkbox__check\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n >\r\n <path\r\n d=\"M3.5 8.5L6.5 11.5L12.5 4.5\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n </span>\r\n\r\n {(label || description) && (\r\n <span className=\"mb-checkbox__body\">\r\n {label && (\r\n <span className=\"mb-checkbox__label\">\r\n {label}\r\n </span>\r\n )}\r\n\r\n {description && (\r\n <span className=\"mb-checkbox__description\">\r\n {description}\r\n </span>\r\n )}\r\n </span>\r\n )}\r\n </label>\r\n );\r\n}","import type {\r\n CSSProperties,\r\n HTMLAttributes,\r\n} from \"react\";\r\n\r\nimport \"./Group.css\";\r\n\r\nexport interface GroupProps\r\n extends HTMLAttributes<HTMLDivElement> {\r\n gap?: number;\r\n align?:\r\n | \"start\"\r\n | \"center\"\r\n | \"end\"\r\n | \"stretch\";\r\n justify?:\r\n | \"start\"\r\n | \"center\"\r\n | \"end\"\r\n | \"between\";\r\n wrap?: boolean;\r\n}\r\n\r\nexport function Group({\r\n gap = 12,\r\n align = \"center\",\r\n justify = \"start\",\r\n wrap = true,\r\n className = \"\",\r\n style,\r\n children,\r\n ...props\r\n}: GroupProps) {\r\n const groupStyle = {\r\n \"--mb-group-gap\": `${gap}px`,\r\n ...style,\r\n } as CSSProperties;\r\n\r\n const classes = [\r\n \"mb-group\",\r\n `mb-group--align-${align}`,\r\n `mb-group--justify-${justify}`,\r\n wrap\r\n ? \"mb-group--wrap\"\r\n : \"mb-group--nowrap\",\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n return (\r\n <div\r\n className={classes}\r\n style={groupStyle}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}","import {\r\n useEffect,\r\n useId,\r\n useRef,\r\n type HTMLAttributes,\r\n type ReactNode,\r\n} from \"react\";\r\n\r\nimport { useLockScroll } from \"../../hooks\";\r\nimport { useComponentDefaults } from \"../../provider\";\r\nimport { cx } from \"../../utils\";\r\n\r\nimport { Portal } from \"../Portal\";\r\n\r\nimport \"./Modal.css\";\r\n\r\nexport interface ModalProps\r\n extends Omit<\r\n HTMLAttributes<HTMLDivElement>,\r\n \"title\"\r\n > {\r\n opened: boolean;\r\n onClose: () => void;\r\n\r\n title?: ReactNode;\r\n description?: ReactNode;\r\n children?: ReactNode;\r\n footer?: ReactNode;\r\n\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n\r\n closeOnEscape?: boolean;\r\n closeOnOverlayClick?: boolean;\r\n withCloseButton?: boolean;\r\n}\r\n\r\nconst focusableSelector = [\r\n \"button:not([disabled])\",\r\n \"[href]\",\r\n \"input:not([disabled])\",\r\n \"select:not([disabled])\",\r\n \"textarea:not([disabled])\",\r\n '[tabindex]:not([tabindex=\"-1\"])',\r\n].join(\",\");\r\n\r\nexport function Modal({\r\n opened,\r\n onClose,\r\n\r\n title,\r\n description,\r\n children,\r\n footer,\r\n\r\n size,\r\n\r\n closeOnEscape,\r\n closeOnOverlayClick,\r\n withCloseButton,\r\n\r\n className = \"\",\r\n\r\n ...props\r\n}: ModalProps) {\r\n const defaults =\r\n useComponentDefaults(\"Modal\");\r\n\r\n const resolvedSize =\r\n size ??\r\n defaults.size ??\r\n \"md\";\r\n\r\n const resolvedCloseOnEscape =\r\n closeOnEscape ??\r\n defaults.closeOnEscape ??\r\n true;\r\n\r\n const resolvedCloseOnOverlayClick =\r\n closeOnOverlayClick ??\r\n defaults.closeOnOverlayClick ??\r\n true;\r\n\r\n const resolvedWithCloseButton =\r\n withCloseButton ??\r\n defaults.withCloseButton ??\r\n true;\r\n\r\n const titleId = useId();\r\n const descriptionId = useId();\r\n\r\n const modalRef =\r\n useRef<HTMLDivElement>(null);\r\n\r\n const previouslyFocusedRef =\r\n useRef<HTMLElement | null>(null);\r\n\r\n useLockScroll(opened);\r\n\r\n useEffect(() => {\r\n if (!opened) {\r\n return;\r\n }\r\n\r\n previouslyFocusedRef.current =\r\n document.activeElement instanceof HTMLElement\r\n ? document.activeElement\r\n : null;\r\n\r\n requestAnimationFrame(() => {\r\n const modal = modalRef.current;\r\n\r\n const firstFocusable =\r\n modal?.querySelector<HTMLElement>(\r\n focusableSelector,\r\n );\r\n\r\n if (firstFocusable) {\r\n firstFocusable.focus();\r\n } else {\r\n modal?.focus();\r\n }\r\n });\r\n\r\n function handleKeyDown(\r\n event: KeyboardEvent,\r\n ) {\r\n const modal = modalRef.current;\r\n\r\n if (!modal) {\r\n return;\r\n }\r\n\r\n if (\r\n event.key === \"Escape\" &&\r\n resolvedCloseOnEscape\r\n ) {\r\n event.preventDefault();\r\n onClose();\r\n return;\r\n }\r\n\r\n if (event.key !== \"Tab\") {\r\n return;\r\n }\r\n\r\n const focusableElements = Array.from(\r\n modal.querySelectorAll<HTMLElement>(\r\n focusableSelector,\r\n ),\r\n );\r\n\r\n if (focusableElements.length === 0) {\r\n event.preventDefault();\r\n modal.focus();\r\n return;\r\n }\r\n\r\n const firstElement =\r\n focusableElements[0];\r\n\r\n const lastElement =\r\n focusableElements[\r\n focusableElements.length - 1\r\n ];\r\n\r\n if (\r\n event.shiftKey &&\r\n document.activeElement === firstElement\r\n ) {\r\n event.preventDefault();\r\n lastElement.focus();\r\n\r\n return;\r\n }\r\n\r\n if (\r\n !event.shiftKey &&\r\n document.activeElement === lastElement\r\n ) {\r\n event.preventDefault();\r\n firstElement.focus();\r\n }\r\n }\r\n\r\n document.addEventListener(\r\n \"keydown\",\r\n handleKeyDown,\r\n );\r\n\r\n return () => {\r\n document.removeEventListener(\r\n \"keydown\",\r\n handleKeyDown,\r\n );\r\n\r\n requestAnimationFrame(() => {\r\n previouslyFocusedRef.current?.focus();\r\n });\r\n };\r\n }, [\r\n opened,\r\n onClose,\r\n resolvedCloseOnEscape,\r\n ]);\r\n\r\n if (!opened) {\r\n return null;\r\n }\r\n\r\n return (\r\n <Portal>\r\n <div\r\n className=\"mb-modal-root\"\r\n role=\"presentation\"\r\n >\r\n <div\r\n className=\"mb-modal__overlay\"\r\n aria-hidden=\"true\"\r\n onMouseDown={(event) => {\r\n if (\r\n resolvedCloseOnOverlayClick &&\r\n event.target === event.currentTarget\r\n ) {\r\n onClose();\r\n }\r\n }}\r\n >\r\n <div\r\n ref={modalRef}\r\n className={cx(\r\n \"mb-modal\",\r\n `mb-modal--${resolvedSize}`,\r\n className,\r\n )}\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n aria-labelledby={\r\n title != null\r\n ? titleId\r\n : undefined\r\n }\r\n aria-describedby={\r\n description != null\r\n ? descriptionId\r\n : undefined\r\n }\r\n tabIndex={-1}\r\n {...props}\r\n >\r\n {title != null ||\r\n description != null ||\r\n resolvedWithCloseButton ? (\r\n <div className=\"mb-modal__header\">\r\n <div className=\"mb-modal__heading\">\r\n {title != null ? (\r\n <div\r\n id={titleId}\r\n className=\"mb-modal__title\"\r\n >\r\n {title}\r\n </div>\r\n ) : null}\r\n\r\n {description != null ? (\r\n <div\r\n id={descriptionId}\r\n className=\"mb-modal__description\"\r\n >\r\n {description}\r\n </div>\r\n ) : null}\r\n </div>\r\n\r\n {resolvedWithCloseButton ? (\r\n <button\r\n type=\"button\"\r\n className=\"mb-modal__close\"\r\n aria-label=\"Закрыть модальное окно\"\r\n onClick={onClose}\r\n >\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n d=\"M7 7L17 17\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n />\r\n\r\n <path\r\n d=\"M17 7L7 17\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n ) : null}\r\n </div>\r\n ) : null}\r\n\r\n <div className=\"mb-modal__content\">\r\n {children}\r\n </div>\r\n\r\n {footer != null ? (\r\n <div className=\"mb-modal__footer\">\r\n {footer}\r\n </div>\r\n ) : null}\r\n </div>\r\n </div>\r\n </div>\r\n </Portal>\r\n );\r\n}","import {\r\n useEffect,\r\n useRef,\r\n type RefObject,\r\n} from \"react\";\r\n\r\nexport type ClickOutsideEvent =\r\n | \"mousedown\"\r\n | \"touchstart\"\r\n | \"pointerdown\";\r\n\r\nexport interface UseClickOutsideOptions {\r\n enabled?: boolean;\r\n events?: ClickOutsideEvent[];\r\n}\r\n\r\nconst defaultEvents: ClickOutsideEvent[] = [\r\n \"pointerdown\",\r\n];\r\n\r\nexport function useClickOutside<\r\n T extends HTMLElement,\r\n>(\r\n handler: (event: Event) => void,\r\n options: UseClickOutsideOptions = {},\r\n): RefObject<T | null> {\r\n const {\r\n enabled = true,\r\n events = defaultEvents,\r\n } = options;\r\n\r\n const elementRef =\r\n useRef<T | null>(null);\r\n\r\n const handlerRef =\r\n useRef(handler);\r\n\r\n useEffect(() => {\r\n handlerRef.current = handler;\r\n }, [handler]);\r\n\r\n useEffect(() => {\r\n if (!enabled) {\r\n return;\r\n }\r\n\r\n function listener(event: Event) {\r\n const element =\r\n elementRef.current;\r\n\r\n const target =\r\n event.target;\r\n\r\n if (\r\n !element ||\r\n !(target instanceof Node) ||\r\n element.contains(target)\r\n ) {\r\n return;\r\n }\r\n\r\n handlerRef.current(event);\r\n }\r\n\r\n events.forEach((eventName) => {\r\n document.addEventListener(\r\n eventName,\r\n listener,\r\n );\r\n });\r\n\r\n return () => {\r\n events.forEach((eventName) => {\r\n document.removeEventListener(\r\n eventName,\r\n listener,\r\n );\r\n });\r\n };\r\n }, [\r\n enabled,\r\n events,\r\n ]);\r\n\r\n return elementRef;\r\n}","import {\r\n useCallback,\r\n useState,\r\n} from \"react\";\r\n\r\nexport interface UseControllableStateOptions<T> {\r\n value?: T;\r\n defaultValue: T;\r\n onChange?: (value: T) => void;\r\n}\r\n\r\nexport function useControllableState<T>({\r\n value,\r\n defaultValue,\r\n onChange,\r\n}: UseControllableStateOptions<T>) {\r\n const [internalValue, setInternalValue] =\r\n useState(defaultValue);\r\n\r\n const controlled = value !== undefined;\r\n\r\n const currentValue = controlled\r\n ? value\r\n : internalValue;\r\n\r\n const setValue = useCallback(\r\n (\r\n nextValue:\r\n | T\r\n | ((current: T) => T),\r\n ) => {\r\n const resolvedValue =\r\n typeof nextValue === \"function\"\r\n ? (\r\n nextValue as (\r\n current: T,\r\n ) => T\r\n )(currentValue)\r\n : nextValue;\r\n\r\n if (!controlled) {\r\n setInternalValue(resolvedValue);\r\n }\r\n\r\n onChange?.(resolvedValue);\r\n },\r\n [\r\n controlled,\r\n currentValue,\r\n onChange,\r\n ],\r\n );\r\n\r\n return [\r\n currentValue,\r\n setValue,\r\n ] as const;\r\n}","import {\r\n useCallback,\r\n useState,\r\n} from \"react\";\r\n\r\nexport interface UseDisclosureHandlers {\r\n open: () => void;\r\n close: () => void;\r\n toggle: () => void;\r\n}\r\n\r\nexport type UseDisclosureReturn = [\r\n boolean,\r\n UseDisclosureHandlers,\r\n];\r\n\r\nexport function useDisclosure(\r\n initialValue = false,\r\n): UseDisclosureReturn {\r\n const [opened, setOpened] =\r\n useState(initialValue);\r\n\r\n const open = useCallback(() => {\r\n setOpened(true);\r\n }, []);\r\n\r\n const close = useCallback(() => {\r\n setOpened(false);\r\n }, []);\r\n\r\n const toggle = useCallback(() => {\r\n setOpened((current) => !current);\r\n }, []);\r\n\r\n return [\r\n opened,\r\n {\r\n open,\r\n close,\r\n toggle,\r\n },\r\n ];\r\n}","import { useEffect } from \"react\";\r\n\r\nexport function useLockScroll(\r\n locked = true,\r\n): void {\r\n useEffect(() => {\r\n if (!locked) {\r\n return;\r\n }\r\n\r\n const body = document.body;\r\n\r\n const previousOverflow =\r\n body.style.overflow;\r\n\r\n const previousPaddingRight =\r\n body.style.paddingRight;\r\n\r\n const scrollbarWidth =\r\n window.innerWidth -\r\n document.documentElement.clientWidth;\r\n\r\n body.style.overflow = \"hidden\";\r\n\r\n if (scrollbarWidth > 0) {\r\n body.style.paddingRight =\r\n `${scrollbarWidth}px`;\r\n }\r\n\r\n return () => {\r\n body.style.overflow =\r\n previousOverflow;\r\n\r\n body.style.paddingRight =\r\n previousPaddingRight;\r\n };\r\n }, [locked]);\r\n}","import {\r\n useContext,\r\n useEffect,\r\n useState,\r\n type ReactNode,\r\n} from \"react\";\r\n\r\nimport { createPortal } from \"react-dom\";\r\n\r\nimport {\r\n MainbasePortalContext,\r\n} from \"../../provider/PortalContext\";\r\n\r\nexport interface PortalProps {\r\n children: ReactNode;\r\n target?: HTMLElement | null;\r\n}\r\n\r\nexport function Portal({\r\n children,\r\n target,\r\n}: PortalProps) {\r\n const providerTarget =\r\n useContext(MainbasePortalContext);\r\n\r\n const [mounted, setMounted] =\r\n useState(false);\r\n\r\n useEffect(() => {\r\n setMounted(true);\r\n }, []);\r\n\r\n if (!mounted) {\r\n return null;\r\n }\r\n\r\n const resolvedTarget =\r\n target ??\r\n providerTarget ??\r\n document.body;\r\n\r\n return createPortal(\r\n children,\r\n resolvedTarget,\r\n );\r\n}","import type {\r\n InputHTMLAttributes,\r\n ReactNode,\r\n} from \"react\";\r\n\r\nimport \"./Radio.css\";\r\n\r\nexport interface RadioProps\r\n extends Omit<\r\n InputHTMLAttributes<HTMLInputElement>,\r\n \"type\"\r\n > {\r\n label?: ReactNode;\r\n description?: ReactNode;\r\n}\r\n\r\nexport function Radio({\r\n label,\r\n description,\r\n className = \"\",\r\n disabled,\r\n ...props\r\n}: RadioProps) {\r\n const classes = [\r\n \"mb-radio\",\r\n disabled && \"mb-radio--disabled\",\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n return (\r\n <label className={classes}>\r\n <input\r\n type=\"radio\"\r\n className=\"mb-radio__input\"\r\n disabled={disabled}\r\n {...props}\r\n />\r\n\r\n <span\r\n className=\"mb-radio__control\"\r\n aria-hidden=\"true\"\r\n >\r\n <span className=\"mb-radio__dot\" />\r\n </span>\r\n\r\n {(label || description) ? (\r\n <span className=\"mb-radio__body\">\r\n {label ? (\r\n <span className=\"mb-radio__label\">\r\n {label}\r\n </span>\r\n ) : null}\r\n\r\n {description ? (\r\n <span className=\"mb-radio__description\">\r\n {description}\r\n </span>\r\n ) : null}\r\n </span>\r\n ) : null}\r\n </label>\r\n );\r\n}","import type {\r\n HTMLAttributes,\r\n ReactNode,\r\n} from \"react\";\r\n\r\nimport \"./Radio.css\";\r\n\r\nexport interface RadioGroupProps\r\n extends HTMLAttributes<HTMLDivElement> {\r\n label?: ReactNode;\r\n description?: ReactNode;\r\n orientation?: \"vertical\" | \"horizontal\";\r\n}\r\n\r\nexport function RadioGroup({\r\n label,\r\n description,\r\n orientation = \"vertical\",\r\n className = \"\",\r\n children,\r\n ...props\r\n}: RadioGroupProps) {\r\n const classes = [\r\n \"mb-radio-group\",\r\n `mb-radio-group--${orientation}`,\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n return (\r\n <div\r\n className={classes}\r\n role=\"radiogroup\"\r\n {...props}\r\n >\r\n {(label || description) ? (\r\n <div className=\"mb-radio-group__header\">\r\n {label ? (\r\n <div className=\"mb-radio-group__label\">\r\n {label}\r\n </div>\r\n ) : null}\r\n\r\n {description ? (\r\n <div className=\"mb-radio-group__description\">\r\n {description}\r\n </div>\r\n ) : null}\r\n </div>\r\n ) : null}\r\n\r\n <div className=\"mb-radio-group__items\">\r\n {children}\r\n </div>\r\n </div>\r\n );\r\n}","import {\r\n useEffect,\r\n useId,\r\n useRef,\r\n type KeyboardEvent,\r\n type ReactNode,\r\n} from \"react\";\r\n\r\nimport {\r\n useClickOutside,\r\n useControllableState,\r\n useDisclosure,\r\n} from \"../../hooks\";\r\n\r\nimport {\r\n useComponentDefaults,\r\n} from \"../../provider\";\r\n\r\nimport { cx } from \"../../utils\";\r\n\r\nimport { Icon } from \"../Icon\";\r\n\r\nimport \"./Select.css\";\r\n\r\nexport interface SelectOption {\r\n value: string;\r\n label: ReactNode;\r\n disabled?: boolean;\r\n leftSection?: ReactNode;\r\n}\r\n\r\nexport interface SelectProps {\r\n options: SelectOption[];\r\n\r\n value?: string;\r\n defaultValue?: string;\r\n\r\n placeholder?: string;\r\n\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n\r\n leftSection?: ReactNode;\r\n\r\n disabled?: boolean;\r\n error?: boolean;\r\n\r\n className?: string;\r\n name?: string;\r\n\r\n onChange?: (\r\n value: string,\r\n option: SelectOption,\r\n ) => void;\r\n}\r\n\r\nexport function Select({\r\n options,\r\n\r\n value,\r\n defaultValue = \"\",\r\n\r\n placeholder = \"Выберите значение\",\r\n\r\n size,\r\n\r\n leftSection,\r\n\r\n disabled = false,\r\n error = false,\r\n\r\n className = \"\",\r\n name,\r\n\r\n onChange,\r\n}: SelectProps) {\r\n const defaults =\r\n useComponentDefaults(\"Select\");\r\n\r\n const resolvedSize =\r\n size ??\r\n defaults.size ??\r\n \"md\";\r\n\r\n const listboxId = useId();\r\n\r\n const triggerRef =\r\n useRef<HTMLButtonElement>(null);\r\n\r\n const optionRefs =\r\n useRef<Array<HTMLButtonElement | null>>([]);\r\n\r\n const [\r\n opened,\r\n {\r\n open,\r\n close,\r\n },\r\n ] = useDisclosure();\r\n\r\n const [\r\n selectedValue,\r\n setSelectedValue,\r\n ] = useControllableState<string>({\r\n value,\r\n defaultValue,\r\n });\r\n\r\n const selectedOption = options.find(\r\n (option) =>\r\n option.value === selectedValue,\r\n );\r\n\r\n const selectedIndex = options.findIndex(\r\n (option) =>\r\n option.value === selectedValue,\r\n );\r\n\r\n const firstEnabledIndex =\r\n options.findIndex(\r\n (option) => !option.disabled,\r\n );\r\n\r\n const [\r\n activeIndex,\r\n setActiveIndex,\r\n ] = useControllableState<number>({\r\n defaultValue:\r\n selectedIndex >= 0\r\n ? selectedIndex\r\n : firstEnabledIndex,\r\n });\r\n\r\n const rootRef =\r\n useClickOutside<HTMLDivElement>(\r\n () => close(),\r\n {\r\n enabled: opened,\r\n },\r\n );\r\n\r\n const iconSize = {\r\n sm: 16,\r\n md: 18,\r\n lg: 20,\r\n }[resolvedSize];\r\n\r\n const classes = cx(\r\n \"mb-select\",\r\n `mb-select--${resolvedSize}`,\r\n opened\r\n ? \"mb-select--opened\"\r\n : undefined,\r\n error\r\n ? \"mb-select--error\"\r\n : undefined,\r\n disabled\r\n ? \"mb-select--disabled\"\r\n : undefined,\r\n leftSection != null\r\n ? \"mb-select--with-section\"\r\n : undefined,\r\n className,\r\n );\r\n\r\n function getFirstEnabledIndex() {\r\n return options.findIndex(\r\n (option) => !option.disabled,\r\n );\r\n }\r\n\r\n function getLastEnabledIndex() {\r\n for (\r\n let index = options.length - 1;\r\n index >= 0;\r\n index -= 1\r\n ) {\r\n if (!options[index]?.disabled) {\r\n return index;\r\n }\r\n }\r\n\r\n return -1;\r\n }\r\n\r\n function findNextEnabled(\r\n startIndex: number,\r\n direction: 1 | -1,\r\n ) {\r\n if (options.length === 0) {\r\n return -1;\r\n }\r\n\r\n let index = startIndex;\r\n\r\n for (\r\n let attempt = 0;\r\n attempt < options.length;\r\n attempt += 1\r\n ) {\r\n index =\r\n (\r\n index +\r\n direction +\r\n options.length\r\n ) % options.length;\r\n\r\n if (!options[index]?.disabled) {\r\n return index;\r\n }\r\n }\r\n\r\n return -1;\r\n }\r\n\r\n function openSelect() {\r\n if (disabled) {\r\n return;\r\n }\r\n\r\n setActiveIndex(\r\n selectedIndex >= 0\r\n ? selectedIndex\r\n : getFirstEnabledIndex(),\r\n );\r\n\r\n open();\r\n }\r\n\r\n function closeSelect(\r\n restoreFocus = false,\r\n ) {\r\n close();\r\n\r\n if (restoreFocus) {\r\n requestAnimationFrame(() => {\r\n triggerRef.current?.focus();\r\n });\r\n }\r\n }\r\n\r\n function selectOption(\r\n option: SelectOption,\r\n ) {\r\n if (option.disabled) {\r\n return;\r\n }\r\n\r\n setSelectedValue(option.value);\r\n onChange?.(option.value, option);\r\n\r\n closeSelect(true);\r\n }\r\n\r\n function handleTriggerClick() {\r\n if (disabled) {\r\n return;\r\n }\r\n\r\n if (opened) {\r\n close();\r\n } else {\r\n openSelect();\r\n }\r\n }\r\n\r\n function handleTriggerKeyDown(\r\n event: KeyboardEvent<HTMLButtonElement>,\r\n ) {\r\n if (disabled) {\r\n return;\r\n }\r\n\r\n if (\r\n event.key === \"ArrowDown\" ||\r\n event.key === \"ArrowUp\"\r\n ) {\r\n event.preventDefault();\r\n\r\n if (!opened) {\r\n openSelect();\r\n return;\r\n }\r\n\r\n setActiveIndex((current) =>\r\n findNextEnabled(\r\n current,\r\n event.key === \"ArrowDown\"\r\n ? 1\r\n : -1,\r\n ),\r\n );\r\n\r\n return;\r\n }\r\n\r\n if (\r\n event.key === \"Enter\" ||\r\n event.key === \" \"\r\n ) {\r\n event.preventDefault();\r\n\r\n if (!opened) {\r\n openSelect();\r\n return;\r\n }\r\n\r\n const option =\r\n options[activeIndex];\r\n\r\n if (option) {\r\n selectOption(option);\r\n }\r\n\r\n return;\r\n }\r\n\r\n if (event.key === \"Escape\") {\r\n if (opened) {\r\n event.preventDefault();\r\n closeSelect(true);\r\n }\r\n\r\n return;\r\n }\r\n\r\n if (event.key === \"Home\") {\r\n event.preventDefault();\r\n\r\n if (!opened) {\r\n openSelect();\r\n }\r\n\r\n setActiveIndex(\r\n getFirstEnabledIndex(),\r\n );\r\n\r\n return;\r\n }\r\n\r\n if (event.key === \"End\") {\r\n event.preventDefault();\r\n\r\n if (!opened) {\r\n openSelect();\r\n }\r\n\r\n setActiveIndex(\r\n getLastEnabledIndex(),\r\n );\r\n }\r\n }\r\n\r\n function handleOptionKeyDown(\r\n event: KeyboardEvent<HTMLButtonElement>,\r\n index: number,\r\n ) {\r\n if (event.key === \"ArrowDown\") {\r\n event.preventDefault();\r\n\r\n setActiveIndex(\r\n findNextEnabled(index, 1),\r\n );\r\n\r\n return;\r\n }\r\n\r\n if (event.key === \"ArrowUp\") {\r\n event.preventDefault();\r\n\r\n setActiveIndex(\r\n findNextEnabled(index, -1),\r\n );\r\n\r\n return;\r\n }\r\n\r\n if (event.key === \"Home\") {\r\n event.preventDefault();\r\n\r\n setActiveIndex(\r\n getFirstEnabledIndex(),\r\n );\r\n\r\n return;\r\n }\r\n\r\n if (event.key === \"End\") {\r\n event.preventDefault();\r\n\r\n setActiveIndex(\r\n getLastEnabledIndex(),\r\n );\r\n\r\n return;\r\n }\r\n\r\n if (event.key === \"Escape\") {\r\n event.preventDefault();\r\n closeSelect(true);\r\n\r\n return;\r\n }\r\n\r\n if (event.key === \"Tab\") {\r\n close();\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if (\r\n !opened ||\r\n activeIndex < 0\r\n ) {\r\n return;\r\n }\r\n\r\n optionRefs.current[\r\n activeIndex\r\n ]?.focus();\r\n }, [\r\n opened,\r\n activeIndex,\r\n ]);\r\n\r\n useEffect(() => {\r\n if (selectedIndex >= 0) {\r\n setActiveIndex(selectedIndex);\r\n }\r\n }, [\r\n selectedIndex,\r\n setActiveIndex,\r\n ]);\r\n\r\n return (\r\n <div\r\n ref={rootRef}\r\n className={classes}\r\n >\r\n {name ? (\r\n <input\r\n type=\"hidden\"\r\n name={name}\r\n value={selectedValue}\r\n />\r\n ) : null}\r\n\r\n <button\r\n ref={triggerRef}\r\n type=\"button\"\r\n className=\"mb-select__trigger\"\r\n disabled={disabled}\r\n aria-haspopup=\"listbox\"\r\n aria-expanded={opened}\r\n aria-controls={listboxId}\r\n aria-invalid={error || undefined}\r\n onClick={handleTriggerClick}\r\n onKeyDown={handleTriggerKeyDown}\r\n >\r\n {leftSection != null ? (\r\n <span className=\"mb-select__section\">\r\n <Icon size={iconSize}>\r\n {leftSection}\r\n </Icon>\r\n </span>\r\n ) : null}\r\n\r\n <span\r\n className={cx(\r\n \"mb-select__value\",\r\n !selectedOption\r\n ? \"mb-select__placeholder\"\r\n : undefined,\r\n )}\r\n >\r\n {selectedOption\r\n ? selectedOption.label\r\n : placeholder}\r\n </span>\r\n\r\n <span\r\n className=\"mb-select__chevron\"\r\n aria-hidden=\"true\"\r\n >\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n >\r\n <path\r\n d=\"M7 10L12 15L17 10\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n </span>\r\n </button>\r\n\r\n {opened ? (\r\n <div\r\n id={listboxId}\r\n className=\"mb-select__dropdown\"\r\n role=\"listbox\"\r\n aria-label={placeholder}\r\n >\r\n <div className=\"mb-select__options\">\r\n {options.map(\r\n (option, index) => {\r\n const selected =\r\n option.value ===\r\n selectedValue;\r\n\r\n const active =\r\n index === activeIndex;\r\n\r\n return (\r\n <button\r\n key={option.value}\r\n ref={(element) => {\r\n optionRefs.current[\r\n index\r\n ] = element;\r\n }}\r\n type=\"button\"\r\n role=\"option\"\r\n aria-selected={selected}\r\n disabled={option.disabled}\r\n tabIndex={\r\n active ? 0 : -1\r\n }\r\n className={cx(\r\n \"mb-select__option\",\r\n selected\r\n ? \"mb-select__option--selected\"\r\n : undefined,\r\n active\r\n ? \"mb-select__option--active\"\r\n : undefined,\r\n )}\r\n onMouseEnter={() => {\r\n if (\r\n !option.disabled\r\n ) {\r\n setActiveIndex(index);\r\n }\r\n }}\r\n onClick={() => {\r\n selectOption(option);\r\n }}\r\n onKeyDown={(event) => {\r\n handleOptionKeyDown(\r\n event,\r\n index,\r\n );\r\n }}\r\n >\r\n {option.leftSection != null ? (\r\n <span className=\"mb-select__option-icon\">\r\n <Icon size={18}>\r\n {option.leftSection}\r\n </Icon>\r\n </span>\r\n ) : null}\r\n\r\n <span className=\"mb-select__option-label\">\r\n {option.label}\r\n </span>\r\n\r\n {selected ? (\r\n <span\r\n className=\"mb-select__check\"\r\n aria-hidden=\"true\"\r\n >\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n >\r\n <path\r\n d=\"M5 12.5L9.5 17L19 7.5\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2.2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n </span>\r\n ) : null}\r\n </button>\r\n );\r\n },\r\n )}\r\n </div>\r\n </div>\r\n ) : null}\r\n </div>\r\n );\r\n}","import type {\r\n CSSProperties,\r\n HTMLAttributes,\r\n} from \"react\";\r\n\r\nimport \"./Stack.css\";\r\n\r\nexport interface StackProps\r\n extends HTMLAttributes<HTMLDivElement> {\r\n gap?: number;\r\n align?:\r\n | \"stretch\"\r\n | \"start\"\r\n | \"center\"\r\n | \"end\";\r\n justify?:\r\n | \"start\"\r\n | \"center\"\r\n | \"end\"\r\n | \"between\";\r\n}\r\n\r\nexport function Stack({\r\n gap = 16,\r\n align = \"stretch\",\r\n justify = \"start\",\r\n className = \"\",\r\n style,\r\n children,\r\n ...props\r\n}: StackProps) {\r\n const stackStyle = {\r\n \"--mb-stack-gap\": `${gap}px`,\r\n ...style,\r\n } as CSSProperties;\r\n\r\n const classes = [\r\n \"mb-stack\",\r\n `mb-stack--align-${align}`,\r\n `mb-stack--justify-${justify}`,\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n return (\r\n <div\r\n className={classes}\r\n style={stackStyle}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}","import type {\r\n InputHTMLAttributes,\r\n ReactNode,\r\n} from \"react\";\r\n\r\nimport \"./Switch.css\";\r\n\r\nexport interface SwitchProps\r\n extends Omit<\r\n InputHTMLAttributes<HTMLInputElement>,\r\n \"type\"\r\n > {\r\n label?: ReactNode;\r\n description?: ReactNode;\r\n}\r\n\r\nexport function Switch({\r\n label,\r\n description,\r\n className = \"\",\r\n disabled,\r\n ...props\r\n}: SwitchProps) {\r\n const classes = [\r\n \"mb-switch\",\r\n disabled && \"mb-switch--disabled\",\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n return (\r\n <label className={classes}>\r\n <input\r\n type=\"checkbox\"\r\n className=\"mb-switch__input\"\r\n disabled={disabled}\r\n {...props}\r\n />\r\n\r\n <span\r\n className=\"mb-switch__control\"\r\n aria-hidden=\"true\"\r\n >\r\n <span className=\"mb-switch__thumb\" />\r\n </span>\r\n\r\n {(label || description) && (\r\n <span className=\"mb-switch__body\">\r\n {label ? (\r\n <span className=\"mb-switch__label\">\r\n {label}\r\n </span>\r\n ) : null}\r\n\r\n {description ? (\r\n <span className=\"mb-switch__description\">\r\n {description}\r\n </span>\r\n ) : null}\r\n </span>\r\n )}\r\n </label>\r\n );\r\n}","import {\r\n useCallback,\r\n useMemo,\r\n useState,\r\n type PropsWithChildren,\r\n} from \"react\";\r\n\r\nimport {\r\n useComponentDefaults,\r\n} from \"../../provider\";\r\n\r\nimport { Toast } from \"./Toast\";\r\nimport { ToastContext } from \"./ToastContext\";\r\n\r\nimport type {\r\n ToastApi,\r\n ToastItem,\r\n ToastOptions,\r\n ToastPosition,\r\n ToastShortcutInput,\r\n ToastVariant,\r\n} from \"./types\";\r\n\r\nimport \"./Toast.css\";\r\n\r\nexport interface ToastProviderProps\r\n extends PropsWithChildren {\r\n position?: ToastPosition;\r\n defaultDuration?: number;\r\n maxToasts?: number;\r\n}\r\n\r\nfunction createToastId() {\r\n return [\r\n \"mb-toast\",\r\n Date.now().toString(36),\r\n Math.random().toString(36).slice(2),\r\n ].join(\"-\");\r\n}\r\n\r\nfunction normalizeShortcut(\r\n input: ToastShortcutInput,\r\n variant: ToastVariant,\r\n): ToastOptions {\r\n if (typeof input === \"string\") {\r\n return {\r\n message: input,\r\n variant,\r\n };\r\n }\r\n\r\n return {\r\n ...input,\r\n variant,\r\n };\r\n}\r\n\r\nexport function ToastProvider({\r\n children,\r\n position,\r\n defaultDuration,\r\n maxToasts,\r\n}: ToastProviderProps) {\r\n const defaults =\r\n useComponentDefaults(\"Toast\");\r\n\r\n const resolvedPosition =\r\n position ??\r\n defaults.position ??\r\n \"top-right\";\r\n\r\n const resolvedDuration =\r\n defaultDuration ??\r\n defaults.duration ??\r\n 4000;\r\n\r\n const resolvedMaxToasts =\r\n maxToasts ??\r\n defaults.maxToasts ??\r\n 5;\r\n\r\n const [toasts, setToasts] =\r\n useState<ToastItem[]>([]);\r\n\r\n const remove = useCallback((id: string) => {\r\n setToasts((current) =>\r\n current.filter(\r\n (toast) => toast.id !== id,\r\n ),\r\n );\r\n }, []);\r\n\r\n const clear = useCallback(() => {\r\n setToasts([]);\r\n }, []);\r\n\r\n const show = useCallback(\r\n (input: ToastOptions | string) => {\r\n const options: ToastOptions =\r\n typeof input === \"string\"\r\n ? {\r\n message: input,\r\n }\r\n : input;\r\n\r\n const id =\r\n options.id ??\r\n createToastId();\r\n\r\n const toast: ToastItem = {\r\n id,\r\n\r\n title: options.title,\r\n message: options.message,\r\n\r\n variant:\r\n options.variant ??\r\n \"info\",\r\n\r\n duration:\r\n options.duration ??\r\n resolvedDuration,\r\n\r\n closable:\r\n options.closable ??\r\n true,\r\n\r\n icon: options.icon,\r\n };\r\n\r\n setToasts((current) => {\r\n const filtered =\r\n current.filter(\r\n (item) => item.id !== id,\r\n );\r\n\r\n return [\r\n ...filtered,\r\n toast,\r\n ].slice(-resolvedMaxToasts);\r\n });\r\n\r\n return id;\r\n },\r\n [\r\n resolvedDuration,\r\n resolvedMaxToasts,\r\n ],\r\n );\r\n\r\n const createShortcut = useCallback(\r\n (variant: ToastVariant) =>\r\n (input: ToastShortcutInput) =>\r\n show(\r\n normalizeShortcut(\r\n input,\r\n variant,\r\n ),\r\n ),\r\n [show],\r\n );\r\n\r\n const api = useMemo<ToastApi>(\r\n () => ({\r\n show,\r\n\r\n info:\r\n createShortcut(\"info\"),\r\n\r\n success:\r\n createShortcut(\"success\"),\r\n\r\n warning:\r\n createShortcut(\"warning\"),\r\n\r\n danger:\r\n createShortcut(\"danger\"),\r\n\r\n remove,\r\n clear,\r\n }),\r\n [\r\n show,\r\n createShortcut,\r\n remove,\r\n clear,\r\n ],\r\n );\r\n\r\n return (\r\n <ToastContext.Provider value={api}>\r\n {children}\r\n\r\n <div\r\n className={[\r\n \"mb-toast-viewport\",\r\n `mb-toast-viewport--${resolvedPosition}`,\r\n ].join(\" \")}\r\n aria-label=\"Уведомления\"\r\n >\r\n {toasts.map((toast) => (\r\n <Toast\r\n key={toast.id}\r\n toast={toast}\r\n onClose={remove}\r\n />\r\n ))}\r\n </div>\r\n </ToastContext.Provider>\r\n );\r\n}","import {\r\n useCallback,\r\n useEffect,\r\n useRef,\r\n useState,\r\n} from \"react\";\r\n\r\nimport { Icon } from \"../Icon\";\r\n\r\nimport type { ToastItem } from \"./types\";\r\n\r\ninterface ToastProps {\r\n toast: ToastItem;\r\n onClose: (id: string) => void;\r\n}\r\n\r\nfunction DefaultToastIcon({\r\n variant,\r\n}: {\r\n variant: ToastItem[\"variant\"];\r\n}) {\r\n if (variant === \"success\") {\r\n return (\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n d=\"M5 12.5L9.5 17L19 7.5\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2.2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n }\r\n\r\n if (variant === \"warning\") {\r\n return (\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n d=\"M12 8V13\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2.2\"\r\n strokeLinecap=\"round\"\r\n />\r\n\r\n <path\r\n d=\"M12 17H12.01\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2.8\"\r\n strokeLinecap=\"round\"\r\n />\r\n\r\n <path\r\n d=\"M10.3 4.8L3.4 17.1C2.8 18.2 3.6 19.5 4.9 19.5H19.1C20.4 19.5 21.2 18.2 20.6 17.1L13.7 4.8C13 3.6 11 3.6 10.3 4.8Z\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.8\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n }\r\n\r\n if (variant === \"danger\") {\r\n return (\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n d=\"M8 8L16 16\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2.2\"\r\n strokeLinecap=\"round\"\r\n />\r\n\r\n <path\r\n d=\"M16 8L8 16\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2.2\"\r\n strokeLinecap=\"round\"\r\n />\r\n </svg>\r\n );\r\n }\r\n\r\n return (\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n d=\"M12 11V17\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2.2\"\r\n strokeLinecap=\"round\"\r\n />\r\n\r\n <path\r\n d=\"M12 7H12.01\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2.8\"\r\n strokeLinecap=\"round\"\r\n />\r\n\r\n <circle\r\n cx=\"12\"\r\n cy=\"12\"\r\n r=\"9\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.8\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function Toast({\r\n toast,\r\n onClose,\r\n}: ToastProps) {\r\n const [closing, setClosing] = useState(false);\r\n\r\n const timerRef =\r\n useRef<ReturnType<typeof setTimeout> | null>(null);\r\n\r\n const startedAtRef = useRef(0);\r\n const remainingRef = useRef(toast.duration);\r\n\r\n const finishClose = useCallback(() => {\r\n setClosing(true);\r\n\r\n window.setTimeout(() => {\r\n onClose(toast.id);\r\n }, 180);\r\n }, [onClose, toast.id]);\r\n\r\n const clearTimer = useCallback(() => {\r\n if (!timerRef.current) {\r\n return;\r\n }\r\n\r\n clearTimeout(timerRef.current);\r\n timerRef.current = null;\r\n\r\n const elapsed =\r\n Date.now() - startedAtRef.current;\r\n\r\n remainingRef.current = Math.max(\r\n remainingRef.current - elapsed,\r\n 0,\r\n );\r\n }, []);\r\n\r\n const startTimer = useCallback(() => {\r\n if (toast.duration <= 0 || closing) {\r\n return;\r\n }\r\n\r\n startedAtRef.current = Date.now();\r\n\r\n timerRef.current = setTimeout(() => {\r\n finishClose();\r\n }, remainingRef.current);\r\n }, [\r\n closing,\r\n finishClose,\r\n toast.duration,\r\n ]);\r\n\r\n useEffect(() => {\r\n startTimer();\r\n\r\n return clearTimer;\r\n }, [clearTimer, startTimer]);\r\n\r\n const role =\r\n toast.variant === \"danger\" ||\r\n toast.variant === \"warning\"\r\n ? \"alert\"\r\n : \"status\";\r\n\r\n return (\r\n <div\r\n className={[\r\n \"mb-toast\",\r\n `mb-toast--${toast.variant}`,\r\n closing && \"mb-toast--closing\",\r\n ]\r\n .filter(Boolean)\r\n .join(\" \")}\r\n role={role}\r\n aria-live={\r\n role === \"alert\"\r\n ? \"assertive\"\r\n : \"polite\"\r\n }\r\n onMouseEnter={clearTimer}\r\n onMouseLeave={startTimer}\r\n >\r\n <div className=\"mb-toast__icon\">\r\n <Icon size={20}>\r\n {toast.icon ?? (\r\n <DefaultToastIcon\r\n variant={toast.variant}\r\n />\r\n )}\r\n </Icon>\r\n </div>\r\n\r\n <div className=\"mb-toast__body\">\r\n {toast.title ? (\r\n <div className=\"mb-toast__title\">\r\n {toast.title}\r\n </div>\r\n ) : null}\r\n\r\n <div className=\"mb-toast__message\">\r\n {toast.message}\r\n </div>\r\n </div>\r\n\r\n {toast.closable ? (\r\n <button\r\n type=\"button\"\r\n className=\"mb-toast__close\"\r\n aria-label=\"Закрыть уведомление\"\r\n onClick={finishClose}\r\n >\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n d=\"M7 7L17 17\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n />\r\n\r\n <path\r\n d=\"M17 7L7 17\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n ) : null}\r\n\r\n {toast.duration > 0 ? (\r\n <div\r\n className=\"mb-toast__progress\"\r\n style={{\r\n animationDuration:\r\n `${toast.duration}ms`,\r\n }}\r\n />\r\n ) : null}\r\n </div>\r\n );\r\n}","import { createContext } from \"react\";\r\n\r\nimport type { ToastApi } from \"./types\";\r\n\r\nexport const ToastContext =\r\n createContext<ToastApi | null>(null);","import { useContext } from \"react\";\r\n\r\nimport { ToastContext } from \"./ToastContext\";\r\n\r\nexport function useToast() {\r\n const context = useContext(ToastContext);\r\n\r\n if (!context) {\r\n throw new Error(\r\n \"useToast должен использоваться внутри ToastProvider\",\r\n );\r\n }\r\n\r\n return context;\r\n}","import {\r\n useState,\r\n type HTMLAttributes,\r\n type ImgHTMLAttributes,\r\n type ReactNode,\r\n} from \"react\";\r\n\r\nimport { useMainbaseTheme } from \"../../provider\";\r\nimport { cx } from \"../../utils\";\r\n\r\nimport \"./Avatar.css\";\r\n\r\nexport interface AvatarProps\r\n extends Omit<HTMLAttributes<HTMLDivElement>, \"color\"> {\r\n src?: string;\r\n alt?: string;\r\n\r\n children?: ReactNode;\r\n\r\n size?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\r\n radius?: \"sm\" | \"md\" | \"lg\" | \"full\";\r\n\r\n color?: string;\r\n background?: string;\r\n\r\n status?:\r\n | \"online\"\r\n | \"offline\"\r\n | \"busy\"\r\n | \"away\";\r\n\r\n imageProps?: Omit<\r\n ImgHTMLAttributes<HTMLImageElement>,\r\n \"src\" | \"alt\"\r\n >;\r\n}\r\n\r\nfunction getInitials(value: ReactNode) {\r\n if (typeof value !== \"string\") {\r\n return value;\r\n }\r\n\r\n const parts = value\r\n .trim()\r\n .split(/\\s+/)\r\n .filter(Boolean);\r\n\r\n if (parts.length === 0) {\r\n return \"\";\r\n }\r\n\r\n if (parts.length === 1) {\r\n return parts[0].slice(0, 2).toUpperCase();\r\n }\r\n\r\n return (\r\n parts[0][0] +\r\n parts[parts.length - 1][0]\r\n ).toUpperCase();\r\n}\r\n\r\nexport function Avatar({\r\n src,\r\n alt = \"\",\r\n children,\r\n\r\n size = \"md\",\r\n radius = \"full\",\r\n\r\n color,\r\n background,\r\n\r\n status,\r\n\r\n imageProps,\r\n\r\n className = \"\",\r\n style,\r\n\r\n ...props\r\n}: AvatarProps) {\r\n const theme = useMainbaseTheme();\r\n\r\n const [imageFailed, setImageFailed] =\r\n useState(false);\r\n\r\n const showImage =\r\n Boolean(src) && !imageFailed;\r\n\r\n const classes = cx(\r\n \"mb-avatar\",\r\n `mb-avatar--${size}`,\r\n `mb-avatar--radius-${radius}`,\r\n className,\r\n );\r\n\r\n return (\r\n <div\r\n className={classes}\r\n style={{\r\n color:\r\n color ??\r\n theme.colors.text,\r\n background:\r\n background ??\r\n `color-mix(in srgb, ${theme.colors.primary} 16%, transparent)`,\r\n ...style,\r\n }}\r\n {...props}\r\n >\r\n {showImage ? (\r\n <img\r\n {...imageProps}\r\n src={src}\r\n alt={alt}\r\n className={cx(\r\n \"mb-avatar__image\",\r\n imageProps?.className,\r\n )}\r\n onError={(event) => {\r\n setImageFailed(true);\r\n imageProps?.onError?.(event);\r\n }}\r\n />\r\n ) : (\r\n <span className=\"mb-avatar__fallback\">\r\n {getInitials(children)}\r\n </span>\r\n )}\r\n\r\n {status ? (\r\n <span\r\n className={cx(\r\n \"mb-avatar__status\",\r\n `mb-avatar__status--${status}`,\r\n )}\r\n aria-label={status}\r\n />\r\n ) : null}\r\n </div>\r\n );\r\n}","import {\r\n Children,\r\n cloneElement,\r\n isValidElement,\r\n type HTMLAttributes,\r\n type ReactElement,\r\n type ReactNode,\r\n} from \"react\";\r\n\r\nimport { cx } from \"../../utils\";\r\n\r\nimport type {\r\n AvatarProps,\r\n} from \"./Avatar\";\r\n\r\nimport \"./Avatar.css\";\r\n\r\nexport interface AvatarGroupProps\r\n extends HTMLAttributes<HTMLDivElement> {\r\n children: ReactNode;\r\n\r\n max?: number;\r\n\r\n spacing?: \"sm\" | \"md\" | \"lg\";\r\n\r\n size?: AvatarProps[\"size\"];\r\n radius?: AvatarProps[\"radius\"];\r\n\r\n total?: number;\r\n\r\n renderOverflow?: (\r\n hiddenCount: number,\r\n ) => ReactNode;\r\n}\r\n\r\nexport function AvatarGroup({\r\n children,\r\n\r\n max,\r\n spacing = \"md\",\r\n\r\n size,\r\n radius,\r\n\r\n total,\r\n\r\n renderOverflow,\r\n\r\n className = \"\",\r\n\r\n ...props\r\n}: AvatarGroupProps) {\r\n const items = Children\r\n .toArray(children)\r\n .filter(isValidElement) as ReactElement<\r\n AvatarProps\r\n >[];\r\n\r\n const visibleItems =\r\n max === undefined\r\n ? items\r\n : items.slice(0, max);\r\n\r\n const actualTotal =\r\n total ?? items.length;\r\n\r\n const hiddenCount = Math.max(\r\n actualTotal - visibleItems.length,\r\n 0,\r\n );\r\n\r\n return (\r\n <div\r\n className={cx(\r\n \"mb-avatar-group\",\r\n `mb-avatar-group--spacing-${spacing}`,\r\n className,\r\n )}\r\n {...props}\r\n >\r\n {visibleItems.map((child, index) =>\r\n cloneElement(child, {\r\n size: child.props.size ?? size,\r\n radius:\r\n child.props.radius ?? radius,\r\n className: cx(\r\n \"mb-avatar-group__item\",\r\n child.props.className,\r\n ),\r\n style: {\r\n zIndex:\r\n visibleItems.length - index,\r\n ...child.props.style,\r\n },\r\n }),\r\n )}\r\n\r\n {hiddenCount > 0 ? (\r\n renderOverflow ? (\r\n <div className=\"mb-avatar-group__overflow\">\r\n {renderOverflow(hiddenCount)}\r\n </div>\r\n ) : (\r\n <div\r\n className={cx(\r\n \"mb-avatar\",\r\n `mb-avatar--${size ?? \"md\"}`,\r\n `mb-avatar--radius-${\r\n radius ?? \"full\"\r\n }`,\r\n \"mb-avatar-group__item\",\r\n \"mb-avatar-group__more\",\r\n )}\r\n aria-label={`Ещё ${hiddenCount}`}\r\n style={{\r\n zIndex: 0,\r\n }}\r\n >\r\n +{hiddenCount}\r\n </div>\r\n )\r\n ) : null}\r\n </div>\r\n );\r\n}","import type {\r\n CSSProperties,\r\n HTMLAttributes,\r\n ReactNode,\r\n} from \"react\";\r\n\r\nimport { cx } from \"../../utils\";\r\n\r\nimport \"./Progress.css\";\r\n\r\nexport interface ProgressProps\r\n extends Omit<\r\n HTMLAttributes<HTMLDivElement>,\r\n \"color\"\r\n > {\r\n value?: number;\r\n\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n\r\n variant?:\r\n | \"primary\"\r\n | \"success\"\r\n | \"warning\"\r\n | \"danger\";\r\n\r\n label?: ReactNode;\r\n\r\n showValue?: boolean;\r\n\r\n indeterminate?: boolean;\r\n}\r\n\r\nfunction clampValue(value: number) {\r\n return Math.min(\r\n Math.max(value, 0),\r\n 100,\r\n );\r\n}\r\n\r\nexport function Progress({\r\n value = 0,\r\n\r\n size = \"md\",\r\n\r\n variant = \"primary\",\r\n\r\n label,\r\n\r\n showValue = false,\r\n\r\n indeterminate = false,\r\n\r\n className = \"\",\r\n style,\r\n\r\n ...props\r\n}: ProgressProps) {\r\n const safeValue =\r\n clampValue(value);\r\n\r\n const progressStyle = {\r\n \"--mb-progress-value\":\r\n `${safeValue}%`,\r\n ...style,\r\n } as CSSProperties;\r\n\r\n return (\r\n <div\r\n className={cx(\r\n \"mb-progress\",\r\n `mb-progress--${size}`,\r\n `mb-progress--${variant}`,\r\n indeterminate\r\n ? \"mb-progress--indeterminate\"\r\n : undefined,\r\n className,\r\n )}\r\n style={progressStyle}\r\n {...props}\r\n >\r\n {label != null || showValue ? (\r\n <div className=\"mb-progress__header\">\r\n {label != null ? (\r\n <div className=\"mb-progress__label\">\r\n {label}\r\n </div>\r\n ) : (\r\n <span />\r\n )}\r\n\r\n {showValue && !indeterminate ? (\r\n <div className=\"mb-progress__value\">\r\n {safeValue}%\r\n </div>\r\n ) : null}\r\n </div>\r\n ) : null}\r\n\r\n <div\r\n className=\"mb-progress__track\"\r\n role=\"progressbar\"\r\n aria-valuemin={0}\r\n aria-valuemax={100}\r\n aria-valuenow={\r\n indeterminate\r\n ? undefined\r\n : safeValue\r\n }\r\n aria-valuetext={\r\n indeterminate\r\n ? \"Загрузка\"\r\n : `${safeValue}%`\r\n }\r\n >\r\n <div className=\"mb-progress__bar\" />\r\n </div>\r\n </div>\r\n );\r\n}","import type {\r\n CSSProperties,\r\n HTMLAttributes,\r\n} from \"react\";\r\n\r\nimport { cx } from \"../../utils\";\r\n\r\nimport \"./Skeleton.css\";\r\n\r\nexport interface SkeletonProps\r\n extends HTMLAttributes<HTMLDivElement> {\r\n width?: number | string;\r\n height?: number | string;\r\n\r\n circle?: boolean;\r\n\r\n radius?: \"sm\" | \"md\" | \"lg\";\r\n\r\n visible?: boolean;\r\n\r\n animate?: boolean;\r\n}\r\n\r\nexport function Skeleton({\r\n width,\r\n height,\r\n\r\n circle = false,\r\n\r\n radius = \"md\",\r\n\r\n visible = true,\r\n\r\n animate = true,\r\n\r\n className = \"\",\r\n style,\r\n\r\n ...props\r\n}: SkeletonProps) {\r\n if (!visible) {\r\n return null;\r\n }\r\n\r\n const skeletonStyle = {\r\n width,\r\n height,\r\n ...style,\r\n } as CSSProperties;\r\n\r\n return (\r\n <div\r\n className={cx(\r\n \"mb-skeleton\",\r\n `mb-skeleton--radius-${radius}`,\r\n circle && \"mb-skeleton--circle\",\r\n animate && \"mb-skeleton--animate\",\r\n className,\r\n )}\r\n style={skeletonStyle}\r\n aria-hidden=\"true\"\r\n {...props}\r\n />\r\n );\r\n}","import {\r\n Children,\r\n cloneElement,\r\n createContext,\r\n isValidElement,\r\n useContext,\r\n useId,\r\n useMemo,\r\n useRef,\r\n type ButtonHTMLAttributes,\r\n type HTMLAttributes,\r\n type KeyboardEvent,\r\n type ReactElement,\r\n type ReactNode,\r\n} from \"react\";\r\n\r\nimport {\r\n useControllableState,\r\n} from \"../../hooks\";\r\n\r\nimport {\r\n useComponentDefaults,\r\n} from \"../../provider\";\r\n\r\nimport {\r\n cx,\r\n} from \"../../utils\";\r\n\r\nimport {\r\n Icon,\r\n} from \"../Icon\";\r\n\r\nimport \"./Tabs.css\";\r\n\r\nexport type TabsOrientation =\r\n | \"horizontal\"\r\n | \"vertical\";\r\n\r\nexport type TabsVariant =\r\n | \"underline\"\r\n | \"pill\";\r\n\r\nexport type TabsSize =\r\n | \"sm\"\r\n | \"md\"\r\n | \"lg\";\r\n\r\ninterface TabsContextValue {\r\n value: string | null;\r\n\r\n setValue: (\r\n value: string,\r\n ) => void;\r\n\r\n orientation: TabsOrientation;\r\n variant: TabsVariant;\r\n size: TabsSize;\r\n\r\n id: string;\r\n}\r\n\r\nconst TabsContext =\r\n createContext<TabsContextValue | null>(\r\n null,\r\n );\r\n\r\nfunction useTabsContext() {\r\n const context =\r\n useContext(TabsContext);\r\n\r\n if (!context) {\r\n throw new Error(\r\n \"Компоненты Tabs должны использоваться внутри <Tabs>\",\r\n );\r\n }\r\n\r\n return context;\r\n}\r\n\r\n/* ==========================================================\r\n Tabs Root\r\n========================================================== */\r\n\r\nexport interface TabsProps\r\n extends Omit<\r\n HTMLAttributes<HTMLDivElement>,\r\n \"defaultValue\" | \"onChange\"\r\n > {\r\n value?: string | null;\r\n defaultValue?: string | null;\r\n\r\n onChange?: (\r\n value: string,\r\n ) => void;\r\n\r\n orientation?: TabsOrientation;\r\n variant?: TabsVariant;\r\n size?: TabsSize;\r\n}\r\n\r\nexport function Tabs({\r\n value,\r\n defaultValue = null,\r\n onChange,\r\n\r\n orientation = \"horizontal\",\r\n variant,\r\n size,\r\n\r\n className = \"\",\r\n children,\r\n\r\n ...props\r\n}: TabsProps) {\r\n const defaults =\r\n useComponentDefaults(\"Tabs\");\r\n\r\n const resolvedVariant =\r\n variant ??\r\n defaults.variant ??\r\n \"underline\";\r\n\r\n const resolvedSize =\r\n size ??\r\n defaults.size ??\r\n \"md\";\r\n\r\n const [\r\n currentValue,\r\n setCurrentValue,\r\n ] = useControllableState<\r\n string | null\r\n >({\r\n value,\r\n defaultValue,\r\n onChange: (nextValue) => {\r\n if (nextValue !== null) {\r\n onChange?.(nextValue);\r\n }\r\n },\r\n });\r\n\r\n const generatedId = useId();\r\n\r\n const contextValue =\r\n useMemo<TabsContextValue>(\r\n () => ({\r\n value: currentValue,\r\n\r\n setValue: (\r\n nextValue: string,\r\n ) => {\r\n setCurrentValue(nextValue);\r\n },\r\n\r\n orientation,\r\n variant: resolvedVariant,\r\n size: resolvedSize,\r\n\r\n id: generatedId,\r\n }),\r\n [\r\n currentValue,\r\n generatedId,\r\n orientation,\r\n resolvedSize,\r\n resolvedVariant,\r\n setCurrentValue,\r\n ],\r\n );\r\n\r\n return (\r\n <TabsContext.Provider\r\n value={contextValue}\r\n >\r\n <div\r\n className={cx(\r\n \"mb-tabs\",\r\n `mb-tabs--${orientation}`,\r\n `mb-tabs--${resolvedVariant}`,\r\n `mb-tabs--${resolvedSize}`,\r\n className,\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n </TabsContext.Provider>\r\n );\r\n}\r\n\r\n/* ==========================================================\r\n Tabs List\r\n========================================================== */\r\n\r\nexport interface TabsListProps\r\n extends HTMLAttributes<HTMLDivElement> {\r\n grow?: boolean;\r\n}\r\n\r\nexport function TabsList({\r\n grow = false,\r\n className = \"\",\r\n children,\r\n onKeyDown,\r\n ...props\r\n}: TabsListProps) {\r\n const {\r\n orientation,\r\n value,\r\n setValue,\r\n } = useTabsContext();\r\n\r\n const listRef =\r\n useRef<HTMLDivElement>(null);\r\n\r\n function getEnabledTabs() {\r\n if (!listRef.current) {\r\n return [];\r\n }\r\n\r\n return Array.from(\r\n listRef.current.querySelectorAll<\r\n HTMLButtonElement\r\n >(\r\n '.mb-tabs__tab:not(:disabled)',\r\n ),\r\n );\r\n }\r\n\r\n function activateTab(\r\n tab: HTMLButtonElement,\r\n ) {\r\n const tabValue =\r\n tab.dataset.value;\r\n\r\n if (!tabValue) {\r\n return;\r\n }\r\n\r\n setValue(tabValue);\r\n tab.focus();\r\n }\r\n\r\n function handleKeyDown(\r\n event: KeyboardEvent<HTMLDivElement>,\r\n ) {\r\n onKeyDown?.(event);\r\n\r\n if (event.defaultPrevented) {\r\n return;\r\n }\r\n\r\n const horizontal =\r\n orientation === \"horizontal\";\r\n\r\n const isNextKey =\r\n horizontal\r\n ? event.key === \"ArrowRight\"\r\n : event.key === \"ArrowDown\";\r\n\r\n const isPreviousKey =\r\n horizontal\r\n ? event.key === \"ArrowLeft\"\r\n : event.key === \"ArrowUp\";\r\n\r\n if (\r\n !isNextKey &&\r\n !isPreviousKey &&\r\n event.key !== \"Home\" &&\r\n event.key !== \"End\"\r\n ) {\r\n return;\r\n }\r\n\r\n const tabs = getEnabledTabs();\r\n\r\n if (tabs.length === 0) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n\r\n const activeElement =\r\n document.activeElement;\r\n\r\n let currentIndex =\r\n tabs.findIndex(\r\n (tab) =>\r\n tab === activeElement,\r\n );\r\n\r\n if (currentIndex < 0) {\r\n currentIndex =\r\n tabs.findIndex(\r\n (tab) =>\r\n tab.dataset.value ===\r\n value,\r\n );\r\n }\r\n\r\n if (event.key === \"Home\") {\r\n activateTab(tabs[0]);\r\n return;\r\n }\r\n\r\n if (event.key === \"End\") {\r\n activateTab(\r\n tabs[tabs.length - 1],\r\n );\r\n\r\n return;\r\n }\r\n\r\n const direction =\r\n isNextKey ? 1 : -1;\r\n\r\n const nextIndex =\r\n (\r\n currentIndex +\r\n direction +\r\n tabs.length\r\n ) % tabs.length;\r\n\r\n activateTab(tabs[nextIndex]);\r\n }\r\n\r\n return (\r\n <div\r\n ref={listRef}\r\n className={cx(\r\n \"mb-tabs__list\",\r\n grow\r\n ? \"mb-tabs__list--grow\"\r\n : undefined,\r\n className,\r\n )}\r\n role=\"tablist\"\r\n aria-orientation={orientation}\r\n onKeyDown={handleKeyDown}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\n/* ==========================================================\r\n Tabs Tab\r\n========================================================== */\r\n\r\nexport interface TabsTabProps\r\n extends ButtonHTMLAttributes<HTMLButtonElement> {\r\n value: string;\r\n\r\n leftSection?: ReactNode;\r\n rightSection?: ReactNode;\r\n}\r\n\r\nexport function TabsTab({\r\n value,\r\n\r\n leftSection,\r\n rightSection,\r\n\r\n disabled = false,\r\n\r\n className = \"\",\r\n children,\r\n\r\n onClick,\r\n\r\n ...props\r\n}: TabsTabProps) {\r\n const {\r\n value: currentValue,\r\n setValue,\r\n size,\r\n id,\r\n } = useTabsContext();\r\n\r\n const selected =\r\n currentValue === value;\r\n\r\n const iconSize = {\r\n sm: 14,\r\n md: 16,\r\n lg: 18,\r\n }[size];\r\n\r\n const tabId =\r\n `${id}-tab-${value}`;\r\n\r\n const panelId =\r\n `${id}-panel-${value}`;\r\n\r\n return (\r\n <button\r\n type=\"button\"\r\n id={tabId}\r\n className={cx(\r\n \"mb-tabs__tab\",\r\n selected\r\n ? \"mb-tabs__tab--active\"\r\n : undefined,\r\n className,\r\n )}\r\n role=\"tab\"\r\n data-value={value}\r\n aria-selected={selected}\r\n aria-controls={panelId}\r\n disabled={disabled}\r\n tabIndex={selected ? 0 : -1}\r\n onClick={(event) => {\r\n onClick?.(event);\r\n\r\n if (\r\n event.defaultPrevented ||\r\n disabled\r\n ) {\r\n return;\r\n }\r\n\r\n setValue(value);\r\n }}\r\n {...props}\r\n >\r\n {leftSection != null ? (\r\n <span className=\"mb-tabs__section\">\r\n <Icon size={iconSize}>\r\n {leftSection}\r\n </Icon>\r\n </span>\r\n ) : null}\r\n\r\n <span className=\"mb-tabs__label\">\r\n {children}\r\n </span>\r\n\r\n {rightSection != null ? (\r\n <span className=\"mb-tabs__section\">\r\n <Icon size={iconSize}>\r\n {rightSection}\r\n </Icon>\r\n </span>\r\n ) : null}\r\n </button>\r\n );\r\n}\r\n\r\n/* ==========================================================\r\n Tabs Panel\r\n========================================================== */\r\n\r\nexport interface TabsPanelProps\r\n extends HTMLAttributes<HTMLDivElement> {\r\n value: string;\r\n\r\n keepMounted?: boolean;\r\n}\r\n\r\nexport function TabsPanel({\r\n value,\r\n keepMounted = false,\r\n\r\n className = \"\",\r\n children,\r\n\r\n ...props\r\n}: TabsPanelProps) {\r\n const {\r\n value: currentValue,\r\n id,\r\n } = useTabsContext();\r\n\r\n const active =\r\n currentValue === value;\r\n\r\n if (!active && !keepMounted) {\r\n return null;\r\n }\r\n\r\n return (\r\n <div\r\n id={`${id}-panel-${value}`}\r\n className={cx(\r\n \"mb-tabs__panel\",\r\n active\r\n ? \"mb-tabs__panel--active\"\r\n : undefined,\r\n className,\r\n )}\r\n role=\"tabpanel\"\r\n aria-labelledby={\r\n `${id}-tab-${value}`\r\n }\r\n hidden={!active}\r\n tabIndex={0}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\n/* ==========================================================\r\n Compound API\r\n========================================================== */\r\n\r\nTabs.List = TabsList;\r\nTabs.Tab = TabsTab;\r\nTabs.Panel = TabsPanel;","import {\r\n cloneElement,\r\n isValidElement,\r\n useCallback,\r\n useEffect,\r\n useId,\r\n useRef,\r\n useState,\r\n type FocusEvent,\r\n type MouseEvent,\r\n type MutableRefObject,\r\n type ReactElement,\r\n type ReactNode,\r\n type Ref,\r\n} from \"react\";\r\n\r\nimport { cx } from \"../../utils\";\r\nimport { Portal } from \"../Portal\";\r\n\r\nimport \"./Tooltip.css\";\r\n\r\nexport type TooltipPosition =\r\n | \"top\"\r\n | \"right\"\r\n | \"bottom\"\r\n | \"left\";\r\n\r\nexport interface TooltipProps {\r\n children: ReactElement;\r\n label: ReactNode;\r\n\r\n position?: TooltipPosition;\r\n\r\n offset?: number;\r\n openDelay?: number;\r\n closeDelay?: number;\r\n\r\n disabled?: boolean;\r\n withArrow?: boolean;\r\n\r\n className?: string;\r\n}\r\n\r\ninterface TooltipCoordinates {\r\n top: number;\r\n left: number;\r\n}\r\n\r\nfunction assignRef<T>(\r\n ref: Ref<T> | undefined,\r\n value: T | null,\r\n) {\r\n if (typeof ref === \"function\") {\r\n ref(value);\r\n return;\r\n }\r\n\r\n if (ref && \"current\" in ref) {\r\n (\r\n ref as MutableRefObject<T | null>\r\n ).current = value;\r\n }\r\n}\r\n\r\nexport function Tooltip({\r\n children,\r\n label,\r\n\r\n position = \"top\",\r\n\r\n offset = 8,\r\n openDelay = 300,\r\n closeDelay = 100,\r\n\r\n disabled = false,\r\n withArrow = true,\r\n\r\n className = \"\",\r\n}: TooltipProps) {\r\n const tooltipId = useId();\r\n\r\n const triggerRef =\r\n useRef<HTMLElement | null>(null);\r\n\r\n const tooltipRef =\r\n useRef<HTMLDivElement | null>(null);\r\n\r\n const openTimerRef =\r\n useRef<ReturnType<typeof setTimeout> | null>(\r\n null,\r\n );\r\n\r\n const closeTimerRef =\r\n useRef<ReturnType<typeof setTimeout> | null>(\r\n null,\r\n );\r\n\r\n const [opened, setOpened] =\r\n useState(false);\r\n\r\n const [positioned, setPositioned] =\r\n useState(false);\r\n\r\n const [coordinates, setCoordinates] =\r\n useState<TooltipCoordinates>({\r\n top: 0,\r\n left: 0,\r\n });\r\n\r\n const clearTimers = useCallback(() => {\r\n if (openTimerRef.current) {\r\n clearTimeout(openTimerRef.current);\r\n openTimerRef.current = null;\r\n }\r\n\r\n if (closeTimerRef.current) {\r\n clearTimeout(closeTimerRef.current);\r\n closeTimerRef.current = null;\r\n }\r\n }, []);\r\n\r\n const openTooltip = useCallback(() => {\r\n if (disabled) {\r\n return;\r\n }\r\n\r\n clearTimers();\r\n\r\n openTimerRef.current = setTimeout(() => {\r\n setPositioned(false);\r\n setOpened(true);\r\n }, openDelay);\r\n }, [\r\n clearTimers,\r\n disabled,\r\n openDelay,\r\n ]);\r\n\r\n const closeTooltip = useCallback(() => {\r\n clearTimers();\r\n\r\n closeTimerRef.current = setTimeout(() => {\r\n setOpened(false);\r\n setPositioned(false);\r\n }, closeDelay);\r\n }, [\r\n clearTimers,\r\n closeDelay,\r\n ]);\r\n\r\n const updatePosition = useCallback(() => {\r\n const trigger =\r\n triggerRef.current;\r\n\r\n const tooltip =\r\n tooltipRef.current;\r\n\r\n if (!trigger || !tooltip) {\r\n return;\r\n }\r\n\r\n const triggerRect =\r\n trigger.getBoundingClientRect();\r\n\r\n const tooltipRect =\r\n tooltip.getBoundingClientRect();\r\n\r\n let top = 0;\r\n let left = 0;\r\n\r\n switch (position) {\r\n case \"top\": {\r\n top =\r\n triggerRect.top -\r\n tooltipRect.height -\r\n offset;\r\n\r\n left =\r\n triggerRect.left +\r\n triggerRect.width / 2 -\r\n tooltipRect.width / 2;\r\n\r\n break;\r\n }\r\n\r\n case \"bottom\": {\r\n top =\r\n triggerRect.bottom +\r\n offset;\r\n\r\n left =\r\n triggerRect.left +\r\n triggerRect.width / 2 -\r\n tooltipRect.width / 2;\r\n\r\n break;\r\n }\r\n\r\n case \"left\": {\r\n top =\r\n triggerRect.top +\r\n triggerRect.height / 2 -\r\n tooltipRect.height / 2;\r\n\r\n left =\r\n triggerRect.left -\r\n tooltipRect.width -\r\n offset;\r\n\r\n break;\r\n }\r\n\r\n case \"right\": {\r\n top =\r\n triggerRect.top +\r\n triggerRect.height / 2 -\r\n tooltipRect.height / 2;\r\n\r\n left =\r\n triggerRect.right +\r\n offset;\r\n\r\n break;\r\n }\r\n }\r\n\r\n const viewportPadding = 8;\r\n\r\n left = Math.max(\r\n viewportPadding,\r\n Math.min(\r\n left,\r\n window.innerWidth -\r\n tooltipRect.width -\r\n viewportPadding,\r\n ),\r\n );\r\n\r\n top = Math.max(\r\n viewportPadding,\r\n Math.min(\r\n top,\r\n window.innerHeight -\r\n tooltipRect.height -\r\n viewportPadding,\r\n ),\r\n );\r\n\r\n setCoordinates({\r\n top,\r\n left,\r\n });\r\n\r\n setPositioned(true);\r\n }, [\r\n position,\r\n offset,\r\n ]);\r\n\r\n const setTooltipRef = useCallback(\r\n (\r\n element: HTMLDivElement | null,\r\n ) => {\r\n tooltipRef.current =\r\n element;\r\n\r\n if (element) {\r\n requestAnimationFrame(() => {\r\n updatePosition();\r\n });\r\n }\r\n },\r\n [updatePosition],\r\n );\r\n\r\n useEffect(() => {\r\n if (!opened) {\r\n return;\r\n }\r\n\r\n requestAnimationFrame(() => {\r\n updatePosition();\r\n });\r\n\r\n window.addEventListener(\r\n \"resize\",\r\n updatePosition,\r\n );\r\n\r\n window.addEventListener(\r\n \"scroll\",\r\n updatePosition,\r\n true,\r\n );\r\n\r\n return () => {\r\n window.removeEventListener(\r\n \"resize\",\r\n updatePosition,\r\n );\r\n\r\n window.removeEventListener(\r\n \"scroll\",\r\n updatePosition,\r\n true,\r\n );\r\n };\r\n }, [\r\n opened,\r\n updatePosition,\r\n ]);\r\n\r\n useEffect(() => {\r\n function handleKeyDown(\r\n event: KeyboardEvent,\r\n ) {\r\n if (\r\n event.key === \"Escape\" &&\r\n opened\r\n ) {\r\n setOpened(false);\r\n setPositioned(false);\r\n }\r\n }\r\n\r\n document.addEventListener(\r\n \"keydown\",\r\n handleKeyDown,\r\n );\r\n\r\n return () => {\r\n document.removeEventListener(\r\n \"keydown\",\r\n handleKeyDown,\r\n );\r\n\r\n clearTimers();\r\n };\r\n }, [\r\n opened,\r\n clearTimers,\r\n ]);\r\n\r\n if (!isValidElement(children)) {\r\n return null;\r\n }\r\n\r\n const child =\r\n children as ReactElement<{\r\n ref?: Ref<HTMLElement>;\r\n\r\n onMouseEnter?: (\r\n event: MouseEvent<HTMLElement>,\r\n ) => void;\r\n\r\n onMouseLeave?: (\r\n event: MouseEvent<HTMLElement>,\r\n ) => void;\r\n\r\n onFocus?: (\r\n event: FocusEvent<HTMLElement>,\r\n ) => void;\r\n\r\n onBlur?: (\r\n event: FocusEvent<HTMLElement>,\r\n ) => void;\r\n\r\n \"aria-describedby\"?: string;\r\n }>;\r\n\r\n const mergedChild = cloneElement(child, {\r\n ref: (\r\n node: HTMLElement | null,\r\n ) => {\r\n triggerRef.current = node;\r\n\r\n assignRef(\r\n child.props.ref,\r\n node,\r\n );\r\n },\r\n\r\n onMouseEnter: (event) => {\r\n child.props.onMouseEnter?.(event);\r\n openTooltip();\r\n },\r\n\r\n onMouseLeave: (event) => {\r\n child.props.onMouseLeave?.(event);\r\n closeTooltip();\r\n },\r\n\r\n onFocus: (event) => {\r\n child.props.onFocus?.(event);\r\n openTooltip();\r\n },\r\n\r\n onBlur: (event) => {\r\n child.props.onBlur?.(event);\r\n closeTooltip();\r\n },\r\n\r\n \"aria-describedby\":\r\n opened\r\n ? tooltipId\r\n : child.props[\r\n \"aria-describedby\"\r\n ],\r\n });\r\n\r\n return (\r\n <>\r\n {mergedChild}\r\n\r\n {opened ? (\r\n <Portal>\r\n <div\r\n ref={setTooltipRef}\r\n id={tooltipId}\r\n role=\"tooltip\"\r\n className={cx(\r\n \"mb-tooltip\",\r\n `mb-tooltip--${position}`,\r\n withArrow\r\n ? \"mb-tooltip--with-arrow\"\r\n : undefined,\r\n className,\r\n )}\r\n style={{\r\n top: coordinates.top,\r\n left: coordinates.left,\r\n\r\n visibility:\r\n positioned\r\n ? \"visible\"\r\n : \"hidden\",\r\n }}\r\n onMouseEnter={() => {\r\n clearTimers();\r\n }}\r\n onMouseLeave={closeTooltip}\r\n >\r\n <span className=\"mb-tooltip__label\">\r\n {label}\r\n </span>\r\n\r\n {withArrow ? (\r\n <span\r\n className=\"mb-tooltip__arrow\"\r\n aria-hidden=\"true\"\r\n />\r\n ) : null}\r\n </div>\r\n </Portal>\r\n ) : null}\r\n </>\r\n );\r\n}","import {\r\n createContext,\r\n useContext,\r\n useId,\r\n useMemo,\r\n useRef,\r\n type ButtonHTMLAttributes,\r\n type HTMLAttributes,\r\n type KeyboardEvent,\r\n type ReactNode,\r\n} from \"react\";\r\n\r\nimport {\r\n useControllableState,\r\n} from \"../../hooks\";\r\n\r\nimport {\r\n useComponentDefaults,\r\n} from \"../../provider\";\r\n\r\nimport {\r\n cx,\r\n} from \"../../utils\";\r\n\r\nimport {\r\n Icon,\r\n} from \"../Icon\";\r\n\r\nimport \"./Accordion.css\";\r\n\r\nexport type AccordionType =\r\n | \"single\"\r\n | \"multiple\";\r\n\r\nexport type AccordionVariant =\r\n | \"default\"\r\n | \"separated\";\r\n\r\nexport type AccordionSize =\r\n | \"sm\"\r\n | \"md\"\r\n | \"lg\";\r\n\r\nexport type AccordionChevronPosition =\r\n | \"left\"\r\n | \"right\";\r\n\r\nexport type AccordionValue =\r\n | string\r\n | string[]\r\n | null;\r\n\r\ninterface AccordionContextValue {\r\n type: AccordionType;\r\n value: AccordionValue;\r\n\r\n toggleItem: (\r\n itemValue: string,\r\n ) => void;\r\n\r\n variant: AccordionVariant;\r\n size: AccordionSize;\r\n\r\n chevronPosition:\r\n AccordionChevronPosition;\r\n\r\n rootId: string;\r\n\r\n rootRef:\r\n React.RefObject<HTMLDivElement | null>;\r\n}\r\n\r\ninterface AccordionItemContextValue {\r\n value: string;\r\n opened: boolean;\r\n disabled: boolean;\r\n\r\n controlId: string;\r\n panelId: string;\r\n}\r\n\r\nconst AccordionContext =\r\n createContext<AccordionContextValue | null>(\r\n null,\r\n );\r\n\r\nconst AccordionItemContext =\r\n createContext<AccordionItemContextValue | null>(\r\n null,\r\n );\r\n\r\nfunction useAccordionContext() {\r\n const context =\r\n useContext(AccordionContext);\r\n\r\n if (!context) {\r\n throw new Error(\r\n \"Accordion-компоненты должны использоваться внутри <Accordion>\",\r\n );\r\n }\r\n\r\n return context;\r\n}\r\n\r\nfunction useAccordionItemContext() {\r\n const context =\r\n useContext(AccordionItemContext);\r\n\r\n if (!context) {\r\n throw new Error(\r\n \"Accordion.Control и Accordion.Panel должны использоваться внутри <Accordion.Item>\",\r\n );\r\n }\r\n\r\n return context;\r\n}\r\n\r\nfunction normalizeValue(\r\n type: AccordionType,\r\n value: AccordionValue,\r\n): AccordionValue {\r\n if (type === \"multiple\") {\r\n if (Array.isArray(value)) {\r\n return value;\r\n }\r\n\r\n return value == null\r\n ? []\r\n : [value];\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n return value[0] ?? null;\r\n }\r\n\r\n return value ?? null;\r\n}\r\n\r\n/* ==========================================================\r\n Accordion Root\r\n========================================================== */\r\n\r\nexport interface AccordionProps\r\n extends Omit<\r\n HTMLAttributes<HTMLDivElement>,\r\n \"defaultValue\" | \"onChange\"\r\n > {\r\n type?: AccordionType;\r\n\r\n value?: AccordionValue;\r\n defaultValue?: AccordionValue;\r\n\r\n onChange?: (\r\n value: AccordionValue,\r\n ) => void;\r\n\r\n variant?: AccordionVariant;\r\n size?: AccordionSize;\r\n\r\n chevronPosition?:\r\n AccordionChevronPosition;\r\n\r\n allowCollapse?: boolean;\r\n}\r\n\r\nfunction AccordionRoot({\r\n type = \"single\",\r\n\r\n value,\r\n defaultValue,\r\n\r\n onChange,\r\n\r\n variant,\r\n size,\r\n\r\n chevronPosition = \"right\",\r\n allowCollapse = true,\r\n\r\n className = \"\",\r\n children,\r\n\r\n ...props\r\n}: AccordionProps) {\r\n const defaults =\r\n useComponentDefaults(\"Accordion\");\r\n\r\n const resolvedVariant =\r\n variant ??\r\n defaults.variant ??\r\n \"default\";\r\n\r\n const resolvedSize =\r\n size ??\r\n defaults.size ??\r\n \"md\";\r\n\r\n const initialValue =\r\n normalizeValue(\r\n type,\r\n defaultValue ??\r\n (type === \"multiple\"\r\n ? []\r\n : null),\r\n );\r\n\r\n const [\r\n currentValue,\r\n setCurrentValue,\r\n ] = useControllableState<AccordionValue>({\r\n value:\r\n value === undefined\r\n ? undefined\r\n : normalizeValue(type, value),\r\n\r\n defaultValue: initialValue,\r\n\r\n onChange,\r\n });\r\n\r\n const rootId = useId();\r\n\r\n const rootRef =\r\n useRef<HTMLDivElement>(null);\r\n\r\n function toggleItem(\r\n itemValue: string,\r\n ) {\r\n if (type === \"multiple\") {\r\n const currentItems =\r\n Array.isArray(currentValue)\r\n ? currentValue\r\n : [];\r\n\r\n const itemOpened =\r\n currentItems.includes(itemValue);\r\n\r\n const nextValue = itemOpened\r\n ? currentItems.filter(\r\n (valueItem) =>\r\n valueItem !== itemValue,\r\n )\r\n : [\r\n ...currentItems,\r\n itemValue,\r\n ];\r\n\r\n setCurrentValue(nextValue);\r\n\r\n return;\r\n }\r\n\r\n const itemOpened =\r\n currentValue === itemValue;\r\n\r\n if (\r\n itemOpened &&\r\n !allowCollapse\r\n ) {\r\n return;\r\n }\r\n\r\n setCurrentValue(\r\n itemOpened\r\n ? null\r\n : itemValue,\r\n );\r\n }\r\n\r\n const contextValue =\r\n useMemo<AccordionContextValue>(\r\n () => ({\r\n type,\r\n value: currentValue,\r\n\r\n toggleItem,\r\n\r\n variant: resolvedVariant,\r\n size: resolvedSize,\r\n\r\n chevronPosition,\r\n\r\n rootId,\r\n rootRef,\r\n }),\r\n [\r\n type,\r\n currentValue,\r\n resolvedVariant,\r\n resolvedSize,\r\n chevronPosition,\r\n rootId,\r\n ],\r\n );\r\n\r\n return (\r\n <AccordionContext.Provider\r\n value={contextValue}\r\n >\r\n <div\r\n ref={rootRef}\r\n className={cx(\r\n \"mb-accordion\",\r\n `mb-accordion--${resolvedVariant}`,\r\n `mb-accordion--${resolvedSize}`,\r\n `mb-accordion--chevron-${chevronPosition}`,\r\n className,\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n </AccordionContext.Provider>\r\n );\r\n}\r\n\r\n/* ==========================================================\r\n Accordion Item\r\n========================================================== */\r\n\r\nexport interface AccordionItemProps\r\n extends HTMLAttributes<HTMLDivElement> {\r\n value: string;\r\n disabled?: boolean;\r\n}\r\n\r\nfunction AccordionItem({\r\n value,\r\n disabled = false,\r\n\r\n className = \"\",\r\n children,\r\n\r\n ...props\r\n}: AccordionItemProps) {\r\n const accordion =\r\n useAccordionContext();\r\n\r\n const opened =\r\n accordion.type === \"multiple\"\r\n ? Array.isArray(\r\n accordion.value,\r\n ) &&\r\n accordion.value.includes(value)\r\n : accordion.value === value;\r\n\r\n const safeValue =\r\n value.replace(\r\n /[^a-zA-Z0-9_-]/g,\r\n \"-\",\r\n );\r\n\r\n const controlId =\r\n `${accordion.rootId}-control-${safeValue}`;\r\n\r\n const panelId =\r\n `${accordion.rootId}-panel-${safeValue}`;\r\n\r\n const contextValue =\r\n useMemo<AccordionItemContextValue>(\r\n () => ({\r\n value,\r\n opened,\r\n disabled,\r\n\r\n controlId,\r\n panelId,\r\n }),\r\n [\r\n value,\r\n opened,\r\n disabled,\r\n controlId,\r\n panelId,\r\n ],\r\n );\r\n\r\n return (\r\n <AccordionItemContext.Provider\r\n value={contextValue}\r\n >\r\n <div\r\n className={cx(\r\n \"mb-accordion__item\",\r\n opened\r\n ? \"mb-accordion__item--opened\"\r\n : undefined,\r\n disabled\r\n ? \"mb-accordion__item--disabled\"\r\n : undefined,\r\n className,\r\n )}\r\n data-value={value}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n </AccordionItemContext.Provider>\r\n );\r\n}\r\n\r\n/* ==========================================================\r\n Accordion Control\r\n========================================================== */\r\n\r\nexport interface AccordionControlProps\r\n extends ButtonHTMLAttributes<HTMLButtonElement> {\r\n leftSection?: ReactNode;\r\n rightSection?: ReactNode;\r\n\r\n chevron?: ReactNode;\r\n}\r\n\r\nfunction AccordionControl({\r\n leftSection,\r\n rightSection,\r\n\r\n chevron,\r\n\r\n className = \"\",\r\n children,\r\n\r\n onClick,\r\n onKeyDown,\r\n\r\n ...props\r\n}: AccordionControlProps) {\r\n const accordion =\r\n useAccordionContext();\r\n\r\n const item =\r\n useAccordionItemContext();\r\n\r\n const iconSize = {\r\n sm: 16,\r\n md: 18,\r\n lg: 20,\r\n }[accordion.size];\r\n\r\n function getControls() {\r\n const root =\r\n accordion.rootRef.current;\r\n\r\n if (!root) {\r\n return [];\r\n }\r\n\r\n return Array.from(\r\n root.querySelectorAll<HTMLButtonElement>(\r\n \".mb-accordion__control:not(:disabled)\",\r\n ),\r\n );\r\n }\r\n\r\n function handleKeyboard(\r\n event: KeyboardEvent<HTMLButtonElement>,\r\n ) {\r\n onKeyDown?.(event);\r\n\r\n if (event.defaultPrevented) {\r\n return;\r\n }\r\n\r\n const validKeys = [\r\n \"ArrowDown\",\r\n \"ArrowUp\",\r\n \"Home\",\r\n \"End\",\r\n ];\r\n\r\n if (\r\n !validKeys.includes(event.key)\r\n ) {\r\n return;\r\n }\r\n\r\n const controls =\r\n getControls();\r\n\r\n if (controls.length === 0) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n\r\n const currentIndex =\r\n controls.indexOf(\r\n event.currentTarget,\r\n );\r\n\r\n if (event.key === \"Home\") {\r\n controls[0]?.focus();\r\n\r\n return;\r\n }\r\n\r\n if (event.key === \"End\") {\r\n controls[\r\n controls.length - 1\r\n ]?.focus();\r\n\r\n return;\r\n }\r\n\r\n const direction =\r\n event.key === \"ArrowDown\"\r\n ? 1\r\n : -1;\r\n\r\n const nextIndex =\r\n (\r\n currentIndex +\r\n direction +\r\n controls.length\r\n ) % controls.length;\r\n\r\n controls[nextIndex]?.focus();\r\n }\r\n\r\n const chevronNode =\r\n chevron ?? (\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n >\r\n <path\r\n d=\"M7 10L12 15L17 10\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n\r\n const renderedChevron = (\r\n <span\r\n className=\"mb-accordion__chevron\"\r\n aria-hidden=\"true\"\r\n >\r\n <Icon size={iconSize}>\r\n {chevronNode}\r\n </Icon>\r\n </span>\r\n );\r\n\r\n return (\r\n <button\r\n type=\"button\"\r\n id={item.controlId}\r\n className={cx(\r\n \"mb-accordion__control\",\r\n className,\r\n )}\r\n aria-expanded={item.opened}\r\n aria-controls={item.panelId}\r\n disabled={item.disabled}\r\n onClick={(event) => {\r\n onClick?.(event);\r\n\r\n if (\r\n event.defaultPrevented ||\r\n item.disabled\r\n ) {\r\n return;\r\n }\r\n\r\n accordion.toggleItem(\r\n item.value,\r\n );\r\n }}\r\n onKeyDown={handleKeyboard}\r\n {...props}\r\n >\r\n {accordion.chevronPosition ===\r\n \"left\"\r\n ? renderedChevron\r\n : null}\r\n\r\n {leftSection != null ? (\r\n <span className=\"mb-accordion__section\">\r\n <Icon size={iconSize}>\r\n {leftSection}\r\n </Icon>\r\n </span>\r\n ) : null}\r\n\r\n <span className=\"mb-accordion__label\">\r\n {children}\r\n </span>\r\n\r\n {rightSection != null ? (\r\n <span className=\"mb-accordion__section\">\r\n <Icon size={iconSize}>\r\n {rightSection}\r\n </Icon>\r\n </span>\r\n ) : null}\r\n\r\n {accordion.chevronPosition ===\r\n \"right\"\r\n ? renderedChevron\r\n : null}\r\n </button>\r\n );\r\n}\r\n\r\n/* ==========================================================\r\n Accordion Panel\r\n========================================================== */\r\n\r\nexport interface AccordionPanelProps\r\n extends HTMLAttributes<HTMLDivElement> {\r\n keepMounted?: boolean;\r\n}\r\n\r\nfunction AccordionPanel({\r\n keepMounted = true,\r\n\r\n className = \"\",\r\n children,\r\n\r\n ...props\r\n}: AccordionPanelProps) {\r\n const item =\r\n useAccordionItemContext();\r\n\r\n if (\r\n !keepMounted &&\r\n !item.opened\r\n ) {\r\n return null;\r\n }\r\n\r\n return (\r\n <div\r\n id={item.panelId}\r\n className={cx(\r\n \"mb-accordion__panel\",\r\n item.opened\r\n ? \"mb-accordion__panel--opened\"\r\n : undefined,\r\n className,\r\n )}\r\n role=\"region\"\r\n aria-labelledby={item.controlId}\r\n aria-hidden={!item.opened}\r\n {...props}\r\n >\r\n <div className=\"mb-accordion__panel-inner\">\r\n <div className=\"mb-accordion__content\">\r\n {children}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\n/* ==========================================================\r\n Compound API\r\n========================================================== */\r\n\r\nexport const Accordion =\r\n Object.assign(\r\n AccordionRoot,\r\n {\r\n Item: AccordionItem,\r\n Control: AccordionControl,\r\n Panel: AccordionPanel,\r\n },\r\n );","import {\r\n useEffect,\r\n useId,\r\n useRef,\r\n type HTMLAttributes,\r\n type ReactNode,\r\n} from \"react\";\r\n\r\nimport { useLockScroll } from \"../../hooks\";\r\nimport { useComponentDefaults } from \"../../provider\";\r\nimport { cx } from \"../../utils\";\r\n\r\nimport { Portal } from \"../Portal\";\r\n\r\nimport \"./Drawer.css\";\r\n\r\nexport type DrawerPosition =\r\n | \"left\"\r\n | \"right\"\r\n | \"top\"\r\n | \"bottom\";\r\n\r\nexport type DrawerSize =\r\n | \"sm\"\r\n | \"md\"\r\n | \"lg\"\r\n | \"full\";\r\n\r\nexport interface DrawerProps\r\n extends Omit<\r\n HTMLAttributes<HTMLDivElement>,\r\n \"title\"\r\n > {\r\n opened: boolean;\r\n onClose: () => void;\r\n\r\n title?: ReactNode;\r\n description?: ReactNode;\r\n children?: ReactNode;\r\n footer?: ReactNode;\r\n\r\n position?: DrawerPosition;\r\n size?: DrawerSize;\r\n\r\n closeOnEscape?: boolean;\r\n closeOnOverlayClick?: boolean;\r\n withCloseButton?: boolean;\r\n}\r\n\r\nconst focusableSelector = [\r\n \"button:not([disabled])\",\r\n \"[href]\",\r\n \"input:not([disabled])\",\r\n \"select:not([disabled])\",\r\n \"textarea:not([disabled])\",\r\n '[tabindex]:not([tabindex=\"-1\"])',\r\n].join(\",\");\r\n\r\nexport function Drawer({\r\n opened,\r\n onClose,\r\n\r\n title,\r\n description,\r\n children,\r\n footer,\r\n\r\n position,\r\n size,\r\n\r\n closeOnEscape,\r\n closeOnOverlayClick,\r\n withCloseButton,\r\n\r\n className = \"\",\r\n\r\n ...props\r\n}: DrawerProps) {\r\n const defaults =\r\n useComponentDefaults(\"Drawer\");\r\n\r\n const resolvedPosition =\r\n position ??\r\n defaults.position ??\r\n \"right\";\r\n\r\n const resolvedSize =\r\n size ??\r\n defaults.size ??\r\n \"md\";\r\n\r\n const resolvedCloseOnEscape =\r\n closeOnEscape ??\r\n defaults.closeOnEscape ??\r\n true;\r\n\r\n const resolvedCloseOnOverlayClick =\r\n closeOnOverlayClick ??\r\n defaults.closeOnOverlayClick ??\r\n true;\r\n\r\n const resolvedWithCloseButton =\r\n withCloseButton ??\r\n defaults.withCloseButton ??\r\n true;\r\n\r\n const titleId = useId();\r\n const descriptionId = useId();\r\n\r\n const drawerRef =\r\n useRef<HTMLDivElement>(null);\r\n\r\n const previouslyFocusedRef =\r\n useRef<HTMLElement | null>(null);\r\n\r\n useLockScroll(opened);\r\n\r\n useEffect(() => {\r\n if (!opened) {\r\n return;\r\n }\r\n\r\n previouslyFocusedRef.current =\r\n document.activeElement instanceof HTMLElement\r\n ? document.activeElement\r\n : null;\r\n\r\n requestAnimationFrame(() => {\r\n const drawer = drawerRef.current;\r\n\r\n const firstFocusable =\r\n drawer?.querySelector<HTMLElement>(\r\n focusableSelector,\r\n );\r\n\r\n if (firstFocusable) {\r\n firstFocusable.focus();\r\n } else {\r\n drawer?.focus();\r\n }\r\n });\r\n\r\n function handleKeyDown(\r\n event: KeyboardEvent,\r\n ) {\r\n const drawer = drawerRef.current;\r\n\r\n if (!drawer) {\r\n return;\r\n }\r\n\r\n if (\r\n event.key === \"Escape\" &&\r\n resolvedCloseOnEscape\r\n ) {\r\n event.preventDefault();\r\n onClose();\r\n\r\n return;\r\n }\r\n\r\n if (event.key !== \"Tab\") {\r\n return;\r\n }\r\n\r\n const focusableElements = Array.from(\r\n drawer.querySelectorAll<HTMLElement>(\r\n focusableSelector,\r\n ),\r\n );\r\n\r\n if (focusableElements.length === 0) {\r\n event.preventDefault();\r\n drawer.focus();\r\n\r\n return;\r\n }\r\n\r\n const firstElement =\r\n focusableElements[0];\r\n\r\n const lastElement =\r\n focusableElements[\r\n focusableElements.length - 1\r\n ];\r\n\r\n if (\r\n event.shiftKey &&\r\n document.activeElement === firstElement\r\n ) {\r\n event.preventDefault();\r\n lastElement.focus();\r\n\r\n return;\r\n }\r\n\r\n if (\r\n !event.shiftKey &&\r\n document.activeElement === lastElement\r\n ) {\r\n event.preventDefault();\r\n firstElement.focus();\r\n }\r\n }\r\n\r\n document.addEventListener(\r\n \"keydown\",\r\n handleKeyDown,\r\n );\r\n\r\n return () => {\r\n document.removeEventListener(\r\n \"keydown\",\r\n handleKeyDown,\r\n );\r\n\r\n requestAnimationFrame(() => {\r\n previouslyFocusedRef.current?.focus();\r\n });\r\n };\r\n }, [\r\n opened,\r\n onClose,\r\n resolvedCloseOnEscape,\r\n ]);\r\n\r\n if (!opened) {\r\n return null;\r\n }\r\n\r\n return (\r\n <Portal>\r\n <div\r\n className={cx(\r\n \"mb-drawer-root\",\r\n `mb-drawer-root--${resolvedPosition}`,\r\n )}\r\n role=\"presentation\"\r\n >\r\n <div\r\n className=\"mb-drawer__overlay\"\r\n aria-hidden=\"true\"\r\n onMouseDown={(event) => {\r\n if (\r\n resolvedCloseOnOverlayClick &&\r\n event.target === event.currentTarget\r\n ) {\r\n onClose();\r\n }\r\n }}\r\n >\r\n <div\r\n ref={drawerRef}\r\n className={cx(\r\n \"mb-drawer\",\r\n `mb-drawer--${resolvedPosition}`,\r\n `mb-drawer--${resolvedSize}`,\r\n className,\r\n )}\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n aria-labelledby={\r\n title != null\r\n ? titleId\r\n : undefined\r\n }\r\n aria-describedby={\r\n description != null\r\n ? descriptionId\r\n : undefined\r\n }\r\n tabIndex={-1}\r\n {...props}\r\n >\r\n {title != null ||\r\n description != null ||\r\n resolvedWithCloseButton ? (\r\n <div className=\"mb-drawer__header\">\r\n <div className=\"mb-drawer__heading\">\r\n {title != null ? (\r\n <div\r\n id={titleId}\r\n className=\"mb-drawer__title\"\r\n >\r\n {title}\r\n </div>\r\n ) : null}\r\n\r\n {description != null ? (\r\n <div\r\n id={descriptionId}\r\n className=\"mb-drawer__description\"\r\n >\r\n {description}\r\n </div>\r\n ) : null}\r\n </div>\r\n\r\n {resolvedWithCloseButton ? (\r\n <button\r\n type=\"button\"\r\n className=\"mb-drawer__close\"\r\n aria-label=\"Закрыть панель\"\r\n onClick={onClose}\r\n >\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n d=\"M7 7L17 17\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n />\r\n\r\n <path\r\n d=\"M17 7L7 17\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n ) : null}\r\n </div>\r\n ) : null}\r\n\r\n <div className=\"mb-drawer__content\">\r\n {children}\r\n </div>\r\n\r\n {footer != null ? (\r\n <div className=\"mb-drawer__footer\">\r\n {footer}\r\n </div>\r\n ) : null}\r\n </div>\r\n </div>\r\n </div>\r\n </Portal>\r\n );\r\n}","import {\r\n Children,\r\n cloneElement,\r\n createContext,\r\n isValidElement,\r\n useContext,\r\n useEffect,\r\n useId,\r\n useRef,\r\n useState,\r\n type ButtonHTMLAttributes,\r\n type HTMLAttributes,\r\n type KeyboardEvent,\r\n type MouseEvent,\r\n type ReactElement,\r\n type ReactNode,\r\n} from \"react\";\r\n\r\nimport {\r\n useClickOutside,\r\n useDisclosure,\r\n} from \"../../hooks\";\r\n\r\nimport {\r\n cx,\r\n} from \"../../utils\";\r\n\r\nimport {\r\n Icon,\r\n} from \"../Icon\";\r\n\r\nimport {\r\n Portal,\r\n} from \"../Portal\";\r\n\r\nimport \"./Menu.css\";\r\n\r\nexport type MenuPosition =\r\n | \"bottom-start\"\r\n | \"bottom-end\"\r\n | \"top-start\"\r\n | \"top-end\";\r\n\r\nexport type MenuWidth =\r\n | number\r\n | string;\r\n\r\ninterface MenuContextValue {\r\n opened: boolean;\r\n\r\n open: () => void;\r\n close: () => void;\r\n toggle: () => void;\r\n\r\n triggerRef:\r\n React.RefObject<HTMLElement | null>;\r\n\r\n dropdownRef:\r\n React.RefObject<HTMLDivElement | null>;\r\n\r\n menuId: string;\r\n\r\n position: MenuPosition;\r\n offset: number;\r\n width?: MenuWidth;\r\n\r\n closeOnItemClick: boolean;\r\n}\r\n\r\nconst MenuContext =\r\n createContext<MenuContextValue | null>(\r\n null,\r\n );\r\n\r\nfunction useMenuContext() {\r\n const context =\r\n useContext(MenuContext);\r\n\r\n if (!context) {\r\n throw new Error(\r\n \"Menu-компоненты должны использоваться внутри <Menu>\",\r\n );\r\n }\r\n\r\n return context;\r\n}\r\n\r\n/* ==========================================================\r\n Menu Root\r\n========================================================== */\r\n\r\nexport interface MenuProps {\r\n children: ReactNode;\r\n\r\n position?: MenuPosition;\r\n\r\n offset?: number;\r\n\r\n width?: MenuWidth;\r\n\r\n disabled?: boolean;\r\n\r\n closeOnItemClick?: boolean;\r\n}\r\n\r\nfunction MenuRoot({\r\n children,\r\n\r\n position = \"bottom-start\",\r\n\r\n offset = 8,\r\n\r\n width,\r\n\r\n disabled = false,\r\n\r\n closeOnItemClick = true,\r\n}: MenuProps) {\r\n const [\r\n opened,\r\n {\r\n open,\r\n close,\r\n toggle,\r\n },\r\n ] = useDisclosure();\r\n\r\n const menuId = useId();\r\n\r\n const triggerRef =\r\n useRef<HTMLElement | null>(null);\r\n\r\n const dropdownRef =\r\n useRef<HTMLDivElement | null>(null);\r\n\r\n const wrapperRef =\r\n useClickOutside<HTMLDivElement>(\r\n () => close(),\r\n {\r\n enabled: opened,\r\n },\r\n );\r\n\r\n useEffect(() => {\r\n function handleKeyDown(\r\n event: globalThis.KeyboardEvent,\r\n ) {\r\n if (!opened) {\r\n return;\r\n }\r\n\r\n if (event.key === \"Escape\") {\r\n event.preventDefault();\r\n\r\n close();\r\n\r\n requestAnimationFrame(() => {\r\n triggerRef.current?.focus();\r\n });\r\n }\r\n }\r\n\r\n document.addEventListener(\r\n \"keydown\",\r\n handleKeyDown,\r\n );\r\n\r\n return () => {\r\n document.removeEventListener(\r\n \"keydown\",\r\n handleKeyDown,\r\n );\r\n };\r\n }, [\r\n opened,\r\n close,\r\n ]);\r\n\r\n const contextValue: MenuContextValue = {\r\n opened,\r\n\r\n open: disabled\r\n ? () => undefined\r\n : open,\r\n\r\n close,\r\n\r\n toggle: disabled\r\n ? () => undefined\r\n : toggle,\r\n\r\n triggerRef,\r\n dropdownRef,\r\n\r\n menuId,\r\n\r\n position,\r\n offset,\r\n width,\r\n\r\n closeOnItemClick,\r\n };\r\n\r\n return (\r\n <MenuContext.Provider\r\n value={contextValue}\r\n >\r\n <div\r\n ref={wrapperRef}\r\n className=\"mb-menu-root\"\r\n >\r\n {children}\r\n </div>\r\n </MenuContext.Provider>\r\n );\r\n}\r\n\r\n/* ==========================================================\r\n Menu Target\r\n========================================================== */\r\n\r\nexport interface MenuTargetProps {\r\n children: ReactElement;\r\n}\r\n\r\nfunction MenuTarget({\r\n children,\r\n}: MenuTargetProps) {\r\n const menu =\r\n useMenuContext();\r\n\r\n if (!isValidElement(children)) {\r\n return null;\r\n }\r\n\r\n const child =\r\n children as ReactElement<{\r\n ref?: React.Ref<HTMLElement>;\r\n\r\n onClick?: (\r\n event: MouseEvent<HTMLElement>,\r\n ) => void;\r\n\r\n onKeyDown?: (\r\n event: KeyboardEvent<HTMLElement>,\r\n ) => void;\r\n\r\n \"aria-haspopup\"?: string;\r\n \"aria-expanded\"?: boolean;\r\n \"aria-controls\"?: string;\r\n }>;\r\n\r\n return cloneElement(child, {\r\n ref: (\r\n element: HTMLElement | null,\r\n ) => {\r\n menu.triggerRef.current =\r\n element;\r\n\r\n const originalRef =\r\n child.props.ref;\r\n\r\n if (\r\n typeof originalRef ===\r\n \"function\"\r\n ) {\r\n originalRef(element);\r\n } else if (\r\n originalRef &&\r\n \"current\" in originalRef\r\n ) {\r\n (\r\n originalRef as React.MutableRefObject<\r\n HTMLElement | null\r\n >\r\n ).current = element;\r\n }\r\n },\r\n\r\n onClick: (event) => {\r\n child.props.onClick?.(event);\r\n\r\n if (\r\n event.defaultPrevented\r\n ) {\r\n return;\r\n }\r\n\r\n menu.toggle();\r\n },\r\n\r\n onKeyDown: (event) => {\r\n child.props.onKeyDown?.(event);\r\n\r\n if (\r\n event.defaultPrevented\r\n ) {\r\n return;\r\n }\r\n\r\n if (\r\n event.key === \"Enter\" ||\r\n event.key === \" \"\r\n ) {\r\n event.preventDefault();\r\n\r\n menu.toggle();\r\n }\r\n\r\n if (\r\n event.key === \"ArrowDown\"\r\n ) {\r\n event.preventDefault();\r\n\r\n menu.open();\r\n\r\n requestAnimationFrame(() => {\r\n const firstItem =\r\n menu.dropdownRef.current\r\n ?.querySelector<HTMLButtonElement>(\r\n \".mb-menu__item:not(:disabled)\",\r\n );\r\n\r\n firstItem?.focus();\r\n });\r\n }\r\n },\r\n\r\n \"aria-haspopup\": \"menu\",\r\n \"aria-expanded\": menu.opened,\r\n \"aria-controls\": menu.menuId,\r\n });\r\n}\r\n\r\n/* ==========================================================\r\n Menu Dropdown\r\n========================================================== */\r\n\r\nexport interface MenuDropdownProps\r\n extends HTMLAttributes<HTMLDivElement> {\r\n children: ReactNode;\r\n}\r\n\r\ninterface MenuCoordinates {\r\n top: number;\r\n left: number;\r\n}\r\n\r\nfunction MenuDropdown({\r\n children,\r\n className = \"\",\r\n style,\r\n ...props\r\n}: MenuDropdownProps) {\r\n const menu =\r\n useMenuContext();\r\n\r\n const [\r\n coordinates,\r\n setCoordinates,\r\n ] = useState<MenuCoordinates>({\r\n top: 0,\r\n left: 0,\r\n });\r\n\r\n function updatePosition() {\r\n const trigger =\r\n menu.triggerRef.current;\r\n\r\n const dropdown =\r\n menu.dropdownRef.current;\r\n\r\n if (!trigger || !dropdown) {\r\n return;\r\n }\r\n\r\n const triggerRect =\r\n trigger.getBoundingClientRect();\r\n\r\n const dropdownRect =\r\n dropdown.getBoundingClientRect();\r\n\r\n let top = 0;\r\n let left = 0;\r\n\r\n if (\r\n menu.position ===\r\n \"bottom-start\"\r\n ) {\r\n top =\r\n triggerRect.bottom +\r\n menu.offset;\r\n\r\n left =\r\n triggerRect.left;\r\n }\r\n\r\n if (\r\n menu.position ===\r\n \"bottom-end\"\r\n ) {\r\n top =\r\n triggerRect.bottom +\r\n menu.offset;\r\n\r\n left =\r\n triggerRect.right -\r\n dropdownRect.width;\r\n }\r\n\r\n if (\r\n menu.position ===\r\n \"top-start\"\r\n ) {\r\n top =\r\n triggerRect.top -\r\n dropdownRect.height -\r\n menu.offset;\r\n\r\n left =\r\n triggerRect.left;\r\n }\r\n\r\n if (\r\n menu.position ===\r\n \"top-end\"\r\n ) {\r\n top =\r\n triggerRect.top -\r\n dropdownRect.height -\r\n menu.offset;\r\n\r\n left =\r\n triggerRect.right -\r\n dropdownRect.width;\r\n }\r\n\r\n const viewportPadding = 8;\r\n\r\n left = Math.max(\r\n viewportPadding,\r\n Math.min(\r\n left,\r\n window.innerWidth -\r\n dropdownRect.width -\r\n viewportPadding,\r\n ),\r\n );\r\n\r\n top = Math.max(\r\n viewportPadding,\r\n Math.min(\r\n top,\r\n window.innerHeight -\r\n dropdownRect.height -\r\n viewportPadding,\r\n ),\r\n );\r\n\r\n setCoordinates({\r\n top,\r\n left,\r\n });\r\n }\r\n\r\n useEffect(() => {\r\n if (!menu.opened) {\r\n return;\r\n }\r\n\r\n requestAnimationFrame(\r\n updatePosition,\r\n );\r\n\r\n window.addEventListener(\r\n \"resize\",\r\n updatePosition,\r\n );\r\n\r\n window.addEventListener(\r\n \"scroll\",\r\n updatePosition,\r\n true,\r\n );\r\n\r\n return () => {\r\n window.removeEventListener(\r\n \"resize\",\r\n updatePosition,\r\n );\r\n\r\n window.removeEventListener(\r\n \"scroll\",\r\n updatePosition,\r\n true,\r\n );\r\n };\r\n }, [\r\n menu.opened,\r\n menu.position,\r\n menu.offset,\r\n ]);\r\n\r\n function handleKeyDown(\r\n event: KeyboardEvent<HTMLDivElement>,\r\n ) {\r\n const dropdown =\r\n menu.dropdownRef.current;\r\n\r\n if (!dropdown) {\r\n return;\r\n }\r\n\r\n const items = Array.from(\r\n dropdown.querySelectorAll<\r\n HTMLButtonElement\r\n >(\r\n \".mb-menu__item:not(:disabled)\",\r\n ),\r\n );\r\n\r\n if (items.length === 0) {\r\n return;\r\n }\r\n\r\n const currentIndex =\r\n items.indexOf(\r\n document.activeElement as HTMLButtonElement,\r\n );\r\n\r\n if (\r\n event.key === \"ArrowDown\"\r\n ) {\r\n event.preventDefault();\r\n\r\n const nextIndex =\r\n (\r\n currentIndex +\r\n 1 +\r\n items.length\r\n ) % items.length;\r\n\r\n items[nextIndex]?.focus();\r\n }\r\n\r\n if (\r\n event.key === \"ArrowUp\"\r\n ) {\r\n event.preventDefault();\r\n\r\n const nextIndex =\r\n (\r\n currentIndex -\r\n 1 +\r\n items.length\r\n ) % items.length;\r\n\r\n items[nextIndex]?.focus();\r\n }\r\n\r\n if (event.key === \"Home\") {\r\n event.preventDefault();\r\n\r\n items[0]?.focus();\r\n }\r\n\r\n if (event.key === \"End\") {\r\n event.preventDefault();\r\n\r\n items[\r\n items.length - 1\r\n ]?.focus();\r\n }\r\n\r\n if (event.key === \"Tab\") {\r\n menu.close();\r\n }\r\n }\r\n\r\n if (!menu.opened) {\r\n return null;\r\n }\r\n\r\n const resolvedWidth =\r\n typeof menu.width === \"number\"\r\n ? `${menu.width}px`\r\n : menu.width;\r\n\r\n return (\r\n <Portal>\r\n <div\r\n ref={menu.dropdownRef}\r\n id={menu.menuId}\r\n className={cx(\r\n \"mb-menu\",\r\n `mb-menu--${menu.position}`,\r\n className,\r\n )}\r\n role=\"menu\"\r\n tabIndex={-1}\r\n style={{\r\n top: coordinates.top,\r\n left: coordinates.left,\r\n width: resolvedWidth,\r\n ...style,\r\n }}\r\n onKeyDown={handleKeyDown}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n </Portal>\r\n );\r\n}\r\n\r\n/* ==========================================================\r\n Menu Item\r\n========================================================== */\r\n\r\nexport interface MenuItemProps\r\n extends ButtonHTMLAttributes<HTMLButtonElement> {\r\n leftSection?: ReactNode;\r\n rightSection?: ReactNode;\r\n\r\n color?: \"default\" | \"danger\";\r\n\r\n closeMenuOnClick?: boolean;\r\n}\r\n\r\nfunction MenuItem({\r\n leftSection,\r\n rightSection,\r\n\r\n color = \"default\",\r\n\r\n closeMenuOnClick,\r\n\r\n disabled = false,\r\n\r\n className = \"\",\r\n children,\r\n\r\n onClick,\r\n\r\n ...props\r\n}: MenuItemProps) {\r\n const menu =\r\n useMenuContext();\r\n\r\n return (\r\n <button\r\n type=\"button\"\r\n className={cx(\r\n \"mb-menu__item\",\r\n `mb-menu__item--${color}`,\r\n className,\r\n )}\r\n role=\"menuitem\"\r\n disabled={disabled}\r\n tabIndex={-1}\r\n onClick={(event) => {\r\n onClick?.(event);\r\n\r\n if (\r\n event.defaultPrevented ||\r\n disabled\r\n ) {\r\n return;\r\n }\r\n\r\n const shouldClose =\r\n closeMenuOnClick ??\r\n menu.closeOnItemClick;\r\n\r\n if (shouldClose) {\r\n menu.close();\r\n\r\n requestAnimationFrame(() => {\r\n menu.triggerRef.current?.focus();\r\n });\r\n }\r\n }}\r\n {...props}\r\n >\r\n {leftSection != null ? (\r\n <span className=\"mb-menu__section\">\r\n <Icon size={18}>\r\n {leftSection}\r\n </Icon>\r\n </span>\r\n ) : null}\r\n\r\n <span className=\"mb-menu__label\">\r\n {children}\r\n </span>\r\n\r\n {rightSection != null ? (\r\n <span className=\"mb-menu__section\">\r\n {rightSection}\r\n </span>\r\n ) : null}\r\n </button>\r\n );\r\n}\r\n\r\n/* ==========================================================\r\n Menu Label\r\n========================================================== */\r\n\r\nexport interface MenuLabelProps\r\n extends HTMLAttributes<HTMLDivElement> {}\r\n\r\nfunction MenuLabel({\r\n className = \"\",\r\n children,\r\n ...props\r\n}: MenuLabelProps) {\r\n return (\r\n <div\r\n className={cx(\r\n \"mb-menu__group-label\",\r\n className,\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\n/* ==========================================================\r\n Menu Divider\r\n========================================================== */\r\n\r\nexport interface MenuDividerProps\r\n extends HTMLAttributes<HTMLDivElement> {}\r\n\r\nfunction MenuDivider({\r\n className = \"\",\r\n ...props\r\n}: MenuDividerProps) {\r\n return (\r\n <div\r\n className={cx(\r\n \"mb-menu__divider\",\r\n className,\r\n )}\r\n role=\"separator\"\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\n/* ==========================================================\r\n Compound API\r\n========================================================== */\r\n\r\nexport const Menu =\r\n Object.assign(\r\n MenuRoot,\r\n {\r\n Target: MenuTarget,\r\n Dropdown: MenuDropdown,\r\n Item: MenuItem,\r\n Label: MenuLabel,\r\n Divider: MenuDivider,\r\n },\r\n );","import {\r\n cloneElement,\r\n createContext,\r\n isValidElement,\r\n useCallback,\r\n useContext,\r\n useEffect,\r\n useId,\r\n useMemo,\r\n useRef,\r\n useState,\r\n type CSSProperties,\r\n type HTMLAttributes,\r\n type KeyboardEvent,\r\n type MouseEvent,\r\n type MutableRefObject,\r\n type ReactElement,\r\n type ReactNode,\r\n type Ref,\r\n} from \"react\";\r\n\r\nimport {\r\n useControllableState,\r\n} from \"../../hooks\";\r\n\r\nimport { cx } from \"../../utils\";\r\n\r\nimport { Portal } from \"../Portal\";\r\n\r\nimport \"./Popover.css\";\r\n\r\nexport type PopoverPosition =\r\n | \"bottom-start\"\r\n | \"bottom-end\"\r\n | \"top-start\"\r\n | \"top-end\";\r\n\r\nexport interface PopoverContextValue {\r\n opened: boolean;\r\n\r\n open: () => void;\r\n close: () => void;\r\n toggle: () => void;\r\n\r\n position: PopoverPosition;\r\n offset: number;\r\n width?: number | string;\r\n\r\n withArrow: boolean;\r\n closeOnClickOutside: boolean;\r\n closeOnEscape: boolean;\r\n\r\n triggerRef:\r\n MutableRefObject<HTMLElement | null>;\r\n\r\n dropdownRef:\r\n MutableRefObject<HTMLDivElement | null>;\r\n\r\n popoverId: string;\r\n}\r\n\r\nconst PopoverContext =\r\n createContext<PopoverContextValue | null>(\r\n null,\r\n );\r\n\r\nfunction usePopoverContext() {\r\n const context =\r\n useContext(PopoverContext);\r\n\r\n if (!context) {\r\n throw new Error(\r\n \"Popover-компоненты должны использоваться внутри <Popover>\",\r\n );\r\n }\r\n\r\n return context;\r\n}\r\n\r\n/* ==========================================================\r\n Helpers\r\n========================================================== */\r\n\r\nfunction assignRef<T>(\r\n ref: Ref<T> | undefined,\r\n value: T | null,\r\n) {\r\n if (typeof ref === \"function\") {\r\n ref(value);\r\n return;\r\n }\r\n\r\n if (ref && \"current\" in ref) {\r\n (\r\n ref as MutableRefObject<T | null>\r\n ).current = value;\r\n }\r\n}\r\n\r\n/* ==========================================================\r\n Popover Root\r\n========================================================== */\r\n\r\nexport interface PopoverProps {\r\n children: ReactNode;\r\n\r\n opened?: boolean;\r\n defaultOpened?: boolean;\r\n\r\n onChange?: (\r\n opened: boolean,\r\n ) => void;\r\n\r\n position?: PopoverPosition;\r\n\r\n offset?: number;\r\n\r\n width?: number | string;\r\n\r\n withArrow?: boolean;\r\n\r\n closeOnClickOutside?: boolean;\r\n closeOnEscape?: boolean;\r\n}\r\n\r\nfunction PopoverRoot({\r\n children,\r\n\r\n opened,\r\n defaultOpened = false,\r\n\r\n onChange,\r\n\r\n position = \"bottom-start\",\r\n\r\n offset = 8,\r\n\r\n width,\r\n\r\n withArrow = false,\r\n\r\n closeOnClickOutside = true,\r\n closeOnEscape = true,\r\n}: PopoverProps) {\r\n const [\r\n currentOpened,\r\n setCurrentOpened,\r\n ] = useControllableState<boolean>({\r\n value: opened,\r\n defaultValue: defaultOpened,\r\n onChange,\r\n });\r\n\r\n const popoverId = useId();\r\n\r\n const triggerRef =\r\n useRef<HTMLElement | null>(null);\r\n\r\n const dropdownRef =\r\n useRef<HTMLDivElement | null>(null);\r\n\r\n const open = useCallback(() => {\r\n setCurrentOpened(true);\r\n }, [setCurrentOpened]);\r\n\r\n const close = useCallback(() => {\r\n setCurrentOpened(false);\r\n }, [setCurrentOpened]);\r\n\r\n const toggle = useCallback(() => {\r\n setCurrentOpened(\r\n (current) => !current,\r\n );\r\n }, [setCurrentOpened]);\r\n\r\n useEffect(() => {\r\n if (\r\n !currentOpened ||\r\n !closeOnEscape\r\n ) {\r\n return;\r\n }\r\n\r\n function handleKeyDown(\r\n event: globalThis.KeyboardEvent,\r\n ) {\r\n if (event.key !== \"Escape\") {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n\r\n close();\r\n\r\n requestAnimationFrame(() => {\r\n triggerRef.current?.focus();\r\n });\r\n }\r\n\r\n document.addEventListener(\r\n \"keydown\",\r\n handleKeyDown,\r\n );\r\n\r\n return () => {\r\n document.removeEventListener(\r\n \"keydown\",\r\n handleKeyDown,\r\n );\r\n };\r\n }, [\r\n currentOpened,\r\n closeOnEscape,\r\n close,\r\n ]);\r\n\r\n const contextValue =\r\n useMemo<PopoverContextValue>(\r\n () => ({\r\n opened: currentOpened,\r\n\r\n open,\r\n close,\r\n toggle,\r\n\r\n position,\r\n offset,\r\n width,\r\n\r\n withArrow,\r\n closeOnClickOutside,\r\n closeOnEscape,\r\n\r\n triggerRef,\r\n dropdownRef,\r\n\r\n popoverId,\r\n }),\r\n [\r\n currentOpened,\r\n open,\r\n close,\r\n toggle,\r\n position,\r\n offset,\r\n width,\r\n withArrow,\r\n closeOnClickOutside,\r\n closeOnEscape,\r\n popoverId,\r\n ],\r\n );\r\n\r\n return (\r\n <PopoverContext.Provider\r\n value={contextValue}\r\n >\r\n {children}\r\n </PopoverContext.Provider>\r\n );\r\n}\r\n\r\n/* ==========================================================\r\n Popover Target\r\n========================================================== */\r\n\r\nexport interface PopoverTargetProps {\r\n children: ReactElement;\r\n}\r\n\r\nfunction PopoverTarget({\r\n children,\r\n}: PopoverTargetProps) {\r\n const popover =\r\n usePopoverContext();\r\n\r\n if (!isValidElement(children)) {\r\n return null;\r\n }\r\n\r\n const child =\r\n children as ReactElement<{\r\n ref?: Ref<HTMLElement>;\r\n\r\n onClick?: (\r\n event: MouseEvent<HTMLElement>,\r\n ) => void;\r\n\r\n onKeyDown?: (\r\n event: KeyboardEvent<HTMLElement>,\r\n ) => void;\r\n\r\n \"aria-haspopup\"?: string;\r\n \"aria-expanded\"?: boolean;\r\n \"aria-controls\"?: string;\r\n }>;\r\n\r\n return cloneElement(child, {\r\n ref: (\r\n element: HTMLElement | null,\r\n ) => {\r\n popover.triggerRef.current =\r\n element;\r\n\r\n assignRef(\r\n child.props.ref,\r\n element,\r\n );\r\n },\r\n\r\n onClick: (event) => {\r\n child.props.onClick?.(event);\r\n\r\n if (event.defaultPrevented) {\r\n return;\r\n }\r\n\r\n popover.toggle();\r\n },\r\n\r\n onKeyDown: (event) => {\r\n child.props.onKeyDown?.(event);\r\n\r\n if (event.defaultPrevented) {\r\n return;\r\n }\r\n\r\n if (\r\n event.key === \"Enter\" ||\r\n event.key === \" \"\r\n ) {\r\n event.preventDefault();\r\n popover.toggle();\r\n }\r\n\r\n if (event.key === \"ArrowDown\") {\r\n event.preventDefault();\r\n popover.open();\r\n }\r\n },\r\n\r\n \"aria-haspopup\": \"dialog\",\r\n \"aria-expanded\": popover.opened,\r\n \"aria-controls\": popover.popoverId,\r\n });\r\n}\r\n\r\n/* ==========================================================\r\n Popover Dropdown\r\n========================================================== */\r\n\r\nexport interface PopoverDropdownProps\r\n extends HTMLAttributes<HTMLDivElement> {\r\n children: ReactNode;\r\n}\r\n\r\ninterface PopoverCoordinates {\r\n top: number;\r\n left: number;\r\n}\r\n\r\nfunction PopoverDropdown({\r\n children,\r\n className = \"\",\r\n style,\r\n ...props\r\n}: PopoverDropdownProps) {\r\n const popover =\r\n usePopoverContext();\r\n\r\n const [\r\n coordinates,\r\n setCoordinates,\r\n ] = useState<PopoverCoordinates>({\r\n top: 0,\r\n left: 0,\r\n });\r\n\r\n const [positioned, setPositioned] =\r\n useState(false);\r\n\r\n const updatePosition =\r\n useCallback(() => {\r\n const trigger =\r\n popover.triggerRef.current;\r\n\r\n const dropdown =\r\n popover.dropdownRef.current;\r\n\r\n if (!trigger || !dropdown) {\r\n return;\r\n }\r\n\r\n const triggerRect =\r\n trigger.getBoundingClientRect();\r\n\r\n const dropdownRect =\r\n dropdown.getBoundingClientRect();\r\n\r\n let top = 0;\r\n let left = 0;\r\n\r\n switch (popover.position) {\r\n case \"bottom-start\": {\r\n top =\r\n triggerRect.bottom +\r\n popover.offset;\r\n\r\n left =\r\n triggerRect.left;\r\n\r\n break;\r\n }\r\n\r\n case \"bottom-end\": {\r\n top =\r\n triggerRect.bottom +\r\n popover.offset;\r\n\r\n left =\r\n triggerRect.right -\r\n dropdownRect.width;\r\n\r\n break;\r\n }\r\n\r\n case \"top-start\": {\r\n top =\r\n triggerRect.top -\r\n dropdownRect.height -\r\n popover.offset;\r\n\r\n left =\r\n triggerRect.left;\r\n\r\n break;\r\n }\r\n\r\n case \"top-end\": {\r\n top =\r\n triggerRect.top -\r\n dropdownRect.height -\r\n popover.offset;\r\n\r\n left =\r\n triggerRect.right -\r\n dropdownRect.width;\r\n\r\n break;\r\n }\r\n }\r\n\r\n const viewportPadding = 8;\r\n\r\n left = Math.max(\r\n viewportPadding,\r\n Math.min(\r\n left,\r\n window.innerWidth -\r\n dropdownRect.width -\r\n viewportPadding,\r\n ),\r\n );\r\n\r\n top = Math.max(\r\n viewportPadding,\r\n Math.min(\r\n top,\r\n window.innerHeight -\r\n dropdownRect.height -\r\n viewportPadding,\r\n ),\r\n );\r\n\r\n setCoordinates({\r\n top,\r\n left,\r\n });\r\n\r\n setPositioned(true);\r\n }, [\r\n popover.position,\r\n popover.offset,\r\n popover.triggerRef,\r\n popover.dropdownRef,\r\n ]);\r\n\r\n const setDropdownRef =\r\n useCallback(\r\n (\r\n element: HTMLDivElement | null,\r\n ) => {\r\n popover.dropdownRef.current =\r\n element;\r\n\r\n if (element) {\r\n requestAnimationFrame(() => {\r\n updatePosition();\r\n });\r\n }\r\n },\r\n [\r\n popover.dropdownRef,\r\n updatePosition,\r\n ],\r\n );\r\n\r\n useEffect(() => {\r\n if (!popover.opened) {\r\n setPositioned(false);\r\n return;\r\n }\r\n\r\n requestAnimationFrame(() => {\r\n updatePosition();\r\n });\r\n\r\n window.addEventListener(\r\n \"resize\",\r\n updatePosition,\r\n );\r\n\r\n window.addEventListener(\r\n \"scroll\",\r\n updatePosition,\r\n true,\r\n );\r\n\r\n return () => {\r\n window.removeEventListener(\r\n \"resize\",\r\n updatePosition,\r\n );\r\n\r\n window.removeEventListener(\r\n \"scroll\",\r\n updatePosition,\r\n true,\r\n );\r\n };\r\n }, [\r\n popover.opened,\r\n updatePosition,\r\n ]);\r\n\r\n useEffect(() => {\r\n if (\r\n !popover.opened ||\r\n !popover.closeOnClickOutside\r\n ) {\r\n return;\r\n }\r\n\r\n function handlePointerDown(\r\n event: PointerEvent,\r\n ) {\r\n const target =\r\n event.target;\r\n\r\n if (!(target instanceof Node)) {\r\n return;\r\n }\r\n\r\n const trigger =\r\n popover.triggerRef.current;\r\n\r\n const dropdown =\r\n popover.dropdownRef.current;\r\n\r\n if (\r\n trigger?.contains(target) ||\r\n dropdown?.contains(target)\r\n ) {\r\n return;\r\n }\r\n\r\n popover.close();\r\n }\r\n\r\n document.addEventListener(\r\n \"pointerdown\",\r\n handlePointerDown,\r\n );\r\n\r\n return () => {\r\n document.removeEventListener(\r\n \"pointerdown\",\r\n handlePointerDown,\r\n );\r\n };\r\n }, [\r\n popover.opened,\r\n popover.closeOnClickOutside,\r\n popover.close,\r\n popover.triggerRef,\r\n popover.dropdownRef,\r\n ]);\r\n\r\n if (!popover.opened) {\r\n return null;\r\n }\r\n\r\n const resolvedWidth =\r\n typeof popover.width === \"number\"\r\n ? `${popover.width}px`\r\n : popover.width;\r\n\r\n const dropdownStyle = {\r\n top: coordinates.top,\r\n left: coordinates.left,\r\n width: resolvedWidth,\r\n\r\n visibility:\r\n positioned\r\n ? \"visible\"\r\n : \"hidden\",\r\n\r\n ...style,\r\n } as CSSProperties;\r\n\r\n return (\r\n <Portal>\r\n <div\r\n ref={setDropdownRef}\r\n id={popover.popoverId}\r\n role=\"dialog\"\r\n className={cx(\r\n \"mb-popover\",\r\n `mb-popover--${popover.position}`,\r\n popover.withArrow\r\n ? \"mb-popover--with-arrow\"\r\n : undefined,\r\n className,\r\n )}\r\n style={dropdownStyle}\r\n {...props}\r\n >\r\n <div className=\"mb-popover__content\">\r\n {children}\r\n </div>\r\n\r\n {popover.withArrow ? (\r\n <span\r\n className=\"mb-popover__arrow\"\r\n aria-hidden=\"true\"\r\n />\r\n ) : null}\r\n </div>\r\n </Portal>\r\n );\r\n}\r\n\r\n/* ==========================================================\r\n Compound API\r\n========================================================== */\r\n\r\nexport const Popover =\r\n Object.assign(\r\n PopoverRoot,\r\n {\r\n Target: PopoverTarget,\r\n Dropdown: PopoverDropdown,\r\n },\r\n );","import type {\r\n CSSProperties,\r\n HTMLAttributes,\r\n ReactNode,\r\n} from \"react\";\r\n\r\nimport {\r\n useComponentDefaults,\r\n} from \"../../provider\";\r\n\r\nimport {\r\n cx,\r\n} from \"../../utils\";\r\n\r\nimport \"./Divider.css\";\r\n\r\nexport type DividerOrientation =\r\n | \"horizontal\"\r\n | \"vertical\";\r\n\r\nexport type DividerLabelPosition =\r\n | \"left\"\r\n | \"center\"\r\n | \"right\";\r\n\r\nexport type DividerVariant =\r\n | \"solid\"\r\n | \"dashed\"\r\n | \"dotted\";\r\n\r\nexport interface DividerProps\r\n extends HTMLAttributes<HTMLDivElement> {\r\n orientation?: DividerOrientation;\r\n\r\n label?: ReactNode;\r\n\r\n labelPosition?: DividerLabelPosition;\r\n\r\n variant?: DividerVariant;\r\n\r\n size?: number | string;\r\n\r\n color?: string;\r\n}\r\n\r\ntype DividerCSSProperties =\r\n CSSProperties &\r\n Record<\r\n `--mb-divider-${string}`,\r\n string | number | undefined\r\n >;\r\n\r\nexport function Divider({\r\n orientation,\r\n\r\n label,\r\n\r\n labelPosition,\r\n\r\n variant,\r\n\r\n size,\r\n\r\n color,\r\n\r\n className = \"\",\r\n\r\n style,\r\n\r\n ...props\r\n}: DividerProps) {\r\n const defaults =\r\n useComponentDefaults(\"Divider\");\r\n\r\n const resolvedOrientation =\r\n orientation ??\r\n defaults.orientation ??\r\n \"horizontal\";\r\n\r\n const resolvedVariant =\r\n variant ??\r\n defaults.variant ??\r\n \"solid\";\r\n\r\n const resolvedLabelPosition =\r\n labelPosition ??\r\n defaults.labelPosition ??\r\n \"center\";\r\n\r\n const hasLabel =\r\n label !== null &&\r\n label !== undefined;\r\n\r\n const dividerStyle: DividerCSSProperties = {\r\n \"--mb-divider-size\":\r\n typeof size === \"number\"\r\n ? `${size}px`\r\n : size,\r\n\r\n \"--mb-divider-color\":\r\n color,\r\n\r\n ...style,\r\n };\r\n\r\n return (\r\n <div\r\n className={cx(\r\n \"mb-divider\",\r\n `mb-divider--${resolvedOrientation}`,\r\n `mb-divider--${resolvedVariant}`,\r\n hasLabel\r\n ? `mb-divider--with-label mb-divider--label-${resolvedLabelPosition}`\r\n : undefined,\r\n className,\r\n )}\r\n style={dividerStyle}\r\n role=\"separator\"\r\n aria-orientation={\r\n resolvedOrientation\r\n }\r\n {...props}\r\n >\r\n {hasLabel ? (\r\n <span className=\"mb-divider__label\">\r\n {label}\r\n </span>\r\n ) : null}\r\n </div>\r\n );\r\n}","import {\r\n forwardRef,\r\n type InputHTMLAttributes,\r\n type ReactNode,\r\n} from \"react\";\r\n\r\nimport {\r\n useControllableState,\r\n} from \"../../hooks\";\r\n\r\nimport {\r\n useComponentDefaults,\r\n} from \"../../provider\";\r\n\r\nimport {\r\n cx,\r\n} from \"../../utils\";\r\n\r\nimport {\r\n Icon,\r\n} from \"../Icon\";\r\n\r\nimport \"./PasswordInput.css\";\r\n\r\nexport type PasswordInputSize =\r\n | \"sm\"\r\n | \"md\"\r\n | \"lg\";\r\n\r\nexport interface PasswordInputProps\r\n extends Omit<\r\n InputHTMLAttributes<HTMLInputElement>,\r\n \"size\" | \"type\"\r\n > {\r\n size?: PasswordInputSize;\r\n\r\n leftSection?: ReactNode;\r\n\r\n visible?: boolean;\r\n defaultVisible?: boolean;\r\n\r\n onVisibilityChange?: (\r\n visible: boolean,\r\n ) => void;\r\n\r\n visibilityToggle?: boolean;\r\n\r\n visibleIcon?: ReactNode;\r\n hiddenIcon?: ReactNode;\r\n\r\n visibleLabel?: string;\r\n hiddenLabel?: string;\r\n\r\n error?: boolean;\r\n}\r\n\r\nfunction EyeIcon() {\r\n return (\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n d=\"M2.5 12C4.6 7.8 8 5.5 12 5.5C16 5.5 19.4 7.8 21.5 12C19.4 16.2 16 18.5 12 18.5C8 18.5 4.6 16.2 2.5 12Z\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.8\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n\r\n <circle\r\n cx=\"12\"\r\n cy=\"12\"\r\n r=\"3\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.8\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nfunction EyeSlashIcon() {\r\n return (\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n d=\"M3 3L21 21\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.8\"\r\n strokeLinecap=\"round\"\r\n />\r\n\r\n <path\r\n d=\"M10.6 5.7C11.1 5.6 11.5 5.5 12 5.5C16 5.5 19.4 7.8 21.5 12C20.8 13.4 19.9 14.6 18.9 15.6\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.8\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n\r\n <path\r\n d=\"M6.2 7.1C4.7 8.2 3.4 9.9 2.5 12C4.6 16.2 8 18.5 12 18.5C13.4 18.5 14.7 18.2 15.9 17.6\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.8\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n\r\n <path\r\n d=\"M9.9 9.9C9.3 10.4 9 11.2 9 12C9 13.7 10.3 15 12 15C12.8 15 13.6 14.7 14.1 14.1\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.8\"\r\n strokeLinecap=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport const PasswordInput = forwardRef<\r\n HTMLInputElement,\r\n PasswordInputProps\r\n>(function PasswordInput(\r\n {\r\n size,\r\n\r\n leftSection,\r\n\r\n visible,\r\n defaultVisible = false,\r\n\r\n onVisibilityChange,\r\n\r\n visibilityToggle,\r\n\r\n visibleIcon,\r\n hiddenIcon,\r\n\r\n visibleLabel = \"Скрыть пароль\",\r\n hiddenLabel = \"Показать пароль\",\r\n\r\n error = false,\r\n disabled = false,\r\n\r\n className = \"\",\r\n\r\n ...props\r\n },\r\n ref,\r\n) {\r\n const defaults =\r\n useComponentDefaults(\r\n \"PasswordInput\",\r\n );\r\n\r\n const resolvedSize =\r\n size ??\r\n defaults.size ??\r\n \"md\";\r\n\r\n const resolvedVisibilityToggle =\r\n visibilityToggle ??\r\n defaults.visibilityToggle ??\r\n true;\r\n\r\n const [\r\n currentVisible,\r\n setCurrentVisible,\r\n ] = useControllableState<boolean>({\r\n value: visible,\r\n defaultValue: defaultVisible,\r\n onChange: onVisibilityChange,\r\n });\r\n\r\n const iconSize = {\r\n sm: 16,\r\n md: 18,\r\n lg: 20,\r\n }[resolvedSize];\r\n\r\n const classes = cx(\r\n \"mb-password-input\",\r\n `mb-password-input--${resolvedSize}`,\r\n leftSection != null\r\n ? \"mb-password-input--with-left-section\"\r\n : undefined,\r\n resolvedVisibilityToggle\r\n ? \"mb-password-input--with-toggle\"\r\n : undefined,\r\n error\r\n ? \"mb-password-input--error\"\r\n : undefined,\r\n disabled\r\n ? \"mb-password-input--disabled\"\r\n : undefined,\r\n className,\r\n );\r\n\r\n return (\r\n <div className={classes}>\r\n {leftSection != null ? (\r\n <span className=\"mb-password-input__section mb-password-input__section--left\">\r\n <Icon size={iconSize}>\r\n {leftSection}\r\n </Icon>\r\n </span>\r\n ) : null}\r\n\r\n <input\r\n ref={ref}\r\n type={\r\n currentVisible\r\n ? \"text\"\r\n : \"password\"\r\n }\r\n className=\"mb-password-input__control\"\r\n disabled={disabled}\r\n aria-invalid={\r\n error || undefined\r\n }\r\n {...props}\r\n />\r\n\r\n {resolvedVisibilityToggle ? (\r\n <button\r\n type=\"button\"\r\n className=\"mb-password-input__toggle\"\r\n disabled={disabled}\r\n aria-label={\r\n currentVisible\r\n ? visibleLabel\r\n : hiddenLabel\r\n }\r\n aria-pressed={\r\n currentVisible\r\n }\r\n onClick={() => {\r\n setCurrentVisible(\r\n (current) => !current,\r\n );\r\n }}\r\n >\r\n <Icon size={iconSize}>\r\n {currentVisible\r\n ? (\r\n visibleIcon ?? (\r\n <EyeSlashIcon />\r\n )\r\n )\r\n : (\r\n hiddenIcon ?? (\r\n <EyeIcon />\r\n )\r\n )}\r\n </Icon>\r\n </button>\r\n ) : null}\r\n </div>\r\n );\r\n});","import {\r\n forwardRef,\r\n useEffect,\r\n useImperativeHandle,\r\n useRef,\r\n type ClipboardEvent,\r\n type HTMLAttributes,\r\n type KeyboardEvent,\r\n} from \"react\";\r\n\r\nimport {\r\n useControllableState,\r\n} from \"../../hooks\";\r\n\r\nimport {\r\n useComponentDefaults,\r\n} from \"../../provider\";\r\n\r\nimport {\r\n cx,\r\n} from \"../../utils\";\r\n\r\nimport \"./PinInput.css\";\r\n\r\nexport type PinInputSize =\r\n | \"sm\"\r\n | \"md\"\r\n | \"lg\";\r\n\r\nexport type PinInputType =\r\n | \"number\"\r\n | \"alphanumeric\";\r\n\r\nexport interface PinInputProps\r\n extends Omit<\r\n HTMLAttributes<HTMLDivElement>,\r\n \"defaultValue\" | \"onChange\"\r\n > {\r\n length?: number;\r\n\r\n value?: string;\r\n defaultValue?: string;\r\n\r\n onChange?: (value: string) => void;\r\n onComplete?: (value: string) => void;\r\n\r\n size?: PinInputSize;\r\n type?: PinInputType;\r\n\r\n mask?: boolean;\r\n oneTimeCode?: boolean;\r\n\r\n disabled?: boolean;\r\n error?: boolean;\r\n\r\n autoFocus?: boolean;\r\n\r\n name?: string;\r\n placeholder?: string;\r\n\r\n \"aria-label\"?: string;\r\n}\r\n\r\nfunction normalizeValue(\r\n value: string,\r\n length: number,\r\n type: PinInputType,\r\n): string {\r\n const filtered =\r\n type === \"number\"\r\n ? value.replace(/\\D/g, \"\")\r\n : value.replace(\r\n /[^a-zA-Z0-9]/g,\r\n \"\",\r\n );\r\n\r\n return filtered.slice(0, length);\r\n}\r\n\r\nfunction replaceCharacter(\r\n value: string,\r\n index: number,\r\n character: string,\r\n): string {\r\n const characters = value.split(\"\");\r\n\r\n if (character) {\r\n characters[index] = character;\r\n } else {\r\n characters.splice(index, 1);\r\n }\r\n\r\n return characters.join(\"\");\r\n}\r\n\r\nexport const PinInput = forwardRef<\r\n HTMLInputElement,\r\n PinInputProps\r\n>(function PinInput(\r\n {\r\n length,\r\n\r\n value,\r\n defaultValue = \"\",\r\n\r\n onChange,\r\n onComplete,\r\n\r\n size,\r\n type,\r\n\r\n mask,\r\n oneTimeCode = true,\r\n\r\n disabled = false,\r\n error = false,\r\n\r\n autoFocus = false,\r\n\r\n name,\r\n placeholder = \"\",\r\n\r\n className = \"\",\r\n \"aria-label\": ariaLabel =\r\n \"Введите код подтверждения\",\r\n\r\n ...props\r\n },\r\n forwardedRef,\r\n) {\r\n const defaults =\r\n useComponentDefaults(\"PinInput\");\r\n\r\n const resolvedLength = Math.max(\r\n 1,\r\n Math.floor(\r\n length ??\r\n defaults.length ??\r\n 4,\r\n ),\r\n );\r\n\r\n const resolvedSize =\r\n size ??\r\n defaults.size ??\r\n \"md\";\r\n\r\n const resolvedType =\r\n type ??\r\n defaults.type ??\r\n \"number\";\r\n\r\n const resolvedMask =\r\n mask ??\r\n defaults.mask ??\r\n false;\r\n\r\n const inputRefs =\r\n useRef<\r\n Array<HTMLInputElement | null>\r\n >([]);\r\n\r\n const completedValueRef =\r\n useRef<string | null>(null);\r\n\r\n const [\r\n internalValue,\r\n setInternalValue,\r\n ] = useControllableState<string>({\r\n value,\r\n defaultValue: normalizeValue(\r\n defaultValue,\r\n resolvedLength,\r\n resolvedType,\r\n ),\r\n onChange,\r\n });\r\n\r\n const currentValue =\r\n normalizeValue(\r\n internalValue,\r\n resolvedLength,\r\n resolvedType,\r\n );\r\n\r\n useImperativeHandle(\r\n forwardedRef,\r\n () =>\r\n inputRefs.current[0] as HTMLInputElement,\r\n );\r\n\r\n useEffect(() => {\r\n if (\r\n currentValue.length !==\r\n resolvedLength\r\n ) {\r\n completedValueRef.current = null;\r\n return;\r\n }\r\n\r\n if (\r\n completedValueRef.current ===\r\n currentValue\r\n ) {\r\n return;\r\n }\r\n\r\n completedValueRef.current =\r\n currentValue;\r\n\r\n onComplete?.(currentValue);\r\n }, [\r\n currentValue,\r\n resolvedLength,\r\n onComplete,\r\n ]);\r\n\r\n function focusInput(\r\n index: number,\r\n select = true,\r\n ) {\r\n const safeIndex = Math.max(\r\n 0,\r\n Math.min(\r\n index,\r\n resolvedLength - 1,\r\n ),\r\n );\r\n\r\n const input =\r\n inputRefs.current[safeIndex];\r\n\r\n input?.focus();\r\n\r\n if (select) {\r\n input?.select();\r\n }\r\n }\r\n\r\n function commitValue(\r\n nextValue: string,\r\n ) {\r\n setInternalValue(\r\n normalizeValue(\r\n nextValue,\r\n resolvedLength,\r\n resolvedType,\r\n ),\r\n );\r\n }\r\n\r\n function handleInputChange(\r\n index: number,\r\n rawValue: string,\r\n ) {\r\n const enteredValue =\r\n normalizeValue(\r\n rawValue,\r\n resolvedLength,\r\n resolvedType,\r\n );\r\n\r\n if (!enteredValue) {\r\n commitValue(\r\n replaceCharacter(\r\n currentValue,\r\n index,\r\n \"\",\r\n ),\r\n );\r\n\r\n return;\r\n }\r\n\r\n /*\r\n * Браузер или менеджер OTP может вставить\r\n * сразу несколько символов в одно поле.\r\n */\r\n if (enteredValue.length > 1) {\r\n const before =\r\n currentValue.slice(0, index);\r\n\r\n const afterIndex =\r\n index + enteredValue.length;\r\n\r\n const after =\r\n currentValue.slice(afterIndex);\r\n\r\n const nextValue =\r\n before +\r\n enteredValue +\r\n after;\r\n\r\n commitValue(nextValue);\r\n\r\n const nextFocusIndex = Math.min(\r\n index + enteredValue.length,\r\n resolvedLength - 1,\r\n );\r\n\r\n requestAnimationFrame(() => {\r\n focusInput(nextFocusIndex);\r\n });\r\n\r\n return;\r\n }\r\n\r\n const character =\r\n enteredValue[enteredValue.length - 1];\r\n\r\n const nextValue =\r\n replaceCharacter(\r\n currentValue,\r\n index,\r\n character,\r\n );\r\n\r\n commitValue(nextValue);\r\n\r\n if (index < resolvedLength - 1) {\r\n requestAnimationFrame(() => {\r\n focusInput(index + 1);\r\n });\r\n }\r\n }\r\n\r\n function handleKeyDown(\r\n event: KeyboardEvent<HTMLInputElement>,\r\n index: number,\r\n ) {\r\n if (event.key === \"Backspace\") {\r\n event.preventDefault();\r\n\r\n const currentCharacter =\r\n currentValue[index];\r\n\r\n if (currentCharacter) {\r\n commitValue(\r\n replaceCharacter(\r\n currentValue,\r\n index,\r\n \"\",\r\n ),\r\n );\r\n\r\n return;\r\n }\r\n\r\n if (index > 0) {\r\n commitValue(\r\n replaceCharacter(\r\n currentValue,\r\n index - 1,\r\n \"\",\r\n ),\r\n );\r\n\r\n requestAnimationFrame(() => {\r\n focusInput(index - 1);\r\n });\r\n }\r\n\r\n return;\r\n }\r\n\r\n if (event.key === \"Delete\") {\r\n event.preventDefault();\r\n\r\n commitValue(\r\n replaceCharacter(\r\n currentValue,\r\n index,\r\n \"\",\r\n ),\r\n );\r\n\r\n return;\r\n }\r\n\r\n if (event.key === \"ArrowLeft\") {\r\n event.preventDefault();\r\n focusInput(index - 1);\r\n\r\n return;\r\n }\r\n\r\n if (event.key === \"ArrowRight\") {\r\n event.preventDefault();\r\n focusInput(index + 1);\r\n\r\n return;\r\n }\r\n\r\n if (event.key === \"Home\") {\r\n event.preventDefault();\r\n focusInput(0);\r\n\r\n return;\r\n }\r\n\r\n if (event.key === \"End\") {\r\n event.preventDefault();\r\n focusInput(resolvedLength - 1);\r\n }\r\n }\r\n\r\n function handlePaste(\r\n event: ClipboardEvent<HTMLInputElement>,\r\n index: number,\r\n ) {\r\n event.preventDefault();\r\n\r\n const pastedValue =\r\n normalizeValue(\r\n event.clipboardData.getData(\r\n \"text\",\r\n ),\r\n resolvedLength,\r\n resolvedType,\r\n );\r\n\r\n if (!pastedValue) {\r\n return;\r\n }\r\n\r\n const before =\r\n currentValue.slice(0, index);\r\n\r\n const afterIndex =\r\n index + pastedValue.length;\r\n\r\n const after =\r\n currentValue.slice(afterIndex);\r\n\r\n const nextValue =\r\n normalizeValue(\r\n before +\r\n pastedValue +\r\n after,\r\n resolvedLength,\r\n resolvedType,\r\n );\r\n\r\n commitValue(nextValue);\r\n\r\n const nextFocusIndex = Math.min(\r\n index + pastedValue.length,\r\n resolvedLength - 1,\r\n );\r\n\r\n requestAnimationFrame(() => {\r\n focusInput(nextFocusIndex);\r\n });\r\n }\r\n\r\n const classes = cx(\r\n \"mb-pin-input\",\r\n `mb-pin-input--${resolvedSize}`,\r\n error\r\n ? \"mb-pin-input--error\"\r\n : undefined,\r\n disabled\r\n ? \"mb-pin-input--disabled\"\r\n : undefined,\r\n className,\r\n );\r\n\r\n return (\r\n <div\r\n className={classes}\r\n role=\"group\"\r\n aria-label={ariaLabel}\r\n {...props}\r\n >\r\n {name ? (\r\n <input\r\n type=\"hidden\"\r\n name={name}\r\n value={currentValue}\r\n />\r\n ) : null}\r\n\r\n {Array.from({\r\n length: resolvedLength,\r\n }).map((_, index) => {\r\n const character =\r\n currentValue[index] ?? \"\";\r\n\r\n return (\r\n <input\r\n key={index}\r\n ref={(element) => {\r\n inputRefs.current[index] =\r\n element;\r\n }}\r\n className=\"mb-pin-input__control\"\r\n type={\r\n resolvedMask\r\n ? \"password\"\r\n : \"text\"\r\n }\r\n inputMode={\r\n resolvedType === \"number\"\r\n ? \"numeric\"\r\n : \"text\"\r\n }\r\n pattern={\r\n resolvedType === \"number\"\r\n ? \"[0-9]*\"\r\n : undefined\r\n }\r\n autoComplete={\r\n oneTimeCode && index === 0\r\n ? \"one-time-code\"\r\n : \"off\"\r\n }\r\n value={character}\r\n placeholder={\r\n placeholder.slice(0, 1)\r\n }\r\n disabled={disabled}\r\n aria-invalid={\r\n error || undefined\r\n }\r\n aria-label={`Символ ${\r\n index + 1\r\n } из ${resolvedLength}`}\r\n maxLength={\r\n index === 0\r\n ? resolvedLength\r\n : 1\r\n }\r\n autoFocus={\r\n autoFocus && index === 0\r\n }\r\n onFocus={(event) => {\r\n event.currentTarget.select();\r\n }}\r\n onChange={(event) => {\r\n handleInputChange(\r\n index,\r\n event.currentTarget.value,\r\n );\r\n }}\r\n onKeyDown={(event) => {\r\n handleKeyDown(\r\n event,\r\n index,\r\n );\r\n }}\r\n onPaste={(event) => {\r\n handlePaste(event, index);\r\n }}\r\n />\r\n );\r\n })}\r\n </div>\r\n );\r\n});","import {\r\n forwardRef,\r\n useId,\r\n useImperativeHandle,\r\n useRef,\r\n useState,\r\n type ChangeEvent,\r\n type DragEvent,\r\n type HTMLAttributes,\r\n type ReactNode,\r\n} from \"react\";\r\n\r\nimport {\r\n useComponentDefaults,\r\n} from \"../../provider\";\r\n\r\nimport {\r\n cx,\r\n} from \"../../utils\";\r\n\r\nimport {\r\n Icon,\r\n} from \"../Icon\";\r\n\r\nimport \"./FileInput.css\";\r\n\r\nexport type FileInputSize =\r\n | \"sm\"\r\n | \"md\"\r\n | \"lg\";\r\n\r\nexport interface FileInputProps\r\n extends Omit<\r\n HTMLAttributes<HTMLDivElement>,\r\n \"onChange\" | \"title\"\r\n > {\r\n name?: string;\r\n\r\n accept?: string;\r\n multiple?: boolean;\r\n\r\n maxSize?: number;\r\n\r\n disabled?: boolean;\r\n error?: boolean;\r\n\r\n size?: FileInputSize;\r\n\r\n title?: ReactNode;\r\n description?: ReactNode;\r\n\r\n acceptLabel?: ReactNode;\r\n maxSizeLabel?: ReactNode;\r\n\r\n icon?: ReactNode;\r\n\r\n showFileList?: boolean;\r\n\r\n onFilesChange?: (\r\n files: File[],\r\n ) => void;\r\n\r\n onRejected?: (\r\n files: File[],\r\n reason: \"type\" | \"size\",\r\n ) => void;\r\n}\r\n\r\nfunction UploadIcon() {\r\n return (\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n d=\"M12 15V3\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.7\"\r\n strokeLinecap=\"round\"\r\n />\r\n\r\n <path\r\n d=\"M8.5 6.5L12 3L15.5 6.5\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.7\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n\r\n <path\r\n d=\"M7 10H5.8C4.81 10 4 10.81 4 11.8V18.2C4 19.19 4.81 20 5.8 20H18.2C19.19 20 20 19.19 20 18.2V11.8C20 10.81 19.19 10 18.2 10H17\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.7\"\r\n strokeLinecap=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nfunction formatBytes(bytes: number) {\r\n if (bytes === 0) {\r\n return \"0 Б\";\r\n }\r\n\r\n const units = [\r\n \"Б\",\r\n \"КБ\",\r\n \"МБ\",\r\n \"ГБ\",\r\n \"ТБ\",\r\n ];\r\n\r\n const unitIndex = Math.min(\r\n Math.floor(\r\n Math.log(bytes) /\r\n Math.log(1024),\r\n ),\r\n units.length - 1,\r\n );\r\n\r\n const value =\r\n bytes /\r\n 1024 ** unitIndex;\r\n\r\n return `${Number(\r\n value.toFixed(1),\r\n )} ${units[unitIndex]}`;\r\n}\r\n\r\nfunction getAcceptTokens(\r\n accept?: string,\r\n) {\r\n if (!accept) {\r\n return [];\r\n }\r\n\r\n return accept\r\n .split(\",\")\r\n .map((token) =>\r\n token.trim().toLowerCase(),\r\n )\r\n .filter(Boolean);\r\n}\r\n\r\nfunction isFileAccepted(\r\n file: File,\r\n accept?: string,\r\n) {\r\n const tokens =\r\n getAcceptTokens(accept);\r\n\r\n if (tokens.length === 0) {\r\n return true;\r\n }\r\n\r\n const fileName =\r\n file.name.toLowerCase();\r\n\r\n const fileType =\r\n file.type.toLowerCase();\r\n\r\n return tokens.some((token) => {\r\n if (token.startsWith(\".\")) {\r\n return fileName.endsWith(token);\r\n }\r\n\r\n if (token.endsWith(\"/*\")) {\r\n const category =\r\n token.slice(0, -1);\r\n\r\n return fileType.startsWith(\r\n category,\r\n );\r\n }\r\n\r\n return fileType === token;\r\n });\r\n}\r\n\r\nexport const FileInput = forwardRef<\r\n HTMLInputElement,\r\n FileInputProps\r\n>(function FileInput(\r\n {\r\n name,\r\n\r\n accept,\r\n multiple = false,\r\n\r\n maxSize,\r\n\r\n disabled = false,\r\n error = false,\r\n\r\n size,\r\n\r\n title = (\r\n <>\r\n Перенесите файлы сюда или\r\n нажмите, чтобы загрузить\r\n </>\r\n ),\r\n\r\n description,\r\n\r\n acceptLabel,\r\n maxSizeLabel,\r\n\r\n icon,\r\n\r\n showFileList = true,\r\n\r\n onFilesChange,\r\n onRejected,\r\n\r\n className = \"\",\r\n children,\r\n\r\n ...props\r\n },\r\n forwardedRef,\r\n) {\r\n const defaults =\r\n useComponentDefaults(\r\n \"FileInput\",\r\n );\r\n\r\n const resolvedSize =\r\n size ??\r\n defaults.size ??\r\n \"md\";\r\n\r\n const resolvedMultiple =\r\n multiple ??\r\n defaults.multiple ??\r\n false;\r\n\r\n const resolvedMaxSize =\r\n maxSize ??\r\n defaults.maxSize;\r\n\r\n const inputId = useId();\r\n\r\n const inputRef =\r\n useRef<HTMLInputElement | null>(\r\n null,\r\n );\r\n\r\n const [\r\n dragging,\r\n setDragging,\r\n ] = useState(false);\r\n\r\n const [\r\n selectedFiles,\r\n setSelectedFiles,\r\n ] = useState<File[]>([]);\r\n\r\n useImperativeHandle(\r\n forwardedRef,\r\n () =>\r\n inputRef.current as HTMLInputElement,\r\n );\r\n\r\n function validateFiles(\r\n incomingFiles: File[],\r\n ) {\r\n const acceptedFiles: File[] = [];\r\n const typeRejected: File[] = [];\r\n const sizeRejected: File[] = [];\r\n\r\n incomingFiles.forEach((file) => {\r\n if (\r\n !isFileAccepted(\r\n file,\r\n accept,\r\n )\r\n ) {\r\n typeRejected.push(file);\r\n return;\r\n }\r\n\r\n if (\r\n resolvedMaxSize !==\r\n undefined &&\r\n file.size >\r\n resolvedMaxSize\r\n ) {\r\n sizeRejected.push(file);\r\n return;\r\n }\r\n\r\n acceptedFiles.push(file);\r\n });\r\n\r\n if (\r\n typeRejected.length > 0\r\n ) {\r\n onRejected?.(\r\n typeRejected,\r\n \"type\",\r\n );\r\n }\r\n\r\n if (\r\n sizeRejected.length > 0\r\n ) {\r\n onRejected?.(\r\n sizeRejected,\r\n \"size\",\r\n );\r\n }\r\n\r\n return resolvedMultiple\r\n ? acceptedFiles\r\n : acceptedFiles.slice(0, 1);\r\n }\r\n\r\n function commitFiles(\r\n incomingFiles: File[],\r\n ) {\r\n const nextFiles =\r\n validateFiles(incomingFiles);\r\n\r\n setSelectedFiles(nextFiles);\r\n onFilesChange?.(nextFiles);\r\n }\r\n\r\n function openFileDialog() {\r\n if (disabled) {\r\n return;\r\n }\r\n\r\n inputRef.current?.click();\r\n }\r\n\r\n function handleInputChange(\r\n event: ChangeEvent<HTMLInputElement>,\r\n ) {\r\n const files =\r\n Array.from(\r\n event.currentTarget.files ??\r\n [],\r\n );\r\n\r\n commitFiles(files);\r\n\r\n event.currentTarget.value = \"\";\r\n }\r\n\r\n function handleDragEnter(\r\n event: DragEvent<HTMLDivElement>,\r\n ) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (!disabled) {\r\n setDragging(true);\r\n }\r\n }\r\n\r\n function handleDragOver(\r\n event: DragEvent<HTMLDivElement>,\r\n ) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (\r\n !disabled &&\r\n event.dataTransfer\r\n ) {\r\n event.dataTransfer.dropEffect =\r\n \"copy\";\r\n }\r\n }\r\n\r\n function handleDragLeave(\r\n event: DragEvent<HTMLDivElement>,\r\n ) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (\r\n event.currentTarget.contains(\r\n event.relatedTarget as Node,\r\n )\r\n ) {\r\n return;\r\n }\r\n\r\n setDragging(false);\r\n }\r\n\r\n function handleDrop(\r\n event: DragEvent<HTMLDivElement>,\r\n ) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n setDragging(false);\r\n\r\n if (disabled) {\r\n return;\r\n }\r\n\r\n const files = Array.from(\r\n event.dataTransfer.files,\r\n );\r\n\r\n commitFiles(files);\r\n }\r\n\r\n function removeFile(\r\n index: number,\r\n ) {\r\n const nextFiles =\r\n selectedFiles.filter(\r\n (_, fileIndex) =>\r\n fileIndex !== index,\r\n );\r\n\r\n setSelectedFiles(nextFiles);\r\n onFilesChange?.(nextFiles);\r\n }\r\n\r\n const classes = cx(\r\n \"mb-file-input\",\r\n `mb-file-input--${resolvedSize}`,\r\n dragging\r\n ? \"mb-file-input--dragging\"\r\n : undefined,\r\n error\r\n ? \"mb-file-input--error\"\r\n : undefined,\r\n disabled\r\n ? \"mb-file-input--disabled\"\r\n : undefined,\r\n className,\r\n );\r\n\r\n const resolvedAcceptLabel =\r\n acceptLabel ??\r\n (accept\r\n ? `Формат: ${accept}`\r\n : null);\r\n\r\n const resolvedMaxSizeLabel =\r\n maxSizeLabel ??\r\n (resolvedMaxSize !== undefined\r\n ? `Максимальный размер: ${formatBytes(\r\n resolvedMaxSize,\r\n )}`\r\n : null);\r\n\r\n return (\r\n <div\r\n className={classes}\r\n {...props}\r\n >\r\n <input\r\n ref={inputRef}\r\n id={inputId}\r\n type=\"file\"\r\n name={name}\r\n className=\"mb-file-input__native\"\r\n accept={accept}\r\n multiple={resolvedMultiple}\r\n disabled={disabled}\r\n tabIndex={-1}\r\n onChange={handleInputChange}\r\n />\r\n\r\n <div\r\n className=\"mb-file-input__dropzone\"\r\n role=\"button\"\r\n tabIndex={\r\n disabled ? -1 : 0\r\n }\r\n aria-disabled={\r\n disabled || undefined\r\n }\r\n aria-describedby={\r\n `${inputId}-description`\r\n }\r\n onClick={openFileDialog}\r\n onKeyDown={(event) => {\r\n if (\r\n event.key === \"Enter\" ||\r\n event.key === \" \"\r\n ) {\r\n event.preventDefault();\r\n openFileDialog();\r\n }\r\n }}\r\n onDragEnter={\r\n handleDragEnter\r\n }\r\n onDragOver={handleDragOver}\r\n onDragLeave={\r\n handleDragLeave\r\n }\r\n onDrop={handleDrop}\r\n >\r\n <span className=\"mb-file-input__icon\">\r\n <Icon\r\n size={\r\n resolvedSize === \"lg\"\r\n ? 30\r\n : resolvedSize ===\r\n \"sm\"\r\n ? 22\r\n : 26\r\n }\r\n >\r\n {icon ?? <UploadIcon />}\r\n </Icon>\r\n </span>\r\n\r\n <div className=\"mb-file-input__body\">\r\n <div className=\"mb-file-input__title\">\r\n {title}\r\n </div>\r\n\r\n {description != null ? (\r\n <div className=\"mb-file-input__description\">\r\n {description}\r\n </div>\r\n ) : null}\r\n\r\n {resolvedAcceptLabel !=\r\n null ||\r\n resolvedMaxSizeLabel !=\r\n null ? (\r\n <div\r\n id={`${inputId}-description`}\r\n className=\"mb-file-input__meta\"\r\n >\r\n {resolvedAcceptLabel !=\r\n null ? (\r\n <span>\r\n {resolvedAcceptLabel}\r\n </span>\r\n ) : null}\r\n\r\n {resolvedMaxSizeLabel !=\r\n null ? (\r\n <span>\r\n {\r\n resolvedMaxSizeLabel\r\n }\r\n </span>\r\n ) : null}\r\n </div>\r\n ) : null}\r\n\r\n {children}\r\n </div>\r\n </div>\r\n\r\n {showFileList &&\r\n selectedFiles.length > 0 ? (\r\n <div className=\"mb-file-input__files\">\r\n {selectedFiles.map(\r\n (file, index) => (\r\n <div\r\n key={`${file.name}-${file.lastModified}-${index}`}\r\n className=\"mb-file-input__file\"\r\n >\r\n <div className=\"mb-file-input__file-info\">\r\n <span className=\"mb-file-input__file-name\">\r\n {file.name}\r\n </span>\r\n\r\n <span className=\"mb-file-input__file-size\">\r\n {formatBytes(\r\n file.size,\r\n )}\r\n </span>\r\n </div>\r\n\r\n <button\r\n type=\"button\"\r\n className=\"mb-file-input__remove\"\r\n aria-label={`Удалить файл ${file.name}`}\r\n disabled={disabled}\r\n onClick={() => {\r\n removeFile(index);\r\n }}\r\n >\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n d=\"M7 7L17 17\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n />\r\n\r\n <path\r\n d=\"M17 7L7 17\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n </div>\r\n ),\r\n )}\r\n </div>\r\n ) : null}\r\n </div>\r\n );\r\n});","import {\r\n forwardRef,\r\n type ButtonHTMLAttributes,\r\n type HTMLAttributes,\r\n type ReactNode,\r\n} from \"react\";\r\n\r\nimport {\r\n useControllableState,\r\n} from \"../../hooks\";\r\n\r\nimport {\r\n useComponentDefaults,\r\n} from \"../../provider\";\r\n\r\nimport {\r\n cx,\r\n} from \"../../utils\";\r\n\r\nimport \"./Pagination.css\";\r\n\r\nexport type PaginationSize =\r\n | \"sm\"\r\n | \"md\"\r\n | \"lg\";\r\n\r\nexport type PaginationVariant =\r\n | \"default\"\r\n | \"filled\";\r\n\r\nexport interface PaginationProps\r\n extends Omit<\r\n HTMLAttributes<HTMLElement>,\r\n \"onChange\"\r\n > {\r\n total: number;\r\n\r\n value?: number;\r\n defaultValue?: number;\r\n\r\n onChange?: (page: number) => void;\r\n\r\n siblings?: number;\r\n boundaries?: number;\r\n\r\n size?: PaginationSize;\r\n variant?: PaginationVariant;\r\n\r\n disabled?: boolean;\r\n\r\n withEdges?: boolean;\r\n withControls?: boolean;\r\n\r\n previousLabel?: string;\r\n nextLabel?: string;\r\n firstLabel?: string;\r\n lastLabel?: string;\r\n\r\n previousIcon?: ReactNode;\r\n nextIcon?: ReactNode;\r\n firstIcon?: ReactNode;\r\n lastIcon?: ReactNode;\r\n}\r\n\r\ntype PaginationItem =\r\n | number\r\n | \"dots-left\"\r\n | \"dots-right\";\r\n\r\nfunction clampPage(\r\n page: number,\r\n total: number,\r\n) {\r\n return Math.min(\r\n Math.max(\r\n Math.floor(page),\r\n 1,\r\n ),\r\n total,\r\n );\r\n}\r\n\r\nfunction range(\r\n start: number,\r\n end: number,\r\n) {\r\n if (end < start) {\r\n return [];\r\n }\r\n\r\n return Array.from(\r\n {\r\n length:\r\n end - start + 1,\r\n },\r\n (_, index) =>\r\n start + index,\r\n );\r\n}\r\n\r\nfunction getPaginationItems({\r\n total,\r\n page,\r\n siblings,\r\n boundaries,\r\n}: {\r\n total: number;\r\n page: number;\r\n siblings: number;\r\n boundaries: number;\r\n}): PaginationItem[] {\r\n const visiblePages =\r\n siblings * 2 +\r\n boundaries * 2 +\r\n 3;\r\n\r\n if (\r\n total <= visiblePages\r\n ) {\r\n return range(1, total);\r\n }\r\n\r\n const leftBoundaryEnd =\r\n boundaries;\r\n\r\n const rightBoundaryStart =\r\n total -\r\n boundaries +\r\n 1;\r\n\r\n const siblingsStart =\r\n Math.max(\r\n page - siblings,\r\n leftBoundaryEnd + 2,\r\n );\r\n\r\n const siblingsEnd =\r\n Math.min(\r\n page + siblings,\r\n rightBoundaryStart - 2,\r\n );\r\n\r\n const showLeftDots =\r\n siblingsStart >\r\n leftBoundaryEnd + 2;\r\n\r\n const showRightDots =\r\n siblingsEnd <\r\n rightBoundaryStart - 2;\r\n\r\n const items: PaginationItem[] = [\r\n ...range(\r\n 1,\r\n leftBoundaryEnd,\r\n ),\r\n ];\r\n\r\n if (showLeftDots) {\r\n items.push(\"dots-left\");\r\n } else {\r\n items.push(\r\n ...range(\r\n leftBoundaryEnd + 1,\r\n siblingsStart - 1,\r\n ),\r\n );\r\n }\r\n\r\n items.push(\r\n ...range(\r\n siblingsStart,\r\n siblingsEnd,\r\n ),\r\n );\r\n\r\n if (showRightDots) {\r\n items.push(\"dots-right\");\r\n } else {\r\n items.push(\r\n ...range(\r\n siblingsEnd + 1,\r\n rightBoundaryStart - 1,\r\n ),\r\n );\r\n }\r\n\r\n items.push(\r\n ...range(\r\n rightBoundaryStart,\r\n total,\r\n ),\r\n );\r\n\r\n return items;\r\n}\r\n\r\nfunction ChevronLeftIcon() {\r\n return (\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n d=\"M14.5 6.5L9 12L14.5 17.5\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nfunction ChevronRightIcon() {\r\n return (\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n d=\"M9.5 6.5L15 12L9.5 17.5\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nfunction ChevronsLeftIcon() {\r\n return (\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n d=\"M11 7L6 12L11 17\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n\r\n <path\r\n d=\"M18 7L13 12L18 17\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nfunction ChevronsRightIcon() {\r\n return (\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n d=\"M13 7L18 12L13 17\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n\r\n <path\r\n d=\"M6 7L11 12L6 17\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\ninterface PaginationButtonProps\r\n extends ButtonHTMLAttributes<HTMLButtonElement> {\r\n active?: boolean;\r\n children: ReactNode;\r\n}\r\n\r\nconst PaginationButton =\r\n forwardRef<\r\n HTMLButtonElement,\r\n PaginationButtonProps\r\n >(function PaginationButton(\r\n {\r\n active = false,\r\n className = \"\",\r\n children,\r\n ...props\r\n },\r\n ref,\r\n ) {\r\n return (\r\n <button\r\n ref={ref}\r\n type=\"button\"\r\n className={cx(\r\n \"mb-pagination__control\",\r\n active\r\n ? \"mb-pagination__control--active\"\r\n : undefined,\r\n className,\r\n )}\r\n aria-current={\r\n active\r\n ? \"page\"\r\n : undefined\r\n }\r\n {...props}\r\n >\r\n {children}\r\n </button>\r\n );\r\n });\r\n\r\nexport const Pagination =\r\n forwardRef<\r\n HTMLElement,\r\n PaginationProps\r\n >(function Pagination(\r\n {\r\n total,\r\n\r\n value,\r\n defaultValue = 1,\r\n\r\n onChange,\r\n\r\n siblings = 1,\r\n boundaries = 1,\r\n\r\n size,\r\n variant,\r\n\r\n disabled = false,\r\n\r\n withEdges = false,\r\n withControls = true,\r\n\r\n previousLabel =\r\n \"Предыдущая страница\",\r\n\r\n nextLabel =\r\n \"Следующая страница\",\r\n\r\n firstLabel =\r\n \"Первая страница\",\r\n\r\n lastLabel =\r\n \"Последняя страница\",\r\n\r\n previousIcon,\r\n nextIcon,\r\n firstIcon,\r\n lastIcon,\r\n\r\n className = \"\",\r\n\r\n ...props\r\n },\r\n ref,\r\n ) {\r\n const defaults =\r\n useComponentDefaults(\r\n \"Pagination\",\r\n );\r\n\r\n const resolvedTotal =\r\n Math.max(\r\n 1,\r\n Math.floor(total),\r\n );\r\n\r\n const resolvedSize =\r\n size ??\r\n defaults.size ??\r\n \"md\";\r\n\r\n const resolvedVariant =\r\n variant ??\r\n defaults.variant ??\r\n \"default\";\r\n\r\n const resolvedSiblings =\r\n Math.max(\r\n 0,\r\n Math.floor(\r\n siblings ??\r\n defaults.siblings ??\r\n 1,\r\n ),\r\n );\r\n\r\n const resolvedBoundaries =\r\n Math.max(\r\n 0,\r\n Math.floor(\r\n boundaries ??\r\n defaults.boundaries ??\r\n 1,\r\n ),\r\n );\r\n\r\n const resolvedWithEdges =\r\n withEdges ??\r\n defaults.withEdges ??\r\n false;\r\n\r\n const resolvedWithControls =\r\n withControls ??\r\n defaults.withControls ??\r\n true;\r\n\r\n const [\r\n currentPage,\r\n setCurrentPage,\r\n ] =\r\n useControllableState<number>({\r\n value:\r\n value === undefined\r\n ? undefined\r\n : clampPage(\r\n value,\r\n resolvedTotal,\r\n ),\r\n\r\n defaultValue:\r\n clampPage(\r\n defaultValue,\r\n resolvedTotal,\r\n ),\r\n\r\n onChange: (\r\n nextPage,\r\n ) => {\r\n onChange?.(\r\n clampPage(\r\n nextPage,\r\n resolvedTotal,\r\n ),\r\n );\r\n },\r\n });\r\n\r\n const page =\r\n clampPage(\r\n currentPage,\r\n resolvedTotal,\r\n );\r\n\r\n const items =\r\n getPaginationItems({\r\n total:\r\n resolvedTotal,\r\n page,\r\n siblings:\r\n resolvedSiblings,\r\n boundaries:\r\n resolvedBoundaries,\r\n });\r\n\r\n function setPage(\r\n nextPage: number,\r\n ) {\r\n if (disabled) {\r\n return;\r\n }\r\n\r\n const safePage =\r\n clampPage(\r\n nextPage,\r\n resolvedTotal,\r\n );\r\n\r\n if (\r\n safePage === page\r\n ) {\r\n return;\r\n }\r\n\r\n setCurrentPage(\r\n safePage,\r\n );\r\n }\r\n\r\n return (\r\n <nav\r\n ref={ref}\r\n className={cx(\r\n \"mb-pagination\",\r\n `mb-pagination--${resolvedSize}`,\r\n `mb-pagination--${resolvedVariant}`,\r\n disabled\r\n ? \"mb-pagination--disabled\"\r\n : undefined,\r\n className,\r\n )}\r\n aria-label=\"Пагинация\"\r\n {...props}\r\n >\r\n {resolvedWithEdges ? (\r\n <PaginationButton\r\n aria-label={\r\n firstLabel\r\n }\r\n disabled={\r\n disabled ||\r\n page === 1\r\n }\r\n onClick={() => {\r\n setPage(1);\r\n }}\r\n >\r\n <span className=\"mb-pagination__icon\">\r\n {firstIcon ?? (\r\n <ChevronsLeftIcon />\r\n )}\r\n </span>\r\n </PaginationButton>\r\n ) : null}\r\n\r\n {resolvedWithControls ? (\r\n <PaginationButton\r\n aria-label={\r\n previousLabel\r\n }\r\n disabled={\r\n disabled ||\r\n page === 1\r\n }\r\n onClick={() => {\r\n setPage(\r\n page - 1,\r\n );\r\n }}\r\n >\r\n <span className=\"mb-pagination__icon\">\r\n {previousIcon ?? (\r\n <ChevronLeftIcon />\r\n )}\r\n </span>\r\n </PaginationButton>\r\n ) : null}\r\n\r\n {items.map(\r\n (item) => {\r\n if (\r\n typeof item ===\r\n \"number\"\r\n ) {\r\n return (\r\n <PaginationButton\r\n key={item}\r\n active={\r\n item === page\r\n }\r\n disabled={\r\n disabled\r\n }\r\n aria-label={`Страница ${item}`}\r\n onClick={() => {\r\n setPage(item);\r\n }}\r\n >\r\n {item}\r\n </PaginationButton>\r\n );\r\n }\r\n\r\n return (\r\n <span\r\n key={item}\r\n className=\"mb-pagination__dots\"\r\n aria-hidden=\"true\"\r\n >\r\n …\r\n </span>\r\n );\r\n },\r\n )}\r\n\r\n {resolvedWithControls ? (\r\n <PaginationButton\r\n aria-label={\r\n nextLabel\r\n }\r\n disabled={\r\n disabled ||\r\n page ===\r\n resolvedTotal\r\n }\r\n onClick={() => {\r\n setPage(\r\n page + 1,\r\n );\r\n }}\r\n >\r\n <span className=\"mb-pagination__icon\">\r\n {nextIcon ?? (\r\n <ChevronRightIcon />\r\n )}\r\n </span>\r\n </PaginationButton>\r\n ) : null}\r\n\r\n {resolvedWithEdges ? (\r\n <PaginationButton\r\n aria-label={\r\n lastLabel\r\n }\r\n disabled={\r\n disabled ||\r\n page ===\r\n resolvedTotal\r\n }\r\n onClick={() => {\r\n setPage(\r\n resolvedTotal,\r\n );\r\n }}\r\n >\r\n <span className=\"mb-pagination__icon\">\r\n {lastIcon ?? (\r\n <ChevronsRightIcon />\r\n )}\r\n </span>\r\n </PaginationButton>\r\n ) : null}\r\n </nav>\r\n );\r\n });","import {\r\n useEffect,\r\n useMemo,\r\n useState,\r\n type HTMLAttributes,\r\n} from \"react\";\r\n\r\nimport {\r\n useControllableState,\r\n} from \"../../hooks\";\r\n\r\nimport {\r\n useComponentDefaults,\r\n} from \"../../provider\";\r\n\r\nimport {\r\n cx,\r\n} from \"../../utils\";\r\n\r\nimport {\r\n Popover,\r\n} from \"../Popover\";\r\n\r\nimport \"./DatePicker.css\";\r\n\r\nexport type DatePickerSize =\r\n | \"sm\"\r\n | \"md\"\r\n | \"lg\";\r\n\r\nexport type DatePickerType =\r\n | \"single\"\r\n | \"range\";\r\n\r\nexport type DateRangeValue = [\r\n Date | null,\r\n Date | null,\r\n];\r\n\r\nexport type DatePickerValue =\r\n | Date\r\n | null\r\n | DateRangeValue;\r\n\r\nexport interface DatePickerProps\r\n extends Omit<\r\n HTMLAttributes<HTMLDivElement>,\r\n \"defaultValue\" | \"onChange\"\r\n > {\r\n type?: DatePickerType;\r\n\r\n value?: DatePickerValue;\r\n defaultValue?: DatePickerValue;\r\n\r\n onChange?: (\r\n value: DatePickerValue,\r\n ) => void;\r\n\r\n size?: DatePickerSize;\r\n\r\n placeholder?: string;\r\n rangeSeparator?: string;\r\n\r\n locale?: string;\r\n firstDayOfWeek?: 0 | 1;\r\n\r\n minDate?: Date;\r\n maxDate?: Date;\r\n\r\n disabled?: boolean;\r\n error?: boolean;\r\n clearable?: boolean;\r\n\r\n name?: string;\r\n\r\n dateFormat?:\r\n Intl.DateTimeFormatOptions;\r\n}\r\n\r\nconst DEFAULT_DATE_FORMAT:\r\n Intl.DateTimeFormatOptions = {\r\n day: \"2-digit\",\r\n month: \"2-digit\",\r\n year: \"numeric\",\r\n };\r\n\r\nfunction CalendarIcon() {\r\n return (\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden=\"true\"\r\n >\r\n <rect\r\n x=\"3\"\r\n y=\"5\"\r\n width=\"18\"\r\n height=\"16\"\r\n rx=\"2.5\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.8\"\r\n />\r\n\r\n <path\r\n d=\"M8 3V7\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.8\"\r\n strokeLinecap=\"round\"\r\n />\r\n\r\n <path\r\n d=\"M16 3V7\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.8\"\r\n strokeLinecap=\"round\"\r\n />\r\n\r\n <path\r\n d=\"M3 9H21\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.8\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nfunction ChevronLeftIcon() {\r\n return (\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n d=\"M14.5 6.5L9 12L14.5 17.5\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nfunction ChevronRightIcon() {\r\n return (\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n d=\"M9.5 6.5L15 12L9.5 17.5\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nfunction CloseIcon() {\r\n return (\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n d=\"M7 7L17 17\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n />\r\n\r\n <path\r\n d=\"M17 7L7 17\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nfunction startOfDay(\r\n date: Date,\r\n): Date {\r\n return new Date(\r\n date.getFullYear(),\r\n date.getMonth(),\r\n date.getDate(),\r\n );\r\n}\r\n\r\nfunction startOfMonth(\r\n date: Date,\r\n): Date {\r\n return new Date(\r\n date.getFullYear(),\r\n date.getMonth(),\r\n 1,\r\n );\r\n}\r\n\r\nfunction endOfMonth(\r\n date: Date,\r\n): Date {\r\n return new Date(\r\n date.getFullYear(),\r\n date.getMonth() + 1,\r\n 0,\r\n );\r\n}\r\n\r\nfunction addDays(\r\n date: Date,\r\n amount: number,\r\n): Date {\r\n return new Date(\r\n date.getFullYear(),\r\n date.getMonth(),\r\n date.getDate() + amount,\r\n );\r\n}\r\n\r\nfunction addMonths(\r\n date: Date,\r\n amount: number,\r\n): Date {\r\n return new Date(\r\n date.getFullYear(),\r\n date.getMonth() + amount,\r\n 1,\r\n );\r\n}\r\n\r\nfunction isSameDay(\r\n first: Date,\r\n second: Date,\r\n): boolean {\r\n return (\r\n first.getFullYear() ===\r\n second.getFullYear() &&\r\n first.getMonth() ===\r\n second.getMonth() &&\r\n first.getDate() ===\r\n second.getDate()\r\n );\r\n}\r\n\r\nfunction isBeforeDay(\r\n first: Date,\r\n second: Date,\r\n): boolean {\r\n return (\r\n startOfDay(first).getTime() <\r\n startOfDay(second).getTime()\r\n );\r\n}\r\n\r\nfunction isAfterDay(\r\n first: Date,\r\n second: Date,\r\n): boolean {\r\n return (\r\n startOfDay(first).getTime() >\r\n startOfDay(second).getTime()\r\n );\r\n}\r\n\r\nfunction isDateInRange(\r\n date: Date,\r\n start: Date | null,\r\n end: Date | null,\r\n): boolean {\r\n if (!start || !end) {\r\n return false;\r\n }\r\n\r\n return (\r\n !isBeforeDay(date, start) &&\r\n !isAfterDay(date, end)\r\n );\r\n}\r\n\r\nfunction isDateDisabled(\r\n date: Date,\r\n minDate?: Date,\r\n maxDate?: Date,\r\n): boolean {\r\n if (\r\n minDate &&\r\n isBeforeDay(date, minDate)\r\n ) {\r\n return true;\r\n }\r\n\r\n if (\r\n maxDate &&\r\n isAfterDay(date, maxDate)\r\n ) {\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction getCalendarDays(\r\n month: Date,\r\n firstDayOfWeek: 0 | 1,\r\n): Date[] {\r\n const firstDate =\r\n startOfMonth(month);\r\n\r\n const weekday =\r\n firstDate.getDay();\r\n\r\n const offset =\r\n firstDayOfWeek === 1\r\n ? (weekday + 6) % 7\r\n : weekday;\r\n\r\n const gridStart =\r\n addDays(firstDate, -offset);\r\n\r\n return Array.from(\r\n {\r\n length: 42,\r\n },\r\n (_, index) =>\r\n addDays(gridStart, index),\r\n );\r\n}\r\n\r\nfunction getWeekdayLabels(\r\n locale: string,\r\n firstDayOfWeek: 0 | 1,\r\n): string[] {\r\n const sunday =\r\n new Date(2024, 0, 7);\r\n\r\n return Array.from(\r\n {\r\n length: 7,\r\n },\r\n (_, index) => {\r\n const dayOffset =\r\n firstDayOfWeek === 1\r\n ? index + 1\r\n : index;\r\n\r\n return new Intl.DateTimeFormat(\r\n locale,\r\n {\r\n weekday: \"short\",\r\n },\r\n )\r\n .format(\r\n addDays(\r\n sunday,\r\n dayOffset,\r\n ),\r\n )\r\n .replace(\".\", \"\");\r\n },\r\n );\r\n}\r\n\r\nfunction normalizeSingleValue(\r\n value: DatePickerValue | undefined,\r\n): Date | null {\r\n if (\r\n value instanceof Date &&\r\n !Number.isNaN(value.getTime())\r\n ) {\r\n return startOfDay(value);\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction normalizeRangeValue(\r\n value: DatePickerValue | undefined,\r\n): DateRangeValue {\r\n if (!Array.isArray(value)) {\r\n return [null, null];\r\n }\r\n\r\n const start =\r\n value[0] instanceof Date &&\r\n !Number.isNaN(\r\n value[0].getTime(),\r\n )\r\n ? startOfDay(value[0])\r\n : null;\r\n\r\n const end =\r\n value[1] instanceof Date &&\r\n !Number.isNaN(\r\n value[1].getTime(),\r\n )\r\n ? startOfDay(value[1])\r\n : null;\r\n\r\n return [start, end];\r\n}\r\n\r\nfunction formatDate(\r\n date: Date,\r\n locale: string,\r\n options:\r\n Intl.DateTimeFormatOptions,\r\n): string {\r\n return new Intl.DateTimeFormat(\r\n locale,\r\n options,\r\n ).format(date);\r\n}\r\n\r\nfunction toInputDate(\r\n date: Date | null,\r\n): string {\r\n if (!date) {\r\n return \"\";\r\n }\r\n\r\n const year =\r\n date.getFullYear();\r\n\r\n const month =\r\n String(\r\n date.getMonth() + 1,\r\n ).padStart(2, \"0\");\r\n\r\n const day =\r\n String(\r\n date.getDate(),\r\n ).padStart(2, \"0\");\r\n\r\n return `${year}-${month}-${day}`;\r\n}\r\n\r\nexport function DatePicker({\r\n type = \"single\",\r\n\r\n value,\r\n defaultValue,\r\n\r\n onChange,\r\n\r\n size,\r\n\r\n placeholder,\r\n rangeSeparator = \"—\",\r\n\r\n locale = \"ru-RU\",\r\n firstDayOfWeek,\r\n\r\n minDate,\r\n maxDate,\r\n\r\n disabled = false,\r\n error = false,\r\n clearable,\r\n\r\n name,\r\n\r\n dateFormat =\r\n DEFAULT_DATE_FORMAT,\r\n\r\n className = \"\",\r\n\r\n ...props\r\n}: DatePickerProps) {\r\n const defaults =\r\n useComponentDefaults(\r\n \"DatePicker\",\r\n );\r\n\r\n const resolvedSize =\r\n size ??\r\n defaults.size ??\r\n \"md\";\r\n\r\n const resolvedFirstDayOfWeek =\r\n firstDayOfWeek ??\r\n defaults.firstDayOfWeek ??\r\n 1;\r\n\r\n const resolvedClearable =\r\n clearable ??\r\n defaults.clearable ??\r\n true;\r\n\r\n const resolvedPlaceholder =\r\n placeholder ??\r\n (type === \"range\"\r\n ? \"Выберите период\"\r\n : \"Выберите дату\");\r\n\r\n const normalizedDefaultValue =\r\n type === \"range\"\r\n ? normalizeRangeValue(\r\n defaultValue,\r\n )\r\n : normalizeSingleValue(\r\n defaultValue,\r\n );\r\n\r\n const normalizedControlledValue =\r\n value === undefined\r\n ? undefined\r\n : type === \"range\"\r\n ? normalizeRangeValue(value)\r\n : normalizeSingleValue(value);\r\n\r\n const [\r\n currentValue,\r\n setCurrentValue,\r\n ] =\r\n useControllableState<\r\n DatePickerValue\r\n >({\r\n value:\r\n normalizedControlledValue,\r\n defaultValue:\r\n normalizedDefaultValue,\r\n onChange,\r\n });\r\n\r\n const singleValue =\r\n type === \"single\"\r\n ? normalizeSingleValue(\r\n currentValue,\r\n )\r\n : null;\r\n\r\n const rangeValue =\r\n type === \"range\"\r\n ? normalizeRangeValue(\r\n currentValue,\r\n )\r\n : ([null, null] as DateRangeValue);\r\n\r\n const [\r\n rangeStart,\r\n rangeEnd,\r\n ] = rangeValue;\r\n\r\n const [\r\n opened,\r\n setOpened,\r\n ] = useState(false);\r\n\r\n const initialVisibleDate =\r\n singleValue ??\r\n rangeStart ??\r\n minDate ??\r\n new Date();\r\n\r\n const [\r\n visibleMonth,\r\n setVisibleMonth,\r\n ] = useState<Date>(\r\n startOfMonth(\r\n initialVisibleDate,\r\n ),\r\n );\r\n\r\n useEffect(() => {\r\n const selected =\r\n type === \"range\"\r\n ? rangeStart\r\n : singleValue;\r\n\r\n if (selected) {\r\n setVisibleMonth(\r\n startOfMonth(selected),\r\n );\r\n }\r\n }, [\r\n type,\r\n singleValue,\r\n rangeStart,\r\n ]);\r\n\r\n const days = useMemo(\r\n () =>\r\n getCalendarDays(\r\n visibleMonth,\r\n resolvedFirstDayOfWeek,\r\n ),\r\n [\r\n visibleMonth,\r\n resolvedFirstDayOfWeek,\r\n ],\r\n );\r\n\r\n const weekdayLabels =\r\n useMemo(\r\n () =>\r\n getWeekdayLabels(\r\n locale,\r\n resolvedFirstDayOfWeek,\r\n ),\r\n [\r\n locale,\r\n resolvedFirstDayOfWeek,\r\n ],\r\n );\r\n\r\n const today =\r\n startOfDay(new Date());\r\n\r\n const monthLabel =\r\n new Intl.DateTimeFormat(\r\n locale,\r\n {\r\n month: \"long\",\r\n year: \"numeric\",\r\n },\r\n ).format(visibleMonth);\r\n\r\n const formattedValue =\r\n type === \"range\"\r\n ? rangeStart\r\n ? rangeEnd\r\n ? `${formatDate(\r\n rangeStart,\r\n locale,\r\n dateFormat,\r\n )} ${rangeSeparator} ${formatDate(\r\n rangeEnd,\r\n locale,\r\n dateFormat,\r\n )}`\r\n : `${formatDate(\r\n rangeStart,\r\n locale,\r\n dateFormat,\r\n )} ${rangeSeparator} ...`\r\n : null\r\n : singleValue\r\n ? formatDate(\r\n singleValue,\r\n locale,\r\n dateFormat,\r\n )\r\n : null;\r\n\r\n const hasValue =\r\n type === \"range\"\r\n ? rangeStart !== null ||\r\n rangeEnd !== null\r\n : singleValue !== null;\r\n\r\n const previousMonth =\r\n addMonths(\r\n visibleMonth,\r\n -1,\r\n );\r\n\r\n const nextMonth =\r\n addMonths(\r\n visibleMonth,\r\n 1,\r\n );\r\n\r\n function canOpenMonth(\r\n month: Date,\r\n ): boolean {\r\n const first =\r\n startOfMonth(month);\r\n\r\n const last =\r\n endOfMonth(month);\r\n\r\n if (\r\n minDate &&\r\n isBeforeDay(\r\n last,\r\n minDate,\r\n )\r\n ) {\r\n return false;\r\n }\r\n\r\n if (\r\n maxDate &&\r\n isAfterDay(\r\n first,\r\n maxDate,\r\n )\r\n ) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n function handleDateSelect(\r\n date: Date,\r\n ) {\r\n if (\r\n disabled ||\r\n isDateDisabled(\r\n date,\r\n minDate,\r\n maxDate,\r\n )\r\n ) {\r\n return;\r\n }\r\n\r\n const selectedDate =\r\n startOfDay(date);\r\n\r\n if (type === \"single\") {\r\n setCurrentValue(\r\n selectedDate,\r\n );\r\n\r\n setOpened(false);\r\n\r\n return;\r\n }\r\n\r\n if (\r\n !rangeStart ||\r\n rangeEnd\r\n ) {\r\n setCurrentValue([\r\n selectedDate,\r\n null,\r\n ]);\r\n\r\n return;\r\n }\r\n\r\n if (\r\n isBeforeDay(\r\n selectedDate,\r\n rangeStart,\r\n )\r\n ) {\r\n setCurrentValue([\r\n selectedDate,\r\n rangeStart,\r\n ]);\r\n } else {\r\n setCurrentValue([\r\n rangeStart,\r\n selectedDate,\r\n ]);\r\n }\r\n\r\n setOpened(false);\r\n }\r\n\r\n function clearValue() {\r\n if (type === \"range\") {\r\n setCurrentValue([\r\n null,\r\n null,\r\n ]);\r\n\r\n return;\r\n }\r\n\r\n setCurrentValue(null);\r\n }\r\n\r\n function selectToday() {\r\n if (\r\n isDateDisabled(\r\n today,\r\n minDate,\r\n maxDate,\r\n )\r\n ) {\r\n return;\r\n }\r\n\r\n setVisibleMonth(\r\n startOfMonth(today),\r\n );\r\n\r\n if (type === \"range\") {\r\n setCurrentValue([\r\n today,\r\n today,\r\n ]);\r\n } else {\r\n setCurrentValue(today);\r\n }\r\n\r\n setOpened(false);\r\n }\r\n\r\n const classes = cx(\r\n \"mb-date-picker\",\r\n `mb-date-picker--${resolvedSize}`,\r\n type === \"range\"\r\n ? \"mb-date-picker--range\"\r\n : \"mb-date-picker--single\",\r\n error\r\n ? \"mb-date-picker--error\"\r\n : undefined,\r\n disabled\r\n ? \"mb-date-picker--disabled\"\r\n : undefined,\r\n className,\r\n );\r\n\r\n return (\r\n <div\r\n className={classes}\r\n {...props}\r\n >\r\n {name ? (\r\n type === \"range\" ? (\r\n <>\r\n <input\r\n type=\"hidden\"\r\n name={`${name}Start`}\r\n value={toInputDate(\r\n rangeStart,\r\n )}\r\n />\r\n\r\n <input\r\n type=\"hidden\"\r\n name={`${name}End`}\r\n value={toInputDate(\r\n rangeEnd,\r\n )}\r\n />\r\n </>\r\n ) : (\r\n <input\r\n type=\"hidden\"\r\n name={name}\r\n value={toInputDate(\r\n singleValue,\r\n )}\r\n />\r\n )\r\n ) : null}\r\n\r\n <Popover\r\n opened={opened}\r\n onChange={setOpened}\r\n position=\"bottom-start\"\r\n width={320}\r\n offset={8}\r\n >\r\n <Popover.Target>\r\n <div className=\"mb-date-picker__target\">\r\n <button\r\n type=\"button\"\r\n className=\"mb-date-picker__trigger\"\r\n disabled={disabled}\r\n aria-invalid={\r\n error || undefined\r\n }\r\n >\r\n <span className=\"mb-date-picker__calendar-icon\">\r\n <CalendarIcon />\r\n </span>\r\n\r\n <span\r\n className={cx(\r\n \"mb-date-picker__value\",\r\n !formattedValue\r\n ? \"mb-date-picker__placeholder\"\r\n : undefined,\r\n )}\r\n >\r\n {formattedValue ??\r\n resolvedPlaceholder}\r\n </span>\r\n </button>\r\n\r\n {resolvedClearable &&\r\n hasValue &&\r\n !disabled ? (\r\n <button\r\n type=\"button\"\r\n className=\"mb-date-picker__clear\"\r\n aria-label=\"Очистить дату\"\r\n onClick={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n clearValue();\r\n setOpened(false);\r\n }}\r\n >\r\n <CloseIcon />\r\n </button>\r\n ) : null}\r\n </div>\r\n </Popover.Target>\r\n\r\n <Popover.Dropdown\r\n className=\"mb-date-picker__dropdown\"\r\n >\r\n <div className=\"mb-date-picker__calendar\">\r\n <div className=\"mb-date-picker__header\">\r\n <button\r\n type=\"button\"\r\n className=\"mb-date-picker__navigation\"\r\n aria-label=\"Предыдущий месяц\"\r\n disabled={\r\n !canOpenMonth(\r\n previousMonth,\r\n )\r\n }\r\n onClick={() => {\r\n setVisibleMonth(\r\n previousMonth,\r\n );\r\n }}\r\n >\r\n <ChevronLeftIcon />\r\n </button>\r\n\r\n <div className=\"mb-date-picker__month\">\r\n {monthLabel}\r\n </div>\r\n\r\n <button\r\n type=\"button\"\r\n className=\"mb-date-picker__navigation\"\r\n aria-label=\"Следующий месяц\"\r\n disabled={\r\n !canOpenMonth(\r\n nextMonth,\r\n )\r\n }\r\n onClick={() => {\r\n setVisibleMonth(\r\n nextMonth,\r\n );\r\n }}\r\n >\r\n <ChevronRightIcon />\r\n </button>\r\n </div>\r\n\r\n <div className=\"mb-date-picker__weekdays\">\r\n {weekdayLabels.map(\r\n (\r\n weekday,\r\n index,\r\n ) => (\r\n <div\r\n key={`${weekday}-${index}`}\r\n className=\"mb-date-picker__weekday\"\r\n >\r\n {weekday}\r\n </div>\r\n ),\r\n )}\r\n </div>\r\n\r\n <div className=\"mb-date-picker__days\">\r\n {days.map((date) => {\r\n const outside =\r\n date.getMonth() !==\r\n visibleMonth.getMonth();\r\n\r\n const dateDisabled =\r\n isDateDisabled(\r\n date,\r\n minDate,\r\n maxDate,\r\n );\r\n\r\n const selected =\r\n type === \"single\" &&\r\n singleValue !== null &&\r\n isSameDay(\r\n date,\r\n singleValue,\r\n );\r\n\r\n const rangeStartSelected =\r\n type === \"range\" &&\r\n rangeStart !== null &&\r\n isSameDay(\r\n date,\r\n rangeStart,\r\n );\r\n\r\n const rangeEndSelected =\r\n type === \"range\" &&\r\n rangeEnd !== null &&\r\n isSameDay(\r\n date,\r\n rangeEnd,\r\n );\r\n\r\n const inRange =\r\n type === \"range\" &&\r\n isDateInRange(\r\n date,\r\n rangeStart,\r\n rangeEnd,\r\n );\r\n\r\n const current =\r\n isSameDay(\r\n date,\r\n today,\r\n );\r\n\r\n return (\r\n <button\r\n key={\r\n date.toISOString()\r\n }\r\n type=\"button\"\r\n className={cx(\r\n \"mb-date-picker__day\",\r\n outside\r\n ? \"mb-date-picker__day--outside\"\r\n : undefined,\r\n current\r\n ? \"mb-date-picker__day--today\"\r\n : undefined,\r\n selected\r\n ? \"mb-date-picker__day--selected\"\r\n : undefined,\r\n inRange\r\n ? \"mb-date-picker__day--in-range\"\r\n : undefined,\r\n rangeStartSelected\r\n ? \"mb-date-picker__day--range-start\"\r\n : undefined,\r\n rangeEndSelected\r\n ? \"mb-date-picker__day--range-end\"\r\n : undefined,\r\n )}\r\n disabled={\r\n dateDisabled\r\n }\r\n aria-pressed={\r\n selected ||\r\n rangeStartSelected ||\r\n rangeEndSelected\r\n }\r\n aria-label={\r\n formatDate(\r\n date,\r\n locale,\r\n {\r\n day: \"numeric\",\r\n month: \"long\",\r\n year: \"numeric\",\r\n },\r\n )\r\n }\r\n onClick={() => {\r\n handleDateSelect(\r\n date,\r\n );\r\n }}\r\n >\r\n {date.getDate()}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n\r\n <div className=\"mb-date-picker__footer\">\r\n <button\r\n type=\"button\"\r\n className=\"mb-date-picker__today\"\r\n disabled={\r\n isDateDisabled(\r\n today,\r\n minDate,\r\n maxDate,\r\n )\r\n }\r\n onClick={\r\n selectToday\r\n }\r\n >\r\n Сегодня\r\n </button>\r\n\r\n {type === \"range\" &&\r\n rangeStart &&\r\n !rangeEnd ? (\r\n <span className=\"mb-date-picker__range-hint\">\r\n Выберите конец периода\r\n </span>\r\n ) : null}\r\n </div>\r\n </div>\r\n </Popover.Dropdown>\r\n </Popover>\r\n </div>\r\n );\r\n}","import {\r\n forwardRef,\r\n useState,\r\n type ImgHTMLAttributes,\r\n} from \"react\";\r\n\r\nimport {\r\n cx,\r\n} from \"../../utils\";\r\n\r\nimport {\r\n useComponentDefaults,\r\n} from \"../../provider\";\r\n\r\nimport \"./Image.css\";\r\n\r\n\r\nexport type ImageFit =\r\n | \"contain\"\r\n | \"cover\"\r\n | \"fill\"\r\n | \"none\"\r\n | \"scale-down\";\r\n\r\n\r\nexport interface ImageProps\r\n extends ImgHTMLAttributes<HTMLImageElement> {\r\n\r\n radius?:\r\n | \"none\"\r\n | \"sm\"\r\n | \"md\"\r\n | \"lg\"\r\n | \"xl\"\r\n | \"full\";\r\n\r\n fit?: ImageFit;\r\n\r\n fallback?: string;\r\n}\r\n\r\n\r\nexport const Image =\r\n forwardRef<\r\n HTMLImageElement,\r\n ImageProps\r\n >(function Image(\r\n {\r\n radius,\r\n\r\n fit,\r\n\r\n fallback,\r\n\r\n className = \"\",\r\n\r\n src,\r\n\r\n onError,\r\n\r\n ...props\r\n },\r\n\r\n ref,\r\n ) {\r\n\r\n const defaults =\r\n useComponentDefaults(\r\n \"Image\",\r\n );\r\n\r\n\r\n const [\r\n currentSrc,\r\n setCurrentSrc,\r\n ] = useState(\r\n src,\r\n );\r\n\r\n\r\n const resolvedRadius =\r\n radius ??\r\n defaults.radius ??\r\n \"md\";\r\n\r\n\r\n const resolvedFit =\r\n fit ??\r\n defaults.fit ??\r\n \"cover\";\r\n\r\n\r\n return (\r\n <img\r\n ref={ref}\r\n\r\n src={\r\n currentSrc\r\n }\r\n\r\n className={cx(\r\n \"mb-image\",\r\n\r\n `mb-image--${resolvedRadius}`,\r\n\r\n `mb-image--${resolvedFit}`,\r\n\r\n className,\r\n )}\r\n\r\n onError={(event) => {\r\n\r\n if (\r\n fallback &&\r\n currentSrc !== fallback\r\n ) {\r\n setCurrentSrc(\r\n fallback,\r\n );\r\n }\r\n\r\n\r\n onError?.(\r\n event,\r\n );\r\n\r\n }}\r\n\r\n {...props}\r\n />\r\n );\r\n });","import {\r\n type HTMLAttributes,\r\n type ReactNode,\r\n} from \"react\";\r\n\r\nimport {\r\n cx,\r\n} from \"../../utils\";\r\n\r\nimport \"./Highlight.css\";\r\n\r\n\r\nexport interface HighlightProps\r\n extends HTMLAttributes<HTMLSpanElement> {\r\n\r\n children:\r\n ReactNode;\r\n\r\n color?:\r\n | \"primary\"\r\n | \"success\"\r\n | \"warning\";\r\n}\r\n\r\n\r\nexport function Highlight({\r\n children,\r\n\r\n color = \"primary\",\r\n\r\n className = \"\",\r\n\r\n ...props\r\n}: HighlightProps) {\r\n\r\n return (\r\n <span\r\n className={cx(\r\n \"mb-highlight\",\r\n\r\n `mb-highlight--${color}`,\r\n\r\n className,\r\n )}\r\n\r\n {...props}\r\n >\r\n {children}\r\n </span>\r\n );\r\n}","import type {\r\n HTMLAttributes,\r\n ReactNode,\r\n} from \"react\";\r\n\r\nimport { useComponentDefaults } from \"../../provider\";\r\n\r\nimport \"./Card.css\";\r\n\r\nexport interface CardProps\r\n extends HTMLAttributes<HTMLDivElement> {\r\n padding?: \"sm\" | \"md\" | \"lg\";\r\n radius?: \"sm\" | \"md\" | \"lg\";\r\n shadow?: \"none\" | \"sm\" | \"md\";\r\n\r\n header?: ReactNode;\r\n footer?: ReactNode;\r\n}\r\n\r\nexport function Card({\r\n padding,\r\n radius,\r\n shadow,\r\n\r\n header,\r\n footer,\r\n\r\n className = \"\",\r\n children,\r\n\r\n ...props\r\n}: CardProps) {\r\n const defaults =\r\n useComponentDefaults(\"Card\");\r\n\r\n const resolvedPadding =\r\n padding ??\r\n defaults.padding ??\r\n \"md\";\r\n\r\n const resolvedRadius =\r\n radius ??\r\n defaults.radius ??\r\n \"md\";\r\n\r\n const resolvedShadow =\r\n shadow ??\r\n defaults.shadow ??\r\n \"sm\";\r\n\r\n const classes = [\r\n \"mb-card\",\r\n `mb-card--padding-${resolvedPadding}`,\r\n `mb-card--radius-${resolvedRadius}`,\r\n `mb-card--shadow-${resolvedShadow}`,\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n return (\r\n <div\r\n className={classes}\r\n {...props}\r\n >\r\n {header != null ? (\r\n <div className=\"mb-card__header\">\r\n {header}\r\n </div>\r\n ) : null}\r\n\r\n <div className=\"mb-card__content\">\r\n {children}\r\n </div>\r\n\r\n {footer != null ? (\r\n <div className=\"mb-card__footer\">\r\n {footer}\r\n </div>\r\n ) : null}\r\n </div>\r\n );\r\n}","import {\r\n forwardRef,\r\n type ButtonHTMLAttributes,\r\n type ReactNode,\r\n} from \"react\";\r\n\r\nimport {\r\n useComponentDefaults,\r\n} from \"../../provider\";\r\n\r\nimport { Icon } from \"../Icon\";\r\nimport { Spinner } from \"../Spinner\";\r\n\r\nimport \"./IconButton.css\";\r\n\r\nexport interface IconButtonProps\r\n extends ButtonHTMLAttributes<HTMLButtonElement> {\r\n icon: ReactNode;\r\n label: string;\r\n\r\n variant?:\r\n | \"primary\"\r\n | \"secondary\"\r\n | \"outline\"\r\n | \"ghost\";\r\n\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n\r\n loading?: boolean;\r\n}\r\n\r\nexport const IconButton = forwardRef<\r\n HTMLButtonElement,\r\n IconButtonProps\r\n>(function IconButton(\r\n {\r\n icon,\r\n label,\r\n\r\n variant,\r\n size,\r\n\r\n loading = false,\r\n disabled,\r\n\r\n className = \"\",\r\n type = \"button\",\r\n\r\n ...props\r\n },\r\n ref,\r\n) {\r\n const defaults =\r\n useComponentDefaults(\"IconButton\");\r\n\r\n const resolvedVariant =\r\n variant ??\r\n defaults.variant ??\r\n \"primary\";\r\n\r\n const resolvedSize =\r\n size ??\r\n defaults.size ??\r\n \"md\";\r\n\r\n const classes = [\r\n \"mb-icon-button\",\r\n `mb-icon-button--${resolvedVariant}`,\r\n `mb-icon-button--${resolvedSize}`,\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n const iconSize = {\r\n sm: 16,\r\n md: 18,\r\n lg: 20,\r\n }[resolvedSize];\r\n\r\n return (\r\n <button\r\n ref={ref}\r\n type={type}\r\n className={classes}\r\n disabled={disabled || loading}\r\n aria-label={label}\r\n aria-busy={loading || undefined}\r\n {...props}\r\n >\r\n {loading ? (\r\n <Spinner\r\n size={14}\r\n thickness={2}\r\n color=\"currentColor\"\r\n trackColor=\"transparent\"\r\n aria-hidden=\"true\"\r\n />\r\n ) : (\r\n <Icon size={iconSize}>\r\n {icon}\r\n </Icon>\r\n )}\r\n </button>\r\n );\r\n});","import type {\r\n InputHTMLAttributes,\r\n ReactNode,\r\n} from \"react\";\r\n\r\nimport { Icon } from \"../Icon\";\r\n\r\nimport \"./Input.css\";\r\n\r\nexport interface InputProps\r\n extends InputHTMLAttributes<HTMLInputElement> {\r\n leftSection?: ReactNode;\r\n rightSection?: ReactNode;\r\n error?: boolean;\r\n}\r\n\r\nexport function Input({\r\n leftSection,\r\n rightSection,\r\n error = false,\r\n className = \"\",\r\n disabled,\r\n ...props\r\n}: InputProps) {\r\n const classes = [\r\n \"mb-input\",\r\n leftSection && \"mb-input--with-left-section\",\r\n rightSection && \"mb-input--with-right-section\",\r\n error && \"mb-input--error\",\r\n disabled && \"mb-input--disabled\",\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n return (\r\n <div className={classes}>\r\n {leftSection ? (\r\n <span className=\"mb-input__section mb-input__section--left\">\r\n <Icon size={18}>\r\n {leftSection}\r\n </Icon>\r\n </span>\r\n ) : null}\r\n\r\n <input\r\n className=\"mb-input__control\"\r\n disabled={disabled}\r\n aria-invalid={error || undefined}\r\n {...props}\r\n />\r\n\r\n {rightSection ? (\r\n <span className=\"mb-input__section mb-input__section--right\">\r\n <Icon size={18}>\r\n {rightSection}\r\n </Icon>\r\n </span>\r\n ) : null}\r\n </div>\r\n );\r\n}","import type { TextareaHTMLAttributes } from \"react\";\r\nimport \"./Textarea.css\";\r\n\r\nexport interface TextareaProps\r\n extends TextareaHTMLAttributes<HTMLTextAreaElement> {}\r\n\r\nexport function Textarea({\r\n className = \"\",\r\n ...props\r\n}: TextareaProps) {\r\n return (\r\n <textarea\r\n className={`mb-textarea ${className}`}\r\n {...props}\r\n />\r\n );\r\n}","import type {\r\n ElementType,\r\n HTMLAttributes,\r\n ReactNode,\r\n} from \"react\";\r\n\r\nimport { useComponentDefaults } from \"../../provider\";\r\nimport { Icon } from \"../Icon\";\r\n\r\nimport \"./Text.css\";\r\n\r\nexport interface TextProps\r\n extends HTMLAttributes<HTMLElement> {\r\n as?: ElementType;\r\n\r\n size?: \"xs\" | \"sm\" | \"md\" | \"lg\";\r\n\r\n weight?:\r\n | \"regular\"\r\n | \"medium\"\r\n | \"semibold\"\r\n | \"bold\";\r\n\r\n color?:\r\n | \"default\"\r\n | \"muted\"\r\n | \"primary\";\r\n\r\n leftSection?: ReactNode;\r\n rightSection?: ReactNode;\r\n}\r\n\r\nexport function Text({\r\n as: Component = \"p\",\r\n\r\n size,\r\n weight,\r\n color,\r\n\r\n leftSection,\r\n rightSection,\r\n\r\n className = \"\",\r\n children,\r\n\r\n ...props\r\n}: TextProps) {\r\n const defaults =\r\n useComponentDefaults(\"Text\");\r\n\r\n const resolvedSize =\r\n size ??\r\n defaults.size ??\r\n \"md\";\r\n\r\n const resolvedWeight =\r\n weight ??\r\n defaults.weight ??\r\n \"regular\";\r\n\r\n const resolvedColor =\r\n color ??\r\n defaults.color ??\r\n \"default\";\r\n\r\n const classes = [\r\n \"mb-text\",\r\n `mb-text--${resolvedSize}`,\r\n `mb-text--${resolvedWeight}`,\r\n `mb-text--${resolvedColor}`,\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n const iconSize = {\r\n xs: 12,\r\n sm: 14,\r\n md: 16,\r\n lg: 18,\r\n }[resolvedSize];\r\n\r\n return (\r\n <Component\r\n className={classes}\r\n {...props}\r\n >\r\n {leftSection != null ? (\r\n <Icon size={iconSize}>\r\n {leftSection}\r\n </Icon>\r\n ) : null}\r\n\r\n <span className=\"mb-text__content\">\r\n {children}\r\n </span>\r\n\r\n {rightSection != null ? (\r\n <Icon size={iconSize}>\r\n {rightSection}\r\n </Icon>\r\n ) : null}\r\n </Component>\r\n );\r\n}","import type {\r\n HTMLAttributes,\r\n ReactNode,\r\n} from \"react\";\r\n\r\nimport { useComponentDefaults } from \"../../provider\";\r\nimport { Icon } from \"../Icon\";\r\n\r\nimport \"./Title.css\";\r\n\r\nexport interface TitleProps\r\n extends HTMLAttributes<HTMLHeadingElement> {\r\n order?: 1 | 2 | 3 | 4 | 5 | 6;\r\n\r\n size?:\r\n | \"xs\"\r\n | \"sm\"\r\n | \"md\"\r\n | \"lg\"\r\n | \"xl\";\r\n\r\n weight?:\r\n | \"medium\"\r\n | \"semibold\"\r\n | \"bold\";\r\n\r\n color?:\r\n | \"default\"\r\n | \"muted\"\r\n | \"primary\";\r\n\r\n leftSection?: ReactNode;\r\n rightSection?: ReactNode;\r\n}\r\n\r\nexport function Title({\r\n order,\r\n size,\r\n weight,\r\n color = \"default\",\r\n\r\n leftSection,\r\n rightSection,\r\n\r\n className = \"\",\r\n children,\r\n\r\n ...props\r\n}: TitleProps) {\r\n const defaults =\r\n useComponentDefaults(\"Title\");\r\n\r\n const resolvedOrder =\r\n order ??\r\n defaults.order ??\r\n 2;\r\n\r\n const resolvedWeight =\r\n weight ??\r\n defaults.weight ??\r\n \"semibold\";\r\n\r\n const resolvedSize =\r\n size ??\r\n ({\r\n 1: \"xl\",\r\n 2: \"lg\",\r\n 3: \"md\",\r\n 4: \"sm\",\r\n 5: \"xs\",\r\n 6: \"xs\",\r\n }[resolvedOrder] as NonNullable<\r\n TitleProps[\"size\"]\r\n >);\r\n\r\n const Component =\r\n `h${resolvedOrder}` as const;\r\n\r\n const iconSize = {\r\n xs: 16,\r\n sm: 20,\r\n md: 24,\r\n lg: 32,\r\n xl: 40,\r\n }[resolvedSize];\r\n\r\n const classes = [\r\n \"mb-title\",\r\n `mb-title--${resolvedSize}`,\r\n `mb-title--${resolvedWeight}`,\r\n `mb-title--${color}`,\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n return (\r\n <Component\r\n className={classes}\r\n {...props}\r\n >\r\n {leftSection != null ? (\r\n <Icon size={iconSize}>\r\n {leftSection}\r\n </Icon>\r\n ) : null}\r\n\r\n <span className=\"mb-title__content\">\r\n {children}\r\n </span>\r\n\r\n {rightSection != null ? (\r\n <Icon size={iconSize}>\r\n {rightSection}\r\n </Icon>\r\n ) : null}\r\n </Component>\r\n );\r\n}"],"mappings":"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","names":["import_react","import_react","import_react","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","Button","import_jsx_runtime","import_jsx_runtime","import_react","import_react","import_react","import_react","import_react","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","itemOpened","import_react","import_jsx_runtime","focusableSelector","import_react","import_jsx_runtime","import_react","import_jsx_runtime","assignRef","import_jsx_runtime","import_react","import_jsx_runtime","PasswordInput","import_react","import_jsx_runtime","normalizeValue","PinInput","nextValue","import_react","import_jsx_runtime","FileInput","import_react","import_jsx_runtime","PaginationButton","Pagination","import_react","import_jsx_runtime","ChevronLeftIcon","ChevronRightIcon","import_react","import_jsx_runtime","Image","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","IconButton","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime"]}
|