@brycks/core-front 0.2.1 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/data/InfoItem/InfoItem.d.ts +44 -0
- package/dist/components/data/InfoItem/InfoItem.d.ts.map +1 -0
- package/dist/components/data/InfoItem/index.d.ts +2 -0
- package/dist/components/data/InfoItem/index.d.ts.map +1 -0
- package/dist/components/data/index.d.ts +1 -0
- package/dist/components/data/index.d.ts.map +1 -1
- package/dist/components/form/Form/Form.d.ts +16 -0
- package/dist/components/form/Form/Form.d.ts.map +1 -0
- package/dist/components/form/Form/index.d.ts +2 -0
- package/dist/components/form/Form/index.d.ts.map +1 -0
- package/dist/components/form/FormGroup/FormGroup.d.ts +31 -0
- package/dist/components/form/FormGroup/FormGroup.d.ts.map +1 -0
- package/dist/components/form/FormGroup/index.d.ts +2 -0
- package/dist/components/form/FormGroup/index.d.ts.map +1 -0
- package/dist/components/form/FormLabel/FormLabel.d.ts +20 -0
- package/dist/components/form/FormLabel/FormLabel.d.ts.map +1 -0
- package/dist/components/form/FormLabel/index.d.ts +2 -0
- package/dist/components/form/FormLabel/index.d.ts.map +1 -0
- package/dist/components/form/index.d.ts +3 -0
- package/dist/components/form/index.d.ts.map +1 -1
- package/dist/components/typography/Text/Text.d.ts +13 -11
- package/dist/components/typography/Text/Text.d.ts.map +1 -1
- package/dist/components/utility/Avatar/Avatar.d.ts +23 -0
- package/dist/components/utility/Avatar/Avatar.d.ts.map +1 -0
- package/dist/components/utility/Avatar/index.d.ts +3 -0
- package/dist/components/utility/Avatar/index.d.ts.map +1 -0
- package/dist/components/utility/Logo/Logo.d.ts +15 -0
- package/dist/components/utility/Logo/Logo.d.ts.map +1 -0
- package/dist/components/utility/Logo/index.d.ts +3 -0
- package/dist/components/utility/Logo/index.d.ts.map +1 -0
- package/dist/components/utility/ScreenReaderOnly/ScreenReaderOnly.d.ts +17 -0
- package/dist/components/utility/ScreenReaderOnly/ScreenReaderOnly.d.ts.map +1 -0
- package/dist/components/utility/ScreenReaderOnly/index.d.ts +2 -0
- package/dist/components/utility/ScreenReaderOnly/index.d.ts.map +1 -0
- package/dist/components/utility/index.d.ts +3 -0
- package/dist/components/utility/index.d.ts.map +1 -1
- package/dist/index.cjs +15 -15
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1725 -1359
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/design-system/primitives/sizing.ts","../src/design-system/primitives/focus.ts","../src/design-system/primitives/transitions.ts","../src/design-system/primitives/typography.ts","../src/design-system/primitives/opacity.ts","../src/design-system/primitives/layout.ts","../src/utils/styles.ts","../src/components/layout/Box/Box.styles.ts","../src/components/layout/Box/Box.tsx","../src/components/layout/Stack/Stack.tsx","../src/components/layout/Grid/Grid.tsx","../src/components/layout/Container/Container.tsx","../src/components/layout/Card/Card.tsx","../src/components/layout/Section/Section.tsx","../src/components/layout/Spacer/Spacer.tsx","../src/components/layout/Flex/Flex.tsx","../src/components/typography/Text/Text.tsx","../src/components/typography/Heading/Heading.tsx","../src/components/primitives/Button/Button.styles.ts","../src/components/primitives/Button/Button.tsx","../src/components/primitives/Icon/Icon.tsx","../src/components/form/Input/Input.tsx","../src/components/form/TextField/TextField.tsx","../src/components/form/Select/Select.tsx","../src/components/form/Checkbox/Checkbox.tsx","../src/components/form/Switch/Switch.tsx","../src/components/form/Textarea/Textarea.tsx","../src/components/form/Radio/Radio.tsx","../src/components/form/Slider/Slider.tsx","../src/components/form/DateInput/DateInput.tsx","../src/components/form/FileInput/FileInput.tsx","../src/hooks/useId.ts","../src/components/form/FormField/FormField.tsx","../src/components/form/FieldError/FieldError.tsx","../src/components/feedback/Modal/Modal.tsx","../src/components/feedback/Alert/Alert.tsx","../src/components/feedback/Tooltip/Tooltip.tsx","../src/components/feedback/Toast/Toast.tsx","../src/components/feedback/Drawer/Drawer.tsx","../src/hooks/useClickOutside.ts","../src/components/feedback/Popover/Popover.tsx","../src/components/feedback/Progress/Progress.tsx","../src/components/navigation/Tabs/Tabs.tsx","../src/components/navigation/Accordion/Accordion.tsx","../src/components/navigation/Dropdown/Dropdown.tsx","../src/components/navigation/Menu/Menu.tsx","../src/components/navigation/Pagination/Pagination.tsx","../src/components/navigation/Breadcrumb/Breadcrumb.tsx","../src/components/data/Table/Table.tsx","../src/components/data/List/List.tsx","../src/components/utility/Badge/Badge.tsx","../src/components/utility/Loader/Loader.tsx","../src/components/utility/Skeleton/Skeleton.tsx","../src/components/utility/Divider/Divider.tsx","../src/components/utility/EmptyState/EmptyState.tsx","../src/components/utility/Portal/Portal.tsx","../src/hooks/useFocusTrap.ts","../src/components/utility/FocusTrap/FocusTrap.tsx","../src/components/utility/Overlay/Overlay.tsx","../src/hooks/useMediaQuery.ts","../src/hooks/useDisclosure.ts","../src/hooks/useKeyboardNavigation.ts","../src/hooks/useControllable.ts"],"sourcesContent":["/**\r\n * Brycks Design System - Component Sizing Primitives\r\n *\r\n * Standardized sizing scales for consistent component dimensions.\r\n * All values are derived from the spacing token system (4px grid).\r\n *\r\n * RULE: Components MUST use these scales. Never hardcode dimensions.\r\n */\r\n\r\nimport { spacing } from '../tokens/spacing'\r\n\r\n/**\r\n * Standard component heights for interactive elements.\r\n * Based on touch-target guidelines (minimum 44px for accessibility).\r\n */\r\nexport const componentHeights = {\r\n /** 24px - Micro elements (tags, small badges) */\r\n xs: spacing[6],\r\n /** 32px - Small inputs, compact buttons */\r\n sm: spacing[8],\r\n /** 40px - Default size for most interactive elements */\r\n md: spacing[10],\r\n /** 48px - Large inputs, prominent buttons */\r\n lg: spacing[12],\r\n /** 56px - Extra large, hero CTAs */\r\n xl: spacing[14],\r\n} as const\r\n\r\n/**\r\n * Icon sizes that align with component heights.\r\n */\r\nexport const iconSizes = {\r\n /** 12px */\r\n xs: spacing[3],\r\n /** 16px */\r\n sm: spacing[4],\r\n /** 20px */\r\n md: spacing[5],\r\n /** 24px */\r\n lg: spacing[6],\r\n /** 32px */\r\n xl: spacing[8],\r\n} as const\r\n\r\n/**\r\n * Standard padding for interactive components (horizontal).\r\n * Follows a progressive scale for visual balance.\r\n */\r\nexport const componentPaddingX = {\r\n /** 8px */\r\n xs: spacing[2],\r\n /** 12px */\r\n sm: spacing[3],\r\n /** 16px */\r\n md: spacing[4],\r\n /** 20px */\r\n lg: spacing[5],\r\n /** 24px */\r\n xl: spacing[6],\r\n} as const\r\n\r\n/**\r\n * Standard padding for interactive components (vertical).\r\n */\r\nexport const componentPaddingY = {\r\n /** 4px */\r\n xs: spacing[1],\r\n /** 6px */\r\n sm: spacing[1.5],\r\n /** 8px */\r\n md: spacing[2],\r\n /** 10px */\r\n lg: spacing[2.5],\r\n /** 12px */\r\n xl: spacing[3],\r\n} as const\r\n\r\n/**\r\n * Standard gap values for component internals.\r\n */\r\nexport const componentGap = {\r\n /** 4px - Tight spacing between icons and text */\r\n xs: spacing[1],\r\n /** 6px */\r\n sm: spacing[1.5],\r\n /** 8px - Default internal spacing */\r\n md: spacing[2],\r\n /** 10px */\r\n lg: spacing[2.5],\r\n /** 12px - Spacious internal spacing */\r\n xl: spacing[3],\r\n} as const\r\n\r\n/**\r\n * Modal/dialog width presets.\r\n */\r\nexport const modalWidths = {\r\n /** 400px - Small dialogs, confirmations */\r\n sm: 400,\r\n /** 500px - Medium dialogs */\r\n md: 500,\r\n /** 640px - Large dialogs */\r\n lg: 640,\r\n /** 800px - Extra large dialogs */\r\n xl: 800,\r\n /** Full width minus margins */\r\n full: 'calc(100vw - 48px)',\r\n} as const\r\n\r\n/**\r\n * Tooltip and popover constraints.\r\n */\r\nexport const popoverSizing = {\r\n /** Default tooltip max width */\r\n tooltipMaxWidth: 300,\r\n /** Default popover max width */\r\n popoverMaxWidth: 400,\r\n /** Arrow size for tooltips */\r\n arrowSize: spacing[2],\r\n /** Gap between trigger and popover */\r\n offset: spacing[2],\r\n} as const\r\n\r\n/**\r\n * Checkbox and radio sizes.\r\n */\r\nexport const controlSizes = {\r\n sm: {\r\n box: 16,\r\n icon: 10,\r\n },\r\n md: {\r\n box: 18,\r\n icon: 12,\r\n },\r\n lg: {\r\n box: 22,\r\n icon: 14,\r\n },\r\n} as const\r\n\r\n/**\r\n * Switch/toggle sizes.\r\n */\r\nexport const switchSizes = {\r\n sm: {\r\n width: 36,\r\n height: 20,\r\n thumb: 16,\r\n },\r\n md: {\r\n width: 44,\r\n height: 24,\r\n thumb: 20,\r\n },\r\n lg: {\r\n width: 52,\r\n height: 28,\r\n thumb: 24,\r\n },\r\n} as const\r\n\r\nexport type ComponentSize = keyof typeof componentHeights\r\nexport type IconSize = keyof typeof iconSizes\r\nexport type ControlSize = keyof typeof controlSizes\r\nexport type SwitchSize = keyof typeof switchSizes\r\n","/**\r\n * Brycks Design System - Focus State Primitives\r\n *\r\n * Centralized focus ring and state definitions.\r\n * Ensures consistent accessibility across all interactive elements.\r\n *\r\n * RULE: All focusable elements MUST use these focus styles.\r\n */\r\n\r\n/**\r\n * Focus ring box-shadow values.\r\n * Uses CSS variables for theme-aware colors.\r\n */\r\nexport const focusRing = {\r\n /** Default focus ring - primary color */\r\n default: '0 0 0 3px var(--brycks-focus-ring-color, rgba(85, 120, 244, 0.35))',\r\n /** Error state focus ring */\r\n error: '0 0 0 3px var(--brycks-focus-ring-error, rgba(239, 68, 68, 0.35))',\r\n /** Success state focus ring */\r\n success: '0 0 0 3px var(--brycks-focus-ring-success, rgba(16, 185, 129, 0.35))',\r\n /** Subtle focus ring - for nested elements */\r\n subtle: '0 0 0 2px var(--brycks-focus-ring-color, rgba(85, 120, 244, 0.25))',\r\n /** None - explicitly no focus ring */\r\n none: 'none',\r\n} as const\r\n\r\n/**\r\n * Focus ring with offset (for elements with borders).\r\n */\r\nexport const focusRingOffset = {\r\n default: '0 0 0 2px var(--brycks-background-app), 0 0 0 4px var(--brycks-primary-default)',\r\n error: '0 0 0 2px var(--brycks-background-app), 0 0 0 4px var(--brycks-error-default)',\r\n} as const\r\n\r\n/**\r\n * CSS custom properties that should be set by ThemeProvider.\r\n * These enable theme-aware focus rings.\r\n */\r\nexport const focusRingCSSVars = {\r\n color: '--brycks-focus-ring-color',\r\n error: '--brycks-focus-ring-error',\r\n success: '--brycks-focus-ring-success',\r\n} as const\r\n\r\n/**\r\n * Complete focus styles object for spreading.\r\n */\r\nexport const focusStyles = {\r\n /** Outline-based focus (native) */\r\n outline: {\r\n outline: '2px solid var(--brycks-border-focus)',\r\n outlineOffset: '2px',\r\n },\r\n /** Box-shadow based focus (custom) */\r\n ring: {\r\n outline: 'none',\r\n boxShadow: focusRing.default,\r\n },\r\n /** Error state focus */\r\n ringError: {\r\n outline: 'none',\r\n boxShadow: focusRing.error,\r\n },\r\n /** Remove focus styles (use sparingly) */\r\n none: {\r\n outline: 'none',\r\n boxShadow: 'none',\r\n },\r\n} as const\r\n\r\nexport type FocusRingVariant = keyof typeof focusRing\r\n","/**\r\n * Brycks Design System - Transition Primitives\r\n *\r\n * Standardized transition definitions for consistent motion.\r\n * All values derived from motion tokens.\r\n *\r\n * RULE: Components MUST use these transitions. Never hardcode timing.\r\n */\r\n\r\nimport { durations, easings } from '../tokens/motion'\r\n\r\n/**\r\n * Pre-composed CSS transition strings for common use cases.\r\n */\r\nexport const transition = {\r\n /** No transition */\r\n none: 'none',\r\n\r\n /** Ultra-fast - for micro-interactions (50ms) */\r\n instant: `all ${durations.faster}ms ${easings.easeOut}`,\r\n\r\n /** Fast - for hover states, toggles (100ms) */\r\n fast: `all ${durations.fast}ms ${easings.easeOut}`,\r\n\r\n /** Quick - standard interactive feedback (150ms) */\r\n quick: `all ${durations.quick}ms ${easings.easeOut}`,\r\n\r\n /** Default - most state changes (200ms) */\r\n default: `all ${durations.normal}ms ${easings.easeOut}`,\r\n\r\n /** Smooth - focus states, form elements (300ms) */\r\n smooth: `all ${durations.relaxed}ms ${easings.smooth}`,\r\n\r\n /** Slow - reveals, modals (400ms) */\r\n slow: `all ${durations.slow}ms ${easings.easeOut}`,\r\n\r\n /** Spring - bouncy, tactile feel (300ms) */\r\n spring: `all ${durations.relaxed}ms ${easings.softSpring}`,\r\n\r\n /** Colors only - optimized for color transitions */\r\n colors: `color ${durations.fast}ms ${easings.easeOut}, background-color ${durations.fast}ms ${easings.easeOut}, border-color ${durations.fast}ms ${easings.easeOut}`,\r\n\r\n /** Transform only - for scale, translate */\r\n transform: `transform ${durations.normal}ms ${easings.easeOut}`,\r\n\r\n /** Opacity only - for fade effects */\r\n opacity: `opacity ${durations.normal}ms ${easings.easeOut}`,\r\n\r\n /** Shadow only - for elevation changes */\r\n shadow: `box-shadow ${durations.normal}ms ${easings.easeOut}`,\r\n} as const\r\n\r\n/**\r\n * CSS transition property groups.\r\n */\r\nexport const transitionProperties = {\r\n all: 'all',\r\n colors: 'color, background-color, border-color, fill, stroke',\r\n opacity: 'opacity',\r\n shadow: 'box-shadow',\r\n transform: 'transform',\r\n dimensions: 'width, height, padding, margin',\r\n} as const\r\n\r\n/**\r\n * Duration values in milliseconds for use in JS.\r\n */\r\nexport const duration = {\r\n instant: durations.faster,\r\n fast: durations.fast,\r\n quick: durations.quick,\r\n default: durations.normal,\r\n smooth: durations.relaxed,\r\n slow: durations.slow,\r\n slower: durations.slower,\r\n} as const\r\n\r\n/**\r\n * Easing functions for use in JS animations.\r\n */\r\nexport const easing = {\r\n linear: easings.linear,\r\n ease: easings.ease,\r\n easeIn: easings.easeIn,\r\n easeOut: easings.easeOut,\r\n easeInOut: easings.easeInOut,\r\n spring: easings.spring,\r\n softSpring: easings.softSpring,\r\n smooth: easings.smooth,\r\n snappy: easings.snappy,\r\n} as const\r\n\r\n/**\r\n * CSS animation keyframes (as strings for style injection).\r\n */\r\nexport const keyframes = {\r\n fadeIn: `\r\n @keyframes brycks-fade-in {\r\n from { opacity: 0; }\r\n to { opacity: 1; }\r\n }\r\n `,\r\n fadeOut: `\r\n @keyframes brycks-fade-out {\r\n from { opacity: 1; }\r\n to { opacity: 0; }\r\n }\r\n `,\r\n scaleIn: `\r\n @keyframes brycks-scale-in {\r\n from { opacity: 0; transform: scale(0.95); }\r\n to { opacity: 1; transform: scale(1); }\r\n }\r\n `,\r\n scaleOut: `\r\n @keyframes brycks-scale-out {\r\n from { opacity: 1; transform: scale(1); }\r\n to { opacity: 0; transform: scale(0.95); }\r\n }\r\n `,\r\n slideUp: `\r\n @keyframes brycks-slide-up {\r\n from { opacity: 0; transform: translateY(8px); }\r\n to { opacity: 1; transform: translateY(0); }\r\n }\r\n `,\r\n slideDown: `\r\n @keyframes brycks-slide-down {\r\n from { opacity: 0; transform: translateY(-8px); }\r\n to { opacity: 1; transform: translateY(0); }\r\n }\r\n `,\r\n spin: `\r\n @keyframes brycks-spin {\r\n from { transform: rotate(0deg); }\r\n to { transform: rotate(360deg); }\r\n }\r\n `,\r\n pulse: `\r\n @keyframes brycks-pulse {\r\n 0%, 100% { opacity: 1; }\r\n 50% { opacity: 0.5; }\r\n }\r\n `,\r\n shimmer: `\r\n @keyframes brycks-shimmer {\r\n 0% { transform: translateX(-100%); }\r\n 100% { transform: translateX(100%); }\r\n }\r\n `,\r\n bounce: `\r\n @keyframes brycks-bounce {\r\n 0%, 80%, 100% { transform: scale(0); opacity: 0.5; }\r\n 40% { transform: scale(1); opacity: 1; }\r\n }\r\n `,\r\n} as const\r\n\r\nexport type TransitionPreset = keyof typeof transition\r\nexport type KeyframeName = keyof typeof keyframes\r\n","/**\r\n * Brycks Design System - Component Typography Primitives\r\n *\r\n * Typography scales specifically for component contexts.\r\n * Derived from base typography tokens.\r\n *\r\n * RULE: Components MUST use these scales. Never hardcode font values.\r\n */\r\n\r\nimport { fontSizes, fontWeights, lineHeights, fontFamilies } from '../tokens/typography'\r\n\r\n/**\r\n * Font sizes mapped to component size variants.\r\n * Ensures consistent text sizing across all components.\r\n */\r\nexport const componentFontSize = {\r\n /** 11px - Extra small labels, badges */\r\n xs: fontSizes.xs,\r\n /** 12px - Small text, captions, helper text */\r\n sm: fontSizes.sm,\r\n /** 14px - Default component text */\r\n md: fontSizes.base,\r\n /** 15px - Large component text */\r\n lg: 15,\r\n /** 16px - Extra large component text */\r\n xl: fontSizes.md,\r\n} as const\r\n\r\n/**\r\n * Font weights for component states.\r\n */\r\nexport const componentFontWeight = {\r\n /** 400 - Regular body text */\r\n regular: fontWeights.regular,\r\n /** 500 - Labels, emphasized text */\r\n medium: fontWeights.medium,\r\n /** 600 - Headings, titles */\r\n semibold: fontWeights.semibold,\r\n /** 700 - Strong emphasis */\r\n bold: fontWeights.bold,\r\n} as const\r\n\r\n/**\r\n * Line heights for component text.\r\n */\r\nexport const componentLineHeight = {\r\n /** 1 - Single line, badges */\r\n none: lineHeights.none,\r\n /** 1.25 - Tight, headings */\r\n tight: lineHeights.snug,\r\n /** 1.4 - Slightly relaxed, labels */\r\n snug: 1.4,\r\n /** 1.5 - Default body text */\r\n normal: lineHeights.normal,\r\n /** 1.6 - Relaxed, helper text */\r\n relaxed: 1.6,\r\n} as const\r\n\r\n/**\r\n * Pre-composed typography styles for common component elements.\r\n */\r\nexport const componentTypography = {\r\n /** Form field labels */\r\n label: {\r\n fontFamily: fontFamilies.sans,\r\n fontSize: componentFontSize.sm,\r\n fontWeight: componentFontWeight.medium,\r\n lineHeight: componentLineHeight.normal,\r\n },\r\n /** Helper/hint text below inputs */\r\n helperText: {\r\n fontFamily: fontFamilies.sans,\r\n fontSize: componentFontSize.xs,\r\n fontWeight: componentFontWeight.regular,\r\n lineHeight: componentLineHeight.relaxed,\r\n },\r\n /** Error messages */\r\n errorText: {\r\n fontFamily: fontFamilies.sans,\r\n fontSize: componentFontSize.xs,\r\n fontWeight: componentFontWeight.regular,\r\n lineHeight: componentLineHeight.relaxed,\r\n },\r\n /** Button text - small */\r\n buttonSm: {\r\n fontFamily: fontFamilies.sans,\r\n fontSize: componentFontSize.sm,\r\n fontWeight: componentFontWeight.medium,\r\n lineHeight: componentLineHeight.none,\r\n },\r\n /** Button text - medium (default) */\r\n buttonMd: {\r\n fontFamily: fontFamilies.sans,\r\n fontSize: componentFontSize.md,\r\n fontWeight: componentFontWeight.medium,\r\n lineHeight: componentLineHeight.none,\r\n },\r\n /** Button text - large */\r\n buttonLg: {\r\n fontFamily: fontFamilies.sans,\r\n fontSize: componentFontSize.lg,\r\n fontWeight: componentFontWeight.medium,\r\n lineHeight: componentLineHeight.none,\r\n },\r\n /** Badge text */\r\n badge: {\r\n fontFamily: fontFamilies.sans,\r\n fontSize: componentFontSize.xs,\r\n fontWeight: componentFontWeight.medium,\r\n lineHeight: componentLineHeight.none,\r\n },\r\n /** Tooltip text */\r\n tooltip: {\r\n fontFamily: fontFamilies.sans,\r\n fontSize: componentFontSize.xs,\r\n fontWeight: componentFontWeight.medium,\r\n lineHeight: componentLineHeight.snug,\r\n },\r\n /** Alert title */\r\n alertTitle: {\r\n fontFamily: fontFamilies.sans,\r\n fontSize: componentFontSize.md,\r\n fontWeight: componentFontWeight.semibold,\r\n lineHeight: componentLineHeight.tight,\r\n },\r\n /** Alert description */\r\n alertDescription: {\r\n fontFamily: fontFamilies.sans,\r\n fontSize: componentFontSize.md,\r\n fontWeight: componentFontWeight.regular,\r\n lineHeight: componentLineHeight.normal,\r\n },\r\n /** Modal title */\r\n modalTitle: {\r\n fontFamily: fontFamilies.sans,\r\n fontSize: fontSizes.lg,\r\n fontWeight: componentFontWeight.semibold,\r\n lineHeight: componentLineHeight.tight,\r\n },\r\n /** Modal description */\r\n modalDescription: {\r\n fontFamily: fontFamilies.sans,\r\n fontSize: componentFontSize.md,\r\n fontWeight: componentFontWeight.regular,\r\n lineHeight: componentLineHeight.normal,\r\n },\r\n /** Empty state title */\r\n emptyStateTitle: {\r\n fontFamily: fontFamilies.sans,\r\n fontSize: fontSizes.lg,\r\n fontWeight: componentFontWeight.semibold,\r\n lineHeight: componentLineHeight.tight,\r\n },\r\n /** Empty state description */\r\n emptyStateDescription: {\r\n fontFamily: fontFamilies.sans,\r\n fontSize: componentFontSize.md,\r\n fontWeight: componentFontWeight.regular,\r\n lineHeight: componentLineHeight.normal,\r\n },\r\n /** Divider label */\r\n dividerLabel: {\r\n fontFamily: fontFamilies.sans,\r\n fontSize: componentFontSize.xs,\r\n fontWeight: componentFontWeight.medium,\r\n lineHeight: componentLineHeight.normal,\r\n },\r\n} as const\r\n\r\nexport type ComponentTypographyKey = keyof typeof componentTypography\r\n","/**\r\n * Brycks Design System - Opacity Primitives\r\n *\r\n * Standardized opacity values for consistent visual states.\r\n *\r\n * RULE: Components MUST use these values. Never hardcode opacity.\r\n */\r\n\r\n/**\r\n * Opacity scale for various visual states.\r\n */\r\nexport const opacity = {\r\n /** 0 - Fully transparent */\r\n transparent: 0,\r\n /** 0.05 - Barely visible */\r\n 5: 0.05,\r\n /** 0.1 - Subtle hint */\r\n 10: 0.1,\r\n /** 0.15 - Light overlay */\r\n 15: 0.15,\r\n /** 0.2 - Soft background */\r\n 20: 0.2,\r\n /** 0.25 - Quarter visible */\r\n 25: 0.25,\r\n /** 0.3 - Light emphasis */\r\n 30: 0.3,\r\n /** 0.4 - Medium-light */\r\n 40: 0.4,\r\n /** 0.5 - Half visible (disabled) */\r\n 50: 0.5,\r\n /** 0.6 - Medium */\r\n 60: 0.6,\r\n /** 0.7 - Medium-strong */\r\n 70: 0.7,\r\n /** 0.75 - Three-quarter visible */\r\n 75: 0.75,\r\n /** 0.8 - Strong */\r\n 80: 0.8,\r\n /** 0.9 - Almost opaque */\r\n 90: 0.9,\r\n /** 0.95 - Nearly opaque */\r\n 95: 0.95,\r\n /** 1 - Fully opaque */\r\n opaque: 1,\r\n} as const\r\n\r\n/**\r\n * Semantic opacity values for common states.\r\n */\r\nexport const stateOpacity = {\r\n /** Disabled elements */\r\n disabled: opacity[50],\r\n /** Placeholder text */\r\n placeholder: opacity[50],\r\n /** Hover overlay */\r\n hoverOverlay: opacity[5],\r\n /** Active/pressed overlay */\r\n activeOverlay: opacity[10],\r\n /** Modal backdrop */\r\n backdrop: opacity[40],\r\n /** Loading state */\r\n loading: opacity[70],\r\n /** Secondary text */\r\n muted: opacity[60],\r\n /** Subtle decorative elements */\r\n subtle: opacity[30],\r\n} as const\r\n\r\n/**\r\n * Scale transform values for interactive states.\r\n */\r\nexport const scale = {\r\n /** Pressed state - subtle shrink */\r\n pressed: 0.98,\r\n /** Strong pressed - more noticeable */\r\n pressedStrong: 0.95,\r\n /** Checkbox pressed */\r\n controlPressed: 0.92,\r\n /** Hidden/initial state for animations */\r\n hidden: 0.95,\r\n /** Normal state */\r\n normal: 1,\r\n /** Slight grow on hover */\r\n hover: 1.02,\r\n /** Emphasized grow */\r\n emphasized: 1.05,\r\n} as const\r\n\r\nexport type OpacityValue = keyof typeof opacity\r\nexport type StateOpacity = keyof typeof stateOpacity\r\nexport type ScaleValue = keyof typeof scale\r\n","/**\r\n * Brycks Design System - Layout Primitives\r\n *\r\n * Standardized layout dimensions for application shells.\r\n * All values are derived from the spacing token system (4px grid).\r\n *\r\n * RULE: Application layouts MUST use these constants. Never hardcode dimensions.\r\n */\r\n\r\nimport { spacing } from '../tokens/spacing'\r\n\r\n/**\r\n * Sidebar dimensions\r\n */\r\nexport const sidebarSizes = {\r\n /** Collapsed sidebar width: 72px */\r\n collapsed: 72,\r\n /** Expanded sidebar width: 240px */\r\n expanded: 240,\r\n /** Logo size: 32px */\r\n logoSize: spacing[8],\r\n /** Nav icon size: 20px */\r\n navIconSize: spacing[5],\r\n} as const\r\n\r\n/**\r\n * Header dimensions\r\n */\r\nexport const headerSizes = {\r\n /** Standard header height: 64px */\r\n height: spacing[16],\r\n /** Compact header height: 48px */\r\n compact: spacing[12],\r\n} as const\r\n\r\n/**\r\n * Avatar dimensions\r\n */\r\nexport const avatarSizes = {\r\n /** 24px - Extra small */\r\n xs: spacing[6],\r\n /** 32px - Small */\r\n sm: spacing[8],\r\n /** 36px - Medium (default) */\r\n md: 36,\r\n /** 40px - Large */\r\n lg: spacing[10],\r\n /** 48px - Extra large */\r\n xl: spacing[12],\r\n /** 64px - 2x large (for hero sections) */\r\n '2xl': spacing[16],\r\n} as const\r\n\r\n/**\r\n * Icon button sizes (square buttons with icons)\r\n */\r\nexport const iconButtonSizes = {\r\n /** 28px */\r\n xs: 28,\r\n /** 32px */\r\n sm: spacing[8],\r\n /** 36px */\r\n md: 36,\r\n /** 40px */\r\n lg: spacing[10],\r\n /** 48px */\r\n xl: spacing[12],\r\n} as const\r\n\r\n/**\r\n * Quick action card dimensions\r\n */\r\nexport const quickActionSizes = {\r\n /** Icon container size: 48px */\r\n iconContainer: spacing[12],\r\n /** Default padding: 16px */\r\n padding: spacing[4],\r\n} as const\r\n\r\n/**\r\n * Content area padding\r\n */\r\nexport const contentPadding = {\r\n /** Mobile padding: 16px */\r\n mobile: spacing[4],\r\n /** Tablet padding: 20px */\r\n tablet: spacing[5],\r\n /** Desktop padding: 24px */\r\n desktop: spacing[6],\r\n /** Large screen padding: 32px */\r\n wide: spacing[8],\r\n} as const\r\n\r\n/**\r\n * Page header spacing\r\n */\r\nexport const pageHeaderSpacing = {\r\n /** Bottom margin: 24px */\r\n marginBottom: spacing[6],\r\n} as const\r\n\r\n/**\r\n * Search input dimensions\r\n */\r\nexport const searchInputSizes = {\r\n /** Minimum width: 240px */\r\n minWidth: 240,\r\n /** Icon left offset: 12px */\r\n iconLeft: spacing[3],\r\n /** Input left padding to accommodate icon: 36px */\r\n paddingLeft: 36,\r\n} as const\r\n\r\n/**\r\n * Stat card dimensions\r\n */\r\nexport const statCardSizes = {\r\n /** Icon container size: 48px */\r\n iconContainer: spacing[12],\r\n} as const\r\n\r\nexport type SidebarSizes = typeof sidebarSizes\r\nexport type HeaderSizes = typeof headerSizes\r\nexport type AvatarSizes = typeof avatarSizes\r\nexport type IconButtonSizes = typeof iconButtonSizes\r\n","/**\r\n * Brycks Design System - Style Utilities\r\n *\r\n * Helper functions for building component styles.\r\n * All values derive from design system - NO hardcoded values.\r\n *\r\n * @module utils/styles\r\n */\r\n\r\nimport type { CSSProperties } from 'react'\r\nimport type { SpacingProps } from '../types/common'\r\nimport { spacing } from '../design-system'\r\n\r\n/** Merge class names, filtering out falsy values */\r\nexport function cx(...classes: (string | boolean | undefined | null)[]): string {\r\n return classes.filter(Boolean).join(' ')\r\n}\r\n\r\n/** Convert spacing key to pixel value */\r\nexport function getSpacingValue(key: keyof typeof spacing): number {\r\n return spacing[key]\r\n}\r\n\r\n/** Convert spacing key to CSS value with px unit */\r\nexport function spacingToCss(key: keyof typeof spacing | undefined): string | undefined {\r\n if (key === undefined) return undefined\r\n const value = spacing[key]\r\n return value === 0 ? '0' : `${value}px`\r\n}\r\n\r\n/** Build spacing styles from props */\r\nexport function buildSpacingStyles(props: SpacingProps): CSSProperties {\r\n const styles: CSSProperties = {}\r\n\r\n if (props.m !== undefined) styles.margin = spacingToCss(props.m)\r\n if (props.mx !== undefined) {\r\n styles.marginLeft = spacingToCss(props.mx)\r\n styles.marginRight = spacingToCss(props.mx)\r\n }\r\n if (props.my !== undefined) {\r\n styles.marginTop = spacingToCss(props.my)\r\n styles.marginBottom = spacingToCss(props.my)\r\n }\r\n if (props.mt !== undefined) styles.marginTop = spacingToCss(props.mt)\r\n if (props.mr !== undefined) styles.marginRight = spacingToCss(props.mr)\r\n if (props.mb !== undefined) styles.marginBottom = spacingToCss(props.mb)\r\n if (props.ml !== undefined) styles.marginLeft = spacingToCss(props.ml)\r\n\r\n if (props.p !== undefined) styles.padding = spacingToCss(props.p)\r\n if (props.px !== undefined) {\r\n styles.paddingLeft = spacingToCss(props.px)\r\n styles.paddingRight = spacingToCss(props.px)\r\n }\r\n if (props.py !== undefined) {\r\n styles.paddingTop = spacingToCss(props.py)\r\n styles.paddingBottom = spacingToCss(props.py)\r\n }\r\n if (props.pt !== undefined) styles.paddingTop = spacingToCss(props.pt)\r\n if (props.pr !== undefined) styles.paddingRight = spacingToCss(props.pr)\r\n if (props.pb !== undefined) styles.paddingBottom = spacingToCss(props.pb)\r\n if (props.pl !== undefined) styles.paddingLeft = spacingToCss(props.pl)\r\n\r\n return styles\r\n}\r\n\r\n/** Create CSS-in-JS style object with typed tokens */\r\nexport function createStyles<T extends Record<string, CSSProperties>>(styles: T): T {\r\n return styles\r\n}\r\n\r\n/** Generate a unique ID for accessibility */\r\nlet idCounter = 0\r\nexport function generateId(prefix = 'brycks'): string {\r\n return `${prefix}-${++idCounter}`\r\n}\r\n\r\n/** Convert hex color to rgba */\r\nexport function hexToRgba(hex: string, alpha: number): string {\r\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex)\r\n if (!result) return hex\r\n\r\n const r = parseInt(result[1], 16)\r\n const g = parseInt(result[2], 16)\r\n const b = parseInt(result[3], 16)\r\n\r\n return `rgba(${r}, ${g}, ${b}, ${alpha})`\r\n}\r\n","/**\r\n * Box Component Styles\r\n */\r\n\r\nimport type { CSSProperties } from 'react'\r\nimport type { BoxOwnProps } from './Box.types'\r\nimport { buildSpacingStyles } from '../../../utils/styles'\r\n\r\nconst radiusMap: Record<NonNullable<BoxOwnProps['radius']>, string> = {\r\n none: '0',\r\n xs: 'var(--brycks-radius-xs)',\r\n sm: 'var(--brycks-radius-sm)',\r\n md: 'var(--brycks-radius-md)',\r\n lg: 'var(--brycks-radius-lg)',\r\n xl: 'var(--brycks-radius-xl)',\r\n '2xl': 'var(--brycks-radius-2xl)',\r\n '3xl': 'var(--brycks-radius-3xl)',\r\n full: 'var(--brycks-radius-full)',\r\n}\r\n\r\nconst shadowMap: Record<NonNullable<BoxOwnProps['shadow']>, string> = {\r\n none: 'none',\r\n xs: 'var(--brycks-shadow-xs)',\r\n sm: 'var(--brycks-shadow-sm)',\r\n md: 'var(--brycks-shadow-md)',\r\n lg: 'var(--brycks-shadow-lg)',\r\n xl: 'var(--brycks-shadow-xl)',\r\n '2xl': 'var(--brycks-shadow-2xl)',\r\n}\r\n\r\nexport function buildBoxStyles(props: BoxOwnProps): CSSProperties {\r\n const spacingStyles = buildSpacingStyles(props)\r\n\r\n const styles: CSSProperties = {\r\n ...spacingStyles,\r\n }\r\n\r\n if (props.display) styles.display = props.display\r\n if (props.position) styles.position = props.position\r\n if (props.width) styles.width = props.width\r\n if (props.height) styles.height = props.height\r\n if (props.minWidth) styles.minWidth = props.minWidth\r\n if (props.maxWidth) styles.maxWidth = props.maxWidth\r\n if (props.minHeight) styles.minHeight = props.minHeight\r\n if (props.maxHeight) styles.maxHeight = props.maxHeight\r\n if (props.overflow) styles.overflow = props.overflow\r\n if (props.bg) styles.backgroundColor = props.bg\r\n if (props.radius) styles.borderRadius = radiusMap[props.radius]\r\n if (props.shadow) styles.boxShadow = shadowMap[props.shadow]\r\n\r\n return styles\r\n}\r\n","/**\r\n * Box Component\r\n *\r\n * A polymorphic layout primitive that serves as the foundation for all other components.\r\n * Provides spacing, sizing, and visual styling through props.\r\n */\r\n\r\nimport React, { forwardRef, type ElementType, type ComponentPropsWithRef } from 'react'\r\nimport type { BoxProps, BoxOwnProps } from './Box.types'\r\nimport { buildBoxStyles } from './Box.styles'\r\nimport { cx } from '../../../utils/styles'\r\n\r\ninterface BoxComponent {\r\n <E extends ElementType = 'div'>(\r\n props: BoxProps<E> & { ref?: ComponentPropsWithRef<E>['ref'] }\r\n ): React.JSX.Element | null\r\n displayName?: string\r\n}\r\n\r\n// Keys to omit from props before spreading\r\nconst boxOwnPropKeys: (keyof BoxOwnProps)[] = [\r\n 'm',\r\n 'mx',\r\n 'my',\r\n 'mt',\r\n 'mr',\r\n 'mb',\r\n 'ml',\r\n 'p',\r\n 'px',\r\n 'py',\r\n 'pt',\r\n 'pr',\r\n 'pb',\r\n 'pl',\r\n 'display',\r\n 'position',\r\n 'width',\r\n 'height',\r\n 'minWidth',\r\n 'maxWidth',\r\n 'minHeight',\r\n 'maxHeight',\r\n 'overflow',\r\n 'bg',\r\n 'radius',\r\n 'shadow',\r\n 'testId',\r\n]\r\n\r\nfunction omitBoxProps<P extends Record<string, unknown>>(\r\n props: P\r\n): Omit<P, (typeof boxOwnPropKeys)[number]> {\r\n const result = { ...props }\r\n for (const key of boxOwnPropKeys) {\r\n delete result[key]\r\n }\r\n return result\r\n}\r\n\r\nconst BoxInner = <E extends ElementType = 'div'>(\r\n { as, className, style, children, testId, ...props }: BoxProps<E>,\r\n ref: React.ForwardedRef<Element>\r\n) => {\r\n const Component = as || 'div'\r\n const boxStyles = buildBoxStyles(props as BoxOwnProps)\r\n const filteredProps = omitBoxProps(props)\r\n\r\n return (\r\n <Component\r\n ref={ref}\r\n className={cx('brycks-box', className)}\r\n style={{ ...boxStyles, ...style }}\r\n data-testid={testId}\r\n {...filteredProps}\r\n >\r\n {children}\r\n </Component>\r\n )\r\n}\r\n\r\nexport const Box = forwardRef(BoxInner) as BoxComponent\r\n\r\nBox.displayName = 'Box'\r\n","/**\r\n * Stack Component\r\n *\r\n * A flexbox layout component for stacking elements vertically or horizontally.\r\n * Provides consistent spacing between children.\r\n */\r\n\r\nimport React, { forwardRef, type ElementType, type ComponentPropsWithRef, type CSSProperties } from 'react'\r\nimport type { StackProps, StackOwnProps } from './Stack.types'\r\nimport { buildSpacingStyles, spacingToCss, cx } from '../../../utils/styles'\r\n\r\ninterface StackComponent {\r\n <E extends ElementType = 'div'>(\r\n props: StackProps<E> & { ref?: ComponentPropsWithRef<E>['ref'] }\r\n ): React.JSX.Element | null\r\n displayName?: string\r\n}\r\n\r\nconst stackOwnPropKeys: (keyof StackOwnProps)[] = [\r\n 'm',\r\n 'mx',\r\n 'my',\r\n 'mt',\r\n 'mr',\r\n 'mb',\r\n 'ml',\r\n 'p',\r\n 'px',\r\n 'py',\r\n 'pt',\r\n 'pr',\r\n 'pb',\r\n 'pl',\r\n 'direction',\r\n 'gap',\r\n 'gapX',\r\n 'gapY',\r\n 'align',\r\n 'justify',\r\n 'wrap',\r\n 'inline',\r\n 'testId',\r\n]\r\n\r\nfunction omitStackProps<P extends Record<string, unknown>>(\r\n props: P\r\n): Omit<P, (typeof stackOwnPropKeys)[number]> {\r\n const result = { ...props }\r\n for (const key of stackOwnPropKeys) {\r\n delete result[key]\r\n }\r\n return result\r\n}\r\n\r\nfunction buildStackStyles(props: StackOwnProps): CSSProperties {\r\n const spacingStyles = buildSpacingStyles(props)\r\n\r\n const styles: CSSProperties = {\r\n ...spacingStyles,\r\n display: props.inline ? 'inline-flex' : 'flex',\r\n flexDirection: props.direction ?? 'column',\r\n }\r\n\r\n if (props.gap !== undefined) {\r\n styles.gap = spacingToCss(props.gap)\r\n } else {\r\n if (props.gapX !== undefined) styles.columnGap = spacingToCss(props.gapX)\r\n if (props.gapY !== undefined) styles.rowGap = spacingToCss(props.gapY)\r\n }\r\n\r\n if (props.align) styles.alignItems = props.align\r\n if (props.justify) styles.justifyContent = props.justify\r\n if (props.wrap) styles.flexWrap = props.wrap\r\n\r\n return styles\r\n}\r\n\r\nconst StackInner = <E extends ElementType = 'div'>(\r\n { as, className, style, children, testId, ...props }: StackProps<E>,\r\n ref: React.ForwardedRef<Element>\r\n) => {\r\n const Component = as || 'div'\r\n const stackStyles = buildStackStyles(props as StackOwnProps)\r\n const filteredProps = omitStackProps(props)\r\n\r\n return (\r\n <Component\r\n ref={ref}\r\n className={cx('brycks-stack', className)}\r\n style={{ ...stackStyles, ...style }}\r\n data-testid={testId}\r\n {...filteredProps}\r\n >\r\n {children}\r\n </Component>\r\n )\r\n}\r\n\r\nexport const Stack = forwardRef(StackInner) as StackComponent\r\n\r\nStack.displayName = 'Stack'\r\n\r\n/** Horizontal stack shorthand */\r\nconst HStackInner = <E extends ElementType = 'div'>(\r\n props: Omit<StackProps<E>, 'direction'> & { ref?: ComponentPropsWithRef<E>['ref'] },\r\n ref: React.ForwardedRef<Element>\r\n) => {\r\n return <Stack ref={ref} direction=\"row\" align=\"center\" {...props} />\r\n}\r\n\r\nexport const HStack = forwardRef(HStackInner) as StackComponent\r\n\r\nHStack.displayName = 'HStack'\r\n\r\n/** Vertical stack shorthand */\r\nconst VStackInner = <E extends ElementType = 'div'>(\r\n props: Omit<StackProps<E>, 'direction'> & { ref?: ComponentPropsWithRef<E>['ref'] },\r\n ref: React.ForwardedRef<Element>\r\n) => {\r\n return <Stack ref={ref} direction=\"column\" {...props} />\r\n}\r\n\r\nexport const VStack = forwardRef(VStackInner) as StackComponent\r\n\r\nVStack.displayName = 'VStack'\r\n","/**\r\n * Grid Component\r\n *\r\n * A CSS Grid layout component for creating responsive grid layouts.\r\n */\r\n\r\nimport React, {\r\n forwardRef,\r\n type ElementType,\r\n type ComponentPropsWithRef,\r\n type CSSProperties,\r\n type ReactNode,\r\n type ComponentPropsWithoutRef,\r\n} from 'react'\r\nimport type { SpacingProps } from '../../../types/common'\r\nimport type { SpacingKey } from '../../../design-system/tokens/spacing'\r\nimport { buildSpacingStyles, spacingToCss, cx } from '../../../utils/styles'\r\n\r\nexport interface GridOwnProps extends SpacingProps {\r\n /** The element type to render */\r\n as?: ElementType\r\n /** Custom class name */\r\n className?: string\r\n /** Custom inline styles */\r\n style?: CSSProperties\r\n /** Number of columns */\r\n columns?: number | string\r\n /** Number of rows */\r\n rows?: number | string\r\n /** Gap between items */\r\n gap?: SpacingKey\r\n /** Column gap */\r\n gapX?: SpacingKey\r\n /** Row gap */\r\n gapY?: SpacingKey\r\n /** Align items */\r\n align?: CSSProperties['alignItems']\r\n /** Justify items */\r\n justify?: CSSProperties['justifyItems']\r\n /** Template columns (CSS value) */\r\n templateColumns?: string\r\n /** Template rows (CSS value) */\r\n templateRows?: string\r\n /** Auto flow */\r\n flow?: CSSProperties['gridAutoFlow']\r\n /** Whether to render as inline-grid */\r\n inline?: boolean\r\n /** Children */\r\n children?: ReactNode\r\n /** Test ID */\r\n testId?: string\r\n}\r\n\r\nexport type GridProps<E extends ElementType = 'div'> = GridOwnProps &\r\n Omit<ComponentPropsWithoutRef<E>, keyof GridOwnProps>\r\n\r\ninterface GridComponent {\r\n <E extends ElementType = 'div'>(\r\n props: GridProps<E> & { ref?: ComponentPropsWithRef<E>['ref'] }\r\n ): React.JSX.Element | null\r\n displayName?: string\r\n}\r\n\r\nconst gridOwnPropKeys: (keyof GridOwnProps)[] = [\r\n 'm',\r\n 'mx',\r\n 'my',\r\n 'mt',\r\n 'mr',\r\n 'mb',\r\n 'ml',\r\n 'p',\r\n 'px',\r\n 'py',\r\n 'pt',\r\n 'pr',\r\n 'pb',\r\n 'pl',\r\n 'columns',\r\n 'rows',\r\n 'gap',\r\n 'gapX',\r\n 'gapY',\r\n 'align',\r\n 'justify',\r\n 'templateColumns',\r\n 'templateRows',\r\n 'flow',\r\n 'inline',\r\n 'testId',\r\n]\r\n\r\nfunction omitGridProps<P extends Record<string, unknown>>(\r\n props: P\r\n): Omit<P, (typeof gridOwnPropKeys)[number]> {\r\n const result = { ...props }\r\n for (const key of gridOwnPropKeys) {\r\n delete result[key]\r\n }\r\n return result\r\n}\r\n\r\nfunction buildGridStyles(props: GridOwnProps): CSSProperties {\r\n const spacingStyles = buildSpacingStyles(props)\r\n\r\n const styles: CSSProperties = {\r\n ...spacingStyles,\r\n display: props.inline ? 'inline-grid' : 'grid',\r\n }\r\n\r\n if (props.columns !== undefined) {\r\n styles.gridTemplateColumns =\r\n typeof props.columns === 'number' ? `repeat(${props.columns}, 1fr)` : props.columns\r\n }\r\n\r\n if (props.rows !== undefined) {\r\n styles.gridTemplateRows =\r\n typeof props.rows === 'number' ? `repeat(${props.rows}, 1fr)` : props.rows\r\n }\r\n\r\n if (props.templateColumns) styles.gridTemplateColumns = props.templateColumns\r\n if (props.templateRows) styles.gridTemplateRows = props.templateRows\r\n\r\n if (props.gap !== undefined) {\r\n styles.gap = spacingToCss(props.gap)\r\n } else {\r\n if (props.gapX !== undefined) styles.columnGap = spacingToCss(props.gapX)\r\n if (props.gapY !== undefined) styles.rowGap = spacingToCss(props.gapY)\r\n }\r\n\r\n if (props.align) styles.alignItems = props.align\r\n if (props.justify) styles.justifyItems = props.justify\r\n if (props.flow) styles.gridAutoFlow = props.flow\r\n\r\n return styles\r\n}\r\n\r\nconst GridInner = <E extends ElementType = 'div'>(\r\n { as, className, style, children, testId, ...props }: GridProps<E>,\r\n ref: React.ForwardedRef<Element>\r\n) => {\r\n const Component = as || 'div'\r\n const gridStyles = buildGridStyles(props as GridOwnProps)\r\n const filteredProps = omitGridProps(props)\r\n\r\n return (\r\n <Component\r\n ref={ref}\r\n className={cx('brycks-grid', className)}\r\n style={{ ...gridStyles, ...style }}\r\n data-testid={testId}\r\n {...filteredProps}\r\n >\r\n {children}\r\n </Component>\r\n )\r\n}\r\n\r\nexport const Grid = forwardRef(GridInner) as GridComponent\r\n\r\nGrid.displayName = 'Grid'\r\n\r\n/** Grid Item Component */\r\nexport interface GridItemOwnProps {\r\n /** Column span */\r\n colSpan?: number | 'full'\r\n /** Row span */\r\n rowSpan?: number\r\n /** Column start */\r\n colStart?: number\r\n /** Column end */\r\n colEnd?: number\r\n /** Row start */\r\n rowStart?: number\r\n /** Row end */\r\n rowEnd?: number\r\n /** Custom class name */\r\n className?: string\r\n /** Custom inline styles */\r\n style?: CSSProperties\r\n /** Children */\r\n children?: ReactNode\r\n /** Test ID */\r\n testId?: string\r\n}\r\n\r\nexport type GridItemProps<E extends ElementType = 'div'> = GridItemOwnProps &\r\n Omit<ComponentPropsWithoutRef<E>, keyof GridItemOwnProps> & {\r\n as?: E\r\n }\r\n\r\ninterface GridItemComponent {\r\n <E extends ElementType = 'div'>(\r\n props: GridItemProps<E> & { ref?: ComponentPropsWithRef<E>['ref'] }\r\n ): React.JSX.Element | null\r\n displayName?: string\r\n}\r\n\r\nconst GridItemInner = <E extends ElementType = 'div'>(\r\n {\r\n as,\r\n className,\r\n style,\r\n children,\r\n testId,\r\n colSpan,\r\n rowSpan,\r\n colStart,\r\n colEnd,\r\n rowStart,\r\n rowEnd,\r\n ...props\r\n }: GridItemProps<E>,\r\n ref: React.ForwardedRef<Element>\r\n) => {\r\n const Component = as || 'div'\r\n\r\n const itemStyles: CSSProperties = {}\r\n\r\n if (colSpan !== undefined) {\r\n itemStyles.gridColumn = colSpan === 'full' ? '1 / -1' : `span ${colSpan}`\r\n }\r\n if (rowSpan !== undefined) itemStyles.gridRow = `span ${rowSpan}`\r\n if (colStart !== undefined) itemStyles.gridColumnStart = colStart\r\n if (colEnd !== undefined) itemStyles.gridColumnEnd = colEnd\r\n if (rowStart !== undefined) itemStyles.gridRowStart = rowStart\r\n if (rowEnd !== undefined) itemStyles.gridRowEnd = rowEnd\r\n\r\n return (\r\n <Component\r\n ref={ref as React.LegacyRef<HTMLDivElement>}\r\n className={cx('brycks-grid-item', className)}\r\n style={{ ...itemStyles, ...style }}\r\n data-testid={testId}\r\n {...props}\r\n >\r\n {children}\r\n </Component>\r\n )\r\n}\r\n\r\nexport const GridItem = forwardRef(GridItemInner) as GridItemComponent\r\n\r\nGridItem.displayName = 'GridItem'\r\n","/**\r\n * Container Component\r\n *\r\n * A responsive container that centers content and provides consistent max-widths.\r\n * All values derive from design system - NO hardcoded values.\r\n *\r\n * @module components/layout/Container\r\n */\r\n\r\nimport React, {\r\n forwardRef,\r\n type ElementType,\r\n type ComponentPropsWithRef,\r\n type CSSProperties,\r\n type ReactNode,\r\n type ComponentPropsWithoutRef,\r\n} from 'react'\r\nimport type { SpacingProps } from '../../../types/common'\r\nimport { containers } from '../../../design-system'\r\nimport { buildSpacingStyles, cx } from '../../../utils/styles'\r\n\r\nexport interface ContainerOwnProps extends SpacingProps {\r\n /** The element type to render */\r\n as?: ElementType\r\n /** Custom class name */\r\n className?: string\r\n /** Custom inline styles */\r\n style?: CSSProperties\r\n /** Container size / max-width */\r\n size?: keyof typeof containers\r\n /** Whether to center the container */\r\n centered?: boolean\r\n /** Whether to add default horizontal padding */\r\n padded?: boolean\r\n /** Children */\r\n children?: ReactNode\r\n /** Test ID */\r\n testId?: string\r\n}\r\n\r\nexport type ContainerProps<E extends ElementType = 'div'> = ContainerOwnProps &\r\n Omit<ComponentPropsWithoutRef<E>, keyof ContainerOwnProps>\r\n\r\ninterface ContainerComponent {\r\n <E extends ElementType = 'div'>(\r\n props: ContainerProps<E> & { ref?: ComponentPropsWithRef<E>['ref'] }\r\n ): React.JSX.Element | null\r\n displayName?: string\r\n}\r\n\r\nconst containerOwnPropKeys: (keyof ContainerOwnProps)[] = [\r\n 'm',\r\n 'mx',\r\n 'my',\r\n 'mt',\r\n 'mr',\r\n 'mb',\r\n 'ml',\r\n 'p',\r\n 'px',\r\n 'py',\r\n 'pt',\r\n 'pr',\r\n 'pb',\r\n 'pl',\r\n 'size',\r\n 'centered',\r\n 'padded',\r\n 'testId',\r\n]\r\n\r\nfunction omitContainerProps<P extends Record<string, unknown>>(\r\n props: P\r\n): Omit<P, (typeof containerOwnPropKeys)[number]> {\r\n const result = { ...props }\r\n for (const key of containerOwnPropKeys) {\r\n delete result[key]\r\n }\r\n return result\r\n}\r\n\r\nfunction buildContainerStyles(props: ContainerOwnProps): CSSProperties {\r\n const spacingStyles = buildSpacingStyles(props)\r\n\r\n const size = props.size ?? 'xl'\r\n const maxWidth = containers[size]\r\n\r\n const styles: CSSProperties = {\r\n ...spacingStyles,\r\n width: '100%',\r\n maxWidth: typeof maxWidth === 'number' ? `${maxWidth}px` : maxWidth,\r\n }\r\n\r\n if (props.centered !== false) {\r\n styles.marginLeft = 'auto'\r\n styles.marginRight = 'auto'\r\n }\r\n\r\n if (props.padded !== false) {\r\n styles.paddingLeft = 'var(--brycks-space-4)'\r\n styles.paddingRight = 'var(--brycks-space-4)'\r\n }\r\n\r\n return styles\r\n}\r\n\r\nconst ContainerInner = <E extends ElementType = 'div'>(\r\n { as, className, style, children, testId, ...props }: ContainerProps<E>,\r\n ref: React.ForwardedRef<Element>\r\n) => {\r\n const Component = as || 'div'\r\n const containerStyles = buildContainerStyles(props as ContainerOwnProps)\r\n const filteredProps = omitContainerProps(props)\r\n\r\n return (\r\n <Component\r\n ref={ref}\r\n className={cx('brycks-container', className)}\r\n style={{ ...containerStyles, ...style }}\r\n data-testid={testId}\r\n {...filteredProps}\r\n >\r\n {children}\r\n </Component>\r\n )\r\n}\r\n\r\nexport const Container = forwardRef(ContainerInner) as ContainerComponent\r\n\r\nContainer.displayName = 'Container'\r\n","/**\n * Card Component\n *\n * A flexible card container with optional header, footer, and body sections.\n * Supports different variants and padding sizes.\n */\n\nimport { forwardRef, type CSSProperties, type HTMLAttributes } from 'react'\nimport { cx } from '../../../utils/styles'\n\nexport type CardVariant = 'elevated' | 'outline' | 'filled' | 'ghost'\nexport type CardPadding = 'none' | 'sm' | 'md' | 'lg' | 'xl'\n\nexport interface CardProps extends HTMLAttributes<HTMLDivElement> {\n /** Card variant */\n variant?: CardVariant\n /** Card padding */\n padding?: CardPadding\n /** Whether the card is interactive (adds hover effect) */\n interactive?: boolean\n /** Whether the card is selected */\n selected?: boolean\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nexport interface CardHeaderProps extends HTMLAttributes<HTMLDivElement> {\n /** Whether to show a divider below the header */\n divider?: boolean\n /** Custom class name */\n className?: string\n}\n\nexport interface CardBodyProps extends HTMLAttributes<HTMLDivElement> {\n /** Custom class name */\n className?: string\n}\n\nexport interface CardFooterProps extends HTMLAttributes<HTMLDivElement> {\n /** Whether to show a divider above the footer */\n divider?: boolean\n /** Footer alignment */\n align?: 'left' | 'center' | 'right' | 'between'\n /** Custom class name */\n className?: string\n}\n\nconst paddingMap: Record<CardPadding, number> = {\n none: 0,\n sm: 12,\n md: 16,\n lg: 24,\n xl: 32,\n}\n\nexport const Card = forwardRef<HTMLDivElement, CardProps>(function Card(\n {\n variant = 'elevated',\n padding = 'md',\n interactive = false,\n selected = false,\n className,\n style,\n children,\n testId,\n ...props\n },\n ref\n) {\n const getVariantStyles = (): CSSProperties => {\n const base: CSSProperties = {\n borderRadius: 'var(--brycks-radius-lg)',\n transition: 'transform 150ms ease-out, box-shadow 150ms ease-out, border-color 150ms ease-out',\n }\n\n switch (variant) {\n case 'elevated':\n return {\n ...base,\n backgroundColor: 'var(--brycks-background-elevated)',\n boxShadow: selected\n ? '0 0 0 2px var(--brycks-primary-default), var(--brycks-shadow-md)'\n : 'var(--brycks-shadow-md)',\n border: '1px solid var(--brycks-border-subtle)',\n }\n case 'outline':\n return {\n ...base,\n backgroundColor: 'var(--brycks-background-default)',\n border: selected\n ? '2px solid var(--brycks-primary-default)'\n : '1px solid var(--brycks-border-default)',\n }\n case 'filled':\n return {\n ...base,\n backgroundColor: 'var(--brycks-background-muted)',\n border: selected\n ? '2px solid var(--brycks-primary-default)'\n : '1px solid transparent',\n }\n case 'ghost':\n return {\n ...base,\n backgroundColor: 'transparent',\n border: selected\n ? '2px solid var(--brycks-primary-default)'\n : '1px solid transparent',\n }\n }\n }\n\n const cardStyle: CSSProperties = {\n ...getVariantStyles(),\n padding: paddingMap[padding],\n display: 'flex',\n flexDirection: 'column',\n cursor: interactive ? 'pointer' : undefined,\n ...style,\n }\n\n return (\n <div\n ref={ref}\n className={cx(\n 'brycks-card',\n `brycks-card--${variant}`,\n interactive && 'brycks-card--interactive',\n selected && 'brycks-card--selected',\n className\n )}\n style={cardStyle}\n data-testid={testId}\n onMouseEnter={\n interactive\n ? (e) => {\n const target = e.currentTarget\n if (variant === 'elevated') {\n target.style.boxShadow = selected\n ? '0 0 0 2px var(--brycks-primary-default), var(--brycks-shadow-lg)'\n : 'var(--brycks-shadow-lg)'\n target.style.transform = 'translateY(-2px)'\n } else if (variant !== 'ghost') {\n target.style.borderColor = 'var(--brycks-border-strong)'\n }\n }\n : undefined\n }\n onMouseLeave={\n interactive\n ? (e) => {\n const target = e.currentTarget\n if (variant === 'elevated') {\n target.style.boxShadow = selected\n ? '0 0 0 2px var(--brycks-primary-default), var(--brycks-shadow-md)'\n : 'var(--brycks-shadow-md)'\n target.style.transform = 'translateY(0)'\n } else if (variant !== 'ghost') {\n target.style.borderColor = selected\n ? 'var(--brycks-primary-default)'\n : 'var(--brycks-border-default)'\n }\n }\n : undefined\n }\n {...props}\n >\n {children}\n </div>\n )\n})\n\nCard.displayName = 'Card'\n\nexport const CardHeader = forwardRef<HTMLDivElement, CardHeaderProps>(function CardHeader(\n { divider = false, className, style, children, ...props },\n ref\n) {\n const headerStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 12,\n paddingBottom: divider ? 16 : 0,\n marginBottom: divider ? 16 : 12,\n borderBottom: divider ? '1px solid var(--brycks-border-muted)' : undefined,\n ...style,\n }\n\n return (\n <div ref={ref} className={cx('brycks-card-header', className)} style={headerStyle} {...props}>\n {children}\n </div>\n )\n})\n\nCardHeader.displayName = 'CardHeader'\n\nexport const CardBody = forwardRef<HTMLDivElement, CardBodyProps>(function CardBody(\n { className, style, children, ...props },\n ref\n) {\n const bodyStyle: CSSProperties = {\n flex: 1,\n ...style,\n }\n\n return (\n <div ref={ref} className={cx('brycks-card-body', className)} style={bodyStyle} {...props}>\n {children}\n </div>\n )\n})\n\nCardBody.displayName = 'CardBody'\n\nexport const CardFooter = forwardRef<HTMLDivElement, CardFooterProps>(function CardFooter(\n { divider = false, align = 'right', className, style, children, ...props },\n ref\n) {\n const alignMap: Record<string, CSSProperties['justifyContent']> = {\n left: 'flex-start',\n center: 'center',\n right: 'flex-end',\n between: 'space-between',\n }\n\n const footerStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: alignMap[align],\n gap: 12,\n paddingTop: divider ? 16 : 0,\n marginTop: divider ? 16 : 12,\n borderTop: divider ? '1px solid var(--brycks-border-muted)' : undefined,\n ...style,\n }\n\n return (\n <div ref={ref} className={cx('brycks-card-footer', className)} style={footerStyle} {...props}>\n {children}\n </div>\n )\n})\n\nCardFooter.displayName = 'CardFooter'\n","/**\n * Section Component\n *\n * A semantic section wrapper with optional title, description, and dividers.\n * Useful for organizing content into logical groups.\n */\n\nimport { forwardRef, type CSSProperties, type ReactNode, type HTMLAttributes } from 'react'\nimport { cx } from '../../../utils/styles'\n\nexport type SectionSpacing = 'none' | 'sm' | 'md' | 'lg' | 'xl'\n\nexport interface SectionProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {\n /** Section title */\n title?: ReactNode\n /** Section description */\n description?: ReactNode\n /** Title level for accessibility */\n titleLevel?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'\n /** Spacing between sections */\n spacing?: SectionSpacing\n /** Whether to show a divider above the section */\n divider?: boolean\n /** Actions to display in the header (right side) */\n actions?: ReactNode\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst spacingMap: Record<SectionSpacing, number> = {\n none: 0,\n sm: 16,\n md: 24,\n lg: 32,\n xl: 48,\n}\n\nexport const Section = forwardRef<HTMLElement, SectionProps>(function Section(\n {\n title,\n description,\n titleLevel = 'h2',\n spacing = 'md',\n divider = false,\n actions,\n className,\n style,\n children,\n testId,\n ...props\n },\n ref\n) {\n const TitleTag = titleLevel\n\n const sectionStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 16,\n paddingTop: divider ? spacingMap[spacing] : 0,\n marginTop: spacingMap[spacing],\n borderTop: divider ? '1px solid var(--brycks-border-muted)' : undefined,\n ...style,\n }\n\n const headerStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n gap: 16,\n }\n\n const titleContainerStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 4,\n }\n\n const titleStyle: CSSProperties = {\n fontSize: 18,\n fontWeight: 600,\n color: 'var(--brycks-foreground-default)',\n margin: 0,\n lineHeight: 1.3,\n }\n\n const descriptionStyle: CSSProperties = {\n fontSize: 14,\n color: 'var(--brycks-foreground-muted)',\n margin: 0,\n lineHeight: 1.5,\n }\n\n const actionsStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n flexShrink: 0,\n }\n\n const contentStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n }\n\n const hasHeader = title || description || actions\n\n return (\n <section\n ref={ref}\n className={cx('brycks-section', className)}\n style={sectionStyle}\n data-testid={testId}\n {...props}\n >\n {hasHeader && (\n <div className=\"brycks-section-header\" style={headerStyle}>\n <div style={titleContainerStyle}>\n {title && (\n <TitleTag style={titleStyle}>{title}</TitleTag>\n )}\n {description && (\n <p style={descriptionStyle}>{description}</p>\n )}\n </div>\n {actions && <div style={actionsStyle}>{actions}</div>}\n </div>\n )}\n <div className=\"brycks-section-content\" style={contentStyle}>\n {children}\n </div>\n </section>\n )\n})\n\nSection.displayName = 'Section'\n","/**\n * Spacer Component\n *\n * A flexible spacing utility component.\n * Can be used to add space between elements or to push elements apart in flex containers.\n */\n\nimport { forwardRef, type CSSProperties, type HTMLAttributes } from 'react'\nimport { cx } from '../../../utils/styles'\nimport { spacing as spacingTokens } from '../../../design-system/tokens/spacing'\n\ntype SpacingKey = keyof typeof spacingTokens\n\nexport interface SpacerProps extends HTMLAttributes<HTMLDivElement> {\n /** Fixed size in spacing tokens */\n size?: SpacingKey\n /** Custom size in pixels */\n customSize?: number\n /** Whether to expand to fill available space (flex: 1) */\n flex?: boolean\n /** Direction of the spacer */\n direction?: 'horizontal' | 'vertical'\n /** Custom class name */\n className?: string\n}\n\nexport const Spacer = forwardRef<HTMLDivElement, SpacerProps>(function Spacer(\n {\n size,\n customSize,\n flex = false,\n direction = 'vertical',\n className,\n style,\n ...props\n },\n ref\n) {\n const pixelSize = customSize ?? (size ? spacingTokens[size] : undefined)\n\n const spacerStyle: CSSProperties = {\n flex: flex ? 1 : undefined,\n width: direction === 'horizontal' ? (pixelSize ?? (flex ? undefined : 0)) : undefined,\n height: direction === 'vertical' ? (pixelSize ?? (flex ? undefined : 0)) : undefined,\n minWidth: direction === 'horizontal' && pixelSize ? pixelSize : undefined,\n minHeight: direction === 'vertical' && pixelSize ? pixelSize : undefined,\n flexShrink: 0,\n ...style,\n }\n\n return (\n <div\n ref={ref}\n className={cx('brycks-spacer', className)}\n style={spacerStyle}\n aria-hidden=\"true\"\n {...props}\n />\n )\n})\n\nSpacer.displayName = 'Spacer'\n","/**\n * Flex Component\n *\n * A flexible flexbox container with comprehensive flex properties.\n * Provides a more explicit API than Stack for complex flex layouts.\n */\n\nimport { forwardRef, type CSSProperties, type ReactNode, type HTMLAttributes } from 'react'\nimport { cx } from '../../../utils/styles'\nimport { spacing as spacingTokens } from '../../../design-system/tokens/spacing'\n\ntype SpacingKey = keyof typeof spacingTokens\n\ntype FlexDirection = 'row' | 'row-reverse' | 'column' | 'column-reverse'\ntype FlexWrap = 'nowrap' | 'wrap' | 'wrap-reverse'\ntype FlexJustify = 'start' | 'end' | 'center' | 'between' | 'around' | 'evenly'\ntype FlexAlign = 'start' | 'end' | 'center' | 'baseline' | 'stretch'\n\nexport interface FlexProps extends HTMLAttributes<HTMLDivElement> {\n /** Flex direction */\n direction?: FlexDirection\n /** Flex wrap */\n wrap?: FlexWrap\n /** Justify content */\n justify?: FlexJustify\n /** Align items */\n align?: FlexAlign\n /** Gap between items */\n gap?: SpacingKey\n /** Row gap */\n rowGap?: SpacingKey\n /** Column gap */\n columnGap?: SpacingKey\n /** Whether to display inline */\n inline?: boolean\n /** Flex grow */\n grow?: number\n /** Flex shrink */\n shrink?: number\n /** Flex basis */\n basis?: string | number\n /** Children */\n children?: ReactNode\n /** Custom class name */\n className?: string\n /** Custom styles */\n style?: CSSProperties\n /** Test ID */\n testId?: string\n}\n\nconst justifyMap: Record<FlexJustify, CSSProperties['justifyContent']> = {\n start: 'flex-start',\n end: 'flex-end',\n center: 'center',\n between: 'space-between',\n around: 'space-around',\n evenly: 'space-evenly',\n}\n\nconst alignMap: Record<FlexAlign, CSSProperties['alignItems']> = {\n start: 'flex-start',\n end: 'flex-end',\n center: 'center',\n baseline: 'baseline',\n stretch: 'stretch',\n}\n\nexport const Flex = forwardRef<HTMLDivElement, FlexProps>(function Flex(\n {\n direction = 'row',\n wrap = 'nowrap',\n justify = 'start',\n align = 'stretch',\n gap,\n rowGap,\n columnGap,\n inline = false,\n grow,\n shrink,\n basis,\n children,\n className,\n style,\n testId,\n ...props\n },\n ref\n) {\n const flexStyle: CSSProperties = {\n display: inline ? 'inline-flex' : 'flex',\n flexDirection: direction,\n flexWrap: wrap,\n justifyContent: justifyMap[justify],\n alignItems: alignMap[align],\n gap: gap ? spacingTokens[gap] : undefined,\n rowGap: rowGap ? spacingTokens[rowGap] : undefined,\n columnGap: columnGap ? spacingTokens[columnGap] : undefined,\n flexGrow: grow,\n flexShrink: shrink,\n flexBasis: basis,\n ...style,\n }\n\n return (\n <div\n ref={ref}\n className={cx('brycks-flex', className)}\n style={flexStyle}\n data-testid={testId}\n {...props}\n >\n {children}\n </div>\n )\n})\n\nFlex.displayName = 'Flex'\n\n// FlexItem for individual flex children\nexport interface FlexItemProps extends HTMLAttributes<HTMLDivElement> {\n /** Flex grow */\n grow?: number\n /** Flex shrink */\n shrink?: number\n /** Flex basis */\n basis?: string | number\n /** Align self */\n alignSelf?: FlexAlign\n /** Order */\n order?: number\n /** Children */\n children?: ReactNode\n /** Custom class name */\n className?: string\n /** Custom styles */\n style?: CSSProperties\n /** Test ID */\n testId?: string\n}\n\nexport const FlexItem = forwardRef<HTMLDivElement, FlexItemProps>(function FlexItem(\n {\n grow,\n shrink,\n basis,\n alignSelf,\n order,\n children,\n className,\n style,\n testId,\n ...props\n },\n ref\n) {\n const itemStyle: CSSProperties = {\n flexGrow: grow,\n flexShrink: shrink,\n flexBasis: basis,\n alignSelf: alignSelf ? alignMap[alignSelf] : undefined,\n order,\n ...style,\n }\n\n return (\n <div\n ref={ref}\n className={cx('brycks-flex-item', className)}\n style={itemStyle}\n data-testid={testId}\n {...props}\n >\n {children}\n </div>\n )\n})\n\nFlexItem.displayName = 'FlexItem'\n","/**\r\n * Text Component\r\n *\r\n * A polymorphic text component for rendering body text with consistent styling.\r\n * Supports all text styles from the design system.\r\n * All values derive from design system - NO hardcoded values.\r\n *\r\n * @module components/typography/Text\r\n */\r\n\r\nimport React, {\r\n forwardRef,\r\n type ElementType,\r\n type ComponentPropsWithRef,\r\n type CSSProperties,\r\n type ReactNode,\r\n type ComponentPropsWithoutRef,\r\n} from 'react'\r\nimport {\r\n fontSizes,\r\n fontWeights,\r\n lineHeights,\r\n textStyles,\r\n spacing,\r\n type FontSize,\r\n type FontWeight,\r\n type LineHeight,\r\n} from '../../../design-system'\r\nimport { cx } from '../../../utils/styles'\r\n\r\nexport interface TextOwnProps {\r\n /** The element type to render */\r\n as?: ElementType\r\n /** Text style preset */\r\n variant?: 'body' | 'bodyLarge' | 'bodySmall' | 'label' | 'caption' | 'overline' | 'code'\r\n /** Font size */\r\n size?: FontSize\r\n /** Font weight */\r\n weight?: FontWeight\r\n /** Line height */\r\n leading?: LineHeight\r\n /** Text alignment */\r\n align?: CSSProperties['textAlign']\r\n /** Text color (CSS variable or direct value) */\r\n color?: string\r\n /** Whether text should truncate with ellipsis */\r\n truncate?: boolean\r\n /** Max number of lines before truncating */\r\n lineClamp?: number\r\n /** Custom class name */\r\n className?: string\r\n /** Custom inline styles */\r\n style?: CSSProperties\r\n /** Children */\r\n children?: ReactNode\r\n /** Test ID */\r\n testId?: string\r\n}\r\n\r\nexport type TextProps<E extends ElementType = 'p'> = TextOwnProps &\r\n Omit<ComponentPropsWithoutRef<E>, keyof TextOwnProps>\r\n\r\ninterface TextComponent {\r\n <E extends ElementType = 'p'>(\r\n props: TextProps<E> & { ref?: ComponentPropsWithRef<E>['ref'] }\r\n ): React.JSX.Element | null\r\n displayName?: string\r\n}\r\n\r\nconst variantMap: Record<\r\n NonNullable<TextOwnProps['variant']>,\r\n { element: ElementType; styles: CSSProperties }\r\n> = {\r\n body: { element: 'p', styles: textStyles.bodyDefault },\r\n bodyLarge: { element: 'p', styles: textStyles.bodyLarge },\r\n bodySmall: { element: 'p', styles: textStyles.bodySmall },\r\n label: { element: 'span', styles: textStyles.label },\r\n caption: { element: 'span', styles: textStyles.caption },\r\n overline: { element: 'span', styles: textStyles.overline },\r\n code: { element: 'code', styles: textStyles.code },\r\n}\r\n\r\nfunction buildTextStyles(props: TextOwnProps): CSSProperties {\r\n const variant = props.variant ?? 'body'\r\n const baseStyles = variantMap[variant].styles\r\n\r\n const styles: CSSProperties = {\r\n fontFamily: baseStyles.fontFamily,\r\n fontSize: props.size ? fontSizes[props.size] : baseStyles.fontSize,\r\n fontWeight: props.weight ? fontWeights[props.weight] : baseStyles.fontWeight,\r\n lineHeight: props.leading ? lineHeights[props.leading] : baseStyles.lineHeight,\r\n letterSpacing: baseStyles.letterSpacing,\r\n }\r\n\r\n if ('textTransform' in baseStyles) {\r\n styles.textTransform = baseStyles.textTransform\r\n }\r\n\r\n if (props.align) styles.textAlign = props.align\r\n if (props.color) styles.color = props.color\r\n\r\n if (props.truncate) {\r\n styles.overflow = 'hidden'\r\n styles.textOverflow = 'ellipsis'\r\n styles.whiteSpace = 'nowrap'\r\n }\r\n\r\n if (props.lineClamp) {\r\n styles.display = '-webkit-box'\r\n styles.WebkitLineClamp = props.lineClamp\r\n styles.WebkitBoxOrient = 'vertical'\r\n styles.overflow = 'hidden'\r\n }\r\n\r\n return styles\r\n}\r\n\r\nconst TextInner = <E extends ElementType = 'p'>(\r\n { as, variant = 'body', className, style, children, testId, ...props }: TextProps<E>,\r\n ref: React.ForwardedRef<Element>\r\n) => {\r\n const Component = as || variantMap[variant].element\r\n const builtTextStyles = buildTextStyles({ variant, ...props } as TextOwnProps)\r\n\r\n // Remove custom props before spreading\r\n const {\r\n size: _size,\r\n weight: _weight,\r\n leading: _leading,\r\n align: _align,\r\n color: _color,\r\n truncate: _truncate,\r\n lineClamp: _lineClamp,\r\n ...rest\r\n } = props\r\n\r\n return (\r\n <Component\r\n ref={ref}\r\n className={cx('brycks-text', `brycks-text--${variant}`, className)}\r\n style={{ ...builtTextStyles, ...style }}\r\n data-testid={testId}\r\n {...rest}\r\n >\r\n {children}\r\n </Component>\r\n )\r\n}\r\n\r\nexport const Text = forwardRef(TextInner) as TextComponent\r\n\r\nText.displayName = 'Text'\r\n\r\n/** Monospace code text shorthand */\r\nconst CodeInner = (\r\n props: Omit<TextProps<'code'>, 'variant'>,\r\n ref: React.ForwardedRef<HTMLElement>\r\n) => {\r\n return (\r\n <Text\r\n {...props}\r\n ref={ref as ComponentPropsWithRef<'p'>['ref']}\r\n variant=\"code\"\r\n style={{\r\n backgroundColor: 'var(--brycks-background-muted)',\r\n padding: `${spacing[0.5]}px ${spacing[1.5]}px`,\r\n borderRadius: 'var(--brycks-radius-sm)',\r\n ...props.style,\r\n }}\r\n />\r\n )\r\n}\r\n\r\nexport const Code = forwardRef(CodeInner) as TextComponent\r\n\r\nCode.displayName = 'Code'\r\n","/**\r\n * Heading Component\r\n *\r\n * Semantic heading component with consistent typography styles.\r\n * Maps heading levels (h1-h6) to appropriate visual styles.\r\n */\r\n\r\nimport React, {\r\n forwardRef,\r\n type ElementType,\r\n type ComponentPropsWithRef,\r\n type CSSProperties,\r\n type ReactNode,\r\n type ComponentPropsWithoutRef,\r\n} from 'react'\r\nimport {\r\n fontWeights,\r\n textStyles,\r\n type FontWeight,\r\n} from '../../../design-system/tokens/typography'\r\nimport { cx } from '../../../utils/styles'\r\n\r\nexport type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6\r\n\r\nexport interface HeadingOwnProps {\r\n /** The element type to render */\r\n as?: ElementType\r\n /** Heading level (1-6) - determines semantic element and default styling */\r\n level?: HeadingLevel\r\n /** Visual size override - use a different visual style than the semantic level */\r\n size?: HeadingLevel | 'display' | 'displayLarge' | 'displaySmall'\r\n /** Font weight override */\r\n weight?: FontWeight\r\n /** Text alignment */\r\n align?: CSSProperties['textAlign']\r\n /** Text color (CSS variable or direct value) */\r\n color?: string\r\n /** Whether text should truncate with ellipsis */\r\n truncate?: boolean\r\n /** Custom class name */\r\n className?: string\r\n /** Custom inline styles */\r\n style?: CSSProperties\r\n /** Children */\r\n children?: ReactNode\r\n /** Test ID */\r\n testId?: string\r\n}\r\n\r\nexport type HeadingProps<E extends ElementType = 'h2'> = HeadingOwnProps &\r\n Omit<ComponentPropsWithoutRef<E>, keyof HeadingOwnProps>\r\n\r\ninterface HeadingComponent {\r\n <E extends ElementType = 'h2'>(\r\n props: HeadingProps<E> & { ref?: ComponentPropsWithRef<E>['ref'] }\r\n ): React.JSX.Element | null\r\n displayName?: string\r\n}\r\n\r\ntype StyleKey =\r\n | 'h1'\r\n | 'h2'\r\n | 'h3'\r\n | 'h4'\r\n | 'h5'\r\n | 'h6'\r\n | 'displayLarge'\r\n | 'displayMedium'\r\n | 'displaySmall'\r\n\r\nconst sizeToStyleMap: Record<NonNullable<HeadingOwnProps['size']>, StyleKey> = {\r\n 1: 'h1',\r\n 2: 'h2',\r\n 3: 'h3',\r\n 4: 'h4',\r\n 5: 'h5',\r\n 6: 'h6',\r\n display: 'displayMedium',\r\n displayLarge: 'displayLarge',\r\n displaySmall: 'displaySmall',\r\n}\r\n\r\nfunction buildHeadingStyles(props: HeadingOwnProps): CSSProperties {\r\n const level = props.level ?? 2\r\n const visualSize = props.size ?? level\r\n const styleKey = sizeToStyleMap[visualSize]\r\n const baseStyles = textStyles[styleKey]\r\n\r\n const styles: CSSProperties = {\r\n fontFamily: baseStyles.fontFamily,\r\n fontSize: baseStyles.fontSize,\r\n fontWeight: props.weight ? fontWeights[props.weight] : baseStyles.fontWeight,\r\n lineHeight: baseStyles.lineHeight,\r\n letterSpacing: baseStyles.letterSpacing,\r\n margin: 0,\r\n }\r\n\r\n if (props.align) styles.textAlign = props.align\r\n if (props.color) styles.color = props.color\r\n\r\n if (props.truncate) {\r\n styles.overflow = 'hidden'\r\n styles.textOverflow = 'ellipsis'\r\n styles.whiteSpace = 'nowrap'\r\n }\r\n\r\n return styles\r\n}\r\n\r\nconst HeadingInner = <E extends ElementType = 'h2'>(\r\n { as, level = 2, className, style, children, testId, ...props }: HeadingProps<E>,\r\n ref: React.ForwardedRef<Element>\r\n) => {\r\n const Component = as || (`h${level}` as ElementType)\r\n const headingStyles = buildHeadingStyles({ level, ...props } as HeadingOwnProps)\r\n\r\n // Remove custom props before spreading\r\n const {\r\n size: _size,\r\n weight: _weight,\r\n align: _align,\r\n color: _color,\r\n truncate: _truncate,\r\n ...rest\r\n } = props\r\n\r\n return (\r\n <Component\r\n ref={ref}\r\n className={cx('brycks-heading', `brycks-heading--${level}`, className)}\r\n style={{ ...headingStyles, ...style }}\r\n data-testid={testId}\r\n {...rest}\r\n >\r\n {children}\r\n </Component>\r\n )\r\n}\r\n\r\nexport const Heading = forwardRef(HeadingInner) as HeadingComponent\r\n\r\nHeading.displayName = 'Heading'\r\n\r\n/** Display heading for hero sections */\r\nconst DisplayInner = <E extends ElementType = 'h1'>(\r\n { size = 'display', ...props }: HeadingProps<E>,\r\n ref: React.ForwardedRef<Element>\r\n) => {\r\n return <Heading ref={ref as React.ForwardedRef<HTMLHeadingElement>} level={1} size={size} {...(props as HeadingProps<'h1'>)} />\r\n}\r\n\r\nexport const Display = forwardRef(DisplayInner) as HeadingComponent\r\n\r\nDisplay.displayName = 'Display'\r\n","/**\r\n * Button Component Styles\r\n *\r\n * Apple-inspired button styles with smooth transitions and tactile feedback.\r\n * All values derive from the design system - NO hardcoded values.\r\n *\r\n * @module components/primitives/Button\r\n */\r\n\r\nimport type { CSSProperties } from 'react'\r\nimport type { ButtonVariant, ButtonIntent, ButtonSize } from './Button.types'\r\nimport {\r\n componentHeights,\r\n componentPaddingX,\r\n componentGap,\r\n iconSizes,\r\n componentFontSize,\r\n componentFontWeight,\r\n componentLineHeight,\r\n transition,\r\n stateOpacity,\r\n scale,\r\n} from '../../../design-system'\r\n\r\n/** Size dimension values - derived from design system primitives */\r\nconst sizeConfig: Record<\r\n ButtonSize,\r\n {\r\n height: number\r\n paddingX: number\r\n fontSize: number\r\n iconSize: number\r\n gap: number\r\n radius: string\r\n }\r\n> = {\r\n xs: {\r\n height: componentHeights.xs,\r\n paddingX: componentPaddingX.xs,\r\n fontSize: componentFontSize.xs,\r\n iconSize: iconSizes.xs,\r\n gap: componentGap.xs,\r\n radius: 'var(--brycks-radius-md)',\r\n },\r\n sm: {\r\n height: componentHeights.sm,\r\n paddingX: componentPaddingX.sm,\r\n fontSize: componentFontSize.sm,\r\n iconSize: iconSizes.sm,\r\n gap: componentGap.sm,\r\n radius: 'var(--brycks-radius-md)',\r\n },\r\n md: {\r\n height: componentHeights.md,\r\n paddingX: componentPaddingX.md,\r\n fontSize: componentFontSize.md,\r\n iconSize: iconSizes.md,\r\n gap: componentGap.md,\r\n radius: 'var(--brycks-radius-default)',\r\n },\r\n lg: {\r\n height: componentHeights.lg,\r\n paddingX: componentPaddingX.lg,\r\n fontSize: componentFontSize.lg,\r\n iconSize: iconSizes.lg,\r\n gap: componentGap.md,\r\n radius: 'var(--brycks-radius-lg)',\r\n },\r\n xl: {\r\n height: componentHeights.xl,\r\n paddingX: componentPaddingX.xl,\r\n fontSize: componentFontSize.xl,\r\n iconSize: iconSizes.xl,\r\n gap: componentGap.lg,\r\n radius: 'var(--brycks-radius-xl)',\r\n },\r\n}\r\n\r\n/** Color values for each intent */\r\nconst intentColors: Record<\r\n ButtonIntent,\r\n {\r\n solid: { bg: string; hoverBg: string; activeBg: string; text: string }\r\n outline: { border: string; hoverBg: string; text: string }\r\n ghost: { hoverBg: string; text: string }\r\n soft: { bg: string; hoverBg: string; text: string }\r\n link: { text: string; hoverText: string }\r\n }\r\n> = {\r\n primary: {\r\n solid: {\r\n bg: 'var(--brycks-primary-default)',\r\n hoverBg: 'var(--brycks-primary-hover)',\r\n activeBg: 'var(--brycks-primary-active)',\r\n text: 'var(--brycks-primary-foreground)',\r\n },\r\n outline: {\r\n border: 'var(--brycks-primary-default)',\r\n hoverBg: 'var(--brycks-primary-muted)',\r\n text: 'var(--brycks-primary-default)',\r\n },\r\n ghost: {\r\n hoverBg: 'var(--brycks-primary-muted)',\r\n text: 'var(--brycks-primary-default)',\r\n },\r\n soft: {\r\n bg: 'var(--brycks-primary-muted)',\r\n hoverBg: 'var(--brycks-primary-soft-hover)',\r\n text: 'var(--brycks-primary-default)',\r\n },\r\n link: {\r\n text: 'var(--brycks-primary-default)',\r\n hoverText: 'var(--brycks-primary-hover)',\r\n },\r\n },\r\n accent: {\r\n solid: {\r\n bg: 'var(--brycks-accent-default)',\r\n hoverBg: 'var(--brycks-accent-hover)',\r\n activeBg: 'var(--brycks-accent-active)',\r\n text: 'var(--brycks-accent-foreground)',\r\n },\r\n outline: {\r\n border: 'var(--brycks-accent-default)',\r\n hoverBg: 'var(--brycks-accent-muted)',\r\n text: 'var(--brycks-accent-default)',\r\n },\r\n ghost: {\r\n hoverBg: 'var(--brycks-accent-muted)',\r\n text: 'var(--brycks-accent-default)',\r\n },\r\n soft: {\r\n bg: 'var(--brycks-accent-muted)',\r\n hoverBg: 'var(--brycks-accent-soft-hover)',\r\n text: 'var(--brycks-accent-default)',\r\n },\r\n link: {\r\n text: 'var(--brycks-accent-default)',\r\n hoverText: 'var(--brycks-accent-hover)',\r\n },\r\n },\r\n neutral: {\r\n solid: {\r\n bg: 'var(--brycks-foreground-default)',\r\n hoverBg: 'var(--brycks-foreground-muted)',\r\n activeBg: 'var(--brycks-foreground-subtle)',\r\n text: 'var(--brycks-background-app)',\r\n },\r\n outline: {\r\n border: 'var(--brycks-border-strong)',\r\n hoverBg: 'var(--brycks-background-muted)',\r\n text: 'var(--brycks-foreground-default)',\r\n },\r\n ghost: {\r\n hoverBg: 'var(--brycks-background-muted)',\r\n text: 'var(--brycks-foreground-default)',\r\n },\r\n soft: {\r\n bg: 'var(--brycks-background-muted)',\r\n hoverBg: 'var(--brycks-background-subtle)',\r\n text: 'var(--brycks-foreground-default)',\r\n },\r\n link: {\r\n text: 'var(--brycks-foreground-default)',\r\n hoverText: 'var(--brycks-foreground-muted)',\r\n },\r\n },\r\n success: {\r\n solid: {\r\n bg: 'var(--brycks-success-default)',\r\n hoverBg: 'var(--brycks-success-hover)',\r\n activeBg: 'var(--brycks-success-hover)',\r\n text: 'var(--brycks-success-foreground)',\r\n },\r\n outline: {\r\n border: 'var(--brycks-success-default)',\r\n hoverBg: 'var(--brycks-success-muted)',\r\n text: 'var(--brycks-success-default)',\r\n },\r\n ghost: {\r\n hoverBg: 'var(--brycks-success-muted)',\r\n text: 'var(--brycks-success-default)',\r\n },\r\n soft: {\r\n bg: 'var(--brycks-success-muted)',\r\n hoverBg: 'var(--brycks-success-soft-hover)',\r\n text: 'var(--brycks-success-default)',\r\n },\r\n link: {\r\n text: 'var(--brycks-success-default)',\r\n hoverText: 'var(--brycks-success-hover)',\r\n },\r\n },\r\n warning: {\r\n solid: {\r\n bg: 'var(--brycks-warning-default)',\r\n hoverBg: 'var(--brycks-warning-hover)',\r\n activeBg: 'var(--brycks-warning-hover)',\r\n text: 'var(--brycks-warning-foreground)',\r\n },\r\n outline: {\r\n border: 'var(--brycks-warning-default)',\r\n hoverBg: 'var(--brycks-warning-muted)',\r\n text: 'var(--brycks-warning-default)',\r\n },\r\n ghost: {\r\n hoverBg: 'var(--brycks-warning-muted)',\r\n text: 'var(--brycks-warning-default)',\r\n },\r\n soft: {\r\n bg: 'var(--brycks-warning-muted)',\r\n hoverBg: 'var(--brycks-warning-soft-hover)',\r\n text: 'var(--brycks-warning-default)',\r\n },\r\n link: {\r\n text: 'var(--brycks-warning-default)',\r\n hoverText: 'var(--brycks-warning-hover)',\r\n },\r\n },\r\n error: {\r\n solid: {\r\n bg: 'var(--brycks-error-default)',\r\n hoverBg: 'var(--brycks-error-hover)',\r\n activeBg: 'var(--brycks-error-hover)',\r\n text: 'var(--brycks-error-foreground)',\r\n },\r\n outline: {\r\n border: 'var(--brycks-error-default)',\r\n hoverBg: 'var(--brycks-error-muted)',\r\n text: 'var(--brycks-error-default)',\r\n },\r\n ghost: {\r\n hoverBg: 'var(--brycks-error-muted)',\r\n text: 'var(--brycks-error-default)',\r\n },\r\n soft: {\r\n bg: 'var(--brycks-error-muted)',\r\n hoverBg: 'var(--brycks-error-soft-hover)',\r\n text: 'var(--brycks-error-default)',\r\n },\r\n link: {\r\n text: 'var(--brycks-error-default)',\r\n hoverText: 'var(--brycks-error-hover)',\r\n },\r\n },\r\n}\r\n\r\nexport interface ButtonStyleProps {\r\n variant: ButtonVariant\r\n intent: ButtonIntent\r\n size: ButtonSize\r\n fullWidth?: boolean\r\n isIconOnly?: boolean\r\n isDisabled?: boolean\r\n isLoading?: boolean\r\n}\r\n\r\nexport function getButtonStyles(props: ButtonStyleProps): {\r\n base: CSSProperties\r\n hover: CSSProperties\r\n active: CSSProperties\r\n disabled: CSSProperties\r\n loading: CSSProperties\r\n} {\r\n const { variant, intent, size, fullWidth, isIconOnly } = props\r\n const sizeValues = sizeConfig[size]\r\n const colors = intentColors[intent][variant]\r\n\r\n // Base styles common to all buttons\r\n const base: CSSProperties = {\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n gap: sizeValues.gap,\r\n height: sizeValues.height,\r\n minWidth: isIconOnly ? sizeValues.height : undefined,\r\n width: fullWidth ? '100%' : undefined,\r\n padding: isIconOnly ? 0 : `0 ${sizeValues.paddingX}px`,\r\n fontSize: sizeValues.fontSize,\r\n fontWeight: componentFontWeight.medium,\r\n fontFamily: 'var(--brycks-font-sans)',\r\n lineHeight: componentLineHeight.none,\r\n borderRadius: sizeValues.radius,\r\n border: 'none',\r\n outline: 'none',\r\n cursor: 'pointer',\r\n userSelect: 'none',\r\n textDecoration: 'none',\r\n transition: transition.quick,\r\n WebkitTapHighlightColor: 'transparent',\r\n }\r\n\r\n // Apply variant-specific base styles\r\n switch (variant) {\r\n case 'solid': {\r\n const solidColors = colors as { bg: string; hoverBg: string; activeBg: string; text: string }\r\n Object.assign(base, {\r\n backgroundColor: solidColors.bg,\r\n color: solidColors.text,\r\n boxShadow: 'var(--brycks-shadow-xs)',\r\n })\r\n break\r\n }\r\n\r\n case 'outline': {\r\n const outlineColors = colors as { border: string; hoverBg: string; text: string }\r\n Object.assign(base, {\r\n backgroundColor: 'transparent',\r\n color: outlineColors.text,\r\n border: `1px solid ${outlineColors.border}`,\r\n })\r\n break\r\n }\r\n\r\n case 'ghost': {\r\n const ghostColors = colors as { hoverBg: string; text: string }\r\n Object.assign(base, {\r\n backgroundColor: 'transparent',\r\n color: ghostColors.text,\r\n })\r\n break\r\n }\r\n\r\n case 'soft': {\r\n const softColors = colors as { bg: string; hoverBg: string; text: string }\r\n Object.assign(base, {\r\n backgroundColor: softColors.bg,\r\n color: softColors.text,\r\n })\r\n break\r\n }\r\n\r\n case 'link': {\r\n const linkColors = colors as { text: string; hoverText: string }\r\n Object.assign(base, {\r\n backgroundColor: 'transparent',\r\n color: linkColors.text,\r\n height: 'auto',\r\n padding: 0,\r\n borderRadius: 0,\r\n })\r\n break\r\n }\r\n }\r\n\r\n // Hover styles\r\n const hover: CSSProperties = {}\r\n switch (variant) {\r\n case 'solid': {\r\n const solidColors = colors as { bg: string; hoverBg: string; activeBg: string; text: string }\r\n hover.backgroundColor = solidColors.hoverBg\r\n hover.boxShadow = 'var(--brycks-shadow-sm)'\r\n break\r\n }\r\n case 'outline': {\r\n const outlineColors = colors as { border: string; hoverBg: string; text: string }\r\n hover.backgroundColor = outlineColors.hoverBg\r\n break\r\n }\r\n case 'ghost': {\r\n const ghostColors = colors as { hoverBg: string; text: string }\r\n hover.backgroundColor = ghostColors.hoverBg\r\n break\r\n }\r\n case 'soft': {\r\n const softColors = colors as { bg: string; hoverBg: string; text: string }\r\n hover.backgroundColor = softColors.hoverBg\r\n break\r\n }\r\n case 'link': {\r\n const linkColors = colors as { text: string; hoverText: string }\r\n hover.color = linkColors.hoverText\r\n hover.textDecoration = 'underline'\r\n break\r\n }\r\n }\r\n\r\n // Active/pressed styles\r\n const active: CSSProperties = {\r\n transform: variant !== 'link' ? `scale(${scale.pressed})` : undefined,\r\n }\r\n if (variant === 'solid') {\r\n const solidColors = colors as { bg: string; hoverBg: string; activeBg: string; text: string }\r\n active.backgroundColor = solidColors.activeBg\r\n active.boxShadow = 'var(--brycks-shadow-xs)'\r\n }\r\n\r\n // Disabled styles\r\n const disabled: CSSProperties = {\r\n opacity: stateOpacity.disabled,\r\n cursor: 'not-allowed',\r\n pointerEvents: 'none',\r\n }\r\n\r\n // Loading styles\r\n const loading: CSSProperties = {\r\n cursor: 'wait',\r\n pointerEvents: 'none',\r\n }\r\n\r\n return { base, hover, active, disabled, loading }\r\n}\r\n\r\nexport { sizeConfig }\r\n","/**\r\n * Button Component\r\n *\r\n * A versatile, polymorphic button component with multiple variants,\r\n * sizes, and states. Designed with Apple-inspired aesthetics -\r\n * smooth transitions, tactile feedback, and refined visual details.\r\n */\r\n\r\nimport React, {\r\n forwardRef,\r\n useState,\r\n type ElementType,\r\n type ComponentPropsWithRef,\r\n type CSSProperties,\r\n} from 'react'\r\nimport type { ButtonProps } from './Button.types'\r\nimport { getButtonStyles, sizeConfig } from './Button.styles'\r\nimport { cx } from '../../../utils/styles'\r\n\r\ninterface ButtonComponent {\r\n <E extends ElementType = 'button'>(\r\n props: ButtonProps<E> & { ref?: ComponentPropsWithRef<E>['ref'] }\r\n ): React.JSX.Element | null\r\n displayName?: string\r\n}\r\n\r\n/** Loading spinner component */\r\nfunction LoadingSpinner({ size }: { size: number }) {\r\n return (\r\n <svg\r\n width={size}\r\n height={size}\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n style={{\r\n animation: 'brycks-spin 1s linear infinite',\r\n }}\r\n >\r\n <style>\r\n {`\r\n @keyframes brycks-spin {\r\n from { transform: rotate(0deg); }\r\n to { transform: rotate(360deg); }\r\n }\r\n `}\r\n </style>\r\n <circle\r\n cx=\"12\"\r\n cy=\"12\"\r\n r=\"10\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeDasharray=\"31.4 31.4\"\r\n opacity=\"0.25\"\r\n />\r\n <circle\r\n cx=\"12\"\r\n cy=\"12\"\r\n r=\"10\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeDasharray=\"31.4 31.4\"\r\n strokeDashoffset=\"62.8\"\r\n style={{ transform: 'rotate(-90deg)', transformOrigin: 'center' }}\r\n />\r\n </svg>\r\n )\r\n}\r\n\r\nconst ButtonInner = <E extends ElementType = 'button'>(\r\n {\r\n as,\r\n variant = 'solid',\r\n intent = 'primary',\r\n size = 'md',\r\n fullWidth,\r\n isLoading,\r\n isDisabled,\r\n leftIcon,\r\n rightIcon,\r\n isIconOnly,\r\n className,\r\n style,\r\n children,\r\n testId,\r\n onMouseEnter,\r\n onMouseLeave,\r\n onMouseDown,\r\n onMouseUp,\r\n ...props\r\n }: ButtonProps<E>,\r\n ref: React.ForwardedRef<Element>\r\n) => {\r\n const Component = (as || 'button') as ElementType\r\n const [isHovered, setIsHovered] = useState(false)\r\n const [isPressed, setIsPressed] = useState(false)\r\n\r\n const disabled = isDisabled || isLoading\r\n\r\n const styles = getButtonStyles({\r\n variant,\r\n intent,\r\n size,\r\n fullWidth,\r\n isIconOnly,\r\n isDisabled: disabled,\r\n isLoading,\r\n })\r\n\r\n // Build final style object\r\n const computedStyle: CSSProperties = {\r\n ...styles.base,\r\n ...(isHovered && !disabled ? styles.hover : {}),\r\n ...(isPressed && !disabled ? styles.active : {}),\r\n ...(disabled ? styles.disabled : {}),\r\n ...(isLoading ? styles.loading : {}),\r\n ...style,\r\n }\r\n\r\n const sizeValues = sizeConfig[size]\r\n\r\n const handleMouseEnter = (e: React.MouseEvent) => {\r\n setIsHovered(true)\r\n onMouseEnter?.(e as never)\r\n }\r\n\r\n const handleMouseLeave = (e: React.MouseEvent) => {\r\n setIsHovered(false)\r\n setIsPressed(false)\r\n onMouseLeave?.(e as never)\r\n }\r\n\r\n const handleMouseDown = (e: React.MouseEvent) => {\r\n setIsPressed(true)\r\n onMouseDown?.(e as never)\r\n }\r\n\r\n const handleMouseUp = (e: React.MouseEvent) => {\r\n setIsPressed(false)\r\n onMouseUp?.(e as never)\r\n }\r\n\r\n // Build class name\r\n const buttonClassName = cx(\r\n 'brycks-button',\r\n `brycks-button--${variant}`,\r\n `brycks-button--${intent}`,\r\n `brycks-button--${size}`,\r\n fullWidth && 'brycks-button--full-width',\r\n isIconOnly && 'brycks-button--icon-only',\r\n isLoading && 'brycks-button--loading',\r\n disabled && 'brycks-button--disabled',\r\n className\r\n )\r\n\r\n const isButton = Component === 'button' || as === undefined\r\n const buttonProps = isButton\r\n ? {\r\n type: (props as { type?: string }).type ?? 'button',\r\n disabled,\r\n }\r\n : {\r\n 'aria-disabled': disabled || undefined,\r\n role: 'button',\r\n tabIndex: disabled ? -1 : 0,\r\n }\r\n\r\n return (\r\n <Component\r\n ref={ref}\r\n className={buttonClassName}\r\n style={computedStyle}\r\n data-testid={testId}\r\n onMouseEnter={handleMouseEnter}\r\n onMouseLeave={handleMouseLeave}\r\n onMouseDown={handleMouseDown}\r\n onMouseUp={handleMouseUp}\r\n {...buttonProps}\r\n {...props}\r\n >\r\n {isLoading && (\r\n <span\r\n style={{\r\n display: 'inline-flex',\r\n position: isIconOnly ? 'absolute' : 'relative',\r\n }}\r\n >\r\n <LoadingSpinner size={sizeValues.iconSize} />\r\n </span>\r\n )}\r\n\r\n {!isLoading && leftIcon && (\r\n <span\r\n style={{\r\n display: 'inline-flex',\r\n width: sizeValues.iconSize,\r\n height: sizeValues.iconSize,\r\n }}\r\n >\r\n {leftIcon}\r\n </span>\r\n )}\r\n\r\n {!isIconOnly && (\r\n <span\r\n style={{\r\n opacity: isLoading && !isIconOnly ? 0.5 : 1,\r\n }}\r\n >\r\n {children}\r\n </span>\r\n )}\r\n\r\n {!isLoading && rightIcon && (\r\n <span\r\n style={{\r\n display: 'inline-flex',\r\n width: sizeValues.iconSize,\r\n height: sizeValues.iconSize,\r\n }}\r\n >\r\n {rightIcon}\r\n </span>\r\n )}\r\n\r\n {isIconOnly && !isLoading && children}\r\n </Component>\r\n )\r\n}\r\n\r\nexport const Button = forwardRef(ButtonInner) as ButtonComponent\r\n\r\nButton.displayName = 'Button'\r\n\r\n/** Icon button shorthand */\r\nconst IconButtonInner = <E extends ElementType = 'button'>(\r\n props: Omit<ButtonProps<E>, 'isIconOnly'>,\r\n ref: React.ForwardedRef<Element>\r\n) => {\r\n return <Button ref={ref as React.ForwardedRef<HTMLButtonElement>} isIconOnly {...(props as ButtonProps<'button'>)} />\r\n}\r\n\r\nexport const IconButton = forwardRef(IconButtonInner) as ButtonComponent\r\n\r\nIconButton.displayName = 'IconButton'\r\n","/**\n * Icon Component\n *\n * A flexible icon component that supports custom SVG icons.\n * Uses design system tokens for consistent sizing and colors.\n */\n\nimport { forwardRef, type SVGAttributes, type CSSProperties, type ReactNode } from 'react'\nimport { cx } from '../../../utils/styles'\n\nexport type IconSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'\n\nexport interface IconProps extends Omit<SVGAttributes<SVGSVGElement>, 'children'> {\n /** Icon size */\n size?: IconSize\n /** Custom size in pixels */\n customSize?: number\n /** Icon color (uses currentColor by default) */\n color?: string\n /** SVG path data or children */\n path?: string\n /** Multiple paths */\n paths?: string[]\n /** SVG viewBox */\n viewBox?: string\n /** Fill rule for paths */\n fillRule?: 'nonzero' | 'evenodd'\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n /** Accessibility label */\n label?: string\n /** Custom SVG children (overrides path/paths) */\n children?: ReactNode\n}\n\nconst sizeMap: Record<IconSize, number> = {\n xs: 12,\n sm: 14,\n md: 16,\n lg: 20,\n xl: 24,\n '2xl': 32,\n}\n\nexport const Icon = forwardRef<SVGSVGElement, IconProps>(function Icon(\n {\n size = 'md',\n customSize,\n color,\n path,\n paths,\n viewBox = '0 0 24 24',\n fillRule = 'nonzero',\n className,\n style,\n testId,\n label,\n children,\n ...props\n },\n ref\n) {\n const pixelSize = customSize ?? sizeMap[size]\n\n const iconStyle: CSSProperties = {\n width: pixelSize,\n height: pixelSize,\n minWidth: pixelSize,\n minHeight: pixelSize,\n color: color ?? 'currentColor',\n display: 'inline-block',\n verticalAlign: 'middle',\n flexShrink: 0,\n ...style,\n }\n\n const renderPaths = () => {\n if (children) return children\n\n if (paths && paths.length > 0) {\n return paths.map((d, index) => (\n <path key={index} d={d} fill=\"currentColor\" fillRule={fillRule} />\n ))\n }\n\n if (path) {\n return <path d={path} fill=\"currentColor\" fillRule={fillRule} />\n }\n\n return null\n }\n\n return (\n <svg\n ref={ref}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox={viewBox}\n className={cx('brycks-icon', `brycks-icon--${size}`, className)}\n style={iconStyle}\n aria-hidden={!label}\n aria-label={label}\n role={label ? 'img' : undefined}\n data-testid={testId}\n {...props}\n >\n {renderPaths()}\n </svg>\n )\n})\n\nIcon.displayName = 'Icon'\n\n// Common icon paths for convenience\nexport const iconPaths = {\n close: 'M18 6L6 18M6 6l12 12',\n check: 'M20 6L9 17l-5-5',\n chevronDown: 'M6 9l6 6 6-6',\n chevronUp: 'M18 15l-6-6-6 6',\n chevronLeft: 'M15 18l-6-6 6-6',\n chevronRight: 'M9 18l6-6-6-6',\n plus: 'M12 5v14m-7-7h14',\n minus: 'M5 12h14',\n search: 'M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z',\n menu: 'M4 6h16M4 12h16M4 18h16',\n info: 'M12 16v-4m0-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z',\n warning: 'M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z',\n error: 'M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z',\n success: 'M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z',\n eye: 'M15 12a3 3 0 11-6 0 3 3 0 016 0z M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z',\n eyeOff: 'M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.88 9.88l-3.29-3.29m7.532 7.532l3.29 3.29M3 3l3.59 3.59m0 0A9.953 9.953 0 0112 5c4.478 0 8.268 2.943 9.543 7a10.025 10.025 0 01-4.132 5.411m0 0L21 21',\n calendar: 'M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z',\n upload: 'M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z',\n download: 'M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4',\n trash: 'M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16',\n edit: 'M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z',\n copy: 'M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z',\n externalLink: 'M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14',\n settings: 'M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z M15 12a3 3 0 11-6 0 3 3 0 016 0z',\n user: 'M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z',\n logout: 'M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1',\n arrowLeft: 'M10 19l-7-7m0 0l7-7m-7 7h18',\n arrowRight: 'M14 5l7 7m0 0l-7 7m7-7H3',\n arrowUp: 'M5 10l7-7m0 0l7 7m-7-7v18',\n arrowDown: 'M19 14l-7 7m0 0l-7-7m7 7V3',\n refresh: 'M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15',\n filter: 'M3 4a1 1 0 011-1h16a1 1 0 011 1v2.586a1 1 0 01-.293.707l-6.414 6.414a1 1 0 00-.293.707V17l-4 4v-6.586a1 1 0 00-.293-.707L3.293 7.293A1 1 0 013 6.586V4z',\n sort: 'M3 4h13M3 8h9m-9 4h6m4 0l4-4m0 0l4 4m-4-4v12',\n home: 'M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6',\n folder: 'M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z',\n file: 'M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z',\n bell: 'M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9',\n mail: 'M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z',\n lock: 'M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z',\n unlock: 'M8 11V7a4 4 0 118 0m-4 8v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2z',\n star: 'M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z',\n heart: 'M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z',\n share: 'M8.684 13.342C8.886 12.938 9 12.482 9 12c0-.482-.114-.938-.316-1.342m0 2.684a3 3 0 110-2.684m0 2.684l6.632 3.316m-6.632-6l6.632-3.316m0 0a3 3 0 105.367-2.684 3 3 0 00-5.367 2.684zm0 9.316a3 3 0 105.368 2.684 3 3 0 00-5.368-2.684z',\n link: 'M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1',\n code: 'M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4',\n terminal: 'M8 9l3 3-3 3m5 0h3M5 20h14a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z',\n database: 'M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4m0 5c0 2.21-3.582 4-8 4s-8-1.79-8-4',\n cloud: 'M3 15a4 4 0 004 4h9a5 5 0 10-.1-9.999 5.002 5.002 0 10-9.78 2.096A4.001 4.001 0 003 15z',\n sun: 'M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z',\n moon: 'M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z',\n grip: 'M4 6a2 2 0 114 0 2 2 0 01-4 0zM10 6a2 2 0 114 0 2 2 0 01-4 0zM16 6a2 2 0 114 0 2 2 0 01-4 0zM4 12a2 2 0 114 0 2 2 0 01-4 0zM10 12a2 2 0 114 0 2 2 0 01-4 0zM16 12a2 2 0 114 0 2 2 0 01-4 0zM4 18a2 2 0 114 0 2 2 0 01-4 0zM10 18a2 2 0 114 0 2 2 0 01-4 0zM16 18a2 2 0 114 0 2 2 0 01-4 0z',\n moreHorizontal: 'M5 12h.01M12 12h.01M19 12h.01M6 12a1 1 0 11-2 0 1 1 0 012 0zm7 0a1 1 0 11-2 0 1 1 0 012 0zm7 0a1 1 0 11-2 0 1 1 0 012 0z',\n moreVertical: 'M12 5v.01M12 12v.01M12 19v.01M12 6a1 1 0 110-2 1 1 0 010 2zm0 7a1 1 0 110-2 1 1 0 010 2zm0 7a1 1 0 110-2 1 1 0 010 2z',\n layout: 'M4 5a1 1 0 011-1h14a1 1 0 011 1v2a1 1 0 01-1 1H5a1 1 0 01-1-1V5zM4 13a1 1 0 011-1h6a1 1 0 011 1v6a1 1 0 01-1 1H5a1 1 0 01-1-1v-6zM16 13a1 1 0 011-1h2a1 1 0 011 1v6a1 1 0 01-1 1h-2a1 1 0 01-1-1v-6z',\n car: 'M19 17h2c.6 0 1-.4 1-1v-3c0-.9-.7-1.7-1.5-1.9L18 10l-1.6-3.2c-.4-.8-1.2-1.3-2.1-1.3H9.7c-.9 0-1.7.5-2.1 1.3L6 10l-2.5 1.1C2.7 11.3 2 12.1 2 13v3c0 .6.4 1 1 1h2M7 17h10M7 17a2 2 0 11-4 0 2 2 0 014 0zm12 0a2 2 0 11-4 0 2 2 0 014 0z',\n page: 'M4 4a2 2 0 012-2h8l6 6v12a2 2 0 01-2 2H6a2 2 0 01-2-2V4zm10 0v6h6',\n gridVertical: 'M9 4a1 1 0 110 2 1 1 0 010-2zm6 0a1 1 0 110 2 1 1 0 010-2zm-6 5a1 1 0 110 2 1 1 0 010-2zm6 0a1 1 0 110 2 1 1 0 010-2zm-6 5a1 1 0 110 2 1 1 0 010-2zm6 0a1 1 0 110 2 1 1 0 010-2zm-6 5a1 1 0 110 2 1 1 0 010-2zm6 0a1 1 0 110 2 1 1 0 010-2z',\n} as const\n\n// Helper type for icon names\nexport type IconName = keyof typeof iconPaths\n","/**\r\n * Input Component\r\n *\r\n * Base input component with Apple-inspired styling.\r\n * Clean, minimal design with smooth focus transitions.\r\n *\r\n * @module components/form/Input\r\n */\r\n\r\nimport {\r\n forwardRef,\r\n useState,\r\n type CSSProperties,\r\n type InputHTMLAttributes,\r\n type ReactNode,\r\n} from 'react'\r\nimport {\r\n componentHeights,\r\n componentPaddingX,\r\n componentGap,\r\n componentFontSize,\r\n focusRing,\r\n transition,\r\n stateOpacity,\r\n} from '../../../design-system'\r\nimport { cx } from '../../../utils/styles'\r\n\r\nexport type InputSize = 'sm' | 'md' | 'lg'\r\nexport type InputVariant = 'outline' | 'filled' | 'flushed'\r\n\r\nexport interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'> {\r\n /** Input size */\r\n size?: InputSize\r\n /** Visual variant */\r\n variant?: InputVariant\r\n /** Error state */\r\n isInvalid?: boolean\r\n /** Left element/icon */\r\n leftElement?: ReactNode\r\n /** Right element/icon */\r\n rightElement?: ReactNode\r\n /** Custom class name */\r\n className?: string\r\n /** Test ID */\r\n testId?: string\r\n}\r\n\r\n/** Size configuration derived from design tokens */\r\nconst sizeConfig: Record<InputSize, { height: number; fontSize: number; paddingX: number; radius: string }> = {\r\n sm: {\r\n height: componentHeights.sm,\r\n fontSize: componentFontSize.sm,\r\n paddingX: componentPaddingX.sm,\r\n radius: 'var(--brycks-radius-md)',\r\n },\r\n md: {\r\n height: componentHeights.md,\r\n fontSize: componentFontSize.md,\r\n paddingX: componentPaddingX.md,\r\n radius: 'var(--brycks-radius-default)',\r\n },\r\n lg: {\r\n height: componentHeights.lg,\r\n fontSize: componentFontSize.lg,\r\n paddingX: componentPaddingX.lg,\r\n radius: 'var(--brycks-radius-lg)',\r\n },\r\n}\r\n\r\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input(\r\n {\r\n size = 'md',\r\n variant = 'outline',\r\n isInvalid,\r\n leftElement,\r\n rightElement,\r\n className,\r\n style,\r\n testId,\r\n disabled,\r\n onFocus,\r\n onBlur,\r\n ...props\r\n },\r\n ref\r\n) {\r\n const [isFocused, setIsFocused] = useState(false)\r\n\r\n const config = sizeConfig[size]\r\n\r\n const getWrapperStyles = (): CSSProperties => {\r\n const base: CSSProperties = {\r\n display: 'flex',\r\n alignItems: 'center',\r\n width: '100%',\r\n position: 'relative',\r\n height: config.height,\r\n borderRadius: config.radius,\r\n transition: transition.default,\r\n }\r\n\r\n switch (variant) {\r\n case 'outline':\r\n Object.assign(base, {\r\n backgroundColor: 'var(--brycks-background-app)',\r\n border: `1px solid ${\r\n isInvalid\r\n ? 'var(--brycks-error-default)'\r\n : isFocused\r\n ? 'var(--brycks-border-focus)'\r\n : 'var(--brycks-border-default)'\r\n }`,\r\n boxShadow: isFocused\r\n ? isInvalid\r\n ? focusRing.error\r\n : focusRing.default\r\n : focusRing.none,\r\n })\r\n break\r\n\r\n case 'filled':\r\n Object.assign(base, {\r\n backgroundColor: 'var(--brycks-background-muted)',\r\n border: '1px solid transparent',\r\n borderColor: isInvalid\r\n ? 'var(--brycks-error-default)'\r\n : isFocused\r\n ? 'var(--brycks-border-focus)'\r\n : 'transparent',\r\n })\r\n break\r\n\r\n case 'flushed':\r\n Object.assign(base, {\r\n backgroundColor: 'transparent',\r\n borderRadius: 0,\r\n borderBottom: `2px solid ${\r\n isInvalid\r\n ? 'var(--brycks-error-default)'\r\n : isFocused\r\n ? 'var(--brycks-border-focus)'\r\n : 'var(--brycks-border-default)'\r\n }`,\r\n })\r\n break\r\n }\r\n\r\n if (disabled) {\r\n Object.assign(base, {\r\n opacity: stateOpacity.disabled,\r\n cursor: 'not-allowed',\r\n })\r\n }\r\n\r\n return base\r\n }\r\n\r\n const inputStyles: CSSProperties = {\r\n width: '100%',\r\n height: config.height,\r\n fontFamily: 'var(--brycks-font-sans)',\r\n fontSize: config.fontSize,\r\n color: 'var(--brycks-foreground-default)',\r\n backgroundColor: 'transparent',\r\n border: 'none',\r\n outline: 'none',\r\n borderRadius: config.radius,\r\n paddingLeft: leftElement ? componentGap.md : config.paddingX,\r\n paddingRight: rightElement ? componentGap.md : config.paddingX,\r\n cursor: disabled ? 'not-allowed' : 'text',\r\n transition: transition.default,\r\n }\r\n\r\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\r\n setIsFocused(true)\r\n onFocus?.(e)\r\n }\r\n\r\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\r\n setIsFocused(false)\r\n onBlur?.(e)\r\n }\r\n\r\n const elementStyle: CSSProperties = {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n color: 'var(--brycks-foreground-muted)',\r\n flexShrink: 0,\r\n }\r\n\r\n return (\r\n <div\r\n className={cx(\r\n 'brycks-input-wrapper',\r\n `brycks-input-wrapper--${variant}`,\r\n `brycks-input-wrapper--${size}`,\r\n isInvalid && 'brycks-input-wrapper--invalid',\r\n disabled && 'brycks-input-wrapper--disabled',\r\n className\r\n )}\r\n style={{ ...getWrapperStyles(), ...style }}\r\n >\r\n {leftElement && (\r\n <span\r\n className=\"brycks-input-left-element\"\r\n style={{ ...elementStyle, paddingLeft: config.paddingX }}\r\n >\r\n {leftElement}\r\n </span>\r\n )}\r\n\r\n <input\r\n ref={ref}\r\n className=\"brycks-input\"\r\n style={inputStyles}\r\n disabled={disabled}\r\n aria-invalid={isInvalid}\r\n data-testid={testId}\r\n onFocus={handleFocus}\r\n onBlur={handleBlur}\r\n {...props}\r\n />\r\n\r\n {rightElement && (\r\n <span\r\n className=\"brycks-input-right-element\"\r\n style={{ ...elementStyle, paddingRight: config.paddingX }}\r\n >\r\n {rightElement}\r\n </span>\r\n )}\r\n </div>\r\n )\r\n})\r\n\r\nInput.displayName = 'Input'\r\n","/**\r\n * TextField Component\r\n *\r\n * Complete text input field with label, helper text, and error handling.\r\n * Combines Input with proper accessibility and form structure.\r\n */\r\n\r\nimport { forwardRef, useId, type ReactNode } from 'react'\r\nimport { Input, type InputProps } from '../Input'\r\nimport { cx } from '../../../utils/styles'\r\n\r\nexport interface TextFieldProps extends InputProps {\r\n /** Field label */\r\n label?: ReactNode\r\n /** Helper text below the input */\r\n helperText?: ReactNode\r\n /** Error message (also sets isInvalid) */\r\n errorMessage?: ReactNode\r\n /** Whether the field is required */\r\n isRequired?: boolean\r\n /** Whether to hide the label visually (still accessible) */\r\n hideLabel?: boolean\r\n}\r\n\r\nexport const TextField = forwardRef<HTMLInputElement, TextFieldProps>(function TextField(\r\n {\r\n label,\r\n helperText,\r\n errorMessage,\r\n isRequired,\r\n hideLabel,\r\n isInvalid,\r\n id,\r\n className,\r\n testId,\r\n ...inputProps\r\n },\r\n ref\r\n) {\r\n const generatedId = useId()\r\n const fieldId = id ?? generatedId\r\n const helperId = `${fieldId}-helper`\r\n const errorId = `${fieldId}-error`\r\n\r\n const hasError = Boolean(errorMessage) || isInvalid\r\n const describedBy = [hasError && errorId, helperText && helperId].filter(Boolean).join(' ')\r\n\r\n const labelStyle: React.CSSProperties = {\r\n display: 'block',\r\n marginBottom: 6,\r\n fontSize: 13,\r\n fontWeight: 500,\r\n color: 'var(--brycks-foreground-default)',\r\n ...(hideLabel && {\r\n position: 'absolute',\r\n width: 1,\r\n height: 1,\r\n padding: 0,\r\n margin: -1,\r\n overflow: 'hidden',\r\n clip: 'rect(0, 0, 0, 0)',\r\n whiteSpace: 'nowrap',\r\n border: 0,\r\n }),\r\n }\r\n\r\n const helperStyle: React.CSSProperties = {\r\n display: 'block',\r\n marginTop: 6,\r\n fontSize: 12,\r\n lineHeight: 1.5,\r\n color: 'var(--brycks-foreground-muted)',\r\n }\r\n\r\n const errorStyle: React.CSSProperties = {\r\n ...helperStyle,\r\n color: 'var(--brycks-error-default)',\r\n }\r\n\r\n return (\r\n <div\r\n className={cx(\r\n 'brycks-text-field',\r\n hasError && 'brycks-text-field--error',\r\n className\r\n )}\r\n data-testid={testId}\r\n >\r\n {label && (\r\n <label htmlFor={fieldId} style={labelStyle}>\r\n {label}\r\n {isRequired && (\r\n <span\r\n aria-hidden=\"true\"\r\n style={{\r\n color: 'var(--brycks-error-default)',\r\n marginLeft: 2,\r\n }}\r\n >\r\n *\r\n </span>\r\n )}\r\n </label>\r\n )}\r\n\r\n <Input\r\n ref={ref}\r\n id={fieldId}\r\n isInvalid={hasError}\r\n aria-describedby={describedBy || undefined}\r\n aria-required={isRequired}\r\n {...inputProps}\r\n />\r\n\r\n {hasError && errorMessage && (\r\n <span id={errorId} role=\"alert\" style={errorStyle}>\r\n {errorMessage}\r\n </span>\r\n )}\r\n\r\n {!hasError && helperText && (\r\n <span id={helperId} style={helperStyle}>\r\n {helperText}\r\n </span>\r\n )}\r\n </div>\r\n )\r\n})\r\n\r\nTextField.displayName = 'TextField'\r\n","/**\r\n * Select Component\r\n *\r\n * Native select with custom styling for cross-browser consistency.\r\n * Maintains accessibility while providing Apple-inspired visuals.\r\n */\r\n\r\nimport {\r\n forwardRef,\r\n useState,\r\n type CSSProperties,\r\n type SelectHTMLAttributes,\r\n type ReactNode,\r\n} from 'react'\r\nimport { cx } from '../../../utils/styles'\r\n\r\nexport type SelectSize = 'sm' | 'md' | 'lg'\r\nexport type SelectVariant = 'outline' | 'filled'\r\n\r\nexport interface SelectProps extends Omit<SelectHTMLAttributes<HTMLSelectElement>, 'size'> {\r\n /** Select size */\r\n size?: SelectSize\r\n /** Visual variant */\r\n variant?: SelectVariant\r\n /** Error state */\r\n isInvalid?: boolean\r\n /** Placeholder option */\r\n placeholder?: string\r\n /** Custom class name */\r\n className?: string\r\n /** Test ID */\r\n testId?: string\r\n /** Children (option elements) */\r\n children?: ReactNode\r\n}\r\n\r\nconst sizeStyles: Record<SelectSize, { height: number; fontSize: number; padding: number }> = {\r\n sm: { height: 32, fontSize: 13, padding: 10 },\r\n md: { height: 40, fontSize: 14, padding: 12 },\r\n lg: { height: 48, fontSize: 15, padding: 14 },\r\n}\r\n\r\n/** Chevron down icon */\r\nfunction ChevronIcon() {\r\n return (\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path\r\n d=\"M2.5 4.5L6 8L9.5 4.5\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n )\r\n}\r\n\r\nexport const Select = forwardRef<HTMLSelectElement, SelectProps>(function Select(\r\n {\r\n size = 'md',\r\n variant = 'outline',\r\n isInvalid,\r\n placeholder,\r\n className,\r\n style,\r\n testId,\r\n disabled,\r\n children,\r\n onFocus,\r\n onBlur,\r\n value,\r\n ...props\r\n },\r\n ref\r\n) {\r\n const [isFocused, setIsFocused] = useState(false)\r\n\r\n const sizeValue = sizeStyles[size]\r\n const hasValue = value !== undefined && value !== ''\r\n\r\n const wrapperStyle: CSSProperties = {\r\n position: 'relative',\r\n display: 'inline-flex',\r\n width: '100%',\r\n }\r\n\r\n const getSelectStyle = (): CSSProperties => {\r\n const base: CSSProperties = {\r\n width: '100%',\r\n height: sizeValue.height,\r\n paddingLeft: sizeValue.padding,\r\n paddingRight: sizeValue.padding + 24,\r\n fontSize: sizeValue.fontSize,\r\n fontFamily: 'var(--brycks-font-sans)',\r\n color: hasValue || !placeholder ? 'var(--brycks-foreground-default)' : 'var(--brycks-foreground-muted)',\r\n backgroundColor: variant === 'filled' ? 'var(--brycks-background-muted)' : 'var(--brycks-background-app)',\r\n border: `1px solid ${\r\n isInvalid\r\n ? 'var(--brycks-error-default)'\r\n : isFocused\r\n ? 'var(--brycks-border-focus)'\r\n : variant === 'filled'\r\n ? 'transparent'\r\n : 'var(--brycks-border-default)'\r\n }`,\r\n borderRadius: 'var(--brycks-radius-default)',\r\n outline: 'none',\r\n cursor: disabled ? 'not-allowed' : 'pointer',\r\n appearance: 'none',\r\n WebkitAppearance: 'none',\r\n transition: 'all 200ms ease-out',\r\n boxShadow: isFocused\r\n ? isInvalid\r\n ? '0 0 0 3px rgba(239, 68, 68, 0.15)'\r\n : '0 0 0 3px rgba(85, 120, 244, 0.15)'\r\n : 'none',\r\n }\r\n\r\n if (disabled) {\r\n base.opacity = 0.5\r\n }\r\n\r\n return base\r\n }\r\n\r\n const iconStyle: CSSProperties = {\r\n position: 'absolute',\r\n right: sizeValue.padding,\r\n top: '50%',\r\n transform: 'translateY(-50%)',\r\n pointerEvents: 'none',\r\n color: 'var(--brycks-foreground-muted)',\r\n transition: 'transform 200ms ease-out',\r\n }\r\n\r\n const handleFocus = (e: React.FocusEvent<HTMLSelectElement>) => {\r\n setIsFocused(true)\r\n onFocus?.(e)\r\n }\r\n\r\n const handleBlur = (e: React.FocusEvent<HTMLSelectElement>) => {\r\n setIsFocused(false)\r\n onBlur?.(e)\r\n }\r\n\r\n return (\r\n <div\r\n className={cx(\r\n 'brycks-select-wrapper',\r\n `brycks-select-wrapper--${variant}`,\r\n `brycks-select-wrapper--${size}`,\r\n isInvalid && 'brycks-select-wrapper--invalid',\r\n disabled && 'brycks-select-wrapper--disabled',\r\n className\r\n )}\r\n style={{ ...wrapperStyle, ...style }}\r\n >\r\n <select\r\n ref={ref}\r\n className=\"brycks-select\"\r\n style={getSelectStyle()}\r\n disabled={disabled}\r\n aria-invalid={isInvalid}\r\n data-testid={testId}\r\n value={value}\r\n onFocus={handleFocus}\r\n onBlur={handleBlur}\r\n {...props}\r\n >\r\n {placeholder && (\r\n <option value=\"\" disabled>\r\n {placeholder}\r\n </option>\r\n )}\r\n {children}\r\n </select>\r\n\r\n <span style={iconStyle}>\r\n <ChevronIcon />\r\n </span>\r\n </div>\r\n )\r\n})\r\n\r\nSelect.displayName = 'Select'\r\n","/**\r\n * Checkbox Component\r\n *\r\n * Apple-inspired checkbox with smooth animations and tactile feedback.\r\n *\r\n * @module components/form/Checkbox\r\n */\r\n\r\nimport {\r\n forwardRef,\r\n useState,\r\n type CSSProperties,\r\n type InputHTMLAttributes,\r\n type ReactNode,\r\n} from 'react'\r\nimport {\r\n controlSizes,\r\n componentGap,\r\n componentFontSize,\r\n componentLineHeight,\r\n focusRing,\r\n transition,\r\n stateOpacity,\r\n scale,\r\n} from '../../../design-system'\r\nimport { cx } from '../../../utils/styles'\r\n\r\nexport type CheckboxSize = 'sm' | 'md' | 'lg'\r\n\r\nexport interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {\r\n /** Checkbox size */\r\n size?: CheckboxSize\r\n /** Label text */\r\n label?: ReactNode\r\n /** Description below label */\r\n description?: ReactNode\r\n /** Error state */\r\n isInvalid?: boolean\r\n /** Indeterminate state */\r\n isIndeterminate?: boolean\r\n /** Custom class name */\r\n className?: string\r\n /** Test ID */\r\n testId?: string\r\n}\r\n\r\n/** Checkmark icon */\r\nfunction CheckIcon({ size }: { size: number }) {\r\n return (\r\n <svg width={size} height={size} viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path\r\n d=\"M2.5 6L5 8.5L9.5 4\"\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\n/** Indeterminate/minus icon */\r\nfunction MinusIcon({ size }: { size: number }) {\r\n return (\r\n <svg width={size} height={size} viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path\r\n d=\"M2.5 6H9.5\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n />\r\n </svg>\r\n )\r\n}\r\n\r\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(function Checkbox(\r\n {\r\n size = 'md',\r\n label,\r\n description,\r\n isInvalid,\r\n isIndeterminate,\r\n className,\r\n style,\r\n testId,\r\n disabled,\r\n checked,\r\n onChange,\r\n ...props\r\n },\r\n ref\r\n) {\r\n const [isFocused, setIsFocused] = useState(false)\r\n const [isHovered, setIsHovered] = useState(false)\r\n const [isPressed, setIsPressed] = useState(false)\r\n\r\n const config = controlSizes[size]\r\n const fontSize = componentFontSize[size]\r\n\r\n const isCheckedOrIndeterminate = checked || isIndeterminate\r\n\r\n const wrapperStyle: CSSProperties = {\r\n display: 'inline-flex',\r\n alignItems: 'flex-start',\r\n gap: componentGap.lg,\r\n cursor: disabled ? 'not-allowed' : 'pointer',\r\n opacity: disabled ? stateOpacity.disabled : 1,\r\n }\r\n\r\n const boxStyle: CSSProperties = {\r\n position: 'relative',\r\n width: config.box,\r\n height: config.box,\r\n borderRadius: 'var(--brycks-radius-sm)',\r\n border: `1.5px solid ${\r\n isInvalid\r\n ? 'var(--brycks-error-default)'\r\n : isCheckedOrIndeterminate\r\n ? 'var(--brycks-primary-default)'\r\n : isFocused\r\n ? 'var(--brycks-border-focus)'\r\n : 'var(--brycks-border-default)'\r\n }`,\r\n backgroundColor: isCheckedOrIndeterminate\r\n ? 'var(--brycks-primary-default)'\r\n : isHovered\r\n ? 'var(--brycks-background-subtle)'\r\n : 'var(--brycks-background-app)',\r\n transition: transition.quick,\r\n transform: isPressed ? `scale(${scale.controlPressed})` : `scale(${scale.normal})`,\r\n boxShadow: isFocused ? focusRing.default : focusRing.none,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n flexShrink: 0,\r\n }\r\n\r\n const iconStyle: CSSProperties = {\r\n color: 'var(--brycks-primary-foreground)',\r\n opacity: isCheckedOrIndeterminate ? 1 : 0,\r\n transform: isCheckedOrIndeterminate ? `scale(${scale.normal})` : `scale(${scale.hidden})`,\r\n transition: transition.quick,\r\n }\r\n\r\n const inputStyle: CSSProperties = {\r\n position: 'absolute',\r\n width: '100%',\r\n height: '100%',\r\n opacity: 0,\r\n cursor: disabled ? 'not-allowed' : 'pointer',\r\n margin: 0,\r\n }\r\n\r\n const labelContainerStyle: CSSProperties = {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: componentGap.xs,\r\n paddingTop: (config.box - fontSize) / 2,\r\n }\r\n\r\n const labelTextStyle: CSSProperties = {\r\n fontSize,\r\n lineHeight: componentLineHeight.snug,\r\n color: 'var(--brycks-foreground-default)',\r\n userSelect: 'none',\r\n }\r\n\r\n const descriptionStyle: CSSProperties = {\r\n fontSize: fontSize - 1,\r\n lineHeight: componentLineHeight.snug,\r\n color: 'var(--brycks-foreground-muted)',\r\n userSelect: 'none',\r\n }\r\n\r\n return (\r\n <label\r\n className={cx(\r\n 'brycks-checkbox',\r\n `brycks-checkbox--${size}`,\r\n isCheckedOrIndeterminate && 'brycks-checkbox--checked',\r\n isInvalid && 'brycks-checkbox--invalid',\r\n disabled && 'brycks-checkbox--disabled',\r\n className\r\n )}\r\n style={{ ...wrapperStyle, ...style }}\r\n data-testid={testId}\r\n onMouseEnter={() => setIsHovered(true)}\r\n onMouseLeave={() => {\r\n setIsHovered(false)\r\n setIsPressed(false)\r\n }}\r\n onMouseDown={() => setIsPressed(true)}\r\n onMouseUp={() => setIsPressed(false)}\r\n >\r\n <span style={boxStyle}>\r\n <input\r\n ref={ref}\r\n type=\"checkbox\"\r\n style={inputStyle}\r\n checked={checked}\r\n disabled={disabled}\r\n aria-invalid={isInvalid}\r\n onChange={onChange}\r\n onFocus={() => setIsFocused(true)}\r\n onBlur={() => setIsFocused(false)}\r\n {...props}\r\n />\r\n <span style={iconStyle}>\r\n {isIndeterminate ? <MinusIcon size={config.icon} /> : <CheckIcon size={config.icon} />}\r\n </span>\r\n </span>\r\n\r\n {(label || description) && (\r\n <span style={labelContainerStyle}>\r\n {label && <span style={labelTextStyle}>{label}</span>}\r\n {description && <span style={descriptionStyle}>{description}</span>}\r\n </span>\r\n )}\r\n </label>\r\n )\r\n})\r\n\r\nCheckbox.displayName = 'Checkbox'\r\n","/**\r\n * Switch Component\r\n *\r\n * Apple-inspired toggle switch with smooth spring animation.\r\n * Clean, tactile design with satisfying micro-interactions.\r\n *\r\n * @module components/form/Switch\r\n */\r\n\r\nimport {\r\n forwardRef,\r\n useState,\r\n type CSSProperties,\r\n type InputHTMLAttributes,\r\n type ReactNode,\r\n} from 'react'\r\nimport {\r\n switchSizes,\r\n componentGap,\r\n componentFontSize,\r\n componentLineHeight,\r\n focusRing,\r\n transition,\r\n stateOpacity,\r\n scale,\r\n} from '../../../design-system'\r\nimport { cx } from '../../../utils/styles'\r\n\r\nexport type SwitchSize = 'sm' | 'md' | 'lg'\r\n\r\nexport interface SwitchProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {\r\n /** Switch size */\r\n size?: SwitchSize\r\n /** Label text */\r\n label?: ReactNode\r\n /** Description below label */\r\n description?: ReactNode\r\n /** Custom class name */\r\n className?: string\r\n /** Test ID */\r\n testId?: string\r\n}\r\n\r\nexport const Switch = forwardRef<HTMLInputElement, SwitchProps>(function Switch(\r\n {\r\n size = 'md',\r\n label,\r\n description,\r\n className,\r\n style,\r\n testId,\r\n disabled,\r\n checked,\r\n onChange,\r\n ...props\r\n },\r\n ref\r\n) {\r\n const [isFocused, setIsFocused] = useState(false)\r\n const [isPressed, setIsPressed] = useState(false)\r\n\r\n const config = switchSizes[size]\r\n const fontSize = componentFontSize[size]\r\n\r\n const padding = (config.height - config.thumb) / 2\r\n const travel = config.width - config.thumb - padding * 2\r\n\r\n const wrapperStyle: CSSProperties = {\r\n display: 'inline-flex',\r\n alignItems: 'flex-start',\r\n gap: componentGap.xl,\r\n cursor: disabled ? 'not-allowed' : 'pointer',\r\n opacity: disabled ? stateOpacity.disabled : 1,\r\n }\r\n\r\n const trackStyle: CSSProperties = {\r\n position: 'relative',\r\n width: config.width,\r\n height: config.height,\r\n borderRadius: config.height / 2,\r\n backgroundColor: checked\r\n ? 'var(--brycks-primary-default)'\r\n : 'var(--brycks-background-muted)',\r\n border: `1px solid ${checked ? 'var(--brycks-primary-default)' : 'var(--brycks-border-default)'}`,\r\n transition: transition.spring,\r\n boxShadow: isFocused ? focusRing.default : 'inset 0 1px 2px rgba(0,0,0,0.05)',\r\n flexShrink: 0,\r\n }\r\n\r\n const thumbStyle: CSSProperties = {\r\n position: 'absolute',\r\n top: padding,\r\n left: checked ? padding + travel : padding,\r\n width: isPressed ? config.thumb + 4 : config.thumb,\r\n height: config.thumb,\r\n borderRadius: config.thumb / 2,\r\n backgroundColor: 'var(--brycks-background-elevated)',\r\n boxShadow: 'var(--brycks-shadow-sm)',\r\n transition: transition.spring,\r\n transform: isPressed ? `scale(${scale.pressedStrong})` : `scale(${scale.normal})`,\r\n }\r\n\r\n const inputStyle: CSSProperties = {\r\n position: 'absolute',\r\n width: '100%',\r\n height: '100%',\r\n opacity: 0,\r\n cursor: disabled ? 'not-allowed' : 'pointer',\r\n margin: 0,\r\n }\r\n\r\n const labelContainerStyle: CSSProperties = {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: componentGap.xs,\r\n paddingTop: (config.height - fontSize * componentLineHeight.snug) / 2,\r\n }\r\n\r\n const labelStyle: CSSProperties = {\r\n fontSize,\r\n lineHeight: componentLineHeight.snug,\r\n color: 'var(--brycks-foreground-default)',\r\n userSelect: 'none',\r\n }\r\n\r\n const descriptionStyle: CSSProperties = {\r\n fontSize: fontSize - 1,\r\n lineHeight: componentLineHeight.snug,\r\n color: 'var(--brycks-foreground-muted)',\r\n userSelect: 'none',\r\n }\r\n\r\n return (\r\n <label\r\n className={cx(\r\n 'brycks-switch',\r\n `brycks-switch--${size}`,\r\n checked && 'brycks-switch--checked',\r\n disabled && 'brycks-switch--disabled',\r\n className\r\n )}\r\n style={{ ...wrapperStyle, ...style }}\r\n data-testid={testId}\r\n onMouseDown={() => setIsPressed(true)}\r\n onMouseUp={() => setIsPressed(false)}\r\n onMouseLeave={() => setIsPressed(false)}\r\n >\r\n <span style={trackStyle}>\r\n <input\r\n ref={ref}\r\n type=\"checkbox\"\r\n role=\"switch\"\r\n style={inputStyle}\r\n checked={checked}\r\n disabled={disabled}\r\n aria-checked={checked}\r\n onChange={onChange}\r\n onFocus={() => setIsFocused(true)}\r\n onBlur={() => setIsFocused(false)}\r\n {...props}\r\n />\r\n <span style={thumbStyle} />\r\n </span>\r\n\r\n {(label || description) && (\r\n <span style={labelContainerStyle}>\r\n {label && <span style={labelStyle}>{label}</span>}\r\n {description && <span style={descriptionStyle}>{description}</span>}\r\n </span>\r\n )}\r\n </label>\r\n )\r\n})\r\n\r\nSwitch.displayName = 'Switch'\r\n","/**\r\n * Textarea Component\r\n *\r\n * Multi-line text input with Apple-inspired styling.\r\n * Supports auto-resize and character counting.\r\n */\r\n\r\nimport {\r\n forwardRef,\r\n useState,\r\n useEffect,\r\n useRef,\r\n useCallback,\r\n type CSSProperties,\r\n type TextareaHTMLAttributes,\r\n} from 'react'\r\nimport { cx } from '../../../utils/styles'\r\n\r\nexport type TextareaSize = 'sm' | 'md' | 'lg'\r\nexport type TextareaVariant = 'outline' | 'filled'\r\n\r\nexport interface TextareaProps extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'size'> {\r\n /** Textarea size */\r\n size?: TextareaSize\r\n /** Visual variant */\r\n variant?: TextareaVariant\r\n /** Error state */\r\n isInvalid?: boolean\r\n /** Auto resize based on content */\r\n autoResize?: boolean\r\n /** Minimum rows */\r\n minRows?: number\r\n /** Maximum rows */\r\n maxRows?: number\r\n /** Show character count */\r\n showCount?: boolean\r\n /** Max character length */\r\n maxLength?: number\r\n /** Custom class name */\r\n className?: string\r\n /** Test ID */\r\n testId?: string\r\n}\r\n\r\nconst sizeStyles: Record<TextareaSize, { fontSize: number; padding: number; lineHeight: number }> = {\r\n sm: { fontSize: 13, padding: 10, lineHeight: 1.5 },\r\n md: { fontSize: 14, padding: 12, lineHeight: 1.5 },\r\n lg: { fontSize: 15, padding: 14, lineHeight: 1.5 },\r\n}\r\n\r\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(function Textarea(\r\n {\r\n size = 'md',\r\n variant = 'outline',\r\n isInvalid,\r\n autoResize,\r\n minRows = 3,\r\n maxRows = 10,\r\n showCount,\r\n maxLength,\r\n className,\r\n style,\r\n testId,\r\n disabled,\r\n value,\r\n defaultValue,\r\n onChange,\r\n onFocus,\r\n onBlur,\r\n ...props\r\n },\r\n ref\r\n) {\r\n const [isFocused, setIsFocused] = useState(false)\r\n const [charCount, setCharCount] = useState(0)\r\n const internalRef = useRef<HTMLTextAreaElement>(null)\r\n const textareaRef = (ref as React.RefObject<HTMLTextAreaElement>) || internalRef\r\n\r\n const sizeValue = sizeStyles[size]\r\n const lineHeightPx = sizeValue.fontSize * sizeValue.lineHeight\r\n const minHeight = lineHeightPx * minRows + sizeValue.padding * 2\r\n const maxHeight = lineHeightPx * maxRows + sizeValue.padding * 2\r\n\r\n const adjustHeight = useCallback(() => {\r\n const textarea = textareaRef.current\r\n if (!textarea || !autoResize) return\r\n\r\n textarea.style.height = 'auto'\r\n const scrollHeight = textarea.scrollHeight\r\n const newHeight = Math.min(Math.max(scrollHeight, minHeight), maxHeight)\r\n textarea.style.height = `${newHeight}px`\r\n }, [autoResize, minHeight, maxHeight, textareaRef])\r\n\r\n useEffect(() => {\r\n adjustHeight()\r\n }, [value, adjustHeight])\r\n\r\n useEffect(() => {\r\n const initialValue = String(value ?? defaultValue ?? '')\r\n setCharCount(initialValue.length)\r\n }, [value, defaultValue])\r\n\r\n const getTextareaStyle = (): CSSProperties => {\r\n const base: CSSProperties = {\r\n width: '100%',\r\n minHeight,\r\n maxHeight: autoResize ? maxHeight : undefined,\r\n padding: sizeValue.padding,\r\n fontSize: sizeValue.fontSize,\r\n lineHeight: sizeValue.lineHeight,\r\n fontFamily: 'var(--brycks-font-sans)',\r\n color: 'var(--brycks-foreground-default)',\r\n backgroundColor: variant === 'filled' ? 'var(--brycks-background-muted)' : 'var(--brycks-background-app)',\r\n border: `1px solid ${\r\n isInvalid\r\n ? 'var(--brycks-error-default)'\r\n : isFocused\r\n ? 'var(--brycks-border-focus)'\r\n : variant === 'filled'\r\n ? 'transparent'\r\n : 'var(--brycks-border-default)'\r\n }`,\r\n borderRadius: 'var(--brycks-radius-default)',\r\n outline: 'none',\r\n resize: autoResize ? 'none' : 'vertical',\r\n transition: 'all 200ms ease-out',\r\n boxShadow: isFocused\r\n ? isInvalid\r\n ? '0 0 0 3px rgba(239, 68, 68, 0.15)'\r\n : '0 0 0 3px rgba(85, 120, 244, 0.15)'\r\n : 'none',\r\n }\r\n\r\n if (disabled) {\r\n base.opacity = 0.5\r\n base.cursor = 'not-allowed'\r\n base.resize = 'none'\r\n }\r\n\r\n return base\r\n }\r\n\r\n const wrapperStyle: CSSProperties = {\r\n position: 'relative',\r\n width: '100%',\r\n }\r\n\r\n const countStyle: CSSProperties = {\r\n position: 'absolute',\r\n bottom: 8,\r\n right: 12,\r\n fontSize: 11,\r\n color: charCount >= (maxLength ?? Infinity)\r\n ? 'var(--brycks-error-default)'\r\n : 'var(--brycks-foreground-muted)',\r\n pointerEvents: 'none',\r\n transition: 'color 150ms ease-out',\r\n }\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\r\n setCharCount(e.target.value.length)\r\n onChange?.(e)\r\n }\r\n\r\n const handleFocus = (e: React.FocusEvent<HTMLTextAreaElement>) => {\r\n setIsFocused(true)\r\n onFocus?.(e)\r\n }\r\n\r\n const handleBlur = (e: React.FocusEvent<HTMLTextAreaElement>) => {\r\n setIsFocused(false)\r\n onBlur?.(e)\r\n }\r\n\r\n return (\r\n <div\r\n className={cx(\r\n 'brycks-textarea-wrapper',\r\n `brycks-textarea-wrapper--${variant}`,\r\n `brycks-textarea-wrapper--${size}`,\r\n isInvalid && 'brycks-textarea-wrapper--invalid',\r\n disabled && 'brycks-textarea-wrapper--disabled',\r\n className\r\n )}\r\n style={{ ...wrapperStyle, ...style }}\r\n >\r\n <textarea\r\n ref={textareaRef}\r\n className=\"brycks-textarea\"\r\n style={getTextareaStyle()}\r\n disabled={disabled}\r\n aria-invalid={isInvalid}\r\n data-testid={testId}\r\n value={value}\r\n defaultValue={defaultValue}\r\n maxLength={maxLength}\r\n onChange={handleChange}\r\n onFocus={handleFocus}\r\n onBlur={handleBlur}\r\n {...props}\r\n />\r\n\r\n {showCount && (\r\n <span style={countStyle}>\r\n {charCount}{maxLength ? `/${maxLength}` : ''}\r\n </span>\r\n )}\r\n </div>\r\n )\r\n})\r\n\r\nTextarea.displayName = 'Textarea'\r\n","/**\n * Radio Component\n *\n * Accessible radio button with custom styling.\n * Supports different sizes and states.\n */\n\nimport {\n forwardRef,\n useState,\n type CSSProperties,\n type InputHTMLAttributes,\n type ReactNode,\n} from 'react'\nimport { cx } from '../../../utils/styles'\n\nexport type RadioSize = 'sm' | 'md' | 'lg'\n\nexport interface RadioProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {\n /** Radio size */\n size?: RadioSize\n /** Radio label */\n label?: ReactNode\n /** Description below the label */\n description?: ReactNode\n /** Whether the radio is invalid */\n isInvalid?: boolean\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst sizeConfig: Record<RadioSize, { radio: number; dot: number; fontSize: number; gap: number }> = {\n sm: { radio: 16, dot: 6, fontSize: 13, gap: 8 },\n md: { radio: 20, dot: 8, fontSize: 14, gap: 10 },\n lg: { radio: 24, dot: 10, fontSize: 16, gap: 12 },\n}\n\nexport const Radio = forwardRef<HTMLInputElement, RadioProps>(function Radio(\n {\n size = 'md',\n label,\n description,\n isInvalid = false,\n disabled = false,\n className,\n style,\n testId,\n checked,\n ...props\n },\n ref\n) {\n const [isHovered, setIsHovered] = useState(false)\n const [isFocused, setIsFocused] = useState(false)\n const config = sizeConfig[size]\n\n const containerStyle: CSSProperties = {\n display: 'inline-flex',\n alignItems: 'flex-start',\n gap: config.gap,\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.5 : 1,\n ...style,\n }\n\n const radioContainerStyle: CSSProperties = {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: config.radio,\n height: config.radio,\n flexShrink: 0,\n }\n\n const radioStyle: CSSProperties = {\n width: config.radio,\n height: config.radio,\n borderRadius: '50%',\n border: `2px solid ${\n isInvalid\n ? 'var(--brycks-error-default)'\n : checked\n ? 'var(--brycks-primary-default)'\n : isHovered\n ? 'var(--brycks-border-strong)'\n : 'var(--brycks-border-default)'\n }`,\n backgroundColor: checked\n ? 'var(--brycks-primary-default)'\n : 'var(--brycks-background-input)',\n transition: 'all 150ms ease-out',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n boxShadow: isFocused\n ? '0 0 0 3px var(--brycks-primary-100)'\n : undefined,\n }\n\n const dotStyle: CSSProperties = {\n width: config.dot,\n height: config.dot,\n borderRadius: '50%',\n backgroundColor: 'white',\n transform: checked ? 'scale(1)' : 'scale(0)',\n transition: 'transform 150ms ease-out',\n }\n\n const inputStyle: CSSProperties = {\n position: 'absolute',\n width: config.radio,\n height: config.radio,\n opacity: 0,\n margin: 0,\n cursor: disabled ? 'not-allowed' : 'pointer',\n }\n\n const labelContainerStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n }\n\n const labelStyle: CSSProperties = {\n fontSize: config.fontSize,\n fontWeight: 500,\n color: disabled\n ? 'var(--brycks-foreground-muted)'\n : 'var(--brycks-foreground-default)',\n lineHeight: 1.4,\n }\n\n const descriptionStyle: CSSProperties = {\n fontSize: config.fontSize - 1,\n color: 'var(--brycks-foreground-muted)',\n lineHeight: 1.4,\n }\n\n return (\n <label\n className={cx('brycks-radio', `brycks-radio--${size}`, className)}\n style={containerStyle}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n <span style={radioContainerStyle}>\n <span style={radioStyle}>\n <span style={dotStyle} />\n </span>\n <input\n ref={ref}\n type=\"radio\"\n disabled={disabled}\n checked={checked}\n style={inputStyle}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n data-testid={testId}\n {...props}\n />\n </span>\n {(label || description) && (\n <span style={labelContainerStyle}>\n {label && <span style={labelStyle}>{label}</span>}\n {description && <span style={descriptionStyle}>{description}</span>}\n </span>\n )}\n </label>\n )\n})\n\nRadio.displayName = 'Radio'\n\n// RadioGroup component for grouping radios\nexport interface RadioGroupProps {\n /** Radio group name */\n name: string\n /** Current value */\n value?: string\n /** Default value (uncontrolled) */\n defaultValue?: string\n /** Callback when value changes */\n onChange?: (value: string) => void\n /** Whether the group is disabled */\n disabled?: boolean\n /** Radio size */\n size?: RadioSize\n /** Orientation */\n orientation?: 'horizontal' | 'vertical'\n /** Gap between items */\n gap?: number\n /** Children (Radio components) */\n children: ReactNode\n /** Custom class name */\n className?: string\n /** Custom styles */\n style?: CSSProperties\n}\n\nexport function RadioGroup({\n name,\n value: controlledValue,\n defaultValue,\n onChange,\n disabled = false,\n size = 'md',\n orientation = 'vertical',\n gap = 12,\n children,\n className,\n style,\n}: RadioGroupProps) {\n const [internalValue, setInternalValue] = useState(defaultValue ?? '')\n const value = controlledValue ?? internalValue\n\n const handleChange = (newValue: string) => {\n if (controlledValue === undefined) {\n setInternalValue(newValue)\n }\n onChange?.(newValue)\n }\n\n const groupStyle: CSSProperties = {\n display: 'flex',\n flexDirection: orientation === 'vertical' ? 'column' : 'row',\n flexWrap: orientation === 'horizontal' ? 'wrap' : undefined,\n gap,\n ...style,\n }\n\n // Clone children and inject props\n const clonedChildren = Array.isArray(children)\n ? children.map((child, index) => {\n if (child && typeof child === 'object' && 'props' in child) {\n const childValue = child.props.value\n return {\n ...child,\n key: child.key ?? index,\n props: {\n ...child.props,\n name,\n size,\n disabled: disabled || child.props.disabled,\n checked: childValue === value,\n onChange: () => handleChange(childValue),\n },\n }\n }\n return child\n })\n : children\n\n return (\n <div\n role=\"radiogroup\"\n className={cx('brycks-radio-group', className)}\n style={groupStyle}\n >\n {clonedChildren}\n </div>\n )\n}\n\nRadioGroup.displayName = 'RadioGroup'\n","/**\n * Slider Component\n *\n * Accessible range slider with custom styling.\n * Supports different sizes and shows value feedback.\n */\n\nimport {\n forwardRef,\n useState,\n useCallback,\n useRef,\n useEffect,\n type CSSProperties,\n type InputHTMLAttributes,\n} from 'react'\nimport { cx } from '../../../utils/styles'\n\nexport type SliderSize = 'sm' | 'md' | 'lg'\n\nexport interface SliderProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'type' | 'onChange'> {\n /** Slider size */\n size?: SliderSize\n /** Minimum value */\n min?: number\n /** Maximum value */\n max?: number\n /** Step increment */\n step?: number\n /** Current value (controlled) */\n value?: number\n /** Default value (uncontrolled) */\n defaultValue?: number\n /** Callback when value changes */\n onChange?: (value: number) => void\n /** Whether to show the value label */\n showValue?: boolean\n /** Format the value for display */\n formatValue?: (value: number) => string\n /** Label for the slider */\n label?: string\n /** Whether the slider is disabled */\n disabled?: boolean\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst sizeConfig: Record<SliderSize, { track: number; thumb: number; fontSize: number }> = {\n sm: { track: 4, thumb: 14, fontSize: 12 },\n md: { track: 6, thumb: 18, fontSize: 14 },\n lg: { track: 8, thumb: 22, fontSize: 16 },\n}\n\nexport const Slider = forwardRef<HTMLInputElement, SliderProps>(function Slider(\n {\n size = 'md',\n min = 0,\n max = 100,\n step = 1,\n value: controlledValue,\n defaultValue = min,\n onChange,\n showValue = false,\n formatValue = (v) => String(v),\n label,\n disabled = false,\n className,\n style,\n testId,\n ...props\n },\n ref\n) {\n const [internalValue, setInternalValue] = useState(defaultValue)\n const [isDragging, setIsDragging] = useState(false)\n const [isHovered, setIsHovered] = useState(false)\n const inputRef = useRef<HTMLInputElement>(null)\n\n const value = controlledValue ?? internalValue\n const config = sizeConfig[size]\n const percentage = ((value - min) / (max - min)) * 100\n\n const handleChange = useCallback(\n (newValue: number) => {\n const clampedValue = Math.max(min, Math.min(max, newValue))\n if (controlledValue === undefined) {\n setInternalValue(clampedValue)\n }\n onChange?.(clampedValue)\n },\n [controlledValue, min, max, onChange]\n )\n\n useEffect(() => {\n const input = inputRef.current\n if (!input) return\n\n const handleInputChange = (e: Event) => {\n const target = e.target as HTMLInputElement\n handleChange(parseFloat(target.value))\n }\n\n input.addEventListener('input', handleInputChange)\n return () => input.removeEventListener('input', handleInputChange)\n }, [handleChange])\n\n const containerStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 8,\n opacity: disabled ? 0.5 : 1,\n ...style,\n }\n\n const labelRowStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 12,\n }\n\n const labelStyle: CSSProperties = {\n fontSize: config.fontSize,\n fontWeight: 500,\n color: 'var(--brycks-foreground-default)',\n }\n\n const valueStyle: CSSProperties = {\n fontSize: config.fontSize,\n fontWeight: 500,\n color: 'var(--brycks-foreground-muted)',\n fontVariantNumeric: 'tabular-nums',\n }\n\n const sliderContainerStyle: CSSProperties = {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n height: config.thumb,\n cursor: disabled ? 'not-allowed' : 'pointer',\n }\n\n const trackStyle: CSSProperties = {\n position: 'absolute',\n width: '100%',\n height: config.track,\n borderRadius: config.track / 2,\n backgroundColor: 'var(--brycks-background-muted)',\n }\n\n const fillStyle: CSSProperties = {\n position: 'absolute',\n left: 0,\n height: config.track,\n width: `${percentage}%`,\n borderRadius: config.track / 2,\n backgroundColor: disabled\n ? 'var(--brycks-foreground-muted)'\n : 'var(--brycks-primary-default)',\n transition: isDragging ? 'none' : 'width 100ms ease-out',\n }\n\n const thumbStyle: CSSProperties = {\n position: 'absolute',\n left: `calc(${percentage}% - ${config.thumb / 2}px)`,\n width: config.thumb,\n height: config.thumb,\n borderRadius: '50%',\n backgroundColor: 'white',\n border: `2px solid ${\n disabled ? 'var(--brycks-foreground-muted)' : 'var(--brycks-primary-default)'\n }`,\n boxShadow: isDragging || isHovered\n ? 'var(--brycks-shadow-md)'\n : 'var(--brycks-shadow-sm)',\n transform: isDragging ? 'scale(1.1)' : 'scale(1)',\n transition: isDragging\n ? 'transform 100ms ease-out, box-shadow 100ms ease-out'\n : 'all 100ms ease-out',\n pointerEvents: 'none',\n }\n\n const inputStyle: CSSProperties = {\n position: 'absolute',\n width: '100%',\n height: config.thumb,\n margin: 0,\n padding: 0,\n opacity: 0,\n cursor: disabled ? 'not-allowed' : 'pointer',\n }\n\n return (\n <div className={cx('brycks-slider', `brycks-slider--${size}`, className)} style={containerStyle}>\n {(label || showValue) && (\n <div style={labelRowStyle}>\n {label && <span style={labelStyle}>{label}</span>}\n {showValue && <span style={valueStyle}>{formatValue(value)}</span>}\n </div>\n )}\n <div\n style={sliderContainerStyle}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n <div style={trackStyle} />\n <div style={fillStyle} />\n <div style={thumbStyle} />\n <input\n ref={(node) => {\n (inputRef as React.MutableRefObject<HTMLInputElement | null>).current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) ref.current = node\n }}\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={value}\n disabled={disabled}\n style={inputStyle}\n onMouseDown={() => setIsDragging(true)}\n onMouseUp={() => setIsDragging(false)}\n onTouchStart={() => setIsDragging(true)}\n onTouchEnd={() => setIsDragging(false)}\n data-testid={testId}\n {...props}\n />\n </div>\n </div>\n )\n})\n\nSlider.displayName = 'Slider'\n","/**\n * DateInput Component\n *\n * A styled date input that uses the native date picker.\n * Consistent with other form inputs in the design system.\n */\n\nimport {\n forwardRef,\n useState,\n type CSSProperties,\n type InputHTMLAttributes,\n type ReactNode,\n} from 'react'\nimport { cx } from '../../../utils/styles'\n\nexport type DateInputSize = 'sm' | 'md' | 'lg'\nexport type DateInputVariant = 'outline' | 'filled' | 'flushed'\nexport type DateInputType = 'date' | 'datetime-local' | 'time' | 'month' | 'week'\n\nexport interface DateInputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {\n /** Input size */\n size?: DateInputSize\n /** Input variant */\n variant?: DateInputVariant\n /** Type of date input */\n type?: DateInputType\n /** Input label */\n label?: ReactNode\n /** Helper text below input */\n helperText?: ReactNode\n /** Error message */\n error?: ReactNode\n /** Whether the input is invalid */\n isInvalid?: boolean\n /** Icon on the left side */\n leftIcon?: ReactNode\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst sizeConfig: Record<DateInputSize, { height: number; fontSize: number; padding: number; iconSize: number }> = {\n sm: { height: 32, fontSize: 13, padding: 10, iconSize: 14 },\n md: { height: 40, fontSize: 14, padding: 12, iconSize: 16 },\n lg: { height: 48, fontSize: 16, padding: 14, iconSize: 18 },\n}\n\nexport const DateInput = forwardRef<HTMLInputElement, DateInputProps>(function DateInput(\n {\n size = 'md',\n variant = 'outline',\n type = 'date',\n label,\n helperText,\n error,\n isInvalid = false,\n leftIcon,\n disabled = false,\n className,\n style,\n testId,\n ...props\n },\n ref\n) {\n const [isFocused, setIsFocused] = useState(false)\n const [isHovered, setIsHovered] = useState(false)\n const config = sizeConfig[size]\n const hasError = isInvalid || !!error\n\n const containerStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 6,\n ...style,\n }\n\n const labelStyle: CSSProperties = {\n fontSize: config.fontSize - 1,\n fontWeight: 500,\n color: 'var(--brycks-foreground-default)',\n }\n\n const inputContainerStyle: CSSProperties = {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n }\n\n const getInputStyle = (): CSSProperties => {\n const baseStyle: CSSProperties = {\n width: '100%',\n height: config.height,\n fontSize: config.fontSize,\n fontFamily: 'inherit',\n color: 'var(--brycks-foreground-default)',\n backgroundColor: variant === 'filled' ? 'var(--brycks-background-muted)' : 'var(--brycks-background-input)',\n paddingLeft: leftIcon ? config.padding + config.iconSize + 8 : config.padding,\n paddingRight: config.padding,\n transition: 'all 150ms ease-out',\n outline: 'none',\n opacity: disabled ? 0.5 : 1,\n cursor: disabled ? 'not-allowed' : 'pointer',\n }\n\n if (variant === 'flushed') {\n return {\n ...baseStyle,\n border: 'none',\n borderBottom: `2px solid ${\n hasError\n ? 'var(--brycks-error-default)'\n : isFocused\n ? 'var(--brycks-primary-default)'\n : 'var(--brycks-border-default)'\n }`,\n borderRadius: 0,\n paddingLeft: leftIcon ? config.iconSize + 8 : 0,\n paddingRight: 0,\n backgroundColor: 'transparent',\n }\n }\n\n return {\n ...baseStyle,\n border: `1px solid ${\n hasError\n ? 'var(--brycks-error-default)'\n : isFocused\n ? 'var(--brycks-primary-default)'\n : isHovered\n ? 'var(--brycks-border-strong)'\n : 'var(--brycks-border-default)'\n }`,\n borderRadius: 'var(--brycks-radius-md)',\n boxShadow: isFocused && !hasError\n ? '0 0 0 3px var(--brycks-primary-100)'\n : isFocused && hasError\n ? '0 0 0 3px var(--brycks-error-100)'\n : undefined,\n }\n }\n\n const iconStyle: CSSProperties = {\n position: 'absolute',\n left: variant === 'flushed' ? 0 : config.padding,\n color: 'var(--brycks-foreground-muted)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: config.iconSize,\n height: config.iconSize,\n pointerEvents: 'none',\n }\n\n const helperStyle: CSSProperties = {\n fontSize: config.fontSize - 2,\n color: hasError ? 'var(--brycks-error-default)' : 'var(--brycks-foreground-muted)',\n }\n\n return (\n <div\n className={cx('brycks-date-input', `brycks-date-input--${size}`, `brycks-date-input--${variant}`, className)}\n style={containerStyle}\n >\n {label && <label style={labelStyle}>{label}</label>}\n <div\n style={inputContainerStyle}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n {leftIcon && <span style={iconStyle}>{leftIcon}</span>}\n <input\n ref={ref}\n type={type}\n disabled={disabled}\n style={getInputStyle()}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n data-testid={testId}\n {...props}\n />\n </div>\n {(helperText || error) && (\n <span style={helperStyle}>{error || helperText}</span>\n )}\n </div>\n )\n})\n\nDateInput.displayName = 'DateInput'\n","/**\n * FileInput Component\n *\n * Accessible file upload input with drag-and-drop support.\n * Supports multiple files and file type restrictions.\n */\n\nimport {\n forwardRef,\n useState,\n useRef,\n useCallback,\n type CSSProperties,\n type InputHTMLAttributes,\n type DragEvent,\n type ReactNode,\n} from 'react'\nimport { cx } from '../../../utils/styles'\n\nexport type FileInputSize = 'sm' | 'md' | 'lg'\nexport type FileInputVariant = 'default' | 'dropzone'\n\nexport interface FileInputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'type' | 'onChange' | 'value'> {\n /** Input size */\n size?: FileInputSize\n /** Input variant */\n variant?: FileInputVariant\n /** Accepted file types (e.g., \"image/*,.pdf\") */\n accept?: string\n /** Whether multiple files can be selected */\n multiple?: boolean\n /** Maximum file size in bytes */\n maxSize?: number\n /** Label text */\n label?: ReactNode\n /** Description text inside dropzone */\n description?: ReactNode\n /** Error message */\n error?: ReactNode\n /** Whether the input is invalid */\n isInvalid?: boolean\n /** Callback when files are selected */\n onChange?: (files: File[]) => void\n /** Icon to display in dropzone */\n icon?: ReactNode\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst sizeConfig: Record<FileInputSize, { height: number; fontSize: number; padding: number; iconSize: number }> = {\n sm: { height: 80, fontSize: 12, padding: 16, iconSize: 24 },\n md: { height: 120, fontSize: 14, padding: 24, iconSize: 32 },\n lg: { height: 160, fontSize: 16, padding: 32, iconSize: 40 },\n}\n\nfunction UploadIcon({ size }: { size: number }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M7 16a4 4 0 01-.88-7.903A5 5 0 1115.9 6L16 6a5 5 0 011 9.9M15 13l-3-3m0 0l-3 3m3-3v12\" />\n </svg>\n )\n}\n\nexport const FileInput = forwardRef<HTMLInputElement, FileInputProps>(function FileInput(\n {\n size = 'md',\n variant = 'dropzone',\n accept,\n multiple = false,\n maxSize,\n label,\n description,\n error,\n isInvalid = false,\n onChange,\n icon,\n disabled = false,\n className,\n style,\n testId,\n ...props\n },\n ref\n) {\n const [isDragOver, setIsDragOver] = useState(false)\n const [isFocused, setIsFocused] = useState(false)\n const inputRef = useRef<HTMLInputElement>(null)\n const config = sizeConfig[size]\n const hasError = isInvalid || !!error\n\n const handleFiles = useCallback(\n (fileList: FileList | null) => {\n if (!fileList || fileList.length === 0) return\n\n let files = Array.from(fileList)\n\n // Filter by max size if specified\n if (maxSize) {\n files = files.filter((file) => file.size <= maxSize)\n }\n\n // If not multiple, only take first file\n if (!multiple && files.length > 1) {\n files = [files[0]]\n }\n\n onChange?.(files)\n },\n [maxSize, multiple, onChange]\n )\n\n const handleDragOver = useCallback((e: DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n if (!disabled) {\n setIsDragOver(true)\n }\n }, [disabled])\n\n const handleDragLeave = useCallback((e: DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n setIsDragOver(false)\n }, [])\n\n const handleDrop = useCallback(\n (e: DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n setIsDragOver(false)\n\n if (!disabled) {\n handleFiles(e.dataTransfer.files)\n }\n },\n [disabled, handleFiles]\n )\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n handleFiles(e.target.files)\n // Reset input value to allow selecting the same file again\n if (inputRef.current) {\n inputRef.current.value = ''\n }\n },\n [handleFiles]\n )\n\n const handleClick = useCallback(() => {\n if (!disabled) {\n inputRef.current?.click()\n }\n }, [disabled])\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if ((e.key === 'Enter' || e.key === ' ') && !disabled) {\n e.preventDefault()\n inputRef.current?.click()\n }\n },\n [disabled]\n )\n\n const containerStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 6,\n ...style,\n }\n\n const labelStyle: CSSProperties = {\n fontSize: config.fontSize,\n fontWeight: 500,\n color: 'var(--brycks-foreground-default)',\n }\n\n const dropzoneStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 8,\n minHeight: config.height,\n padding: config.padding,\n border: `2px dashed ${\n hasError\n ? 'var(--brycks-error-default)'\n : isDragOver\n ? 'var(--brycks-primary-default)'\n : isFocused\n ? 'var(--brycks-primary-default)'\n : 'var(--brycks-border-default)'\n }`,\n borderRadius: 'var(--brycks-radius-lg)',\n backgroundColor: isDragOver\n ? 'var(--brycks-primary-50)'\n : 'var(--brycks-background-muted)',\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.5 : 1,\n transition: 'all 150ms ease-out',\n outline: 'none',\n }\n\n const iconContainerStyle: CSSProperties = {\n color: isDragOver\n ? 'var(--brycks-primary-default)'\n : 'var(--brycks-foreground-muted)',\n transition: 'color 150ms ease-out',\n }\n\n const textContainerStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: 4,\n textAlign: 'center',\n }\n\n const primaryTextStyle: CSSProperties = {\n fontSize: config.fontSize,\n fontWeight: 500,\n color: 'var(--brycks-foreground-default)',\n }\n\n const secondaryTextStyle: CSSProperties = {\n fontSize: config.fontSize - 2,\n color: 'var(--brycks-foreground-muted)',\n }\n\n const browseStyle: CSSProperties = {\n color: 'var(--brycks-primary-default)',\n fontWeight: 500,\n }\n\n const errorStyle: CSSProperties = {\n fontSize: config.fontSize - 2,\n color: 'var(--brycks-error-default)',\n }\n\n const defaultDescription = multiple\n ? 'Drag files here or click to browse'\n : 'Drag a file here or click to browse'\n\n return (\n <div\n className={cx('brycks-file-input', `brycks-file-input--${size}`, `brycks-file-input--${variant}`, className)}\n style={containerStyle}\n >\n {label && <label style={labelStyle}>{label}</label>}\n <div\n style={dropzoneStyle}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n tabIndex={disabled ? -1 : 0}\n role=\"button\"\n aria-label={String(description) || defaultDescription}\n >\n <div style={iconContainerStyle}>\n {icon || <UploadIcon size={config.iconSize} />}\n </div>\n <div style={textContainerStyle}>\n <span style={primaryTextStyle}>\n {isDragOver ? 'Drop files here' : (\n <>\n <span style={browseStyle}>Click to browse</span> or drag files here\n </>\n )}\n </span>\n {description && <span style={secondaryTextStyle}>{description}</span>}\n </div>\n </div>\n {error && <span style={errorStyle}>{error}</span>}\n <input\n ref={(node) => {\n (inputRef as React.MutableRefObject<HTMLInputElement | null>).current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) ref.current = node\n }}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n onChange={handleChange}\n style={{ display: 'none' }}\n data-testid={testId}\n {...props}\n />\n </div>\n )\n})\n\nFileInput.displayName = 'FileInput'\n","/**\n * useId Hook\n *\n * Generates a stable unique ID for accessibility attributes.\n * Falls back to custom implementation for React < 18.\n */\n\nimport { useState, useEffect } from 'react'\n\nlet idCounter = 0\n\nfunction generateUniqueId(prefix: string): string {\n return `${prefix}-${++idCounter}`\n}\n\nexport function useId(prefix = 'brycks'): string {\n const [id, setId] = useState<string>('')\n\n useEffect(() => {\n setId(generateUniqueId(prefix))\n }, [prefix])\n\n // Return a stable ID even before effect runs\n return id || generateUniqueId(prefix)\n}\n\nexport function useIds(count: number, prefix = 'brycks'): string[] {\n const [ids, setIds] = useState<string[]>([])\n\n useEffect(() => {\n setIds(Array.from({ length: count }, () => generateUniqueId(prefix)))\n }, [count, prefix])\n\n return ids.length ? ids : Array.from({ length: count }, () => generateUniqueId(prefix))\n}\n","/**\n * FormField Component\n *\n * A wrapper component that provides consistent structure for form inputs.\n * Includes label, required indicator, helper text, and error message.\n */\n\nimport { forwardRef, type CSSProperties, type ReactNode, type HTMLAttributes } from 'react'\nimport { cx } from '../../../utils/styles'\nimport { useId } from '../../../hooks/useId'\n\nexport type FormFieldSize = 'sm' | 'md' | 'lg'\n\nexport interface FormFieldProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n /** Field size */\n size?: FormFieldSize\n /** Field label */\n label?: ReactNode\n /** Whether the field is required */\n required?: boolean\n /** Helper text below the field */\n helperText?: ReactNode\n /** Error message (also sets invalid state) */\n error?: ReactNode\n /** Whether the field is invalid */\n isInvalid?: boolean\n /** Whether the field is disabled */\n disabled?: boolean\n /** Custom ID for the field (auto-generated if not provided) */\n fieldId?: string\n /** Field orientation */\n orientation?: 'vertical' | 'horizontal'\n /** Label width for horizontal orientation */\n labelWidth?: number | string\n /** Custom class name */\n className?: string\n /** Children (form input) */\n children: ReactNode | ((props: { id: string; 'aria-describedby'?: string; 'aria-invalid'?: boolean }) => ReactNode)\n /** Test ID */\n testId?: string\n}\n\nconst sizeConfig: Record<FormFieldSize, { labelSize: number; helperSize: number; gap: number }> = {\n sm: { labelSize: 12, helperSize: 11, gap: 4 },\n md: { labelSize: 14, helperSize: 12, gap: 6 },\n lg: { labelSize: 16, helperSize: 14, gap: 8 },\n}\n\nexport const FormField = forwardRef<HTMLDivElement, FormFieldProps>(function FormField(\n {\n size = 'md',\n label,\n required = false,\n helperText,\n error,\n isInvalid = false,\n disabled = false,\n fieldId,\n orientation = 'vertical',\n labelWidth = 120,\n className,\n style,\n children,\n testId,\n ...props\n },\n ref\n) {\n const generatedId = useId('field')\n const id = fieldId || generatedId\n const helperId = `${id}-helper`\n const errorId = `${id}-error`\n const config = sizeConfig[size]\n const hasError = isInvalid || !!error\n\n const containerStyle: CSSProperties = {\n display: 'flex',\n flexDirection: orientation === 'horizontal' ? 'row' : 'column',\n gap: orientation === 'horizontal' ? 16 : config.gap,\n alignItems: orientation === 'horizontal' ? 'flex-start' : 'stretch',\n opacity: disabled ? 0.6 : 1,\n ...style,\n }\n\n const labelContainerStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'baseline',\n gap: 4,\n ...(orientation === 'horizontal' && {\n width: labelWidth,\n flexShrink: 0,\n paddingTop: size === 'lg' ? 14 : size === 'md' ? 10 : 8,\n }),\n }\n\n const labelStyle: CSSProperties = {\n fontSize: config.labelSize,\n fontWeight: 500,\n color: disabled\n ? 'var(--brycks-foreground-muted)'\n : 'var(--brycks-foreground-default)',\n lineHeight: 1.4,\n }\n\n const requiredStyle: CSSProperties = {\n color: 'var(--brycks-error-default)',\n marginLeft: 2,\n }\n\n const contentStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: config.gap,\n flex: 1,\n }\n\n const helperStyle: CSSProperties = {\n fontSize: config.helperSize,\n color: hasError ? 'var(--brycks-error-default)' : 'var(--brycks-foreground-muted)',\n lineHeight: 1.4,\n }\n\n // Props to pass to the child input\n const childProps = {\n id,\n 'aria-describedby': helperText || error ? (error ? errorId : helperId) : undefined,\n 'aria-invalid': hasError ? true : undefined,\n }\n\n return (\n <div\n ref={ref}\n className={cx('brycks-form-field', `brycks-form-field--${size}`, `brycks-form-field--${orientation}`, className)}\n style={containerStyle}\n data-testid={testId}\n {...props}\n >\n {label && (\n <div style={labelContainerStyle}>\n <label htmlFor={id} style={labelStyle}>\n {label}\n {required && <span style={requiredStyle} aria-hidden=\"true\">*</span>}\n </label>\n </div>\n )}\n <div style={contentStyle}>\n {typeof children === 'function' ? children(childProps) : children}\n {(helperText || error) && (\n <span\n id={error ? errorId : helperId}\n style={helperStyle}\n role={error ? 'alert' : undefined}\n >\n {error || helperText}\n </span>\n )}\n </div>\n </div>\n )\n})\n\nFormField.displayName = 'FormField'\n","/**\n * FieldError Component\n *\n * Displays form field error messages with consistent styling.\n * Includes an optional icon and proper accessibility attributes.\n */\n\nimport { forwardRef, type CSSProperties, type HTMLAttributes, type ReactNode } from 'react'\nimport { cx } from '../../../utils/styles'\n\nexport type FieldErrorSize = 'sm' | 'md' | 'lg'\n\nexport interface FieldErrorProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'children'> {\n /** Error size */\n size?: FieldErrorSize\n /** Error message */\n children: ReactNode\n /** Whether to show the error icon */\n showIcon?: boolean\n /** Custom icon */\n icon?: ReactNode\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst sizeConfig: Record<FieldErrorSize, { fontSize: number; iconSize: number; gap: number }> = {\n sm: { fontSize: 11, iconSize: 12, gap: 4 },\n md: { fontSize: 12, iconSize: 14, gap: 6 },\n lg: { fontSize: 14, iconSize: 16, gap: 8 },\n}\n\nfunction ErrorIcon({ size }: { size: number }) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M8 5v3m0 2.5h.007M14 8A6 6 0 112 8a6 6 0 0112 0z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )\n}\n\nexport const FieldError = forwardRef<HTMLSpanElement, FieldErrorProps>(function FieldError(\n {\n size = 'md',\n children,\n showIcon = true,\n icon,\n className,\n style,\n testId,\n ...props\n },\n ref\n) {\n const config = sizeConfig[size]\n\n const errorStyle: CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n gap: config.gap,\n fontSize: config.fontSize,\n fontWeight: 500,\n color: 'var(--brycks-error-default)',\n lineHeight: 1.4,\n ...style,\n }\n\n const iconStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n }\n\n if (!children) return null\n\n return (\n <span\n ref={ref}\n className={cx('brycks-field-error', `brycks-field-error--${size}`, className)}\n style={errorStyle}\n role=\"alert\"\n aria-live=\"polite\"\n data-testid={testId}\n {...props}\n >\n {showIcon && (\n <span style={iconStyle}>\n {icon || <ErrorIcon size={config.iconSize} />}\n </span>\n )}\n {children}\n </span>\n )\n})\n\nFieldError.displayName = 'FieldError'\n","/**\r\n * Modal Component\r\n *\r\n * Accessible modal dialog with smooth Apple-inspired animations.\r\n * Supports focus trapping and keyboard navigation.\r\n */\r\n\r\nimport {\r\n forwardRef,\r\n useEffect,\r\n useRef,\r\n useCallback,\r\n type CSSProperties,\r\n type ReactNode,\r\n type HTMLAttributes,\r\n} from 'react'\r\nimport { createPortal } from 'react-dom'\r\nimport { cx } from '../../../utils/styles'\r\n\r\nexport type ModalSize = 'sm' | 'md' | 'lg' | 'xl' | 'full'\r\n\r\nexport interface ModalProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\r\n /** Whether the modal is open */\r\n isOpen: boolean\r\n /** Callback when modal should close */\r\n onClose: () => void\r\n /** Modal size */\r\n size?: ModalSize\r\n /** Modal title */\r\n title?: ReactNode\r\n /** Modal description */\r\n description?: ReactNode\r\n /** Whether to close on overlay click */\r\n closeOnOverlayClick?: boolean\r\n /** Whether to close on escape key */\r\n closeOnEscape?: boolean\r\n /** Whether to show close button */\r\n showCloseButton?: boolean\r\n /** Custom class name */\r\n className?: string\r\n /** Test ID */\r\n testId?: string\r\n /** Modal content */\r\n children?: ReactNode\r\n}\r\n\r\nconst sizeWidths: Record<ModalSize, string> = {\r\n sm: '400px',\r\n md: '500px',\r\n lg: '640px',\r\n xl: '800px',\r\n full: 'calc(100vw - 48px)',\r\n}\r\n\r\n/** Close icon */\r\nfunction CloseIcon() {\r\n return (\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M4 4L12 12M12 4L4 12\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n />\r\n </svg>\r\n )\r\n}\r\n\r\nexport const Modal = forwardRef<HTMLDivElement, ModalProps>(function Modal(\r\n {\r\n isOpen,\r\n onClose,\r\n size = 'md',\r\n title,\r\n description,\r\n closeOnOverlayClick = true,\r\n closeOnEscape = true,\r\n showCloseButton = true,\r\n className,\r\n style,\r\n testId,\r\n children,\r\n ...props\r\n },\r\n ref\r\n) {\r\n const modalRef = useRef<HTMLDivElement>(null)\r\n const previousActiveElement = useRef<HTMLElement | null>(null)\r\n\r\n // Focus trap and keyboard handling\r\n useEffect(() => {\r\n if (!isOpen) return\r\n\r\n previousActiveElement.current = document.activeElement as HTMLElement\r\n const modal = modalRef.current\r\n if (modal) {\r\n modal.focus()\r\n }\r\n\r\n const handleKeyDown = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape' && closeOnEscape) {\r\n onClose()\r\n return\r\n }\r\n\r\n if (e.key === 'Tab' && modal) {\r\n const focusableElements = modal.querySelectorAll<HTMLElement>(\r\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\r\n )\r\n const firstElement = focusableElements[0]\r\n const lastElement = focusableElements[focusableElements.length - 1]\r\n\r\n if (e.shiftKey && document.activeElement === firstElement) {\r\n e.preventDefault()\r\n lastElement?.focus()\r\n } else if (!e.shiftKey && document.activeElement === lastElement) {\r\n e.preventDefault()\r\n firstElement?.focus()\r\n }\r\n }\r\n }\r\n\r\n document.addEventListener('keydown', handleKeyDown)\r\n document.body.style.overflow = 'hidden'\r\n\r\n return () => {\r\n document.removeEventListener('keydown', handleKeyDown)\r\n document.body.style.overflow = ''\r\n previousActiveElement.current?.focus()\r\n }\r\n }, [isOpen, closeOnEscape, onClose])\r\n\r\n const handleOverlayClick = useCallback(\r\n (e: React.MouseEvent) => {\r\n if (e.target === e.currentTarget && closeOnOverlayClick) {\r\n onClose()\r\n }\r\n },\r\n [closeOnOverlayClick, onClose]\r\n )\r\n\r\n if (!isOpen) return null\r\n\r\n const overlayStyle: CSSProperties = {\r\n position: 'fixed',\r\n inset: 0,\r\n zIndex: 'var(--brycks-z-modal)',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: 24,\r\n backgroundColor: 'var(--brycks-background-overlay)',\r\n backdropFilter: 'blur(4px)',\r\n animation: 'brycks-fade-in 200ms ease-out',\r\n }\r\n\r\n const modalStyle: CSSProperties = {\r\n position: 'relative',\r\n width: '100%',\r\n maxWidth: sizeWidths[size],\r\n maxHeight: size === 'full' ? 'calc(100vh - 48px)' : '85vh',\r\n backgroundColor: 'var(--brycks-background-elevated)',\r\n borderRadius: 'var(--brycks-radius-xl)',\r\n boxShadow: 'var(--brycks-shadow-2xl)',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n overflow: 'hidden',\r\n animation: 'brycks-scale-in 200ms cubic-bezier(0.34, 1.56, 0.64, 1)',\r\n outline: 'none',\r\n ...style,\r\n }\r\n\r\n const headerStyle: CSSProperties = {\r\n display: 'flex',\r\n alignItems: 'flex-start',\r\n justifyContent: 'space-between',\r\n padding: '20px 24px',\r\n borderBottom: '1px solid var(--brycks-border-muted)',\r\n }\r\n\r\n const titleContainerStyle: CSSProperties = {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: 4,\r\n }\r\n\r\n const titleStyle: CSSProperties = {\r\n fontSize: 18,\r\n fontWeight: 600,\r\n color: 'var(--brycks-foreground-default)',\r\n margin: 0,\r\n lineHeight: 1.3,\r\n }\r\n\r\n const descriptionStyle: CSSProperties = {\r\n fontSize: 14,\r\n color: 'var(--brycks-foreground-muted)',\r\n margin: 0,\r\n }\r\n\r\n const closeButtonStyle: CSSProperties = {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n width: 32,\r\n height: 32,\r\n borderRadius: 'var(--brycks-radius-md)',\r\n color: 'var(--brycks-foreground-muted)',\r\n transition: 'all 150ms ease-out',\r\n marginLeft: 12,\r\n flexShrink: 0,\r\n }\r\n\r\n const contentStyle: CSSProperties = {\r\n flex: 1,\r\n overflow: 'auto',\r\n padding: 24,\r\n }\r\n\r\n const modalContent = (\r\n <>\r\n <style>\r\n {`\r\n @keyframes brycks-fade-in {\r\n from { opacity: 0; }\r\n to { opacity: 1; }\r\n }\r\n @keyframes brycks-scale-in {\r\n from { opacity: 0; transform: scale(0.95); }\r\n to { opacity: 1; transform: scale(1); }\r\n }\r\n `}\r\n </style>\r\n <div\r\n className=\"brycks-modal-overlay\"\r\n style={overlayStyle}\r\n onClick={handleOverlayClick}\r\n aria-hidden=\"true\"\r\n >\r\n <div\r\n ref={(node) => {\r\n (modalRef as React.MutableRefObject<HTMLDivElement | null>).current = node\r\n if (typeof ref === 'function') ref(node)\r\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node\r\n }}\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n aria-labelledby={title ? 'brycks-modal-title' : undefined}\r\n aria-describedby={description ? 'brycks-modal-description' : undefined}\r\n className={cx('brycks-modal', `brycks-modal--${size}`, className)}\r\n style={modalStyle}\r\n tabIndex={-1}\r\n data-testid={testId}\r\n {...props}\r\n >\r\n {(title || showCloseButton) && (\r\n <div className=\"brycks-modal-header\" style={headerStyle}>\r\n <div style={titleContainerStyle}>\r\n {title && (\r\n <h2 id=\"brycks-modal-title\" style={titleStyle}>\r\n {title}\r\n </h2>\r\n )}\r\n {description && (\r\n <p id=\"brycks-modal-description\" style={descriptionStyle}>\r\n {description}\r\n </p>\r\n )}\r\n </div>\r\n {showCloseButton && (\r\n <button\r\n type=\"button\"\r\n className=\"brycks-modal-close\"\r\n style={closeButtonStyle}\r\n onClick={onClose}\r\n aria-label=\"Close modal\"\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\r\n e.currentTarget.style.color = 'var(--brycks-foreground-default)'\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.backgroundColor = 'transparent'\r\n e.currentTarget.style.color = 'var(--brycks-foreground-muted)'\r\n }}\r\n >\r\n <CloseIcon />\r\n </button>\r\n )}\r\n </div>\r\n )}\r\n\r\n <div className=\"brycks-modal-content\" style={contentStyle}>\r\n {children}\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n )\r\n\r\n return createPortal(modalContent, document.body)\r\n})\r\n\r\nModal.displayName = 'Modal'\r\n","/**\r\n * Alert Component\r\n *\r\n * Contextual feedback message for user actions and states.\r\n * Clean design with subtle color coding and optional icons.\r\n */\r\n\r\nimport React, {\r\n forwardRef,\r\n type CSSProperties,\r\n type ReactNode,\r\n type HTMLAttributes,\r\n} from 'react'\r\nimport { cx } from '../../../utils/styles'\r\n\r\nexport type AlertIntent = 'info' | 'success' | 'warning' | 'error'\r\nexport type AlertVariant = 'subtle' | 'solid' | 'outline'\r\n\r\nexport interface AlertProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\r\n /** Visual intent/status */\r\n intent?: AlertIntent\r\n /** Visual variant */\r\n variant?: AlertVariant\r\n /** Alert title */\r\n title?: ReactNode\r\n /** Custom icon */\r\n icon?: ReactNode\r\n /** Whether to show default icon */\r\n showIcon?: boolean\r\n /** Action element (button, link) */\r\n action?: ReactNode\r\n /** Whether alert can be dismissed */\r\n isDismissible?: boolean\r\n /** Callback when dismissed */\r\n onDismiss?: () => void\r\n /** Custom class name */\r\n className?: string\r\n /** Test ID */\r\n testId?: string\r\n /** Alert content */\r\n children?: ReactNode\r\n}\r\n\r\nconst intentConfig: Record<AlertIntent, { icon: React.JSX.Element; colors: Record<AlertVariant, CSSProperties> }> = {\r\n info: {\r\n icon: (\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <circle cx=\"9\" cy=\"9\" r=\"7.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\r\n <path d=\"M9 8V12\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\r\n <circle cx=\"9\" cy=\"5.5\" r=\"0.75\" fill=\"currentColor\" />\r\n </svg>\r\n ),\r\n colors: {\r\n subtle: {\r\n backgroundColor: 'var(--brycks-info-muted)',\r\n color: 'var(--brycks-info-default)',\r\n borderColor: 'transparent',\r\n },\r\n solid: {\r\n backgroundColor: 'var(--brycks-info-default)',\r\n color: 'var(--brycks-info-foreground)',\r\n borderColor: 'transparent',\r\n },\r\n outline: {\r\n backgroundColor: 'transparent',\r\n color: 'var(--brycks-info-default)',\r\n borderColor: 'var(--brycks-info-default)',\r\n },\r\n },\r\n },\r\n success: {\r\n icon: (\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <circle cx=\"9\" cy=\"9\" r=\"7.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\r\n <path d=\"M6 9L8 11L12 7\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\r\n </svg>\r\n ),\r\n colors: {\r\n subtle: {\r\n backgroundColor: 'var(--brycks-success-muted)',\r\n color: 'var(--brycks-success-default)',\r\n borderColor: 'transparent',\r\n },\r\n solid: {\r\n backgroundColor: 'var(--brycks-success-default)',\r\n color: 'var(--brycks-success-foreground)',\r\n borderColor: 'transparent',\r\n },\r\n outline: {\r\n backgroundColor: 'transparent',\r\n color: 'var(--brycks-success-default)',\r\n borderColor: 'var(--brycks-success-default)',\r\n },\r\n },\r\n },\r\n warning: {\r\n icon: (\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path d=\"M9 2L16.5 15H1.5L9 2Z\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinejoin=\"round\" />\r\n <path d=\"M9 7V10\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\r\n <circle cx=\"9\" cy=\"12.5\" r=\"0.75\" fill=\"currentColor\" />\r\n </svg>\r\n ),\r\n colors: {\r\n subtle: {\r\n backgroundColor: 'var(--brycks-warning-muted)',\r\n color: 'var(--brycks-warning-default)',\r\n borderColor: 'transparent',\r\n },\r\n solid: {\r\n backgroundColor: 'var(--brycks-warning-default)',\r\n color: 'var(--brycks-warning-foreground)',\r\n borderColor: 'transparent',\r\n },\r\n outline: {\r\n backgroundColor: 'transparent',\r\n color: 'var(--brycks-warning-default)',\r\n borderColor: 'var(--brycks-warning-default)',\r\n },\r\n },\r\n },\r\n error: {\r\n icon: (\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <circle cx=\"9\" cy=\"9\" r=\"7.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\r\n <path d=\"M6.5 6.5L11.5 11.5M11.5 6.5L6.5 11.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\r\n </svg>\r\n ),\r\n colors: {\r\n subtle: {\r\n backgroundColor: 'var(--brycks-error-muted)',\r\n color: 'var(--brycks-error-default)',\r\n borderColor: 'transparent',\r\n },\r\n solid: {\r\n backgroundColor: 'var(--brycks-error-default)',\r\n color: 'var(--brycks-error-foreground)',\r\n borderColor: 'transparent',\r\n },\r\n outline: {\r\n backgroundColor: 'transparent',\r\n color: 'var(--brycks-error-default)',\r\n borderColor: 'var(--brycks-error-default)',\r\n },\r\n },\r\n },\r\n}\r\n\r\nexport const Alert = forwardRef<HTMLDivElement, AlertProps>(function Alert(\r\n {\r\n intent = 'info',\r\n variant = 'subtle',\r\n title,\r\n icon,\r\n showIcon = true,\r\n action,\r\n isDismissible,\r\n onDismiss,\r\n className,\r\n style,\r\n testId,\r\n children,\r\n ...props\r\n },\r\n ref\r\n) {\r\n const config = intentConfig[intent]\r\n const variantColors = config.colors[variant]\r\n\r\n const alertStyle: CSSProperties = {\r\n display: 'flex',\r\n alignItems: 'flex-start',\r\n gap: 12,\r\n padding: '12px 16px',\r\n borderRadius: 'var(--brycks-radius-default)',\r\n border: `1px solid ${variantColors.borderColor}`,\r\n backgroundColor: variantColors.backgroundColor,\r\n color: variant === 'solid' ? variantColors.color : 'var(--brycks-foreground-default)',\r\n ...style,\r\n }\r\n\r\n const iconStyle: CSSProperties = {\r\n flexShrink: 0,\r\n color: variantColors.color,\r\n marginTop: 1,\r\n }\r\n\r\n const contentStyle: CSSProperties = {\r\n flex: 1,\r\n minWidth: 0,\r\n }\r\n\r\n const titleStyle: CSSProperties = {\r\n fontSize: 14,\r\n fontWeight: 600,\r\n marginBottom: children ? 4 : 0,\r\n color: variant === 'solid' ? variantColors.color : variantColors.color,\r\n }\r\n\r\n const descriptionStyle: CSSProperties = {\r\n fontSize: 14,\r\n lineHeight: 1.5,\r\n color: variant === 'solid' ? variantColors.color : 'var(--brycks-foreground-muted)',\r\n }\r\n\r\n const actionsStyle: CSSProperties = {\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: 8,\r\n flexShrink: 0,\r\n }\r\n\r\n const dismissButtonStyle: CSSProperties = {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n width: 24,\r\n height: 24,\r\n borderRadius: 'var(--brycks-radius-sm)',\r\n color: variant === 'solid' ? variantColors.color : 'var(--brycks-foreground-muted)',\r\n transition: 'all 150ms ease-out',\r\n opacity: 0.7,\r\n }\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n role=\"alert\"\r\n className={cx(\r\n 'brycks-alert',\r\n `brycks-alert--${intent}`,\r\n `brycks-alert--${variant}`,\r\n className\r\n )}\r\n style={alertStyle}\r\n data-testid={testId}\r\n {...props}\r\n >\r\n {showIcon && (\r\n <span className=\"brycks-alert-icon\" style={iconStyle}>\r\n {icon ?? config.icon}\r\n </span>\r\n )}\r\n\r\n <div className=\"brycks-alert-content\" style={contentStyle}>\r\n {title && <div className=\"brycks-alert-title\" style={titleStyle}>{title}</div>}\r\n {children && <div className=\"brycks-alert-description\" style={descriptionStyle}>{children}</div>}\r\n </div>\r\n\r\n {(action || isDismissible) && (\r\n <div className=\"brycks-alert-actions\" style={actionsStyle}>\r\n {action}\r\n {isDismissible && (\r\n <button\r\n type=\"button\"\r\n className=\"brycks-alert-dismiss\"\r\n style={dismissButtonStyle}\r\n onClick={onDismiss}\r\n aria-label=\"Dismiss alert\"\r\n onMouseEnter={(e) => { e.currentTarget.style.opacity = '1' }}\r\n onMouseLeave={(e) => { e.currentTarget.style.opacity = '0.7' }}\r\n >\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\r\n <path d=\"M3 3L11 11M11 3L3 11\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\r\n </svg>\r\n </button>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n )\r\n})\r\n\r\nAlert.displayName = 'Alert'\r\n","/**\r\n * Tooltip Component\r\n *\r\n * Lightweight tooltip for displaying additional information on hover.\r\n * Clean animation with proper positioning.\r\n */\r\n\r\nimport {\r\n forwardRef,\r\n useState,\r\n useRef,\r\n useEffect,\r\n useCallback,\r\n type CSSProperties,\r\n type ReactNode,\r\n type HTMLAttributes,\r\n} from 'react'\r\nimport { createPortal } from 'react-dom'\r\nimport { cx } from '../../../utils/styles'\r\n\r\nexport type TooltipPlacement = 'top' | 'bottom' | 'left' | 'right'\r\n\r\nexport interface TooltipProps extends Omit<HTMLAttributes<HTMLDivElement>, 'content'> {\r\n /** Tooltip content */\r\n content: ReactNode\r\n /** Placement relative to trigger */\r\n placement?: TooltipPlacement\r\n /** Delay before showing (ms) */\r\n delay?: number\r\n /** Whether tooltip is disabled */\r\n isDisabled?: boolean\r\n /** Custom class name */\r\n className?: string\r\n /** Test ID */\r\n testId?: string\r\n /** Trigger element */\r\n children: ReactNode\r\n}\r\n\r\nexport const Tooltip = forwardRef<HTMLDivElement, TooltipProps>(function Tooltip(\r\n {\r\n content,\r\n placement = 'top',\r\n delay = 200,\r\n isDisabled,\r\n className,\r\n testId,\r\n children,\r\n ...props\r\n },\r\n ref\r\n) {\r\n const [isVisible, setIsVisible] = useState(false)\r\n const [position, setPosition] = useState({ top: 0, left: 0 })\r\n const triggerRef = useRef<HTMLDivElement>(null)\r\n const tooltipRef = useRef<HTMLDivElement>(null)\r\n const timeoutRef = useRef<ReturnType<typeof setTimeout>>(null)\r\n\r\n const calculatePosition = useCallback(() => {\r\n if (!triggerRef.current || !tooltipRef.current) return\r\n\r\n const triggerRect = triggerRef.current.getBoundingClientRect()\r\n const tooltipRect = tooltipRef.current.getBoundingClientRect()\r\n const gap = 8\r\n\r\n let top = 0\r\n let left = 0\r\n\r\n switch (placement) {\r\n case 'top':\r\n top = triggerRect.top - tooltipRect.height - gap\r\n left = triggerRect.left + (triggerRect.width - tooltipRect.width) / 2\r\n break\r\n case 'bottom':\r\n top = triggerRect.bottom + gap\r\n left = triggerRect.left + (triggerRect.width - tooltipRect.width) / 2\r\n break\r\n case 'left':\r\n top = triggerRect.top + (triggerRect.height - tooltipRect.height) / 2\r\n left = triggerRect.left - tooltipRect.width - gap\r\n break\r\n case 'right':\r\n top = triggerRect.top + (triggerRect.height - tooltipRect.height) / 2\r\n left = triggerRect.right + gap\r\n break\r\n }\r\n\r\n // Keep tooltip within viewport\r\n const padding = 8\r\n left = Math.max(padding, Math.min(left, window.innerWidth - tooltipRect.width - padding))\r\n top = Math.max(padding, Math.min(top, window.innerHeight - tooltipRect.height - padding))\r\n\r\n setPosition({ top, left })\r\n }, [placement])\r\n\r\n useEffect(() => {\r\n if (isVisible) {\r\n calculatePosition()\r\n window.addEventListener('scroll', calculatePosition, true)\r\n window.addEventListener('resize', calculatePosition)\r\n }\r\n\r\n return () => {\r\n window.removeEventListener('scroll', calculatePosition, true)\r\n window.removeEventListener('resize', calculatePosition)\r\n }\r\n }, [isVisible, calculatePosition])\r\n\r\n const showTooltip = () => {\r\n if (isDisabled) return\r\n timeoutRef.current = setTimeout(() => {\r\n setIsVisible(true)\r\n }, delay)\r\n }\r\n\r\n const hideTooltip = () => {\r\n if (timeoutRef.current) {\r\n clearTimeout(timeoutRef.current)\r\n }\r\n setIsVisible(false)\r\n }\r\n\r\n useEffect(() => {\r\n return () => {\r\n if (timeoutRef.current) {\r\n clearTimeout(timeoutRef.current)\r\n }\r\n }\r\n }, [])\r\n\r\n const triggerStyle: CSSProperties = {\r\n display: 'inline-flex',\r\n }\r\n\r\n const tooltipStyle: CSSProperties = {\r\n position: 'fixed',\r\n top: position.top,\r\n left: position.left,\r\n zIndex: 'var(--brycks-z-tooltip)',\r\n maxWidth: 300,\r\n padding: '6px 10px',\r\n fontSize: 12,\r\n fontWeight: 500,\r\n lineHeight: 1.4,\r\n color: 'var(--brycks-foreground-inverse)',\r\n backgroundColor: 'var(--brycks-background-inverse)',\r\n borderRadius: 'var(--brycks-radius-md)',\r\n boxShadow: 'var(--brycks-shadow-lg)',\r\n pointerEvents: 'none',\r\n animation: 'brycks-tooltip-in 150ms ease-out',\r\n }\r\n\r\n const arrowStyle: CSSProperties = {\r\n position: 'absolute',\r\n width: 8,\r\n height: 8,\r\n backgroundColor: 'var(--brycks-background-inverse)',\r\n transform: 'rotate(45deg)',\r\n ...(placement === 'top' && { bottom: -4, left: '50%', marginLeft: -4 }),\r\n ...(placement === 'bottom' && { top: -4, left: '50%', marginLeft: -4 }),\r\n ...(placement === 'left' && { right: -4, top: '50%', marginTop: -4 }),\r\n ...(placement === 'right' && { left: -4, top: '50%', marginTop: -4 }),\r\n }\r\n\r\n return (\r\n <>\r\n <div\r\n ref={triggerRef}\r\n style={triggerStyle}\r\n onMouseEnter={showTooltip}\r\n onMouseLeave={hideTooltip}\r\n onFocus={showTooltip}\r\n onBlur={hideTooltip}\r\n >\r\n {children}\r\n </div>\r\n\r\n {isVisible &&\r\n createPortal(\r\n <>\r\n <style>\r\n {`\r\n @keyframes brycks-tooltip-in {\r\n from { opacity: 0; transform: scale(0.95); }\r\n to { opacity: 1; transform: scale(1); }\r\n }\r\n `}\r\n </style>\r\n <div\r\n ref={(node) => {\r\n (tooltipRef as React.MutableRefObject<HTMLDivElement | null>).current = node\r\n if (typeof ref === 'function') ref(node)\r\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node\r\n }}\r\n role=\"tooltip\"\r\n className={cx('brycks-tooltip', `brycks-tooltip--${placement}`, className)}\r\n style={tooltipStyle}\r\n data-testid={testId}\r\n {...props}\r\n >\r\n {content}\r\n <span style={arrowStyle} />\r\n </div>\r\n </>,\r\n document.body\r\n )}\r\n </>\r\n )\r\n})\r\n\r\nTooltip.displayName = 'Tooltip'\r\n","/**\n * Toast Component\n *\n * A notification toast with auto-dismiss and action support.\n * Includes a toast container for managing multiple toasts.\n */\n\nimport {\n forwardRef,\n useState,\n useEffect,\n useCallback,\n createContext,\n useContext,\n type CSSProperties,\n type ReactNode,\n type HTMLAttributes,\n} from 'react'\nimport { createPortal } from 'react-dom'\nimport { cx } from '../../../utils/styles'\n\nexport type ToastIntent = 'info' | 'success' | 'warning' | 'error'\nexport type ToastPosition = 'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right'\n\nexport interface ToastProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n /** Toast intent/type */\n intent?: ToastIntent\n /** Toast title */\n title?: ReactNode\n /** Toast description */\n description?: ReactNode\n /** Whether the toast is visible */\n isOpen?: boolean\n /** Duration in ms before auto-dismiss (0 = no auto-dismiss) */\n duration?: number\n /** Callback when toast should close */\n onClose?: () => void\n /** Whether to show close button */\n showCloseButton?: boolean\n /** Action button */\n action?: ReactNode\n /** Custom icon */\n icon?: ReactNode\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst intentConfig: Record<ToastIntent, { bg: string; border: string; icon: string }> = {\n info: {\n bg: 'var(--brycks-info-50)',\n border: 'var(--brycks-info-200)',\n icon: 'var(--brycks-info-default)',\n },\n success: {\n bg: 'var(--brycks-success-50)',\n border: 'var(--brycks-success-200)',\n icon: 'var(--brycks-success-default)',\n },\n warning: {\n bg: 'var(--brycks-warning-50)',\n border: 'var(--brycks-warning-200)',\n icon: 'var(--brycks-warning-default)',\n },\n error: {\n bg: 'var(--brycks-error-50)',\n border: 'var(--brycks-error-200)',\n icon: 'var(--brycks-error-default)',\n },\n}\n\nfunction ToastIcon({ intent }: { intent: ToastIntent }) {\n const paths: Record<ToastIntent, string> = {\n info: 'M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z',\n success: 'M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z',\n warning: 'M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z',\n error: 'M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z',\n }\n\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d={paths[intent]} />\n </svg>\n )\n}\n\nfunction CloseIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M4 4l8 8M12 4l-8 8\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n )\n}\n\nexport const Toast = forwardRef<HTMLDivElement, ToastProps>(function Toast(\n {\n intent = 'info',\n title,\n description,\n isOpen = true,\n duration = 5000,\n onClose,\n showCloseButton = true,\n action,\n icon,\n className,\n style,\n testId,\n ...props\n },\n ref\n) {\n const [isVisible, setIsVisible] = useState(isOpen)\n const [isExiting, setIsExiting] = useState(false)\n\n useEffect(() => {\n if (isOpen) {\n setIsVisible(true)\n setIsExiting(false)\n } else {\n setIsExiting(true)\n const timer = setTimeout(() => setIsVisible(false), 200)\n return () => clearTimeout(timer)\n }\n }, [isOpen])\n\n useEffect(() => {\n if (!isOpen || duration === 0) return\n\n const timer = setTimeout(() => {\n onClose?.()\n }, duration)\n\n return () => clearTimeout(timer)\n }, [isOpen, duration, onClose])\n\n if (!isVisible) return null\n\n const config = intentConfig[intent]\n\n const toastStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'flex-start',\n gap: 12,\n padding: '12px 16px',\n backgroundColor: config.bg,\n border: `1px solid ${config.border}`,\n borderRadius: 'var(--brycks-radius-lg)',\n boxShadow: 'var(--brycks-shadow-lg)',\n maxWidth: 400,\n animation: isExiting\n ? 'brycks-toast-out 200ms ease-in forwards'\n : 'brycks-toast-in 200ms ease-out',\n ...style,\n }\n\n const iconStyle: CSSProperties = {\n color: config.icon,\n flexShrink: 0,\n marginTop: 2,\n }\n\n const contentStyle: CSSProperties = {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n gap: 4,\n }\n\n const titleStyle: CSSProperties = {\n fontSize: 14,\n fontWeight: 600,\n color: 'var(--brycks-foreground-default)',\n lineHeight: 1.4,\n }\n\n const descriptionStyle: CSSProperties = {\n fontSize: 13,\n color: 'var(--brycks-foreground-muted)',\n lineHeight: 1.4,\n }\n\n const closeButtonStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 24,\n height: 24,\n borderRadius: 'var(--brycks-radius-sm)',\n color: 'var(--brycks-foreground-muted)',\n transition: 'all 150ms ease-out',\n flexShrink: 0,\n marginLeft: 'auto',\n }\n\n return (\n <>\n <style>\n {`\n @keyframes brycks-toast-in {\n from { opacity: 0; transform: translateY(-8px) scale(0.95); }\n to { opacity: 1; transform: translateY(0) scale(1); }\n }\n @keyframes brycks-toast-out {\n from { opacity: 1; transform: translateY(0) scale(1); }\n to { opacity: 0; transform: translateY(-8px) scale(0.95); }\n }\n `}\n </style>\n <div\n ref={ref}\n role=\"alert\"\n aria-live=\"polite\"\n className={cx('brycks-toast', `brycks-toast--${intent}`, className)}\n style={toastStyle}\n data-testid={testId}\n {...props}\n >\n <span style={iconStyle}>\n {icon || <ToastIcon intent={intent} />}\n </span>\n <div style={contentStyle}>\n {title && <span style={titleStyle}>{title}</span>}\n {description && <span style={descriptionStyle}>{description}</span>}\n {action && <div style={{ marginTop: 8 }}>{action}</div>}\n </div>\n {showCloseButton && (\n <button\n type=\"button\"\n style={closeButtonStyle}\n onClick={onClose}\n aria-label=\"Close toast\"\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent'\n }}\n >\n <CloseIcon />\n </button>\n )}\n </div>\n </>\n )\n})\n\nToast.displayName = 'Toast'\n\n// Toast Container and Context\ninterface ToastItem {\n id: string\n props: Omit<ToastProps, 'isOpen' | 'onClose'>\n}\n\ninterface ToastContextValue {\n toasts: ToastItem[]\n addToast: (props: Omit<ToastProps, 'isOpen' | 'onClose'>) => string\n removeToast: (id: string) => void\n removeAll: () => void\n}\n\nconst ToastContext = createContext<ToastContextValue | null>(null)\n\nexport function useToast() {\n const context = useContext(ToastContext)\n if (!context) {\n throw new Error('useToast must be used within a ToastProvider')\n }\n return context\n}\n\nexport interface ToastProviderProps {\n children: ReactNode\n position?: ToastPosition\n maxToasts?: number\n}\n\nconst positionStyles: Record<ToastPosition, CSSProperties> = {\n 'top-left': { top: 16, left: 16 },\n 'top-center': { top: 16, left: '50%', transform: 'translateX(-50%)' },\n 'top-right': { top: 16, right: 16 },\n 'bottom-left': { bottom: 16, left: 16 },\n 'bottom-center': { bottom: 16, left: '50%', transform: 'translateX(-50%)' },\n 'bottom-right': { bottom: 16, right: 16 },\n}\n\nlet toastCounter = 0\n\nexport function ToastProvider({\n children,\n position = 'top-right',\n maxToasts = 5,\n}: ToastProviderProps) {\n const [toasts, setToasts] = useState<ToastItem[]>([])\n const [mounted, setMounted] = useState(false)\n\n useEffect(() => {\n setMounted(true)\n }, [])\n\n const addToast = useCallback(\n (props: Omit<ToastProps, 'isOpen' | 'onClose'>) => {\n const id = `toast-${++toastCounter}`\n setToasts((prev) => {\n const newToasts = [...prev, { id, props }]\n if (newToasts.length > maxToasts) {\n return newToasts.slice(-maxToasts)\n }\n return newToasts\n })\n return id\n },\n [maxToasts]\n )\n\n const removeToast = useCallback((id: string) => {\n setToasts((prev) => prev.filter((t) => t.id !== id))\n }, [])\n\n const removeAll = useCallback(() => {\n setToasts([])\n }, [])\n\n const containerStyle: CSSProperties = {\n position: 'fixed',\n zIndex: 'var(--brycks-z-toast)' as unknown as number,\n display: 'flex',\n flexDirection: 'column',\n gap: 8,\n pointerEvents: 'none',\n ...positionStyles[position],\n }\n\n const toastWrapperStyle: CSSProperties = {\n pointerEvents: 'auto',\n }\n\n return (\n <ToastContext.Provider value={{ toasts, addToast, removeToast, removeAll }}>\n {children}\n {mounted &&\n createPortal(\n <div className=\"brycks-toast-container\" style={containerStyle}>\n {toasts.map(({ id, props }) => (\n <div key={id} style={toastWrapperStyle}>\n <Toast {...props} isOpen onClose={() => removeToast(id)} />\n </div>\n ))}\n </div>,\n document.body\n )}\n </ToastContext.Provider>\n )\n}\n","/**\n * Drawer Component\n *\n * A slide-out panel that can appear from any edge of the screen.\n * Supports focus trapping and keyboard navigation.\n */\n\nimport {\n forwardRef,\n useEffect,\n useRef,\n useCallback,\n type CSSProperties,\n type ReactNode,\n type HTMLAttributes,\n} from 'react'\nimport { createPortal } from 'react-dom'\nimport { cx } from '../../../utils/styles'\n\nexport type DrawerPlacement = 'left' | 'right' | 'top' | 'bottom'\nexport type DrawerSize = 'sm' | 'md' | 'lg' | 'xl' | 'full'\n\nexport interface DrawerProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n /** Whether the drawer is open */\n isOpen: boolean\n /** Callback when drawer should close */\n onClose: () => void\n /** Drawer placement */\n placement?: DrawerPlacement\n /** Drawer size */\n size?: DrawerSize\n /** Drawer title */\n title?: ReactNode\n /** Whether to close on overlay click */\n closeOnOverlayClick?: boolean\n /** Whether to close on escape key */\n closeOnEscape?: boolean\n /** Whether to show close button */\n showCloseButton?: boolean\n /** Whether to show overlay */\n showOverlay?: boolean\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst sizeMap: Record<DrawerSize, string> = {\n sm: '320px',\n md: '400px',\n lg: '560px',\n xl: '720px',\n full: '100%',\n}\n\nfunction CloseIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M4 4l8 8M12 4l-8 8\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n )\n}\n\nexport const Drawer = forwardRef<HTMLDivElement, DrawerProps>(function Drawer(\n {\n isOpen,\n onClose,\n placement = 'right',\n size = 'md',\n title,\n closeOnOverlayClick = true,\n closeOnEscape = true,\n showCloseButton = true,\n showOverlay = true,\n className,\n style,\n children,\n testId,\n ...props\n },\n ref\n) {\n const drawerRef = useRef<HTMLDivElement>(null)\n const previousActiveElement = useRef<HTMLElement | null>(null)\n\n // Focus trap and keyboard handling\n useEffect(() => {\n if (!isOpen) return\n\n previousActiveElement.current = document.activeElement as HTMLElement\n const drawer = drawerRef.current\n if (drawer) {\n drawer.focus()\n }\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && closeOnEscape) {\n onClose()\n return\n }\n\n if (e.key === 'Tab' && drawer) {\n const focusableElements = drawer.querySelectorAll<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n )\n const firstElement = focusableElements[0]\n const lastElement = focusableElements[focusableElements.length - 1]\n\n if (e.shiftKey && document.activeElement === firstElement) {\n e.preventDefault()\n lastElement?.focus()\n } else if (!e.shiftKey && document.activeElement === lastElement) {\n e.preventDefault()\n firstElement?.focus()\n }\n }\n }\n\n document.addEventListener('keydown', handleKeyDown)\n document.body.style.overflow = 'hidden'\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown)\n document.body.style.overflow = ''\n previousActiveElement.current?.focus()\n }\n }, [isOpen, closeOnEscape, onClose])\n\n const handleOverlayClick = useCallback(\n (e: React.MouseEvent) => {\n if (e.target === e.currentTarget && closeOnOverlayClick) {\n onClose()\n }\n },\n [closeOnOverlayClick, onClose]\n )\n\n if (!isOpen) return null\n\n const isHorizontal = placement === 'left' || placement === 'right'\n const drawerSize = sizeMap[size]\n\n const overlayStyle: CSSProperties = {\n position: 'fixed',\n inset: 0,\n zIndex: 'var(--brycks-z-drawer)' as unknown as number,\n display: 'flex',\n backgroundColor: showOverlay ? 'var(--brycks-background-overlay)' : 'transparent',\n animation: 'brycks-drawer-overlay-in 200ms ease-out',\n }\n\n const getPositionStyles = (): CSSProperties => {\n const base: CSSProperties = {\n position: 'absolute',\n backgroundColor: 'var(--brycks-background-elevated)',\n boxShadow: 'var(--brycks-shadow-2xl)',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n }\n\n if (isHorizontal) {\n return {\n ...base,\n top: 0,\n bottom: 0,\n [placement]: 0,\n width: drawerSize,\n maxWidth: '100vw',\n }\n }\n\n return {\n ...base,\n left: 0,\n right: 0,\n [placement]: 0,\n height: drawerSize,\n maxHeight: '100vh',\n }\n }\n\n const drawerStyle: CSSProperties = {\n ...getPositionStyles(),\n animation: `brycks-drawer-${placement}-in 250ms cubic-bezier(0.32, 0.72, 0, 1)`,\n outline: 'none',\n ...style,\n }\n\n const headerStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '16px 20px',\n borderBottom: '1px solid var(--brycks-border-muted)',\n flexShrink: 0,\n }\n\n const titleStyle: CSSProperties = {\n fontSize: 18,\n fontWeight: 600,\n color: 'var(--brycks-foreground-default)',\n margin: 0,\n }\n\n const closeButtonStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 32,\n height: 32,\n borderRadius: 'var(--brycks-radius-md)',\n color: 'var(--brycks-foreground-muted)',\n transition: 'all 150ms ease-out',\n }\n\n const contentStyle: CSSProperties = {\n flex: 1,\n overflow: 'auto',\n padding: 20,\n }\n\n const drawerContent = (\n <>\n <style>\n {`\n @keyframes brycks-drawer-overlay-in {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n @keyframes brycks-drawer-left-in {\n from { transform: translateX(-100%); }\n to { transform: translateX(0); }\n }\n @keyframes brycks-drawer-right-in {\n from { transform: translateX(100%); }\n to { transform: translateX(0); }\n }\n @keyframes brycks-drawer-top-in {\n from { transform: translateY(-100%); }\n to { transform: translateY(0); }\n }\n @keyframes brycks-drawer-bottom-in {\n from { transform: translateY(100%); }\n to { transform: translateY(0); }\n }\n `}\n </style>\n <div\n className=\"brycks-drawer-overlay\"\n style={overlayStyle}\n onClick={handleOverlayClick}\n aria-hidden=\"true\"\n >\n <div\n ref={(node) => {\n (drawerRef as React.MutableRefObject<HTMLDivElement | null>).current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) ref.current = node\n }}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? 'brycks-drawer-title' : undefined}\n className={cx('brycks-drawer', `brycks-drawer--${placement}`, `brycks-drawer--${size}`, className)}\n style={drawerStyle}\n tabIndex={-1}\n data-testid={testId}\n {...props}\n >\n {(title || showCloseButton) && (\n <div className=\"brycks-drawer-header\" style={headerStyle}>\n {title && <h2 id=\"brycks-drawer-title\" style={titleStyle}>{title}</h2>}\n {showCloseButton && (\n <button\n type=\"button\"\n className=\"brycks-drawer-close\"\n style={closeButtonStyle}\n onClick={onClose}\n aria-label=\"Close drawer\"\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n e.currentTarget.style.color = 'var(--brycks-foreground-default)'\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent'\n e.currentTarget.style.color = 'var(--brycks-foreground-muted)'\n }}\n >\n <CloseIcon />\n </button>\n )}\n </div>\n )}\n <div className=\"brycks-drawer-content\" style={contentStyle}>\n {children}\n </div>\n </div>\n </div>\n </>\n )\n\n return createPortal(drawerContent, document.body)\n})\n\nDrawer.displayName = 'Drawer'\n","/**\n * useClickOutside Hook\n *\n * Detects clicks outside of a referenced element.\n * Useful for closing dropdowns, modals, and popovers.\n */\n\nimport { useEffect, useRef, type RefObject } from 'react'\n\nexport interface UseClickOutsideOptions {\n /** Whether the listener is active */\n enabled?: boolean\n /** Event type to listen for */\n eventType?: 'mousedown' | 'mouseup' | 'click'\n}\n\nexport function useClickOutside<T extends HTMLElement = HTMLElement>(\n handler: (event: MouseEvent | TouchEvent) => void,\n options: UseClickOutsideOptions = {}\n): RefObject<T | null> {\n const { enabled = true, eventType = 'mousedown' } = options\n const ref = useRef<T>(null)\n\n useEffect(() => {\n if (!enabled) return\n\n const listener = (event: MouseEvent | TouchEvent) => {\n const el = ref.current\n if (!el || el.contains(event.target as Node)) {\n return\n }\n handler(event)\n }\n\n document.addEventListener(eventType, listener)\n document.addEventListener('touchstart', listener)\n\n return () => {\n document.removeEventListener(eventType, listener)\n document.removeEventListener('touchstart', listener)\n }\n }, [handler, enabled, eventType])\n\n return ref\n}\n","/**\n * Popover Component\n *\n * A floating content panel that appears relative to a trigger element.\n * Supports different placements and can be triggered by click or hover.\n */\n\nimport React, {\n forwardRef,\n useState,\n useEffect,\n useRef,\n useCallback,\n cloneElement,\n type CSSProperties,\n type ReactNode,\n type ReactElement,\n type HTMLAttributes,\n} from 'react'\nimport { createPortal } from 'react-dom'\nimport { cx } from '../../../utils/styles'\nimport { useClickOutside } from '../../../hooks/useClickOutside'\n\nexport type PopoverPlacement =\n | 'top'\n | 'top-start'\n | 'top-end'\n | 'bottom'\n | 'bottom-start'\n | 'bottom-end'\n | 'left'\n | 'left-start'\n | 'left-end'\n | 'right'\n | 'right-start'\n | 'right-end'\n\nexport type PopoverTrigger = 'click' | 'hover'\n\nexport interface PopoverProps extends Omit<HTMLAttributes<HTMLDivElement>, 'content'> {\n /** Popover content */\n content: ReactNode\n /** Trigger element */\n children: ReactElement\n /** Placement relative to trigger */\n placement?: PopoverPlacement\n /** How to trigger the popover */\n trigger?: PopoverTrigger\n /** Whether the popover is open (controlled) */\n isOpen?: boolean\n /** Default open state (uncontrolled) */\n defaultOpen?: boolean\n /** Callback when open state changes */\n onOpenChange?: (isOpen: boolean) => void\n /** Offset from trigger in pixels */\n offset?: number\n /** Delay before showing (hover trigger) */\n openDelay?: number\n /** Delay before hiding (hover trigger) */\n closeDelay?: number\n /** Whether to close on outside click */\n closeOnOutsideClick?: boolean\n /** Whether to show arrow */\n showArrow?: boolean\n /** Custom class name for content */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nexport const Popover = forwardRef<HTMLDivElement, PopoverProps>(function Popover(\n {\n content,\n children,\n placement = 'bottom',\n trigger = 'click',\n isOpen: controlledIsOpen,\n defaultOpen = false,\n onOpenChange,\n offset = 8,\n openDelay = 200,\n closeDelay = 200,\n closeOnOutsideClick = true,\n showArrow = true,\n className,\n style,\n testId,\n ...props\n },\n ref\n) {\n const [internalIsOpen, setInternalIsOpen] = useState(defaultOpen)\n const [position, setPosition] = useState({ top: 0, left: 0 })\n const [mounted, setMounted] = useState(false)\n const triggerRef = useRef<HTMLElement>(null)\n const contentRef = useRef<HTMLDivElement>(null)\n const openTimeoutRef = useRef<ReturnType<typeof setTimeout>>(null)\n const closeTimeoutRef = useRef<ReturnType<typeof setTimeout>>(null)\n\n const isOpen = controlledIsOpen ?? internalIsOpen\n\n const setIsOpen = useCallback(\n (open: boolean) => {\n if (controlledIsOpen === undefined) {\n setInternalIsOpen(open)\n }\n onOpenChange?.(open)\n },\n [controlledIsOpen, onOpenChange]\n )\n\n // Click outside handler\n const clickOutsideRef = useClickOutside<HTMLDivElement>(() => {\n if (closeOnOutsideClick && trigger === 'click' && isOpen) {\n setIsOpen(false)\n }\n }, { enabled: isOpen && trigger === 'click' })\n\n useEffect(() => {\n setMounted(true)\n return () => setMounted(false)\n }, [])\n\n // Calculate position\n useEffect(() => {\n if (!isOpen || !triggerRef.current || !mounted) return\n\n const updatePosition = () => {\n const trigger = triggerRef.current\n const content = contentRef.current\n if (!trigger || !content) return\n\n const triggerRect = trigger.getBoundingClientRect()\n const contentRect = content.getBoundingClientRect()\n const scrollX = window.scrollX\n const scrollY = window.scrollY\n\n let top = 0\n let left = 0\n\n // Calculate base position\n switch (placement) {\n case 'top':\n case 'top-start':\n case 'top-end':\n top = triggerRect.top + scrollY - contentRect.height - offset\n break\n case 'bottom':\n case 'bottom-start':\n case 'bottom-end':\n top = triggerRect.bottom + scrollY + offset\n break\n case 'left':\n case 'left-start':\n case 'left-end':\n left = triggerRect.left + scrollX - contentRect.width - offset\n break\n case 'right':\n case 'right-start':\n case 'right-end':\n left = triggerRect.right + scrollX + offset\n break\n }\n\n // Calculate alignment\n switch (placement) {\n case 'top':\n case 'bottom':\n left = triggerRect.left + scrollX + (triggerRect.width - contentRect.width) / 2\n break\n case 'top-start':\n case 'bottom-start':\n left = triggerRect.left + scrollX\n break\n case 'top-end':\n case 'bottom-end':\n left = triggerRect.right + scrollX - contentRect.width\n break\n case 'left':\n case 'right':\n top = triggerRect.top + scrollY + (triggerRect.height - contentRect.height) / 2\n break\n case 'left-start':\n case 'right-start':\n top = triggerRect.top + scrollY\n break\n case 'left-end':\n case 'right-end':\n top = triggerRect.bottom + scrollY - contentRect.height\n break\n }\n\n setPosition({ top, left })\n }\n\n updatePosition()\n window.addEventListener('resize', updatePosition)\n window.addEventListener('scroll', updatePosition, true)\n\n return () => {\n window.removeEventListener('resize', updatePosition)\n window.removeEventListener('scroll', updatePosition, true)\n }\n }, [isOpen, placement, offset, mounted])\n\n // Cleanup timeouts\n useEffect(() => {\n return () => {\n if (openTimeoutRef.current) clearTimeout(openTimeoutRef.current)\n if (closeTimeoutRef.current) clearTimeout(closeTimeoutRef.current)\n }\n }, [])\n\n const handleOpen = useCallback(() => {\n if (closeTimeoutRef.current) clearTimeout(closeTimeoutRef.current)\n if (trigger === 'hover') {\n openTimeoutRef.current = setTimeout(() => setIsOpen(true), openDelay)\n } else {\n setIsOpen(true)\n }\n }, [trigger, openDelay, setIsOpen])\n\n const handleClose = useCallback(() => {\n if (openTimeoutRef.current) clearTimeout(openTimeoutRef.current)\n if (trigger === 'hover') {\n closeTimeoutRef.current = setTimeout(() => setIsOpen(false), closeDelay)\n } else {\n setIsOpen(false)\n }\n }, [trigger, closeDelay, setIsOpen])\n\n const handleToggle = useCallback(() => {\n if (isOpen) {\n handleClose()\n } else {\n handleOpen()\n }\n }, [isOpen, handleOpen, handleClose])\n\n // Clone trigger with event handlers\n const childProps = children.props as Record<string, unknown>\n const triggerElement = cloneElement(children as ReactElement<Record<string, unknown>>, {\n ref: triggerRef,\n ...(trigger === 'click' && {\n onClick: (e: React.MouseEvent) => {\n (childProps.onClick as ((e: React.MouseEvent) => void) | undefined)?.(e)\n handleToggle()\n },\n }),\n ...(trigger === 'hover' && {\n onMouseEnter: (e: React.MouseEvent) => {\n (childProps.onMouseEnter as ((e: React.MouseEvent) => void) | undefined)?.(e)\n handleOpen()\n },\n onMouseLeave: (e: React.MouseEvent) => {\n (childProps.onMouseLeave as ((e: React.MouseEvent) => void) | undefined)?.(e)\n handleClose()\n },\n }),\n })\n\n const contentStyle: CSSProperties = {\n position: 'absolute',\n top: position.top,\n left: position.left,\n zIndex: 'var(--brycks-z-popover)' as unknown as number,\n backgroundColor: 'var(--brycks-background-elevated)',\n border: '1px solid var(--brycks-border-default)',\n borderRadius: 'var(--brycks-radius-lg)',\n boxShadow: 'var(--brycks-shadow-lg)',\n padding: 12,\n minWidth: 120,\n animation: 'brycks-popover-in 150ms ease-out',\n ...style,\n }\n\n const popoverContent = isOpen && mounted && (\n <>\n <style>\n {`\n @keyframes brycks-popover-in {\n from { opacity: 0; transform: scale(0.95); }\n to { opacity: 1; transform: scale(1); }\n }\n `}\n </style>\n <div\n ref={(node) => {\n (contentRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n (clickOutsideRef as React.MutableRefObject<HTMLDivElement | null>).current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) ref.current = node\n }}\n className={cx('brycks-popover', className)}\n style={contentStyle}\n role=\"dialog\"\n data-testid={testId}\n onMouseEnter={trigger === 'hover' ? handleOpen : undefined}\n onMouseLeave={trigger === 'hover' ? handleClose : undefined}\n {...props}\n >\n {content}\n </div>\n </>\n )\n\n return (\n <>\n {triggerElement}\n {mounted && createPortal(popoverContent, document.body)}\n </>\n )\n})\n\nPopover.displayName = 'Popover'\n","/**\n * Progress Component\n *\n * A progress indicator showing completion status.\n * Supports linear and circular variants.\n */\n\nimport { forwardRef, type CSSProperties, type HTMLAttributes } from 'react'\nimport { cx } from '../../../utils/styles'\n\nexport type ProgressSize = 'xs' | 'sm' | 'md' | 'lg'\nexport type ProgressVariant = 'linear' | 'circular'\nexport type ProgressIntent = 'primary' | 'success' | 'warning' | 'error'\n\nexport interface ProgressProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n /** Current value (0-100) */\n value?: number\n /** Maximum value */\n max?: number\n /** Progress size */\n size?: ProgressSize\n /** Progress variant */\n variant?: ProgressVariant\n /** Progress intent/color */\n intent?: ProgressIntent\n /** Whether to show the value label */\n showValue?: boolean\n /** Whether the progress is indeterminate */\n indeterminate?: boolean\n /** Format value for display */\n formatValue?: (value: number, max: number) => string\n /** Label text */\n label?: string\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst linearSizeMap: Record<ProgressSize, number> = {\n xs: 4,\n sm: 6,\n md: 8,\n lg: 12,\n}\n\nconst circularSizeMap: Record<ProgressSize, { size: number; strokeWidth: number }> = {\n xs: { size: 24, strokeWidth: 3 },\n sm: { size: 32, strokeWidth: 3 },\n md: { size: 48, strokeWidth: 4 },\n lg: { size: 64, strokeWidth: 5 },\n}\n\nconst intentColors: Record<ProgressIntent, string> = {\n primary: 'var(--brycks-primary-default)',\n success: 'var(--brycks-success-default)',\n warning: 'var(--brycks-warning-default)',\n error: 'var(--brycks-error-default)',\n}\n\nexport const Progress = forwardRef<HTMLDivElement, ProgressProps>(function Progress(\n {\n value = 0,\n max = 100,\n size = 'md',\n variant = 'linear',\n intent = 'primary',\n showValue = false,\n indeterminate = false,\n formatValue = (v, m) => `${Math.round((v / m) * 100)}%`,\n label,\n className,\n style,\n testId,\n ...props\n },\n ref\n) {\n const percentage = Math.min(100, Math.max(0, (value / max) * 100))\n const color = intentColors[intent]\n\n if (variant === 'circular') {\n const config = circularSizeMap[size]\n const radius = (config.size - config.strokeWidth) / 2\n const circumference = 2 * Math.PI * radius\n const offset = circumference - (percentage / 100) * circumference\n\n const containerStyle: CSSProperties = {\n display: 'inline-flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: 8,\n ...style,\n }\n\n const svgStyle: CSSProperties = {\n transform: 'rotate(-90deg)',\n width: config.size,\n height: config.size,\n }\n\n const trackStyle: CSSProperties = {\n fill: 'none',\n stroke: 'var(--brycks-background-muted)',\n strokeWidth: config.strokeWidth,\n }\n\n const barStyle: CSSProperties = {\n fill: 'none',\n stroke: color,\n strokeWidth: config.strokeWidth,\n strokeLinecap: 'round',\n strokeDasharray: circumference,\n strokeDashoffset: indeterminate ? circumference * 0.75 : offset,\n transition: indeterminate ? 'none' : 'stroke-dashoffset 300ms ease-out',\n animation: indeterminate ? 'brycks-progress-circular-spin 1s linear infinite' : undefined,\n transformOrigin: 'center',\n }\n\n const valueStyle: CSSProperties = {\n position: 'absolute',\n fontSize: size === 'xs' ? 8 : size === 'sm' ? 10 : size === 'md' ? 12 : 14,\n fontWeight: 600,\n color: 'var(--brycks-foreground-default)',\n }\n\n const labelStyle: CSSProperties = {\n fontSize: size === 'xs' ? 10 : size === 'sm' ? 11 : size === 'md' ? 12 : 14,\n color: 'var(--brycks-foreground-muted)',\n }\n\n return (\n <>\n <style>\n {`\n @keyframes brycks-progress-circular-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n `}\n </style>\n <div\n ref={ref}\n className={cx('brycks-progress', 'brycks-progress--circular', `brycks-progress--${size}`, className)}\n style={containerStyle}\n role=\"progressbar\"\n aria-valuenow={indeterminate ? undefined : value}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-label={label}\n data-testid={testId}\n {...props}\n >\n <div style={{ position: 'relative', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <svg style={svgStyle}>\n <circle cx={config.size / 2} cy={config.size / 2} r={radius} style={trackStyle} />\n <circle cx={config.size / 2} cy={config.size / 2} r={radius} style={barStyle} />\n </svg>\n {showValue && !indeterminate && size !== 'xs' && (\n <span style={valueStyle}>{formatValue(value, max)}</span>\n )}\n </div>\n {label && <span style={labelStyle}>{label}</span>}\n </div>\n </>\n )\n }\n\n // Linear variant\n const height = linearSizeMap[size]\n\n const containerStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 6,\n width: '100%',\n ...style,\n }\n\n const headerStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 12,\n }\n\n const labelStyle: CSSProperties = {\n fontSize: size === 'xs' ? 11 : size === 'sm' ? 12 : size === 'md' ? 13 : 14,\n fontWeight: 500,\n color: 'var(--brycks-foreground-default)',\n }\n\n const valueTextStyle: CSSProperties = {\n fontSize: size === 'xs' ? 11 : size === 'sm' ? 12 : size === 'md' ? 13 : 14,\n fontWeight: 500,\n color: 'var(--brycks-foreground-muted)',\n fontVariantNumeric: 'tabular-nums',\n }\n\n const trackStyle: CSSProperties = {\n width: '100%',\n height,\n backgroundColor: 'var(--brycks-background-muted)',\n borderRadius: height / 2,\n overflow: 'hidden',\n }\n\n const barStyle: CSSProperties = {\n width: indeterminate ? '30%' : `${percentage}%`,\n height: '100%',\n backgroundColor: color,\n borderRadius: height / 2,\n transition: indeterminate ? 'none' : 'width 300ms ease-out',\n animation: indeterminate ? 'brycks-progress-linear-indeterminate 1.5s ease-in-out infinite' : undefined,\n }\n\n return (\n <>\n <style>\n {`\n @keyframes brycks-progress-linear-indeterminate {\n 0% { transform: translateX(-100%); }\n 100% { transform: translateX(400%); }\n }\n `}\n </style>\n <div\n ref={ref}\n className={cx('brycks-progress', 'brycks-progress--linear', `brycks-progress--${size}`, className)}\n style={containerStyle}\n role=\"progressbar\"\n aria-valuenow={indeterminate ? undefined : value}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-label={label}\n data-testid={testId}\n {...props}\n >\n {(label || showValue) && (\n <div style={headerStyle}>\n {label && <span style={labelStyle}>{label}</span>}\n {showValue && !indeterminate && (\n <span style={valueTextStyle}>{formatValue(value, max)}</span>\n )}\n </div>\n )}\n <div style={trackStyle}>\n <div style={barStyle} />\n </div>\n </div>\n </>\n )\n})\n\nProgress.displayName = 'Progress'\n","/**\n * Tabs Component\n *\n * Accessible tab navigation with keyboard support.\n * Supports horizontal and vertical orientations.\n */\n\nimport {\n forwardRef,\n useState,\n useCallback,\n createContext,\n useContext,\n type CSSProperties,\n type ReactNode,\n type HTMLAttributes,\n type KeyboardEvent,\n} from 'react'\nimport { cx } from '../../../utils/styles'\n\nexport type TabsSize = 'sm' | 'md' | 'lg'\nexport type TabsVariant = 'line' | 'enclosed' | 'soft'\nexport type TabsOrientation = 'horizontal' | 'vertical'\n\ninterface TabsContextValue {\n value: string\n onChange: (value: string) => void\n size: TabsSize\n variant: TabsVariant\n orientation: TabsOrientation\n}\n\nconst TabsContext = createContext<TabsContextValue | null>(null)\n\nfunction useTabsContext() {\n const context = useContext(TabsContext)\n if (!context) {\n throw new Error('Tabs components must be used within a Tabs')\n }\n return context\n}\n\nexport interface TabsProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {\n /** Currently selected tab value */\n value?: string\n /** Default value (uncontrolled) */\n defaultValue?: string\n /** Callback when tab changes */\n onChange?: (value: string) => void\n /** Tab size */\n size?: TabsSize\n /** Tab variant */\n variant?: TabsVariant\n /** Tab orientation */\n orientation?: TabsOrientation\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nexport const Tabs = forwardRef<HTMLDivElement, TabsProps>(function Tabs(\n {\n value: controlledValue,\n defaultValue = '',\n onChange,\n size = 'md',\n variant = 'line',\n orientation = 'horizontal',\n className,\n style,\n children,\n testId,\n ...props\n },\n ref\n) {\n const [internalValue, setInternalValue] = useState(defaultValue)\n const value = controlledValue ?? internalValue\n\n const handleChange = useCallback(\n (newValue: string) => {\n if (controlledValue === undefined) {\n setInternalValue(newValue)\n }\n onChange?.(newValue)\n },\n [controlledValue, onChange]\n )\n\n const containerStyle: CSSProperties = {\n display: 'flex',\n flexDirection: orientation === 'vertical' ? 'row' : 'column',\n gap: orientation === 'vertical' ? 24 : 0,\n ...style,\n }\n\n return (\n <TabsContext.Provider value={{ value, onChange: handleChange, size, variant, orientation }}>\n <div\n ref={ref}\n className={cx('brycks-tabs', `brycks-tabs--${variant}`, `brycks-tabs--${orientation}`, className)}\n style={containerStyle}\n data-testid={testId}\n {...props}\n >\n {children}\n </div>\n </TabsContext.Provider>\n )\n})\n\nTabs.displayName = 'Tabs'\n\n// TabList\nexport interface TabListProps extends HTMLAttributes<HTMLDivElement> {\n /** Custom class name */\n className?: string\n}\n\nexport const TabList = forwardRef<HTMLDivElement, TabListProps>(function TabList(\n { className, style, children, ...props },\n ref\n) {\n const { orientation, variant } = useTabsContext()\n\n const listStyle: CSSProperties = {\n display: 'flex',\n flexDirection: orientation === 'vertical' ? 'column' : 'row',\n gap: variant === 'enclosed' ? 4 : orientation === 'vertical' ? 4 : 0,\n borderBottom: variant === 'line' && orientation === 'horizontal' ? '1px solid var(--brycks-border-muted)' : undefined,\n borderRight: variant === 'line' && orientation === 'vertical' ? '1px solid var(--brycks-border-muted)' : undefined,\n paddingRight: orientation === 'vertical' ? 16 : undefined,\n backgroundColor: variant === 'enclosed' ? 'var(--brycks-background-muted)' : undefined,\n padding: variant === 'enclosed' ? 4 : undefined,\n borderRadius: variant === 'enclosed' ? 'var(--brycks-radius-lg)' : undefined,\n flexShrink: 0,\n ...style,\n }\n\n return (\n <div\n ref={ref}\n role=\"tablist\"\n aria-orientation={orientation}\n className={cx('brycks-tab-list', className)}\n style={listStyle}\n {...props}\n >\n {children}\n </div>\n )\n})\n\nTabList.displayName = 'TabList'\n\n// Tab\nexport interface TabProps extends Omit<HTMLAttributes<HTMLButtonElement>, 'onClick'> {\n /** Tab value */\n value: string\n /** Whether the tab is disabled */\n disabled?: boolean\n /** Icon before the label */\n icon?: ReactNode\n /** Custom class name */\n className?: string\n}\n\nconst sizeConfig: Record<TabsSize, { fontSize: number; padding: string; height: number }> = {\n sm: { fontSize: 13, padding: '6px 12px', height: 32 },\n md: { fontSize: 14, padding: '8px 16px', height: 40 },\n lg: { fontSize: 16, padding: '10px 20px', height: 48 },\n}\n\nexport const Tab = forwardRef<HTMLButtonElement, TabProps>(function Tab(\n { value: tabValue, disabled = false, icon, className, style, children, ...props },\n ref\n) {\n const { value, onChange, size, variant, orientation } = useTabsContext()\n const isSelected = value === tabValue\n const config = sizeConfig[size]\n\n const handleClick = () => {\n if (!disabled) {\n onChange(tabValue)\n }\n }\n\n const handleKeyDown = (e: KeyboardEvent<HTMLButtonElement>) => {\n if (disabled) return\n\n const tabs = Array.from(\n e.currentTarget.parentElement?.querySelectorAll<HTMLButtonElement>('[role=\"tab\"]:not([disabled])') ?? []\n )\n const currentIndex = tabs.indexOf(e.currentTarget)\n\n let newIndex: number | null = null\n\n if (orientation === 'horizontal') {\n if (e.key === 'ArrowRight') newIndex = (currentIndex + 1) % tabs.length\n if (e.key === 'ArrowLeft') newIndex = (currentIndex - 1 + tabs.length) % tabs.length\n } else {\n if (e.key === 'ArrowDown') newIndex = (currentIndex + 1) % tabs.length\n if (e.key === 'ArrowUp') newIndex = (currentIndex - 1 + tabs.length) % tabs.length\n }\n\n if (e.key === 'Home') newIndex = 0\n if (e.key === 'End') newIndex = tabs.length - 1\n\n if (newIndex !== null) {\n e.preventDefault()\n tabs[newIndex]?.focus()\n tabs[newIndex]?.click()\n }\n }\n\n const getTabStyle = (): CSSProperties => {\n const base: CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 8,\n fontSize: config.fontSize,\n fontWeight: 500,\n padding: config.padding,\n minHeight: config.height,\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.5 : 1,\n transition: 'all 150ms ease-out',\n outline: 'none',\n border: 'none',\n backgroundColor: 'transparent',\n whiteSpace: 'nowrap',\n }\n\n if (variant === 'line') {\n return {\n ...base,\n color: isSelected ? 'var(--brycks-primary-default)' : 'var(--brycks-foreground-muted)',\n borderBottom: orientation === 'horizontal' ? `2px solid ${isSelected ? 'var(--brycks-primary-default)' : 'transparent'}` : undefined,\n borderRight: orientation === 'vertical' ? `2px solid ${isSelected ? 'var(--brycks-primary-default)' : 'transparent'}` : undefined,\n marginBottom: orientation === 'horizontal' ? -1 : undefined,\n marginRight: orientation === 'vertical' ? -1 : undefined,\n }\n }\n\n if (variant === 'enclosed') {\n return {\n ...base,\n color: isSelected ? 'var(--brycks-foreground-default)' : 'var(--brycks-foreground-muted)',\n backgroundColor: isSelected ? 'var(--brycks-background-elevated)' : 'transparent',\n borderRadius: 'var(--brycks-radius-md)',\n boxShadow: isSelected ? 'var(--brycks-shadow-sm)' : undefined,\n }\n }\n\n // soft variant\n return {\n ...base,\n color: isSelected ? 'var(--brycks-primary-default)' : 'var(--brycks-foreground-muted)',\n backgroundColor: isSelected ? 'var(--brycks-primary-50)' : 'transparent',\n borderRadius: 'var(--brycks-radius-md)',\n }\n }\n\n return (\n <button\n ref={ref}\n role=\"tab\"\n type=\"button\"\n aria-selected={isSelected}\n aria-disabled={disabled}\n disabled={disabled}\n tabIndex={isSelected ? 0 : -1}\n className={cx('brycks-tab', isSelected && 'brycks-tab--selected', className)}\n style={{ ...getTabStyle(), ...style }}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n {...props}\n >\n {icon && <span className=\"brycks-tab-icon\">{icon}</span>}\n {children}\n </button>\n )\n})\n\nTab.displayName = 'Tab'\n\n// TabPanels\nexport interface TabPanelsProps extends HTMLAttributes<HTMLDivElement> {\n /** Custom class name */\n className?: string\n}\n\nexport const TabPanels = forwardRef<HTMLDivElement, TabPanelsProps>(function TabPanels(\n { className, style, children, ...props },\n ref\n) {\n const panelsStyle: CSSProperties = {\n flex: 1,\n ...style,\n }\n\n return (\n <div ref={ref} className={cx('brycks-tab-panels', className)} style={panelsStyle} {...props}>\n {children}\n </div>\n )\n})\n\nTabPanels.displayName = 'TabPanels'\n\n// TabPanel\nexport interface TabPanelProps extends HTMLAttributes<HTMLDivElement> {\n /** Panel value (must match a Tab value) */\n value: string\n /** Custom class name */\n className?: string\n}\n\nexport const TabPanel = forwardRef<HTMLDivElement, TabPanelProps>(function TabPanel(\n { value: panelValue, className, style, children, ...props },\n ref\n) {\n const { value } = useTabsContext()\n const isSelected = value === panelValue\n\n if (!isSelected) return null\n\n const panelStyle: CSSProperties = {\n padding: '16px 0',\n animation: 'brycks-tab-panel-in 200ms ease-out',\n ...style,\n }\n\n return (\n <>\n <style>\n {`\n @keyframes brycks-tab-panel-in {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n `}\n </style>\n <div\n ref={ref}\n role=\"tabpanel\"\n tabIndex={0}\n className={cx('brycks-tab-panel', className)}\n style={panelStyle}\n {...props}\n >\n {children}\n </div>\n </>\n )\n})\n\nTabPanel.displayName = 'TabPanel'\n","/**\n * Accordion Component\n *\n * Collapsible content panels for organizing information.\n * Supports single or multiple expanded panels.\n */\n\nimport {\n forwardRef,\n useState,\n useCallback,\n createContext,\n useContext,\n type CSSProperties,\n type ReactNode,\n type HTMLAttributes,\n} from 'react'\nimport { cx } from '../../../utils/styles'\n\nexport type AccordionVariant = 'default' | 'bordered' | 'separated'\n\ninterface AccordionContextValue {\n expandedItems: string[]\n toggleItem: (value: string) => void\n allowMultiple: boolean\n variant: AccordionVariant\n}\n\nconst AccordionContext = createContext<AccordionContextValue | null>(null)\n\nfunction useAccordionContext() {\n const context = useContext(AccordionContext)\n if (!context) {\n throw new Error('AccordionItem must be used within an Accordion')\n }\n return context\n}\n\nexport interface AccordionProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {\n /** Expanded items (controlled) */\n value?: string[]\n /** Default expanded items (uncontrolled) */\n defaultValue?: string[]\n /** Callback when items change */\n onChange?: (value: string[]) => void\n /** Allow multiple items to be expanded */\n allowMultiple?: boolean\n /** Accordion variant */\n variant?: AccordionVariant\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nexport const Accordion = forwardRef<HTMLDivElement, AccordionProps>(function Accordion(\n {\n value: controlledValue,\n defaultValue = [],\n onChange,\n allowMultiple = false,\n variant = 'default',\n className,\n style,\n children,\n testId,\n ...props\n },\n ref\n) {\n const [internalValue, setInternalValue] = useState(defaultValue)\n const expandedItems = controlledValue ?? internalValue\n\n const toggleItem = useCallback(\n (itemValue: string) => {\n const isExpanded = expandedItems.includes(itemValue)\n let newValue: string[]\n\n if (isExpanded) {\n newValue = expandedItems.filter((v) => v !== itemValue)\n } else if (allowMultiple) {\n newValue = [...expandedItems, itemValue]\n } else {\n newValue = [itemValue]\n }\n\n if (controlledValue === undefined) {\n setInternalValue(newValue)\n }\n onChange?.(newValue)\n },\n [expandedItems, allowMultiple, controlledValue, onChange]\n )\n\n const containerStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: variant === 'separated' ? 8 : 0,\n ...style,\n }\n\n return (\n <AccordionContext.Provider value={{ expandedItems, toggleItem, allowMultiple, variant }}>\n <div\n ref={ref}\n className={cx('brycks-accordion', `brycks-accordion--${variant}`, className)}\n style={containerStyle}\n data-testid={testId}\n {...props}\n >\n {children}\n </div>\n </AccordionContext.Provider>\n )\n})\n\nAccordion.displayName = 'Accordion'\n\n// AccordionItem\nexport interface AccordionItemProps extends HTMLAttributes<HTMLDivElement> {\n /** Item value (unique identifier) */\n value: string\n /** Whether the item is disabled */\n disabled?: boolean\n /** Custom class name */\n className?: string\n}\n\ninterface AccordionItemContextValue {\n value: string\n isExpanded: boolean\n disabled: boolean\n}\n\nconst AccordionItemContext = createContext<AccordionItemContextValue | null>(null)\n\nfunction useAccordionItemContext() {\n const context = useContext(AccordionItemContext)\n if (!context) {\n throw new Error('AccordionTrigger/AccordionContent must be used within an AccordionItem')\n }\n return context\n}\n\nexport const AccordionItem = forwardRef<HTMLDivElement, AccordionItemProps>(function AccordionItem(\n { value, disabled = false, className, style, children, ...props },\n ref\n) {\n const { expandedItems, variant } = useAccordionContext()\n const isExpanded = expandedItems.includes(value)\n\n const itemStyle: CSSProperties = {\n borderBottom: variant === 'default' ? '1px solid var(--brycks-border-muted)' : undefined,\n border: variant === 'bordered' || variant === 'separated' ? '1px solid var(--brycks-border-default)' : undefined,\n borderRadius: variant === 'separated' ? 'var(--brycks-radius-lg)' : undefined,\n overflow: 'hidden',\n ...style,\n }\n\n // Remove bottom border for separated variant (each item has full border)\n if (variant === 'bordered' && !isExpanded) {\n itemStyle.borderBottom = '1px solid var(--brycks-border-default)'\n }\n\n return (\n <AccordionItemContext.Provider value={{ value, isExpanded, disabled }}>\n <div\n ref={ref}\n className={cx('brycks-accordion-item', isExpanded && 'brycks-accordion-item--expanded', className)}\n style={itemStyle}\n {...props}\n >\n {children}\n </div>\n </AccordionItemContext.Provider>\n )\n})\n\nAccordionItem.displayName = 'AccordionItem'\n\n// AccordionTrigger\nexport interface AccordionTriggerProps extends HTMLAttributes<HTMLButtonElement> {\n /** Icon to show (replaces default chevron) */\n icon?: ReactNode\n /** Custom class name */\n className?: string\n}\n\nfunction ChevronIcon({ isExpanded }: { isExpanded: boolean }) {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n style={{\n transform: isExpanded ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 200ms ease-out',\n }}\n >\n <path\n d=\"M4 6l4 4 4-4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )\n}\n\nexport const AccordionTrigger = forwardRef<HTMLButtonElement, AccordionTriggerProps>(function AccordionTrigger(\n { icon, className, style, children, ...props },\n ref\n) {\n const { toggleItem } = useAccordionContext()\n const { value, isExpanded, disabled } = useAccordionItemContext()\n\n const handleClick = () => {\n if (!disabled) {\n toggleItem(value)\n }\n }\n\n const triggerStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n padding: '16px',\n fontSize: 15,\n fontWeight: 500,\n color: disabled ? 'var(--brycks-foreground-muted)' : 'var(--brycks-foreground-default)',\n backgroundColor: 'transparent',\n border: 'none',\n cursor: disabled ? 'not-allowed' : 'pointer',\n textAlign: 'left',\n transition: 'background-color 150ms ease-out',\n outline: 'none',\n ...style,\n }\n\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-expanded={isExpanded}\n aria-disabled={disabled}\n disabled={disabled}\n className={cx('brycks-accordion-trigger', className)}\n style={triggerStyle}\n onClick={handleClick}\n onMouseEnter={(e) => {\n if (!disabled) {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent'\n }}\n {...props}\n >\n {children}\n <span style={{ color: 'var(--brycks-foreground-muted)', flexShrink: 0, marginLeft: 12 }}>\n {icon ?? <ChevronIcon isExpanded={isExpanded} />}\n </span>\n </button>\n )\n})\n\nAccordionTrigger.displayName = 'AccordionTrigger'\n\n// AccordionContent\nexport interface AccordionContentProps extends HTMLAttributes<HTMLDivElement> {\n /** Custom class name */\n className?: string\n}\n\nexport const AccordionContent = forwardRef<HTMLDivElement, AccordionContentProps>(function AccordionContent(\n { className, style, children, ...props },\n ref\n) {\n const { isExpanded } = useAccordionItemContext()\n\n const contentStyle: CSSProperties = {\n overflow: 'hidden',\n transition: 'max-height 200ms ease-out, opacity 200ms ease-out',\n maxHeight: isExpanded ? '1000px' : '0',\n opacity: isExpanded ? 1 : 0,\n }\n\n const innerStyle: CSSProperties = {\n padding: '0 16px 16px 16px',\n color: 'var(--brycks-foreground-muted)',\n fontSize: 14,\n lineHeight: 1.6,\n ...style,\n }\n\n return (\n <div\n ref={ref}\n role=\"region\"\n aria-hidden={!isExpanded}\n className={cx('brycks-accordion-content', className)}\n style={contentStyle}\n {...props}\n >\n <div style={innerStyle}>{children}</div>\n </div>\n )\n})\n\nAccordionContent.displayName = 'AccordionContent'\n","/**\n * Dropdown Component\n *\n * A dropdown menu with keyboard navigation support.\n * Can be used for actions, navigation, or selection.\n */\n\nimport {\n forwardRef,\n useState,\n useCallback,\n useRef,\n useEffect,\n cloneElement,\n createContext,\n useContext,\n type CSSProperties,\n type ReactNode,\n type ReactElement,\n type HTMLAttributes,\n type KeyboardEvent,\n} from 'react'\nimport { createPortal } from 'react-dom'\nimport { cx } from '../../../utils/styles'\n\nexport type DropdownPlacement = 'bottom-start' | 'bottom-end' | 'top-start' | 'top-end'\n\ninterface DropdownContextValue {\n isOpen: boolean\n close: () => void\n activeIndex: number\n setActiveIndex: (index: number) => void\n}\n\nconst DropdownContext = createContext<DropdownContextValue | null>(null)\n\nfunction useDropdownContext() {\n const context = useContext(DropdownContext)\n if (!context) {\n throw new Error('Dropdown components must be used within a Dropdown')\n }\n return context\n}\n\nexport interface DropdownProps extends HTMLAttributes<HTMLDivElement> {\n /** Trigger element */\n trigger: ReactElement\n /** Whether the dropdown is open (controlled) */\n isOpen?: boolean\n /** Default open state (uncontrolled) */\n defaultOpen?: boolean\n /** Callback when open state changes */\n onOpenChange?: (isOpen: boolean) => void\n /** Dropdown placement */\n placement?: DropdownPlacement\n /** Offset from trigger */\n offset?: number\n /** Whether to close on item select */\n closeOnSelect?: boolean\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nexport const Dropdown = forwardRef<HTMLDivElement, DropdownProps>(function Dropdown(\n {\n trigger,\n isOpen: controlledIsOpen,\n defaultOpen = false,\n onOpenChange,\n placement = 'bottom-start',\n offset = 4,\n closeOnSelect = true,\n className,\n style,\n children,\n testId,\n ...props\n },\n ref\n) {\n const [internalIsOpen, setInternalIsOpen] = useState(defaultOpen)\n const [position, setPosition] = useState({ top: 0, left: 0 })\n const [activeIndex, setActiveIndex] = useState(-1)\n const [mounted, setMounted] = useState(false)\n const triggerRef = useRef<HTMLElement>(null)\n const menuRef = useRef<HTMLDivElement>(null)\n\n const isOpen = controlledIsOpen ?? internalIsOpen\n\n useEffect(() => {\n setMounted(true)\n return () => setMounted(false)\n }, [])\n\n const setIsOpen = useCallback(\n (open: boolean) => {\n if (controlledIsOpen === undefined) {\n setInternalIsOpen(open)\n }\n onOpenChange?.(open)\n if (!open) {\n setActiveIndex(-1)\n }\n },\n [controlledIsOpen, onOpenChange]\n )\n\n const close = useCallback(() => setIsOpen(false), [setIsOpen])\n\n // Calculate position\n useEffect(() => {\n if (!isOpen || !triggerRef.current || !mounted) return\n\n const updatePosition = () => {\n const trigger = triggerRef.current\n if (!trigger) return\n\n const rect = trigger.getBoundingClientRect()\n const scrollX = window.scrollX\n const scrollY = window.scrollY\n\n let top = 0\n let left = 0\n\n if (placement.startsWith('bottom')) {\n top = rect.bottom + scrollY + offset\n } else {\n top = rect.top + scrollY - offset\n }\n\n if (placement.endsWith('start')) {\n left = rect.left + scrollX\n } else {\n left = rect.right + scrollX\n }\n\n setPosition({ top, left })\n }\n\n updatePosition()\n window.addEventListener('resize', updatePosition)\n window.addEventListener('scroll', updatePosition, true)\n\n return () => {\n window.removeEventListener('resize', updatePosition)\n window.removeEventListener('scroll', updatePosition, true)\n }\n }, [isOpen, placement, offset, mounted])\n\n // Close on outside click\n useEffect(() => {\n if (!isOpen) return\n\n const handleClick = (e: MouseEvent) => {\n if (\n triggerRef.current?.contains(e.target as Node) ||\n menuRef.current?.contains(e.target as Node)\n ) {\n return\n }\n setIsOpen(false)\n }\n\n document.addEventListener('mousedown', handleClick)\n return () => document.removeEventListener('mousedown', handleClick)\n }, [isOpen, setIsOpen])\n\n // Keyboard navigation\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (!isOpen) {\n if (e.key === 'ArrowDown' || e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n setIsOpen(true)\n }\n return\n }\n\n const items = menuRef.current?.querySelectorAll<HTMLElement>('[role=\"menuitem\"]:not([aria-disabled=\"true\"])')\n if (!items?.length) return\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault()\n setActiveIndex((prev) => (prev + 1) % items.length)\n break\n case 'ArrowUp':\n e.preventDefault()\n setActiveIndex((prev) => (prev - 1 + items.length) % items.length)\n break\n case 'Home':\n e.preventDefault()\n setActiveIndex(0)\n break\n case 'End':\n e.preventDefault()\n setActiveIndex(items.length - 1)\n break\n case 'Escape':\n e.preventDefault()\n setIsOpen(false)\n triggerRef.current?.focus()\n break\n case 'Enter':\n case ' ':\n e.preventDefault()\n if (activeIndex >= 0) {\n items[activeIndex]?.click()\n }\n break\n }\n },\n [isOpen, activeIndex, setIsOpen]\n )\n\n // Focus active item\n useEffect(() => {\n if (!isOpen || activeIndex < 0) return\n const items = menuRef.current?.querySelectorAll<HTMLElement>('[role=\"menuitem\"]:not([aria-disabled=\"true\"])')\n items?.[activeIndex]?.focus()\n }, [isOpen, activeIndex])\n\n const triggerProps = trigger.props as Record<string, unknown>\n const triggerElement = cloneElement(trigger as ReactElement<Record<string, unknown>>, {\n ref: triggerRef,\n 'aria-haspopup': 'menu',\n 'aria-expanded': isOpen,\n onClick: (e: React.MouseEvent) => {\n (triggerProps.onClick as ((e: React.MouseEvent) => void) | undefined)?.(e)\n setIsOpen(!isOpen)\n },\n onKeyDown: (e: KeyboardEvent) => {\n (triggerProps.onKeyDown as ((e: KeyboardEvent) => void) | undefined)?.(e)\n handleKeyDown(e)\n },\n })\n\n const menuStyle: CSSProperties = {\n position: 'absolute',\n top: position.top,\n left: placement.endsWith('end') ? 'auto' : position.left,\n right: placement.endsWith('end') ? window.innerWidth - position.left : 'auto',\n zIndex: 'var(--brycks-z-dropdown)' as unknown as number,\n minWidth: triggerRef.current?.offsetWidth ?? 160,\n backgroundColor: 'var(--brycks-background-elevated)',\n border: '1px solid var(--brycks-border-default)',\n borderRadius: 'var(--brycks-radius-lg)',\n boxShadow: 'var(--brycks-shadow-lg)',\n padding: 4,\n animation: 'brycks-dropdown-in 150ms ease-out',\n outline: 'none',\n ...style,\n }\n\n return (\n <DropdownContext.Provider value={{ isOpen, close: closeOnSelect ? close : () => {}, activeIndex, setActiveIndex }}>\n <div\n ref={ref}\n className={cx('brycks-dropdown', className)}\n style={{ display: 'inline-block' }}\n data-testid={testId}\n {...props}\n >\n {triggerElement}\n {isOpen && mounted && createPortal(\n <>\n <style>\n {`\n @keyframes brycks-dropdown-in {\n from { opacity: 0; transform: translateY(-4px); }\n to { opacity: 1; transform: translateY(0); }\n }\n `}\n </style>\n <div\n ref={menuRef}\n role=\"menu\"\n style={menuStyle}\n onKeyDown={handleKeyDown}\n tabIndex={-1}\n >\n {children}\n </div>\n </>,\n document.body\n )}\n </div>\n </DropdownContext.Provider>\n )\n})\n\nDropdown.displayName = 'Dropdown'\n\n// DropdownItem\nexport interface DropdownItemProps extends HTMLAttributes<HTMLDivElement> {\n /** Whether the item is disabled */\n disabled?: boolean\n /** Icon before the label */\n icon?: ReactNode\n /** Shortcut text */\n shortcut?: string\n /** Whether the item is destructive */\n destructive?: boolean\n /** Custom class name */\n className?: string\n}\n\nexport const DropdownItem = forwardRef<HTMLDivElement, DropdownItemProps>(function DropdownItem(\n { disabled = false, icon, shortcut, destructive = false, className, style, children, onClick, ...props },\n ref\n) {\n const { close } = useDropdownContext()\n\n const handleClick = (e: React.MouseEvent<HTMLDivElement>) => {\n if (disabled) return\n onClick?.(e)\n close()\n }\n\n const itemStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 10,\n padding: '8px 12px',\n fontSize: 14,\n color: disabled\n ? 'var(--brycks-foreground-disabled)'\n : destructive\n ? 'var(--brycks-error-default)'\n : 'var(--brycks-foreground-default)',\n backgroundColor: 'transparent',\n borderRadius: 'var(--brycks-radius-md)',\n cursor: disabled ? 'not-allowed' : 'pointer',\n transition: 'background-color 100ms ease-out',\n outline: 'none',\n ...style,\n }\n\n const iconStyle: CSSProperties = {\n width: 16,\n height: 16,\n color: disabled\n ? 'var(--brycks-foreground-disabled)'\n : destructive\n ? 'var(--brycks-error-default)'\n : 'var(--brycks-foreground-muted)',\n flexShrink: 0,\n }\n\n const shortcutStyle: CSSProperties = {\n marginLeft: 'auto',\n fontSize: 12,\n color: 'var(--brycks-foreground-muted)',\n fontFamily: 'var(--brycks-font-mono)',\n }\n\n return (\n <div\n ref={ref}\n role=\"menuitem\"\n aria-disabled={disabled}\n tabIndex={disabled ? -1 : 0}\n className={cx('brycks-dropdown-item', disabled && 'brycks-dropdown-item--disabled', className)}\n style={itemStyle}\n onClick={handleClick}\n onMouseEnter={(e) => {\n if (!disabled) {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent'\n }}\n onFocus={(e) => {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n }}\n onBlur={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent'\n }}\n {...props}\n >\n {icon && <span style={iconStyle}>{icon}</span>}\n <span style={{ flex: 1 }}>{children}</span>\n {shortcut && <span style={shortcutStyle}>{shortcut}</span>}\n </div>\n )\n})\n\nDropdownItem.displayName = 'DropdownItem'\n\n// DropdownDivider\nexport interface DropdownDividerProps extends HTMLAttributes<HTMLDivElement> {\n /** Custom class name */\n className?: string\n}\n\nexport const DropdownDivider = forwardRef<HTMLDivElement, DropdownDividerProps>(function DropdownDivider(\n { className, style, ...props },\n ref\n) {\n const dividerStyle: CSSProperties = {\n height: 1,\n backgroundColor: 'var(--brycks-border-muted)',\n margin: '4px 0',\n ...style,\n }\n\n return (\n <div\n ref={ref}\n role=\"separator\"\n className={cx('brycks-dropdown-divider', className)}\n style={dividerStyle}\n {...props}\n />\n )\n})\n\nDropdownDivider.displayName = 'DropdownDivider'\n\n// DropdownLabel\nexport interface DropdownLabelProps extends HTMLAttributes<HTMLDivElement> {\n /** Custom class name */\n className?: string\n}\n\nexport const DropdownLabel = forwardRef<HTMLDivElement, DropdownLabelProps>(function DropdownLabel(\n { className, style, children, ...props },\n ref\n) {\n const labelStyle: CSSProperties = {\n padding: '8px 12px 4px 12px',\n fontSize: 11,\n fontWeight: 600,\n color: 'var(--brycks-foreground-muted)',\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n ...style,\n }\n\n return (\n <div\n ref={ref}\n className={cx('brycks-dropdown-label', className)}\n style={labelStyle}\n {...props}\n >\n {children}\n </div>\n )\n})\n\nDropdownLabel.displayName = 'DropdownLabel'\n","/**\n * Menu Component\n *\n * A vertical navigation menu with support for nested items.\n * Suitable for sidebars and navigation panels.\n */\n\nimport {\n forwardRef,\n useState,\n createContext,\n useContext,\n type CSSProperties,\n type ReactNode,\n type HTMLAttributes,\n} from 'react'\nimport { cx } from '../../../utils/styles'\n\nexport type MenuSize = 'sm' | 'md' | 'lg'\n\ninterface MenuContextValue {\n size: MenuSize\n activeItem: string | null\n setActiveItem: (value: string | null) => void\n collapsed: boolean\n}\n\nconst MenuContext = createContext<MenuContextValue | null>(null)\n\nfunction useMenuContext() {\n const context = useContext(MenuContext)\n if (!context) {\n throw new Error('Menu components must be used within a Menu')\n }\n return context\n}\n\nexport interface MenuProps extends Omit<HTMLAttributes<HTMLElement>, 'onChange'> {\n /** Currently active item */\n activeItem?: string | null\n /** Callback when active item changes */\n onChange?: (value: string | null) => void\n /** Menu size */\n size?: MenuSize\n /** Whether the menu is collapsed (icons only) */\n collapsed?: boolean\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nexport const Menu = forwardRef<HTMLElement, MenuProps>(function Menu(\n {\n activeItem: controlledActiveItem,\n onChange,\n size = 'md',\n collapsed = false,\n className,\n style,\n children,\n testId,\n ...props\n },\n ref\n) {\n const [internalActiveItem, setInternalActiveItem] = useState<string | null>(null)\n const activeItem = controlledActiveItem !== undefined ? controlledActiveItem : internalActiveItem\n\n const setActiveItem = (value: string | null) => {\n if (controlledActiveItem === undefined) {\n setInternalActiveItem(value)\n }\n onChange?.(value)\n }\n\n const menuStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n padding: 8,\n ...style,\n }\n\n return (\n <MenuContext.Provider value={{ size, activeItem, setActiveItem, collapsed }}>\n <nav\n ref={ref}\n className={cx('brycks-menu', `brycks-menu--${size}`, collapsed && 'brycks-menu--collapsed', className)}\n style={menuStyle}\n data-testid={testId}\n {...props}\n >\n {children}\n </nav>\n </MenuContext.Provider>\n )\n})\n\nMenu.displayName = 'Menu'\n\n// MenuItem\nexport interface MenuItemProps extends Omit<HTMLAttributes<HTMLButtonElement>, 'onClick'> {\n /** Item value (unique identifier) */\n value: string\n /** Icon before the label */\n icon?: ReactNode\n /** Badge/count after the label */\n badge?: ReactNode\n /** Whether the item is disabled */\n disabled?: boolean\n /** Callback when clicked */\n onClick?: (value: string) => void\n /** Custom class name */\n className?: string\n}\n\nconst sizeConfig: Record<MenuSize, { height: number; fontSize: number; iconSize: number; padding: number }> = {\n sm: { height: 32, fontSize: 13, iconSize: 16, padding: 10 },\n md: { height: 40, fontSize: 14, iconSize: 18, padding: 12 },\n lg: { height: 48, fontSize: 16, iconSize: 20, padding: 14 },\n}\n\nexport const MenuItem = forwardRef<HTMLButtonElement, MenuItemProps>(function MenuItem(\n { value, icon, badge, disabled = false, onClick, className, style, children, ...props },\n ref\n) {\n const { size, activeItem, setActiveItem, collapsed } = useMenuContext()\n const isActive = activeItem === value\n const config = sizeConfig[size]\n\n const handleClick = () => {\n if (disabled) return\n setActiveItem(value)\n onClick?.(value)\n }\n\n const itemStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 10,\n width: '100%',\n minHeight: config.height,\n padding: collapsed ? config.padding : `0 ${config.padding}px`,\n fontSize: config.fontSize,\n fontWeight: isActive ? 600 : 500,\n color: disabled\n ? 'var(--brycks-foreground-disabled)'\n : isActive\n ? 'var(--brycks-primary-default)'\n : 'var(--brycks-foreground-default)',\n backgroundColor: isActive ? 'var(--brycks-primary-50)' : 'transparent',\n border: 'none',\n borderRadius: 'var(--brycks-radius-md)',\n cursor: disabled ? 'not-allowed' : 'pointer',\n transition: 'all 150ms ease-out',\n textAlign: 'left',\n outline: 'none',\n justifyContent: collapsed ? 'center' : 'flex-start',\n ...style,\n }\n\n const iconStyle: CSSProperties = {\n width: config.iconSize,\n height: config.iconSize,\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }\n\n const badgeStyle: CSSProperties = {\n marginLeft: 'auto',\n }\n\n return (\n <button\n ref={ref}\n type=\"button\"\n disabled={disabled}\n className={cx('brycks-menu-item', isActive && 'brycks-menu-item--active', className)}\n style={itemStyle}\n onClick={handleClick}\n onMouseEnter={(e) => {\n if (!disabled && !isActive) {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n }\n }}\n onMouseLeave={(e) => {\n if (!isActive) {\n e.currentTarget.style.backgroundColor = 'transparent'\n }\n }}\n title={collapsed ? String(children) : undefined}\n {...props}\n >\n {icon && <span style={iconStyle}>{icon}</span>}\n {!collapsed && <span style={{ flex: 1 }}>{children}</span>}\n {!collapsed && badge && <span style={badgeStyle}>{badge}</span>}\n </button>\n )\n})\n\nMenuItem.displayName = 'MenuItem'\n\n// MenuGroup\nexport interface MenuGroupProps extends HTMLAttributes<HTMLDivElement> {\n /** Group label */\n label?: string\n /** Custom class name */\n className?: string\n}\n\nexport const MenuGroup = forwardRef<HTMLDivElement, MenuGroupProps>(function MenuGroup(\n { label, className, style, children, ...props },\n ref\n) {\n const { collapsed } = useMenuContext()\n\n const groupStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n ...style,\n }\n\n const labelStyle: CSSProperties = {\n padding: '12px 12px 6px 12px',\n fontSize: 11,\n fontWeight: 600,\n color: 'var(--brycks-foreground-muted)',\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n }\n\n return (\n <div ref={ref} className={cx('brycks-menu-group', className)} style={groupStyle} {...props}>\n {label && !collapsed && <div style={labelStyle}>{label}</div>}\n {children}\n </div>\n )\n})\n\nMenuGroup.displayName = 'MenuGroup'\n\n// MenuDivider\nexport interface MenuDividerProps extends HTMLAttributes<HTMLDivElement> {\n /** Custom class name */\n className?: string\n}\n\nexport const MenuDivider = forwardRef<HTMLDivElement, MenuDividerProps>(function MenuDivider(\n { className, style, ...props },\n ref\n) {\n const dividerStyle: CSSProperties = {\n height: 1,\n backgroundColor: 'var(--brycks-border-muted)',\n margin: '8px 0',\n ...style,\n }\n\n return (\n <div\n ref={ref}\n role=\"separator\"\n className={cx('brycks-menu-divider', className)}\n style={dividerStyle}\n {...props}\n />\n )\n})\n\nMenuDivider.displayName = 'MenuDivider'\n","/**\n * Pagination Component\n *\n * A pagination control for navigating through pages.\n * Supports different sizes and display modes.\n */\n\nimport { forwardRef, useMemo, type CSSProperties, type HTMLAttributes } from 'react'\nimport { cx } from '../../../utils/styles'\n\nexport type PaginationSize = 'sm' | 'md' | 'lg'\nexport type PaginationVariant = 'default' | 'simple' | 'minimal'\n\nexport interface PaginationProps extends Omit<HTMLAttributes<HTMLElement>, 'onChange'> {\n /** Current page (1-indexed) */\n page: number\n /** Total number of pages */\n totalPages: number\n /** Callback when page changes */\n onChange: (page: number) => void\n /** Pagination size */\n size?: PaginationSize\n /** Pagination variant */\n variant?: PaginationVariant\n /** Number of sibling pages to show on each side */\n siblingCount?: number\n /** Whether to show first/last buttons */\n showFirstLast?: boolean\n /** Whether to show prev/next buttons */\n showPrevNext?: boolean\n /** Whether the component is disabled */\n disabled?: boolean\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst sizeConfig: Record<PaginationSize, { height: number; fontSize: number; gap: number; minWidth: number }> = {\n sm: { height: 28, fontSize: 12, gap: 4, minWidth: 28 },\n md: { height: 36, fontSize: 14, gap: 6, minWidth: 36 },\n lg: { height: 44, fontSize: 16, gap: 8, minWidth: 44 },\n}\n\nfunction ChevronLeftIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M10 12L6 8l4-4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )\n}\n\nfunction ChevronRightIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M6 4l4 4-4 4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )\n}\n\nfunction ChevronsLeftIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M11 12l-4-4 4-4M7 12l-4-4 4-4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )\n}\n\nfunction ChevronsRightIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M5 4l4 4-4 4M9 4l4 4-4 4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )\n}\n\nexport const Pagination = forwardRef<HTMLElement, PaginationProps>(function Pagination(\n {\n page,\n totalPages,\n onChange,\n size = 'md',\n variant = 'default',\n siblingCount = 1,\n showFirstLast = true,\n showPrevNext = true,\n disabled = false,\n className,\n style,\n testId,\n ...props\n },\n ref\n) {\n const config = sizeConfig[size]\n\n // Generate page numbers to display\n const pages = useMemo(() => {\n if (variant === 'minimal' || variant === 'simple') {\n return []\n }\n\n const range: (number | 'ellipsis')[] = []\n const leftSibling = Math.max(page - siblingCount, 1)\n const rightSibling = Math.min(page + siblingCount, totalPages)\n\n const showLeftEllipsis = leftSibling > 2\n const showRightEllipsis = rightSibling < totalPages - 1\n\n if (!showLeftEllipsis) {\n for (let i = 1; i <= Math.min(3 + siblingCount, totalPages); i++) {\n range.push(i)\n }\n if (showRightEllipsis) {\n range.push('ellipsis')\n range.push(totalPages)\n }\n } else if (!showRightEllipsis) {\n range.push(1)\n range.push('ellipsis')\n for (let i = Math.max(totalPages - 2 - siblingCount, 1); i <= totalPages; i++) {\n range.push(i)\n }\n } else {\n range.push(1)\n range.push('ellipsis')\n for (let i = leftSibling; i <= rightSibling; i++) {\n range.push(i)\n }\n range.push('ellipsis')\n range.push(totalPages)\n }\n\n return range\n }, [page, totalPages, siblingCount, variant])\n\n const containerStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: config.gap,\n ...style,\n }\n\n const getButtonStyle = (isActive: boolean, isDisabled: boolean): CSSProperties => ({\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n minWidth: config.minWidth,\n height: config.height,\n padding: `0 ${config.gap + 4}px`,\n fontSize: config.fontSize,\n fontWeight: isActive ? 600 : 500,\n color: isDisabled\n ? 'var(--brycks-foreground-disabled)'\n : isActive\n ? 'var(--brycks-primary-default)'\n : 'var(--brycks-foreground-default)',\n backgroundColor: isActive ? 'var(--brycks-primary-50)' : 'transparent',\n border: 'none',\n borderRadius: 'var(--brycks-radius-md)',\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n transition: 'all 150ms ease-out',\n outline: 'none',\n })\n\n const ellipsisStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n minWidth: config.minWidth,\n height: config.height,\n color: 'var(--brycks-foreground-muted)',\n fontSize: config.fontSize,\n }\n\n const infoStyle: CSSProperties = {\n fontSize: config.fontSize,\n color: 'var(--brycks-foreground-muted)',\n padding: `0 ${config.gap}px`,\n }\n\n const handlePageChange = (newPage: number) => {\n if (newPage >= 1 && newPage <= totalPages && newPage !== page && !disabled) {\n onChange(newPage)\n }\n }\n\n return (\n <nav\n ref={ref}\n role=\"navigation\"\n aria-label=\"Pagination\"\n className={cx('brycks-pagination', `brycks-pagination--${size}`, `brycks-pagination--${variant}`, className)}\n style={containerStyle}\n data-testid={testId}\n {...props}\n >\n {showFirstLast && variant !== 'minimal' && (\n <button\n type=\"button\"\n aria-label=\"First page\"\n disabled={page === 1 || disabled}\n style={getButtonStyle(false, page === 1 || disabled)}\n onClick={() => handlePageChange(1)}\n onMouseEnter={(e) => {\n if (page !== 1 && !disabled) {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent'\n }}\n >\n <ChevronsLeftIcon />\n </button>\n )}\n\n {showPrevNext && (\n <button\n type=\"button\"\n aria-label=\"Previous page\"\n disabled={page === 1 || disabled}\n style={getButtonStyle(false, page === 1 || disabled)}\n onClick={() => handlePageChange(page - 1)}\n onMouseEnter={(e) => {\n if (page !== 1 && !disabled) {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent'\n }}\n >\n <ChevronLeftIcon />\n </button>\n )}\n\n {variant === 'simple' || variant === 'minimal' ? (\n <span style={infoStyle}>\n {variant === 'minimal' ? `${page} / ${totalPages}` : `Page ${page} of ${totalPages}`}\n </span>\n ) : (\n pages.map((p, index) =>\n p === 'ellipsis' ? (\n <span key={`ellipsis-${index}`} style={ellipsisStyle}>\n ...\n </span>\n ) : (\n <button\n key={p}\n type=\"button\"\n aria-label={`Page ${p}`}\n aria-current={p === page ? 'page' : undefined}\n disabled={disabled}\n style={getButtonStyle(p === page, disabled)}\n onClick={() => handlePageChange(p)}\n onMouseEnter={(e) => {\n if (p !== page && !disabled) {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n }\n }}\n onMouseLeave={(e) => {\n if (p !== page) {\n e.currentTarget.style.backgroundColor = 'transparent'\n }\n }}\n >\n {p}\n </button>\n )\n )\n )}\n\n {showPrevNext && (\n <button\n type=\"button\"\n aria-label=\"Next page\"\n disabled={page === totalPages || disabled}\n style={getButtonStyle(false, page === totalPages || disabled)}\n onClick={() => handlePageChange(page + 1)}\n onMouseEnter={(e) => {\n if (page !== totalPages && !disabled) {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent'\n }}\n >\n <ChevronRightIcon />\n </button>\n )}\n\n {showFirstLast && variant !== 'minimal' && (\n <button\n type=\"button\"\n aria-label=\"Last page\"\n disabled={page === totalPages || disabled}\n style={getButtonStyle(false, page === totalPages || disabled)}\n onClick={() => handlePageChange(totalPages)}\n onMouseEnter={(e) => {\n if (page !== totalPages && !disabled) {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent'\n }}\n >\n <ChevronsRightIcon />\n </button>\n )}\n </nav>\n )\n})\n\nPagination.displayName = 'Pagination'\n","/**\n * Breadcrumb Component\n *\n * A navigation breadcrumb trail showing the current location.\n * Supports custom separators and link rendering.\n */\n\nimport {\n forwardRef,\n Children,\n cloneElement,\n isValidElement,\n type CSSProperties,\n type ReactNode,\n type HTMLAttributes,\n type ElementType,\n} from 'react'\nimport { cx } from '../../../utils/styles'\n\nexport type BreadcrumbSize = 'sm' | 'md' | 'lg'\n\nexport interface BreadcrumbProps extends HTMLAttributes<HTMLElement> {\n /** Custom separator between items */\n separator?: ReactNode\n /** Breadcrumb size */\n size?: BreadcrumbSize\n /** Maximum items to show (rest collapsed) */\n maxItems?: number\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst sizeConfig: Record<BreadcrumbSize, { fontSize: number; gap: number; iconSize: number }> = {\n sm: { fontSize: 12, gap: 6, iconSize: 12 },\n md: { fontSize: 14, gap: 8, iconSize: 14 },\n lg: { fontSize: 16, gap: 10, iconSize: 16 },\n}\n\nfunction DefaultSeparator({ size }: { size: number }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M6 4l4 4-4 4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )\n}\n\nexport const Breadcrumb = forwardRef<HTMLElement, BreadcrumbProps>(function Breadcrumb(\n {\n separator,\n size = 'md',\n maxItems,\n className,\n style,\n children,\n testId,\n ...props\n },\n ref\n) {\n const config = sizeConfig[size]\n const items = Children.toArray(children).filter(isValidElement)\n\n // Handle maxItems truncation\n let visibleItems = items\n let showEllipsis = false\n\n if (maxItems && items.length > maxItems) {\n const sideCount = Math.floor((maxItems - 1) / 2)\n visibleItems = [\n ...items.slice(0, sideCount),\n ...items.slice(items.length - (maxItems - sideCount - 1)),\n ]\n showEllipsis = true\n }\n\n const navStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n ...style,\n }\n\n const listStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: config.gap,\n listStyle: 'none',\n margin: 0,\n padding: 0,\n }\n\n const separatorStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n color: 'var(--brycks-foreground-muted)',\n }\n\n const ellipsisStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n color: 'var(--brycks-foreground-muted)',\n fontSize: config.fontSize,\n }\n\n const renderSeparator = () => (\n <span style={separatorStyle} aria-hidden=\"true\">\n {separator ?? <DefaultSeparator size={config.iconSize} />}\n </span>\n )\n\n return (\n <nav\n ref={ref}\n aria-label=\"Breadcrumb\"\n className={cx('brycks-breadcrumb', `brycks-breadcrumb--${size}`, className)}\n style={navStyle}\n data-testid={testId}\n {...props}\n >\n <ol style={listStyle}>\n {visibleItems.map((child, index) => {\n const isLast = index === visibleItems.length - 1\n const showSeparator = !isLast\n\n // Insert ellipsis after first item if truncating\n const showEllipsisHere = showEllipsis && index === Math.floor((maxItems! - 1) / 2) - 1\n\n return (\n <li key={index} style={{ display: 'flex', alignItems: 'center', gap: config.gap }}>\n {cloneElement(child as React.ReactElement<BreadcrumbItemProps>, {\n isCurrentPage: isLast,\n size,\n })}\n {showEllipsisHere && (\n <>\n {renderSeparator()}\n <span style={ellipsisStyle}>...</span>\n </>\n )}\n {showSeparator && renderSeparator()}\n </li>\n )\n })}\n </ol>\n </nav>\n )\n})\n\nBreadcrumb.displayName = 'Breadcrumb'\n\n// BreadcrumbItem\nexport interface BreadcrumbItemProps extends HTMLAttributes<HTMLElement> {\n /** Render as link or custom element */\n as?: ElementType\n /** Link href (when as=\"a\") */\n href?: string\n /** Icon before the label */\n icon?: ReactNode\n /** Whether this is the current page (auto-set by parent) */\n isCurrentPage?: boolean\n /** Size (auto-set by parent) */\n size?: BreadcrumbSize\n /** Custom class name */\n className?: string\n}\n\nexport const BreadcrumbItem = forwardRef<HTMLElement, BreadcrumbItemProps>(function BreadcrumbItem(\n {\n as: Component = 'a',\n href,\n icon,\n isCurrentPage = false,\n size = 'md',\n className,\n style,\n children,\n ...props\n },\n ref\n) {\n const config = sizeConfig[size]\n\n const itemStyle: CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n gap: 6,\n fontSize: config.fontSize,\n fontWeight: isCurrentPage ? 500 : 400,\n color: isCurrentPage ? 'var(--brycks-foreground-default)' : 'var(--brycks-foreground-muted)',\n textDecoration: 'none',\n transition: 'color 150ms ease-out',\n cursor: isCurrentPage ? 'default' : 'pointer',\n ...style,\n }\n\n const iconStyle: CSSProperties = {\n width: config.iconSize,\n height: config.iconSize,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n }\n\n const componentProps: Record<string, unknown> = {\n ref,\n className: cx('brycks-breadcrumb-item', isCurrentPage && 'brycks-breadcrumb-item--current', className),\n style: itemStyle,\n 'aria-current': isCurrentPage ? 'page' : undefined,\n ...props,\n }\n\n if (Component === 'a' && href && !isCurrentPage) {\n componentProps.href = href\n }\n\n // Remove href for current page or non-link elements\n if (isCurrentPage && Component === 'a') {\n componentProps.tabIndex = -1\n }\n\n return (\n <Component\n {...componentProps}\n onMouseEnter={(e: React.MouseEvent<HTMLElement>) => {\n if (!isCurrentPage) {\n e.currentTarget.style.color = 'var(--brycks-foreground-default)'\n }\n }}\n onMouseLeave={(e: React.MouseEvent<HTMLElement>) => {\n if (!isCurrentPage) {\n e.currentTarget.style.color = 'var(--brycks-foreground-muted)'\n }\n }}\n >\n {icon && <span style={iconStyle}>{icon}</span>}\n {children}\n </Component>\n )\n})\n\nBreadcrumbItem.displayName = 'BreadcrumbItem'\n","/**\n * Table Component\n *\n * A flexible table component with sorting, selection, and responsive support.\n * Follows design system patterns for consistent styling.\n */\n\nimport {\n forwardRef,\n createContext,\n useContext,\n type CSSProperties,\n type HTMLAttributes,\n type ThHTMLAttributes,\n type TdHTMLAttributes,\n} from 'react'\nimport { cx } from '../../../utils/styles'\n\nexport type TableSize = 'sm' | 'md' | 'lg'\nexport type TableVariant = 'default' | 'striped' | 'bordered'\n\ninterface TableContextValue {\n size: TableSize\n variant: TableVariant\n}\n\nconst TableContext = createContext<TableContextValue>({ size: 'md', variant: 'default' })\n\nfunction useTableContext() {\n return useContext(TableContext)\n}\n\nexport interface TableProps extends HTMLAttributes<HTMLTableElement> {\n /** Table size */\n size?: TableSize\n /** Table variant */\n variant?: TableVariant\n /** Whether the table has a sticky header */\n stickyHeader?: boolean\n /** Whether the table is in a loading state */\n loading?: boolean\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst sizeConfig: Record<TableSize, { fontSize: number; padding: string; headerPadding: string }> = {\n sm: { fontSize: 13, padding: '8px 12px', headerPadding: '8px 12px' },\n md: { fontSize: 14, padding: '12px 16px', headerPadding: '12px 16px' },\n lg: { fontSize: 15, padding: '16px 20px', headerPadding: '14px 20px' },\n}\n\nexport const Table = forwardRef<HTMLTableElement, TableProps>(function Table(\n {\n size = 'md',\n variant = 'default',\n stickyHeader = false,\n loading = false,\n className,\n style,\n children,\n testId,\n ...props\n },\n ref\n) {\n const containerStyle: CSSProperties = {\n position: 'relative',\n width: '100%',\n overflow: 'auto',\n ...style,\n }\n\n const tableStyle: CSSProperties = {\n width: '100%',\n borderCollapse: variant === 'bordered' ? 'separate' : 'collapse',\n borderSpacing: 0,\n fontSize: sizeConfig[size].fontSize,\n opacity: loading ? 0.6 : 1,\n transition: 'opacity 150ms ease-out',\n }\n\n return (\n <TableContext.Provider value={{ size, variant }}>\n <div className=\"brycks-table-container\" style={containerStyle}>\n <table\n ref={ref}\n className={cx('brycks-table', `brycks-table--${size}`, `brycks-table--${variant}`, className)}\n style={tableStyle}\n data-testid={testId}\n {...props}\n >\n {children}\n </table>\n </div>\n </TableContext.Provider>\n )\n})\n\nTable.displayName = 'Table'\n\n// TableHead\nexport interface TableHeadProps extends HTMLAttributes<HTMLTableSectionElement> {\n /** Whether the header is sticky */\n sticky?: boolean\n /** Custom class name */\n className?: string\n}\n\nexport const TableHead = forwardRef<HTMLTableSectionElement, TableHeadProps>(function TableHead(\n { sticky = false, className, style, children, ...props },\n ref\n) {\n const headStyle: CSSProperties = {\n backgroundColor: 'var(--brycks-background-muted)',\n position: sticky ? 'sticky' : undefined,\n top: sticky ? 0 : undefined,\n zIndex: sticky ? 1 : undefined,\n ...style,\n }\n\n return (\n <thead\n ref={ref}\n className={cx('brycks-table-head', sticky && 'brycks-table-head--sticky', className)}\n style={headStyle}\n {...props}\n >\n {children}\n </thead>\n )\n})\n\nTableHead.displayName = 'TableHead'\n\n// TableBody\nexport interface TableBodyProps extends HTMLAttributes<HTMLTableSectionElement> {\n /** Custom class name */\n className?: string\n}\n\nexport const TableBody = forwardRef<HTMLTableSectionElement, TableBodyProps>(function TableBody(\n { className, style, children, ...props },\n ref\n) {\n const bodyStyle: CSSProperties = {\n ...style,\n }\n\n return (\n <tbody\n ref={ref}\n className={cx('brycks-table-body', className)}\n style={bodyStyle}\n {...props}\n >\n {children}\n </tbody>\n )\n})\n\nTableBody.displayName = 'TableBody'\n\n// TableRow\nexport interface TableRowProps extends HTMLAttributes<HTMLTableRowElement> {\n /** Whether the row is selected */\n selected?: boolean\n /** Whether the row is clickable */\n clickable?: boolean\n /** Custom class name */\n className?: string\n}\n\nexport const TableRow = forwardRef<HTMLTableRowElement, TableRowProps>(function TableRow(\n { selected = false, clickable = false, className, style, children, ...props },\n ref\n) {\n const { variant } = useTableContext()\n\n const rowStyle: CSSProperties = {\n backgroundColor: selected\n ? 'var(--brycks-primary-50)'\n : 'transparent',\n borderBottom: variant !== 'bordered' ? '1px solid var(--brycks-border-muted)' : undefined,\n cursor: clickable ? 'pointer' : undefined,\n transition: 'background-color 150ms ease-out',\n ...style,\n }\n\n return (\n <tr\n ref={ref}\n className={cx(\n 'brycks-table-row',\n selected && 'brycks-table-row--selected',\n clickable && 'brycks-table-row--clickable',\n className\n )}\n style={rowStyle}\n onMouseEnter={(e) => {\n if (clickable && !selected) {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n }\n }}\n onMouseLeave={(e) => {\n if (!selected) {\n e.currentTarget.style.backgroundColor = 'transparent'\n }\n }}\n {...props}\n >\n {children}\n </tr>\n )\n})\n\nTableRow.displayName = 'TableRow'\n\n// TableHeader (th)\nexport interface TableHeaderProps extends ThHTMLAttributes<HTMLTableCellElement> {\n /** Whether the column is sortable */\n sortable?: boolean\n /** Sort direction */\n sortDirection?: 'asc' | 'desc' | null\n /** Callback when sort is requested */\n onSort?: () => void\n /** Text alignment */\n align?: 'left' | 'center' | 'right'\n /** Custom class name */\n className?: string\n}\n\nfunction SortIcon({ direction }: { direction: 'asc' | 'desc' | null }) {\n if (!direction) {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" style={{ opacity: 0.4 }}>\n <path d=\"M7 3L10 6H4L7 3Z\" fill=\"currentColor\" />\n <path d=\"M7 11L4 8H10L7 11Z\" fill=\"currentColor\" />\n </svg>\n )\n }\n\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n {direction === 'asc' ? (\n <path d=\"M7 3L10 6H4L7 3Z\" fill=\"currentColor\" />\n ) : (\n <path d=\"M7 11L4 8H10L7 11Z\" fill=\"currentColor\" />\n )}\n </svg>\n )\n}\n\nexport const TableHeader = forwardRef<HTMLTableCellElement, TableHeaderProps>(function TableHeader(\n {\n sortable = false,\n sortDirection = null,\n onSort,\n align = 'left',\n className,\n style,\n children,\n ...props\n },\n ref\n) {\n const { size } = useTableContext()\n const config = sizeConfig[size]\n\n const headerStyle: CSSProperties = {\n padding: config.headerPadding,\n fontWeight: 600,\n color: 'var(--brycks-foreground-muted)',\n textAlign: align,\n whiteSpace: 'nowrap',\n cursor: sortable ? 'pointer' : undefined,\n userSelect: sortable ? 'none' : undefined,\n transition: 'color 150ms ease-out',\n ...style,\n }\n\n const contentStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n justifyContent: align === 'right' ? 'flex-end' : align === 'center' ? 'center' : 'flex-start',\n }\n\n const handleClick = () => {\n if (sortable && onSort) {\n onSort()\n }\n }\n\n return (\n <th\n ref={ref}\n className={cx('brycks-table-header', sortable && 'brycks-table-header--sortable', className)}\n style={headerStyle}\n onClick={handleClick}\n onMouseEnter={(e) => {\n if (sortable) {\n e.currentTarget.style.color = 'var(--brycks-foreground-default)'\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.color = 'var(--brycks-foreground-muted)'\n }}\n {...props}\n >\n <span style={contentStyle}>\n {children}\n {sortable && <SortIcon direction={sortDirection} />}\n </span>\n </th>\n )\n})\n\nTableHeader.displayName = 'TableHeader'\n\n// TableCell (td)\nexport interface TableCellProps extends TdHTMLAttributes<HTMLTableCellElement> {\n /** Text alignment */\n align?: 'left' | 'center' | 'right'\n /** Whether to truncate text */\n truncate?: boolean\n /** Custom class name */\n className?: string\n}\n\nexport const TableCell = forwardRef<HTMLTableCellElement, TableCellProps>(function TableCell(\n { align = 'left', truncate = false, className, style, children, ...props },\n ref\n) {\n const { size, variant } = useTableContext()\n const config = sizeConfig[size]\n\n const cellStyle: CSSProperties = {\n padding: config.padding,\n color: 'var(--brycks-foreground-default)',\n textAlign: align,\n verticalAlign: 'middle',\n border: variant === 'bordered' ? '1px solid var(--brycks-border-muted)' : undefined,\n maxWidth: truncate ? 200 : undefined,\n overflow: truncate ? 'hidden' : undefined,\n textOverflow: truncate ? 'ellipsis' : undefined,\n whiteSpace: truncate ? 'nowrap' : undefined,\n ...style,\n }\n\n return (\n <td\n ref={ref}\n className={cx('brycks-table-cell', truncate && 'brycks-table-cell--truncate', className)}\n style={cellStyle}\n title={truncate && typeof children === 'string' ? children : undefined}\n {...props}\n >\n {children}\n </td>\n )\n})\n\nTableCell.displayName = 'TableCell'\n\n// TableFoot\nexport interface TableFootProps extends HTMLAttributes<HTMLTableSectionElement> {\n /** Custom class name */\n className?: string\n}\n\nexport const TableFoot = forwardRef<HTMLTableSectionElement, TableFootProps>(function TableFoot(\n { className, style, children, ...props },\n ref\n) {\n const footStyle: CSSProperties = {\n backgroundColor: 'var(--brycks-background-muted)',\n fontWeight: 500,\n ...style,\n }\n\n return (\n <tfoot\n ref={ref}\n className={cx('brycks-table-foot', className)}\n style={footStyle}\n {...props}\n >\n {children}\n </tfoot>\n )\n})\n\nTableFoot.displayName = 'TableFoot'\n\n// TableCaption\nexport interface TableCaptionProps extends HTMLAttributes<HTMLTableCaptionElement> {\n /** Caption placement */\n placement?: 'top' | 'bottom'\n /** Custom class name */\n className?: string\n}\n\nexport const TableCaption = forwardRef<HTMLTableCaptionElement, TableCaptionProps>(function TableCaption(\n { placement = 'bottom', className, style, children, ...props },\n ref\n) {\n const captionStyle: CSSProperties = {\n captionSide: placement,\n padding: '12px 16px',\n fontSize: 13,\n color: 'var(--brycks-foreground-muted)',\n textAlign: 'left',\n ...style,\n }\n\n return (\n <caption\n ref={ref}\n className={cx('brycks-table-caption', className)}\n style={captionStyle}\n {...props}\n >\n {children}\n </caption>\n )\n})\n\nTableCaption.displayName = 'TableCaption'\n","/**\n * List Component\n *\n * A flexible list component for displaying items in a vertical layout.\n * Supports different sizes, icons, and interactive items.\n */\n\nimport {\n forwardRef,\n createContext,\n useContext,\n type CSSProperties,\n type ReactNode,\n type HTMLAttributes,\n} from 'react'\nimport { cx } from '../../../utils/styles'\n\nexport type ListSize = 'sm' | 'md' | 'lg'\nexport type ListVariant = 'default' | 'bordered' | 'separated'\n\ninterface ListContextValue {\n size: ListSize\n variant: ListVariant\n}\n\nconst ListContext = createContext<ListContextValue>({ size: 'md', variant: 'default' })\n\nfunction useListContext() {\n return useContext(ListContext)\n}\n\nexport interface ListProps extends HTMLAttributes<HTMLUListElement> {\n /** List size */\n size?: ListSize\n /** List variant */\n variant?: ListVariant\n /** Whether list items are interactive */\n interactive?: boolean\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nexport const List = forwardRef<HTMLUListElement, ListProps>(function List(\n {\n size = 'md',\n variant = 'default',\n interactive = false,\n className,\n style,\n children,\n testId,\n ...props\n },\n ref\n) {\n const listStyle: CSSProperties = {\n listStyle: 'none',\n margin: 0,\n padding: 0,\n display: 'flex',\n flexDirection: 'column',\n gap: variant === 'separated' ? 8 : 0,\n border: variant === 'bordered' ? '1px solid var(--brycks-border-default)' : undefined,\n borderRadius: variant === 'bordered' ? 'var(--brycks-radius-lg)' : undefined,\n overflow: variant === 'bordered' ? 'hidden' : undefined,\n ...style,\n }\n\n return (\n <ListContext.Provider value={{ size, variant }}>\n <ul\n ref={ref}\n className={cx(\n 'brycks-list',\n `brycks-list--${size}`,\n `brycks-list--${variant}`,\n interactive && 'brycks-list--interactive',\n className\n )}\n style={listStyle}\n data-testid={testId}\n {...props}\n >\n {children}\n </ul>\n </ListContext.Provider>\n )\n})\n\nList.displayName = 'List'\n\n// ListItem\nexport interface ListItemProps extends HTMLAttributes<HTMLLIElement> {\n /** Icon or avatar on the left */\n leftElement?: ReactNode\n /** Element on the right (badge, button, etc.) */\n rightElement?: ReactNode\n /** Secondary text below the main content */\n secondary?: ReactNode\n /** Whether the item is selected */\n selected?: boolean\n /** Whether the item is disabled */\n disabled?: boolean\n /** Whether the item is clickable */\n clickable?: boolean\n /** Custom class name */\n className?: string\n}\n\nconst sizeConfig: Record<ListSize, { padding: string; fontSize: number; secondarySize: number; gap: number; minHeight: number }> = {\n sm: { padding: '8px 12px', fontSize: 13, secondarySize: 12, gap: 10, minHeight: 40 },\n md: { padding: '12px 16px', fontSize: 14, secondarySize: 13, gap: 12, minHeight: 52 },\n lg: { padding: '16px 20px', fontSize: 16, secondarySize: 14, gap: 14, minHeight: 64 },\n}\n\nexport const ListItem = forwardRef<HTMLLIElement, ListItemProps>(function ListItem(\n {\n leftElement,\n rightElement,\n secondary,\n selected = false,\n disabled = false,\n clickable = false,\n className,\n style,\n children,\n ...props\n },\n ref\n) {\n const { size, variant } = useListContext()\n const config = sizeConfig[size]\n\n const itemStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: config.gap,\n padding: config.padding,\n minHeight: config.minHeight,\n backgroundColor: selected\n ? 'var(--brycks-primary-50)'\n : 'transparent',\n borderBottom: variant === 'default' || variant === 'bordered'\n ? '1px solid var(--brycks-border-muted)'\n : undefined,\n border: variant === 'separated' ? '1px solid var(--brycks-border-default)' : undefined,\n borderRadius: variant === 'separated' ? 'var(--brycks-radius-lg)' : undefined,\n cursor: disabled ? 'not-allowed' : clickable ? 'pointer' : undefined,\n opacity: disabled ? 0.5 : 1,\n transition: 'background-color 150ms ease-out',\n ...style,\n }\n\n const contentStyle: CSSProperties = {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n minWidth: 0,\n }\n\n const primaryStyle: CSSProperties = {\n fontSize: config.fontSize,\n fontWeight: 500,\n color: 'var(--brycks-foreground-default)',\n lineHeight: 1.4,\n }\n\n const secondaryStyle: CSSProperties = {\n fontSize: config.secondarySize,\n color: 'var(--brycks-foreground-muted)',\n lineHeight: 1.4,\n }\n\n const elementStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n }\n\n return (\n <li\n ref={ref}\n className={cx(\n 'brycks-list-item',\n selected && 'brycks-list-item--selected',\n clickable && 'brycks-list-item--clickable',\n disabled && 'brycks-list-item--disabled',\n className\n )}\n style={itemStyle}\n onMouseEnter={(e) => {\n if (clickable && !disabled && !selected) {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n }\n }}\n onMouseLeave={(e) => {\n if (!selected) {\n e.currentTarget.style.backgroundColor = 'transparent'\n }\n }}\n {...props}\n >\n {leftElement && <span style={elementStyle}>{leftElement}</span>}\n <div style={contentStyle}>\n <span style={primaryStyle}>{children}</span>\n {secondary && <span style={secondaryStyle}>{secondary}</span>}\n </div>\n {rightElement && <span style={elementStyle}>{rightElement}</span>}\n </li>\n )\n})\n\nListItem.displayName = 'ListItem'\n\n// ListDivider\nexport interface ListDividerProps extends HTMLAttributes<HTMLLIElement> {\n /** Custom class name */\n className?: string\n}\n\nexport const ListDivider = forwardRef<HTMLLIElement, ListDividerProps>(function ListDivider(\n { className, style, ...props },\n ref\n) {\n const dividerStyle: CSSProperties = {\n height: 1,\n backgroundColor: 'var(--brycks-border-muted)',\n margin: '8px 0',\n ...style,\n }\n\n return (\n <li\n ref={ref}\n role=\"separator\"\n className={cx('brycks-list-divider', className)}\n style={dividerStyle}\n {...props}\n />\n )\n})\n\nListDivider.displayName = 'ListDivider'\n\n// ListHeader\nexport interface ListHeaderProps extends HTMLAttributes<HTMLLIElement> {\n /** Custom class name */\n className?: string\n}\n\nexport const ListHeader = forwardRef<HTMLLIElement, ListHeaderProps>(function ListHeader(\n { className, style, children, ...props },\n ref\n) {\n const headerStyle: CSSProperties = {\n padding: '12px 16px 8px 16px',\n fontSize: 11,\n fontWeight: 600,\n color: 'var(--brycks-foreground-muted)',\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n ...style,\n }\n\n return (\n <li\n ref={ref}\n className={cx('brycks-list-header', className)}\n style={headerStyle}\n {...props}\n >\n {children}\n </li>\n )\n})\n\nListHeader.displayName = 'ListHeader'\n","/**\r\n * Badge Component\r\n *\r\n * Small label for status, counts, or categorization.\r\n * Clean, minimal design with subtle color coding.\r\n */\r\n\r\nimport {\r\n forwardRef,\r\n type CSSProperties,\r\n type ReactNode,\r\n type HTMLAttributes,\r\n} from 'react'\r\nimport { cx } from '../../../utils/styles'\r\n\r\nexport type BadgeVariant = 'solid' | 'subtle' | 'outline'\r\nexport type BadgeIntent = 'neutral' | 'primary' | 'accent' | 'success' | 'warning' | 'error' | 'info'\r\nexport type BadgeSize = 'sm' | 'md' | 'lg'\r\n\r\nexport interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {\r\n /** Visual variant */\r\n variant?: BadgeVariant\r\n /** Color intent */\r\n intent?: BadgeIntent\r\n /** Size */\r\n size?: BadgeSize\r\n /** Custom class name */\r\n className?: string\r\n /** Test ID */\r\n testId?: string\r\n /** Badge content */\r\n children?: ReactNode\r\n}\r\n\r\nconst sizeStyles: Record<BadgeSize, CSSProperties> = {\r\n sm: { fontSize: 10, padding: '2px 6px', height: 18 },\r\n md: { fontSize: 11, padding: '3px 8px', height: 22 },\r\n lg: { fontSize: 12, padding: '4px 10px', height: 26 },\r\n}\r\n\r\nconst intentColors: Record<BadgeIntent, Record<BadgeVariant, CSSProperties>> = {\r\n neutral: {\r\n solid: { backgroundColor: 'var(--brycks-foreground-default)', color: 'var(--brycks-background-app)' },\r\n subtle: { backgroundColor: 'var(--brycks-background-muted)', color: 'var(--brycks-foreground-default)' },\r\n outline: { backgroundColor: 'transparent', color: 'var(--brycks-foreground-default)', borderColor: 'var(--brycks-border-default)' },\r\n },\r\n primary: {\r\n solid: { backgroundColor: 'var(--brycks-primary-default)', color: 'var(--brycks-primary-foreground)' },\r\n subtle: { backgroundColor: 'var(--brycks-primary-muted)', color: 'var(--brycks-primary-hover)' },\r\n outline: { backgroundColor: 'transparent', color: 'var(--brycks-primary-default)', borderColor: 'var(--brycks-primary-default)' },\r\n },\r\n accent: {\r\n solid: { backgroundColor: 'var(--brycks-accent-default)', color: 'var(--brycks-accent-foreground)' },\r\n subtle: { backgroundColor: 'var(--brycks-accent-muted)', color: 'var(--brycks-accent-hover)' },\r\n outline: { backgroundColor: 'transparent', color: 'var(--brycks-accent-default)', borderColor: 'var(--brycks-accent-default)' },\r\n },\r\n success: {\r\n solid: { backgroundColor: 'var(--brycks-success-default)', color: 'var(--brycks-success-foreground)' },\r\n subtle: { backgroundColor: 'var(--brycks-success-muted)', color: 'var(--brycks-success-on-muted)' },\r\n outline: { backgroundColor: 'transparent', color: 'var(--brycks-success-default)', borderColor: 'var(--brycks-success-default)' },\r\n },\r\n warning: {\r\n solid: { backgroundColor: 'var(--brycks-warning-default)', color: 'var(--brycks-warning-foreground)' },\r\n subtle: { backgroundColor: 'var(--brycks-warning-muted)', color: 'var(--brycks-warning-on-muted)' },\r\n outline: { backgroundColor: 'transparent', color: 'var(--brycks-warning-default)', borderColor: 'var(--brycks-warning-default)' },\r\n },\r\n error: {\r\n solid: { backgroundColor: 'var(--brycks-error-default)', color: 'var(--brycks-error-foreground)' },\r\n subtle: { backgroundColor: 'var(--brycks-error-muted)', color: 'var(--brycks-error-on-muted)' },\r\n outline: { backgroundColor: 'transparent', color: 'var(--brycks-error-default)', borderColor: 'var(--brycks-error-default)' },\r\n },\r\n info: {\r\n solid: { backgroundColor: 'var(--brycks-info-default)', color: 'var(--brycks-info-foreground)' },\r\n subtle: { backgroundColor: 'var(--brycks-info-muted)', color: 'var(--brycks-info-on-muted)' },\r\n outline: { backgroundColor: 'transparent', color: 'var(--brycks-info-default)', borderColor: 'var(--brycks-info-default)' },\r\n },\r\n}\r\n\r\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(function Badge(\r\n {\r\n variant = 'subtle',\r\n intent = 'neutral',\r\n size = 'md',\r\n className,\r\n style,\r\n testId,\r\n children,\r\n ...props\r\n },\r\n ref\r\n) {\r\n const sizeValue = sizeStyles[size]\r\n const colorValue = intentColors[intent][variant]\r\n\r\n const badgeStyle: CSSProperties = {\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n fontWeight: 500,\r\n fontFamily: 'var(--brycks-font-sans)',\r\n lineHeight: 1,\r\n borderRadius: 'var(--brycks-radius-full)',\r\n whiteSpace: 'nowrap',\r\n border: variant === 'outline' ? '1px solid' : 'none',\r\n ...sizeValue,\r\n ...colorValue,\r\n ...style,\r\n }\r\n\r\n return (\r\n <span\r\n ref={ref}\r\n className={cx(\r\n 'brycks-badge',\r\n `brycks-badge--${variant}`,\r\n `brycks-badge--${intent}`,\r\n `brycks-badge--${size}`,\r\n className\r\n )}\r\n style={badgeStyle}\r\n data-testid={testId}\r\n {...props}\r\n >\r\n {children}\r\n </span>\r\n )\r\n})\r\n\r\nBadge.displayName = 'Badge'\r\n","/**\r\n * Loader Component\r\n *\r\n * Elegant loading spinner with smooth animation.\r\n * Apple-inspired design with multiple sizes and variants.\r\n */\r\n\r\nimport {\r\n forwardRef,\r\n type CSSProperties,\r\n type HTMLAttributes,\r\n} from 'react'\r\nimport { cx } from '../../../utils/styles'\r\n\r\nexport type LoaderSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\r\nexport type LoaderVariant = 'spinner' | 'dots' | 'pulse'\r\n\r\nexport interface LoaderProps extends HTMLAttributes<HTMLDivElement> {\r\n /** Loader size */\r\n size?: LoaderSize\r\n /** Loader variant */\r\n variant?: LoaderVariant\r\n /** Color (CSS value) */\r\n color?: string\r\n /** Accessible label */\r\n label?: string\r\n /** Custom class name */\r\n className?: string\r\n /** Test ID */\r\n testId?: string\r\n}\r\n\r\nconst sizeMap: Record<LoaderSize, number> = {\r\n xs: 14,\r\n sm: 18,\r\n md: 24,\r\n lg: 32,\r\n xl: 48,\r\n}\r\n\r\n/** Spinner loader */\r\nfunction SpinnerLoader({ size, color }: { size: number; color: string }) {\r\n return (\r\n <svg\r\n width={size}\r\n height={size}\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n style={{ animation: 'brycks-spin 1s linear infinite' }}\r\n >\r\n <circle\r\n cx=\"12\"\r\n cy=\"12\"\r\n r=\"10\"\r\n stroke={color}\r\n strokeWidth=\"2.5\"\r\n strokeLinecap=\"round\"\r\n opacity=\"0.2\"\r\n />\r\n <path\r\n d=\"M12 2C6.47715 2 2 6.47715 2 12\"\r\n stroke={color}\r\n strokeWidth=\"2.5\"\r\n strokeLinecap=\"round\"\r\n />\r\n </svg>\r\n )\r\n}\r\n\r\n/** Dots loader */\r\nfunction Dots({ size, color }: { size: number; color: string }) {\r\n const dotSize = size / 4\r\n const gap = size / 6\r\n\r\n return (\r\n <div\r\n style={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap,\r\n height: size,\r\n }}\r\n >\r\n {[0, 1, 2].map((i) => (\r\n <span\r\n key={i}\r\n style={{\r\n width: dotSize,\r\n height: dotSize,\r\n borderRadius: '50%',\r\n backgroundColor: color,\r\n animation: `brycks-bounce 1.4s ease-in-out infinite`,\r\n animationDelay: `${i * 0.16}s`,\r\n }}\r\n />\r\n ))}\r\n </div>\r\n )\r\n}\r\n\r\n/** Pulse loader */\r\nfunction Pulse({ size, color }: { size: number; color: string }) {\r\n return (\r\n <span\r\n style={{\r\n display: 'block',\r\n width: size,\r\n height: size,\r\n borderRadius: '50%',\r\n backgroundColor: color,\r\n animation: 'brycks-pulse 1.5s ease-in-out infinite',\r\n }}\r\n />\r\n )\r\n}\r\n\r\nexport const Loader = forwardRef<HTMLDivElement, LoaderProps>(function Loader(\r\n {\r\n size = 'md',\r\n variant = 'spinner',\r\n color = 'var(--brycks-primary-default)',\r\n label = 'Loading',\r\n className,\r\n style,\r\n testId,\r\n ...props\r\n },\r\n ref\r\n) {\r\n const sizeValue = sizeMap[size]\r\n\r\n const wrapperStyle: CSSProperties = {\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n ...style,\r\n }\r\n\r\n const renderLoader = () => {\r\n switch (variant) {\r\n case 'dots':\r\n return <Dots size={sizeValue} color={color} />\r\n case 'pulse':\r\n return <Pulse size={sizeValue} color={color} />\r\n default:\r\n return <SpinnerLoader size={sizeValue} color={color} />\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n <style>\r\n {`\r\n @keyframes brycks-spin {\r\n from { transform: rotate(0deg); }\r\n to { transform: rotate(360deg); }\r\n }\r\n @keyframes brycks-bounce {\r\n 0%, 80%, 100% { transform: scale(0); opacity: 0.5; }\r\n 40% { transform: scale(1); opacity: 1; }\r\n }\r\n @keyframes brycks-pulse {\r\n 0%, 100% { transform: scale(0.8); opacity: 0.5; }\r\n 50% { transform: scale(1); opacity: 1; }\r\n }\r\n `}\r\n </style>\r\n <div\r\n ref={ref}\r\n role=\"status\"\r\n aria-label={label}\r\n className={cx(\r\n 'brycks-loader',\r\n `brycks-loader--${variant}`,\r\n `brycks-loader--${size}`,\r\n className\r\n )}\r\n style={wrapperStyle}\r\n data-testid={testId}\r\n {...props}\r\n >\r\n {renderLoader()}\r\n <span\r\n style={{\r\n position: 'absolute',\r\n width: 1,\r\n height: 1,\r\n padding: 0,\r\n margin: -1,\r\n overflow: 'hidden',\r\n clip: 'rect(0, 0, 0, 0)',\r\n whiteSpace: 'nowrap',\r\n border: 0,\r\n }}\r\n >\r\n {label}\r\n </span>\r\n </div>\r\n </>\r\n )\r\n})\r\n\r\nLoader.displayName = 'Loader'\r\n\r\n/** Alias for Loader */\r\nexport const Spinner = Loader\r\n","/**\r\n * Skeleton Component\r\n *\r\n * Loading placeholder with shimmer animation.\r\n * Provides visual feedback while content is loading.\r\n */\r\n\r\nimport {\r\n forwardRef,\r\n type CSSProperties,\r\n type HTMLAttributes,\r\n} from 'react'\r\nimport { cx } from '../../../utils/styles'\r\n\r\nexport type SkeletonVariant = 'text' | 'circular' | 'rectangular'\r\n\r\nexport interface SkeletonProps extends HTMLAttributes<HTMLDivElement> {\r\n /** Skeleton variant */\r\n variant?: SkeletonVariant\r\n /** Width */\r\n width?: string | number\r\n /** Height */\r\n height?: string | number\r\n /** Border radius (for rectangular variant) */\r\n radius?: string | number\r\n /** Whether to animate */\r\n animate?: boolean\r\n /** Custom class name */\r\n className?: string\r\n /** Test ID */\r\n testId?: string\r\n}\r\n\r\nexport const Skeleton = forwardRef<HTMLDivElement, SkeletonProps>(function Skeleton(\r\n {\r\n variant = 'rectangular',\r\n width,\r\n height,\r\n radius,\r\n animate = true,\r\n className,\r\n style,\r\n testId,\r\n ...props\r\n },\r\n ref\r\n) {\r\n const getStyles = (): CSSProperties => {\r\n const base: CSSProperties = {\r\n backgroundColor: 'var(--brycks-background-muted)',\r\n position: 'relative',\r\n overflow: 'hidden',\r\n }\r\n\r\n switch (variant) {\r\n case 'text':\r\n base.width = width ?? '100%'\r\n base.height = height ?? '1em'\r\n base.borderRadius = 'var(--brycks-radius-sm)'\r\n break\r\n case 'circular':\r\n base.width = width ?? 40\r\n base.height = height ?? width ?? 40\r\n base.borderRadius = '50%'\r\n break\r\n case 'rectangular':\r\n base.width = width ?? '100%'\r\n base.height = height ?? 40\r\n base.borderRadius = radius ?? 'var(--brycks-radius-default)'\r\n break\r\n }\r\n\r\n return base\r\n }\r\n\r\n const skeletonStyle: CSSProperties = {\r\n ...getStyles(),\r\n ...style,\r\n }\r\n\r\n const shimmerStyle: CSSProperties = {\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n background: 'linear-gradient(90deg, transparent 0%, rgba(255,255,255,0.4) 50%, transparent 100%)',\r\n animation: animate ? 'brycks-shimmer 1.5s infinite' : 'none',\r\n }\r\n\r\n return (\r\n <>\r\n {animate && (\r\n <style>\r\n {`\r\n @keyframes brycks-shimmer {\r\n 0% { transform: translateX(-100%); }\r\n 100% { transform: translateX(100%); }\r\n }\r\n `}\r\n </style>\r\n )}\r\n <div\r\n ref={ref}\r\n className={cx(\r\n 'brycks-skeleton',\r\n `brycks-skeleton--${variant}`,\r\n animate && 'brycks-skeleton--animated',\r\n className\r\n )}\r\n style={skeletonStyle}\r\n data-testid={testId}\r\n aria-hidden=\"true\"\r\n {...props}\r\n >\r\n {animate && <div style={shimmerStyle} />}\r\n </div>\r\n </>\r\n )\r\n})\r\n\r\nSkeleton.displayName = 'Skeleton'\r\n\r\n/** Text skeleton with multiple lines */\r\nexport interface SkeletonTextProps {\r\n /** Number of lines */\r\n lines?: number\r\n /** Gap between lines */\r\n gap?: number\r\n /** Last line width percentage */\r\n lastLineWidth?: string\r\n /** Custom class name */\r\n className?: string\r\n}\r\n\r\nexport function SkeletonText({\r\n lines = 3,\r\n gap = 8,\r\n lastLineWidth = '80%',\r\n className,\r\n}: SkeletonTextProps) {\r\n return (\r\n <div\r\n className={cx('brycks-skeleton-text', className)}\r\n style={{ display: 'flex', flexDirection: 'column', gap }}\r\n >\r\n {Array.from({ length: lines }).map((_, i) => (\r\n <Skeleton\r\n key={i}\r\n variant=\"text\"\r\n width={i === lines - 1 ? lastLineWidth : '100%'}\r\n />\r\n ))}\r\n </div>\r\n )\r\n}\r\n\r\nSkeletonText.displayName = 'SkeletonText'\r\n","/**\r\n * Divider Component\r\n *\r\n * Visual separator for content sections.\r\n * Supports horizontal and vertical orientations with optional labels.\r\n */\r\n\r\nimport {\r\n forwardRef,\r\n type CSSProperties,\r\n type ReactNode,\r\n type HTMLAttributes,\r\n} from 'react'\r\nimport { cx } from '../../../utils/styles'\r\n\r\nexport type DividerOrientation = 'horizontal' | 'vertical'\r\nexport type DividerVariant = 'solid' | 'dashed' | 'dotted'\r\n\r\nexport interface DividerProps extends HTMLAttributes<HTMLDivElement> {\r\n /** Divider orientation */\r\n orientation?: DividerOrientation\r\n /** Visual variant */\r\n variant?: DividerVariant\r\n /** Label text in the middle */\r\n label?: ReactNode\r\n /** Label position */\r\n labelPosition?: 'start' | 'center' | 'end'\r\n /** Custom class name */\r\n className?: string\r\n /** Test ID */\r\n testId?: string\r\n}\r\n\r\nexport const Divider = forwardRef<HTMLDivElement, DividerProps>(function Divider(\r\n {\r\n orientation = 'horizontal',\r\n variant = 'solid',\r\n label,\r\n labelPosition = 'center',\r\n className,\r\n style,\r\n testId,\r\n ...props\r\n },\r\n ref\r\n) {\r\n const isHorizontal = orientation === 'horizontal'\r\n\r\n const wrapperStyle: CSSProperties = {\r\n display: 'flex',\r\n alignItems: 'center',\r\n width: isHorizontal ? '100%' : undefined,\r\n height: isHorizontal ? undefined : '100%',\r\n flexDirection: isHorizontal ? 'row' : 'column',\r\n ...style,\r\n }\r\n\r\n const lineStyle: CSSProperties = {\r\n flex: 1,\r\n backgroundColor: variant === 'solid' ? 'var(--brycks-border-muted)' : 'transparent',\r\n borderStyle: variant,\r\n borderColor: 'var(--brycks-border-muted)',\r\n ...(isHorizontal\r\n ? {\r\n height: 1,\r\n borderWidth: variant === 'solid' ? 0 : '1px 0 0 0',\r\n }\r\n : {\r\n width: 1,\r\n borderWidth: variant === 'solid' ? 0 : '0 0 0 1px',\r\n }),\r\n }\r\n\r\n const labelStyle: CSSProperties = {\r\n padding: isHorizontal ? '0 12px' : '12px 0',\r\n fontSize: 12,\r\n fontWeight: 500,\r\n color: 'var(--brycks-foreground-muted)',\r\n whiteSpace: 'nowrap',\r\n }\r\n\r\n if (!label) {\r\n return (\r\n <div\r\n ref={ref}\r\n role=\"separator\"\r\n aria-orientation={orientation}\r\n className={cx(\r\n 'brycks-divider',\r\n `brycks-divider--${orientation}`,\r\n `brycks-divider--${variant}`,\r\n className\r\n )}\r\n style={{ ...lineStyle, ...style }}\r\n data-testid={testId}\r\n {...props}\r\n />\r\n )\r\n }\r\n\r\n const showStartLine = labelPosition === 'center' || labelPosition === 'end'\r\n const showEndLine = labelPosition === 'center' || labelPosition === 'start'\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n role=\"separator\"\r\n aria-orientation={orientation}\r\n className={cx(\r\n 'brycks-divider',\r\n `brycks-divider--${orientation}`,\r\n `brycks-divider--${variant}`,\r\n 'brycks-divider--with-label',\r\n className\r\n )}\r\n style={wrapperStyle}\r\n data-testid={testId}\r\n {...props}\r\n >\r\n {showStartLine && <span style={lineStyle} />}\r\n <span style={labelStyle}>{label}</span>\r\n {showEndLine && <span style={lineStyle} />}\r\n </div>\r\n )\r\n})\r\n\r\nDivider.displayName = 'Divider'\r\n","/**\r\n * EmptyState Component\r\n *\r\n * Placeholder for empty or zero-state content.\r\n * Provides visual feedback with optional actions.\r\n */\r\n\r\nimport {\r\n forwardRef,\r\n type CSSProperties,\r\n type ReactNode,\r\n type HTMLAttributes,\r\n} from 'react'\r\nimport { cx } from '../../../utils/styles'\r\n\r\nexport interface EmptyStateProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\r\n /** Icon or illustration */\r\n icon?: ReactNode\r\n /** Title text */\r\n title?: ReactNode\r\n /** Description text */\r\n description?: ReactNode\r\n /** Action element (button, link) */\r\n action?: ReactNode\r\n /** Secondary action */\r\n secondaryAction?: ReactNode\r\n /** Custom class name */\r\n className?: string\r\n /** Test ID */\r\n testId?: string\r\n}\r\n\r\nexport const EmptyState = forwardRef<HTMLDivElement, EmptyStateProps>(function EmptyState(\r\n {\r\n icon,\r\n title,\r\n description,\r\n action,\r\n secondaryAction,\r\n className,\r\n style,\r\n testId,\r\n children,\r\n ...props\r\n },\r\n ref\r\n) {\r\n const containerStyle: CSSProperties = {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n textAlign: 'center',\r\n padding: '48px 24px',\r\n ...style,\r\n }\r\n\r\n const iconStyle: CSSProperties = {\r\n marginBottom: 16,\r\n color: 'var(--brycks-foreground-subtle)',\r\n }\r\n\r\n const titleStyle: CSSProperties = {\r\n fontSize: 18,\r\n fontWeight: 600,\r\n color: 'var(--brycks-foreground-default)',\r\n marginBottom: description ? 8 : 0,\r\n maxWidth: 400,\r\n }\r\n\r\n const descriptionStyle: CSSProperties = {\r\n fontSize: 14,\r\n color: 'var(--brycks-foreground-muted)',\r\n lineHeight: 1.5,\r\n maxWidth: 400,\r\n }\r\n\r\n const actionsStyle: CSSProperties = {\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: 12,\r\n marginTop: 24,\r\n }\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n className={cx('brycks-empty-state', className)}\r\n style={containerStyle}\r\n data-testid={testId}\r\n {...props}\r\n >\r\n {icon && <div style={iconStyle}>{icon}</div>}\r\n\r\n {title && <h3 style={titleStyle}>{title}</h3>}\r\n\r\n {description && <p style={descriptionStyle}>{description}</p>}\r\n\r\n {children}\r\n\r\n {(action || secondaryAction) && (\r\n <div style={actionsStyle}>\r\n {action}\r\n {secondaryAction}\r\n </div>\r\n )}\r\n </div>\r\n )\r\n})\r\n\r\nEmptyState.displayName = 'EmptyState'\r\n\r\n/** Default empty state icon */\r\nexport function EmptyStateIcon({ size = 64 }: { size?: number }) {\r\n return (\r\n <svg\r\n width={size}\r\n height={size}\r\n viewBox=\"0 0 64 64\"\r\n fill=\"none\"\r\n style={{ opacity: 0.5 }}\r\n >\r\n <rect\r\n x=\"8\"\r\n y=\"12\"\r\n width=\"48\"\r\n height=\"40\"\r\n rx=\"4\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n />\r\n <path\r\n d=\"M8 24h48\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n />\r\n <circle cx=\"16\" cy=\"18\" r=\"2\" fill=\"currentColor\" />\r\n <circle cx=\"24\" cy=\"18\" r=\"2\" fill=\"currentColor\" />\r\n <circle cx=\"32\" cy=\"18\" r=\"2\" fill=\"currentColor\" />\r\n <rect\r\n x=\"16\"\r\n y=\"32\"\r\n width=\"32\"\r\n height=\"4\"\r\n rx=\"2\"\r\n fill=\"currentColor\"\r\n opacity=\"0.3\"\r\n />\r\n <rect\r\n x=\"16\"\r\n y=\"40\"\r\n width=\"20\"\r\n height=\"4\"\r\n rx=\"2\"\r\n fill=\"currentColor\"\r\n opacity=\"0.3\"\r\n />\r\n </svg>\r\n )\r\n}\r\n\r\nEmptyStateIcon.displayName = 'EmptyStateIcon'\r\n","/**\n * Portal Component\n *\n * Renders children into a different part of the DOM tree.\n * Useful for modals, tooltips, and overlays.\n */\n\nimport { useState, useEffect, type ReactNode } from 'react'\nimport { createPortal } from 'react-dom'\n\nexport interface PortalProps {\n /** Content to render in the portal */\n children: ReactNode\n /** Container element or selector to render into */\n container?: HTMLElement | string\n /** Whether the portal is disabled (renders inline) */\n disabled?: boolean\n}\n\nexport function Portal({ children, container, disabled = false }: PortalProps) {\n const [mounted, setMounted] = useState(false)\n const [portalContainer, setPortalContainer] = useState<HTMLElement | null>(null)\n\n useEffect(() => {\n setMounted(true)\n\n if (typeof container === 'string') {\n const element = document.querySelector<HTMLElement>(container)\n setPortalContainer(element)\n } else if (container) {\n setPortalContainer(container)\n } else {\n setPortalContainer(document.body)\n }\n\n return () => setMounted(false)\n }, [container])\n\n if (disabled) {\n return <>{children}</>\n }\n\n if (!mounted || !portalContainer) {\n return null\n }\n\n return createPortal(children, portalContainer)\n}\n\nPortal.displayName = 'Portal'\n","/**\n * useFocusTrap Hook\n *\n * Traps focus within a container element.\n * Useful for modals, drawers, and dialogs.\n */\n\nimport { useEffect, useRef, useCallback, type RefObject } from 'react'\n\nconst FOCUSABLE_SELECTORS = [\n 'button:not([disabled])',\n '[href]',\n 'input:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n].join(', ')\n\nexport interface UseFocusTrapOptions {\n /** Whether the focus trap is active */\n enabled?: boolean\n /** Whether to auto-focus the first element */\n autoFocus?: boolean\n /** Whether to restore focus on unmount */\n restoreFocus?: boolean\n /** Initial element to focus (selector or element) */\n initialFocus?: string | HTMLElement | null\n}\n\nexport interface UseFocusTrapReturn<T extends HTMLElement> {\n /** Ref to attach to the container */\n ref: RefObject<T | null>\n /** Manually focus the first focusable element */\n focusFirst: () => void\n /** Manually focus the last focusable element */\n focusLast: () => void\n}\n\nexport function useFocusTrap<T extends HTMLElement = HTMLDivElement>(\n options: UseFocusTrapOptions = {}\n): UseFocusTrapReturn<T> {\n const {\n enabled = true,\n autoFocus = true,\n restoreFocus = true,\n initialFocus,\n } = options\n\n const ref = useRef<T>(null)\n const previousActiveElement = useRef<HTMLElement | null>(null)\n\n const getFocusableElements = useCallback((): HTMLElement[] => {\n if (!ref.current) return []\n return Array.from(ref.current.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTORS))\n }, [])\n\n const focusFirst = useCallback(() => {\n const elements = getFocusableElements()\n elements[0]?.focus()\n }, [getFocusableElements])\n\n const focusLast = useCallback(() => {\n const elements = getFocusableElements()\n elements[elements.length - 1]?.focus()\n }, [getFocusableElements])\n\n useEffect(() => {\n if (!enabled) return\n\n // Store the previously focused element\n previousActiveElement.current = document.activeElement as HTMLElement\n\n // Auto-focus on mount\n if (autoFocus) {\n const container = ref.current\n if (!container) return\n\n // Try initial focus first\n if (initialFocus) {\n const element =\n typeof initialFocus === 'string'\n ? container.querySelector<HTMLElement>(initialFocus)\n : initialFocus\n if (element) {\n element.focus()\n } else {\n focusFirst()\n }\n } else {\n focusFirst()\n }\n }\n\n // Restore focus on unmount\n return () => {\n if (restoreFocus && previousActiveElement.current) {\n previousActiveElement.current.focus()\n }\n }\n }, [enabled, autoFocus, restoreFocus, initialFocus, focusFirst])\n\n useEffect(() => {\n if (!enabled) return\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key !== 'Tab') return\n\n const container = ref.current\n if (!container) return\n\n const focusableElements = getFocusableElements()\n if (focusableElements.length === 0) return\n\n const firstElement = focusableElements[0]\n const lastElement = focusableElements[focusableElements.length - 1]\n\n if (event.shiftKey) {\n // Shift + Tab: going backwards\n if (document.activeElement === firstElement) {\n event.preventDefault()\n lastElement.focus()\n }\n } else {\n // Tab: going forwards\n if (document.activeElement === lastElement) {\n event.preventDefault()\n firstElement.focus()\n }\n }\n }\n\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [enabled, getFocusableElements])\n\n return {\n ref,\n focusFirst,\n focusLast,\n }\n}\n","/**\n * FocusTrap Component\n *\n * Traps focus within its children.\n * Useful for modals, drawers, and dialogs.\n */\n\nimport { forwardRef, type ReactNode, type CSSProperties } from 'react'\nimport { useFocusTrap } from '../../../hooks/useFocusTrap'\n\nexport interface FocusTrapProps {\n /** Content to trap focus within */\n children: ReactNode\n /** Whether the focus trap is active */\n enabled?: boolean\n /** Whether to auto-focus the first element */\n autoFocus?: boolean\n /** Whether to restore focus on unmount */\n restoreFocus?: boolean\n /** Initial element to focus (selector) */\n initialFocus?: string\n /** Custom class name */\n className?: string\n /** Custom inline styles */\n style?: CSSProperties\n}\n\nexport const FocusTrap = forwardRef<HTMLDivElement, FocusTrapProps>(function FocusTrap(\n {\n children,\n enabled = true,\n autoFocus = true,\n restoreFocus = true,\n initialFocus,\n className,\n style,\n },\n forwardedRef\n) {\n const { ref } = useFocusTrap<HTMLDivElement>({\n enabled,\n autoFocus,\n restoreFocus,\n initialFocus,\n })\n\n return (\n <div\n ref={(node) => {\n (ref as React.MutableRefObject<HTMLDivElement | null>).current = node\n if (typeof forwardedRef === 'function') {\n forwardedRef(node)\n } else if (forwardedRef) {\n forwardedRef.current = node\n }\n }}\n className={className}\n style={style}\n >\n {children}\n </div>\n )\n})\n\nFocusTrap.displayName = 'FocusTrap'\n","/**\n * Overlay Component\n *\n * A backdrop overlay for modals, drawers, and dialogs.\n * Supports click-to-close and backdrop blur.\n */\n\nimport { forwardRef, type CSSProperties, type HTMLAttributes } from 'react'\nimport { cx } from '../../../utils/styles'\nimport { Portal } from '../Portal'\n\nexport interface OverlayProps extends HTMLAttributes<HTMLDivElement> {\n /** Whether the overlay is visible */\n isOpen: boolean\n /** Callback when overlay is clicked */\n onClose?: () => void\n /** Whether clicking the overlay closes it */\n closeOnClick?: boolean\n /** Whether to apply backdrop blur */\n blur?: boolean\n /** Blur intensity (in pixels) */\n blurAmount?: number\n /** Background opacity (0-1) */\n opacity?: number\n /** Whether to use a portal */\n usePortal?: boolean\n /** Z-index for the overlay */\n zIndex?: number\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nexport const Overlay = forwardRef<HTMLDivElement, OverlayProps>(function Overlay(\n {\n isOpen,\n onClose,\n closeOnClick = true,\n blur = true,\n blurAmount = 4,\n opacity = 0.5,\n usePortal = true,\n zIndex,\n className,\n style,\n testId,\n children,\n ...props\n },\n ref\n) {\n if (!isOpen) return null\n\n const handleClick = (e: React.MouseEvent) => {\n if (closeOnClick && e.target === e.currentTarget) {\n onClose?.()\n }\n }\n\n const overlayStyle: CSSProperties = {\n position: 'fixed',\n inset: 0,\n zIndex: zIndex ?? 'var(--brycks-z-overlay)' as unknown as number,\n backgroundColor: `rgba(0, 0, 0, ${opacity})`,\n backdropFilter: blur ? `blur(${blurAmount}px)` : undefined,\n WebkitBackdropFilter: blur ? `blur(${blurAmount}px)` : undefined,\n animation: 'brycks-overlay-fade-in 200ms ease-out',\n ...style,\n }\n\n const content = (\n <>\n <style>\n {`\n @keyframes brycks-overlay-fade-in {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n `}\n </style>\n <div\n ref={ref}\n className={cx('brycks-overlay', className)}\n style={overlayStyle}\n onClick={handleClick}\n aria-hidden=\"true\"\n data-testid={testId}\n {...props}\n >\n {children}\n </div>\n </>\n )\n\n if (usePortal) {\n return <Portal>{content}</Portal>\n }\n\n return content\n})\n\nOverlay.displayName = 'Overlay'\n","/**\r\n * useMediaQuery Hook\r\n *\r\n * React hook for responsive design with media queries.\r\n */\r\n\r\nimport { useState, useEffect } from 'react'\r\n\r\nexport function useMediaQuery(query: string): boolean {\r\n const [matches, setMatches] = useState(() => {\r\n if (typeof window === 'undefined') return false\r\n return window.matchMedia(query).matches\r\n })\r\n\r\n useEffect(() => {\r\n if (typeof window === 'undefined') return\r\n\r\n const mediaQuery = window.matchMedia(query)\r\n const handleChange = (e: MediaQueryListEvent) => setMatches(e.matches)\r\n\r\n // Set initial value\r\n setMatches(mediaQuery.matches)\r\n\r\n // Listen for changes\r\n mediaQuery.addEventListener('change', handleChange)\r\n return () => mediaQuery.removeEventListener('change', handleChange)\r\n }, [query])\r\n\r\n return matches\r\n}\r\n\r\n/** Pre-built responsive hooks */\r\nexport function useIsMobile() {\r\n return useMediaQuery('(max-width: 639px)')\r\n}\r\n\r\nexport function useIsTablet() {\r\n return useMediaQuery('(min-width: 640px) and (max-width: 1023px)')\r\n}\r\n\r\nexport function useIsDesktop() {\r\n return useMediaQuery('(min-width: 1024px)')\r\n}\r\n\r\nexport function usePrefersReducedMotion() {\r\n return useMediaQuery('(prefers-reduced-motion: reduce)')\r\n}\r\n\r\nexport function usePrefersDarkMode() {\r\n return useMediaQuery('(prefers-color-scheme: dark)')\r\n}\r\n","/**\r\n * useDisclosure Hook\r\n *\r\n * Manages open/closed state for modals, popovers, drawers, etc.\r\n */\r\n\r\nimport { useState, useCallback } from 'react'\r\n\r\nexport interface UseDisclosureReturn {\r\n isOpen: boolean\r\n onOpen: () => void\r\n onClose: () => void\r\n onToggle: () => void\r\n setIsOpen: React.Dispatch<React.SetStateAction<boolean>>\r\n}\r\n\r\nexport interface UseDisclosureOptions {\r\n defaultIsOpen?: boolean\r\n onOpen?: () => void\r\n onClose?: () => void\r\n}\r\n\r\nexport function useDisclosure(options: UseDisclosureOptions = {}): UseDisclosureReturn {\r\n const { defaultIsOpen = false, onOpen: onOpenProp, onClose: onCloseProp } = options\r\n const [isOpen, setIsOpen] = useState(defaultIsOpen)\r\n\r\n const onOpen = useCallback(() => {\r\n setIsOpen(true)\r\n onOpenProp?.()\r\n }, [onOpenProp])\r\n\r\n const onClose = useCallback(() => {\r\n setIsOpen(false)\r\n onCloseProp?.()\r\n }, [onCloseProp])\r\n\r\n const onToggle = useCallback(() => {\r\n const newState = !isOpen\r\n setIsOpen(newState)\r\n if (newState) {\r\n onOpenProp?.()\r\n } else {\r\n onCloseProp?.()\r\n }\r\n }, [isOpen, onOpenProp, onCloseProp])\r\n\r\n return {\r\n isOpen,\r\n onOpen,\r\n onClose,\r\n onToggle,\r\n setIsOpen,\r\n }\r\n}\r\n","/**\n * useKeyboardNavigation Hook\n *\n * Handles keyboard navigation for lists, menus, and other navigable components.\n */\n\nimport { useCallback, useState } from 'react'\n\nexport interface UseKeyboardNavigationOptions {\n /** Total number of items */\n itemCount: number\n /** Initial focused index */\n initialIndex?: number\n /** Whether navigation wraps around */\n loop?: boolean\n /** Orientation of the list */\n orientation?: 'horizontal' | 'vertical' | 'both'\n /** Callback when index changes */\n onIndexChange?: (index: number) => void\n /** Callback when item is selected */\n onSelect?: (index: number) => void\n}\n\nexport interface UseKeyboardNavigationReturn {\n /** Current focused index */\n focusedIndex: number\n /** Set focused index */\n setFocusedIndex: (index: number) => void\n /** Handle keyboard events */\n handleKeyDown: (event: React.KeyboardEvent) => void\n /** Get props for an item */\n getItemProps: (index: number) => {\n tabIndex: number\n 'data-focused': boolean\n onFocus: () => void\n }\n}\n\nexport function useKeyboardNavigation(\n options: UseKeyboardNavigationOptions\n): UseKeyboardNavigationReturn {\n const {\n itemCount,\n initialIndex = 0,\n loop = true,\n orientation = 'vertical',\n onIndexChange,\n onSelect,\n } = options\n\n const [focusedIndex, setFocusedIndexState] = useState(initialIndex)\n\n const setFocusedIndex = useCallback(\n (index: number) => {\n setFocusedIndexState(index)\n onIndexChange?.(index)\n },\n [onIndexChange]\n )\n\n const moveFocus = useCallback(\n (direction: 'next' | 'prev' | 'first' | 'last') => {\n let newIndex: number\n\n switch (direction) {\n case 'first':\n newIndex = 0\n break\n case 'last':\n newIndex = itemCount - 1\n break\n case 'next':\n if (focusedIndex >= itemCount - 1) {\n newIndex = loop ? 0 : focusedIndex\n } else {\n newIndex = focusedIndex + 1\n }\n break\n case 'prev':\n if (focusedIndex <= 0) {\n newIndex = loop ? itemCount - 1 : focusedIndex\n } else {\n newIndex = focusedIndex - 1\n }\n break\n }\n\n setFocusedIndex(newIndex)\n },\n [focusedIndex, itemCount, loop, setFocusedIndex]\n )\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n const { key } = event\n\n const isVertical = orientation === 'vertical' || orientation === 'both'\n const isHorizontal = orientation === 'horizontal' || orientation === 'both'\n\n switch (key) {\n case 'ArrowDown':\n if (isVertical) {\n event.preventDefault()\n moveFocus('next')\n }\n break\n case 'ArrowUp':\n if (isVertical) {\n event.preventDefault()\n moveFocus('prev')\n }\n break\n case 'ArrowRight':\n if (isHorizontal) {\n event.preventDefault()\n moveFocus('next')\n }\n break\n case 'ArrowLeft':\n if (isHorizontal) {\n event.preventDefault()\n moveFocus('prev')\n }\n break\n case 'Home':\n event.preventDefault()\n moveFocus('first')\n break\n case 'End':\n event.preventDefault()\n moveFocus('last')\n break\n case 'Enter':\n case ' ':\n event.preventDefault()\n onSelect?.(focusedIndex)\n break\n }\n },\n [orientation, moveFocus, onSelect, focusedIndex]\n )\n\n const getItemProps = useCallback(\n (index: number) => ({\n tabIndex: index === focusedIndex ? 0 : -1,\n 'data-focused': index === focusedIndex,\n onFocus: () => setFocusedIndex(index),\n }),\n [focusedIndex, setFocusedIndex]\n )\n\n return {\n focusedIndex,\n setFocusedIndex,\n handleKeyDown,\n getItemProps,\n }\n}\n","/**\n * useControllable Hook\n *\n * Manages controlled vs uncontrolled state pattern.\n * Allows components to work in both controlled and uncontrolled modes.\n */\n\nimport { useState, useCallback, useRef, useEffect } from 'react'\n\nexport interface UseControllableOptions<T> {\n /** Controlled value (if provided, component is controlled) */\n value?: T\n /** Default value for uncontrolled mode */\n defaultValue: T\n /** Callback when value changes */\n onChange?: (value: T) => void\n}\n\nexport interface UseControllableReturn<T> {\n /** Current value */\n value: T\n /** Set the value */\n setValue: (value: T | ((prev: T) => T)) => void\n /** Whether the component is controlled */\n isControlled: boolean\n}\n\nexport function useControllable<T>(\n options: UseControllableOptions<T>\n): UseControllableReturn<T> {\n const { value: controlledValue, defaultValue, onChange } = options\n\n const isControlled = controlledValue !== undefined\n const isControlledRef = useRef(isControlled)\n\n // Warn if switching between controlled and uncontrolled\n useEffect(() => {\n if (isControlledRef.current !== isControlled) {\n console.warn(\n 'Component is switching between controlled and uncontrolled modes. ' +\n 'This is not recommended and may cause unexpected behavior.'\n )\n }\n isControlledRef.current = isControlled\n }, [isControlled])\n\n const [internalValue, setInternalValue] = useState(defaultValue)\n\n const value = isControlled ? controlledValue : internalValue\n\n const setValue = useCallback(\n (nextValue: T | ((prev: T) => T)) => {\n const resolvedValue =\n typeof nextValue === 'function'\n ? (nextValue as (prev: T) => T)(value)\n : nextValue\n\n if (!isControlled) {\n setInternalValue(resolvedValue)\n }\n onChange?.(resolvedValue)\n },\n [isControlled, onChange, value]\n )\n\n return {\n value,\n setValue,\n isControlled,\n }\n}\n"],"names":["componentHeights","spacing","iconSizes","componentPaddingX","componentPaddingY","componentGap","modalWidths","popoverSizing","controlSizes","switchSizes","focusRing","focusRingOffset","focusStyles","transition","durations","easings","transitionProperties","duration","easing","keyframes","componentFontSize","fontSizes","componentFontWeight","fontWeights","componentLineHeight","lineHeights","componentTypography","fontFamilies","opacity","stateOpacity","scale","sidebarSizes","headerSizes","avatarSizes","iconButtonSizes","quickActionSizes","contentPadding","pageHeaderSpacing","searchInputSizes","statCardSizes","cx","classes","getSpacingValue","key","spacingToCss","value","buildSpacingStyles","props","styles","idCounter","generateId","prefix","hexToRgba","hex","alpha","result","r","g","b","radiusMap","shadowMap","buildBoxStyles","boxOwnPropKeys","omitBoxProps","BoxInner","as","className","style","children","testId","ref","Component","boxStyles","filteredProps","jsx","Box","forwardRef","stackOwnPropKeys","omitStackProps","buildStackStyles","StackInner","stackStyles","Stack","HStackInner","HStack","VStackInner","VStack","gridOwnPropKeys","omitGridProps","buildGridStyles","GridInner","gridStyles","Grid","GridItemInner","colSpan","rowSpan","colStart","colEnd","rowStart","rowEnd","itemStyles","GridItem","containerOwnPropKeys","omitContainerProps","buildContainerStyles","spacingStyles","size","maxWidth","containers","ContainerInner","containerStyles","Container","paddingMap","Card","variant","padding","interactive","selected","cardStyle","base","e","target","CardHeader","divider","headerStyle","CardBody","bodyStyle","CardFooter","align","footerStyle","spacingMap","Section","title","description","titleLevel","actions","TitleTag","sectionStyle","titleContainerStyle","titleStyle","descriptionStyle","actionsStyle","contentStyle","hasHeader","jsxs","Spacer","customSize","flex","direction","pixelSize","spacingTokens","spacerStyle","justifyMap","alignMap","Flex","wrap","justify","gap","rowGap","columnGap","inline","grow","shrink","basis","flexStyle","FlexItem","alignSelf","order","itemStyle","variantMap","textStyles","buildTextStyles","baseStyles","TextInner","builtTextStyles","_size","_weight","_leading","_align","_color","_truncate","_lineClamp","rest","Text","CodeInner","Code","sizeToStyleMap","buildHeadingStyles","level","visualSize","styleKey","HeadingInner","headingStyles","Heading","DisplayInner","Display","sizeConfig","intentColors","getButtonStyles","intent","fullWidth","isIconOnly","sizeValues","colors","solidColors","outlineColors","softColors","hover","ghostColors","linkColors","active","disabled","LoadingSpinner","ButtonInner","isLoading","isDisabled","leftIcon","rightIcon","onMouseEnter","onMouseLeave","onMouseDown","onMouseUp","isHovered","setIsHovered","useState","isPressed","setIsPressed","computedStyle","handleMouseEnter","handleMouseLeave","handleMouseDown","handleMouseUp","buttonClassName","buttonProps","Button","IconButtonInner","IconButton","sizeMap","Icon","color","path","paths","viewBox","fillRule","label","iconStyle","renderPaths","d","index","iconPaths","Input","isInvalid","leftElement","rightElement","onFocus","onBlur","isFocused","setIsFocused","config","getWrapperStyles","inputStyles","handleFocus","handleBlur","elementStyle","TextField","helperText","errorMessage","isRequired","hideLabel","id","inputProps","generatedId","useId","fieldId","helperId","errorId","hasError","describedBy","labelStyle","helperStyle","errorStyle","sizeStyles","ChevronIcon","Select","placeholder","sizeValue","hasValue","wrapperStyle","getSelectStyle","CheckIcon","MinusIcon","Checkbox","isIndeterminate","checked","onChange","fontSize","isCheckedOrIndeterminate","boxStyle","inputStyle","labelContainerStyle","labelTextStyle","Switch","travel","trackStyle","thumbStyle","Textarea","autoResize","minRows","maxRows","showCount","maxLength","defaultValue","charCount","setCharCount","internalRef","useRef","textareaRef","lineHeightPx","minHeight","maxHeight","adjustHeight","useCallback","textarea","scrollHeight","newHeight","useEffect","initialValue","getTextareaStyle","countStyle","handleChange","Radio","containerStyle","radioContainerStyle","radioStyle","dotStyle","RadioGroup","name","controlledValue","orientation","internalValue","setInternalValue","newValue","groupStyle","clonedChildren","child","childValue","Slider","min","max","step","showValue","formatValue","v","isDragging","setIsDragging","inputRef","percentage","clampedValue","input","handleInputChange","labelRowStyle","valueStyle","sliderContainerStyle","fillStyle","node","DateInput","type","error","inputContainerStyle","getInputStyle","baseStyle","UploadIcon","FileInput","accept","multiple","maxSize","icon","isDragOver","setIsDragOver","handleFiles","fileList","files","file","handleDragOver","handleDragLeave","handleDrop","handleClick","_a","handleKeyDown","dropzoneStyle","iconContainerStyle","textContainerStyle","primaryTextStyle","secondaryTextStyle","browseStyle","defaultDescription","Fragment","generateUniqueId","setId","useIds","count","ids","setIds","FormField","required","labelWidth","requiredStyle","childProps","ErrorIcon","FieldError","showIcon","sizeWidths","CloseIcon","Modal","isOpen","onClose","closeOnOverlayClick","closeOnEscape","showCloseButton","modalRef","previousActiveElement","modal","focusableElements","firstElement","lastElement","handleOverlayClick","overlayStyle","modalStyle","closeButtonStyle","modalContent","createPortal","intentConfig","Alert","action","isDismissible","onDismiss","variantColors","alertStyle","dismissButtonStyle","Tooltip","content","placement","delay","isVisible","setIsVisible","position","setPosition","triggerRef","tooltipRef","timeoutRef","calculatePosition","triggerRect","tooltipRect","top","left","showTooltip","hideTooltip","triggerStyle","tooltipStyle","arrowStyle","ToastIcon","Toast","isExiting","setIsExiting","timer","toastStyle","ToastContext","createContext","useToast","context","useContext","positionStyles","toastCounter","ToastProvider","maxToasts","toasts","setToasts","mounted","setMounted","addToast","prev","newToasts","removeToast","t","removeAll","toastWrapperStyle","Drawer","showOverlay","drawerRef","drawer","isHorizontal","drawerSize","drawerStyle","drawerContent","useClickOutside","handler","options","enabled","eventType","listener","event","el","Popover","trigger","controlledIsOpen","defaultOpen","onOpenChange","offset","openDelay","closeDelay","closeOnOutsideClick","showArrow","internalIsOpen","setInternalIsOpen","contentRef","openTimeoutRef","closeTimeoutRef","setIsOpen","open","clickOutsideRef","updatePosition","contentRect","scrollX","scrollY","handleOpen","handleClose","handleToggle","triggerElement","cloneElement","popoverContent","linearSizeMap","circularSizeMap","Progress","indeterminate","m","radius","circumference","svgStyle","barStyle","height","valueTextStyle","TabsContext","useTabsContext","Tabs","TabList","listStyle","Tab","tabValue","isSelected","tabs","currentIndex","newIndex","_b","_c","getTabStyle","TabPanels","panelsStyle","TabPanel","panelValue","panelStyle","AccordionContext","useAccordionContext","Accordion","allowMultiple","expandedItems","toggleItem","itemValue","isExpanded","AccordionItemContext","useAccordionItemContext","AccordionItem","AccordionTrigger","AccordionContent","innerStyle","DropdownContext","useDropdownContext","Dropdown","closeOnSelect","activeIndex","setActiveIndex","menuRef","close","rect","items","triggerProps","menuStyle","DropdownItem","shortcut","destructive","onClick","shortcutStyle","DropdownDivider","dividerStyle","DropdownLabel","MenuContext","useMenuContext","Menu","controlledActiveItem","collapsed","internalActiveItem","setInternalActiveItem","activeItem","setActiveItem","MenuItem","badge","isActive","badgeStyle","MenuGroup","MenuDivider","ChevronLeftIcon","ChevronRightIcon","ChevronsLeftIcon","ChevronsRightIcon","Pagination","page","totalPages","siblingCount","showFirstLast","showPrevNext","pages","useMemo","range","leftSibling","rightSibling","showLeftEllipsis","showRightEllipsis","i","getButtonStyle","ellipsisStyle","infoStyle","handlePageChange","newPage","DefaultSeparator","Breadcrumb","separator","maxItems","Children","isValidElement","visibleItems","showEllipsis","sideCount","navStyle","separatorStyle","renderSeparator","isLast","showSeparator","showEllipsisHere","BreadcrumbItem","href","isCurrentPage","componentProps","TableContext","useTableContext","Table","stickyHeader","loading","tableStyle","TableHead","sticky","headStyle","TableBody","TableRow","clickable","rowStyle","SortIcon","TableHeader","sortable","sortDirection","onSort","TableCell","truncate","cellStyle","TableFoot","footStyle","TableCaption","captionStyle","ListContext","useListContext","List","ListItem","secondary","primaryStyle","secondaryStyle","ListDivider","ListHeader","Badge","colorValue","SpinnerLoader","Dots","dotSize","Pulse","Loader","renderLoader","Spinner","Skeleton","width","animate","skeletonStyle","shimmerStyle","SkeletonText","lines","lastLineWidth","_","Divider","labelPosition","lineStyle","showStartLine","showEndLine","EmptyState","secondaryAction","EmptyStateIcon","Portal","container","portalContainer","setPortalContainer","element","FOCUSABLE_SELECTORS","useFocusTrap","autoFocus","restoreFocus","initialFocus","getFocusableElements","focusFirst","focusLast","elements","FocusTrap","forwardedRef","Overlay","closeOnClick","blur","blurAmount","usePortal","zIndex","useMediaQuery","query","matches","setMatches","mediaQuery","useIsMobile","useIsTablet","useIsDesktop","usePrefersReducedMotion","usePrefersDarkMode","useDisclosure","defaultIsOpen","onOpenProp","onCloseProp","onOpen","onToggle","newState","useKeyboardNavigation","itemCount","initialIndex","loop","onIndexChange","onSelect","focusedIndex","setFocusedIndexState","setFocusedIndex","moveFocus","isVertical","getItemProps","useControllable","isControlled","isControlledRef","setValue","nextValue","resolvedValue"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/design-system/primitives/sizing.ts","../src/design-system/primitives/focus.ts","../src/design-system/primitives/transitions.ts","../src/design-system/primitives/typography.ts","../src/design-system/primitives/opacity.ts","../src/design-system/primitives/layout.ts","../src/utils/styles.ts","../src/components/layout/Box/Box.styles.ts","../src/components/layout/Box/Box.tsx","../src/components/layout/Stack/Stack.tsx","../src/components/layout/Grid/Grid.tsx","../src/components/layout/Container/Container.tsx","../src/components/layout/Card/Card.tsx","../src/components/layout/Section/Section.tsx","../src/components/layout/Spacer/Spacer.tsx","../src/components/layout/Flex/Flex.tsx","../src/components/typography/Text/Text.tsx","../src/components/typography/Heading/Heading.tsx","../src/components/primitives/Button/Button.styles.ts","../src/components/primitives/Button/Button.tsx","../src/components/primitives/Icon/Icon.tsx","../src/components/form/Input/Input.tsx","../src/components/form/TextField/TextField.tsx","../src/components/form/Select/Select.tsx","../src/components/form/Checkbox/Checkbox.tsx","../src/components/form/Switch/Switch.tsx","../src/components/form/Textarea/Textarea.tsx","../src/components/form/Radio/Radio.tsx","../src/components/form/Slider/Slider.tsx","../src/components/form/DateInput/DateInput.tsx","../src/components/form/FileInput/FileInput.tsx","../src/hooks/useId.ts","../src/components/form/FormField/FormField.tsx","../src/components/form/FieldError/FieldError.tsx","../src/components/form/Form/Form.tsx","../src/components/form/FormLabel/FormLabel.tsx","../src/components/form/FormGroup/FormGroup.tsx","../src/components/feedback/Modal/Modal.tsx","../src/components/feedback/Alert/Alert.tsx","../src/components/feedback/Tooltip/Tooltip.tsx","../src/components/feedback/Toast/Toast.tsx","../src/components/feedback/Drawer/Drawer.tsx","../src/hooks/useClickOutside.ts","../src/components/feedback/Popover/Popover.tsx","../src/components/feedback/Progress/Progress.tsx","../src/components/navigation/Tabs/Tabs.tsx","../src/components/navigation/Accordion/Accordion.tsx","../src/components/navigation/Dropdown/Dropdown.tsx","../src/components/navigation/Menu/Menu.tsx","../src/components/navigation/Pagination/Pagination.tsx","../src/components/navigation/Breadcrumb/Breadcrumb.tsx","../src/components/data/Table/Table.tsx","../src/components/data/List/List.tsx","../src/components/data/InfoItem/InfoItem.tsx","../src/components/utility/Badge/Badge.tsx","../src/components/utility/Loader/Loader.tsx","../src/components/utility/Skeleton/Skeleton.tsx","../src/components/utility/Divider/Divider.tsx","../src/components/utility/EmptyState/EmptyState.tsx","../src/components/utility/Portal/Portal.tsx","../src/hooks/useFocusTrap.ts","../src/components/utility/FocusTrap/FocusTrap.tsx","../src/components/utility/Overlay/Overlay.tsx","../src/components/utility/ScreenReaderOnly/ScreenReaderOnly.tsx","../src/hooks/useMediaQuery.ts","../src/hooks/useDisclosure.ts","../src/hooks/useKeyboardNavigation.ts","../src/hooks/useControllable.ts"],"sourcesContent":["/**\r\n * Brycks Design System - Component Sizing Primitives\r\n *\r\n * Standardized sizing scales for consistent component dimensions.\r\n * All values are derived from the spacing token system (4px grid).\r\n *\r\n * RULE: Components MUST use these scales. Never hardcode dimensions.\r\n */\r\n\r\nimport { spacing } from '../tokens/spacing'\r\n\r\n/**\r\n * Standard component heights for interactive elements.\r\n * Based on touch-target guidelines (minimum 44px for accessibility).\r\n */\r\nexport const componentHeights = {\r\n /** 24px - Micro elements (tags, small badges) */\r\n xs: spacing[6],\r\n /** 32px - Small inputs, compact buttons */\r\n sm: spacing[8],\r\n /** 40px - Default size for most interactive elements */\r\n md: spacing[10],\r\n /** 48px - Large inputs, prominent buttons */\r\n lg: spacing[12],\r\n /** 56px - Extra large, hero CTAs */\r\n xl: spacing[14],\r\n} as const\r\n\r\n/**\r\n * Icon sizes that align with component heights.\r\n */\r\nexport const iconSizes = {\r\n /** 12px */\r\n xs: spacing[3],\r\n /** 16px */\r\n sm: spacing[4],\r\n /** 20px */\r\n md: spacing[5],\r\n /** 24px */\r\n lg: spacing[6],\r\n /** 32px */\r\n xl: spacing[8],\r\n} as const\r\n\r\n/**\r\n * Standard padding for interactive components (horizontal).\r\n * Follows a progressive scale for visual balance.\r\n */\r\nexport const componentPaddingX = {\r\n /** 8px */\r\n xs: spacing[2],\r\n /** 12px */\r\n sm: spacing[3],\r\n /** 16px */\r\n md: spacing[4],\r\n /** 20px */\r\n lg: spacing[5],\r\n /** 24px */\r\n xl: spacing[6],\r\n} as const\r\n\r\n/**\r\n * Standard padding for interactive components (vertical).\r\n */\r\nexport const componentPaddingY = {\r\n /** 4px */\r\n xs: spacing[1],\r\n /** 6px */\r\n sm: spacing[1.5],\r\n /** 8px */\r\n md: spacing[2],\r\n /** 10px */\r\n lg: spacing[2.5],\r\n /** 12px */\r\n xl: spacing[3],\r\n} as const\r\n\r\n/**\r\n * Standard gap values for component internals.\r\n */\r\nexport const componentGap = {\r\n /** 4px - Tight spacing between icons and text */\r\n xs: spacing[1],\r\n /** 6px */\r\n sm: spacing[1.5],\r\n /** 8px - Default internal spacing */\r\n md: spacing[2],\r\n /** 10px */\r\n lg: spacing[2.5],\r\n /** 12px - Spacious internal spacing */\r\n xl: spacing[3],\r\n} as const\r\n\r\n/**\r\n * Modal/dialog width presets.\r\n */\r\nexport const modalWidths = {\r\n /** 400px - Small dialogs, confirmations */\r\n sm: 400,\r\n /** 500px - Medium dialogs */\r\n md: 500,\r\n /** 640px - Large dialogs */\r\n lg: 640,\r\n /** 800px - Extra large dialogs */\r\n xl: 800,\r\n /** Full width minus margins */\r\n full: 'calc(100vw - 48px)',\r\n} as const\r\n\r\n/**\r\n * Tooltip and popover constraints.\r\n */\r\nexport const popoverSizing = {\r\n /** Default tooltip max width */\r\n tooltipMaxWidth: 300,\r\n /** Default popover max width */\r\n popoverMaxWidth: 400,\r\n /** Arrow size for tooltips */\r\n arrowSize: spacing[2],\r\n /** Gap between trigger and popover */\r\n offset: spacing[2],\r\n} as const\r\n\r\n/**\r\n * Checkbox and radio sizes.\r\n */\r\nexport const controlSizes = {\r\n sm: {\r\n box: 16,\r\n icon: 10,\r\n },\r\n md: {\r\n box: 18,\r\n icon: 12,\r\n },\r\n lg: {\r\n box: 22,\r\n icon: 14,\r\n },\r\n} as const\r\n\r\n/**\r\n * Switch/toggle sizes.\r\n */\r\nexport const switchSizes = {\r\n sm: {\r\n width: 36,\r\n height: 20,\r\n thumb: 16,\r\n },\r\n md: {\r\n width: 44,\r\n height: 24,\r\n thumb: 20,\r\n },\r\n lg: {\r\n width: 52,\r\n height: 28,\r\n thumb: 24,\r\n },\r\n} as const\r\n\r\nexport type ComponentSize = keyof typeof componentHeights\r\nexport type IconSize = keyof typeof iconSizes\r\nexport type ControlSize = keyof typeof controlSizes\r\nexport type SwitchSize = keyof typeof switchSizes\r\n","/**\r\n * Brycks Design System - Focus State Primitives\r\n *\r\n * Centralized focus ring and state definitions.\r\n * Ensures consistent accessibility across all interactive elements.\r\n *\r\n * RULE: All focusable elements MUST use these focus styles.\r\n */\r\n\r\n/**\r\n * Focus ring box-shadow values.\r\n * Uses CSS variables for theme-aware colors.\r\n */\r\nexport const focusRing = {\r\n /** Default focus ring - primary color */\r\n default: '0 0 0 3px var(--brycks-focus-ring-color, rgba(85, 120, 244, 0.35))',\r\n /** Error state focus ring */\r\n error: '0 0 0 3px var(--brycks-focus-ring-error, rgba(239, 68, 68, 0.35))',\r\n /** Success state focus ring */\r\n success: '0 0 0 3px var(--brycks-focus-ring-success, rgba(16, 185, 129, 0.35))',\r\n /** Subtle focus ring - for nested elements */\r\n subtle: '0 0 0 2px var(--brycks-focus-ring-color, rgba(85, 120, 244, 0.25))',\r\n /** None - explicitly no focus ring */\r\n none: 'none',\r\n} as const\r\n\r\n/**\r\n * Focus ring with offset (for elements with borders).\r\n */\r\nexport const focusRingOffset = {\r\n default: '0 0 0 2px var(--brycks-background-app), 0 0 0 4px var(--brycks-primary-default)',\r\n error: '0 0 0 2px var(--brycks-background-app), 0 0 0 4px var(--brycks-error-default)',\r\n} as const\r\n\r\n/**\r\n * CSS custom properties that should be set by ThemeProvider.\r\n * These enable theme-aware focus rings.\r\n */\r\nexport const focusRingCSSVars = {\r\n color: '--brycks-focus-ring-color',\r\n error: '--brycks-focus-ring-error',\r\n success: '--brycks-focus-ring-success',\r\n} as const\r\n\r\n/**\r\n * Complete focus styles object for spreading.\r\n */\r\nexport const focusStyles = {\r\n /** Outline-based focus (native) */\r\n outline: {\r\n outline: '2px solid var(--brycks-border-focus)',\r\n outlineOffset: '2px',\r\n },\r\n /** Box-shadow based focus (custom) */\r\n ring: {\r\n outline: 'none',\r\n boxShadow: focusRing.default,\r\n },\r\n /** Error state focus */\r\n ringError: {\r\n outline: 'none',\r\n boxShadow: focusRing.error,\r\n },\r\n /** Remove focus styles (use sparingly) */\r\n none: {\r\n outline: 'none',\r\n boxShadow: 'none',\r\n },\r\n} as const\r\n\r\nexport type FocusRingVariant = keyof typeof focusRing\r\n","/**\r\n * Brycks Design System - Transition Primitives\r\n *\r\n * Standardized transition definitions for consistent motion.\r\n * All values derived from motion tokens.\r\n *\r\n * RULE: Components MUST use these transitions. Never hardcode timing.\r\n */\r\n\r\nimport { durations, easings } from '../tokens/motion'\r\n\r\n/**\r\n * Pre-composed CSS transition strings for common use cases.\r\n */\r\nexport const transition = {\r\n /** No transition */\r\n none: 'none',\r\n\r\n /** Ultra-fast - for micro-interactions (50ms) */\r\n instant: `all ${durations.faster}ms ${easings.easeOut}`,\r\n\r\n /** Fast - for hover states, toggles (100ms) */\r\n fast: `all ${durations.fast}ms ${easings.easeOut}`,\r\n\r\n /** Quick - standard interactive feedback (150ms) */\r\n quick: `all ${durations.quick}ms ${easings.easeOut}`,\r\n\r\n /** Default - most state changes (200ms) */\r\n default: `all ${durations.normal}ms ${easings.easeOut}`,\r\n\r\n /** Smooth - focus states, form elements (300ms) */\r\n smooth: `all ${durations.relaxed}ms ${easings.smooth}`,\r\n\r\n /** Slow - reveals, modals (400ms) */\r\n slow: `all ${durations.slow}ms ${easings.easeOut}`,\r\n\r\n /** Spring - bouncy, tactile feel (300ms) */\r\n spring: `all ${durations.relaxed}ms ${easings.softSpring}`,\r\n\r\n /** Colors only - optimized for color transitions */\r\n colors: `color ${durations.fast}ms ${easings.easeOut}, background-color ${durations.fast}ms ${easings.easeOut}, border-color ${durations.fast}ms ${easings.easeOut}`,\r\n\r\n /** Transform only - for scale, translate */\r\n transform: `transform ${durations.normal}ms ${easings.easeOut}`,\r\n\r\n /** Opacity only - for fade effects */\r\n opacity: `opacity ${durations.normal}ms ${easings.easeOut}`,\r\n\r\n /** Shadow only - for elevation changes */\r\n shadow: `box-shadow ${durations.normal}ms ${easings.easeOut}`,\r\n} as const\r\n\r\n/**\r\n * CSS transition property groups.\r\n */\r\nexport const transitionProperties = {\r\n all: 'all',\r\n colors: 'color, background-color, border-color, fill, stroke',\r\n opacity: 'opacity',\r\n shadow: 'box-shadow',\r\n transform: 'transform',\r\n dimensions: 'width, height, padding, margin',\r\n} as const\r\n\r\n/**\r\n * Duration values in milliseconds for use in JS.\r\n */\r\nexport const duration = {\r\n instant: durations.faster,\r\n fast: durations.fast,\r\n quick: durations.quick,\r\n default: durations.normal,\r\n smooth: durations.relaxed,\r\n slow: durations.slow,\r\n slower: durations.slower,\r\n} as const\r\n\r\n/**\r\n * Easing functions for use in JS animations.\r\n */\r\nexport const easing = {\r\n linear: easings.linear,\r\n ease: easings.ease,\r\n easeIn: easings.easeIn,\r\n easeOut: easings.easeOut,\r\n easeInOut: easings.easeInOut,\r\n spring: easings.spring,\r\n softSpring: easings.softSpring,\r\n smooth: easings.smooth,\r\n snappy: easings.snappy,\r\n} as const\r\n\r\n/**\r\n * CSS animation keyframes (as strings for style injection).\r\n */\r\nexport const keyframes = {\r\n fadeIn: `\r\n @keyframes brycks-fade-in {\r\n from { opacity: 0; }\r\n to { opacity: 1; }\r\n }\r\n `,\r\n fadeOut: `\r\n @keyframes brycks-fade-out {\r\n from { opacity: 1; }\r\n to { opacity: 0; }\r\n }\r\n `,\r\n scaleIn: `\r\n @keyframes brycks-scale-in {\r\n from { opacity: 0; transform: scale(0.95); }\r\n to { opacity: 1; transform: scale(1); }\r\n }\r\n `,\r\n scaleOut: `\r\n @keyframes brycks-scale-out {\r\n from { opacity: 1; transform: scale(1); }\r\n to { opacity: 0; transform: scale(0.95); }\r\n }\r\n `,\r\n slideUp: `\r\n @keyframes brycks-slide-up {\r\n from { opacity: 0; transform: translateY(8px); }\r\n to { opacity: 1; transform: translateY(0); }\r\n }\r\n `,\r\n slideDown: `\r\n @keyframes brycks-slide-down {\r\n from { opacity: 0; transform: translateY(-8px); }\r\n to { opacity: 1; transform: translateY(0); }\r\n }\r\n `,\r\n spin: `\r\n @keyframes brycks-spin {\r\n from { transform: rotate(0deg); }\r\n to { transform: rotate(360deg); }\r\n }\r\n `,\r\n pulse: `\r\n @keyframes brycks-pulse {\r\n 0%, 100% { opacity: 1; }\r\n 50% { opacity: 0.5; }\r\n }\r\n `,\r\n shimmer: `\r\n @keyframes brycks-shimmer {\r\n 0% { transform: translateX(-100%); }\r\n 100% { transform: translateX(100%); }\r\n }\r\n `,\r\n bounce: `\r\n @keyframes brycks-bounce {\r\n 0%, 80%, 100% { transform: scale(0); opacity: 0.5; }\r\n 40% { transform: scale(1); opacity: 1; }\r\n }\r\n `,\r\n} as const\r\n\r\nexport type TransitionPreset = keyof typeof transition\r\nexport type KeyframeName = keyof typeof keyframes\r\n","/**\r\n * Brycks Design System - Component Typography Primitives\r\n *\r\n * Typography scales specifically for component contexts.\r\n * Derived from base typography tokens.\r\n *\r\n * RULE: Components MUST use these scales. Never hardcode font values.\r\n */\r\n\r\nimport { fontSizes, fontWeights, lineHeights, fontFamilies } from '../tokens/typography'\r\n\r\n/**\r\n * Font sizes mapped to component size variants.\r\n * Ensures consistent text sizing across all components.\r\n */\r\nexport const componentFontSize = {\r\n /** 11px - Extra small labels, badges */\r\n xs: fontSizes.xs,\r\n /** 12px - Small text, captions, helper text */\r\n sm: fontSizes.sm,\r\n /** 14px - Default component text */\r\n md: fontSizes.base,\r\n /** 15px - Large component text */\r\n lg: 15,\r\n /** 16px - Extra large component text */\r\n xl: fontSizes.md,\r\n} as const\r\n\r\n/**\r\n * Font weights for component states.\r\n */\r\nexport const componentFontWeight = {\r\n /** 400 - Regular body text */\r\n regular: fontWeights.regular,\r\n /** 500 - Labels, emphasized text */\r\n medium: fontWeights.medium,\r\n /** 600 - Headings, titles */\r\n semibold: fontWeights.semibold,\r\n /** 700 - Strong emphasis */\r\n bold: fontWeights.bold,\r\n} as const\r\n\r\n/**\r\n * Line heights for component text.\r\n */\r\nexport const componentLineHeight = {\r\n /** 1 - Single line, badges */\r\n none: lineHeights.none,\r\n /** 1.25 - Tight, headings */\r\n tight: lineHeights.snug,\r\n /** 1.4 - Slightly relaxed, labels */\r\n snug: 1.4,\r\n /** 1.5 - Default body text */\r\n normal: lineHeights.normal,\r\n /** 1.6 - Relaxed, helper text */\r\n relaxed: 1.6,\r\n} as const\r\n\r\n/**\r\n * Pre-composed typography styles for common component elements.\r\n */\r\nexport const componentTypography = {\r\n /** Form field labels */\r\n label: {\r\n fontFamily: fontFamilies.sans,\r\n fontSize: componentFontSize.sm,\r\n fontWeight: componentFontWeight.medium,\r\n lineHeight: componentLineHeight.normal,\r\n },\r\n /** Helper/hint text below inputs */\r\n helperText: {\r\n fontFamily: fontFamilies.sans,\r\n fontSize: componentFontSize.xs,\r\n fontWeight: componentFontWeight.regular,\r\n lineHeight: componentLineHeight.relaxed,\r\n },\r\n /** Error messages */\r\n errorText: {\r\n fontFamily: fontFamilies.sans,\r\n fontSize: componentFontSize.xs,\r\n fontWeight: componentFontWeight.regular,\r\n lineHeight: componentLineHeight.relaxed,\r\n },\r\n /** Button text - small */\r\n buttonSm: {\r\n fontFamily: fontFamilies.sans,\r\n fontSize: componentFontSize.sm,\r\n fontWeight: componentFontWeight.medium,\r\n lineHeight: componentLineHeight.none,\r\n },\r\n /** Button text - medium (default) */\r\n buttonMd: {\r\n fontFamily: fontFamilies.sans,\r\n fontSize: componentFontSize.md,\r\n fontWeight: componentFontWeight.medium,\r\n lineHeight: componentLineHeight.none,\r\n },\r\n /** Button text - large */\r\n buttonLg: {\r\n fontFamily: fontFamilies.sans,\r\n fontSize: componentFontSize.lg,\r\n fontWeight: componentFontWeight.medium,\r\n lineHeight: componentLineHeight.none,\r\n },\r\n /** Badge text */\r\n badge: {\r\n fontFamily: fontFamilies.sans,\r\n fontSize: componentFontSize.xs,\r\n fontWeight: componentFontWeight.medium,\r\n lineHeight: componentLineHeight.none,\r\n },\r\n /** Tooltip text */\r\n tooltip: {\r\n fontFamily: fontFamilies.sans,\r\n fontSize: componentFontSize.xs,\r\n fontWeight: componentFontWeight.medium,\r\n lineHeight: componentLineHeight.snug,\r\n },\r\n /** Alert title */\r\n alertTitle: {\r\n fontFamily: fontFamilies.sans,\r\n fontSize: componentFontSize.md,\r\n fontWeight: componentFontWeight.semibold,\r\n lineHeight: componentLineHeight.tight,\r\n },\r\n /** Alert description */\r\n alertDescription: {\r\n fontFamily: fontFamilies.sans,\r\n fontSize: componentFontSize.md,\r\n fontWeight: componentFontWeight.regular,\r\n lineHeight: componentLineHeight.normal,\r\n },\r\n /** Modal title */\r\n modalTitle: {\r\n fontFamily: fontFamilies.sans,\r\n fontSize: fontSizes.lg,\r\n fontWeight: componentFontWeight.semibold,\r\n lineHeight: componentLineHeight.tight,\r\n },\r\n /** Modal description */\r\n modalDescription: {\r\n fontFamily: fontFamilies.sans,\r\n fontSize: componentFontSize.md,\r\n fontWeight: componentFontWeight.regular,\r\n lineHeight: componentLineHeight.normal,\r\n },\r\n /** Empty state title */\r\n emptyStateTitle: {\r\n fontFamily: fontFamilies.sans,\r\n fontSize: fontSizes.lg,\r\n fontWeight: componentFontWeight.semibold,\r\n lineHeight: componentLineHeight.tight,\r\n },\r\n /** Empty state description */\r\n emptyStateDescription: {\r\n fontFamily: fontFamilies.sans,\r\n fontSize: componentFontSize.md,\r\n fontWeight: componentFontWeight.regular,\r\n lineHeight: componentLineHeight.normal,\r\n },\r\n /** Divider label */\r\n dividerLabel: {\r\n fontFamily: fontFamilies.sans,\r\n fontSize: componentFontSize.xs,\r\n fontWeight: componentFontWeight.medium,\r\n lineHeight: componentLineHeight.normal,\r\n },\r\n} as const\r\n\r\nexport type ComponentTypographyKey = keyof typeof componentTypography\r\n","/**\r\n * Brycks Design System - Opacity Primitives\r\n *\r\n * Standardized opacity values for consistent visual states.\r\n *\r\n * RULE: Components MUST use these values. Never hardcode opacity.\r\n */\r\n\r\n/**\r\n * Opacity scale for various visual states.\r\n */\r\nexport const opacity = {\r\n /** 0 - Fully transparent */\r\n transparent: 0,\r\n /** 0.05 - Barely visible */\r\n 5: 0.05,\r\n /** 0.1 - Subtle hint */\r\n 10: 0.1,\r\n /** 0.15 - Light overlay */\r\n 15: 0.15,\r\n /** 0.2 - Soft background */\r\n 20: 0.2,\r\n /** 0.25 - Quarter visible */\r\n 25: 0.25,\r\n /** 0.3 - Light emphasis */\r\n 30: 0.3,\r\n /** 0.4 - Medium-light */\r\n 40: 0.4,\r\n /** 0.5 - Half visible (disabled) */\r\n 50: 0.5,\r\n /** 0.6 - Medium */\r\n 60: 0.6,\r\n /** 0.7 - Medium-strong */\r\n 70: 0.7,\r\n /** 0.75 - Three-quarter visible */\r\n 75: 0.75,\r\n /** 0.8 - Strong */\r\n 80: 0.8,\r\n /** 0.9 - Almost opaque */\r\n 90: 0.9,\r\n /** 0.95 - Nearly opaque */\r\n 95: 0.95,\r\n /** 1 - Fully opaque */\r\n opaque: 1,\r\n} as const\r\n\r\n/**\r\n * Semantic opacity values for common states.\r\n */\r\nexport const stateOpacity = {\r\n /** Disabled elements */\r\n disabled: opacity[50],\r\n /** Placeholder text */\r\n placeholder: opacity[50],\r\n /** Hover overlay */\r\n hoverOverlay: opacity[5],\r\n /** Active/pressed overlay */\r\n activeOverlay: opacity[10],\r\n /** Modal backdrop */\r\n backdrop: opacity[40],\r\n /** Loading state */\r\n loading: opacity[70],\r\n /** Secondary text */\r\n muted: opacity[60],\r\n /** Subtle decorative elements */\r\n subtle: opacity[30],\r\n} as const\r\n\r\n/**\r\n * Scale transform values for interactive states.\r\n */\r\nexport const scale = {\r\n /** Pressed state - subtle shrink */\r\n pressed: 0.98,\r\n /** Strong pressed - more noticeable */\r\n pressedStrong: 0.95,\r\n /** Checkbox pressed */\r\n controlPressed: 0.92,\r\n /** Hidden/initial state for animations */\r\n hidden: 0.95,\r\n /** Normal state */\r\n normal: 1,\r\n /** Slight grow on hover */\r\n hover: 1.02,\r\n /** Emphasized grow */\r\n emphasized: 1.05,\r\n} as const\r\n\r\nexport type OpacityValue = keyof typeof opacity\r\nexport type StateOpacity = keyof typeof stateOpacity\r\nexport type ScaleValue = keyof typeof scale\r\n","/**\r\n * Brycks Design System - Layout Primitives\r\n *\r\n * Standardized layout dimensions for application shells.\r\n * All values are derived from the spacing token system (4px grid).\r\n *\r\n * RULE: Application layouts MUST use these constants. Never hardcode dimensions.\r\n */\r\n\r\nimport { spacing } from '../tokens/spacing'\r\n\r\n/**\r\n * Sidebar dimensions\r\n */\r\nexport const sidebarSizes = {\r\n /** Collapsed sidebar width: 72px */\r\n collapsed: 72,\r\n /** Expanded sidebar width: 240px */\r\n expanded: 240,\r\n /** Logo size: 32px */\r\n logoSize: spacing[8],\r\n /** Nav icon size: 20px */\r\n navIconSize: spacing[5],\r\n} as const\r\n\r\n/**\r\n * Header dimensions\r\n */\r\nexport const headerSizes = {\r\n /** Standard header height: 64px */\r\n height: spacing[16],\r\n /** Compact header height: 48px */\r\n compact: spacing[12],\r\n} as const\r\n\r\n/**\r\n * Avatar dimensions\r\n */\r\nexport const avatarSizes = {\r\n /** 24px - Extra small */\r\n xs: spacing[6],\r\n /** 32px - Small */\r\n sm: spacing[8],\r\n /** 36px - Medium (default) */\r\n md: 36,\r\n /** 40px - Large */\r\n lg: spacing[10],\r\n /** 48px - Extra large */\r\n xl: spacing[12],\r\n /** 64px - 2x large (for hero sections) */\r\n '2xl': spacing[16],\r\n} as const\r\n\r\n/**\r\n * Icon button sizes (square buttons with icons)\r\n */\r\nexport const iconButtonSizes = {\r\n /** 28px */\r\n xs: 28,\r\n /** 32px */\r\n sm: spacing[8],\r\n /** 36px */\r\n md: 36,\r\n /** 40px */\r\n lg: spacing[10],\r\n /** 48px */\r\n xl: spacing[12],\r\n} as const\r\n\r\n/**\r\n * Quick action card dimensions\r\n */\r\nexport const quickActionSizes = {\r\n /** Icon container size: 48px */\r\n iconContainer: spacing[12],\r\n /** Default padding: 16px */\r\n padding: spacing[4],\r\n} as const\r\n\r\n/**\r\n * Content area padding\r\n */\r\nexport const contentPadding = {\r\n /** Mobile padding: 16px */\r\n mobile: spacing[4],\r\n /** Tablet padding: 20px */\r\n tablet: spacing[5],\r\n /** Desktop padding: 24px */\r\n desktop: spacing[6],\r\n /** Large screen padding: 32px */\r\n wide: spacing[8],\r\n} as const\r\n\r\n/**\r\n * Page header spacing\r\n */\r\nexport const pageHeaderSpacing = {\r\n /** Bottom margin: 24px */\r\n marginBottom: spacing[6],\r\n} as const\r\n\r\n/**\r\n * Search input dimensions\r\n */\r\nexport const searchInputSizes = {\r\n /** Minimum width: 240px */\r\n minWidth: 240,\r\n /** Icon left offset: 12px */\r\n iconLeft: spacing[3],\r\n /** Input left padding to accommodate icon: 36px */\r\n paddingLeft: 36,\r\n} as const\r\n\r\n/**\r\n * Stat card dimensions\r\n */\r\nexport const statCardSizes = {\r\n /** Icon container size: 48px */\r\n iconContainer: spacing[12],\r\n} as const\r\n\r\nexport type SidebarSizes = typeof sidebarSizes\r\nexport type HeaderSizes = typeof headerSizes\r\nexport type AvatarSizes = typeof avatarSizes\r\nexport type IconButtonSizes = typeof iconButtonSizes\r\n","/**\r\n * Brycks Design System - Style Utilities\r\n *\r\n * Helper functions for building component styles.\r\n * All values derive from design system - NO hardcoded values.\r\n *\r\n * @module utils/styles\r\n */\r\n\r\nimport type { CSSProperties } from 'react'\r\nimport type { SpacingProps } from '../types/common'\r\nimport { spacing } from '../design-system'\r\n\r\n/** Merge class names, filtering out falsy values */\r\nexport function cx(...classes: (string | boolean | undefined | null)[]): string {\r\n return classes.filter(Boolean).join(' ')\r\n}\r\n\r\n/** Convert spacing key to pixel value */\r\nexport function getSpacingValue(key: keyof typeof spacing): number {\r\n return spacing[key]\r\n}\r\n\r\n/** Convert spacing key to CSS value with px unit */\r\nexport function spacingToCss(key: keyof typeof spacing | undefined): string | undefined {\r\n if (key === undefined) return undefined\r\n const value = spacing[key]\r\n return value === 0 ? '0' : `${value}px`\r\n}\r\n\r\n/** Build spacing styles from props */\r\nexport function buildSpacingStyles(props: SpacingProps): CSSProperties {\r\n const styles: CSSProperties = {}\r\n\r\n if (props.m !== undefined) styles.margin = spacingToCss(props.m)\r\n if (props.mx !== undefined) {\r\n styles.marginLeft = spacingToCss(props.mx)\r\n styles.marginRight = spacingToCss(props.mx)\r\n }\r\n if (props.my !== undefined) {\r\n styles.marginTop = spacingToCss(props.my)\r\n styles.marginBottom = spacingToCss(props.my)\r\n }\r\n if (props.mt !== undefined) styles.marginTop = spacingToCss(props.mt)\r\n if (props.mr !== undefined) styles.marginRight = spacingToCss(props.mr)\r\n if (props.mb !== undefined) styles.marginBottom = spacingToCss(props.mb)\r\n if (props.ml !== undefined) styles.marginLeft = spacingToCss(props.ml)\r\n\r\n if (props.p !== undefined) styles.padding = spacingToCss(props.p)\r\n if (props.px !== undefined) {\r\n styles.paddingLeft = spacingToCss(props.px)\r\n styles.paddingRight = spacingToCss(props.px)\r\n }\r\n if (props.py !== undefined) {\r\n styles.paddingTop = spacingToCss(props.py)\r\n styles.paddingBottom = spacingToCss(props.py)\r\n }\r\n if (props.pt !== undefined) styles.paddingTop = spacingToCss(props.pt)\r\n if (props.pr !== undefined) styles.paddingRight = spacingToCss(props.pr)\r\n if (props.pb !== undefined) styles.paddingBottom = spacingToCss(props.pb)\r\n if (props.pl !== undefined) styles.paddingLeft = spacingToCss(props.pl)\r\n\r\n return styles\r\n}\r\n\r\n/** Create CSS-in-JS style object with typed tokens */\r\nexport function createStyles<T extends Record<string, CSSProperties>>(styles: T): T {\r\n return styles\r\n}\r\n\r\n/** Generate a unique ID for accessibility */\r\nlet idCounter = 0\r\nexport function generateId(prefix = 'brycks'): string {\r\n return `${prefix}-${++idCounter}`\r\n}\r\n\r\n/** Convert hex color to rgba */\r\nexport function hexToRgba(hex: string, alpha: number): string {\r\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex)\r\n if (!result) return hex\r\n\r\n const r = parseInt(result[1], 16)\r\n const g = parseInt(result[2], 16)\r\n const b = parseInt(result[3], 16)\r\n\r\n return `rgba(${r}, ${g}, ${b}, ${alpha})`\r\n}\r\n","/**\r\n * Box Component Styles\r\n */\r\n\r\nimport type { CSSProperties } from 'react'\r\nimport type { BoxOwnProps } from './Box.types'\r\nimport { buildSpacingStyles } from '../../../utils/styles'\r\n\r\nconst radiusMap: Record<NonNullable<BoxOwnProps['radius']>, string> = {\r\n none: '0',\r\n xs: 'var(--brycks-radius-xs)',\r\n sm: 'var(--brycks-radius-sm)',\r\n md: 'var(--brycks-radius-md)',\r\n lg: 'var(--brycks-radius-lg)',\r\n xl: 'var(--brycks-radius-xl)',\r\n '2xl': 'var(--brycks-radius-2xl)',\r\n '3xl': 'var(--brycks-radius-3xl)',\r\n full: 'var(--brycks-radius-full)',\r\n}\r\n\r\nconst shadowMap: Record<NonNullable<BoxOwnProps['shadow']>, string> = {\r\n none: 'none',\r\n xs: 'var(--brycks-shadow-xs)',\r\n sm: 'var(--brycks-shadow-sm)',\r\n md: 'var(--brycks-shadow-md)',\r\n lg: 'var(--brycks-shadow-lg)',\r\n xl: 'var(--brycks-shadow-xl)',\r\n '2xl': 'var(--brycks-shadow-2xl)',\r\n}\r\n\r\nexport function buildBoxStyles(props: BoxOwnProps): CSSProperties {\r\n const spacingStyles = buildSpacingStyles(props)\r\n\r\n const styles: CSSProperties = {\r\n ...spacingStyles,\r\n }\r\n\r\n if (props.display) styles.display = props.display\r\n if (props.position) styles.position = props.position\r\n if (props.width) styles.width = props.width\r\n if (props.height) styles.height = props.height\r\n if (props.minWidth) styles.minWidth = props.minWidth\r\n if (props.maxWidth) styles.maxWidth = props.maxWidth\r\n if (props.minHeight) styles.minHeight = props.minHeight\r\n if (props.maxHeight) styles.maxHeight = props.maxHeight\r\n if (props.overflow) styles.overflow = props.overflow\r\n if (props.bg) styles.backgroundColor = props.bg\r\n if (props.radius) styles.borderRadius = radiusMap[props.radius]\r\n if (props.shadow) styles.boxShadow = shadowMap[props.shadow]\r\n\r\n return styles\r\n}\r\n","/**\r\n * Box Component\r\n *\r\n * A polymorphic layout primitive that serves as the foundation for all other components.\r\n * Provides spacing, sizing, and visual styling through props.\r\n */\r\n\r\nimport React, { forwardRef, type ElementType, type ComponentPropsWithRef } from 'react'\r\nimport type { BoxProps, BoxOwnProps } from './Box.types'\r\nimport { buildBoxStyles } from './Box.styles'\r\nimport { cx } from '../../../utils/styles'\r\n\r\ninterface BoxComponent {\r\n <E extends ElementType = 'div'>(\r\n props: BoxProps<E> & { ref?: ComponentPropsWithRef<E>['ref'] }\r\n ): React.JSX.Element | null\r\n displayName?: string\r\n}\r\n\r\n// Keys to omit from props before spreading\r\nconst boxOwnPropKeys: (keyof BoxOwnProps)[] = [\r\n 'm',\r\n 'mx',\r\n 'my',\r\n 'mt',\r\n 'mr',\r\n 'mb',\r\n 'ml',\r\n 'p',\r\n 'px',\r\n 'py',\r\n 'pt',\r\n 'pr',\r\n 'pb',\r\n 'pl',\r\n 'display',\r\n 'position',\r\n 'width',\r\n 'height',\r\n 'minWidth',\r\n 'maxWidth',\r\n 'minHeight',\r\n 'maxHeight',\r\n 'overflow',\r\n 'bg',\r\n 'radius',\r\n 'shadow',\r\n 'testId',\r\n]\r\n\r\nfunction omitBoxProps<P extends Record<string, unknown>>(\r\n props: P\r\n): Omit<P, (typeof boxOwnPropKeys)[number]> {\r\n const result = { ...props }\r\n for (const key of boxOwnPropKeys) {\r\n delete result[key]\r\n }\r\n return result\r\n}\r\n\r\nconst BoxInner = <E extends ElementType = 'div'>(\r\n { as, className, style, children, testId, ...props }: BoxProps<E>,\r\n ref: React.ForwardedRef<Element>\r\n) => {\r\n const Component = as || 'div'\r\n const boxStyles = buildBoxStyles(props as BoxOwnProps)\r\n const filteredProps = omitBoxProps(props)\r\n\r\n return (\r\n <Component\r\n ref={ref}\r\n className={cx('brycks-box', className)}\r\n style={{ ...boxStyles, ...style }}\r\n data-testid={testId}\r\n {...filteredProps}\r\n >\r\n {children}\r\n </Component>\r\n )\r\n}\r\n\r\nexport const Box = forwardRef(BoxInner) as BoxComponent\r\n\r\nBox.displayName = 'Box'\r\n","/**\r\n * Stack Component\r\n *\r\n * A flexbox layout component for stacking elements vertically or horizontally.\r\n * Provides consistent spacing between children.\r\n */\r\n\r\nimport React, { forwardRef, type ElementType, type ComponentPropsWithRef, type CSSProperties } from 'react'\r\nimport type { StackProps, StackOwnProps } from './Stack.types'\r\nimport { buildSpacingStyles, spacingToCss, cx } from '../../../utils/styles'\r\n\r\ninterface StackComponent {\r\n <E extends ElementType = 'div'>(\r\n props: StackProps<E> & { ref?: ComponentPropsWithRef<E>['ref'] }\r\n ): React.JSX.Element | null\r\n displayName?: string\r\n}\r\n\r\nconst stackOwnPropKeys: (keyof StackOwnProps)[] = [\r\n 'm',\r\n 'mx',\r\n 'my',\r\n 'mt',\r\n 'mr',\r\n 'mb',\r\n 'ml',\r\n 'p',\r\n 'px',\r\n 'py',\r\n 'pt',\r\n 'pr',\r\n 'pb',\r\n 'pl',\r\n 'direction',\r\n 'gap',\r\n 'gapX',\r\n 'gapY',\r\n 'align',\r\n 'justify',\r\n 'wrap',\r\n 'inline',\r\n 'testId',\r\n]\r\n\r\nfunction omitStackProps<P extends Record<string, unknown>>(\r\n props: P\r\n): Omit<P, (typeof stackOwnPropKeys)[number]> {\r\n const result = { ...props }\r\n for (const key of stackOwnPropKeys) {\r\n delete result[key]\r\n }\r\n return result\r\n}\r\n\r\nfunction buildStackStyles(props: StackOwnProps): CSSProperties {\r\n const spacingStyles = buildSpacingStyles(props)\r\n\r\n const styles: CSSProperties = {\r\n ...spacingStyles,\r\n display: props.inline ? 'inline-flex' : 'flex',\r\n flexDirection: props.direction ?? 'column',\r\n }\r\n\r\n if (props.gap !== undefined) {\r\n styles.gap = spacingToCss(props.gap)\r\n } else {\r\n if (props.gapX !== undefined) styles.columnGap = spacingToCss(props.gapX)\r\n if (props.gapY !== undefined) styles.rowGap = spacingToCss(props.gapY)\r\n }\r\n\r\n if (props.align) styles.alignItems = props.align\r\n if (props.justify) styles.justifyContent = props.justify\r\n if (props.wrap) styles.flexWrap = props.wrap\r\n\r\n return styles\r\n}\r\n\r\nconst StackInner = <E extends ElementType = 'div'>(\r\n { as, className, style, children, testId, ...props }: StackProps<E>,\r\n ref: React.ForwardedRef<Element>\r\n) => {\r\n const Component = as || 'div'\r\n const stackStyles = buildStackStyles(props as StackOwnProps)\r\n const filteredProps = omitStackProps(props)\r\n\r\n return (\r\n <Component\r\n ref={ref}\r\n className={cx('brycks-stack', className)}\r\n style={{ ...stackStyles, ...style }}\r\n data-testid={testId}\r\n {...filteredProps}\r\n >\r\n {children}\r\n </Component>\r\n )\r\n}\r\n\r\nexport const Stack = forwardRef(StackInner) as StackComponent\r\n\r\nStack.displayName = 'Stack'\r\n\r\n/** Horizontal stack shorthand */\r\nconst HStackInner = <E extends ElementType = 'div'>(\r\n props: Omit<StackProps<E>, 'direction'> & { ref?: ComponentPropsWithRef<E>['ref'] },\r\n ref: React.ForwardedRef<Element>\r\n) => {\r\n return <Stack ref={ref} direction=\"row\" align=\"center\" {...props} />\r\n}\r\n\r\nexport const HStack = forwardRef(HStackInner) as StackComponent\r\n\r\nHStack.displayName = 'HStack'\r\n\r\n/** Vertical stack shorthand */\r\nconst VStackInner = <E extends ElementType = 'div'>(\r\n props: Omit<StackProps<E>, 'direction'> & { ref?: ComponentPropsWithRef<E>['ref'] },\r\n ref: React.ForwardedRef<Element>\r\n) => {\r\n return <Stack ref={ref} direction=\"column\" {...props} />\r\n}\r\n\r\nexport const VStack = forwardRef(VStackInner) as StackComponent\r\n\r\nVStack.displayName = 'VStack'\r\n","/**\r\n * Grid Component\r\n *\r\n * A CSS Grid layout component for creating responsive grid layouts.\r\n */\r\n\r\nimport React, {\r\n forwardRef,\r\n type ElementType,\r\n type ComponentPropsWithRef,\r\n type CSSProperties,\r\n type ReactNode,\r\n type ComponentPropsWithoutRef,\r\n} from 'react'\r\nimport type { SpacingProps } from '../../../types/common'\r\nimport type { SpacingKey } from '../../../design-system/tokens/spacing'\r\nimport { buildSpacingStyles, spacingToCss, cx } from '../../../utils/styles'\r\n\r\nexport interface GridOwnProps extends SpacingProps {\r\n /** The element type to render */\r\n as?: ElementType\r\n /** Custom class name */\r\n className?: string\r\n /** Custom inline styles */\r\n style?: CSSProperties\r\n /** Number of columns */\r\n columns?: number | string\r\n /** Number of rows */\r\n rows?: number | string\r\n /** Gap between items */\r\n gap?: SpacingKey\r\n /** Column gap */\r\n gapX?: SpacingKey\r\n /** Row gap */\r\n gapY?: SpacingKey\r\n /** Align items */\r\n align?: CSSProperties['alignItems']\r\n /** Justify items */\r\n justify?: CSSProperties['justifyItems']\r\n /** Template columns (CSS value) */\r\n templateColumns?: string\r\n /** Template rows (CSS value) */\r\n templateRows?: string\r\n /** Auto flow */\r\n flow?: CSSProperties['gridAutoFlow']\r\n /** Whether to render as inline-grid */\r\n inline?: boolean\r\n /** Children */\r\n children?: ReactNode\r\n /** Test ID */\r\n testId?: string\r\n}\r\n\r\nexport type GridProps<E extends ElementType = 'div'> = GridOwnProps &\r\n Omit<ComponentPropsWithoutRef<E>, keyof GridOwnProps>\r\n\r\ninterface GridComponent {\r\n <E extends ElementType = 'div'>(\r\n props: GridProps<E> & { ref?: ComponentPropsWithRef<E>['ref'] }\r\n ): React.JSX.Element | null\r\n displayName?: string\r\n}\r\n\r\nconst gridOwnPropKeys: (keyof GridOwnProps)[] = [\r\n 'm',\r\n 'mx',\r\n 'my',\r\n 'mt',\r\n 'mr',\r\n 'mb',\r\n 'ml',\r\n 'p',\r\n 'px',\r\n 'py',\r\n 'pt',\r\n 'pr',\r\n 'pb',\r\n 'pl',\r\n 'columns',\r\n 'rows',\r\n 'gap',\r\n 'gapX',\r\n 'gapY',\r\n 'align',\r\n 'justify',\r\n 'templateColumns',\r\n 'templateRows',\r\n 'flow',\r\n 'inline',\r\n 'testId',\r\n]\r\n\r\nfunction omitGridProps<P extends Record<string, unknown>>(\r\n props: P\r\n): Omit<P, (typeof gridOwnPropKeys)[number]> {\r\n const result = { ...props }\r\n for (const key of gridOwnPropKeys) {\r\n delete result[key]\r\n }\r\n return result\r\n}\r\n\r\nfunction buildGridStyles(props: GridOwnProps): CSSProperties {\r\n const spacingStyles = buildSpacingStyles(props)\r\n\r\n const styles: CSSProperties = {\r\n ...spacingStyles,\r\n display: props.inline ? 'inline-grid' : 'grid',\r\n }\r\n\r\n if (props.columns !== undefined) {\r\n styles.gridTemplateColumns =\r\n typeof props.columns === 'number' ? `repeat(${props.columns}, 1fr)` : props.columns\r\n }\r\n\r\n if (props.rows !== undefined) {\r\n styles.gridTemplateRows =\r\n typeof props.rows === 'number' ? `repeat(${props.rows}, 1fr)` : props.rows\r\n }\r\n\r\n if (props.templateColumns) styles.gridTemplateColumns = props.templateColumns\r\n if (props.templateRows) styles.gridTemplateRows = props.templateRows\r\n\r\n if (props.gap !== undefined) {\r\n styles.gap = spacingToCss(props.gap)\r\n } else {\r\n if (props.gapX !== undefined) styles.columnGap = spacingToCss(props.gapX)\r\n if (props.gapY !== undefined) styles.rowGap = spacingToCss(props.gapY)\r\n }\r\n\r\n if (props.align) styles.alignItems = props.align\r\n if (props.justify) styles.justifyItems = props.justify\r\n if (props.flow) styles.gridAutoFlow = props.flow\r\n\r\n return styles\r\n}\r\n\r\nconst GridInner = <E extends ElementType = 'div'>(\r\n { as, className, style, children, testId, ...props }: GridProps<E>,\r\n ref: React.ForwardedRef<Element>\r\n) => {\r\n const Component = as || 'div'\r\n const gridStyles = buildGridStyles(props as GridOwnProps)\r\n const filteredProps = omitGridProps(props)\r\n\r\n return (\r\n <Component\r\n ref={ref}\r\n className={cx('brycks-grid', className)}\r\n style={{ ...gridStyles, ...style }}\r\n data-testid={testId}\r\n {...filteredProps}\r\n >\r\n {children}\r\n </Component>\r\n )\r\n}\r\n\r\nexport const Grid = forwardRef(GridInner) as GridComponent\r\n\r\nGrid.displayName = 'Grid'\r\n\r\n/** Grid Item Component */\r\nexport interface GridItemOwnProps {\r\n /** Column span */\r\n colSpan?: number | 'full'\r\n /** Row span */\r\n rowSpan?: number\r\n /** Column start */\r\n colStart?: number\r\n /** Column end */\r\n colEnd?: number\r\n /** Row start */\r\n rowStart?: number\r\n /** Row end */\r\n rowEnd?: number\r\n /** Custom class name */\r\n className?: string\r\n /** Custom inline styles */\r\n style?: CSSProperties\r\n /** Children */\r\n children?: ReactNode\r\n /** Test ID */\r\n testId?: string\r\n}\r\n\r\nexport type GridItemProps<E extends ElementType = 'div'> = GridItemOwnProps &\r\n Omit<ComponentPropsWithoutRef<E>, keyof GridItemOwnProps> & {\r\n as?: E\r\n }\r\n\r\ninterface GridItemComponent {\r\n <E extends ElementType = 'div'>(\r\n props: GridItemProps<E> & { ref?: ComponentPropsWithRef<E>['ref'] }\r\n ): React.JSX.Element | null\r\n displayName?: string\r\n}\r\n\r\nconst GridItemInner = <E extends ElementType = 'div'>(\r\n {\r\n as,\r\n className,\r\n style,\r\n children,\r\n testId,\r\n colSpan,\r\n rowSpan,\r\n colStart,\r\n colEnd,\r\n rowStart,\r\n rowEnd,\r\n ...props\r\n }: GridItemProps<E>,\r\n ref: React.ForwardedRef<Element>\r\n) => {\r\n const Component = as || 'div'\r\n\r\n const itemStyles: CSSProperties = {}\r\n\r\n if (colSpan !== undefined) {\r\n itemStyles.gridColumn = colSpan === 'full' ? '1 / -1' : `span ${colSpan}`\r\n }\r\n if (rowSpan !== undefined) itemStyles.gridRow = `span ${rowSpan}`\r\n if (colStart !== undefined) itemStyles.gridColumnStart = colStart\r\n if (colEnd !== undefined) itemStyles.gridColumnEnd = colEnd\r\n if (rowStart !== undefined) itemStyles.gridRowStart = rowStart\r\n if (rowEnd !== undefined) itemStyles.gridRowEnd = rowEnd\r\n\r\n return (\r\n <Component\r\n ref={ref as React.LegacyRef<HTMLDivElement>}\r\n className={cx('brycks-grid-item', className)}\r\n style={{ ...itemStyles, ...style }}\r\n data-testid={testId}\r\n {...props}\r\n >\r\n {children}\r\n </Component>\r\n )\r\n}\r\n\r\nexport const GridItem = forwardRef(GridItemInner) as GridItemComponent\r\n\r\nGridItem.displayName = 'GridItem'\r\n","/**\r\n * Container Component\r\n *\r\n * A responsive container that centers content and provides consistent max-widths.\r\n * All values derive from design system - NO hardcoded values.\r\n *\r\n * @module components/layout/Container\r\n */\r\n\r\nimport React, {\r\n forwardRef,\r\n type ElementType,\r\n type ComponentPropsWithRef,\r\n type CSSProperties,\r\n type ReactNode,\r\n type ComponentPropsWithoutRef,\r\n} from 'react'\r\nimport type { SpacingProps } from '../../../types/common'\r\nimport { containers } from '../../../design-system'\r\nimport { buildSpacingStyles, cx } from '../../../utils/styles'\r\n\r\nexport interface ContainerOwnProps extends SpacingProps {\r\n /** The element type to render */\r\n as?: ElementType\r\n /** Custom class name */\r\n className?: string\r\n /** Custom inline styles */\r\n style?: CSSProperties\r\n /** Container size / max-width */\r\n size?: keyof typeof containers\r\n /** Whether to center the container */\r\n centered?: boolean\r\n /** Whether to add default horizontal padding */\r\n padded?: boolean\r\n /** Children */\r\n children?: ReactNode\r\n /** Test ID */\r\n testId?: string\r\n}\r\n\r\nexport type ContainerProps<E extends ElementType = 'div'> = ContainerOwnProps &\r\n Omit<ComponentPropsWithoutRef<E>, keyof ContainerOwnProps>\r\n\r\ninterface ContainerComponent {\r\n <E extends ElementType = 'div'>(\r\n props: ContainerProps<E> & { ref?: ComponentPropsWithRef<E>['ref'] }\r\n ): React.JSX.Element | null\r\n displayName?: string\r\n}\r\n\r\nconst containerOwnPropKeys: (keyof ContainerOwnProps)[] = [\r\n 'm',\r\n 'mx',\r\n 'my',\r\n 'mt',\r\n 'mr',\r\n 'mb',\r\n 'ml',\r\n 'p',\r\n 'px',\r\n 'py',\r\n 'pt',\r\n 'pr',\r\n 'pb',\r\n 'pl',\r\n 'size',\r\n 'centered',\r\n 'padded',\r\n 'testId',\r\n]\r\n\r\nfunction omitContainerProps<P extends Record<string, unknown>>(\r\n props: P\r\n): Omit<P, (typeof containerOwnPropKeys)[number]> {\r\n const result = { ...props }\r\n for (const key of containerOwnPropKeys) {\r\n delete result[key]\r\n }\r\n return result\r\n}\r\n\r\nfunction buildContainerStyles(props: ContainerOwnProps): CSSProperties {\r\n const spacingStyles = buildSpacingStyles(props)\r\n\r\n const size = props.size ?? 'xl'\r\n const maxWidth = containers[size]\r\n\r\n const styles: CSSProperties = {\r\n ...spacingStyles,\r\n width: '100%',\r\n maxWidth: typeof maxWidth === 'number' ? `${maxWidth}px` : maxWidth,\r\n }\r\n\r\n if (props.centered !== false) {\r\n styles.marginLeft = 'auto'\r\n styles.marginRight = 'auto'\r\n }\r\n\r\n if (props.padded !== false) {\r\n styles.paddingLeft = 'var(--brycks-space-4)'\r\n styles.paddingRight = 'var(--brycks-space-4)'\r\n }\r\n\r\n return styles\r\n}\r\n\r\nconst ContainerInner = <E extends ElementType = 'div'>(\r\n { as, className, style, children, testId, ...props }: ContainerProps<E>,\r\n ref: React.ForwardedRef<Element>\r\n) => {\r\n const Component = as || 'div'\r\n const containerStyles = buildContainerStyles(props as ContainerOwnProps)\r\n const filteredProps = omitContainerProps(props)\r\n\r\n return (\r\n <Component\r\n ref={ref}\r\n className={cx('brycks-container', className)}\r\n style={{ ...containerStyles, ...style }}\r\n data-testid={testId}\r\n {...filteredProps}\r\n >\r\n {children}\r\n </Component>\r\n )\r\n}\r\n\r\nexport const Container = forwardRef(ContainerInner) as ContainerComponent\r\n\r\nContainer.displayName = 'Container'\r\n","/**\n * Card Component\n *\n * A flexible card container with optional header, footer, and body sections.\n * Supports different variants and padding sizes.\n */\n\nimport { forwardRef, type CSSProperties, type HTMLAttributes } from 'react'\nimport { cx } from '../../../utils/styles'\n\nexport type CardVariant = 'elevated' | 'outline' | 'filled' | 'ghost'\nexport type CardPadding = 'none' | 'sm' | 'md' | 'lg' | 'xl'\n\nexport interface CardProps extends HTMLAttributes<HTMLDivElement> {\n /** Card variant */\n variant?: CardVariant\n /** Card padding */\n padding?: CardPadding\n /** Whether the card is interactive (adds hover effect) */\n interactive?: boolean\n /** Whether the card is selected */\n selected?: boolean\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nexport interface CardHeaderProps extends HTMLAttributes<HTMLDivElement> {\n /** Whether to show a divider below the header */\n divider?: boolean\n /** Custom class name */\n className?: string\n}\n\nexport interface CardBodyProps extends HTMLAttributes<HTMLDivElement> {\n /** Custom class name */\n className?: string\n}\n\nexport interface CardFooterProps extends HTMLAttributes<HTMLDivElement> {\n /** Whether to show a divider above the footer */\n divider?: boolean\n /** Footer alignment */\n align?: 'left' | 'center' | 'right' | 'between'\n /** Custom class name */\n className?: string\n}\n\nconst paddingMap: Record<CardPadding, number> = {\n none: 0,\n sm: 12,\n md: 16,\n lg: 24,\n xl: 32,\n}\n\nexport const Card = forwardRef<HTMLDivElement, CardProps>(function Card(\n {\n variant = 'elevated',\n padding = 'md',\n interactive = false,\n selected = false,\n className,\n style,\n children,\n testId,\n ...props\n },\n ref\n) {\n const getVariantStyles = (): CSSProperties => {\n const base: CSSProperties = {\n borderRadius: 'var(--brycks-radius-lg)',\n transition: 'transform 150ms ease-out, box-shadow 150ms ease-out, border-color 150ms ease-out',\n }\n\n switch (variant) {\n case 'elevated':\n return {\n ...base,\n backgroundColor: 'var(--brycks-background-elevated)',\n boxShadow: selected\n ? '0 0 0 2px var(--brycks-primary-default), var(--brycks-shadow-md)'\n : 'var(--brycks-shadow-md)',\n border: '1px solid var(--brycks-border-subtle)',\n }\n case 'outline':\n return {\n ...base,\n backgroundColor: 'var(--brycks-background-default)',\n border: selected\n ? '2px solid var(--brycks-primary-default)'\n : '1px solid var(--brycks-border-default)',\n }\n case 'filled':\n return {\n ...base,\n backgroundColor: 'var(--brycks-background-muted)',\n border: selected\n ? '2px solid var(--brycks-primary-default)'\n : '1px solid transparent',\n }\n case 'ghost':\n return {\n ...base,\n backgroundColor: 'transparent',\n border: selected\n ? '2px solid var(--brycks-primary-default)'\n : '1px solid transparent',\n }\n }\n }\n\n const cardStyle: CSSProperties = {\n ...getVariantStyles(),\n padding: paddingMap[padding],\n display: 'flex',\n flexDirection: 'column',\n cursor: interactive ? 'pointer' : undefined,\n ...style,\n }\n\n return (\n <div\n ref={ref}\n className={cx(\n 'brycks-card',\n `brycks-card--${variant}`,\n interactive && 'brycks-card--interactive',\n selected && 'brycks-card--selected',\n className\n )}\n style={cardStyle}\n data-testid={testId}\n onMouseEnter={\n interactive\n ? (e) => {\n const target = e.currentTarget\n if (variant === 'elevated') {\n target.style.boxShadow = selected\n ? '0 0 0 2px var(--brycks-primary-default), var(--brycks-shadow-lg)'\n : 'var(--brycks-shadow-lg)'\n target.style.transform = 'translateY(-2px)'\n } else if (variant !== 'ghost') {\n target.style.borderColor = 'var(--brycks-border-strong)'\n }\n }\n : undefined\n }\n onMouseLeave={\n interactive\n ? (e) => {\n const target = e.currentTarget\n if (variant === 'elevated') {\n target.style.boxShadow = selected\n ? '0 0 0 2px var(--brycks-primary-default), var(--brycks-shadow-md)'\n : 'var(--brycks-shadow-md)'\n target.style.transform = 'translateY(0)'\n } else if (variant !== 'ghost') {\n target.style.borderColor = selected\n ? 'var(--brycks-primary-default)'\n : 'var(--brycks-border-default)'\n }\n }\n : undefined\n }\n {...props}\n >\n {children}\n </div>\n )\n})\n\nCard.displayName = 'Card'\n\nexport const CardHeader = forwardRef<HTMLDivElement, CardHeaderProps>(function CardHeader(\n { divider = false, className, style, children, ...props },\n ref\n) {\n const headerStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 12,\n paddingBottom: divider ? 16 : 0,\n marginBottom: divider ? 16 : 12,\n borderBottom: divider ? '1px solid var(--brycks-border-muted)' : undefined,\n ...style,\n }\n\n return (\n <div ref={ref} className={cx('brycks-card-header', className)} style={headerStyle} {...props}>\n {children}\n </div>\n )\n})\n\nCardHeader.displayName = 'CardHeader'\n\nexport const CardBody = forwardRef<HTMLDivElement, CardBodyProps>(function CardBody(\n { className, style, children, ...props },\n ref\n) {\n const bodyStyle: CSSProperties = {\n flex: 1,\n ...style,\n }\n\n return (\n <div ref={ref} className={cx('brycks-card-body', className)} style={bodyStyle} {...props}>\n {children}\n </div>\n )\n})\n\nCardBody.displayName = 'CardBody'\n\nexport const CardFooter = forwardRef<HTMLDivElement, CardFooterProps>(function CardFooter(\n { divider = false, align = 'right', className, style, children, ...props },\n ref\n) {\n const alignMap: Record<string, CSSProperties['justifyContent']> = {\n left: 'flex-start',\n center: 'center',\n right: 'flex-end',\n between: 'space-between',\n }\n\n const footerStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: alignMap[align],\n gap: 12,\n paddingTop: divider ? 16 : 0,\n marginTop: divider ? 16 : 12,\n borderTop: divider ? '1px solid var(--brycks-border-muted)' : undefined,\n ...style,\n }\n\n return (\n <div ref={ref} className={cx('brycks-card-footer', className)} style={footerStyle} {...props}>\n {children}\n </div>\n )\n})\n\nCardFooter.displayName = 'CardFooter'\n","/**\n * Section Component\n *\n * A semantic section wrapper with optional title, description, and dividers.\n * Useful for organizing content into logical groups.\n */\n\nimport { forwardRef, type CSSProperties, type ReactNode, type HTMLAttributes } from 'react'\nimport { cx } from '../../../utils/styles'\n\nexport type SectionSpacing = 'none' | 'sm' | 'md' | 'lg' | 'xl'\n\nexport interface SectionProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {\n /** Section title */\n title?: ReactNode\n /** Section description */\n description?: ReactNode\n /** Title level for accessibility */\n titleLevel?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'\n /** Spacing between sections */\n spacing?: SectionSpacing\n /** Whether to show a divider above the section */\n divider?: boolean\n /** Actions to display in the header (right side) */\n actions?: ReactNode\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst spacingMap: Record<SectionSpacing, number> = {\n none: 0,\n sm: 16,\n md: 24,\n lg: 32,\n xl: 48,\n}\n\nexport const Section = forwardRef<HTMLElement, SectionProps>(function Section(\n {\n title,\n description,\n titleLevel = 'h2',\n spacing = 'md',\n divider = false,\n actions,\n className,\n style,\n children,\n testId,\n ...props\n },\n ref\n) {\n const TitleTag = titleLevel\n\n const sectionStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 16,\n paddingTop: divider ? spacingMap[spacing] : 0,\n marginTop: spacingMap[spacing],\n borderTop: divider ? '1px solid var(--brycks-border-muted)' : undefined,\n ...style,\n }\n\n const headerStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n gap: 16,\n }\n\n const titleContainerStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 4,\n }\n\n const titleStyle: CSSProperties = {\n fontSize: 18,\n fontWeight: 600,\n color: 'var(--brycks-foreground-default)',\n margin: 0,\n lineHeight: 1.3,\n }\n\n const descriptionStyle: CSSProperties = {\n fontSize: 14,\n color: 'var(--brycks-foreground-muted)',\n margin: 0,\n lineHeight: 1.5,\n }\n\n const actionsStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n flexShrink: 0,\n }\n\n const contentStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n }\n\n const hasHeader = title || description || actions\n\n return (\n <section\n ref={ref}\n className={cx('brycks-section', className)}\n style={sectionStyle}\n data-testid={testId}\n {...props}\n >\n {hasHeader && (\n <div className=\"brycks-section-header\" style={headerStyle}>\n <div style={titleContainerStyle}>\n {title && (\n <TitleTag style={titleStyle}>{title}</TitleTag>\n )}\n {description && (\n <p style={descriptionStyle}>{description}</p>\n )}\n </div>\n {actions && <div style={actionsStyle}>{actions}</div>}\n </div>\n )}\n <div className=\"brycks-section-content\" style={contentStyle}>\n {children}\n </div>\n </section>\n )\n})\n\nSection.displayName = 'Section'\n","/**\n * Spacer Component\n *\n * A flexible spacing utility component.\n * Can be used to add space between elements or to push elements apart in flex containers.\n */\n\nimport { forwardRef, type CSSProperties, type HTMLAttributes } from 'react'\nimport { cx } from '../../../utils/styles'\nimport { spacing as spacingTokens } from '../../../design-system/tokens/spacing'\n\ntype SpacingKey = keyof typeof spacingTokens\n\nexport interface SpacerProps extends HTMLAttributes<HTMLDivElement> {\n /** Fixed size in spacing tokens */\n size?: SpacingKey\n /** Custom size in pixels */\n customSize?: number\n /** Whether to expand to fill available space (flex: 1) */\n flex?: boolean\n /** Direction of the spacer */\n direction?: 'horizontal' | 'vertical'\n /** Custom class name */\n className?: string\n}\n\nexport const Spacer = forwardRef<HTMLDivElement, SpacerProps>(function Spacer(\n {\n size,\n customSize,\n flex = false,\n direction = 'vertical',\n className,\n style,\n ...props\n },\n ref\n) {\n const pixelSize = customSize ?? (size ? spacingTokens[size] : undefined)\n\n const spacerStyle: CSSProperties = {\n flex: flex ? 1 : undefined,\n width: direction === 'horizontal' ? (pixelSize ?? (flex ? undefined : 0)) : undefined,\n height: direction === 'vertical' ? (pixelSize ?? (flex ? undefined : 0)) : undefined,\n minWidth: direction === 'horizontal' && pixelSize ? pixelSize : undefined,\n minHeight: direction === 'vertical' && pixelSize ? pixelSize : undefined,\n flexShrink: 0,\n ...style,\n }\n\n return (\n <div\n ref={ref}\n className={cx('brycks-spacer', className)}\n style={spacerStyle}\n aria-hidden=\"true\"\n {...props}\n />\n )\n})\n\nSpacer.displayName = 'Spacer'\n","/**\n * Flex Component\n *\n * A flexible flexbox container with comprehensive flex properties.\n * Provides a more explicit API than Stack for complex flex layouts.\n */\n\nimport { forwardRef, type CSSProperties, type ReactNode, type HTMLAttributes } from 'react'\nimport { cx } from '../../../utils/styles'\nimport { spacing as spacingTokens } from '../../../design-system/tokens/spacing'\n\ntype SpacingKey = keyof typeof spacingTokens\n\ntype FlexDirection = 'row' | 'row-reverse' | 'column' | 'column-reverse'\ntype FlexWrap = 'nowrap' | 'wrap' | 'wrap-reverse'\ntype FlexJustify = 'start' | 'end' | 'center' | 'between' | 'around' | 'evenly'\ntype FlexAlign = 'start' | 'end' | 'center' | 'baseline' | 'stretch'\n\nexport interface FlexProps extends HTMLAttributes<HTMLDivElement> {\n /** Flex direction */\n direction?: FlexDirection\n /** Flex wrap */\n wrap?: FlexWrap\n /** Justify content */\n justify?: FlexJustify\n /** Align items */\n align?: FlexAlign\n /** Gap between items */\n gap?: SpacingKey\n /** Row gap */\n rowGap?: SpacingKey\n /** Column gap */\n columnGap?: SpacingKey\n /** Whether to display inline */\n inline?: boolean\n /** Flex grow */\n grow?: number\n /** Flex shrink */\n shrink?: number\n /** Flex basis */\n basis?: string | number\n /** Children */\n children?: ReactNode\n /** Custom class name */\n className?: string\n /** Custom styles */\n style?: CSSProperties\n /** Test ID */\n testId?: string\n}\n\nconst justifyMap: Record<FlexJustify, CSSProperties['justifyContent']> = {\n start: 'flex-start',\n end: 'flex-end',\n center: 'center',\n between: 'space-between',\n around: 'space-around',\n evenly: 'space-evenly',\n}\n\nconst alignMap: Record<FlexAlign, CSSProperties['alignItems']> = {\n start: 'flex-start',\n end: 'flex-end',\n center: 'center',\n baseline: 'baseline',\n stretch: 'stretch',\n}\n\nexport const Flex = forwardRef<HTMLDivElement, FlexProps>(function Flex(\n {\n direction = 'row',\n wrap = 'nowrap',\n justify = 'start',\n align = 'stretch',\n gap,\n rowGap,\n columnGap,\n inline = false,\n grow,\n shrink,\n basis,\n children,\n className,\n style,\n testId,\n ...props\n },\n ref\n) {\n const flexStyle: CSSProperties = {\n display: inline ? 'inline-flex' : 'flex',\n flexDirection: direction,\n flexWrap: wrap,\n justifyContent: justifyMap[justify],\n alignItems: alignMap[align],\n gap: gap ? spacingTokens[gap] : undefined,\n rowGap: rowGap ? spacingTokens[rowGap] : undefined,\n columnGap: columnGap ? spacingTokens[columnGap] : undefined,\n flexGrow: grow,\n flexShrink: shrink,\n flexBasis: basis,\n ...style,\n }\n\n return (\n <div\n ref={ref}\n className={cx('brycks-flex', className)}\n style={flexStyle}\n data-testid={testId}\n {...props}\n >\n {children}\n </div>\n )\n})\n\nFlex.displayName = 'Flex'\n\n// FlexItem for individual flex children\nexport interface FlexItemProps extends HTMLAttributes<HTMLDivElement> {\n /** Flex grow */\n grow?: number\n /** Flex shrink */\n shrink?: number\n /** Flex basis */\n basis?: string | number\n /** Align self */\n alignSelf?: FlexAlign\n /** Order */\n order?: number\n /** Children */\n children?: ReactNode\n /** Custom class name */\n className?: string\n /** Custom styles */\n style?: CSSProperties\n /** Test ID */\n testId?: string\n}\n\nexport const FlexItem = forwardRef<HTMLDivElement, FlexItemProps>(function FlexItem(\n {\n grow,\n shrink,\n basis,\n alignSelf,\n order,\n children,\n className,\n style,\n testId,\n ...props\n },\n ref\n) {\n const itemStyle: CSSProperties = {\n flexGrow: grow,\n flexShrink: shrink,\n flexBasis: basis,\n alignSelf: alignSelf ? alignMap[alignSelf] : undefined,\n order,\n ...style,\n }\n\n return (\n <div\n ref={ref}\n className={cx('brycks-flex-item', className)}\n style={itemStyle}\n data-testid={testId}\n {...props}\n >\n {children}\n </div>\n )\n})\n\nFlexItem.displayName = 'FlexItem'\n","/**\r\n * Text Component\r\n *\r\n * A polymorphic text component for rendering body text with consistent styling.\r\n * Supports all text styles from the design system.\r\n * All values derive from design system - NO hardcoded values.\r\n *\r\n * @module components/typography/Text\r\n */\r\n\r\nimport React, {\r\n forwardRef,\r\n type ElementType,\r\n type ComponentPropsWithRef,\r\n type CSSProperties,\r\n type ReactNode,\r\n type ComponentPropsWithoutRef,\r\n} from 'react'\r\nimport {\r\n fontSizes,\r\n fontWeights,\r\n lineHeights,\r\n textStyles,\r\n spacing,\r\n type FontSize,\r\n type FontWeight,\r\n type LineHeight,\r\n} from '../../../design-system'\r\nimport { cx } from '../../../utils/styles'\r\n\r\nexport interface TextOwnProps {\r\n /** Text style preset */\r\n variant?: 'body' | 'bodyLarge' | 'bodySmall' | 'label' | 'caption' | 'overline' | 'code'\r\n /** Font size */\r\n size?: FontSize\r\n /** Font weight */\r\n weight?: FontWeight\r\n /** Line height */\r\n leading?: LineHeight\r\n /** Text alignment */\r\n align?: CSSProperties['textAlign']\r\n /** Text color (CSS variable or direct value) */\r\n color?: string\r\n /** Whether text should truncate with ellipsis */\r\n truncate?: boolean\r\n /** Max number of lines before truncating */\r\n lineClamp?: number\r\n /** Custom class name */\r\n className?: string\r\n /** Custom inline styles */\r\n style?: CSSProperties\r\n /** Children */\r\n children?: ReactNode\r\n /** Test ID */\r\n testId?: string\r\n}\r\n\r\nexport type TextProps<E extends ElementType = 'p'> = TextOwnProps &\r\n Omit<ComponentPropsWithoutRef<E>, keyof TextOwnProps> & {\r\n /** The element type to render */\r\n as?: E\r\n }\r\n\r\ntype TextComponent = <E extends ElementType = 'p'>(\r\n props: TextProps<E> & { ref?: ComponentPropsWithRef<E>['ref'] }\r\n) => React.JSX.Element | null\r\n\r\nconst variantMap: Record<\r\n NonNullable<TextOwnProps['variant']>,\r\n { element: ElementType; styles: CSSProperties }\r\n> = {\r\n body: { element: 'p', styles: textStyles.bodyDefault },\r\n bodyLarge: { element: 'p', styles: textStyles.bodyLarge },\r\n bodySmall: { element: 'p', styles: textStyles.bodySmall },\r\n label: { element: 'span', styles: textStyles.label },\r\n caption: { element: 'span', styles: textStyles.caption },\r\n overline: { element: 'span', styles: textStyles.overline },\r\n code: { element: 'code', styles: textStyles.code },\r\n}\r\n\r\nfunction buildTextStyles(props: TextOwnProps): CSSProperties {\r\n const variant = props.variant ?? 'body'\r\n const baseStyles = variantMap[variant].styles\r\n\r\n const styles: CSSProperties = {\r\n fontFamily: baseStyles.fontFamily,\r\n fontSize: props.size ? fontSizes[props.size] : baseStyles.fontSize,\r\n fontWeight: props.weight ? fontWeights[props.weight] : baseStyles.fontWeight,\r\n lineHeight: props.leading ? lineHeights[props.leading] : baseStyles.lineHeight,\r\n letterSpacing: baseStyles.letterSpacing,\r\n }\r\n\r\n if ('textTransform' in baseStyles) {\r\n styles.textTransform = baseStyles.textTransform\r\n }\r\n\r\n if (props.align) styles.textAlign = props.align\r\n if (props.color) styles.color = props.color\r\n\r\n if (props.truncate) {\r\n styles.overflow = 'hidden'\r\n styles.textOverflow = 'ellipsis'\r\n styles.whiteSpace = 'nowrap'\r\n }\r\n\r\n if (props.lineClamp) {\r\n styles.display = '-webkit-box'\r\n styles.WebkitLineClamp = props.lineClamp\r\n styles.WebkitBoxOrient = 'vertical'\r\n styles.overflow = 'hidden'\r\n }\r\n\r\n return styles\r\n}\r\n\r\nconst TextInner = <E extends ElementType = 'p'>(\r\n { as, variant = 'body', className, style, children, testId, ...props }: TextProps<E>,\r\n ref: React.ForwardedRef<Element>\r\n) => {\r\n const Component = as || variantMap[variant].element\r\n const builtTextStyles = buildTextStyles({ variant, ...props } as TextOwnProps)\r\n\r\n // Remove custom props before spreading\r\n const {\r\n size: _size,\r\n weight: _weight,\r\n leading: _leading,\r\n align: _align,\r\n color: _color,\r\n truncate: _truncate,\r\n lineClamp: _lineClamp,\r\n ...rest\r\n } = props\r\n\r\n return (\r\n <Component\r\n ref={ref}\r\n className={cx('brycks-text', `brycks-text--${variant}`, className)}\r\n style={{ ...builtTextStyles, ...style }}\r\n data-testid={testId}\r\n {...rest}\r\n >\r\n {children}\r\n </Component>\r\n )\r\n}\r\n\r\nconst TextForwardRef = forwardRef(TextInner) as TextComponent\r\nexport const Text = Object.assign(TextForwardRef, { displayName: 'Text' })\r\n\r\n/** Monospace code text shorthand */\r\nconst CodeInner = (\r\n props: Omit<TextProps<'code'>, 'variant'>,\r\n ref: React.ForwardedRef<HTMLElement>\r\n) => {\r\n return (\r\n <Text\r\n {...props}\r\n ref={ref as ComponentPropsWithRef<'p'>['ref']}\r\n variant=\"code\"\r\n style={{\r\n backgroundColor: 'var(--brycks-background-muted)',\r\n padding: `${spacing[0.5]}px ${spacing[1.5]}px`,\r\n borderRadius: 'var(--brycks-radius-sm)',\r\n ...props.style,\r\n }}\r\n />\r\n )\r\n}\r\n\r\nconst CodeForwardRef = forwardRef(CodeInner) as TextComponent\r\nexport const Code = Object.assign(CodeForwardRef, { displayName: 'Code' })\r\n","/**\r\n * Heading Component\r\n *\r\n * Semantic heading component with consistent typography styles.\r\n * Maps heading levels (h1-h6) to appropriate visual styles.\r\n */\r\n\r\nimport React, {\r\n forwardRef,\r\n type ElementType,\r\n type ComponentPropsWithRef,\r\n type CSSProperties,\r\n type ReactNode,\r\n type ComponentPropsWithoutRef,\r\n} from 'react'\r\nimport {\r\n fontWeights,\r\n textStyles,\r\n type FontWeight,\r\n} from '../../../design-system/tokens/typography'\r\nimport { cx } from '../../../utils/styles'\r\n\r\nexport type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6\r\n\r\nexport interface HeadingOwnProps {\r\n /** The element type to render */\r\n as?: ElementType\r\n /** Heading level (1-6) - determines semantic element and default styling */\r\n level?: HeadingLevel\r\n /** Visual size override - use a different visual style than the semantic level */\r\n size?: HeadingLevel | 'display' | 'displayLarge' | 'displaySmall'\r\n /** Font weight override */\r\n weight?: FontWeight\r\n /** Text alignment */\r\n align?: CSSProperties['textAlign']\r\n /** Text color (CSS variable or direct value) */\r\n color?: string\r\n /** Whether text should truncate with ellipsis */\r\n truncate?: boolean\r\n /** Custom class name */\r\n className?: string\r\n /** Custom inline styles */\r\n style?: CSSProperties\r\n /** Children */\r\n children?: ReactNode\r\n /** Test ID */\r\n testId?: string\r\n}\r\n\r\nexport type HeadingProps<E extends ElementType = 'h2'> = HeadingOwnProps &\r\n Omit<ComponentPropsWithoutRef<E>, keyof HeadingOwnProps>\r\n\r\ninterface HeadingComponent {\r\n <E extends ElementType = 'h2'>(\r\n props: HeadingProps<E> & { ref?: ComponentPropsWithRef<E>['ref'] }\r\n ): React.JSX.Element | null\r\n displayName?: string\r\n}\r\n\r\ntype StyleKey =\r\n | 'h1'\r\n | 'h2'\r\n | 'h3'\r\n | 'h4'\r\n | 'h5'\r\n | 'h6'\r\n | 'displayLarge'\r\n | 'displayMedium'\r\n | 'displaySmall'\r\n\r\nconst sizeToStyleMap: Record<NonNullable<HeadingOwnProps['size']>, StyleKey> = {\r\n 1: 'h1',\r\n 2: 'h2',\r\n 3: 'h3',\r\n 4: 'h4',\r\n 5: 'h5',\r\n 6: 'h6',\r\n display: 'displayMedium',\r\n displayLarge: 'displayLarge',\r\n displaySmall: 'displaySmall',\r\n}\r\n\r\nfunction buildHeadingStyles(props: HeadingOwnProps): CSSProperties {\r\n const level = props.level ?? 2\r\n const visualSize = props.size ?? level\r\n const styleKey = sizeToStyleMap[visualSize]\r\n const baseStyles = textStyles[styleKey]\r\n\r\n const styles: CSSProperties = {\r\n fontFamily: baseStyles.fontFamily,\r\n fontSize: baseStyles.fontSize,\r\n fontWeight: props.weight ? fontWeights[props.weight] : baseStyles.fontWeight,\r\n lineHeight: baseStyles.lineHeight,\r\n letterSpacing: baseStyles.letterSpacing,\r\n margin: 0,\r\n }\r\n\r\n if (props.align) styles.textAlign = props.align\r\n if (props.color) styles.color = props.color\r\n\r\n if (props.truncate) {\r\n styles.overflow = 'hidden'\r\n styles.textOverflow = 'ellipsis'\r\n styles.whiteSpace = 'nowrap'\r\n }\r\n\r\n return styles\r\n}\r\n\r\nconst HeadingInner = <E extends ElementType = 'h2'>(\r\n { as, level = 2, className, style, children, testId, ...props }: HeadingProps<E>,\r\n ref: React.ForwardedRef<Element>\r\n) => {\r\n const Component = as || (`h${level}` as ElementType)\r\n const headingStyles = buildHeadingStyles({ level, ...props } as HeadingOwnProps)\r\n\r\n // Remove custom props before spreading\r\n const {\r\n size: _size,\r\n weight: _weight,\r\n align: _align,\r\n color: _color,\r\n truncate: _truncate,\r\n ...rest\r\n } = props\r\n\r\n return (\r\n <Component\r\n ref={ref}\r\n className={cx('brycks-heading', `brycks-heading--${level}`, className)}\r\n style={{ ...headingStyles, ...style }}\r\n data-testid={testId}\r\n {...rest}\r\n >\r\n {children}\r\n </Component>\r\n )\r\n}\r\n\r\nexport const Heading = forwardRef(HeadingInner) as HeadingComponent\r\n\r\nHeading.displayName = 'Heading'\r\n\r\n/** Display heading for hero sections */\r\nconst DisplayInner = <E extends ElementType = 'h1'>(\r\n { size = 'display', ...props }: HeadingProps<E>,\r\n ref: React.ForwardedRef<Element>\r\n) => {\r\n return <Heading ref={ref as React.ForwardedRef<HTMLHeadingElement>} level={1} size={size} {...(props as HeadingProps<'h1'>)} />\r\n}\r\n\r\nexport const Display = forwardRef(DisplayInner) as HeadingComponent\r\n\r\nDisplay.displayName = 'Display'\r\n","/**\r\n * Button Component Styles\r\n *\r\n * Apple-inspired button styles with smooth transitions and tactile feedback.\r\n * All values derive from the design system - NO hardcoded values.\r\n *\r\n * @module components/primitives/Button\r\n */\r\n\r\nimport type { CSSProperties } from 'react'\r\nimport type { ButtonVariant, ButtonIntent, ButtonSize } from './Button.types'\r\nimport {\r\n componentHeights,\r\n componentPaddingX,\r\n componentGap,\r\n iconSizes,\r\n componentFontSize,\r\n componentFontWeight,\r\n componentLineHeight,\r\n transition,\r\n stateOpacity,\r\n scale,\r\n} from '../../../design-system'\r\n\r\n/** Size dimension values - derived from design system primitives */\r\nconst sizeConfig: Record<\r\n ButtonSize,\r\n {\r\n height: number\r\n paddingX: number\r\n fontSize: number\r\n iconSize: number\r\n gap: number\r\n radius: string\r\n }\r\n> = {\r\n xs: {\r\n height: componentHeights.xs,\r\n paddingX: componentPaddingX.xs,\r\n fontSize: componentFontSize.xs,\r\n iconSize: iconSizes.xs,\r\n gap: componentGap.xs,\r\n radius: 'var(--brycks-radius-md)',\r\n },\r\n sm: {\r\n height: componentHeights.sm,\r\n paddingX: componentPaddingX.sm,\r\n fontSize: componentFontSize.sm,\r\n iconSize: iconSizes.sm,\r\n gap: componentGap.sm,\r\n radius: 'var(--brycks-radius-md)',\r\n },\r\n md: {\r\n height: componentHeights.md,\r\n paddingX: componentPaddingX.md,\r\n fontSize: componentFontSize.md,\r\n iconSize: iconSizes.md,\r\n gap: componentGap.md,\r\n radius: 'var(--brycks-radius-default)',\r\n },\r\n lg: {\r\n height: componentHeights.lg,\r\n paddingX: componentPaddingX.lg,\r\n fontSize: componentFontSize.lg,\r\n iconSize: iconSizes.lg,\r\n gap: componentGap.md,\r\n radius: 'var(--brycks-radius-lg)',\r\n },\r\n xl: {\r\n height: componentHeights.xl,\r\n paddingX: componentPaddingX.xl,\r\n fontSize: componentFontSize.xl,\r\n iconSize: iconSizes.xl,\r\n gap: componentGap.lg,\r\n radius: 'var(--brycks-radius-xl)',\r\n },\r\n}\r\n\r\n/** Color values for each intent */\r\nconst intentColors: Record<\r\n ButtonIntent,\r\n {\r\n solid: { bg: string; hoverBg: string; activeBg: string; text: string }\r\n outline: { border: string; hoverBg: string; text: string }\r\n ghost: { hoverBg: string; text: string }\r\n soft: { bg: string; hoverBg: string; text: string }\r\n link: { text: string; hoverText: string }\r\n }\r\n> = {\r\n primary: {\r\n solid: {\r\n bg: 'var(--brycks-primary-default)',\r\n hoverBg: 'var(--brycks-primary-hover)',\r\n activeBg: 'var(--brycks-primary-active)',\r\n text: 'var(--brycks-primary-foreground)',\r\n },\r\n outline: {\r\n border: 'var(--brycks-primary-default)',\r\n hoverBg: 'var(--brycks-primary-muted)',\r\n text: 'var(--brycks-primary-default)',\r\n },\r\n ghost: {\r\n hoverBg: 'var(--brycks-primary-muted)',\r\n text: 'var(--brycks-primary-default)',\r\n },\r\n soft: {\r\n bg: 'var(--brycks-primary-muted)',\r\n hoverBg: 'var(--brycks-primary-soft-hover)',\r\n text: 'var(--brycks-primary-default)',\r\n },\r\n link: {\r\n text: 'var(--brycks-primary-default)',\r\n hoverText: 'var(--brycks-primary-hover)',\r\n },\r\n },\r\n accent: {\r\n solid: {\r\n bg: 'var(--brycks-accent-default)',\r\n hoverBg: 'var(--brycks-accent-hover)',\r\n activeBg: 'var(--brycks-accent-active)',\r\n text: 'var(--brycks-accent-foreground)',\r\n },\r\n outline: {\r\n border: 'var(--brycks-accent-default)',\r\n hoverBg: 'var(--brycks-accent-muted)',\r\n text: 'var(--brycks-accent-default)',\r\n },\r\n ghost: {\r\n hoverBg: 'var(--brycks-accent-muted)',\r\n text: 'var(--brycks-accent-default)',\r\n },\r\n soft: {\r\n bg: 'var(--brycks-accent-muted)',\r\n hoverBg: 'var(--brycks-accent-soft-hover)',\r\n text: 'var(--brycks-accent-default)',\r\n },\r\n link: {\r\n text: 'var(--brycks-accent-default)',\r\n hoverText: 'var(--brycks-accent-hover)',\r\n },\r\n },\r\n neutral: {\r\n solid: {\r\n bg: 'var(--brycks-foreground-default)',\r\n hoverBg: 'var(--brycks-foreground-muted)',\r\n activeBg: 'var(--brycks-foreground-subtle)',\r\n text: 'var(--brycks-background-app)',\r\n },\r\n outline: {\r\n border: 'var(--brycks-border-strong)',\r\n hoverBg: 'var(--brycks-background-muted)',\r\n text: 'var(--brycks-foreground-default)',\r\n },\r\n ghost: {\r\n hoverBg: 'var(--brycks-background-muted)',\r\n text: 'var(--brycks-foreground-default)',\r\n },\r\n soft: {\r\n bg: 'var(--brycks-background-muted)',\r\n hoverBg: 'var(--brycks-background-subtle)',\r\n text: 'var(--brycks-foreground-default)',\r\n },\r\n link: {\r\n text: 'var(--brycks-foreground-default)',\r\n hoverText: 'var(--brycks-foreground-muted)',\r\n },\r\n },\r\n success: {\r\n solid: {\r\n bg: 'var(--brycks-success-default)',\r\n hoverBg: 'var(--brycks-success-hover)',\r\n activeBg: 'var(--brycks-success-hover)',\r\n text: 'var(--brycks-success-foreground)',\r\n },\r\n outline: {\r\n border: 'var(--brycks-success-default)',\r\n hoverBg: 'var(--brycks-success-muted)',\r\n text: 'var(--brycks-success-default)',\r\n },\r\n ghost: {\r\n hoverBg: 'var(--brycks-success-muted)',\r\n text: 'var(--brycks-success-default)',\r\n },\r\n soft: {\r\n bg: 'var(--brycks-success-muted)',\r\n hoverBg: 'var(--brycks-success-soft-hover)',\r\n text: 'var(--brycks-success-default)',\r\n },\r\n link: {\r\n text: 'var(--brycks-success-default)',\r\n hoverText: 'var(--brycks-success-hover)',\r\n },\r\n },\r\n warning: {\r\n solid: {\r\n bg: 'var(--brycks-warning-default)',\r\n hoverBg: 'var(--brycks-warning-hover)',\r\n activeBg: 'var(--brycks-warning-hover)',\r\n text: 'var(--brycks-warning-foreground)',\r\n },\r\n outline: {\r\n border: 'var(--brycks-warning-default)',\r\n hoverBg: 'var(--brycks-warning-muted)',\r\n text: 'var(--brycks-warning-default)',\r\n },\r\n ghost: {\r\n hoverBg: 'var(--brycks-warning-muted)',\r\n text: 'var(--brycks-warning-default)',\r\n },\r\n soft: {\r\n bg: 'var(--brycks-warning-muted)',\r\n hoverBg: 'var(--brycks-warning-soft-hover)',\r\n text: 'var(--brycks-warning-default)',\r\n },\r\n link: {\r\n text: 'var(--brycks-warning-default)',\r\n hoverText: 'var(--brycks-warning-hover)',\r\n },\r\n },\r\n error: {\r\n solid: {\r\n bg: 'var(--brycks-error-default)',\r\n hoverBg: 'var(--brycks-error-hover)',\r\n activeBg: 'var(--brycks-error-hover)',\r\n text: 'var(--brycks-error-foreground)',\r\n },\r\n outline: {\r\n border: 'var(--brycks-error-default)',\r\n hoverBg: 'var(--brycks-error-muted)',\r\n text: 'var(--brycks-error-default)',\r\n },\r\n ghost: {\r\n hoverBg: 'var(--brycks-error-muted)',\r\n text: 'var(--brycks-error-default)',\r\n },\r\n soft: {\r\n bg: 'var(--brycks-error-muted)',\r\n hoverBg: 'var(--brycks-error-soft-hover)',\r\n text: 'var(--brycks-error-default)',\r\n },\r\n link: {\r\n text: 'var(--brycks-error-default)',\r\n hoverText: 'var(--brycks-error-hover)',\r\n },\r\n },\r\n}\r\n\r\nexport interface ButtonStyleProps {\r\n variant: ButtonVariant\r\n intent: ButtonIntent\r\n size: ButtonSize\r\n fullWidth?: boolean\r\n isIconOnly?: boolean\r\n isDisabled?: boolean\r\n isLoading?: boolean\r\n}\r\n\r\nexport function getButtonStyles(props: ButtonStyleProps): {\r\n base: CSSProperties\r\n hover: CSSProperties\r\n active: CSSProperties\r\n disabled: CSSProperties\r\n loading: CSSProperties\r\n} {\r\n const { variant, intent, size, fullWidth, isIconOnly } = props\r\n const sizeValues = sizeConfig[size]\r\n const colors = intentColors[intent][variant]\r\n\r\n // Base styles common to all buttons\r\n const base: CSSProperties = {\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n gap: sizeValues.gap,\r\n height: sizeValues.height,\r\n minWidth: isIconOnly ? sizeValues.height : undefined,\r\n width: fullWidth ? '100%' : undefined,\r\n padding: isIconOnly ? 0 : `0 ${sizeValues.paddingX}px`,\r\n fontSize: sizeValues.fontSize,\r\n fontWeight: componentFontWeight.medium,\r\n fontFamily: 'var(--brycks-font-sans)',\r\n lineHeight: componentLineHeight.none,\r\n borderRadius: sizeValues.radius,\r\n border: 'none',\r\n outline: 'none',\r\n cursor: 'pointer',\r\n userSelect: 'none',\r\n textDecoration: 'none',\r\n transition: transition.quick,\r\n WebkitTapHighlightColor: 'transparent',\r\n }\r\n\r\n // Apply variant-specific base styles\r\n switch (variant) {\r\n case 'solid': {\r\n const solidColors = colors as { bg: string; hoverBg: string; activeBg: string; text: string }\r\n Object.assign(base, {\r\n backgroundColor: solidColors.bg,\r\n color: solidColors.text,\r\n boxShadow: 'var(--brycks-shadow-xs)',\r\n })\r\n break\r\n }\r\n\r\n case 'outline': {\r\n const outlineColors = colors as { border: string; hoverBg: string; text: string }\r\n Object.assign(base, {\r\n backgroundColor: 'transparent',\r\n color: outlineColors.text,\r\n border: `1px solid ${outlineColors.border}`,\r\n })\r\n break\r\n }\r\n\r\n case 'ghost': {\r\n const ghostColors = colors as { hoverBg: string; text: string }\r\n Object.assign(base, {\r\n backgroundColor: 'transparent',\r\n color: ghostColors.text,\r\n })\r\n break\r\n }\r\n\r\n case 'soft': {\r\n const softColors = colors as { bg: string; hoverBg: string; text: string }\r\n Object.assign(base, {\r\n backgroundColor: softColors.bg,\r\n color: softColors.text,\r\n })\r\n break\r\n }\r\n\r\n case 'link': {\r\n const linkColors = colors as { text: string; hoverText: string }\r\n Object.assign(base, {\r\n backgroundColor: 'transparent',\r\n color: linkColors.text,\r\n height: 'auto',\r\n padding: 0,\r\n borderRadius: 0,\r\n })\r\n break\r\n }\r\n }\r\n\r\n // Hover styles\r\n const hover: CSSProperties = {}\r\n switch (variant) {\r\n case 'solid': {\r\n const solidColors = colors as { bg: string; hoverBg: string; activeBg: string; text: string }\r\n hover.backgroundColor = solidColors.hoverBg\r\n hover.boxShadow = 'var(--brycks-shadow-sm)'\r\n break\r\n }\r\n case 'outline': {\r\n const outlineColors = colors as { border: string; hoverBg: string; text: string }\r\n hover.backgroundColor = outlineColors.hoverBg\r\n break\r\n }\r\n case 'ghost': {\r\n const ghostColors = colors as { hoverBg: string; text: string }\r\n hover.backgroundColor = ghostColors.hoverBg\r\n break\r\n }\r\n case 'soft': {\r\n const softColors = colors as { bg: string; hoverBg: string; text: string }\r\n hover.backgroundColor = softColors.hoverBg\r\n break\r\n }\r\n case 'link': {\r\n const linkColors = colors as { text: string; hoverText: string }\r\n hover.color = linkColors.hoverText\r\n hover.textDecoration = 'underline'\r\n break\r\n }\r\n }\r\n\r\n // Active/pressed styles\r\n const active: CSSProperties = {\r\n transform: variant !== 'link' ? `scale(${scale.pressed})` : undefined,\r\n }\r\n if (variant === 'solid') {\r\n const solidColors = colors as { bg: string; hoverBg: string; activeBg: string; text: string }\r\n active.backgroundColor = solidColors.activeBg\r\n active.boxShadow = 'var(--brycks-shadow-xs)'\r\n }\r\n\r\n // Disabled styles\r\n const disabled: CSSProperties = {\r\n opacity: stateOpacity.disabled,\r\n cursor: 'not-allowed',\r\n pointerEvents: 'none',\r\n }\r\n\r\n // Loading styles\r\n const loading: CSSProperties = {\r\n cursor: 'wait',\r\n pointerEvents: 'none',\r\n }\r\n\r\n return { base, hover, active, disabled, loading }\r\n}\r\n\r\nexport { sizeConfig }\r\n","/**\r\n * Button Component\r\n *\r\n * A versatile, polymorphic button component with multiple variants,\r\n * sizes, and states. Designed with Apple-inspired aesthetics -\r\n * smooth transitions, tactile feedback, and refined visual details.\r\n */\r\n\r\nimport React, {\r\n forwardRef,\r\n useState,\r\n type ElementType,\r\n type ComponentPropsWithRef,\r\n type CSSProperties,\r\n} from 'react'\r\nimport type { ButtonProps } from './Button.types'\r\nimport { getButtonStyles, sizeConfig } from './Button.styles'\r\nimport { cx } from '../../../utils/styles'\r\n\r\ninterface ButtonComponent {\r\n <E extends ElementType = 'button'>(\r\n props: ButtonProps<E> & { ref?: ComponentPropsWithRef<E>['ref'] }\r\n ): React.JSX.Element | null\r\n displayName?: string\r\n}\r\n\r\n/** Loading spinner component */\r\nfunction LoadingSpinner({ size }: { size: number }) {\r\n return (\r\n <svg\r\n width={size}\r\n height={size}\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n style={{\r\n animation: 'brycks-spin 1s linear infinite',\r\n }}\r\n >\r\n <style>\r\n {`\r\n @keyframes brycks-spin {\r\n from { transform: rotate(0deg); }\r\n to { transform: rotate(360deg); }\r\n }\r\n `}\r\n </style>\r\n <circle\r\n cx=\"12\"\r\n cy=\"12\"\r\n r=\"10\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeDasharray=\"31.4 31.4\"\r\n opacity=\"0.25\"\r\n />\r\n <circle\r\n cx=\"12\"\r\n cy=\"12\"\r\n r=\"10\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeDasharray=\"31.4 31.4\"\r\n strokeDashoffset=\"62.8\"\r\n style={{ transform: 'rotate(-90deg)', transformOrigin: 'center' }}\r\n />\r\n </svg>\r\n )\r\n}\r\n\r\nconst ButtonInner = <E extends ElementType = 'button'>(\r\n {\r\n as,\r\n variant = 'solid',\r\n intent = 'primary',\r\n size = 'md',\r\n fullWidth,\r\n isLoading,\r\n isDisabled,\r\n leftIcon,\r\n rightIcon,\r\n isIconOnly,\r\n className,\r\n style,\r\n children,\r\n testId,\r\n onMouseEnter,\r\n onMouseLeave,\r\n onMouseDown,\r\n onMouseUp,\r\n ...props\r\n }: ButtonProps<E>,\r\n ref: React.ForwardedRef<Element>\r\n) => {\r\n const Component = (as || 'button') as ElementType\r\n const [isHovered, setIsHovered] = useState(false)\r\n const [isPressed, setIsPressed] = useState(false)\r\n\r\n const disabled = isDisabled || isLoading\r\n\r\n const styles = getButtonStyles({\r\n variant,\r\n intent,\r\n size,\r\n fullWidth,\r\n isIconOnly,\r\n isDisabled: disabled,\r\n isLoading,\r\n })\r\n\r\n // Build final style object\r\n const computedStyle: CSSProperties = {\r\n ...styles.base,\r\n ...(isHovered && !disabled ? styles.hover : {}),\r\n ...(isPressed && !disabled ? styles.active : {}),\r\n ...(disabled ? styles.disabled : {}),\r\n ...(isLoading ? styles.loading : {}),\r\n ...style,\r\n }\r\n\r\n const sizeValues = sizeConfig[size]\r\n\r\n const handleMouseEnter = (e: React.MouseEvent) => {\r\n setIsHovered(true)\r\n onMouseEnter?.(e as never)\r\n }\r\n\r\n const handleMouseLeave = (e: React.MouseEvent) => {\r\n setIsHovered(false)\r\n setIsPressed(false)\r\n onMouseLeave?.(e as never)\r\n }\r\n\r\n const handleMouseDown = (e: React.MouseEvent) => {\r\n setIsPressed(true)\r\n onMouseDown?.(e as never)\r\n }\r\n\r\n const handleMouseUp = (e: React.MouseEvent) => {\r\n setIsPressed(false)\r\n onMouseUp?.(e as never)\r\n }\r\n\r\n // Build class name\r\n const buttonClassName = cx(\r\n 'brycks-button',\r\n `brycks-button--${variant}`,\r\n `brycks-button--${intent}`,\r\n `brycks-button--${size}`,\r\n fullWidth && 'brycks-button--full-width',\r\n isIconOnly && 'brycks-button--icon-only',\r\n isLoading && 'brycks-button--loading',\r\n disabled && 'brycks-button--disabled',\r\n className\r\n )\r\n\r\n const isButton = Component === 'button' || as === undefined\r\n const buttonProps = isButton\r\n ? {\r\n type: (props as { type?: string }).type ?? 'button',\r\n disabled,\r\n }\r\n : {\r\n 'aria-disabled': disabled || undefined,\r\n role: 'button',\r\n tabIndex: disabled ? -1 : 0,\r\n }\r\n\r\n return (\r\n <Component\r\n ref={ref}\r\n className={buttonClassName}\r\n style={computedStyle}\r\n data-testid={testId}\r\n onMouseEnter={handleMouseEnter}\r\n onMouseLeave={handleMouseLeave}\r\n onMouseDown={handleMouseDown}\r\n onMouseUp={handleMouseUp}\r\n {...buttonProps}\r\n {...props}\r\n >\r\n {isLoading && (\r\n <span\r\n style={{\r\n display: 'inline-flex',\r\n position: isIconOnly ? 'absolute' : 'relative',\r\n }}\r\n >\r\n <LoadingSpinner size={sizeValues.iconSize} />\r\n </span>\r\n )}\r\n\r\n {!isLoading && leftIcon && (\r\n <span\r\n style={{\r\n display: 'inline-flex',\r\n width: sizeValues.iconSize,\r\n height: sizeValues.iconSize,\r\n }}\r\n >\r\n {leftIcon}\r\n </span>\r\n )}\r\n\r\n {!isIconOnly && (\r\n <span\r\n style={{\r\n opacity: isLoading && !isIconOnly ? 0.5 : 1,\r\n }}\r\n >\r\n {children}\r\n </span>\r\n )}\r\n\r\n {!isLoading && rightIcon && (\r\n <span\r\n style={{\r\n display: 'inline-flex',\r\n width: sizeValues.iconSize,\r\n height: sizeValues.iconSize,\r\n }}\r\n >\r\n {rightIcon}\r\n </span>\r\n )}\r\n\r\n {isIconOnly && !isLoading && children}\r\n </Component>\r\n )\r\n}\r\n\r\nexport const Button = forwardRef(ButtonInner) as ButtonComponent\r\n\r\nButton.displayName = 'Button'\r\n\r\n/** Icon button shorthand */\r\nconst IconButtonInner = <E extends ElementType = 'button'>(\r\n props: Omit<ButtonProps<E>, 'isIconOnly'>,\r\n ref: React.ForwardedRef<Element>\r\n) => {\r\n return <Button ref={ref as React.ForwardedRef<HTMLButtonElement>} isIconOnly {...(props as ButtonProps<'button'>)} />\r\n}\r\n\r\nexport const IconButton = forwardRef(IconButtonInner) as ButtonComponent\r\n\r\nIconButton.displayName = 'IconButton'\r\n","/**\n * Icon Component\n *\n * A flexible icon component that supports custom SVG icons.\n * Uses design system tokens for consistent sizing and colors.\n */\n\nimport { forwardRef, type SVGAttributes, type CSSProperties, type ReactNode } from 'react'\nimport { cx } from '../../../utils/styles'\n\nexport type IconSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'\n\nexport interface IconProps extends Omit<SVGAttributes<SVGSVGElement>, 'children'> {\n /** Icon size */\n size?: IconSize\n /** Custom size in pixels */\n customSize?: number\n /** Icon color (uses currentColor by default) */\n color?: string\n /** SVG path data or children */\n path?: string\n /** Multiple paths */\n paths?: string[]\n /** SVG viewBox */\n viewBox?: string\n /** Fill rule for paths */\n fillRule?: 'nonzero' | 'evenodd'\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n /** Accessibility label */\n label?: string\n /** Custom SVG children (overrides path/paths) */\n children?: ReactNode\n}\n\nconst sizeMap: Record<IconSize, number> = {\n xs: 12,\n sm: 14,\n md: 16,\n lg: 20,\n xl: 24,\n '2xl': 32,\n}\n\nexport const Icon = forwardRef<SVGSVGElement, IconProps>(function Icon(\n {\n size = 'md',\n customSize,\n color,\n path,\n paths,\n viewBox = '0 0 24 24',\n fillRule = 'nonzero',\n className,\n style,\n testId,\n label,\n children,\n ...props\n },\n ref\n) {\n const pixelSize = customSize ?? sizeMap[size]\n\n const iconStyle: CSSProperties = {\n width: pixelSize,\n height: pixelSize,\n minWidth: pixelSize,\n minHeight: pixelSize,\n color: color ?? 'currentColor',\n display: 'inline-block',\n verticalAlign: 'middle',\n flexShrink: 0,\n ...style,\n }\n\n const renderPaths = () => {\n if (children) return children\n\n if (paths && paths.length > 0) {\n return paths.map((d, index) => (\n <path key={index} d={d} fill=\"currentColor\" fillRule={fillRule} />\n ))\n }\n\n if (path) {\n return <path d={path} fill=\"currentColor\" fillRule={fillRule} />\n }\n\n return null\n }\n\n return (\n <svg\n ref={ref}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox={viewBox}\n className={cx('brycks-icon', `brycks-icon--${size}`, className)}\n style={iconStyle}\n aria-hidden={!label}\n aria-label={label}\n role={label ? 'img' : undefined}\n data-testid={testId}\n {...props}\n >\n {renderPaths()}\n </svg>\n )\n})\n\nIcon.displayName = 'Icon'\n\n// Common icon paths for convenience\nexport const iconPaths = {\n close: 'M18 6L6 18M6 6l12 12',\n check: 'M20 6L9 17l-5-5',\n chevronDown: 'M6 9l6 6 6-6',\n chevronUp: 'M18 15l-6-6-6 6',\n chevronLeft: 'M15 18l-6-6 6-6',\n chevronRight: 'M9 18l6-6-6-6',\n plus: 'M12 5v14m-7-7h14',\n minus: 'M5 12h14',\n search: 'M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z',\n menu: 'M4 6h16M4 12h16M4 18h16',\n info: 'M12 16v-4m0-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z',\n warning: 'M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z',\n error: 'M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z',\n success: 'M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z',\n eye: 'M15 12a3 3 0 11-6 0 3 3 0 016 0z M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z',\n eyeOff: 'M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.88 9.88l-3.29-3.29m7.532 7.532l3.29 3.29M3 3l3.59 3.59m0 0A9.953 9.953 0 0112 5c4.478 0 8.268 2.943 9.543 7a10.025 10.025 0 01-4.132 5.411m0 0L21 21',\n calendar: 'M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z',\n upload: 'M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z',\n download: 'M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4',\n trash: 'M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16',\n edit: 'M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z',\n copy: 'M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z',\n externalLink: 'M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14',\n settings: 'M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z M15 12a3 3 0 11-6 0 3 3 0 016 0z',\n user: 'M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z',\n logout: 'M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1',\n arrowLeft: 'M10 19l-7-7m0 0l7-7m-7 7h18',\n arrowRight: 'M14 5l7 7m0 0l-7 7m7-7H3',\n arrowUp: 'M5 10l7-7m0 0l7 7m-7-7v18',\n arrowDown: 'M19 14l-7 7m0 0l-7-7m7 7V3',\n refresh: 'M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15',\n filter: 'M3 4a1 1 0 011-1h16a1 1 0 011 1v2.586a1 1 0 01-.293.707l-6.414 6.414a1 1 0 00-.293.707V17l-4 4v-6.586a1 1 0 00-.293-.707L3.293 7.293A1 1 0 013 6.586V4z',\n sort: 'M3 4h13M3 8h9m-9 4h6m4 0l4-4m0 0l4 4m-4-4v12',\n home: 'M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6',\n folder: 'M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z',\n file: 'M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z',\n bell: 'M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9',\n mail: 'M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z',\n lock: 'M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z',\n unlock: 'M8 11V7a4 4 0 118 0m-4 8v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2z',\n star: 'M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z',\n heart: 'M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z',\n share: 'M8.684 13.342C8.886 12.938 9 12.482 9 12c0-.482-.114-.938-.316-1.342m0 2.684a3 3 0 110-2.684m0 2.684l6.632 3.316m-6.632-6l6.632-3.316m0 0a3 3 0 105.367-2.684 3 3 0 00-5.367 2.684zm0 9.316a3 3 0 105.368 2.684 3 3 0 00-5.368-2.684z',\n link: 'M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1',\n code: 'M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4',\n terminal: 'M8 9l3 3-3 3m5 0h3M5 20h14a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z',\n database: 'M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4m0 5c0 2.21-3.582 4-8 4s-8-1.79-8-4',\n cloud: 'M3 15a4 4 0 004 4h9a5 5 0 10-.1-9.999 5.002 5.002 0 10-9.78 2.096A4.001 4.001 0 003 15z',\n sun: 'M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z',\n moon: 'M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z',\n grip: 'M4 6a2 2 0 114 0 2 2 0 01-4 0zM10 6a2 2 0 114 0 2 2 0 01-4 0zM16 6a2 2 0 114 0 2 2 0 01-4 0zM4 12a2 2 0 114 0 2 2 0 01-4 0zM10 12a2 2 0 114 0 2 2 0 01-4 0zM16 12a2 2 0 114 0 2 2 0 01-4 0zM4 18a2 2 0 114 0 2 2 0 01-4 0zM10 18a2 2 0 114 0 2 2 0 01-4 0zM16 18a2 2 0 114 0 2 2 0 01-4 0z',\n moreHorizontal: 'M5 12h.01M12 12h.01M19 12h.01M6 12a1 1 0 11-2 0 1 1 0 012 0zm7 0a1 1 0 11-2 0 1 1 0 012 0zm7 0a1 1 0 11-2 0 1 1 0 012 0z',\n moreVertical: 'M12 5v.01M12 12v.01M12 19v.01M12 6a1 1 0 110-2 1 1 0 010 2zm0 7a1 1 0 110-2 1 1 0 010 2zm0 7a1 1 0 110-2 1 1 0 010 2z',\n layout: 'M4 5a1 1 0 011-1h14a1 1 0 011 1v2a1 1 0 01-1 1H5a1 1 0 01-1-1V5zM4 13a1 1 0 011-1h6a1 1 0 011 1v6a1 1 0 01-1 1H5a1 1 0 01-1-1v-6zM16 13a1 1 0 011-1h2a1 1 0 011 1v6a1 1 0 01-1 1h-2a1 1 0 01-1-1v-6z',\n car: 'M19 17h2c.6 0 1-.4 1-1v-3c0-.9-.7-1.7-1.5-1.9L18 10l-1.6-3.2c-.4-.8-1.2-1.3-2.1-1.3H9.7c-.9 0-1.7.5-2.1 1.3L6 10l-2.5 1.1C2.7 11.3 2 12.1 2 13v3c0 .6.4 1 1 1h2M7 17h10M7 17a2 2 0 11-4 0 2 2 0 014 0zm12 0a2 2 0 11-4 0 2 2 0 014 0z',\n page: 'M4 4a2 2 0 012-2h8l6 6v12a2 2 0 01-2 2H6a2 2 0 01-2-2V4zm10 0v6h6',\n gridVertical: 'M9 4a1 1 0 110 2 1 1 0 010-2zm6 0a1 1 0 110 2 1 1 0 010-2zm-6 5a1 1 0 110 2 1 1 0 010-2zm6 0a1 1 0 110 2 1 1 0 010-2zm-6 5a1 1 0 110 2 1 1 0 010-2zm6 0a1 1 0 110 2 1 1 0 010-2zm-6 5a1 1 0 110 2 1 1 0 010-2zm6 0a1 1 0 110 2 1 1 0 010-2z',\n} as const\n\n// Helper type for icon names\nexport type IconName = keyof typeof iconPaths\n","/**\r\n * Input Component\r\n *\r\n * Base input component with Apple-inspired styling.\r\n * Clean, minimal design with smooth focus transitions.\r\n *\r\n * @module components/form/Input\r\n */\r\n\r\nimport {\r\n forwardRef,\r\n useState,\r\n type CSSProperties,\r\n type InputHTMLAttributes,\r\n type ReactNode,\r\n} from 'react'\r\nimport {\r\n componentHeights,\r\n componentPaddingX,\r\n componentGap,\r\n componentFontSize,\r\n focusRing,\r\n transition,\r\n stateOpacity,\r\n} from '../../../design-system'\r\nimport { cx } from '../../../utils/styles'\r\n\r\nexport type InputSize = 'sm' | 'md' | 'lg'\r\nexport type InputVariant = 'outline' | 'filled' | 'flushed'\r\n\r\nexport interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'> {\r\n /** Input size */\r\n size?: InputSize\r\n /** Visual variant */\r\n variant?: InputVariant\r\n /** Error state */\r\n isInvalid?: boolean\r\n /** Left element/icon */\r\n leftElement?: ReactNode\r\n /** Right element/icon */\r\n rightElement?: ReactNode\r\n /** Custom class name */\r\n className?: string\r\n /** Test ID */\r\n testId?: string\r\n}\r\n\r\n/** Size configuration derived from design tokens */\r\nconst sizeConfig: Record<InputSize, { height: number; fontSize: number; paddingX: number; radius: string }> = {\r\n sm: {\r\n height: componentHeights.sm,\r\n fontSize: componentFontSize.sm,\r\n paddingX: componentPaddingX.sm,\r\n radius: 'var(--brycks-radius-md)',\r\n },\r\n md: {\r\n height: componentHeights.md,\r\n fontSize: componentFontSize.md,\r\n paddingX: componentPaddingX.md,\r\n radius: 'var(--brycks-radius-default)',\r\n },\r\n lg: {\r\n height: componentHeights.lg,\r\n fontSize: componentFontSize.lg,\r\n paddingX: componentPaddingX.lg,\r\n radius: 'var(--brycks-radius-lg)',\r\n },\r\n}\r\n\r\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input(\r\n {\r\n size = 'md',\r\n variant = 'outline',\r\n isInvalid,\r\n leftElement,\r\n rightElement,\r\n className,\r\n style,\r\n testId,\r\n disabled,\r\n onFocus,\r\n onBlur,\r\n ...props\r\n },\r\n ref\r\n) {\r\n const [isFocused, setIsFocused] = useState(false)\r\n\r\n const config = sizeConfig[size]\r\n\r\n const getWrapperStyles = (): CSSProperties => {\r\n const base: CSSProperties = {\r\n display: 'flex',\r\n alignItems: 'center',\r\n width: '100%',\r\n position: 'relative',\r\n height: config.height,\r\n borderRadius: config.radius,\r\n transition: transition.default,\r\n }\r\n\r\n switch (variant) {\r\n case 'outline':\r\n Object.assign(base, {\r\n backgroundColor: 'var(--brycks-background-app)',\r\n border: `1px solid ${\r\n isInvalid\r\n ? 'var(--brycks-error-default)'\r\n : isFocused\r\n ? 'var(--brycks-border-focus)'\r\n : 'var(--brycks-border-default)'\r\n }`,\r\n boxShadow: isFocused\r\n ? isInvalid\r\n ? focusRing.error\r\n : focusRing.default\r\n : focusRing.none,\r\n })\r\n break\r\n\r\n case 'filled':\r\n Object.assign(base, {\r\n backgroundColor: 'var(--brycks-background-muted)',\r\n border: '1px solid transparent',\r\n borderColor: isInvalid\r\n ? 'var(--brycks-error-default)'\r\n : isFocused\r\n ? 'var(--brycks-border-focus)'\r\n : 'transparent',\r\n })\r\n break\r\n\r\n case 'flushed':\r\n Object.assign(base, {\r\n backgroundColor: 'transparent',\r\n borderRadius: 0,\r\n borderBottom: `2px solid ${\r\n isInvalid\r\n ? 'var(--brycks-error-default)'\r\n : isFocused\r\n ? 'var(--brycks-border-focus)'\r\n : 'var(--brycks-border-default)'\r\n }`,\r\n })\r\n break\r\n }\r\n\r\n if (disabled) {\r\n Object.assign(base, {\r\n opacity: stateOpacity.disabled,\r\n cursor: 'not-allowed',\r\n })\r\n }\r\n\r\n return base\r\n }\r\n\r\n const inputStyles: CSSProperties = {\r\n width: '100%',\r\n height: config.height,\r\n fontFamily: 'var(--brycks-font-sans)',\r\n fontSize: config.fontSize,\r\n color: 'var(--brycks-foreground-default)',\r\n backgroundColor: 'transparent',\r\n border: 'none',\r\n outline: 'none',\r\n borderRadius: config.radius,\r\n paddingLeft: leftElement ? componentGap.md : config.paddingX,\r\n paddingRight: rightElement ? componentGap.md : config.paddingX,\r\n cursor: disabled ? 'not-allowed' : 'text',\r\n transition: transition.default,\r\n }\r\n\r\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\r\n setIsFocused(true)\r\n onFocus?.(e)\r\n }\r\n\r\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\r\n setIsFocused(false)\r\n onBlur?.(e)\r\n }\r\n\r\n const elementStyle: CSSProperties = {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n color: 'var(--brycks-foreground-muted)',\r\n flexShrink: 0,\r\n }\r\n\r\n return (\r\n <div\r\n className={cx(\r\n 'brycks-input-wrapper',\r\n `brycks-input-wrapper--${variant}`,\r\n `brycks-input-wrapper--${size}`,\r\n isInvalid && 'brycks-input-wrapper--invalid',\r\n disabled && 'brycks-input-wrapper--disabled',\r\n className\r\n )}\r\n style={{ ...getWrapperStyles(), ...style }}\r\n >\r\n {leftElement && (\r\n <span\r\n className=\"brycks-input-left-element\"\r\n style={{ ...elementStyle, paddingLeft: config.paddingX }}\r\n >\r\n {leftElement}\r\n </span>\r\n )}\r\n\r\n <input\r\n ref={ref}\r\n className=\"brycks-input\"\r\n style={inputStyles}\r\n disabled={disabled}\r\n aria-invalid={isInvalid}\r\n data-testid={testId}\r\n onFocus={handleFocus}\r\n onBlur={handleBlur}\r\n {...props}\r\n />\r\n\r\n {rightElement && (\r\n <span\r\n className=\"brycks-input-right-element\"\r\n style={{ ...elementStyle, paddingRight: config.paddingX }}\r\n >\r\n {rightElement}\r\n </span>\r\n )}\r\n </div>\r\n )\r\n})\r\n\r\nInput.displayName = 'Input'\r\n","/**\r\n * TextField Component\r\n *\r\n * Complete text input field with label, helper text, and error handling.\r\n * Combines Input with proper accessibility and form structure.\r\n */\r\n\r\nimport { forwardRef, useId, type ReactNode } from 'react'\r\nimport { Input, type InputProps } from '../Input'\r\nimport { cx } from '../../../utils/styles'\r\n\r\nexport interface TextFieldProps extends InputProps {\r\n /** Field label */\r\n label?: ReactNode\r\n /** Helper text below the input */\r\n helperText?: ReactNode\r\n /** Error message (also sets isInvalid) */\r\n errorMessage?: ReactNode\r\n /** Whether the field is required */\r\n isRequired?: boolean\r\n /** Whether to hide the label visually (still accessible) */\r\n hideLabel?: boolean\r\n}\r\n\r\nexport const TextField = forwardRef<HTMLInputElement, TextFieldProps>(function TextField(\r\n {\r\n label,\r\n helperText,\r\n errorMessage,\r\n isRequired,\r\n hideLabel,\r\n isInvalid,\r\n id,\r\n className,\r\n testId,\r\n ...inputProps\r\n },\r\n ref\r\n) {\r\n const generatedId = useId()\r\n const fieldId = id ?? generatedId\r\n const helperId = `${fieldId}-helper`\r\n const errorId = `${fieldId}-error`\r\n\r\n const hasError = Boolean(errorMessage) || isInvalid\r\n const describedBy = [hasError && errorId, helperText && helperId].filter(Boolean).join(' ')\r\n\r\n const labelStyle: React.CSSProperties = {\r\n display: 'block',\r\n marginBottom: 6,\r\n fontSize: 13,\r\n fontWeight: 500,\r\n color: 'var(--brycks-foreground-default)',\r\n ...(hideLabel && {\r\n position: 'absolute',\r\n width: 1,\r\n height: 1,\r\n padding: 0,\r\n margin: -1,\r\n overflow: 'hidden',\r\n clip: 'rect(0, 0, 0, 0)',\r\n whiteSpace: 'nowrap',\r\n border: 0,\r\n }),\r\n }\r\n\r\n const helperStyle: React.CSSProperties = {\r\n display: 'block',\r\n marginTop: 6,\r\n fontSize: 12,\r\n lineHeight: 1.5,\r\n color: 'var(--brycks-foreground-muted)',\r\n }\r\n\r\n const errorStyle: React.CSSProperties = {\r\n ...helperStyle,\r\n color: 'var(--brycks-error-default)',\r\n }\r\n\r\n return (\r\n <div\r\n className={cx(\r\n 'brycks-text-field',\r\n hasError && 'brycks-text-field--error',\r\n className\r\n )}\r\n data-testid={testId}\r\n >\r\n {label && (\r\n <label htmlFor={fieldId} style={labelStyle}>\r\n {label}\r\n {isRequired && (\r\n <span\r\n aria-hidden=\"true\"\r\n style={{\r\n color: 'var(--brycks-error-default)',\r\n marginLeft: 2,\r\n }}\r\n >\r\n *\r\n </span>\r\n )}\r\n </label>\r\n )}\r\n\r\n <Input\r\n ref={ref}\r\n id={fieldId}\r\n isInvalid={hasError}\r\n aria-describedby={describedBy || undefined}\r\n aria-required={isRequired}\r\n {...inputProps}\r\n />\r\n\r\n {hasError && errorMessage && (\r\n <span id={errorId} role=\"alert\" style={errorStyle}>\r\n {errorMessage}\r\n </span>\r\n )}\r\n\r\n {!hasError && helperText && (\r\n <span id={helperId} style={helperStyle}>\r\n {helperText}\r\n </span>\r\n )}\r\n </div>\r\n )\r\n})\r\n\r\nTextField.displayName = 'TextField'\r\n","/**\r\n * Select Component\r\n *\r\n * Native select with custom styling for cross-browser consistency.\r\n * Maintains accessibility while providing Apple-inspired visuals.\r\n */\r\n\r\nimport {\r\n forwardRef,\r\n useState,\r\n type CSSProperties,\r\n type SelectHTMLAttributes,\r\n type ReactNode,\r\n} from 'react'\r\nimport { cx } from '../../../utils/styles'\r\n\r\nexport type SelectSize = 'sm' | 'md' | 'lg'\r\nexport type SelectVariant = 'outline' | 'filled'\r\n\r\nexport interface SelectProps extends Omit<SelectHTMLAttributes<HTMLSelectElement>, 'size'> {\r\n /** Select size */\r\n size?: SelectSize\r\n /** Visual variant */\r\n variant?: SelectVariant\r\n /** Error state */\r\n isInvalid?: boolean\r\n /** Placeholder option */\r\n placeholder?: string\r\n /** Custom class name */\r\n className?: string\r\n /** Test ID */\r\n testId?: string\r\n /** Children (option elements) */\r\n children?: ReactNode\r\n}\r\n\r\nconst sizeStyles: Record<SelectSize, { height: number; fontSize: number; padding: number }> = {\r\n sm: { height: 32, fontSize: 13, padding: 10 },\r\n md: { height: 40, fontSize: 14, padding: 12 },\r\n lg: { height: 48, fontSize: 15, padding: 14 },\r\n}\r\n\r\n/** Chevron down icon */\r\nfunction ChevronIcon() {\r\n return (\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path\r\n d=\"M2.5 4.5L6 8L9.5 4.5\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n )\r\n}\r\n\r\nexport const Select = forwardRef<HTMLSelectElement, SelectProps>(function Select(\r\n {\r\n size = 'md',\r\n variant = 'outline',\r\n isInvalid,\r\n placeholder,\r\n className,\r\n style,\r\n testId,\r\n disabled,\r\n children,\r\n onFocus,\r\n onBlur,\r\n value,\r\n ...props\r\n },\r\n ref\r\n) {\r\n const [isFocused, setIsFocused] = useState(false)\r\n\r\n const sizeValue = sizeStyles[size]\r\n const hasValue = value !== undefined && value !== ''\r\n\r\n const wrapperStyle: CSSProperties = {\r\n position: 'relative',\r\n display: 'inline-flex',\r\n width: '100%',\r\n }\r\n\r\n const getSelectStyle = (): CSSProperties => {\r\n const base: CSSProperties = {\r\n width: '100%',\r\n height: sizeValue.height,\r\n paddingLeft: sizeValue.padding,\r\n paddingRight: sizeValue.padding + 24,\r\n fontSize: sizeValue.fontSize,\r\n fontFamily: 'var(--brycks-font-sans)',\r\n color: hasValue || !placeholder ? 'var(--brycks-foreground-default)' : 'var(--brycks-foreground-muted)',\r\n backgroundColor: variant === 'filled' ? 'var(--brycks-background-muted)' : 'var(--brycks-background-app)',\r\n border: `1px solid ${\r\n isInvalid\r\n ? 'var(--brycks-error-default)'\r\n : isFocused\r\n ? 'var(--brycks-border-focus)'\r\n : variant === 'filled'\r\n ? 'transparent'\r\n : 'var(--brycks-border-default)'\r\n }`,\r\n borderRadius: 'var(--brycks-radius-default)',\r\n outline: 'none',\r\n cursor: disabled ? 'not-allowed' : 'pointer',\r\n appearance: 'none',\r\n WebkitAppearance: 'none',\r\n transition: 'all 200ms ease-out',\r\n boxShadow: isFocused\r\n ? isInvalid\r\n ? '0 0 0 3px rgba(239, 68, 68, 0.15)'\r\n : '0 0 0 3px rgba(85, 120, 244, 0.15)'\r\n : 'none',\r\n }\r\n\r\n if (disabled) {\r\n base.opacity = 0.5\r\n }\r\n\r\n return base\r\n }\r\n\r\n const iconStyle: CSSProperties = {\r\n position: 'absolute',\r\n right: sizeValue.padding,\r\n top: '50%',\r\n transform: 'translateY(-50%)',\r\n pointerEvents: 'none',\r\n color: 'var(--brycks-foreground-muted)',\r\n transition: 'transform 200ms ease-out',\r\n }\r\n\r\n const handleFocus = (e: React.FocusEvent<HTMLSelectElement>) => {\r\n setIsFocused(true)\r\n onFocus?.(e)\r\n }\r\n\r\n const handleBlur = (e: React.FocusEvent<HTMLSelectElement>) => {\r\n setIsFocused(false)\r\n onBlur?.(e)\r\n }\r\n\r\n return (\r\n <div\r\n className={cx(\r\n 'brycks-select-wrapper',\r\n `brycks-select-wrapper--${variant}`,\r\n `brycks-select-wrapper--${size}`,\r\n isInvalid && 'brycks-select-wrapper--invalid',\r\n disabled && 'brycks-select-wrapper--disabled',\r\n className\r\n )}\r\n style={{ ...wrapperStyle, ...style }}\r\n >\r\n <select\r\n ref={ref}\r\n className=\"brycks-select\"\r\n style={getSelectStyle()}\r\n disabled={disabled}\r\n aria-invalid={isInvalid}\r\n data-testid={testId}\r\n value={value}\r\n onFocus={handleFocus}\r\n onBlur={handleBlur}\r\n {...props}\r\n >\r\n {placeholder && (\r\n <option value=\"\" disabled>\r\n {placeholder}\r\n </option>\r\n )}\r\n {children}\r\n </select>\r\n\r\n <span style={iconStyle}>\r\n <ChevronIcon />\r\n </span>\r\n </div>\r\n )\r\n})\r\n\r\nSelect.displayName = 'Select'\r\n","/**\r\n * Checkbox Component\r\n *\r\n * Apple-inspired checkbox with smooth animations and tactile feedback.\r\n *\r\n * @module components/form/Checkbox\r\n */\r\n\r\nimport {\r\n forwardRef,\r\n useState,\r\n type CSSProperties,\r\n type InputHTMLAttributes,\r\n type ReactNode,\r\n} from 'react'\r\nimport {\r\n controlSizes,\r\n componentGap,\r\n componentFontSize,\r\n componentLineHeight,\r\n focusRing,\r\n transition,\r\n stateOpacity,\r\n scale,\r\n} from '../../../design-system'\r\nimport { cx } from '../../../utils/styles'\r\n\r\nexport type CheckboxSize = 'sm' | 'md' | 'lg'\r\n\r\nexport interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {\r\n /** Checkbox size */\r\n size?: CheckboxSize\r\n /** Label text */\r\n label?: ReactNode\r\n /** Description below label */\r\n description?: ReactNode\r\n /** Error state */\r\n isInvalid?: boolean\r\n /** Indeterminate state */\r\n isIndeterminate?: boolean\r\n /** Custom class name */\r\n className?: string\r\n /** Test ID */\r\n testId?: string\r\n}\r\n\r\n/** Checkmark icon */\r\nfunction CheckIcon({ size }: { size: number }) {\r\n return (\r\n <svg width={size} height={size} viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path\r\n d=\"M2.5 6L5 8.5L9.5 4\"\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\n/** Indeterminate/minus icon */\r\nfunction MinusIcon({ size }: { size: number }) {\r\n return (\r\n <svg width={size} height={size} viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path\r\n d=\"M2.5 6H9.5\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n />\r\n </svg>\r\n )\r\n}\r\n\r\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(function Checkbox(\r\n {\r\n size = 'md',\r\n label,\r\n description,\r\n isInvalid,\r\n isIndeterminate,\r\n className,\r\n style,\r\n testId,\r\n disabled,\r\n checked,\r\n onChange,\r\n ...props\r\n },\r\n ref\r\n) {\r\n const [isFocused, setIsFocused] = useState(false)\r\n const [isHovered, setIsHovered] = useState(false)\r\n const [isPressed, setIsPressed] = useState(false)\r\n\r\n const config = controlSizes[size]\r\n const fontSize = componentFontSize[size]\r\n\r\n const isCheckedOrIndeterminate = checked || isIndeterminate\r\n\r\n const wrapperStyle: CSSProperties = {\r\n display: 'inline-flex',\r\n alignItems: 'flex-start',\r\n gap: componentGap.lg,\r\n cursor: disabled ? 'not-allowed' : 'pointer',\r\n opacity: disabled ? stateOpacity.disabled : 1,\r\n }\r\n\r\n const boxStyle: CSSProperties = {\r\n position: 'relative',\r\n width: config.box,\r\n height: config.box,\r\n borderRadius: 'var(--brycks-radius-sm)',\r\n border: `1.5px solid ${\r\n isInvalid\r\n ? 'var(--brycks-error-default)'\r\n : isCheckedOrIndeterminate\r\n ? 'var(--brycks-primary-default)'\r\n : isFocused\r\n ? 'var(--brycks-border-focus)'\r\n : 'var(--brycks-border-default)'\r\n }`,\r\n backgroundColor: isCheckedOrIndeterminate\r\n ? 'var(--brycks-primary-default)'\r\n : isHovered\r\n ? 'var(--brycks-background-subtle)'\r\n : 'var(--brycks-background-app)',\r\n transition: transition.quick,\r\n transform: isPressed ? `scale(${scale.controlPressed})` : `scale(${scale.normal})`,\r\n boxShadow: isFocused ? focusRing.default : focusRing.none,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n flexShrink: 0,\r\n }\r\n\r\n const iconStyle: CSSProperties = {\r\n color: 'var(--brycks-primary-foreground)',\r\n opacity: isCheckedOrIndeterminate ? 1 : 0,\r\n transform: isCheckedOrIndeterminate ? `scale(${scale.normal})` : `scale(${scale.hidden})`,\r\n transition: transition.quick,\r\n }\r\n\r\n const inputStyle: CSSProperties = {\r\n position: 'absolute',\r\n width: '100%',\r\n height: '100%',\r\n opacity: 0,\r\n cursor: disabled ? 'not-allowed' : 'pointer',\r\n margin: 0,\r\n }\r\n\r\n const labelContainerStyle: CSSProperties = {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: componentGap.xs,\r\n paddingTop: (config.box - fontSize) / 2,\r\n }\r\n\r\n const labelTextStyle: CSSProperties = {\r\n fontSize,\r\n lineHeight: componentLineHeight.snug,\r\n color: 'var(--brycks-foreground-default)',\r\n userSelect: 'none',\r\n }\r\n\r\n const descriptionStyle: CSSProperties = {\r\n fontSize: fontSize - 1,\r\n lineHeight: componentLineHeight.snug,\r\n color: 'var(--brycks-foreground-muted)',\r\n userSelect: 'none',\r\n }\r\n\r\n return (\r\n <label\r\n className={cx(\r\n 'brycks-checkbox',\r\n `brycks-checkbox--${size}`,\r\n isCheckedOrIndeterminate && 'brycks-checkbox--checked',\r\n isInvalid && 'brycks-checkbox--invalid',\r\n disabled && 'brycks-checkbox--disabled',\r\n className\r\n )}\r\n style={{ ...wrapperStyle, ...style }}\r\n data-testid={testId}\r\n onMouseEnter={() => setIsHovered(true)}\r\n onMouseLeave={() => {\r\n setIsHovered(false)\r\n setIsPressed(false)\r\n }}\r\n onMouseDown={() => setIsPressed(true)}\r\n onMouseUp={() => setIsPressed(false)}\r\n >\r\n <span style={boxStyle}>\r\n <input\r\n ref={ref}\r\n type=\"checkbox\"\r\n style={inputStyle}\r\n checked={checked}\r\n disabled={disabled}\r\n aria-invalid={isInvalid}\r\n onChange={onChange}\r\n onFocus={() => setIsFocused(true)}\r\n onBlur={() => setIsFocused(false)}\r\n {...props}\r\n />\r\n <span style={iconStyle}>\r\n {isIndeterminate ? <MinusIcon size={config.icon} /> : <CheckIcon size={config.icon} />}\r\n </span>\r\n </span>\r\n\r\n {(label || description) && (\r\n <span style={labelContainerStyle}>\r\n {label && <span style={labelTextStyle}>{label}</span>}\r\n {description && <span style={descriptionStyle}>{description}</span>}\r\n </span>\r\n )}\r\n </label>\r\n )\r\n})\r\n\r\nCheckbox.displayName = 'Checkbox'\r\n","/**\r\n * Switch Component\r\n *\r\n * Apple-inspired toggle switch with smooth spring animation.\r\n * Clean, tactile design with satisfying micro-interactions.\r\n *\r\n * @module components/form/Switch\r\n */\r\n\r\nimport {\r\n forwardRef,\r\n useState,\r\n type CSSProperties,\r\n type InputHTMLAttributes,\r\n type ReactNode,\r\n} from 'react'\r\nimport {\r\n switchSizes,\r\n componentGap,\r\n componentFontSize,\r\n componentLineHeight,\r\n focusRing,\r\n transition,\r\n stateOpacity,\r\n scale,\r\n} from '../../../design-system'\r\nimport { cx } from '../../../utils/styles'\r\n\r\nexport type SwitchSize = 'sm' | 'md' | 'lg'\r\n\r\nexport interface SwitchProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {\r\n /** Switch size */\r\n size?: SwitchSize\r\n /** Label text */\r\n label?: ReactNode\r\n /** Description below label */\r\n description?: ReactNode\r\n /** Custom class name */\r\n className?: string\r\n /** Test ID */\r\n testId?: string\r\n}\r\n\r\nexport const Switch = forwardRef<HTMLInputElement, SwitchProps>(function Switch(\r\n {\r\n size = 'md',\r\n label,\r\n description,\r\n className,\r\n style,\r\n testId,\r\n disabled,\r\n checked,\r\n onChange,\r\n ...props\r\n },\r\n ref\r\n) {\r\n const [isFocused, setIsFocused] = useState(false)\r\n const [isPressed, setIsPressed] = useState(false)\r\n\r\n const config = switchSizes[size]\r\n const fontSize = componentFontSize[size]\r\n\r\n const padding = (config.height - config.thumb) / 2\r\n const travel = config.width - config.thumb - padding * 2\r\n\r\n const wrapperStyle: CSSProperties = {\r\n display: 'inline-flex',\r\n alignItems: 'flex-start',\r\n gap: componentGap.xl,\r\n cursor: disabled ? 'not-allowed' : 'pointer',\r\n opacity: disabled ? stateOpacity.disabled : 1,\r\n }\r\n\r\n const trackStyle: CSSProperties = {\r\n position: 'relative',\r\n width: config.width,\r\n height: config.height,\r\n borderRadius: config.height / 2,\r\n backgroundColor: checked\r\n ? 'var(--brycks-primary-default)'\r\n : 'var(--brycks-background-muted)',\r\n border: `1px solid ${checked ? 'var(--brycks-primary-default)' : 'var(--brycks-border-default)'}`,\r\n transition: transition.spring,\r\n boxShadow: isFocused ? focusRing.default : 'inset 0 1px 2px rgba(0,0,0,0.05)',\r\n flexShrink: 0,\r\n }\r\n\r\n const thumbStyle: CSSProperties = {\r\n position: 'absolute',\r\n top: padding,\r\n left: checked ? padding + travel : padding,\r\n width: isPressed ? config.thumb + 4 : config.thumb,\r\n height: config.thumb,\r\n borderRadius: config.thumb / 2,\r\n backgroundColor: 'var(--brycks-background-elevated)',\r\n boxShadow: 'var(--brycks-shadow-sm)',\r\n transition: transition.spring,\r\n transform: isPressed ? `scale(${scale.pressedStrong})` : `scale(${scale.normal})`,\r\n }\r\n\r\n const inputStyle: CSSProperties = {\r\n position: 'absolute',\r\n width: '100%',\r\n height: '100%',\r\n opacity: 0,\r\n cursor: disabled ? 'not-allowed' : 'pointer',\r\n margin: 0,\r\n }\r\n\r\n const labelContainerStyle: CSSProperties = {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: componentGap.xs,\r\n paddingTop: (config.height - fontSize * componentLineHeight.snug) / 2,\r\n }\r\n\r\n const labelStyle: CSSProperties = {\r\n fontSize,\r\n lineHeight: componentLineHeight.snug,\r\n color: 'var(--brycks-foreground-default)',\r\n userSelect: 'none',\r\n }\r\n\r\n const descriptionStyle: CSSProperties = {\r\n fontSize: fontSize - 1,\r\n lineHeight: componentLineHeight.snug,\r\n color: 'var(--brycks-foreground-muted)',\r\n userSelect: 'none',\r\n }\r\n\r\n return (\r\n <label\r\n className={cx(\r\n 'brycks-switch',\r\n `brycks-switch--${size}`,\r\n checked && 'brycks-switch--checked',\r\n disabled && 'brycks-switch--disabled',\r\n className\r\n )}\r\n style={{ ...wrapperStyle, ...style }}\r\n data-testid={testId}\r\n onMouseDown={() => setIsPressed(true)}\r\n onMouseUp={() => setIsPressed(false)}\r\n onMouseLeave={() => setIsPressed(false)}\r\n >\r\n <span style={trackStyle}>\r\n <input\r\n ref={ref}\r\n type=\"checkbox\"\r\n role=\"switch\"\r\n style={inputStyle}\r\n checked={checked}\r\n disabled={disabled}\r\n aria-checked={checked}\r\n onChange={onChange}\r\n onFocus={() => setIsFocused(true)}\r\n onBlur={() => setIsFocused(false)}\r\n {...props}\r\n />\r\n <span style={thumbStyle} />\r\n </span>\r\n\r\n {(label || description) && (\r\n <span style={labelContainerStyle}>\r\n {label && <span style={labelStyle}>{label}</span>}\r\n {description && <span style={descriptionStyle}>{description}</span>}\r\n </span>\r\n )}\r\n </label>\r\n )\r\n})\r\n\r\nSwitch.displayName = 'Switch'\r\n","/**\r\n * Textarea Component\r\n *\r\n * Multi-line text input with Apple-inspired styling.\r\n * Supports auto-resize and character counting.\r\n */\r\n\r\nimport {\r\n forwardRef,\r\n useState,\r\n useEffect,\r\n useRef,\r\n useCallback,\r\n type CSSProperties,\r\n type TextareaHTMLAttributes,\r\n} from 'react'\r\nimport { cx } from '../../../utils/styles'\r\n\r\nexport type TextareaSize = 'sm' | 'md' | 'lg'\r\nexport type TextareaVariant = 'outline' | 'filled'\r\n\r\nexport interface TextareaProps extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'size'> {\r\n /** Textarea size */\r\n size?: TextareaSize\r\n /** Visual variant */\r\n variant?: TextareaVariant\r\n /** Error state */\r\n isInvalid?: boolean\r\n /** Auto resize based on content */\r\n autoResize?: boolean\r\n /** Minimum rows */\r\n minRows?: number\r\n /** Maximum rows */\r\n maxRows?: number\r\n /** Show character count */\r\n showCount?: boolean\r\n /** Max character length */\r\n maxLength?: number\r\n /** Custom class name */\r\n className?: string\r\n /** Test ID */\r\n testId?: string\r\n}\r\n\r\nconst sizeStyles: Record<TextareaSize, { fontSize: number; padding: number; lineHeight: number }> = {\r\n sm: { fontSize: 13, padding: 10, lineHeight: 1.5 },\r\n md: { fontSize: 14, padding: 12, lineHeight: 1.5 },\r\n lg: { fontSize: 15, padding: 14, lineHeight: 1.5 },\r\n}\r\n\r\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(function Textarea(\r\n {\r\n size = 'md',\r\n variant = 'outline',\r\n isInvalid,\r\n autoResize,\r\n minRows = 3,\r\n maxRows = 10,\r\n showCount,\r\n maxLength,\r\n className,\r\n style,\r\n testId,\r\n disabled,\r\n value,\r\n defaultValue,\r\n onChange,\r\n onFocus,\r\n onBlur,\r\n ...props\r\n },\r\n ref\r\n) {\r\n const [isFocused, setIsFocused] = useState(false)\r\n const [charCount, setCharCount] = useState(0)\r\n const internalRef = useRef<HTMLTextAreaElement>(null)\r\n const textareaRef = (ref as React.RefObject<HTMLTextAreaElement>) || internalRef\r\n\r\n const sizeValue = sizeStyles[size]\r\n const lineHeightPx = sizeValue.fontSize * sizeValue.lineHeight\r\n const minHeight = lineHeightPx * minRows + sizeValue.padding * 2\r\n const maxHeight = lineHeightPx * maxRows + sizeValue.padding * 2\r\n\r\n const adjustHeight = useCallback(() => {\r\n const textarea = textareaRef.current\r\n if (!textarea || !autoResize) return\r\n\r\n textarea.style.height = 'auto'\r\n const scrollHeight = textarea.scrollHeight\r\n const newHeight = Math.min(Math.max(scrollHeight, minHeight), maxHeight)\r\n textarea.style.height = `${newHeight}px`\r\n }, [autoResize, minHeight, maxHeight, textareaRef])\r\n\r\n useEffect(() => {\r\n adjustHeight()\r\n }, [value, adjustHeight])\r\n\r\n useEffect(() => {\r\n const initialValue = String(value ?? defaultValue ?? '')\r\n setCharCount(initialValue.length)\r\n }, [value, defaultValue])\r\n\r\n const getTextareaStyle = (): CSSProperties => {\r\n const base: CSSProperties = {\r\n width: '100%',\r\n minHeight,\r\n maxHeight: autoResize ? maxHeight : undefined,\r\n padding: sizeValue.padding,\r\n fontSize: sizeValue.fontSize,\r\n lineHeight: sizeValue.lineHeight,\r\n fontFamily: 'var(--brycks-font-sans)',\r\n color: 'var(--brycks-foreground-default)',\r\n backgroundColor: variant === 'filled' ? 'var(--brycks-background-muted)' : 'var(--brycks-background-app)',\r\n border: `1px solid ${\r\n isInvalid\r\n ? 'var(--brycks-error-default)'\r\n : isFocused\r\n ? 'var(--brycks-border-focus)'\r\n : variant === 'filled'\r\n ? 'transparent'\r\n : 'var(--brycks-border-default)'\r\n }`,\r\n borderRadius: 'var(--brycks-radius-default)',\r\n outline: 'none',\r\n resize: autoResize ? 'none' : 'vertical',\r\n transition: 'all 200ms ease-out',\r\n boxShadow: isFocused\r\n ? isInvalid\r\n ? '0 0 0 3px rgba(239, 68, 68, 0.15)'\r\n : '0 0 0 3px rgba(85, 120, 244, 0.15)'\r\n : 'none',\r\n }\r\n\r\n if (disabled) {\r\n base.opacity = 0.5\r\n base.cursor = 'not-allowed'\r\n base.resize = 'none'\r\n }\r\n\r\n return base\r\n }\r\n\r\n const wrapperStyle: CSSProperties = {\r\n position: 'relative',\r\n width: '100%',\r\n }\r\n\r\n const countStyle: CSSProperties = {\r\n position: 'absolute',\r\n bottom: 8,\r\n right: 12,\r\n fontSize: 11,\r\n color: charCount >= (maxLength ?? Infinity)\r\n ? 'var(--brycks-error-default)'\r\n : 'var(--brycks-foreground-muted)',\r\n pointerEvents: 'none',\r\n transition: 'color 150ms ease-out',\r\n }\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\r\n setCharCount(e.target.value.length)\r\n onChange?.(e)\r\n }\r\n\r\n const handleFocus = (e: React.FocusEvent<HTMLTextAreaElement>) => {\r\n setIsFocused(true)\r\n onFocus?.(e)\r\n }\r\n\r\n const handleBlur = (e: React.FocusEvent<HTMLTextAreaElement>) => {\r\n setIsFocused(false)\r\n onBlur?.(e)\r\n }\r\n\r\n return (\r\n <div\r\n className={cx(\r\n 'brycks-textarea-wrapper',\r\n `brycks-textarea-wrapper--${variant}`,\r\n `brycks-textarea-wrapper--${size}`,\r\n isInvalid && 'brycks-textarea-wrapper--invalid',\r\n disabled && 'brycks-textarea-wrapper--disabled',\r\n className\r\n )}\r\n style={{ ...wrapperStyle, ...style }}\r\n >\r\n <textarea\r\n ref={textareaRef}\r\n className=\"brycks-textarea\"\r\n style={getTextareaStyle()}\r\n disabled={disabled}\r\n aria-invalid={isInvalid}\r\n data-testid={testId}\r\n value={value}\r\n defaultValue={defaultValue}\r\n maxLength={maxLength}\r\n onChange={handleChange}\r\n onFocus={handleFocus}\r\n onBlur={handleBlur}\r\n {...props}\r\n />\r\n\r\n {showCount && (\r\n <span style={countStyle}>\r\n {charCount}{maxLength ? `/${maxLength}` : ''}\r\n </span>\r\n )}\r\n </div>\r\n )\r\n})\r\n\r\nTextarea.displayName = 'Textarea'\r\n","/**\n * Radio Component\n *\n * Accessible radio button with custom styling.\n * Supports different sizes and states.\n */\n\nimport {\n forwardRef,\n useState,\n type CSSProperties,\n type InputHTMLAttributes,\n type ReactNode,\n} from 'react'\nimport { cx } from '../../../utils/styles'\n\nexport type RadioSize = 'sm' | 'md' | 'lg'\n\nexport interface RadioProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {\n /** Radio size */\n size?: RadioSize\n /** Radio label */\n label?: ReactNode\n /** Description below the label */\n description?: ReactNode\n /** Whether the radio is invalid */\n isInvalid?: boolean\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst sizeConfig: Record<RadioSize, { radio: number; dot: number; fontSize: number; gap: number }> = {\n sm: { radio: 16, dot: 6, fontSize: 13, gap: 8 },\n md: { radio: 20, dot: 8, fontSize: 14, gap: 10 },\n lg: { radio: 24, dot: 10, fontSize: 16, gap: 12 },\n}\n\nexport const Radio = forwardRef<HTMLInputElement, RadioProps>(function Radio(\n {\n size = 'md',\n label,\n description,\n isInvalid = false,\n disabled = false,\n className,\n style,\n testId,\n checked,\n ...props\n },\n ref\n) {\n const [isHovered, setIsHovered] = useState(false)\n const [isFocused, setIsFocused] = useState(false)\n const config = sizeConfig[size]\n\n const containerStyle: CSSProperties = {\n display: 'inline-flex',\n alignItems: 'flex-start',\n gap: config.gap,\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.5 : 1,\n ...style,\n }\n\n const radioContainerStyle: CSSProperties = {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: config.radio,\n height: config.radio,\n flexShrink: 0,\n }\n\n const radioStyle: CSSProperties = {\n width: config.radio,\n height: config.radio,\n borderRadius: '50%',\n border: `2px solid ${\n isInvalid\n ? 'var(--brycks-error-default)'\n : checked\n ? 'var(--brycks-primary-default)'\n : isHovered\n ? 'var(--brycks-border-strong)'\n : 'var(--brycks-border-default)'\n }`,\n backgroundColor: checked\n ? 'var(--brycks-primary-default)'\n : 'var(--brycks-background-input)',\n transition: 'all 150ms ease-out',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n boxShadow: isFocused\n ? '0 0 0 3px var(--brycks-primary-100)'\n : undefined,\n }\n\n const dotStyle: CSSProperties = {\n width: config.dot,\n height: config.dot,\n borderRadius: '50%',\n backgroundColor: 'white',\n transform: checked ? 'scale(1)' : 'scale(0)',\n transition: 'transform 150ms ease-out',\n }\n\n const inputStyle: CSSProperties = {\n position: 'absolute',\n width: config.radio,\n height: config.radio,\n opacity: 0,\n margin: 0,\n cursor: disabled ? 'not-allowed' : 'pointer',\n }\n\n const labelContainerStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n }\n\n const labelStyle: CSSProperties = {\n fontSize: config.fontSize,\n fontWeight: 500,\n color: disabled\n ? 'var(--brycks-foreground-muted)'\n : 'var(--brycks-foreground-default)',\n lineHeight: 1.4,\n }\n\n const descriptionStyle: CSSProperties = {\n fontSize: config.fontSize - 1,\n color: 'var(--brycks-foreground-muted)',\n lineHeight: 1.4,\n }\n\n return (\n <label\n className={cx('brycks-radio', `brycks-radio--${size}`, className)}\n style={containerStyle}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n <span style={radioContainerStyle}>\n <span style={radioStyle}>\n <span style={dotStyle} />\n </span>\n <input\n ref={ref}\n type=\"radio\"\n disabled={disabled}\n checked={checked}\n style={inputStyle}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n data-testid={testId}\n {...props}\n />\n </span>\n {(label || description) && (\n <span style={labelContainerStyle}>\n {label && <span style={labelStyle}>{label}</span>}\n {description && <span style={descriptionStyle}>{description}</span>}\n </span>\n )}\n </label>\n )\n})\n\nRadio.displayName = 'Radio'\n\n// RadioGroup component for grouping radios\nexport interface RadioGroupProps {\n /** Radio group name */\n name: string\n /** Current value */\n value?: string\n /** Default value (uncontrolled) */\n defaultValue?: string\n /** Callback when value changes */\n onChange?: (value: string) => void\n /** Whether the group is disabled */\n disabled?: boolean\n /** Radio size */\n size?: RadioSize\n /** Orientation */\n orientation?: 'horizontal' | 'vertical'\n /** Gap between items */\n gap?: number\n /** Children (Radio components) */\n children: ReactNode\n /** Custom class name */\n className?: string\n /** Custom styles */\n style?: CSSProperties\n}\n\nexport function RadioGroup({\n name,\n value: controlledValue,\n defaultValue,\n onChange,\n disabled = false,\n size = 'md',\n orientation = 'vertical',\n gap = 12,\n children,\n className,\n style,\n}: RadioGroupProps) {\n const [internalValue, setInternalValue] = useState(defaultValue ?? '')\n const value = controlledValue ?? internalValue\n\n const handleChange = (newValue: string) => {\n if (controlledValue === undefined) {\n setInternalValue(newValue)\n }\n onChange?.(newValue)\n }\n\n const groupStyle: CSSProperties = {\n display: 'flex',\n flexDirection: orientation === 'vertical' ? 'column' : 'row',\n flexWrap: orientation === 'horizontal' ? 'wrap' : undefined,\n gap,\n ...style,\n }\n\n // Clone children and inject props\n const clonedChildren = Array.isArray(children)\n ? children.map((child, index) => {\n if (child && typeof child === 'object' && 'props' in child) {\n const childValue = child.props.value\n return {\n ...child,\n key: child.key ?? index,\n props: {\n ...child.props,\n name,\n size,\n disabled: disabled || child.props.disabled,\n checked: childValue === value,\n onChange: () => handleChange(childValue),\n },\n }\n }\n return child\n })\n : children\n\n return (\n <div\n role=\"radiogroup\"\n className={cx('brycks-radio-group', className)}\n style={groupStyle}\n >\n {clonedChildren}\n </div>\n )\n}\n\nRadioGroup.displayName = 'RadioGroup'\n","/**\n * Slider Component\n *\n * Accessible range slider with custom styling.\n * Supports different sizes and shows value feedback.\n */\n\nimport {\n forwardRef,\n useState,\n useCallback,\n useRef,\n useEffect,\n type CSSProperties,\n type InputHTMLAttributes,\n} from 'react'\nimport { cx } from '../../../utils/styles'\n\nexport type SliderSize = 'sm' | 'md' | 'lg'\n\nexport interface SliderProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'type' | 'onChange'> {\n /** Slider size */\n size?: SliderSize\n /** Minimum value */\n min?: number\n /** Maximum value */\n max?: number\n /** Step increment */\n step?: number\n /** Current value (controlled) */\n value?: number\n /** Default value (uncontrolled) */\n defaultValue?: number\n /** Callback when value changes */\n onChange?: (value: number) => void\n /** Whether to show the value label */\n showValue?: boolean\n /** Format the value for display */\n formatValue?: (value: number) => string\n /** Label for the slider */\n label?: string\n /** Whether the slider is disabled */\n disabled?: boolean\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst sizeConfig: Record<SliderSize, { track: number; thumb: number; fontSize: number }> = {\n sm: { track: 4, thumb: 14, fontSize: 12 },\n md: { track: 6, thumb: 18, fontSize: 14 },\n lg: { track: 8, thumb: 22, fontSize: 16 },\n}\n\nexport const Slider = forwardRef<HTMLInputElement, SliderProps>(function Slider(\n {\n size = 'md',\n min = 0,\n max = 100,\n step = 1,\n value: controlledValue,\n defaultValue = min,\n onChange,\n showValue = false,\n formatValue = (v) => String(v),\n label,\n disabled = false,\n className,\n style,\n testId,\n ...props\n },\n ref\n) {\n const [internalValue, setInternalValue] = useState(defaultValue)\n const [isDragging, setIsDragging] = useState(false)\n const [isHovered, setIsHovered] = useState(false)\n const inputRef = useRef<HTMLInputElement>(null)\n\n const value = controlledValue ?? internalValue\n const config = sizeConfig[size]\n const percentage = ((value - min) / (max - min)) * 100\n\n const handleChange = useCallback(\n (newValue: number) => {\n const clampedValue = Math.max(min, Math.min(max, newValue))\n if (controlledValue === undefined) {\n setInternalValue(clampedValue)\n }\n onChange?.(clampedValue)\n },\n [controlledValue, min, max, onChange]\n )\n\n useEffect(() => {\n const input = inputRef.current\n if (!input) return\n\n const handleInputChange = (e: Event) => {\n const target = e.target as HTMLInputElement\n handleChange(parseFloat(target.value))\n }\n\n input.addEventListener('input', handleInputChange)\n return () => input.removeEventListener('input', handleInputChange)\n }, [handleChange])\n\n const containerStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 8,\n opacity: disabled ? 0.5 : 1,\n ...style,\n }\n\n const labelRowStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 12,\n }\n\n const labelStyle: CSSProperties = {\n fontSize: config.fontSize,\n fontWeight: 500,\n color: 'var(--brycks-foreground-default)',\n }\n\n const valueStyle: CSSProperties = {\n fontSize: config.fontSize,\n fontWeight: 500,\n color: 'var(--brycks-foreground-muted)',\n fontVariantNumeric: 'tabular-nums',\n }\n\n const sliderContainerStyle: CSSProperties = {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n height: config.thumb,\n cursor: disabled ? 'not-allowed' : 'pointer',\n }\n\n const trackStyle: CSSProperties = {\n position: 'absolute',\n width: '100%',\n height: config.track,\n borderRadius: config.track / 2,\n backgroundColor: 'var(--brycks-background-muted)',\n }\n\n const fillStyle: CSSProperties = {\n position: 'absolute',\n left: 0,\n height: config.track,\n width: `${percentage}%`,\n borderRadius: config.track / 2,\n backgroundColor: disabled\n ? 'var(--brycks-foreground-muted)'\n : 'var(--brycks-primary-default)',\n transition: isDragging ? 'none' : 'width 100ms ease-out',\n }\n\n const thumbStyle: CSSProperties = {\n position: 'absolute',\n left: `calc(${percentage}% - ${config.thumb / 2}px)`,\n width: config.thumb,\n height: config.thumb,\n borderRadius: '50%',\n backgroundColor: 'white',\n border: `2px solid ${\n disabled ? 'var(--brycks-foreground-muted)' : 'var(--brycks-primary-default)'\n }`,\n boxShadow: isDragging || isHovered\n ? 'var(--brycks-shadow-md)'\n : 'var(--brycks-shadow-sm)',\n transform: isDragging ? 'scale(1.1)' : 'scale(1)',\n transition: isDragging\n ? 'transform 100ms ease-out, box-shadow 100ms ease-out'\n : 'all 100ms ease-out',\n pointerEvents: 'none',\n }\n\n const inputStyle: CSSProperties = {\n position: 'absolute',\n width: '100%',\n height: config.thumb,\n margin: 0,\n padding: 0,\n opacity: 0,\n cursor: disabled ? 'not-allowed' : 'pointer',\n }\n\n return (\n <div className={cx('brycks-slider', `brycks-slider--${size}`, className)} style={containerStyle}>\n {(label || showValue) && (\n <div style={labelRowStyle}>\n {label && <span style={labelStyle}>{label}</span>}\n {showValue && <span style={valueStyle}>{formatValue(value)}</span>}\n </div>\n )}\n <div\n style={sliderContainerStyle}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n <div style={trackStyle} />\n <div style={fillStyle} />\n <div style={thumbStyle} />\n <input\n ref={(node) => {\n (inputRef as React.MutableRefObject<HTMLInputElement | null>).current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) ref.current = node\n }}\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={value}\n disabled={disabled}\n style={inputStyle}\n onMouseDown={() => setIsDragging(true)}\n onMouseUp={() => setIsDragging(false)}\n onTouchStart={() => setIsDragging(true)}\n onTouchEnd={() => setIsDragging(false)}\n data-testid={testId}\n {...props}\n />\n </div>\n </div>\n )\n})\n\nSlider.displayName = 'Slider'\n","/**\n * DateInput Component\n *\n * A styled date input that uses the native date picker.\n * Consistent with other form inputs in the design system.\n */\n\nimport {\n forwardRef,\n useState,\n type CSSProperties,\n type InputHTMLAttributes,\n type ReactNode,\n} from 'react'\nimport { cx } from '../../../utils/styles'\n\nexport type DateInputSize = 'sm' | 'md' | 'lg'\nexport type DateInputVariant = 'outline' | 'filled' | 'flushed'\nexport type DateInputType = 'date' | 'datetime-local' | 'time' | 'month' | 'week'\n\nexport interface DateInputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {\n /** Input size */\n size?: DateInputSize\n /** Input variant */\n variant?: DateInputVariant\n /** Type of date input */\n type?: DateInputType\n /** Input label */\n label?: ReactNode\n /** Helper text below input */\n helperText?: ReactNode\n /** Error message */\n error?: ReactNode\n /** Whether the input is invalid */\n isInvalid?: boolean\n /** Icon on the left side */\n leftIcon?: ReactNode\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst sizeConfig: Record<DateInputSize, { height: number; fontSize: number; padding: number; iconSize: number }> = {\n sm: { height: 32, fontSize: 13, padding: 10, iconSize: 14 },\n md: { height: 40, fontSize: 14, padding: 12, iconSize: 16 },\n lg: { height: 48, fontSize: 16, padding: 14, iconSize: 18 },\n}\n\nexport const DateInput = forwardRef<HTMLInputElement, DateInputProps>(function DateInput(\n {\n size = 'md',\n variant = 'outline',\n type = 'date',\n label,\n helperText,\n error,\n isInvalid = false,\n leftIcon,\n disabled = false,\n className,\n style,\n testId,\n ...props\n },\n ref\n) {\n const [isFocused, setIsFocused] = useState(false)\n const [isHovered, setIsHovered] = useState(false)\n const config = sizeConfig[size]\n const hasError = isInvalid || !!error\n\n const containerStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 6,\n ...style,\n }\n\n const labelStyle: CSSProperties = {\n fontSize: config.fontSize - 1,\n fontWeight: 500,\n color: 'var(--brycks-foreground-default)',\n }\n\n const inputContainerStyle: CSSProperties = {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n }\n\n const getInputStyle = (): CSSProperties => {\n const baseStyle: CSSProperties = {\n width: '100%',\n height: config.height,\n fontSize: config.fontSize,\n fontFamily: 'inherit',\n color: 'var(--brycks-foreground-default)',\n backgroundColor: variant === 'filled' ? 'var(--brycks-background-muted)' : 'var(--brycks-background-input)',\n paddingLeft: leftIcon ? config.padding + config.iconSize + 8 : config.padding,\n paddingRight: config.padding,\n transition: 'all 150ms ease-out',\n outline: 'none',\n opacity: disabled ? 0.5 : 1,\n cursor: disabled ? 'not-allowed' : 'pointer',\n }\n\n if (variant === 'flushed') {\n return {\n ...baseStyle,\n border: 'none',\n borderBottom: `2px solid ${\n hasError\n ? 'var(--brycks-error-default)'\n : isFocused\n ? 'var(--brycks-primary-default)'\n : 'var(--brycks-border-default)'\n }`,\n borderRadius: 0,\n paddingLeft: leftIcon ? config.iconSize + 8 : 0,\n paddingRight: 0,\n backgroundColor: 'transparent',\n }\n }\n\n return {\n ...baseStyle,\n border: `1px solid ${\n hasError\n ? 'var(--brycks-error-default)'\n : isFocused\n ? 'var(--brycks-primary-default)'\n : isHovered\n ? 'var(--brycks-border-strong)'\n : 'var(--brycks-border-default)'\n }`,\n borderRadius: 'var(--brycks-radius-md)',\n boxShadow: isFocused && !hasError\n ? '0 0 0 3px var(--brycks-primary-100)'\n : isFocused && hasError\n ? '0 0 0 3px var(--brycks-error-100)'\n : undefined,\n }\n }\n\n const iconStyle: CSSProperties = {\n position: 'absolute',\n left: variant === 'flushed' ? 0 : config.padding,\n color: 'var(--brycks-foreground-muted)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: config.iconSize,\n height: config.iconSize,\n pointerEvents: 'none',\n }\n\n const helperStyle: CSSProperties = {\n fontSize: config.fontSize - 2,\n color: hasError ? 'var(--brycks-error-default)' : 'var(--brycks-foreground-muted)',\n }\n\n return (\n <div\n className={cx('brycks-date-input', `brycks-date-input--${size}`, `brycks-date-input--${variant}`, className)}\n style={containerStyle}\n >\n {label && <label style={labelStyle}>{label}</label>}\n <div\n style={inputContainerStyle}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n {leftIcon && <span style={iconStyle}>{leftIcon}</span>}\n <input\n ref={ref}\n type={type}\n disabled={disabled}\n style={getInputStyle()}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n data-testid={testId}\n {...props}\n />\n </div>\n {(helperText || error) && (\n <span style={helperStyle}>{error || helperText}</span>\n )}\n </div>\n )\n})\n\nDateInput.displayName = 'DateInput'\n","/**\n * FileInput Component\n *\n * Accessible file upload input with drag-and-drop support.\n * Supports multiple files and file type restrictions.\n */\n\nimport {\n forwardRef,\n useState,\n useRef,\n useCallback,\n type CSSProperties,\n type InputHTMLAttributes,\n type DragEvent,\n type ReactNode,\n} from 'react'\nimport { cx } from '../../../utils/styles'\n\nexport type FileInputSize = 'sm' | 'md' | 'lg'\nexport type FileInputVariant = 'default' | 'dropzone'\n\nexport interface FileInputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'type' | 'onChange' | 'value'> {\n /** Input size */\n size?: FileInputSize\n /** Input variant */\n variant?: FileInputVariant\n /** Accepted file types (e.g., \"image/*,.pdf\") */\n accept?: string\n /** Whether multiple files can be selected */\n multiple?: boolean\n /** Maximum file size in bytes */\n maxSize?: number\n /** Label text */\n label?: ReactNode\n /** Description text inside dropzone */\n description?: ReactNode\n /** Error message */\n error?: ReactNode\n /** Whether the input is invalid */\n isInvalid?: boolean\n /** Callback when files are selected */\n onChange?: (files: File[]) => void\n /** Icon to display in dropzone */\n icon?: ReactNode\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst sizeConfig: Record<FileInputSize, { height: number; fontSize: number; padding: number; iconSize: number }> = {\n sm: { height: 80, fontSize: 12, padding: 16, iconSize: 24 },\n md: { height: 120, fontSize: 14, padding: 24, iconSize: 32 },\n lg: { height: 160, fontSize: 16, padding: 32, iconSize: 40 },\n}\n\nfunction UploadIcon({ size }: { size: number }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M7 16a4 4 0 01-.88-7.903A5 5 0 1115.9 6L16 6a5 5 0 011 9.9M15 13l-3-3m0 0l-3 3m3-3v12\" />\n </svg>\n )\n}\n\nexport const FileInput = forwardRef<HTMLInputElement, FileInputProps>(function FileInput(\n {\n size = 'md',\n variant = 'dropzone',\n accept,\n multiple = false,\n maxSize,\n label,\n description,\n error,\n isInvalid = false,\n onChange,\n icon,\n disabled = false,\n className,\n style,\n testId,\n ...props\n },\n ref\n) {\n const [isDragOver, setIsDragOver] = useState(false)\n const [isFocused, setIsFocused] = useState(false)\n const inputRef = useRef<HTMLInputElement>(null)\n const config = sizeConfig[size]\n const hasError = isInvalid || !!error\n\n const handleFiles = useCallback(\n (fileList: FileList | null) => {\n if (!fileList || fileList.length === 0) return\n\n let files = Array.from(fileList)\n\n // Filter by max size if specified\n if (maxSize) {\n files = files.filter((file) => file.size <= maxSize)\n }\n\n // If not multiple, only take first file\n if (!multiple && files.length > 1) {\n files = [files[0]]\n }\n\n onChange?.(files)\n },\n [maxSize, multiple, onChange]\n )\n\n const handleDragOver = useCallback((e: DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n if (!disabled) {\n setIsDragOver(true)\n }\n }, [disabled])\n\n const handleDragLeave = useCallback((e: DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n setIsDragOver(false)\n }, [])\n\n const handleDrop = useCallback(\n (e: DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n setIsDragOver(false)\n\n if (!disabled) {\n handleFiles(e.dataTransfer.files)\n }\n },\n [disabled, handleFiles]\n )\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n handleFiles(e.target.files)\n // Reset input value to allow selecting the same file again\n if (inputRef.current) {\n inputRef.current.value = ''\n }\n },\n [handleFiles]\n )\n\n const handleClick = useCallback(() => {\n if (!disabled) {\n inputRef.current?.click()\n }\n }, [disabled])\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if ((e.key === 'Enter' || e.key === ' ') && !disabled) {\n e.preventDefault()\n inputRef.current?.click()\n }\n },\n [disabled]\n )\n\n const containerStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 6,\n ...style,\n }\n\n const labelStyle: CSSProperties = {\n fontSize: config.fontSize,\n fontWeight: 500,\n color: 'var(--brycks-foreground-default)',\n }\n\n const dropzoneStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 8,\n minHeight: config.height,\n padding: config.padding,\n border: `2px dashed ${\n hasError\n ? 'var(--brycks-error-default)'\n : isDragOver\n ? 'var(--brycks-primary-default)'\n : isFocused\n ? 'var(--brycks-primary-default)'\n : 'var(--brycks-border-default)'\n }`,\n borderRadius: 'var(--brycks-radius-lg)',\n backgroundColor: isDragOver\n ? 'var(--brycks-primary-50)'\n : 'var(--brycks-background-muted)',\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.5 : 1,\n transition: 'all 150ms ease-out',\n outline: 'none',\n }\n\n const iconContainerStyle: CSSProperties = {\n color: isDragOver\n ? 'var(--brycks-primary-default)'\n : 'var(--brycks-foreground-muted)',\n transition: 'color 150ms ease-out',\n }\n\n const textContainerStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: 4,\n textAlign: 'center',\n }\n\n const primaryTextStyle: CSSProperties = {\n fontSize: config.fontSize,\n fontWeight: 500,\n color: 'var(--brycks-foreground-default)',\n }\n\n const secondaryTextStyle: CSSProperties = {\n fontSize: config.fontSize - 2,\n color: 'var(--brycks-foreground-muted)',\n }\n\n const browseStyle: CSSProperties = {\n color: 'var(--brycks-primary-default)',\n fontWeight: 500,\n }\n\n const errorStyle: CSSProperties = {\n fontSize: config.fontSize - 2,\n color: 'var(--brycks-error-default)',\n }\n\n const defaultDescription = multiple\n ? 'Drag files here or click to browse'\n : 'Drag a file here or click to browse'\n\n return (\n <div\n className={cx('brycks-file-input', `brycks-file-input--${size}`, `brycks-file-input--${variant}`, className)}\n style={containerStyle}\n >\n {label && <label style={labelStyle}>{label}</label>}\n <div\n style={dropzoneStyle}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n tabIndex={disabled ? -1 : 0}\n role=\"button\"\n aria-label={String(description) || defaultDescription}\n >\n <div style={iconContainerStyle}>\n {icon || <UploadIcon size={config.iconSize} />}\n </div>\n <div style={textContainerStyle}>\n <span style={primaryTextStyle}>\n {isDragOver ? 'Drop files here' : (\n <>\n <span style={browseStyle}>Click to browse</span> or drag files here\n </>\n )}\n </span>\n {description && <span style={secondaryTextStyle}>{description}</span>}\n </div>\n </div>\n {error && <span style={errorStyle}>{error}</span>}\n <input\n ref={(node) => {\n (inputRef as React.MutableRefObject<HTMLInputElement | null>).current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) ref.current = node\n }}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n onChange={handleChange}\n style={{ display: 'none' }}\n data-testid={testId}\n {...props}\n />\n </div>\n )\n})\n\nFileInput.displayName = 'FileInput'\n","/**\n * useId Hook\n *\n * Generates a stable unique ID for accessibility attributes.\n * Falls back to custom implementation for React < 18.\n */\n\nimport { useState, useEffect } from 'react'\n\nlet idCounter = 0\n\nfunction generateUniqueId(prefix: string): string {\n return `${prefix}-${++idCounter}`\n}\n\nexport function useId(prefix = 'brycks'): string {\n const [id, setId] = useState<string>('')\n\n useEffect(() => {\n setId(generateUniqueId(prefix))\n }, [prefix])\n\n // Return a stable ID even before effect runs\n return id || generateUniqueId(prefix)\n}\n\nexport function useIds(count: number, prefix = 'brycks'): string[] {\n const [ids, setIds] = useState<string[]>([])\n\n useEffect(() => {\n setIds(Array.from({ length: count }, () => generateUniqueId(prefix)))\n }, [count, prefix])\n\n return ids.length ? ids : Array.from({ length: count }, () => generateUniqueId(prefix))\n}\n","/**\n * FormField Component\n *\n * A wrapper component that provides consistent structure for form inputs.\n * Includes label, required indicator, helper text, and error message.\n */\n\nimport { forwardRef, type CSSProperties, type ReactNode, type HTMLAttributes } from 'react'\nimport { cx } from '../../../utils/styles'\nimport { useId } from '../../../hooks/useId'\n\nexport type FormFieldSize = 'sm' | 'md' | 'lg'\n\nexport interface FormFieldProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n /** Field size */\n size?: FormFieldSize\n /** Field label */\n label?: ReactNode\n /** Whether the field is required */\n required?: boolean\n /** Helper text below the field */\n helperText?: ReactNode\n /** Error message (also sets invalid state) */\n error?: ReactNode\n /** Whether the field is invalid */\n isInvalid?: boolean\n /** Whether the field is disabled */\n disabled?: boolean\n /** Custom ID for the field (auto-generated if not provided) */\n fieldId?: string\n /** Field orientation */\n orientation?: 'vertical' | 'horizontal'\n /** Label width for horizontal orientation */\n labelWidth?: number | string\n /** Custom class name */\n className?: string\n /** Children (form input) */\n children: ReactNode | ((props: { id: string; 'aria-describedby'?: string; 'aria-invalid'?: boolean }) => ReactNode)\n /** Test ID */\n testId?: string\n}\n\nconst sizeConfig: Record<FormFieldSize, { labelSize: number; helperSize: number; gap: number }> = {\n sm: { labelSize: 12, helperSize: 11, gap: 4 },\n md: { labelSize: 14, helperSize: 12, gap: 6 },\n lg: { labelSize: 16, helperSize: 14, gap: 8 },\n}\n\nexport const FormField = forwardRef<HTMLDivElement, FormFieldProps>(function FormField(\n {\n size = 'md',\n label,\n required = false,\n helperText,\n error,\n isInvalid = false,\n disabled = false,\n fieldId,\n orientation = 'vertical',\n labelWidth = 120,\n className,\n style,\n children,\n testId,\n ...props\n },\n ref\n) {\n const generatedId = useId('field')\n const id = fieldId || generatedId\n const helperId = `${id}-helper`\n const errorId = `${id}-error`\n const config = sizeConfig[size]\n const hasError = isInvalid || !!error\n\n const containerStyle: CSSProperties = {\n display: 'flex',\n flexDirection: orientation === 'horizontal' ? 'row' : 'column',\n gap: orientation === 'horizontal' ? 16 : config.gap,\n alignItems: orientation === 'horizontal' ? 'flex-start' : 'stretch',\n opacity: disabled ? 0.6 : 1,\n ...style,\n }\n\n const labelContainerStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'baseline',\n gap: 4,\n ...(orientation === 'horizontal' && {\n width: labelWidth,\n flexShrink: 0,\n paddingTop: size === 'lg' ? 14 : size === 'md' ? 10 : 8,\n }),\n }\n\n const labelStyle: CSSProperties = {\n fontSize: config.labelSize,\n fontWeight: 500,\n color: disabled\n ? 'var(--brycks-foreground-muted)'\n : 'var(--brycks-foreground-default)',\n lineHeight: 1.4,\n }\n\n const requiredStyle: CSSProperties = {\n color: 'var(--brycks-error-default)',\n marginLeft: 2,\n }\n\n const contentStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: config.gap,\n flex: 1,\n }\n\n const helperStyle: CSSProperties = {\n fontSize: config.helperSize,\n color: hasError ? 'var(--brycks-error-default)' : 'var(--brycks-foreground-muted)',\n lineHeight: 1.4,\n }\n\n // Props to pass to the child input\n const childProps = {\n id,\n 'aria-describedby': helperText || error ? (error ? errorId : helperId) : undefined,\n 'aria-invalid': hasError ? true : undefined,\n }\n\n return (\n <div\n ref={ref}\n className={cx('brycks-form-field', `brycks-form-field--${size}`, `brycks-form-field--${orientation}`, className)}\n style={containerStyle}\n data-testid={testId}\n {...props}\n >\n {label && (\n <div style={labelContainerStyle}>\n <label htmlFor={id} style={labelStyle}>\n {label}\n {required && <span style={requiredStyle} aria-hidden=\"true\">*</span>}\n </label>\n </div>\n )}\n <div style={contentStyle}>\n {typeof children === 'function' ? children(childProps) : children}\n {(helperText || error) && (\n <span\n id={error ? errorId : helperId}\n style={helperStyle}\n role={error ? 'alert' : undefined}\n >\n {error || helperText}\n </span>\n )}\n </div>\n </div>\n )\n})\n\nFormField.displayName = 'FormField'\n","/**\n * FieldError Component\n *\n * Displays form field error messages with consistent styling.\n * Includes an optional icon and proper accessibility attributes.\n */\n\nimport { forwardRef, type CSSProperties, type HTMLAttributes, type ReactNode } from 'react'\nimport { cx } from '../../../utils/styles'\n\nexport type FieldErrorSize = 'sm' | 'md' | 'lg'\n\nexport interface FieldErrorProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'children'> {\n /** Error size */\n size?: FieldErrorSize\n /** Error message */\n children: ReactNode\n /** Whether to show the error icon */\n showIcon?: boolean\n /** Custom icon */\n icon?: ReactNode\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst sizeConfig: Record<FieldErrorSize, { fontSize: number; iconSize: number; gap: number }> = {\n sm: { fontSize: 11, iconSize: 12, gap: 4 },\n md: { fontSize: 12, iconSize: 14, gap: 6 },\n lg: { fontSize: 14, iconSize: 16, gap: 8 },\n}\n\nfunction ErrorIcon({ size }: { size: number }) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M8 5v3m0 2.5h.007M14 8A6 6 0 112 8a6 6 0 0112 0z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )\n}\n\nexport const FieldError = forwardRef<HTMLSpanElement, FieldErrorProps>(function FieldError(\n {\n size = 'md',\n children,\n showIcon = true,\n icon,\n className,\n style,\n testId,\n ...props\n },\n ref\n) {\n const config = sizeConfig[size]\n\n const errorStyle: CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n gap: config.gap,\n fontSize: config.fontSize,\n fontWeight: 500,\n color: 'var(--brycks-error-default)',\n lineHeight: 1.4,\n ...style,\n }\n\n const iconStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n }\n\n if (!children) return null\n\n return (\n <span\n ref={ref}\n className={cx('brycks-field-error', `brycks-field-error--${size}`, className)}\n style={errorStyle}\n role=\"alert\"\n aria-live=\"polite\"\n data-testid={testId}\n {...props}\n >\n {showIcon && (\n <span style={iconStyle}>\n {icon || <ErrorIcon size={config.iconSize} />}\n </span>\n )}\n {children}\n </span>\n )\n})\n\nFieldError.displayName = 'FieldError'\n","/**\n * Form Component\n *\n * A semantic form wrapper component with consistent styling and spacing.\n * Handles form submission and provides a consistent layout for form fields.\n *\n * @module components/form/Form\n */\n\nimport { forwardRef, type FormHTMLAttributes, type ReactNode } from 'react'\nimport { spacing } from '../../../design-system'\nimport { cx } from '../../../utils/styles'\n\nexport type FormGap = 'sm' | 'md' | 'lg' | 'xl'\n\nexport interface FormProps extends FormHTMLAttributes<HTMLFormElement> {\n /** Gap between form groups */\n gap?: FormGap\n /** Disable the form */\n disabled?: boolean\n /** Form children */\n children: ReactNode\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst gapValues: Record<FormGap, number> = {\n sm: spacing[3],\n md: spacing[4],\n lg: spacing[6],\n xl: spacing[8],\n}\n\nexport const Form = forwardRef<HTMLFormElement, FormProps>(function Form(\n {\n gap = 'md',\n disabled,\n children,\n className,\n style,\n testId,\n onSubmit,\n ...props\n },\n ref\n) {\n const formStyle = {\n display: 'flex',\n flexDirection: 'column' as const,\n gap: gapValues[gap],\n ...style,\n }\n\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n if (disabled) {\n e.preventDefault()\n return\n }\n onSubmit?.(e)\n }\n\n return (\n <form\n ref={ref}\n className={cx(\n 'brycks-form',\n `brycks-form--gap-${gap}`,\n disabled && 'brycks-form--disabled',\n className\n )}\n style={formStyle}\n onSubmit={handleSubmit}\n aria-disabled={disabled}\n data-testid={testId}\n {...props}\n >\n <fieldset\n disabled={disabled}\n style={{\n border: 'none',\n padding: 0,\n margin: 0,\n minWidth: 0,\n }}\n >\n {children}\n </fieldset>\n </form>\n )\n})\n\nForm.displayName = 'Form'\n","/**\n * FormLabel Component\n *\n * A semantic label component for form fields with consistent styling.\n * Supports required indicator and description text.\n *\n * @module components/form/FormLabel\n */\n\nimport { forwardRef, type LabelHTMLAttributes, type ReactNode } from 'react'\nimport { textStyles, spacing, fontSizes, fontWeights } from '../../../design-system'\nimport { cx } from '../../../utils/styles'\n\nexport type FormLabelSize = 'sm' | 'md' | 'lg'\n\nexport interface FormLabelProps extends LabelHTMLAttributes<HTMLLabelElement> {\n /** Label text */\n children: ReactNode\n /** Label size */\n size?: FormLabelSize\n /** Whether the field is required */\n required?: boolean\n /** Whether the field is disabled */\n disabled?: boolean\n /** Optional description text */\n description?: ReactNode\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst sizeStyles: Record<FormLabelSize, { fontSize: number }> = {\n sm: { fontSize: fontSizes.xs },\n md: { fontSize: fontSizes.sm },\n lg: { fontSize: fontSizes.md },\n}\n\nexport const FormLabel = forwardRef<HTMLLabelElement, FormLabelProps>(function FormLabel(\n {\n children,\n size = 'md',\n required,\n disabled,\n description,\n className,\n style,\n testId,\n ...props\n },\n ref\n) {\n const config = sizeStyles[size]\n\n const labelStyle = {\n display: 'block',\n fontFamily: textStyles.label.fontFamily,\n fontSize: config.fontSize,\n fontWeight: fontWeights.medium,\n lineHeight: textStyles.label.lineHeight,\n color: disabled ? 'var(--brycks-foreground-muted)' : 'var(--brycks-foreground-default)',\n cursor: disabled ? 'not-allowed' : 'pointer',\n marginBottom: spacing[1],\n ...style,\n }\n\n const requiredStyle = {\n color: 'var(--brycks-error-default)',\n marginLeft: spacing[0.5],\n }\n\n const descriptionStyle = {\n display: 'block',\n fontSize: fontSizes.xs,\n fontWeight: fontWeights.regular,\n color: 'var(--brycks-foreground-muted)',\n marginTop: spacing[0.5],\n }\n\n return (\n <label\n ref={ref}\n className={cx(\n 'brycks-form-label',\n `brycks-form-label--${size}`,\n disabled && 'brycks-form-label--disabled',\n className\n )}\n style={labelStyle}\n data-testid={testId}\n {...props}\n >\n <span className=\"brycks-form-label__text\">\n {children}\n {required && (\n <span className=\"brycks-form-label__required\" style={requiredStyle} aria-hidden=\"true\">\n *\n </span>\n )}\n </span>\n {description && (\n <span className=\"brycks-form-label__description\" style={descriptionStyle}>\n {description}\n </span>\n )}\n </label>\n )\n})\n\nFormLabel.displayName = 'FormLabel'\n","/**\n * FormGroup Component\n *\n * A container component that groups a label with its form input.\n * Provides consistent spacing and layout for form fields.\n *\n * @module components/form/FormGroup\n */\n\nimport { forwardRef, type HTMLAttributes, type ReactNode, useId } from 'react'\nimport { spacing } from '../../../design-system'\nimport { cx } from '../../../utils/styles'\nimport { FormLabel, type FormLabelSize } from '../FormLabel'\n\nexport type FormGroupGap = 'none' | 'xs' | 'sm' | 'md'\n\nexport interface FormGroupProps extends HTMLAttributes<HTMLDivElement> {\n /** Label text for the form field */\n label?: ReactNode\n /** Form field ID - auto-generated if not provided */\n fieldId?: string\n /** Label size */\n labelSize?: FormLabelSize\n /** Whether the field is required */\n required?: boolean\n /** Whether the field is disabled */\n disabled?: boolean\n /** Optional description text below the label */\n description?: ReactNode\n /** Error message to display */\n error?: ReactNode\n /** Helper text to display below the input */\n helperText?: ReactNode\n /** Gap between label and input */\n gap?: FormGroupGap\n /** Children (the form input) */\n children: ReactNode\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst gapValues: Record<FormGroupGap, number> = {\n none: 0,\n xs: spacing[0.5],\n sm: spacing[1],\n md: spacing[1.5],\n}\n\nexport const FormGroup = forwardRef<HTMLDivElement, FormGroupProps>(function FormGroup(\n {\n label,\n fieldId,\n labelSize = 'md',\n required,\n disabled,\n description,\n error,\n helperText,\n gap = 'sm',\n children,\n className,\n style,\n testId,\n ...props\n },\n ref\n) {\n const generatedId = useId()\n const id = fieldId || generatedId\n\n const containerStyle = {\n display: 'flex',\n flexDirection: 'column' as const,\n gap: gapValues[gap],\n ...style,\n }\n\n const messageStyle = {\n fontSize: '0.75rem',\n lineHeight: 1.4,\n marginTop: spacing[0.5],\n }\n\n const errorStyle = {\n ...messageStyle,\n color: 'var(--brycks-error-default)',\n }\n\n const helperStyle = {\n ...messageStyle,\n color: 'var(--brycks-foreground-muted)',\n }\n\n return (\n <div\n ref={ref}\n className={cx(\n 'brycks-form-group',\n !!error && 'brycks-form-group--error',\n !!disabled && 'brycks-form-group--disabled',\n className\n )}\n style={containerStyle}\n data-testid={testId}\n {...props}\n >\n {label && (\n <FormLabel\n htmlFor={id}\n size={labelSize}\n required={required}\n disabled={disabled}\n description={description}\n >\n {label}\n </FormLabel>\n )}\n {children}\n {error && (\n <span className=\"brycks-form-group__error\" style={errorStyle} role=\"alert\">\n {error}\n </span>\n )}\n {!error && helperText && (\n <span className=\"brycks-form-group__helper\" style={helperStyle}>\n {helperText}\n </span>\n )}\n </div>\n )\n})\n\nFormGroup.displayName = 'FormGroup'\n","/**\r\n * Modal Component\r\n *\r\n * Accessible modal dialog with smooth Apple-inspired animations.\r\n * Supports focus trapping and keyboard navigation.\r\n */\r\n\r\nimport {\r\n forwardRef,\r\n useEffect,\r\n useRef,\r\n useCallback,\r\n type CSSProperties,\r\n type ReactNode,\r\n type HTMLAttributes,\r\n} from 'react'\r\nimport { createPortal } from 'react-dom'\r\nimport { cx } from '../../../utils/styles'\r\n\r\nexport type ModalSize = 'sm' | 'md' | 'lg' | 'xl' | 'full'\r\n\r\nexport interface ModalProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\r\n /** Whether the modal is open */\r\n isOpen: boolean\r\n /** Callback when modal should close */\r\n onClose: () => void\r\n /** Modal size */\r\n size?: ModalSize\r\n /** Modal title */\r\n title?: ReactNode\r\n /** Modal description */\r\n description?: ReactNode\r\n /** Whether to close on overlay click */\r\n closeOnOverlayClick?: boolean\r\n /** Whether to close on escape key */\r\n closeOnEscape?: boolean\r\n /** Whether to show close button */\r\n showCloseButton?: boolean\r\n /** Custom class name */\r\n className?: string\r\n /** Test ID */\r\n testId?: string\r\n /** Modal content */\r\n children?: ReactNode\r\n}\r\n\r\nconst sizeWidths: Record<ModalSize, string> = {\r\n sm: '400px',\r\n md: '500px',\r\n lg: '640px',\r\n xl: '800px',\r\n full: 'calc(100vw - 48px)',\r\n}\r\n\r\n/** Close icon */\r\nfunction CloseIcon() {\r\n return (\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M4 4L12 12M12 4L4 12\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n />\r\n </svg>\r\n )\r\n}\r\n\r\nexport const Modal = forwardRef<HTMLDivElement, ModalProps>(function Modal(\r\n {\r\n isOpen,\r\n onClose,\r\n size = 'md',\r\n title,\r\n description,\r\n closeOnOverlayClick = true,\r\n closeOnEscape = true,\r\n showCloseButton = true,\r\n className,\r\n style,\r\n testId,\r\n children,\r\n ...props\r\n },\r\n ref\r\n) {\r\n const modalRef = useRef<HTMLDivElement>(null)\r\n const previousActiveElement = useRef<HTMLElement | null>(null)\r\n\r\n // Focus trap and keyboard handling\r\n useEffect(() => {\r\n if (!isOpen) return\r\n\r\n previousActiveElement.current = document.activeElement as HTMLElement\r\n const modal = modalRef.current\r\n if (modal) {\r\n modal.focus()\r\n }\r\n\r\n const handleKeyDown = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape' && closeOnEscape) {\r\n onClose()\r\n return\r\n }\r\n\r\n if (e.key === 'Tab' && modal) {\r\n const focusableElements = modal.querySelectorAll<HTMLElement>(\r\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\r\n )\r\n const firstElement = focusableElements[0]\r\n const lastElement = focusableElements[focusableElements.length - 1]\r\n\r\n if (e.shiftKey && document.activeElement === firstElement) {\r\n e.preventDefault()\r\n lastElement?.focus()\r\n } else if (!e.shiftKey && document.activeElement === lastElement) {\r\n e.preventDefault()\r\n firstElement?.focus()\r\n }\r\n }\r\n }\r\n\r\n document.addEventListener('keydown', handleKeyDown)\r\n document.body.style.overflow = 'hidden'\r\n\r\n return () => {\r\n document.removeEventListener('keydown', handleKeyDown)\r\n document.body.style.overflow = ''\r\n previousActiveElement.current?.focus()\r\n }\r\n }, [isOpen, closeOnEscape, onClose])\r\n\r\n const handleOverlayClick = useCallback(\r\n (e: React.MouseEvent) => {\r\n if (e.target === e.currentTarget && closeOnOverlayClick) {\r\n onClose()\r\n }\r\n },\r\n [closeOnOverlayClick, onClose]\r\n )\r\n\r\n if (!isOpen) return null\r\n\r\n const overlayStyle: CSSProperties = {\r\n position: 'fixed',\r\n inset: 0,\r\n zIndex: 'var(--brycks-z-modal)',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: 24,\r\n backgroundColor: 'var(--brycks-background-overlay)',\r\n backdropFilter: 'blur(4px)',\r\n animation: 'brycks-fade-in 200ms ease-out',\r\n }\r\n\r\n const modalStyle: CSSProperties = {\r\n position: 'relative',\r\n width: '100%',\r\n maxWidth: sizeWidths[size],\r\n maxHeight: size === 'full' ? 'calc(100vh - 48px)' : '85vh',\r\n backgroundColor: 'var(--brycks-background-elevated)',\r\n borderRadius: 'var(--brycks-radius-xl)',\r\n boxShadow: 'var(--brycks-shadow-2xl)',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n overflow: 'hidden',\r\n animation: 'brycks-scale-in 200ms cubic-bezier(0.34, 1.56, 0.64, 1)',\r\n outline: 'none',\r\n ...style,\r\n }\r\n\r\n const headerStyle: CSSProperties = {\r\n display: 'flex',\r\n alignItems: 'flex-start',\r\n justifyContent: 'space-between',\r\n padding: '20px 24px',\r\n borderBottom: '1px solid var(--brycks-border-muted)',\r\n }\r\n\r\n const titleContainerStyle: CSSProperties = {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: 4,\r\n }\r\n\r\n const titleStyle: CSSProperties = {\r\n fontSize: 18,\r\n fontWeight: 600,\r\n color: 'var(--brycks-foreground-default)',\r\n margin: 0,\r\n lineHeight: 1.3,\r\n }\r\n\r\n const descriptionStyle: CSSProperties = {\r\n fontSize: 14,\r\n color: 'var(--brycks-foreground-muted)',\r\n margin: 0,\r\n }\r\n\r\n const closeButtonStyle: CSSProperties = {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n width: 32,\r\n height: 32,\r\n borderRadius: 'var(--brycks-radius-md)',\r\n color: 'var(--brycks-foreground-muted)',\r\n transition: 'all 150ms ease-out',\r\n marginLeft: 12,\r\n flexShrink: 0,\r\n }\r\n\r\n const contentStyle: CSSProperties = {\r\n flex: 1,\r\n overflow: 'auto',\r\n padding: 24,\r\n }\r\n\r\n const modalContent = (\r\n <>\r\n <style>\r\n {`\r\n @keyframes brycks-fade-in {\r\n from { opacity: 0; }\r\n to { opacity: 1; }\r\n }\r\n @keyframes brycks-scale-in {\r\n from { opacity: 0; transform: scale(0.95); }\r\n to { opacity: 1; transform: scale(1); }\r\n }\r\n `}\r\n </style>\r\n <div\r\n className=\"brycks-modal-overlay\"\r\n style={overlayStyle}\r\n onClick={handleOverlayClick}\r\n aria-hidden=\"true\"\r\n >\r\n <div\r\n ref={(node) => {\r\n (modalRef as React.MutableRefObject<HTMLDivElement | null>).current = node\r\n if (typeof ref === 'function') ref(node)\r\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node\r\n }}\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n aria-labelledby={title ? 'brycks-modal-title' : undefined}\r\n aria-describedby={description ? 'brycks-modal-description' : undefined}\r\n className={cx('brycks-modal', `brycks-modal--${size}`, className)}\r\n style={modalStyle}\r\n tabIndex={-1}\r\n data-testid={testId}\r\n {...props}\r\n >\r\n {(title || showCloseButton) && (\r\n <div className=\"brycks-modal-header\" style={headerStyle}>\r\n <div style={titleContainerStyle}>\r\n {title && (\r\n <h2 id=\"brycks-modal-title\" style={titleStyle}>\r\n {title}\r\n </h2>\r\n )}\r\n {description && (\r\n <p id=\"brycks-modal-description\" style={descriptionStyle}>\r\n {description}\r\n </p>\r\n )}\r\n </div>\r\n {showCloseButton && (\r\n <button\r\n type=\"button\"\r\n className=\"brycks-modal-close\"\r\n style={closeButtonStyle}\r\n onClick={onClose}\r\n aria-label=\"Close modal\"\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\r\n e.currentTarget.style.color = 'var(--brycks-foreground-default)'\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.backgroundColor = 'transparent'\r\n e.currentTarget.style.color = 'var(--brycks-foreground-muted)'\r\n }}\r\n >\r\n <CloseIcon />\r\n </button>\r\n )}\r\n </div>\r\n )}\r\n\r\n <div className=\"brycks-modal-content\" style={contentStyle}>\r\n {children}\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n )\r\n\r\n return createPortal(modalContent, document.body)\r\n})\r\n\r\nModal.displayName = 'Modal'\r\n","/**\r\n * Alert Component\r\n *\r\n * Contextual feedback message for user actions and states.\r\n * Clean design with subtle color coding and optional icons.\r\n */\r\n\r\nimport React, {\r\n forwardRef,\r\n type CSSProperties,\r\n type ReactNode,\r\n type HTMLAttributes,\r\n} from 'react'\r\nimport { cx } from '../../../utils/styles'\r\n\r\nexport type AlertIntent = 'info' | 'success' | 'warning' | 'error'\r\nexport type AlertVariant = 'subtle' | 'solid' | 'outline'\r\n\r\nexport interface AlertProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\r\n /** Visual intent/status */\r\n intent?: AlertIntent\r\n /** Visual variant */\r\n variant?: AlertVariant\r\n /** Alert title */\r\n title?: ReactNode\r\n /** Custom icon */\r\n icon?: ReactNode\r\n /** Whether to show default icon */\r\n showIcon?: boolean\r\n /** Action element (button, link) */\r\n action?: ReactNode\r\n /** Whether alert can be dismissed */\r\n isDismissible?: boolean\r\n /** Callback when dismissed */\r\n onDismiss?: () => void\r\n /** Custom class name */\r\n className?: string\r\n /** Test ID */\r\n testId?: string\r\n /** Alert content */\r\n children?: ReactNode\r\n}\r\n\r\nconst intentConfig: Record<AlertIntent, { icon: React.JSX.Element; colors: Record<AlertVariant, CSSProperties> }> = {\r\n info: {\r\n icon: (\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <circle cx=\"9\" cy=\"9\" r=\"7.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\r\n <path d=\"M9 8V12\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\r\n <circle cx=\"9\" cy=\"5.5\" r=\"0.75\" fill=\"currentColor\" />\r\n </svg>\r\n ),\r\n colors: {\r\n subtle: {\r\n backgroundColor: 'var(--brycks-info-muted)',\r\n color: 'var(--brycks-info-default)',\r\n borderColor: 'transparent',\r\n },\r\n solid: {\r\n backgroundColor: 'var(--brycks-info-default)',\r\n color: 'var(--brycks-info-foreground)',\r\n borderColor: 'transparent',\r\n },\r\n outline: {\r\n backgroundColor: 'transparent',\r\n color: 'var(--brycks-info-default)',\r\n borderColor: 'var(--brycks-info-default)',\r\n },\r\n },\r\n },\r\n success: {\r\n icon: (\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <circle cx=\"9\" cy=\"9\" r=\"7.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\r\n <path d=\"M6 9L8 11L12 7\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\r\n </svg>\r\n ),\r\n colors: {\r\n subtle: {\r\n backgroundColor: 'var(--brycks-success-muted)',\r\n color: 'var(--brycks-success-default)',\r\n borderColor: 'transparent',\r\n },\r\n solid: {\r\n backgroundColor: 'var(--brycks-success-default)',\r\n color: 'var(--brycks-success-foreground)',\r\n borderColor: 'transparent',\r\n },\r\n outline: {\r\n backgroundColor: 'transparent',\r\n color: 'var(--brycks-success-default)',\r\n borderColor: 'var(--brycks-success-default)',\r\n },\r\n },\r\n },\r\n warning: {\r\n icon: (\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path d=\"M9 2L16.5 15H1.5L9 2Z\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinejoin=\"round\" />\r\n <path d=\"M9 7V10\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\r\n <circle cx=\"9\" cy=\"12.5\" r=\"0.75\" fill=\"currentColor\" />\r\n </svg>\r\n ),\r\n colors: {\r\n subtle: {\r\n backgroundColor: 'var(--brycks-warning-muted)',\r\n color: 'var(--brycks-warning-default)',\r\n borderColor: 'transparent',\r\n },\r\n solid: {\r\n backgroundColor: 'var(--brycks-warning-default)',\r\n color: 'var(--brycks-warning-foreground)',\r\n borderColor: 'transparent',\r\n },\r\n outline: {\r\n backgroundColor: 'transparent',\r\n color: 'var(--brycks-warning-default)',\r\n borderColor: 'var(--brycks-warning-default)',\r\n },\r\n },\r\n },\r\n error: {\r\n icon: (\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <circle cx=\"9\" cy=\"9\" r=\"7.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\r\n <path d=\"M6.5 6.5L11.5 11.5M11.5 6.5L6.5 11.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\r\n </svg>\r\n ),\r\n colors: {\r\n subtle: {\r\n backgroundColor: 'var(--brycks-error-muted)',\r\n color: 'var(--brycks-error-default)',\r\n borderColor: 'transparent',\r\n },\r\n solid: {\r\n backgroundColor: 'var(--brycks-error-default)',\r\n color: 'var(--brycks-error-foreground)',\r\n borderColor: 'transparent',\r\n },\r\n outline: {\r\n backgroundColor: 'transparent',\r\n color: 'var(--brycks-error-default)',\r\n borderColor: 'var(--brycks-error-default)',\r\n },\r\n },\r\n },\r\n}\r\n\r\nexport const Alert = forwardRef<HTMLDivElement, AlertProps>(function Alert(\r\n {\r\n intent = 'info',\r\n variant = 'subtle',\r\n title,\r\n icon,\r\n showIcon = true,\r\n action,\r\n isDismissible,\r\n onDismiss,\r\n className,\r\n style,\r\n testId,\r\n children,\r\n ...props\r\n },\r\n ref\r\n) {\r\n const config = intentConfig[intent]\r\n const variantColors = config.colors[variant]\r\n\r\n const alertStyle: CSSProperties = {\r\n display: 'flex',\r\n alignItems: 'flex-start',\r\n gap: 12,\r\n padding: '12px 16px',\r\n borderRadius: 'var(--brycks-radius-default)',\r\n border: `1px solid ${variantColors.borderColor}`,\r\n backgroundColor: variantColors.backgroundColor,\r\n color: variant === 'solid' ? variantColors.color : 'var(--brycks-foreground-default)',\r\n ...style,\r\n }\r\n\r\n const iconStyle: CSSProperties = {\r\n flexShrink: 0,\r\n color: variantColors.color,\r\n marginTop: 1,\r\n }\r\n\r\n const contentStyle: CSSProperties = {\r\n flex: 1,\r\n minWidth: 0,\r\n }\r\n\r\n const titleStyle: CSSProperties = {\r\n fontSize: 14,\r\n fontWeight: 600,\r\n marginBottom: children ? 4 : 0,\r\n color: variant === 'solid' ? variantColors.color : variantColors.color,\r\n }\r\n\r\n const descriptionStyle: CSSProperties = {\r\n fontSize: 14,\r\n lineHeight: 1.5,\r\n color: variant === 'solid' ? variantColors.color : 'var(--brycks-foreground-muted)',\r\n }\r\n\r\n const actionsStyle: CSSProperties = {\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: 8,\r\n flexShrink: 0,\r\n }\r\n\r\n const dismissButtonStyle: CSSProperties = {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n width: 24,\r\n height: 24,\r\n borderRadius: 'var(--brycks-radius-sm)',\r\n color: variant === 'solid' ? variantColors.color : 'var(--brycks-foreground-muted)',\r\n transition: 'all 150ms ease-out',\r\n opacity: 0.7,\r\n }\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n role=\"alert\"\r\n className={cx(\r\n 'brycks-alert',\r\n `brycks-alert--${intent}`,\r\n `brycks-alert--${variant}`,\r\n className\r\n )}\r\n style={alertStyle}\r\n data-testid={testId}\r\n {...props}\r\n >\r\n {showIcon && (\r\n <span className=\"brycks-alert-icon\" style={iconStyle}>\r\n {icon ?? config.icon}\r\n </span>\r\n )}\r\n\r\n <div className=\"brycks-alert-content\" style={contentStyle}>\r\n {title && <div className=\"brycks-alert-title\" style={titleStyle}>{title}</div>}\r\n {children && <div className=\"brycks-alert-description\" style={descriptionStyle}>{children}</div>}\r\n </div>\r\n\r\n {(action || isDismissible) && (\r\n <div className=\"brycks-alert-actions\" style={actionsStyle}>\r\n {action}\r\n {isDismissible && (\r\n <button\r\n type=\"button\"\r\n className=\"brycks-alert-dismiss\"\r\n style={dismissButtonStyle}\r\n onClick={onDismiss}\r\n aria-label=\"Dismiss alert\"\r\n onMouseEnter={(e) => { e.currentTarget.style.opacity = '1' }}\r\n onMouseLeave={(e) => { e.currentTarget.style.opacity = '0.7' }}\r\n >\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\r\n <path d=\"M3 3L11 11M11 3L3 11\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\r\n </svg>\r\n </button>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n )\r\n})\r\n\r\nAlert.displayName = 'Alert'\r\n","/**\r\n * Tooltip Component\r\n *\r\n * Lightweight tooltip for displaying additional information on hover.\r\n * Clean animation with proper positioning.\r\n */\r\n\r\nimport {\r\n forwardRef,\r\n useState,\r\n useRef,\r\n useEffect,\r\n useCallback,\r\n type CSSProperties,\r\n type ReactNode,\r\n type HTMLAttributes,\r\n} from 'react'\r\nimport { createPortal } from 'react-dom'\r\nimport { cx } from '../../../utils/styles'\r\n\r\nexport type TooltipPlacement = 'top' | 'bottom' | 'left' | 'right'\r\n\r\nexport interface TooltipProps extends Omit<HTMLAttributes<HTMLDivElement>, 'content'> {\r\n /** Tooltip content */\r\n content: ReactNode\r\n /** Placement relative to trigger */\r\n placement?: TooltipPlacement\r\n /** Delay before showing (ms) */\r\n delay?: number\r\n /** Whether tooltip is disabled */\r\n isDisabled?: boolean\r\n /** Custom class name */\r\n className?: string\r\n /** Test ID */\r\n testId?: string\r\n /** Trigger element */\r\n children: ReactNode\r\n}\r\n\r\nexport const Tooltip = forwardRef<HTMLDivElement, TooltipProps>(function Tooltip(\r\n {\r\n content,\r\n placement = 'top',\r\n delay = 200,\r\n isDisabled,\r\n className,\r\n testId,\r\n children,\r\n ...props\r\n },\r\n ref\r\n) {\r\n const [isVisible, setIsVisible] = useState(false)\r\n const [position, setPosition] = useState({ top: 0, left: 0 })\r\n const triggerRef = useRef<HTMLDivElement>(null)\r\n const tooltipRef = useRef<HTMLDivElement>(null)\r\n const timeoutRef = useRef<ReturnType<typeof setTimeout>>(null)\r\n\r\n const calculatePosition = useCallback(() => {\r\n if (!triggerRef.current || !tooltipRef.current) return\r\n\r\n const triggerRect = triggerRef.current.getBoundingClientRect()\r\n const tooltipRect = tooltipRef.current.getBoundingClientRect()\r\n const gap = 8\r\n\r\n let top = 0\r\n let left = 0\r\n\r\n switch (placement) {\r\n case 'top':\r\n top = triggerRect.top - tooltipRect.height - gap\r\n left = triggerRect.left + (triggerRect.width - tooltipRect.width) / 2\r\n break\r\n case 'bottom':\r\n top = triggerRect.bottom + gap\r\n left = triggerRect.left + (triggerRect.width - tooltipRect.width) / 2\r\n break\r\n case 'left':\r\n top = triggerRect.top + (triggerRect.height - tooltipRect.height) / 2\r\n left = triggerRect.left - tooltipRect.width - gap\r\n break\r\n case 'right':\r\n top = triggerRect.top + (triggerRect.height - tooltipRect.height) / 2\r\n left = triggerRect.right + gap\r\n break\r\n }\r\n\r\n // Keep tooltip within viewport\r\n const padding = 8\r\n left = Math.max(padding, Math.min(left, window.innerWidth - tooltipRect.width - padding))\r\n top = Math.max(padding, Math.min(top, window.innerHeight - tooltipRect.height - padding))\r\n\r\n setPosition({ top, left })\r\n }, [placement])\r\n\r\n useEffect(() => {\r\n if (isVisible) {\r\n calculatePosition()\r\n window.addEventListener('scroll', calculatePosition, true)\r\n window.addEventListener('resize', calculatePosition)\r\n }\r\n\r\n return () => {\r\n window.removeEventListener('scroll', calculatePosition, true)\r\n window.removeEventListener('resize', calculatePosition)\r\n }\r\n }, [isVisible, calculatePosition])\r\n\r\n const showTooltip = () => {\r\n if (isDisabled) return\r\n timeoutRef.current = setTimeout(() => {\r\n setIsVisible(true)\r\n }, delay)\r\n }\r\n\r\n const hideTooltip = () => {\r\n if (timeoutRef.current) {\r\n clearTimeout(timeoutRef.current)\r\n }\r\n setIsVisible(false)\r\n }\r\n\r\n useEffect(() => {\r\n return () => {\r\n if (timeoutRef.current) {\r\n clearTimeout(timeoutRef.current)\r\n }\r\n }\r\n }, [])\r\n\r\n const triggerStyle: CSSProperties = {\r\n display: 'inline-flex',\r\n }\r\n\r\n const tooltipStyle: CSSProperties = {\r\n position: 'fixed',\r\n top: position.top,\r\n left: position.left,\r\n zIndex: 'var(--brycks-z-tooltip)',\r\n maxWidth: 300,\r\n padding: '6px 10px',\r\n fontSize: 12,\r\n fontWeight: 500,\r\n lineHeight: 1.4,\r\n color: 'var(--brycks-foreground-inverse)',\r\n backgroundColor: 'var(--brycks-background-inverse)',\r\n borderRadius: 'var(--brycks-radius-md)',\r\n boxShadow: 'var(--brycks-shadow-lg)',\r\n pointerEvents: 'none',\r\n animation: 'brycks-tooltip-in 150ms ease-out',\r\n }\r\n\r\n const arrowStyle: CSSProperties = {\r\n position: 'absolute',\r\n width: 8,\r\n height: 8,\r\n backgroundColor: 'var(--brycks-background-inverse)',\r\n transform: 'rotate(45deg)',\r\n ...(placement === 'top' && { bottom: -4, left: '50%', marginLeft: -4 }),\r\n ...(placement === 'bottom' && { top: -4, left: '50%', marginLeft: -4 }),\r\n ...(placement === 'left' && { right: -4, top: '50%', marginTop: -4 }),\r\n ...(placement === 'right' && { left: -4, top: '50%', marginTop: -4 }),\r\n }\r\n\r\n return (\r\n <>\r\n <div\r\n ref={triggerRef}\r\n style={triggerStyle}\r\n onMouseEnter={showTooltip}\r\n onMouseLeave={hideTooltip}\r\n onFocus={showTooltip}\r\n onBlur={hideTooltip}\r\n >\r\n {children}\r\n </div>\r\n\r\n {isVisible &&\r\n createPortal(\r\n <>\r\n <style>\r\n {`\r\n @keyframes brycks-tooltip-in {\r\n from { opacity: 0; transform: scale(0.95); }\r\n to { opacity: 1; transform: scale(1); }\r\n }\r\n `}\r\n </style>\r\n <div\r\n ref={(node) => {\r\n (tooltipRef as React.MutableRefObject<HTMLDivElement | null>).current = node\r\n if (typeof ref === 'function') ref(node)\r\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node\r\n }}\r\n role=\"tooltip\"\r\n className={cx('brycks-tooltip', `brycks-tooltip--${placement}`, className)}\r\n style={tooltipStyle}\r\n data-testid={testId}\r\n {...props}\r\n >\r\n {content}\r\n <span style={arrowStyle} />\r\n </div>\r\n </>,\r\n document.body\r\n )}\r\n </>\r\n )\r\n})\r\n\r\nTooltip.displayName = 'Tooltip'\r\n","/**\n * Toast Component\n *\n * A notification toast with auto-dismiss and action support.\n * Includes a toast container for managing multiple toasts.\n */\n\nimport {\n forwardRef,\n useState,\n useEffect,\n useCallback,\n createContext,\n useContext,\n type CSSProperties,\n type ReactNode,\n type HTMLAttributes,\n} from 'react'\nimport { createPortal } from 'react-dom'\nimport { cx } from '../../../utils/styles'\n\nexport type ToastIntent = 'info' | 'success' | 'warning' | 'error'\nexport type ToastPosition = 'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right'\n\nexport interface ToastProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n /** Toast intent/type */\n intent?: ToastIntent\n /** Toast title */\n title?: ReactNode\n /** Toast description */\n description?: ReactNode\n /** Whether the toast is visible */\n isOpen?: boolean\n /** Duration in ms before auto-dismiss (0 = no auto-dismiss) */\n duration?: number\n /** Callback when toast should close */\n onClose?: () => void\n /** Whether to show close button */\n showCloseButton?: boolean\n /** Action button */\n action?: ReactNode\n /** Custom icon */\n icon?: ReactNode\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst intentConfig: Record<ToastIntent, { bg: string; border: string; icon: string }> = {\n info: {\n bg: 'var(--brycks-info-50)',\n border: 'var(--brycks-info-200)',\n icon: 'var(--brycks-info-default)',\n },\n success: {\n bg: 'var(--brycks-success-50)',\n border: 'var(--brycks-success-200)',\n icon: 'var(--brycks-success-default)',\n },\n warning: {\n bg: 'var(--brycks-warning-50)',\n border: 'var(--brycks-warning-200)',\n icon: 'var(--brycks-warning-default)',\n },\n error: {\n bg: 'var(--brycks-error-50)',\n border: 'var(--brycks-error-200)',\n icon: 'var(--brycks-error-default)',\n },\n}\n\nfunction ToastIcon({ intent }: { intent: ToastIntent }) {\n const paths: Record<ToastIntent, string> = {\n info: 'M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z',\n success: 'M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z',\n warning: 'M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z',\n error: 'M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z',\n }\n\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d={paths[intent]} />\n </svg>\n )\n}\n\nfunction CloseIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M4 4l8 8M12 4l-8 8\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n )\n}\n\nexport const Toast = forwardRef<HTMLDivElement, ToastProps>(function Toast(\n {\n intent = 'info',\n title,\n description,\n isOpen = true,\n duration = 5000,\n onClose,\n showCloseButton = true,\n action,\n icon,\n className,\n style,\n testId,\n ...props\n },\n ref\n) {\n const [isVisible, setIsVisible] = useState(isOpen)\n const [isExiting, setIsExiting] = useState(false)\n\n useEffect(() => {\n if (isOpen) {\n setIsVisible(true)\n setIsExiting(false)\n } else {\n setIsExiting(true)\n const timer = setTimeout(() => setIsVisible(false), 200)\n return () => clearTimeout(timer)\n }\n }, [isOpen])\n\n useEffect(() => {\n if (!isOpen || duration === 0) return\n\n const timer = setTimeout(() => {\n onClose?.()\n }, duration)\n\n return () => clearTimeout(timer)\n }, [isOpen, duration, onClose])\n\n if (!isVisible) return null\n\n const config = intentConfig[intent]\n\n const toastStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'flex-start',\n gap: 12,\n padding: '12px 16px',\n backgroundColor: config.bg,\n border: `1px solid ${config.border}`,\n borderRadius: 'var(--brycks-radius-lg)',\n boxShadow: 'var(--brycks-shadow-lg)',\n maxWidth: 400,\n animation: isExiting\n ? 'brycks-toast-out 200ms ease-in forwards'\n : 'brycks-toast-in 200ms ease-out',\n ...style,\n }\n\n const iconStyle: CSSProperties = {\n color: config.icon,\n flexShrink: 0,\n marginTop: 2,\n }\n\n const contentStyle: CSSProperties = {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n gap: 4,\n }\n\n const titleStyle: CSSProperties = {\n fontSize: 14,\n fontWeight: 600,\n color: 'var(--brycks-foreground-default)',\n lineHeight: 1.4,\n }\n\n const descriptionStyle: CSSProperties = {\n fontSize: 13,\n color: 'var(--brycks-foreground-muted)',\n lineHeight: 1.4,\n }\n\n const closeButtonStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 24,\n height: 24,\n borderRadius: 'var(--brycks-radius-sm)',\n color: 'var(--brycks-foreground-muted)',\n transition: 'all 150ms ease-out',\n flexShrink: 0,\n marginLeft: 'auto',\n }\n\n return (\n <>\n <style>\n {`\n @keyframes brycks-toast-in {\n from { opacity: 0; transform: translateY(-8px) scale(0.95); }\n to { opacity: 1; transform: translateY(0) scale(1); }\n }\n @keyframes brycks-toast-out {\n from { opacity: 1; transform: translateY(0) scale(1); }\n to { opacity: 0; transform: translateY(-8px) scale(0.95); }\n }\n `}\n </style>\n <div\n ref={ref}\n role=\"alert\"\n aria-live=\"polite\"\n className={cx('brycks-toast', `brycks-toast--${intent}`, className)}\n style={toastStyle}\n data-testid={testId}\n {...props}\n >\n <span style={iconStyle}>\n {icon || <ToastIcon intent={intent} />}\n </span>\n <div style={contentStyle}>\n {title && <span style={titleStyle}>{title}</span>}\n {description && <span style={descriptionStyle}>{description}</span>}\n {action && <div style={{ marginTop: 8 }}>{action}</div>}\n </div>\n {showCloseButton && (\n <button\n type=\"button\"\n style={closeButtonStyle}\n onClick={onClose}\n aria-label=\"Close toast\"\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent'\n }}\n >\n <CloseIcon />\n </button>\n )}\n </div>\n </>\n )\n})\n\nToast.displayName = 'Toast'\n\n// Toast Container and Context\ninterface ToastItem {\n id: string\n props: Omit<ToastProps, 'isOpen' | 'onClose'>\n}\n\ninterface ToastContextValue {\n toasts: ToastItem[]\n addToast: (props: Omit<ToastProps, 'isOpen' | 'onClose'>) => string\n removeToast: (id: string) => void\n removeAll: () => void\n}\n\nconst ToastContext = createContext<ToastContextValue | null>(null)\n\nexport function useToast() {\n const context = useContext(ToastContext)\n if (!context) {\n throw new Error('useToast must be used within a ToastProvider')\n }\n return context\n}\n\nexport interface ToastProviderProps {\n children: ReactNode\n position?: ToastPosition\n maxToasts?: number\n}\n\nconst positionStyles: Record<ToastPosition, CSSProperties> = {\n 'top-left': { top: 16, left: 16 },\n 'top-center': { top: 16, left: '50%', transform: 'translateX(-50%)' },\n 'top-right': { top: 16, right: 16 },\n 'bottom-left': { bottom: 16, left: 16 },\n 'bottom-center': { bottom: 16, left: '50%', transform: 'translateX(-50%)' },\n 'bottom-right': { bottom: 16, right: 16 },\n}\n\nlet toastCounter = 0\n\nexport function ToastProvider({\n children,\n position = 'top-right',\n maxToasts = 5,\n}: ToastProviderProps) {\n const [toasts, setToasts] = useState<ToastItem[]>([])\n const [mounted, setMounted] = useState(false)\n\n useEffect(() => {\n setMounted(true)\n }, [])\n\n const addToast = useCallback(\n (props: Omit<ToastProps, 'isOpen' | 'onClose'>) => {\n const id = `toast-${++toastCounter}`\n setToasts((prev) => {\n const newToasts = [...prev, { id, props }]\n if (newToasts.length > maxToasts) {\n return newToasts.slice(-maxToasts)\n }\n return newToasts\n })\n return id\n },\n [maxToasts]\n )\n\n const removeToast = useCallback((id: string) => {\n setToasts((prev) => prev.filter((t) => t.id !== id))\n }, [])\n\n const removeAll = useCallback(() => {\n setToasts([])\n }, [])\n\n const containerStyle: CSSProperties = {\n position: 'fixed',\n zIndex: 'var(--brycks-z-toast)' as unknown as number,\n display: 'flex',\n flexDirection: 'column',\n gap: 8,\n pointerEvents: 'none',\n ...positionStyles[position],\n }\n\n const toastWrapperStyle: CSSProperties = {\n pointerEvents: 'auto',\n }\n\n return (\n <ToastContext.Provider value={{ toasts, addToast, removeToast, removeAll }}>\n {children}\n {mounted &&\n createPortal(\n <div className=\"brycks-toast-container\" style={containerStyle}>\n {toasts.map(({ id, props }) => (\n <div key={id} style={toastWrapperStyle}>\n <Toast {...props} isOpen onClose={() => removeToast(id)} />\n </div>\n ))}\n </div>,\n document.body\n )}\n </ToastContext.Provider>\n )\n}\n","/**\n * Drawer Component\n *\n * A slide-out panel that can appear from any edge of the screen.\n * Supports focus trapping and keyboard navigation.\n */\n\nimport {\n forwardRef,\n useEffect,\n useRef,\n useCallback,\n type CSSProperties,\n type ReactNode,\n type HTMLAttributes,\n} from 'react'\nimport { createPortal } from 'react-dom'\nimport { cx } from '../../../utils/styles'\n\nexport type DrawerPlacement = 'left' | 'right' | 'top' | 'bottom'\nexport type DrawerSize = 'sm' | 'md' | 'lg' | 'xl' | 'full'\n\nexport interface DrawerProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n /** Whether the drawer is open */\n isOpen: boolean\n /** Callback when drawer should close */\n onClose: () => void\n /** Drawer placement */\n placement?: DrawerPlacement\n /** Drawer size */\n size?: DrawerSize\n /** Drawer title */\n title?: ReactNode\n /** Whether to close on overlay click */\n closeOnOverlayClick?: boolean\n /** Whether to close on escape key */\n closeOnEscape?: boolean\n /** Whether to show close button */\n showCloseButton?: boolean\n /** Whether to show overlay */\n showOverlay?: boolean\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst sizeMap: Record<DrawerSize, string> = {\n sm: '320px',\n md: '400px',\n lg: '560px',\n xl: '720px',\n full: '100%',\n}\n\nfunction CloseIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M4 4l8 8M12 4l-8 8\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n )\n}\n\nexport const Drawer = forwardRef<HTMLDivElement, DrawerProps>(function Drawer(\n {\n isOpen,\n onClose,\n placement = 'right',\n size = 'md',\n title,\n closeOnOverlayClick = true,\n closeOnEscape = true,\n showCloseButton = true,\n showOverlay = true,\n className,\n style,\n children,\n testId,\n ...props\n },\n ref\n) {\n const drawerRef = useRef<HTMLDivElement>(null)\n const previousActiveElement = useRef<HTMLElement | null>(null)\n\n // Focus trap and keyboard handling\n useEffect(() => {\n if (!isOpen) return\n\n previousActiveElement.current = document.activeElement as HTMLElement\n const drawer = drawerRef.current\n if (drawer) {\n drawer.focus()\n }\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && closeOnEscape) {\n onClose()\n return\n }\n\n if (e.key === 'Tab' && drawer) {\n const focusableElements = drawer.querySelectorAll<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n )\n const firstElement = focusableElements[0]\n const lastElement = focusableElements[focusableElements.length - 1]\n\n if (e.shiftKey && document.activeElement === firstElement) {\n e.preventDefault()\n lastElement?.focus()\n } else if (!e.shiftKey && document.activeElement === lastElement) {\n e.preventDefault()\n firstElement?.focus()\n }\n }\n }\n\n document.addEventListener('keydown', handleKeyDown)\n document.body.style.overflow = 'hidden'\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown)\n document.body.style.overflow = ''\n previousActiveElement.current?.focus()\n }\n }, [isOpen, closeOnEscape, onClose])\n\n const handleOverlayClick = useCallback(\n (e: React.MouseEvent) => {\n if (e.target === e.currentTarget && closeOnOverlayClick) {\n onClose()\n }\n },\n [closeOnOverlayClick, onClose]\n )\n\n if (!isOpen) return null\n\n const isHorizontal = placement === 'left' || placement === 'right'\n const drawerSize = sizeMap[size]\n\n const overlayStyle: CSSProperties = {\n position: 'fixed',\n inset: 0,\n zIndex: 'var(--brycks-z-drawer)' as unknown as number,\n display: 'flex',\n backgroundColor: showOverlay ? 'var(--brycks-background-overlay)' : 'transparent',\n animation: 'brycks-drawer-overlay-in 200ms ease-out',\n }\n\n const getPositionStyles = (): CSSProperties => {\n const base: CSSProperties = {\n position: 'absolute',\n backgroundColor: 'var(--brycks-background-elevated)',\n boxShadow: 'var(--brycks-shadow-2xl)',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n }\n\n if (isHorizontal) {\n return {\n ...base,\n top: 0,\n bottom: 0,\n [placement]: 0,\n width: drawerSize,\n maxWidth: '100vw',\n }\n }\n\n return {\n ...base,\n left: 0,\n right: 0,\n [placement]: 0,\n height: drawerSize,\n maxHeight: '100vh',\n }\n }\n\n const drawerStyle: CSSProperties = {\n ...getPositionStyles(),\n animation: `brycks-drawer-${placement}-in 250ms cubic-bezier(0.32, 0.72, 0, 1)`,\n outline: 'none',\n ...style,\n }\n\n const headerStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '16px 20px',\n borderBottom: '1px solid var(--brycks-border-muted)',\n flexShrink: 0,\n }\n\n const titleStyle: CSSProperties = {\n fontSize: 18,\n fontWeight: 600,\n color: 'var(--brycks-foreground-default)',\n margin: 0,\n }\n\n const closeButtonStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 32,\n height: 32,\n borderRadius: 'var(--brycks-radius-md)',\n color: 'var(--brycks-foreground-muted)',\n transition: 'all 150ms ease-out',\n }\n\n const contentStyle: CSSProperties = {\n flex: 1,\n overflow: 'auto',\n padding: 20,\n }\n\n const drawerContent = (\n <>\n <style>\n {`\n @keyframes brycks-drawer-overlay-in {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n @keyframes brycks-drawer-left-in {\n from { transform: translateX(-100%); }\n to { transform: translateX(0); }\n }\n @keyframes brycks-drawer-right-in {\n from { transform: translateX(100%); }\n to { transform: translateX(0); }\n }\n @keyframes brycks-drawer-top-in {\n from { transform: translateY(-100%); }\n to { transform: translateY(0); }\n }\n @keyframes brycks-drawer-bottom-in {\n from { transform: translateY(100%); }\n to { transform: translateY(0); }\n }\n `}\n </style>\n <div\n className=\"brycks-drawer-overlay\"\n style={overlayStyle}\n onClick={handleOverlayClick}\n aria-hidden=\"true\"\n >\n <div\n ref={(node) => {\n (drawerRef as React.MutableRefObject<HTMLDivElement | null>).current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) ref.current = node\n }}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? 'brycks-drawer-title' : undefined}\n className={cx('brycks-drawer', `brycks-drawer--${placement}`, `brycks-drawer--${size}`, className)}\n style={drawerStyle}\n tabIndex={-1}\n data-testid={testId}\n {...props}\n >\n {(title || showCloseButton) && (\n <div className=\"brycks-drawer-header\" style={headerStyle}>\n {title && <h2 id=\"brycks-drawer-title\" style={titleStyle}>{title}</h2>}\n {showCloseButton && (\n <button\n type=\"button\"\n className=\"brycks-drawer-close\"\n style={closeButtonStyle}\n onClick={onClose}\n aria-label=\"Close drawer\"\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n e.currentTarget.style.color = 'var(--brycks-foreground-default)'\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent'\n e.currentTarget.style.color = 'var(--brycks-foreground-muted)'\n }}\n >\n <CloseIcon />\n </button>\n )}\n </div>\n )}\n <div className=\"brycks-drawer-content\" style={contentStyle}>\n {children}\n </div>\n </div>\n </div>\n </>\n )\n\n return createPortal(drawerContent, document.body)\n})\n\nDrawer.displayName = 'Drawer'\n","/**\n * useClickOutside Hook\n *\n * Detects clicks outside of a referenced element.\n * Useful for closing dropdowns, modals, and popovers.\n */\n\nimport { useEffect, useRef, type RefObject } from 'react'\n\nexport interface UseClickOutsideOptions {\n /** Whether the listener is active */\n enabled?: boolean\n /** Event type to listen for */\n eventType?: 'mousedown' | 'mouseup' | 'click'\n}\n\nexport function useClickOutside<T extends HTMLElement = HTMLElement>(\n handler: (event: MouseEvent | TouchEvent) => void,\n options: UseClickOutsideOptions = {}\n): RefObject<T | null> {\n const { enabled = true, eventType = 'mousedown' } = options\n const ref = useRef<T>(null)\n\n useEffect(() => {\n if (!enabled) return\n\n const listener = (event: MouseEvent | TouchEvent) => {\n const el = ref.current\n if (!el || el.contains(event.target as Node)) {\n return\n }\n handler(event)\n }\n\n document.addEventListener(eventType, listener)\n document.addEventListener('touchstart', listener)\n\n return () => {\n document.removeEventListener(eventType, listener)\n document.removeEventListener('touchstart', listener)\n }\n }, [handler, enabled, eventType])\n\n return ref\n}\n","/**\n * Popover Component\n *\n * A floating content panel that appears relative to a trigger element.\n * Supports different placements and can be triggered by click or hover.\n */\n\nimport React, {\n forwardRef,\n useState,\n useEffect,\n useRef,\n useCallback,\n cloneElement,\n type CSSProperties,\n type ReactNode,\n type ReactElement,\n type HTMLAttributes,\n} from 'react'\nimport { createPortal } from 'react-dom'\nimport { cx } from '../../../utils/styles'\nimport { useClickOutside } from '../../../hooks/useClickOutside'\n\nexport type PopoverPlacement =\n | 'top'\n | 'top-start'\n | 'top-end'\n | 'bottom'\n | 'bottom-start'\n | 'bottom-end'\n | 'left'\n | 'left-start'\n | 'left-end'\n | 'right'\n | 'right-start'\n | 'right-end'\n\nexport type PopoverTrigger = 'click' | 'hover'\n\nexport interface PopoverProps extends Omit<HTMLAttributes<HTMLDivElement>, 'content'> {\n /** Popover content */\n content: ReactNode\n /** Trigger element */\n children: ReactElement\n /** Placement relative to trigger */\n placement?: PopoverPlacement\n /** How to trigger the popover */\n trigger?: PopoverTrigger\n /** Whether the popover is open (controlled) */\n isOpen?: boolean\n /** Default open state (uncontrolled) */\n defaultOpen?: boolean\n /** Callback when open state changes */\n onOpenChange?: (isOpen: boolean) => void\n /** Offset from trigger in pixels */\n offset?: number\n /** Delay before showing (hover trigger) */\n openDelay?: number\n /** Delay before hiding (hover trigger) */\n closeDelay?: number\n /** Whether to close on outside click */\n closeOnOutsideClick?: boolean\n /** Whether to show arrow */\n showArrow?: boolean\n /** Custom class name for content */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nexport const Popover = forwardRef<HTMLDivElement, PopoverProps>(function Popover(\n {\n content,\n children,\n placement = 'bottom',\n trigger = 'click',\n isOpen: controlledIsOpen,\n defaultOpen = false,\n onOpenChange,\n offset = 8,\n openDelay = 200,\n closeDelay = 200,\n closeOnOutsideClick = true,\n showArrow = true,\n className,\n style,\n testId,\n ...props\n },\n ref\n) {\n const [internalIsOpen, setInternalIsOpen] = useState(defaultOpen)\n const [position, setPosition] = useState({ top: 0, left: 0 })\n const [mounted, setMounted] = useState(false)\n const triggerRef = useRef<HTMLElement>(null)\n const contentRef = useRef<HTMLDivElement>(null)\n const openTimeoutRef = useRef<ReturnType<typeof setTimeout>>(null)\n const closeTimeoutRef = useRef<ReturnType<typeof setTimeout>>(null)\n\n const isOpen = controlledIsOpen ?? internalIsOpen\n\n const setIsOpen = useCallback(\n (open: boolean) => {\n if (controlledIsOpen === undefined) {\n setInternalIsOpen(open)\n }\n onOpenChange?.(open)\n },\n [controlledIsOpen, onOpenChange]\n )\n\n // Click outside handler\n const clickOutsideRef = useClickOutside<HTMLDivElement>(() => {\n if (closeOnOutsideClick && trigger === 'click' && isOpen) {\n setIsOpen(false)\n }\n }, { enabled: isOpen && trigger === 'click' })\n\n useEffect(() => {\n setMounted(true)\n return () => setMounted(false)\n }, [])\n\n // Calculate position\n useEffect(() => {\n if (!isOpen || !triggerRef.current || !mounted) return\n\n const updatePosition = () => {\n const trigger = triggerRef.current\n const content = contentRef.current\n if (!trigger || !content) return\n\n const triggerRect = trigger.getBoundingClientRect()\n const contentRect = content.getBoundingClientRect()\n const scrollX = window.scrollX\n const scrollY = window.scrollY\n\n let top = 0\n let left = 0\n\n // Calculate base position\n switch (placement) {\n case 'top':\n case 'top-start':\n case 'top-end':\n top = triggerRect.top + scrollY - contentRect.height - offset\n break\n case 'bottom':\n case 'bottom-start':\n case 'bottom-end':\n top = triggerRect.bottom + scrollY + offset\n break\n case 'left':\n case 'left-start':\n case 'left-end':\n left = triggerRect.left + scrollX - contentRect.width - offset\n break\n case 'right':\n case 'right-start':\n case 'right-end':\n left = triggerRect.right + scrollX + offset\n break\n }\n\n // Calculate alignment\n switch (placement) {\n case 'top':\n case 'bottom':\n left = triggerRect.left + scrollX + (triggerRect.width - contentRect.width) / 2\n break\n case 'top-start':\n case 'bottom-start':\n left = triggerRect.left + scrollX\n break\n case 'top-end':\n case 'bottom-end':\n left = triggerRect.right + scrollX - contentRect.width\n break\n case 'left':\n case 'right':\n top = triggerRect.top + scrollY + (triggerRect.height - contentRect.height) / 2\n break\n case 'left-start':\n case 'right-start':\n top = triggerRect.top + scrollY\n break\n case 'left-end':\n case 'right-end':\n top = triggerRect.bottom + scrollY - contentRect.height\n break\n }\n\n setPosition({ top, left })\n }\n\n updatePosition()\n window.addEventListener('resize', updatePosition)\n window.addEventListener('scroll', updatePosition, true)\n\n return () => {\n window.removeEventListener('resize', updatePosition)\n window.removeEventListener('scroll', updatePosition, true)\n }\n }, [isOpen, placement, offset, mounted])\n\n // Cleanup timeouts\n useEffect(() => {\n return () => {\n if (openTimeoutRef.current) clearTimeout(openTimeoutRef.current)\n if (closeTimeoutRef.current) clearTimeout(closeTimeoutRef.current)\n }\n }, [])\n\n const handleOpen = useCallback(() => {\n if (closeTimeoutRef.current) clearTimeout(closeTimeoutRef.current)\n if (trigger === 'hover') {\n openTimeoutRef.current = setTimeout(() => setIsOpen(true), openDelay)\n } else {\n setIsOpen(true)\n }\n }, [trigger, openDelay, setIsOpen])\n\n const handleClose = useCallback(() => {\n if (openTimeoutRef.current) clearTimeout(openTimeoutRef.current)\n if (trigger === 'hover') {\n closeTimeoutRef.current = setTimeout(() => setIsOpen(false), closeDelay)\n } else {\n setIsOpen(false)\n }\n }, [trigger, closeDelay, setIsOpen])\n\n const handleToggle = useCallback(() => {\n if (isOpen) {\n handleClose()\n } else {\n handleOpen()\n }\n }, [isOpen, handleOpen, handleClose])\n\n // Clone trigger with event handlers\n const childProps = children.props as Record<string, unknown>\n const triggerElement = cloneElement(children as ReactElement<Record<string, unknown>>, {\n ref: triggerRef,\n ...(trigger === 'click' && {\n onClick: (e: React.MouseEvent) => {\n (childProps.onClick as ((e: React.MouseEvent) => void) | undefined)?.(e)\n handleToggle()\n },\n }),\n ...(trigger === 'hover' && {\n onMouseEnter: (e: React.MouseEvent) => {\n (childProps.onMouseEnter as ((e: React.MouseEvent) => void) | undefined)?.(e)\n handleOpen()\n },\n onMouseLeave: (e: React.MouseEvent) => {\n (childProps.onMouseLeave as ((e: React.MouseEvent) => void) | undefined)?.(e)\n handleClose()\n },\n }),\n })\n\n const contentStyle: CSSProperties = {\n position: 'absolute',\n top: position.top,\n left: position.left,\n zIndex: 'var(--brycks-z-popover)' as unknown as number,\n backgroundColor: 'var(--brycks-background-elevated)',\n border: '1px solid var(--brycks-border-default)',\n borderRadius: 'var(--brycks-radius-lg)',\n boxShadow: 'var(--brycks-shadow-lg)',\n padding: 12,\n minWidth: 120,\n animation: 'brycks-popover-in 150ms ease-out',\n ...style,\n }\n\n const popoverContent = isOpen && mounted && (\n <>\n <style>\n {`\n @keyframes brycks-popover-in {\n from { opacity: 0; transform: scale(0.95); }\n to { opacity: 1; transform: scale(1); }\n }\n `}\n </style>\n <div\n ref={(node) => {\n (contentRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n (clickOutsideRef as React.MutableRefObject<HTMLDivElement | null>).current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) ref.current = node\n }}\n className={cx('brycks-popover', className)}\n style={contentStyle}\n role=\"dialog\"\n data-testid={testId}\n onMouseEnter={trigger === 'hover' ? handleOpen : undefined}\n onMouseLeave={trigger === 'hover' ? handleClose : undefined}\n {...props}\n >\n {content}\n </div>\n </>\n )\n\n return (\n <>\n {triggerElement}\n {mounted && createPortal(popoverContent, document.body)}\n </>\n )\n})\n\nPopover.displayName = 'Popover'\n","/**\n * Progress Component\n *\n * A progress indicator showing completion status.\n * Supports linear and circular variants.\n */\n\nimport { forwardRef, type CSSProperties, type HTMLAttributes } from 'react'\nimport { cx } from '../../../utils/styles'\n\nexport type ProgressSize = 'xs' | 'sm' | 'md' | 'lg'\nexport type ProgressVariant = 'linear' | 'circular'\nexport type ProgressIntent = 'primary' | 'success' | 'warning' | 'error'\n\nexport interface ProgressProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n /** Current value (0-100) */\n value?: number\n /** Maximum value */\n max?: number\n /** Progress size */\n size?: ProgressSize\n /** Progress variant */\n variant?: ProgressVariant\n /** Progress intent/color */\n intent?: ProgressIntent\n /** Whether to show the value label */\n showValue?: boolean\n /** Whether the progress is indeterminate */\n indeterminate?: boolean\n /** Format value for display */\n formatValue?: (value: number, max: number) => string\n /** Label text */\n label?: string\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst linearSizeMap: Record<ProgressSize, number> = {\n xs: 4,\n sm: 6,\n md: 8,\n lg: 12,\n}\n\nconst circularSizeMap: Record<ProgressSize, { size: number; strokeWidth: number }> = {\n xs: { size: 24, strokeWidth: 3 },\n sm: { size: 32, strokeWidth: 3 },\n md: { size: 48, strokeWidth: 4 },\n lg: { size: 64, strokeWidth: 5 },\n}\n\nconst intentColors: Record<ProgressIntent, string> = {\n primary: 'var(--brycks-primary-default)',\n success: 'var(--brycks-success-default)',\n warning: 'var(--brycks-warning-default)',\n error: 'var(--brycks-error-default)',\n}\n\nexport const Progress = forwardRef<HTMLDivElement, ProgressProps>(function Progress(\n {\n value = 0,\n max = 100,\n size = 'md',\n variant = 'linear',\n intent = 'primary',\n showValue = false,\n indeterminate = false,\n formatValue = (v, m) => `${Math.round((v / m) * 100)}%`,\n label,\n className,\n style,\n testId,\n ...props\n },\n ref\n) {\n const percentage = Math.min(100, Math.max(0, (value / max) * 100))\n const color = intentColors[intent]\n\n if (variant === 'circular') {\n const config = circularSizeMap[size]\n const radius = (config.size - config.strokeWidth) / 2\n const circumference = 2 * Math.PI * radius\n const offset = circumference - (percentage / 100) * circumference\n\n const containerStyle: CSSProperties = {\n display: 'inline-flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: 8,\n ...style,\n }\n\n const svgStyle: CSSProperties = {\n transform: 'rotate(-90deg)',\n width: config.size,\n height: config.size,\n }\n\n const trackStyle: CSSProperties = {\n fill: 'none',\n stroke: 'var(--brycks-background-muted)',\n strokeWidth: config.strokeWidth,\n }\n\n const barStyle: CSSProperties = {\n fill: 'none',\n stroke: color,\n strokeWidth: config.strokeWidth,\n strokeLinecap: 'round',\n strokeDasharray: circumference,\n strokeDashoffset: indeterminate ? circumference * 0.75 : offset,\n transition: indeterminate ? 'none' : 'stroke-dashoffset 300ms ease-out',\n animation: indeterminate ? 'brycks-progress-circular-spin 1s linear infinite' : undefined,\n transformOrigin: 'center',\n }\n\n const valueStyle: CSSProperties = {\n position: 'absolute',\n fontSize: size === 'xs' ? 8 : size === 'sm' ? 10 : size === 'md' ? 12 : 14,\n fontWeight: 600,\n color: 'var(--brycks-foreground-default)',\n }\n\n const labelStyle: CSSProperties = {\n fontSize: size === 'xs' ? 10 : size === 'sm' ? 11 : size === 'md' ? 12 : 14,\n color: 'var(--brycks-foreground-muted)',\n }\n\n return (\n <>\n <style>\n {`\n @keyframes brycks-progress-circular-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n `}\n </style>\n <div\n ref={ref}\n className={cx('brycks-progress', 'brycks-progress--circular', `brycks-progress--${size}`, className)}\n style={containerStyle}\n role=\"progressbar\"\n aria-valuenow={indeterminate ? undefined : value}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-label={label}\n data-testid={testId}\n {...props}\n >\n <div style={{ position: 'relative', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <svg style={svgStyle}>\n <circle cx={config.size / 2} cy={config.size / 2} r={radius} style={trackStyle} />\n <circle cx={config.size / 2} cy={config.size / 2} r={radius} style={barStyle} />\n </svg>\n {showValue && !indeterminate && size !== 'xs' && (\n <span style={valueStyle}>{formatValue(value, max)}</span>\n )}\n </div>\n {label && <span style={labelStyle}>{label}</span>}\n </div>\n </>\n )\n }\n\n // Linear variant\n const height = linearSizeMap[size]\n\n const containerStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 6,\n width: '100%',\n ...style,\n }\n\n const headerStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 12,\n }\n\n const labelStyle: CSSProperties = {\n fontSize: size === 'xs' ? 11 : size === 'sm' ? 12 : size === 'md' ? 13 : 14,\n fontWeight: 500,\n color: 'var(--brycks-foreground-default)',\n }\n\n const valueTextStyle: CSSProperties = {\n fontSize: size === 'xs' ? 11 : size === 'sm' ? 12 : size === 'md' ? 13 : 14,\n fontWeight: 500,\n color: 'var(--brycks-foreground-muted)',\n fontVariantNumeric: 'tabular-nums',\n }\n\n const trackStyle: CSSProperties = {\n width: '100%',\n height,\n backgroundColor: 'var(--brycks-background-muted)',\n borderRadius: height / 2,\n overflow: 'hidden',\n }\n\n const barStyle: CSSProperties = {\n width: indeterminate ? '30%' : `${percentage}%`,\n height: '100%',\n backgroundColor: color,\n borderRadius: height / 2,\n transition: indeterminate ? 'none' : 'width 300ms ease-out',\n animation: indeterminate ? 'brycks-progress-linear-indeterminate 1.5s ease-in-out infinite' : undefined,\n }\n\n return (\n <>\n <style>\n {`\n @keyframes brycks-progress-linear-indeterminate {\n 0% { transform: translateX(-100%); }\n 100% { transform: translateX(400%); }\n }\n `}\n </style>\n <div\n ref={ref}\n className={cx('brycks-progress', 'brycks-progress--linear', `brycks-progress--${size}`, className)}\n style={containerStyle}\n role=\"progressbar\"\n aria-valuenow={indeterminate ? undefined : value}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-label={label}\n data-testid={testId}\n {...props}\n >\n {(label || showValue) && (\n <div style={headerStyle}>\n {label && <span style={labelStyle}>{label}</span>}\n {showValue && !indeterminate && (\n <span style={valueTextStyle}>{formatValue(value, max)}</span>\n )}\n </div>\n )}\n <div style={trackStyle}>\n <div style={barStyle} />\n </div>\n </div>\n </>\n )\n})\n\nProgress.displayName = 'Progress'\n","/**\n * Tabs Component\n *\n * Accessible tab navigation with keyboard support.\n * Supports horizontal and vertical orientations.\n */\n\nimport {\n forwardRef,\n useState,\n useCallback,\n createContext,\n useContext,\n type CSSProperties,\n type ReactNode,\n type HTMLAttributes,\n type KeyboardEvent,\n} from 'react'\nimport { cx } from '../../../utils/styles'\n\nexport type TabsSize = 'sm' | 'md' | 'lg'\nexport type TabsVariant = 'line' | 'enclosed' | 'soft'\nexport type TabsOrientation = 'horizontal' | 'vertical'\n\ninterface TabsContextValue {\n value: string\n onChange: (value: string) => void\n size: TabsSize\n variant: TabsVariant\n orientation: TabsOrientation\n}\n\nconst TabsContext = createContext<TabsContextValue | null>(null)\n\nfunction useTabsContext() {\n const context = useContext(TabsContext)\n if (!context) {\n throw new Error('Tabs components must be used within a Tabs')\n }\n return context\n}\n\nexport interface TabsProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {\n /** Currently selected tab value */\n value?: string\n /** Default value (uncontrolled) */\n defaultValue?: string\n /** Callback when tab changes */\n onChange?: (value: string) => void\n /** Tab size */\n size?: TabsSize\n /** Tab variant */\n variant?: TabsVariant\n /** Tab orientation */\n orientation?: TabsOrientation\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nexport const Tabs = forwardRef<HTMLDivElement, TabsProps>(function Tabs(\n {\n value: controlledValue,\n defaultValue = '',\n onChange,\n size = 'md',\n variant = 'line',\n orientation = 'horizontal',\n className,\n style,\n children,\n testId,\n ...props\n },\n ref\n) {\n const [internalValue, setInternalValue] = useState(defaultValue)\n const value = controlledValue ?? internalValue\n\n const handleChange = useCallback(\n (newValue: string) => {\n if (controlledValue === undefined) {\n setInternalValue(newValue)\n }\n onChange?.(newValue)\n },\n [controlledValue, onChange]\n )\n\n const containerStyle: CSSProperties = {\n display: 'flex',\n flexDirection: orientation === 'vertical' ? 'row' : 'column',\n gap: orientation === 'vertical' ? 24 : 0,\n ...style,\n }\n\n return (\n <TabsContext.Provider value={{ value, onChange: handleChange, size, variant, orientation }}>\n <div\n ref={ref}\n className={cx('brycks-tabs', `brycks-tabs--${variant}`, `brycks-tabs--${orientation}`, className)}\n style={containerStyle}\n data-testid={testId}\n {...props}\n >\n {children}\n </div>\n </TabsContext.Provider>\n )\n})\n\nTabs.displayName = 'Tabs'\n\n// TabList\nexport interface TabListProps extends HTMLAttributes<HTMLDivElement> {\n /** Custom class name */\n className?: string\n}\n\nexport const TabList = forwardRef<HTMLDivElement, TabListProps>(function TabList(\n { className, style, children, ...props },\n ref\n) {\n const { orientation, variant } = useTabsContext()\n\n const listStyle: CSSProperties = {\n display: 'flex',\n flexDirection: orientation === 'vertical' ? 'column' : 'row',\n gap: variant === 'enclosed' ? 4 : orientation === 'vertical' ? 4 : 0,\n borderBottom: variant === 'line' && orientation === 'horizontal' ? '1px solid var(--brycks-border-muted)' : undefined,\n borderRight: variant === 'line' && orientation === 'vertical' ? '1px solid var(--brycks-border-muted)' : undefined,\n paddingRight: orientation === 'vertical' ? 16 : undefined,\n backgroundColor: variant === 'enclosed' ? 'var(--brycks-background-muted)' : undefined,\n padding: variant === 'enclosed' ? 4 : undefined,\n borderRadius: variant === 'enclosed' ? 'var(--brycks-radius-lg)' : undefined,\n flexShrink: 0,\n ...style,\n }\n\n return (\n <div\n ref={ref}\n role=\"tablist\"\n aria-orientation={orientation}\n className={cx('brycks-tab-list', className)}\n style={listStyle}\n {...props}\n >\n {children}\n </div>\n )\n})\n\nTabList.displayName = 'TabList'\n\n// Tab\nexport interface TabProps extends Omit<HTMLAttributes<HTMLButtonElement>, 'onClick'> {\n /** Tab value */\n value: string\n /** Whether the tab is disabled */\n disabled?: boolean\n /** Icon before the label */\n icon?: ReactNode\n /** Custom class name */\n className?: string\n}\n\nconst sizeConfig: Record<TabsSize, { fontSize: number; padding: string; height: number }> = {\n sm: { fontSize: 13, padding: '6px 12px', height: 32 },\n md: { fontSize: 14, padding: '8px 16px', height: 40 },\n lg: { fontSize: 16, padding: '10px 20px', height: 48 },\n}\n\nexport const Tab = forwardRef<HTMLButtonElement, TabProps>(function Tab(\n { value: tabValue, disabled = false, icon, className, style, children, ...props },\n ref\n) {\n const { value, onChange, size, variant, orientation } = useTabsContext()\n const isSelected = value === tabValue\n const config = sizeConfig[size]\n\n const handleClick = () => {\n if (!disabled) {\n onChange(tabValue)\n }\n }\n\n const handleKeyDown = (e: KeyboardEvent<HTMLButtonElement>) => {\n if (disabled) return\n\n const tabs = Array.from(\n e.currentTarget.parentElement?.querySelectorAll<HTMLButtonElement>('[role=\"tab\"]:not([disabled])') ?? []\n )\n const currentIndex = tabs.indexOf(e.currentTarget)\n\n let newIndex: number | null = null\n\n if (orientation === 'horizontal') {\n if (e.key === 'ArrowRight') newIndex = (currentIndex + 1) % tabs.length\n if (e.key === 'ArrowLeft') newIndex = (currentIndex - 1 + tabs.length) % tabs.length\n } else {\n if (e.key === 'ArrowDown') newIndex = (currentIndex + 1) % tabs.length\n if (e.key === 'ArrowUp') newIndex = (currentIndex - 1 + tabs.length) % tabs.length\n }\n\n if (e.key === 'Home') newIndex = 0\n if (e.key === 'End') newIndex = tabs.length - 1\n\n if (newIndex !== null) {\n e.preventDefault()\n tabs[newIndex]?.focus()\n tabs[newIndex]?.click()\n }\n }\n\n const getTabStyle = (): CSSProperties => {\n const base: CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 8,\n fontSize: config.fontSize,\n fontWeight: 500,\n padding: config.padding,\n minHeight: config.height,\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.5 : 1,\n transition: 'all 150ms ease-out',\n outline: 'none',\n border: 'none',\n backgroundColor: 'transparent',\n whiteSpace: 'nowrap',\n }\n\n if (variant === 'line') {\n return {\n ...base,\n color: isSelected ? 'var(--brycks-primary-default)' : 'var(--brycks-foreground-muted)',\n borderBottom: orientation === 'horizontal' ? `2px solid ${isSelected ? 'var(--brycks-primary-default)' : 'transparent'}` : undefined,\n borderRight: orientation === 'vertical' ? `2px solid ${isSelected ? 'var(--brycks-primary-default)' : 'transparent'}` : undefined,\n marginBottom: orientation === 'horizontal' ? -1 : undefined,\n marginRight: orientation === 'vertical' ? -1 : undefined,\n }\n }\n\n if (variant === 'enclosed') {\n return {\n ...base,\n color: isSelected ? 'var(--brycks-foreground-default)' : 'var(--brycks-foreground-muted)',\n backgroundColor: isSelected ? 'var(--brycks-background-elevated)' : 'transparent',\n borderRadius: 'var(--brycks-radius-md)',\n boxShadow: isSelected ? 'var(--brycks-shadow-sm)' : undefined,\n }\n }\n\n // soft variant\n return {\n ...base,\n color: isSelected ? 'var(--brycks-primary-default)' : 'var(--brycks-foreground-muted)',\n backgroundColor: isSelected ? 'var(--brycks-primary-50)' : 'transparent',\n borderRadius: 'var(--brycks-radius-md)',\n }\n }\n\n return (\n <button\n ref={ref}\n role=\"tab\"\n type=\"button\"\n aria-selected={isSelected}\n aria-disabled={disabled}\n disabled={disabled}\n tabIndex={isSelected ? 0 : -1}\n className={cx('brycks-tab', isSelected && 'brycks-tab--selected', className)}\n style={{ ...getTabStyle(), ...style }}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n {...props}\n >\n {icon && <span className=\"brycks-tab-icon\">{icon}</span>}\n {children}\n </button>\n )\n})\n\nTab.displayName = 'Tab'\n\n// TabPanels\nexport interface TabPanelsProps extends HTMLAttributes<HTMLDivElement> {\n /** Custom class name */\n className?: string\n}\n\nexport const TabPanels = forwardRef<HTMLDivElement, TabPanelsProps>(function TabPanels(\n { className, style, children, ...props },\n ref\n) {\n const panelsStyle: CSSProperties = {\n flex: 1,\n ...style,\n }\n\n return (\n <div ref={ref} className={cx('brycks-tab-panels', className)} style={panelsStyle} {...props}>\n {children}\n </div>\n )\n})\n\nTabPanels.displayName = 'TabPanels'\n\n// TabPanel\nexport interface TabPanelProps extends HTMLAttributes<HTMLDivElement> {\n /** Panel value (must match a Tab value) */\n value: string\n /** Custom class name */\n className?: string\n}\n\nexport const TabPanel = forwardRef<HTMLDivElement, TabPanelProps>(function TabPanel(\n { value: panelValue, className, style, children, ...props },\n ref\n) {\n const { value } = useTabsContext()\n const isSelected = value === panelValue\n\n if (!isSelected) return null\n\n const panelStyle: CSSProperties = {\n padding: '16px 0',\n animation: 'brycks-tab-panel-in 200ms ease-out',\n ...style,\n }\n\n return (\n <>\n <style>\n {`\n @keyframes brycks-tab-panel-in {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n `}\n </style>\n <div\n ref={ref}\n role=\"tabpanel\"\n tabIndex={0}\n className={cx('brycks-tab-panel', className)}\n style={panelStyle}\n {...props}\n >\n {children}\n </div>\n </>\n )\n})\n\nTabPanel.displayName = 'TabPanel'\n","/**\n * Accordion Component\n *\n * Collapsible content panels for organizing information.\n * Supports single or multiple expanded panels.\n */\n\nimport {\n forwardRef,\n useState,\n useCallback,\n createContext,\n useContext,\n type CSSProperties,\n type ReactNode,\n type HTMLAttributes,\n} from 'react'\nimport { cx } from '../../../utils/styles'\n\nexport type AccordionVariant = 'default' | 'bordered' | 'separated'\n\ninterface AccordionContextValue {\n expandedItems: string[]\n toggleItem: (value: string) => void\n allowMultiple: boolean\n variant: AccordionVariant\n}\n\nconst AccordionContext = createContext<AccordionContextValue | null>(null)\n\nfunction useAccordionContext() {\n const context = useContext(AccordionContext)\n if (!context) {\n throw new Error('AccordionItem must be used within an Accordion')\n }\n return context\n}\n\nexport interface AccordionProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {\n /** Expanded items (controlled) */\n value?: string[]\n /** Default expanded items (uncontrolled) */\n defaultValue?: string[]\n /** Callback when items change */\n onChange?: (value: string[]) => void\n /** Allow multiple items to be expanded */\n allowMultiple?: boolean\n /** Accordion variant */\n variant?: AccordionVariant\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nexport const Accordion = forwardRef<HTMLDivElement, AccordionProps>(function Accordion(\n {\n value: controlledValue,\n defaultValue = [],\n onChange,\n allowMultiple = false,\n variant = 'default',\n className,\n style,\n children,\n testId,\n ...props\n },\n ref\n) {\n const [internalValue, setInternalValue] = useState(defaultValue)\n const expandedItems = controlledValue ?? internalValue\n\n const toggleItem = useCallback(\n (itemValue: string) => {\n const isExpanded = expandedItems.includes(itemValue)\n let newValue: string[]\n\n if (isExpanded) {\n newValue = expandedItems.filter((v) => v !== itemValue)\n } else if (allowMultiple) {\n newValue = [...expandedItems, itemValue]\n } else {\n newValue = [itemValue]\n }\n\n if (controlledValue === undefined) {\n setInternalValue(newValue)\n }\n onChange?.(newValue)\n },\n [expandedItems, allowMultiple, controlledValue, onChange]\n )\n\n const containerStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: variant === 'separated' ? 8 : 0,\n ...style,\n }\n\n return (\n <AccordionContext.Provider value={{ expandedItems, toggleItem, allowMultiple, variant }}>\n <div\n ref={ref}\n className={cx('brycks-accordion', `brycks-accordion--${variant}`, className)}\n style={containerStyle}\n data-testid={testId}\n {...props}\n >\n {children}\n </div>\n </AccordionContext.Provider>\n )\n})\n\nAccordion.displayName = 'Accordion'\n\n// AccordionItem\nexport interface AccordionItemProps extends HTMLAttributes<HTMLDivElement> {\n /** Item value (unique identifier) */\n value: string\n /** Whether the item is disabled */\n disabled?: boolean\n /** Custom class name */\n className?: string\n}\n\ninterface AccordionItemContextValue {\n value: string\n isExpanded: boolean\n disabled: boolean\n}\n\nconst AccordionItemContext = createContext<AccordionItemContextValue | null>(null)\n\nfunction useAccordionItemContext() {\n const context = useContext(AccordionItemContext)\n if (!context) {\n throw new Error('AccordionTrigger/AccordionContent must be used within an AccordionItem')\n }\n return context\n}\n\nexport const AccordionItem = forwardRef<HTMLDivElement, AccordionItemProps>(function AccordionItem(\n { value, disabled = false, className, style, children, ...props },\n ref\n) {\n const { expandedItems, variant } = useAccordionContext()\n const isExpanded = expandedItems.includes(value)\n\n const itemStyle: CSSProperties = {\n borderBottom: variant === 'default' ? '1px solid var(--brycks-border-muted)' : undefined,\n border: variant === 'bordered' || variant === 'separated' ? '1px solid var(--brycks-border-default)' : undefined,\n borderRadius: variant === 'separated' ? 'var(--brycks-radius-lg)' : undefined,\n overflow: 'hidden',\n ...style,\n }\n\n // Remove bottom border for separated variant (each item has full border)\n if (variant === 'bordered' && !isExpanded) {\n itemStyle.borderBottom = '1px solid var(--brycks-border-default)'\n }\n\n return (\n <AccordionItemContext.Provider value={{ value, isExpanded, disabled }}>\n <div\n ref={ref}\n className={cx('brycks-accordion-item', isExpanded && 'brycks-accordion-item--expanded', className)}\n style={itemStyle}\n {...props}\n >\n {children}\n </div>\n </AccordionItemContext.Provider>\n )\n})\n\nAccordionItem.displayName = 'AccordionItem'\n\n// AccordionTrigger\nexport interface AccordionTriggerProps extends HTMLAttributes<HTMLButtonElement> {\n /** Icon to show (replaces default chevron) */\n icon?: ReactNode\n /** Custom class name */\n className?: string\n}\n\nfunction ChevronIcon({ isExpanded }: { isExpanded: boolean }) {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n style={{\n transform: isExpanded ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 200ms ease-out',\n }}\n >\n <path\n d=\"M4 6l4 4 4-4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )\n}\n\nexport const AccordionTrigger = forwardRef<HTMLButtonElement, AccordionTriggerProps>(function AccordionTrigger(\n { icon, className, style, children, ...props },\n ref\n) {\n const { toggleItem } = useAccordionContext()\n const { value, isExpanded, disabled } = useAccordionItemContext()\n\n const handleClick = () => {\n if (!disabled) {\n toggleItem(value)\n }\n }\n\n const triggerStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n padding: '16px',\n fontSize: 15,\n fontWeight: 500,\n color: disabled ? 'var(--brycks-foreground-muted)' : 'var(--brycks-foreground-default)',\n backgroundColor: 'transparent',\n border: 'none',\n cursor: disabled ? 'not-allowed' : 'pointer',\n textAlign: 'left',\n transition: 'background-color 150ms ease-out',\n outline: 'none',\n ...style,\n }\n\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-expanded={isExpanded}\n aria-disabled={disabled}\n disabled={disabled}\n className={cx('brycks-accordion-trigger', className)}\n style={triggerStyle}\n onClick={handleClick}\n onMouseEnter={(e) => {\n if (!disabled) {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent'\n }}\n {...props}\n >\n {children}\n <span style={{ color: 'var(--brycks-foreground-muted)', flexShrink: 0, marginLeft: 12 }}>\n {icon ?? <ChevronIcon isExpanded={isExpanded} />}\n </span>\n </button>\n )\n})\n\nAccordionTrigger.displayName = 'AccordionTrigger'\n\n// AccordionContent\nexport interface AccordionContentProps extends HTMLAttributes<HTMLDivElement> {\n /** Custom class name */\n className?: string\n}\n\nexport const AccordionContent = forwardRef<HTMLDivElement, AccordionContentProps>(function AccordionContent(\n { className, style, children, ...props },\n ref\n) {\n const { isExpanded } = useAccordionItemContext()\n\n const contentStyle: CSSProperties = {\n overflow: 'hidden',\n transition: 'max-height 200ms ease-out, opacity 200ms ease-out',\n maxHeight: isExpanded ? '1000px' : '0',\n opacity: isExpanded ? 1 : 0,\n }\n\n const innerStyle: CSSProperties = {\n padding: '0 16px 16px 16px',\n color: 'var(--brycks-foreground-muted)',\n fontSize: 14,\n lineHeight: 1.6,\n ...style,\n }\n\n return (\n <div\n ref={ref}\n role=\"region\"\n aria-hidden={!isExpanded}\n className={cx('brycks-accordion-content', className)}\n style={contentStyle}\n {...props}\n >\n <div style={innerStyle}>{children}</div>\n </div>\n )\n})\n\nAccordionContent.displayName = 'AccordionContent'\n","/**\n * Dropdown Component\n *\n * A dropdown menu with keyboard navigation support.\n * Can be used for actions, navigation, or selection.\n */\n\nimport {\n forwardRef,\n useState,\n useCallback,\n useRef,\n useEffect,\n cloneElement,\n createContext,\n useContext,\n type CSSProperties,\n type ReactNode,\n type ReactElement,\n type HTMLAttributes,\n type KeyboardEvent,\n} from 'react'\nimport { createPortal } from 'react-dom'\nimport { cx } from '../../../utils/styles'\n\nexport type DropdownPlacement = 'bottom-start' | 'bottom-end' | 'top-start' | 'top-end'\n\ninterface DropdownContextValue {\n isOpen: boolean\n close: () => void\n activeIndex: number\n setActiveIndex: (index: number) => void\n}\n\nconst DropdownContext = createContext<DropdownContextValue | null>(null)\n\nfunction useDropdownContext() {\n const context = useContext(DropdownContext)\n if (!context) {\n throw new Error('Dropdown components must be used within a Dropdown')\n }\n return context\n}\n\nexport interface DropdownProps extends HTMLAttributes<HTMLDivElement> {\n /** Trigger element */\n trigger: ReactElement\n /** Whether the dropdown is open (controlled) */\n isOpen?: boolean\n /** Default open state (uncontrolled) */\n defaultOpen?: boolean\n /** Callback when open state changes */\n onOpenChange?: (isOpen: boolean) => void\n /** Dropdown placement */\n placement?: DropdownPlacement\n /** Offset from trigger */\n offset?: number\n /** Whether to close on item select */\n closeOnSelect?: boolean\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nexport const Dropdown = forwardRef<HTMLDivElement, DropdownProps>(function Dropdown(\n {\n trigger,\n isOpen: controlledIsOpen,\n defaultOpen = false,\n onOpenChange,\n placement = 'bottom-start',\n offset = 4,\n closeOnSelect = true,\n className,\n style,\n children,\n testId,\n ...props\n },\n ref\n) {\n const [internalIsOpen, setInternalIsOpen] = useState(defaultOpen)\n const [position, setPosition] = useState({ top: 0, left: 0 })\n const [activeIndex, setActiveIndex] = useState(-1)\n const [mounted, setMounted] = useState(false)\n const triggerRef = useRef<HTMLElement>(null)\n const menuRef = useRef<HTMLDivElement>(null)\n\n const isOpen = controlledIsOpen ?? internalIsOpen\n\n useEffect(() => {\n setMounted(true)\n return () => setMounted(false)\n }, [])\n\n const setIsOpen = useCallback(\n (open: boolean) => {\n if (controlledIsOpen === undefined) {\n setInternalIsOpen(open)\n }\n onOpenChange?.(open)\n if (!open) {\n setActiveIndex(-1)\n }\n },\n [controlledIsOpen, onOpenChange]\n )\n\n const close = useCallback(() => setIsOpen(false), [setIsOpen])\n\n // Calculate position\n useEffect(() => {\n if (!isOpen || !triggerRef.current || !mounted) return\n\n const updatePosition = () => {\n const trigger = triggerRef.current\n if (!trigger) return\n\n const rect = trigger.getBoundingClientRect()\n const scrollX = window.scrollX\n const scrollY = window.scrollY\n\n let top = 0\n let left = 0\n\n if (placement.startsWith('bottom')) {\n top = rect.bottom + scrollY + offset\n } else {\n top = rect.top + scrollY - offset\n }\n\n if (placement.endsWith('start')) {\n left = rect.left + scrollX\n } else {\n left = rect.right + scrollX\n }\n\n setPosition({ top, left })\n }\n\n updatePosition()\n window.addEventListener('resize', updatePosition)\n window.addEventListener('scroll', updatePosition, true)\n\n return () => {\n window.removeEventListener('resize', updatePosition)\n window.removeEventListener('scroll', updatePosition, true)\n }\n }, [isOpen, placement, offset, mounted])\n\n // Close on outside click\n useEffect(() => {\n if (!isOpen) return\n\n const handleClick = (e: MouseEvent) => {\n if (\n triggerRef.current?.contains(e.target as Node) ||\n menuRef.current?.contains(e.target as Node)\n ) {\n return\n }\n setIsOpen(false)\n }\n\n document.addEventListener('mousedown', handleClick)\n return () => document.removeEventListener('mousedown', handleClick)\n }, [isOpen, setIsOpen])\n\n // Keyboard navigation\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (!isOpen) {\n if (e.key === 'ArrowDown' || e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n setIsOpen(true)\n }\n return\n }\n\n const items = menuRef.current?.querySelectorAll<HTMLElement>('[role=\"menuitem\"]:not([aria-disabled=\"true\"])')\n if (!items?.length) return\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault()\n setActiveIndex((prev) => (prev + 1) % items.length)\n break\n case 'ArrowUp':\n e.preventDefault()\n setActiveIndex((prev) => (prev - 1 + items.length) % items.length)\n break\n case 'Home':\n e.preventDefault()\n setActiveIndex(0)\n break\n case 'End':\n e.preventDefault()\n setActiveIndex(items.length - 1)\n break\n case 'Escape':\n e.preventDefault()\n setIsOpen(false)\n triggerRef.current?.focus()\n break\n case 'Enter':\n case ' ':\n e.preventDefault()\n if (activeIndex >= 0) {\n items[activeIndex]?.click()\n }\n break\n }\n },\n [isOpen, activeIndex, setIsOpen]\n )\n\n // Focus active item\n useEffect(() => {\n if (!isOpen || activeIndex < 0) return\n const items = menuRef.current?.querySelectorAll<HTMLElement>('[role=\"menuitem\"]:not([aria-disabled=\"true\"])')\n items?.[activeIndex]?.focus()\n }, [isOpen, activeIndex])\n\n const triggerProps = trigger.props as Record<string, unknown>\n const triggerElement = cloneElement(trigger as ReactElement<Record<string, unknown>>, {\n ref: triggerRef,\n 'aria-haspopup': 'menu',\n 'aria-expanded': isOpen,\n onClick: (e: React.MouseEvent) => {\n (triggerProps.onClick as ((e: React.MouseEvent) => void) | undefined)?.(e)\n setIsOpen(!isOpen)\n },\n onKeyDown: (e: KeyboardEvent) => {\n (triggerProps.onKeyDown as ((e: KeyboardEvent) => void) | undefined)?.(e)\n handleKeyDown(e)\n },\n })\n\n const menuStyle: CSSProperties = {\n position: 'absolute',\n top: position.top,\n left: placement.endsWith('end') ? 'auto' : position.left,\n right: placement.endsWith('end') ? window.innerWidth - position.left : 'auto',\n zIndex: 'var(--brycks-z-dropdown)' as unknown as number,\n minWidth: triggerRef.current?.offsetWidth ?? 160,\n backgroundColor: 'var(--brycks-background-elevated)',\n border: '1px solid var(--brycks-border-default)',\n borderRadius: 'var(--brycks-radius-lg)',\n boxShadow: 'var(--brycks-shadow-lg)',\n padding: 4,\n animation: 'brycks-dropdown-in 150ms ease-out',\n outline: 'none',\n ...style,\n }\n\n return (\n <DropdownContext.Provider value={{ isOpen, close: closeOnSelect ? close : () => {}, activeIndex, setActiveIndex }}>\n <div\n ref={ref}\n className={cx('brycks-dropdown', className)}\n style={{ display: 'inline-block' }}\n data-testid={testId}\n {...props}\n >\n {triggerElement}\n {isOpen && mounted && createPortal(\n <>\n <style>\n {`\n @keyframes brycks-dropdown-in {\n from { opacity: 0; transform: translateY(-4px); }\n to { opacity: 1; transform: translateY(0); }\n }\n `}\n </style>\n <div\n ref={menuRef}\n role=\"menu\"\n style={menuStyle}\n onKeyDown={handleKeyDown}\n tabIndex={-1}\n >\n {children}\n </div>\n </>,\n document.body\n )}\n </div>\n </DropdownContext.Provider>\n )\n})\n\nDropdown.displayName = 'Dropdown'\n\n// DropdownItem\nexport interface DropdownItemProps extends HTMLAttributes<HTMLDivElement> {\n /** Whether the item is disabled */\n disabled?: boolean\n /** Icon before the label */\n icon?: ReactNode\n /** Shortcut text */\n shortcut?: string\n /** Whether the item is destructive */\n destructive?: boolean\n /** Custom class name */\n className?: string\n}\n\nexport const DropdownItem = forwardRef<HTMLDivElement, DropdownItemProps>(function DropdownItem(\n { disabled = false, icon, shortcut, destructive = false, className, style, children, onClick, ...props },\n ref\n) {\n const { close } = useDropdownContext()\n\n const handleClick = (e: React.MouseEvent<HTMLDivElement>) => {\n if (disabled) return\n onClick?.(e)\n close()\n }\n\n const itemStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 10,\n padding: '8px 12px',\n fontSize: 14,\n color: disabled\n ? 'var(--brycks-foreground-disabled)'\n : destructive\n ? 'var(--brycks-error-default)'\n : 'var(--brycks-foreground-default)',\n backgroundColor: 'transparent',\n borderRadius: 'var(--brycks-radius-md)',\n cursor: disabled ? 'not-allowed' : 'pointer',\n transition: 'background-color 100ms ease-out',\n outline: 'none',\n ...style,\n }\n\n const iconStyle: CSSProperties = {\n width: 16,\n height: 16,\n color: disabled\n ? 'var(--brycks-foreground-disabled)'\n : destructive\n ? 'var(--brycks-error-default)'\n : 'var(--brycks-foreground-muted)',\n flexShrink: 0,\n }\n\n const shortcutStyle: CSSProperties = {\n marginLeft: 'auto',\n fontSize: 12,\n color: 'var(--brycks-foreground-muted)',\n fontFamily: 'var(--brycks-font-mono)',\n }\n\n return (\n <div\n ref={ref}\n role=\"menuitem\"\n aria-disabled={disabled}\n tabIndex={disabled ? -1 : 0}\n className={cx('brycks-dropdown-item', disabled && 'brycks-dropdown-item--disabled', className)}\n style={itemStyle}\n onClick={handleClick}\n onMouseEnter={(e) => {\n if (!disabled) {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent'\n }}\n onFocus={(e) => {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n }}\n onBlur={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent'\n }}\n {...props}\n >\n {icon && <span style={iconStyle}>{icon}</span>}\n <span style={{ flex: 1 }}>{children}</span>\n {shortcut && <span style={shortcutStyle}>{shortcut}</span>}\n </div>\n )\n})\n\nDropdownItem.displayName = 'DropdownItem'\n\n// DropdownDivider\nexport interface DropdownDividerProps extends HTMLAttributes<HTMLDivElement> {\n /** Custom class name */\n className?: string\n}\n\nexport const DropdownDivider = forwardRef<HTMLDivElement, DropdownDividerProps>(function DropdownDivider(\n { className, style, ...props },\n ref\n) {\n const dividerStyle: CSSProperties = {\n height: 1,\n backgroundColor: 'var(--brycks-border-muted)',\n margin: '4px 0',\n ...style,\n }\n\n return (\n <div\n ref={ref}\n role=\"separator\"\n className={cx('brycks-dropdown-divider', className)}\n style={dividerStyle}\n {...props}\n />\n )\n})\n\nDropdownDivider.displayName = 'DropdownDivider'\n\n// DropdownLabel\nexport interface DropdownLabelProps extends HTMLAttributes<HTMLDivElement> {\n /** Custom class name */\n className?: string\n}\n\nexport const DropdownLabel = forwardRef<HTMLDivElement, DropdownLabelProps>(function DropdownLabel(\n { className, style, children, ...props },\n ref\n) {\n const labelStyle: CSSProperties = {\n padding: '8px 12px 4px 12px',\n fontSize: 11,\n fontWeight: 600,\n color: 'var(--brycks-foreground-muted)',\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n ...style,\n }\n\n return (\n <div\n ref={ref}\n className={cx('brycks-dropdown-label', className)}\n style={labelStyle}\n {...props}\n >\n {children}\n </div>\n )\n})\n\nDropdownLabel.displayName = 'DropdownLabel'\n","/**\n * Menu Component\n *\n * A vertical navigation menu with support for nested items.\n * Suitable for sidebars and navigation panels.\n */\n\nimport {\n forwardRef,\n useState,\n createContext,\n useContext,\n type CSSProperties,\n type ReactNode,\n type HTMLAttributes,\n} from 'react'\nimport { cx } from '../../../utils/styles'\n\nexport type MenuSize = 'sm' | 'md' | 'lg'\n\ninterface MenuContextValue {\n size: MenuSize\n activeItem: string | null\n setActiveItem: (value: string | null) => void\n collapsed: boolean\n}\n\nconst MenuContext = createContext<MenuContextValue | null>(null)\n\nfunction useMenuContext() {\n const context = useContext(MenuContext)\n if (!context) {\n throw new Error('Menu components must be used within a Menu')\n }\n return context\n}\n\nexport interface MenuProps extends Omit<HTMLAttributes<HTMLElement>, 'onChange'> {\n /** Currently active item */\n activeItem?: string | null\n /** Callback when active item changes */\n onChange?: (value: string | null) => void\n /** Menu size */\n size?: MenuSize\n /** Whether the menu is collapsed (icons only) */\n collapsed?: boolean\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nexport const Menu = forwardRef<HTMLElement, MenuProps>(function Menu(\n {\n activeItem: controlledActiveItem,\n onChange,\n size = 'md',\n collapsed = false,\n className,\n style,\n children,\n testId,\n ...props\n },\n ref\n) {\n const [internalActiveItem, setInternalActiveItem] = useState<string | null>(null)\n const activeItem = controlledActiveItem !== undefined ? controlledActiveItem : internalActiveItem\n\n const setActiveItem = (value: string | null) => {\n if (controlledActiveItem === undefined) {\n setInternalActiveItem(value)\n }\n onChange?.(value)\n }\n\n const menuStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n padding: 8,\n ...style,\n }\n\n return (\n <MenuContext.Provider value={{ size, activeItem, setActiveItem, collapsed }}>\n <nav\n ref={ref}\n className={cx('brycks-menu', `brycks-menu--${size}`, collapsed && 'brycks-menu--collapsed', className)}\n style={menuStyle}\n data-testid={testId}\n {...props}\n >\n {children}\n </nav>\n </MenuContext.Provider>\n )\n})\n\nMenu.displayName = 'Menu'\n\n// MenuItem\nexport interface MenuItemProps extends Omit<HTMLAttributes<HTMLButtonElement>, 'onClick'> {\n /** Item value (unique identifier) */\n value: string\n /** Icon before the label */\n icon?: ReactNode\n /** Badge/count after the label */\n badge?: ReactNode\n /** Whether the item is disabled */\n disabled?: boolean\n /** Callback when clicked */\n onClick?: (value: string) => void\n /** Custom class name */\n className?: string\n}\n\nconst sizeConfig: Record<MenuSize, { height: number; fontSize: number; iconSize: number; padding: number }> = {\n sm: { height: 32, fontSize: 13, iconSize: 16, padding: 10 },\n md: { height: 40, fontSize: 14, iconSize: 18, padding: 12 },\n lg: { height: 48, fontSize: 16, iconSize: 20, padding: 14 },\n}\n\nexport const MenuItem = forwardRef<HTMLButtonElement, MenuItemProps>(function MenuItem(\n { value, icon, badge, disabled = false, onClick, className, style, children, ...props },\n ref\n) {\n const { size, activeItem, setActiveItem, collapsed } = useMenuContext()\n const isActive = activeItem === value\n const config = sizeConfig[size]\n\n const handleClick = () => {\n if (disabled) return\n setActiveItem(value)\n onClick?.(value)\n }\n\n const itemStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 10,\n width: '100%',\n minHeight: config.height,\n padding: collapsed ? config.padding : `0 ${config.padding}px`,\n fontSize: config.fontSize,\n fontWeight: isActive ? 600 : 500,\n color: disabled\n ? 'var(--brycks-foreground-disabled)'\n : isActive\n ? 'var(--brycks-primary-default)'\n : 'var(--brycks-foreground-default)',\n backgroundColor: isActive ? 'var(--brycks-primary-50)' : 'transparent',\n border: 'none',\n borderRadius: 'var(--brycks-radius-md)',\n cursor: disabled ? 'not-allowed' : 'pointer',\n transition: 'all 150ms ease-out',\n textAlign: 'left',\n outline: 'none',\n justifyContent: collapsed ? 'center' : 'flex-start',\n ...style,\n }\n\n const iconStyle: CSSProperties = {\n width: config.iconSize,\n height: config.iconSize,\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }\n\n const badgeStyle: CSSProperties = {\n marginLeft: 'auto',\n }\n\n return (\n <button\n ref={ref}\n type=\"button\"\n disabled={disabled}\n className={cx('brycks-menu-item', isActive && 'brycks-menu-item--active', className)}\n style={itemStyle}\n onClick={handleClick}\n onMouseEnter={(e) => {\n if (!disabled && !isActive) {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n }\n }}\n onMouseLeave={(e) => {\n if (!isActive) {\n e.currentTarget.style.backgroundColor = 'transparent'\n }\n }}\n title={collapsed ? String(children) : undefined}\n {...props}\n >\n {icon && <span style={iconStyle}>{icon}</span>}\n {!collapsed && <span style={{ flex: 1 }}>{children}</span>}\n {!collapsed && badge && <span style={badgeStyle}>{badge}</span>}\n </button>\n )\n})\n\nMenuItem.displayName = 'MenuItem'\n\n// MenuGroup\nexport interface MenuGroupProps extends HTMLAttributes<HTMLDivElement> {\n /** Group label */\n label?: string\n /** Custom class name */\n className?: string\n}\n\nexport const MenuGroup = forwardRef<HTMLDivElement, MenuGroupProps>(function MenuGroup(\n { label, className, style, children, ...props },\n ref\n) {\n const { collapsed } = useMenuContext()\n\n const groupStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n ...style,\n }\n\n const labelStyle: CSSProperties = {\n padding: '12px 12px 6px 12px',\n fontSize: 11,\n fontWeight: 600,\n color: 'var(--brycks-foreground-muted)',\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n }\n\n return (\n <div ref={ref} className={cx('brycks-menu-group', className)} style={groupStyle} {...props}>\n {label && !collapsed && <div style={labelStyle}>{label}</div>}\n {children}\n </div>\n )\n})\n\nMenuGroup.displayName = 'MenuGroup'\n\n// MenuDivider\nexport interface MenuDividerProps extends HTMLAttributes<HTMLDivElement> {\n /** Custom class name */\n className?: string\n}\n\nexport const MenuDivider = forwardRef<HTMLDivElement, MenuDividerProps>(function MenuDivider(\n { className, style, ...props },\n ref\n) {\n const dividerStyle: CSSProperties = {\n height: 1,\n backgroundColor: 'var(--brycks-border-muted)',\n margin: '8px 0',\n ...style,\n }\n\n return (\n <div\n ref={ref}\n role=\"separator\"\n className={cx('brycks-menu-divider', className)}\n style={dividerStyle}\n {...props}\n />\n )\n})\n\nMenuDivider.displayName = 'MenuDivider'\n","/**\n * Pagination Component\n *\n * A pagination control for navigating through pages.\n * Supports different sizes and display modes.\n */\n\nimport { forwardRef, useMemo, type CSSProperties, type HTMLAttributes } from 'react'\nimport { cx } from '../../../utils/styles'\n\nexport type PaginationSize = 'sm' | 'md' | 'lg'\nexport type PaginationVariant = 'default' | 'simple' | 'minimal'\n\nexport interface PaginationProps extends Omit<HTMLAttributes<HTMLElement>, 'onChange'> {\n /** Current page (1-indexed) */\n page: number\n /** Total number of pages */\n totalPages: number\n /** Callback when page changes */\n onChange: (page: number) => void\n /** Pagination size */\n size?: PaginationSize\n /** Pagination variant */\n variant?: PaginationVariant\n /** Number of sibling pages to show on each side */\n siblingCount?: number\n /** Whether to show first/last buttons */\n showFirstLast?: boolean\n /** Whether to show prev/next buttons */\n showPrevNext?: boolean\n /** Whether the component is disabled */\n disabled?: boolean\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst sizeConfig: Record<PaginationSize, { height: number; fontSize: number; gap: number; minWidth: number }> = {\n sm: { height: 28, fontSize: 12, gap: 4, minWidth: 28 },\n md: { height: 36, fontSize: 14, gap: 6, minWidth: 36 },\n lg: { height: 44, fontSize: 16, gap: 8, minWidth: 44 },\n}\n\nfunction ChevronLeftIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M10 12L6 8l4-4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )\n}\n\nfunction ChevronRightIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M6 4l4 4-4 4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )\n}\n\nfunction ChevronsLeftIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M11 12l-4-4 4-4M7 12l-4-4 4-4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )\n}\n\nfunction ChevronsRightIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M5 4l4 4-4 4M9 4l4 4-4 4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )\n}\n\nexport const Pagination = forwardRef<HTMLElement, PaginationProps>(function Pagination(\n {\n page,\n totalPages,\n onChange,\n size = 'md',\n variant = 'default',\n siblingCount = 1,\n showFirstLast = true,\n showPrevNext = true,\n disabled = false,\n className,\n style,\n testId,\n ...props\n },\n ref\n) {\n const config = sizeConfig[size]\n\n // Generate page numbers to display\n const pages = useMemo(() => {\n if (variant === 'minimal' || variant === 'simple') {\n return []\n }\n\n const range: (number | 'ellipsis')[] = []\n const leftSibling = Math.max(page - siblingCount, 1)\n const rightSibling = Math.min(page + siblingCount, totalPages)\n\n const showLeftEllipsis = leftSibling > 2\n const showRightEllipsis = rightSibling < totalPages - 1\n\n if (!showLeftEllipsis) {\n for (let i = 1; i <= Math.min(3 + siblingCount, totalPages); i++) {\n range.push(i)\n }\n if (showRightEllipsis) {\n range.push('ellipsis')\n range.push(totalPages)\n }\n } else if (!showRightEllipsis) {\n range.push(1)\n range.push('ellipsis')\n for (let i = Math.max(totalPages - 2 - siblingCount, 1); i <= totalPages; i++) {\n range.push(i)\n }\n } else {\n range.push(1)\n range.push('ellipsis')\n for (let i = leftSibling; i <= rightSibling; i++) {\n range.push(i)\n }\n range.push('ellipsis')\n range.push(totalPages)\n }\n\n return range\n }, [page, totalPages, siblingCount, variant])\n\n const containerStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: config.gap,\n ...style,\n }\n\n const getButtonStyle = (isActive: boolean, isDisabled: boolean): CSSProperties => ({\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n minWidth: config.minWidth,\n height: config.height,\n padding: `0 ${config.gap + 4}px`,\n fontSize: config.fontSize,\n fontWeight: isActive ? 600 : 500,\n color: isDisabled\n ? 'var(--brycks-foreground-disabled)'\n : isActive\n ? 'var(--brycks-primary-default)'\n : 'var(--brycks-foreground-default)',\n backgroundColor: isActive ? 'var(--brycks-primary-50)' : 'transparent',\n border: 'none',\n borderRadius: 'var(--brycks-radius-md)',\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n transition: 'all 150ms ease-out',\n outline: 'none',\n })\n\n const ellipsisStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n minWidth: config.minWidth,\n height: config.height,\n color: 'var(--brycks-foreground-muted)',\n fontSize: config.fontSize,\n }\n\n const infoStyle: CSSProperties = {\n fontSize: config.fontSize,\n color: 'var(--brycks-foreground-muted)',\n padding: `0 ${config.gap}px`,\n }\n\n const handlePageChange = (newPage: number) => {\n if (newPage >= 1 && newPage <= totalPages && newPage !== page && !disabled) {\n onChange(newPage)\n }\n }\n\n return (\n <nav\n ref={ref}\n role=\"navigation\"\n aria-label=\"Pagination\"\n className={cx('brycks-pagination', `brycks-pagination--${size}`, `brycks-pagination--${variant}`, className)}\n style={containerStyle}\n data-testid={testId}\n {...props}\n >\n {showFirstLast && variant !== 'minimal' && (\n <button\n type=\"button\"\n aria-label=\"First page\"\n disabled={page === 1 || disabled}\n style={getButtonStyle(false, page === 1 || disabled)}\n onClick={() => handlePageChange(1)}\n onMouseEnter={(e) => {\n if (page !== 1 && !disabled) {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent'\n }}\n >\n <ChevronsLeftIcon />\n </button>\n )}\n\n {showPrevNext && (\n <button\n type=\"button\"\n aria-label=\"Previous page\"\n disabled={page === 1 || disabled}\n style={getButtonStyle(false, page === 1 || disabled)}\n onClick={() => handlePageChange(page - 1)}\n onMouseEnter={(e) => {\n if (page !== 1 && !disabled) {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent'\n }}\n >\n <ChevronLeftIcon />\n </button>\n )}\n\n {variant === 'simple' || variant === 'minimal' ? (\n <span style={infoStyle}>\n {variant === 'minimal' ? `${page} / ${totalPages}` : `Page ${page} of ${totalPages}`}\n </span>\n ) : (\n pages.map((p, index) =>\n p === 'ellipsis' ? (\n <span key={`ellipsis-${index}`} style={ellipsisStyle}>\n ...\n </span>\n ) : (\n <button\n key={p}\n type=\"button\"\n aria-label={`Page ${p}`}\n aria-current={p === page ? 'page' : undefined}\n disabled={disabled}\n style={getButtonStyle(p === page, disabled)}\n onClick={() => handlePageChange(p)}\n onMouseEnter={(e) => {\n if (p !== page && !disabled) {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n }\n }}\n onMouseLeave={(e) => {\n if (p !== page) {\n e.currentTarget.style.backgroundColor = 'transparent'\n }\n }}\n >\n {p}\n </button>\n )\n )\n )}\n\n {showPrevNext && (\n <button\n type=\"button\"\n aria-label=\"Next page\"\n disabled={page === totalPages || disabled}\n style={getButtonStyle(false, page === totalPages || disabled)}\n onClick={() => handlePageChange(page + 1)}\n onMouseEnter={(e) => {\n if (page !== totalPages && !disabled) {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent'\n }}\n >\n <ChevronRightIcon />\n </button>\n )}\n\n {showFirstLast && variant !== 'minimal' && (\n <button\n type=\"button\"\n aria-label=\"Last page\"\n disabled={page === totalPages || disabled}\n style={getButtonStyle(false, page === totalPages || disabled)}\n onClick={() => handlePageChange(totalPages)}\n onMouseEnter={(e) => {\n if (page !== totalPages && !disabled) {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent'\n }}\n >\n <ChevronsRightIcon />\n </button>\n )}\n </nav>\n )\n})\n\nPagination.displayName = 'Pagination'\n","/**\n * Breadcrumb Component\n *\n * A navigation breadcrumb trail showing the current location.\n * Supports custom separators and link rendering.\n */\n\nimport {\n forwardRef,\n Children,\n cloneElement,\n isValidElement,\n type CSSProperties,\n type ReactNode,\n type HTMLAttributes,\n type ElementType,\n} from 'react'\nimport { cx } from '../../../utils/styles'\n\nexport type BreadcrumbSize = 'sm' | 'md' | 'lg'\n\nexport interface BreadcrumbProps extends HTMLAttributes<HTMLElement> {\n /** Custom separator between items */\n separator?: ReactNode\n /** Breadcrumb size */\n size?: BreadcrumbSize\n /** Maximum items to show (rest collapsed) */\n maxItems?: number\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst sizeConfig: Record<BreadcrumbSize, { fontSize: number; gap: number; iconSize: number }> = {\n sm: { fontSize: 12, gap: 6, iconSize: 12 },\n md: { fontSize: 14, gap: 8, iconSize: 14 },\n lg: { fontSize: 16, gap: 10, iconSize: 16 },\n}\n\nfunction DefaultSeparator({ size }: { size: number }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M6 4l4 4-4 4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )\n}\n\nexport const Breadcrumb = forwardRef<HTMLElement, BreadcrumbProps>(function Breadcrumb(\n {\n separator,\n size = 'md',\n maxItems,\n className,\n style,\n children,\n testId,\n ...props\n },\n ref\n) {\n const config = sizeConfig[size]\n const items = Children.toArray(children).filter(isValidElement)\n\n // Handle maxItems truncation\n let visibleItems = items\n let showEllipsis = false\n\n if (maxItems && items.length > maxItems) {\n const sideCount = Math.floor((maxItems - 1) / 2)\n visibleItems = [\n ...items.slice(0, sideCount),\n ...items.slice(items.length - (maxItems - sideCount - 1)),\n ]\n showEllipsis = true\n }\n\n const navStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n ...style,\n }\n\n const listStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: config.gap,\n listStyle: 'none',\n margin: 0,\n padding: 0,\n }\n\n const separatorStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n color: 'var(--brycks-foreground-muted)',\n }\n\n const ellipsisStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n color: 'var(--brycks-foreground-muted)',\n fontSize: config.fontSize,\n }\n\n const renderSeparator = () => (\n <span style={separatorStyle} aria-hidden=\"true\">\n {separator ?? <DefaultSeparator size={config.iconSize} />}\n </span>\n )\n\n return (\n <nav\n ref={ref}\n aria-label=\"Breadcrumb\"\n className={cx('brycks-breadcrumb', `brycks-breadcrumb--${size}`, className)}\n style={navStyle}\n data-testid={testId}\n {...props}\n >\n <ol style={listStyle}>\n {visibleItems.map((child, index) => {\n const isLast = index === visibleItems.length - 1\n const showSeparator = !isLast\n\n // Insert ellipsis after first item if truncating\n const showEllipsisHere = showEllipsis && index === Math.floor((maxItems! - 1) / 2) - 1\n\n return (\n <li key={index} style={{ display: 'flex', alignItems: 'center', gap: config.gap }}>\n {cloneElement(child as React.ReactElement<BreadcrumbItemProps>, {\n isCurrentPage: isLast,\n size,\n })}\n {showEllipsisHere && (\n <>\n {renderSeparator()}\n <span style={ellipsisStyle}>...</span>\n </>\n )}\n {showSeparator && renderSeparator()}\n </li>\n )\n })}\n </ol>\n </nav>\n )\n})\n\nBreadcrumb.displayName = 'Breadcrumb'\n\n// BreadcrumbItem\nexport interface BreadcrumbItemProps extends HTMLAttributes<HTMLElement> {\n /** Render as link or custom element */\n as?: ElementType\n /** Link href (when as=\"a\") */\n href?: string\n /** Icon before the label */\n icon?: ReactNode\n /** Whether this is the current page (auto-set by parent) */\n isCurrentPage?: boolean\n /** Size (auto-set by parent) */\n size?: BreadcrumbSize\n /** Custom class name */\n className?: string\n}\n\nexport const BreadcrumbItem = forwardRef<HTMLElement, BreadcrumbItemProps>(function BreadcrumbItem(\n {\n as: Component = 'a',\n href,\n icon,\n isCurrentPage = false,\n size = 'md',\n className,\n style,\n children,\n ...props\n },\n ref\n) {\n const config = sizeConfig[size]\n\n const itemStyle: CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n gap: 6,\n fontSize: config.fontSize,\n fontWeight: isCurrentPage ? 500 : 400,\n color: isCurrentPage ? 'var(--brycks-foreground-default)' : 'var(--brycks-foreground-muted)',\n textDecoration: 'none',\n transition: 'color 150ms ease-out',\n cursor: isCurrentPage ? 'default' : 'pointer',\n ...style,\n }\n\n const iconStyle: CSSProperties = {\n width: config.iconSize,\n height: config.iconSize,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n }\n\n const componentProps: Record<string, unknown> = {\n ref,\n className: cx('brycks-breadcrumb-item', isCurrentPage && 'brycks-breadcrumb-item--current', className),\n style: itemStyle,\n 'aria-current': isCurrentPage ? 'page' : undefined,\n ...props,\n }\n\n if (Component === 'a' && href && !isCurrentPage) {\n componentProps.href = href\n }\n\n // Remove href for current page or non-link elements\n if (isCurrentPage && Component === 'a') {\n componentProps.tabIndex = -1\n }\n\n return (\n <Component\n {...componentProps}\n onMouseEnter={(e: React.MouseEvent<HTMLElement>) => {\n if (!isCurrentPage) {\n e.currentTarget.style.color = 'var(--brycks-foreground-default)'\n }\n }}\n onMouseLeave={(e: React.MouseEvent<HTMLElement>) => {\n if (!isCurrentPage) {\n e.currentTarget.style.color = 'var(--brycks-foreground-muted)'\n }\n }}\n >\n {icon && <span style={iconStyle}>{icon}</span>}\n {children}\n </Component>\n )\n})\n\nBreadcrumbItem.displayName = 'BreadcrumbItem'\n","/**\n * Table Component\n *\n * A flexible table component with sorting, selection, and responsive support.\n * Follows design system patterns for consistent styling.\n */\n\nimport {\n forwardRef,\n createContext,\n useContext,\n type CSSProperties,\n type HTMLAttributes,\n type ThHTMLAttributes,\n type TdHTMLAttributes,\n} from 'react'\nimport { cx } from '../../../utils/styles'\n\nexport type TableSize = 'sm' | 'md' | 'lg'\nexport type TableVariant = 'default' | 'striped' | 'bordered'\n\ninterface TableContextValue {\n size: TableSize\n variant: TableVariant\n}\n\nconst TableContext = createContext<TableContextValue>({ size: 'md', variant: 'default' })\n\nfunction useTableContext() {\n return useContext(TableContext)\n}\n\nexport interface TableProps extends HTMLAttributes<HTMLTableElement> {\n /** Table size */\n size?: TableSize\n /** Table variant */\n variant?: TableVariant\n /** Whether the table has a sticky header */\n stickyHeader?: boolean\n /** Whether the table is in a loading state */\n loading?: boolean\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst sizeConfig: Record<TableSize, { fontSize: number; padding: string; headerPadding: string }> = {\n sm: { fontSize: 13, padding: '8px 12px', headerPadding: '8px 12px' },\n md: { fontSize: 14, padding: '12px 16px', headerPadding: '12px 16px' },\n lg: { fontSize: 15, padding: '16px 20px', headerPadding: '14px 20px' },\n}\n\nexport const Table = forwardRef<HTMLTableElement, TableProps>(function Table(\n {\n size = 'md',\n variant = 'default',\n stickyHeader = false,\n loading = false,\n className,\n style,\n children,\n testId,\n ...props\n },\n ref\n) {\n const containerStyle: CSSProperties = {\n position: 'relative',\n width: '100%',\n overflow: 'auto',\n ...style,\n }\n\n const tableStyle: CSSProperties = {\n width: '100%',\n borderCollapse: variant === 'bordered' ? 'separate' : 'collapse',\n borderSpacing: 0,\n fontSize: sizeConfig[size].fontSize,\n opacity: loading ? 0.6 : 1,\n transition: 'opacity 150ms ease-out',\n }\n\n return (\n <TableContext.Provider value={{ size, variant }}>\n <div className=\"brycks-table-container\" style={containerStyle}>\n <table\n ref={ref}\n className={cx('brycks-table', `brycks-table--${size}`, `brycks-table--${variant}`, className)}\n style={tableStyle}\n data-testid={testId}\n {...props}\n >\n {children}\n </table>\n </div>\n </TableContext.Provider>\n )\n})\n\nTable.displayName = 'Table'\n\n// TableHead\nexport interface TableHeadProps extends HTMLAttributes<HTMLTableSectionElement> {\n /** Whether the header is sticky */\n sticky?: boolean\n /** Custom class name */\n className?: string\n}\n\nexport const TableHead = forwardRef<HTMLTableSectionElement, TableHeadProps>(function TableHead(\n { sticky = false, className, style, children, ...props },\n ref\n) {\n const headStyle: CSSProperties = {\n backgroundColor: 'var(--brycks-background-muted)',\n position: sticky ? 'sticky' : undefined,\n top: sticky ? 0 : undefined,\n zIndex: sticky ? 1 : undefined,\n ...style,\n }\n\n return (\n <thead\n ref={ref}\n className={cx('brycks-table-head', sticky && 'brycks-table-head--sticky', className)}\n style={headStyle}\n {...props}\n >\n {children}\n </thead>\n )\n})\n\nTableHead.displayName = 'TableHead'\n\n// TableBody\nexport interface TableBodyProps extends HTMLAttributes<HTMLTableSectionElement> {\n /** Custom class name */\n className?: string\n}\n\nexport const TableBody = forwardRef<HTMLTableSectionElement, TableBodyProps>(function TableBody(\n { className, style, children, ...props },\n ref\n) {\n const bodyStyle: CSSProperties = {\n ...style,\n }\n\n return (\n <tbody\n ref={ref}\n className={cx('brycks-table-body', className)}\n style={bodyStyle}\n {...props}\n >\n {children}\n </tbody>\n )\n})\n\nTableBody.displayName = 'TableBody'\n\n// TableRow\nexport interface TableRowProps extends HTMLAttributes<HTMLTableRowElement> {\n /** Whether the row is selected */\n selected?: boolean\n /** Whether the row is clickable */\n clickable?: boolean\n /** Custom class name */\n className?: string\n}\n\nexport const TableRow = forwardRef<HTMLTableRowElement, TableRowProps>(function TableRow(\n { selected = false, clickable = false, className, style, children, ...props },\n ref\n) {\n const { variant } = useTableContext()\n\n const rowStyle: CSSProperties = {\n backgroundColor: selected\n ? 'var(--brycks-primary-50)'\n : 'transparent',\n borderBottom: variant !== 'bordered' ? '1px solid var(--brycks-border-muted)' : undefined,\n cursor: clickable ? 'pointer' : undefined,\n transition: 'background-color 150ms ease-out',\n ...style,\n }\n\n return (\n <tr\n ref={ref}\n className={cx(\n 'brycks-table-row',\n selected && 'brycks-table-row--selected',\n clickable && 'brycks-table-row--clickable',\n className\n )}\n style={rowStyle}\n onMouseEnter={(e) => {\n if (clickable && !selected) {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n }\n }}\n onMouseLeave={(e) => {\n if (!selected) {\n e.currentTarget.style.backgroundColor = 'transparent'\n }\n }}\n {...props}\n >\n {children}\n </tr>\n )\n})\n\nTableRow.displayName = 'TableRow'\n\n// TableHeader (th)\nexport interface TableHeaderProps extends ThHTMLAttributes<HTMLTableCellElement> {\n /** Whether the column is sortable */\n sortable?: boolean\n /** Sort direction */\n sortDirection?: 'asc' | 'desc' | null\n /** Callback when sort is requested */\n onSort?: () => void\n /** Text alignment */\n align?: 'left' | 'center' | 'right'\n /** Custom class name */\n className?: string\n}\n\nfunction SortIcon({ direction }: { direction: 'asc' | 'desc' | null }) {\n if (!direction) {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" style={{ opacity: 0.4 }}>\n <path d=\"M7 3L10 6H4L7 3Z\" fill=\"currentColor\" />\n <path d=\"M7 11L4 8H10L7 11Z\" fill=\"currentColor\" />\n </svg>\n )\n }\n\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n {direction === 'asc' ? (\n <path d=\"M7 3L10 6H4L7 3Z\" fill=\"currentColor\" />\n ) : (\n <path d=\"M7 11L4 8H10L7 11Z\" fill=\"currentColor\" />\n )}\n </svg>\n )\n}\n\nexport const TableHeader = forwardRef<HTMLTableCellElement, TableHeaderProps>(function TableHeader(\n {\n sortable = false,\n sortDirection = null,\n onSort,\n align = 'left',\n className,\n style,\n children,\n ...props\n },\n ref\n) {\n const { size } = useTableContext()\n const config = sizeConfig[size]\n\n const headerStyle: CSSProperties = {\n padding: config.headerPadding,\n fontWeight: 600,\n color: 'var(--brycks-foreground-muted)',\n textAlign: align,\n whiteSpace: 'nowrap',\n cursor: sortable ? 'pointer' : undefined,\n userSelect: sortable ? 'none' : undefined,\n transition: 'color 150ms ease-out',\n ...style,\n }\n\n const contentStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n justifyContent: align === 'right' ? 'flex-end' : align === 'center' ? 'center' : 'flex-start',\n }\n\n const handleClick = () => {\n if (sortable && onSort) {\n onSort()\n }\n }\n\n return (\n <th\n ref={ref}\n className={cx('brycks-table-header', sortable && 'brycks-table-header--sortable', className)}\n style={headerStyle}\n onClick={handleClick}\n onMouseEnter={(e) => {\n if (sortable) {\n e.currentTarget.style.color = 'var(--brycks-foreground-default)'\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.color = 'var(--brycks-foreground-muted)'\n }}\n {...props}\n >\n <span style={contentStyle}>\n {children}\n {sortable && <SortIcon direction={sortDirection} />}\n </span>\n </th>\n )\n})\n\nTableHeader.displayName = 'TableHeader'\n\n// TableCell (td)\nexport interface TableCellProps extends TdHTMLAttributes<HTMLTableCellElement> {\n /** Text alignment */\n align?: 'left' | 'center' | 'right'\n /** Whether to truncate text */\n truncate?: boolean\n /** Custom class name */\n className?: string\n}\n\nexport const TableCell = forwardRef<HTMLTableCellElement, TableCellProps>(function TableCell(\n { align = 'left', truncate = false, className, style, children, ...props },\n ref\n) {\n const { size, variant } = useTableContext()\n const config = sizeConfig[size]\n\n const cellStyle: CSSProperties = {\n padding: config.padding,\n color: 'var(--brycks-foreground-default)',\n textAlign: align,\n verticalAlign: 'middle',\n border: variant === 'bordered' ? '1px solid var(--brycks-border-muted)' : undefined,\n maxWidth: truncate ? 200 : undefined,\n overflow: truncate ? 'hidden' : undefined,\n textOverflow: truncate ? 'ellipsis' : undefined,\n whiteSpace: truncate ? 'nowrap' : undefined,\n ...style,\n }\n\n return (\n <td\n ref={ref}\n className={cx('brycks-table-cell', truncate && 'brycks-table-cell--truncate', className)}\n style={cellStyle}\n title={truncate && typeof children === 'string' ? children : undefined}\n {...props}\n >\n {children}\n </td>\n )\n})\n\nTableCell.displayName = 'TableCell'\n\n// TableFoot\nexport interface TableFootProps extends HTMLAttributes<HTMLTableSectionElement> {\n /** Custom class name */\n className?: string\n}\n\nexport const TableFoot = forwardRef<HTMLTableSectionElement, TableFootProps>(function TableFoot(\n { className, style, children, ...props },\n ref\n) {\n const footStyle: CSSProperties = {\n backgroundColor: 'var(--brycks-background-muted)',\n fontWeight: 500,\n ...style,\n }\n\n return (\n <tfoot\n ref={ref}\n className={cx('brycks-table-foot', className)}\n style={footStyle}\n {...props}\n >\n {children}\n </tfoot>\n )\n})\n\nTableFoot.displayName = 'TableFoot'\n\n// TableCaption\nexport interface TableCaptionProps extends HTMLAttributes<HTMLTableCaptionElement> {\n /** Caption placement */\n placement?: 'top' | 'bottom'\n /** Custom class name */\n className?: string\n}\n\nexport const TableCaption = forwardRef<HTMLTableCaptionElement, TableCaptionProps>(function TableCaption(\n { placement = 'bottom', className, style, children, ...props },\n ref\n) {\n const captionStyle: CSSProperties = {\n captionSide: placement,\n padding: '12px 16px',\n fontSize: 13,\n color: 'var(--brycks-foreground-muted)',\n textAlign: 'left',\n ...style,\n }\n\n return (\n <caption\n ref={ref}\n className={cx('brycks-table-caption', className)}\n style={captionStyle}\n {...props}\n >\n {children}\n </caption>\n )\n})\n\nTableCaption.displayName = 'TableCaption'\n","/**\n * List Component\n *\n * A flexible list component for displaying items in a vertical layout.\n * Supports different sizes, icons, and interactive items.\n */\n\nimport {\n forwardRef,\n createContext,\n useContext,\n type CSSProperties,\n type ReactNode,\n type HTMLAttributes,\n} from 'react'\nimport { cx } from '../../../utils/styles'\n\nexport type ListSize = 'sm' | 'md' | 'lg'\nexport type ListVariant = 'default' | 'bordered' | 'separated'\n\ninterface ListContextValue {\n size: ListSize\n variant: ListVariant\n}\n\nconst ListContext = createContext<ListContextValue>({ size: 'md', variant: 'default' })\n\nfunction useListContext() {\n return useContext(ListContext)\n}\n\nexport interface ListProps extends HTMLAttributes<HTMLUListElement> {\n /** List size */\n size?: ListSize\n /** List variant */\n variant?: ListVariant\n /** Whether list items are interactive */\n interactive?: boolean\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nexport const List = forwardRef<HTMLUListElement, ListProps>(function List(\n {\n size = 'md',\n variant = 'default',\n interactive = false,\n className,\n style,\n children,\n testId,\n ...props\n },\n ref\n) {\n const listStyle: CSSProperties = {\n listStyle: 'none',\n margin: 0,\n padding: 0,\n display: 'flex',\n flexDirection: 'column',\n gap: variant === 'separated' ? 8 : 0,\n border: variant === 'bordered' ? '1px solid var(--brycks-border-default)' : undefined,\n borderRadius: variant === 'bordered' ? 'var(--brycks-radius-lg)' : undefined,\n overflow: variant === 'bordered' ? 'hidden' : undefined,\n ...style,\n }\n\n return (\n <ListContext.Provider value={{ size, variant }}>\n <ul\n ref={ref}\n className={cx(\n 'brycks-list',\n `brycks-list--${size}`,\n `brycks-list--${variant}`,\n interactive && 'brycks-list--interactive',\n className\n )}\n style={listStyle}\n data-testid={testId}\n {...props}\n >\n {children}\n </ul>\n </ListContext.Provider>\n )\n})\n\nList.displayName = 'List'\n\n// ListItem\nexport interface ListItemProps extends HTMLAttributes<HTMLLIElement> {\n /** Icon or avatar on the left */\n leftElement?: ReactNode\n /** Element on the right (badge, button, etc.) */\n rightElement?: ReactNode\n /** Secondary text below the main content */\n secondary?: ReactNode\n /** Whether the item is selected */\n selected?: boolean\n /** Whether the item is disabled */\n disabled?: boolean\n /** Whether the item is clickable */\n clickable?: boolean\n /** Custom class name */\n className?: string\n}\n\nconst sizeConfig: Record<ListSize, { padding: string; fontSize: number; secondarySize: number; gap: number; minHeight: number }> = {\n sm: { padding: '8px 12px', fontSize: 13, secondarySize: 12, gap: 10, minHeight: 40 },\n md: { padding: '12px 16px', fontSize: 14, secondarySize: 13, gap: 12, minHeight: 52 },\n lg: { padding: '16px 20px', fontSize: 16, secondarySize: 14, gap: 14, minHeight: 64 },\n}\n\nexport const ListItem = forwardRef<HTMLLIElement, ListItemProps>(function ListItem(\n {\n leftElement,\n rightElement,\n secondary,\n selected = false,\n disabled = false,\n clickable = false,\n className,\n style,\n children,\n ...props\n },\n ref\n) {\n const { size, variant } = useListContext()\n const config = sizeConfig[size]\n\n const itemStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: config.gap,\n padding: config.padding,\n minHeight: config.minHeight,\n backgroundColor: selected\n ? 'var(--brycks-primary-50)'\n : 'transparent',\n borderBottom: variant === 'default' || variant === 'bordered'\n ? '1px solid var(--brycks-border-muted)'\n : undefined,\n border: variant === 'separated' ? '1px solid var(--brycks-border-default)' : undefined,\n borderRadius: variant === 'separated' ? 'var(--brycks-radius-lg)' : undefined,\n cursor: disabled ? 'not-allowed' : clickable ? 'pointer' : undefined,\n opacity: disabled ? 0.5 : 1,\n transition: 'background-color 150ms ease-out',\n ...style,\n }\n\n const contentStyle: CSSProperties = {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n minWidth: 0,\n }\n\n const primaryStyle: CSSProperties = {\n fontSize: config.fontSize,\n fontWeight: 500,\n color: 'var(--brycks-foreground-default)',\n lineHeight: 1.4,\n }\n\n const secondaryStyle: CSSProperties = {\n fontSize: config.secondarySize,\n color: 'var(--brycks-foreground-muted)',\n lineHeight: 1.4,\n }\n\n const elementStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n }\n\n return (\n <li\n ref={ref}\n className={cx(\n 'brycks-list-item',\n selected && 'brycks-list-item--selected',\n clickable && 'brycks-list-item--clickable',\n disabled && 'brycks-list-item--disabled',\n className\n )}\n style={itemStyle}\n onMouseEnter={(e) => {\n if (clickable && !disabled && !selected) {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n }\n }}\n onMouseLeave={(e) => {\n if (!selected) {\n e.currentTarget.style.backgroundColor = 'transparent'\n }\n }}\n {...props}\n >\n {leftElement && <span style={elementStyle}>{leftElement}</span>}\n <div style={contentStyle}>\n <span style={primaryStyle}>{children}</span>\n {secondary && <span style={secondaryStyle}>{secondary}</span>}\n </div>\n {rightElement && <span style={elementStyle}>{rightElement}</span>}\n </li>\n )\n})\n\nListItem.displayName = 'ListItem'\n\n// ListDivider\nexport interface ListDividerProps extends HTMLAttributes<HTMLLIElement> {\n /** Custom class name */\n className?: string\n}\n\nexport const ListDivider = forwardRef<HTMLLIElement, ListDividerProps>(function ListDivider(\n { className, style, ...props },\n ref\n) {\n const dividerStyle: CSSProperties = {\n height: 1,\n backgroundColor: 'var(--brycks-border-muted)',\n margin: '8px 0',\n ...style,\n }\n\n return (\n <li\n ref={ref}\n role=\"separator\"\n className={cx('brycks-list-divider', className)}\n style={dividerStyle}\n {...props}\n />\n )\n})\n\nListDivider.displayName = 'ListDivider'\n\n// ListHeader\nexport interface ListHeaderProps extends HTMLAttributes<HTMLLIElement> {\n /** Custom class name */\n className?: string\n}\n\nexport const ListHeader = forwardRef<HTMLLIElement, ListHeaderProps>(function ListHeader(\n { className, style, children, ...props },\n ref\n) {\n const headerStyle: CSSProperties = {\n padding: '12px 16px 8px 16px',\n fontSize: 11,\n fontWeight: 600,\n color: 'var(--brycks-foreground-muted)',\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n ...style,\n }\n\n return (\n <li\n ref={ref}\n className={cx('brycks-list-header', className)}\n style={headerStyle}\n {...props}\n >\n {children}\n </li>\n )\n})\n\nListHeader.displayName = 'ListHeader'\n","/**\n * InfoItem Component\n *\n * A component for displaying label-value pairs in detail views.\n * Commonly used in detail pages to show information in a consistent format.\n *\n * @module components/data/InfoItem\n */\n\nimport { forwardRef, type HTMLAttributes, type ReactNode, type CSSProperties } from 'react'\nimport { spacing, fontSizes, fontWeights } from '../../../design-system'\nimport { cx } from '../../../utils/styles'\n\nexport type InfoItemLayout = 'vertical' | 'horizontal' | 'inline'\nexport type InfoItemSize = 'sm' | 'md' | 'lg'\n\nexport interface InfoItemProps extends HTMLAttributes<HTMLDivElement> {\n /** Label text */\n label: ReactNode\n /** Value to display */\n value?: ReactNode\n /** Children (alternative to value prop) */\n children?: ReactNode\n /** Layout direction */\n layout?: InfoItemLayout\n /** Size variant */\n size?: InfoItemSize\n /** Hide if value is empty */\n hideEmpty?: boolean\n /** Custom label width (for horizontal layout) */\n labelWidth?: string | number\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst sizeConfig: Record<InfoItemSize, { labelSize: number; valueSize: number; gap: number }> = {\n sm: {\n labelSize: fontSizes.xs,\n valueSize: fontSizes.sm,\n gap: spacing[0.5],\n },\n md: {\n labelSize: fontSizes.sm,\n valueSize: fontSizes.md,\n gap: spacing[1],\n },\n lg: {\n labelSize: fontSizes.md,\n valueSize: fontSizes.lg,\n gap: spacing[1.5],\n },\n}\n\nexport const InfoItem = forwardRef<HTMLDivElement, InfoItemProps>(function InfoItem(\n {\n label,\n value,\n children,\n layout = 'vertical',\n size = 'md',\n hideEmpty = false,\n labelWidth,\n className,\n style,\n testId,\n ...props\n },\n ref\n) {\n const displayValue = value ?? children\n const config = sizeConfig[size]\n\n // Hide if empty and hideEmpty is true\n if (hideEmpty && (displayValue === null || displayValue === undefined || displayValue === '')) {\n return null\n }\n\n const getContainerStyle = (): CSSProperties => {\n const base: CSSProperties = {\n display: 'flex',\n gap: config.gap,\n }\n\n switch (layout) {\n case 'vertical':\n return {\n ...base,\n flexDirection: 'column',\n }\n case 'horizontal':\n return {\n ...base,\n flexDirection: 'row',\n alignItems: 'flex-start',\n }\n case 'inline':\n return {\n ...base,\n flexDirection: 'row',\n alignItems: 'center',\n }\n default:\n return base\n }\n }\n\n const labelStyle: CSSProperties = {\n fontSize: config.labelSize,\n fontWeight: fontWeights.medium,\n color: 'var(--brycks-foreground-muted)',\n lineHeight: 1.4,\n ...(layout === 'horizontal' && labelWidth ? { width: labelWidth, flexShrink: 0 } : {}),\n }\n\n const valueStyle: CSSProperties = {\n fontSize: config.valueSize,\n fontWeight: fontWeights.regular,\n color: 'var(--brycks-foreground-default)',\n lineHeight: 1.5,\n ...(layout === 'horizontal' ? { flex: 1 } : {}),\n }\n\n return (\n <div\n ref={ref}\n className={cx(\n 'brycks-info-item',\n `brycks-info-item--${layout}`,\n `brycks-info-item--${size}`,\n className\n )}\n style={{ ...getContainerStyle(), ...style }}\n data-testid={testId}\n {...props}\n >\n <dt className=\"brycks-info-item__label\" style={labelStyle}>\n {label}\n </dt>\n <dd className=\"brycks-info-item__value\" style={{ ...valueStyle, margin: 0 }}>\n {displayValue ?? <span style={{ color: 'var(--brycks-foreground-muted)' }}>-</span>}\n </dd>\n </div>\n )\n})\n\nInfoItem.displayName = 'InfoItem'\n\n/**\n * InfoList Component\n *\n * A container for multiple InfoItem components.\n * Provides consistent spacing and layout for info items.\n */\nexport interface InfoListProps extends HTMLAttributes<HTMLDListElement> {\n /** Gap between items */\n gap?: 'sm' | 'md' | 'lg'\n /** Number of columns */\n columns?: 1 | 2 | 3 | 4\n /** Children (InfoItem components) */\n children: ReactNode\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst gapValues: Record<'sm' | 'md' | 'lg', number> = {\n sm: spacing[2],\n md: spacing[4],\n lg: spacing[6],\n}\n\nexport const InfoList = forwardRef<HTMLDListElement, InfoListProps>(function InfoList(\n {\n gap = 'md',\n columns = 1,\n children,\n className,\n style,\n testId,\n ...props\n },\n ref\n) {\n const listStyle: CSSProperties = {\n display: 'grid',\n gridTemplateColumns: `repeat(${columns}, 1fr)`,\n gap: gapValues[gap],\n margin: 0,\n padding: 0,\n ...style,\n }\n\n return (\n <dl\n ref={ref}\n className={cx(\n 'brycks-info-list',\n `brycks-info-list--cols-${columns}`,\n className\n )}\n style={listStyle}\n data-testid={testId}\n {...props}\n >\n {children}\n </dl>\n )\n})\n\nInfoList.displayName = 'InfoList'\n","/**\r\n * Badge Component\r\n *\r\n * Small label for status, counts, or categorization.\r\n * Clean, minimal design with subtle color coding.\r\n */\r\n\r\nimport {\r\n forwardRef,\r\n type CSSProperties,\r\n type ReactNode,\r\n type HTMLAttributes,\r\n} from 'react'\r\nimport { cx } from '../../../utils/styles'\r\n\r\nexport type BadgeVariant = 'solid' | 'subtle' | 'outline'\r\nexport type BadgeIntent = 'neutral' | 'primary' | 'accent' | 'success' | 'warning' | 'error' | 'info'\r\nexport type BadgeSize = 'sm' | 'md' | 'lg'\r\n\r\nexport interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {\r\n /** Visual variant */\r\n variant?: BadgeVariant\r\n /** Color intent */\r\n intent?: BadgeIntent\r\n /** Size */\r\n size?: BadgeSize\r\n /** Custom class name */\r\n className?: string\r\n /** Test ID */\r\n testId?: string\r\n /** Badge content */\r\n children?: ReactNode\r\n}\r\n\r\nconst sizeStyles: Record<BadgeSize, CSSProperties> = {\r\n sm: { fontSize: 10, padding: '2px 6px', height: 18 },\r\n md: { fontSize: 11, padding: '3px 8px', height: 22 },\r\n lg: { fontSize: 12, padding: '4px 10px', height: 26 },\r\n}\r\n\r\nconst intentColors: Record<BadgeIntent, Record<BadgeVariant, CSSProperties>> = {\r\n neutral: {\r\n solid: { backgroundColor: 'var(--brycks-foreground-default)', color: 'var(--brycks-background-app)' },\r\n subtle: { backgroundColor: 'var(--brycks-background-muted)', color: 'var(--brycks-foreground-default)' },\r\n outline: { backgroundColor: 'transparent', color: 'var(--brycks-foreground-default)', borderColor: 'var(--brycks-border-default)' },\r\n },\r\n primary: {\r\n solid: { backgroundColor: 'var(--brycks-primary-default)', color: 'var(--brycks-primary-foreground)' },\r\n subtle: { backgroundColor: 'var(--brycks-primary-muted)', color: 'var(--brycks-primary-hover)' },\r\n outline: { backgroundColor: 'transparent', color: 'var(--brycks-primary-default)', borderColor: 'var(--brycks-primary-default)' },\r\n },\r\n accent: {\r\n solid: { backgroundColor: 'var(--brycks-accent-default)', color: 'var(--brycks-accent-foreground)' },\r\n subtle: { backgroundColor: 'var(--brycks-accent-muted)', color: 'var(--brycks-accent-hover)' },\r\n outline: { backgroundColor: 'transparent', color: 'var(--brycks-accent-default)', borderColor: 'var(--brycks-accent-default)' },\r\n },\r\n success: {\r\n solid: { backgroundColor: 'var(--brycks-success-default)', color: 'var(--brycks-success-foreground)' },\r\n subtle: { backgroundColor: 'var(--brycks-success-muted)', color: 'var(--brycks-success-on-muted)' },\r\n outline: { backgroundColor: 'transparent', color: 'var(--brycks-success-default)', borderColor: 'var(--brycks-success-default)' },\r\n },\r\n warning: {\r\n solid: { backgroundColor: 'var(--brycks-warning-default)', color: 'var(--brycks-warning-foreground)' },\r\n subtle: { backgroundColor: 'var(--brycks-warning-muted)', color: 'var(--brycks-warning-on-muted)' },\r\n outline: { backgroundColor: 'transparent', color: 'var(--brycks-warning-default)', borderColor: 'var(--brycks-warning-default)' },\r\n },\r\n error: {\r\n solid: { backgroundColor: 'var(--brycks-error-default)', color: 'var(--brycks-error-foreground)' },\r\n subtle: { backgroundColor: 'var(--brycks-error-muted)', color: 'var(--brycks-error-on-muted)' },\r\n outline: { backgroundColor: 'transparent', color: 'var(--brycks-error-default)', borderColor: 'var(--brycks-error-default)' },\r\n },\r\n info: {\r\n solid: { backgroundColor: 'var(--brycks-info-default)', color: 'var(--brycks-info-foreground)' },\r\n subtle: { backgroundColor: 'var(--brycks-info-muted)', color: 'var(--brycks-info-on-muted)' },\r\n outline: { backgroundColor: 'transparent', color: 'var(--brycks-info-default)', borderColor: 'var(--brycks-info-default)' },\r\n },\r\n}\r\n\r\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(function Badge(\r\n {\r\n variant = 'subtle',\r\n intent = 'neutral',\r\n size = 'md',\r\n className,\r\n style,\r\n testId,\r\n children,\r\n ...props\r\n },\r\n ref\r\n) {\r\n const sizeValue = sizeStyles[size]\r\n const colorValue = intentColors[intent][variant]\r\n\r\n const badgeStyle: CSSProperties = {\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n fontWeight: 500,\r\n fontFamily: 'var(--brycks-font-sans)',\r\n lineHeight: 1,\r\n borderRadius: 'var(--brycks-radius-full)',\r\n whiteSpace: 'nowrap',\r\n border: variant === 'outline' ? '1px solid' : 'none',\r\n ...sizeValue,\r\n ...colorValue,\r\n ...style,\r\n }\r\n\r\n return (\r\n <span\r\n ref={ref}\r\n className={cx(\r\n 'brycks-badge',\r\n `brycks-badge--${variant}`,\r\n `brycks-badge--${intent}`,\r\n `brycks-badge--${size}`,\r\n className\r\n )}\r\n style={badgeStyle}\r\n data-testid={testId}\r\n {...props}\r\n >\r\n {children}\r\n </span>\r\n )\r\n})\r\n\r\nBadge.displayName = 'Badge'\r\n","/**\r\n * Loader Component\r\n *\r\n * Elegant loading spinner with smooth animation.\r\n * Apple-inspired design with multiple sizes and variants.\r\n */\r\n\r\nimport {\r\n forwardRef,\r\n type CSSProperties,\r\n type HTMLAttributes,\r\n} from 'react'\r\nimport { cx } from '../../../utils/styles'\r\n\r\nexport type LoaderSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\r\nexport type LoaderVariant = 'spinner' | 'dots' | 'pulse'\r\n\r\nexport interface LoaderProps extends HTMLAttributes<HTMLDivElement> {\r\n /** Loader size */\r\n size?: LoaderSize\r\n /** Loader variant */\r\n variant?: LoaderVariant\r\n /** Color (CSS value) */\r\n color?: string\r\n /** Accessible label */\r\n label?: string\r\n /** Custom class name */\r\n className?: string\r\n /** Test ID */\r\n testId?: string\r\n}\r\n\r\nconst sizeMap: Record<LoaderSize, number> = {\r\n xs: 14,\r\n sm: 18,\r\n md: 24,\r\n lg: 32,\r\n xl: 48,\r\n}\r\n\r\n/** Spinner loader */\r\nfunction SpinnerLoader({ size, color }: { size: number; color: string }) {\r\n return (\r\n <svg\r\n width={size}\r\n height={size}\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n style={{ animation: 'brycks-spin 1s linear infinite' }}\r\n >\r\n <circle\r\n cx=\"12\"\r\n cy=\"12\"\r\n r=\"10\"\r\n stroke={color}\r\n strokeWidth=\"2.5\"\r\n strokeLinecap=\"round\"\r\n opacity=\"0.2\"\r\n />\r\n <path\r\n d=\"M12 2C6.47715 2 2 6.47715 2 12\"\r\n stroke={color}\r\n strokeWidth=\"2.5\"\r\n strokeLinecap=\"round\"\r\n />\r\n </svg>\r\n )\r\n}\r\n\r\n/** Dots loader */\r\nfunction Dots({ size, color }: { size: number; color: string }) {\r\n const dotSize = size / 4\r\n const gap = size / 6\r\n\r\n return (\r\n <div\r\n style={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap,\r\n height: size,\r\n }}\r\n >\r\n {[0, 1, 2].map((i) => (\r\n <span\r\n key={i}\r\n style={{\r\n width: dotSize,\r\n height: dotSize,\r\n borderRadius: '50%',\r\n backgroundColor: color,\r\n animation: `brycks-bounce 1.4s ease-in-out infinite`,\r\n animationDelay: `${i * 0.16}s`,\r\n }}\r\n />\r\n ))}\r\n </div>\r\n )\r\n}\r\n\r\n/** Pulse loader */\r\nfunction Pulse({ size, color }: { size: number; color: string }) {\r\n return (\r\n <span\r\n style={{\r\n display: 'block',\r\n width: size,\r\n height: size,\r\n borderRadius: '50%',\r\n backgroundColor: color,\r\n animation: 'brycks-pulse 1.5s ease-in-out infinite',\r\n }}\r\n />\r\n )\r\n}\r\n\r\nexport const Loader = forwardRef<HTMLDivElement, LoaderProps>(function Loader(\r\n {\r\n size = 'md',\r\n variant = 'spinner',\r\n color = 'var(--brycks-primary-default)',\r\n label = 'Loading',\r\n className,\r\n style,\r\n testId,\r\n ...props\r\n },\r\n ref\r\n) {\r\n const sizeValue = sizeMap[size]\r\n\r\n const wrapperStyle: CSSProperties = {\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n ...style,\r\n }\r\n\r\n const renderLoader = () => {\r\n switch (variant) {\r\n case 'dots':\r\n return <Dots size={sizeValue} color={color} />\r\n case 'pulse':\r\n return <Pulse size={sizeValue} color={color} />\r\n default:\r\n return <SpinnerLoader size={sizeValue} color={color} />\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n <style>\r\n {`\r\n @keyframes brycks-spin {\r\n from { transform: rotate(0deg); }\r\n to { transform: rotate(360deg); }\r\n }\r\n @keyframes brycks-bounce {\r\n 0%, 80%, 100% { transform: scale(0); opacity: 0.5; }\r\n 40% { transform: scale(1); opacity: 1; }\r\n }\r\n @keyframes brycks-pulse {\r\n 0%, 100% { transform: scale(0.8); opacity: 0.5; }\r\n 50% { transform: scale(1); opacity: 1; }\r\n }\r\n `}\r\n </style>\r\n <div\r\n ref={ref}\r\n role=\"status\"\r\n aria-label={label}\r\n className={cx(\r\n 'brycks-loader',\r\n `brycks-loader--${variant}`,\r\n `brycks-loader--${size}`,\r\n className\r\n )}\r\n style={wrapperStyle}\r\n data-testid={testId}\r\n {...props}\r\n >\r\n {renderLoader()}\r\n <span\r\n style={{\r\n position: 'absolute',\r\n width: 1,\r\n height: 1,\r\n padding: 0,\r\n margin: -1,\r\n overflow: 'hidden',\r\n clip: 'rect(0, 0, 0, 0)',\r\n whiteSpace: 'nowrap',\r\n border: 0,\r\n }}\r\n >\r\n {label}\r\n </span>\r\n </div>\r\n </>\r\n )\r\n})\r\n\r\nLoader.displayName = 'Loader'\r\n\r\n/** Alias for Loader */\r\nexport const Spinner = Loader\r\n","/**\r\n * Skeleton Component\r\n *\r\n * Loading placeholder with shimmer animation.\r\n * Provides visual feedback while content is loading.\r\n */\r\n\r\nimport {\r\n forwardRef,\r\n type CSSProperties,\r\n type HTMLAttributes,\r\n} from 'react'\r\nimport { cx } from '../../../utils/styles'\r\n\r\nexport type SkeletonVariant = 'text' | 'circular' | 'rectangular'\r\n\r\nexport interface SkeletonProps extends HTMLAttributes<HTMLDivElement> {\r\n /** Skeleton variant */\r\n variant?: SkeletonVariant\r\n /** Width */\r\n width?: string | number\r\n /** Height */\r\n height?: string | number\r\n /** Border radius (for rectangular variant) */\r\n radius?: string | number\r\n /** Whether to animate */\r\n animate?: boolean\r\n /** Custom class name */\r\n className?: string\r\n /** Test ID */\r\n testId?: string\r\n}\r\n\r\nexport const Skeleton = forwardRef<HTMLDivElement, SkeletonProps>(function Skeleton(\r\n {\r\n variant = 'rectangular',\r\n width,\r\n height,\r\n radius,\r\n animate = true,\r\n className,\r\n style,\r\n testId,\r\n ...props\r\n },\r\n ref\r\n) {\r\n const getStyles = (): CSSProperties => {\r\n const base: CSSProperties = {\r\n backgroundColor: 'var(--brycks-background-muted)',\r\n position: 'relative',\r\n overflow: 'hidden',\r\n }\r\n\r\n switch (variant) {\r\n case 'text':\r\n base.width = width ?? '100%'\r\n base.height = height ?? '1em'\r\n base.borderRadius = 'var(--brycks-radius-sm)'\r\n break\r\n case 'circular':\r\n base.width = width ?? 40\r\n base.height = height ?? width ?? 40\r\n base.borderRadius = '50%'\r\n break\r\n case 'rectangular':\r\n base.width = width ?? '100%'\r\n base.height = height ?? 40\r\n base.borderRadius = radius ?? 'var(--brycks-radius-default)'\r\n break\r\n }\r\n\r\n return base\r\n }\r\n\r\n const skeletonStyle: CSSProperties = {\r\n ...getStyles(),\r\n ...style,\r\n }\r\n\r\n const shimmerStyle: CSSProperties = {\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n background: 'linear-gradient(90deg, transparent 0%, rgba(255,255,255,0.4) 50%, transparent 100%)',\r\n animation: animate ? 'brycks-shimmer 1.5s infinite' : 'none',\r\n }\r\n\r\n return (\r\n <>\r\n {animate && (\r\n <style>\r\n {`\r\n @keyframes brycks-shimmer {\r\n 0% { transform: translateX(-100%); }\r\n 100% { transform: translateX(100%); }\r\n }\r\n `}\r\n </style>\r\n )}\r\n <div\r\n ref={ref}\r\n className={cx(\r\n 'brycks-skeleton',\r\n `brycks-skeleton--${variant}`,\r\n animate && 'brycks-skeleton--animated',\r\n className\r\n )}\r\n style={skeletonStyle}\r\n data-testid={testId}\r\n aria-hidden=\"true\"\r\n {...props}\r\n >\r\n {animate && <div style={shimmerStyle} />}\r\n </div>\r\n </>\r\n )\r\n})\r\n\r\nSkeleton.displayName = 'Skeleton'\r\n\r\n/** Text skeleton with multiple lines */\r\nexport interface SkeletonTextProps {\r\n /** Number of lines */\r\n lines?: number\r\n /** Gap between lines */\r\n gap?: number\r\n /** Last line width percentage */\r\n lastLineWidth?: string\r\n /** Custom class name */\r\n className?: string\r\n}\r\n\r\nexport function SkeletonText({\r\n lines = 3,\r\n gap = 8,\r\n lastLineWidth = '80%',\r\n className,\r\n}: SkeletonTextProps) {\r\n return (\r\n <div\r\n className={cx('brycks-skeleton-text', className)}\r\n style={{ display: 'flex', flexDirection: 'column', gap }}\r\n >\r\n {Array.from({ length: lines }).map((_, i) => (\r\n <Skeleton\r\n key={i}\r\n variant=\"text\"\r\n width={i === lines - 1 ? lastLineWidth : '100%'}\r\n />\r\n ))}\r\n </div>\r\n )\r\n}\r\n\r\nSkeletonText.displayName = 'SkeletonText'\r\n","/**\r\n * Divider Component\r\n *\r\n * Visual separator for content sections.\r\n * Supports horizontal and vertical orientations with optional labels.\r\n */\r\n\r\nimport {\r\n forwardRef,\r\n type CSSProperties,\r\n type ReactNode,\r\n type HTMLAttributes,\r\n} from 'react'\r\nimport { cx } from '../../../utils/styles'\r\n\r\nexport type DividerOrientation = 'horizontal' | 'vertical'\r\nexport type DividerVariant = 'solid' | 'dashed' | 'dotted'\r\n\r\nexport interface DividerProps extends HTMLAttributes<HTMLDivElement> {\r\n /** Divider orientation */\r\n orientation?: DividerOrientation\r\n /** Visual variant */\r\n variant?: DividerVariant\r\n /** Label text in the middle */\r\n label?: ReactNode\r\n /** Label position */\r\n labelPosition?: 'start' | 'center' | 'end'\r\n /** Custom class name */\r\n className?: string\r\n /** Test ID */\r\n testId?: string\r\n}\r\n\r\nexport const Divider = forwardRef<HTMLDivElement, DividerProps>(function Divider(\r\n {\r\n orientation = 'horizontal',\r\n variant = 'solid',\r\n label,\r\n labelPosition = 'center',\r\n className,\r\n style,\r\n testId,\r\n ...props\r\n },\r\n ref\r\n) {\r\n const isHorizontal = orientation === 'horizontal'\r\n\r\n const wrapperStyle: CSSProperties = {\r\n display: 'flex',\r\n alignItems: 'center',\r\n width: isHorizontal ? '100%' : undefined,\r\n height: isHorizontal ? undefined : '100%',\r\n flexDirection: isHorizontal ? 'row' : 'column',\r\n ...style,\r\n }\r\n\r\n const lineStyle: CSSProperties = {\r\n flex: 1,\r\n backgroundColor: variant === 'solid' ? 'var(--brycks-border-muted)' : 'transparent',\r\n borderStyle: variant,\r\n borderColor: 'var(--brycks-border-muted)',\r\n ...(isHorizontal\r\n ? {\r\n height: 1,\r\n borderWidth: variant === 'solid' ? 0 : '1px 0 0 0',\r\n }\r\n : {\r\n width: 1,\r\n borderWidth: variant === 'solid' ? 0 : '0 0 0 1px',\r\n }),\r\n }\r\n\r\n const labelStyle: CSSProperties = {\r\n padding: isHorizontal ? '0 12px' : '12px 0',\r\n fontSize: 12,\r\n fontWeight: 500,\r\n color: 'var(--brycks-foreground-muted)',\r\n whiteSpace: 'nowrap',\r\n }\r\n\r\n if (!label) {\r\n return (\r\n <div\r\n ref={ref}\r\n role=\"separator\"\r\n aria-orientation={orientation}\r\n className={cx(\r\n 'brycks-divider',\r\n `brycks-divider--${orientation}`,\r\n `brycks-divider--${variant}`,\r\n className\r\n )}\r\n style={{ ...lineStyle, ...style }}\r\n data-testid={testId}\r\n {...props}\r\n />\r\n )\r\n }\r\n\r\n const showStartLine = labelPosition === 'center' || labelPosition === 'end'\r\n const showEndLine = labelPosition === 'center' || labelPosition === 'start'\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n role=\"separator\"\r\n aria-orientation={orientation}\r\n className={cx(\r\n 'brycks-divider',\r\n `brycks-divider--${orientation}`,\r\n `brycks-divider--${variant}`,\r\n 'brycks-divider--with-label',\r\n className\r\n )}\r\n style={wrapperStyle}\r\n data-testid={testId}\r\n {...props}\r\n >\r\n {showStartLine && <span style={lineStyle} />}\r\n <span style={labelStyle}>{label}</span>\r\n {showEndLine && <span style={lineStyle} />}\r\n </div>\r\n )\r\n})\r\n\r\nDivider.displayName = 'Divider'\r\n","/**\r\n * EmptyState Component\r\n *\r\n * Placeholder for empty or zero-state content.\r\n * Provides visual feedback with optional actions.\r\n */\r\n\r\nimport {\r\n forwardRef,\r\n type CSSProperties,\r\n type ReactNode,\r\n type HTMLAttributes,\r\n} from 'react'\r\nimport { cx } from '../../../utils/styles'\r\n\r\nexport interface EmptyStateProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\r\n /** Icon or illustration */\r\n icon?: ReactNode\r\n /** Title text */\r\n title?: ReactNode\r\n /** Description text */\r\n description?: ReactNode\r\n /** Action element (button, link) */\r\n action?: ReactNode\r\n /** Secondary action */\r\n secondaryAction?: ReactNode\r\n /** Custom class name */\r\n className?: string\r\n /** Test ID */\r\n testId?: string\r\n}\r\n\r\nexport const EmptyState = forwardRef<HTMLDivElement, EmptyStateProps>(function EmptyState(\r\n {\r\n icon,\r\n title,\r\n description,\r\n action,\r\n secondaryAction,\r\n className,\r\n style,\r\n testId,\r\n children,\r\n ...props\r\n },\r\n ref\r\n) {\r\n const containerStyle: CSSProperties = {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n textAlign: 'center',\r\n padding: '48px 24px',\r\n ...style,\r\n }\r\n\r\n const iconStyle: CSSProperties = {\r\n marginBottom: 16,\r\n color: 'var(--brycks-foreground-subtle)',\r\n }\r\n\r\n const titleStyle: CSSProperties = {\r\n fontSize: 18,\r\n fontWeight: 600,\r\n color: 'var(--brycks-foreground-default)',\r\n marginBottom: description ? 8 : 0,\r\n maxWidth: 400,\r\n }\r\n\r\n const descriptionStyle: CSSProperties = {\r\n fontSize: 14,\r\n color: 'var(--brycks-foreground-muted)',\r\n lineHeight: 1.5,\r\n maxWidth: 400,\r\n }\r\n\r\n const actionsStyle: CSSProperties = {\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: 12,\r\n marginTop: 24,\r\n }\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n className={cx('brycks-empty-state', className)}\r\n style={containerStyle}\r\n data-testid={testId}\r\n {...props}\r\n >\r\n {icon && <div style={iconStyle}>{icon}</div>}\r\n\r\n {title && <h3 style={titleStyle}>{title}</h3>}\r\n\r\n {description && <p style={descriptionStyle}>{description}</p>}\r\n\r\n {children}\r\n\r\n {(action || secondaryAction) && (\r\n <div style={actionsStyle}>\r\n {action}\r\n {secondaryAction}\r\n </div>\r\n )}\r\n </div>\r\n )\r\n})\r\n\r\nEmptyState.displayName = 'EmptyState'\r\n\r\n/** Default empty state icon */\r\nexport function EmptyStateIcon({ size = 64 }: { size?: number }) {\r\n return (\r\n <svg\r\n width={size}\r\n height={size}\r\n viewBox=\"0 0 64 64\"\r\n fill=\"none\"\r\n style={{ opacity: 0.5 }}\r\n >\r\n <rect\r\n x=\"8\"\r\n y=\"12\"\r\n width=\"48\"\r\n height=\"40\"\r\n rx=\"4\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n />\r\n <path\r\n d=\"M8 24h48\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n />\r\n <circle cx=\"16\" cy=\"18\" r=\"2\" fill=\"currentColor\" />\r\n <circle cx=\"24\" cy=\"18\" r=\"2\" fill=\"currentColor\" />\r\n <circle cx=\"32\" cy=\"18\" r=\"2\" fill=\"currentColor\" />\r\n <rect\r\n x=\"16\"\r\n y=\"32\"\r\n width=\"32\"\r\n height=\"4\"\r\n rx=\"2\"\r\n fill=\"currentColor\"\r\n opacity=\"0.3\"\r\n />\r\n <rect\r\n x=\"16\"\r\n y=\"40\"\r\n width=\"20\"\r\n height=\"4\"\r\n rx=\"2\"\r\n fill=\"currentColor\"\r\n opacity=\"0.3\"\r\n />\r\n </svg>\r\n )\r\n}\r\n\r\nEmptyStateIcon.displayName = 'EmptyStateIcon'\r\n","/**\n * Portal Component\n *\n * Renders children into a different part of the DOM tree.\n * Useful for modals, tooltips, and overlays.\n */\n\nimport { useState, useEffect, type ReactNode } from 'react'\nimport { createPortal } from 'react-dom'\n\nexport interface PortalProps {\n /** Content to render in the portal */\n children: ReactNode\n /** Container element or selector to render into */\n container?: HTMLElement | string\n /** Whether the portal is disabled (renders inline) */\n disabled?: boolean\n}\n\nexport function Portal({ children, container, disabled = false }: PortalProps) {\n const [mounted, setMounted] = useState(false)\n const [portalContainer, setPortalContainer] = useState<HTMLElement | null>(null)\n\n useEffect(() => {\n setMounted(true)\n\n if (typeof container === 'string') {\n const element = document.querySelector<HTMLElement>(container)\n setPortalContainer(element)\n } else if (container) {\n setPortalContainer(container)\n } else {\n setPortalContainer(document.body)\n }\n\n return () => setMounted(false)\n }, [container])\n\n if (disabled) {\n return <>{children}</>\n }\n\n if (!mounted || !portalContainer) {\n return null\n }\n\n return createPortal(children, portalContainer)\n}\n\nPortal.displayName = 'Portal'\n","/**\n * useFocusTrap Hook\n *\n * Traps focus within a container element.\n * Useful for modals, drawers, and dialogs.\n */\n\nimport { useEffect, useRef, useCallback, type RefObject } from 'react'\n\nconst FOCUSABLE_SELECTORS = [\n 'button:not([disabled])',\n '[href]',\n 'input:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n].join(', ')\n\nexport interface UseFocusTrapOptions {\n /** Whether the focus trap is active */\n enabled?: boolean\n /** Whether to auto-focus the first element */\n autoFocus?: boolean\n /** Whether to restore focus on unmount */\n restoreFocus?: boolean\n /** Initial element to focus (selector or element) */\n initialFocus?: string | HTMLElement | null\n}\n\nexport interface UseFocusTrapReturn<T extends HTMLElement> {\n /** Ref to attach to the container */\n ref: RefObject<T | null>\n /** Manually focus the first focusable element */\n focusFirst: () => void\n /** Manually focus the last focusable element */\n focusLast: () => void\n}\n\nexport function useFocusTrap<T extends HTMLElement = HTMLDivElement>(\n options: UseFocusTrapOptions = {}\n): UseFocusTrapReturn<T> {\n const {\n enabled = true,\n autoFocus = true,\n restoreFocus = true,\n initialFocus,\n } = options\n\n const ref = useRef<T>(null)\n const previousActiveElement = useRef<HTMLElement | null>(null)\n\n const getFocusableElements = useCallback((): HTMLElement[] => {\n if (!ref.current) return []\n return Array.from(ref.current.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTORS))\n }, [])\n\n const focusFirst = useCallback(() => {\n const elements = getFocusableElements()\n elements[0]?.focus()\n }, [getFocusableElements])\n\n const focusLast = useCallback(() => {\n const elements = getFocusableElements()\n elements[elements.length - 1]?.focus()\n }, [getFocusableElements])\n\n useEffect(() => {\n if (!enabled) return\n\n // Store the previously focused element\n previousActiveElement.current = document.activeElement as HTMLElement\n\n // Auto-focus on mount\n if (autoFocus) {\n const container = ref.current\n if (!container) return\n\n // Try initial focus first\n if (initialFocus) {\n const element =\n typeof initialFocus === 'string'\n ? container.querySelector<HTMLElement>(initialFocus)\n : initialFocus\n if (element) {\n element.focus()\n } else {\n focusFirst()\n }\n } else {\n focusFirst()\n }\n }\n\n // Restore focus on unmount\n return () => {\n if (restoreFocus && previousActiveElement.current) {\n previousActiveElement.current.focus()\n }\n }\n }, [enabled, autoFocus, restoreFocus, initialFocus, focusFirst])\n\n useEffect(() => {\n if (!enabled) return\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key !== 'Tab') return\n\n const container = ref.current\n if (!container) return\n\n const focusableElements = getFocusableElements()\n if (focusableElements.length === 0) return\n\n const firstElement = focusableElements[0]\n const lastElement = focusableElements[focusableElements.length - 1]\n\n if (event.shiftKey) {\n // Shift + Tab: going backwards\n if (document.activeElement === firstElement) {\n event.preventDefault()\n lastElement.focus()\n }\n } else {\n // Tab: going forwards\n if (document.activeElement === lastElement) {\n event.preventDefault()\n firstElement.focus()\n }\n }\n }\n\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [enabled, getFocusableElements])\n\n return {\n ref,\n focusFirst,\n focusLast,\n }\n}\n","/**\n * FocusTrap Component\n *\n * Traps focus within its children.\n * Useful for modals, drawers, and dialogs.\n */\n\nimport { forwardRef, type ReactNode, type CSSProperties } from 'react'\nimport { useFocusTrap } from '../../../hooks/useFocusTrap'\n\nexport interface FocusTrapProps {\n /** Content to trap focus within */\n children: ReactNode\n /** Whether the focus trap is active */\n enabled?: boolean\n /** Whether to auto-focus the first element */\n autoFocus?: boolean\n /** Whether to restore focus on unmount */\n restoreFocus?: boolean\n /** Initial element to focus (selector) */\n initialFocus?: string\n /** Custom class name */\n className?: string\n /** Custom inline styles */\n style?: CSSProperties\n}\n\nexport const FocusTrap = forwardRef<HTMLDivElement, FocusTrapProps>(function FocusTrap(\n {\n children,\n enabled = true,\n autoFocus = true,\n restoreFocus = true,\n initialFocus,\n className,\n style,\n },\n forwardedRef\n) {\n const { ref } = useFocusTrap<HTMLDivElement>({\n enabled,\n autoFocus,\n restoreFocus,\n initialFocus,\n })\n\n return (\n <div\n ref={(node) => {\n (ref as React.MutableRefObject<HTMLDivElement | null>).current = node\n if (typeof forwardedRef === 'function') {\n forwardedRef(node)\n } else if (forwardedRef) {\n forwardedRef.current = node\n }\n }}\n className={className}\n style={style}\n >\n {children}\n </div>\n )\n})\n\nFocusTrap.displayName = 'FocusTrap'\n","/**\n * Overlay Component\n *\n * A backdrop overlay for modals, drawers, and dialogs.\n * Supports click-to-close and backdrop blur.\n */\n\nimport { forwardRef, type CSSProperties, type HTMLAttributes } from 'react'\nimport { cx } from '../../../utils/styles'\nimport { Portal } from '../Portal'\n\nexport interface OverlayProps extends HTMLAttributes<HTMLDivElement> {\n /** Whether the overlay is visible */\n isOpen: boolean\n /** Callback when overlay is clicked */\n onClose?: () => void\n /** Whether clicking the overlay closes it */\n closeOnClick?: boolean\n /** Whether to apply backdrop blur */\n blur?: boolean\n /** Blur intensity (in pixels) */\n blurAmount?: number\n /** Background opacity (0-1) */\n opacity?: number\n /** Whether to use a portal */\n usePortal?: boolean\n /** Z-index for the overlay */\n zIndex?: number\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nexport const Overlay = forwardRef<HTMLDivElement, OverlayProps>(function Overlay(\n {\n isOpen,\n onClose,\n closeOnClick = true,\n blur = true,\n blurAmount = 4,\n opacity = 0.5,\n usePortal = true,\n zIndex,\n className,\n style,\n testId,\n children,\n ...props\n },\n ref\n) {\n if (!isOpen) return null\n\n const handleClick = (e: React.MouseEvent) => {\n if (closeOnClick && e.target === e.currentTarget) {\n onClose?.()\n }\n }\n\n const overlayStyle: CSSProperties = {\n position: 'fixed',\n inset: 0,\n zIndex: zIndex ?? 'var(--brycks-z-overlay)' as unknown as number,\n backgroundColor: `rgba(0, 0, 0, ${opacity})`,\n backdropFilter: blur ? `blur(${blurAmount}px)` : undefined,\n WebkitBackdropFilter: blur ? `blur(${blurAmount}px)` : undefined,\n animation: 'brycks-overlay-fade-in 200ms ease-out',\n ...style,\n }\n\n const content = (\n <>\n <style>\n {`\n @keyframes brycks-overlay-fade-in {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n `}\n </style>\n <div\n ref={ref}\n className={cx('brycks-overlay', className)}\n style={overlayStyle}\n onClick={handleClick}\n aria-hidden=\"true\"\n data-testid={testId}\n {...props}\n >\n {children}\n </div>\n </>\n )\n\n if (usePortal) {\n return <Portal>{content}</Portal>\n }\n\n return content\n})\n\nOverlay.displayName = 'Overlay'\n","/**\n * ScreenReaderOnly Component\n *\n * Visually hides content while keeping it accessible to screen readers.\n * Essential for accessibility when visual elements need text descriptions.\n *\n * @module components/utility/ScreenReaderOnly\n */\n\nimport { forwardRef, type HTMLAttributes, type ReactNode, type CSSProperties } from 'react'\nimport { cx } from '../../../utils/styles'\n\nexport interface ScreenReaderOnlyProps extends HTMLAttributes<HTMLSpanElement> {\n /** Content to be read by screen readers */\n children: ReactNode\n /** Whether to make content focusable (shows on focus) */\n focusable?: boolean\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\n/**\n * CSS that visually hides content but keeps it accessible\n * Based on best practices from a11y guidelines\n */\nconst srOnlyStyles: CSSProperties = {\n position: 'absolute',\n width: '1px',\n height: '1px',\n padding: 0,\n margin: '-1px',\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n border: 0,\n}\n\n/**\n * Styles applied when element is focusable and receives focus\n */\nconst focusableStyles: CSSProperties = {\n ...srOnlyStyles,\n}\n\nexport const ScreenReaderOnly = forwardRef<HTMLSpanElement, ScreenReaderOnlyProps>(\n function ScreenReaderOnly(\n {\n children,\n focusable = false,\n className,\n style,\n testId,\n ...props\n },\n ref\n ) {\n return (\n <span\n ref={ref}\n className={cx(\n 'brycks-sr-only',\n focusable && 'brycks-sr-only--focusable',\n className\n )}\n style={{\n ...(focusable ? focusableStyles : srOnlyStyles),\n ...style,\n }}\n tabIndex={focusable ? 0 : undefined}\n data-testid={testId}\n {...props}\n >\n {children}\n </span>\n )\n }\n)\n\nScreenReaderOnly.displayName = 'ScreenReaderOnly'\n\n/**\n * Alias for ScreenReaderOnly with a shorter name\n */\nexport const SrOnly = ScreenReaderOnly\n\nSrOnly.displayName = 'SrOnly'\n","/**\r\n * useMediaQuery Hook\r\n *\r\n * React hook for responsive design with media queries.\r\n */\r\n\r\nimport { useState, useEffect } from 'react'\r\n\r\nexport function useMediaQuery(query: string): boolean {\r\n const [matches, setMatches] = useState(() => {\r\n if (typeof window === 'undefined') return false\r\n return window.matchMedia(query).matches\r\n })\r\n\r\n useEffect(() => {\r\n if (typeof window === 'undefined') return\r\n\r\n const mediaQuery = window.matchMedia(query)\r\n const handleChange = (e: MediaQueryListEvent) => setMatches(e.matches)\r\n\r\n // Set initial value\r\n setMatches(mediaQuery.matches)\r\n\r\n // Listen for changes\r\n mediaQuery.addEventListener('change', handleChange)\r\n return () => mediaQuery.removeEventListener('change', handleChange)\r\n }, [query])\r\n\r\n return matches\r\n}\r\n\r\n/** Pre-built responsive hooks */\r\nexport function useIsMobile() {\r\n return useMediaQuery('(max-width: 639px)')\r\n}\r\n\r\nexport function useIsTablet() {\r\n return useMediaQuery('(min-width: 640px) and (max-width: 1023px)')\r\n}\r\n\r\nexport function useIsDesktop() {\r\n return useMediaQuery('(min-width: 1024px)')\r\n}\r\n\r\nexport function usePrefersReducedMotion() {\r\n return useMediaQuery('(prefers-reduced-motion: reduce)')\r\n}\r\n\r\nexport function usePrefersDarkMode() {\r\n return useMediaQuery('(prefers-color-scheme: dark)')\r\n}\r\n","/**\r\n * useDisclosure Hook\r\n *\r\n * Manages open/closed state for modals, popovers, drawers, etc.\r\n */\r\n\r\nimport { useState, useCallback } from 'react'\r\n\r\nexport interface UseDisclosureReturn {\r\n isOpen: boolean\r\n onOpen: () => void\r\n onClose: () => void\r\n onToggle: () => void\r\n setIsOpen: React.Dispatch<React.SetStateAction<boolean>>\r\n}\r\n\r\nexport interface UseDisclosureOptions {\r\n defaultIsOpen?: boolean\r\n onOpen?: () => void\r\n onClose?: () => void\r\n}\r\n\r\nexport function useDisclosure(options: UseDisclosureOptions = {}): UseDisclosureReturn {\r\n const { defaultIsOpen = false, onOpen: onOpenProp, onClose: onCloseProp } = options\r\n const [isOpen, setIsOpen] = useState(defaultIsOpen)\r\n\r\n const onOpen = useCallback(() => {\r\n setIsOpen(true)\r\n onOpenProp?.()\r\n }, [onOpenProp])\r\n\r\n const onClose = useCallback(() => {\r\n setIsOpen(false)\r\n onCloseProp?.()\r\n }, [onCloseProp])\r\n\r\n const onToggle = useCallback(() => {\r\n const newState = !isOpen\r\n setIsOpen(newState)\r\n if (newState) {\r\n onOpenProp?.()\r\n } else {\r\n onCloseProp?.()\r\n }\r\n }, [isOpen, onOpenProp, onCloseProp])\r\n\r\n return {\r\n isOpen,\r\n onOpen,\r\n onClose,\r\n onToggle,\r\n setIsOpen,\r\n }\r\n}\r\n","/**\n * useKeyboardNavigation Hook\n *\n * Handles keyboard navigation for lists, menus, and other navigable components.\n */\n\nimport { useCallback, useState } from 'react'\n\nexport interface UseKeyboardNavigationOptions {\n /** Total number of items */\n itemCount: number\n /** Initial focused index */\n initialIndex?: number\n /** Whether navigation wraps around */\n loop?: boolean\n /** Orientation of the list */\n orientation?: 'horizontal' | 'vertical' | 'both'\n /** Callback when index changes */\n onIndexChange?: (index: number) => void\n /** Callback when item is selected */\n onSelect?: (index: number) => void\n}\n\nexport interface UseKeyboardNavigationReturn {\n /** Current focused index */\n focusedIndex: number\n /** Set focused index */\n setFocusedIndex: (index: number) => void\n /** Handle keyboard events */\n handleKeyDown: (event: React.KeyboardEvent) => void\n /** Get props for an item */\n getItemProps: (index: number) => {\n tabIndex: number\n 'data-focused': boolean\n onFocus: () => void\n }\n}\n\nexport function useKeyboardNavigation(\n options: UseKeyboardNavigationOptions\n): UseKeyboardNavigationReturn {\n const {\n itemCount,\n initialIndex = 0,\n loop = true,\n orientation = 'vertical',\n onIndexChange,\n onSelect,\n } = options\n\n const [focusedIndex, setFocusedIndexState] = useState(initialIndex)\n\n const setFocusedIndex = useCallback(\n (index: number) => {\n setFocusedIndexState(index)\n onIndexChange?.(index)\n },\n [onIndexChange]\n )\n\n const moveFocus = useCallback(\n (direction: 'next' | 'prev' | 'first' | 'last') => {\n let newIndex: number\n\n switch (direction) {\n case 'first':\n newIndex = 0\n break\n case 'last':\n newIndex = itemCount - 1\n break\n case 'next':\n if (focusedIndex >= itemCount - 1) {\n newIndex = loop ? 0 : focusedIndex\n } else {\n newIndex = focusedIndex + 1\n }\n break\n case 'prev':\n if (focusedIndex <= 0) {\n newIndex = loop ? itemCount - 1 : focusedIndex\n } else {\n newIndex = focusedIndex - 1\n }\n break\n }\n\n setFocusedIndex(newIndex)\n },\n [focusedIndex, itemCount, loop, setFocusedIndex]\n )\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n const { key } = event\n\n const isVertical = orientation === 'vertical' || orientation === 'both'\n const isHorizontal = orientation === 'horizontal' || orientation === 'both'\n\n switch (key) {\n case 'ArrowDown':\n if (isVertical) {\n event.preventDefault()\n moveFocus('next')\n }\n break\n case 'ArrowUp':\n if (isVertical) {\n event.preventDefault()\n moveFocus('prev')\n }\n break\n case 'ArrowRight':\n if (isHorizontal) {\n event.preventDefault()\n moveFocus('next')\n }\n break\n case 'ArrowLeft':\n if (isHorizontal) {\n event.preventDefault()\n moveFocus('prev')\n }\n break\n case 'Home':\n event.preventDefault()\n moveFocus('first')\n break\n case 'End':\n event.preventDefault()\n moveFocus('last')\n break\n case 'Enter':\n case ' ':\n event.preventDefault()\n onSelect?.(focusedIndex)\n break\n }\n },\n [orientation, moveFocus, onSelect, focusedIndex]\n )\n\n const getItemProps = useCallback(\n (index: number) => ({\n tabIndex: index === focusedIndex ? 0 : -1,\n 'data-focused': index === focusedIndex,\n onFocus: () => setFocusedIndex(index),\n }),\n [focusedIndex, setFocusedIndex]\n )\n\n return {\n focusedIndex,\n setFocusedIndex,\n handleKeyDown,\n getItemProps,\n }\n}\n","/**\n * useControllable Hook\n *\n * Manages controlled vs uncontrolled state pattern.\n * Allows components to work in both controlled and uncontrolled modes.\n */\n\nimport { useState, useCallback, useRef, useEffect } from 'react'\n\nexport interface UseControllableOptions<T> {\n /** Controlled value (if provided, component is controlled) */\n value?: T\n /** Default value for uncontrolled mode */\n defaultValue: T\n /** Callback when value changes */\n onChange?: (value: T) => void\n}\n\nexport interface UseControllableReturn<T> {\n /** Current value */\n value: T\n /** Set the value */\n setValue: (value: T | ((prev: T) => T)) => void\n /** Whether the component is controlled */\n isControlled: boolean\n}\n\nexport function useControllable<T>(\n options: UseControllableOptions<T>\n): UseControllableReturn<T> {\n const { value: controlledValue, defaultValue, onChange } = options\n\n const isControlled = controlledValue !== undefined\n const isControlledRef = useRef(isControlled)\n\n // Warn if switching between controlled and uncontrolled\n useEffect(() => {\n if (isControlledRef.current !== isControlled) {\n console.warn(\n 'Component is switching between controlled and uncontrolled modes. ' +\n 'This is not recommended and may cause unexpected behavior.'\n )\n }\n isControlledRef.current = isControlled\n }, [isControlled])\n\n const [internalValue, setInternalValue] = useState(defaultValue)\n\n const value = isControlled ? controlledValue : internalValue\n\n const setValue = useCallback(\n (nextValue: T | ((prev: T) => T)) => {\n const resolvedValue =\n typeof nextValue === 'function'\n ? (nextValue as (prev: T) => T)(value)\n : nextValue\n\n if (!isControlled) {\n setInternalValue(resolvedValue)\n }\n onChange?.(resolvedValue)\n },\n [isControlled, onChange, value]\n )\n\n return {\n value,\n setValue,\n isControlled,\n }\n}\n"],"names":["componentHeights","spacing","iconSizes","componentPaddingX","componentPaddingY","componentGap","modalWidths","popoverSizing","controlSizes","switchSizes","focusRing","focusRingOffset","focusStyles","transition","durations","easings","transitionProperties","duration","easing","keyframes","componentFontSize","fontSizes","componentFontWeight","fontWeights","componentLineHeight","lineHeights","componentTypography","fontFamilies","opacity","stateOpacity","scale","sidebarSizes","headerSizes","avatarSizes","iconButtonSizes","quickActionSizes","contentPadding","pageHeaderSpacing","searchInputSizes","statCardSizes","cx","classes","getSpacingValue","key","spacingToCss","value","buildSpacingStyles","props","styles","idCounter","generateId","prefix","hexToRgba","hex","alpha","result","r","g","b","radiusMap","shadowMap","buildBoxStyles","boxOwnPropKeys","omitBoxProps","BoxInner","as","className","style","children","testId","ref","Component","boxStyles","filteredProps","jsx","Box","forwardRef","stackOwnPropKeys","omitStackProps","buildStackStyles","StackInner","stackStyles","Stack","HStackInner","HStack","VStackInner","VStack","gridOwnPropKeys","omitGridProps","buildGridStyles","GridInner","gridStyles","Grid","GridItemInner","colSpan","rowSpan","colStart","colEnd","rowStart","rowEnd","itemStyles","GridItem","containerOwnPropKeys","omitContainerProps","buildContainerStyles","spacingStyles","size","maxWidth","containers","ContainerInner","containerStyles","Container","paddingMap","Card","variant","padding","interactive","selected","cardStyle","base","e","target","CardHeader","divider","headerStyle","CardBody","bodyStyle","CardFooter","align","footerStyle","spacingMap","Section","title","description","titleLevel","actions","TitleTag","sectionStyle","titleContainerStyle","titleStyle","descriptionStyle","actionsStyle","contentStyle","hasHeader","jsxs","Spacer","customSize","flex","direction","pixelSize","spacingTokens","spacerStyle","justifyMap","alignMap","Flex","wrap","justify","gap","rowGap","columnGap","inline","grow","shrink","basis","flexStyle","FlexItem","alignSelf","order","itemStyle","variantMap","textStyles","buildTextStyles","baseStyles","TextInner","builtTextStyles","_size","_weight","_leading","_align","_color","_truncate","_lineClamp","rest","TextForwardRef","Text","CodeInner","CodeForwardRef","Code","sizeToStyleMap","buildHeadingStyles","level","visualSize","styleKey","HeadingInner","headingStyles","Heading","DisplayInner","Display","sizeConfig","intentColors","getButtonStyles","intent","fullWidth","isIconOnly","sizeValues","colors","solidColors","outlineColors","softColors","hover","ghostColors","linkColors","active","disabled","LoadingSpinner","ButtonInner","isLoading","isDisabled","leftIcon","rightIcon","onMouseEnter","onMouseLeave","onMouseDown","onMouseUp","isHovered","setIsHovered","useState","isPressed","setIsPressed","computedStyle","handleMouseEnter","handleMouseLeave","handleMouseDown","handleMouseUp","buttonClassName","buttonProps","Button","IconButtonInner","IconButton","sizeMap","Icon","color","path","paths","viewBox","fillRule","label","iconStyle","renderPaths","d","index","iconPaths","Input","isInvalid","leftElement","rightElement","onFocus","onBlur","isFocused","setIsFocused","config","getWrapperStyles","inputStyles","handleFocus","handleBlur","elementStyle","TextField","helperText","errorMessage","isRequired","hideLabel","id","inputProps","generatedId","useId","fieldId","helperId","errorId","hasError","describedBy","labelStyle","helperStyle","errorStyle","sizeStyles","ChevronIcon","Select","placeholder","sizeValue","hasValue","wrapperStyle","getSelectStyle","CheckIcon","MinusIcon","Checkbox","isIndeterminate","checked","onChange","fontSize","isCheckedOrIndeterminate","boxStyle","inputStyle","labelContainerStyle","labelTextStyle","Switch","travel","trackStyle","thumbStyle","Textarea","autoResize","minRows","maxRows","showCount","maxLength","defaultValue","charCount","setCharCount","internalRef","useRef","textareaRef","lineHeightPx","minHeight","maxHeight","adjustHeight","useCallback","textarea","scrollHeight","newHeight","useEffect","initialValue","getTextareaStyle","countStyle","handleChange","Radio","containerStyle","radioContainerStyle","radioStyle","dotStyle","RadioGroup","name","controlledValue","orientation","internalValue","setInternalValue","newValue","groupStyle","clonedChildren","child","childValue","Slider","min","max","step","showValue","formatValue","v","isDragging","setIsDragging","inputRef","percentage","clampedValue","input","handleInputChange","labelRowStyle","valueStyle","sliderContainerStyle","fillStyle","node","DateInput","type","error","inputContainerStyle","getInputStyle","baseStyle","UploadIcon","FileInput","accept","multiple","maxSize","icon","isDragOver","setIsDragOver","handleFiles","fileList","files","file","handleDragOver","handleDragLeave","handleDrop","handleClick","_a","handleKeyDown","dropzoneStyle","iconContainerStyle","textContainerStyle","primaryTextStyle","secondaryTextStyle","browseStyle","defaultDescription","Fragment","generateUniqueId","setId","useIds","count","ids","setIds","FormField","required","labelWidth","requiredStyle","childProps","ErrorIcon","FieldError","showIcon","gapValues","Form","onSubmit","formStyle","handleSubmit","FormLabel","FormGroup","labelSize","messageStyle","sizeWidths","CloseIcon","Modal","isOpen","onClose","closeOnOverlayClick","closeOnEscape","showCloseButton","modalRef","previousActiveElement","modal","focusableElements","firstElement","lastElement","handleOverlayClick","overlayStyle","modalStyle","closeButtonStyle","modalContent","createPortal","intentConfig","Alert","action","isDismissible","onDismiss","variantColors","alertStyle","dismissButtonStyle","Tooltip","content","placement","delay","isVisible","setIsVisible","position","setPosition","triggerRef","tooltipRef","timeoutRef","calculatePosition","triggerRect","tooltipRect","top","left","showTooltip","hideTooltip","triggerStyle","tooltipStyle","arrowStyle","ToastIcon","Toast","isExiting","setIsExiting","timer","toastStyle","ToastContext","createContext","useToast","context","useContext","positionStyles","toastCounter","ToastProvider","maxToasts","toasts","setToasts","mounted","setMounted","addToast","prev","newToasts","removeToast","t","removeAll","toastWrapperStyle","Drawer","showOverlay","drawerRef","drawer","isHorizontal","drawerSize","drawerStyle","drawerContent","useClickOutside","handler","options","enabled","eventType","listener","event","el","Popover","trigger","controlledIsOpen","defaultOpen","onOpenChange","offset","openDelay","closeDelay","closeOnOutsideClick","showArrow","internalIsOpen","setInternalIsOpen","contentRef","openTimeoutRef","closeTimeoutRef","setIsOpen","open","clickOutsideRef","updatePosition","contentRect","scrollX","scrollY","handleOpen","handleClose","handleToggle","triggerElement","cloneElement","popoverContent","linearSizeMap","circularSizeMap","Progress","indeterminate","m","radius","circumference","svgStyle","barStyle","height","valueTextStyle","TabsContext","useTabsContext","Tabs","TabList","listStyle","Tab","tabValue","isSelected","tabs","currentIndex","newIndex","_b","_c","getTabStyle","TabPanels","panelsStyle","TabPanel","panelValue","panelStyle","AccordionContext","useAccordionContext","Accordion","allowMultiple","expandedItems","toggleItem","itemValue","isExpanded","AccordionItemContext","useAccordionItemContext","AccordionItem","AccordionTrigger","AccordionContent","innerStyle","DropdownContext","useDropdownContext","Dropdown","closeOnSelect","activeIndex","setActiveIndex","menuRef","close","rect","items","triggerProps","menuStyle","DropdownItem","shortcut","destructive","onClick","shortcutStyle","DropdownDivider","dividerStyle","DropdownLabel","MenuContext","useMenuContext","Menu","controlledActiveItem","collapsed","internalActiveItem","setInternalActiveItem","activeItem","setActiveItem","MenuItem","badge","isActive","badgeStyle","MenuGroup","MenuDivider","ChevronLeftIcon","ChevronRightIcon","ChevronsLeftIcon","ChevronsRightIcon","Pagination","page","totalPages","siblingCount","showFirstLast","showPrevNext","pages","useMemo","range","leftSibling","rightSibling","showLeftEllipsis","showRightEllipsis","i","getButtonStyle","ellipsisStyle","infoStyle","handlePageChange","newPage","DefaultSeparator","Breadcrumb","separator","maxItems","Children","isValidElement","visibleItems","showEllipsis","sideCount","navStyle","separatorStyle","renderSeparator","isLast","showSeparator","showEllipsisHere","BreadcrumbItem","href","isCurrentPage","componentProps","TableContext","useTableContext","Table","stickyHeader","loading","tableStyle","TableHead","sticky","headStyle","TableBody","TableRow","clickable","rowStyle","SortIcon","TableHeader","sortable","sortDirection","onSort","TableCell","truncate","cellStyle","TableFoot","footStyle","TableCaption","captionStyle","ListContext","useListContext","List","ListItem","secondary","primaryStyle","secondaryStyle","ListDivider","ListHeader","InfoItem","layout","hideEmpty","displayValue","getContainerStyle","InfoList","columns","Badge","colorValue","SpinnerLoader","Dots","dotSize","Pulse","Loader","renderLoader","Spinner","Skeleton","width","animate","skeletonStyle","shimmerStyle","SkeletonText","lines","lastLineWidth","_","Divider","labelPosition","lineStyle","showStartLine","showEndLine","EmptyState","secondaryAction","EmptyStateIcon","Portal","container","portalContainer","setPortalContainer","element","FOCUSABLE_SELECTORS","useFocusTrap","autoFocus","restoreFocus","initialFocus","getFocusableElements","focusFirst","focusLast","elements","FocusTrap","forwardedRef","Overlay","closeOnClick","blur","blurAmount","usePortal","zIndex","srOnlyStyles","focusableStyles","ScreenReaderOnly","focusable","SrOnly","useMediaQuery","query","matches","setMatches","mediaQuery","useIsMobile","useIsTablet","useIsDesktop","usePrefersReducedMotion","usePrefersDarkMode","useDisclosure","defaultIsOpen","onOpenProp","onCloseProp","onOpen","onToggle","newState","useKeyboardNavigation","itemCount","initialIndex","loop","onIndexChange","onSelect","focusedIndex","setFocusedIndexState","setFocusedIndex","moveFocus","isVertical","getItemProps","useControllable","isControlled","isControlledRef","setValue","nextValue","resolvedValue"],"mappings":";;;;;;;AAeO,MAAMA,KAAmB;AAAA;AAAA,EAE9B,IAAIC,EAAQ,CAAC;AAAA;AAAA,EAEb,IAAIA,EAAQ,CAAC;AAAA;AAAA,EAEb,IAAIA,EAAQ,EAAE;AAAA;AAAA,EAEd,IAAIA,EAAQ,EAAE;AAAA;AAAA,EAEd,IAAIA,EAAQ,EAAE;AAChB,GAKaC,KAAY;AAAA;AAAA,EAEvB,IAAID,EAAQ,CAAC;AAAA;AAAA,EAEb,IAAIA,EAAQ,CAAC;AAAA;AAAA,EAEb,IAAIA,EAAQ,CAAC;AAAA;AAAA,EAEb,IAAIA,EAAQ,CAAC;AAAA;AAAA,EAEb,IAAIA,EAAQ,CAAC;AACf,GAMaE,KAAoB;AAAA;AAAA,EAE/B,IAAIF,EAAQ,CAAC;AAAA;AAAA,EAEb,IAAIA,EAAQ,CAAC;AAAA;AAAA,EAEb,IAAIA,EAAQ,CAAC;AAAA;AAAA,EAEb,IAAIA,EAAQ,CAAC;AAAA;AAAA,EAEb,IAAIA,EAAQ,CAAC;AACf,GAKaG,KAAoB;AAAA;AAAA,EAE/B,IAAIH,EAAQ,CAAC;AAAA;AAAA,EAEb,IAAIA,EAAQ,GAAG;AAAA;AAAA,EAEf,IAAIA,EAAQ,CAAC;AAAA;AAAA,EAEb,IAAIA,EAAQ,GAAG;AAAA;AAAA,EAEf,IAAIA,EAAQ,CAAC;AACf,GAKaI,KAAe;AAAA;AAAA,EAE1B,IAAIJ,EAAQ,CAAC;AAAA;AAAA,EAEb,IAAIA,EAAQ,GAAG;AAAA;AAAA,EAEf,IAAIA,EAAQ,CAAC;AAAA;AAAA,EAEb,IAAIA,EAAQ,GAAG;AAAA;AAAA,EAEf,IAAIA,EAAQ,CAAC;AACf,GAKaK,KAAc;AAAA;AAAA,EAEzB,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,MAAM;AACR,GAKaC,KAAgB;AAAA;AAAA,EAE3B,iBAAiB;AAAA;AAAA,EAEjB,iBAAiB;AAAA;AAAA,EAEjB,WAAWN,EAAQ,CAAC;AAAA;AAAA,EAEpB,QAAQA,EAAQ,CAAC;AACnB,GAKaO,KAAe;AAAA,EAC1B,IAAI;AAAA,IACF,KAAK;AAAA,IACL,MAAM;AAAA,EAAA;AAAA,EAER,IAAI;AAAA,IACF,KAAK;AAAA,IACL,MAAM;AAAA,EAAA;AAAA,EAER,IAAI;AAAA,IACF,KAAK;AAAA,IACL,MAAM;AAAA,EAAA;AAEV,GAKaC,KAAc;AAAA,EACzB,IAAI;AAAA,IACF,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,EAAA;AAAA,EAET,IAAI;AAAA,IACF,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,EAAA;AAAA,EAET,IAAI;AAAA,IACF,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,EAAA;AAEX,GCnJaC,KAAY;AAAA;AAAA,EAEvB,SAAS;AAAA;AAAA,EAET,OAAO;AAAA;AAAA,EAEP,SAAS;AAAA;AAAA,EAET,QAAQ;AAAA;AAAA,EAER,MAAM;AACR,GAKaC,KAAkB;AAAA,EAC7B,SAAS;AAAA,EACT,OAAO;AACT,GAeaC,KAAc;AAAA;AAAA,EAEzB,SAAS;AAAA,IACP,SAAS;AAAA,IACT,eAAe;AAAA,EAAA;AAAA;AAAA,EAGjB,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,WAAWF,GAAU;AAAA,EAAA;AAAA;AAAA,EAGvB,WAAW;AAAA,IACT,SAAS;AAAA,IACT,WAAWA,GAAU;AAAA,EAAA;AAAA;AAAA,EAGvB,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,WAAW;AAAA,EAAA;AAEf,GCtDaG,KAAa;AAAA;AAAA,EAExB,MAAM;AAAA;AAAA,EAGN,SAAS,OAAOC,EAAU,MAAM,MAAMC,EAAQ,OAAO;AAAA;AAAA,EAGrD,MAAM,OAAOD,EAAU,IAAI,MAAMC,EAAQ,OAAO;AAAA;AAAA,EAGhD,OAAO,OAAOD,EAAU,KAAK,MAAMC,EAAQ,OAAO;AAAA;AAAA,EAGlD,SAAS,OAAOD,EAAU,MAAM,MAAMC,EAAQ,OAAO;AAAA;AAAA,EAGrD,QAAQ,OAAOD,EAAU,OAAO,MAAMC,EAAQ,MAAM;AAAA;AAAA,EAGpD,MAAM,OAAOD,EAAU,IAAI,MAAMC,EAAQ,OAAO;AAAA;AAAA,EAGhD,QAAQ,OAAOD,EAAU,OAAO,MAAMC,EAAQ,UAAU;AAAA;AAAA,EAGxD,QAAQ,SAASD,EAAU,IAAI,MAAMC,EAAQ,OAAO,sBAAsBD,EAAU,IAAI,MAAMC,EAAQ,OAAO,kBAAkBD,EAAU,IAAI,MAAMC,EAAQ,OAAO;AAAA;AAAA,EAGlK,WAAW,aAAaD,EAAU,MAAM,MAAMC,EAAQ,OAAO;AAAA;AAAA,EAG7D,SAAS,WAAWD,EAAU,MAAM,MAAMC,EAAQ,OAAO;AAAA;AAAA,EAGzD,QAAQ,cAAcD,EAAU,MAAM,MAAMC,EAAQ,OAAO;AAC7D,GAKaC,KAAuB;AAAA,EAClC,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,YAAY;AACd,GAKaC,KAAW;AAAA,EACtB,SAASH,EAAU;AAAA,EACnB,MAAMA,EAAU;AAAA,EAChB,OAAOA,EAAU;AAAA,EACjB,SAASA,EAAU;AAAA,EACnB,QAAQA,EAAU;AAAA,EAClB,MAAMA,EAAU;AAAA,EAChB,QAAQA,EAAU;AACpB,GAKaI,KAAS;AAAA,EACpB,QAAQH,EAAQ;AAAA,EAChB,MAAMA,EAAQ;AAAA,EACd,QAAQA,EAAQ;AAAA,EAChB,SAASA,EAAQ;AAAA,EACjB,WAAWA,EAAQ;AAAA,EACnB,QAAQA,EAAQ;AAAA,EAChB,YAAYA,EAAQ;AAAA,EACpB,QAAQA,EAAQ;AAAA,EAChB,QAAQA,EAAQ;AAClB,GAKaI,KAAY;AAAA,EACvB,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMR,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMT,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMT,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMV,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMT,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMX,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMN,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMP,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMT,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAMV,GC7IaC,IAAoB;AAAA;AAAA,EAE/B,IAAIC,GAAU;AAAA;AAAA,EAEd,IAAIA,GAAU;AAAA;AAAA,EAEd,IAAIA,GAAU;AAAA;AAAA,EAEd,IAAI;AAAA;AAAA,EAEJ,IAAIA,GAAU;AAChB,GAKaC,KAAsB;AAAA;AAAA,EAEjC,SAASC,GAAY;AAAA;AAAA,EAErB,QAAQA,GAAY;AAAA;AAAA,EAEpB,UAAUA,GAAY;AAAA;AAAA,EAEtB,MAAMA,GAAY;AACpB,GAKaC,IAAsB;AAAA;AAAA,EAEjC,MAAMC,GAAY;AAAA;AAAA,EAElB,OAAOA,GAAY;AAAA;AAAA,EAEnB,MAAM;AAAA;AAAA,EAEN,QAAQA,GAAY;AAAA;AAAA,EAEpB,SAAS;AACX,GAKaC,KAAsB;AAAA;AAAA,EAEjC,OAAO;AAAA,IACL,YAAYC,GAAa;AAAA,IACzB,UAAUP,EAAkB;AAAA,IAC5B,YAAYE,GAAoB;AAAA,IAChC,YAAYE,EAAoB;AAAA,EAAA;AAAA;AAAA,EAGlC,YAAY;AAAA,IACV,YAAYG,GAAa;AAAA,IACzB,UAAUP,EAAkB;AAAA,IAC5B,YAAYE,GAAoB;AAAA,IAChC,YAAYE,EAAoB;AAAA,EAAA;AAAA;AAAA,EAGlC,WAAW;AAAA,IACT,YAAYG,GAAa;AAAA,IACzB,UAAUP,EAAkB;AAAA,IAC5B,YAAYE,GAAoB;AAAA,IAChC,YAAYE,EAAoB;AAAA,EAAA;AAAA;AAAA,EAGlC,UAAU;AAAA,IACR,YAAYG,GAAa;AAAA,IACzB,UAAUP,EAAkB;AAAA,IAC5B,YAAYE,GAAoB;AAAA,IAChC,YAAYE,EAAoB;AAAA,EAAA;AAAA;AAAA,EAGlC,UAAU;AAAA,IACR,YAAYG,GAAa;AAAA,IACzB,UAAUP,EAAkB;AAAA,IAC5B,YAAYE,GAAoB;AAAA,IAChC,YAAYE,EAAoB;AAAA,EAAA;AAAA;AAAA,EAGlC,UAAU;AAAA,IACR,YAAYG,GAAa;AAAA,IACzB,UAAUP,EAAkB;AAAA,IAC5B,YAAYE,GAAoB;AAAA,IAChC,YAAYE,EAAoB;AAAA,EAAA;AAAA;AAAA,EAGlC,OAAO;AAAA,IACL,YAAYG,GAAa;AAAA,IACzB,UAAUP,EAAkB;AAAA,IAC5B,YAAYE,GAAoB;AAAA,IAChC,YAAYE,EAAoB;AAAA,EAAA;AAAA;AAAA,EAGlC,SAAS;AAAA,IACP,YAAYG,GAAa;AAAA,IACzB,UAAUP,EAAkB;AAAA,IAC5B,YAAYE,GAAoB;AAAA,IAChC,YAAYE,EAAoB;AAAA,EAAA;AAAA;AAAA,EAGlC,YAAY;AAAA,IACV,YAAYG,GAAa;AAAA,IACzB,UAAUP,EAAkB;AAAA,IAC5B,YAAYE,GAAoB;AAAA,IAChC,YAAYE,EAAoB;AAAA,EAAA;AAAA;AAAA,EAGlC,kBAAkB;AAAA,IAChB,YAAYG,GAAa;AAAA,IACzB,UAAUP,EAAkB;AAAA,IAC5B,YAAYE,GAAoB;AAAA,IAChC,YAAYE,EAAoB;AAAA,EAAA;AAAA;AAAA,EAGlC,YAAY;AAAA,IACV,YAAYG,GAAa;AAAA,IACzB,UAAUN,GAAU;AAAA,IACpB,YAAYC,GAAoB;AAAA,IAChC,YAAYE,EAAoB;AAAA,EAAA;AAAA;AAAA,EAGlC,kBAAkB;AAAA,IAChB,YAAYG,GAAa;AAAA,IACzB,UAAUP,EAAkB;AAAA,IAC5B,YAAYE,GAAoB;AAAA,IAChC,YAAYE,EAAoB;AAAA,EAAA;AAAA;AAAA,EAGlC,iBAAiB;AAAA,IACf,YAAYG,GAAa;AAAA,IACzB,UAAUN,GAAU;AAAA,IACpB,YAAYC,GAAoB;AAAA,IAChC,YAAYE,EAAoB;AAAA,EAAA;AAAA;AAAA,EAGlC,uBAAuB;AAAA,IACrB,YAAYG,GAAa;AAAA,IACzB,UAAUP,EAAkB;AAAA,IAC5B,YAAYE,GAAoB;AAAA,IAChC,YAAYE,EAAoB;AAAA,EAAA;AAAA;AAAA,EAGlC,cAAc;AAAA,IACZ,YAAYG,GAAa;AAAA,IACzB,UAAUP,EAAkB;AAAA,IAC5B,YAAYE,GAAoB;AAAA,IAChC,YAAYE,EAAoB;AAAA,EAAA;AAEpC,GC5JaI,KAAU;AAAA;AAAA,EAErB,aAAa;AAAA;AAAA,EAEb,GAAG;AAAA;AAAA,EAEH,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,QAAQ;AACV,GAKaC,KAAe;AAAA;AAAA,EAE1B,UAAUD,GAAQ,EAAE;AAAA;AAAA,EAEpB,aAAaA,GAAQ,EAAE;AAAA;AAAA,EAEvB,cAAcA,GAAQ,CAAC;AAAA;AAAA,EAEvB,eAAeA,GAAQ,EAAE;AAAA;AAAA,EAEzB,UAAUA,GAAQ,EAAE;AAAA;AAAA,EAEpB,SAASA,GAAQ,EAAE;AAAA;AAAA,EAEnB,OAAOA,GAAQ,EAAE;AAAA;AAAA,EAEjB,QAAQA,GAAQ,EAAE;AACpB,GAKaE,KAAQ;AAAA;AAAA,EAEnB,SAAS;AAAA;AAAA,EAET,eAAe;AAAA;AAAA,EAEf,gBAAgB;AAAA;AAAA,EAEhB,QAAQ;AAAA;AAAA,EAER,QAAQ;AAAA;AAAA,EAER,OAAO;AAAA;AAAA,EAEP,YAAY;AACd,GCxEaC,KAAe;AAAA;AAAA,EAE1B,WAAW;AAAA;AAAA,EAEX,UAAU;AAAA;AAAA,EAEV,UAAU9B,EAAQ,CAAC;AAAA;AAAA,EAEnB,aAAaA,EAAQ,CAAC;AACxB,GAKa+B,KAAc;AAAA;AAAA,EAEzB,QAAQ/B,EAAQ,EAAE;AAAA;AAAA,EAElB,SAASA,EAAQ,EAAE;AACrB,GAKagC,KAAc;AAAA;AAAA,EAEzB,IAAIhC,EAAQ,CAAC;AAAA;AAAA,EAEb,IAAIA,EAAQ,CAAC;AAAA;AAAA,EAEb,IAAI;AAAA;AAAA,EAEJ,IAAIA,EAAQ,EAAE;AAAA;AAAA,EAEd,IAAIA,EAAQ,EAAE;AAAA;AAAA,EAEd,OAAOA,EAAQ,EAAE;AACnB,GAKaiC,KAAkB;AAAA;AAAA,EAE7B,IAAI;AAAA;AAAA,EAEJ,IAAIjC,EAAQ,CAAC;AAAA;AAAA,EAEb,IAAI;AAAA;AAAA,EAEJ,IAAIA,EAAQ,EAAE;AAAA;AAAA,EAEd,IAAIA,EAAQ,EAAE;AAChB,GAKakC,KAAmB;AAAA;AAAA,EAE9B,eAAelC,EAAQ,EAAE;AAAA;AAAA,EAEzB,SAASA,EAAQ,CAAC;AACpB,GAKamC,KAAiB;AAAA;AAAA,EAE5B,QAAQnC,EAAQ,CAAC;AAAA;AAAA,EAEjB,QAAQA,EAAQ,CAAC;AAAA;AAAA,EAEjB,SAASA,EAAQ,CAAC;AAAA;AAAA,EAElB,MAAMA,EAAQ,CAAC;AACjB,GAKaoC,KAAoB;AAAA;AAAA,EAE/B,cAAcpC,EAAQ,CAAC;AACzB,GAKaqC,KAAmB;AAAA;AAAA,EAE9B,UAAU;AAAA;AAAA,EAEV,UAAUrC,EAAQ,CAAC;AAAA;AAAA,EAEnB,aAAa;AACf,GAKasC,KAAgB;AAAA;AAAA,EAE3B,eAAetC,EAAQ,EAAE;AAC3B;ACzGO,SAASuC,KAAMC,GAA0D;AAC9E,SAAOA,EAAQ,OAAO,OAAO,EAAE,KAAK,GAAG;AACzC;AAGO,SAASC,GAAgBC,GAAmC;AACjE,SAAO1C,EAAQ0C,CAAG;AACpB;AAGO,SAASC,EAAaD,GAA2D;AACtF,MAAIA,MAAQ,OAAW;AACvB,QAAME,IAAQ5C,EAAQ0C,CAAG;AACzB,SAAOE,MAAU,IAAI,MAAM,GAAGA,CAAK;AACrC;AAGO,SAASC,GAAmBC,GAAoC;AACrE,QAAMC,IAAwB,CAAA;AAE9B,SAAID,EAAM,MAAM,aAAkB,SAASH,EAAaG,EAAM,CAAC,IAC3DA,EAAM,OAAO,WACfC,EAAO,aAAaJ,EAAaG,EAAM,EAAE,GACzCC,EAAO,cAAcJ,EAAaG,EAAM,EAAE,IAExCA,EAAM,OAAO,WACfC,EAAO,YAAYJ,EAAaG,EAAM,EAAE,GACxCC,EAAO,eAAeJ,EAAaG,EAAM,EAAE,IAEzCA,EAAM,OAAO,aAAkB,YAAYH,EAAaG,EAAM,EAAE,IAChEA,EAAM,OAAO,aAAkB,cAAcH,EAAaG,EAAM,EAAE,IAClEA,EAAM,OAAO,aAAkB,eAAeH,EAAaG,EAAM,EAAE,IACnEA,EAAM,OAAO,aAAkB,aAAaH,EAAaG,EAAM,EAAE,IAEjEA,EAAM,MAAM,aAAkB,UAAUH,EAAaG,EAAM,CAAC,IAC5DA,EAAM,OAAO,WACfC,EAAO,cAAcJ,EAAaG,EAAM,EAAE,GAC1CC,EAAO,eAAeJ,EAAaG,EAAM,EAAE,IAEzCA,EAAM,OAAO,WACfC,EAAO,aAAaJ,EAAaG,EAAM,EAAE,GACzCC,EAAO,gBAAgBJ,EAAaG,EAAM,EAAE,IAE1CA,EAAM,OAAO,aAAkB,aAAaH,EAAaG,EAAM,EAAE,IACjEA,EAAM,OAAO,aAAkB,eAAeH,EAAaG,EAAM,EAAE,IACnEA,EAAM,OAAO,aAAkB,gBAAgBH,EAAaG,EAAM,EAAE,IACpEA,EAAM,OAAO,aAAkB,cAAcH,EAAaG,EAAM,EAAE,IAE/DC;AACT;AAQA,IAAIC,KAAY;AACT,SAASC,GAAWC,IAAS,UAAkB;AACpD,SAAO,GAAGA,CAAM,IAAI,EAAEF,EAAS;AACjC;AAGO,SAASG,GAAUC,GAAaC,GAAuB;AAC5D,QAAMC,IAAS,4CAA4C,KAAKF,CAAG;AACnE,MAAI,CAACE,EAAQ,QAAOF;AAEpB,QAAMG,IAAI,SAASD,EAAO,CAAC,GAAG,EAAE,GAC1BE,IAAI,SAASF,EAAO,CAAC,GAAG,EAAE,GAC1BG,IAAI,SAASH,EAAO,CAAC,GAAG,EAAE;AAEhC,SAAO,QAAQC,CAAC,KAAKC,CAAC,KAAKC,CAAC,KAAKJ,CAAK;AACxC;AC9EA,MAAMK,KAAgE;AAAA,EACpE,MAAM;AAAA,EACN,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AACR,GAEMC,KAAgE;AAAA,EACpE,MAAM;AAAA,EACN,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,OAAO;AACT;AAEO,SAASC,GAAed,GAAmC;AAGhE,QAAMC,IAAwB;AAAA,IAC5B,GAHoBF,GAAmBC,CAAK;AAAA,EAGzC;AAGL,SAAIA,EAAM,YAASC,EAAO,UAAUD,EAAM,UACtCA,EAAM,aAAUC,EAAO,WAAWD,EAAM,WACxCA,EAAM,UAAOC,EAAO,QAAQD,EAAM,QAClCA,EAAM,WAAQC,EAAO,SAASD,EAAM,SACpCA,EAAM,aAAUC,EAAO,WAAWD,EAAM,WACxCA,EAAM,aAAUC,EAAO,WAAWD,EAAM,WACxCA,EAAM,cAAWC,EAAO,YAAYD,EAAM,YAC1CA,EAAM,cAAWC,EAAO,YAAYD,EAAM,YAC1CA,EAAM,aAAUC,EAAO,WAAWD,EAAM,WACxCA,EAAM,OAAIC,EAAO,kBAAkBD,EAAM,KACzCA,EAAM,WAAQC,EAAO,eAAeW,GAAUZ,EAAM,MAAM,IAC1DA,EAAM,WAAQC,EAAO,YAAYY,GAAUb,EAAM,MAAM,IAEpDC;AACT;AC/BA,MAAMc,KAAwC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,SAASC,GACPhB,GAC0C;AAC1C,QAAMQ,IAAS,EAAE,GAAGR,EAAA;AACpB,aAAWJ,KAAOmB;AAChB,WAAOP,EAAOZ,CAAG;AAEnB,SAAOY;AACT;AAEA,MAAMS,KAAW,CACf,EAAE,IAAAC,GAAI,WAAAC,GAAW,OAAAC,GAAO,UAAAC,GAAU,QAAAC,GAAQ,GAAGtB,EAAA,GAC7CuB,MACG;AACH,QAAMC,IAAYN,KAAM,OAClBO,IAAYX,GAAed,CAAoB,GAC/C0B,IAAgBV,GAAahB,CAAK;AAExC,SACE,gBAAA2B;AAAA,IAACH;AAAA,IAAA;AAAA,MACC,KAAAD;AAAA,MACA,WAAW9B,EAAG,cAAc0B,CAAS;AAAA,MACrC,OAAO,EAAE,GAAGM,GAAW,GAAGL,EAAA;AAAA,MAC1B,eAAaE;AAAA,MACZ,GAAGI;AAAA,MAEH,UAAAL;AAAA,IAAA;AAAA,EAAA;AAGP,GAEaO,KAAMC,EAAWZ,EAAQ;AAEtCW,GAAI,cAAc;ACjElB,MAAME,KAA4C;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,SAASC,GACP/B,GAC4C;AAC5C,QAAMQ,IAAS,EAAE,GAAGR,EAAA;AACpB,aAAWJ,KAAOkC;AAChB,WAAOtB,EAAOZ,CAAG;AAEnB,SAAOY;AACT;AAEA,SAASwB,GAAiBhC,GAAqC;AAG7D,QAAMC,IAAwB;AAAA,IAC5B,GAHoBF,GAAmBC,CAAK;AAAA,IAI5C,SAASA,EAAM,SAAS,gBAAgB;AAAA,IACxC,eAAeA,EAAM,aAAa;AAAA,EAAA;AAGpC,SAAIA,EAAM,QAAQ,SAChBC,EAAO,MAAMJ,EAAaG,EAAM,GAAG,KAE/BA,EAAM,SAAS,aAAkB,YAAYH,EAAaG,EAAM,IAAI,IACpEA,EAAM,SAAS,aAAkB,SAASH,EAAaG,EAAM,IAAI,KAGnEA,EAAM,UAAOC,EAAO,aAAaD,EAAM,QACvCA,EAAM,YAASC,EAAO,iBAAiBD,EAAM,UAC7CA,EAAM,SAAMC,EAAO,WAAWD,EAAM,OAEjCC;AACT;AAEA,MAAMgC,KAAa,CACjB,EAAE,IAAAf,GAAI,WAAAC,GAAW,OAAAC,GAAO,UAAAC,GAAU,QAAAC,GAAQ,GAAGtB,EAAA,GAC7CuB,MACG;AACH,QAAMC,IAAYN,KAAM,OAClBgB,IAAcF,GAAiBhC,CAAsB,GACrD0B,IAAgBK,GAAe/B,CAAK;AAE1C,SACE,gBAAA2B;AAAA,IAACH;AAAA,IAAA;AAAA,MACC,KAAAD;AAAA,MACA,WAAW9B,EAAG,gBAAgB0B,CAAS;AAAA,MACvC,OAAO,EAAE,GAAGe,GAAa,GAAGd,EAAA;AAAA,MAC5B,eAAaE;AAAA,MACZ,GAAGI;AAAA,MAEH,UAAAL;AAAA,IAAA;AAAA,EAAA;AAGP,GAEac,KAAQN,EAAWI,EAAU;AAE1CE,GAAM,cAAc;AAGpB,MAAMC,KAAc,CAClBpC,GACAuB,MAEO,gBAAAI,EAACQ,MAAM,KAAAZ,GAAU,WAAU,OAAM,OAAM,UAAU,GAAGvB,GAAO,GAGvDqC,KAASR,EAAWO,EAAW;AAE5CC,GAAO,cAAc;AAGrB,MAAMC,KAAc,CAClBtC,GACAuB,wBAEQY,IAAA,EAAM,KAAAZ,GAAU,WAAU,UAAU,GAAGvB,GAAO,GAG3CuC,KAASV,EAAWS,EAAW;AAE5CC,GAAO,cAAc;AC7DrB,MAAMC,KAA0C;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,SAASC,GACPzC,GAC2C;AAC3C,QAAMQ,IAAS,EAAE,GAAGR,EAAA;AACpB,aAAWJ,KAAO4C;AAChB,WAAOhC,EAAOZ,CAAG;AAEnB,SAAOY;AACT;AAEA,SAASkC,GAAgB1C,GAAoC;AAG3D,QAAMC,IAAwB;AAAA,IAC5B,GAHoBF,GAAmBC,CAAK;AAAA,IAI5C,SAASA,EAAM,SAAS,gBAAgB;AAAA,EAAA;AAG1C,SAAIA,EAAM,YAAY,WACpBC,EAAO,sBACL,OAAOD,EAAM,WAAY,WAAW,UAAUA,EAAM,OAAO,WAAWA,EAAM,UAG5EA,EAAM,SAAS,WACjBC,EAAO,mBACL,OAAOD,EAAM,QAAS,WAAW,UAAUA,EAAM,IAAI,WAAWA,EAAM,OAGtEA,EAAM,oBAAiBC,EAAO,sBAAsBD,EAAM,kBAC1DA,EAAM,iBAAcC,EAAO,mBAAmBD,EAAM,eAEpDA,EAAM,QAAQ,SAChBC,EAAO,MAAMJ,EAAaG,EAAM,GAAG,KAE/BA,EAAM,SAAS,aAAkB,YAAYH,EAAaG,EAAM,IAAI,IACpEA,EAAM,SAAS,aAAkB,SAASH,EAAaG,EAAM,IAAI,KAGnEA,EAAM,UAAOC,EAAO,aAAaD,EAAM,QACvCA,EAAM,YAASC,EAAO,eAAeD,EAAM,UAC3CA,EAAM,SAAMC,EAAO,eAAeD,EAAM,OAErCC;AACT;AAEA,MAAM0C,KAAY,CAChB,EAAE,IAAAzB,GAAI,WAAAC,GAAW,OAAAC,GAAO,UAAAC,GAAU,QAAAC,GAAQ,GAAGtB,EAAA,GAC7CuB,MACG;AACH,QAAMC,IAAYN,KAAM,OAClB0B,IAAaF,GAAgB1C,CAAqB,GAClD0B,IAAgBe,GAAczC,CAAK;AAEzC,SACE,gBAAA2B;AAAA,IAACH;AAAA,IAAA;AAAA,MACC,KAAAD;AAAA,MACA,WAAW9B,EAAG,eAAe0B,CAAS;AAAA,MACtC,OAAO,EAAE,GAAGyB,GAAY,GAAGxB,EAAA;AAAA,MAC3B,eAAaE;AAAA,MACZ,GAAGI;AAAA,MAEH,UAAAL;AAAA,IAAA;AAAA,EAAA;AAGP,GAEawB,KAAOhB,EAAWc,EAAS;AAExCE,GAAK,cAAc;AAsCnB,MAAMC,KAAgB,CACpB;AAAA,EACE,IAAA5B;AAAA,EACA,WAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC;AAAA,EACA,SAAAyB;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC;AAAA,EACA,GAAGpD;AACL,GACAuB,MACG;AACH,QAAMC,IAAYN,KAAM,OAElBmC,IAA4B,CAAA;AAElC,SAAIN,MAAY,WACdM,EAAW,aAAaN,MAAY,SAAS,WAAW,QAAQA,CAAO,KAErEC,MAAY,WAAWK,EAAW,UAAU,QAAQL,CAAO,KAC3DC,MAAa,WAAWI,EAAW,kBAAkBJ,IACrDC,MAAW,WAAWG,EAAW,gBAAgBH,IACjDC,MAAa,WAAWE,EAAW,eAAeF,IAClDC,MAAW,WAAWC,EAAW,aAAaD,IAGhD,gBAAAzB;AAAA,IAACH;AAAA,IAAA;AAAA,MACC,KAAAD;AAAA,MACA,WAAW9B,EAAG,oBAAoB0B,CAAS;AAAA,MAC3C,OAAO,EAAE,GAAGkC,GAAY,GAAGjC,EAAA;AAAA,MAC3B,eAAaE;AAAA,MACZ,GAAGtB;AAAA,MAEH,UAAAqB;AAAA,IAAA;AAAA,EAAA;AAGP,GAEaiC,KAAWzB,EAAWiB,EAAa;AAEhDQ,GAAS,cAAc;ACjMvB,MAAMC,KAAoD;AAAA,EACxD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,SAASC,GACPxD,GACgD;AAChD,QAAMQ,IAAS,EAAE,GAAGR,EAAA;AACpB,aAAWJ,KAAO2D;AAChB,WAAO/C,EAAOZ,CAAG;AAEnB,SAAOY;AACT;AAEA,SAASiD,GAAqBzD,GAAyC;AACrE,QAAM0D,IAAgB3D,GAAmBC,CAAK,GAExC2D,IAAO3D,EAAM,QAAQ,MACrB4D,IAAWC,GAAWF,CAAI,GAE1B1D,IAAwB;AAAA,IAC5B,GAAGyD;AAAA,IACH,OAAO;AAAA,IACP,UAAU,OAAOE,KAAa,WAAW,GAAGA,CAAQ,OAAOA;AAAA,EAAA;AAG7D,SAAI5D,EAAM,aAAa,OACrBC,EAAO,aAAa,QACpBA,EAAO,cAAc,SAGnBD,EAAM,WAAW,OACnBC,EAAO,cAAc,yBACrBA,EAAO,eAAe,0BAGjBA;AACT;AAEA,MAAM6D,KAAiB,CACrB,EAAE,IAAA5C,GAAI,WAAAC,GAAW,OAAAC,GAAO,UAAAC,GAAU,QAAAC,GAAQ,GAAGtB,EAAA,GAC7CuB,MACG;AACH,QAAMC,IAAYN,KAAM,OAClB6C,IAAkBN,GAAqBzD,CAA0B,GACjE0B,IAAgB8B,GAAmBxD,CAAK;AAE9C,SACE,gBAAA2B;AAAA,IAACH;AAAA,IAAA;AAAA,MACC,KAAAD;AAAA,MACA,WAAW9B,EAAG,oBAAoB0B,CAAS;AAAA,MAC3C,OAAO,EAAE,GAAG4C,GAAiB,GAAG3C,EAAA;AAAA,MAChC,eAAaE;AAAA,MACZ,GAAGI;AAAA,MAEH,UAAAL;AAAA,IAAA;AAAA,EAAA;AAGP,GAEa2C,KAAYnC,EAAWiC,EAAc;AAElDE,GAAU,cAAc;AChFxB,MAAMC,KAA0C;AAAA,EAC9C,MAAM;AAAA,EACN,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAEaC,KAAOrC,EAAsC,SACxD;AAAA,EACE,SAAAsC,IAAU;AAAA,EACV,SAAAC,IAAU;AAAA,EACV,aAAAC,IAAc;AAAA,EACd,UAAAC,IAAW;AAAA,EACX,WAAAnD;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC;AAAA,EACA,GAAGtB;AACL,GACAuB,GACA;AA4CA,QAAMgD,IAA2B;AAAA,IAC/B,IA5CuB,MAAqB;AAC5C,YAAMC,IAAsB;AAAA,QAC1B,cAAc;AAAA,QACd,YAAY;AAAA,MAAA;AAGd,cAAQL,GAAA;AAAA,QACN,KAAK;AACH,iBAAO;AAAA,YACL,GAAGK;AAAA,YACH,iBAAiB;AAAA,YACjB,WAAWF,IACP,qEACA;AAAA,YACJ,QAAQ;AAAA,UAAA;AAAA,QAEZ,KAAK;AACH,iBAAO;AAAA,YACL,GAAGE;AAAA,YACH,iBAAiB;AAAA,YACjB,QAAQF,IACJ,4CACA;AAAA,UAAA;AAAA,QAER,KAAK;AACH,iBAAO;AAAA,YACL,GAAGE;AAAA,YACH,iBAAiB;AAAA,YACjB,QAAQF,IACJ,4CACA;AAAA,UAAA;AAAA,QAER,KAAK;AACH,iBAAO;AAAA,YACL,GAAGE;AAAA,YACH,iBAAiB;AAAA,YACjB,QAAQF,IACJ,4CACA;AAAA,UAAA;AAAA,MACN;AAAA,IAEN,GAGK;AAAA,IACH,SAASL,GAAWG,CAAO;AAAA,IAC3B,SAAS;AAAA,IACT,eAAe;AAAA,IACf,QAAQC,IAAc,YAAY;AAAA,IAClC,GAAGjD;AAAA,EAAA;AAGL,SACE,gBAAAO;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAJ;AAAA,MACA,WAAW9B;AAAA,QACT;AAAA,QACA,gBAAgB0E,CAAO;AAAA,QACvBE,KAAe;AAAA,QACfC,KAAY;AAAA,QACZnD;AAAA,MAAA;AAAA,MAEF,OAAOoD;AAAA,MACP,eAAajD;AAAA,MACb,cACE+C,IACI,CAACI,MAAM;AACL,cAAMC,IAASD,EAAE;AACjB,QAAIN,MAAY,cACdO,EAAO,MAAM,YAAYJ,IACrB,qEACA,2BACJI,EAAO,MAAM,YAAY,sBAChBP,MAAY,YACrBO,EAAO,MAAM,cAAc;AAAA,MAE/B,IACA;AAAA,MAEN,cACEL,IACI,CAACI,MAAM;AACL,cAAMC,IAASD,EAAE;AACjB,QAAIN,MAAY,cACdO,EAAO,MAAM,YAAYJ,IACrB,qEACA,2BACJI,EAAO,MAAM,YAAY,mBAChBP,MAAY,YACrBO,EAAO,MAAM,cAAcJ,IACvB,kCACA;AAAA,MAER,IACA;AAAA,MAEL,GAAGtE;AAAA,MAEH,UAAAqB;AAAA,IAAA;AAAA,EAAA;AAGP,CAAC;AAED6C,GAAK,cAAc;AAEZ,MAAMS,KAAa9C,EAA4C,SACpE,EAAE,SAAA+C,IAAU,IAAO,WAAAzD,GAAW,OAAAC,GAAO,UAAAC,GAAU,GAAGrB,EAAA,GAClDuB,GACA;AACA,QAAMsD,IAA6B;AAAA,IACjC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,KAAK;AAAA,IACL,eAAeD,IAAU,KAAK;AAAA,IAC9B,cAAcA,IAAU,KAAK;AAAA,IAC7B,cAAcA,IAAU,yCAAyC;AAAA,IACjE,GAAGxD;AAAA,EAAA;AAGL,SACE,gBAAAO,EAAC,OAAA,EAAI,KAAAJ,GAAU,WAAW9B,EAAG,sBAAsB0B,CAAS,GAAG,OAAO0D,GAAc,GAAG7E,GACpF,UAAAqB,EAAA,CACH;AAEJ,CAAC;AAEDsD,GAAW,cAAc;AAElB,MAAMG,KAAWjD,EAA0C,SAChE,EAAE,WAAAV,GAAW,OAAAC,GAAO,UAAAC,GAAU,GAAGrB,EAAA,GACjCuB,GACA;AACA,QAAMwD,IAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,GAAG3D;AAAA,EAAA;AAGL,SACE,gBAAAO,EAAC,OAAA,EAAI,KAAAJ,GAAU,WAAW9B,EAAG,oBAAoB0B,CAAS,GAAG,OAAO4D,GAAY,GAAG/E,GAChF,UAAAqB,EAAA,CACH;AAEJ,CAAC;AAEDyD,GAAS,cAAc;AAEhB,MAAME,KAAanD,EAA4C,SACpE,EAAE,SAAA+C,IAAU,IAAO,OAAAK,IAAQ,SAAS,WAAA9D,GAAW,OAAAC,GAAO,UAAAC,GAAU,GAAGrB,EAAA,GACnEuB,GACA;AAQA,QAAM2D,IAA6B;AAAA,IACjC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAVgE;AAAA,MAChE,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,SAAS;AAAA,IAAA,EAMgBD,CAAK;AAAA,IAC9B,KAAK;AAAA,IACL,YAAYL,IAAU,KAAK;AAAA,IAC3B,WAAWA,IAAU,KAAK;AAAA,IAC1B,WAAWA,IAAU,yCAAyC;AAAA,IAC9D,GAAGxD;AAAA,EAAA;AAGL,SACE,gBAAAO,EAAC,OAAA,EAAI,KAAAJ,GAAU,WAAW9B,EAAG,sBAAsB0B,CAAS,GAAG,OAAO+D,GAAc,GAAGlF,GACpF,UAAAqB,EAAA,CACH;AAEJ,CAAC;AAED2D,GAAW,cAAc;ACxNzB,MAAMG,KAA6C;AAAA,EACjD,MAAM;AAAA,EACN,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAEaC,KAAUvD,EAAsC,SAC3D;AAAA,EACE,OAAAwD;AAAA,EACA,aAAAC;AAAA,EACA,YAAAC,IAAa;AAAA,EACb,SAAArI,IAAU;AAAA,EACV,SAAA0H,IAAU;AAAA,EACV,SAAAY;AAAA,EACA,WAAArE;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC;AAAA,EACA,GAAGtB;AACL,GACAuB,GACA;AACA,QAAMkE,IAAWF,GAEXG,IAA8B;AAAA,IAClC,SAAS;AAAA,IACT,eAAe;AAAA,IACf,KAAK;AAAA,IACL,YAAYd,IAAUO,GAAWjI,CAAO,IAAI;AAAA,IAC5C,WAAWiI,GAAWjI,CAAO;AAAA,IAC7B,WAAW0H,IAAU,yCAAyC;AAAA,IAC9D,GAAGxD;AAAA,EAAA,GAGCyD,IAA6B;AAAA,IACjC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,KAAK;AAAA,EAAA,GAGDc,IAAqC;AAAA,IACzC,SAAS;AAAA,IACT,eAAe;AAAA,IACf,KAAK;AAAA,EAAA,GAGDC,IAA4B;AAAA,IAChC,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,YAAY;AAAA,EAAA,GAGRC,IAAkC;AAAA,IACtC,UAAU;AAAA,IACV,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,YAAY;AAAA,EAAA,GAGRC,IAA8B;AAAA,IAClC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,KAAK;AAAA,IACL,YAAY;AAAA,EAAA,GAGRC,IAA8B;AAAA,IAClC,SAAS;AAAA,IACT,eAAe;AAAA,EAAA,GAGXC,IAAYX,KAASC,KAAeE;AAE1C,SACE,gBAAAS;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAA1E;AAAA,MACA,WAAW9B,EAAG,kBAAkB0B,CAAS;AAAA,MACzC,OAAOuE;AAAA,MACP,eAAapE;AAAA,MACZ,GAAGtB;AAAA,MAEH,UAAA;AAAA,QAAAgG,KACC,gBAAAC,EAAC,OAAA,EAAI,WAAU,yBAAwB,OAAOpB,GAC5C,UAAA;AAAA,UAAA,gBAAAoB,EAAC,OAAA,EAAI,OAAON,GACT,UAAA;AAAA,YAAAN,KACC,gBAAA1D,EAAC8D,GAAA,EAAS,OAAOG,GAAa,UAAAP,GAAM;AAAA,YAErCC,KACC,gBAAA3D,EAAC,KAAA,EAAE,OAAOkE,GAAmB,UAAAP,EAAA,CAAY;AAAA,UAAA,GAE7C;AAAA,UACCE,KAAW,gBAAA7D,EAAC,OAAA,EAAI,OAAOmE,GAAe,UAAAN,EAAA,CAAQ;AAAA,QAAA,GACjD;AAAA,0BAED,OAAA,EAAI,WAAU,0BAAyB,OAAOO,GAC5C,UAAA1E,EAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN,CAAC;AAED+D,GAAQ,cAAc;AC/Gf,MAAMc,KAASrE,EAAwC,SAC5D;AAAA,EACE,MAAA8B;AAAA,EACA,YAAAwC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,WAAAC,IAAY;AAAA,EACZ,WAAAlF;AAAA,EACA,OAAAC;AAAA,EACA,GAAGpB;AACL,GACAuB,GACA;AACA,QAAM+E,IAAYH,MAAexC,IAAO4C,EAAc5C,CAAI,IAAI,SAExD6C,IAA6B;AAAA,IACjC,MAAMJ,IAAO,IAAI;AAAA,IACjB,OAAOC,MAAc,eAAgBC,MAAcF,IAAO,SAAY,KAAM;AAAA,IAC5E,QAAQC,MAAc,aAAcC,MAAcF,IAAO,SAAY,KAAM;AAAA,IAC3E,UAAUC,MAAc,gBAAgBC,IAAYA,IAAY;AAAA,IAChE,WAAWD,MAAc,cAAcC,IAAYA,IAAY;AAAA,IAC/D,YAAY;AAAA,IACZ,GAAGlF;AAAA,EAAA;AAGL,SACE,gBAAAO;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAJ;AAAA,MACA,WAAW9B,EAAG,iBAAiB0B,CAAS;AAAA,MACxC,OAAOqF;AAAA,MACP,eAAY;AAAA,MACX,GAAGxG;AAAA,IAAA;AAAA,EAAA;AAGV,CAAC;AAEDkG,GAAO,cAAc;ACVrB,MAAMO,KAAmE;AAAA,EACvE,OAAO;AAAA,EACP,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AACV,GAEMC,KAA2D;AAAA,EAC/D,OAAO;AAAA,EACP,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,SAAS;AACX,GAEaC,KAAO9E,EAAsC,SACxD;AAAA,EACE,WAAAwE,IAAY;AAAA,EACZ,MAAAO,IAAO;AAAA,EACP,SAAAC,IAAU;AAAA,EACV,OAAA5B,IAAQ;AAAA,EACR,KAAA6B;AAAA,EACA,QAAAC;AAAA,EACA,WAAAC;AAAA,EACA,QAAAC,IAAS;AAAA,EACT,MAAAC;AAAA,EACA,QAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAA/F;AAAA,EACA,WAAAF;AAAA,EACA,OAAAC;AAAA,EACA,QAAAE;AAAA,EACA,GAAGtB;AACL,GACAuB,GACA;AACA,QAAM8F,IAA2B;AAAA,IAC/B,SAASJ,IAAS,gBAAgB;AAAA,IAClC,eAAeZ;AAAA,IACf,UAAUO;AAAA,IACV,gBAAgBH,GAAWI,CAAO;AAAA,IAClC,YAAYH,GAASzB,CAAK;AAAA,IAC1B,KAAK6B,IAAMP,EAAcO,CAAG,IAAI;AAAA,IAChC,QAAQC,IAASR,EAAcQ,CAAM,IAAI;AAAA,IACzC,WAAWC,IAAYT,EAAcS,CAAS,IAAI;AAAA,IAClD,UAAUE;AAAA,IACV,YAAYC;AAAA,IACZ,WAAWC;AAAA,IACX,GAAGhG;AAAA,EAAA;AAGL,SACE,gBAAAO;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAJ;AAAA,MACA,WAAW9B,EAAG,eAAe0B,CAAS;AAAA,MACtC,OAAOkG;AAAA,MACP,eAAa/F;AAAA,MACZ,GAAGtB;AAAA,MAEH,UAAAqB;AAAA,IAAA;AAAA,EAAA;AAGP,CAAC;AAEDsF,GAAK,cAAc;AAwBZ,MAAMW,KAAWzF,EAA0C,SAChE;AAAA,EACE,MAAAqF;AAAA,EACA,QAAAC;AAAA,EACA,OAAAC;AAAA,EACA,WAAAG;AAAA,EACA,OAAAC;AAAA,EACA,UAAAnG;AAAA,EACA,WAAAF;AAAA,EACA,OAAAC;AAAA,EACA,QAAAE;AAAA,EACA,GAAGtB;AACL,GACAuB,GACA;AACA,QAAMkG,IAA2B;AAAA,IAC/B,UAAUP;AAAA,IACV,YAAYC;AAAA,IACZ,WAAWC;AAAA,IACX,WAAWG,IAAYb,GAASa,CAAS,IAAI;AAAA,IAC7C,OAAAC;AAAA,IACA,GAAGpG;AAAA,EAAA;AAGL,SACE,gBAAAO;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAJ;AAAA,MACA,WAAW9B,EAAG,oBAAoB0B,CAAS;AAAA,MAC3C,OAAOsG;AAAA,MACP,eAAanG;AAAA,MACZ,GAAGtB;AAAA,MAEH,UAAAqB;AAAA,IAAA;AAAA,EAAA;AAGP,CAAC;AAEDiG,GAAS,cAAc;AC/GvB,MAAMI,KAGF;AAAA,EACF,MAAM,EAAE,SAAS,KAAK,QAAQC,GAAW,YAAA;AAAA,EACzC,WAAW,EAAE,SAAS,KAAK,QAAQA,GAAW,UAAA;AAAA,EAC9C,WAAW,EAAE,SAAS,KAAK,QAAQA,GAAW,UAAA;AAAA,EAC9C,OAAO,EAAE,SAAS,QAAQ,QAAQA,GAAW,MAAA;AAAA,EAC7C,SAAS,EAAE,SAAS,QAAQ,QAAQA,GAAW,QAAA;AAAA,EAC/C,UAAU,EAAE,SAAS,QAAQ,QAAQA,GAAW,SAAA;AAAA,EAChD,MAAM,EAAE,SAAS,QAAQ,QAAQA,GAAW,KAAA;AAC9C;AAEA,SAASC,GAAgB5H,GAAoC;AAC3D,QAAMmE,IAAUnE,EAAM,WAAW,QAC3B6H,IAAaH,GAAWvD,CAAO,EAAE,QAEjClE,IAAwB;AAAA,IAC5B,YAAY4H,EAAW;AAAA,IACvB,UAAU7H,EAAM,OAAO1B,GAAU0B,EAAM,IAAI,IAAI6H,EAAW;AAAA,IAC1D,YAAY7H,EAAM,SAASxB,GAAYwB,EAAM,MAAM,IAAI6H,EAAW;AAAA,IAClE,YAAY7H,EAAM,UAAUtB,GAAYsB,EAAM,OAAO,IAAI6H,EAAW;AAAA,IACpE,eAAeA,EAAW;AAAA,EAAA;AAG5B,SAAI,mBAAmBA,MACrB5H,EAAO,gBAAgB4H,EAAW,gBAGhC7H,EAAM,UAAOC,EAAO,YAAYD,EAAM,QACtCA,EAAM,UAAOC,EAAO,QAAQD,EAAM,QAElCA,EAAM,aACRC,EAAO,WAAW,UAClBA,EAAO,eAAe,YACtBA,EAAO,aAAa,WAGlBD,EAAM,cACRC,EAAO,UAAU,eACjBA,EAAO,kBAAkBD,EAAM,WAC/BC,EAAO,kBAAkB,YACzBA,EAAO,WAAW,WAGbA;AACT;AAEA,MAAM6H,KAAY,CAChB,EAAE,IAAA5G,GAAI,SAAAiD,IAAU,QAAQ,WAAAhD,GAAW,OAAAC,GAAO,UAAAC,GAAU,QAAAC,GAAQ,GAAGtB,EAAA,GAC/DuB,MACG;AACH,QAAMC,IAAYN,KAAMwG,GAAWvD,CAAO,EAAE,SACtC4D,IAAkBH,GAAgB,EAAE,SAAAzD,GAAS,GAAGnE,GAAuB,GAGvE;AAAA,IACJ,MAAMgI;AAAA,IACN,QAAQC;AAAA,IACR,SAASC;AAAA,IACT,OAAOC;AAAA,IACP,OAAOC;AAAA,IACP,UAAUC;AAAA,IACV,WAAWC;AAAA,IACX,GAAGC;AAAA,EAAA,IACDvI;AAEJ,SACE,gBAAA2B;AAAA,IAACH;AAAA,IAAA;AAAA,MACC,KAAAD;AAAA,MACA,WAAW9B,EAAG,eAAe,gBAAgB0E,CAAO,IAAIhD,CAAS;AAAA,MACjE,OAAO,EAAE,GAAG4G,GAAiB,GAAG3G,EAAA;AAAA,MAChC,eAAaE;AAAA,MACZ,GAAGiH;AAAA,MAEH,UAAAlH;AAAA,IAAA;AAAA,EAAA;AAGP,GAEMmH,KAAiB3G,EAAWiG,EAAS,GAC9BW,KAAO,OAAO,OAAOD,IAAgB,EAAE,aAAa,QAAQ,GAGnEE,KAAY,CAChB1I,GACAuB,MAGE,gBAAAI;AAAA,EAAC8G;AAAA,EAAA;AAAA,IACE,GAAGzI;AAAA,IACJ,KAAAuB;AAAA,IACA,SAAQ;AAAA,IACR,OAAO;AAAA,MACL,iBAAiB;AAAA,MACjB,SAAS,GAAGrE,EAAQ,GAAG,CAAC,MAAMA,EAAQ,GAAG,CAAC;AAAA,MAC1C,cAAc;AAAA,MACd,GAAG8C,EAAM;AAAA,IAAA;AAAA,EACX;AAAA,GAKA2I,KAAiB9G,EAAW6G,EAAS,GAC9BE,KAAO,OAAO,OAAOD,IAAgB,EAAE,aAAa,QAAQ,GCrGnEE,KAAyE;AAAA,EAC7E,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,SAAS;AAAA,EACT,cAAc;AAAA,EACd,cAAc;AAChB;AAEA,SAASC,GAAmB9I,GAAuC;AACjE,QAAM+I,IAAQ/I,EAAM,SAAS,GACvBgJ,IAAahJ,EAAM,QAAQ+I,GAC3BE,IAAWJ,GAAeG,CAAU,GACpCnB,IAAaF,GAAWsB,CAAQ,GAEhChJ,IAAwB;AAAA,IAC5B,YAAY4H,EAAW;AAAA,IACvB,UAAUA,EAAW;AAAA,IACrB,YAAY7H,EAAM,SAASxB,GAAYwB,EAAM,MAAM,IAAI6H,EAAW;AAAA,IAClE,YAAYA,EAAW;AAAA,IACvB,eAAeA,EAAW;AAAA,IAC1B,QAAQ;AAAA,EAAA;AAGV,SAAI7H,EAAM,UAAOC,EAAO,YAAYD,EAAM,QACtCA,EAAM,UAAOC,EAAO,QAAQD,EAAM,QAElCA,EAAM,aACRC,EAAO,WAAW,UAClBA,EAAO,eAAe,YACtBA,EAAO,aAAa,WAGfA;AACT;AAEA,MAAMiJ,KAAe,CACnB,EAAE,IAAAhI,GAAI,OAAA6H,IAAQ,GAAG,WAAA5H,GAAW,OAAAC,GAAO,UAAAC,GAAU,QAAAC,GAAQ,GAAGtB,EAAA,GACxDuB,MACG;AACH,QAAMC,IAAYN,KAAO,IAAI6H,CAAK,IAC5BI,IAAgBL,GAAmB,EAAE,OAAAC,GAAO,GAAG/I,GAA0B,GAGzE;AAAA,IACJ,MAAMgI;AAAA,IACN,QAAQC;AAAA,IACR,OAAOE;AAAA,IACP,OAAOC;AAAA,IACP,UAAUC;AAAA,IACV,GAAGE;AAAA,EAAA,IACDvI;AAEJ,SACE,gBAAA2B;AAAA,IAACH;AAAA,IAAA;AAAA,MACC,KAAAD;AAAA,MACA,WAAW9B,EAAG,kBAAkB,mBAAmBsJ,CAAK,IAAI5H,CAAS;AAAA,MACrE,OAAO,EAAE,GAAGgI,GAAe,GAAG/H,EAAA;AAAA,MAC9B,eAAaE;AAAA,MACZ,GAAGiH;AAAA,MAEH,UAAAlH;AAAA,IAAA;AAAA,EAAA;AAGP,GAEa+H,KAAUvH,EAAWqH,EAAY;AAE9CE,GAAQ,cAAc;AAGtB,MAAMC,KAAe,CACnB,EAAE,MAAA1F,IAAO,WAAW,GAAG3D,EAAA,GACvBuB,wBAEQ6H,IAAA,EAAQ,KAAA7H,GAAoD,OAAO,GAAG,MAAAoC,GAAa,GAAI3D,GAA8B,GAGlHsJ,KAAUzH,EAAWwH,EAAY;AAE9CC,GAAQ,cAAc;AChItB,MAAMC,KAUF;AAAA,EACF,IAAI;AAAA,IACF,QAAQtM,GAAiB;AAAA,IACzB,UAAUG,GAAkB;AAAA,IAC5B,UAAUiB,EAAkB;AAAA,IAC5B,UAAUlB,GAAU;AAAA,IACpB,KAAKG,GAAa;AAAA,IAClB,QAAQ;AAAA,EAAA;AAAA,EAEV,IAAI;AAAA,IACF,QAAQL,GAAiB;AAAA,IACzB,UAAUG,GAAkB;AAAA,IAC5B,UAAUiB,EAAkB;AAAA,IAC5B,UAAUlB,GAAU;AAAA,IACpB,KAAKG,GAAa;AAAA,IAClB,QAAQ;AAAA,EAAA;AAAA,EAEV,IAAI;AAAA,IACF,QAAQL,GAAiB;AAAA,IACzB,UAAUG,GAAkB;AAAA,IAC5B,UAAUiB,EAAkB;AAAA,IAC5B,UAAUlB,GAAU;AAAA,IACpB,KAAKG,GAAa;AAAA,IAClB,QAAQ;AAAA,EAAA;AAAA,EAEV,IAAI;AAAA,IACF,QAAQL,GAAiB;AAAA,IACzB,UAAUG,GAAkB;AAAA,IAC5B,UAAUiB,EAAkB;AAAA,IAC5B,UAAUlB,GAAU;AAAA,IACpB,KAAKG,GAAa;AAAA,IAClB,QAAQ;AAAA,EAAA;AAAA,EAEV,IAAI;AAAA,IACF,QAAQL,GAAiB;AAAA,IACzB,UAAUG,GAAkB;AAAA,IAC5B,UAAUiB,EAAkB;AAAA,IAC5B,UAAUlB,GAAU;AAAA,IACpB,KAAKG,GAAa;AAAA,IAClB,QAAQ;AAAA,EAAA;AAEZ,GAGMkM,KASF;AAAA,EACF,SAAS;AAAA,IACP,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,SAAS;AAAA,MACT,UAAU;AAAA,MACV,MAAM;AAAA,IAAA;AAAA,IAER,SAAS;AAAA,MACP,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,MAAM;AAAA,IAAA;AAAA,IAER,OAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,IAAA;AAAA,IAER,MAAM;AAAA,MACJ,IAAI;AAAA,MACJ,SAAS;AAAA,MACT,MAAM;AAAA,IAAA;AAAA,IAER,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,WAAW;AAAA,IAAA;AAAA,EACb;AAAA,EAEF,QAAQ;AAAA,IACN,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,SAAS;AAAA,MACT,UAAU;AAAA,MACV,MAAM;AAAA,IAAA;AAAA,IAER,SAAS;AAAA,MACP,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,MAAM;AAAA,IAAA;AAAA,IAER,OAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,IAAA;AAAA,IAER,MAAM;AAAA,MACJ,IAAI;AAAA,MACJ,SAAS;AAAA,MACT,MAAM;AAAA,IAAA;AAAA,IAER,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,WAAW;AAAA,IAAA;AAAA,EACb;AAAA,EAEF,SAAS;AAAA,IACP,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,SAAS;AAAA,MACT,UAAU;AAAA,MACV,MAAM;AAAA,IAAA;AAAA,IAER,SAAS;AAAA,MACP,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,MAAM;AAAA,IAAA;AAAA,IAER,OAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,IAAA;AAAA,IAER,MAAM;AAAA,MACJ,IAAI;AAAA,MACJ,SAAS;AAAA,MACT,MAAM;AAAA,IAAA;AAAA,IAER,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,WAAW;AAAA,IAAA;AAAA,EACb;AAAA,EAEF,SAAS;AAAA,IACP,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,SAAS;AAAA,MACT,UAAU;AAAA,MACV,MAAM;AAAA,IAAA;AAAA,IAER,SAAS;AAAA,MACP,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,MAAM;AAAA,IAAA;AAAA,IAER,OAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,IAAA;AAAA,IAER,MAAM;AAAA,MACJ,IAAI;AAAA,MACJ,SAAS;AAAA,MACT,MAAM;AAAA,IAAA;AAAA,IAER,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,WAAW;AAAA,IAAA;AAAA,EACb;AAAA,EAEF,SAAS;AAAA,IACP,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,SAAS;AAAA,MACT,UAAU;AAAA,MACV,MAAM;AAAA,IAAA;AAAA,IAER,SAAS;AAAA,MACP,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,MAAM;AAAA,IAAA;AAAA,IAER,OAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,IAAA;AAAA,IAER,MAAM;AAAA,MACJ,IAAI;AAAA,MACJ,SAAS;AAAA,MACT,MAAM;AAAA,IAAA;AAAA,IAER,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,WAAW;AAAA,IAAA;AAAA,EACb;AAAA,EAEF,OAAO;AAAA,IACL,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,SAAS;AAAA,MACT,UAAU;AAAA,MACV,MAAM;AAAA,IAAA;AAAA,IAER,SAAS;AAAA,MACP,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,MAAM;AAAA,IAAA;AAAA,IAER,OAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,IAAA;AAAA,IAER,MAAM;AAAA,MACJ,IAAI;AAAA,MACJ,SAAS;AAAA,MACT,MAAM;AAAA,IAAA;AAAA,IAER,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,WAAW;AAAA,IAAA;AAAA,EACb;AAEJ;AAYO,SAASC,GAAgBzJ,GAM9B;AACA,QAAM,EAAE,SAAAmE,GAAS,QAAAuF,GAAQ,MAAA/F,GAAM,WAAAgG,GAAW,YAAAC,MAAe5J,GACnD6J,IAAaN,GAAW5F,CAAI,GAC5BmG,IAASN,GAAaE,CAAM,EAAEvF,CAAO,GAGrCK,IAAsB;AAAA,IAC1B,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,KAAKqF,EAAW;AAAA,IAChB,QAAQA,EAAW;AAAA,IACnB,UAAUD,IAAaC,EAAW,SAAS;AAAA,IAC3C,OAAOF,IAAY,SAAS;AAAA,IAC5B,SAASC,IAAa,IAAI,KAAKC,EAAW,QAAQ;AAAA,IAClD,UAAUA,EAAW;AAAA,IACrB,YAAYtL,GAAoB;AAAA,IAChC,YAAY;AAAA,IACZ,YAAYE,EAAoB;AAAA,IAChC,cAAcoL,EAAW;AAAA,IACzB,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,YAAY/L,GAAW;AAAA,IACvB,yBAAyB;AAAA,EAAA;AAI3B,UAAQqG,GAAA;AAAA,IACN,KAAK,SAAS;AACZ,YAAM4F,IAAcD;AACpB,aAAO,OAAOtF,GAAM;AAAA,QAClB,iBAAiBuF,EAAY;AAAA,QAC7B,OAAOA,EAAY;AAAA,QACnB,WAAW;AAAA,MAAA,CACZ;AACD;AAAA,IACF;AAAA,IAEA,KAAK,WAAW;AACd,YAAMC,IAAgBF;AACtB,aAAO,OAAOtF,GAAM;AAAA,QAClB,iBAAiB;AAAA,QACjB,OAAOwF,EAAc;AAAA,QACrB,QAAQ,aAAaA,EAAc,MAAM;AAAA,MAAA,CAC1C;AACD;AAAA,IACF;AAAA,IAEA,KAAK,SAAS;AAEZ,aAAO,OAAOxF,GAAM;AAAA,QAClB,iBAAiB;AAAA,QACjB,OAHkBsF,EAGC;AAAA,MAAA,CACpB;AACD;AAAA,IACF;AAAA,IAEA,KAAK,QAAQ;AACX,YAAMG,IAAaH;AACnB,aAAO,OAAOtF,GAAM;AAAA,QAClB,iBAAiByF,EAAW;AAAA,QAC5B,OAAOA,EAAW;AAAA,MAAA,CACnB;AACD;AAAA,IACF;AAAA,IAEA,KAAK,QAAQ;AAEX,aAAO,OAAOzF,GAAM;AAAA,QAClB,iBAAiB;AAAA,QACjB,OAHiBsF,EAGC;AAAA,QAClB,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,cAAc;AAAA,MAAA,CACf;AACD;AAAA,IACF;AAAA,EAAA;AAIF,QAAMI,IAAuB,CAAA;AAC7B,UAAQ/F,GAAA;AAAA,IACN,KAAK,SAAS;AACZ,YAAM4F,IAAcD;AACpB,MAAAI,EAAM,kBAAkBH,EAAY,SACpCG,EAAM,YAAY;AAClB;AAAA,IACF;AAAA,IACA,KAAK,WAAW;AACd,YAAMF,IAAgBF;AACtB,MAAAI,EAAM,kBAAkBF,EAAc;AACtC;AAAA,IACF;AAAA,IACA,KAAK,SAAS;AACZ,YAAMG,IAAcL;AACpB,MAAAI,EAAM,kBAAkBC,EAAY;AACpC;AAAA,IACF;AAAA,IACA,KAAK,QAAQ;AACX,YAAMF,IAAaH;AACnB,MAAAI,EAAM,kBAAkBD,EAAW;AACnC;AAAA,IACF;AAAA,IACA,KAAK,QAAQ;AACX,YAAMG,IAAaN;AACnB,MAAAI,EAAM,QAAQE,EAAW,WACzBF,EAAM,iBAAiB;AACvB;AAAA,IACF;AAAA,EAAA;AAIF,QAAMG,IAAwB;AAAA,IAC5B,WAAWlG,MAAY,SAAS,SAASpF,GAAM,OAAO,MAAM;AAAA,EAAA;AAE9D,MAAIoF,MAAY,SAAS;AACvB,UAAM4F,IAAcD;AACpB,IAAAO,EAAO,kBAAkBN,EAAY,UACrCM,EAAO,YAAY;AAAA,EACrB;AAGA,QAAMC,IAA0B;AAAA,IAC9B,SAASxL,GAAa;AAAA,IACtB,QAAQ;AAAA,IACR,eAAe;AAAA,EAAA;AASjB,SAAO,EAAE,MAAA0F,GAAM,OAAA0F,GAAO,QAAAG,GAAQ,UAAAC,GAAU,SALT;AAAA,IAC7B,QAAQ;AAAA,IACR,eAAe;AAAA,EAAA,EAGuB;AAC1C;ACtXA,SAASC,GAAe,EAAE,MAAA5G,KAA0B;AAClD,SACE,gBAAAsC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAOtC;AAAA,MACP,QAAQA;AAAA,MACR,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAO;AAAA,QACL,WAAW;AAAA,MAAA;AAAA,MAGb,UAAA;AAAA,QAAA,gBAAAhC,EAAC,SAAA,EACE,UAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAMH;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAG;AAAA,YACH,IAAG;AAAA,YACH,GAAE;AAAA,YACF,QAAO;AAAA,YACP,aAAY;AAAA,YACZ,eAAc;AAAA,YACd,iBAAgB;AAAA,YAChB,SAAQ;AAAA,UAAA;AAAA,QAAA;AAAA,QAEV,gBAAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAG;AAAA,YACH,IAAG;AAAA,YACH,GAAE;AAAA,YACF,QAAO;AAAA,YACP,aAAY;AAAA,YACZ,eAAc;AAAA,YACd,iBAAgB;AAAA,YAChB,kBAAiB;AAAA,YACjB,OAAO,EAAE,WAAW,kBAAkB,iBAAiB,SAAA;AAAA,UAAS;AAAA,QAAA;AAAA,MAClE;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA,MAAM6I,KAAc,CAClB;AAAA,EACE,IAAAtJ;AAAA,EACA,SAAAiD,IAAU;AAAA,EACV,QAAAuF,IAAS;AAAA,EACT,MAAA/F,IAAO;AAAA,EACP,WAAAgG;AAAA,EACA,WAAAc;AAAA,EACA,YAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,YAAAhB;AAAA,EACA,WAAAzI;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC;AAAA,EACA,cAAAuJ;AAAA,EACA,cAAAC;AAAA,EACA,aAAAC;AAAA,EACA,WAAAC;AAAA,EACA,GAAGhL;AACL,GACAuB,MACG;AACH,QAAMC,IAAaN,KAAM,UACnB,CAAC+J,GAAWC,CAAY,IAAIC,EAAS,EAAK,GAC1C,CAACC,GAAWC,CAAY,IAAIF,EAAS,EAAK,GAE1Cb,IAAWI,KAAcD,GAEzBxK,IAASwJ,GAAgB;AAAA,IAC7B,SAAAtF;AAAA,IACA,QAAAuF;AAAA,IACA,MAAA/F;AAAA,IACA,WAAAgG;AAAA,IACA,YAAAC;AAAA,EAGF,CAAC,GAGK0B,IAA+B;AAAA,IACnC,GAAGrL,EAAO;AAAA,IACV,GAAIgL,KAAa,CAACX,IAAWrK,EAAO,QAAQ,CAAA;AAAA,IAC5C,GAAImL,KAAa,CAACd,IAAWrK,EAAO,SAAS,CAAA;AAAA,IAC7C,GAAIqK,IAAWrK,EAAO,WAAW,CAAA;AAAA,IACjC,GAAIwK,IAAYxK,EAAO,UAAU,CAAA;AAAA,IACjC,GAAGmB;AAAA,EAAA,GAGCyI,IAAaN,GAAW5F,CAAI,GAE5B4H,IAAmB,CAAC9G,MAAwB;AAChD,IAAAyG,EAAa,EAAI,GACjBL,KAAA,QAAAA,EAAepG;AAAA,EACjB,GAEM+G,IAAmB,CAAC/G,MAAwB;AAChD,IAAAyG,EAAa,EAAK,GAClBG,EAAa,EAAK,GAClBP,KAAA,QAAAA,EAAerG;AAAA,EACjB,GAEMgH,IAAkB,CAAChH,MAAwB;AAC/C,IAAA4G,EAAa,EAAI,GACjBN,KAAA,QAAAA,EAActG;AAAA,EAChB,GAEMiH,IAAgB,CAACjH,MAAwB;AAC7C,IAAA4G,EAAa,EAAK,GAClBL,KAAA,QAAAA,EAAYvG;AAAA,EACd,GAGMkH,IAAkBlM;AAAA,IACtB;AAAA,IACA,kBAAkB0E,CAAO;AAAA,IACzB,kBAAkBuF,CAAM;AAAA,IACxB,kBAAkB/F,CAAI;AAAA,IACtBgG,KAAa;AAAA,IACbC,KAAc;AAAA,IACda,KAAa;AAAA,IACbH,KAAY;AAAA,IACZnJ;AAAA,EAAA,GAIIyK,IADWpK,MAAc,YAAYN,MAAO,SAE9C;AAAA,IACE,MAAOlB,EAA4B,QAAQ;AAAA,IAC3C,UAAAsK;AAAA,EAAA,IAEF;AAAA,IACE,iBAAiBA,KAAY;AAAA,IAC7B,MAAM;AAAA,IACN,UAAUA,IAAW,KAAK;AAAA,EAAA;AAGhC,SACE,gBAAArE;AAAA,IAACzE;AAAA,IAAA;AAAA,MACC,KAAAD;AAAA,MACA,WAAWoK;AAAA,MACX,OAAOL;AAAA,MACP,eAAahK;AAAA,MACb,cAAciK;AAAA,MACd,cAAcC;AAAA,MACd,aAAaC;AAAA,MACb,WAAWC;AAAA,MACV,GAAGE;AAAA,MACH,GAAG5L;AAAA,MAEH,UAAA;AAAA,QAAAyK,KACC,gBAAA9I;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,SAAS;AAAA,cACT,UAAUiI,IAAa,aAAa;AAAA,YAAA;AAAA,YAGtC,UAAA,gBAAAjI,EAAC4I,IAAA,EAAe,MAAMV,EAAW,SAAA,CAAU;AAAA,UAAA;AAAA,QAAA;AAAA,QAI9C,CAACY,KAAaE,KACb,gBAAAhJ;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,SAAS;AAAA,cACT,OAAOkI,EAAW;AAAA,cAClB,QAAQA,EAAW;AAAA,YAAA;AAAA,YAGpB,UAAAc;AAAA,UAAA;AAAA,QAAA;AAAA,QAIJ,CAACf,KACA,gBAAAjI;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,SAAS8I,KAAa,CAACb,IAAa,MAAM;AAAA,YAAA;AAAA,YAG3C,UAAAvI;AAAA,UAAA;AAAA,QAAA;AAAA,QAIJ,CAACoJ,KAAaG,KACb,gBAAAjJ;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,SAAS;AAAA,cACT,OAAOkI,EAAW;AAAA,cAClB,QAAQA,EAAW;AAAA,YAAA;AAAA,YAGpB,UAAAe;AAAA,UAAA;AAAA,QAAA;AAAA,QAIJhB,KAAc,CAACa,KAAapJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGnC,GAEawK,KAAShK,EAAW2I,EAAW;AAE5CqB,GAAO,cAAc;AAGrB,MAAMC,KAAkB,CACtB9L,GACAuB,wBAEQsK,IAAA,EAAO,KAAAtK,GAAmD,YAAU,IAAE,GAAIvB,GAAiC,GAGxG+L,KAAalK,EAAWiK,EAAe;AAEpDC,GAAW,cAAc;ACjNzB,MAAMC,KAAoC;AAAA,EACxC,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,OAAO;AACT,GAEaC,KAAOpK,EAAqC,SACvD;AAAA,EACE,MAAA8B,IAAO;AAAA,EACP,YAAAwC;AAAA,EACA,OAAA+F;AAAA,EACA,MAAAC;AAAA,EACA,OAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,UAAAC,IAAW;AAAA,EACX,WAAAnL;AAAA,EACA,OAAAC;AAAA,EACA,QAAAE;AAAA,EACA,OAAAiL;AAAA,EACA,UAAAlL;AAAA,EACA,GAAGrB;AACL,GACAuB,GACA;AACA,QAAM+E,IAAYH,KAAc6F,GAAQrI,CAAI,GAEtC6I,IAA2B;AAAA,IAC/B,OAAOlG;AAAA,IACP,QAAQA;AAAA,IACR,UAAUA;AAAA,IACV,WAAWA;AAAA,IACX,OAAO4F,KAAS;AAAA,IAChB,SAAS;AAAA,IACT,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,GAAG9K;AAAA,EAAA,GAGCqL,IAAc,MACdpL,MAEA+K,KAASA,EAAM,SAAS,IACnBA,EAAM,IAAI,CAACM,GAAGC,MACnB,gBAAAhL,EAAC,QAAA,EAAiB,GAAA+K,GAAM,MAAK,gBAAe,UAAAJ,EAAA,GAAjCK,CAAqD,CACjE,IAGCR,sBACM,QAAA,EAAK,GAAGA,GAAM,MAAK,gBAAe,UAAAG,GAAoB,IAGzD;AAGT,SACE,gBAAA3K;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAJ;AAAA,MACA,OAAM;AAAA,MACN,SAAA8K;AAAA,MACA,WAAW5M,EAAG,eAAe,gBAAgBkE,CAAI,IAAIxC,CAAS;AAAA,MAC9D,OAAOqL;AAAA,MACP,eAAa,CAACD;AAAA,MACd,cAAYA;AAAA,MACZ,MAAMA,IAAQ,QAAQ;AAAA,MACtB,eAAajL;AAAA,MACZ,GAAGtB;AAAA,MAEH,UAAAyM,EAAA;AAAA,IAAY;AAAA,EAAA;AAGnB,CAAC;AAEDR,GAAK,cAAc;AAGZ,MAAMW,KAAY;AAAA,EACvB,OAAO;AAAA,EACP,OAAO;AAAA,EACP,aAAa;AAAA,EACb,WAAW;AAAA,EACX,aAAa;AAAA,EACb,cAAc;AAAA,EACd,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,MAAM;AAAA,EACN,SAAS;AAAA,EACT,OAAO;AAAA,EACP,SAAS;AAAA,EACT,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,cAAc;AAAA,EACd,UAAU;AAAA,EACV,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,WAAW;AAAA,EACX,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,UAAU;AAAA,EACV,UAAU;AAAA,EACV,OAAO;AAAA,EACP,KAAK;AAAA,EACL,MAAM;AAAA,EACN,MAAM;AAAA,EACN,gBAAgB;AAAA,EAChB,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,MAAM;AAAA,EACN,cAAc;AAChB,GC7HMrD,KAAwG;AAAA,EAC5G,IAAI;AAAA,IACF,QAAQtM,GAAiB;AAAA,IACzB,UAAUoB,EAAkB;AAAA,IAC5B,UAAUjB,GAAkB;AAAA,IAC5B,QAAQ;AAAA,EAAA;AAAA,EAEV,IAAI;AAAA,IACF,QAAQH,GAAiB;AAAA,IACzB,UAAUoB,EAAkB;AAAA,IAC5B,UAAUjB,GAAkB;AAAA,IAC5B,QAAQ;AAAA,EAAA;AAAA,EAEV,IAAI;AAAA,IACF,QAAQH,GAAiB;AAAA,IACzB,UAAUoB,EAAkB;AAAA,IAC5B,UAAUjB,GAAkB;AAAA,IAC5B,QAAQ;AAAA,EAAA;AAEZ,GAEayP,KAAQhL,EAAyC,SAC5D;AAAA,EACE,MAAA8B,IAAO;AAAA,EACP,SAAAQ,IAAU;AAAA,EACV,WAAA2I;AAAA,EACA,aAAAC;AAAA,EACA,cAAAC;AAAA,EACA,WAAA7L;AAAA,EACA,OAAAC;AAAA,EACA,QAAAE;AAAA,EACA,UAAAgJ;AAAA,EACA,SAAA2C;AAAA,EACA,QAAAC;AAAA,EACA,GAAGlN;AACL,GACAuB,GACA;AACA,QAAM,CAAC4L,GAAWC,CAAY,IAAIjC,EAAS,EAAK,GAE1CkC,IAAS9D,GAAW5F,CAAI,GAExB2J,IAAmB,MAAqB;AAC5C,UAAM9I,IAAsB;AAAA,MAC1B,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,UAAU;AAAA,MACV,QAAQ6I,EAAO;AAAA,MACf,cAAcA,EAAO;AAAA,MACrB,YAAYvP,GAAW;AAAA,IAAA;AAGzB,YAAQqG,GAAA;AAAA,MACN,KAAK;AACH,eAAO,OAAOK,GAAM;AAAA,UAClB,iBAAiB;AAAA,UACjB,QAAQ,aACNsI,IACI,gCACAK,IACE,+BACA,8BACR;AAAA,UACA,WAAWA,IACPL,IACEnP,GAAU,QACVA,GAAU,UACZA,GAAU;AAAA,QAAA,CACf;AACD;AAAA,MAEF,KAAK;AACH,eAAO,OAAO6G,GAAM;AAAA,UAClB,iBAAiB;AAAA,UACjB,QAAQ;AAAA,UACR,aAAasI,IACT,gCACAK,IACE,+BACA;AAAA,QAAA,CACP;AACD;AAAA,MAEF,KAAK;AACH,eAAO,OAAO3I,GAAM;AAAA,UAClB,iBAAiB;AAAA,UACjB,cAAc;AAAA,UACd,cAAc,aACZsI,IACI,gCACAK,IACE,+BACA,8BACR;AAAA,QAAA,CACD;AACD;AAAA,IAAA;AAGJ,WAAI7C,KACF,OAAO,OAAO9F,GAAM;AAAA,MAClB,SAAS1F,GAAa;AAAA,MACtB,QAAQ;AAAA,IAAA,CACT,GAGI0F;AAAA,EACT,GAEM+I,IAA6B;AAAA,IACjC,OAAO;AAAA,IACP,QAAQF,EAAO;AAAA,IACf,YAAY;AAAA,IACZ,UAAUA,EAAO;AAAA,IACjB,OAAO;AAAA,IACP,iBAAiB;AAAA,IACjB,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,cAAcA,EAAO;AAAA,IACrB,aAAaN,IAAczP,GAAa,KAAK+P,EAAO;AAAA,IACpD,cAAcL,IAAe1P,GAAa,KAAK+P,EAAO;AAAA,IACtD,QAAQ/C,IAAW,gBAAgB;AAAA,IACnC,YAAYxM,GAAW;AAAA,EAAA,GAGnB0P,IAAc,CAAC/I,MAA0C;AAC7D,IAAA2I,EAAa,EAAI,GACjBH,KAAA,QAAAA,EAAUxI;AAAA,EACZ,GAEMgJ,IAAa,CAAChJ,MAA0C;AAC5D,IAAA2I,EAAa,EAAK,GAClBF,KAAA,QAAAA,EAASzI;AAAA,EACX,GAEMiJ,IAA8B;AAAA,IAClC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,OAAO;AAAA,IACP,YAAY;AAAA,EAAA;AAGd,SACE,gBAAAzH;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWxG;AAAA,QACT;AAAA,QACA,yBAAyB0E,CAAO;AAAA,QAChC,yBAAyBR,CAAI;AAAA,QAC7BmJ,KAAa;AAAA,QACbxC,KAAY;AAAA,QACZnJ;AAAA,MAAA;AAAA,MAEF,OAAO,EAAE,GAAGmM,EAAA,GAAoB,GAAGlM,EAAA;AAAA,MAElC,UAAA;AAAA,QAAA2L,KACC,gBAAApL;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO,EAAE,GAAG+L,GAAc,aAAaL,EAAO,SAAA;AAAA,YAE7C,UAAAN;AAAA,UAAA;AAAA,QAAA;AAAA,QAIL,gBAAApL;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,KAAAJ;AAAA,YACA,WAAU;AAAA,YACV,OAAOgM;AAAA,YACP,UAAAjD;AAAA,YACA,gBAAcwC;AAAA,YACd,eAAaxL;AAAA,YACb,SAASkM;AAAA,YACT,QAAQC;AAAA,YACP,GAAGzN;AAAA,UAAA;AAAA,QAAA;AAAA,QAGLgN,KACC,gBAAArL;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO,EAAE,GAAG+L,GAAc,cAAcL,EAAO,SAAA;AAAA,YAE9C,UAAAL;AAAA,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,IAAA;AAAA,EAAA;AAIR,CAAC;AAEDH,GAAM,cAAc;ACpNb,MAAMc,KAAY9L,EAA6C,SACpE;AAAA,EACE,OAAA0K;AAAA,EACA,YAAAqB;AAAA,EACA,cAAAC;AAAA,EACA,YAAAC;AAAA,EACA,WAAAC;AAAA,EACA,WAAAjB;AAAA,EACA,IAAAkB;AAAA,EACA,WAAA7M;AAAA,EACA,QAAAG;AAAA,EACA,GAAG2M;AACL,GACA1M,GACA;AACA,QAAM2M,IAAcC,GAAA,GACdC,IAAUJ,KAAME,GAChBG,IAAW,GAAGD,CAAO,WACrBE,IAAU,GAAGF,CAAO,UAEpBG,IAAW,EAAQV,KAAiBf,GACpC0B,IAAc,CAACD,KAAYD,GAASV,KAAcS,CAAQ,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAEpFI,IAAkC;AAAA,IACtC,SAAS;AAAA,IACT,cAAc;AAAA,IACd,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,GAAIV,KAAa;AAAA,MACf,UAAU;AAAA,MACV,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,QAAQ;AAAA,IAAA;AAAA,EACV,GAGIW,IAAmC;AAAA,IACvC,SAAS;AAAA,IACT,WAAW;AAAA,IACX,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,EAAA,GAGHC,IAAkC;AAAA,IACtC,GAAGD;AAAA,IACH,OAAO;AAAA,EAAA;AAGT,SACE,gBAAAzI;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWxG;AAAA,QACT;AAAA,QACA8O,KAAY;AAAA,QACZpN;AAAA,MAAA;AAAA,MAEF,eAAaG;AAAA,MAEZ,UAAA;AAAA,QAAAiL,KACC,gBAAAtG,EAAC,SAAA,EAAM,SAASmI,GAAS,OAAOK,GAC7B,UAAA;AAAA,UAAAlC;AAAA,UACAuB,KACC,gBAAAnM;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,eAAY;AAAA,cACZ,OAAO;AAAA,gBACL,OAAO;AAAA,gBACP,YAAY;AAAA,cAAA;AAAA,cAEf,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QAED,GAEJ;AAAA,QAGF,gBAAAA;AAAA,UAACkL;AAAA,UAAA;AAAA,YACC,KAAAtL;AAAA,YACA,IAAI6M;AAAA,YACJ,WAAWG;AAAA,YACX,oBAAkBC,KAAe;AAAA,YACjC,iBAAeV;AAAA,YACd,GAAGG;AAAA,UAAA;AAAA,QAAA;AAAA,QAGLM,KAAYV,KACX,gBAAAlM,EAAC,QAAA,EAAK,IAAI2M,GAAS,MAAK,SAAQ,OAAOK,GACpC,UAAAd,EAAA,CACH;AAAA,QAGD,CAACU,KAAYX,KACZ,gBAAAjM,EAAC,UAAK,IAAI0M,GAAU,OAAOK,GACxB,UAAAd,EAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR,CAAC;AAEDD,GAAU,cAAc;AC7FxB,MAAMiB,KAAwF;AAAA,EAC5F,IAAI,EAAE,QAAQ,IAAI,UAAU,IAAI,SAAS,GAAA;AAAA,EACzC,IAAI,EAAE,QAAQ,IAAI,UAAU,IAAI,SAAS,GAAA;AAAA,EACzC,IAAI,EAAE,QAAQ,IAAI,UAAU,IAAI,SAAS,GAAA;AAC3C;AAGA,SAASC,KAAc;AACrB,SACE,gBAAAlN,EAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QACnD,UAAA,gBAAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,GAAE;AAAA,MACF,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA,IAAA;AAAA,EAAA,GAEnB;AAEJ;AAEO,MAAMmN,KAASjN,EAA2C,SAC/D;AAAA,EACE,MAAA8B,IAAO;AAAA,EACP,SAAAQ,IAAU;AAAA,EACV,WAAA2I;AAAA,EACA,aAAAiC;AAAA,EACA,WAAA5N;AAAA,EACA,OAAAC;AAAA,EACA,QAAAE;AAAA,EACA,UAAAgJ;AAAA,EACA,UAAAjJ;AAAA,EACA,SAAA4L;AAAA,EACA,QAAAC;AAAA,EACA,OAAApN;AAAA,EACA,GAAGE;AACL,GACAuB,GACA;AACA,QAAM,CAAC4L,GAAWC,CAAY,IAAIjC,EAAS,EAAK,GAE1C6D,IAAYJ,GAAWjL,CAAI,GAC3BsL,IAAWnP,MAAU,UAAaA,MAAU,IAE5CoP,IAA8B;AAAA,IAClC,UAAU;AAAA,IACV,SAAS;AAAA,IACT,OAAO;AAAA,EAAA,GAGHC,IAAiB,MAAqB;AAC1C,UAAM3K,IAAsB;AAAA,MAC1B,OAAO;AAAA,MACP,QAAQwK,EAAU;AAAA,MAClB,aAAaA,EAAU;AAAA,MACvB,cAAcA,EAAU,UAAU;AAAA,MAClC,UAAUA,EAAU;AAAA,MACpB,YAAY;AAAA,MACZ,OAAOC,KAAY,CAACF,IAAc,qCAAqC;AAAA,MACvE,iBAAiB5K,MAAY,WAAW,mCAAmC;AAAA,MAC3E,QAAQ,aACN2I,IACI,gCACAK,IACE,+BACAhJ,MAAY,WACV,gBACA,8BACV;AAAA,MACA,cAAc;AAAA,MACd,SAAS;AAAA,MACT,QAAQmG,IAAW,gBAAgB;AAAA,MACnC,YAAY;AAAA,MACZ,kBAAkB;AAAA,MAClB,YAAY;AAAA,MACZ,WAAW6C,IACPL,IACE,sCACA,uCACF;AAAA,IAAA;AAGN,WAAIxC,MACF9F,EAAK,UAAU,MAGVA;AAAA,EACT,GAEMgI,IAA2B;AAAA,IAC/B,UAAU;AAAA,IACV,OAAOwC,EAAU;AAAA,IACjB,KAAK;AAAA,IACL,WAAW;AAAA,IACX,eAAe;AAAA,IACf,OAAO;AAAA,IACP,YAAY;AAAA,EAAA,GAGRxB,IAAc,CAAC/I,MAA2C;AAC9D,IAAA2I,EAAa,EAAI,GACjBH,KAAA,QAAAA,EAAUxI;AAAA,EACZ,GAEMgJ,IAAa,CAAChJ,MAA2C;AAC7D,IAAA2I,EAAa,EAAK,GAClBF,KAAA,QAAAA,EAASzI;AAAA,EACX;AAEA,SACE,gBAAAwB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWxG;AAAA,QACT;AAAA,QACA,0BAA0B0E,CAAO;AAAA,QACjC,0BAA0BR,CAAI;AAAA,QAC9BmJ,KAAa;AAAA,QACbxC,KAAY;AAAA,QACZnJ;AAAA,MAAA;AAAA,MAEF,OAAO,EAAE,GAAG+N,GAAc,GAAG9N,EAAA;AAAA,MAE7B,UAAA;AAAA,QAAA,gBAAA6E;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,KAAA1E;AAAA,YACA,WAAU;AAAA,YACV,OAAO4N,EAAA;AAAA,YACP,UAAA7E;AAAA,YACA,gBAAcwC;AAAA,YACd,eAAaxL;AAAA,YACb,OAAAxB;AAAA,YACA,SAAS0N;AAAA,YACT,QAAQC;AAAA,YACP,GAAGzN;AAAA,YAEH,UAAA;AAAA,cAAA+O,uBACE,UAAA,EAAO,OAAM,IAAG,UAAQ,IACtB,UAAAA,GACH;AAAA,cAED1N;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,0BAGF,QAAA,EAAK,OAAOmL,GACX,UAAA,gBAAA7K,EAACkN,MAAY,EAAA,CACf;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN,CAAC;AAEDC,GAAO,cAAc;ACzIrB,SAASM,GAAU,EAAE,MAAAzL,KAA0B;AAC7C,SACE,gBAAAhC,EAAC,SAAI,OAAOgC,GAAM,QAAQA,GAAM,SAAQ,aAAY,MAAK,QACvD,UAAA,gBAAAhC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,GAAE;AAAA,MACF,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA,IAAA;AAAA,EAAA,GAEnB;AAEJ;AAGA,SAAS0N,GAAU,EAAE,MAAA1L,KAA0B;AAC7C,SACE,gBAAAhC,EAAC,SAAI,OAAOgC,GAAM,QAAQA,GAAM,SAAQ,aAAY,MAAK,QACvD,UAAA,gBAAAhC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,GAAE;AAAA,MACF,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,IAAA;AAAA,EAAA,GAElB;AAEJ;AAEO,MAAM2N,KAAWzN,EAA4C,SAClE;AAAA,EACE,MAAA8B,IAAO;AAAA,EACP,OAAA4I;AAAA,EACA,aAAAjH;AAAA,EACA,WAAAwH;AAAA,EACA,iBAAAyC;AAAA,EACA,WAAApO;AAAA,EACA,OAAAC;AAAA,EACA,QAAAE;AAAA,EACA,UAAAgJ;AAAA,EACA,SAAAkF;AAAA,EACA,UAAAC;AAAA,EACA,GAAGzP;AACL,GACAuB,GACA;AACA,QAAM,CAAC4L,GAAWC,CAAY,IAAIjC,EAAS,EAAK,GAC1C,CAACF,GAAWC,CAAY,IAAIC,EAAS,EAAK,GAC1C,CAACC,GAAWC,CAAY,IAAIF,EAAS,EAAK,GAE1CkC,IAAS5P,GAAakG,CAAI,GAC1B+L,IAAWrR,EAAkBsF,CAAI,GAEjCgM,IAA2BH,KAAWD,GAEtCL,IAA8B;AAAA,IAClC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,KAAK5R,GAAa;AAAA,IAClB,QAAQgN,IAAW,gBAAgB;AAAA,IACnC,SAASA,IAAWxL,GAAa,WAAW;AAAA,EAAA,GAGxC8Q,IAA0B;AAAA,IAC9B,UAAU;AAAA,IACV,OAAOvC,EAAO;AAAA,IACd,QAAQA,EAAO;AAAA,IACf,cAAc;AAAA,IACd,QAAQ,eACNP,IACI,gCACA6C,IACE,kCACAxC,IACE,+BACA,8BACV;AAAA,IACA,iBAAiBwC,IACb,kCACA1E,IACE,oCACA;AAAA,IACN,YAAYnN,GAAW;AAAA,IACvB,WAAWsN,IAAY,SAASrM,GAAM,cAAc,MAAM,SAASA,GAAM,MAAM;AAAA,IAC/E,WAAWoO,IAAYxP,GAAU,UAAUA,GAAU;AAAA,IACrD,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,YAAY;AAAA,EAAA,GAGR6O,IAA2B;AAAA,IAC/B,OAAO;AAAA,IACP,SAASmD,IAA2B,IAAI;AAAA,IACxC,WAAWA,IAA2B,SAAS5Q,GAAM,MAAM,MAAM,SAASA,GAAM,MAAM;AAAA,IACtF,YAAYjB,GAAW;AAAA,EAAA,GAGnB+R,IAA4B;AAAA,IAChC,UAAU;AAAA,IACV,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,QAAQvF,IAAW,gBAAgB;AAAA,IACnC,QAAQ;AAAA,EAAA,GAGJwF,IAAqC;AAAA,IACzC,SAAS;AAAA,IACT,eAAe;AAAA,IACf,KAAKxS,GAAa;AAAA,IAClB,aAAa+P,EAAO,MAAMqC,KAAY;AAAA,EAAA,GAGlCK,IAAgC;AAAA,IACpC,UAAAL;AAAA,IACA,YAAYjR,EAAoB;AAAA,IAChC,OAAO;AAAA,IACP,YAAY;AAAA,EAAA,GAGRoH,IAAkC;AAAA,IACtC,UAAU6J,IAAW;AAAA,IACrB,YAAYjR,EAAoB;AAAA,IAChC,OAAO;AAAA,IACP,YAAY;AAAA,EAAA;AAGd,SACE,gBAAAwH;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWxG;AAAA,QACT;AAAA,QACA,oBAAoBkE,CAAI;AAAA,QACxBgM,KAA4B;AAAA,QAC5B7C,KAAa;AAAA,QACbxC,KAAY;AAAA,QACZnJ;AAAA,MAAA;AAAA,MAEF,OAAO,EAAE,GAAG+N,GAAc,GAAG9N,EAAA;AAAA,MAC7B,eAAaE;AAAA,MACb,cAAc,MAAM4J,EAAa,EAAI;AAAA,MACrC,cAAc,MAAM;AAClB,QAAAA,EAAa,EAAK,GAClBG,EAAa,EAAK;AAAA,MACpB;AAAA,MACA,aAAa,MAAMA,EAAa,EAAI;AAAA,MACpC,WAAW,MAAMA,EAAa,EAAK;AAAA,MAEnC,UAAA;AAAA,QAAA,gBAAApF,EAAC,QAAA,EAAK,OAAO2J,GACX,UAAA;AAAA,UAAA,gBAAAjO;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAAJ;AAAA,cACA,MAAK;AAAA,cACL,OAAOsO;AAAA,cACP,SAAAL;AAAA,cACA,UAAAlF;AAAA,cACA,gBAAcwC;AAAA,cACd,UAAA2C;AAAA,cACA,SAAS,MAAMrC,EAAa,EAAI;AAAA,cAChC,QAAQ,MAAMA,EAAa,EAAK;AAAA,cAC/B,GAAGpN;AAAA,YAAA;AAAA,UAAA;AAAA,4BAEL,QAAA,EAAK,OAAOwM,GACV,UAAA+C,sBAAmBF,IAAA,EAAU,MAAMhC,EAAO,KAAA,CAAM,IAAK,gBAAA1L,EAACyN,IAAA,EAAU,MAAM/B,EAAO,MAAM,EAAA,CACtF;AAAA,QAAA,GACF;AAAA,SAEEd,KAASjH,MACT,gBAAAW,EAAC,QAAA,EAAK,OAAO6J,GACV,UAAA;AAAA,UAAAvD,KAAS,gBAAA5K,EAAC,QAAA,EAAK,OAAOoO,GAAiB,UAAAxD,GAAM;AAAA,UAC7CjH,KAAe,gBAAA3D,EAAC,QAAA,EAAK,OAAOkE,GAAmB,UAAAP,EAAA,CAAY;AAAA,QAAA,EAAA,CAC9D;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR,CAAC;AAEDgK,GAAS,cAAc;ACnLhB,MAAMU,KAASnO,EAA0C,SAC9D;AAAA,EACE,MAAA8B,IAAO;AAAA,EACP,OAAA4I;AAAA,EACA,aAAAjH;AAAA,EACA,WAAAnE;AAAA,EACA,OAAAC;AAAA,EACA,QAAAE;AAAA,EACA,UAAAgJ;AAAA,EACA,SAAAkF;AAAA,EACA,UAAAC;AAAA,EACA,GAAGzP;AACL,GACAuB,GACA;AACA,QAAM,CAAC4L,GAAWC,CAAY,IAAIjC,EAAS,EAAK,GAC1C,CAACC,GAAWC,CAAY,IAAIF,EAAS,EAAK,GAE1CkC,IAAS3P,GAAYiG,CAAI,GACzB+L,IAAWrR,EAAkBsF,CAAI,GAEjCS,KAAWiJ,EAAO,SAASA,EAAO,SAAS,GAC3C4C,IAAS5C,EAAO,QAAQA,EAAO,QAAQjJ,IAAU,GAEjD8K,IAA8B;AAAA,IAClC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,KAAK5R,GAAa;AAAA,IAClB,QAAQgN,IAAW,gBAAgB;AAAA,IACnC,SAASA,IAAWxL,GAAa,WAAW;AAAA,EAAA,GAGxCoR,IAA4B;AAAA,IAChC,UAAU;AAAA,IACV,OAAO7C,EAAO;AAAA,IACd,QAAQA,EAAO;AAAA,IACf,cAAcA,EAAO,SAAS;AAAA,IAC9B,iBAAiBmC,IACb,kCACA;AAAA,IACJ,QAAQ,aAAaA,IAAU,kCAAkC,8BAA8B;AAAA,IAC/F,YAAY1R,GAAW;AAAA,IACvB,WAAWqP,IAAYxP,GAAU,UAAU;AAAA,IAC3C,YAAY;AAAA,EAAA,GAGRwS,IAA4B;AAAA,IAChC,UAAU;AAAA,IACV,KAAK/L;AAAA,IACL,MAAMoL,IAAUpL,IAAU6L,IAAS7L;AAAA,IACnC,OAAOgH,IAAYiC,EAAO,QAAQ,IAAIA,EAAO;AAAA,IAC7C,QAAQA,EAAO;AAAA,IACf,cAAcA,EAAO,QAAQ;AAAA,IAC7B,iBAAiB;AAAA,IACjB,WAAW;AAAA,IACX,YAAYvP,GAAW;AAAA,IACvB,WAAWsN,IAAY,SAASrM,GAAM,aAAa,MAAM,SAASA,GAAM,MAAM;AAAA,EAAA,GAG1E8Q,IAA4B;AAAA,IAChC,UAAU;AAAA,IACV,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,QAAQvF,IAAW,gBAAgB;AAAA,IACnC,QAAQ;AAAA,EAAA,GAGJwF,IAAqC;AAAA,IACzC,SAAS;AAAA,IACT,eAAe;AAAA,IACf,KAAKxS,GAAa;AAAA,IAClB,aAAa+P,EAAO,SAASqC,IAAWjR,EAAoB,QAAQ;AAAA,EAAA,GAGhEgQ,IAA4B;AAAA,IAChC,UAAAiB;AAAA,IACA,YAAYjR,EAAoB;AAAA,IAChC,OAAO;AAAA,IACP,YAAY;AAAA,EAAA,GAGRoH,IAAkC;AAAA,IACtC,UAAU6J,IAAW;AAAA,IACrB,YAAYjR,EAAoB;AAAA,IAChC,OAAO;AAAA,IACP,YAAY;AAAA,EAAA;AAGd,SACE,gBAAAwH;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWxG;AAAA,QACT;AAAA,QACA,kBAAkBkE,CAAI;AAAA,QACtB6L,KAAW;AAAA,QACXlF,KAAY;AAAA,QACZnJ;AAAA,MAAA;AAAA,MAEF,OAAO,EAAE,GAAG+N,GAAc,GAAG9N,EAAA;AAAA,MAC7B,eAAaE;AAAA,MACb,aAAa,MAAM+J,EAAa,EAAI;AAAA,MACpC,WAAW,MAAMA,EAAa,EAAK;AAAA,MACnC,cAAc,MAAMA,EAAa,EAAK;AAAA,MAEtC,UAAA;AAAA,QAAA,gBAAApF,EAAC,QAAA,EAAK,OAAOiK,GACX,UAAA;AAAA,UAAA,gBAAAvO;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAAJ;AAAA,cACA,MAAK;AAAA,cACL,MAAK;AAAA,cACL,OAAOsO;AAAA,cACP,SAAAL;AAAA,cACA,UAAAlF;AAAA,cACA,gBAAckF;AAAA,cACd,UAAAC;AAAA,cACA,SAAS,MAAMrC,EAAa,EAAI;AAAA,cAChC,QAAQ,MAAMA,EAAa,EAAK;AAAA,cAC/B,GAAGpN;AAAA,YAAA;AAAA,UAAA;AAAA,UAEN,gBAAA2B,EAAC,QAAA,EAAK,OAAOwO,EAAA,CAAY;AAAA,QAAA,GAC3B;AAAA,SAEE5D,KAASjH,MACT,gBAAAW,EAAC,QAAA,EAAK,OAAO6J,GACV,UAAA;AAAA,UAAAvD,KAAS,gBAAA5K,EAAC,QAAA,EAAK,OAAO8M,GAAa,UAAAlC,GAAM;AAAA,UACzCjH,KAAe,gBAAA3D,EAAC,QAAA,EAAK,OAAOkE,GAAmB,UAAAP,EAAA,CAAY;AAAA,QAAA,EAAA,CAC9D;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR,CAAC;AAED0K,GAAO,cAAc;AClIrB,MAAMpB,KAA8F;AAAA,EAClG,IAAI,EAAE,UAAU,IAAI,SAAS,IAAI,YAAY,IAAA;AAAA,EAC7C,IAAI,EAAE,UAAU,IAAI,SAAS,IAAI,YAAY,IAAA;AAAA,EAC7C,IAAI,EAAE,UAAU,IAAI,SAAS,IAAI,YAAY,IAAA;AAC/C,GAEawB,KAAWvO,EAA+C,SACrE;AAAA,EACE,MAAA8B,IAAO;AAAA,EACP,SAAAQ,IAAU;AAAA,EACV,WAAA2I;AAAA,EACA,YAAAuD;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,SAAAC,IAAU;AAAA,EACV,WAAAC;AAAA,EACA,WAAAC;AAAA,EACA,WAAAtP;AAAA,EACA,OAAAC;AAAA,EACA,QAAAE;AAAA,EACA,UAAAgJ;AAAA,EACA,OAAAxK;AAAA,EACA,cAAA4Q;AAAA,EACA,UAAAjB;AAAA,EACA,SAAAxC;AAAA,EACA,QAAAC;AAAA,EACA,GAAGlN;AACL,GACAuB,GACA;AACA,QAAM,CAAC4L,GAAWC,CAAY,IAAIjC,EAAS,EAAK,GAC1C,CAACwF,GAAWC,CAAY,IAAIzF,EAAS,CAAC,GACtC0F,IAAcC,EAA4B,IAAI,GAC9CC,IAAexP,KAAgDsP,GAE/D7B,IAAYJ,GAAWjL,CAAI,GAC3BqN,IAAehC,EAAU,WAAWA,EAAU,YAC9CiC,IAAYD,IAAeV,IAAUtB,EAAU,UAAU,GACzDkC,IAAYF,IAAeT,IAAUvB,EAAU,UAAU,GAEzDmC,IAAeC,EAAY,MAAM;AACrC,UAAMC,IAAWN,EAAY;AAC7B,QAAI,CAACM,KAAY,CAAChB,EAAY;AAE9B,IAAAgB,EAAS,MAAM,SAAS;AACxB,UAAMC,IAAeD,EAAS,cACxBE,KAAY,KAAK,IAAI,KAAK,IAAID,GAAcL,CAAS,GAAGC,CAAS;AACvE,IAAAG,EAAS,MAAM,SAAS,GAAGE,EAAS;AAAA,EACtC,GAAG,CAAClB,GAAYY,GAAWC,GAAWH,CAAW,CAAC;AAElD,EAAAS,EAAU,MAAM;AACd,IAAAL,EAAA;AAAA,EACF,GAAG,CAACrR,GAAOqR,CAAY,CAAC,GAExBK,EAAU,MAAM;AACd,UAAMC,IAAe,OAAO3R,KAAS4Q,KAAgB,EAAE;AACvD,IAAAE,EAAaa,EAAa,MAAM;AAAA,EAClC,GAAG,CAAC3R,GAAO4Q,CAAY,CAAC;AAExB,QAAMgB,IAAmB,MAAqB;AAC5C,UAAMlN,IAAsB;AAAA,MAC1B,OAAO;AAAA,MACP,WAAAyM;AAAA,MACA,WAAWZ,IAAaa,IAAY;AAAA,MACpC,SAASlC,EAAU;AAAA,MACnB,UAAUA,EAAU;AAAA,MACpB,YAAYA,EAAU;AAAA,MACtB,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,iBAAiB7K,MAAY,WAAW,mCAAmC;AAAA,MAC3E,QAAQ,aACN2I,IACI,gCACAK,IACE,+BACAhJ,MAAY,WACV,gBACA,8BACV;AAAA,MACA,cAAc;AAAA,MACd,SAAS;AAAA,MACT,QAAQkM,IAAa,SAAS;AAAA,MAC9B,YAAY;AAAA,MACZ,WAAWlD,IACPL,IACE,sCACA,uCACF;AAAA,IAAA;AAGN,WAAIxC,MACF9F,EAAK,UAAU,KACfA,EAAK,SAAS,eACdA,EAAK,SAAS,SAGTA;AAAA,EACT,GAEM0K,IAA8B;AAAA,IAClC,UAAU;AAAA,IACV,OAAO;AAAA,EAAA,GAGHyC,IAA4B;AAAA,IAChC,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,UAAU;AAAA,IACV,OAAOhB,MAAcF,KAAa,SAC9B,gCACA;AAAA,IACJ,eAAe;AAAA,IACf,YAAY;AAAA,EAAA,GAGRmB,IAAe,CAACnN,MAA8C;AAClE,IAAAmM,EAAanM,EAAE,OAAO,MAAM,MAAM,GAClCgL,KAAA,QAAAA,EAAWhL;AAAA,EACb,GAEM+I,IAAc,CAAC/I,MAA6C;AAChE,IAAA2I,EAAa,EAAI,GACjBH,KAAA,QAAAA,EAAUxI;AAAA,EACZ,GAEMgJ,IAAa,CAAChJ,MAA6C;AAC/D,IAAA2I,EAAa,EAAK,GAClBF,KAAA,QAAAA,EAASzI;AAAA,EACX;AAEA,SACE,gBAAAwB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWxG;AAAA,QACT;AAAA,QACA,4BAA4B0E,CAAO;AAAA,QACnC,4BAA4BR,CAAI;AAAA,QAChCmJ,KAAa;AAAA,QACbxC,KAAY;AAAA,QACZnJ;AAAA,MAAA;AAAA,MAEF,OAAO,EAAE,GAAG+N,GAAc,GAAG9N,EAAA;AAAA,MAE7B,UAAA;AAAA,QAAA,gBAAAO;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,KAAKoP;AAAA,YACL,WAAU;AAAA,YACV,OAAOW,EAAA;AAAA,YACP,UAAApH;AAAA,YACA,gBAAcwC;AAAA,YACd,eAAaxL;AAAA,YACb,OAAAxB;AAAA,YACA,cAAA4Q;AAAA,YACA,WAAAD;AAAA,YACA,UAAUmB;AAAA,YACV,SAASpE;AAAA,YACT,QAAQC;AAAA,YACP,GAAGzN;AAAA,UAAA;AAAA,QAAA;AAAA,QAGLwQ,KACC,gBAAAvK,EAAC,QAAA,EAAK,OAAO0L,GACV,UAAA;AAAA,UAAAhB;AAAA,UAAWF,IAAY,IAAIA,CAAS,KAAK;AAAA,QAAA,EAAA,CAC5C;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR,CAAC;AAEDL,GAAS,cAAc;AClLvB,MAAM7G,KAA+F;AAAA,EACnG,IAAI,EAAE,OAAO,IAAI,KAAK,GAAG,UAAU,IAAI,KAAK,EAAA;AAAA,EAC5C,IAAI,EAAE,OAAO,IAAI,KAAK,GAAG,UAAU,IAAI,KAAK,GAAA;AAAA,EAC5C,IAAI,EAAE,OAAO,IAAI,KAAK,IAAI,UAAU,IAAI,KAAK,GAAA;AAC/C,GAEasI,KAAQhQ,EAAyC,SAC5D;AAAA,EACE,MAAA8B,IAAO;AAAA,EACP,OAAA4I;AAAA,EACA,aAAAjH;AAAA,EACA,WAAAwH,IAAY;AAAA,EACZ,UAAAxC,IAAW;AAAA,EACX,WAAAnJ;AAAA,EACA,OAAAC;AAAA,EACA,QAAAE;AAAA,EACA,SAAAkO;AAAA,EACA,GAAGxP;AACL,GACAuB,GACA;AACA,QAAM,CAAC0J,GAAWC,CAAY,IAAIC,EAAS,EAAK,GAC1C,CAACgC,GAAWC,CAAY,IAAIjC,EAAS,EAAK,GAC1CkC,IAAS9D,GAAW5F,CAAI,GAExBmO,IAAgC;AAAA,IACpC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,KAAKzE,EAAO;AAAA,IACZ,QAAQ/C,IAAW,gBAAgB;AAAA,IACnC,SAASA,IAAW,MAAM;AAAA,IAC1B,GAAGlJ;AAAA,EAAA,GAGC2Q,IAAqC;AAAA,IACzC,UAAU;AAAA,IACV,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,OAAO1E,EAAO;AAAA,IACd,QAAQA,EAAO;AAAA,IACf,YAAY;AAAA,EAAA,GAGR2E,IAA4B;AAAA,IAChC,OAAO3E,EAAO;AAAA,IACd,QAAQA,EAAO;AAAA,IACf,cAAc;AAAA,IACd,QAAQ,aACNP,IACI,gCACA0C,IACA,kCACAvE,IACA,gCACA,8BACN;AAAA,IACA,iBAAiBuE,IACb,kCACA;AAAA,IACJ,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,WAAWrC,IACP,wCACA;AAAA,EAAA,GAGA8E,IAA0B;AAAA,IAC9B,OAAO5E,EAAO;AAAA,IACd,QAAQA,EAAO;AAAA,IACf,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,WAAWmC,IAAU,aAAa;AAAA,IAClC,YAAY;AAAA,EAAA,GAGRK,IAA4B;AAAA,IAChC,UAAU;AAAA,IACV,OAAOxC,EAAO;AAAA,IACd,QAAQA,EAAO;AAAA,IACf,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,QAAQ/C,IAAW,gBAAgB;AAAA,EAAA,GAG/BwF,IAAqC;AAAA,IACzC,SAAS;AAAA,IACT,eAAe;AAAA,IACf,KAAK;AAAA,EAAA,GAGDrB,IAA4B;AAAA,IAChC,UAAUpB,EAAO;AAAA,IACjB,YAAY;AAAA,IACZ,OAAO/C,IACH,mCACA;AAAA,IACJ,YAAY;AAAA,EAAA,GAGRzE,IAAkC;AAAA,IACtC,UAAUwH,EAAO,WAAW;AAAA,IAC5B,OAAO;AAAA,IACP,YAAY;AAAA,EAAA;AAGd,SACE,gBAAApH;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWxG,EAAG,gBAAgB,iBAAiBkE,CAAI,IAAIxC,CAAS;AAAA,MAChE,OAAO2Q;AAAA,MACP,cAAc,MAAM5G,EAAa,EAAI;AAAA,MACrC,cAAc,MAAMA,EAAa,EAAK;AAAA,MAEtC,UAAA;AAAA,QAAA,gBAAAjF,EAAC,QAAA,EAAK,OAAO8L,GACX,UAAA;AAAA,UAAA,gBAAApQ,EAAC,UAAK,OAAOqQ,GACX,4BAAC,QAAA,EAAK,OAAOC,GAAU,EAAA,CACzB;AAAA,UACA,gBAAAtQ;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAAJ;AAAA,cACA,MAAK;AAAA,cACL,UAAA+I;AAAA,cACA,SAAAkF;AAAA,cACA,OAAOK;AAAA,cACP,SAAS,MAAMzC,EAAa,EAAI;AAAA,cAChC,QAAQ,MAAMA,EAAa,EAAK;AAAA,cAChC,eAAa9L;AAAA,cACZ,GAAGtB;AAAA,YAAA;AAAA,UAAA;AAAA,QACN,GACF;AAAA,SACEuM,KAASjH,MACT,gBAAAW,EAAC,QAAA,EAAK,OAAO6J,GACV,UAAA;AAAA,UAAAvD,KAAS,gBAAA5K,EAAC,QAAA,EAAK,OAAO8M,GAAa,UAAAlC,GAAM;AAAA,UACzCjH,KAAe,gBAAA3D,EAAC,QAAA,EAAK,OAAOkE,GAAmB,UAAAP,EAAA,CAAY;AAAA,QAAA,EAAA,CAC9D;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR,CAAC;AAEDuM,GAAM,cAAc;AA4Bb,SAASK,GAAW;AAAA,EACzB,MAAAC;AAAA,EACA,OAAOC;AAAA,EACP,cAAA1B;AAAA,EACA,UAAAjB;AAAA,EACA,UAAAnF,IAAW;AAAA,EACX,MAAA3G,IAAO;AAAA,EACP,aAAA0O,IAAc;AAAA,EACd,KAAAvL,IAAM;AAAA,EACN,UAAAzF;AAAA,EACA,WAAAF;AAAA,EACA,OAAAC;AACF,GAAoB;AAClB,QAAM,CAACkR,GAAeC,CAAgB,IAAIpH,EAASuF,KAAgB,EAAE,GAC/D5Q,IAAQsS,KAAmBE,GAE3BV,IAAe,CAACY,MAAqB;AACzC,IAAIJ,MAAoB,UACtBG,EAAiBC,CAAQ,GAE3B/C,KAAA,QAAAA,EAAW+C;AAAA,EACb,GAEMC,IAA4B;AAAA,IAChC,SAAS;AAAA,IACT,eAAeJ,MAAgB,aAAa,WAAW;AAAA,IACvD,UAAUA,MAAgB,eAAe,SAAS;AAAA,IAClD,KAAAvL;AAAA,IACA,GAAG1F;AAAA,EAAA,GAICsR,IAAiB,MAAM,QAAQrR,CAAQ,IACzCA,EAAS,IAAI,CAACsR,GAAOhG,MAAU;AAC7B,QAAIgG,KAAS,OAAOA,KAAU,YAAY,WAAWA,GAAO;AAC1D,YAAMC,IAAaD,EAAM,MAAM;AAC/B,aAAO;AAAA,QACL,GAAGA;AAAA,QACH,KAAKA,EAAM,OAAOhG;AAAA,QAClB,OAAO;AAAA,UACL,GAAGgG,EAAM;AAAA,UACT,MAAAR;AAAA,UACA,MAAAxO;AAAA,UACA,UAAU2G,KAAYqI,EAAM,MAAM;AAAA,UAClC,SAASC,MAAe9S;AAAA,UACxB,UAAU,MAAM8R,EAAagB,CAAU;AAAA,QAAA;AAAA,MACzC;AAAA,IAEJ;AACA,WAAOD;AAAA,EACT,CAAC,IACDtR;AAEJ,SACE,gBAAAM;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAWlC,EAAG,sBAAsB0B,CAAS;AAAA,MAC7C,OAAOsR;AAAA,MAEN,UAAAC;AAAA,IAAA;AAAA,EAAA;AAGP;AAEAR,GAAW,cAAc;ACxNzB,MAAM3I,KAAqF;AAAA,EACzF,IAAI,EAAE,OAAO,GAAG,OAAO,IAAI,UAAU,GAAA;AAAA,EACrC,IAAI,EAAE,OAAO,GAAG,OAAO,IAAI,UAAU,GAAA;AAAA,EACrC,IAAI,EAAE,OAAO,GAAG,OAAO,IAAI,UAAU,GAAA;AACvC,GAEasJ,KAAShR,EAA0C,SAC9D;AAAA,EACE,MAAA8B,IAAO;AAAA,EACP,KAAAmP,IAAM;AAAA,EACN,KAAAC,IAAM;AAAA,EACN,MAAAC,IAAO;AAAA,EACP,OAAOZ;AAAA,EACP,cAAA1B,IAAeoC;AAAA,EACf,UAAArD;AAAA,EACA,WAAAwD,IAAY;AAAA,EACZ,aAAAC,IAAc,CAACC,MAAM,OAAOA,CAAC;AAAA,EAC7B,OAAA5G;AAAA,EACA,UAAAjC,IAAW;AAAA,EACX,WAAAnJ;AAAA,EACA,OAAAC;AAAA,EACA,QAAAE;AAAA,EACA,GAAGtB;AACL,GACAuB,GACA;AACA,QAAM,CAAC+Q,GAAeC,CAAgB,IAAIpH,EAASuF,CAAY,GACzD,CAAC0C,GAAYC,CAAa,IAAIlI,EAAS,EAAK,GAC5C,CAACF,GAAWC,CAAY,IAAIC,EAAS,EAAK,GAC1CmI,IAAWxC,EAAyB,IAAI,GAExChR,IAAQsS,KAAmBE,GAC3BjF,IAAS9D,GAAW5F,CAAI,GACxB4P,KAAezT,IAAQgT,MAAQC,IAAMD,KAAQ,KAE7ClB,IAAeR;AAAA,IACnB,CAACoB,MAAqB;AACpB,YAAMgB,IAAe,KAAK,IAAIV,GAAK,KAAK,IAAIC,GAAKP,CAAQ,CAAC;AAC1D,MAAIJ,MAAoB,UACtBG,EAAiBiB,CAAY,GAE/B/D,KAAA,QAAAA,EAAW+D;AAAA,IACb;AAAA,IACA,CAACpB,GAAiBU,GAAKC,GAAKtD,CAAQ;AAAA,EAAA;AAGtC,EAAA+B,EAAU,MAAM;AACd,UAAMiC,IAAQH,EAAS;AACvB,QAAI,CAACG,EAAO;AAEZ,UAAMC,IAAoB,CAACjP,OAAa;AACtC,YAAMC,KAASD,GAAE;AACjB,MAAAmN,EAAa,WAAWlN,GAAO,KAAK,CAAC;AAAA,IACvC;AAEA,WAAA+O,EAAM,iBAAiB,SAASC,CAAiB,GAC1C,MAAMD,EAAM,oBAAoB,SAASC,CAAiB;AAAA,EACnE,GAAG,CAAC9B,CAAY,CAAC;AAEjB,QAAME,IAAgC;AAAA,IACpC,SAAS;AAAA,IACT,eAAe;AAAA,IACf,KAAK;AAAA,IACL,SAASxH,IAAW,MAAM;AAAA,IAC1B,GAAGlJ;AAAA,EAAA,GAGCuS,IAA+B;AAAA,IACnC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,KAAK;AAAA,EAAA,GAGDlF,IAA4B;AAAA,IAChC,UAAUpB,EAAO;AAAA,IACjB,YAAY;AAAA,IACZ,OAAO;AAAA,EAAA,GAGHuG,IAA4B;AAAA,IAChC,UAAUvG,EAAO;AAAA,IACjB,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,oBAAoB;AAAA,EAAA,GAGhBwG,IAAsC;AAAA,IAC1C,UAAU;AAAA,IACV,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,QAAQxG,EAAO;AAAA,IACf,QAAQ/C,IAAW,gBAAgB;AAAA,EAAA,GAG/B4F,IAA4B;AAAA,IAChC,UAAU;AAAA,IACV,OAAO;AAAA,IACP,QAAQ7C,EAAO;AAAA,IACf,cAAcA,EAAO,QAAQ;AAAA,IAC7B,iBAAiB;AAAA,EAAA,GAGbyG,IAA2B;AAAA,IAC/B,UAAU;AAAA,IACV,MAAM;AAAA,IACN,QAAQzG,EAAO;AAAA,IACf,OAAO,GAAGkG,CAAU;AAAA,IACpB,cAAclG,EAAO,QAAQ;AAAA,IAC7B,iBAAiB/C,IACb,mCACA;AAAA,IACJ,YAAY8I,IAAa,SAAS;AAAA,EAAA,GAG9BjD,IAA4B;AAAA,IAChC,UAAU;AAAA,IACV,MAAM,QAAQoD,CAAU,OAAOlG,EAAO,QAAQ,CAAC;AAAA,IAC/C,OAAOA,EAAO;AAAA,IACd,QAAQA,EAAO;AAAA,IACf,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,QAAQ,aACN/C,IAAW,mCAAmC,+BAChD;AAAA,IACA,WAAW8I,KAAcnI,IACrB,4BACA;AAAA,IACJ,WAAWmI,IAAa,eAAe;AAAA,IACvC,YAAYA,IACR,wDACA;AAAA,IACJ,eAAe;AAAA,EAAA,GAGXvD,IAA4B;AAAA,IAChC,UAAU;AAAA,IACV,OAAO;AAAA,IACP,QAAQxC,EAAO;AAAA,IACf,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,SAAS;AAAA,IACT,QAAQ/C,IAAW,gBAAgB;AAAA,EAAA;AAGrC,SACE,gBAAArE,EAAC,OAAA,EAAI,WAAWxG,EAAG,iBAAiB,kBAAkBkE,CAAI,IAAIxC,CAAS,GAAG,OAAO2Q,GAC7E,UAAA;AAAA,KAAAvF,KAAS0G,MACT,gBAAAhN,EAAC,OAAA,EAAI,OAAO0N,GACT,UAAA;AAAA,MAAApH,KAAS,gBAAA5K,EAAC,QAAA,EAAK,OAAO8M,GAAa,UAAAlC,GAAM;AAAA,MACzC0G,KAAa,gBAAAtR,EAAC,QAAA,EAAK,OAAOiS,GAAa,UAAAV,EAAYpT,CAAK,EAAA,CAAE;AAAA,IAAA,GAC7D;AAAA,IAEF,gBAAAmG;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO4N;AAAA,QACP,cAAc,MAAM3I,EAAa,EAAI;AAAA,QACrC,cAAc,MAAMA,EAAa,EAAK;AAAA,QAEtC,UAAA;AAAA,UAAA,gBAAAvJ,EAAC,OAAA,EAAI,OAAOuO,EAAA,CAAY;AAAA,UACxB,gBAAAvO,EAAC,OAAA,EAAI,OAAOmS,EAAA,CAAW;AAAA,UACvB,gBAAAnS,EAAC,OAAA,EAAI,OAAOwO,EAAA,CAAY;AAAA,UACxB,gBAAAxO;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAK,CAACoS,MAAS;AACZ,gBAAAT,EAA6D,UAAUS,GACpE,OAAOxS,KAAQ,aAAYA,EAAIwS,CAAI,IAC9BxS,QAAS,UAAUwS;AAAA,cAC9B;AAAA,cACA,MAAK;AAAA,cACL,KAAAjB;AAAA,cACA,KAAAC;AAAA,cACA,MAAAC;AAAA,cACA,OAAAlT;AAAA,cACA,UAAAwK;AAAA,cACA,OAAOuF;AAAA,cACP,aAAa,MAAMwD,EAAc,EAAI;AAAA,cACrC,WAAW,MAAMA,EAAc,EAAK;AAAA,cACpC,cAAc,MAAMA,EAAc,EAAI;AAAA,cACtC,YAAY,MAAMA,EAAc,EAAK;AAAA,cACrC,eAAa/R;AAAA,cACZ,GAAGtB;AAAA,YAAA;AAAA,UAAA;AAAA,QACN;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ,CAAC;AAED6S,GAAO,cAAc;AChMrB,MAAMtJ,KAA6G;AAAA,EACjH,IAAI,EAAE,QAAQ,IAAI,UAAU,IAAI,SAAS,IAAI,UAAU,GAAA;AAAA,EACvD,IAAI,EAAE,QAAQ,IAAI,UAAU,IAAI,SAAS,IAAI,UAAU,GAAA;AAAA,EACvD,IAAI,EAAE,QAAQ,IAAI,UAAU,IAAI,SAAS,IAAI,UAAU,GAAA;AACzD,GAEayK,KAAYnS,EAA6C,SACpE;AAAA,EACE,MAAA8B,IAAO;AAAA,EACP,SAAAQ,IAAU;AAAA,EACV,MAAA8P,IAAO;AAAA,EACP,OAAA1H;AAAA,EACA,YAAAqB;AAAA,EACA,OAAAsG;AAAA,EACA,WAAApH,IAAY;AAAA,EACZ,UAAAnC;AAAA,EACA,UAAAL,IAAW;AAAA,EACX,WAAAnJ;AAAA,EACA,OAAAC;AAAA,EACA,QAAAE;AAAA,EACA,GAAGtB;AACL,GACAuB,GACA;AACA,QAAM,CAAC4L,GAAWC,CAAY,IAAIjC,EAAS,EAAK,GAC1C,CAACF,GAAWC,CAAY,IAAIC,EAAS,EAAK,GAC1CkC,IAAS9D,GAAW5F,CAAI,GACxB4K,IAAWzB,KAAa,CAAC,CAACoH,GAE1BpC,IAAgC;AAAA,IACpC,SAAS;AAAA,IACT,eAAe;AAAA,IACf,KAAK;AAAA,IACL,GAAG1Q;AAAA,EAAA,GAGCqN,IAA4B;AAAA,IAChC,UAAUpB,EAAO,WAAW;AAAA,IAC5B,YAAY;AAAA,IACZ,OAAO;AAAA,EAAA,GAGH8G,IAAqC;AAAA,IACzC,UAAU;AAAA,IACV,SAAS;AAAA,IACT,YAAY;AAAA,EAAA,GAGRC,IAAgB,MAAqB;AACzC,UAAMC,IAA2B;AAAA,MAC/B,OAAO;AAAA,MACP,QAAQhH,EAAO;AAAA,MACf,UAAUA,EAAO;AAAA,MACjB,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,iBAAiBlJ,MAAY,WAAW,mCAAmC;AAAA,MAC3E,aAAawG,IAAW0C,EAAO,UAAUA,EAAO,WAAW,IAAIA,EAAO;AAAA,MACtE,cAAcA,EAAO;AAAA,MACrB,YAAY;AAAA,MACZ,SAAS;AAAA,MACT,SAAS/C,IAAW,MAAM;AAAA,MAC1B,QAAQA,IAAW,gBAAgB;AAAA,IAAA;AAGrC,WAAInG,MAAY,YACP;AAAA,MACL,GAAGkQ;AAAA,MACH,QAAQ;AAAA,MACR,cAAc,aACZ9F,IACI,gCACApB,IACA,kCACA,8BACN;AAAA,MACA,cAAc;AAAA,MACd,aAAaxC,IAAW0C,EAAO,WAAW,IAAI;AAAA,MAC9C,cAAc;AAAA,MACd,iBAAiB;AAAA,IAAA,IAId;AAAA,MACL,GAAGgH;AAAA,MACH,QAAQ,aACN9F,IACI,gCACApB,IACA,kCACAlC,IACA,gCACA,8BACN;AAAA,MACA,cAAc;AAAA,MACd,WAAWkC,KAAa,CAACoB,IACrB,wCACApB,KAAaoB,IACb,sCACA;AAAA,IAAA;AAAA,EAER,GAEM/B,IAA2B;AAAA,IAC/B,UAAU;AAAA,IACV,MAAMrI,MAAY,YAAY,IAAIkJ,EAAO;AAAA,IACzC,OAAO;AAAA,IACP,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,OAAOA,EAAO;AAAA,IACd,QAAQA,EAAO;AAAA,IACf,eAAe;AAAA,EAAA,GAGXqB,IAA6B;AAAA,IACjC,UAAUrB,EAAO,WAAW;AAAA,IAC5B,OAAOkB,IAAW,gCAAgC;AAAA,EAAA;AAGpD,SACE,gBAAAtI;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWxG,EAAG,qBAAqB,sBAAsBkE,CAAI,IAAI,sBAAsBQ,CAAO,IAAIhD,CAAS;AAAA,MAC3G,OAAO2Q;AAAA,MAEN,UAAA;AAAA,QAAAvF,KAAS,gBAAA5K,EAAC,SAAA,EAAM,OAAO8M,GAAa,UAAAlC,GAAM;AAAA,QAC3C,gBAAAtG;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAOkO;AAAA,YACP,cAAc,MAAMjJ,EAAa,EAAI;AAAA,YACrC,cAAc,MAAMA,EAAa,EAAK;AAAA,YAErC,UAAA;AAAA,cAAAP,KAAY,gBAAAhJ,EAAC,QAAA,EAAK,OAAO6K,GAAY,UAAA7B,GAAS;AAAA,cAC/C,gBAAAhJ;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,KAAAJ;AAAA,kBACA,MAAA0S;AAAA,kBACA,UAAA3J;AAAA,kBACA,OAAO8J,EAAA;AAAA,kBACP,SAAS,MAAMhH,EAAa,EAAI;AAAA,kBAChC,QAAQ,MAAMA,EAAa,EAAK;AAAA,kBAChC,eAAa9L;AAAA,kBACZ,GAAGtB;AAAA,gBAAA;AAAA,cAAA;AAAA,YACN;AAAA,UAAA;AAAA,QAAA;AAAA,SAEA4N,KAAcsG,MACd,gBAAAvS,EAAC,UAAK,OAAO+M,GAAc,eAASd,EAAA,CAAW;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIvD,CAAC;AAEDoG,GAAU,cAAc;AC7IxB,MAAMzK,KAA6G;AAAA,EACjH,IAAI,EAAE,QAAQ,IAAI,UAAU,IAAI,SAAS,IAAI,UAAU,GAAA;AAAA,EACvD,IAAI,EAAE,QAAQ,KAAK,UAAU,IAAI,SAAS,IAAI,UAAU,GAAA;AAAA,EACxD,IAAI,EAAE,QAAQ,KAAK,UAAU,IAAI,SAAS,IAAI,UAAU,GAAA;AAC1D;AAEA,SAAS+K,GAAW,EAAE,MAAA3Q,KAA0B;AAC9C,SACE,gBAAAhC,EAAC,SAAI,OAAOgC,GAAM,QAAQA,GAAM,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,OAChG,4BAAC,QAAA,EAAK,eAAc,SAAQ,gBAAe,SAAQ,GAAE,wFAAA,CAAwF,EAAA,CAC/I;AAEJ;AAEO,MAAM4Q,KAAY1S,EAA6C,SACpE;AAAA,EACE,MAAA8B,IAAO;AAAA,EACP,SAAAQ,IAAU;AAAA,EACV,QAAAqQ;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,SAAAC;AAAA,EACA,OAAAnI;AAAA,EACA,aAAAjH;AAAA,EACA,OAAA4O;AAAA,EACA,WAAApH,IAAY;AAAA,EACZ,UAAA2C;AAAA,EACA,MAAAkF;AAAA,EACA,UAAArK,IAAW;AAAA,EACX,WAAAnJ;AAAA,EACA,OAAAC;AAAA,EACA,QAAAE;AAAA,EACA,GAAGtB;AACL,GACAuB,GACA;AACA,QAAM,CAACqT,GAAYC,CAAa,IAAI1J,EAAS,EAAK,GAC5C,CAACgC,GAAWC,CAAY,IAAIjC,EAAS,EAAK,GAC1CmI,IAAWxC,EAAyB,IAAI,GACxCzD,IAAS9D,GAAW5F,CAAI,GACxB4K,IAAWzB,KAAa,CAAC,CAACoH,GAE1BY,IAAc1D;AAAA,IAClB,CAAC2D,MAA8B;AAC7B,UAAI,CAACA,KAAYA,EAAS,WAAW,EAAG;AAExC,UAAIC,KAAQ,MAAM,KAAKD,CAAQ;AAG/B,MAAIL,MACFM,KAAQA,GAAM,OAAO,CAACC,OAASA,GAAK,QAAQP,CAAO,IAIjD,CAACD,KAAYO,GAAM,SAAS,MAC9BA,KAAQ,CAACA,GAAM,CAAC,CAAC,IAGnBvF,KAAA,QAAAA,EAAWuF;AAAA,IACb;AAAA,IACA,CAACN,GAASD,GAAUhF,CAAQ;AAAA,EAAA,GAGxByF,IAAiB9D,EAAY,CAAC3M,MAAiB;AACnD,IAAAA,EAAE,eAAA,GACFA,EAAE,gBAAA,GACG6F,KACHuK,EAAc,EAAI;AAAA,EAEtB,GAAG,CAACvK,CAAQ,CAAC,GAEP6K,IAAkB/D,EAAY,CAAC3M,MAAiB;AACpD,IAAAA,EAAE,eAAA,GACFA,EAAE,gBAAA,GACFoQ,EAAc,EAAK;AAAA,EACrB,GAAG,CAAA,CAAE,GAECO,IAAahE;AAAA,IACjB,CAAC3M,MAAiB;AAChB,MAAAA,EAAE,eAAA,GACFA,EAAE,gBAAA,GACFoQ,EAAc,EAAK,GAEdvK,KACHwK,EAAYrQ,EAAE,aAAa,KAAK;AAAA,IAEpC;AAAA,IACA,CAAC6F,GAAUwK,CAAW;AAAA,EAAA,GAGlBlD,IAAeR;AAAA,IACnB,CAAC3M,MAA2C;AAC1C,MAAAqQ,EAAYrQ,EAAE,OAAO,KAAK,GAEtB6O,EAAS,YACXA,EAAS,QAAQ,QAAQ;AAAA,IAE7B;AAAA,IACA,CAACwB,CAAW;AAAA,EAAA,GAGRO,IAAcjE,EAAY,MAAM;;AACpC,IAAK9G,MACHgL,IAAAhC,EAAS,YAAT,QAAAgC,EAAkB;AAAA,EAEtB,GAAG,CAAChL,CAAQ,CAAC,GAEPiL,IAAgBnE;AAAA,IACpB,CAAC3M,MAA2B;;AAC1B,OAAKA,EAAE,QAAQ,WAAWA,EAAE,QAAQ,QAAQ,CAAC6F,MAC3C7F,EAAE,eAAA,IACF6Q,KAAAhC,EAAS,YAAT,QAAAgC,GAAkB;AAAA,IAEtB;AAAA,IACA,CAAChL,CAAQ;AAAA,EAAA,GAGLwH,IAAgC;AAAA,IACpC,SAAS;AAAA,IACT,eAAe;AAAA,IACf,KAAK;AAAA,IACL,GAAG1Q;AAAA,EAAA,GAGCqN,IAA4B;AAAA,IAChC,UAAUpB,EAAO;AAAA,IACjB,YAAY;AAAA,IACZ,OAAO;AAAA,EAAA,GAGHmI,IAA+B;AAAA,IACnC,SAAS;AAAA,IACT,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,KAAK;AAAA,IACL,WAAWnI,EAAO;AAAA,IAClB,SAASA,EAAO;AAAA,IAChB,QAAQ,cACNkB,IACI,gCACAqG,KAEAzH,IADA,kCAGA,8BACN;AAAA,IACA,cAAc;AAAA,IACd,iBAAiByH,IACb,6BACA;AAAA,IACJ,QAAQtK,IAAW,gBAAgB;AAAA,IACnC,SAASA,IAAW,MAAM;AAAA,IAC1B,YAAY;AAAA,IACZ,SAAS;AAAA,EAAA,GAGLmL,IAAoC;AAAA,IACxC,OAAOb,IACH,kCACA;AAAA,IACJ,YAAY;AAAA,EAAA,GAGRc,IAAoC;AAAA,IACxC,SAAS;AAAA,IACT,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,KAAK;AAAA,IACL,WAAW;AAAA,EAAA,GAGPC,IAAkC;AAAA,IACtC,UAAUtI,EAAO;AAAA,IACjB,YAAY;AAAA,IACZ,OAAO;AAAA,EAAA,GAGHuI,IAAoC;AAAA,IACxC,UAAUvI,EAAO,WAAW;AAAA,IAC5B,OAAO;AAAA,EAAA,GAGHwI,KAA6B;AAAA,IACjC,OAAO;AAAA,IACP,YAAY;AAAA,EAAA,GAGRlH,KAA4B;AAAA,IAChC,UAAUtB,EAAO,WAAW;AAAA,IAC5B,OAAO;AAAA,EAAA,GAGHyI,KAAqBrB,IACvB,uCACA;AAEJ,SACE,gBAAAxO;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWxG,EAAG,qBAAqB,sBAAsBkE,CAAI,IAAI,sBAAsBQ,CAAO,IAAIhD,CAAS;AAAA,MAC3G,OAAO2Q;AAAA,MAEN,UAAA;AAAA,QAAAvF,KAAS,gBAAA5K,EAAC,SAAA,EAAM,OAAO8M,GAAa,UAAAlC,GAAM;AAAA,QAC3C,gBAAAtG;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAOuP;AAAA,YACP,YAAYN;AAAA,YACZ,aAAaC;AAAA,YACb,QAAQC;AAAA,YACR,SAASC;AAAA,YACT,WAAWE;AAAA,YACX,SAAS,MAAMnI,EAAa,EAAI;AAAA,YAChC,QAAQ,MAAMA,EAAa,EAAK;AAAA,YAChC,UAAU9C,IAAW,KAAK;AAAA,YAC1B,MAAK;AAAA,YACL,cAAY,OAAOhF,CAAW,KAAKwQ;AAAA,YAEnC,UAAA;AAAA,cAAA,gBAAAnU,EAAC,OAAA,EAAI,OAAO8T,GACT,UAAAd,uBAASL,IAAA,EAAW,MAAMjH,EAAO,SAAA,CAAU,EAAA,CAC9C;AAAA,cACA,gBAAApH,EAAC,OAAA,EAAI,OAAOyP,GACV,UAAA;AAAA,gBAAA,gBAAA/T,EAAC,QAAA,EAAK,OAAOgU,GACV,UAAAf,IAAa,oBACZ,gBAAA3O,EAAA8P,IAAA,EACE,UAAA;AAAA,kBAAA,gBAAApU,EAAC,QAAA,EAAK,OAAOkU,IAAa,UAAA,mBAAe;AAAA,kBAAO;AAAA,gBAAA,EAAA,CAClD,EAAA,CAEJ;AAAA,gBACCvQ,KAAe,gBAAA3D,EAAC,QAAA,EAAK,OAAOiU,GAAqB,UAAAtQ,EAAA,CAAY;AAAA,cAAA,EAAA,CAChE;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAED4O,KAAS,gBAAAvS,EAAC,QAAA,EAAK,OAAOgN,IAAa,UAAAuF,GAAM;AAAA,QAC1C,gBAAAvS;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,KAAK,CAACoS,MAAS;AACZ,cAAAT,EAA6D,UAAUS,GACpE,OAAOxS,KAAQ,aAAYA,EAAIwS,CAAI,IAC9BxS,QAAS,UAAUwS;AAAA,YAC9B;AAAA,YACA,MAAK;AAAA,YACL,QAAAS;AAAA,YACA,UAAAC;AAAA,YACA,UAAAnK;AAAA,YACA,UAAUsH;AAAA,YACV,OAAO,EAAE,SAAS,OAAA;AAAA,YAClB,eAAatQ;AAAA,YACZ,GAAGtB;AAAA,UAAA;AAAA,QAAA;AAAA,MACN;AAAA,IAAA;AAAA,EAAA;AAGN,CAAC;AAEDuU,GAAU,cAAc;ACpSxB,IAAIrU,KAAY;AAEhB,SAAS8V,GAAiB5V,GAAwB;AAChD,SAAO,GAAGA,CAAM,IAAI,EAAEF,EAAS;AACjC;AAEO,SAASiO,GAAM/N,IAAS,UAAkB;AAC/C,QAAM,CAAC4N,GAAIiI,CAAK,IAAI9K,EAAiB,EAAE;AAEvC,SAAAqG,EAAU,MAAM;AACd,IAAAyE,EAAMD,GAAiB5V,CAAM,CAAC;AAAA,EAChC,GAAG,CAACA,CAAM,CAAC,GAGJ4N,KAAMgI,GAAiB5V,CAAM;AACtC;AAEO,SAAS8V,GAAOC,GAAe/V,IAAS,UAAoB;AACjE,QAAM,CAACgW,GAAKC,CAAM,IAAIlL,EAAmB,CAAA,CAAE;AAE3C,SAAAqG,EAAU,MAAM;AACd,IAAA6E,EAAO,MAAM,KAAK,EAAE,QAAQF,EAAA,GAAS,MAAMH,GAAiB5V,CAAM,CAAC,CAAC;AAAA,EACtE,GAAG,CAAC+V,GAAO/V,CAAM,CAAC,GAEXgW,EAAI,SAASA,IAAM,MAAM,KAAK,EAAE,QAAQD,EAAA,GAAS,MAAMH,GAAiB5V,CAAM,CAAC;AACxF;ACQA,MAAMmJ,KAA4F;AAAA,EAChG,IAAI,EAAE,WAAW,IAAI,YAAY,IAAI,KAAK,EAAA;AAAA,EAC1C,IAAI,EAAE,WAAW,IAAI,YAAY,IAAI,KAAK,EAAA;AAAA,EAC1C,IAAI,EAAE,WAAW,IAAI,YAAY,IAAI,KAAK,EAAA;AAC5C,GAEa+M,KAAYzU,EAA2C,SAClE;AAAA,EACE,MAAA8B,IAAO;AAAA,EACP,OAAA4I;AAAA,EACA,UAAAgK,IAAW;AAAA,EACX,YAAA3I;AAAA,EACA,OAAAsG;AAAA,EACA,WAAApH,IAAY;AAAA,EACZ,UAAAxC,IAAW;AAAA,EACX,SAAA8D;AAAA,EACA,aAAAiE,IAAc;AAAA,EACd,YAAAmE,IAAa;AAAA,EACb,WAAArV;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC;AAAA,EACA,GAAGtB;AACL,GACAuB,GACA;AACA,QAAM2M,IAAcC,GAAM,OAAO,GAC3BH,IAAKI,KAAWF,GAChBG,IAAW,GAAGL,CAAE,WAChBM,IAAU,GAAGN,CAAE,UACfX,IAAS9D,GAAW5F,CAAI,GACxB4K,IAAWzB,KAAa,CAAC,CAACoH,GAE1BpC,IAAgC;AAAA,IACpC,SAAS;AAAA,IACT,eAAeO,MAAgB,eAAe,QAAQ;AAAA,IACtD,KAAKA,MAAgB,eAAe,KAAKhF,EAAO;AAAA,IAChD,YAAYgF,MAAgB,eAAe,eAAe;AAAA,IAC1D,SAAS/H,IAAW,MAAM;AAAA,IAC1B,GAAGlJ;AAAA,EAAA,GAGC0O,IAAqC;AAAA,IACzC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,KAAK;AAAA,IACL,GAAIuC,MAAgB,gBAAgB;AAAA,MAClC,OAAOmE;AAAA,MACP,YAAY;AAAA,MACZ,YAAY7S,MAAS,OAAO,KAAKA,MAAS,OAAO,KAAK;AAAA,IAAA;AAAA,EACxD,GAGI8K,IAA4B;AAAA,IAChC,UAAUpB,EAAO;AAAA,IACjB,YAAY;AAAA,IACZ,OAAO/C,IACH,mCACA;AAAA,IACJ,YAAY;AAAA,EAAA,GAGRmM,IAA+B;AAAA,IACnC,OAAO;AAAA,IACP,YAAY;AAAA,EAAA,GAGR1Q,IAA8B;AAAA,IAClC,SAAS;AAAA,IACT,eAAe;AAAA,IACf,KAAKsH,EAAO;AAAA,IACZ,MAAM;AAAA,EAAA,GAGFqB,IAA6B;AAAA,IACjC,UAAUrB,EAAO;AAAA,IACjB,OAAOkB,IAAW,gCAAgC;AAAA,IAClD,YAAY;AAAA,EAAA,GAIRmI,IAAa;AAAA,IACjB,IAAA1I;AAAA,IACA,oBAAoBJ,KAAcsG,IAASA,IAAQ5F,IAAUD,IAAY;AAAA,IACzE,gBAAgBE,IAAW,KAAO;AAAA,EAAA;AAGpC,SACE,gBAAAtI;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAA1E;AAAA,MACA,WAAW9B,EAAG,qBAAqB,sBAAsBkE,CAAI,IAAI,sBAAsB0O,CAAW,IAAIlR,CAAS;AAAA,MAC/G,OAAO2Q;AAAA,MACP,eAAaxQ;AAAA,MACZ,GAAGtB;AAAA,MAEH,UAAA;AAAA,QAAAuM,KACC,gBAAA5K,EAAC,SAAI,OAAOmO,GACV,4BAAC,SAAA,EAAM,SAAS9B,GAAI,OAAOS,GACxB,UAAA;AAAA,UAAAlC;AAAA,UACAgK,KAAY,gBAAA5U,EAAC,QAAA,EAAK,OAAO8U,GAAe,eAAY,QAAO,UAAA,IAAA,CAAC;AAAA,QAAA,EAAA,CAC/D,EAAA,CACF;AAAA,QAEF,gBAAAxQ,EAAC,OAAA,EAAI,OAAOF,GACT,UAAA;AAAA,UAAA,OAAO1E,KAAa,aAAaA,EAASqV,CAAU,IAAIrV;AAAA,WACvDuM,KAAcsG,MACd,gBAAAvS;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,IAAIuS,IAAQ5F,IAAUD;AAAA,cACtB,OAAOK;AAAA,cACP,MAAMwF,IAAQ,UAAU;AAAA,cAEvB,UAAAA,KAAStG;AAAA,YAAA;AAAA,UAAA;AAAA,QACZ,EAAA,CAEJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN,CAAC;AAED0I,GAAU,cAAc;ACtIxB,MAAM/M,KAA0F;AAAA,EAC9F,IAAI,EAAE,UAAU,IAAI,UAAU,IAAI,KAAK,EAAA;AAAA,EACvC,IAAI,EAAE,UAAU,IAAI,UAAU,IAAI,KAAK,EAAA;AAAA,EACvC,IAAI,EAAE,UAAU,IAAI,UAAU,IAAI,KAAK,EAAA;AACzC;AAEA,SAASoN,GAAU,EAAE,MAAAhT,KAA0B;AAC7C,SACE,gBAAAhC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAOgC;AAAA,MACP,QAAQA;AAAA,MACR,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,eAAY;AAAA,MAEZ,UAAA,gBAAAhC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,GAAE;AAAA,UACF,QAAO;AAAA,UACP,aAAY;AAAA,UACZ,eAAc;AAAA,UACd,gBAAe;AAAA,QAAA;AAAA,MAAA;AAAA,IACjB;AAAA,EAAA;AAGN;AAEO,MAAMiV,KAAa/U,EAA6C,SACrE;AAAA,EACE,MAAA8B,IAAO;AAAA,EACP,UAAAtC;AAAA,EACA,UAAAwV,IAAW;AAAA,EACX,MAAAlC;AAAA,EACA,WAAAxT;AAAA,EACA,OAAAC;AAAA,EACA,QAAAE;AAAA,EACA,GAAGtB;AACL,GACAuB,GACA;AACA,QAAM8L,IAAS9D,GAAW5F,CAAI,GAExBgL,IAA4B;AAAA,IAChC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,KAAKtB,EAAO;AAAA,IACZ,UAAUA,EAAO;AAAA,IACjB,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,GAAGjM;AAAA,EAAA,GAGCoL,IAA2B;AAAA,IAC/B,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,YAAY;AAAA,EAAA;AAGd,SAAKnL,IAGH,gBAAA4E;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAA1E;AAAA,MACA,WAAW9B,EAAG,sBAAsB,uBAAuBkE,CAAI,IAAIxC,CAAS;AAAA,MAC5E,OAAOwN;AAAA,MACP,MAAK;AAAA,MACL,aAAU;AAAA,MACV,eAAarN;AAAA,MACZ,GAAGtB;AAAA,MAEH,UAAA;AAAA,QAAA6W,KACC,gBAAAlV,EAAC,QAAA,EAAK,OAAO6K,GACV,UAAAmI,uBAASgC,IAAA,EAAU,MAAMtJ,EAAO,SAAA,CAAU,EAAA,CAC7C;AAAA,QAEDhM;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,IAjBiB;AAoBxB,CAAC;AAEDuV,GAAW,cAAc;AChFzB,MAAME,KAAqC;AAAA,EACzC,IAAI5Z,EAAQ,CAAC;AAAA,EACb,IAAIA,EAAQ,CAAC;AAAA,EACb,IAAIA,EAAQ,CAAC;AAAA,EACb,IAAIA,EAAQ,CAAC;AACf,GAEa6Z,KAAOlV,EAAuC,SACzD;AAAA,EACE,KAAAiF,IAAM;AAAA,EACN,UAAAwD;AAAA,EACA,UAAAjJ;AAAA,EACA,WAAAF;AAAA,EACA,OAAAC;AAAA,EACA,QAAAE;AAAA,EACA,UAAA0V;AAAA,EACA,GAAGhX;AACL,GACAuB,GACA;AACA,QAAM0V,IAAY;AAAA,IAChB,SAAS;AAAA,IACT,eAAe;AAAA,IACf,KAAKH,GAAUhQ,CAAG;AAAA,IAClB,GAAG1F;AAAA,EAAA,GAGC8V,IAAe,CAACzS,MAAwC;AAC5D,QAAI6F,GAAU;AACZ,MAAA7F,EAAE,eAAA;AACF;AAAA,IACF;AACA,IAAAuS,KAAA,QAAAA,EAAWvS;AAAA,EACb;AAEA,SACE,gBAAA9C;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAJ;AAAA,MACA,WAAW9B;AAAA,QACT;AAAA,QACA,oBAAoBqH,CAAG;AAAA,QACvBwD,KAAY;AAAA,QACZnJ;AAAA,MAAA;AAAA,MAEF,OAAO8V;AAAA,MACP,UAAUC;AAAA,MACV,iBAAe5M;AAAA,MACf,eAAahJ;AAAA,MACZ,GAAGtB;AAAA,MAEJ,UAAA,gBAAA2B;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,UAAA2I;AAAA,UACA,OAAO;AAAA,YACL,QAAQ;AAAA,YACR,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,UAAU;AAAA,UAAA;AAAA,UAGX,UAAAjJ;AAAA,QAAA;AAAA,MAAA;AAAA,IACH;AAAA,EAAA;AAGN,CAAC;AAED0V,GAAK,cAAc;AC7DnB,MAAMnI,KAA0D;AAAA,EAC9D,IAAI,EAAE,UAAUtQ,GAAU,GAAA;AAAA,EAC1B,IAAI,EAAE,UAAUA,GAAU,GAAA;AAAA,EAC1B,IAAI,EAAE,UAAUA,GAAU,GAAA;AAC5B,GAEa6Y,KAAYtV,EAA6C,SACpE;AAAA,EACE,UAAAR;AAAA,EACA,MAAAsC,IAAO;AAAA,EACP,UAAA4S;AAAA,EACA,UAAAjM;AAAA,EACA,aAAAhF;AAAA,EACA,WAAAnE;AAAA,EACA,OAAAC;AAAA,EACA,QAAAE;AAAA,EACA,GAAGtB;AACL,GACAuB,GACA;AACA,QAAM8L,IAASuB,GAAWjL,CAAI,GAExB8K,IAAa;AAAA,IACjB,SAAS;AAAA,IACT,YAAY9G,GAAW,MAAM;AAAA,IAC7B,UAAU0F,EAAO;AAAA,IACjB,YAAY7O,GAAY;AAAA,IACxB,YAAYmJ,GAAW,MAAM;AAAA,IAC7B,OAAO2C,IAAW,mCAAmC;AAAA,IACrD,QAAQA,IAAW,gBAAgB;AAAA,IACnC,cAAcpN,EAAQ,CAAC;AAAA,IACvB,GAAGkE;AAAA,EAAA,GAGCqV,IAAgB;AAAA,IACpB,OAAO;AAAA,IACP,YAAYvZ,EAAQ,GAAG;AAAA,EAAA,GAGnB2I,IAAmB;AAAA,IACvB,SAAS;AAAA,IACT,UAAUvH,GAAU;AAAA,IACpB,YAAYE,GAAY;AAAA,IACxB,OAAO;AAAA,IACP,WAAWtB,EAAQ,GAAG;AAAA,EAAA;AAGxB,SACE,gBAAA+I;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAA1E;AAAA,MACA,WAAW9B;AAAA,QACT;AAAA,QACA,sBAAsBkE,CAAI;AAAA,QAC1B2G,KAAY;AAAA,QACZnJ;AAAA,MAAA;AAAA,MAEF,OAAOsN;AAAA,MACP,eAAanN;AAAA,MACZ,GAAGtB;AAAA,MAEJ,UAAA;AAAA,QAAA,gBAAAiG,EAAC,QAAA,EAAK,WAAU,2BACb,UAAA;AAAA,UAAA5E;AAAA,UACAkV,uBACE,QAAA,EAAK,WAAU,+BAA8B,OAAOE,GAAe,eAAY,QAAO,UAAA,IAAA,CAEvF;AAAA,QAAA,GAEJ;AAAA,QACCnR,KACC,gBAAA3D,EAAC,QAAA,EAAK,WAAU,kCAAiC,OAAOkE,GACrD,UAAAP,EAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR,CAAC;AAED6R,GAAU,cAAc;AClExB,MAAML,KAA0C;AAAA,EAC9C,MAAM;AAAA,EACN,IAAI5Z,EAAQ,GAAG;AAAA,EACf,IAAIA,EAAQ,CAAC;AAAA,EACb,IAAIA,EAAQ,GAAG;AACjB,GAEaka,KAAYvV,EAA2C,SAClE;AAAA,EACE,OAAA0K;AAAA,EACA,SAAA6B;AAAA,EACA,WAAAiJ,IAAY;AAAA,EACZ,UAAAd;AAAA,EACA,UAAAjM;AAAA,EACA,aAAAhF;AAAA,EACA,OAAA4O;AAAA,EACA,YAAAtG;AAAA,EACA,KAAA9G,IAAM;AAAA,EACN,UAAAzF;AAAA,EACA,WAAAF;AAAA,EACA,OAAAC;AAAA,EACA,QAAAE;AAAA,EACA,GAAGtB;AACL,GACAuB,GACA;AACA,QAAM2M,IAAcC,GAAA,GACdH,IAAKI,KAAWF,GAEhB4D,IAAiB;AAAA,IACrB,SAAS;AAAA,IACT,eAAe;AAAA,IACf,KAAKgF,GAAUhQ,CAAG;AAAA,IAClB,GAAG1F;AAAA,EAAA,GAGCkW,IAAe;AAAA,IACnB,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,WAAWpa,EAAQ,GAAG;AAAA,EAAA,GAGlByR,IAAa;AAAA,IACjB,GAAG2I;AAAA,IACH,OAAO;AAAA,EAAA,GAGH5I,IAAc;AAAA,IAClB,GAAG4I;AAAA,IACH,OAAO;AAAA,EAAA;AAGT,SACE,gBAAArR;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAA1E;AAAA,MACA,WAAW9B;AAAA,QACT;AAAA,QACA,CAAC,CAACyU,KAAS;AAAA,QACX,CAAC,CAAC5J,KAAY;AAAA,QACdnJ;AAAA,MAAA;AAAA,MAEF,OAAO2Q;AAAA,MACP,eAAaxQ;AAAA,MACZ,GAAGtB;AAAA,MAEH,UAAA;AAAA,QAAAuM,KACC,gBAAA5K;AAAA,UAACwV;AAAA,UAAA;AAAA,YACC,SAASnJ;AAAA,YACT,MAAMqJ;AAAA,YACN,UAAAd;AAAA,YACA,UAAAjM;AAAA,YACA,aAAAhF;AAAA,YAEC,UAAAiH;AAAA,UAAA;AAAA,QAAA;AAAA,QAGJlL;AAAA,QACA6S,uBACE,QAAA,EAAK,WAAU,4BAA2B,OAAOvF,GAAY,MAAK,SAChE,UAAAuF,EAAA,CACH;AAAA,QAED,CAACA,KAAStG,KACT,gBAAAjM,EAAC,UAAK,WAAU,6BAA4B,OAAO+M,GAChD,UAAAd,EAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR,CAAC;AAEDwJ,GAAU,cAAc;ACxFxB,MAAMG,KAAwC;AAAA,EAC5C,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,MAAM;AACR;AAGA,SAASC,KAAY;AACnB,SACE,gBAAA7V,EAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QACnD,UAAA,gBAAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,GAAE;AAAA,MACF,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,IAAA;AAAA,EAAA,GAElB;AAEJ;AAEO,MAAM8V,KAAQ5V,EAAuC,SAC1D;AAAA,EACE,QAAA6V;AAAA,EACA,SAAAC;AAAA,EACA,MAAAhU,IAAO;AAAA,EACP,OAAA0B;AAAA,EACA,aAAAC;AAAA,EACA,qBAAAsS,IAAsB;AAAA,EACtB,eAAAC,IAAgB;AAAA,EAChB,iBAAAC,IAAkB;AAAA,EAClB,WAAA3W;AAAA,EACA,OAAAC;AAAA,EACA,QAAAE;AAAA,EACA,UAAAD;AAAA,EACA,GAAGrB;AACL,GACAuB,GACA;AACA,QAAMwW,IAAWjH,EAAuB,IAAI,GACtCkH,IAAwBlH,EAA2B,IAAI;AAG7D,EAAAU,EAAU,MAAM;AACd,QAAI,CAACkG,EAAQ;AAEb,IAAAM,EAAsB,UAAU,SAAS;AACzC,UAAMC,IAAQF,EAAS;AACvB,IAAIE,KACFA,EAAM,MAAA;AAGR,UAAM1C,IAAgB,CAAC9Q,MAAqB;AAC1C,UAAIA,EAAE,QAAQ,YAAYoT,GAAe;AACvC,QAAAF,EAAA;AACA;AAAA,MACF;AAEA,UAAIlT,EAAE,QAAQ,SAASwT,GAAO;AAC5B,cAAMC,IAAoBD,EAAM;AAAA,UAC9B;AAAA,QAAA,GAEIE,IAAeD,EAAkB,CAAC,GAClCE,IAAcF,EAAkBA,EAAkB,SAAS,CAAC;AAElE,QAAIzT,EAAE,YAAY,SAAS,kBAAkB0T,KAC3C1T,EAAE,eAAA,GACF2T,KAAA,QAAAA,EAAa,WACJ,CAAC3T,EAAE,YAAY,SAAS,kBAAkB2T,MACnD3T,EAAE,eAAA,GACF0T,KAAA,QAAAA,EAAc;AAAA,MAElB;AAAA,IACF;AAEA,oBAAS,iBAAiB,WAAW5C,CAAa,GAClD,SAAS,KAAK,MAAM,WAAW,UAExB,MAAM;;AACX,eAAS,oBAAoB,WAAWA,CAAa,GACrD,SAAS,KAAK,MAAM,WAAW,KAC/BD,IAAA0C,EAAsB,YAAtB,QAAA1C,EAA+B;AAAA,IACjC;AAAA,EACF,GAAG,CAACoC,GAAQG,GAAeF,CAAO,CAAC;AAEnC,QAAMU,IAAqBjH;AAAA,IACzB,CAAC3M,MAAwB;AACvB,MAAIA,EAAE,WAAWA,EAAE,iBAAiBmT,KAClCD,EAAA;AAAA,IAEJ;AAAA,IACA,CAACC,GAAqBD,CAAO;AAAA,EAAA;AAG/B,MAAI,CAACD,EAAQ,QAAO;AAEpB,QAAMY,IAA8B;AAAA,IAClC,UAAU;AAAA,IACV,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,IAChB,WAAW;AAAA,EAAA,GAGPC,IAA4B;AAAA,IAChC,UAAU;AAAA,IACV,OAAO;AAAA,IACP,UAAUhB,GAAW5T,CAAI;AAAA,IACzB,WAAWA,MAAS,SAAS,uBAAuB;AAAA,IACpD,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,WAAW;AAAA,IACX,SAAS;AAAA,IACT,eAAe;AAAA,IACf,UAAU;AAAA,IACV,WAAW;AAAA,IACX,SAAS;AAAA,IACT,GAAGvC;AAAA,EAAA,GAGCyD,IAA6B;AAAA,IACjC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,SAAS;AAAA,IACT,cAAc;AAAA,EAAA,GAGVc,IAAqC;AAAA,IACzC,SAAS;AAAA,IACT,eAAe;AAAA,IACf,KAAK;AAAA,EAAA,GAGDC,IAA4B;AAAA,IAChC,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,YAAY;AAAA,EAAA,GAGRC,IAAkC;AAAA,IACtC,UAAU;AAAA,IACV,OAAO;AAAA,IACP,QAAQ;AAAA,EAAA,GAGJ2S,IAAkC;AAAA,IACtC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,YAAY;AAAA,EAAA,GAGRzS,IAA8B;AAAA,IAClC,MAAM;AAAA,IACN,UAAU;AAAA,IACV,SAAS;AAAA,EAAA,GAGL0S,IACJ,gBAAAxS,EAAA8P,IAAA,EACE,UAAA;AAAA,IAAA,gBAAApU,EAAC,SAAA,EACE,UAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAUH;AAAA,IACA,gBAAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO2W;AAAA,QACP,SAASD;AAAA,QACT,eAAY;AAAA,QAEZ,UAAA,gBAAApS;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,KAAK,CAAC8N,MAAS;AACZ,cAAAgE,EAA2D,UAAUhE,GAClE,OAAOxS,KAAQ,aAAYA,EAAIwS,CAAI,IAC9BxS,MAAMA,EAAsD,UAAUwS;AAAA,YACjF;AAAA,YACA,MAAK;AAAA,YACL,cAAW;AAAA,YACX,mBAAiB1O,IAAQ,uBAAuB;AAAA,YAChD,oBAAkBC,IAAc,6BAA6B;AAAA,YAC7D,WAAW7F,EAAG,gBAAgB,iBAAiBkE,CAAI,IAAIxC,CAAS;AAAA,YAChE,OAAOoX;AAAA,YACP,UAAU;AAAA,YACV,eAAajX;AAAA,YACZ,GAAGtB;AAAA,YAEF,UAAA;AAAA,eAAAqF,KAASyS,MACT,gBAAA7R,EAAC,OAAA,EAAI,WAAU,uBAAsB,OAAOpB,GAC1C,UAAA;AAAA,gBAAA,gBAAAoB,EAAC,OAAA,EAAI,OAAON,GACT,UAAA;AAAA,kBAAAN,uBACE,MAAA,EAAG,IAAG,sBAAqB,OAAOO,GAChC,UAAAP,GACH;AAAA,kBAEDC,KACC,gBAAA3D,EAAC,KAAA,EAAE,IAAG,4BAA2B,OAAOkE,GACrC,UAAAP,EAAA,CACH;AAAA,gBAAA,GAEJ;AAAA,gBACCwS,KACC,gBAAAnW;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,WAAU;AAAA,oBACV,OAAO6W;AAAA,oBACP,SAASb;AAAA,oBACT,cAAW;AAAA,oBACX,cAAc,CAAClT,MAAM;AACnB,sBAAAA,EAAE,cAAc,MAAM,kBAAkB,kCACxCA,EAAE,cAAc,MAAM,QAAQ;AAAA,oBAChC;AAAA,oBACA,cAAc,CAACA,MAAM;AACnB,sBAAAA,EAAE,cAAc,MAAM,kBAAkB,eACxCA,EAAE,cAAc,MAAM,QAAQ;AAAA,oBAChC;AAAA,oBAEA,4BAAC+S,IAAA,CAAA,CAAU;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACb,GAEJ;AAAA,gCAGD,OAAA,EAAI,WAAU,wBAAuB,OAAOzR,GAC1C,UAAA1E,EAAA,CACH;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EACF,GACF;AAGF,SAAOqX,GAAaD,GAAc,SAAS,IAAI;AACjD,CAAC;AAEDhB,GAAM,cAAc;ACnQpB,MAAMkB,KAA8G;AAAA,EAClH,MAAM;AAAA,IACJ,MACE,gBAAA1S,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QACnD,UAAA;AAAA,MAAA,gBAAAtE,EAAC,UAAA,EAAO,IAAG,KAAI,IAAG,KAAI,GAAE,OAAM,QAAO,gBAAe,aAAY,MAAA,CAAM;AAAA,MACtE,gBAAAA,EAAC,UAAK,GAAE,WAAU,QAAO,gBAAe,aAAY,OAAM,eAAc,QAAA,CAAQ;AAAA,MAChF,gBAAAA,EAAC,YAAO,IAAG,KAAI,IAAG,OAAM,GAAE,QAAO,MAAK,eAAA,CAAe;AAAA,IAAA,GACvD;AAAA,IAEF,QAAQ;AAAA,MACN,QAAQ;AAAA,QACN,iBAAiB;AAAA,QACjB,OAAO;AAAA,QACP,aAAa;AAAA,MAAA;AAAA,MAEf,OAAO;AAAA,QACL,iBAAiB;AAAA,QACjB,OAAO;AAAA,QACP,aAAa;AAAA,MAAA;AAAA,MAEf,SAAS;AAAA,QACP,iBAAiB;AAAA,QACjB,OAAO;AAAA,QACP,aAAa;AAAA,MAAA;AAAA,IACf;AAAA,EACF;AAAA,EAEF,SAAS;AAAA,IACP,MACE,gBAAAsE,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QACnD,UAAA;AAAA,MAAA,gBAAAtE,EAAC,UAAA,EAAO,IAAG,KAAI,IAAG,KAAI,GAAE,OAAM,QAAO,gBAAe,aAAY,MAAA,CAAM;AAAA,MACtE,gBAAAA,EAAC,QAAA,EAAK,GAAE,kBAAiB,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,QAAA,CAAQ;AAAA,IAAA,GAChH;AAAA,IAEF,QAAQ;AAAA,MACN,QAAQ;AAAA,QACN,iBAAiB;AAAA,QACjB,OAAO;AAAA,QACP,aAAa;AAAA,MAAA;AAAA,MAEf,OAAO;AAAA,QACL,iBAAiB;AAAA,QACjB,OAAO;AAAA,QACP,aAAa;AAAA,MAAA;AAAA,MAEf,SAAS;AAAA,QACP,iBAAiB;AAAA,QACjB,OAAO;AAAA,QACP,aAAa;AAAA,MAAA;AAAA,IACf;AAAA,EACF;AAAA,EAEF,SAAS;AAAA,IACP,MACE,gBAAAsE,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QACnD,UAAA;AAAA,MAAA,gBAAAtE,EAAC,QAAA,EAAK,GAAE,yBAAwB,QAAO,gBAAe,aAAY,OAAM,gBAAe,QAAA,CAAQ;AAAA,MAC/F,gBAAAA,EAAC,UAAK,GAAE,WAAU,QAAO,gBAAe,aAAY,OAAM,eAAc,QAAA,CAAQ;AAAA,MAChF,gBAAAA,EAAC,YAAO,IAAG,KAAI,IAAG,QAAO,GAAE,QAAO,MAAK,eAAA,CAAe;AAAA,IAAA,GACxD;AAAA,IAEF,QAAQ;AAAA,MACN,QAAQ;AAAA,QACN,iBAAiB;AAAA,QACjB,OAAO;AAAA,QACP,aAAa;AAAA,MAAA;AAAA,MAEf,OAAO;AAAA,QACL,iBAAiB;AAAA,QACjB,OAAO;AAAA,QACP,aAAa;AAAA,MAAA;AAAA,MAEf,SAAS;AAAA,QACP,iBAAiB;AAAA,QACjB,OAAO;AAAA,QACP,aAAa;AAAA,MAAA;AAAA,IACf;AAAA,EACF;AAAA,EAEF,OAAO;AAAA,IACL,MACE,gBAAAsE,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QACnD,UAAA;AAAA,MAAA,gBAAAtE,EAAC,UAAA,EAAO,IAAG,KAAI,IAAG,KAAI,GAAE,OAAM,QAAO,gBAAe,aAAY,MAAA,CAAM;AAAA,MACtE,gBAAAA,EAAC,UAAK,GAAE,wCAAuC,QAAO,gBAAe,aAAY,OAAM,eAAc,QAAA,CAAQ;AAAA,IAAA,GAC/G;AAAA,IAEF,QAAQ;AAAA,MACN,QAAQ;AAAA,QACN,iBAAiB;AAAA,QACjB,OAAO;AAAA,QACP,aAAa;AAAA,MAAA;AAAA,MAEf,OAAO;AAAA,QACL,iBAAiB;AAAA,QACjB,OAAO;AAAA,QACP,aAAa;AAAA,MAAA;AAAA,MAEf,SAAS;AAAA,QACP,iBAAiB;AAAA,QACjB,OAAO;AAAA,QACP,aAAa;AAAA,MAAA;AAAA,IACf;AAAA,EACF;AAEJ,GAEaiX,KAAQ/W,EAAuC,SAC1D;AAAA,EACE,QAAA6H,IAAS;AAAA,EACT,SAAAvF,IAAU;AAAA,EACV,OAAAkB;AAAA,EACA,MAAAsP;AAAA,EACA,UAAAkC,IAAW;AAAA,EACX,QAAAgC;AAAA,EACA,eAAAC;AAAA,EACA,WAAAC;AAAA,EACA,WAAA5X;AAAA,EACA,OAAAC;AAAA,EACA,QAAAE;AAAA,EACA,UAAAD;AAAA,EACA,GAAGrB;AACL,GACAuB,GACA;AACA,QAAM8L,IAASsL,GAAajP,CAAM,GAC5BsP,IAAgB3L,EAAO,OAAOlJ,CAAO,GAErC8U,IAA4B;AAAA,IAChC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,KAAK;AAAA,IACL,SAAS;AAAA,IACT,cAAc;AAAA,IACd,QAAQ,aAAaD,EAAc,WAAW;AAAA,IAC9C,iBAAiBA,EAAc;AAAA,IAC/B,OAAO7U,MAAY,UAAU6U,EAAc,QAAQ;AAAA,IACnD,GAAG5X;AAAA,EAAA,GAGCoL,IAA2B;AAAA,IAC/B,YAAY;AAAA,IACZ,OAAOwM,EAAc;AAAA,IACrB,WAAW;AAAA,EAAA,GAGPjT,IAA8B;AAAA,IAClC,MAAM;AAAA,IACN,UAAU;AAAA,EAAA,GAGNH,IAA4B;AAAA,IAChC,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,cAAcvE,IAAW,IAAI;AAAA,IAC7B,OAA6B2X,EAAc;AAAA,EAAsB,GAG7DnT,IAAkC;AAAA,IACtC,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO1B,MAAY,UAAU6U,EAAc,QAAQ;AAAA,EAAA,GAG/ClT,IAA8B;AAAA,IAClC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,KAAK;AAAA,IACL,YAAY;AAAA,EAAA,GAGRoT,IAAoC;AAAA,IACxC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,OAAO/U,MAAY,UAAU6U,EAAc,QAAQ;AAAA,IACnD,YAAY;AAAA,IACZ,SAAS;AAAA,EAAA;AAGX,SACE,gBAAA/S;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAA1E;AAAA,MACA,MAAK;AAAA,MACL,WAAW9B;AAAA,QACT;AAAA,QACA,iBAAiBiK,CAAM;AAAA,QACvB,iBAAiBvF,CAAO;AAAA,QACxBhD;AAAA,MAAA;AAAA,MAEF,OAAO8X;AAAA,MACP,eAAa3X;AAAA,MACZ,GAAGtB;AAAA,MAEH,UAAA;AAAA,QAAA6W,KACC,gBAAAlV,EAAC,UAAK,WAAU,qBAAoB,OAAO6K,GACxC,UAAAmI,KAAQtH,EAAO,KAAA,CAClB;AAAA,QAGF,gBAAApH,EAAC,OAAA,EAAI,WAAU,wBAAuB,OAAOF,GAC1C,UAAA;AAAA,UAAAV,uBAAU,OAAA,EAAI,WAAU,sBAAqB,OAAOO,GAAa,UAAAP,GAAM;AAAA,UACvEhE,KAAY,gBAAAM,EAAC,OAAA,EAAI,WAAU,4BAA2B,OAAOkE,GAAmB,UAAAxE,EAAA,CAAS;AAAA,QAAA,GAC5F;AAAA,SAEEwX,KAAUC,MACV,gBAAA7S,EAAC,SAAI,WAAU,wBAAuB,OAAOH,GAC1C,UAAA;AAAA,UAAA+S;AAAA,UACAC,KACC,gBAAAnX;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,WAAU;AAAA,cACV,OAAOuX;AAAA,cACP,SAASH;AAAA,cACT,cAAW;AAAA,cACX,cAAc,CAACtU,MAAM;AAAE,gBAAAA,EAAE,cAAc,MAAM,UAAU;AAAA,cAAI;AAAA,cAC3D,cAAc,CAACA,MAAM;AAAE,gBAAAA,EAAE,cAAc,MAAM,UAAU;AAAA,cAAM;AAAA,cAE7D,UAAA,gBAAA9C,EAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QACnD,4BAAC,QAAA,EAAK,GAAE,wBAAuB,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,EAAA,CAC/F;AAAA,YAAA;AAAA,UAAA;AAAA,QACF,EAAA,CAEJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR,CAAC;AAEDiX,GAAM,cAAc;AC1Ob,MAAMO,KAAUtX,EAAyC,SAC9D;AAAA,EACE,SAAAuX;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,OAAAC,IAAQ;AAAA,EACR,YAAA5O;AAAA,EACA,WAAAvJ;AAAA,EACA,QAAAG;AAAA,EACA,UAAAD;AAAA,EACA,GAAGrB;AACL,GACAuB,GACA;AACA,QAAM,CAACgY,GAAWC,CAAY,IAAIrO,EAAS,EAAK,GAC1C,CAACsO,GAAUC,CAAW,IAAIvO,EAAS,EAAE,KAAK,GAAG,MAAM,GAAG,GACtDwO,IAAa7I,EAAuB,IAAI,GACxC8I,IAAa9I,EAAuB,IAAI,GACxC+I,IAAa/I,EAAsC,IAAI,GAEvDgJ,IAAoB1I,EAAY,MAAM;AAC1C,QAAI,CAACuI,EAAW,WAAW,CAACC,EAAW,QAAS;AAEhD,UAAMG,IAAcJ,EAAW,QAAQ,sBAAA,GACjCK,IAAcJ,EAAW,QAAQ,sBAAA,GACjC9S,IAAM;AAEZ,QAAImT,IAAM,GACNC,IAAO;AAEX,YAAQb,GAAA;AAAA,MACN,KAAK;AACH,QAAAY,IAAMF,EAAY,MAAMC,EAAY,SAASlT,GAC7CoT,IAAOH,EAAY,QAAQA,EAAY,QAAQC,EAAY,SAAS;AACpE;AAAA,MACF,KAAK;AACH,QAAAC,IAAMF,EAAY,SAASjT,GAC3BoT,IAAOH,EAAY,QAAQA,EAAY,QAAQC,EAAY,SAAS;AACpE;AAAA,MACF,KAAK;AACH,QAAAC,IAAMF,EAAY,OAAOA,EAAY,SAASC,EAAY,UAAU,GACpEE,IAAOH,EAAY,OAAOC,EAAY,QAAQlT;AAC9C;AAAA,MACF,KAAK;AACH,QAAAmT,IAAMF,EAAY,OAAOA,EAAY,SAASC,EAAY,UAAU,GACpEE,IAAOH,EAAY,QAAQjT;AAC3B;AAAA,IAAA;AAIJ,UAAM1C,IAAU;AAChB,IAAA8V,IAAO,KAAK,IAAI9V,GAAS,KAAK,IAAI8V,GAAM,OAAO,aAAaF,EAAY,QAAQ5V,CAAO,CAAC,GACxF6V,IAAM,KAAK,IAAI7V,GAAS,KAAK,IAAI6V,GAAK,OAAO,cAAcD,EAAY,SAAS5V,CAAO,CAAC,GAExFsV,EAAY,EAAE,KAAAO,GAAK,MAAAC,GAAM;AAAA,EAC3B,GAAG,CAACb,CAAS,CAAC;AAEd,EAAA7H,EAAU,OACJ+H,MACFO,EAAA,GACA,OAAO,iBAAiB,UAAUA,GAAmB,EAAI,GACzD,OAAO,iBAAiB,UAAUA,CAAiB,IAG9C,MAAM;AACX,WAAO,oBAAoB,UAAUA,GAAmB,EAAI,GAC5D,OAAO,oBAAoB,UAAUA,CAAiB;AAAA,EACxD,IACC,CAACP,GAAWO,CAAiB,CAAC;AAEjC,QAAMK,IAAc,MAAM;AACxB,IAAIzP,MACJmP,EAAW,UAAU,WAAW,MAAM;AACpC,MAAAL,EAAa,EAAI;AAAA,IACnB,GAAGF,CAAK;AAAA,EACV,GAEMc,IAAc,MAAM;AACxB,IAAIP,EAAW,WACb,aAAaA,EAAW,OAAO,GAEjCL,EAAa,EAAK;AAAA,EACpB;AAEA,EAAAhI,EAAU,MACD,MAAM;AACX,IAAIqI,EAAW,WACb,aAAaA,EAAW,OAAO;AAAA,EAEnC,GACC,CAAA,CAAE;AAEL,QAAMQ,IAA8B;AAAA,IAClC,SAAS;AAAA,EAAA,GAGLC,IAA8B;AAAA,IAClC,UAAU;AAAA,IACV,KAAKb,EAAS;AAAA,IACd,MAAMA,EAAS;AAAA,IACf,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,IACT,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,WAAW;AAAA,IACX,eAAe;AAAA,IACf,WAAW;AAAA,EAAA,GAGPc,IAA4B;AAAA,IAChC,UAAU;AAAA,IACV,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,WAAW;AAAA,IACX,GAAIlB,MAAc,SAAS,EAAE,QAAQ,IAAI,MAAM,OAAO,YAAY,GAAA;AAAA,IAClE,GAAIA,MAAc,YAAY,EAAE,KAAK,IAAI,MAAM,OAAO,YAAY,GAAA;AAAA,IAClE,GAAIA,MAAc,UAAU,EAAE,OAAO,IAAI,KAAK,OAAO,WAAW,GAAA;AAAA,IAChE,GAAIA,MAAc,WAAW,EAAE,MAAM,IAAI,KAAK,OAAO,WAAW,GAAA;AAAA,EAAG;AAGrE,SACE,gBAAApT,EAAA8P,IAAA,EACE,UAAA;AAAA,IAAA,gBAAApU;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAKgY;AAAA,QACL,OAAOU;AAAA,QACP,cAAcF;AAAA,QACd,cAAcC;AAAA,QACd,SAASD;AAAA,QACT,QAAQC;AAAA,QAEP,UAAA/Y;AAAA,MAAA;AAAA,IAAA;AAAA,IAGFkY,KACCb;AAAA,MACE,gBAAAzS,EAAA8P,IAAA,EACE,UAAA;AAAA,QAAA,gBAAApU,EAAC,SAAA,EACE,UAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAMH;AAAA,QACA,gBAAAsE;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,KAAK,CAAC8N,MAAS;AACZ,cAAA6F,EAA6D,UAAU7F,GACpE,OAAOxS,KAAQ,aAAYA,EAAIwS,CAAI,IAC9BxS,MAAMA,EAAsD,UAAUwS;AAAA,YACjF;AAAA,YACA,MAAK;AAAA,YACL,WAAWtU,EAAG,kBAAkB,mBAAmB4Z,CAAS,IAAIlY,CAAS;AAAA,YACzE,OAAOmZ;AAAA,YACP,eAAahZ;AAAA,YACZ,GAAGtB;AAAA,YAEH,UAAA;AAAA,cAAAoZ;AAAA,cACD,gBAAAzX,EAAC,QAAA,EAAK,OAAO4Y,EAAA,CAAY;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MAC3B,GACF;AAAA,MACA,SAAS;AAAA,IAAA;AAAA,EACX,GACJ;AAEJ,CAAC;AAEDpB,GAAQ,cAAc;ACjKtB,MAAMR,KAAkF;AAAA,EACtF,MAAM;AAAA,IACJ,IAAI;AAAA,IACJ,QAAQ;AAAA,IACR,MAAM;AAAA,EAAA;AAAA,EAER,SAAS;AAAA,IACP,IAAI;AAAA,IACJ,QAAQ;AAAA,IACR,MAAM;AAAA,EAAA;AAAA,EAER,SAAS;AAAA,IACP,IAAI;AAAA,IACJ,QAAQ;AAAA,IACR,MAAM;AAAA,EAAA;AAAA,EAER,OAAO;AAAA,IACL,IAAI;AAAA,IACJ,QAAQ;AAAA,IACR,MAAM;AAAA,EAAA;AAEV;AAEA,SAAS6B,GAAU,EAAE,QAAA9Q,KAAmC;AAQtD,SACE,gBAAA/H,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,KAAI,eAAc,SAAQ,gBAAe,SACrI,UAAA,gBAAAA,EAAC,UAAK,GATiC;AAAA,IACzC,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,IACT,OAAO;AAAA,EAAA,EAKU+H,CAAM,EAAA,CAAG,EAAA,CAC1B;AAEJ;AAEA,SAAS8N,KAAY;AACnB,SACE,gBAAA7V,EAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QACnD,4BAAC,QAAA,EAAK,GAAE,sBAAqB,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,EAAA,CAC7F;AAEJ;AAEO,MAAM8Y,KAAQ5Y,EAAuC,SAC1D;AAAA,EACE,QAAA6H,IAAS;AAAA,EACT,OAAArE;AAAA,EACA,aAAAC;AAAA,EACA,QAAAoS,IAAS;AAAA,EACT,UAAAxZ,IAAW;AAAA,EACX,SAAAyZ;AAAA,EACA,iBAAAG,IAAkB;AAAA,EAClB,QAAAe;AAAA,EACA,MAAAlE;AAAA,EACA,WAAAxT;AAAA,EACA,OAAAC;AAAA,EACA,QAAAE;AAAA,EACA,GAAGtB;AACL,GACAuB,GACA;AACA,QAAM,CAACgY,GAAWC,CAAY,IAAIrO,EAASuM,CAAM,GAC3C,CAACgD,GAAWC,CAAY,IAAIxP,EAAS,EAAK;AAuBhD,MArBAqG,EAAU,MAAM;AACd,QAAIkG;AACF,MAAA8B,EAAa,EAAI,GACjBmB,EAAa,EAAK;AAAA,SACb;AACL,MAAAA,EAAa,EAAI;AACjB,YAAMC,IAAQ,WAAW,MAAMpB,EAAa,EAAK,GAAG,GAAG;AACvD,aAAO,MAAM,aAAaoB,CAAK;AAAA,IACjC;AAAA,EACF,GAAG,CAAClD,CAAM,CAAC,GAEXlG,EAAU,MAAM;AACd,QAAI,CAACkG,KAAUxZ,MAAa,EAAG;AAE/B,UAAM0c,IAAQ,WAAW,MAAM;AAC7B,MAAAjD,KAAA,QAAAA;AAAA,IACF,GAAGzZ,CAAQ;AAEX,WAAO,MAAM,aAAa0c,CAAK;AAAA,EACjC,GAAG,CAAClD,GAAQxZ,GAAUyZ,CAAO,CAAC,GAE1B,CAAC4B,EAAW,QAAO;AAEvB,QAAMlM,IAASsL,GAAajP,CAAM,GAE5BmR,IAA4B;AAAA,IAChC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,KAAK;AAAA,IACL,SAAS;AAAA,IACT,iBAAiBxN,EAAO;AAAA,IACxB,QAAQ,aAAaA,EAAO,MAAM;AAAA,IAClC,cAAc;AAAA,IACd,WAAW;AAAA,IACX,UAAU;AAAA,IACV,WAAWqN,IACP,4CACA;AAAA,IACJ,GAAGtZ;AAAA,EAAA,GAGCoL,IAA2B;AAAA,IAC/B,OAAOa,EAAO;AAAA,IACd,YAAY;AAAA,IACZ,WAAW;AAAA,EAAA,GAGPtH,IAA8B;AAAA,IAClC,MAAM;AAAA,IACN,SAAS;AAAA,IACT,eAAe;AAAA,IACf,KAAK;AAAA,EAAA,GAGDH,IAA4B;AAAA,IAChC,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,YAAY;AAAA,EAAA,GAGRC,IAAkC;AAAA,IACtC,UAAU;AAAA,IACV,OAAO;AAAA,IACP,YAAY;AAAA,EAAA,GAGR2S,IAAkC;AAAA,IACtC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,YAAY;AAAA,EAAA;AAGd,SACE,gBAAAvS,EAAA8P,IAAA,EACE,UAAA;AAAA,IAAA,gBAAApU,EAAC,SAAA,EACE,UAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAUH;AAAA,IACA,gBAAAsE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAA1E;AAAA,QACA,MAAK;AAAA,QACL,aAAU;AAAA,QACV,WAAW9B,EAAG,gBAAgB,iBAAiBiK,CAAM,IAAIvI,CAAS;AAAA,QAClE,OAAO0Z;AAAA,QACP,eAAavZ;AAAA,QACZ,GAAGtB;AAAA,QAEJ,UAAA;AAAA,UAAA,gBAAA2B,EAAC,UAAK,OAAO6K,GACV,eAAQ,gBAAA7K,EAAC6Y,IAAA,EAAU,QAAA9Q,GAAgB,EAAA,CACtC;AAAA,UACA,gBAAAzD,EAAC,OAAA,EAAI,OAAOF,GACT,UAAA;AAAA,YAAAV,KAAS,gBAAA1D,EAAC,QAAA,EAAK,OAAOiE,GAAa,UAAAP,GAAM;AAAA,YACzCC,KAAe,gBAAA3D,EAAC,QAAA,EAAK,OAAOkE,GAAmB,UAAAP,GAAY;AAAA,YAC3DuT,uBAAW,OAAA,EAAI,OAAO,EAAE,WAAW,EAAA,GAAM,UAAAA,EAAA,CAAO;AAAA,UAAA,GACnD;AAAA,UACCf,KACC,gBAAAnW;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,OAAO6W;AAAA,cACP,SAASb;AAAA,cACT,cAAW;AAAA,cACX,cAAc,CAAClT,MAAM;AACnB,gBAAAA,EAAE,cAAc,MAAM,kBAAkB;AAAA,cAC1C;AAAA,cACA,cAAc,CAACA,MAAM;AACnB,gBAAAA,EAAE,cAAc,MAAM,kBAAkB;AAAA,cAC1C;AAAA,cAEA,4BAAC+S,IAAA,CAAA,CAAU;AAAA,YAAA;AAAA,UAAA;AAAA,QACb;AAAA,MAAA;AAAA,IAAA;AAAA,EAEJ,GACF;AAEJ,CAAC;AAEDiD,GAAM,cAAc;AAepB,MAAMK,KAAeC,GAAwC,IAAI;AAE1D,SAASC,KAAW;AACzB,QAAMC,IAAUC,GAAWJ,EAAY;AACvC,MAAI,CAACG;AACH,UAAM,IAAI,MAAM,8CAA8C;AAEhE,SAAOA;AACT;AAQA,MAAME,KAAuD;AAAA,EAC3D,YAAY,EAAE,KAAK,IAAI,MAAM,GAAA;AAAA,EAC7B,cAAc,EAAE,KAAK,IAAI,MAAM,OAAO,WAAW,mBAAA;AAAA,EACjD,aAAa,EAAE,KAAK,IAAI,OAAO,GAAA;AAAA,EAC/B,eAAe,EAAE,QAAQ,IAAI,MAAM,GAAA;AAAA,EACnC,iBAAiB,EAAE,QAAQ,IAAI,MAAM,OAAO,WAAW,mBAAA;AAAA,EACvD,gBAAgB,EAAE,QAAQ,IAAI,OAAO,GAAA;AACvC;AAEA,IAAIC,KAAe;AAEZ,SAASC,GAAc;AAAA,EAC5B,UAAAha;AAAA,EACA,UAAAoY,IAAW;AAAA,EACX,WAAA6B,IAAY;AACd,GAAuB;AACrB,QAAM,CAACC,GAAQC,CAAS,IAAIrQ,EAAsB,CAAA,CAAE,GAC9C,CAACsQ,GAASC,CAAU,IAAIvQ,EAAS,EAAK;AAE5C,EAAAqG,EAAU,MAAM;AACd,IAAAkK,EAAW,EAAI;AAAA,EACjB,GAAG,CAAA,CAAE;AAEL,QAAMC,IAAWvK;AAAA,IACf,CAACpR,MAAkD;AACjD,YAAMgO,IAAK,SAAS,EAAEoN,EAAY;AAClC,aAAAI,EAAU,CAACI,MAAS;AAClB,cAAMC,IAAY,CAAC,GAAGD,GAAM,EAAE,IAAA5N,GAAI,OAAAhO,GAAO;AACzC,eAAI6b,EAAU,SAASP,IACdO,EAAU,MAAM,CAACP,CAAS,IAE5BO;AAAA,MACT,CAAC,GACM7N;AAAA,IACT;AAAA,IACA,CAACsN,CAAS;AAAA,EAAA,GAGNQ,IAAc1K,EAAY,CAACpD,MAAe;AAC9C,IAAAwN,EAAU,CAACI,MAASA,EAAK,OAAO,CAACG,MAAMA,EAAE,OAAO/N,CAAE,CAAC;AAAA,EACrD,GAAG,CAAA,CAAE,GAECgO,IAAY5K,EAAY,MAAM;AAClC,IAAAoK,EAAU,CAAA,CAAE;AAAA,EACd,GAAG,CAAA,CAAE,GAEC1J,IAAgC;AAAA,IACpC,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,eAAe;AAAA,IACf,KAAK;AAAA,IACL,eAAe;AAAA,IACf,GAAGqJ,GAAe1B,CAAQ;AAAA,EAAA,GAGtBwC,IAAmC;AAAA,IACvC,eAAe;AAAA,EAAA;AAGjB,SACE,gBAAAhW,EAAC6U,GAAa,UAAb,EAAsB,OAAO,EAAE,QAAAS,GAAQ,UAAAI,GAAU,aAAAG,GAAa,WAAAE,EAAA,GAC5D,UAAA;AAAA,IAAA3a;AAAA,IACAoa,KACC/C;AAAA,MACE,gBAAA/W,EAAC,OAAA,EAAI,WAAU,0BAAyB,OAAOmQ,GAC5C,UAAAyJ,EAAO,IAAI,CAAC,EAAE,IAAAvN,GAAI,OAAAhO,EAAA,MACjB,gBAAA2B,EAAC,OAAA,EAAa,OAAOsa,GACnB,UAAA,gBAAAta,EAAC8Y,IAAA,EAAO,GAAGza,GAAO,QAAM,IAAC,SAAS,MAAM8b,EAAY9N,CAAE,EAAA,CAAG,EAAA,GADjDA,CAEV,CACD,GACH;AAAA,MACA,SAAS;AAAA,IAAA;AAAA,EACX,GACJ;AAEJ;ACpTA,MAAMhC,KAAsC;AAAA,EAC1C,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,MAAM;AACR;AAEA,SAASwL,KAAY;AACnB,SACE,gBAAA7V,EAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QACnD,4BAAC,QAAA,EAAK,GAAE,sBAAqB,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,EAAA,CAC7F;AAEJ;AAEO,MAAMua,KAASra,EAAwC,SAC5D;AAAA,EACE,QAAA6V;AAAA,EACA,SAAAC;AAAA,EACA,WAAA0B,IAAY;AAAA,EACZ,MAAA1V,IAAO;AAAA,EACP,OAAA0B;AAAA,EACA,qBAAAuS,IAAsB;AAAA,EACtB,eAAAC,IAAgB;AAAA,EAChB,iBAAAC,IAAkB;AAAA,EAClB,aAAAqE,IAAc;AAAA,EACd,WAAAhb;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC;AAAA,EACA,GAAGtB;AACL,GACAuB,GACA;AACA,QAAM6a,IAAYtL,EAAuB,IAAI,GACvCkH,IAAwBlH,EAA2B,IAAI;AAG7D,EAAAU,EAAU,MAAM;AACd,QAAI,CAACkG,EAAQ;AAEb,IAAAM,EAAsB,UAAU,SAAS;AACzC,UAAMqE,IAASD,EAAU;AACzB,IAAIC,KACFA,EAAO,MAAA;AAGT,UAAM9G,IAAgB,CAAC9Q,MAAqB;AAC1C,UAAIA,EAAE,QAAQ,YAAYoT,GAAe;AACvC,QAAAF,EAAA;AACA;AAAA,MACF;AAEA,UAAIlT,EAAE,QAAQ,SAAS4X,GAAQ;AAC7B,cAAMnE,IAAoBmE,EAAO;AAAA,UAC/B;AAAA,QAAA,GAEIlE,IAAeD,EAAkB,CAAC,GAClCE,IAAcF,EAAkBA,EAAkB,SAAS,CAAC;AAElE,QAAIzT,EAAE,YAAY,SAAS,kBAAkB0T,KAC3C1T,EAAE,eAAA,GACF2T,KAAA,QAAAA,EAAa,WACJ,CAAC3T,EAAE,YAAY,SAAS,kBAAkB2T,MACnD3T,EAAE,eAAA,GACF0T,KAAA,QAAAA,EAAc;AAAA,MAElB;AAAA,IACF;AAEA,oBAAS,iBAAiB,WAAW5C,CAAa,GAClD,SAAS,KAAK,MAAM,WAAW,UAExB,MAAM;;AACX,eAAS,oBAAoB,WAAWA,CAAa,GACrD,SAAS,KAAK,MAAM,WAAW,KAC/BD,IAAA0C,EAAsB,YAAtB,QAAA1C,EAA+B;AAAA,IACjC;AAAA,EACF,GAAG,CAACoC,GAAQG,GAAeF,CAAO,CAAC;AAEnC,QAAMU,IAAqBjH;AAAA,IACzB,CAAC3M,MAAwB;AACvB,MAAIA,EAAE,WAAWA,EAAE,iBAAiBmT,KAClCD,EAAA;AAAA,IAEJ;AAAA,IACA,CAACC,GAAqBD,CAAO;AAAA,EAAA;AAG/B,MAAI,CAACD,EAAQ,QAAO;AAEpB,QAAM4E,IAAejD,MAAc,UAAUA,MAAc,SACrDkD,IAAavQ,GAAQrI,CAAI,GAEzB2U,IAA8B;AAAA,IAClC,UAAU;AAAA,IACV,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,iBAAiB6D,IAAc,qCAAqC;AAAA,IACpE,WAAW;AAAA,EAAA,GAkCPK,IAA6B;AAAA,IACjC,IAhCwB,MAAqB;AAC7C,YAAMhY,IAAsB;AAAA,QAC1B,UAAU;AAAA,QACV,iBAAiB;AAAA,QACjB,WAAW;AAAA,QACX,SAAS;AAAA,QACT,eAAe;AAAA,QACf,UAAU;AAAA,MAAA;AAGZ,aAAI8X,IACK;AAAA,QACL,GAAG9X;AAAA,QACH,KAAK;AAAA,QACL,QAAQ;AAAA,QACR,CAAC6U,CAAS,GAAG;AAAA,QACb,OAAOkD;AAAA,QACP,UAAU;AAAA,MAAA,IAIP;AAAA,QACL,GAAG/X;AAAA,QACH,MAAM;AAAA,QACN,OAAO;AAAA,QACP,CAAC6U,CAAS,GAAG;AAAA,QACb,QAAQkD;AAAA,QACR,WAAW;AAAA,MAAA;AAAA,IAEf,GAGK;AAAA,IACH,WAAW,iBAAiBlD,CAAS;AAAA,IACrC,SAAS;AAAA,IACT,GAAGjY;AAAA,EAAA,GAGCyD,IAA6B;AAAA,IACjC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,SAAS;AAAA,IACT,cAAc;AAAA,IACd,YAAY;AAAA,EAAA,GAGRe,IAA4B;AAAA,IAChC,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,QAAQ;AAAA,EAAA,GAGJ4S,IAAkC;AAAA,IACtC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,OAAO;AAAA,IACP,YAAY;AAAA,EAAA,GAGRzS,IAA8B;AAAA,IAClC,MAAM;AAAA,IACN,UAAU;AAAA,IACV,SAAS;AAAA,EAAA,GAGL0W,IACJ,gBAAAxW,EAAA8P,IAAA,EACE,UAAA;AAAA,IAAA,gBAAApU,EAAC,SAAA,EACE,UAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAsBH;AAAA,IACA,gBAAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO2W;AAAA,QACP,SAASD;AAAA,QACT,eAAY;AAAA,QAEZ,UAAA,gBAAApS;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,KAAK,CAAC8N,MAAS;AACZ,cAAAqI,EAA4D,UAAUrI,GACnE,OAAOxS,KAAQ,aAAYA,EAAIwS,CAAI,IAC9BxS,QAAS,UAAUwS;AAAA,YAC9B;AAAA,YACA,MAAK;AAAA,YACL,cAAW;AAAA,YACX,mBAAiB1O,IAAQ,wBAAwB;AAAA,YACjD,WAAW5F,EAAG,iBAAiB,kBAAkB4Z,CAAS,IAAI,kBAAkB1V,CAAI,IAAIxC,CAAS;AAAA,YACjG,OAAOqb;AAAA,YACP,UAAU;AAAA,YACV,eAAalb;AAAA,YACZ,GAAGtB;AAAA,YAEF,UAAA;AAAA,eAAAqF,KAASyS,MACT,gBAAA7R,EAAC,OAAA,EAAI,WAAU,wBAAuB,OAAOpB,GAC1C,UAAA;AAAA,gBAAAQ,uBAAU,MAAA,EAAG,IAAG,uBAAsB,OAAOO,GAAa,UAAAP,GAAM;AAAA,gBAChEyS,KACC,gBAAAnW;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,WAAU;AAAA,oBACV,OAAO6W;AAAA,oBACP,SAASb;AAAA,oBACT,cAAW;AAAA,oBACX,cAAc,CAAClT,MAAM;AACnB,sBAAAA,EAAE,cAAc,MAAM,kBAAkB,kCACxCA,EAAE,cAAc,MAAM,QAAQ;AAAA,oBAChC;AAAA,oBACA,cAAc,CAACA,MAAM;AACnB,sBAAAA,EAAE,cAAc,MAAM,kBAAkB,eACxCA,EAAE,cAAc,MAAM,QAAQ;AAAA,oBAChC;AAAA,oBAEA,4BAAC+S,IAAA,CAAA,CAAU;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACb,GAEJ;AAAA,gCAED,OAAA,EAAI,WAAU,yBAAwB,OAAOzR,GAC3C,UAAA1E,EAAA,CACH;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EACF,GACF;AAGF,SAAOqX,GAAa+D,GAAe,SAAS,IAAI;AAClD,CAAC;AAEDP,GAAO,cAAc;AChSd,SAASQ,GACdC,GACAC,IAAkC,IACb;AACrB,QAAM,EAAE,SAAAC,IAAU,IAAM,WAAAC,IAAY,gBAAgBF,GAC9Crb,IAAMuP,EAAU,IAAI;AAE1B,SAAAU,EAAU,MAAM;AACd,QAAI,CAACqL,EAAS;AAEd,UAAME,IAAW,CAACC,MAAmC;AACnD,YAAMC,IAAK1b,EAAI;AACf,MAAI,CAAC0b,KAAMA,EAAG,SAASD,EAAM,MAAc,KAG3CL,EAAQK,CAAK;AAAA,IACf;AAEA,oBAAS,iBAAiBF,GAAWC,CAAQ,GAC7C,SAAS,iBAAiB,cAAcA,CAAQ,GAEzC,MAAM;AACX,eAAS,oBAAoBD,GAAWC,CAAQ,GAChD,SAAS,oBAAoB,cAAcA,CAAQ;AAAA,IACrD;AAAA,EACF,GAAG,CAACJ,GAASE,GAASC,CAAS,CAAC,GAEzBvb;AACT;AC0BO,MAAM2b,KAAUrb,EAAyC,SAC9D;AAAA,EACE,SAAAuX;AAAA,EACA,UAAA/X;AAAA,EACA,WAAAgY,IAAY;AAAA,EACZ,SAAA8D,IAAU;AAAA,EACV,QAAQC;AAAA,EACR,aAAAC,IAAc;AAAA,EACd,cAAAC;AAAA,EACA,QAAAC,IAAS;AAAA,EACT,WAAAC,IAAY;AAAA,EACZ,YAAAC,IAAa;AAAA,EACb,qBAAAC,IAAsB;AAAA,EACtB,WAAAC,IAAY;AAAA,EACZ,WAAAxc;AAAA,EACA,OAAAC;AAAA,EACA,QAAAE;AAAA,EACA,GAAGtB;AACL,GACAuB,GACA;AACA,QAAM,CAACqc,GAAgBC,CAAiB,IAAI1S,EAASkS,CAAW,GAC1D,CAAC5D,GAAUC,CAAW,IAAIvO,EAAS,EAAE,KAAK,GAAG,MAAM,GAAG,GACtD,CAACsQ,GAASC,CAAU,IAAIvQ,EAAS,EAAK,GACtCwO,IAAa7I,EAAoB,IAAI,GACrCgN,IAAahN,EAAuB,IAAI,GACxCiN,IAAiBjN,EAAsC,IAAI,GAC3DkN,IAAkBlN,EAAsC,IAAI,GAE5D4G,IAAS0F,KAAoBQ,GAE7BK,IAAY7M;AAAA,IAChB,CAAC8M,MAAkB;AACjB,MAAId,MAAqB,UACvBS,EAAkBK,CAAI,GAExBZ,KAAA,QAAAA,EAAeY;AAAA,IACjB;AAAA,IACA,CAACd,GAAkBE,CAAY;AAAA,EAAA,GAI3Ba,IAAkBzB,GAAgC,MAAM;AAC5D,IAAIgB,KAAuBP,MAAY,WAAWzF,KAChDuG,EAAU,EAAK;AAAA,EAEnB,GAAG,EAAE,SAASvG,KAAUyF,MAAY,SAAS;AAE7C,EAAA3L,EAAU,OACRkK,EAAW,EAAI,GACR,MAAMA,EAAW,EAAK,IAC5B,CAAA,CAAE,GAGLlK,EAAU,MAAM;AACd,QAAI,CAACkG,KAAU,CAACiC,EAAW,WAAW,CAAC8B,EAAS;AAEhD,UAAM2C,IAAiB,MAAM;AAC3B,YAAMjB,KAAUxD,EAAW,SACrBP,KAAU0E,EAAW;AAC3B,UAAI,CAACX,MAAW,CAAC/D,GAAS;AAE1B,YAAMW,KAAcoD,GAAQ,sBAAA,GACtBkB,IAAcjF,GAAQ,sBAAA,GACtBkF,KAAU,OAAO,SACjBC,KAAU,OAAO;AAEvB,UAAItE,KAAM,GACNC,KAAO;AAGX,cAAQb,GAAA;AAAA,QACN,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACH,UAAAY,KAAMF,GAAY,MAAMwE,KAAUF,EAAY,SAASd;AACvD;AAAA,QACF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACH,UAAAtD,KAAMF,GAAY,SAASwE,KAAUhB;AACrC;AAAA,QACF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACH,UAAArD,KAAOH,GAAY,OAAOuE,KAAUD,EAAY,QAAQd;AACxD;AAAA,QACF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACH,UAAArD,KAAOH,GAAY,QAAQuE,KAAUf;AACrC;AAAA,MAAA;AAIJ,cAAQlE,GAAA;AAAA,QACN,KAAK;AAAA,QACL,KAAK;AACH,UAAAa,KAAOH,GAAY,OAAOuE,MAAWvE,GAAY,QAAQsE,EAAY,SAAS;AAC9E;AAAA,QACF,KAAK;AAAA,QACL,KAAK;AACH,UAAAnE,KAAOH,GAAY,OAAOuE;AAC1B;AAAA,QACF,KAAK;AAAA,QACL,KAAK;AACH,UAAApE,KAAOH,GAAY,QAAQuE,KAAUD,EAAY;AACjD;AAAA,QACF,KAAK;AAAA,QACL,KAAK;AACH,UAAApE,KAAMF,GAAY,MAAMwE,MAAWxE,GAAY,SAASsE,EAAY,UAAU;AAC9E;AAAA,QACF,KAAK;AAAA,QACL,KAAK;AACH,UAAApE,KAAMF,GAAY,MAAMwE;AACxB;AAAA,QACF,KAAK;AAAA,QACL,KAAK;AACH,UAAAtE,KAAMF,GAAY,SAASwE,KAAUF,EAAY;AACjD;AAAA,MAAA;AAGJ,MAAA3E,EAAY,EAAE,KAAAO,IAAK,MAAAC,IAAM;AAAA,IAC3B;AAEA,WAAAkE,EAAA,GACA,OAAO,iBAAiB,UAAUA,CAAc,GAChD,OAAO,iBAAiB,UAAUA,GAAgB,EAAI,GAE/C,MAAM;AACX,aAAO,oBAAoB,UAAUA,CAAc,GACnD,OAAO,oBAAoB,UAAUA,GAAgB,EAAI;AAAA,IAC3D;AAAA,EACF,GAAG,CAAC1G,GAAQ2B,GAAWkE,GAAQ9B,CAAO,CAAC,GAGvCjK,EAAU,MACD,MAAM;AACX,IAAIuM,EAAe,WAAS,aAAaA,EAAe,OAAO,GAC3DC,EAAgB,WAAS,aAAaA,EAAgB,OAAO;AAAA,EACnE,GACC,CAAA,CAAE;AAEL,QAAMQ,IAAapN,EAAY,MAAM;AACnC,IAAI4M,EAAgB,WAAS,aAAaA,EAAgB,OAAO,GAC7Db,MAAY,UACdY,EAAe,UAAU,WAAW,MAAME,EAAU,EAAI,GAAGT,CAAS,IAEpES,EAAU,EAAI;AAAA,EAElB,GAAG,CAACd,GAASK,GAAWS,CAAS,CAAC,GAE5BQ,IAAcrN,EAAY,MAAM;AACpC,IAAI2M,EAAe,WAAS,aAAaA,EAAe,OAAO,GAC3DZ,MAAY,UACda,EAAgB,UAAU,WAAW,MAAMC,EAAU,EAAK,GAAGR,CAAU,IAEvEQ,EAAU,EAAK;AAAA,EAEnB,GAAG,CAACd,GAASM,GAAYQ,CAAS,CAAC,GAE7BS,IAAetN,EAAY,MAAM;AACrC,IAAIsG,IACF+G,EAAA,IAEAD,EAAA;AAAA,EAEJ,GAAG,CAAC9G,GAAQ8G,GAAYC,CAAW,CAAC,GAG9B/H,IAAarV,EAAS,OACtBsd,IAAiBC,GAAavd,GAAmD;AAAA,IACrF,KAAKsY;AAAA,IACL,GAAIwD,MAAY,WAAW;AAAA,MACzB,SAAS,CAAC1Y,MAAwB;;AAC/B,SAAA6Q,KAAAoB,EAAW,YAAX,QAAApB,GAAA,KAAAoB,GAAqEjS,IACtEia,EAAA;AAAA,MACF;AAAA,IAAA;AAAA,IAEF,GAAIvB,MAAY,WAAW;AAAA,MACzB,cAAc,CAAC1Y,MAAwB;;AACpC,SAAA6Q,KAAAoB,EAAW,iBAAX,QAAApB,GAAA,KAAAoB,GAA0EjS,IAC3E+Z,EAAA;AAAA,MACF;AAAA,MACA,cAAc,CAAC/Z,MAAwB;;AACpC,SAAA6Q,KAAAoB,EAAW,iBAAX,QAAApB,GAAA,KAAAoB,GAA0EjS,IAC3Ega,EAAA;AAAA,MACF;AAAA,IAAA;AAAA,EACF,CACD,GAEK1Y,IAA8B;AAAA,IAClC,UAAU;AAAA,IACV,KAAK0T,EAAS;AAAA,IACd,MAAMA,EAAS;AAAA,IACf,QAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,WAAW;AAAA,IACX,SAAS;AAAA,IACT,UAAU;AAAA,IACV,WAAW;AAAA,IACX,GAAGrY;AAAA,EAAA,GAGCyd,IAAiBnH,KAAU+D,KAC/B,gBAAAxV,EAAA8P,IAAA,EACE,UAAA;AAAA,IAAA,gBAAApU,EAAC,SAAA,EACE,UAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAMH;AAAA,IACA,gBAAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAK,CAACoS,MAAS;AACZ,UAAA+J,EAA6D,UAAU/J,GACvEoK,EAAkE,UAAUpK,GACzE,OAAOxS,KAAQ,aAAYA,EAAIwS,CAAI,IAC9BxS,QAAS,UAAUwS;AAAA,QAC9B;AAAA,QACA,WAAWtU,EAAG,kBAAkB0B,CAAS;AAAA,QACzC,OAAO4E;AAAA,QACP,MAAK;AAAA,QACL,eAAazE;AAAA,QACb,cAAc6b,MAAY,UAAUqB,IAAa;AAAA,QACjD,cAAcrB,MAAY,UAAUsB,IAAc;AAAA,QACjD,GAAGze;AAAA,QAEH,UAAAoZ;AAAA,MAAA;AAAA,IAAA;AAAA,EACH,GACF;AAGF,SACE,gBAAAnT,EAAA8P,IAAA,EACG,UAAA;AAAA,IAAA4I;AAAA,IACAlD,KAAW/C,GAAamG,GAAgB,SAAS,IAAI;AAAA,EAAA,GACxD;AAEJ,CAAC;AAED3B,GAAQ,cAAc;ACnRtB,MAAM4B,KAA8C;AAAA,EAClD,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAEMC,KAA+E;AAAA,EACnF,IAAI,EAAE,MAAM,IAAI,aAAa,EAAA;AAAA,EAC7B,IAAI,EAAE,MAAM,IAAI,aAAa,EAAA;AAAA,EAC7B,IAAI,EAAE,MAAM,IAAI,aAAa,EAAA;AAAA,EAC7B,IAAI,EAAE,MAAM,IAAI,aAAa,EAAA;AAC/B,GAEMvV,KAA+C;AAAA,EACnD,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,OAAO;AACT,GAEawV,KAAWnd,EAA0C,SAChE;AAAA,EACE,OAAA/B,IAAQ;AAAA,EACR,KAAAiT,IAAM;AAAA,EACN,MAAApP,IAAO;AAAA,EACP,SAAAQ,IAAU;AAAA,EACV,QAAAuF,IAAS;AAAA,EACT,WAAAuJ,IAAY;AAAA,EACZ,eAAAgM,IAAgB;AAAA,EAChB,aAAA/L,IAAc,CAACC,GAAG+L,MAAM,GAAG,KAAK,MAAO/L,IAAI+L,IAAK,GAAG,CAAC;AAAA,EACpD,OAAA3S;AAAA,EACA,WAAApL;AAAA,EACA,OAAAC;AAAA,EACA,QAAAE;AAAA,EACA,GAAGtB;AACL,GACAuB,GACA;AACA,QAAMgS,IAAa,KAAK,IAAI,KAAK,KAAK,IAAI,GAAIzT,IAAQiT,IAAO,GAAG,CAAC,GAC3D7G,IAAQ1C,GAAaE,CAAM;AAEjC,MAAIvF,MAAY,YAAY;AAC1B,UAAMkJ,IAAS0R,GAAgBpb,CAAI,GAC7Bwb,KAAU9R,EAAO,OAAOA,EAAO,eAAe,GAC9C+R,IAAgB,IAAI,KAAK,KAAKD,GAC9B5B,IAAS6B,IAAiB7L,IAAa,MAAO6L,GAE9CtN,IAAgC;AAAA,MACpC,SAAS;AAAA,MACT,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,KAAK;AAAA,MACL,GAAG1Q;AAAA,IAAA,GAGCie,IAA0B;AAAA,MAC9B,WAAW;AAAA,MACX,OAAOhS,EAAO;AAAA,MACd,QAAQA,EAAO;AAAA,IAAA,GAGX6C,IAA4B;AAAA,MAChC,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,aAAa7C,EAAO;AAAA,IAAA,GAGhBiS,IAA0B;AAAA,MAC9B,MAAM;AAAA,MACN,QAAQpT;AAAA,MACR,aAAamB,EAAO;AAAA,MACpB,eAAe;AAAA,MACf,iBAAiB+R;AAAA,MACjB,kBAAkBH,IAAgBG,IAAgB,OAAO7B;AAAA,MACzD,YAAY0B,IAAgB,SAAS;AAAA,MACrC,WAAWA,IAAgB,qDAAqD;AAAA,MAChF,iBAAiB;AAAA,IAAA,GAGbrL,IAA4B;AAAA,MAChC,UAAU;AAAA,MACV,UAAUjQ,MAAS,OAAO,IAAIA,MAAS,OAAO,KAAKA,MAAS,OAAO,KAAK;AAAA,MACxE,YAAY;AAAA,MACZ,OAAO;AAAA,IAAA,GAGH8K,IAA4B;AAAA,MAChC,UAAU9K,MAAS,OAAO,KAAKA,MAAS,OAAO,KAAKA,MAAS,OAAO,KAAK;AAAA,MACzE,OAAO;AAAA,IAAA;AAGT,WACE,gBAAAsC,EAAA8P,IAAA,EACE,UAAA;AAAA,MAAA,gBAAApU,EAAC,SAAA,EACE,UAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAMH;AAAA,MACA,gBAAAsE;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAA1E;AAAA,UACA,WAAW9B,EAAG,mBAAmB,6BAA6B,oBAAoBkE,CAAI,IAAIxC,CAAS;AAAA,UACnG,OAAO2Q;AAAAA,UACP,MAAK;AAAA,UACL,iBAAemN,IAAgB,SAAYnf;AAAA,UAC3C,iBAAe;AAAA,UACf,iBAAeiT;AAAA,UACf,cAAYxG;AAAA,UACZ,eAAajL;AAAA,UACZ,GAAGtB;AAAA,UAEJ,UAAA;AAAA,YAAA,gBAAAiG,EAAC,OAAA,EAAI,OAAO,EAAE,UAAU,YAAY,SAAS,QAAQ,YAAY,UAAU,gBAAgB,SAAA,GACzF,UAAA;AAAA,cAAA,gBAAAA,EAAC,OAAA,EAAI,OAAOoZ,GACV,UAAA;AAAA,gBAAA,gBAAA1d,EAAC,UAAA,EAAO,IAAI0L,EAAO,OAAO,GAAG,IAAIA,EAAO,OAAO,GAAG,GAAG8R,GAAQ,OAAOjP,GAAY;AAAA,gBAChF,gBAAAvO,EAAC,UAAA,EAAO,IAAI0L,EAAO,OAAO,GAAG,IAAIA,EAAO,OAAO,GAAG,GAAG8R,GAAQ,OAAOG,EAAAA,CAAU;AAAA,cAAA,GAChF;AAAA,cACCrM,KAAa,CAACgM,KAAiBtb,MAAS,QACvC,gBAAAhC,EAAC,QAAA,EAAK,OAAOiS,GAAa,UAAAV,EAAYpT,GAAOiT,CAAG,EAAA,CAAE;AAAA,YAAA,GAEtD;AAAA,YACCxG,KAAS,gBAAA5K,EAAC,QAAA,EAAK,OAAO8M,GAAa,UAAAlC,EAAA,CAAM;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAC5C,GACF;AAAA,EAEJ;AAGA,QAAMgT,IAAST,GAAcnb,CAAI,GAE3BmO,IAAgC;AAAA,IACpC,SAAS;AAAA,IACT,eAAe;AAAA,IACf,KAAK;AAAA,IACL,OAAO;AAAA,IACP,GAAG1Q;AAAA,EAAA,GAGCyD,IAA6B;AAAA,IACjC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,KAAK;AAAA,EAAA,GAGD4J,IAA4B;AAAA,IAChC,UAAU9K,MAAS,OAAO,KAAKA,MAAS,OAAO,KAAKA,MAAS,OAAO,KAAK;AAAA,IACzE,YAAY;AAAA,IACZ,OAAO;AAAA,EAAA,GAGH6b,IAAgC;AAAA,IACpC,UAAU7b,MAAS,OAAO,KAAKA,MAAS,OAAO,KAAKA,MAAS,OAAO,KAAK;AAAA,IACzE,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,oBAAoB;AAAA,EAAA,GAGhBuM,IAA4B;AAAA,IAChC,OAAO;AAAA,IACP,QAAAqP;AAAA,IACA,iBAAiB;AAAA,IACjB,cAAcA,IAAS;AAAA,IACvB,UAAU;AAAA,EAAA,GAGND,IAA0B;AAAA,IAC9B,OAAOL,IAAgB,QAAQ,GAAG1L,CAAU;AAAA,IAC5C,QAAQ;AAAA,IACR,iBAAiBrH;AAAA,IACjB,cAAcqT,IAAS;AAAA,IACvB,YAAYN,IAAgB,SAAS;AAAA,IACrC,WAAWA,IAAgB,mEAAmE;AAAA,EAAA;AAGhG,SACE,gBAAAhZ,EAAA8P,IAAA,EACE,UAAA;AAAA,IAAA,gBAAApU,EAAC,SAAA,EACE,UAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAMH;AAAA,IACA,gBAAAsE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAA1E;AAAA,QACA,WAAW9B,EAAG,mBAAmB,2BAA2B,oBAAoBkE,CAAI,IAAIxC,CAAS;AAAA,QACjG,OAAO2Q;AAAA,QACP,MAAK;AAAA,QACL,iBAAemN,IAAgB,SAAYnf;AAAA,QAC3C,iBAAe;AAAA,QACf,iBAAeiT;AAAA,QACf,cAAYxG;AAAA,QACZ,eAAajL;AAAA,QACZ,GAAGtB;AAAA,QAEF,UAAA;AAAA,WAAAuM,KAAS0G,MACT,gBAAAhN,EAAC,OAAA,EAAI,OAAOpB,GACT,UAAA;AAAA,YAAA0H,KAAS,gBAAA5K,EAAC,QAAA,EAAK,OAAO8M,GAAa,UAAAlC,GAAM;AAAA,YACzC0G,KAAa,CAACgM,KACb,gBAAAtd,EAAC,QAAA,EAAK,OAAO6d,GAAiB,UAAAtM,EAAYpT,GAAOiT,CAAG,EAAA,CAAE;AAAA,UAAA,GAE1D;AAAA,UAEF,gBAAApR,EAAC,SAAI,OAAOuO,GACV,4BAAC,OAAA,EAAI,OAAOoP,GAAU,EAAA,CACxB;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ,CAAC;AAEDN,GAAS,cAAc;AC9NvB,MAAMS,KAAc1E,GAAuC,IAAI;AAE/D,SAAS2E,KAAiB;AACxB,QAAMzE,IAAUC,GAAWuE,EAAW;AACtC,MAAI,CAACxE;AACH,UAAM,IAAI,MAAM,4CAA4C;AAE9D,SAAOA;AACT;AAqBO,MAAM0E,KAAO9d,EAAsC,SACxD;AAAA,EACE,OAAOuQ;AAAA,EACP,cAAA1B,IAAe;AAAA,EACf,UAAAjB;AAAA,EACA,MAAA9L,IAAO;AAAA,EACP,SAAAQ,IAAU;AAAA,EACV,aAAAkO,IAAc;AAAA,EACd,WAAAlR;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC;AAAA,EACA,GAAGtB;AACL,GACAuB,GACA;AACA,QAAM,CAAC+Q,GAAeC,CAAgB,IAAIpH,EAASuF,CAAY,GACzD5Q,IAAQsS,KAAmBE,GAE3BV,IAAeR;AAAA,IACnB,CAACoB,MAAqB;AACpB,MAAIJ,MAAoB,UACtBG,EAAiBC,CAAQ,GAE3B/C,KAAA,QAAAA,EAAW+C;AAAA,IACb;AAAA,IACA,CAACJ,GAAiB3C,CAAQ;AAAA,EAAA,GAGtBqC,IAAgC;AAAA,IACpC,SAAS;AAAA,IACT,eAAeO,MAAgB,aAAa,QAAQ;AAAA,IACpD,KAAKA,MAAgB,aAAa,KAAK;AAAA,IACvC,GAAGjR;AAAA,EAAA;AAGL,SACE,gBAAAO,EAAC8d,GAAY,UAAZ,EAAqB,OAAO,EAAE,OAAA3f,GAAO,UAAU8R,GAAc,MAAAjO,GAAM,SAAAQ,GAAS,aAAAkO,EAAA,GAC3E,UAAA,gBAAA1Q;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAJ;AAAA,MACA,WAAW9B,EAAG,eAAe,gBAAgB0E,CAAO,IAAI,gBAAgBkO,CAAW,IAAIlR,CAAS;AAAA,MAChG,OAAO2Q;AAAA,MACP,eAAaxQ;AAAA,MACZ,GAAGtB;AAAA,MAEH,UAAAqB;AAAA,IAAA;AAAA,EAAA,GAEL;AAEJ,CAAC;AAEDse,GAAK,cAAc;AAQZ,MAAMC,KAAU/d,EAAyC,SAC9D,EAAE,WAAAV,GAAW,OAAAC,GAAO,UAAAC,GAAU,GAAGrB,EAAA,GACjCuB,GACA;AACA,QAAM,EAAE,aAAA8Q,GAAa,SAAAlO,EAAA,IAAYub,GAAA,GAE3BG,IAA2B;AAAA,IAC/B,SAAS;AAAA,IACT,eAAexN,MAAgB,aAAa,WAAW;AAAA,IACvD,KAAKlO,MAAY,cAAiBkO,MAAgB,aAApB,IAAqC;AAAA,IACnE,cAAclO,MAAY,UAAUkO,MAAgB,eAAe,yCAAyC;AAAA,IAC5G,aAAalO,MAAY,UAAUkO,MAAgB,aAAa,yCAAyC;AAAA,IACzG,cAAcA,MAAgB,aAAa,KAAK;AAAA,IAChD,iBAAiBlO,MAAY,aAAa,mCAAmC;AAAA,IAC7E,SAASA,MAAY,aAAa,IAAI;AAAA,IACtC,cAAcA,MAAY,aAAa,4BAA4B;AAAA,IACnE,YAAY;AAAA,IACZ,GAAG/C;AAAA,EAAA;AAGL,SACE,gBAAAO;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAJ;AAAA,MACA,MAAK;AAAA,MACL,oBAAkB8Q;AAAA,MAClB,WAAW5S,EAAG,mBAAmB0B,CAAS;AAAA,MAC1C,OAAO0e;AAAA,MACN,GAAG7f;AAAA,MAEH,UAAAqB;AAAA,IAAA;AAAA,EAAA;AAGP,CAAC;AAEDue,GAAQ,cAAc;AActB,MAAMrW,KAAsF;AAAA,EAC1F,IAAI,EAAE,UAAU,IAAI,SAAS,YAAY,QAAQ,GAAA;AAAA,EACjD,IAAI,EAAE,UAAU,IAAI,SAAS,YAAY,QAAQ,GAAA;AAAA,EACjD,IAAI,EAAE,UAAU,IAAI,SAAS,aAAa,QAAQ,GAAA;AACpD,GAEauW,KAAMje,EAAwC,SACzD,EAAE,OAAOke,GAAU,UAAAzV,IAAW,IAAO,MAAAqK,GAAM,WAAAxT,GAAW,OAAAC,GAAO,UAAAC,GAAU,GAAGrB,EAAA,GAC1EuB,GACA;AACA,QAAM,EAAE,OAAAzB,GAAO,UAAA2P,GAAU,MAAA9L,GAAM,SAAAQ,GAAS,aAAAkO,EAAA,IAAgBqN,GAAA,GAClDM,IAAalgB,MAAUigB,GACvB1S,IAAS9D,GAAW5F,CAAI,GAExB0R,IAAc,MAAM;AACxB,IAAK/K,KACHmF,EAASsQ,CAAQ;AAAA,EAErB,GAEMxK,IAAgB,CAAC9Q,MAAwC;;AAC7D,QAAI6F,EAAU;AAEd,UAAM2V,IAAO,MAAM;AAAA,QACjB3K,IAAA7Q,EAAE,cAAc,kBAAhB,gBAAA6Q,EAA+B,iBAAoC,oCAAmC,CAAA;AAAA,IAAC,GAEnG4K,IAAeD,EAAK,QAAQxb,EAAE,aAAa;AAEjD,QAAI0b,IAA0B;AAE9B,IAAI9N,MAAgB,gBACd5N,EAAE,QAAQ,iBAAc0b,KAAYD,IAAe,KAAKD,EAAK,SAC7Dxb,EAAE,QAAQ,gBAAa0b,KAAYD,IAAe,IAAID,EAAK,UAAUA,EAAK,YAE1Exb,EAAE,QAAQ,gBAAa0b,KAAYD,IAAe,KAAKD,EAAK,SAC5Dxb,EAAE,QAAQ,cAAW0b,KAAYD,IAAe,IAAID,EAAK,UAAUA,EAAK,UAG1Exb,EAAE,QAAQ,WAAQ0b,IAAW,IAC7B1b,EAAE,QAAQ,UAAO0b,IAAWF,EAAK,SAAS,IAE1CE,MAAa,SACf1b,EAAE,eAAA,IACF2b,IAAAH,EAAKE,CAAQ,MAAb,QAAAC,EAAgB,UAChBC,IAAAJ,EAAKE,CAAQ,MAAb,QAAAE,EAAgB;AAAA,EAEpB,GAEMC,IAAc,MAAqB;AACvC,UAAM9b,IAAsB;AAAA,MAC1B,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,KAAK;AAAA,MACL,UAAU6I,EAAO;AAAA,MACjB,YAAY;AAAA,MACZ,SAASA,EAAO;AAAA,MAChB,WAAWA,EAAO;AAAA,MAClB,QAAQ/C,IAAW,gBAAgB;AAAA,MACnC,SAASA,IAAW,MAAM;AAAA,MAC1B,YAAY;AAAA,MACZ,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,iBAAiB;AAAA,MACjB,YAAY;AAAA,IAAA;AAGd,WAAInG,MAAY,SACP;AAAA,MACL,GAAGK;AAAA,MACH,OAAOwb,IAAa,kCAAkC;AAAA,MACtD,cAAc3N,MAAgB,eAAe,aAAa2N,IAAa,kCAAkC,aAAa,KAAK;AAAA,MAC3H,aAAa3N,MAAgB,aAAa,aAAa2N,IAAa,kCAAkC,aAAa,KAAK;AAAA,MACxH,cAAc3N,MAAgB,eAAe,KAAK;AAAA,MAClD,aAAaA,MAAgB,aAAa,KAAK;AAAA,IAAA,IAI/ClO,MAAY,aACP;AAAA,MACL,GAAGK;AAAA,MACH,OAAOwb,IAAa,qCAAqC;AAAA,MACzD,iBAAiBA,IAAa,sCAAsC;AAAA,MACpE,cAAc;AAAA,MACd,WAAWA,IAAa,4BAA4B;AAAA,IAAA,IAKjD;AAAA,MACL,GAAGxb;AAAA,MACH,OAAOwb,IAAa,kCAAkC;AAAA,MACtD,iBAAiBA,IAAa,6BAA6B;AAAA,MAC3D,cAAc;AAAA,IAAA;AAAA,EAElB;AAEA,SACE,gBAAA/Z;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAA1E;AAAA,MACA,MAAK;AAAA,MACL,MAAK;AAAA,MACL,iBAAeye;AAAA,MACf,iBAAe1V;AAAA,MACf,UAAAA;AAAA,MACA,UAAU0V,IAAa,IAAI;AAAA,MAC3B,WAAWvgB,EAAG,cAAcugB,KAAc,wBAAwB7e,CAAS;AAAA,MAC3E,OAAO,EAAE,GAAGmf,EAAA,GAAe,GAAGlf,EAAA;AAAA,MAC9B,SAASiU;AAAA,MACT,WAAWE;AAAA,MACV,GAAGvV;AAAA,MAEH,UAAA;AAAA,QAAA2U,KAAQ,gBAAAhT,EAAC,QAAA,EAAK,WAAU,mBAAmB,UAAAgT,GAAK;AAAA,QAChDtT;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGP,CAAC;AAEDye,GAAI,cAAc;AAQX,MAAMS,KAAY1e,EAA2C,SAClE,EAAE,WAAAV,GAAW,OAAAC,GAAO,UAAAC,GAAU,GAAGrB,EAAA,GACjCuB,GACA;AACA,QAAMif,IAA6B;AAAA,IACjC,MAAM;AAAA,IACN,GAAGpf;AAAA,EAAA;AAGL,SACE,gBAAAO,EAAC,OAAA,EAAI,KAAAJ,GAAU,WAAW9B,EAAG,qBAAqB0B,CAAS,GAAG,OAAOqf,GAAc,GAAGxgB,GACnF,UAAAqB,EAAA,CACH;AAEJ,CAAC;AAEDkf,GAAU,cAAc;AAUjB,MAAME,KAAW5e,EAA0C,SAChE,EAAE,OAAO6e,GAAY,WAAAvf,GAAW,OAAAC,GAAO,UAAAC,GAAU,GAAGrB,EAAA,GACpDuB,GACA;AACA,QAAM,EAAE,OAAAzB,EAAA,IAAU4f,GAAA;AAGlB,MAAI,EAFe5f,MAAU4gB,GAEZ,QAAO;AAExB,QAAMC,IAA4B;AAAA,IAChC,SAAS;AAAA,IACT,WAAW;AAAA,IACX,GAAGvf;AAAA,EAAA;AAGL,SACE,gBAAA6E,EAAA8P,IAAA,EACE,UAAA;AAAA,IAAA,gBAAApU,EAAC,SAAA,EACE,UAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAMH;AAAA,IACA,gBAAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAJ;AAAA,QACA,MAAK;AAAA,QACL,UAAU;AAAA,QACV,WAAW9B,EAAG,oBAAoB0B,CAAS;AAAA,QAC3C,OAAOwf;AAAA,QACN,GAAG3gB;AAAA,QAEH,UAAAqB;AAAA,MAAA;AAAA,IAAA;AAAA,EACH,GACF;AAEJ,CAAC;AAEDof,GAAS,cAAc;AC3UvB,MAAMG,KAAmB7F,GAA4C,IAAI;AAEzE,SAAS8F,KAAsB;AAC7B,QAAM5F,IAAUC,GAAW0F,EAAgB;AAC3C,MAAI,CAAC3F;AACH,UAAM,IAAI,MAAM,gDAAgD;AAElE,SAAOA;AACT;AAmBO,MAAM6F,KAAYjf,EAA2C,SAClE;AAAA,EACE,OAAOuQ;AAAA,EACP,cAAA1B,IAAe,CAAA;AAAA,EACf,UAAAjB;AAAA,EACA,eAAAsR,IAAgB;AAAA,EAChB,SAAA5c,IAAU;AAAA,EACV,WAAAhD;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC;AAAA,EACA,GAAGtB;AACL,GACAuB,GACA;AACA,QAAM,CAAC+Q,GAAeC,CAAgB,IAAIpH,EAASuF,CAAY,GACzDsQ,IAAgB5O,KAAmBE,GAEnC2O,IAAa7P;AAAA,IACjB,CAAC8P,MAAsB;AACrB,YAAMC,IAAaH,EAAc,SAASE,CAAS;AACnD,UAAI1O;AAEJ,MAAI2O,IACF3O,IAAWwO,EAAc,OAAO,CAAC7N,MAAMA,MAAM+N,CAAS,IAC7CH,IACTvO,IAAW,CAAC,GAAGwO,GAAeE,CAAS,IAEvC1O,IAAW,CAAC0O,CAAS,GAGnB9O,MAAoB,UACtBG,EAAiBC,CAAQ,GAE3B/C,KAAA,QAAAA,EAAW+C;AAAA,IACb;AAAA,IACA,CAACwO,GAAeD,GAAe3O,GAAiB3C,CAAQ;AAAA,EAAA,GAGpDqC,IAAgC;AAAA,IACpC,SAAS;AAAA,IACT,eAAe;AAAA,IACf,KAAK3N,MAAY,cAAc,IAAI;AAAA,IACnC,GAAG/C;AAAA,EAAA;AAGL,SACE,gBAAAO,EAACif,GAAiB,UAAjB,EAA0B,OAAO,EAAE,eAAAI,GAAe,YAAAC,GAAY,eAAAF,GAAe,SAAA5c,EAAA,GAC5E,UAAA,gBAAAxC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAJ;AAAA,MACA,WAAW9B,EAAG,oBAAoB,qBAAqB0E,CAAO,IAAIhD,CAAS;AAAA,MAC3E,OAAO2Q;AAAA,MACP,eAAaxQ;AAAA,MACZ,GAAGtB;AAAA,MAEH,UAAAqB;AAAA,IAAA;AAAA,EAAA,GAEL;AAEJ,CAAC;AAEDyf,GAAU,cAAc;AAkBxB,MAAMM,KAAuBrG,GAAgD,IAAI;AAEjF,SAASsG,KAA0B;AACjC,QAAMpG,IAAUC,GAAWkG,EAAoB;AAC/C,MAAI,CAACnG;AACH,UAAM,IAAI,MAAM,wEAAwE;AAE1F,SAAOA;AACT;AAEO,MAAMqG,KAAgBzf,EAA+C,SAC1E,EAAE,OAAA/B,GAAO,UAAAwK,IAAW,IAAO,WAAAnJ,GAAW,OAAAC,GAAO,UAAAC,GAAU,GAAGrB,EAAA,GAC1DuB,GACA;AACA,QAAM,EAAE,eAAAyf,GAAe,SAAA7c,EAAA,IAAY0c,GAAA,GAC7BM,IAAaH,EAAc,SAASlhB,CAAK,GAEzC2H,IAA2B;AAAA,IAC/B,cAActD,MAAY,YAAY,yCAAyC;AAAA,IAC/E,QAAQA,MAAY,cAAcA,MAAY,cAAc,2CAA2C;AAAA,IACvG,cAAcA,MAAY,cAAc,4BAA4B;AAAA,IACpE,UAAU;AAAA,IACV,GAAG/C;AAAA,EAAA;AAIL,SAAI+C,MAAY,cAAc,CAACgd,MAC7B1Z,EAAU,eAAe,2CAIzB,gBAAA9F,EAACyf,GAAqB,UAArB,EAA8B,OAAO,EAAE,OAAAthB,GAAO,YAAAqhB,GAAY,UAAA7W,KACzD,UAAA,gBAAA3I;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAJ;AAAA,MACA,WAAW9B,EAAG,yBAAyB0hB,KAAc,mCAAmChgB,CAAS;AAAA,MACjG,OAAOsG;AAAA,MACN,GAAGzH;AAAA,MAEH,UAAAqB;AAAA,IAAA;AAAA,EAAA,GAEL;AAEJ,CAAC;AAEDigB,GAAc,cAAc;AAU5B,SAASzS,GAAY,EAAE,YAAAsS,KAAuC;AAC5D,SACE,gBAAAxf;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAO;AAAA,QACL,WAAWwf,IAAa,mBAAmB;AAAA,QAC3C,YAAY;AAAA,MAAA;AAAA,MAGd,UAAA,gBAAAxf;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,GAAE;AAAA,UACF,QAAO;AAAA,UACP,aAAY;AAAA,UACZ,eAAc;AAAA,UACd,gBAAe;AAAA,QAAA;AAAA,MAAA;AAAA,IACjB;AAAA,EAAA;AAGN;AAEO,MAAM4f,KAAmB1f,EAAqD,SACnF,EAAE,MAAA8S,GAAM,WAAAxT,GAAW,OAAAC,GAAO,UAAAC,GAAU,GAAGrB,EAAA,GACvCuB,GACA;AACA,QAAM,EAAE,YAAA0f,EAAA,IAAeJ,GAAA,GACjB,EAAE,OAAA/gB,GAAO,YAAAqhB,GAAY,UAAA7W,EAAA,IAAa+W,GAAA,GAElChM,IAAc,MAAM;AACxB,IAAK/K,KACH2W,EAAWnhB,CAAK;AAAA,EAEpB,GAEMua,IAA8B;AAAA,IAClC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,OAAO;AAAA,IACP,SAAS;AAAA,IACT,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO/P,IAAW,mCAAmC;AAAA,IACrD,iBAAiB;AAAA,IACjB,QAAQ;AAAA,IACR,QAAQA,IAAW,gBAAgB;AAAA,IACnC,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,GAAGlJ;AAAA,EAAA;AAGL,SACE,gBAAA6E;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAA1E;AAAA,MACA,MAAK;AAAA,MACL,iBAAe4f;AAAA,MACf,iBAAe7W;AAAA,MACf,UAAAA;AAAA,MACA,WAAW7K,EAAG,4BAA4B0B,CAAS;AAAA,MACnD,OAAOkZ;AAAA,MACP,SAAShF;AAAA,MACT,cAAc,CAAC5Q,MAAM;AACnB,QAAK6F,MACH7F,EAAE,cAAc,MAAM,kBAAkB;AAAA,MAE5C;AAAA,MACA,cAAc,CAACA,MAAM;AACnB,QAAAA,EAAE,cAAc,MAAM,kBAAkB;AAAA,MAC1C;AAAA,MACC,GAAGzE;AAAA,MAEH,UAAA;AAAA,QAAAqB;AAAA,QACD,gBAAAM,EAAC,QAAA,EAAK,OAAO,EAAE,OAAO,kCAAkC,YAAY,GAAG,YAAY,MAChF,UAAAgT,KAAQ,gBAAAhT,EAACkN,IAAA,EAAY,YAAAsS,GAAwB,EAAA,CAChD;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN,CAAC;AAEDI,GAAiB,cAAc;AAQxB,MAAMC,KAAmB3f,EAAkD,SAChF,EAAE,WAAAV,GAAW,OAAAC,GAAO,UAAAC,GAAU,GAAGrB,EAAA,GACjCuB,GACA;AACA,QAAM,EAAE,YAAA4f,EAAA,IAAeE,GAAA,GAEjBtb,IAA8B;AAAA,IAClC,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,WAAWob,IAAa,WAAW;AAAA,IACnC,SAASA,IAAa,IAAI;AAAA,EAAA,GAGtBM,IAA4B;AAAA,IAChC,SAAS;AAAA,IACT,OAAO;AAAA,IACP,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,GAAGrgB;AAAA,EAAA;AAGL,SACE,gBAAAO;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAJ;AAAA,MACA,MAAK;AAAA,MACL,eAAa,CAAC4f;AAAA,MACd,WAAW1hB,EAAG,4BAA4B0B,CAAS;AAAA,MACnD,OAAO4E;AAAA,MACN,GAAG/F;AAAA,MAEJ,UAAA,gBAAA2B,EAAC,OAAA,EAAI,OAAO8f,GAAa,UAAApgB,EAAA,CAAS;AAAA,IAAA;AAAA,EAAA;AAGxC,CAAC;AAEDmgB,GAAiB,cAAc;ACvR/B,MAAME,KAAkB3G,GAA2C,IAAI;AAEvE,SAAS4G,KAAqB;AAC5B,QAAM1G,IAAUC,GAAWwG,EAAe;AAC1C,MAAI,CAACzG;AACH,UAAM,IAAI,MAAM,oDAAoD;AAEtE,SAAOA;AACT;AAuBO,MAAM2G,KAAW/f,EAA0C,SAChE;AAAA,EACE,SAAAsb;AAAA,EACA,QAAQC;AAAA,EACR,aAAAC,IAAc;AAAA,EACd,cAAAC;AAAA,EACA,WAAAjE,IAAY;AAAA,EACZ,QAAAkE,IAAS;AAAA,EACT,eAAAsE,IAAgB;AAAA,EAChB,WAAA1gB;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC;AAAA,EACA,GAAGtB;AACL,GACAuB,GACA;;AACA,QAAM,CAACqc,GAAgBC,CAAiB,IAAI1S,EAASkS,CAAW,GAC1D,CAAC5D,GAAUC,CAAW,IAAIvO,EAAS,EAAE,KAAK,GAAG,MAAM,GAAG,GACtD,CAAC2W,GAAaC,CAAc,IAAI5W,EAAS,EAAE,GAC3C,CAACsQ,GAASC,CAAU,IAAIvQ,EAAS,EAAK,GACtCwO,IAAa7I,EAAoB,IAAI,GACrCkR,IAAUlR,EAAuB,IAAI,GAErC4G,IAAS0F,KAAoBQ;AAEnC,EAAApM,EAAU,OACRkK,EAAW,EAAI,GACR,MAAMA,EAAW,EAAK,IAC5B,CAAA,CAAE;AAEL,QAAMuC,IAAY7M;AAAA,IAChB,CAAC8M,MAAkB;AACjB,MAAId,MAAqB,UACvBS,EAAkBK,CAAI,GAExBZ,KAAA,QAAAA,EAAeY,IACVA,KACH6D,EAAe,EAAE;AAAA,IAErB;AAAA,IACA,CAAC3E,GAAkBE,CAAY;AAAA,EAAA,GAG3B2E,IAAQ7Q,EAAY,MAAM6M,EAAU,EAAK,GAAG,CAACA,CAAS,CAAC;AAG7D,EAAAzM,EAAU,MAAM;AACd,QAAI,CAACkG,KAAU,CAACiC,EAAW,WAAW,CAAC8B,EAAS;AAEhD,UAAM2C,IAAiB,MAAM;AAC3B,YAAMjB,IAAUxD,EAAW;AAC3B,UAAI,CAACwD,EAAS;AAEd,YAAM+E,IAAO/E,EAAQ,sBAAA,GACfmB,IAAU,OAAO,SACjBC,IAAU,OAAO;AAEvB,UAAItE,IAAM,GACNC,IAAO;AAEX,MAAIb,EAAU,WAAW,QAAQ,IAC/BY,IAAMiI,EAAK,SAAS3D,IAAUhB,IAE9BtD,IAAMiI,EAAK,MAAM3D,IAAUhB,GAGzBlE,EAAU,SAAS,OAAO,IAC5Ba,IAAOgI,EAAK,OAAO5D,IAEnBpE,IAAOgI,EAAK,QAAQ5D,GAGtB5E,EAAY,EAAE,KAAAO,GAAK,MAAAC,GAAM;AAAA,IAC3B;AAEA,WAAAkE,EAAA,GACA,OAAO,iBAAiB,UAAUA,CAAc,GAChD,OAAO,iBAAiB,UAAUA,GAAgB,EAAI,GAE/C,MAAM;AACX,aAAO,oBAAoB,UAAUA,CAAc,GACnD,OAAO,oBAAoB,UAAUA,GAAgB,EAAI;AAAA,IAC3D;AAAA,EACF,GAAG,CAAC1G,GAAQ2B,GAAWkE,GAAQ9B,CAAO,CAAC,GAGvCjK,EAAU,MAAM;AACd,QAAI,CAACkG,EAAQ;AAEb,UAAMrC,IAAc,CAAC5Q,MAAkB;;AACrC,OACE6Q,IAAAqE,EAAW,YAAX,QAAArE,EAAoB,SAAS7Q,EAAE,YAC/B2b,IAAA4B,EAAQ,YAAR,QAAA5B,EAAiB,SAAS3b,EAAE,WAI9BwZ,EAAU,EAAK;AAAA,IACjB;AAEA,oBAAS,iBAAiB,aAAa5I,CAAW,GAC3C,MAAM,SAAS,oBAAoB,aAAaA,CAAW;AAAA,EACpE,GAAG,CAACqC,GAAQuG,CAAS,CAAC;AAGtB,QAAM1I,IAAgBnE;AAAA,IACpB,CAAC3M,MAAqB;;AACpB,UAAI,CAACiT,GAAQ;AACX,SAAIjT,EAAE,QAAQ,eAAeA,EAAE,QAAQ,WAAWA,EAAE,QAAQ,SAC1DA,EAAE,eAAA,GACFwZ,EAAU,EAAI;AAEhB;AAAA,MACF;AAEA,YAAMkE,KAAQ7M,IAAA0M,EAAQ,YAAR,gBAAA1M,EAAiB,iBAA8B;AAC7D,UAAK6M,KAAA,QAAAA,EAAO;AAEZ,gBAAQ1d,EAAE,KAAA;AAAA,UACR,KAAK;AACH,YAAAA,EAAE,eAAA,GACFsd,EAAe,CAACnG,OAAUA,IAAO,KAAKuG,EAAM,MAAM;AAClD;AAAA,UACF,KAAK;AACH,YAAA1d,EAAE,eAAA,GACFsd,EAAe,CAACnG,OAAUA,IAAO,IAAIuG,EAAM,UAAUA,EAAM,MAAM;AACjE;AAAA,UACF,KAAK;AACH,YAAA1d,EAAE,eAAA,GACFsd,EAAe,CAAC;AAChB;AAAA,UACF,KAAK;AACH,YAAAtd,EAAE,eAAA,GACFsd,EAAeI,EAAM,SAAS,CAAC;AAC/B;AAAA,UACF,KAAK;AACH,YAAA1d,EAAE,eAAA,GACFwZ,EAAU,EAAK,IACfmC,IAAAzG,EAAW,YAAX,QAAAyG,EAAoB;AACpB;AAAA,UACF,KAAK;AAAA,UACL,KAAK;AACH,YAAA3b,EAAE,eAAA,GACEqd,KAAe,OACjBzB,IAAA8B,EAAML,CAAW,MAAjB,QAAAzB,EAAoB;AAEtB;AAAA,QAAA;AAAA,IAEN;AAAA,IACA,CAAC3I,GAAQoK,GAAa7D,CAAS;AAAA,EAAA;AAIjC,EAAAzM,EAAU,MAAM;;AACd,QAAI,CAACkG,KAAUoK,IAAc,EAAG;AAChC,UAAMK,KAAQ7M,IAAA0M,EAAQ,YAAR,gBAAA1M,EAAiB,iBAA8B;AAC7D,KAAA8K,IAAA+B,KAAA,gBAAAA,EAAQL,OAAR,QAAA1B,EAAsB;AAAA,EACxB,GAAG,CAAC1I,GAAQoK,CAAW,CAAC;AAExB,QAAMM,IAAejF,EAAQ,OACvBwB,IAAiBC,GAAazB,GAAkD;AAAA,IACpF,KAAKxD;AAAA,IACL,iBAAiB;AAAA,IACjB,iBAAiBjC;AAAA,IACjB,SAAS,CAACjT,MAAwB;;AAC/B,OAAA6Q,IAAA8M,EAAa,YAAb,QAAA9M,EAAA,KAAA8M,GAAuE3d,IACxEwZ,EAAU,CAACvG,CAAM;AAAA,IACnB;AAAA,IACA,WAAW,CAACjT,MAAqB;;AAC9B,OAAA6Q,IAAA8M,EAAa,cAAb,QAAA9M,EAAA,KAAA8M,GAAsE3d,IACvE8Q,EAAc9Q,CAAC;AAAA,IACjB;AAAA,EAAA,CACD,GAEK4d,IAA2B;AAAA,IAC/B,UAAU;AAAA,IACV,KAAK5I,EAAS;AAAA,IACd,MAAMJ,EAAU,SAAS,KAAK,IAAI,SAASI,EAAS;AAAA,IACpD,OAAOJ,EAAU,SAAS,KAAK,IAAI,OAAO,aAAaI,EAAS,OAAO;AAAA,IACvE,QAAQ;AAAA,IACR,YAAUnE,IAAAqE,EAAW,YAAX,gBAAArE,EAAoB,gBAAe;AAAA,IAC7C,iBAAiB;AAAA,IACjB,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,WAAW;AAAA,IACX,SAAS;AAAA,IACT,WAAW;AAAA,IACX,SAAS;AAAA,IACT,GAAGlU;AAAA,EAAA;AAGL,SACE,gBAAAO,EAAC+f,GAAgB,UAAhB,EAAyB,OAAO,EAAE,QAAAhK,GAAQ,OAAOmK,IAAgBI,IAAQ,MAAM;AAAA,EAAC,GAAG,aAAAH,GAAa,gBAAAC,EAAA,GAC/F,UAAA,gBAAA9b;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAA1E;AAAA,MACA,WAAW9B,EAAG,mBAAmB0B,CAAS;AAAA,MAC1C,OAAO,EAAE,SAAS,eAAA;AAAA,MAClB,eAAaG;AAAA,MACZ,GAAGtB;AAAA,MAEH,UAAA;AAAA,QAAA2e;AAAA,QACAjH,KAAU+D,KAAW/C;AAAA,UACpB,gBAAAzS,EAAA8P,IAAA,EACE,UAAA;AAAA,YAAA,gBAAApU,EAAC,SAAA,EACE,UAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAMH;AAAA,YACA,gBAAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,KAAKqgB;AAAA,gBACL,MAAK;AAAA,gBACL,OAAOK;AAAA,gBACP,WAAW9M;AAAA,gBACX,UAAU;AAAA,gBAET,UAAAlU;AAAA,cAAA;AAAA,YAAA;AAAA,UACH,GACF;AAAA,UACA,SAAS;AAAA,QAAA;AAAA,MACX;AAAA,IAAA;AAAA,EAAA,GAEJ;AAEJ,CAAC;AAEDugB,GAAS,cAAc;AAgBhB,MAAMU,KAAezgB,EAA8C,SACxE,EAAE,UAAAyI,IAAW,IAAO,MAAAqK,GAAM,UAAA4N,GAAU,aAAAC,IAAc,IAAO,WAAArhB,GAAW,OAAAC,GAAO,UAAAC,GAAU,SAAAohB,GAAS,GAAGziB,EAAA,GACjGuB,GACA;AACA,QAAM,EAAE,OAAA0gB,EAAA,IAAUN,GAAA,GAEZtM,IAAc,CAAC5Q,MAAwC;AAC3D,IAAI6F,MACJmY,KAAA,QAAAA,EAAUhe,IACVwd,EAAA;AAAA,EACF,GAEMxa,IAA2B;AAAA,IAC/B,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,KAAK;AAAA,IACL,SAAS;AAAA,IACT,UAAU;AAAA,IACV,OAAO6C,IACH,sCACAkY,IACA,gCACA;AAAA,IACJ,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,QAAQlY,IAAW,gBAAgB;AAAA,IACnC,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,GAAGlJ;AAAA,EAAA,GAGCoL,IAA2B;AAAA,IAC/B,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAOlC,IACH,sCACAkY,IACA,gCACA;AAAA,IACJ,YAAY;AAAA,EAAA,GAGRE,IAA+B;AAAA,IACnC,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,OAAO;AAAA,IACP,YAAY;AAAA,EAAA;AAGd,SACE,gBAAAzc;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAA1E;AAAA,MACA,MAAK;AAAA,MACL,iBAAe+I;AAAA,MACf,UAAUA,IAAW,KAAK;AAAA,MAC1B,WAAW7K,EAAG,wBAAwB6K,KAAY,kCAAkCnJ,CAAS;AAAA,MAC7F,OAAOsG;AAAA,MACP,SAAS4N;AAAA,MACT,cAAc,CAAC5Q,MAAM;AACnB,QAAK6F,MACH7F,EAAE,cAAc,MAAM,kBAAkB;AAAA,MAE5C;AAAA,MACA,cAAc,CAACA,MAAM;AACnB,QAAAA,EAAE,cAAc,MAAM,kBAAkB;AAAA,MAC1C;AAAA,MACA,SAAS,CAACA,MAAM;AACd,QAAAA,EAAE,cAAc,MAAM,kBAAkB;AAAA,MAC1C;AAAA,MACA,QAAQ,CAACA,MAAM;AACb,QAAAA,EAAE,cAAc,MAAM,kBAAkB;AAAA,MAC1C;AAAA,MACC,GAAGzE;AAAA,MAEH,UAAA;AAAA,QAAA2U,KAAQ,gBAAAhT,EAAC,QAAA,EAAK,OAAO6K,GAAY,UAAAmI,GAAK;AAAA,0BACtC,QAAA,EAAK,OAAO,EAAE,MAAM,EAAA,GAAM,UAAAtT,GAAS;AAAA,QACnCkhB,KAAY,gBAAA5gB,EAAC,QAAA,EAAK,OAAO+gB,GAAgB,UAAAH,EAAA,CAAS;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGzD,CAAC;AAEDD,GAAa,cAAc;AAQpB,MAAMK,KAAkB9gB,EAAiD,SAC9E,EAAE,WAAAV,GAAW,OAAAC,GAAO,GAAGpB,EAAA,GACvBuB,GACA;AACA,QAAMqhB,IAA8B;AAAA,IAClC,QAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,QAAQ;AAAA,IACR,GAAGxhB;AAAA,EAAA;AAGL,SACE,gBAAAO;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAJ;AAAA,MACA,MAAK;AAAA,MACL,WAAW9B,EAAG,2BAA2B0B,CAAS;AAAA,MAClD,OAAOyhB;AAAA,MACN,GAAG5iB;AAAA,IAAA;AAAA,EAAA;AAGV,CAAC;AAED2iB,GAAgB,cAAc;AAQvB,MAAME,KAAgBhhB,EAA+C,SAC1E,EAAE,WAAAV,GAAW,OAAAC,GAAO,UAAAC,GAAU,GAAGrB,EAAA,GACjCuB,GACA;AACA,QAAMkN,IAA4B;AAAA,IAChC,SAAS;AAAA,IACT,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,eAAe;AAAA,IACf,eAAe;AAAA,IACf,GAAGrN;AAAA,EAAA;AAGL,SACE,gBAAAO;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAJ;AAAA,MACA,WAAW9B,EAAG,yBAAyB0B,CAAS;AAAA,MAChD,OAAOsN;AAAA,MACN,GAAGzO;AAAA,MAEH,UAAAqB;AAAA,IAAA;AAAA,EAAA;AAGP,CAAC;AAEDwhB,GAAc,cAAc;AC3a5B,MAAMC,KAAc/H,GAAuC,IAAI;AAE/D,SAASgI,KAAiB;AACxB,QAAM9H,IAAUC,GAAW4H,EAAW;AACtC,MAAI,CAAC7H;AACH,UAAM,IAAI,MAAM,4CAA4C;AAE9D,SAAOA;AACT;AAiBO,MAAM+H,KAAOnhB,EAAmC,SACrD;AAAA,EACE,YAAYohB;AAAA,EACZ,UAAAxT;AAAA,EACA,MAAA9L,IAAO;AAAA,EACP,WAAAuf,IAAY;AAAA,EACZ,WAAA/hB;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC;AAAA,EACA,GAAGtB;AACL,GACAuB,GACA;AACA,QAAM,CAAC4hB,GAAoBC,CAAqB,IAAIjY,EAAwB,IAAI,GAC1EkY,IAAaJ,MAAyB,SAAYA,IAAuBE,GAEzEG,IAAgB,CAACxjB,MAAyB;AAC9C,IAAImjB,MAAyB,UAC3BG,EAAsBtjB,CAAK,GAE7B2P,KAAA,QAAAA,EAAW3P;AAAA,EACb,GAEMuiB,IAA2B;AAAA,IAC/B,SAAS;AAAA,IACT,eAAe;AAAA,IACf,KAAK;AAAA,IACL,SAAS;AAAA,IACT,GAAGjhB;AAAA,EAAA;AAGL,SACE,gBAAAO,EAACmhB,GAAY,UAAZ,EAAqB,OAAO,EAAE,MAAAnf,GAAM,YAAA0f,GAAY,eAAAC,GAAe,WAAAJ,EAAA,GAC9D,UAAA,gBAAAvhB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAJ;AAAA,MACA,WAAW9B,EAAG,eAAe,gBAAgBkE,CAAI,IAAIuf,KAAa,0BAA0B/hB,CAAS;AAAA,MACrG,OAAOkhB;AAAA,MACP,eAAa/gB;AAAA,MACZ,GAAGtB;AAAA,MAEH,UAAAqB;AAAA,IAAA;AAAA,EAAA,GAEL;AAEJ,CAAC;AAED2hB,GAAK,cAAc;AAkBnB,MAAMzZ,KAAwG;AAAA,EAC5G,IAAI,EAAE,QAAQ,IAAI,UAAU,IAAI,UAAU,IAAI,SAAS,GAAA;AAAA,EACvD,IAAI,EAAE,QAAQ,IAAI,UAAU,IAAI,UAAU,IAAI,SAAS,GAAA;AAAA,EACvD,IAAI,EAAE,QAAQ,IAAI,UAAU,IAAI,UAAU,IAAI,SAAS,GAAA;AACzD,GAEaga,KAAW1hB,EAA6C,SACnE,EAAE,OAAA/B,GAAO,MAAA6U,GAAM,OAAA6O,GAAO,UAAAlZ,IAAW,IAAO,SAAAmY,GAAS,WAAAthB,GAAW,OAAAC,GAAO,UAAAC,GAAU,GAAGrB,EAAA,GAChFuB,GACA;AACA,QAAM,EAAE,MAAAoC,GAAM,YAAA0f,GAAY,eAAAC,GAAe,WAAAJ,EAAA,IAAcH,GAAA,GACjDU,IAAWJ,MAAevjB,GAC1BuN,IAAS9D,GAAW5F,CAAI,GAExB0R,IAAc,MAAM;AACxB,IAAI/K,MACJgZ,EAAcxjB,CAAK,GACnB2iB,KAAA,QAAAA,EAAU3iB;AAAA,EACZ,GAEM2H,IAA2B;AAAA,IAC/B,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,KAAK;AAAA,IACL,OAAO;AAAA,IACP,WAAW4F,EAAO;AAAA,IAClB,SAAS6V,IAAY7V,EAAO,UAAU,KAAKA,EAAO,OAAO;AAAA,IACzD,UAAUA,EAAO;AAAA,IACjB,YAAYoW,IAAW,MAAM;AAAA,IAC7B,OAAOnZ,IACH,sCACAmZ,IACA,kCACA;AAAA,IACJ,iBAAiBA,IAAW,6BAA6B;AAAA,IACzD,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,QAAQnZ,IAAW,gBAAgB;AAAA,IACnC,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,SAAS;AAAA,IACT,gBAAgB4Y,IAAY,WAAW;AAAA,IACvC,GAAG9hB;AAAA,EAAA,GAGCoL,IAA2B;AAAA,IAC/B,OAAOa,EAAO;AAAA,IACd,QAAQA,EAAO;AAAA,IACf,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,EAAA,GAGZqW,IAA4B;AAAA,IAChC,YAAY;AAAA,EAAA;AAGd,SACE,gBAAAzd;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAA1E;AAAA,MACA,MAAK;AAAA,MACL,UAAA+I;AAAA,MACA,WAAW7K,EAAG,oBAAoBgkB,KAAY,4BAA4BtiB,CAAS;AAAA,MACnF,OAAOsG;AAAA,MACP,SAAS4N;AAAA,MACT,cAAc,CAAC5Q,MAAM;AACnB,QAAI,CAAC6F,KAAY,CAACmZ,MAChBhf,EAAE,cAAc,MAAM,kBAAkB;AAAA,MAE5C;AAAA,MACA,cAAc,CAACA,MAAM;AACnB,QAAKgf,MACHhf,EAAE,cAAc,MAAM,kBAAkB;AAAA,MAE5C;AAAA,MACA,OAAOye,IAAY,OAAO7hB,CAAQ,IAAI;AAAA,MACrC,GAAGrB;AAAA,MAEH,UAAA;AAAA,QAAA2U,KAAQ,gBAAAhT,EAAC,QAAA,EAAK,OAAO6K,GAAY,UAAAmI,GAAK;AAAA,QACtC,CAACuO,KAAa,gBAAAvhB,EAAC,QAAA,EAAK,OAAO,EAAE,MAAM,KAAM,UAAAN,GAAS;AAAA,QAClD,CAAC6hB,KAAaM,uBAAU,QAAA,EAAK,OAAOE,GAAa,UAAAF,EAAA,CAAM;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAG9D,CAAC;AAEDD,GAAS,cAAc;AAUhB,MAAMI,KAAY9hB,EAA2C,SAClE,EAAE,OAAA0K,GAAO,WAAApL,GAAW,OAAAC,GAAO,UAAAC,GAAU,GAAGrB,EAAA,GACxCuB,GACA;AACA,QAAM,EAAE,WAAA2hB,EAAA,IAAcH,GAAA,GAEhBtQ,IAA4B;AAAA,IAChC,SAAS;AAAA,IACT,eAAe;AAAA,IACf,KAAK;AAAA,IACL,GAAGrR;AAAA,EAAA,GAGCqN,IAA4B;AAAA,IAChC,SAAS;AAAA,IACT,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,eAAe;AAAA,IACf,eAAe;AAAA,EAAA;AAGjB,SACE,gBAAAxI,EAAC,OAAA,EAAI,KAAA1E,GAAU,WAAW9B,EAAG,qBAAqB0B,CAAS,GAAG,OAAOsR,GAAa,GAAGzS,GAClF,UAAA;AAAA,IAAAuM,KAAS,CAAC2W,KAAa,gBAAAvhB,EAAC,OAAA,EAAI,OAAO8M,GAAa,UAAAlC,GAAM;AAAA,IACtDlL;AAAA,EAAA,GACH;AAEJ,CAAC;AAEDsiB,GAAU,cAAc;AAQjB,MAAMC,KAAc/hB,EAA6C,SACtE,EAAE,WAAAV,GAAW,OAAAC,GAAO,GAAGpB,EAAA,GACvBuB,GACA;AACA,QAAMqhB,IAA8B;AAAA,IAClC,QAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,QAAQ;AAAA,IACR,GAAGxhB;AAAA,EAAA;AAGL,SACE,gBAAAO;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAJ;AAAA,MACA,MAAK;AAAA,MACL,WAAW9B,EAAG,uBAAuB0B,CAAS;AAAA,MAC9C,OAAOyhB;AAAA,MACN,GAAG5iB;AAAA,IAAA;AAAA,EAAA;AAGV,CAAC;AAED4jB,GAAY,cAAc;AC3O1B,MAAMra,KAA0G;AAAA,EAC9G,IAAI,EAAE,QAAQ,IAAI,UAAU,IAAI,KAAK,GAAG,UAAU,GAAA;AAAA,EAClD,IAAI,EAAE,QAAQ,IAAI,UAAU,IAAI,KAAK,GAAG,UAAU,GAAA;AAAA,EAClD,IAAI,EAAE,QAAQ,IAAI,UAAU,IAAI,KAAK,GAAG,UAAU,GAAA;AACpD;AAEA,SAASsa,KAAkB;AACzB,SACE,gBAAAliB,EAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QACnD,UAAA,gBAAAA,EAAC,UAAK,GAAE,kBAAiB,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,QAAA,CAAQ,EAAA,CAChH;AAEJ;AAEA,SAASmiB,KAAmB;AAC1B,SACE,gBAAAniB,EAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QACnD,UAAA,gBAAAA,EAAC,UAAK,GAAE,gBAAe,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,QAAA,CAAQ,EAAA,CAC9G;AAEJ;AAEA,SAASoiB,KAAmB;AAC1B,SACE,gBAAApiB,EAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QACnD,UAAA,gBAAAA,EAAC,UAAK,GAAE,iCAAgC,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,QAAA,CAAQ,EAAA,CAC/H;AAEJ;AAEA,SAASqiB,KAAoB;AAC3B,SACE,gBAAAriB,EAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QACnD,UAAA,gBAAAA,EAAC,UAAK,GAAE,4BAA2B,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,QAAA,CAAQ,EAAA,CAC1H;AAEJ;AAEO,MAAMsiB,KAAapiB,EAAyC,SACjE;AAAA,EACE,MAAAqiB;AAAA,EACA,YAAAC;AAAA,EACA,UAAA1U;AAAA,EACA,MAAA9L,IAAO;AAAA,EACP,SAAAQ,IAAU;AAAA,EACV,cAAAigB,IAAe;AAAA,EACf,eAAAC,IAAgB;AAAA,EAChB,cAAAC,IAAe;AAAA,EACf,UAAAha,IAAW;AAAA,EACX,WAAAnJ;AAAA,EACA,OAAAC;AAAA,EACA,QAAAE;AAAA,EACA,GAAGtB;AACL,GACAuB,GACA;AACA,QAAM8L,IAAS9D,GAAW5F,CAAI,GAGxB4gB,IAAQC,GAAQ,MAAM;AAC1B,QAAIrgB,MAAY,aAAaA,MAAY;AACvC,aAAO,CAAA;AAGT,UAAMsgB,IAAiC,CAAA,GACjCC,IAAc,KAAK,IAAIR,IAAOE,GAAc,CAAC,GAC7CO,IAAe,KAAK,IAAIT,IAAOE,GAAcD,CAAU,GAEvDS,IAAmBF,IAAc,GACjCG,IAAoBF,IAAeR,IAAa;AAEtD,QAAKS;AAQL,UAAYC,GAML;AACL,QAAAJ,EAAM,KAAK,CAAC,GACZA,EAAM,KAAK,UAAU;AACrB,iBAASK,IAAIJ,GAAaI,KAAKH,GAAcG;AAC3C,UAAAL,EAAM,KAAKK,CAAC;AAEd,QAAAL,EAAM,KAAK,UAAU,GACrBA,EAAM,KAAKN,CAAU;AAAA,MACvB,OAd+B;AAC7B,QAAAM,EAAM,KAAK,CAAC,GACZA,EAAM,KAAK,UAAU;AACrB,iBAASK,IAAI,KAAK,IAAIX,IAAa,IAAIC,GAAc,CAAC,GAAGU,KAAKX,GAAYW;AACxE,UAAAL,EAAM,KAAKK,CAAC;AAAA,MAEhB;AAAA,SAduB;AACrB,eAASA,IAAI,GAAGA,KAAK,KAAK,IAAI,IAAIV,GAAcD,CAAU,GAAGW;AAC3D,QAAAL,EAAM,KAAKK,CAAC;AAEd,MAAID,MACFJ,EAAM,KAAK,UAAU,GACrBA,EAAM,KAAKN,CAAU;AAAA,IAEzB;AAgBA,WAAOM;AAAA,EACT,GAAG,CAACP,GAAMC,GAAYC,GAAcjgB,CAAO,CAAC,GAEtC2N,IAAgC;AAAA,IACpC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,KAAKzE,EAAO;AAAA,IACZ,GAAGjM;AAAA,EAAA,GAGC2jB,IAAiB,CAACtB,GAAmB/Y,OAAwC;AAAA,IACjF,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,UAAU2C,EAAO;AAAA,IACjB,QAAQA,EAAO;AAAA,IACf,SAAS,KAAKA,EAAO,MAAM,CAAC;AAAA,IAC5B,UAAUA,EAAO;AAAA,IACjB,YAAYoW,IAAW,MAAM;AAAA,IAC7B,OAAO/Y,IACH,sCACA+Y,IACA,kCACA;AAAA,IACJ,iBAAiBA,IAAW,6BAA6B;AAAA,IACzD,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,QAAQ/Y,IAAa,gBAAgB;AAAA,IACrC,YAAY;AAAA,IACZ,SAAS;AAAA,EAAA,IAGLsa,IAA+B;AAAA,IACnC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,UAAU3X,EAAO;AAAA,IACjB,QAAQA,EAAO;AAAA,IACf,OAAO;AAAA,IACP,UAAUA,EAAO;AAAA,EAAA,GAGb4X,IAA2B;AAAA,IAC/B,UAAU5X,EAAO;AAAA,IACjB,OAAO;AAAA,IACP,SAAS,KAAKA,EAAO,GAAG;AAAA,EAAA,GAGpB6X,IAAmB,CAACC,MAAoB;AAC5C,IAAIA,KAAW,KAAKA,KAAWhB,KAAcgB,MAAYjB,KAAQ,CAAC5Z,KAChEmF,EAAS0V,CAAO;AAAA,EAEpB;AAEA,SACE,gBAAAlf;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAA1E;AAAA,MACA,MAAK;AAAA,MACL,cAAW;AAAA,MACX,WAAW9B,EAAG,qBAAqB,sBAAsBkE,CAAI,IAAI,sBAAsBQ,CAAO,IAAIhD,CAAS;AAAA,MAC3G,OAAO2Q;AAAA,MACP,eAAaxQ;AAAA,MACZ,GAAGtB;AAAA,MAEH,UAAA;AAAA,QAAAqkB,KAAiBlgB,MAAY,aAC5B,gBAAAxC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,cAAW;AAAA,YACX,UAAUuiB,MAAS,KAAK5Z;AAAA,YACxB,OAAOya,EAAe,IAAOb,MAAS,KAAK5Z,CAAQ;AAAA,YACnD,SAAS,MAAM4a,EAAiB,CAAC;AAAA,YACjC,cAAc,CAACzgB,MAAM;AACnB,cAAIyf,MAAS,KAAK,CAAC5Z,MACjB7F,EAAE,cAAc,MAAM,kBAAkB;AAAA,YAE5C;AAAA,YACA,cAAc,CAACA,MAAM;AACnB,cAAAA,EAAE,cAAc,MAAM,kBAAkB;AAAA,YAC1C;AAAA,YAEA,4BAACsf,IAAA,CAAA,CAAiB;AAAA,UAAA;AAAA,QAAA;AAAA,QAIrBO,KACC,gBAAA3iB;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,cAAW;AAAA,YACX,UAAUuiB,MAAS,KAAK5Z;AAAA,YACxB,OAAOya,EAAe,IAAOb,MAAS,KAAK5Z,CAAQ;AAAA,YACnD,SAAS,MAAM4a,EAAiBhB,IAAO,CAAC;AAAA,YACxC,cAAc,CAACzf,MAAM;AACnB,cAAIyf,MAAS,KAAK,CAAC5Z,MACjB7F,EAAE,cAAc,MAAM,kBAAkB;AAAA,YAE5C;AAAA,YACA,cAAc,CAACA,MAAM;AACnB,cAAAA,EAAE,cAAc,MAAM,kBAAkB;AAAA,YAC1C;AAAA,YAEA,4BAACof,IAAA,CAAA,CAAgB;AAAA,UAAA;AAAA,QAAA;AAAA,QAIpB1f,MAAY,YAAYA,MAAY,8BAClC,QAAA,EAAK,OAAO8gB,GACV,UAAA9gB,MAAY,YAAY,GAAG+f,CAAI,MAAMC,CAAU,KAAK,QAAQD,CAAI,OAAOC,CAAU,IACpF,IAEAI,EAAM;AAAA,UAAI,CAAC,GAAG5X,MACZ,MAAM,aACJ,gBAAAhL,EAAC,QAAA,EAA+B,OAAOqjB,GAAe,UAAA,SAA3C,YAAYrY,CAAK,EAE5B,IAEA,gBAAAhL;AAAA,YAAC;AAAA,YAAA;AAAA,cAEC,MAAK;AAAA,cACL,cAAY,QAAQ,CAAC;AAAA,cACrB,gBAAc,MAAMuiB,IAAO,SAAS;AAAA,cACpC,UAAA5Z;AAAA,cACA,OAAOya,EAAe,MAAMb,GAAM5Z,CAAQ;AAAA,cAC1C,SAAS,MAAM4a,EAAiB,CAAC;AAAA,cACjC,cAAc,CAACzgB,MAAM;AACnB,gBAAI,MAAMyf,KAAQ,CAAC5Z,MACjB7F,EAAE,cAAc,MAAM,kBAAkB;AAAA,cAE5C;AAAA,cACA,cAAc,CAACA,MAAM;AACnB,gBAAI,MAAMyf,MACRzf,EAAE,cAAc,MAAM,kBAAkB;AAAA,cAE5C;AAAA,cAEC,UAAA;AAAA,YAAA;AAAA,YAlBI;AAAA,UAAA;AAAA,QAmBP;AAAA,QAKL6f,KACC,gBAAA3iB;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,cAAW;AAAA,YACX,UAAUuiB,MAASC,KAAc7Z;AAAA,YACjC,OAAOya,EAAe,IAAOb,MAASC,KAAc7Z,CAAQ;AAAA,YAC5D,SAAS,MAAM4a,EAAiBhB,IAAO,CAAC;AAAA,YACxC,cAAc,CAACzf,MAAM;AACnB,cAAIyf,MAASC,KAAc,CAAC7Z,MAC1B7F,EAAE,cAAc,MAAM,kBAAkB;AAAA,YAE5C;AAAA,YACA,cAAc,CAACA,MAAM;AACnB,cAAAA,EAAE,cAAc,MAAM,kBAAkB;AAAA,YAC1C;AAAA,YAEA,4BAACqf,IAAA,CAAA,CAAiB;AAAA,UAAA;AAAA,QAAA;AAAA,QAIrBO,KAAiBlgB,MAAY,aAC5B,gBAAAxC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,cAAW;AAAA,YACX,UAAUuiB,MAASC,KAAc7Z;AAAA,YACjC,OAAOya,EAAe,IAAOb,MAASC,KAAc7Z,CAAQ;AAAA,YAC5D,SAAS,MAAM4a,EAAiBf,CAAU;AAAA,YAC1C,cAAc,CAAC1f,MAAM;AACnB,cAAIyf,MAASC,KAAc,CAAC7Z,MAC1B7F,EAAE,cAAc,MAAM,kBAAkB;AAAA,YAE5C;AAAA,YACA,cAAc,CAACA,MAAM;AACnB,cAAAA,EAAE,cAAc,MAAM,kBAAkB;AAAA,YAC1C;AAAA,YAEA,4BAACuf,IAAA,CAAA,CAAkB;AAAA,UAAA;AAAA,QAAA;AAAA,MACrB;AAAA,IAAA;AAAA,EAAA;AAIR,CAAC;AAEDC,GAAW,cAAc;AC1RzB,MAAM1a,KAA0F;AAAA,EAC9F,IAAI,EAAE,UAAU,IAAI,KAAK,GAAG,UAAU,GAAA;AAAA,EACtC,IAAI,EAAE,UAAU,IAAI,KAAK,GAAG,UAAU,GAAA;AAAA,EACtC,IAAI,EAAE,UAAU,IAAI,KAAK,IAAI,UAAU,GAAA;AACzC;AAEA,SAAS6b,GAAiB,EAAE,MAAAzhB,KAA0B;AACpD,SACE,gBAAAhC,EAAC,OAAA,EAAI,OAAOgC,GAAM,QAAQA,GAAM,SAAQ,aAAY,MAAK,QAAO,eAAY,QAC1E,4BAAC,QAAA,EAAK,GAAE,gBAAe,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,QAAA,CAAQ,EAAA,CAC9G;AAEJ;AAEO,MAAM0hB,KAAaxjB,EAAyC,SACjE;AAAA,EACE,WAAAyjB;AAAA,EACA,MAAA3hB,IAAO;AAAA,EACP,UAAA4hB;AAAA,EACA,WAAApkB;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC;AAAA,EACA,GAAGtB;AACL,GACAuB,GACA;AACA,QAAM8L,IAAS9D,GAAW5F,CAAI,GACxBwe,IAAQqD,GAAS,QAAQnkB,CAAQ,EAAE,OAAOokB,EAAc;AAG9D,MAAIC,IAAevD,GACfwD,IAAe;AAEnB,MAAIJ,KAAYpD,EAAM,SAASoD,GAAU;AACvC,UAAMK,IAAY,KAAK,OAAOL,IAAW,KAAK,CAAC;AAC/C,IAAAG,IAAe;AAAA,MACb,GAAGvD,EAAM,MAAM,GAAGyD,CAAS;AAAA,MAC3B,GAAGzD,EAAM,MAAMA,EAAM,UAAUoD,IAAWK,IAAY,EAAE;AAAA,IAAA,GAE1DD,IAAe;AAAA,EACjB;AAEA,QAAME,IAA0B;AAAA,IAC9B,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,GAAGzkB;AAAA,EAAA,GAGCye,IAA2B;AAAA,IAC/B,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,KAAKxS,EAAO;AAAA,IACZ,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,SAAS;AAAA,EAAA,GAGLyY,IAAgC;AAAA,IACpC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,OAAO;AAAA,EAAA,GAGHd,IAA+B;AAAA,IACnC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,UAAU3X,EAAO;AAAA,EAAA,GAGb0Y,IAAkB,MACtB,gBAAApkB,EAAC,QAAA,EAAK,OAAOmkB,GAAgB,eAAY,QACtC,UAAAR,KAAa,gBAAA3jB,EAACyjB,IAAA,EAAiB,MAAM/X,EAAO,UAAU,GACzD;AAGF,SACE,gBAAA1L;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAJ;AAAA,MACA,cAAW;AAAA,MACX,WAAW9B,EAAG,qBAAqB,sBAAsBkE,CAAI,IAAIxC,CAAS;AAAA,MAC1E,OAAO0kB;AAAA,MACP,eAAavkB;AAAA,MACZ,GAAGtB;AAAA,MAEJ,UAAA,gBAAA2B,EAAC,QAAG,OAAOke,GACR,YAAa,IAAI,CAAClN,GAAOhG,MAAU;AAClC,cAAMqZ,IAASrZ,MAAU+Y,EAAa,SAAS,GACzCO,IAAgB,CAACD,GAGjBE,IAAmBP,KAAgBhZ,MAAU,KAAK,OAAO4Y,IAAY,KAAK,CAAC,IAAI;AAErF,eACE,gBAAAtf,EAAC,MAAA,EAAe,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAKoH,EAAO,IAAA,GACzE,UAAA;AAAA,UAAAuR,GAAajM,GAAkD;AAAA,YAC9D,eAAeqT;AAAA,YACf,MAAAriB;AAAA,UAAA,CACD;AAAA,UACAuiB,KACC,gBAAAjgB,EAAA8P,IAAA,EACG,UAAA;AAAA,YAAAgQ,EAAA;AAAA,YACD,gBAAApkB,EAAC,QAAA,EAAK,OAAOqjB,GAAe,UAAA,MAAA,CAAG;AAAA,UAAA,GACjC;AAAA,UAEDiB,KAAiBF,EAAA;AAAA,QAAgB,EAAA,GAX3BpZ,CAYT;AAAA,MAEJ,CAAC,EAAA,CACH;AAAA,IAAA;AAAA,EAAA;AAGN,CAAC;AAED0Y,GAAW,cAAc;AAkBlB,MAAMc,KAAiBtkB,EAA6C,SACzE;AAAA,EACE,IAAIL,IAAY;AAAA,EAChB,MAAA4kB;AAAA,EACA,MAAAzR;AAAA,EACA,eAAA0R,IAAgB;AAAA,EAChB,MAAA1iB,IAAO;AAAA,EACP,WAAAxC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,GAAGrB;AACL,GACAuB,GACA;AACA,QAAM8L,IAAS9D,GAAW5F,CAAI,GAExB8D,IAA2B;AAAA,IAC/B,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,KAAK;AAAA,IACL,UAAU4F,EAAO;AAAA,IACjB,YAAYgZ,IAAgB,MAAM;AAAA,IAClC,OAAOA,IAAgB,qCAAqC;AAAA,IAC5D,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,QAAQA,IAAgB,YAAY;AAAA,IACpC,GAAGjlB;AAAA,EAAA,GAGCoL,IAA2B;AAAA,IAC/B,OAAOa,EAAO;AAAA,IACd,QAAQA,EAAO;AAAA,IACf,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,YAAY;AAAA,EAAA,GAGRiZ,IAA0C;AAAA,IAC9C,KAAA/kB;AAAA,IACA,WAAW9B,EAAG,0BAA0B4mB,KAAiB,mCAAmCllB,CAAS;AAAA,IACrG,OAAOsG;AAAA,IACP,gBAAgB4e,IAAgB,SAAS;AAAA,IACzC,GAAGrmB;AAAA,EAAA;AAGL,SAAIwB,MAAc,OAAO4kB,KAAQ,CAACC,MAChCC,EAAe,OAAOF,IAIpBC,KAAiB7kB,MAAc,QACjC8kB,EAAe,WAAW,KAI1B,gBAAArgB;AAAA,IAACzE;AAAA,IAAA;AAAA,MACE,GAAG8kB;AAAA,MACJ,cAAc,CAAC7hB,MAAqC;AAClD,QAAK4hB,MACH5hB,EAAE,cAAc,MAAM,QAAQ;AAAA,MAElC;AAAA,MACA,cAAc,CAACA,MAAqC;AAClD,QAAK4hB,MACH5hB,EAAE,cAAc,MAAM,QAAQ;AAAA,MAElC;AAAA,MAEC,UAAA;AAAA,QAAAkQ,KAAQ,gBAAAhT,EAAC,QAAA,EAAK,OAAO6K,GAAY,UAAAmI,GAAK;AAAA,QACtCtT;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGP,CAAC;AAED8kB,GAAe,cAAc;ACxN7B,MAAMI,KAAexL,GAAiC,EAAE,MAAM,MAAM,SAAS,WAAW;AAExF,SAASyL,KAAkB;AACzB,SAAOtL,GAAWqL,EAAY;AAChC;AAiBA,MAAMhd,KAA8F;AAAA,EAClG,IAAI,EAAE,UAAU,IAAI,SAAS,YAAY,eAAe,WAAA;AAAA,EACxD,IAAI,EAAE,UAAU,IAAI,SAAS,aAAa,eAAe,YAAA;AAAA,EACzD,IAAI,EAAE,UAAU,IAAI,SAAS,aAAa,eAAe,YAAA;AAC3D,GAEakd,KAAQ5kB,EAAyC,SAC5D;AAAA,EACE,MAAA8B,IAAO;AAAA,EACP,SAAAQ,IAAU;AAAA,EACV,cAAAuiB,IAAe;AAAA,EACf,SAAAC,IAAU;AAAA,EACV,WAAAxlB;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC;AAAA,EACA,GAAGtB;AACL,GACAuB,GACA;AACA,QAAMuQ,IAAgC;AAAA,IACpC,UAAU;AAAA,IACV,OAAO;AAAA,IACP,UAAU;AAAA,IACV,GAAG1Q;AAAA,EAAA,GAGCwlB,IAA4B;AAAA,IAChC,OAAO;AAAA,IACP,gBAAgBziB,MAAY,aAAa,aAAa;AAAA,IACtD,eAAe;AAAA,IACf,UAAUoF,GAAW5F,CAAI,EAAE;AAAA,IAC3B,SAASgjB,IAAU,MAAM;AAAA,IACzB,YAAY;AAAA,EAAA;AAGd,SACE,gBAAAhlB,EAAC4kB,GAAa,UAAb,EAAsB,OAAO,EAAE,MAAA5iB,GAAM,SAAAQ,EAAA,GACpC,UAAA,gBAAAxC,EAAC,OAAA,EAAI,WAAU,0BAAyB,OAAOmQ,GAC7C,UAAA,gBAAAnQ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAJ;AAAA,MACA,WAAW9B,EAAG,gBAAgB,iBAAiBkE,CAAI,IAAI,iBAAiBQ,CAAO,IAAIhD,CAAS;AAAA,MAC5F,OAAOylB;AAAA,MACP,eAAatlB;AAAA,MACZ,GAAGtB;AAAA,MAEH,UAAAqB;AAAA,IAAA;AAAA,EAAA,GAEL,EAAA,CACF;AAEJ,CAAC;AAEDolB,GAAM,cAAc;AAUb,MAAMI,KAAYhlB,EAAoD,SAC3E,EAAE,QAAAilB,IAAS,IAAO,WAAA3lB,GAAW,OAAAC,GAAO,UAAAC,GAAU,GAAGrB,EAAA,GACjDuB,GACA;AACA,QAAMwlB,IAA2B;AAAA,IAC/B,iBAAiB;AAAA,IACjB,UAAUD,IAAS,WAAW;AAAA,IAC9B,KAAKA,IAAS,IAAI;AAAA,IAClB,QAAQA,IAAS,IAAI;AAAA,IACrB,GAAG1lB;AAAA,EAAA;AAGL,SACE,gBAAAO;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAJ;AAAA,MACA,WAAW9B,EAAG,qBAAqBqnB,KAAU,6BAA6B3lB,CAAS;AAAA,MACnF,OAAO4lB;AAAA,MACN,GAAG/mB;AAAA,MAEH,UAAAqB;AAAA,IAAA;AAAA,EAAA;AAGP,CAAC;AAEDwlB,GAAU,cAAc;AAQjB,MAAMG,KAAYnlB,EAAoD,SAC3E,EAAE,WAAAV,GAAW,OAAAC,GAAO,UAAAC,GAAU,GAAGrB,EAAA,GACjCuB,GACA;AACA,QAAMwD,IAA2B;AAAA,IAC/B,GAAG3D;AAAA,EAAA;AAGL,SACE,gBAAAO;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAJ;AAAA,MACA,WAAW9B,EAAG,qBAAqB0B,CAAS;AAAA,MAC5C,OAAO4D;AAAA,MACN,GAAG/E;AAAA,MAEH,UAAAqB;AAAA,IAAA;AAAA,EAAA;AAGP,CAAC;AAED2lB,GAAU,cAAc;AAYjB,MAAMC,KAAWplB,EAA+C,SACrE,EAAE,UAAAyC,IAAW,IAAO,WAAA4iB,IAAY,IAAO,WAAA/lB,GAAW,OAAAC,GAAO,UAAAC,GAAU,GAAGrB,EAAA,GACtEuB,GACA;AACA,QAAM,EAAE,SAAA4C,EAAA,IAAYqiB,GAAA,GAEdW,IAA0B;AAAA,IAC9B,iBAAiB7iB,IACb,6BACA;AAAA,IACJ,cAAcH,MAAY,aAAa,yCAAyC;AAAA,IAChF,QAAQ+iB,IAAY,YAAY;AAAA,IAChC,YAAY;AAAA,IACZ,GAAG9lB;AAAA,EAAA;AAGL,SACE,gBAAAO;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAJ;AAAA,MACA,WAAW9B;AAAA,QACT;AAAA,QACA6E,KAAY;AAAA,QACZ4iB,KAAa;AAAA,QACb/lB;AAAA,MAAA;AAAA,MAEF,OAAOgmB;AAAA,MACP,cAAc,CAAC1iB,MAAM;AACnB,QAAIyiB,KAAa,CAAC5iB,MAChBG,EAAE,cAAc,MAAM,kBAAkB;AAAA,MAE5C;AAAA,MACA,cAAc,CAACA,MAAM;AACnB,QAAKH,MACHG,EAAE,cAAc,MAAM,kBAAkB;AAAA,MAE5C;AAAA,MACC,GAAGzE;AAAA,MAEH,UAAAqB;AAAA,IAAA;AAAA,EAAA;AAGP,CAAC;AAED4lB,GAAS,cAAc;AAgBvB,SAASG,GAAS,EAAE,WAAA/gB,KAAmD;AACrE,SAAKA,IAUH,gBAAA1E,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAClD,UAAA0E,MAAc,0BACZ,QAAA,EAAK,GAAE,oBAAmB,MAAK,eAAA,CAAe,IAE/C,gBAAA1E,EAAC,QAAA,EAAK,GAAE,sBAAqB,MAAK,eAAA,CAAe,EAAA,CAErD,IAdE,gBAAAsE,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,OAAO,EAAE,SAAS,OAC5E,UAAA;AAAA,IAAA,gBAAAtE,EAAC,QAAA,EAAK,GAAE,oBAAmB,MAAK,gBAAe;AAAA,IAC/C,gBAAAA,EAAC,QAAA,EAAK,GAAE,sBAAqB,MAAK,eAAA,CAAe;AAAA,EAAA,GACnD;AAaN;AAEO,MAAM0lB,KAAcxlB,EAAmD,SAC5E;AAAA,EACE,UAAAylB,IAAW;AAAA,EACX,eAAAC,IAAgB;AAAA,EAChB,QAAAC;AAAA,EACA,OAAAviB,IAAQ;AAAA,EACR,WAAA9D;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,GAAGrB;AACL,GACAuB,GACA;AACA,QAAM,EAAE,MAAAoC,EAAA,IAAS6iB,GAAA,GAGX3hB,IAA6B;AAAA,IACjC,SAHa0E,GAAW5F,CAAI,EAGZ;AAAA,IAChB,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,WAAWsB;AAAA,IACX,YAAY;AAAA,IACZ,QAAQqiB,IAAW,YAAY;AAAA,IAC/B,YAAYA,IAAW,SAAS;AAAA,IAChC,YAAY;AAAA,IACZ,GAAGlmB;AAAA,EAAA,GAGC2E,IAA8B;AAAA,IAClC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,KAAK;AAAA,IACL,gBAAgBd,MAAU,UAAU,aAAaA,MAAU,WAAW,WAAW;AAAA,EAAA,GAG7EoQ,IAAc,MAAM;AACxB,IAAIiS,KAAYE,KACdA,EAAA;AAAA,EAEJ;AAEA,SACE,gBAAA7lB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAJ;AAAA,MACA,WAAW9B,EAAG,uBAAuB6nB,KAAY,iCAAiCnmB,CAAS;AAAA,MAC3F,OAAO0D;AAAA,MACP,SAASwQ;AAAA,MACT,cAAc,CAAC5Q,MAAM;AACnB,QAAI6iB,MACF7iB,EAAE,cAAc,MAAM,QAAQ;AAAA,MAElC;AAAA,MACA,cAAc,CAACA,MAAM;AACnB,QAAAA,EAAE,cAAc,MAAM,QAAQ;AAAA,MAChC;AAAA,MACC,GAAGzE;AAAA,MAEJ,UAAA,gBAAAiG,EAAC,QAAA,EAAK,OAAOF,GACV,UAAA;AAAA,QAAA1E;AAAA,QACAimB,KAAY,gBAAA3lB,EAACylB,IAAA,EAAS,WAAWG,EAAA,CAAe;AAAA,MAAA,EAAA,CACnD;AAAA,IAAA;AAAA,EAAA;AAGN,CAAC;AAEDF,GAAY,cAAc;AAYnB,MAAMI,KAAY5lB,EAAiD,SACxE,EAAE,OAAAoD,IAAQ,QAAQ,UAAAyiB,IAAW,IAAO,WAAAvmB,GAAW,OAAAC,GAAO,UAAAC,GAAU,GAAGrB,EAAA,GACnEuB,GACA;AACA,QAAM,EAAE,MAAAoC,GAAM,SAAAQ,EAAA,IAAYqiB,GAAA,GAGpBmB,IAA2B;AAAA,IAC/B,SAHape,GAAW5F,CAAI,EAGZ;AAAA,IAChB,OAAO;AAAA,IACP,WAAWsB;AAAA,IACX,eAAe;AAAA,IACf,QAAQd,MAAY,aAAa,yCAAyC;AAAA,IAC1E,UAAUujB,IAAW,MAAM;AAAA,IAC3B,UAAUA,IAAW,WAAW;AAAA,IAChC,cAAcA,IAAW,aAAa;AAAA,IACtC,YAAYA,IAAW,WAAW;AAAA,IAClC,GAAGtmB;AAAA,EAAA;AAGL,SACE,gBAAAO;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAJ;AAAA,MACA,WAAW9B,EAAG,qBAAqBioB,KAAY,+BAA+BvmB,CAAS;AAAA,MACvF,OAAOwmB;AAAA,MACP,OAAOD,KAAY,OAAOrmB,KAAa,WAAWA,IAAW;AAAA,MAC5D,GAAGrB;AAAA,MAEH,UAAAqB;AAAA,IAAA;AAAA,EAAA;AAGP,CAAC;AAEDomB,GAAU,cAAc;AAQjB,MAAMG,KAAY/lB,EAAoD,SAC3E,EAAE,WAAAV,GAAW,OAAAC,GAAO,UAAAC,GAAU,GAAGrB,EAAA,GACjCuB,GACA;AACA,QAAMsmB,IAA2B;AAAA,IAC/B,iBAAiB;AAAA,IACjB,YAAY;AAAA,IACZ,GAAGzmB;AAAA,EAAA;AAGL,SACE,gBAAAO;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAJ;AAAA,MACA,WAAW9B,EAAG,qBAAqB0B,CAAS;AAAA,MAC5C,OAAO0mB;AAAA,MACN,GAAG7nB;AAAA,MAEH,UAAAqB;AAAA,IAAA;AAAA,EAAA;AAGP,CAAC;AAEDumB,GAAU,cAAc;AAUjB,MAAME,KAAejmB,EAAuD,SACjF,EAAE,WAAAwX,IAAY,UAAU,WAAAlY,GAAW,OAAAC,GAAO,UAAAC,GAAU,GAAGrB,EAAA,GACvDuB,GACA;AACA,QAAMwmB,IAA8B;AAAA,IAClC,aAAa1O;AAAA,IACb,SAAS;AAAA,IACT,UAAU;AAAA,IACV,OAAO;AAAA,IACP,WAAW;AAAA,IACX,GAAGjY;AAAA,EAAA;AAGL,SACE,gBAAAO;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAJ;AAAA,MACA,WAAW9B,EAAG,wBAAwB0B,CAAS;AAAA,MAC/C,OAAO4mB;AAAA,MACN,GAAG/nB;AAAA,MAEH,UAAAqB;AAAA,IAAA;AAAA,EAAA;AAGP,CAAC;AAEDymB,GAAa,cAAc;ACpZ3B,MAAME,KAAcjN,GAAgC,EAAE,MAAM,MAAM,SAAS,WAAW;AAEtF,SAASkN,KAAiB;AACxB,SAAO/M,GAAW8M,EAAW;AAC/B;AAeO,MAAME,KAAOrmB,EAAwC,SAC1D;AAAA,EACE,MAAA8B,IAAO;AAAA,EACP,SAAAQ,IAAU;AAAA,EACV,aAAAE,IAAc;AAAA,EACd,WAAAlD;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC;AAAA,EACA,GAAGtB;AACL,GACAuB,GACA;AACA,QAAMse,IAA2B;AAAA,IAC/B,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,SAAS;AAAA,IACT,eAAe;AAAA,IACf,KAAK1b,MAAY,cAAc,IAAI;AAAA,IACnC,QAAQA,MAAY,aAAa,2CAA2C;AAAA,IAC5E,cAAcA,MAAY,aAAa,4BAA4B;AAAA,IACnE,UAAUA,MAAY,aAAa,WAAW;AAAA,IAC9C,GAAG/C;AAAA,EAAA;AAGL,SACE,gBAAAO,EAACqmB,GAAY,UAAZ,EAAqB,OAAO,EAAE,MAAArkB,GAAM,SAAAQ,KACnC,UAAA,gBAAAxC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAJ;AAAA,MACA,WAAW9B;AAAA,QACT;AAAA,QACA,gBAAgBkE,CAAI;AAAA,QACpB,gBAAgBQ,CAAO;AAAA,QACvBE,KAAe;AAAA,QACflD;AAAA,MAAA;AAAA,MAEF,OAAO0e;AAAA,MACP,eAAave;AAAA,MACZ,GAAGtB;AAAA,MAEH,UAAAqB;AAAA,IAAA;AAAA,EAAA,GAEL;AAEJ,CAAC;AAED6mB,GAAK,cAAc;AAoBnB,MAAM3e,KAA6H;AAAA,EACjI,IAAI,EAAE,SAAS,YAAY,UAAU,IAAI,eAAe,IAAI,KAAK,IAAI,WAAW,GAAA;AAAA,EAChF,IAAI,EAAE,SAAS,aAAa,UAAU,IAAI,eAAe,IAAI,KAAK,IAAI,WAAW,GAAA;AAAA,EACjF,IAAI,EAAE,SAAS,aAAa,UAAU,IAAI,eAAe,IAAI,KAAK,IAAI,WAAW,GAAA;AACnF,GAEa4e,KAAWtmB,EAAyC,SAC/D;AAAA,EACE,aAAAkL;AAAA,EACA,cAAAC;AAAA,EACA,WAAAob;AAAA,EACA,UAAA9jB,IAAW;AAAA,EACX,UAAAgG,IAAW;AAAA,EACX,WAAA4c,IAAY;AAAA,EACZ,WAAA/lB;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,GAAGrB;AACL,GACAuB,GACA;AACA,QAAM,EAAE,MAAAoC,GAAM,SAAAQ,EAAA,IAAY8jB,GAAA,GACpB5a,IAAS9D,GAAW5F,CAAI,GAExB8D,IAA2B;AAAA,IAC/B,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,KAAK4F,EAAO;AAAA,IACZ,SAASA,EAAO;AAAA,IAChB,WAAWA,EAAO;AAAA,IAClB,iBAAiB/I,IACb,6BACA;AAAA,IACJ,cAAcH,MAAY,aAAaA,MAAY,aAC/C,yCACA;AAAA,IACJ,QAAQA,MAAY,cAAc,2CAA2C;AAAA,IAC7E,cAAcA,MAAY,cAAc,4BAA4B;AAAA,IACpE,QAAQmG,IAAW,gBAAgB4c,IAAY,YAAY;AAAA,IAC3D,SAAS5c,IAAW,MAAM;AAAA,IAC1B,YAAY;AAAA,IACZ,GAAGlJ;AAAA,EAAA,GAGC2E,IAA8B;AAAA,IAClC,MAAM;AAAA,IACN,SAAS;AAAA,IACT,eAAe;AAAA,IACf,KAAK;AAAA,IACL,UAAU;AAAA,EAAA,GAGNsiB,IAA8B;AAAA,IAClC,UAAUhb,EAAO;AAAA,IACjB,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,YAAY;AAAA,EAAA,GAGRib,IAAgC;AAAA,IACpC,UAAUjb,EAAO;AAAA,IACjB,OAAO;AAAA,IACP,YAAY;AAAA,EAAA,GAGRK,IAA8B;AAAA,IAClC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,YAAY;AAAA,EAAA;AAGd,SACE,gBAAAzH;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAA1E;AAAA,MACA,WAAW9B;AAAA,QACT;AAAA,QACA6E,KAAY;AAAA,QACZ4iB,KAAa;AAAA,QACb5c,KAAY;AAAA,QACZnJ;AAAA,MAAA;AAAA,MAEF,OAAOsG;AAAA,MACP,cAAc,CAAChD,MAAM;AACnB,QAAIyiB,KAAa,CAAC5c,KAAY,CAAChG,MAC7BG,EAAE,cAAc,MAAM,kBAAkB;AAAA,MAE5C;AAAA,MACA,cAAc,CAACA,MAAM;AACnB,QAAKH,MACHG,EAAE,cAAc,MAAM,kBAAkB;AAAA,MAE5C;AAAA,MACC,GAAGzE;AAAA,MAEH,UAAA;AAAA,QAAA+M,KAAe,gBAAApL,EAAC,QAAA,EAAK,OAAO+L,GAAe,UAAAX,GAAY;AAAA,QACxD,gBAAA9G,EAAC,OAAA,EAAI,OAAOF,GACV,UAAA;AAAA,UAAA,gBAAApE,EAAC,QAAA,EAAK,OAAO0mB,GAAe,UAAAhnB,EAAA,CAAS;AAAA,UACpC+mB,KAAa,gBAAAzmB,EAAC,QAAA,EAAK,OAAO2mB,GAAiB,UAAAF,EAAA,CAAU;AAAA,QAAA,GACxD;AAAA,QACCpb,KAAgB,gBAAArL,EAAC,QAAA,EAAK,OAAO+L,GAAe,UAAAV,EAAA,CAAa;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGhE,CAAC;AAEDmb,GAAS,cAAc;AAQhB,MAAMI,KAAc1mB,EAA4C,SACrE,EAAE,WAAAV,GAAW,OAAAC,GAAO,GAAGpB,EAAA,GACvBuB,GACA;AACA,QAAMqhB,IAA8B;AAAA,IAClC,QAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,QAAQ;AAAA,IACR,GAAGxhB;AAAA,EAAA;AAGL,SACE,gBAAAO;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAJ;AAAA,MACA,MAAK;AAAA,MACL,WAAW9B,EAAG,uBAAuB0B,CAAS;AAAA,MAC9C,OAAOyhB;AAAA,MACN,GAAG5iB;AAAA,IAAA;AAAA,EAAA;AAGV,CAAC;AAEDuoB,GAAY,cAAc;AAQnB,MAAMC,KAAa3mB,EAA2C,SACnE,EAAE,WAAAV,GAAW,OAAAC,GAAO,UAAAC,GAAU,GAAGrB,EAAA,GACjCuB,GACA;AACA,QAAMsD,IAA6B;AAAA,IACjC,SAAS;AAAA,IACT,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,eAAe;AAAA,IACf,eAAe;AAAA,IACf,GAAGzD;AAAA,EAAA;AAGL,SACE,gBAAAO;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAJ;AAAA,MACA,WAAW9B,EAAG,sBAAsB0B,CAAS;AAAA,MAC7C,OAAO0D;AAAA,MACN,GAAG7E;AAAA,MAEH,UAAAqB;AAAA,IAAA;AAAA,EAAA;AAGP,CAAC;AAEDmnB,GAAW,cAAc;ACnPzB,MAAMjf,KAA0F;AAAA,EAC9F,IAAI;AAAA,IACF,WAAWjL,GAAU;AAAA,IACrB,WAAWA,GAAU;AAAA,IACrB,KAAKpB,EAAQ,GAAG;AAAA,EAAA;AAAA,EAElB,IAAI;AAAA,IACF,WAAWoB,GAAU;AAAA,IACrB,WAAWA,GAAU;AAAA,IACrB,KAAKpB,EAAQ,CAAC;AAAA,EAAA;AAAA,EAEhB,IAAI;AAAA,IACF,WAAWoB,GAAU;AAAA,IACrB,WAAWA,GAAU;AAAA,IACrB,KAAKpB,EAAQ,GAAG;AAAA,EAAA;AAEpB,GAEaurB,KAAW5mB,EAA0C,SAChE;AAAA,EACE,OAAA0K;AAAA,EACA,OAAAzM;AAAA,EACA,UAAAuB;AAAA,EACA,QAAAqnB,IAAS;AAAA,EACT,MAAA/kB,IAAO;AAAA,EACP,WAAAglB,IAAY;AAAA,EACZ,YAAAnS;AAAA,EACA,WAAArV;AAAA,EACA,OAAAC;AAAA,EACA,QAAAE;AAAA,EACA,GAAGtB;AACL,GACAuB,GACA;AACA,QAAMqnB,IAAe9oB,KAASuB,GACxBgM,IAAS9D,GAAW5F,CAAI;AAG9B,MAAIglB,MAAcC,KAAiB,QAAsCA,MAAiB;AACxF,WAAO;AAGT,QAAMC,IAAoB,MAAqB;AAC7C,UAAMrkB,IAAsB;AAAA,MAC1B,SAAS;AAAA,MACT,KAAK6I,EAAO;AAAA,IAAA;AAGd,YAAQqb,GAAA;AAAA,MACN,KAAK;AACH,eAAO;AAAA,UACL,GAAGlkB;AAAA,UACH,eAAe;AAAA,QAAA;AAAA,MAEnB,KAAK;AACH,eAAO;AAAA,UACL,GAAGA;AAAA,UACH,eAAe;AAAA,UACf,YAAY;AAAA,QAAA;AAAA,MAEhB,KAAK;AACH,eAAO;AAAA,UACL,GAAGA;AAAA,UACH,eAAe;AAAA,UACf,YAAY;AAAA,QAAA;AAAA,MAEhB;AACE,eAAOA;AAAA,IAAA;AAAA,EAEb,GAEMiK,IAA4B;AAAA,IAChC,UAAUpB,EAAO;AAAA,IACjB,YAAY7O,GAAY;AAAA,IACxB,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,GAAIkqB,MAAW,gBAAgBlS,IAAa,EAAE,OAAOA,GAAY,YAAY,MAAM,CAAA;AAAA,EAAC,GAGhF5C,IAA4B;AAAA,IAChC,UAAUvG,EAAO;AAAA,IACjB,YAAY7O,GAAY;AAAA,IACxB,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,GAAIkqB,MAAW,eAAe,EAAE,MAAM,EAAA,IAAM,CAAA;AAAA,EAAC;AAG/C,SACE,gBAAAziB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAA1E;AAAA,MACA,WAAW9B;AAAA,QACT;AAAA,QACA,qBAAqBipB,CAAM;AAAA,QAC3B,qBAAqB/kB,CAAI;AAAA,QACzBxC;AAAA,MAAA;AAAA,MAEF,OAAO,EAAE,GAAG0nB,EAAA,GAAqB,GAAGznB,EAAA;AAAA,MACpC,eAAaE;AAAA,MACZ,GAAGtB;AAAA,MAEJ,UAAA;AAAA,QAAA,gBAAA2B,EAAC,MAAA,EAAG,WAAU,2BAA0B,OAAO8M,GAC5C,UAAAlC,GACH;AAAA,QACA,gBAAA5K,EAAC,QAAG,WAAU,2BAA0B,OAAO,EAAE,GAAGiS,GAAY,QAAQ,KACrE,UAAAgV,KAAgB,gBAAAjnB,EAAC,UAAK,OAAO,EAAE,OAAO,oCAAoC,eAAC,EAAA,CAC9E;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN,CAAC;AAED8mB,GAAS,cAAc;AAqBvB,MAAM3R,KAAgD;AAAA,EACpD,IAAI5Z,EAAQ,CAAC;AAAA,EACb,IAAIA,EAAQ,CAAC;AAAA,EACb,IAAIA,EAAQ,CAAC;AACf,GAEa4rB,KAAWjnB,EAA4C,SAClE;AAAA,EACE,KAAAiF,IAAM;AAAA,EACN,SAAAiiB,IAAU;AAAA,EACV,UAAA1nB;AAAA,EACA,WAAAF;AAAA,EACA,OAAAC;AAAA,EACA,QAAAE;AAAA,EACA,GAAGtB;AACL,GACAuB,GACA;AACA,QAAMse,IAA2B;AAAA,IAC/B,SAAS;AAAA,IACT,qBAAqB,UAAUkJ,CAAO;AAAA,IACtC,KAAKjS,GAAUhQ,CAAG;AAAA,IAClB,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,GAAG1F;AAAA,EAAA;AAGL,SACE,gBAAAO;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAJ;AAAA,MACA,WAAW9B;AAAA,QACT;AAAA,QACA,0BAA0BspB,CAAO;AAAA,QACjC5nB;AAAA,MAAA;AAAA,MAEF,OAAO0e;AAAA,MACP,eAAave;AAAA,MACZ,GAAGtB;AAAA,MAEH,UAAAqB;AAAA,IAAA;AAAA,EAAA;AAGP,CAAC;AAEDynB,GAAS,cAAc;AClLvB,MAAMla,KAA+C;AAAA,EACnD,IAAI,EAAE,UAAU,IAAI,SAAS,WAAW,QAAQ,GAAA;AAAA,EAChD,IAAI,EAAE,UAAU,IAAI,SAAS,WAAW,QAAQ,GAAA;AAAA,EAChD,IAAI,EAAE,UAAU,IAAI,SAAS,YAAY,QAAQ,GAAA;AACnD,GAEMpF,KAAyE;AAAA,EAC7E,SAAS;AAAA,IACP,OAAO,EAAE,iBAAiB,oCAAoC,OAAO,+BAAA;AAAA,IACrE,QAAQ,EAAE,iBAAiB,kCAAkC,OAAO,mCAAA;AAAA,IACpE,SAAS,EAAE,iBAAiB,eAAe,OAAO,oCAAoC,aAAa,+BAAA;AAAA,EAA+B;AAAA,EAEpI,SAAS;AAAA,IACP,OAAO,EAAE,iBAAiB,iCAAiC,OAAO,mCAAA;AAAA,IAClE,QAAQ,EAAE,iBAAiB,+BAA+B,OAAO,8BAAA;AAAA,IACjE,SAAS,EAAE,iBAAiB,eAAe,OAAO,iCAAiC,aAAa,gCAAA;AAAA,EAAgC;AAAA,EAElI,QAAQ;AAAA,IACN,OAAO,EAAE,iBAAiB,gCAAgC,OAAO,kCAAA;AAAA,IACjE,QAAQ,EAAE,iBAAiB,8BAA8B,OAAO,6BAAA;AAAA,IAChE,SAAS,EAAE,iBAAiB,eAAe,OAAO,gCAAgC,aAAa,+BAAA;AAAA,EAA+B;AAAA,EAEhI,SAAS;AAAA,IACP,OAAO,EAAE,iBAAiB,iCAAiC,OAAO,mCAAA;AAAA,IAClE,QAAQ,EAAE,iBAAiB,+BAA+B,OAAO,iCAAA;AAAA,IACjE,SAAS,EAAE,iBAAiB,eAAe,OAAO,iCAAiC,aAAa,gCAAA;AAAA,EAAgC;AAAA,EAElI,SAAS;AAAA,IACP,OAAO,EAAE,iBAAiB,iCAAiC,OAAO,mCAAA;AAAA,IAClE,QAAQ,EAAE,iBAAiB,+BAA+B,OAAO,iCAAA;AAAA,IACjE,SAAS,EAAE,iBAAiB,eAAe,OAAO,iCAAiC,aAAa,gCAAA;AAAA,EAAgC;AAAA,EAElI,OAAO;AAAA,IACL,OAAO,EAAE,iBAAiB,+BAA+B,OAAO,iCAAA;AAAA,IAChE,QAAQ,EAAE,iBAAiB,6BAA6B,OAAO,+BAAA;AAAA,IAC/D,SAAS,EAAE,iBAAiB,eAAe,OAAO,+BAA+B,aAAa,8BAAA;AAAA,EAA8B;AAAA,EAE9H,MAAM;AAAA,IACJ,OAAO,EAAE,iBAAiB,8BAA8B,OAAO,gCAAA;AAAA,IAC/D,QAAQ,EAAE,iBAAiB,4BAA4B,OAAO,8BAAA;AAAA,IAC9D,SAAS,EAAE,iBAAiB,eAAe,OAAO,8BAA8B,aAAa,6BAAA;AAAA,EAA6B;AAE9H,GAEawf,KAAQnnB,EAAwC,SAC3D;AAAA,EACE,SAAAsC,IAAU;AAAA,EACV,QAAAuF,IAAS;AAAA,EACT,MAAA/F,IAAO;AAAA,EACP,WAAAxC;AAAA,EACA,OAAAC;AAAA,EACA,QAAAE;AAAA,EACA,UAAAD;AAAA,EACA,GAAGrB;AACL,GACAuB,GACA;AACA,QAAMyN,IAAYJ,GAAWjL,CAAI,GAC3BslB,IAAazf,GAAaE,CAAM,EAAEvF,CAAO,GAEzCuf,IAA4B;AAAA,IAChC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,QAAQvf,MAAY,YAAY,cAAc;AAAA,IAC9C,GAAG6K;AAAA,IACH,GAAGia;AAAA,IACH,GAAG7nB;AAAA,EAAA;AAGL,SACE,gBAAAO;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAJ;AAAA,MACA,WAAW9B;AAAA,QACT;AAAA,QACA,iBAAiB0E,CAAO;AAAA,QACxB,iBAAiBuF,CAAM;AAAA,QACvB,iBAAiB/F,CAAI;AAAA,QACrBxC;AAAA,MAAA;AAAA,MAEF,OAAOuiB;AAAA,MACP,eAAapiB;AAAA,MACZ,GAAGtB;AAAA,MAEH,UAAAqB;AAAA,IAAA;AAAA,EAAA;AAGP,CAAC;AAED2nB,GAAM,cAAc;AChGpB,MAAMhd,KAAsC;AAAA,EAC1C,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAGA,SAASkd,GAAc,EAAE,MAAAvlB,GAAM,OAAAuI,KAA0C;AACvE,SACE,gBAAAjG;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAOtC;AAAA,MACP,QAAQA;AAAA,MACR,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAO,EAAE,WAAW,iCAAA;AAAA,MAEpB,UAAA;AAAA,QAAA,gBAAAhC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAG;AAAA,YACH,IAAG;AAAA,YACH,GAAE;AAAA,YACF,QAAQuK;AAAA,YACR,aAAY;AAAA,YACZ,eAAc;AAAA,YACd,SAAQ;AAAA,UAAA;AAAA,QAAA;AAAA,QAEV,gBAAAvK;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,GAAE;AAAA,YACF,QAAQuK;AAAA,YACR,aAAY;AAAA,YACZ,eAAc;AAAA,UAAA;AAAA,QAAA;AAAA,MAChB;AAAA,IAAA;AAAA,EAAA;AAGN;AAGA,SAASid,GAAK,EAAE,MAAAxlB,GAAM,OAAAuI,KAA0C;AAC9D,QAAMkd,IAAUzlB,IAAO,GACjBmD,IAAMnD,IAAO;AAEnB,SACE,gBAAAhC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,KAAAmF;AAAA,QACA,QAAQnD;AAAA,MAAA;AAAA,MAGT,WAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAACmhB,MACd,gBAAAnjB;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,OAAO;AAAA,YACL,OAAOynB;AAAA,YACP,QAAQA;AAAA,YACR,cAAc;AAAA,YACd,iBAAiBld;AAAA,YACjB,WAAW;AAAA,YACX,gBAAgB,GAAG4Y,IAAI,IAAI;AAAA,UAAA;AAAA,QAC7B;AAAA,QARKA;AAAA,MAAA,CAUR;AAAA,IAAA;AAAA,EAAA;AAGP;AAGA,SAASuE,GAAM,EAAE,MAAA1lB,GAAM,OAAAuI,KAA0C;AAC/D,SACE,gBAAAvK;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAOgC;AAAA,QACP,QAAQA;AAAA,QACR,cAAc;AAAA,QACd,iBAAiBuI;AAAA,QACjB,WAAW;AAAA,MAAA;AAAA,IACb;AAAA,EAAA;AAGN;AAEO,MAAMod,KAASznB,EAAwC,SAC5D;AAAA,EACE,MAAA8B,IAAO;AAAA,EACP,SAAAQ,IAAU;AAAA,EACV,OAAA+H,IAAQ;AAAA,EACR,OAAAK,IAAQ;AAAA,EACR,WAAApL;AAAA,EACA,OAAAC;AAAA,EACA,QAAAE;AAAA,EACA,GAAGtB;AACL,GACAuB,GACA;AACA,QAAMyN,IAAYhD,GAAQrI,CAAI,GAExBuL,IAA8B;AAAA,IAClC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,GAAG9N;AAAA,EAAA,GAGCmoB,IAAe,MAAM;AACzB,YAAQplB,GAAA;AAAA,MACN,KAAK;AACH,eAAO,gBAAAxC,EAACwnB,IAAA,EAAK,MAAMna,GAAW,OAAA9C,EAAA,CAAc;AAAA,MAC9C,KAAK;AACH,eAAO,gBAAAvK,EAAC0nB,IAAA,EAAM,MAAMra,GAAW,OAAA9C,EAAA,CAAc;AAAA,MAC/C;AACE,eAAO,gBAAAvK,EAACunB,IAAA,EAAc,MAAMla,GAAW,OAAA9C,EAAA,CAAc;AAAA,IAAA;AAAA,EAE3D;AAEA,SACE,gBAAAjG,EAAA8P,IAAA,EACE,UAAA;AAAA,IAAA,gBAAApU,EAAC,SAAA,EACE,UAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAcH;AAAA,IACA,gBAAAsE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAA1E;AAAA,QACA,MAAK;AAAA,QACL,cAAYgL;AAAA,QACZ,WAAW9M;AAAA,UACT;AAAA,UACA,kBAAkB0E,CAAO;AAAA,UACzB,kBAAkBR,CAAI;AAAA,UACtBxC;AAAA,QAAA;AAAA,QAEF,OAAO+N;AAAA,QACP,eAAa5N;AAAA,QACZ,GAAGtB;AAAA,QAEH,UAAA;AAAA,UAAAupB,EAAA;AAAA,UACD,gBAAA5nB;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACL,UAAU;AAAA,gBACV,OAAO;AAAA,gBACP,QAAQ;AAAA,gBACR,SAAS;AAAA,gBACT,QAAQ;AAAA,gBACR,UAAU;AAAA,gBACV,MAAM;AAAA,gBACN,YAAY;AAAA,gBACZ,QAAQ;AAAA,cAAA;AAAA,cAGT,UAAA4K;AAAA,YAAA;AAAA,UAAA;AAAA,QACH;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ,CAAC;AAED+c,GAAO,cAAc;AAGd,MAAME,KAAUF,IC5KVG,KAAW5nB,EAA0C,SAChE;AAAA,EACE,SAAAsC,IAAU;AAAA,EACV,OAAAulB;AAAA,EACA,QAAAnK;AAAA,EACA,QAAAJ;AAAA,EACA,SAAAwK,IAAU;AAAA,EACV,WAAAxoB;AAAA,EACA,OAAAC;AAAA,EACA,QAAAE;AAAA,EACA,GAAGtB;AACL,GACAuB,GACA;AA6BA,QAAMqoB,IAA+B;AAAA,IACnC,IA7BgB,MAAqB;AACrC,YAAMplB,IAAsB;AAAA,QAC1B,iBAAiB;AAAA,QACjB,UAAU;AAAA,QACV,UAAU;AAAA,MAAA;AAGZ,cAAQL,GAAA;AAAA,QACN,KAAK;AACH,UAAAK,EAAK,QAAQklB,KAAS,QACtBllB,EAAK,SAAS+a,KAAU,OACxB/a,EAAK,eAAe;AACpB;AAAA,QACF,KAAK;AACH,UAAAA,EAAK,QAAQklB,KAAS,IACtBllB,EAAK,SAAS+a,KAAUmK,KAAS,IACjCllB,EAAK,eAAe;AACpB;AAAA,QACF,KAAK;AACH,UAAAA,EAAK,QAAQklB,KAAS,QACtBllB,EAAK,SAAS+a,KAAU,IACxB/a,EAAK,eAAe2a,KAAU;AAC9B;AAAA,MAAA;AAGJ,aAAO3a;AAAA,IACT,GAGK;AAAA,IACH,GAAGpD;AAAA,EAAA,GAGCyoB,IAA8B;AAAA,IAClC,UAAU;AAAA,IACV,KAAK;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,WAAWF,IAAU,iCAAiC;AAAA,EAAA;AAGxD,SACE,gBAAA1jB,EAAA8P,IAAA,EACG,UAAA;AAAA,IAAA4T,uBACE,SAAA,EACE,UAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAMH;AAAA,IAEF,gBAAAhoB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAJ;AAAA,QACA,WAAW9B;AAAA,UACT;AAAA,UACA,oBAAoB0E,CAAO;AAAA,UAC3BwlB,KAAW;AAAA,UACXxoB;AAAA,QAAA;AAAA,QAEF,OAAOyoB;AAAA,QACP,eAAatoB;AAAA,QACb,eAAY;AAAA,QACX,GAAGtB;AAAA,QAEH,UAAA2pB,KAAW,gBAAAhoB,EAAC,OAAA,EAAI,OAAOkoB,EAAA,CAAc;AAAA,MAAA;AAAA,IAAA;AAAA,EACxC,GACF;AAEJ,CAAC;AAEDJ,GAAS,cAAc;AAchB,SAASK,GAAa;AAAA,EAC3B,OAAAC,IAAQ;AAAA,EACR,KAAAjjB,IAAM;AAAA,EACN,eAAAkjB,IAAgB;AAAA,EAChB,WAAA7oB;AACF,GAAsB;AACpB,SACE,gBAAAQ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWlC,EAAG,wBAAwB0B,CAAS;AAAA,MAC/C,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAA2F,EAAA;AAAA,MAElD,UAAA,MAAM,KAAK,EAAE,QAAQijB,GAAO,EAAE,IAAI,CAACE,GAAGnF,MACrC,gBAAAnjB;AAAA,QAAC8nB;AAAA,QAAA;AAAA,UAEC,SAAQ;AAAA,UACR,OAAO3E,MAAMiF,IAAQ,IAAIC,IAAgB;AAAA,QAAA;AAAA,QAFpClF;AAAA,MAAA,CAIR;AAAA,IAAA;AAAA,EAAA;AAGP;AAEAgF,GAAa,cAAc;AC5HpB,MAAMI,KAAUroB,EAAyC,SAC9D;AAAA,EACE,aAAAwQ,IAAc;AAAA,EACd,SAAAlO,IAAU;AAAA,EACV,OAAAoI;AAAA,EACA,eAAA4d,IAAgB;AAAA,EAChB,WAAAhpB;AAAA,EACA,OAAAC;AAAA,EACA,QAAAE;AAAA,EACA,GAAGtB;AACL,GACAuB,GACA;AACA,QAAM+a,IAAejK,MAAgB,cAE/BnD,IAA8B;AAAA,IAClC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,OAAOoN,IAAe,SAAS;AAAA,IAC/B,QAAQA,IAAe,SAAY;AAAA,IACnC,eAAeA,IAAe,QAAQ;AAAA,IACtC,GAAGlb;AAAA,EAAA,GAGCgpB,IAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,iBAAiBjmB,MAAY,UAAU,+BAA+B;AAAA,IACtE,aAAaA;AAAA,IACb,aAAa;AAAA,IACb,GAAImY,IACA;AAAA,MACE,QAAQ;AAAA,MACR,aAAanY,MAAY,UAAU,IAAI;AAAA,IAAA,IAEzC;AAAA,MACE,OAAO;AAAA,MACP,aAAaA,MAAY,UAAU,IAAI;AAAA,IAAA;AAAA,EACzC,GAGAsK,IAA4B;AAAA,IAChC,SAAS6N,IAAe,WAAW;AAAA,IACnC,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,YAAY;AAAA,EAAA;AAGd,MAAI,CAAC/P;AACH,WACE,gBAAA5K;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAJ;AAAA,QACA,MAAK;AAAA,QACL,oBAAkB8Q;AAAA,QAClB,WAAW5S;AAAA,UACT;AAAA,UACA,mBAAmB4S,CAAW;AAAA,UAC9B,mBAAmBlO,CAAO;AAAA,UAC1BhD;AAAA,QAAA;AAAA,QAEF,OAAO,EAAE,GAAGipB,GAAW,GAAGhpB,EAAA;AAAA,QAC1B,eAAaE;AAAA,QACZ,GAAGtB;AAAA,MAAA;AAAA,IAAA;AAKV,QAAMqqB,IAAgBF,MAAkB,YAAYA,MAAkB,OAChEG,IAAcH,MAAkB,YAAYA,MAAkB;AAEpE,SACE,gBAAAlkB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAA1E;AAAA,MACA,MAAK;AAAA,MACL,oBAAkB8Q;AAAA,MAClB,WAAW5S;AAAA,QACT;AAAA,QACA,mBAAmB4S,CAAW;AAAA,QAC9B,mBAAmBlO,CAAO;AAAA,QAC1B;AAAA,QACAhD;AAAA,MAAA;AAAA,MAEF,OAAO+N;AAAA,MACP,eAAa5N;AAAA,MACZ,GAAGtB;AAAA,MAEH,UAAA;AAAA,QAAAqqB,KAAiB,gBAAA1oB,EAAC,QAAA,EAAK,OAAOyoB,EAAA,CAAW;AAAA,QAC1C,gBAAAzoB,EAAC,QAAA,EAAK,OAAO8M,GAAa,UAAAlC,GAAM;AAAA,QAC/B+d,KAAe,gBAAA3oB,EAAC,QAAA,EAAK,OAAOyoB,EAAA,CAAW;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAG9C,CAAC;AAEDF,GAAQ,cAAc;AC9Ff,MAAMK,KAAa1oB,EAA4C,SACpE;AAAA,EACE,MAAA8S;AAAA,EACA,OAAAtP;AAAA,EACA,aAAAC;AAAA,EACA,QAAAuT;AAAA,EACA,iBAAA2R;AAAA,EACA,WAAArpB;AAAA,EACA,OAAAC;AAAA,EACA,QAAAE;AAAA,EACA,UAAAD;AAAA,EACA,GAAGrB;AACL,GACAuB,GACA;AACA,QAAMuQ,IAAgC;AAAA,IACpC,SAAS;AAAA,IACT,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,WAAW;AAAA,IACX,SAAS;AAAA,IACT,GAAG1Q;AAAA,EAAA,GAGCoL,IAA2B;AAAA,IAC/B,cAAc;AAAA,IACd,OAAO;AAAA,EAAA,GAGH5G,IAA4B;AAAA,IAChC,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,cAAcN,IAAc,IAAI;AAAA,IAChC,UAAU;AAAA,EAAA,GAGNO,IAAkC;AAAA,IACtC,UAAU;AAAA,IACV,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,UAAU;AAAA,EAAA,GAGNC,IAA8B;AAAA,IAClC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,KAAK;AAAA,IACL,WAAW;AAAA,EAAA;AAGb,SACE,gBAAAG;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAA1E;AAAA,MACA,WAAW9B,EAAG,sBAAsB0B,CAAS;AAAA,MAC7C,OAAO2Q;AAAA,MACP,eAAaxQ;AAAA,MACZ,GAAGtB;AAAA,MAEH,UAAA;AAAA,QAAA2U,KAAQ,gBAAAhT,EAAC,OAAA,EAAI,OAAO6K,GAAY,UAAAmI,GAAK;AAAA,QAErCtP,KAAS,gBAAA1D,EAAC,MAAA,EAAG,OAAOiE,GAAa,UAAAP,GAAM;AAAA,QAEvCC,KAAe,gBAAA3D,EAAC,KAAA,EAAE,OAAOkE,GAAmB,UAAAP,GAAY;AAAA,QAExDjE;AAAA,SAECwX,KAAU2R,MACV,gBAAAvkB,EAAC,OAAA,EAAI,OAAOH,GACT,UAAA;AAAA,UAAA+S;AAAA,UACA2R;AAAA,QAAA,EAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR,CAAC;AAEDD,GAAW,cAAc;AAGlB,SAASE,GAAe,EAAE,MAAA9mB,IAAO,MAAyB;AAC/D,SACE,gBAAAsC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAOtC;AAAA,MACP,QAAQA;AAAA,MACR,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAO,EAAE,SAAS,IAAA;AAAA,MAElB,UAAA;AAAA,QAAA,gBAAAhC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,GAAE;AAAA,YACF,GAAE;AAAA,YACF,OAAM;AAAA,YACN,QAAO;AAAA,YACP,IAAG;AAAA,YACH,QAAO;AAAA,YACP,aAAY;AAAA,UAAA;AAAA,QAAA;AAAA,QAEd,gBAAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,GAAE;AAAA,YACF,QAAO;AAAA,YACP,aAAY;AAAA,UAAA;AAAA,QAAA;AAAA,QAEd,gBAAAA,EAAC,YAAO,IAAG,MAAK,IAAG,MAAK,GAAE,KAAI,MAAK,eAAA,CAAe;AAAA,QAClD,gBAAAA,EAAC,YAAO,IAAG,MAAK,IAAG,MAAK,GAAE,KAAI,MAAK,eAAA,CAAe;AAAA,QAClD,gBAAAA,EAAC,YAAO,IAAG,MAAK,IAAG,MAAK,GAAE,KAAI,MAAK,eAAA,CAAe;AAAA,QAClD,gBAAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,GAAE;AAAA,YACF,GAAE;AAAA,YACF,OAAM;AAAA,YACN,QAAO;AAAA,YACP,IAAG;AAAA,YACH,MAAK;AAAA,YACL,SAAQ;AAAA,UAAA;AAAA,QAAA;AAAA,QAEV,gBAAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,GAAE;AAAA,YACF,GAAE;AAAA,YACF,OAAM;AAAA,YACN,QAAO;AAAA,YACP,IAAG;AAAA,YACH,MAAK;AAAA,YACL,SAAQ;AAAA,UAAA;AAAA,QAAA;AAAA,MACV;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA8oB,GAAe,cAAc;AC9ItB,SAASC,GAAO,EAAE,UAAArpB,GAAU,WAAAspB,GAAW,UAAArgB,IAAW,MAAsB;AAC7E,QAAM,CAACmR,GAASC,CAAU,IAAIvQ,EAAS,EAAK,GACtC,CAACyf,GAAiBC,CAAkB,IAAI1f,EAA6B,IAAI;AAiB/E,SAfAqG,EAAU,MAAM;AAGd,QAFAkK,EAAW,EAAI,GAEX,OAAOiP,KAAc,UAAU;AACjC,YAAMG,IAAU,SAAS,cAA2BH,CAAS;AAC7D,MAAAE,EAAmBC,CAAO;AAAA,IAC5B,OACED,EADSF,KAGU,SAAS,IAFA;AAK9B,WAAO,MAAMjP,EAAW,EAAK;AAAA,EAC/B,GAAG,CAACiP,CAAS,CAAC,GAEVrgB,4BACQ,UAAAjJ,GAAS,IAGjB,CAACoa,KAAW,CAACmP,IACR,OAGFlS,GAAarX,GAAUupB,CAAe;AAC/C;AAEAF,GAAO,cAAc;ACxCrB,MAAMK,KAAsB;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,EAAE,KAAK,IAAI;AAsBJ,SAASC,GACdpO,IAA+B,IACR;AACvB,QAAM;AAAA,IACJ,SAAAC,IAAU;AAAA,IACV,WAAAoO,IAAY;AAAA,IACZ,cAAAC,IAAe;AAAA,IACf,cAAAC;AAAA,EAAA,IACEvO,GAEErb,IAAMuP,EAAU,IAAI,GACpBkH,IAAwBlH,EAA2B,IAAI,GAEvDsa,IAAuBha,EAAY,MAClC7P,EAAI,UACF,MAAM,KAAKA,EAAI,QAAQ,iBAA8BwpB,EAAmB,CAAC,IADvD,CAAA,GAExB,CAAA,CAAE,GAECM,IAAaja,EAAY,MAAM;;AAEnC,KAAAkE,IADiB8V,EAAA,EACR,CAAC,MAAV,QAAA9V,EAAa;AAAA,EACf,GAAG,CAAC8V,CAAoB,CAAC,GAEnBE,IAAYla,EAAY,MAAM;;AAClC,UAAMma,IAAWH,EAAA;AACjB,KAAA9V,IAAAiW,EAASA,EAAS,SAAS,CAAC,MAA5B,QAAAjW,EAA+B;AAAA,EACjC,GAAG,CAAC8V,CAAoB,CAAC;AAEzB,SAAA5Z,EAAU,MAAM;AACd,QAAKqL,GAML;AAAA,UAHA7E,EAAsB,UAAU,SAAS,eAGrCiT,GAAW;AACb,cAAMN,IAAYppB,EAAI;AACtB,YAAI,CAACopB,EAAW;AAGhB,YAAIQ,GAAc;AAChB,gBAAML,IACJ,OAAOK,KAAiB,WACpBR,EAAU,cAA2BQ,CAAY,IACjDA;AACN,UAAIL,IACFA,EAAQ,MAAA,IAERO,EAAA;AAAA,QAEJ;AACE,UAAAA,EAAA;AAAA,MAEJ;AAGA,aAAO,MAAM;AACX,QAAIH,KAAgBlT,EAAsB,WACxCA,EAAsB,QAAQ,MAAA;AAAA,MAElC;AAAA;AAAA,EACF,GAAG,CAAC6E,GAASoO,GAAWC,GAAcC,GAAcE,CAAU,CAAC,GAE/D7Z,EAAU,MAAM;AACd,QAAI,CAACqL,EAAS;AAEd,UAAMtH,IAAgB,CAACyH,MAAyB;AAI9C,UAHIA,EAAM,QAAQ,SAGd,CADczb,EAAI,QACN;AAEhB,YAAM2W,IAAoBkT,EAAA;AAC1B,UAAIlT,EAAkB,WAAW,EAAG;AAEpC,YAAMC,IAAeD,EAAkB,CAAC,GAClCE,IAAcF,EAAkBA,EAAkB,SAAS,CAAC;AAElE,MAAI8E,EAAM,WAEJ,SAAS,kBAAkB7E,MAC7B6E,EAAM,eAAA,GACN5E,EAAY,MAAA,KAIV,SAAS,kBAAkBA,MAC7B4E,EAAM,eAAA,GACN7E,EAAa,MAAA;AAAA,IAGnB;AAEA,oBAAS,iBAAiB,WAAW5C,CAAa,GAC3C,MAAM,SAAS,oBAAoB,WAAWA,CAAa;AAAA,EACpE,GAAG,CAACsH,GAASuO,CAAoB,CAAC,GAE3B;AAAA,IACL,KAAA7pB;AAAA,IACA,YAAA8pB;AAAA,IACA,WAAAC;AAAA,EAAA;AAEJ;ACjHO,MAAME,KAAY3pB,EAA2C,SAClE;AAAA,EACE,UAAAR;AAAA,EACA,SAAAwb,IAAU;AAAA,EACV,WAAAoO,IAAY;AAAA,EACZ,cAAAC,IAAe;AAAA,EACf,cAAAC;AAAA,EACA,WAAAhqB;AAAA,EACA,OAAAC;AACF,GACAqqB,GACA;AACA,QAAM,EAAE,KAAAlqB,EAAA,IAAQypB,GAA6B;AAAA,IAC3C,SAAAnO;AAAA,IACA,WAAAoO;AAAA,IACA,cAAAC;AAAA,IACA,cAAAC;AAAA,EAAA,CACD;AAED,SACE,gBAAAxpB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAK,CAACoS,MAAS;AACZ,QAAAxS,EAAsD,UAAUwS,GAC7D,OAAO0X,KAAiB,aAC1BA,EAAa1X,CAAI,IACR0X,MACTA,EAAa,UAAU1X;AAAA,MAE3B;AAAA,MACA,WAAA5S;AAAA,MACA,OAAAC;AAAA,MAEC,UAAAC;AAAA,IAAA;AAAA,EAAA;AAGP,CAAC;AAEDmqB,GAAU,cAAc;AC9BjB,MAAME,KAAU7pB,EAAyC,SAC9D;AAAA,EACE,QAAA6V;AAAA,EACA,SAAAC;AAAA,EACA,cAAAgU,IAAe;AAAA,EACf,MAAAC,IAAO;AAAA,EACP,YAAAC,IAAa;AAAA,EACb,SAAAhtB,IAAU;AAAA,EACV,WAAAitB,IAAY;AAAA,EACZ,QAAAC;AAAA,EACA,WAAA5qB;AAAA,EACA,OAAAC;AAAA,EACA,QAAAE;AAAA,EACA,UAAAD;AAAA,EACA,GAAGrB;AACL,GACAuB,GACA;AACA,MAAI,CAACmW,EAAQ,QAAO;AAEpB,QAAMrC,IAAc,CAAC5Q,MAAwB;AAC3C,IAAIknB,KAAgBlnB,EAAE,WAAWA,EAAE,kBACjCkT,KAAA,QAAAA;AAAA,EAEJ,GAEMW,IAA8B;AAAA,IAClC,UAAU;AAAA,IACV,OAAO;AAAA,IACP,QAAQyT,KAAU;AAAA,IAClB,iBAAiB,iBAAiBltB,CAAO;AAAA,IACzC,gBAAgB+sB,IAAO,QAAQC,CAAU,QAAQ;AAAA,IACjD,sBAAsBD,IAAO,QAAQC,CAAU,QAAQ;AAAA,IACvD,WAAW;AAAA,IACX,GAAGzqB;AAAA,EAAA,GAGCgY,IACJ,gBAAAnT,EAAA8P,IAAA,EACE,UAAA;AAAA,IAAA,gBAAApU,EAAC,SAAA,EACE,UAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAMH;AAAA,IACA,gBAAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAJ;AAAA,QACA,WAAW9B,EAAG,kBAAkB0B,CAAS;AAAA,QACzC,OAAOmX;AAAA,QACP,SAASjD;AAAA,QACT,eAAY;AAAA,QACZ,eAAa/T;AAAA,QACZ,GAAGtB;AAAA,QAEH,UAAAqB;AAAA,MAAA;AAAA,IAAA;AAAA,EACH,GACF;AAGF,SAAIyqB,IACK,gBAAAnqB,EAAC+oB,MAAQ,UAAAtR,EAAA,CAAQ,IAGnBA;AACT,CAAC;AAEDsS,GAAQ,cAAc;AC3EtB,MAAMM,KAA8B;AAAA,EAClC,UAAU;AAAA,EACV,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,QAAQ;AACV,GAKMC,KAAiC;AAAA,EACrC,GAAGD;AACL,GAEaE,KAAmBrqB;AAAA,EAC9B,SACE;AAAA,IACE,UAAAR;AAAA,IACA,WAAA8qB,IAAY;AAAA,IACZ,WAAAhrB;AAAA,IACA,OAAAC;AAAA,IACA,QAAAE;AAAA,IACA,GAAGtB;AAAA,EAAA,GAELuB,GACA;AACA,WACE,gBAAAI;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAJ;AAAA,QACA,WAAW9B;AAAA,UACT;AAAA,UACA0sB,KAAa;AAAA,UACbhrB;AAAA,QAAA;AAAA,QAEF,OAAO;AAAA,UACL,GAAIgrB,IAAYF,KAAkBD;AAAA,UAClC,GAAG5qB;AAAA,QAAA;AAAA,QAEL,UAAU+qB,IAAY,IAAI;AAAA,QAC1B,eAAa7qB;AAAA,QACZ,GAAGtB;AAAA,QAEH,UAAAqB;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AACF;AAEA6qB,GAAiB,cAAc;AAKxB,MAAME,KAASF;AAEtBE,GAAO,cAAc;AC/Ed,SAASC,GAAcC,GAAwB;AACpD,QAAM,CAACC,GAASC,CAAU,IAAIrhB,EAAS,MACjC,OAAO,SAAW,MAAoB,KACnC,OAAO,WAAWmhB,CAAK,EAAE,OACjC;AAED,SAAA9a,EAAU,MAAM;AACd,QAAI,OAAO,SAAW,IAAa;AAEnC,UAAMib,IAAa,OAAO,WAAWH,CAAK,GACpC1a,IAAe,CAACnN,MAA2B+nB,EAAW/nB,EAAE,OAAO;AAGrE,WAAA+nB,EAAWC,EAAW,OAAO,GAG7BA,EAAW,iBAAiB,UAAU7a,CAAY,GAC3C,MAAM6a,EAAW,oBAAoB,UAAU7a,CAAY;AAAA,EACpE,GAAG,CAAC0a,CAAK,CAAC,GAEHC;AACT;AAGO,SAASG,KAAc;AAC5B,SAAOL,GAAc,oBAAoB;AAC3C;AAEO,SAASM,KAAc;AAC5B,SAAON,GAAc,4CAA4C;AACnE;AAEO,SAASO,KAAe;AAC7B,SAAOP,GAAc,qBAAqB;AAC5C;AAEO,SAASQ,KAA0B;AACxC,SAAOR,GAAc,kCAAkC;AACzD;AAEO,SAASS,KAAqB;AACnC,SAAOT,GAAc,8BAA8B;AACrD;AC5BO,SAASU,GAAcnQ,IAAgC,IAAyB;AACrF,QAAM,EAAE,eAAAoQ,IAAgB,IAAO,QAAQC,GAAY,SAASC,MAAgBtQ,GACtE,CAAClF,GAAQuG,CAAS,IAAI9S,EAAS6hB,CAAa,GAE5CG,IAAS/b,EAAY,MAAM;AAC/B,IAAA6M,EAAU,EAAI,GACdgP,KAAA,QAAAA;AAAA,EACF,GAAG,CAACA,CAAU,CAAC,GAETtV,IAAUvG,EAAY,MAAM;AAChC,IAAA6M,EAAU,EAAK,GACfiP,KAAA,QAAAA;AAAA,EACF,GAAG,CAACA,CAAW,CAAC,GAEVE,IAAWhc,EAAY,MAAM;AACjC,UAAMic,IAAW,CAAC3V;AAClB,IAAAuG,EAAUoP,CAAQ,GACdA,IACFJ,KAAA,QAAAA,MAEAC,KAAA,QAAAA;AAAA,EAEJ,GAAG,CAACxV,GAAQuV,GAAYC,CAAW,CAAC;AAEpC,SAAO;AAAA,IACL,QAAAxV;AAAA,IACA,QAAAyV;AAAA,IACA,SAAAxV;AAAA,IACA,UAAAyV;AAAA,IACA,WAAAnP;AAAA,EAAA;AAEJ;ACfO,SAASqP,GACd1Q,GAC6B;AAC7B,QAAM;AAAA,IACJ,WAAA2Q;AAAA,IACA,cAAAC,IAAe;AAAA,IACf,MAAAC,IAAO;AAAA,IACP,aAAApb,IAAc;AAAA,IACd,eAAAqb;AAAA,IACA,UAAAC;AAAA,EAAA,IACE/Q,GAEE,CAACgR,GAAcC,CAAoB,IAAI1iB,EAASqiB,CAAY,GAE5DM,IAAkB1c;AAAA,IACtB,CAACzE,MAAkB;AACjB,MAAAkhB,EAAqBlhB,CAAK,GAC1B+gB,KAAA,QAAAA,EAAgB/gB;AAAA,IAClB;AAAA,IACA,CAAC+gB,CAAa;AAAA,EAAA,GAGVK,IAAY3c;AAAA,IAChB,CAAC/K,MAAkD;AACjD,UAAI8Z;AAEJ,cAAQ9Z,GAAA;AAAA,QACN,KAAK;AACH,UAAA8Z,IAAW;AACX;AAAA,QACF,KAAK;AACH,UAAAA,IAAWoN,IAAY;AACvB;AAAA,QACF,KAAK;AACH,UAAIK,KAAgBL,IAAY,IAC9BpN,IAAWsN,IAAO,IAAIG,IAEtBzN,IAAWyN,IAAe;AAE5B;AAAA,QACF,KAAK;AACH,UAAIA,KAAgB,IAClBzN,IAAWsN,IAAOF,IAAY,IAAIK,IAElCzN,IAAWyN,IAAe;AAE5B;AAAA,MAAA;AAGJ,MAAAE,EAAgB3N,CAAQ;AAAA,IAC1B;AAAA,IACA,CAACyN,GAAcL,GAAWE,GAAMK,CAAe;AAAA,EAAA,GAG3CvY,IAAgBnE;AAAA,IACpB,CAAC4L,MAA+B;AAC9B,YAAM,EAAE,KAAApd,MAAQod,GAEVgR,IAAa3b,MAAgB,cAAcA,MAAgB,QAC3DiK,IAAejK,MAAgB,gBAAgBA,MAAgB;AAErE,cAAQzS,GAAA;AAAA,QACN,KAAK;AACH,UAAIouB,MACFhR,EAAM,eAAA,GACN+Q,EAAU,MAAM;AAElB;AAAA,QACF,KAAK;AACH,UAAIC,MACFhR,EAAM,eAAA,GACN+Q,EAAU,MAAM;AAElB;AAAA,QACF,KAAK;AACH,UAAIzR,MACFU,EAAM,eAAA,GACN+Q,EAAU,MAAM;AAElB;AAAA,QACF,KAAK;AACH,UAAIzR,MACFU,EAAM,eAAA,GACN+Q,EAAU,MAAM;AAElB;AAAA,QACF,KAAK;AACH,UAAA/Q,EAAM,eAAA,GACN+Q,EAAU,OAAO;AACjB;AAAA,QACF,KAAK;AACH,UAAA/Q,EAAM,eAAA,GACN+Q,EAAU,MAAM;AAChB;AAAA,QACF,KAAK;AAAA,QACL,KAAK;AACH,UAAA/Q,EAAM,eAAA,GACN2Q,KAAA,QAAAA,EAAWC;AACX;AAAA,MAAA;AAAA,IAEN;AAAA,IACA,CAACvb,GAAa0b,GAAWJ,GAAUC,CAAY;AAAA,EAAA,GAG3CK,IAAe7c;AAAA,IACnB,CAACzE,OAAmB;AAAA,MAClB,UAAUA,MAAUihB,IAAe,IAAI;AAAA,MACvC,gBAAgBjhB,MAAUihB;AAAA,MAC1B,SAAS,MAAME,EAAgBnhB,CAAK;AAAA,IAAA;AAAA,IAEtC,CAACihB,GAAcE,CAAe;AAAA,EAAA;AAGhC,SAAO;AAAA,IACL,cAAAF;AAAA,IACA,iBAAAE;AAAA,IACA,eAAAvY;AAAA,IACA,cAAA0Y;AAAA,EAAA;AAEJ;AClIO,SAASC,GACdtR,GAC0B;AAC1B,QAAM,EAAE,OAAOxK,GAAiB,cAAA1B,GAAc,UAAAjB,MAAamN,GAErDuR,IAAe/b,MAAoB,QACnCgc,IAAkBtd,EAAOqd,CAAY;AAG3C,EAAA3c,EAAU,MAAM;AACd,IAAI4c,EAAgB,YAAYD,KAC9B,QAAQ;AAAA,MACN;AAAA,IAAA,GAIJC,EAAgB,UAAUD;AAAA,EAC5B,GAAG,CAACA,CAAY,CAAC;AAEjB,QAAM,CAAC7b,GAAeC,CAAgB,IAAIpH,EAASuF,CAAY,GAEzD5Q,IAAQquB,IAAe/b,IAAkBE,GAEzC+b,IAAWjd;AAAA,IACf,CAACkd,MAAoC;AACnC,YAAMC,IACJ,OAAOD,KAAc,aAChBA,EAA6BxuB,CAAK,IACnCwuB;AAEN,MAAKH,KACH5b,EAAiBgc,CAAa,GAEhC9e,KAAA,QAAAA,EAAW8e;AAAA,IACb;AAAA,IACA,CAACJ,GAAc1e,GAAU3P,CAAK;AAAA,EAAA;AAGhC,SAAO;AAAA,IACL,OAAAA;AAAA,IACA,UAAAuuB;AAAA,IACA,cAAAF;AAAA,EAAA;AAEJ;"}
|