@fabio.caffarello/react-design-system 1.10.5 → 1.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/index.cjs +1 -1
- package/dist/components/index.js +1 -1
- package/dist/{components-BTUibx0r.js → components-BsS4vmbl.js} +3407 -3465
- package/dist/components-BsS4vmbl.js.map +1 -0
- package/dist/components-D2QpE5zG.cjs +689 -0
- package/dist/components-D2QpE5zG.cjs.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.js +56 -56
- package/dist/primitives/index.cjs +1 -1
- package/dist/primitives/index.cjs.map +1 -1
- package/dist/primitives/index.js +973 -981
- package/dist/primitives/index.js.map +1 -1
- package/dist/providers/index.cjs +1 -1
- package/dist/providers/index.js +1 -1
- package/dist/tokens/index.cjs +1 -1
- package/dist/tokens/index.js +27 -27
- package/dist/{tokens-DcAT-mPY.js → tokens-BCpPv8tI.js} +277 -354
- package/dist/{tokens-DcAT-mPY.js.map → tokens-BCpPv8tI.js.map} +1 -1
- package/dist/tokens-BX3lVxER.cjs +2 -0
- package/dist/{tokens-Dul82Bn_.cjs.map → tokens-BX3lVxER.cjs.map} +1 -1
- package/dist/ui/tokens/index.d.ts +0 -1
- package/package.json +1 -1
- package/dist/components-BTUibx0r.js.map +0 -1
- package/dist/components-znqlol8t.cjs +0 -690
- package/dist/components-znqlol8t.cjs.map +0 -1
- package/dist/tokens-Dul82Bn_.cjs +0 -2
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"components-BTUibx0r.js","sources":["../node_modules/clsx/dist/clsx.mjs","../node_modules/tailwind-merge/dist/bundle-mjs.mjs","../src/ui/utils/cn.ts","../node_modules/class-variance-authority/dist/index.mjs","../src/ui/utils/cva.ts","../node_modules/react/cjs/react-jsx-runtime.production.js","../node_modules/react/cjs/react-jsx-runtime.development.js","../node_modules/react/jsx-runtime.js","../src/ui/providers/ToastContext.tsx","../src/ui/providers/DialogContext.tsx","../src/ui/providers/DialogProvider.tsx","../node_modules/lucide-react/dist/esm/shared/src/utils.js","../node_modules/lucide-react/dist/esm/defaultAttributes.js","../node_modules/lucide-react/dist/esm/Icon.js","../node_modules/lucide-react/dist/esm/createLucideIcon.js","../node_modules/lucide-react/dist/esm/icons/arrow-up-down.js","../node_modules/lucide-react/dist/esm/icons/calendar.js","../node_modules/lucide-react/dist/esm/icons/check.js","../node_modules/lucide-react/dist/esm/icons/chevron-down.js","../node_modules/lucide-react/dist/esm/icons/chevron-left.js","../node_modules/lucide-react/dist/esm/icons/chevron-right.js","../node_modules/lucide-react/dist/esm/icons/circle-alert.js","../node_modules/lucide-react/dist/esm/icons/circle-check.js","../node_modules/lucide-react/dist/esm/icons/clock.js","../node_modules/lucide-react/dist/esm/icons/command.js","../node_modules/lucide-react/dist/esm/icons/download.js","../node_modules/lucide-react/dist/esm/icons/ellipsis-vertical.js","../node_modules/lucide-react/dist/esm/icons/eye-off.js","../node_modules/lucide-react/dist/esm/icons/eye.js","../node_modules/lucide-react/dist/esm/icons/file.js","../node_modules/lucide-react/dist/esm/icons/funnel.js","../node_modules/lucide-react/dist/esm/icons/grip-vertical.js","../node_modules/lucide-react/dist/esm/icons/info.js","../node_modules/lucide-react/dist/esm/icons/loader-circle.js","../node_modules/lucide-react/dist/esm/icons/menu.js","../node_modules/lucide-react/dist/esm/icons/panel-left-close.js","../node_modules/lucide-react/dist/esm/icons/panel-left-open.js","../node_modules/lucide-react/dist/esm/icons/search.js","../node_modules/lucide-react/dist/esm/icons/star.js","../node_modules/lucide-react/dist/esm/icons/triangle-alert.js","../node_modules/lucide-react/dist/esm/icons/upload.js","../node_modules/lucide-react/dist/esm/icons/x.js","../src/ui/components/Card/Card.tsx","../src/ui/components/Form/FormContext.tsx","../src/ui/components/Form/FormProvider.tsx","../src/ui/components/Form/Form.tsx","../src/ui/components/Form/FormField.tsx","../node_modules/react-hook-form/dist/index.esm.mjs","../src/ui/components/Form/useFormFieldArray.ts","../src/ui/components/Breadcrumb/Breadcrumb.tsx","../src/ui/components/Pagination/Pagination.tsx","../src/ui/components/EmptyState/EmptyState.tsx","../src/ui/components/Dropdown/Dropdown.tsx","../src/ui/components/DatePicker/DatePickerContext.tsx","../src/ui/components/DatePicker/DatePickerProvider.tsx","../src/ui/components/DatePicker/DatePickerInput.tsx","../src/ui/components/DatePicker/DatePickerCalendar.tsx","../src/ui/components/DatePicker/DatePicker.tsx","../src/ui/components/Tabs/TabsContext.tsx","../src/ui/components/Tabs/TabsProvider.tsx","../src/ui/components/Tabs/TabsList.tsx","../src/ui/components/Tabs/TabsTrigger.tsx","../src/ui/components/Tabs/TabsContent.tsx","../src/ui/components/Tabs/Tabs.tsx","../src/ui/components/SearchInput/SearchInput.tsx","../src/ui/components/Autocomplete/AutocompleteOption.tsx","../src/ui/components/Autocomplete/AutocompleteList.tsx","../src/ui/components/Autocomplete/Autocomplete.tsx","../src/ui/components/MultiSelect/MultiSelect.tsx","../src/ui/components/Rating/Rating.tsx","../src/ui/components/FileUpload/FileUpload.tsx","../src/ui/components/Popover/Popover.tsx","../src/ui/components/TimePicker/TimePicker.tsx","../src/ui/components/ColorPicker/ColorPicker.tsx","../src/ui/components/Drawer/DrawerContext.tsx","../src/ui/components/Drawer/DrawerContent.tsx","../src/ui/components/Drawer/DrawerHeader.tsx","../src/ui/components/Drawer/DrawerFooter.tsx","../src/ui/components/Drawer/Drawer.tsx","../src/ui/components/Menu/MenuContext.tsx","../src/ui/components/Menu/MenuTrigger.tsx","../src/ui/components/Menu/MenuContent.tsx","../src/ui/components/Menu/MenuItem.tsx","../src/ui/components/Menu/MenuSeparator.tsx","../src/ui/components/Menu/Menu.tsx","../src/ui/components/Accordion/Accordion.tsx","../src/ui/components/Header/contexts/HeaderContext.tsx","../src/ui/components/Header/components/HeaderLogo.tsx","../src/ui/components/Header/components/HeaderNavigation.tsx","../src/ui/components/Header/components/HeaderActions.tsx","../src/ui/components/Header/components/HeaderHamburger.tsx","../src/ui/components/Header/components/HeaderMobileMenu.tsx","../src/ui/layouts/Container/Container.tsx","../src/ui/layouts/Stack/Stack.tsx","../src/ui/components/Header/Header.tsx","../src/ui/components/Navigation/Navigation.tsx","../src/ui/components/PageHeader/PageHeader.tsx","../src/ui/components/LoginBox/LoginBox.tsx","../src/ui/components/Modal/Modal.tsx","../src/ui/components/Table/TableContext.tsx","../src/ui/components/Table/TableProvider.tsx","../src/ui/components/Table/TableHeaderCell.tsx","../src/ui/components/Table/TableHeaderRow.tsx","../src/ui/components/Table/TableHeader.tsx","../src/ui/components/Table/TableCell.tsx","../src/ui/components/Table/TableActions/TableActions.tsx","../src/ui/components/Table/TableActions.tsx","../src/ui/components/Table/TableRow.tsx","../src/ui/components/Table/TableEmptyState.tsx","../src/ui/components/Table/useVirtualScrolling.ts","../src/ui/components/Table/TableBody.tsx","../src/ui/components/Table/TableFilters/TableFilters.tsx","../src/ui/components/Table/TableFilters.tsx","../src/ui/components/Table/TablePagination/TablePagination.tsx","../src/ui/components/Table/TablePagination.tsx","../src/ui/components/Table/Table.tsx","../src/ui/components/Table/useColumnResizing.ts","../src/ui/components/SideNavbar/contexts/SideNavbarThemeContext.tsx","../src/ui/components/SideNavbar/providers/SideNavbarThemeProvider.tsx","../src/ui/components/SideNavbar/contexts/SideNavbarConfigContext.tsx","../src/ui/components/SideNavbar/providers/SideNavbarConfigProvider.tsx","../src/ui/components/SideNavbar/contexts/SideNavbarStateContext.tsx","../src/ui/components/SideNavbar/utils/parseWidth.ts","../src/ui/components/SideNavbar/utils/parseKeyboardShortcut.ts","../src/ui/components/SideNavbar/hooks/useResize.ts","../src/ui/components/SideNavbar/hooks/useResponsiveSidebar.ts","../src/ui/components/SideNavbar/hooks/useFocusManagement.ts","../src/ui/components/SideNavbar/hooks/useKeyboardShortcut.ts","../src/ui/components/SideNavbar/providers/SideNavbarStateProvider.tsx","../src/ui/components/SideNavbar/providers/SideNavbarProvider.tsx","../src/ui/components/SideNavbar/contexts/SidebarSlotContext.tsx","../src/ui/components/SideNavbar/providers/SidebarSlotProvider.tsx","../src/ui/components/SideNavbar/contexts/SideNavbarToggleContext.tsx","../src/ui/components/SideNavbar/components/SideNavbarResizeHandle.tsx","../src/ui/components/SideNavbar/components/SideNavbarBackdrop.tsx","../src/ui/components/SideNavbar/components/SideNavbarToggle.tsx","../src/ui/components/SideNavbar/components/SideNavbarRoot.tsx","../src/ui/components/SideNavbar/contexts/NavbarContext.tsx","../src/ui/components/SideNavbar/components/Navbar/NavbarToggle.tsx","../src/ui/components/SideNavbar/components/Navbar/NavbarItem.tsx","../src/ui/components/SideNavbar/components/Navbar/NavbarSeparator.tsx","../src/ui/components/SideNavbar/components/Navbar/NavbarGroup.tsx","../src/ui/components/SideNavbar/components/Navbar/Navbar.tsx","../src/ui/components/SideNavbar/contexts/SidebarContext.tsx","../src/ui/components/SideNavbar/components/Sidebar/SidebarHeader.tsx","../src/ui/components/SideNavbar/components/Sidebar/SidebarContent.tsx","../src/ui/components/SideNavbar/components/Sidebar/SidebarFooter.tsx","../src/ui/components/SideNavbar/components/Sidebar/SidebarGroup.tsx","../src/ui/components/SideNavbar/components/Sidebar/SidebarSlot.tsx","../src/ui/components/SideNavbar/components/Sidebar/SidebarSlotContent.tsx","../src/ui/components/SideNavbar/components/Sidebar/Sidebar.tsx","../src/ui/components/SideNavbar/SideNavbar.tsx","../src/ui/components/SideNavbar/hooks/useGroupState.ts","../src/ui/components/SideNavbar/hooks/useSideNavbarNavigation.ts","../src/ui/components/SideNavbar/hooks/useSideNavbarContent.ts","../src/ui/components/SideNavbar/hooks/useSideNavbar.ts","../src/ui/components/Dialog/DialogTrigger.tsx","../src/ui/components/Dialog/DialogContent.tsx","../src/ui/components/Dialog/DialogHeader.tsx","../src/ui/components/Dialog/DialogTitle.tsx","../src/ui/components/Dialog/DialogDescription.tsx","../src/ui/components/Dialog/DialogFooter.tsx","../src/ui/components/Dialog/DialogClose.tsx","../src/ui/components/Dialog/Dialog.tsx","../src/ui/components/Dialog/AlertDialog.tsx","../src/ui/components/Toast/Toast.tsx","../src/ui/components/Toast/ToastContainer.tsx","../src/ui/components/Toast/useToast.ts","../src/ui/components/Stepper/Stepper.tsx","../src/ui/components/Timeline/Timeline.tsx","../src/ui/components/CommandPalette/CommandPalette.tsx","../src/ui/components/DataGrid/DataGrid.tsx","../src/ui/components/DataTablePattern/DataTablePattern.tsx","../src/ui/components/FormWizardPattern/FormWizardPattern.tsx","../src/ui/components/SearchAndFilterPattern/SearchAndFilterPattern.tsx","../src/ui/components/DashboardLayout/DashboardLayout.tsx"],"sourcesContent":["function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","/**\n * Concatenates two arrays faster than the array spread operator.\n */\nconst concatArrays = (array1, array2) => {\n // Pre-allocate for better V8 optimization\n const combinedArray = new Array(array1.length + array2.length);\n for (let i = 0; i < array1.length; i++) {\n combinedArray[i] = array1[i];\n }\n for (let i = 0; i < array2.length; i++) {\n combinedArray[array1.length + i] = array2[i];\n }\n return combinedArray;\n};\n\n// Factory function ensures consistent object shapes\nconst createClassValidatorObject = (classGroupId, validator) => ({\n classGroupId,\n validator\n});\n// Factory ensures consistent ClassPartObject shape\nconst createClassPartObject = (nextPart = new Map(), validators = null, classGroupId) => ({\n nextPart,\n validators,\n classGroupId\n});\nconst CLASS_PART_SEPARATOR = '-';\nconst EMPTY_CONFLICTS = [];\n// I use two dots here because one dot is used as prefix for class groups in plugins\nconst ARBITRARY_PROPERTY_PREFIX = 'arbitrary..';\nconst createClassGroupUtils = config => {\n const classMap = createClassMap(config);\n const {\n conflictingClassGroups,\n conflictingClassGroupModifiers\n } = config;\n const getClassGroupId = className => {\n if (className.startsWith('[') && className.endsWith(']')) {\n return getGroupIdForArbitraryProperty(className);\n }\n const classParts = className.split(CLASS_PART_SEPARATOR);\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and skip it.\n const startIndex = classParts[0] === '' && classParts.length > 1 ? 1 : 0;\n return getGroupRecursive(classParts, startIndex, classMap);\n };\n const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {\n if (hasPostfixModifier) {\n const modifierConflicts = conflictingClassGroupModifiers[classGroupId];\n const baseConflicts = conflictingClassGroups[classGroupId];\n if (modifierConflicts) {\n if (baseConflicts) {\n // Merge base conflicts with modifier conflicts\n return concatArrays(baseConflicts, modifierConflicts);\n }\n // Only modifier conflicts\n return modifierConflicts;\n }\n // Fall back to without postfix if no modifier conflicts\n return baseConflicts || EMPTY_CONFLICTS;\n }\n return conflictingClassGroups[classGroupId] || EMPTY_CONFLICTS;\n };\n return {\n getClassGroupId,\n getConflictingClassGroupIds\n };\n};\nconst getGroupRecursive = (classParts, startIndex, classPartObject) => {\n const classPathsLength = classParts.length - startIndex;\n if (classPathsLength === 0) {\n return classPartObject.classGroupId;\n }\n const currentClassPart = classParts[startIndex];\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);\n if (nextClassPartObject) {\n const result = getGroupRecursive(classParts, startIndex + 1, nextClassPartObject);\n if (result) return result;\n }\n const validators = classPartObject.validators;\n if (validators === null) {\n return undefined;\n }\n // Build classRest string efficiently by joining from startIndex onwards\n const classRest = startIndex === 0 ? classParts.join(CLASS_PART_SEPARATOR) : classParts.slice(startIndex).join(CLASS_PART_SEPARATOR);\n const validatorsLength = validators.length;\n for (let i = 0; i < validatorsLength; i++) {\n const validatorObj = validators[i];\n if (validatorObj.validator(classRest)) {\n return validatorObj.classGroupId;\n }\n }\n return undefined;\n};\n/**\n * Get the class group ID for an arbitrary property.\n *\n * @param className - The class name to get the group ID for. Is expected to be string starting with `[` and ending with `]`.\n */\nconst getGroupIdForArbitraryProperty = className => className.slice(1, -1).indexOf(':') === -1 ? undefined : (() => {\n const content = className.slice(1, -1);\n const colonIndex = content.indexOf(':');\n const property = content.slice(0, colonIndex);\n return property ? ARBITRARY_PROPERTY_PREFIX + property : undefined;\n})();\n/**\n * Exported for testing only\n */\nconst createClassMap = config => {\n const {\n theme,\n classGroups\n } = config;\n return processClassGroups(classGroups, theme);\n};\n// Split into separate functions to maintain monomorphic call sites\nconst processClassGroups = (classGroups, theme) => {\n const classMap = createClassPartObject();\n for (const classGroupId in classGroups) {\n const group = classGroups[classGroupId];\n processClassesRecursively(group, classMap, classGroupId, theme);\n }\n return classMap;\n};\nconst processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {\n const len = classGroup.length;\n for (let i = 0; i < len; i++) {\n const classDefinition = classGroup[i];\n processClassDefinition(classDefinition, classPartObject, classGroupId, theme);\n }\n};\n// Split into separate functions for each type to maintain monomorphic call sites\nconst processClassDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n if (typeof classDefinition === 'string') {\n processStringDefinition(classDefinition, classPartObject, classGroupId);\n return;\n }\n if (typeof classDefinition === 'function') {\n processFunctionDefinition(classDefinition, classPartObject, classGroupId, theme);\n return;\n }\n processObjectDefinition(classDefinition, classPartObject, classGroupId, theme);\n};\nconst processStringDefinition = (classDefinition, classPartObject, classGroupId) => {\n const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);\n classPartObjectToEdit.classGroupId = classGroupId;\n};\nconst processFunctionDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);\n return;\n }\n if (classPartObject.validators === null) {\n classPartObject.validators = [];\n }\n classPartObject.validators.push(createClassValidatorObject(classGroupId, classDefinition));\n};\nconst processObjectDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n const entries = Object.entries(classDefinition);\n const len = entries.length;\n for (let i = 0; i < len; i++) {\n const [key, value] = entries[i];\n processClassesRecursively(value, getPart(classPartObject, key), classGroupId, theme);\n }\n};\nconst getPart = (classPartObject, path) => {\n let current = classPartObject;\n const parts = path.split(CLASS_PART_SEPARATOR);\n const len = parts.length;\n for (let i = 0; i < len; i++) {\n const part = parts[i];\n let next = current.nextPart.get(part);\n if (!next) {\n next = createClassPartObject();\n current.nextPart.set(part, next);\n }\n current = next;\n }\n return current;\n};\n// Type guard maintains monomorphic check\nconst isThemeGetter = func => 'isThemeGetter' in func && func.isThemeGetter === true;\n\n// LRU cache implementation using plain objects for simplicity\nconst createLruCache = maxCacheSize => {\n if (maxCacheSize < 1) {\n return {\n get: () => undefined,\n set: () => {}\n };\n }\n let cacheSize = 0;\n let cache = Object.create(null);\n let previousCache = Object.create(null);\n const update = (key, value) => {\n cache[key] = value;\n cacheSize++;\n if (cacheSize > maxCacheSize) {\n cacheSize = 0;\n previousCache = cache;\n cache = Object.create(null);\n }\n };\n return {\n get(key) {\n let value = cache[key];\n if (value !== undefined) {\n return value;\n }\n if ((value = previousCache[key]) !== undefined) {\n update(key, value);\n return value;\n }\n },\n set(key, value) {\n if (key in cache) {\n cache[key] = value;\n } else {\n update(key, value);\n }\n }\n };\n};\nconst IMPORTANT_MODIFIER = '!';\nconst MODIFIER_SEPARATOR = ':';\nconst EMPTY_MODIFIERS = [];\n// Pre-allocated result object shape for consistency\nconst createResultObject = (modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition, isExternal) => ({\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition,\n isExternal\n});\nconst createParseClassName = config => {\n const {\n prefix,\n experimentalParseClassName\n } = config;\n /**\n * Parse class name into parts.\n *\n * Inspired by `splitAtTopLevelOnly` used in Tailwind CSS\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n */\n let parseClassName = className => {\n // Use simple array with push for better performance\n const modifiers = [];\n let bracketDepth = 0;\n let parenDepth = 0;\n let modifierStart = 0;\n let postfixModifierPosition;\n const len = className.length;\n for (let index = 0; index < len; index++) {\n const currentCharacter = className[index];\n if (bracketDepth === 0 && parenDepth === 0) {\n if (currentCharacter === MODIFIER_SEPARATOR) {\n modifiers.push(className.slice(modifierStart, index));\n modifierStart = index + 1;\n continue;\n }\n if (currentCharacter === '/') {\n postfixModifierPosition = index;\n continue;\n }\n }\n if (currentCharacter === '[') bracketDepth++;else if (currentCharacter === ']') bracketDepth--;else if (currentCharacter === '(') parenDepth++;else if (currentCharacter === ')') parenDepth--;\n }\n const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.slice(modifierStart);\n // Inline important modifier check\n let baseClassName = baseClassNameWithImportantModifier;\n let hasImportantModifier = false;\n if (baseClassNameWithImportantModifier.endsWith(IMPORTANT_MODIFIER)) {\n baseClassName = baseClassNameWithImportantModifier.slice(0, -1);\n hasImportantModifier = true;\n } else if (\n /**\n * In Tailwind CSS v3 the important modifier was at the start of the base class name. This is still supported for legacy reasons.\n * @see https://github.com/dcastil/tailwind-merge/issues/513#issuecomment-2614029864\n */\n baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER)) {\n baseClassName = baseClassNameWithImportantModifier.slice(1);\n hasImportantModifier = true;\n }\n const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;\n return createResultObject(modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition);\n };\n if (prefix) {\n const fullPrefix = prefix + MODIFIER_SEPARATOR;\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => className.startsWith(fullPrefix) ? parseClassNameOriginal(className.slice(fullPrefix.length)) : createResultObject(EMPTY_MODIFIERS, false, className, undefined, true);\n }\n if (experimentalParseClassName) {\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => experimentalParseClassName({\n className,\n parseClassName: parseClassNameOriginal\n });\n }\n return parseClassName;\n};\n\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nconst createSortModifiers = config => {\n // Pre-compute weights for all known modifiers for O(1) comparison\n const modifierWeights = new Map();\n // Assign weights to sensitive modifiers (highest priority, but preserve order)\n config.orderSensitiveModifiers.forEach((mod, index) => {\n modifierWeights.set(mod, 1000000 + index); // High weights for sensitive mods\n });\n return modifiers => {\n const result = [];\n let currentSegment = [];\n // Process modifiers in one pass\n for (let i = 0; i < modifiers.length; i++) {\n const modifier = modifiers[i];\n // Check if modifier is sensitive (starts with '[' or in orderSensitiveModifiers)\n const isArbitrary = modifier[0] === '[';\n const isOrderSensitive = modifierWeights.has(modifier);\n if (isArbitrary || isOrderSensitive) {\n // Sort and flush current segment alphabetically\n if (currentSegment.length > 0) {\n currentSegment.sort();\n result.push(...currentSegment);\n currentSegment = [];\n }\n result.push(modifier);\n } else {\n // Regular modifier - add to current segment for batch sorting\n currentSegment.push(modifier);\n }\n }\n // Sort and add any remaining segment items\n if (currentSegment.length > 0) {\n currentSegment.sort();\n result.push(...currentSegment);\n }\n return result;\n };\n};\nconst createConfigUtils = config => ({\n cache: createLruCache(config.cacheSize),\n parseClassName: createParseClassName(config),\n sortModifiers: createSortModifiers(config),\n ...createClassGroupUtils(config)\n});\nconst SPLIT_CLASSES_REGEX = /\\s+/;\nconst mergeClassList = (classList, configUtils) => {\n const {\n parseClassName,\n getClassGroupId,\n getConflictingClassGroupIds,\n sortModifiers\n } = configUtils;\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantModifiers}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example 'md:!pr'\n */\n const classGroupsInConflict = [];\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);\n let result = '';\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index];\n const {\n isExternal,\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n } = parseClassName(originalClassName);\n if (isExternal) {\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n let hasPostfixModifier = !!maybePostfixModifierPosition;\n let classGroupId = getClassGroupId(hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName);\n if (!classGroupId) {\n if (!hasPostfixModifier) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n classGroupId = getClassGroupId(baseClassName);\n if (!classGroupId) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n hasPostfixModifier = false;\n }\n // Fast path: skip sorting for empty or single modifier\n const variantModifier = modifiers.length === 0 ? '' : modifiers.length === 1 ? modifiers[0] : sortModifiers(modifiers).join(':');\n const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;\n const classId = modifierId + classGroupId;\n if (classGroupsInConflict.indexOf(classId) > -1) {\n // Tailwind class omitted due to conflict\n continue;\n }\n classGroupsInConflict.push(classId);\n const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);\n for (let i = 0; i < conflictGroups.length; ++i) {\n const group = conflictGroups[i];\n classGroupsInConflict.push(modifierId + group);\n }\n // Tailwind class not in conflict\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n }\n return result;\n};\n\n/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\nconst twJoin = (...classLists) => {\n let index = 0;\n let argument;\n let resolvedValue;\n let string = '';\n while (index < classLists.length) {\n if (argument = classLists[index++]) {\n if (resolvedValue = toValue(argument)) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nconst toValue = mix => {\n // Fast path for strings\n if (typeof mix === 'string') {\n return mix;\n }\n let resolvedValue;\n let string = '';\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if (resolvedValue = toValue(mix[k])) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nconst createTailwindMerge = (createConfigFirst, ...createConfigRest) => {\n let configUtils;\n let cacheGet;\n let cacheSet;\n let functionToCall;\n const initTailwindMerge = classList => {\n const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());\n configUtils = createConfigUtils(config);\n cacheGet = configUtils.cache.get;\n cacheSet = configUtils.cache.set;\n functionToCall = tailwindMerge;\n return tailwindMerge(classList);\n };\n const tailwindMerge = classList => {\n const cachedResult = cacheGet(classList);\n if (cachedResult) {\n return cachedResult;\n }\n const result = mergeClassList(classList, configUtils);\n cacheSet(classList, result);\n return result;\n };\n functionToCall = initTailwindMerge;\n return (...args) => functionToCall(twJoin(...args));\n};\nconst fallbackThemeArr = [];\nconst fromTheme = key => {\n const themeGetter = theme => theme[key] || fallbackThemeArr;\n themeGetter.isThemeGetter = true;\n return themeGetter;\n};\nconst arbitraryValueRegex = /^\\[(?:(\\w[\\w-]*):)?(.+)\\]$/i;\nconst arbitraryVariableRegex = /^\\((?:(\\w[\\w-]*):)?(.+)\\)$/i;\nconst fractionRegex = /^\\d+\\/\\d+$/;\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/;\nconst lengthUnitRegex = /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/;\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\\(.+\\)$/;\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/;\nconst imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/;\nconst isFraction = value => fractionRegex.test(value);\nconst isNumber = value => !!value && !Number.isNaN(Number(value));\nconst isInteger = value => !!value && Number.isInteger(Number(value));\nconst isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));\nconst isTshirtSize = value => tshirtUnitRegex.test(value);\nconst isAny = () => true;\nconst isLengthOnly = value =>\n// `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n// For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n// I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\nlengthUnitRegex.test(value) && !colorFunctionRegex.test(value);\nconst isNever = () => false;\nconst isShadow = value => shadowRegex.test(value);\nconst isImage = value => imageRegex.test(value);\nconst isAnyNonArbitrary = value => !isArbitraryValue(value) && !isArbitraryVariable(value);\nconst isArbitrarySize = value => getIsArbitraryValue(value, isLabelSize, isNever);\nconst isArbitraryValue = value => arbitraryValueRegex.test(value);\nconst isArbitraryLength = value => getIsArbitraryValue(value, isLabelLength, isLengthOnly);\nconst isArbitraryNumber = value => getIsArbitraryValue(value, isLabelNumber, isNumber);\nconst isArbitraryPosition = value => getIsArbitraryValue(value, isLabelPosition, isNever);\nconst isArbitraryImage = value => getIsArbitraryValue(value, isLabelImage, isImage);\nconst isArbitraryShadow = value => getIsArbitraryValue(value, isLabelShadow, isShadow);\nconst isArbitraryVariable = value => arbitraryVariableRegex.test(value);\nconst isArbitraryVariableLength = value => getIsArbitraryVariable(value, isLabelLength);\nconst isArbitraryVariableFamilyName = value => getIsArbitraryVariable(value, isLabelFamilyName);\nconst isArbitraryVariablePosition = value => getIsArbitraryVariable(value, isLabelPosition);\nconst isArbitraryVariableSize = value => getIsArbitraryVariable(value, isLabelSize);\nconst isArbitraryVariableImage = value => getIsArbitraryVariable(value, isLabelImage);\nconst isArbitraryVariableShadow = value => getIsArbitraryVariable(value, isLabelShadow, true);\n// Helpers\nconst getIsArbitraryValue = (value, testLabel, testValue) => {\n const result = arbitraryValueRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return testValue(result[2]);\n }\n return false;\n};\nconst getIsArbitraryVariable = (value, testLabel, shouldMatchNoLabel = false) => {\n const result = arbitraryVariableRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return shouldMatchNoLabel;\n }\n return false;\n};\n// Labels\nconst isLabelPosition = label => label === 'position' || label === 'percentage';\nconst isLabelImage = label => label === 'image' || label === 'url';\nconst isLabelSize = label => label === 'length' || label === 'size' || label === 'bg-size';\nconst isLabelLength = label => label === 'length';\nconst isLabelNumber = label => label === 'number';\nconst isLabelFamilyName = label => label === 'family-name';\nconst isLabelShadow = label => label === 'shadow';\nconst validators = /*#__PURE__*/Object.defineProperty({\n __proto__: null,\n isAny,\n isAnyNonArbitrary,\n isArbitraryImage,\n isArbitraryLength,\n isArbitraryNumber,\n isArbitraryPosition,\n isArbitraryShadow,\n isArbitrarySize,\n isArbitraryValue,\n isArbitraryVariable,\n isArbitraryVariableFamilyName,\n isArbitraryVariableImage,\n isArbitraryVariableLength,\n isArbitraryVariablePosition,\n isArbitraryVariableShadow,\n isArbitraryVariableSize,\n isFraction,\n isInteger,\n isNumber,\n isPercent,\n isTshirtSize\n}, Symbol.toStringTag, {\n value: 'Module'\n});\nconst getDefaultConfig = () => {\n /**\n * Theme getters for theme variable namespaces\n * @see https://tailwindcss.com/docs/theme#theme-variable-namespaces\n */\n /***/\n const themeColor = fromTheme('color');\n const themeFont = fromTheme('font');\n const themeText = fromTheme('text');\n const themeFontWeight = fromTheme('font-weight');\n const themeTracking = fromTheme('tracking');\n const themeLeading = fromTheme('leading');\n const themeBreakpoint = fromTheme('breakpoint');\n const themeContainer = fromTheme('container');\n const themeSpacing = fromTheme('spacing');\n const themeRadius = fromTheme('radius');\n const themeShadow = fromTheme('shadow');\n const themeInsetShadow = fromTheme('inset-shadow');\n const themeTextShadow = fromTheme('text-shadow');\n const themeDropShadow = fromTheme('drop-shadow');\n const themeBlur = fromTheme('blur');\n const themePerspective = fromTheme('perspective');\n const themeAspect = fromTheme('aspect');\n const themeEase = fromTheme('ease');\n const themeAnimate = fromTheme('animate');\n /**\n * Helpers to avoid repeating the same scales\n *\n * We use functions that create a new array every time they're called instead of static arrays.\n * This ensures that users who modify any scale by mutating the array (e.g. with `array.push(element)`) don't accidentally mutate arrays in other parts of the config.\n */\n /***/\n const scaleBreak = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];\n const scalePosition = () => ['center', 'top', 'bottom', 'left', 'right', 'top-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-top', 'top-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-top', 'bottom-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-bottom', 'bottom-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-bottom'];\n const scalePositionWithArbitrary = () => [...scalePosition(), isArbitraryVariable, isArbitraryValue];\n const scaleOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];\n const scaleOverscroll = () => ['auto', 'contain', 'none'];\n const scaleUnambiguousSpacing = () => [isArbitraryVariable, isArbitraryValue, themeSpacing];\n const scaleInset = () => [isFraction, 'full', 'auto', ...scaleUnambiguousSpacing()];\n const scaleGridTemplateColsRows = () => [isInteger, 'none', 'subgrid', isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartAndEnd = () => ['auto', {\n span: ['full', isInteger, isArbitraryVariable, isArbitraryValue]\n }, isInteger, isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartOrEnd = () => [isInteger, 'auto', isArbitraryVariable, isArbitraryValue];\n const scaleGridAutoColsRows = () => ['auto', 'min', 'max', 'fr', isArbitraryVariable, isArbitraryValue];\n const scaleAlignPrimaryAxis = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch', 'baseline', 'center-safe', 'end-safe'];\n const scaleAlignSecondaryAxis = () => ['start', 'end', 'center', 'stretch', 'center-safe', 'end-safe'];\n const scaleMargin = () => ['auto', ...scaleUnambiguousSpacing()];\n const scaleSizing = () => [isFraction, 'auto', 'full', 'dvw', 'dvh', 'lvw', 'lvh', 'svw', 'svh', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleColor = () => [themeColor, isArbitraryVariable, isArbitraryValue];\n const scaleBgPosition = () => [...scalePosition(), isArbitraryVariablePosition, isArbitraryPosition, {\n position: [isArbitraryVariable, isArbitraryValue]\n }];\n const scaleBgRepeat = () => ['no-repeat', {\n repeat: ['', 'x', 'y', 'space', 'round']\n }];\n const scaleBgSize = () => ['auto', 'cover', 'contain', isArbitraryVariableSize, isArbitrarySize, {\n size: [isArbitraryVariable, isArbitraryValue]\n }];\n const scaleGradientStopPosition = () => [isPercent, isArbitraryVariableLength, isArbitraryLength];\n const scaleRadius = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', 'full', themeRadius, isArbitraryVariable, isArbitraryValue];\n const scaleBorderWidth = () => ['', isNumber, isArbitraryVariableLength, isArbitraryLength];\n const scaleLineStyle = () => ['solid', 'dashed', 'dotted', 'double'];\n const scaleBlendMode = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];\n const scaleMaskImagePosition = () => [isNumber, isPercent, isArbitraryVariablePosition, isArbitraryPosition];\n const scaleBlur = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeBlur, isArbitraryVariable, isArbitraryValue];\n const scaleRotate = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleScale = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleSkew = () => [isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleTranslate = () => [isFraction, 'full', ...scaleUnambiguousSpacing()];\n return {\n cacheSize: 500,\n theme: {\n animate: ['spin', 'ping', 'pulse', 'bounce'],\n aspect: ['video'],\n blur: [isTshirtSize],\n breakpoint: [isTshirtSize],\n color: [isAny],\n container: [isTshirtSize],\n 'drop-shadow': [isTshirtSize],\n ease: ['in', 'out', 'in-out'],\n font: [isAnyNonArbitrary],\n 'font-weight': ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black'],\n 'inset-shadow': [isTshirtSize],\n leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose'],\n perspective: ['dramatic', 'near', 'normal', 'midrange', 'distant', 'none'],\n radius: [isTshirtSize],\n shadow: [isTshirtSize],\n spacing: ['px', isNumber],\n text: [isTshirtSize],\n 'text-shadow': [isTshirtSize],\n tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest']\n },\n classGroups: {\n // --------------\n // --- Layout ---\n // --------------\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [{\n aspect: ['auto', 'square', isFraction, isArbitraryValue, isArbitraryVariable, themeAspect]\n }],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n * @deprecated since Tailwind CSS v4.0.0\n */\n container: ['container'],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [{\n columns: [isNumber, isArbitraryValue, isArbitraryVariable, themeContainer]\n }],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{\n 'break-after': scaleBreak()\n }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{\n 'break-before': scaleBreak()\n }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{\n 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']\n }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{\n 'box-decoration': ['slice', 'clone']\n }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{\n box: ['border', 'content']\n }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: ['block', 'inline-block', 'inline', 'flex', 'inline-flex', 'table', 'inline-table', 'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row-group', 'table-row', 'flow-root', 'grid', 'inline-grid', 'contents', 'list-item', 'hidden'],\n /**\n * Screen Reader Only\n * @see https://tailwindcss.com/docs/display#screen-reader-only\n */\n sr: ['sr-only', 'not-sr-only'],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{\n float: ['right', 'left', 'none', 'start', 'end']\n }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{\n clear: ['left', 'right', 'both', 'none', 'start', 'end']\n }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: ['isolate', 'isolation-auto'],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n 'object-fit': [{\n object: ['contain', 'cover', 'fill', 'none', 'scale-down']\n }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{\n object: scalePositionWithArbitrary()\n }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{\n overflow: scaleOverflow()\n }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{\n 'overflow-x': scaleOverflow()\n }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{\n 'overflow-y': scaleOverflow()\n }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{\n overscroll: scaleOverscroll()\n }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{\n 'overscroll-x': scaleOverscroll()\n }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{\n 'overscroll-y': scaleOverscroll()\n }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n /**\n * Top / Right / Bottom / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{\n inset: scaleInset()\n }],\n /**\n * Right / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{\n 'inset-x': scaleInset()\n }],\n /**\n * Top / Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{\n 'inset-y': scaleInset()\n }],\n /**\n * Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n start: [{\n start: scaleInset()\n }],\n /**\n * End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n end: [{\n end: scaleInset()\n }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{\n top: scaleInset()\n }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{\n right: scaleInset()\n }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{\n bottom: scaleInset()\n }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{\n left: scaleInset()\n }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: ['visible', 'invisible', 'collapse'],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{\n z: [isInteger, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------------\n // --- Flexbox and Grid ---\n // ------------------------\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [{\n basis: [isFraction, 'full', 'auto', themeContainer, ...scaleUnambiguousSpacing()]\n }],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{\n flex: ['row', 'row-reverse', 'col', 'col-reverse']\n }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{\n flex: ['nowrap', 'wrap', 'wrap-reverse']\n }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{\n flex: [isNumber, isFraction, 'auto', 'initial', 'none', isArbitraryValue]\n }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{\n grow: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{\n shrink: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [{\n order: [isInteger, 'first', 'last', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{\n 'grid-cols': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [{\n col: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{\n 'col-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{\n 'col-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{\n 'grid-rows': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [{\n row: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{\n 'row-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{\n 'row-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{\n 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']\n }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{\n 'auto-cols': scaleGridAutoColsRows()\n }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{\n 'auto-rows': scaleGridAutoColsRows()\n }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{\n gap: scaleUnambiguousSpacing()\n }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{\n 'gap-x': scaleUnambiguousSpacing()\n }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{\n 'gap-y': scaleUnambiguousSpacing()\n }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{\n justify: [...scaleAlignPrimaryAxis(), 'normal']\n }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{\n 'justify-items': [...scaleAlignSecondaryAxis(), 'normal']\n }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{\n 'justify-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{\n content: ['normal', ...scaleAlignPrimaryAxis()]\n }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{\n items: [...scaleAlignSecondaryAxis(), {\n baseline: ['', 'last']\n }]\n }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [{\n self: ['auto', ...scaleAlignSecondaryAxis(), {\n baseline: ['', 'last']\n }]\n }],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{\n 'place-content': scaleAlignPrimaryAxis()\n }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{\n 'place-items': [...scaleAlignSecondaryAxis(), 'baseline']\n }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{\n 'place-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{\n p: scaleUnambiguousSpacing()\n }],\n /**\n * Padding X\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{\n px: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Y\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{\n py: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{\n ps: scaleUnambiguousSpacing()\n }],\n /**\n * Padding End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{\n pe: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{\n pt: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{\n pr: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{\n pb: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{\n pl: scaleUnambiguousSpacing()\n }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{\n m: scaleMargin()\n }],\n /**\n * Margin X\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{\n mx: scaleMargin()\n }],\n /**\n * Margin Y\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{\n my: scaleMargin()\n }],\n /**\n * Margin Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{\n ms: scaleMargin()\n }],\n /**\n * Margin End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{\n me: scaleMargin()\n }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{\n mt: scaleMargin()\n }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{\n mr: scaleMargin()\n }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{\n mb: scaleMargin()\n }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{\n ml: scaleMargin()\n }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x': [{\n 'space-x': scaleUnambiguousSpacing()\n }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y': [{\n 'space-y': scaleUnambiguousSpacing()\n }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y-reverse': ['space-y-reverse'],\n // --------------\n // --- Sizing ---\n // --------------\n /**\n * Size\n * @see https://tailwindcss.com/docs/width#setting-both-width-and-height\n */\n size: [{\n size: scaleSizing()\n }],\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [{\n w: [themeContainer, 'screen', ...scaleSizing()]\n }],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [{\n 'min-w': [themeContainer, 'screen', /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'none', ...scaleSizing()]\n }],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [{\n 'max-w': [themeContainer, 'screen', 'none', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'prose', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n {\n screen: [themeBreakpoint]\n }, ...scaleSizing()]\n }],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [{\n h: ['screen', 'lh', ...scaleSizing()]\n }],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [{\n 'min-h': ['screen', 'lh', 'none', ...scaleSizing()]\n }],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [{\n 'max-h': ['screen', 'lh', ...scaleSizing()]\n }],\n // ------------------\n // --- Typography ---\n // ------------------\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [{\n text: ['base', themeText, isArbitraryVariableLength, isArbitraryLength]\n }],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n 'font-style': ['italic', 'not-italic'],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n 'font-weight': [{\n font: [themeFontWeight, isArbitraryVariable, isArbitraryNumber]\n }],\n /**\n * Font Stretch\n * @see https://tailwindcss.com/docs/font-stretch\n */\n 'font-stretch': [{\n 'font-stretch': ['ultra-condensed', 'extra-condensed', 'condensed', 'semi-condensed', 'normal', 'semi-expanded', 'expanded', 'extra-expanded', 'ultra-expanded', isPercent, isArbitraryValue]\n }],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [{\n font: [isArbitraryVariableFamilyName, isArbitraryValue, themeFont]\n }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-normal': ['normal-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-ordinal': ['ordinal'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-slashed-zero': ['slashed-zero'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [{\n tracking: [themeTracking, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [{\n 'line-clamp': [isNumber, 'none', isArbitraryVariable, isArbitraryNumber]\n }],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [{\n leading: [/** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n themeLeading, ...scaleUnambiguousSpacing()]\n }],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{\n 'list-image': ['none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{\n list: ['inside', 'outside']\n }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [{\n list: ['disc', 'decimal', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{\n text: ['left', 'center', 'right', 'justify', 'start', 'end']\n }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://v3.tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{\n placeholder: scaleColor()\n }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{\n text: scaleColor()\n }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n 'text-decoration-style': [{\n decoration: [...scaleLineStyle(), 'wavy']\n }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [{\n decoration: [isNumber, 'from-font', 'auto', isArbitraryVariable, isArbitraryLength]\n }],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{\n decoration: scaleColor()\n }],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [{\n 'underline-offset': [isNumber, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n /**\n * Text Wrap\n * @see https://tailwindcss.com/docs/text-wrap\n */\n 'text-wrap': [{\n text: ['wrap', 'nowrap', 'balance', 'pretty']\n }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{\n indent: scaleUnambiguousSpacing()\n }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [{\n align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [{\n whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']\n }],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n break: [{\n break: ['normal', 'words', 'all', 'keep']\n }],\n /**\n * Overflow Wrap\n * @see https://tailwindcss.com/docs/overflow-wrap\n */\n wrap: [{\n wrap: ['break-word', 'anywhere', 'normal']\n }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{\n hyphens: ['none', 'manual', 'auto']\n }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{\n content: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // -------------------\n // --- Backgrounds ---\n // -------------------\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{\n bg: ['fixed', 'local', 'scroll']\n }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{\n 'bg-clip': ['border', 'padding', 'content', 'text']\n }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{\n 'bg-origin': ['border', 'padding', 'content']\n }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{\n bg: scaleBgPosition()\n }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{\n bg: scaleBgRepeat()\n }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{\n bg: scaleBgSize()\n }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [{\n bg: ['none', {\n linear: [{\n to: ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']\n }, isInteger, isArbitraryVariable, isArbitraryValue],\n radial: ['', isArbitraryVariable, isArbitraryValue],\n conic: [isInteger, isArbitraryVariable, isArbitraryValue]\n }, isArbitraryVariableImage, isArbitraryImage]\n }],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{\n bg: scaleColor()\n }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{\n from: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{\n via: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{\n to: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{\n from: scaleColor()\n }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{\n via: scaleColor()\n }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{\n to: scaleColor()\n }],\n // ---------------\n // --- Borders ---\n // ---------------\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{\n rounded: scaleRadius()\n }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{\n 'rounded-s': scaleRadius()\n }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{\n 'rounded-e': scaleRadius()\n }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{\n 'rounded-t': scaleRadius()\n }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{\n 'rounded-r': scaleRadius()\n }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{\n 'rounded-b': scaleRadius()\n }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{\n 'rounded-l': scaleRadius()\n }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{\n 'rounded-ss': scaleRadius()\n }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{\n 'rounded-se': scaleRadius()\n }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{\n 'rounded-ee': scaleRadius()\n }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{\n 'rounded-es': scaleRadius()\n }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{\n 'rounded-tl': scaleRadius()\n }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{\n 'rounded-tr': scaleRadius()\n }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{\n 'rounded-br': scaleRadius()\n }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{\n 'rounded-bl': scaleRadius()\n }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{\n border: scaleBorderWidth()\n }],\n /**\n * Border Width X\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{\n 'border-x': scaleBorderWidth()\n }],\n /**\n * Border Width Y\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{\n 'border-y': scaleBorderWidth()\n }],\n /**\n * Border Width Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{\n 'border-s': scaleBorderWidth()\n }],\n /**\n * Border Width End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{\n 'border-e': scaleBorderWidth()\n }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{\n 'border-t': scaleBorderWidth()\n }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{\n 'border-r': scaleBorderWidth()\n }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{\n 'border-b': scaleBorderWidth()\n }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{\n 'border-l': scaleBorderWidth()\n }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x': [{\n 'divide-x': scaleBorderWidth()\n }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y': [{\n 'divide-y': scaleBorderWidth()\n }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{\n border: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style\n */\n 'divide-style': [{\n divide: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{\n border: scaleColor()\n }],\n /**\n * Border Color X\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{\n 'border-x': scaleColor()\n }],\n /**\n * Border Color Y\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{\n 'border-y': scaleColor()\n }],\n /**\n * Border Color S\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{\n 'border-s': scaleColor()\n }],\n /**\n * Border Color E\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{\n 'border-e': scaleColor()\n }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{\n 'border-t': scaleColor()\n }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{\n 'border-r': scaleColor()\n }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{\n 'border-b': scaleColor()\n }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{\n 'border-l': scaleColor()\n }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{\n divide: scaleColor()\n }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{\n outline: [...scaleLineStyle(), 'none', 'hidden']\n }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [{\n 'outline-offset': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [{\n outline: ['', isNumber, isArbitraryVariableLength, isArbitraryLength]\n }],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{\n outline: scaleColor()\n }],\n // ---------------\n // --- Effects ---\n // ---------------\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [{\n shadow: [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color\n */\n 'shadow-color': [{\n shadow: scaleColor()\n }],\n /**\n * Inset Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow\n */\n 'inset-shadow': [{\n 'inset-shadow': ['none', themeInsetShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Inset Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-shadow-color\n */\n 'inset-shadow-color': [{\n 'inset-shadow': scaleColor()\n }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring\n */\n 'ring-w': [{\n ring: scaleBorderWidth()\n }],\n /**\n * Ring Width Inset\n * @see https://v3.tailwindcss.com/docs/ring-width#inset-rings\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-ring-color\n */\n 'ring-color': [{\n ring: scaleColor()\n }],\n /**\n * Ring Offset Width\n * @see https://v3.tailwindcss.com/docs/ring-offset-width\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-w': [{\n 'ring-offset': [isNumber, isArbitraryLength]\n }],\n /**\n * Ring Offset Color\n * @see https://v3.tailwindcss.com/docs/ring-offset-color\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-color': [{\n 'ring-offset': scaleColor()\n }],\n /**\n * Inset Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring\n */\n 'inset-ring-w': [{\n 'inset-ring': scaleBorderWidth()\n }],\n /**\n * Inset Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color\n */\n 'inset-ring-color': [{\n 'inset-ring': scaleColor()\n }],\n /**\n * Text Shadow\n * @see https://tailwindcss.com/docs/text-shadow\n */\n 'text-shadow': [{\n 'text-shadow': ['none', themeTextShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Text Shadow Color\n * @see https://tailwindcss.com/docs/text-shadow#setting-the-shadow-color\n */\n 'text-shadow-color': [{\n 'text-shadow': scaleColor()\n }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{\n opacity: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{\n 'mix-blend': [...scaleBlendMode(), 'plus-darker', 'plus-lighter']\n }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{\n 'bg-blend': scaleBlendMode()\n }],\n /**\n * Mask Clip\n * @see https://tailwindcss.com/docs/mask-clip\n */\n 'mask-clip': [{\n 'mask-clip': ['border', 'padding', 'content', 'fill', 'stroke', 'view']\n }, 'mask-no-clip'],\n /**\n * Mask Composite\n * @see https://tailwindcss.com/docs/mask-composite\n */\n 'mask-composite': [{\n mask: ['add', 'subtract', 'intersect', 'exclude']\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image-linear-pos': [{\n 'mask-linear': [isNumber]\n }],\n 'mask-image-linear-from-pos': [{\n 'mask-linear-from': scaleMaskImagePosition()\n }],\n 'mask-image-linear-to-pos': [{\n 'mask-linear-to': scaleMaskImagePosition()\n }],\n 'mask-image-linear-from-color': [{\n 'mask-linear-from': scaleColor()\n }],\n 'mask-image-linear-to-color': [{\n 'mask-linear-to': scaleColor()\n }],\n 'mask-image-t-from-pos': [{\n 'mask-t-from': scaleMaskImagePosition()\n }],\n 'mask-image-t-to-pos': [{\n 'mask-t-to': scaleMaskImagePosition()\n }],\n 'mask-image-t-from-color': [{\n 'mask-t-from': scaleColor()\n }],\n 'mask-image-t-to-color': [{\n 'mask-t-to': scaleColor()\n }],\n 'mask-image-r-from-pos': [{\n 'mask-r-from': scaleMaskImagePosition()\n }],\n 'mask-image-r-to-pos': [{\n 'mask-r-to': scaleMaskImagePosition()\n }],\n 'mask-image-r-from-color': [{\n 'mask-r-from': scaleColor()\n }],\n 'mask-image-r-to-color': [{\n 'mask-r-to': scaleColor()\n }],\n 'mask-image-b-from-pos': [{\n 'mask-b-from': scaleMaskImagePosition()\n }],\n 'mask-image-b-to-pos': [{\n 'mask-b-to': scaleMaskImagePosition()\n }],\n 'mask-image-b-from-color': [{\n 'mask-b-from': scaleColor()\n }],\n 'mask-image-b-to-color': [{\n 'mask-b-to': scaleColor()\n }],\n 'mask-image-l-from-pos': [{\n 'mask-l-from': scaleMaskImagePosition()\n }],\n 'mask-image-l-to-pos': [{\n 'mask-l-to': scaleMaskImagePosition()\n }],\n 'mask-image-l-from-color': [{\n 'mask-l-from': scaleColor()\n }],\n 'mask-image-l-to-color': [{\n 'mask-l-to': scaleColor()\n }],\n 'mask-image-x-from-pos': [{\n 'mask-x-from': scaleMaskImagePosition()\n }],\n 'mask-image-x-to-pos': [{\n 'mask-x-to': scaleMaskImagePosition()\n }],\n 'mask-image-x-from-color': [{\n 'mask-x-from': scaleColor()\n }],\n 'mask-image-x-to-color': [{\n 'mask-x-to': scaleColor()\n }],\n 'mask-image-y-from-pos': [{\n 'mask-y-from': scaleMaskImagePosition()\n }],\n 'mask-image-y-to-pos': [{\n 'mask-y-to': scaleMaskImagePosition()\n }],\n 'mask-image-y-from-color': [{\n 'mask-y-from': scaleColor()\n }],\n 'mask-image-y-to-color': [{\n 'mask-y-to': scaleColor()\n }],\n 'mask-image-radial': [{\n 'mask-radial': [isArbitraryVariable, isArbitraryValue]\n }],\n 'mask-image-radial-from-pos': [{\n 'mask-radial-from': scaleMaskImagePosition()\n }],\n 'mask-image-radial-to-pos': [{\n 'mask-radial-to': scaleMaskImagePosition()\n }],\n 'mask-image-radial-from-color': [{\n 'mask-radial-from': scaleColor()\n }],\n 'mask-image-radial-to-color': [{\n 'mask-radial-to': scaleColor()\n }],\n 'mask-image-radial-shape': [{\n 'mask-radial': ['circle', 'ellipse']\n }],\n 'mask-image-radial-size': [{\n 'mask-radial': [{\n closest: ['side', 'corner'],\n farthest: ['side', 'corner']\n }]\n }],\n 'mask-image-radial-pos': [{\n 'mask-radial-at': scalePosition()\n }],\n 'mask-image-conic-pos': [{\n 'mask-conic': [isNumber]\n }],\n 'mask-image-conic-from-pos': [{\n 'mask-conic-from': scaleMaskImagePosition()\n }],\n 'mask-image-conic-to-pos': [{\n 'mask-conic-to': scaleMaskImagePosition()\n }],\n 'mask-image-conic-from-color': [{\n 'mask-conic-from': scaleColor()\n }],\n 'mask-image-conic-to-color': [{\n 'mask-conic-to': scaleColor()\n }],\n /**\n * Mask Mode\n * @see https://tailwindcss.com/docs/mask-mode\n */\n 'mask-mode': [{\n mask: ['alpha', 'luminance', 'match']\n }],\n /**\n * Mask Origin\n * @see https://tailwindcss.com/docs/mask-origin\n */\n 'mask-origin': [{\n 'mask-origin': ['border', 'padding', 'content', 'fill', 'stroke', 'view']\n }],\n /**\n * Mask Position\n * @see https://tailwindcss.com/docs/mask-position\n */\n 'mask-position': [{\n mask: scaleBgPosition()\n }],\n /**\n * Mask Repeat\n * @see https://tailwindcss.com/docs/mask-repeat\n */\n 'mask-repeat': [{\n mask: scaleBgRepeat()\n }],\n /**\n * Mask Size\n * @see https://tailwindcss.com/docs/mask-size\n */\n 'mask-size': [{\n mask: scaleBgSize()\n }],\n /**\n * Mask Type\n * @see https://tailwindcss.com/docs/mask-type\n */\n 'mask-type': [{\n 'mask-type': ['alpha', 'luminance']\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image': [{\n mask: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // ---------------\n // --- Filters ---\n // ---------------\n /**\n * Filter\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [{\n filter: [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{\n blur: scaleBlur()\n }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{\n brightness: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{\n contrast: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [{\n 'drop-shadow': [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeDropShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Drop Shadow Color\n * @see https://tailwindcss.com/docs/filter-drop-shadow#setting-the-shadow-color\n */\n 'drop-shadow-color': [{\n 'drop-shadow': scaleColor()\n }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{\n grayscale: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{\n 'hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{\n invert: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{\n saturate: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{\n sepia: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Filter\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [{\n 'backdrop-filter': [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{\n 'backdrop-blur': scaleBlur()\n }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [{\n 'backdrop-brightness': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [{\n 'backdrop-contrast': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [{\n 'backdrop-grayscale': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [{\n 'backdrop-hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [{\n 'backdrop-invert': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [{\n 'backdrop-opacity': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [{\n 'backdrop-saturate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [{\n 'backdrop-sepia': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n // --------------\n // --- Tables ---\n // --------------\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{\n border: ['collapse', 'separate']\n }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{\n 'border-spacing': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{\n 'border-spacing-x': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{\n 'border-spacing-y': scaleUnambiguousSpacing()\n }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{\n table: ['auto', 'fixed']\n }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{\n caption: ['top', 'bottom']\n }],\n // ---------------------------------\n // --- Transitions and Animation ---\n // ---------------------------------\n /**\n * Transition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [{\n transition: ['', 'all', 'colors', 'opacity', 'shadow', 'transform', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Behavior\n * @see https://tailwindcss.com/docs/transition-behavior\n */\n 'transition-behavior': [{\n transition: ['normal', 'discrete']\n }],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{\n duration: [isNumber, 'initial', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [{\n ease: ['linear', 'initial', themeEase, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{\n delay: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{\n animate: ['none', themeAnimate, isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------\n // --- Transforms ---\n // ------------------\n /**\n * Backface Visibility\n * @see https://tailwindcss.com/docs/backface-visibility\n */\n backface: [{\n backface: ['hidden', 'visible']\n }],\n /**\n * Perspective\n * @see https://tailwindcss.com/docs/perspective\n */\n perspective: [{\n perspective: [themePerspective, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Perspective Origin\n * @see https://tailwindcss.com/docs/perspective-origin\n */\n 'perspective-origin': [{\n 'perspective-origin': scalePositionWithArbitrary()\n }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{\n rotate: scaleRotate()\n }],\n /**\n * Rotate X\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-x': [{\n 'rotate-x': scaleRotate()\n }],\n /**\n * Rotate Y\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-y': [{\n 'rotate-y': scaleRotate()\n }],\n /**\n * Rotate Z\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-z': [{\n 'rotate-z': scaleRotate()\n }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{\n scale: scaleScale()\n }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{\n 'scale-x': scaleScale()\n }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{\n 'scale-y': scaleScale()\n }],\n /**\n * Scale Z\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-z': [{\n 'scale-z': scaleScale()\n }],\n /**\n * Scale 3D\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-3d': ['scale-3d'],\n /**\n * Skew\n * @see https://tailwindcss.com/docs/skew\n */\n skew: [{\n skew: scaleSkew()\n }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{\n 'skew-x': scaleSkew()\n }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{\n 'skew-y': scaleSkew()\n }],\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [{\n transform: [isArbitraryVariable, isArbitraryValue, '', 'none', 'gpu', 'cpu']\n }],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [{\n origin: scalePositionWithArbitrary()\n }],\n /**\n * Transform Style\n * @see https://tailwindcss.com/docs/transform-style\n */\n 'transform-style': [{\n transform: ['3d', 'flat']\n }],\n /**\n * Translate\n * @see https://tailwindcss.com/docs/translate\n */\n translate: [{\n translate: scaleTranslate()\n }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{\n 'translate-x': scaleTranslate()\n }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{\n 'translate-y': scaleTranslate()\n }],\n /**\n * Translate Z\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-z': [{\n 'translate-z': scaleTranslate()\n }],\n /**\n * Translate None\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-none': ['translate-none'],\n // ---------------------\n // --- Interactivity ---\n // ---------------------\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{\n accent: scaleColor()\n }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{\n appearance: ['none', 'auto']\n }],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{\n caret: scaleColor()\n }],\n /**\n * Color Scheme\n * @see https://tailwindcss.com/docs/color-scheme\n */\n 'color-scheme': [{\n scheme: ['normal', 'dark', 'light', 'light-dark', 'only-dark', 'only-light']\n }],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [{\n cursor: ['auto', 'default', 'pointer', 'wait', 'text', 'move', 'help', 'not-allowed', 'none', 'context-menu', 'progress', 'cell', 'crosshair', 'vertical-text', 'alias', 'copy', 'no-drop', 'grab', 'grabbing', 'all-scroll', 'col-resize', 'row-resize', 'n-resize', 'e-resize', 's-resize', 'w-resize', 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'zoom-in', 'zoom-out', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Field Sizing\n * @see https://tailwindcss.com/docs/field-sizing\n */\n 'field-sizing': [{\n 'field-sizing': ['fixed', 'content']\n }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{\n 'pointer-events': ['auto', 'none']\n }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{\n resize: ['none', '', 'y', 'x']\n }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{\n scroll: ['auto', 'smooth']\n }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{\n 'scroll-m': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin X\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{\n 'scroll-mx': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Y\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{\n 'scroll-my': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{\n 'scroll-ms': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{\n 'scroll-me': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{\n 'scroll-mt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{\n 'scroll-mr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{\n 'scroll-mb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{\n 'scroll-ml': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{\n 'scroll-p': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding X\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{\n 'scroll-px': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Y\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{\n 'scroll-py': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{\n 'scroll-ps': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{\n 'scroll-pe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{\n 'scroll-pt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{\n 'scroll-pr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{\n 'scroll-pb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{\n 'scroll-pl': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{\n snap: ['start', 'end', 'center', 'align-none']\n }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{\n snap: ['normal', 'always']\n }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{\n snap: ['none', 'x', 'y', 'both']\n }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{\n snap: ['mandatory', 'proximity']\n }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [{\n touch: ['auto', 'none', 'manipulation']\n }],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [{\n 'touch-pan': ['x', 'left', 'right']\n }],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [{\n 'touch-pan': ['y', 'up', 'down']\n }],\n /**\n * Touch Action Pinch Zoom\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-pz': ['touch-pinch-zoom'],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{\n select: ['none', 'text', 'all', 'auto']\n }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [{\n 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryVariable, isArbitraryValue]\n }],\n // -----------\n // --- SVG ---\n // -----------\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{\n fill: ['none', ...scaleColor()]\n }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [{\n stroke: [isNumber, isArbitraryVariableLength, isArbitraryLength, isArbitraryNumber]\n }],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{\n stroke: ['none', ...scaleColor()]\n }],\n // ---------------------\n // --- Accessibility ---\n // ---------------------\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{\n 'forced-color-adjust': ['auto', 'none']\n }]\n },\n conflictingClassGroups: {\n overflow: ['overflow-x', 'overflow-y'],\n overscroll: ['overscroll-x', 'overscroll-y'],\n inset: ['inset-x', 'inset-y', 'start', 'end', 'top', 'right', 'bottom', 'left'],\n 'inset-x': ['right', 'left'],\n 'inset-y': ['top', 'bottom'],\n flex: ['basis', 'grow', 'shrink'],\n gap: ['gap-x', 'gap-y'],\n p: ['px', 'py', 'ps', 'pe', 'pt', 'pr', 'pb', 'pl'],\n px: ['pr', 'pl'],\n py: ['pt', 'pb'],\n m: ['mx', 'my', 'ms', 'me', 'mt', 'mr', 'mb', 'ml'],\n mx: ['mr', 'ml'],\n my: ['mt', 'mb'],\n size: ['w', 'h'],\n 'font-size': ['leading'],\n 'fvn-normal': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'],\n 'fvn-ordinal': ['fvn-normal'],\n 'fvn-slashed-zero': ['fvn-normal'],\n 'fvn-figure': ['fvn-normal'],\n 'fvn-spacing': ['fvn-normal'],\n 'fvn-fraction': ['fvn-normal'],\n 'line-clamp': ['display', 'overflow'],\n rounded: ['rounded-s', 'rounded-e', 'rounded-t', 'rounded-r', 'rounded-b', 'rounded-l', 'rounded-ss', 'rounded-se', 'rounded-ee', 'rounded-es', 'rounded-tl', 'rounded-tr', 'rounded-br', 'rounded-bl'],\n 'rounded-s': ['rounded-ss', 'rounded-es'],\n 'rounded-e': ['rounded-se', 'rounded-ee'],\n 'rounded-t': ['rounded-tl', 'rounded-tr'],\n 'rounded-r': ['rounded-tr', 'rounded-br'],\n 'rounded-b': ['rounded-br', 'rounded-bl'],\n 'rounded-l': ['rounded-tl', 'rounded-bl'],\n 'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n 'border-w': ['border-w-x', 'border-w-y', 'border-w-s', 'border-w-e', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],\n 'border-w-x': ['border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-t', 'border-w-b'],\n 'border-color': ['border-color-x', 'border-color-y', 'border-color-s', 'border-color-e', 'border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],\n 'border-color-x': ['border-color-r', 'border-color-l'],\n 'border-color-y': ['border-color-t', 'border-color-b'],\n translate: ['translate-x', 'translate-y', 'translate-none'],\n 'translate-none': ['translate', 'translate-x', 'translate-y', 'translate-z'],\n 'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'],\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\n 'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'],\n 'scroll-px': ['scroll-pr', 'scroll-pl'],\n 'scroll-py': ['scroll-pt', 'scroll-pb'],\n touch: ['touch-x', 'touch-y', 'touch-pz'],\n 'touch-x': ['touch'],\n 'touch-y': ['touch'],\n 'touch-pz': ['touch']\n },\n conflictingClassGroupModifiers: {\n 'font-size': ['leading']\n },\n orderSensitiveModifiers: ['*', '**', 'after', 'backdrop', 'before', 'details-content', 'file', 'first-letter', 'first-line', 'marker', 'placeholder', 'selection']\n };\n};\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nconst mergeConfigs = (baseConfig, {\n cacheSize,\n prefix,\n experimentalParseClassName,\n extend = {},\n override = {}\n}) => {\n overrideProperty(baseConfig, 'cacheSize', cacheSize);\n overrideProperty(baseConfig, 'prefix', prefix);\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName);\n overrideConfigProperties(baseConfig.theme, override.theme);\n overrideConfigProperties(baseConfig.classGroups, override.classGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroups, override.conflictingClassGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroupModifiers, override.conflictingClassGroupModifiers);\n overrideProperty(baseConfig, 'orderSensitiveModifiers', override.orderSensitiveModifiers);\n mergeConfigProperties(baseConfig.theme, extend.theme);\n mergeConfigProperties(baseConfig.classGroups, extend.classGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroups, extend.conflictingClassGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroupModifiers, extend.conflictingClassGroupModifiers);\n mergeArrayProperties(baseConfig, extend, 'orderSensitiveModifiers');\n return baseConfig;\n};\nconst overrideProperty = (baseObject, overrideKey, overrideValue) => {\n if (overrideValue !== undefined) {\n baseObject[overrideKey] = overrideValue;\n }\n};\nconst overrideConfigProperties = (baseObject, overrideObject) => {\n if (overrideObject) {\n for (const key in overrideObject) {\n overrideProperty(baseObject, key, overrideObject[key]);\n }\n }\n};\nconst mergeConfigProperties = (baseObject, mergeObject) => {\n if (mergeObject) {\n for (const key in mergeObject) {\n mergeArrayProperties(baseObject, mergeObject, key);\n }\n }\n};\nconst mergeArrayProperties = (baseObject, mergeObject, key) => {\n const mergeValue = mergeObject[key];\n if (mergeValue !== undefined) {\n baseObject[key] = baseObject[key] ? baseObject[key].concat(mergeValue) : mergeValue;\n }\n};\nconst extendTailwindMerge = (configExtension, ...createConfig) => typeof configExtension === 'function' ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig) : createTailwindMerge(() => mergeConfigs(getDefaultConfig(), configExtension), ...createConfig);\nconst twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);\nexport { createTailwindMerge, extendTailwindMerge, fromTheme, getDefaultConfig, mergeConfigs, twJoin, twMerge, validators };\n//# sourceMappingURL=bundle-mjs.mjs.map\n","/**\n * CN Utility - ClassName Merge\n *\n * Utility function for merging classNames with Tailwind conflict resolution.\n * Combines clsx for conditional classes and tailwind-merge for conflict resolution.\n *\n * @example\n * ```tsx\n * cn('base-class', condition && 'conditional-class', className)\n * cn(['class1', 'class2'], { 'class3': true })\n * ```\n */\n\nimport { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Merges classNames and resolves Tailwind class conflicts.\n *\n * Uses clsx for conditional class handling and tailwind-merge\n * to intelligently merge Tailwind classes, resolving conflicts\n * (e.g., 'p-2' and 'p-4' -> 'p-4').\n *\n * @param inputs - Class values to merge (strings, arrays, objects)\n * @returns Merged className string with conflicts resolved\n *\n * @example\n * ```tsx\n * // Basic usage\n * cn('base-class', 'another-class') // 'base-class another-class'\n *\n * // Conditional classes\n * cn('base', isActive && 'active', className)\n *\n * // Arrays and objects\n * cn(['class1', 'class2'], { 'class3': true, 'class4': false })\n *\n * // Tailwind conflict resolution\n * cn('p-2', 'p-4') // 'p-4' (p-2 is overridden)\n * cn('text-red-500', 'text-blue-500') // 'text-blue-500'\n * ```\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","/**\n * Copyright 2022 Joe Bell. All rights reserved.\n *\n * This file is licensed to you under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with the\n * License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */ import { clsx } from \"clsx\";\nconst falsyToString = (value)=>typeof value === \"boolean\" ? `${value}` : value === 0 ? \"0\" : value;\nexport const cx = clsx;\nexport const cva = (base, config)=>(props)=>{\n var _config_compoundVariants;\n if ((config === null || config === void 0 ? void 0 : config.variants) == null) return cx(base, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n const { variants, defaultVariants } = config;\n const getVariantClassNames = Object.keys(variants).map((variant)=>{\n const variantProp = props === null || props === void 0 ? void 0 : props[variant];\n const defaultVariantProp = defaultVariants === null || defaultVariants === void 0 ? void 0 : defaultVariants[variant];\n if (variantProp === null) return null;\n const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp);\n return variants[variant][variantKey];\n });\n const propsWithoutUndefined = props && Object.entries(props).reduce((acc, param)=>{\n let [key, value] = param;\n if (value === undefined) {\n return acc;\n }\n acc[key] = value;\n return acc;\n }, {});\n const getCompoundVariantClassNames = config === null || config === void 0 ? void 0 : (_config_compoundVariants = config.compoundVariants) === null || _config_compoundVariants === void 0 ? void 0 : _config_compoundVariants.reduce((acc, param)=>{\n let { class: cvClass, className: cvClassName, ...compoundVariantOptions } = param;\n return Object.entries(compoundVariantOptions).every((param)=>{\n let [key, value] = param;\n return Array.isArray(value) ? value.includes({\n ...defaultVariants,\n ...propsWithoutUndefined\n }[key]) : ({\n ...defaultVariants,\n ...propsWithoutUndefined\n })[key] === value;\n }) ? [\n ...acc,\n cvClass,\n cvClassName\n ] : acc;\n }, []);\n return cx(base, getVariantClassNames, getCompoundVariantClassNames, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n };\n\n","/**\n * CVA Utility - Class Variance Authority\n *\n * Type-safe utility for creating component variants with compound variants support.\n * Based on class-variance-authority but integrated with our design system.\n *\n * @example\n * ```tsx\n * const buttonVariants = cva('base-class', {\n * variants: {\n * variant: { primary: 'bg-blue-500', secondary: 'bg-gray-500' },\n * size: { sm: 'text-sm', md: 'text-base' }\n * },\n * defaultVariants: { variant: 'primary', size: 'md' }\n * })\n * ```\n */\n\nimport { type VariantProps, cva as cvaLib } from \"class-variance-authority\";\nimport type { ClassValue } from \"clsx\";\nimport { cn } from \"./cn\";\n\n/**\n * Re-export VariantProps for type inference\n */\nexport type { VariantProps };\n\n/**\n * Creates a type-safe variant function with compound variants support.\n *\n * Integrates with our cn() utility for proper Tailwind conflict resolution.\n * This is a thin wrapper around class-variance-authority's cva function\n * that ensures cn() is used for final class merging.\n *\n * @param base - Base classes that always apply\n * @param config - Variant configuration with variants, compoundVariants, and defaultVariants\n * @returns Function that returns className based on variant props\n *\n * @example\n * ```tsx\n * // Simple variants\n * const buttonVariants = cva('base-class', {\n * variants: {\n * variant: {\n * primary: 'bg-blue-500 text-white',\n * secondary: 'bg-gray-500 text-white'\n * },\n * size: {\n * sm: 'px-2 py-1 text-sm',\n * md: 'px-4 py-2 text-base'\n * }\n * },\n * defaultVariants: {\n * variant: 'primary',\n * size: 'md'\n * }\n * });\n *\n * // Usage\n * buttonVariants({ variant: 'primary', size: 'sm' })\n *\n * // Compound variants\n * const badgeVariants = cva('base', {\n * variants: {\n * variant: { success: '', error: '' },\n * style: { solid: '', outline: '' }\n * },\n * compoundVariants: [\n * { variant: 'success', style: 'solid', class: 'bg-green-500' },\n * { variant: 'error', style: 'outline', class: 'border-red-500' }\n * ]\n * });\n * ```\n */\nexport const cva = <T extends Record<string, Record<string, ClassValue>>>(\n base?: ClassValue,\n config?: Parameters<typeof cvaLib<T>>[1],\n) => {\n const variantFn = cvaLib(base, config);\n\n // Wrap to ensure cn() is used for final merge\n return ((props?: Parameters<typeof variantFn>[0]) => {\n const variantClasses = variantFn(props);\n return cn(variantClasses);\n }) as typeof variantFn;\n};\n","/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return type.displayName || \"Context\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(type, key, props, owner, debugStack, debugTask) {\n var refProp = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== refProp ? refProp : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n debugStack,\n debugTask\n ) {\n var children = config.children;\n if (void 0 !== children)\n if (isStaticChildren)\n if (isArrayImpl(children)) {\n for (\n isStaticChildren = 0;\n isStaticChildren < children.length;\n isStaticChildren++\n )\n validateChildKeys(children[isStaticChildren]);\n Object.freeze && Object.freeze(children);\n } else\n console.error(\n \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n );\n else validateChildKeys(children);\n if (hasOwnProperty.call(config, \"key\")) {\n children = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return \"key\" !== k;\n });\n isStaticChildren =\n 0 < keys.length\n ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n : \"{key: someKey}\";\n didWarnAboutKeySpread[children + isStaticChildren] ||\n ((keys =\n 0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n console.error(\n 'A props object containing a \"key\" prop is being spread into JSX:\\n let props = %s;\\n <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n let props = %s;\\n <%s key={someKey} {...props} />',\n isStaticChildren,\n children,\n keys,\n children\n ),\n (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n }\n children = null;\n void 0 !== maybeKey &&\n (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n children &&\n defineKeyPropWarningGetter(\n maybeKey,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(\n type,\n children,\n maybeKey,\n getOwner(),\n debugStack,\n debugTask\n );\n }\n function validateChildKeys(node) {\n isValidElement(node)\n ? node._store && (node._store.validated = 1)\n : \"object\" === typeof node &&\n null !== node &&\n node.$$typeof === REACT_LAZY_TYPE &&\n (\"fulfilled\" === node._payload.status\n ? isValidElement(node._payload.value) &&\n node._payload.value._store &&\n (node._payload.value._store.validated = 1)\n : node._store && (node._store.validated = 1));\n }\n function isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n }\n var React = require(\"react\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n hasOwnProperty = Object.prototype.hasOwnProperty,\n isArrayImpl = Array.isArray,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n React = {\n react_stack_bottom_frame: function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind(\n React,\n UnknownOwner\n )();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutKeySpread = {};\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.jsx = function (type, config, maybeKey) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !1,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n exports.jsxs = function (type, config, maybeKey) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !0,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","\"use client\";\n\nimport { createContext, useContext } from \"react\";\n\nexport type ToastVariant = \"success\" | \"error\" | \"warning\" | \"info\";\n\nexport interface Toast {\n id: string;\n title: string;\n description?: string;\n variant: ToastVariant;\n duration?: number; // in milliseconds, undefined = no auto-dismiss\n action?: {\n label: string;\n onClick: () => void;\n };\n}\n\nexport interface ToastContextValue {\n toasts: Toast[];\n addToast: (toast: Omit<Toast, \"id\">) => string;\n removeToast: (id: string) => void;\n clearAll: () => void;\n}\n\nexport const ToastContext = createContext<ToastContextValue | undefined>(\n undefined,\n);\n\nexport function useToastContext(): ToastContextValue {\n const context = useContext(ToastContext);\n if (!context) {\n throw new Error(\"Toast components must be used within a ToastProvider\");\n }\n return context;\n}\n\nexport function useToastContextOptional(): ToastContextValue | undefined {\n return useContext(ToastContext);\n}\n","\"use client\";\n\nimport { createContext, useContext } from \"react\";\n\nexport interface DialogContextValue {\n isOpen: boolean;\n onOpenChange: (open: boolean) => void;\n onClose: () => void;\n titleId?: string;\n descriptionId?: string;\n}\n\nexport const DialogContext = createContext<DialogContextValue | undefined>(\n undefined,\n);\n\nexport function useDialogContext(): DialogContextValue {\n const context = useContext(DialogContext);\n if (!context) {\n throw new Error(\"Dialog components must be used within a Dialog component\");\n }\n return context;\n}\n\nexport function useDialogContextOptional(): DialogContextValue | undefined {\n return useContext(DialogContext);\n}\n","\"use client\";\n\nimport { useState, useRef, useEffect, type ReactNode } from \"react\";\nimport { DialogContext, type DialogContextValue } from \"./DialogContext\";\n\nexport interface DialogProviderProps {\n children: ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n titleId?: string;\n descriptionId?: string;\n}\n\nexport function DialogProvider({\n children,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n titleId,\n descriptionId,\n}: DialogProviderProps) {\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n const previousActiveElement = useRef<HTMLElement | null>(null);\n\n // Use controlled or uncontrolled state\n const isOpen =\n controlledOpen !== undefined ? controlledOpen : uncontrolledOpen;\n const setIsOpen = (newOpen: boolean) => {\n if (controlledOpen === undefined) {\n setUncontrolledOpen(newOpen);\n }\n onOpenChange?.(newOpen);\n };\n\n // Store previous active element and restore on close\n useEffect(() => {\n if (isOpen) {\n previousActiveElement.current = document.activeElement as HTMLElement;\n } else {\n // Restore focus when closing\n const timer = setTimeout(() => {\n previousActiveElement.current?.focus();\n }, 0);\n return () => clearTimeout(timer);\n }\n }, [isOpen]);\n\n // Prevent body scroll when dialog is open\n useEffect(() => {\n if (isOpen) {\n document.body.style.overflow = \"hidden\";\n } else {\n document.body.style.overflow = \"\";\n }\n return () => {\n document.body.style.overflow = \"\";\n };\n }, [isOpen]);\n\n const contextValue: DialogContextValue = {\n isOpen,\n onOpenChange: setIsOpen,\n onClose: () => setIsOpen(false),\n titleId,\n descriptionId,\n };\n\n return (\n <DialogContext.Provider value={contextValue}>\n {children}\n </DialogContext.Provider>\n );\n}\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n};\n\nexport { hasA11yProp, mergeClasses, toCamelCase, toKebabCase, toPascalCase };\n//# sourceMappingURL=utils.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.js';\nimport { mergeClasses, hasA11yProp } from './shared/src/utils.js';\n\nconst Icon = forwardRef(\n ({\n color = \"currentColor\",\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = \"\",\n children,\n iconNode,\n ...rest\n }, ref) => createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\n className: mergeClasses(\"lucide\", className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n )\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from './shared/src/utils.js';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"m21 16-4 4-4-4\", key: \"f6ql7i\" }],\n [\"path\", { d: \"M17 20V4\", key: \"1ejh1v\" }],\n [\"path\", { d: \"m3 8 4-4 4 4\", key: \"11wl7u\" }],\n [\"path\", { d: \"M7 4v16\", key: \"1glfcx\" }]\n];\nconst ArrowUpDown = createLucideIcon(\"arrow-up-down\", __iconNode);\n\nexport { __iconNode, ArrowUpDown as default };\n//# sourceMappingURL=arrow-up-down.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M8 2v4\", key: \"1cmpym\" }],\n [\"path\", { d: \"M16 2v4\", key: \"4m81vk\" }],\n [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"4\", rx: \"2\", key: \"1hopcy\" }],\n [\"path\", { d: \"M3 10h18\", key: \"8toen8\" }]\n];\nconst Calendar = createLucideIcon(\"calendar\", __iconNode);\n\nexport { __iconNode, Calendar as default };\n//# sourceMappingURL=calendar.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"M20 6 9 17l-5-5\", key: \"1gmf2c\" }]];\nconst Check = createLucideIcon(\"check\", __iconNode);\n\nexport { __iconNode, Check as default };\n//# sourceMappingURL=check.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m6 9 6 6 6-6\", key: \"qrunsl\" }]];\nconst ChevronDown = createLucideIcon(\"chevron-down\", __iconNode);\n\nexport { __iconNode, ChevronDown as default };\n//# sourceMappingURL=chevron-down.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m15 18-6-6 6-6\", key: \"1wnfg3\" }]];\nconst ChevronLeft = createLucideIcon(\"chevron-left\", __iconNode);\n\nexport { __iconNode, ChevronLeft as default };\n//# sourceMappingURL=chevron-left.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m9 18 6-6-6-6\", key: \"mthhwq\" }]];\nconst ChevronRight = createLucideIcon(\"chevron-right\", __iconNode);\n\nexport { __iconNode, ChevronRight as default };\n//# sourceMappingURL=chevron-right.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"line\", { x1: \"12\", x2: \"12\", y1: \"8\", y2: \"12\", key: \"1pkeuh\" }],\n [\"line\", { x1: \"12\", x2: \"12.01\", y1: \"16\", y2: \"16\", key: \"4dfq90\" }]\n];\nconst CircleAlert = createLucideIcon(\"circle-alert\", __iconNode);\n\nexport { __iconNode, CircleAlert as default };\n//# sourceMappingURL=circle-alert.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"m9 12 2 2 4-4\", key: \"dzmm74\" }]\n];\nconst CircleCheck = createLucideIcon(\"circle-check\", __iconNode);\n\nexport { __iconNode, CircleCheck as default };\n//# sourceMappingURL=circle-check.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M12 6v6l4 2\", key: \"mmk7yg\" }],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }]\n];\nconst Clock = createLucideIcon(\"clock\", __iconNode);\n\nexport { __iconNode, Clock as default };\n//# sourceMappingURL=clock.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n { d: \"M15 6v12a3 3 0 1 0 3-3H6a3 3 0 1 0 3 3V6a3 3 0 1 0-3 3h12a3 3 0 1 0-3-3\", key: \"11bfej\" }\n ]\n];\nconst Command = createLucideIcon(\"command\", __iconNode);\n\nexport { __iconNode, Command as default };\n//# sourceMappingURL=command.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M12 15V3\", key: \"m9g1x1\" }],\n [\"path\", { d: \"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\", key: \"ih7n3h\" }],\n [\"path\", { d: \"m7 10 5 5 5-5\", key: \"brsn70\" }]\n];\nconst Download = createLucideIcon(\"download\", __iconNode);\n\nexport { __iconNode, Download as default };\n//# sourceMappingURL=download.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"1\", key: \"41hilf\" }],\n [\"circle\", { cx: \"12\", cy: \"5\", r: \"1\", key: \"gxeob9\" }],\n [\"circle\", { cx: \"12\", cy: \"19\", r: \"1\", key: \"lyex9k\" }]\n];\nconst EllipsisVertical = createLucideIcon(\"ellipsis-vertical\", __iconNode);\n\nexport { __iconNode, EllipsisVertical as default };\n//# sourceMappingURL=ellipsis-vertical.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49\",\n key: \"ct8e1f\"\n }\n ],\n [\"path\", { d: \"M14.084 14.158a3 3 0 0 1-4.242-4.242\", key: \"151rxh\" }],\n [\n \"path\",\n {\n d: \"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143\",\n key: \"13bj9a\"\n }\n ],\n [\"path\", { d: \"m2 2 20 20\", key: \"1ooewy\" }]\n];\nconst EyeOff = createLucideIcon(\"eye-off\", __iconNode);\n\nexport { __iconNode, EyeOff as default };\n//# sourceMappingURL=eye-off.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\",\n key: \"1nclc0\"\n }\n ],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }]\n];\nconst Eye = createLucideIcon(\"eye\", __iconNode);\n\nexport { __iconNode, Eye as default };\n//# sourceMappingURL=eye.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\",\n key: \"1oefj6\"\n }\n ],\n [\"path\", { d: \"M14 2v5a1 1 0 0 0 1 1h5\", key: \"wfsgrz\" }]\n];\nconst File = createLucideIcon(\"file\", __iconNode);\n\nexport { __iconNode, File as default };\n//# sourceMappingURL=file.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z\",\n key: \"sc7q7i\"\n }\n ]\n];\nconst Funnel = createLucideIcon(\"funnel\", __iconNode);\n\nexport { __iconNode, Funnel as default };\n//# sourceMappingURL=funnel.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"9\", cy: \"12\", r: \"1\", key: \"1vctgf\" }],\n [\"circle\", { cx: \"9\", cy: \"5\", r: \"1\", key: \"hp0tcf\" }],\n [\"circle\", { cx: \"9\", cy: \"19\", r: \"1\", key: \"fkjjf6\" }],\n [\"circle\", { cx: \"15\", cy: \"12\", r: \"1\", key: \"1tmaij\" }],\n [\"circle\", { cx: \"15\", cy: \"5\", r: \"1\", key: \"19l28e\" }],\n [\"circle\", { cx: \"15\", cy: \"19\", r: \"1\", key: \"f4zoj3\" }]\n];\nconst GripVertical = createLucideIcon(\"grip-vertical\", __iconNode);\n\nexport { __iconNode, GripVertical as default };\n//# sourceMappingURL=grip-vertical.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"M12 16v-4\", key: \"1dtifu\" }],\n [\"path\", { d: \"M12 8h.01\", key: \"e9boi3\" }]\n];\nconst Info = createLucideIcon(\"info\", __iconNode);\n\nexport { __iconNode, Info as default };\n//# sourceMappingURL=info.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"M21 12a9 9 0 1 1-6.219-8.56\", key: \"13zald\" }]];\nconst LoaderCircle = createLucideIcon(\"loader-circle\", __iconNode);\n\nexport { __iconNode, LoaderCircle as default };\n//# sourceMappingURL=loader-circle.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M4 5h16\", key: \"1tepv9\" }],\n [\"path\", { d: \"M4 12h16\", key: \"1lakjw\" }],\n [\"path\", { d: \"M4 19h16\", key: \"1djgab\" }]\n];\nconst Menu = createLucideIcon(\"menu\", __iconNode);\n\nexport { __iconNode, Menu as default };\n//# sourceMappingURL=menu.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"3\", rx: \"2\", key: \"afitv7\" }],\n [\"path\", { d: \"M9 3v18\", key: \"fh3hqa\" }],\n [\"path\", { d: \"m16 15-3-3 3-3\", key: \"14y99z\" }]\n];\nconst PanelLeftClose = createLucideIcon(\"panel-left-close\", __iconNode);\n\nexport { __iconNode, PanelLeftClose as default };\n//# sourceMappingURL=panel-left-close.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"3\", rx: \"2\", key: \"afitv7\" }],\n [\"path\", { d: \"M9 3v18\", key: \"fh3hqa\" }],\n [\"path\", { d: \"m14 9 3 3-3 3\", key: \"8010ee\" }]\n];\nconst PanelLeftOpen = createLucideIcon(\"panel-left-open\", __iconNode);\n\nexport { __iconNode, PanelLeftOpen as default };\n//# sourceMappingURL=panel-left-open.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"m21 21-4.34-4.34\", key: \"14j7rj\" }],\n [\"circle\", { cx: \"11\", cy: \"11\", r: \"8\", key: \"4ej97u\" }]\n];\nconst Search = createLucideIcon(\"search\", __iconNode);\n\nexport { __iconNode, Search as default };\n//# sourceMappingURL=search.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z\",\n key: \"r04s7s\"\n }\n ]\n];\nconst Star = createLucideIcon(\"star\", __iconNode);\n\nexport { __iconNode, Star as default };\n//# sourceMappingURL=star.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\",\n key: \"wmoenq\"\n }\n ],\n [\"path\", { d: \"M12 9v4\", key: \"juzpu7\" }],\n [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n];\nconst TriangleAlert = createLucideIcon(\"triangle-alert\", __iconNode);\n\nexport { __iconNode, TriangleAlert as default };\n//# sourceMappingURL=triangle-alert.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M12 3v12\", key: \"1x0j5s\" }],\n [\"path\", { d: \"m17 8-5-5-5 5\", key: \"7q97r8\" }],\n [\"path\", { d: \"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\", key: \"ih7n3h\" }]\n];\nconst Upload = createLucideIcon(\"upload\", __iconNode);\n\nexport { __iconNode, Upload as default };\n//# sourceMappingURL=upload.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\n [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\n];\nconst X = createLucideIcon(\"x\", __iconNode);\n\nexport { __iconNode, X as default };\n//# sourceMappingURL=x.js.map\n","\"use client\";\n\nimport { memo, useMemo, useCallback } from \"react\";\nimport type { HTMLAttributes } from \"react\";\nimport { cn, cva } from \"../../utils\";\nimport { getColorClass, getRadiusClass, getSpacingClass } from \"../../tokens\";\n\ninterface Props extends HTMLAttributes<HTMLDivElement> {\n variant?: \"default\" | \"hover\" | \"selected\";\n padding?: \"none\" | \"small\" | \"medium\" | \"large\";\n onClick?: () => void;\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n}\n\n/**\n * Card Component\n *\n * A versatile card component for displaying content in containers.\n * Follows Atomic Design principles as a Molecule component.\n * Can be used to replace BoxWrapper in many cases with more flexibility.\n * Optimized with React.memo to prevent unnecessary re-renders.\n *\n * @example\n * ```tsx\n * <Card variant=\"hover\" padding=\"large\">\n * <h3>Card Title</h3>\n * <p>Card content</p>\n * </Card>\n * ```\n */\nconst Card = memo(function Card({\n variant = \"default\",\n padding = \"medium\",\n className = \"\",\n onClick,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n children,\n ...props\n}: Props) {\n const cardVariants = cva(\n cn(\n \"bg-white\",\n getRadiusClass(\"lg\"),\n \"border\",\n getColorClass(\"neutral\", \"DEFAULT\", \"border\"),\n \"shadow-sm\",\n ),\n {\n variants: {\n variant: {\n default: \"\",\n hover: cn(\"hover:shadow-md\", \"transition-shadow\", \"cursor-pointer\"),\n selected: cn(\"border-line-brand\", \"shadow-md\"),\n },\n padding: {\n none: \"\",\n small: getSpacingClass(\"xs\", \"p\"),\n medium: getSpacingClass(\"base\", \"p\"),\n large: getSpacingClass(\"lg\", \"p\"),\n },\n },\n defaultVariants: {\n variant: \"default\",\n padding: \"medium\",\n },\n },\n );\n\n const isInteractive = useMemo(\n () => onClick !== undefined || variant === \"hover\",\n [onClick, variant],\n );\n const role = isInteractive ? \"button\" : undefined;\n const tabIndex = isInteractive ? 0 : undefined;\n\n const classes = cn(cardVariants({ variant, padding }), className);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (isInteractive && (e.key === \"Enter\" || e.key === \" \")) {\n e.preventDefault();\n onClick?.();\n }\n },\n [isInteractive, onClick],\n );\n\n return (\n <div\n className={classes}\n role={role}\n tabIndex={tabIndex}\n onClick={onClick}\n onKeyDown={handleKeyDown}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n {...props}\n >\n {children}\n </div>\n );\n});\n\nCard.displayName = \"Card\";\n\nexport default Card;\n","\"use client\";\n\n/* eslint-disable react-refresh/only-export-components */\nimport { createContext, useContext } from \"react\";\nimport type { FieldValues, UseFormReturn } from \"react-hook-form\";\n\nexport interface FormContextValue<\n TFieldValues extends FieldValues = FieldValues,\n> {\n form?: UseFormReturn<TFieldValues>;\n loading?: boolean;\n}\n\nconst FormContext = createContext<FormContextValue<FieldValues> | undefined>(\n undefined,\n);\n\n/**\n * Hook to access Form context\n *\n * @throws Error if used outside of Form component with react-hook-form\n */\nexport function useFormContext<\n TFieldValues extends FieldValues = FieldValues,\n>(): FormContextValue<TFieldValues> {\n const context = useContext(FormContext);\n\n if (context === undefined) {\n throw new Error(\n \"useFormContext must be used within a Form component with react-hook-form integration\",\n );\n }\n\n return context as FormContextValue<TFieldValues>;\n}\n\n/**\n * Hook to access Form context (optional, returns undefined if not in Form)\n */\nexport function useFormContextOptional<\n TFieldValues extends FieldValues = FieldValues,\n>(): FormContextValue<TFieldValues> | undefined {\n return useContext(FormContext) as FormContextValue<TFieldValues> | undefined;\n}\n\nexport { FormContext };\n","\"use client\";\n\nimport { FormContext, type FormContextValue } from \"./FormContext\";\nimport type { ReactNode } from \"react\";\nimport type { FieldValues, UseFormReturn } from \"react-hook-form\";\n\nexport interface FormProviderProps<\n TFieldValues extends FieldValues = FieldValues,\n> {\n form?: UseFormReturn<TFieldValues>;\n loading?: boolean;\n children: ReactNode;\n}\n\n/**\n * FormProvider Component\n *\n * Provides react-hook-form context to form children.\n * Used internally by Form component when react-hook-form is integrated.\n */\nexport function FormProvider<TFieldValues extends FieldValues = FieldValues>({\n form,\n loading = false,\n children,\n}: FormProviderProps<TFieldValues>) {\n const contextValue: FormContextValue<TFieldValues> = {\n form,\n loading,\n };\n\n return (\n <FormContext.Provider value={contextValue}>{children}</FormContext.Provider>\n );\n}\n","\"use client\";\n\nimport type { FormHTMLAttributes, ReactNode } from \"react\";\nimport { FormProvider } from \"./FormProvider\";\nimport type { FieldValues, UseFormReturn } from \"react-hook-form\";\nimport { cn } from \"../../utils\";\nimport {\n getSpacingClass,\n getRadiusClass,\n getTypographySizeFromFontSize,\n} from \"../../tokens\";\n\n// Simple Form Props\ninterface SimpleFormProps extends FormHTMLAttributes<HTMLFormElement> {\n children: ReactNode;\n onSubmit?: (e: React.FormEvent<HTMLFormElement>) => void;\n loading?: boolean;\n error?: string | null;\n success?: string | null;\n form?: never; // Cannot use form prop in simple mode\n}\n\n// React Hook Form Props\ninterface ReactHookFormProps<TFieldValues extends FieldValues = FieldValues>\n extends Omit<FormHTMLAttributes<HTMLFormElement>, \"onSubmit\"> {\n children: ReactNode;\n form: UseFormReturn<TFieldValues>;\n onSubmit: (data: TFieldValues) => void | Promise<void>;\n loading?: boolean;\n error?: string | null;\n success?: string | null;\n onSubmitError?: (errors: unknown) => void;\n}\n\ntype FormProps<TFieldValues extends FieldValues = FieldValues> =\n | SimpleFormProps\n | ReactHookFormProps<TFieldValues>;\n\n/**\n * Form Component\n *\n * A flexible form component that supports both simple forms and react-hook-form integration.\n *\n * @example\n * ```tsx\n * // Simple form\n * <Form onSubmit={handleSubmit} loading={isSubmitting}>\n * <Input name=\"email\" />\n * <Button type=\"submit\">Submit</Button>\n * </Form>\n *\n * // With react-hook-form\n * const form = useForm({ resolver: zodResolver(schema) });\n * <Form form={form} onSubmit={handleSubmit}>\n * <FormField name=\"email\">\n * {({ register, error }) => (\n * <>\n * <Input {...register('email')} />\n * {error && <ErrorMessage>{error}</ErrorMessage>}\n * </>\n * )}\n * </FormField>\n * </Form>\n * ```\n */\nexport default function Form<TFieldValues extends FieldValues = FieldValues>({\n children,\n onSubmit,\n loading = false,\n error = null,\n success = null,\n className = \"\",\n ...props\n}: FormProps<TFieldValues>) {\n const classes = cn(\n getSpacingClass(\"lg\", \"gap\"),\n \"flex\",\n \"flex-col\",\n className,\n );\n\n // Check if using react-hook-form\n const isReactHookForm = \"form\" in props && props.form !== undefined;\n\n if (isReactHookForm) {\n const {\n form,\n onSubmit: onSubmitData,\n onSubmitError,\n ...formProps\n } = props as ReactHookFormProps<TFieldValues>;\n\n const handleSubmit = form.handleSubmit(\n async (data) => {\n try {\n await onSubmitData(data);\n } catch (err) {\n onSubmitError?.(err);\n }\n },\n (errors) => {\n onSubmitError?.(errors);\n },\n );\n\n return (\n <FormProvider form={form} loading={loading}>\n <form\n className={classes}\n onSubmit={handleSubmit}\n noValidate\n {...formProps}\n >\n {children}\n {error && (\n <div\n role=\"alert\"\n className={cn(\n getSpacingClass(\"md\", \"p\"),\n getTypographySizeFromFontSize(\"sm\"),\n \"text-error-dark\",\n \"bg-error-bg\",\n \"border\",\n \"border-error\",\n getRadiusClass(\"md\"),\n )}\n >\n {error}\n </div>\n )}\n {success && (\n <div\n role=\"alert\"\n className={cn(\n getSpacingClass(\"md\", \"p\"),\n getTypographySizeFromFontSize(\"sm\"),\n \"text-success-dark\",\n \"bg-success-bg\",\n \"border\",\n \"border-success\",\n getRadiusClass(\"md\"),\n )}\n >\n {success}\n </div>\n )}\n </form>\n </FormProvider>\n );\n }\n\n // Simple form mode\n // Use onSubmit from props or from direct prop\n const onSubmitSimple = (props as SimpleFormProps).onSubmit || onSubmit;\n const { onSubmit: _, ...simpleProps } = props as SimpleFormProps;\n\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n if (onSubmitSimple && !loading) {\n onSubmitSimple(e);\n }\n };\n\n return (\n <form\n className={classes}\n onSubmit={handleSubmit}\n noValidate\n {...simpleProps}\n >\n {children}\n {error && (\n <div\n role=\"alert\"\n className={cn(\n getSpacingClass(\"md\", \"p\"),\n getTypographySizeFromFontSize(\"sm\"),\n \"text-error-dark\",\n \"bg-error-bg\",\n \"border\",\n \"border-error\",\n getRadiusClass(\"md\"),\n )}\n >\n {error}\n </div>\n )}\n {success && (\n <div\n role=\"alert\"\n className={cn(\n getSpacingClass(\"md\", \"p\"),\n getTypographySizeFromFontSize(\"sm\"),\n \"text-success-dark\",\n \"bg-success-bg\",\n \"border\",\n \"border-success\",\n getRadiusClass(\"md\"),\n )}\n >\n {success}\n </div>\n )}\n </form>\n );\n}\n","\"use client\";\n\nimport { useFormContext } from \"./FormContext\";\nimport { ErrorMessage, Label } from \"../../primitives\";\nimport { cn } from \"../../utils\";\nimport {\n getSpacingClass,\n getTypographySizeFromFontSize,\n getTypographyWeightFromFontWeight,\n getColorClass,\n} from \"../../tokens\";\nimport type { FieldValues, Path, RegisterOptions } from \"react-hook-form\";\nimport type { ReactNode } from \"react\";\nimport type { UseFormReturn } from \"react-hook-form\";\n\nexport interface FormFieldProps<\n TFieldValues extends FieldValues = FieldValues,\n> {\n name: Path<TFieldValues>;\n label?: string;\n children: (props: {\n name: string;\n register: (\n fieldName: Path<TFieldValues>,\n ) => ReturnType<UseFormReturn<TFieldValues>[\"register\"]>;\n error?: string;\n value?: unknown;\n onChange?: (\n e: React.ChangeEvent<\n HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement\n >,\n ) => void;\n onBlur?: () => void;\n }) => ReactNode;\n rules?: RegisterOptions<TFieldValues>;\n className?: string;\n}\n\n/**\n * FormField Component\n *\n * A wrapper component for form fields that integrates with react-hook-form.\n * Provides register, error, and validation state to children.\n *\n * @example\n * ```tsx\n * <FormField name=\"email\" label=\"Email\">\n * {({ register, error }) => (\n * <>\n * <Label htmlFor=\"email\">Email</Label>\n * <Input id=\"email\" {...register('email')} />\n * {error && <ErrorMessage>{error}</ErrorMessage>}\n * </>\n * )}\n * </FormField>\n * ```\n */\nexport function FormField<TFieldValues extends FieldValues = FieldValues>({\n name,\n label,\n children,\n rules,\n className = \"\",\n}: FormFieldProps<TFieldValues>) {\n const { form } = useFormContext<TFieldValues>();\n\n if (!form) {\n throw new Error(\n \"FormField must be used within a Form component with react-hook-form integration\",\n );\n }\n\n const {\n register,\n formState: { errors },\n watch,\n } = form;\n\n const fieldRegister = register(name, rules);\n const error = errors[name]?.message as string | undefined;\n const value = watch(name);\n\n return (\n <div\n className={cn(\n \"flex\",\n \"flex-col\",\n getSpacingClass(\"sm\", \"gap\"),\n className,\n )}\n >\n {label && (\n <Label\n htmlFor={name}\n className={cn(\n \"block\",\n getTypographySizeFromFontSize(\"sm\"),\n getTypographyWeightFromFontWeight(\"medium\"),\n getColorClass(\"neutral\", \"dark\", \"text\"),\n )}\n >\n {label}\n </Label>\n )}\n {children({\n name,\n register: (fieldName: Path<TFieldValues>) => register(fieldName, rules),\n error,\n value,\n onChange: fieldRegister.onChange,\n onBlur: fieldRegister.onBlur,\n })}\n {error && <ErrorMessage message={error} />}\n </div>\n );\n}\n","import React from 'react';\n\nvar isCheckBoxInput = (element) => element.type === 'checkbox';\n\nvar isDateObject = (value) => value instanceof Date;\n\nvar isNullOrUndefined = (value) => value == null;\n\nconst isObjectType = (value) => typeof value === 'object';\nvar isObject = (value) => !isNullOrUndefined(value) &&\n !Array.isArray(value) &&\n isObjectType(value) &&\n !isDateObject(value);\n\nvar getEventValue = (event) => isObject(event) && event.target\n ? isCheckBoxInput(event.target)\n ? event.target.checked\n : event.target.value\n : event;\n\nvar getNodeParentName = (name) => name.substring(0, name.search(/\\.\\d+(\\.|$)/)) || name;\n\nvar isNameInFieldArray = (names, name) => names.has(getNodeParentName(name));\n\nvar isPlainObject = (tempObject) => {\n const prototypeCopy = tempObject.constructor && tempObject.constructor.prototype;\n return (isObject(prototypeCopy) && prototypeCopy.hasOwnProperty('isPrototypeOf'));\n};\n\nvar isWeb = typeof window !== 'undefined' &&\n typeof window.HTMLElement !== 'undefined' &&\n typeof document !== 'undefined';\n\nfunction cloneObject(data) {\n if (data instanceof Date) {\n return new Date(data);\n }\n const isFileListInstance = typeof FileList !== 'undefined' && data instanceof FileList;\n if (isWeb && (data instanceof Blob || isFileListInstance)) {\n return data;\n }\n const isArray = Array.isArray(data);\n if (!isArray && !(isObject(data) && isPlainObject(data))) {\n return data;\n }\n const copy = isArray ? [] : Object.create(Object.getPrototypeOf(data));\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n copy[key] = cloneObject(data[key]);\n }\n }\n return copy;\n}\n\nvar isKey = (value) => /^\\w*$/.test(value);\n\nvar isUndefined = (val) => val === undefined;\n\nvar compact = (value) => Array.isArray(value) ? value.filter(Boolean) : [];\n\nvar stringToPath = (input) => compact(input.replace(/[\"|']|\\]/g, '').split(/\\.|\\[/));\n\nvar get = (object, path, defaultValue) => {\n if (!path || !isObject(object)) {\n return defaultValue;\n }\n const result = (isKey(path) ? [path] : stringToPath(path)).reduce((result, key) => isNullOrUndefined(result) ? result : result[key], object);\n return isUndefined(result) || result === object\n ? isUndefined(object[path])\n ? defaultValue\n : object[path]\n : result;\n};\n\nvar isBoolean = (value) => typeof value === 'boolean';\n\nvar isFunction = (value) => typeof value === 'function';\n\nvar set = (object, path, value) => {\n let index = -1;\n const tempPath = isKey(path) ? [path] : stringToPath(path);\n const length = tempPath.length;\n const lastIndex = length - 1;\n while (++index < length) {\n const key = tempPath[index];\n let newValue = value;\n if (index !== lastIndex) {\n const objValue = object[key];\n newValue =\n isObject(objValue) || Array.isArray(objValue)\n ? objValue\n : !isNaN(+tempPath[index + 1])\n ? []\n : {};\n }\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return;\n }\n object[key] = newValue;\n object = object[key];\n }\n};\n\nconst EVENTS = {\n BLUR: 'blur',\n FOCUS_OUT: 'focusout',\n CHANGE: 'change',\n};\nconst VALIDATION_MODE = {\n onBlur: 'onBlur',\n onChange: 'onChange',\n onSubmit: 'onSubmit',\n onTouched: 'onTouched',\n all: 'all',\n};\nconst INPUT_VALIDATION_RULES = {\n max: 'max',\n min: 'min',\n maxLength: 'maxLength',\n minLength: 'minLength',\n pattern: 'pattern',\n required: 'required',\n validate: 'validate',\n};\n\n/**\n * Separate context for `control` to prevent unnecessary rerenders.\n * Internal hooks that only need control use this instead of full form context.\n */\nconst HookFormControlContext = React.createContext(null);\nHookFormControlContext.displayName = 'HookFormControlContext';\n/**\n * @internal Internal hook to access only control from context.\n */\nconst useFormControlContext = () => React.useContext(HookFormControlContext);\n\nvar getProxyFormState = (formState, control, localProxyFormState, isRoot = true) => {\n const result = {\n defaultValues: control._defaultValues,\n };\n for (const key in formState) {\n Object.defineProperty(result, key, {\n get: () => {\n const _key = key;\n if (control._proxyFormState[_key] !== VALIDATION_MODE.all) {\n control._proxyFormState[_key] = !isRoot || VALIDATION_MODE.all;\n }\n localProxyFormState && (localProxyFormState[_key] = true);\n return formState[_key];\n },\n });\n }\n return result;\n};\n\nconst useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\n\n/**\n * This custom hook allows you to subscribe to each form state, and isolate the re-render at the custom hook level. It has its scope in terms of form state subscription, so it would not affect other useFormState and useForm. Using this hook can reduce the re-render impact on large and complex form application.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useformstate) • [Demo](https://codesandbox.io/s/useformstate-75xly)\n *\n * @param props - include options on specify fields to subscribe. {@link UseFormStateReturn}\n *\n * @example\n * ```tsx\n * function App() {\n * const { register, handleSubmit, control } = useForm({\n * defaultValues: {\n * firstName: \"firstName\"\n * }});\n * const { dirtyFields } = useFormState({\n * control\n * });\n * const onSubmit = (data) => console.log(data);\n *\n * return (\n * <form onSubmit={handleSubmit(onSubmit)}>\n * <input {...register(\"firstName\")} placeholder=\"First Name\" />\n * {dirtyFields.firstName && <p>Field is dirty.</p>}\n * <input type=\"submit\" />\n * </form>\n * );\n * }\n * ```\n */\nfunction useFormState(props) {\n const formControl = useFormControlContext();\n const { control = formControl, disabled, name, exact } = props || {};\n const [formState, updateFormState] = React.useState(control._formState);\n const _localProxyFormState = React.useRef({\n isDirty: false,\n isLoading: false,\n dirtyFields: false,\n touchedFields: false,\n validatingFields: false,\n isValidating: false,\n isValid: false,\n errors: false,\n });\n useIsomorphicLayoutEffect(() => control._subscribe({\n name,\n formState: _localProxyFormState.current,\n exact,\n callback: (formState) => {\n !disabled &&\n updateFormState({\n ...control._formState,\n ...formState,\n });\n },\n }), [name, disabled, exact]);\n React.useEffect(() => {\n _localProxyFormState.current.isValid && control._setValid(true);\n }, [control]);\n return React.useMemo(() => getProxyFormState(formState, control, _localProxyFormState.current, false), [formState, control]);\n}\n\nvar isString = (value) => typeof value === 'string';\n\nvar generateWatchOutput = (names, _names, formValues, isGlobal, defaultValue) => {\n if (isString(names)) {\n isGlobal && _names.watch.add(names);\n return get(formValues, names, defaultValue);\n }\n if (Array.isArray(names)) {\n return names.map((fieldName) => (isGlobal && _names.watch.add(fieldName),\n get(formValues, fieldName)));\n }\n isGlobal && (_names.watchAll = true);\n return formValues;\n};\n\nvar isPrimitive = (value) => isNullOrUndefined(value) || !isObjectType(value);\n\nfunction deepEqual(object1, object2, _internal_visited = new WeakSet()) {\n if (isPrimitive(object1) || isPrimitive(object2)) {\n return Object.is(object1, object2);\n }\n if (isDateObject(object1) && isDateObject(object2)) {\n return Object.is(object1.getTime(), object2.getTime());\n }\n const keys1 = Object.keys(object1);\n const keys2 = Object.keys(object2);\n if (keys1.length !== keys2.length) {\n return false;\n }\n if (_internal_visited.has(object1) || _internal_visited.has(object2)) {\n return true;\n }\n _internal_visited.add(object1);\n _internal_visited.add(object2);\n for (const key of keys1) {\n const val1 = object1[key];\n if (!keys2.includes(key)) {\n return false;\n }\n if (key !== 'ref') {\n const val2 = object2[key];\n if ((isDateObject(val1) && isDateObject(val2)) ||\n (isObject(val1) && isObject(val2)) ||\n (Array.isArray(val1) && Array.isArray(val2))\n ? !deepEqual(val1, val2, _internal_visited)\n : !Object.is(val1, val2)) {\n return false;\n }\n }\n }\n return true;\n}\n\n/**\n * Custom hook to subscribe to field change and isolate re-rendering at the component level.\n *\n * @remarks\n *\n * [API](https://react-hook-form.com/docs/usewatch) • [Demo](https://codesandbox.io/s/react-hook-form-v7-ts-usewatch-h9i5e)\n *\n * @example\n * ```tsx\n * const { control } = useForm();\n * const values = useWatch({\n * name: \"fieldName\"\n * control,\n * })\n * ```\n */\nfunction useWatch(props) {\n const formControl = useFormControlContext();\n const { control = formControl, name, defaultValue, disabled, exact, compute, } = props || {};\n const _defaultValue = React.useRef(defaultValue);\n const _compute = React.useRef(compute);\n const _computeFormValues = React.useRef(undefined);\n const _prevControl = React.useRef(control);\n const _prevName = React.useRef(name);\n _compute.current = compute;\n const [value, updateValue] = React.useState(() => {\n const defaultValue = control._getWatch(name, _defaultValue.current);\n return _compute.current ? _compute.current(defaultValue) : defaultValue;\n });\n const getCurrentOutput = React.useCallback((values) => {\n const formValues = generateWatchOutput(name, control._names, values || control._formValues, false, _defaultValue.current);\n return _compute.current ? _compute.current(formValues) : formValues;\n }, [control._formValues, control._names, name]);\n const refreshValue = React.useCallback((values) => {\n if (!disabled) {\n const formValues = generateWatchOutput(name, control._names, values || control._formValues, false, _defaultValue.current);\n if (_compute.current) {\n const computedFormValues = _compute.current(formValues);\n if (!deepEqual(computedFormValues, _computeFormValues.current)) {\n updateValue(computedFormValues);\n _computeFormValues.current = computedFormValues;\n }\n }\n else {\n updateValue(formValues);\n }\n }\n }, [control._formValues, control._names, disabled, name]);\n useIsomorphicLayoutEffect(() => {\n if (_prevControl.current !== control ||\n !deepEqual(_prevName.current, name)) {\n _prevControl.current = control;\n _prevName.current = name;\n refreshValue();\n }\n return control._subscribe({\n name,\n formState: {\n values: true,\n },\n exact,\n callback: (formState) => {\n refreshValue(formState.values);\n },\n });\n }, [control, exact, name, refreshValue]);\n React.useEffect(() => control._removeUnmounted());\n // If name or control changed for this render, synchronously reflect the\n // latest value so callers (like useController) see the correct value\n // immediately on the same render.\n // Optimize: Check control reference first before expensive deepEqual\n const controlChanged = _prevControl.current !== control;\n const prevName = _prevName.current;\n // Cache the computed output to avoid duplicate calls within the same render\n // We include shouldReturnImmediate in deps to ensure proper recomputation\n const computedOutput = React.useMemo(() => {\n if (disabled) {\n return null;\n }\n const nameChanged = !controlChanged && !deepEqual(prevName, name);\n const shouldReturnImmediate = controlChanged || nameChanged;\n return shouldReturnImmediate ? getCurrentOutput() : null;\n }, [disabled, controlChanged, name, prevName, getCurrentOutput]);\n return computedOutput !== null ? computedOutput : value;\n}\n\n/**\n * Custom hook to work with controlled component, this function provide you with both form and field level state. Re-render is isolated at the hook level.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/usecontroller) • [Demo](https://codesandbox.io/s/usecontroller-0o8px)\n *\n * @param props - the path name to the form field value, and validation rules.\n *\n * @returns field properties, field and form state. {@link UseControllerReturn}\n *\n * @example\n * ```tsx\n * function Input(props) {\n * const { field, fieldState, formState } = useController(props);\n * return (\n * <div>\n * <input {...field} placeholder={props.name} />\n * <p>{fieldState.isTouched && \"Touched\"}</p>\n * <p>{formState.isSubmitted ? \"submitted\" : \"\"}</p>\n * </div>\n * );\n * }\n * ```\n */\nfunction useController(props) {\n const formControl = useFormControlContext();\n const { name, disabled, control = formControl, shouldUnregister, defaultValue, exact = true, } = props;\n const isArrayField = isNameInFieldArray(control._names.array, name);\n const defaultValueMemo = React.useMemo(() => get(control._formValues, name, get(control._defaultValues, name, defaultValue)), [control, name, defaultValue]);\n const value = useWatch({\n control,\n name,\n defaultValue: defaultValueMemo,\n exact,\n });\n const formState = useFormState({\n control,\n name,\n exact,\n });\n const _props = React.useRef(props);\n const _previousNameRef = React.useRef(undefined);\n const _registerProps = React.useRef(control.register(name, {\n ...props.rules,\n value,\n ...(isBoolean(props.disabled) ? { disabled: props.disabled } : {}),\n }));\n _props.current = props;\n const fieldState = React.useMemo(() => Object.defineProperties({}, {\n invalid: {\n enumerable: true,\n get: () => !!get(formState.errors, name),\n },\n isDirty: {\n enumerable: true,\n get: () => !!get(formState.dirtyFields, name),\n },\n isTouched: {\n enumerable: true,\n get: () => !!get(formState.touchedFields, name),\n },\n isValidating: {\n enumerable: true,\n get: () => !!get(formState.validatingFields, name),\n },\n error: {\n enumerable: true,\n get: () => get(formState.errors, name),\n },\n }), [formState, name]);\n const onChange = React.useCallback((event) => _registerProps.current.onChange({\n target: {\n value: getEventValue(event),\n name: name,\n },\n type: EVENTS.CHANGE,\n }), [name]);\n const onBlur = React.useCallback(() => _registerProps.current.onBlur({\n target: {\n value: get(control._formValues, name),\n name: name,\n },\n type: EVENTS.BLUR,\n }), [name, control._formValues]);\n const ref = React.useCallback((elm) => {\n const field = get(control._fields, name);\n if (field && field._f && elm) {\n field._f.ref = {\n focus: () => isFunction(elm.focus) && elm.focus(),\n select: () => isFunction(elm.select) && elm.select(),\n setCustomValidity: (message) => isFunction(elm.setCustomValidity) && elm.setCustomValidity(message),\n reportValidity: () => isFunction(elm.reportValidity) && elm.reportValidity(),\n };\n }\n }, [control._fields, name]);\n const field = React.useMemo(() => ({\n name,\n value,\n ...(isBoolean(disabled) || formState.disabled\n ? { disabled: formState.disabled || disabled }\n : {}),\n onChange,\n onBlur,\n ref,\n }), [name, disabled, formState.disabled, onChange, onBlur, ref, value]);\n React.useEffect(() => {\n const _shouldUnregisterField = control._options.shouldUnregister || shouldUnregister;\n const previousName = _previousNameRef.current;\n if (previousName && previousName !== name && !isArrayField) {\n control.unregister(previousName);\n }\n control.register(name, {\n ..._props.current.rules,\n ...(isBoolean(_props.current.disabled)\n ? { disabled: _props.current.disabled }\n : {}),\n });\n const updateMounted = (name, value) => {\n const field = get(control._fields, name);\n if (field && field._f) {\n field._f.mount = value;\n }\n };\n updateMounted(name, true);\n if (_shouldUnregisterField) {\n const value = cloneObject(get(control._options.defaultValues, name, _props.current.defaultValue));\n set(control._defaultValues, name, value);\n if (isUndefined(get(control._formValues, name))) {\n set(control._formValues, name, value);\n }\n }\n !isArrayField && control.register(name);\n _previousNameRef.current = name;\n return () => {\n (isArrayField\n ? _shouldUnregisterField && !control._state.action\n : _shouldUnregisterField)\n ? control.unregister(name)\n : updateMounted(name, false);\n };\n }, [name, control, isArrayField, shouldUnregister]);\n React.useEffect(() => {\n control._setDisabledField({\n disabled,\n name,\n });\n }, [disabled, name, control]);\n return React.useMemo(() => ({\n field,\n formState,\n fieldState,\n }), [field, formState, fieldState]);\n}\n\n/**\n * Component based on `useController` hook to work with controlled component.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/usecontroller/controller) • [Demo](https://codesandbox.io/s/react-hook-form-v6-controller-ts-jwyzw) • [Video](https://www.youtube.com/watch?v=N2UNk_UCVyA)\n *\n * @param props - the path name to the form field value, and validation rules.\n *\n * @returns provide field handler functions, field and form state.\n *\n * @example\n * ```tsx\n * function App() {\n * const { control } = useForm<FormValues>({\n * defaultValues: {\n * test: \"\"\n * }\n * });\n *\n * return (\n * <form>\n * <Controller\n * control={control}\n * name=\"test\"\n * render={({ field: { onChange, onBlur, value, ref }, formState, fieldState }) => (\n * <>\n * <input\n * onChange={onChange} // send value to hook form\n * onBlur={onBlur} // notify when input is touched\n * value={value} // return updated value\n * ref={ref} // set ref for focus management\n * />\n * <p>{formState.isSubmitted ? \"submitted\" : \"\"}</p>\n * <p>{fieldState.isTouched ? \"touched\" : \"\"}</p>\n * </>\n * )}\n * />\n * </form>\n * );\n * }\n * ```\n */\nconst Controller = (props) => props.render(useController(props));\n\nconst flatten = (obj) => {\n const output = {};\n for (const key of Object.keys(obj)) {\n if (isObjectType(obj[key]) && obj[key] !== null) {\n const nested = flatten(obj[key]);\n for (const nestedKey of Object.keys(nested)) {\n output[`${key}.${nestedKey}`] = nested[nestedKey];\n }\n }\n else {\n output[key] = obj[key];\n }\n }\n return output;\n};\n\nconst HookFormContext = React.createContext(null);\nHookFormContext.displayName = 'HookFormContext';\n/**\n * This custom hook allows you to access the form context. useFormContext is intended to be used in deeply nested structures, where it would become inconvenient to pass the context as a prop. To be used with {@link FormProvider}.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useformcontext) • [Demo](https://codesandbox.io/s/react-hook-form-v7-form-context-ytudi)\n *\n * @returns return all useForm methods\n *\n * @example\n * ```tsx\n * function App() {\n * const methods = useForm();\n * const onSubmit = data => console.log(data);\n *\n * return (\n * <FormProvider {...methods} >\n * <form onSubmit={methods.handleSubmit(onSubmit)}>\n * <NestedInput />\n * <input type=\"submit\" />\n * </form>\n * </FormProvider>\n * );\n * }\n *\n * function NestedInput() {\n * const { register } = useFormContext(); // retrieve all hook methods\n * return <input {...register(\"test\")} />;\n * }\n * ```\n */\nconst useFormContext = () => React.useContext(HookFormContext);\n/**\n * A provider component that propagates the `useForm` methods to all children components via [React Context](https://react.dev/reference/react/useContext) API. To be used with {@link useFormContext}.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useformcontext) • [Demo](https://codesandbox.io/s/react-hook-form-v7-form-context-ytudi)\n *\n * @param props - all useForm methods\n *\n * @example\n * ```tsx\n * function App() {\n * const methods = useForm();\n * const onSubmit = data => console.log(data);\n *\n * return (\n * <FormProvider {...methods} >\n * <form onSubmit={methods.handleSubmit(onSubmit)}>\n * <NestedInput />\n * <input type=\"submit\" />\n * </form>\n * </FormProvider>\n * );\n * }\n *\n * function NestedInput() {\n * const { register } = useFormContext(); // retrieve all hook methods\n * return <input {...register(\"test\")} />;\n * }\n * ```\n */\nconst FormProvider = (props) => {\n const { children, watch, getValues, getFieldState, setError, clearErrors, setValue, trigger, formState, resetField, reset, handleSubmit, unregister, control, register, setFocus, subscribe, } = props;\n return (React.createElement(HookFormContext.Provider, { value: React.useMemo(() => ({\n watch,\n getValues,\n getFieldState,\n setError,\n clearErrors,\n setValue,\n trigger,\n formState,\n resetField,\n reset,\n handleSubmit,\n unregister,\n control,\n register,\n setFocus,\n subscribe,\n }), [\n clearErrors,\n control,\n formState,\n getFieldState,\n getValues,\n handleSubmit,\n register,\n reset,\n resetField,\n setError,\n setFocus,\n setValue,\n subscribe,\n trigger,\n unregister,\n watch,\n ]) },\n React.createElement(HookFormControlContext.Provider, { value: control }, children)));\n};\n\nconst POST_REQUEST = 'post';\n/**\n * Form component to manage submission.\n *\n * @param props - to setup submission detail. {@link FormProps}\n *\n * @returns form component or headless render prop.\n *\n * @example\n * ```tsx\n * function App() {\n * const { control, formState: { errors } } = useForm();\n *\n * return (\n * <Form action=\"/api\" control={control}>\n * <input {...register(\"name\")} />\n * <p>{errors?.root?.server && 'Server error'}</p>\n * <button>Submit</button>\n * </Form>\n * );\n * }\n * ```\n */\nfunction Form(props) {\n const methods = useFormContext();\n const [mounted, setMounted] = React.useState(false);\n const { control = methods.control, onSubmit, children, action, method = POST_REQUEST, headers, encType, onError, render, onSuccess, validateStatus, ...rest } = props;\n const submit = async (event) => {\n let hasError = false;\n let type = '';\n await control.handleSubmit(async (data) => {\n const formData = new FormData();\n let formDataJson = '';\n try {\n formDataJson = JSON.stringify(data);\n }\n catch (_a) { }\n const flattenFormValues = flatten(control._formValues);\n for (const key in flattenFormValues) {\n formData.append(key, flattenFormValues[key]);\n }\n if (onSubmit) {\n await onSubmit({\n data,\n event,\n method,\n formData,\n formDataJson,\n });\n }\n if (action) {\n try {\n const shouldStringifySubmissionData = [\n headers && headers['Content-Type'],\n encType,\n ].some((value) => value && value.includes('json'));\n const response = await fetch(String(action), {\n method,\n headers: {\n ...headers,\n ...(encType && encType !== 'multipart/form-data'\n ? { 'Content-Type': encType }\n : {}),\n },\n body: shouldStringifySubmissionData ? formDataJson : formData,\n });\n if (response &&\n (validateStatus\n ? !validateStatus(response.status)\n : response.status < 200 || response.status >= 300)) {\n hasError = true;\n onError && onError({ response });\n type = String(response.status);\n }\n else {\n onSuccess && onSuccess({ response });\n }\n }\n catch (error) {\n hasError = true;\n onError && onError({ error });\n }\n }\n })(event);\n if (hasError && props.control) {\n props.control._subjects.state.next({\n isSubmitSuccessful: false,\n });\n props.control.setError('root.server', {\n type,\n });\n }\n };\n React.useEffect(() => {\n setMounted(true);\n }, []);\n return render ? (React.createElement(React.Fragment, null, render({\n submit,\n }))) : (React.createElement(\"form\", { noValidate: mounted, action: action, method: method, encType: encType, onSubmit: submit, ...rest }, children));\n}\n\nconst FormStateSubscribe = ({ control, disabled, exact, name, render, }) => render(useFormState({ control, name, disabled, exact }));\n\nvar appendErrors = (name, validateAllFieldCriteria, errors, type, message) => validateAllFieldCriteria\n ? {\n ...errors[name],\n types: {\n ...(errors[name] && errors[name].types ? errors[name].types : {}),\n [type]: message || true,\n },\n }\n : {};\n\nvar convertToArrayPayload = (value) => (Array.isArray(value) ? value : [value]);\n\nvar createSubject = () => {\n let _observers = [];\n const next = (value) => {\n for (const observer of _observers) {\n observer.next && observer.next(value);\n }\n };\n const subscribe = (observer) => {\n _observers.push(observer);\n return {\n unsubscribe: () => {\n _observers = _observers.filter((o) => o !== observer);\n },\n };\n };\n const unsubscribe = () => {\n _observers = [];\n };\n return {\n get observers() {\n return _observers;\n },\n next,\n subscribe,\n unsubscribe,\n };\n};\n\nfunction extractFormValues(fieldsState, formValues) {\n const values = {};\n for (const key in fieldsState) {\n if (fieldsState.hasOwnProperty(key)) {\n const fieldState = fieldsState[key];\n const fieldValue = formValues[key];\n if (fieldState && isObject(fieldState) && fieldValue) {\n const nestedFieldsState = extractFormValues(fieldState, fieldValue);\n if (isObject(nestedFieldsState)) {\n values[key] = nestedFieldsState;\n }\n }\n else if (fieldsState[key]) {\n values[key] = fieldValue;\n }\n }\n }\n return values;\n}\n\nvar isEmptyObject = (value) => isObject(value) && !Object.keys(value).length;\n\nvar isFileInput = (element) => element.type === 'file';\n\nvar isHTMLElement = (value) => {\n if (!isWeb) {\n return false;\n }\n const owner = value ? value.ownerDocument : 0;\n return (value instanceof\n (owner && owner.defaultView ? owner.defaultView.HTMLElement : HTMLElement));\n};\n\nvar isMultipleSelect = (element) => element.type === `select-multiple`;\n\nvar isRadioInput = (element) => element.type === 'radio';\n\nvar isRadioOrCheckbox = (ref) => isRadioInput(ref) || isCheckBoxInput(ref);\n\nvar live = (ref) => isHTMLElement(ref) && ref.isConnected;\n\nfunction baseGet(object, updatePath) {\n const length = updatePath.slice(0, -1).length;\n let index = 0;\n while (index < length) {\n object = isUndefined(object) ? index++ : object[updatePath[index++]];\n }\n return object;\n}\nfunction isEmptyArray(obj) {\n for (const key in obj) {\n if (obj.hasOwnProperty(key) && !isUndefined(obj[key])) {\n return false;\n }\n }\n return true;\n}\nfunction unset(object, path) {\n const paths = Array.isArray(path)\n ? path\n : isKey(path)\n ? [path]\n : stringToPath(path);\n const childObject = paths.length === 1 ? object : baseGet(object, paths);\n const index = paths.length - 1;\n const key = paths[index];\n if (childObject) {\n delete childObject[key];\n }\n if (index !== 0 &&\n ((isObject(childObject) && isEmptyObject(childObject)) ||\n (Array.isArray(childObject) && isEmptyArray(childObject)))) {\n unset(object, paths.slice(0, -1));\n }\n return object;\n}\n\nvar objectHasFunction = (data) => {\n for (const key in data) {\n if (isFunction(data[key])) {\n return true;\n }\n }\n return false;\n};\n\nfunction isTraversable(value) {\n return Array.isArray(value) || (isObject(value) && !objectHasFunction(value));\n}\nfunction markFieldsDirty(data, fields = {}) {\n for (const key in data) {\n const value = data[key];\n if (isTraversable(value)) {\n fields[key] = Array.isArray(value) ? [] : {};\n markFieldsDirty(value, fields[key]);\n }\n else if (!isUndefined(value)) {\n fields[key] = true;\n }\n }\n return fields;\n}\nfunction getDirtyFields(data, formValues, dirtyFieldsFromValues) {\n if (!dirtyFieldsFromValues) {\n dirtyFieldsFromValues = markFieldsDirty(formValues);\n }\n for (const key in data) {\n const value = data[key];\n if (isTraversable(value)) {\n if (isUndefined(formValues) || isPrimitive(dirtyFieldsFromValues[key])) {\n dirtyFieldsFromValues[key] = markFieldsDirty(value, Array.isArray(value) ? [] : {});\n }\n else {\n getDirtyFields(value, isNullOrUndefined(formValues) ? {} : formValues[key], dirtyFieldsFromValues[key]);\n }\n }\n else {\n const formValue = formValues[key];\n dirtyFieldsFromValues[key] = !deepEqual(value, formValue);\n }\n }\n return dirtyFieldsFromValues;\n}\n\nconst defaultResult = {\n value: false,\n isValid: false,\n};\nconst validResult = { value: true, isValid: true };\nvar getCheckboxValue = (options) => {\n if (Array.isArray(options)) {\n if (options.length > 1) {\n const values = options\n .filter((option) => option && option.checked && !option.disabled)\n .map((option) => option.value);\n return { value: values, isValid: !!values.length };\n }\n return options[0].checked && !options[0].disabled\n ? // @ts-expect-error expected to work in the browser\n options[0].attributes && !isUndefined(options[0].attributes.value)\n ? isUndefined(options[0].value) || options[0].value === ''\n ? validResult\n : { value: options[0].value, isValid: true }\n : validResult\n : defaultResult;\n }\n return defaultResult;\n};\n\nvar getFieldValueAs = (value, { valueAsNumber, valueAsDate, setValueAs }) => isUndefined(value)\n ? value\n : valueAsNumber\n ? value === ''\n ? NaN\n : value\n ? +value\n : value\n : valueAsDate && isString(value)\n ? new Date(value)\n : setValueAs\n ? setValueAs(value)\n : value;\n\nconst defaultReturn = {\n isValid: false,\n value: null,\n};\nvar getRadioValue = (options) => Array.isArray(options)\n ? options.reduce((previous, option) => option && option.checked && !option.disabled\n ? {\n isValid: true,\n value: option.value,\n }\n : previous, defaultReturn)\n : defaultReturn;\n\nfunction getFieldValue(_f) {\n const ref = _f.ref;\n if (isFileInput(ref)) {\n return ref.files;\n }\n if (isRadioInput(ref)) {\n return getRadioValue(_f.refs).value;\n }\n if (isMultipleSelect(ref)) {\n return [...ref.selectedOptions].map(({ value }) => value);\n }\n if (isCheckBoxInput(ref)) {\n return getCheckboxValue(_f.refs).value;\n }\n return getFieldValueAs(isUndefined(ref.value) ? _f.ref.value : ref.value, _f);\n}\n\nvar getResolverOptions = (fieldsNames, _fields, criteriaMode, shouldUseNativeValidation) => {\n const fields = {};\n for (const name of fieldsNames) {\n const field = get(_fields, name);\n field && set(fields, name, field._f);\n }\n return {\n criteriaMode,\n names: [...fieldsNames],\n fields,\n shouldUseNativeValidation,\n };\n};\n\nvar isRegex = (value) => value instanceof RegExp;\n\nvar getRuleValue = (rule) => isUndefined(rule)\n ? rule\n : isRegex(rule)\n ? rule.source\n : isObject(rule)\n ? isRegex(rule.value)\n ? rule.value.source\n : rule.value\n : rule;\n\nvar getValidationModes = (mode) => ({\n isOnSubmit: !mode || mode === VALIDATION_MODE.onSubmit,\n isOnBlur: mode === VALIDATION_MODE.onBlur,\n isOnChange: mode === VALIDATION_MODE.onChange,\n isOnAll: mode === VALIDATION_MODE.all,\n isOnTouch: mode === VALIDATION_MODE.onTouched,\n});\n\nconst ASYNC_FUNCTION = 'AsyncFunction';\nvar hasPromiseValidation = (fieldReference) => !!fieldReference &&\n !!fieldReference.validate &&\n !!((isFunction(fieldReference.validate) &&\n fieldReference.validate.constructor.name === ASYNC_FUNCTION) ||\n (isObject(fieldReference.validate) &&\n Object.values(fieldReference.validate).find((validateFunction) => validateFunction.constructor.name === ASYNC_FUNCTION)));\n\nvar hasValidation = (options) => options.mount &&\n (options.required ||\n options.min ||\n options.max ||\n options.maxLength ||\n options.minLength ||\n options.pattern ||\n options.validate);\n\nvar isWatched = (name, _names, isBlurEvent) => !isBlurEvent &&\n (_names.watchAll ||\n _names.watch.has(name) ||\n [..._names.watch].some((watchName) => name.startsWith(watchName) &&\n /^\\.\\w+/.test(name.slice(watchName.length))));\n\nconst iterateFieldsByAction = (fields, action, fieldsNames, abortEarly) => {\n for (const key of fieldsNames || Object.keys(fields)) {\n const field = get(fields, key);\n if (field) {\n const { _f, ...currentField } = field;\n if (_f) {\n if (_f.refs && _f.refs[0] && action(_f.refs[0], key) && !abortEarly) {\n return true;\n }\n else if (_f.ref && action(_f.ref, _f.name) && !abortEarly) {\n return true;\n }\n else {\n if (iterateFieldsByAction(currentField, action)) {\n break;\n }\n }\n }\n else if (isObject(currentField)) {\n if (iterateFieldsByAction(currentField, action)) {\n break;\n }\n }\n }\n }\n return;\n};\n\nfunction schemaErrorLookup(errors, _fields, name) {\n const error = get(errors, name);\n if (error || isKey(name)) {\n return {\n error,\n name,\n };\n }\n const names = name.split('.');\n while (names.length) {\n const fieldName = names.join('.');\n const field = get(_fields, fieldName);\n const foundError = get(errors, fieldName);\n if (field && !Array.isArray(field) && name !== fieldName) {\n return { name };\n }\n if (foundError && foundError.type) {\n return {\n name: fieldName,\n error: foundError,\n };\n }\n if (foundError && foundError.root && foundError.root.type) {\n return {\n name: `${fieldName}.root`,\n error: foundError.root,\n };\n }\n names.pop();\n }\n return {\n name,\n };\n}\n\nvar shouldRenderFormState = (formStateData, _proxyFormState, updateFormState, isRoot) => {\n updateFormState(formStateData);\n const { name, ...formState } = formStateData;\n return (isEmptyObject(formState) ||\n Object.keys(formState).length >= Object.keys(_proxyFormState).length ||\n Object.keys(formState).find((key) => _proxyFormState[key] ===\n (!isRoot || VALIDATION_MODE.all)));\n};\n\nvar shouldSubscribeByName = (name, signalName, exact) => !name ||\n !signalName ||\n name === signalName ||\n convertToArrayPayload(name).some((currentName) => currentName &&\n (exact\n ? currentName === signalName\n : currentName.startsWith(signalName) ||\n signalName.startsWith(currentName)));\n\nvar skipValidation = (isBlurEvent, isTouched, isSubmitted, reValidateMode, mode) => {\n if (mode.isOnAll) {\n return false;\n }\n else if (!isSubmitted && mode.isOnTouch) {\n return !(isTouched || isBlurEvent);\n }\n else if (isSubmitted ? reValidateMode.isOnBlur : mode.isOnBlur) {\n return !isBlurEvent;\n }\n else if (isSubmitted ? reValidateMode.isOnChange : mode.isOnChange) {\n return isBlurEvent;\n }\n return true;\n};\n\nvar unsetEmptyArray = (ref, name) => !compact(get(ref, name)).length && unset(ref, name);\n\nvar updateFieldArrayRootError = (errors, error, name) => {\n const fieldArrayErrors = convertToArrayPayload(get(errors, name));\n set(fieldArrayErrors, 'root', error[name]);\n set(errors, name, fieldArrayErrors);\n return errors;\n};\n\nfunction getValidateError(result, ref, type = 'validate') {\n if (isString(result) ||\n (Array.isArray(result) && result.every(isString)) ||\n (isBoolean(result) && !result)) {\n return {\n type,\n message: isString(result) ? result : '',\n ref,\n };\n }\n}\n\nvar getValueAndMessage = (validationData) => isObject(validationData) && !isRegex(validationData)\n ? validationData\n : {\n value: validationData,\n message: '',\n };\n\nvar validateField = async (field, disabledFieldNames, formValues, validateAllFieldCriteria, shouldUseNativeValidation, isFieldArray) => {\n const { ref, refs, required, maxLength, minLength, min, max, pattern, validate, name, valueAsNumber, mount, } = field._f;\n const inputValue = get(formValues, name);\n if (!mount || disabledFieldNames.has(name)) {\n return {};\n }\n const inputRef = refs ? refs[0] : ref;\n const setCustomValidity = (message) => {\n if (shouldUseNativeValidation && inputRef.reportValidity) {\n inputRef.setCustomValidity(isBoolean(message) ? '' : message || '');\n inputRef.reportValidity();\n }\n };\n const error = {};\n const isRadio = isRadioInput(ref);\n const isCheckBox = isCheckBoxInput(ref);\n const isRadioOrCheckbox = isRadio || isCheckBox;\n const isEmpty = ((valueAsNumber || isFileInput(ref)) &&\n isUndefined(ref.value) &&\n isUndefined(inputValue)) ||\n (isHTMLElement(ref) && ref.value === '') ||\n inputValue === '' ||\n (Array.isArray(inputValue) && !inputValue.length);\n const appendErrorsCurry = appendErrors.bind(null, name, validateAllFieldCriteria, error);\n const getMinMaxMessage = (exceedMax, maxLengthMessage, minLengthMessage, maxType = INPUT_VALIDATION_RULES.maxLength, minType = INPUT_VALIDATION_RULES.minLength) => {\n const message = exceedMax ? maxLengthMessage : minLengthMessage;\n error[name] = {\n type: exceedMax ? maxType : minType,\n message,\n ref,\n ...appendErrorsCurry(exceedMax ? maxType : minType, message),\n };\n };\n if (isFieldArray\n ? !Array.isArray(inputValue) || !inputValue.length\n : required &&\n ((!isRadioOrCheckbox && (isEmpty || isNullOrUndefined(inputValue))) ||\n (isBoolean(inputValue) && !inputValue) ||\n (isCheckBox && !getCheckboxValue(refs).isValid) ||\n (isRadio && !getRadioValue(refs).isValid))) {\n const { value, message } = isString(required)\n ? { value: !!required, message: required }\n : getValueAndMessage(required);\n if (value) {\n error[name] = {\n type: INPUT_VALIDATION_RULES.required,\n message,\n ref: inputRef,\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.required, message),\n };\n if (!validateAllFieldCriteria) {\n setCustomValidity(message);\n return error;\n }\n }\n }\n if (!isEmpty && (!isNullOrUndefined(min) || !isNullOrUndefined(max))) {\n let exceedMax;\n let exceedMin;\n const maxOutput = getValueAndMessage(max);\n const minOutput = getValueAndMessage(min);\n if (!isNullOrUndefined(inputValue) && !isNaN(inputValue)) {\n const valueNumber = ref.valueAsNumber ||\n (inputValue ? +inputValue : inputValue);\n if (!isNullOrUndefined(maxOutput.value)) {\n exceedMax = valueNumber > maxOutput.value;\n }\n if (!isNullOrUndefined(minOutput.value)) {\n exceedMin = valueNumber < minOutput.value;\n }\n }\n else {\n const valueDate = ref.valueAsDate || new Date(inputValue);\n const convertTimeToDate = (time) => new Date(new Date().toDateString() + ' ' + time);\n const isTime = ref.type == 'time';\n const isWeek = ref.type == 'week';\n if (isString(maxOutput.value) && inputValue) {\n exceedMax = isTime\n ? convertTimeToDate(inputValue) > convertTimeToDate(maxOutput.value)\n : isWeek\n ? inputValue > maxOutput.value\n : valueDate > new Date(maxOutput.value);\n }\n if (isString(minOutput.value) && inputValue) {\n exceedMin = isTime\n ? convertTimeToDate(inputValue) < convertTimeToDate(minOutput.value)\n : isWeek\n ? inputValue < minOutput.value\n : valueDate < new Date(minOutput.value);\n }\n }\n if (exceedMax || exceedMin) {\n getMinMaxMessage(!!exceedMax, maxOutput.message, minOutput.message, INPUT_VALIDATION_RULES.max, INPUT_VALIDATION_RULES.min);\n if (!validateAllFieldCriteria) {\n setCustomValidity(error[name].message);\n return error;\n }\n }\n }\n if ((maxLength || minLength) &&\n !isEmpty &&\n (isString(inputValue) || (isFieldArray && Array.isArray(inputValue)))) {\n const maxLengthOutput = getValueAndMessage(maxLength);\n const minLengthOutput = getValueAndMessage(minLength);\n const exceedMax = !isNullOrUndefined(maxLengthOutput.value) &&\n inputValue.length > +maxLengthOutput.value;\n const exceedMin = !isNullOrUndefined(minLengthOutput.value) &&\n inputValue.length < +minLengthOutput.value;\n if (exceedMax || exceedMin) {\n getMinMaxMessage(exceedMax, maxLengthOutput.message, minLengthOutput.message);\n if (!validateAllFieldCriteria) {\n setCustomValidity(error[name].message);\n return error;\n }\n }\n }\n if (pattern && !isEmpty && isString(inputValue)) {\n const { value: patternValue, message } = getValueAndMessage(pattern);\n if (isRegex(patternValue) && !inputValue.match(patternValue)) {\n error[name] = {\n type: INPUT_VALIDATION_RULES.pattern,\n message,\n ref,\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.pattern, message),\n };\n if (!validateAllFieldCriteria) {\n setCustomValidity(message);\n return error;\n }\n }\n }\n if (validate) {\n if (isFunction(validate)) {\n const result = await validate(inputValue, formValues);\n const validateError = getValidateError(result, inputRef);\n if (validateError) {\n error[name] = {\n ...validateError,\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.validate, validateError.message),\n };\n if (!validateAllFieldCriteria) {\n setCustomValidity(validateError.message);\n return error;\n }\n }\n }\n else if (isObject(validate)) {\n let validationResult = {};\n for (const key in validate) {\n if (!isEmptyObject(validationResult) && !validateAllFieldCriteria) {\n break;\n }\n const validateError = getValidateError(await validate[key](inputValue, formValues), inputRef, key);\n if (validateError) {\n validationResult = {\n ...validateError,\n ...appendErrorsCurry(key, validateError.message),\n };\n setCustomValidity(validateError.message);\n if (validateAllFieldCriteria) {\n error[name] = validationResult;\n }\n }\n }\n if (!isEmptyObject(validationResult)) {\n error[name] = {\n ref: inputRef,\n ...validationResult,\n };\n if (!validateAllFieldCriteria) {\n return error;\n }\n }\n }\n }\n setCustomValidity(true);\n return error;\n};\n\nconst defaultOptions = {\n mode: VALIDATION_MODE.onSubmit,\n reValidateMode: VALIDATION_MODE.onChange,\n shouldFocusError: true,\n};\nfunction createFormControl(props = {}) {\n let _options = {\n ...defaultOptions,\n ...props,\n };\n let _formState = {\n submitCount: 0,\n isDirty: false,\n isReady: false,\n isLoading: isFunction(_options.defaultValues),\n isValidating: false,\n isSubmitted: false,\n isSubmitting: false,\n isSubmitSuccessful: false,\n isValid: false,\n touchedFields: {},\n dirtyFields: {},\n validatingFields: {},\n errors: _options.errors || {},\n disabled: _options.disabled || false,\n };\n let _fields = {};\n let _defaultValues = isObject(_options.defaultValues) || isObject(_options.values)\n ? cloneObject(_options.defaultValues || _options.values) || {}\n : {};\n let _formValues = _options.shouldUnregister\n ? {}\n : cloneObject(_defaultValues);\n let _state = {\n action: false,\n mount: false,\n watch: false,\n keepIsValid: false,\n };\n let _names = {\n mount: new Set(),\n disabled: new Set(),\n unMount: new Set(),\n array: new Set(),\n watch: new Set(),\n };\n let delayErrorCallback;\n let timer = 0;\n const defaultProxyFormState = {\n isDirty: false,\n dirtyFields: false,\n validatingFields: false,\n touchedFields: false,\n isValidating: false,\n isValid: false,\n errors: false,\n };\n const _proxyFormState = {\n ...defaultProxyFormState,\n };\n let _proxySubscribeFormState = {\n ..._proxyFormState,\n };\n const _subjects = {\n array: createSubject(),\n state: createSubject(),\n };\n const shouldDisplayAllAssociatedErrors = _options.criteriaMode === VALIDATION_MODE.all;\n const debounce = (callback) => (wait) => {\n clearTimeout(timer);\n timer = setTimeout(callback, wait);\n };\n const _setValid = async (shouldUpdateValid) => {\n if (_state.keepIsValid) {\n return;\n }\n if (!_options.disabled &&\n (_proxyFormState.isValid ||\n _proxySubscribeFormState.isValid ||\n shouldUpdateValid)) {\n let isValid;\n if (_options.resolver) {\n isValid = isEmptyObject((await _runSchema()).errors);\n _updateIsValidating();\n }\n else {\n isValid = await executeBuiltInValidation(_fields, true);\n }\n if (isValid !== _formState.isValid) {\n _subjects.state.next({\n isValid,\n });\n }\n }\n };\n const _updateIsValidating = (names, isValidating) => {\n if (!_options.disabled &&\n (_proxyFormState.isValidating ||\n _proxyFormState.validatingFields ||\n _proxySubscribeFormState.isValidating ||\n _proxySubscribeFormState.validatingFields)) {\n (names || Array.from(_names.mount)).forEach((name) => {\n if (name) {\n isValidating\n ? set(_formState.validatingFields, name, isValidating)\n : unset(_formState.validatingFields, name);\n }\n });\n _subjects.state.next({\n validatingFields: _formState.validatingFields,\n isValidating: !isEmptyObject(_formState.validatingFields),\n });\n }\n };\n const _setFieldArray = (name, values = [], method, args, shouldSetValues = true, shouldUpdateFieldsAndState = true) => {\n if (args && method && !_options.disabled) {\n _state.action = true;\n if (shouldUpdateFieldsAndState && Array.isArray(get(_fields, name))) {\n const fieldValues = method(get(_fields, name), args.argA, args.argB);\n shouldSetValues && set(_fields, name, fieldValues);\n }\n if (shouldUpdateFieldsAndState &&\n Array.isArray(get(_formState.errors, name))) {\n const errors = method(get(_formState.errors, name), args.argA, args.argB);\n shouldSetValues && set(_formState.errors, name, errors);\n unsetEmptyArray(_formState.errors, name);\n }\n if ((_proxyFormState.touchedFields ||\n _proxySubscribeFormState.touchedFields) &&\n shouldUpdateFieldsAndState &&\n Array.isArray(get(_formState.touchedFields, name))) {\n const touchedFields = method(get(_formState.touchedFields, name), args.argA, args.argB);\n shouldSetValues && set(_formState.touchedFields, name, touchedFields);\n }\n if (_proxyFormState.dirtyFields || _proxySubscribeFormState.dirtyFields) {\n _formState.dirtyFields = getDirtyFields(_defaultValues, _formValues);\n }\n _subjects.state.next({\n name,\n isDirty: _getDirty(name, values),\n dirtyFields: _formState.dirtyFields,\n errors: _formState.errors,\n isValid: _formState.isValid,\n });\n }\n else {\n set(_formValues, name, values);\n }\n };\n const updateErrors = (name, error) => {\n set(_formState.errors, name, error);\n _subjects.state.next({\n errors: _formState.errors,\n });\n };\n const _setErrors = (errors) => {\n _formState.errors = errors;\n _subjects.state.next({\n errors: _formState.errors,\n isValid: false,\n });\n };\n const updateValidAndValue = (name, shouldSkipSetValueAs, value, ref) => {\n const field = get(_fields, name);\n if (field) {\n const defaultValue = get(_formValues, name, isUndefined(value) ? get(_defaultValues, name) : value);\n isUndefined(defaultValue) ||\n (ref && ref.defaultChecked) ||\n shouldSkipSetValueAs\n ? set(_formValues, name, shouldSkipSetValueAs ? defaultValue : getFieldValue(field._f))\n : setFieldValue(name, defaultValue);\n _state.mount && !_state.action && _setValid();\n }\n };\n const updateTouchAndDirty = (name, fieldValue, isBlurEvent, shouldDirty, shouldRender) => {\n let shouldUpdateField = false;\n let isPreviousDirty = false;\n const output = {\n name,\n };\n if (!_options.disabled) {\n if (!isBlurEvent || shouldDirty) {\n if (_proxyFormState.isDirty || _proxySubscribeFormState.isDirty) {\n isPreviousDirty = _formState.isDirty;\n _formState.isDirty = output.isDirty = _getDirty();\n shouldUpdateField = isPreviousDirty !== output.isDirty;\n }\n const isCurrentFieldPristine = deepEqual(get(_defaultValues, name), fieldValue);\n isPreviousDirty = !!get(_formState.dirtyFields, name);\n isCurrentFieldPristine\n ? unset(_formState.dirtyFields, name)\n : set(_formState.dirtyFields, name, true);\n output.dirtyFields = _formState.dirtyFields;\n shouldUpdateField =\n shouldUpdateField ||\n ((_proxyFormState.dirtyFields ||\n _proxySubscribeFormState.dirtyFields) &&\n isPreviousDirty !== !isCurrentFieldPristine);\n }\n if (isBlurEvent) {\n const isPreviousFieldTouched = get(_formState.touchedFields, name);\n if (!isPreviousFieldTouched) {\n set(_formState.touchedFields, name, isBlurEvent);\n output.touchedFields = _formState.touchedFields;\n shouldUpdateField =\n shouldUpdateField ||\n ((_proxyFormState.touchedFields ||\n _proxySubscribeFormState.touchedFields) &&\n isPreviousFieldTouched !== isBlurEvent);\n }\n }\n shouldUpdateField && shouldRender && _subjects.state.next(output);\n }\n return shouldUpdateField ? output : {};\n };\n const shouldRenderByError = (name, isValid, error, fieldState) => {\n const previousFieldError = get(_formState.errors, name);\n const shouldUpdateValid = (_proxyFormState.isValid || _proxySubscribeFormState.isValid) &&\n isBoolean(isValid) &&\n _formState.isValid !== isValid;\n if (_options.delayError && error) {\n delayErrorCallback = debounce(() => updateErrors(name, error));\n delayErrorCallback(_options.delayError);\n }\n else {\n clearTimeout(timer);\n delayErrorCallback = null;\n error\n ? set(_formState.errors, name, error)\n : unset(_formState.errors, name);\n }\n if ((error ? !deepEqual(previousFieldError, error) : previousFieldError) ||\n !isEmptyObject(fieldState) ||\n shouldUpdateValid) {\n const updatedFormState = {\n ...fieldState,\n ...(shouldUpdateValid && isBoolean(isValid) ? { isValid } : {}),\n errors: _formState.errors,\n name,\n };\n _formState = {\n ..._formState,\n ...updatedFormState,\n };\n _subjects.state.next(updatedFormState);\n }\n };\n const _runSchema = async (name) => {\n _updateIsValidating(name, true);\n const result = await _options.resolver(_formValues, _options.context, getResolverOptions(name || _names.mount, _fields, _options.criteriaMode, _options.shouldUseNativeValidation));\n return result;\n };\n const executeSchemaAndUpdateState = async (names) => {\n const { errors } = await _runSchema(names);\n _updateIsValidating(names);\n if (names) {\n for (const name of names) {\n const error = get(errors, name);\n error\n ? set(_formState.errors, name, error)\n : unset(_formState.errors, name);\n }\n }\n else {\n _formState.errors = errors;\n }\n return errors;\n };\n const executeBuiltInValidation = async (fields, shouldOnlyCheckValid, context = {\n valid: true,\n }) => {\n for (const name in fields) {\n const field = fields[name];\n if (field) {\n const { _f, ...fieldValue } = field;\n if (_f) {\n const isFieldArrayRoot = _names.array.has(_f.name);\n const isPromiseFunction = field._f && hasPromiseValidation(field._f);\n if (isPromiseFunction && _proxyFormState.validatingFields) {\n _updateIsValidating([_f.name], true);\n }\n const fieldError = await validateField(field, _names.disabled, _formValues, shouldDisplayAllAssociatedErrors, _options.shouldUseNativeValidation && !shouldOnlyCheckValid, isFieldArrayRoot);\n if (isPromiseFunction && _proxyFormState.validatingFields) {\n _updateIsValidating([_f.name]);\n }\n if (fieldError[_f.name]) {\n context.valid = false;\n if (shouldOnlyCheckValid || props.shouldUseNativeValidation) {\n break;\n }\n }\n !shouldOnlyCheckValid &&\n (get(fieldError, _f.name)\n ? isFieldArrayRoot\n ? updateFieldArrayRootError(_formState.errors, fieldError, _f.name)\n : set(_formState.errors, _f.name, fieldError[_f.name])\n : unset(_formState.errors, _f.name));\n }\n !isEmptyObject(fieldValue) &&\n (await executeBuiltInValidation(fieldValue, shouldOnlyCheckValid, context));\n }\n }\n return context.valid;\n };\n const _removeUnmounted = () => {\n for (const name of _names.unMount) {\n const field = get(_fields, name);\n field &&\n (field._f.refs\n ? field._f.refs.every((ref) => !live(ref))\n : !live(field._f.ref)) &&\n unregister(name);\n }\n _names.unMount = new Set();\n };\n const _getDirty = (name, data) => !_options.disabled &&\n (name && data && set(_formValues, name, data),\n !deepEqual(getValues(), _defaultValues));\n const _getWatch = (names, defaultValue, isGlobal) => generateWatchOutput(names, _names, {\n ...(_state.mount\n ? _formValues\n : isUndefined(defaultValue)\n ? _defaultValues\n : isString(names)\n ? { [names]: defaultValue }\n : defaultValue),\n }, isGlobal, defaultValue);\n const _getFieldArray = (name) => compact(get(_state.mount ? _formValues : _defaultValues, name, _options.shouldUnregister ? get(_defaultValues, name, []) : []));\n const setFieldValue = (name, value, options = {}) => {\n const field = get(_fields, name);\n let fieldValue = value;\n if (field) {\n const fieldReference = field._f;\n if (fieldReference) {\n !fieldReference.disabled &&\n set(_formValues, name, getFieldValueAs(value, fieldReference));\n fieldValue =\n isHTMLElement(fieldReference.ref) && isNullOrUndefined(value)\n ? ''\n : value;\n if (isMultipleSelect(fieldReference.ref)) {\n [...fieldReference.ref.options].forEach((optionRef) => (optionRef.selected = fieldValue.includes(optionRef.value)));\n }\n else if (fieldReference.refs) {\n if (isCheckBoxInput(fieldReference.ref)) {\n fieldReference.refs.forEach((checkboxRef) => {\n if (!checkboxRef.defaultChecked || !checkboxRef.disabled) {\n if (Array.isArray(fieldValue)) {\n checkboxRef.checked = !!fieldValue.find((data) => data === checkboxRef.value);\n }\n else {\n checkboxRef.checked =\n fieldValue === checkboxRef.value || !!fieldValue;\n }\n }\n });\n }\n else {\n fieldReference.refs.forEach((radioRef) => (radioRef.checked = radioRef.value === fieldValue));\n }\n }\n else if (isFileInput(fieldReference.ref)) {\n fieldReference.ref.value = '';\n }\n else {\n fieldReference.ref.value = fieldValue;\n if (!fieldReference.ref.type) {\n _subjects.state.next({\n name,\n values: cloneObject(_formValues),\n });\n }\n }\n }\n }\n (options.shouldDirty || options.shouldTouch) &&\n updateTouchAndDirty(name, fieldValue, options.shouldTouch, options.shouldDirty, true);\n options.shouldValidate && trigger(name);\n };\n const setValues = (name, value, options) => {\n for (const fieldKey in value) {\n if (!value.hasOwnProperty(fieldKey)) {\n return;\n }\n const fieldValue = value[fieldKey];\n const fieldName = name + '.' + fieldKey;\n const field = get(_fields, fieldName);\n (_names.array.has(name) ||\n isObject(fieldValue) ||\n (field && !field._f)) &&\n !isDateObject(fieldValue)\n ? setValues(fieldName, fieldValue, options)\n : setFieldValue(fieldName, fieldValue, options);\n }\n };\n const setValue = (name, value, options = {}) => {\n const field = get(_fields, name);\n const isFieldArray = _names.array.has(name);\n const cloneValue = cloneObject(value);\n set(_formValues, name, cloneValue);\n if (isFieldArray) {\n _subjects.array.next({\n name,\n values: cloneObject(_formValues),\n });\n if ((_proxyFormState.isDirty ||\n _proxyFormState.dirtyFields ||\n _proxySubscribeFormState.isDirty ||\n _proxySubscribeFormState.dirtyFields) &&\n options.shouldDirty) {\n _subjects.state.next({\n name,\n dirtyFields: getDirtyFields(_defaultValues, _formValues),\n isDirty: _getDirty(name, cloneValue),\n });\n }\n }\n else {\n field && !field._f && !isNullOrUndefined(cloneValue)\n ? setValues(name, cloneValue, options)\n : setFieldValue(name, cloneValue, options);\n }\n if (isWatched(name, _names)) {\n _subjects.state.next({\n ..._formState,\n name,\n values: cloneObject(_formValues),\n });\n }\n else {\n _subjects.state.next({\n name: _state.mount ? name : undefined,\n values: cloneObject(_formValues),\n });\n }\n };\n const onChange = async (event) => {\n _state.mount = true;\n const target = event.target;\n let name = target.name;\n let isFieldValueUpdated = true;\n const field = get(_fields, name);\n const _updateIsFieldValueUpdated = (fieldValue) => {\n isFieldValueUpdated =\n Number.isNaN(fieldValue) ||\n (isDateObject(fieldValue) && isNaN(fieldValue.getTime())) ||\n deepEqual(fieldValue, get(_formValues, name, fieldValue));\n };\n const validationModeBeforeSubmit = getValidationModes(_options.mode);\n const validationModeAfterSubmit = getValidationModes(_options.reValidateMode);\n if (field) {\n let error;\n let isValid;\n const fieldValue = target.type\n ? getFieldValue(field._f)\n : getEventValue(event);\n const isBlurEvent = event.type === EVENTS.BLUR || event.type === EVENTS.FOCUS_OUT;\n const shouldSkipValidation = (!hasValidation(field._f) &&\n !_options.resolver &&\n !get(_formState.errors, name) &&\n !field._f.deps) ||\n skipValidation(isBlurEvent, get(_formState.touchedFields, name), _formState.isSubmitted, validationModeAfterSubmit, validationModeBeforeSubmit);\n const watched = isWatched(name, _names, isBlurEvent);\n set(_formValues, name, fieldValue);\n if (isBlurEvent) {\n if (!target || !target.readOnly) {\n field._f.onBlur && field._f.onBlur(event);\n delayErrorCallback && delayErrorCallback(0);\n }\n }\n else if (field._f.onChange) {\n field._f.onChange(event);\n }\n const fieldState = updateTouchAndDirty(name, fieldValue, isBlurEvent);\n const shouldRender = !isEmptyObject(fieldState) || watched;\n !isBlurEvent &&\n _subjects.state.next({\n name,\n type: event.type,\n values: cloneObject(_formValues),\n });\n if (shouldSkipValidation) {\n if (_proxyFormState.isValid || _proxySubscribeFormState.isValid) {\n if (_options.mode === 'onBlur') {\n if (isBlurEvent) {\n _setValid();\n }\n }\n else if (!isBlurEvent) {\n _setValid();\n }\n }\n return (shouldRender &&\n _subjects.state.next({ name, ...(watched ? {} : fieldState) }));\n }\n !isBlurEvent && watched && _subjects.state.next({ ..._formState });\n if (_options.resolver) {\n const { errors } = await _runSchema([name]);\n _updateIsValidating([name]);\n _updateIsFieldValueUpdated(fieldValue);\n if (isFieldValueUpdated) {\n const previousErrorLookupResult = schemaErrorLookup(_formState.errors, _fields, name);\n const errorLookupResult = schemaErrorLookup(errors, _fields, previousErrorLookupResult.name || name);\n error = errorLookupResult.error;\n name = errorLookupResult.name;\n isValid = isEmptyObject(errors);\n }\n }\n else {\n _updateIsValidating([name], true);\n error = (await validateField(field, _names.disabled, _formValues, shouldDisplayAllAssociatedErrors, _options.shouldUseNativeValidation))[name];\n _updateIsValidating([name]);\n _updateIsFieldValueUpdated(fieldValue);\n if (isFieldValueUpdated) {\n if (error) {\n isValid = false;\n }\n else if (_proxyFormState.isValid ||\n _proxySubscribeFormState.isValid) {\n isValid = await executeBuiltInValidation(_fields, true);\n }\n }\n }\n if (isFieldValueUpdated) {\n field._f.deps &&\n (!Array.isArray(field._f.deps) || field._f.deps.length > 0) &&\n trigger(field._f.deps);\n shouldRenderByError(name, isValid, error, fieldState);\n }\n }\n };\n const _focusInput = (ref, key) => {\n if (get(_formState.errors, key) && ref.focus) {\n ref.focus();\n return 1;\n }\n return;\n };\n const trigger = async (name, options = {}) => {\n let isValid;\n let validationResult;\n const fieldNames = convertToArrayPayload(name);\n if (_options.resolver) {\n const errors = await executeSchemaAndUpdateState(isUndefined(name) ? name : fieldNames);\n isValid = isEmptyObject(errors);\n validationResult = name\n ? !fieldNames.some((name) => get(errors, name))\n : isValid;\n }\n else if (name) {\n validationResult = (await Promise.all(fieldNames.map(async (fieldName) => {\n const field = get(_fields, fieldName);\n return await executeBuiltInValidation(field && field._f ? { [fieldName]: field } : field);\n }))).every(Boolean);\n !(!validationResult && !_formState.isValid) && _setValid();\n }\n else {\n validationResult = isValid = await executeBuiltInValidation(_fields);\n }\n _subjects.state.next({\n ...(!isString(name) ||\n ((_proxyFormState.isValid || _proxySubscribeFormState.isValid) &&\n isValid !== _formState.isValid)\n ? {}\n : { name }),\n ...(_options.resolver || !name ? { isValid } : {}),\n errors: _formState.errors,\n });\n options.shouldFocus &&\n !validationResult &&\n iterateFieldsByAction(_fields, _focusInput, name ? fieldNames : _names.mount);\n return validationResult;\n };\n const getValues = (fieldNames, config) => {\n let values = {\n ...(_state.mount ? _formValues : _defaultValues),\n };\n if (config) {\n values = extractFormValues(config.dirtyFields ? _formState.dirtyFields : _formState.touchedFields, values);\n }\n return isUndefined(fieldNames)\n ? values\n : isString(fieldNames)\n ? get(values, fieldNames)\n : fieldNames.map((name) => get(values, name));\n };\n const getFieldState = (name, formState) => ({\n invalid: !!get((formState || _formState).errors, name),\n isDirty: !!get((formState || _formState).dirtyFields, name),\n error: get((formState || _formState).errors, name),\n isValidating: !!get(_formState.validatingFields, name),\n isTouched: !!get((formState || _formState).touchedFields, name),\n });\n const clearErrors = (name) => {\n name &&\n convertToArrayPayload(name).forEach((inputName) => unset(_formState.errors, inputName));\n _subjects.state.next({\n errors: name ? _formState.errors : {},\n });\n };\n const setError = (name, error, options) => {\n const ref = (get(_fields, name, { _f: {} })._f || {}).ref;\n const currentError = get(_formState.errors, name) || {};\n // Don't override existing error messages elsewhere in the object tree.\n const { ref: currentRef, message, type, ...restOfErrorTree } = currentError;\n set(_formState.errors, name, {\n ...restOfErrorTree,\n ...error,\n ref,\n });\n _subjects.state.next({\n name,\n errors: _formState.errors,\n isValid: false,\n });\n options && options.shouldFocus && ref && ref.focus && ref.focus();\n };\n const watch = (name, defaultValue) => isFunction(name)\n ? _subjects.state.subscribe({\n next: (payload) => 'values' in payload &&\n name(_getWatch(undefined, defaultValue), payload),\n })\n : _getWatch(name, defaultValue, true);\n const _subscribe = (props) => _subjects.state.subscribe({\n next: (formState) => {\n if (shouldSubscribeByName(props.name, formState.name, props.exact) &&\n shouldRenderFormState(formState, props.formState || _proxyFormState, _setFormState, props.reRenderRoot)) {\n props.callback({\n values: { ..._formValues },\n ..._formState,\n ...formState,\n defaultValues: _defaultValues,\n });\n }\n },\n }).unsubscribe;\n const subscribe = (props) => {\n _state.mount = true;\n _proxySubscribeFormState = {\n ..._proxySubscribeFormState,\n ...props.formState,\n };\n return _subscribe({\n ...props,\n formState: {\n ...defaultProxyFormState,\n ...props.formState,\n },\n });\n };\n const unregister = (name, options = {}) => {\n for (const fieldName of name ? convertToArrayPayload(name) : _names.mount) {\n _names.mount.delete(fieldName);\n _names.array.delete(fieldName);\n if (!options.keepValue) {\n unset(_fields, fieldName);\n unset(_formValues, fieldName);\n }\n !options.keepError && unset(_formState.errors, fieldName);\n !options.keepDirty && unset(_formState.dirtyFields, fieldName);\n !options.keepTouched && unset(_formState.touchedFields, fieldName);\n !options.keepIsValidating &&\n unset(_formState.validatingFields, fieldName);\n !_options.shouldUnregister &&\n !options.keepDefaultValue &&\n unset(_defaultValues, fieldName);\n }\n _subjects.state.next({\n values: cloneObject(_formValues),\n });\n _subjects.state.next({\n ..._formState,\n ...(!options.keepDirty ? {} : { isDirty: _getDirty() }),\n });\n !options.keepIsValid && _setValid();\n };\n const _setDisabledField = ({ disabled, name, }) => {\n if ((isBoolean(disabled) && _state.mount) ||\n !!disabled ||\n _names.disabled.has(name)) {\n const wasDisabled = _names.disabled.has(name);\n const isDisabled = !!disabled;\n const disabledStateChanged = wasDisabled !== isDisabled;\n disabled ? _names.disabled.add(name) : _names.disabled.delete(name);\n disabledStateChanged && _state.mount && !_state.action && _setValid();\n }\n };\n const register = (name, options = {}) => {\n let field = get(_fields, name);\n const disabledIsDefined = isBoolean(options.disabled) || isBoolean(_options.disabled);\n set(_fields, name, {\n ...(field || {}),\n _f: {\n ...(field && field._f ? field._f : { ref: { name } }),\n name,\n mount: true,\n ...options,\n },\n });\n _names.mount.add(name);\n if (field) {\n _setDisabledField({\n disabled: isBoolean(options.disabled)\n ? options.disabled\n : _options.disabled,\n name,\n });\n }\n else {\n updateValidAndValue(name, true, options.value);\n }\n return {\n ...(disabledIsDefined\n ? { disabled: options.disabled || _options.disabled }\n : {}),\n ...(_options.progressive\n ? {\n required: !!options.required,\n min: getRuleValue(options.min),\n max: getRuleValue(options.max),\n minLength: getRuleValue(options.minLength),\n maxLength: getRuleValue(options.maxLength),\n pattern: getRuleValue(options.pattern),\n }\n : {}),\n name,\n onChange,\n onBlur: onChange,\n ref: (ref) => {\n if (ref) {\n register(name, options);\n field = get(_fields, name);\n const fieldRef = isUndefined(ref.value)\n ? ref.querySelectorAll\n ? ref.querySelectorAll('input,select,textarea')[0] || ref\n : ref\n : ref;\n const radioOrCheckbox = isRadioOrCheckbox(fieldRef);\n const refs = field._f.refs || [];\n if (radioOrCheckbox\n ? refs.find((option) => option === fieldRef)\n : fieldRef === field._f.ref) {\n return;\n }\n set(_fields, name, {\n _f: {\n ...field._f,\n ...(radioOrCheckbox\n ? {\n refs: [\n ...refs.filter(live),\n fieldRef,\n ...(Array.isArray(get(_defaultValues, name)) ? [{}] : []),\n ],\n ref: { type: fieldRef.type, name },\n }\n : { ref: fieldRef }),\n },\n });\n updateValidAndValue(name, false, undefined, fieldRef);\n }\n else {\n field = get(_fields, name, {});\n if (field._f) {\n field._f.mount = false;\n }\n (_options.shouldUnregister || options.shouldUnregister) &&\n !(isNameInFieldArray(_names.array, name) && _state.action) &&\n _names.unMount.add(name);\n }\n },\n };\n };\n const _focusError = () => _options.shouldFocusError &&\n iterateFieldsByAction(_fields, _focusInput, _names.mount);\n const _disableForm = (disabled) => {\n if (isBoolean(disabled)) {\n _subjects.state.next({ disabled });\n iterateFieldsByAction(_fields, (ref, name) => {\n const currentField = get(_fields, name);\n if (currentField) {\n ref.disabled = currentField._f.disabled || disabled;\n if (Array.isArray(currentField._f.refs)) {\n currentField._f.refs.forEach((inputRef) => {\n inputRef.disabled = currentField._f.disabled || disabled;\n });\n }\n }\n }, 0, false);\n }\n };\n const handleSubmit = (onValid, onInvalid) => async (e) => {\n let onValidError = undefined;\n if (e) {\n e.preventDefault && e.preventDefault();\n e.persist &&\n e.persist();\n }\n let fieldValues = cloneObject(_formValues);\n _subjects.state.next({\n isSubmitting: true,\n });\n if (_options.resolver) {\n const { errors, values } = await _runSchema();\n _updateIsValidating();\n _formState.errors = errors;\n fieldValues = cloneObject(values);\n }\n else {\n await executeBuiltInValidation(_fields);\n }\n if (_names.disabled.size) {\n for (const name of _names.disabled) {\n unset(fieldValues, name);\n }\n }\n unset(_formState.errors, 'root');\n if (isEmptyObject(_formState.errors)) {\n _subjects.state.next({\n errors: {},\n });\n try {\n await onValid(fieldValues, e);\n }\n catch (error) {\n onValidError = error;\n }\n }\n else {\n if (onInvalid) {\n await onInvalid({ ..._formState.errors }, e);\n }\n _focusError();\n setTimeout(_focusError);\n }\n _subjects.state.next({\n isSubmitted: true,\n isSubmitting: false,\n isSubmitSuccessful: isEmptyObject(_formState.errors) && !onValidError,\n submitCount: _formState.submitCount + 1,\n errors: _formState.errors,\n });\n if (onValidError) {\n throw onValidError;\n }\n };\n const resetField = (name, options = {}) => {\n if (get(_fields, name)) {\n if (isUndefined(options.defaultValue)) {\n setValue(name, cloneObject(get(_defaultValues, name)));\n }\n else {\n setValue(name, options.defaultValue);\n set(_defaultValues, name, cloneObject(options.defaultValue));\n }\n if (!options.keepTouched) {\n unset(_formState.touchedFields, name);\n }\n if (!options.keepDirty) {\n unset(_formState.dirtyFields, name);\n _formState.isDirty = options.defaultValue\n ? _getDirty(name, cloneObject(get(_defaultValues, name)))\n : _getDirty();\n }\n if (!options.keepError) {\n unset(_formState.errors, name);\n _proxyFormState.isValid && _setValid();\n }\n _subjects.state.next({ ..._formState });\n }\n };\n const _reset = (formValues, keepStateOptions = {}) => {\n const updatedValues = formValues ? cloneObject(formValues) : _defaultValues;\n const cloneUpdatedValues = cloneObject(updatedValues);\n const isEmptyResetValues = isEmptyObject(formValues);\n const values = isEmptyResetValues ? _defaultValues : cloneUpdatedValues;\n if (!keepStateOptions.keepDefaultValues) {\n _defaultValues = updatedValues;\n }\n if (!keepStateOptions.keepValues) {\n if (keepStateOptions.keepDirtyValues) {\n const fieldsToCheck = new Set([\n ..._names.mount,\n ...Object.keys(getDirtyFields(_defaultValues, _formValues)),\n ]);\n for (const fieldName of Array.from(fieldsToCheck)) {\n const isDirty = get(_formState.dirtyFields, fieldName);\n const existingValue = get(_formValues, fieldName);\n const newValue = get(values, fieldName);\n if (isDirty && !isUndefined(existingValue)) {\n set(values, fieldName, existingValue);\n }\n else if (!isDirty && !isUndefined(newValue)) {\n setValue(fieldName, newValue);\n }\n }\n }\n else {\n if (isWeb && isUndefined(formValues)) {\n for (const name of _names.mount) {\n const field = get(_fields, name);\n if (field && field._f) {\n const fieldReference = Array.isArray(field._f.refs)\n ? field._f.refs[0]\n : field._f.ref;\n if (isHTMLElement(fieldReference)) {\n const form = fieldReference.closest('form');\n if (form) {\n form.reset();\n break;\n }\n }\n }\n }\n }\n if (keepStateOptions.keepFieldsRef) {\n for (const fieldName of _names.mount) {\n setValue(fieldName, get(values, fieldName));\n }\n }\n else {\n _fields = {};\n }\n }\n _formValues = _options.shouldUnregister\n ? keepStateOptions.keepDefaultValues\n ? cloneObject(_defaultValues)\n : {}\n : cloneObject(values);\n _subjects.array.next({\n values: { ...values },\n });\n _subjects.state.next({\n values: { ...values },\n });\n }\n _names = {\n mount: keepStateOptions.keepDirtyValues ? _names.mount : new Set(),\n unMount: new Set(),\n array: new Set(),\n disabled: new Set(),\n watch: new Set(),\n watchAll: false,\n focus: '',\n };\n _state.mount =\n !_proxyFormState.isValid ||\n !!keepStateOptions.keepIsValid ||\n !!keepStateOptions.keepDirtyValues ||\n (!_options.shouldUnregister && !isEmptyObject(values));\n _state.watch = !!_options.shouldUnregister;\n _state.keepIsValid = !!keepStateOptions.keepIsValid;\n _state.action = false;\n // Clear errors synchronously to prevent validation errors on subsequent submissions\n // This fixes the issue where form.reset() causes validation errors on subsequent\n // submissions in Next.js 16 with Server Actions\n if (!keepStateOptions.keepErrors) {\n _formState.errors = {};\n }\n _subjects.state.next({\n submitCount: keepStateOptions.keepSubmitCount\n ? _formState.submitCount\n : 0,\n isDirty: isEmptyResetValues\n ? false\n : keepStateOptions.keepDirty\n ? _formState.isDirty\n : !!(keepStateOptions.keepDefaultValues &&\n !deepEqual(formValues, _defaultValues)),\n isSubmitted: keepStateOptions.keepIsSubmitted\n ? _formState.isSubmitted\n : false,\n dirtyFields: isEmptyResetValues\n ? {}\n : keepStateOptions.keepDirtyValues\n ? keepStateOptions.keepDefaultValues && _formValues\n ? getDirtyFields(_defaultValues, _formValues)\n : _formState.dirtyFields\n : keepStateOptions.keepDefaultValues && formValues\n ? getDirtyFields(_defaultValues, formValues)\n : keepStateOptions.keepDirty\n ? _formState.dirtyFields\n : {},\n touchedFields: keepStateOptions.keepTouched\n ? _formState.touchedFields\n : {},\n errors: keepStateOptions.keepErrors ? _formState.errors : {},\n isSubmitSuccessful: keepStateOptions.keepIsSubmitSuccessful\n ? _formState.isSubmitSuccessful\n : false,\n isSubmitting: false,\n defaultValues: _defaultValues,\n });\n };\n const reset = (formValues, keepStateOptions) => _reset(isFunction(formValues)\n ? formValues(_formValues)\n : formValues, { ..._options.resetOptions, ...keepStateOptions });\n const setFocus = (name, options = {}) => {\n const field = get(_fields, name);\n const fieldReference = field && field._f;\n if (fieldReference) {\n const fieldRef = fieldReference.refs\n ? fieldReference.refs[0]\n : fieldReference.ref;\n if (fieldRef.focus) {\n // Use setTimeout to ensure focus happens after any pending state updates\n // This fixes the issue where setFocus doesn't work immediately after setError\n setTimeout(() => {\n fieldRef.focus();\n options.shouldSelect &&\n isFunction(fieldRef.select) &&\n fieldRef.select();\n });\n }\n }\n };\n const _setFormState = (updatedFormState) => {\n _formState = {\n ..._formState,\n ...updatedFormState,\n };\n };\n const _resetDefaultValues = () => isFunction(_options.defaultValues) &&\n _options.defaultValues().then((values) => {\n reset(values, _options.resetOptions);\n _subjects.state.next({\n isLoading: false,\n });\n });\n const methods = {\n control: {\n register,\n unregister,\n getFieldState,\n handleSubmit,\n setError,\n _subscribe,\n _runSchema,\n _updateIsValidating,\n _focusError,\n _getWatch,\n _getDirty,\n _setValid,\n _setFieldArray,\n _setDisabledField,\n _setErrors,\n _getFieldArray,\n _reset,\n _resetDefaultValues,\n _removeUnmounted,\n _disableForm,\n _subjects,\n _proxyFormState,\n get _fields() {\n return _fields;\n },\n get _formValues() {\n return _formValues;\n },\n get _state() {\n return _state;\n },\n set _state(value) {\n _state = value;\n },\n get _defaultValues() {\n return _defaultValues;\n },\n get _names() {\n return _names;\n },\n set _names(value) {\n _names = value;\n },\n get _formState() {\n return _formState;\n },\n get _options() {\n return _options;\n },\n set _options(value) {\n _options = {\n ..._options,\n ...value,\n };\n },\n },\n subscribe,\n trigger,\n register,\n handleSubmit,\n watch,\n setValue,\n getValues,\n reset,\n resetField,\n clearErrors,\n unregister,\n setError,\n setFocus,\n getFieldState,\n };\n return {\n ...methods,\n formControl: methods,\n };\n}\n\nvar generateId = () => {\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n return crypto.randomUUID();\n }\n const d = typeof performance === 'undefined' ? Date.now() : performance.now() * 1000;\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = ((Math.random() * 16 + d) % 16) | 0;\n return (c == 'x' ? r : (r & 0x3) | 0x8).toString(16);\n });\n};\n\nvar getFocusFieldName = (name, index, options = {}) => options.shouldFocus || isUndefined(options.shouldFocus)\n ? options.focusName ||\n `${name}.${isUndefined(options.focusIndex) ? index : options.focusIndex}.`\n : '';\n\nvar appendAt = (data, value) => [\n ...data,\n ...convertToArrayPayload(value),\n];\n\nvar fillEmptyArray = (value) => Array.isArray(value) ? value.map(() => undefined) : undefined;\n\nfunction insert(data, index, value) {\n return [\n ...data.slice(0, index),\n ...convertToArrayPayload(value),\n ...data.slice(index),\n ];\n}\n\nvar moveArrayAt = (data, from, to) => {\n if (!Array.isArray(data)) {\n return [];\n }\n if (isUndefined(data[to])) {\n data[to] = undefined;\n }\n data.splice(to, 0, data.splice(from, 1)[0]);\n return data;\n};\n\nvar prependAt = (data, value) => [\n ...convertToArrayPayload(value),\n ...convertToArrayPayload(data),\n];\n\nfunction removeAtIndexes(data, indexes) {\n let i = 0;\n const temp = [...data];\n for (const index of indexes) {\n temp.splice(index - i, 1);\n i++;\n }\n return compact(temp).length ? temp : [];\n}\nvar removeArrayAt = (data, index) => isUndefined(index)\n ? []\n : removeAtIndexes(data, convertToArrayPayload(index).sort((a, b) => a - b));\n\nvar swapArrayAt = (data, indexA, indexB) => {\n [data[indexA], data[indexB]] = [data[indexB], data[indexA]];\n};\n\nvar updateAt = (fieldValues, index, value) => {\n fieldValues[index] = value;\n return fieldValues;\n};\n\n/**\n * A custom hook that exposes convenient methods to perform operations with a list of dynamic inputs that need to be appended, updated, removed etc. • [Demo](https://codesandbox.io/s/react-hook-form-usefieldarray-ssugn) • [Video](https://youtu.be/4MrbfGSFY2A)\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/usefieldarray) • [Demo](https://codesandbox.io/s/react-hook-form-usefieldarray-ssugn)\n *\n * @param props - useFieldArray props\n *\n * @returns methods - functions to manipulate with the Field Arrays (dynamic inputs) {@link UseFieldArrayReturn}\n *\n * @example\n * ```tsx\n * function App() {\n * const { register, control, handleSubmit, reset, trigger, setError } = useForm({\n * defaultValues: {\n * test: []\n * }\n * });\n * const { fields, append } = useFieldArray({\n * control,\n * name: \"test\"\n * });\n *\n * return (\n * <form onSubmit={handleSubmit(data => console.log(data))}>\n * {fields.map((item, index) => (\n * <input key={item.id} {...register(`test.${index}.firstName`)} />\n * ))}\n * <button type=\"button\" onClick={() => append({ firstName: \"bill\" })}>\n * append\n * </button>\n * <input type=\"submit\" />\n * </form>\n * );\n * }\n * ```\n */\nfunction useFieldArray(props) {\n const formControl = useFormControlContext();\n const { control = formControl, name, keyName = 'id', shouldUnregister, rules, } = props;\n const [fields, setFields] = React.useState(control._getFieldArray(name));\n const ids = React.useRef(control._getFieldArray(name).map(generateId));\n const _actioned = React.useRef(false);\n control._names.array.add(name);\n React.useMemo(() => rules &&\n fields.length >= 0 &&\n control.register(name, rules), [control, name, fields.length, rules]);\n useIsomorphicLayoutEffect(() => control._subjects.array.subscribe({\n next: ({ values, name: fieldArrayName, }) => {\n if (fieldArrayName === name || !fieldArrayName) {\n const fieldValues = get(values, name);\n if (Array.isArray(fieldValues)) {\n setFields(fieldValues);\n ids.current = fieldValues.map(generateId);\n }\n }\n },\n }).unsubscribe, [control, name]);\n const updateValues = React.useCallback((updatedFieldArrayValues) => {\n _actioned.current = true;\n control._setFieldArray(name, updatedFieldArrayValues);\n }, [control, name]);\n const append = (value, options) => {\n const appendValue = convertToArrayPayload(cloneObject(value));\n const updatedFieldArrayValues = appendAt(control._getFieldArray(name), appendValue);\n control._names.focus = getFocusFieldName(name, updatedFieldArrayValues.length - 1, options);\n ids.current = appendAt(ids.current, appendValue.map(generateId));\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._setFieldArray(name, updatedFieldArrayValues, appendAt, {\n argA: fillEmptyArray(value),\n });\n };\n const prepend = (value, options) => {\n const prependValue = convertToArrayPayload(cloneObject(value));\n const updatedFieldArrayValues = prependAt(control._getFieldArray(name), prependValue);\n control._names.focus = getFocusFieldName(name, 0, options);\n ids.current = prependAt(ids.current, prependValue.map(generateId));\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._setFieldArray(name, updatedFieldArrayValues, prependAt, {\n argA: fillEmptyArray(value),\n });\n };\n const remove = (index) => {\n const updatedFieldArrayValues = removeArrayAt(control._getFieldArray(name), index);\n ids.current = removeArrayAt(ids.current, index);\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n !Array.isArray(get(control._fields, name)) &&\n set(control._fields, name, undefined);\n control._setFieldArray(name, updatedFieldArrayValues, removeArrayAt, {\n argA: index,\n });\n };\n const insert$1 = (index, value, options) => {\n const insertValue = convertToArrayPayload(cloneObject(value));\n const updatedFieldArrayValues = insert(control._getFieldArray(name), index, insertValue);\n control._names.focus = getFocusFieldName(name, index, options);\n ids.current = insert(ids.current, index, insertValue.map(generateId));\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._setFieldArray(name, updatedFieldArrayValues, insert, {\n argA: index,\n argB: fillEmptyArray(value),\n });\n };\n const swap = (indexA, indexB) => {\n const updatedFieldArrayValues = control._getFieldArray(name);\n swapArrayAt(updatedFieldArrayValues, indexA, indexB);\n swapArrayAt(ids.current, indexA, indexB);\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._setFieldArray(name, updatedFieldArrayValues, swapArrayAt, {\n argA: indexA,\n argB: indexB,\n }, false);\n };\n const move = (from, to) => {\n const updatedFieldArrayValues = control._getFieldArray(name);\n moveArrayAt(updatedFieldArrayValues, from, to);\n moveArrayAt(ids.current, from, to);\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._setFieldArray(name, updatedFieldArrayValues, moveArrayAt, {\n argA: from,\n argB: to,\n }, false);\n };\n const update = (index, value) => {\n const updateValue = cloneObject(value);\n const updatedFieldArrayValues = updateAt(control._getFieldArray(name), index, updateValue);\n ids.current = [...updatedFieldArrayValues].map((item, i) => !item || i === index ? generateId() : ids.current[i]);\n updateValues(updatedFieldArrayValues);\n setFields([...updatedFieldArrayValues]);\n control._setFieldArray(name, updatedFieldArrayValues, updateAt, {\n argA: index,\n argB: updateValue,\n }, true, false);\n };\n const replace = (value) => {\n const updatedFieldArrayValues = convertToArrayPayload(cloneObject(value));\n ids.current = updatedFieldArrayValues.map(generateId);\n updateValues([...updatedFieldArrayValues]);\n setFields([...updatedFieldArrayValues]);\n control._setFieldArray(name, [...updatedFieldArrayValues], (data) => data, {}, true, false);\n };\n React.useEffect(() => {\n control._state.action = false;\n isWatched(name, control._names) &&\n control._subjects.state.next({\n ...control._formState,\n });\n if (_actioned.current &&\n (!getValidationModes(control._options.mode).isOnSubmit ||\n control._formState.isSubmitted) &&\n !getValidationModes(control._options.reValidateMode).isOnSubmit) {\n if (control._options.resolver) {\n control._runSchema([name]).then((result) => {\n control._updateIsValidating([name]);\n const error = get(result.errors, name);\n const existingError = get(control._formState.errors, name);\n if (existingError\n ? (!error && existingError.type) ||\n (error &&\n (existingError.type !== error.type ||\n existingError.message !== error.message))\n : error && error.type) {\n error\n ? set(control._formState.errors, name, error)\n : unset(control._formState.errors, name);\n control._subjects.state.next({\n errors: control._formState.errors,\n });\n }\n });\n }\n else {\n const field = get(control._fields, name);\n if (field &&\n field._f &&\n !(getValidationModes(control._options.reValidateMode).isOnSubmit &&\n getValidationModes(control._options.mode).isOnSubmit)) {\n validateField(field, control._names.disabled, control._formValues, control._options.criteriaMode === VALIDATION_MODE.all, control._options.shouldUseNativeValidation, true).then((error) => !isEmptyObject(error) &&\n control._subjects.state.next({\n errors: updateFieldArrayRootError(control._formState.errors, error, name),\n }));\n }\n }\n }\n control._subjects.state.next({\n name,\n values: cloneObject(control._formValues),\n });\n control._names.focus &&\n iterateFieldsByAction(control._fields, (ref, key) => {\n if (control._names.focus &&\n key.startsWith(control._names.focus) &&\n ref.focus) {\n ref.focus();\n return 1;\n }\n return;\n });\n control._names.focus = '';\n control._setValid();\n _actioned.current = false;\n }, [fields, name, control]);\n React.useEffect(() => {\n !get(control._formValues, name) && control._setFieldArray(name);\n return () => {\n const updateMounted = (name, value) => {\n const field = get(control._fields, name);\n if (field && field._f) {\n field._f.mount = value;\n }\n };\n control._options.shouldUnregister || shouldUnregister\n ? control.unregister(name)\n : updateMounted(name, false);\n };\n }, [name, control, keyName, shouldUnregister]);\n return {\n swap: React.useCallback(swap, [updateValues, name, control]),\n move: React.useCallback(move, [updateValues, name, control]),\n prepend: React.useCallback(prepend, [updateValues, name, control]),\n append: React.useCallback(append, [updateValues, name, control]),\n remove: React.useCallback(remove, [updateValues, name, control]),\n insert: React.useCallback(insert$1, [updateValues, name, control]),\n update: React.useCallback(update, [updateValues, name, control]),\n replace: React.useCallback(replace, [updateValues, name, control]),\n fields: React.useMemo(() => fields.map((field, index) => ({\n ...field,\n [keyName]: ids.current[index] || generateId(),\n })), [fields, keyName]),\n };\n}\n\n/**\n * Custom hook to manage the entire form.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useform) • [Demo](https://codesandbox.io/s/react-hook-form-get-started-ts-5ksmm) • [Video](https://www.youtube.com/watch?v=RkXv4AXXC_4)\n *\n * @param props - form configuration and validation parameters.\n *\n * @returns methods - individual functions to manage the form state. {@link UseFormReturn}\n *\n * @example\n * ```tsx\n * function App() {\n * const { register, handleSubmit, watch, formState: { errors } } = useForm();\n * const onSubmit = data => console.log(data);\n *\n * console.log(watch(\"example\"));\n *\n * return (\n * <form onSubmit={handleSubmit(onSubmit)}>\n * <input defaultValue=\"test\" {...register(\"example\")} />\n * <input {...register(\"exampleRequired\", { required: true })} />\n * {errors.exampleRequired && <span>This field is required</span>}\n * <button>Submit</button>\n * </form>\n * );\n * }\n * ```\n */\nfunction useForm(props = {}) {\n const _formControl = React.useRef(undefined);\n const _values = React.useRef(undefined);\n const [formState, updateFormState] = React.useState({\n isDirty: false,\n isValidating: false,\n isLoading: isFunction(props.defaultValues),\n isSubmitted: false,\n isSubmitting: false,\n isSubmitSuccessful: false,\n isValid: false,\n submitCount: 0,\n dirtyFields: {},\n touchedFields: {},\n validatingFields: {},\n errors: props.errors || {},\n disabled: props.disabled || false,\n isReady: false,\n defaultValues: isFunction(props.defaultValues)\n ? undefined\n : props.defaultValues,\n });\n if (!_formControl.current) {\n if (props.formControl) {\n _formControl.current = {\n ...props.formControl,\n formState,\n };\n if (props.defaultValues && !isFunction(props.defaultValues)) {\n props.formControl.reset(props.defaultValues, props.resetOptions);\n }\n }\n else {\n const { formControl, ...rest } = createFormControl(props);\n _formControl.current = {\n ...rest,\n formState,\n };\n }\n }\n const control = _formControl.current.control;\n control._options = props;\n useIsomorphicLayoutEffect(() => {\n const sub = control._subscribe({\n formState: control._proxyFormState,\n callback: () => updateFormState({ ...control._formState }),\n reRenderRoot: true,\n });\n updateFormState((data) => ({\n ...data,\n isReady: true,\n }));\n control._formState.isReady = true;\n return sub;\n }, [control]);\n React.useEffect(() => control._disableForm(props.disabled), [control, props.disabled]);\n React.useEffect(() => {\n if (props.mode) {\n control._options.mode = props.mode;\n }\n if (props.reValidateMode) {\n control._options.reValidateMode = props.reValidateMode;\n }\n }, [control, props.mode, props.reValidateMode]);\n React.useEffect(() => {\n if (props.errors) {\n control._setErrors(props.errors);\n control._focusError();\n }\n }, [control, props.errors]);\n React.useEffect(() => {\n props.shouldUnregister &&\n control._subjects.state.next({\n values: control._getWatch(),\n });\n }, [control, props.shouldUnregister]);\n React.useEffect(() => {\n if (control._proxyFormState.isDirty) {\n const isDirty = control._getDirty();\n if (isDirty !== formState.isDirty) {\n control._subjects.state.next({\n isDirty,\n });\n }\n }\n }, [control, formState.isDirty]);\n React.useEffect(() => {\n var _a;\n if (props.values && !deepEqual(props.values, _values.current)) {\n control._reset(props.values, {\n keepFieldsRef: true,\n ...control._options.resetOptions,\n });\n if (!((_a = control._options.resetOptions) === null || _a === void 0 ? void 0 : _a.keepIsValid)) {\n control._setValid();\n }\n _values.current = props.values;\n updateFormState((state) => ({ ...state }));\n }\n else {\n control._resetDefaultValues();\n }\n }, [control, props.values]);\n React.useEffect(() => {\n if (!control._state.mount) {\n control._setValid();\n control._state.mount = true;\n }\n if (control._state.watch) {\n control._state.watch = false;\n control._subjects.state.next({ ...control._formState });\n }\n control._removeUnmounted();\n });\n _formControl.current.formState = React.useMemo(() => getProxyFormState(formState, control), [control, formState]);\n return _formControl.current;\n}\n\n/**\n * Watch component that subscribes to form field changes and re-renders when watched fields update.\n *\n * @param control - The form control object from useForm\n * @param name - Can be field name, array of field names, or undefined to watch the entire form\n * @param disabled - Disable subscription\n * @param exact - Whether to watch exact field names or not\n * @param defaultValue - The default value to use if the field is not yet set\n * @param compute - Function to compute derived values from watched fields\n * @param render - The function that receives watched values and returns ReactNode\n * @returns The result of calling render function with watched values\n *\n * @example\n * The `Watch` component only re-render when the values of `foo`, `bar`, and `baz.qux` change.\n * The types of `foo`, `bar`, and `baz.qux` are precisely inferred.\n *\n * ```tsx\n * const { control } = useForm();\n *\n * <Watch\n * control={control}\n * names={['foo', 'bar', 'baz.qux']}\n * render={([foo, bar, baz_qux]) => <div>{foo}{bar}{baz_qux}</div>}\n * />\n * ```\n */\nconst Watch = (props) => props.render(useWatch({ name: props.names, ...props }));\n\nexport { Controller, Form, FormProvider, FormStateSubscribe, Watch, appendErrors, createFormControl, get, set, useController, useFieldArray, useForm, useFormContext, useFormState, useWatch };\n//# sourceMappingURL=index.esm.mjs.map\n","\"use client\";\n\nimport { useFormContext } from \"./FormContext\";\nimport { useFieldArray } from \"react-hook-form\";\nimport type { FieldValues, Path, UseFieldArrayProps } from \"react-hook-form\";\n\n/**\n * Hook for managing field arrays in forms\n *\n * Wrapper around react-hook-form's useFieldArray that integrates with Form context.\n *\n * @example\n * ```tsx\n * const { fields, append, remove } = useFormFieldArray({\n * name: 'items',\n * });\n *\n * return (\n * <>\n * {fields.map((field, index) => (\n * <div key={field.id}>\n * <FormField name={`items.${index}.name`}>\n * {({ register }) => <Input {...register(`items.${index}.name`)} />}\n * </FormField>\n * <Button onClick={() => remove(index)}>Remove</Button>\n * </div>\n * ))}\n * <Button onClick={() => append({ name: '' })}>Add Item</Button>\n * </>\n * );\n * ```\n */\nexport function useFormFieldArray<\n TFieldValues extends FieldValues = FieldValues,\n TFieldArrayName extends Path<TFieldValues> = Path<TFieldValues>,\n>(props: Omit<UseFieldArrayProps<TFieldValues, TFieldArrayName>, \"control\">) {\n const { form } = useFormContext<TFieldValues>();\n\n if (!form) {\n throw new Error(\n \"useFormFieldArray must be used within a Form component with react-hook-form integration\",\n );\n }\n\n return useFieldArray<TFieldValues, TFieldArrayName>({\n ...props,\n control: form.control,\n });\n}\n","\"use client\";\n\nimport type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../utils\";\nimport {\n getColorClass,\n getHoverColorClass,\n getSpacingClass,\n getTypographySize,\n getTypographyWeight,\n} from \"../../tokens\";\n\nexport interface BreadcrumbItem {\n label: string;\n href?: string;\n}\n\ninterface Props extends HTMLAttributes<HTMLElement> {\n items: BreadcrumbItem[];\n separator?: string;\n}\n\n/**\n * Breadcrumb Component\n *\n * A breadcrumb navigation component for hierarchical navigation.\n * Follows Atomic Design principles as a Molecule component.\n *\n * @example\n * ```tsx\n * <Breadcrumb\n * items={[\n * { label: \"Home\", href: \"/\" },\n * { label: \"Epics\", href: \"/epics\" },\n * { label: \"Epic Details\" }\n * ]}\n * />\n * ```\n */\nexport default function Breadcrumb({\n items,\n separator = \"/\",\n className = \"\",\n ...props\n}: Props) {\n const baseClasses = [\n \"flex\",\n \"items-center\",\n getSpacingClass(\"sm\", \"space-x\"),\n getTypographySize(\"bodySmall\"),\n ];\n\n const classes = cn(...baseClasses, className);\n\n return (\n <nav aria-label=\"Breadcrumb\" className={classes} {...props}>\n <ol\n className={cn(\"flex\", \"items-center\", getSpacingClass(\"sm\", \"space-x\"))}\n >\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n\n return (\n <li key={index} className=\"flex items-center\">\n {index > 0 && (\n <span\n className={cn(\n getSpacingClass(\"sm\", \"mx\"),\n getColorClass(\"neutral\", \"DEFAULT\", \"text\"),\n )}\n aria-hidden=\"true\"\n >\n {separator}\n </span>\n )}\n {isLast ? (\n <span\n className={cn(\n getColorClass(\"neutral\", \"dark\", \"text\"),\n getTypographyWeight(\"label\"),\n )}\n aria-current=\"page\"\n >\n {item.label}\n </span>\n ) : item.href ? (\n <a\n href={item.href}\n className={cn(\n \"inline-flex\",\n \"items-center\",\n getSpacingClass(\"xs\", \"px\"),\n getSpacingClass(\"xs\", \"pt\"),\n \"border-b-2\",\n \"border-transparent\",\n getTypographySize(\"bodySmall\"),\n getTypographyWeight(\"label\"),\n \"transition-colors\",\n getColorClass(\"neutral\", \"DEFAULT\", \"text\"),\n getHoverColorClass(\"neutral\", \"DEFAULT\", \"border\"),\n getHoverColorClass(\"neutral\", \"dark\", \"text\"),\n )}\n >\n {item.label}\n </a>\n ) : (\n <span className={getColorClass(\"neutral\", \"DEFAULT\", \"text\")}>\n {item.label}\n </span>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n}\n","\"use client\";\n\nimport type { HTMLAttributes } from \"react\";\nimport { Button } from \"../../primitives\";\nimport { cn } from \"../../utils\";\nimport {\n getColorClass,\n getSpacingClass,\n getTypographySizeFromFontSize,\n} from \"../../tokens\";\n\ninterface Props extends HTMLAttributes<HTMLDivElement> {\n currentPage: number;\n totalPages: number;\n onPageChange: (page: number) => void;\n totalItems?: number;\n itemsPerPage?: number;\n showPageInfo?: boolean;\n}\n\n/**\n * Pagination Component\n *\n * A pagination component for navigating through pages of data.\n * Follows Atomic Design principles as a Molecule component.\n *\n * @example\n * ```tsx\n * <Pagination\n * currentPage={1}\n * totalPages={10}\n * onPageChange={(page) => setPage(page)}\n * totalItems={100}\n * itemsPerPage={10}\n * />\n * ```\n */\nexport default function Pagination({\n currentPage,\n totalPages,\n onPageChange,\n totalItems,\n itemsPerPage,\n showPageInfo = true,\n className = \"\",\n ...props\n}: Props) {\n const handlePrevious = () => {\n if (currentPage > 1) {\n onPageChange(currentPage - 1);\n }\n };\n\n const handleNext = () => {\n if (currentPage < totalPages) {\n onPageChange(currentPage + 1);\n }\n };\n\n const handlePageClick = (page: number) => {\n if (page >= 1 && page <= totalPages && page !== currentPage) {\n onPageChange(page);\n }\n };\n\n const getPageNumbers = () => {\n const pages: (number | string)[] = [];\n const maxVisible = 5;\n\n if (totalPages <= maxVisible) {\n for (let i = 1; i <= totalPages; i++) {\n pages.push(i);\n }\n } else {\n if (currentPage <= 3) {\n for (let i = 1; i <= 4; i++) {\n pages.push(i);\n }\n pages.push(\"ellipsis\");\n pages.push(totalPages);\n } else if (currentPage >= totalPages - 2) {\n pages.push(1);\n pages.push(\"ellipsis\");\n for (let i = totalPages - 3; i <= totalPages; i++) {\n pages.push(i);\n }\n } else {\n pages.push(1);\n pages.push(\"ellipsis\");\n for (let i = currentPage - 1; i <= currentPage + 1; i++) {\n pages.push(i);\n }\n pages.push(\"ellipsis\");\n pages.push(totalPages);\n }\n }\n\n return pages;\n };\n\n const startItem =\n totalItems && itemsPerPage\n ? (currentPage - 1) * itemsPerPage + 1\n : undefined;\n const endItem =\n totalItems && itemsPerPage\n ? Math.min(currentPage * itemsPerPage, totalItems)\n : undefined;\n\n const classes = cn(\n \"flex\",\n \"items-center\",\n \"justify-between\",\n getSpacingClass(\"base\", \"px\"),\n getSpacingClass(\"md\", \"py\"),\n className,\n );\n\n return (\n <nav className={classes} aria-label=\"Pagination\" {...props}>\n <div className={cn(\"flex\", \"items-center\", getSpacingClass(\"sm\", \"gap\"))}>\n <Button\n variant=\"secondary\"\n onClick={handlePrevious}\n disabled={currentPage === 1}\n size=\"sm\"\n >\n Previous\n </Button>\n <div\n className={cn(\"flex\", \"items-center\", getSpacingClass(\"xs\", \"gap\"))}\n >\n {getPageNumbers().map((page, index) => {\n if (page === \"ellipsis\") {\n return (\n <span\n key={`ellipsis-${index}`}\n className={cn(\n getSpacingClass(\"sm\", \"px\"),\n getColorClass(\"neutral\", \"DEFAULT\", \"text\"),\n )}\n >\n ...\n </span>\n );\n }\n\n const pageNum = page as number;\n const isActive = pageNum === currentPage;\n\n return (\n <Button\n key={pageNum}\n variant={isActive ? \"primary\" : \"ghost\"}\n onClick={() => handlePageClick(pageNum)}\n size=\"sm\"\n aria-current={isActive ? \"page\" : undefined}\n aria-label={`Go to page ${pageNum}`}\n >\n {pageNum}\n </Button>\n );\n })}\n </div>\n <Button\n variant=\"secondary\"\n onClick={handleNext}\n disabled={currentPage === totalPages}\n size=\"sm\"\n >\n Next\n </Button>\n </div>\n {showPageInfo && totalItems && itemsPerPage && (\n <div\n className={cn(\n getTypographySizeFromFontSize(\"sm\"),\n getColorClass(\"neutral\", \"dark\", \"text\"),\n )}\n >\n Showing {startItem} to {endItem} of {totalItems} results\n </div>\n )}\n </nav>\n );\n}\n","\"use client\";\n\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { Button } from \"../../primitives\";\nimport { Text } from \"../../primitives\";\nimport { cn } from \"../../utils\";\nimport {\n getSpacingClass,\n getColorClass,\n getTypographySize,\n getTypographyWeightFromFontWeight,\n} from \"../../tokens\";\n\nexport interface EmptyStateProps extends HTMLAttributes<HTMLDivElement> {\n title: string;\n message: string;\n actionLabel?: string;\n onAction?: () => void;\n illustration?: ReactNode;\n variant?: \"default\" | \"withAction\" | \"withIllustration\";\n}\n\n/**\n * EmptyState Component\n *\n * A component for displaying empty states when there's no content to show.\n * Follows Atomic Design principles as a Molecule component.\n *\n * @example\n * ```tsx\n * <EmptyState\n * title=\"No epics yet\"\n * message=\"Get started by creating your first epic\"\n * actionLabel=\"Create Epic\"\n * onAction={() => router.push('/epics/new')}\n * />\n * ```\n */\nexport default function EmptyState({\n title,\n message,\n actionLabel,\n onAction,\n illustration,\n variant = \"default\",\n className = \"\",\n ...props\n}: EmptyStateProps) {\n const classes = cn(\n \"flex\",\n \"flex-col\",\n \"items-center\",\n \"justify-center\",\n \"text-center\",\n getSpacingClass(\"xl\", \"py\"),\n getSpacingClass(\"base\", \"px\"),\n className,\n );\n\n const showAction = variant === \"withAction\" || (actionLabel && onAction);\n const showIllustration = variant === \"withIllustration\" || illustration;\n\n return (\n <div\n className={classes}\n role=\"status\"\n aria-live=\"polite\"\n aria-label={`${title}. ${message}`}\n {...props}\n >\n {showIllustration && illustration && (\n <div className={cn(getSpacingClass(\"base\", \"mb\"))} aria-hidden=\"true\">\n {illustration}\n </div>\n )}\n\n <Text\n as=\"h3\"\n className={cn(\n getTypographySize(\"h4\"),\n getTypographyWeightFromFontWeight(\"semibold\"),\n getColorClass(\"neutral\", \"dark\", \"text\"),\n getSpacingClass(\"sm\", \"mb\"),\n )}\n >\n {title}\n </Text>\n\n <Text\n as=\"p\"\n className={cn(\n getTypographySize(\"bodySmall\"),\n getColorClass(\"neutral\", \"DEFAULT\", \"text\"),\n getSpacingClass(\"md\", \"mb\"),\n \"max-w-sm\", // Max width utility - justified as layout constraint\n )}\n >\n {message}\n </Text>\n\n {showAction && actionLabel && onAction && (\n <Button variant=\"primary\" onClick={onAction}>\n {actionLabel}\n </Button>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport type { HTMLAttributes, ReactNode, KeyboardEvent } from \"react\";\nimport React, { useState, useRef, useEffect } from \"react\";\nimport { cn } from \"../../utils\";\nimport {\n getColorClass,\n getRadiusClass,\n getFocusColorClass,\n getHoverColorClass,\n getSpacingClass,\n getTypographySize,\n getShadowClass,\n} from \"../../tokens\";\n\nexport interface DropdownItem {\n label: string;\n onClick: () => void;\n disabled?: boolean;\n variant?: \"default\" | \"danger\";\n}\n\nexport interface DropdownProps extends HTMLAttributes<HTMLDivElement> {\n trigger: ReactNode;\n items: DropdownItem[];\n align?: \"left\" | \"right\";\n variant?: \"default\" | \"minimal\";\n \"aria-label\"?: string;\n}\n\n/**\n * Dropdown Component\n *\n * A dropdown menu component for displaying actions and options.\n * Follows Atomic Design principles as a Molecule component.\n *\n * @example\n * ```tsx\n * <Dropdown\n * trigger={<Button>Actions</Button>}\n * items={[\n * { label: \"Edit\", onClick: () => handleEdit() },\n * { label: \"Delete\", onClick: () => handleDelete(), variant: \"danger\" },\n * ]}\n * />\n * ```\n */\nexport default function Dropdown({\n trigger,\n items,\n align = \"right\",\n variant: _variant = \"default\",\n className = \"\",\n \"aria-label\": ariaLabel,\n ...props\n}: DropdownProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [activeIndex, setActiveIndex] = useState<number>(-1);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLDivElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const itemRefs = useRef<(HTMLButtonElement | null)[]>([]);\n\n // Generate unique IDs\n const menuId = `dropdown-menu-${Math.random().toString(36).substr(2, 9)}`;\n const triggerId = `dropdown-trigger-${Math.random().toString(36).substr(2, 9)}`;\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n setActiveIndex(-1);\n }\n };\n\n if (isOpen) {\n document.addEventListener(\"mousedown\", handleClickOutside);\n // Focus first item when opening\n setTimeout(() => {\n const firstEnabledIndex = items.findIndex((item) => !item.disabled);\n if (firstEnabledIndex >= 0) {\n setActiveIndex(firstEnabledIndex);\n itemRefs.current[firstEnabledIndex]?.focus();\n }\n }, 0);\n }\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [isOpen, items]);\n\n // Keyboard navigation\n useEffect(() => {\n if (!isOpen) return;\n\n const handleKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n const enabledItems = items\n .map((item, index) => ({ item, index }))\n .filter(({ item }) => !item.disabled);\n const currentEnabledIndex = enabledItems.findIndex(\n ({ index }) => index === activeIndex,\n );\n\n switch (e.key) {\n case \"ArrowDown\": {\n e.preventDefault();\n const nextIndex =\n currentEnabledIndex < enabledItems.length - 1\n ? enabledItems[currentEnabledIndex + 1].index\n : enabledItems[0].index;\n setActiveIndex(nextIndex);\n itemRefs.current[nextIndex]?.focus();\n break;\n }\n case \"ArrowUp\": {\n e.preventDefault();\n const prevIndex =\n currentEnabledIndex > 0\n ? enabledItems[currentEnabledIndex - 1].index\n : enabledItems[enabledItems.length - 1].index;\n setActiveIndex(prevIndex);\n itemRefs.current[prevIndex]?.focus();\n break;\n }\n case \"Home\": {\n e.preventDefault();\n const firstIndex = enabledItems[0].index;\n setActiveIndex(firstIndex);\n itemRefs.current[firstIndex]?.focus();\n break;\n }\n case \"End\": {\n e.preventDefault();\n const lastIndex = enabledItems[enabledItems.length - 1].index;\n setActiveIndex(lastIndex);\n itemRefs.current[lastIndex]?.focus();\n break;\n }\n case \"Enter\":\n case \" \":\n e.preventDefault();\n if (activeIndex >= 0 && !items[activeIndex].disabled) {\n handleItemClick(items[activeIndex]);\n }\n break;\n case \"Escape\":\n e.preventDefault();\n setIsOpen(false);\n setActiveIndex(-1);\n // Restore focus to trigger after closing\n setTimeout(() => {\n triggerRef.current?.focus();\n }, 0);\n break;\n }\n };\n\n const menuElement = menuRef.current;\n if (menuElement) {\n const typedHandleKeyDown = handleKeyDown as unknown as (e: Event) => void;\n menuElement.addEventListener(\"keydown\", typedHandleKeyDown);\n return () => {\n menuElement.removeEventListener(\"keydown\", typedHandleKeyDown);\n };\n }\n }, [isOpen, activeIndex, items]);\n\n const handleItemClick = (item: DropdownItem) => {\n if (!item.disabled) {\n item.onClick();\n setIsOpen(false);\n setActiveIndex(-1);\n // Restore focus to trigger after item selection\n setTimeout(() => {\n triggerRef.current?.focus();\n }, 0);\n }\n };\n\n const handleTriggerClick = () => {\n setIsOpen(!isOpen);\n setActiveIndex(-1);\n };\n\n const handleTriggerKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === \"Enter\" || e.key === \" \" || e.key === \"ArrowDown\") {\n e.preventDefault();\n setIsOpen(true);\n }\n };\n\n const alignClasses = align === \"right\" ? \"right-0\" : \"left-0\";\n\n // Clone trigger to add accessibility props\n // Handle both Button component and native button elements\n const triggerWithProps = React.isValidElement(trigger) ? (\n React.cloneElement(trigger as React.ReactElement<unknown>, {\n onClick: (e: React.MouseEvent) => {\n handleTriggerClick();\n // Call original onClick if it exists\n if (trigger.props.onClick) {\n trigger.props.onClick(e);\n }\n },\n onKeyDown: (e: React.KeyboardEvent) => {\n handleTriggerKeyDown(e);\n // Call original onKeyDown if it exists\n if (trigger.props.onKeyDown) {\n trigger.props.onKeyDown(e);\n }\n },\n \"aria-haspopup\": \"menu\",\n \"aria-expanded\": isOpen,\n \"aria-controls\": menuId,\n \"aria-label\": ariaLabel || trigger.props[\"aria-label\"] || \"Open menu\",\n id: triggerId,\n ref: (node: HTMLElement | null) => {\n triggerRef.current = node;\n // Forward ref if trigger has one\n if (typeof trigger.ref === \"function\") {\n trigger.ref(node);\n } else if (trigger.ref) {\n (trigger.ref as React.MutableRefObject<HTMLElement | null>).current =\n node;\n }\n },\n })\n ) : (\n <div\n ref={triggerRef}\n onClick={handleTriggerClick}\n onKeyDown={handleTriggerKeyDown}\n role=\"button\"\n tabIndex={0}\n aria-haspopup=\"menu\"\n aria-expanded={isOpen}\n aria-controls={menuId}\n aria-label={ariaLabel || \"Open menu\"}\n id={triggerId}\n >\n {trigger}\n </div>\n );\n\n return (\n <div\n className={cn(\"relative\", \"inline-block\", className)}\n ref={dropdownRef}\n {...props}\n >\n {triggerWithProps}\n\n {isOpen && (\n <>\n <div\n // micro-z: dropdown click-outside backdrop internal to dropdown scope\n className={cn(\"fixed\", \"inset-0\", \"z-10\")}\n onClick={() => {\n setIsOpen(false);\n setActiveIndex(-1);\n }}\n aria-hidden=\"true\"\n />\n <div\n ref={menuRef}\n id={menuId}\n className={cn(\n \"absolute\",\n // micro-z: dropdown content above its own backdrop\n \"z-20\",\n getSpacingClass(\"sm\", \"mt\"),\n \"w-48\", // Fixed width for dropdown menu - justified as layout constraint\n getRadiusClass(\"md\"),\n getShadowClass(\"lg\"),\n getColorClass(\"neutral\", \"light\", \"bg\"),\n \"ring-1\",\n getColorClass(\"neutral\", \"dark\", \"border\"),\n \"ring-opacity-5\",\n alignClasses,\n )}\n role=\"menu\"\n aria-orientation=\"vertical\"\n aria-labelledby={triggerId}\n aria-activedescendant={\n activeIndex >= 0 ? `${menuId}-item-${activeIndex}` : undefined\n }\n >\n <div className={cn(getSpacingClass(\"xs\", \"py\"))} role=\"none\">\n {items.map((item, index) => {\n const itemClasses = cn(\n \"block\",\n getSpacingClass(\"base\", \"px\"),\n getSpacingClass(\"xs\", \"py\"),\n getTypographySize(\"bodySmall\"),\n \"w-full\",\n \"text-left\",\n \"focus:outline-none\",\n item.disabled\n ? cn(\n getColorClass(\"neutral\", \"DEFAULT\", \"text\"),\n \"cursor-not-allowed\",\n \"opacity-50\",\n )\n : item.variant === \"danger\"\n ? cn(\n \"text-error-dark\",\n \"hover:bg-error-bg-emphasis\",\n \"focus:bg-error-bg-emphasis\",\n )\n : cn(\n getColorClass(\"neutral\", \"dark\", \"text\"),\n getHoverColorClass(\"neutral\", \"light\", \"bg\"),\n getFocusColorClass(\"neutral\", \"light\", \"bg\").replace(\n \"focus:border-\",\n \"focus:bg-\",\n ),\n ),\n );\n\n return (\n <button\n key={index}\n id={`${menuId}-item-${index}`}\n ref={(el) => {\n itemRefs.current[index] = el;\n }}\n type=\"button\"\n className={itemClasses}\n onClick={() => handleItemClick(item)}\n disabled={item.disabled}\n role=\"menuitem\"\n aria-disabled={item.disabled}\n tabIndex={\n item.disabled ? -1 : activeIndex === index ? 0 : -1\n }\n >\n {item.label}\n </button>\n );\n })}\n </div>\n </div>\n </>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport { createContext, useContext } from \"react\";\n\nexport interface DatePickerContextValue {\n selectedDate: Date | null;\n selectedRange: { start: Date | null; end: Date | null } | null;\n mode: \"single\" | \"range\";\n onDateChange: (date: Date | null) => void;\n onRangeChange: (range: { start: Date | null; end: Date | null }) => void;\n minDate?: Date;\n maxDate?: Date;\n disabledDates?: Date[];\n locale?: Locale;\n}\n\nexport const DatePickerContext = createContext<\n DatePickerContextValue | undefined\n>(undefined);\n\nexport function useDatePickerContext(): DatePickerContextValue {\n const context = useContext(DatePickerContext);\n if (!context) {\n throw new Error(\n \"DatePicker components must be used within a DatePicker component\",\n );\n }\n return context;\n}\n\nexport function useDatePickerContextOptional():\n | DatePickerContextValue\n | undefined {\n return useContext(DatePickerContext);\n}\n\n// Locale type - will be provided by date-fns\nexport interface Locale {\n code?: string;\n localize?: unknown;\n formatLong?: unknown;\n format?: unknown;\n match?: unknown;\n options?: unknown;\n}\n","\"use client\";\n\nimport { useState, type ReactNode } from \"react\";\nimport {\n DatePickerContext,\n type DatePickerContextValue,\n type Locale,\n} from \"./DatePickerContext\";\n\nexport interface DatePickerProviderProps {\n children: ReactNode;\n mode?: \"single\" | \"range\";\n value?: Date | { start: Date | null; end: Date | null };\n defaultValue?: Date | { start: Date | null; end: Date | null };\n onValueChange?: (\n value: Date | { start: Date | null; end: Date | null } | null,\n ) => void;\n minDate?: Date;\n maxDate?: Date;\n disabledDates?: Date[];\n locale?: Locale;\n}\n\nexport function DatePickerProvider({\n children,\n mode = \"single\",\n value: controlledValue,\n defaultValue,\n onValueChange,\n minDate,\n maxDate,\n disabledDates,\n locale,\n}: DatePickerProviderProps) {\n // Initialize state\n const getInitialDate = () => {\n if (controlledValue !== undefined) return null; // Controlled mode\n if (defaultValue) {\n if (mode === \"single\" && defaultValue instanceof Date) {\n return defaultValue;\n }\n if (\n mode === \"range\" &&\n typeof defaultValue === \"object\" &&\n \"start\" in defaultValue\n ) {\n return null; // Range handled separately\n }\n }\n return null;\n };\n\n const getInitialRange = () => {\n if (controlledValue !== undefined) return null; // Controlled mode\n if (\n defaultValue &&\n mode === \"range\" &&\n typeof defaultValue === \"object\" &&\n \"start\" in defaultValue\n ) {\n return defaultValue;\n }\n return { start: null, end: null };\n };\n\n const [uncontrolledDate, setUncontrolledDate] = useState<Date | null>(\n getInitialDate(),\n );\n const [uncontrolledRange, setUncontrolledRange] = useState<{\n start: Date | null;\n end: Date | null;\n }>(getInitialRange());\n\n // Use controlled or uncontrolled state\n const selectedDate =\n mode === \"single\"\n ? controlledValue instanceof Date\n ? controlledValue\n : uncontrolledDate\n : null;\n\n const selectedRange =\n mode === \"range\"\n ? controlledValue &&\n typeof controlledValue === \"object\" &&\n \"start\" in controlledValue\n ? controlledValue\n : uncontrolledRange\n : null;\n\n const handleDateChange = (date: Date | null) => {\n if (mode !== \"single\") return;\n\n if (controlledValue === undefined) {\n setUncontrolledDate(date);\n }\n onValueChange?.(date);\n };\n\n const handleRangeChange = (range: {\n start: Date | null;\n end: Date | null;\n }) => {\n if (mode !== \"range\") return;\n\n if (controlledValue === undefined) {\n setUncontrolledRange(range);\n }\n onValueChange?.(range);\n };\n\n const contextValue: DatePickerContextValue = {\n selectedDate,\n selectedRange,\n mode,\n onDateChange: handleDateChange,\n onRangeChange: handleRangeChange,\n minDate,\n maxDate,\n disabledDates,\n locale,\n };\n\n return (\n <DatePickerContext.Provider value={contextValue}>\n {children}\n </DatePickerContext.Provider>\n );\n}\n","\"use client\";\n\nimport { useState, useRef, useEffect, type HTMLAttributes } from \"react\";\nimport { Calendar } from \"lucide-react\";\nimport { useDatePickerContext } from \"./DatePickerContext\";\nimport Input from \"../../primitives/Input/Input\";\nimport Button from \"../../primitives/Button/Button\";\n\nexport interface DatePickerInputProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"onChange\" | \"onFocus\"> {\n placeholder?: string;\n format?: string; // Date format string (e.g., 'MM/dd/yyyy')\n showCalendarButton?: boolean;\n \"aria-label\"?: string;\n onFocus?: () => void;\n}\n\n// Simple date formatting without date-fns dependency\nfunction formatDate(date: Date, format: string = \"yyyy-MM-dd\"): string {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const day = String(date.getDate()).padStart(2, \"0\");\n\n return format\n .replace(\"yyyy\", String(year))\n .replace(\"MM\", month)\n .replace(\"dd\", day)\n .replace(\"MM/dd/yyyy\", `${month}/${day}/${year}`)\n .replace(\"dd/MM/yyyy\", `${day}/${month}/${year}`);\n}\n\nfunction parseDate(value: string): Date | null {\n if (!value) return null;\n\n // Try ISO format first (yyyy-MM-dd)\n const isoMatch = value.match(/^(\\d{4})-(\\d{2})-(\\d{2})$/);\n if (isoMatch) {\n const [, year, month, day] = isoMatch;\n const date = new Date(parseInt(year), parseInt(month) - 1, parseInt(day));\n if (!isNaN(date.getTime())) return date;\n }\n\n // Try MM/dd/yyyy\n const usMatch = value.match(/^(\\d{2})\\/(\\d{2})\\/(\\d{4})$/);\n if (usMatch) {\n const [, month, day, year] = usMatch;\n const date = new Date(parseInt(year), parseInt(month) - 1, parseInt(day));\n if (!isNaN(date.getTime())) return date;\n }\n\n // Try dd/MM/yyyy\n const euMatch = value.match(/^(\\d{2})\\/(\\d{2})\\/(\\d{4})$/);\n if (euMatch) {\n const [, day, month, year] = euMatch;\n const date = new Date(parseInt(year), parseInt(month) - 1, parseInt(day));\n if (!isNaN(date.getTime())) return date;\n }\n\n return null;\n}\n\nexport function DatePickerInput({\n placeholder = \"Select date\",\n format = \"yyyy-MM-dd\",\n showCalendarButton = true,\n \"aria-label\": ariaLabel,\n onFocus,\n className = \"\",\n ...props\n}: DatePickerInputProps) {\n const { selectedDate, selectedRange, mode, onDateChange } =\n useDatePickerContext();\n const [inputValue, setInputValue] = useState(\"\");\n const [_isFocused, setIsFocused] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n\n // Update input value when selected date changes\n useEffect(() => {\n if (mode === \"single\" && selectedDate) {\n setInputValue(formatDate(selectedDate, format));\n } else if (mode === \"range\" && selectedRange) {\n if (selectedRange.start && selectedRange.end) {\n setInputValue(\n `${formatDate(selectedRange.start, format)} - ${formatDate(selectedRange.end, format)}`,\n );\n } else if (selectedRange.start) {\n setInputValue(formatDate(selectedRange.start, format));\n } else {\n setInputValue(\"\");\n }\n } else {\n setInputValue(\"\");\n }\n }, [selectedDate, selectedRange, mode, format]);\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value;\n setInputValue(value);\n\n if (mode === \"single\") {\n const date = parseDate(value);\n onDateChange(date);\n }\n // Range mode parsing would be more complex, handled by calendar\n };\n\n const handleInputBlur = () => {\n setIsFocused(false);\n // Validate and format on blur\n if (inputValue && mode === \"single\") {\n const date = parseDate(inputValue);\n if (date) {\n setInputValue(formatDate(date, format));\n }\n }\n };\n\n const handleCalendarClick = () => {\n inputRef.current?.focus();\n // Calendar popup would be triggered by parent component\n };\n\n return (\n <div className={`relative ${className}`} {...props}>\n <Input\n ref={inputRef}\n type=\"text\"\n value={inputValue}\n onChange={handleInputChange}\n onFocus={() => {\n setIsFocused(true);\n onFocus?.();\n }}\n onBlur={handleInputBlur}\n placeholder={placeholder}\n aria-label={ariaLabel || placeholder}\n rightIcon={\n showCalendarButton ? (\n <Button\n variant=\"iconOnly\"\n size=\"sm\"\n onClick={handleCalendarClick}\n aria-label=\"Open calendar\"\n type=\"button\"\n >\n <Calendar className=\"h-4 w-4\" />\n </Button>\n ) : undefined\n }\n />\n </div>\n );\n}\n","\"use client\";\n\nimport {\n useState,\n useEffect,\n useRef,\n type HTMLAttributes,\n type KeyboardEvent,\n} from \"react\";\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport { useDatePickerContext } from \"./DatePickerContext\";\nimport Button from \"../../primitives/Button/Button\";\nimport { getRadiusClass } from \"../../tokens\";\n\nexport interface DatePickerCalendarProps\n extends HTMLAttributes<HTMLDivElement> {\n month?: Date; // Current month to display\n onMonthChange?: (month: Date) => void;\n}\n\n// Helper functions for date manipulation (without date-fns dependency)\nfunction getDaysInMonth(date: Date): number {\n return new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();\n}\n\nfunction getFirstDayOfMonth(date: Date): number {\n return new Date(date.getFullYear(), date.getMonth(), 1).getDay();\n}\n\nfunction isSameDay(date1: Date | null, date2: Date | null): boolean {\n if (!date1 || !date2) return false;\n return (\n date1.getFullYear() === date2.getFullYear() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getDate() === date2.getDate()\n );\n}\n\nfunction isSameMonth(date1: Date, date2: Date): boolean {\n return (\n date1.getFullYear() === date2.getFullYear() &&\n date1.getMonth() === date2.getMonth()\n );\n}\n\nfunction isDateInRange(\n date: Date,\n start: Date | null,\n end: Date | null,\n): boolean {\n if (!start || !end) return false;\n const time = date.getTime();\n return time >= start.getTime() && time <= end.getTime();\n}\n\nfunction isDateDisabled(\n date: Date,\n minDate?: Date,\n maxDate?: Date,\n disabledDates?: Date[],\n): boolean {\n if (minDate && date < minDate) return true;\n if (maxDate && date > maxDate) return true;\n if (disabledDates?.some((d) => isSameDay(date, d))) return true;\n return false;\n}\n\nconst WEEKDAYS = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\nconst MONTHS = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n];\n\nexport function DatePickerCalendar({\n month: controlledMonth,\n onMonthChange,\n className = \"\",\n ...props\n}: DatePickerCalendarProps) {\n const {\n selectedDate,\n selectedRange,\n mode,\n onDateChange,\n onRangeChange,\n minDate,\n maxDate,\n disabledDates,\n } = useDatePickerContext();\n\n const [currentMonth, setCurrentMonth] = useState<Date>(\n controlledMonth || selectedDate || selectedRange?.start || new Date(),\n );\n const calendarRef = useRef<HTMLDivElement>(null);\n const [focusedDate, setFocusedDate] = useState<Date | null>(null);\n\n // Update current month if controlled\n useEffect(() => {\n if (controlledMonth) {\n setCurrentMonth(controlledMonth);\n }\n }, [controlledMonth]);\n\n const daysInMonth = getDaysInMonth(currentMonth);\n const firstDay = getFirstDayOfMonth(currentMonth);\n const days: (Date | null)[] = [];\n\n // Add empty cells for days before the first day of the month\n for (let i = 0; i < firstDay; i++) {\n days.push(null);\n }\n\n // Add all days of the month\n for (let day = 1; day <= daysInMonth; day++) {\n days.push(\n new Date(currentMonth.getFullYear(), currentMonth.getMonth(), day),\n );\n }\n\n const handleDateClick = (date: Date) => {\n if (isDateDisabled(date, minDate, maxDate, disabledDates)) return;\n\n if (mode === \"single\") {\n onDateChange(date);\n } else if (mode === \"range\") {\n const currentRange = selectedRange || { start: null, end: null };\n if (!currentRange.start || (currentRange.start && currentRange.end)) {\n // Start new range\n onRangeChange({ start: date, end: null });\n } else if (currentRange.start && !currentRange.end) {\n // Complete range\n if (date < currentRange.start) {\n onRangeChange({ start: date, end: currentRange.start });\n } else {\n onRangeChange({ start: currentRange.start, end: date });\n }\n }\n }\n };\n\n const handlePreviousMonth = () => {\n const newMonth = new Date(\n currentMonth.getFullYear(),\n currentMonth.getMonth() - 1,\n 1,\n );\n setCurrentMonth(newMonth);\n onMonthChange?.(newMonth);\n };\n\n const handleNextMonth = () => {\n const newMonth = new Date(\n currentMonth.getFullYear(),\n currentMonth.getMonth() + 1,\n 1,\n );\n setCurrentMonth(newMonth);\n onMonthChange?.(newMonth);\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLDivElement>, date: Date) => {\n let newDate: Date | null = null;\n\n switch (e.key) {\n case \"ArrowLeft\":\n e.preventDefault();\n newDate = new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate() - 1,\n );\n break;\n case \"ArrowRight\":\n e.preventDefault();\n newDate = new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate() + 1,\n );\n break;\n case \"ArrowUp\":\n e.preventDefault();\n newDate = new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate() - 7,\n );\n break;\n case \"ArrowDown\":\n e.preventDefault();\n newDate = new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate() + 7,\n );\n break;\n case \"Home\":\n e.preventDefault();\n newDate = new Date(date.getFullYear(), date.getMonth(), 1);\n break;\n case \"End\":\n e.preventDefault();\n newDate = new Date(date.getFullYear(), date.getMonth() + 1, 0);\n break;\n case \"Enter\":\n case \" \":\n e.preventDefault();\n handleDateClick(date);\n return;\n }\n\n if (newDate) {\n // Adjust month if needed\n if (!isSameMonth(newDate, currentMonth)) {\n setCurrentMonth(new Date(newDate.getFullYear(), newDate.getMonth(), 1));\n }\n setFocusedDate(newDate);\n }\n };\n\n return (\n <div\n ref={calendarRef}\n className={`p-4 ${className}`}\n role=\"grid\"\n aria-label=\"Calendar\"\n {...props}\n >\n {/* Header with month navigation */}\n <div className=\"flex items-center justify-between mb-4\">\n <Button\n variant=\"iconOnly\"\n size=\"sm\"\n onClick={handlePreviousMonth}\n aria-label=\"Previous month\"\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </Button>\n <div className=\"text-sm font-semibold\">\n {MONTHS[currentMonth.getMonth()]} {currentMonth.getFullYear()}\n </div>\n <Button\n variant=\"iconOnly\"\n size=\"sm\"\n onClick={handleNextMonth}\n aria-label=\"Next month\"\n >\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n </div>\n\n {/* Weekday headers */}\n <div className=\"grid grid-cols-7 gap-1 mb-2\">\n {WEEKDAYS.map((day) => (\n <div\n key={day}\n className=\"text-center text-xs font-medium text-gray-500 py-1\"\n >\n {day}\n </div>\n ))}\n </div>\n\n {/* Calendar grid */}\n <div className=\"grid grid-cols-7 gap-1\">\n {days.map((date, index) => {\n if (!date) {\n return <div key={`empty-${index}`} className=\"aspect-square\" />;\n }\n\n const isSelected =\n mode === \"single\"\n ? isSameDay(date, selectedDate)\n : isSameDay(date, selectedRange?.start || null) ||\n isSameDay(date, selectedRange?.end || null);\n\n const isInRange =\n mode === \"range\" && selectedRange\n ? isDateInRange(date, selectedRange.start, selectedRange.end)\n : false;\n\n const isDisabled = isDateDisabled(\n date,\n minDate,\n maxDate,\n disabledDates,\n );\n const isToday = isSameDay(date, new Date());\n const isFocused = focusedDate && isSameDay(date, focusedDate);\n\n return (\n <button\n key={date.toISOString()}\n type=\"button\"\n onClick={() => handleDateClick(date)}\n onKeyDown={(e) => handleKeyDown(e, date)}\n disabled={isDisabled}\n className={`\n aspect-square\n text-sm\n ${getRadiusClass(\"md\")}\n transition-colors\n focus:outline-none\n focus:ring-2\n focus:ring-offset-1\n ${\n isDisabled\n ? \"text-gray-300 cursor-not-allowed\"\n : isSelected\n ? `${\"bg-surface-brand\"} text-white font-semibold`\n : isInRange\n ? `${\"bg-indigo-400\"} ${\"text-fg-brand\"}`\n : isToday\n ? \"border-2 border-indigo-500 font-semibold\"\n : isFocused\n ? `${\"bg-indigo-400\"}`\n : \"hover:bg-gray-100\"\n }\n `}\n aria-label={date.toDateString()}\n aria-selected={isSelected}\n aria-disabled={isDisabled}\n >\n {date.getDate()}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport React, {\n useState,\n useRef,\n useEffect,\n type ReactNode,\n type RefObject,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { DatePickerProvider } from \"./DatePickerProvider\";\nimport { DatePickerInput } from \"./DatePickerInput\";\nimport { DatePickerCalendar } from \"./DatePickerCalendar\";\nimport { getRadiusClass, getShadowClass, getZIndexClass } from \"../../tokens\";\n\nexport interface DatePickerProps {\n children?: ReactNode;\n mode?: \"single\" | \"range\";\n value?: Date | { start: Date | null; end: Date | null };\n defaultValue?: Date | { start: Date | null; end: Date | null };\n onValueChange?: (\n value: Date | { start: Date | null; end: Date | null } | null,\n ) => void;\n minDate?: Date;\n maxDate?: Date;\n disabledDates?: Date[];\n placeholder?: string;\n format?: string;\n showCalendarButton?: boolean;\n \"aria-label\"?: string;\n className?: string;\n}\n\n/**\n * DatePicker Component\n *\n * A flexible date picker component with single date and range selection.\n * Supports keyboard navigation and basic localization.\n *\n * @example\n * ```tsx\n * // Single date\n * <DatePicker\n * value={selectedDate}\n * onValueChange={setSelectedDate}\n * />\n *\n * // Date range\n * <DatePicker\n * mode=\"range\"\n * value={{ start: rangeStart, end: rangeEnd }}\n * onValueChange={setRange}\n * />\n *\n * // Compound components\n * <DatePicker>\n * <DatePicker.Input />\n * <DatePicker.Calendar />\n * </DatePicker>\n * ```\n */\nfunction DatePickerComponent({\n children,\n mode = \"single\",\n value,\n defaultValue,\n onValueChange,\n minDate,\n maxDate,\n disabledDates,\n placeholder,\n format,\n showCalendarButton = true,\n \"aria-label\": ariaLabel,\n className = \"\",\n}: DatePickerProps) {\n const [isOpen, setIsOpen] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n const popupRef = useRef<HTMLDivElement>(null);\n\n // Close calendar when clicking outside\n useEffect(() => {\n if (!isOpen) return;\n\n const handleClickOutside = (event: MouseEvent) => {\n const target = event.target as Node;\n\n // Check if click is outside both container and popup\n const clickedInsideContainer =\n containerRef.current?.contains(target) ?? false;\n const clickedInsidePopup = popupRef.current?.contains(target) ?? false;\n\n // Close if clicked outside both container and popup\n if (!clickedInsideContainer && !clickedInsidePopup) {\n setIsOpen(false);\n }\n };\n\n // Use mousedown instead of click to catch the event before it bubbles\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, [isOpen]);\n\n // Close on Escape key\n useEffect(() => {\n if (!isOpen) return;\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n setIsOpen(false);\n }\n };\n\n document.addEventListener(\"keydown\", handleEscape);\n return () => document.removeEventListener(\"keydown\", handleEscape);\n }, [isOpen]);\n\n // If children provided, use compound component API\n if (children) {\n return (\n <DatePickerProvider\n mode={mode}\n value={value}\n defaultValue={defaultValue}\n onValueChange={onValueChange}\n minDate={minDate}\n maxDate={maxDate}\n disabledDates={disabledDates}\n >\n {children}\n </DatePickerProvider>\n );\n }\n\n // Otherwise, use simplified API\n return (\n <div ref={containerRef} className={`relative ${className}`}>\n <DatePickerProvider\n mode={mode}\n value={value}\n defaultValue={defaultValue}\n onValueChange={onValueChange}\n minDate={minDate}\n maxDate={maxDate}\n disabledDates={disabledDates}\n >\n <DatePickerInput\n placeholder={placeholder}\n format={format}\n showCalendarButton={showCalendarButton}\n aria-label={ariaLabel}\n onFocus={() => setIsOpen(true)}\n />\n {isOpen && (\n <DatePickerPopup containerRef={containerRef} popupRef={popupRef}>\n <DatePickerCalendar />\n </DatePickerPopup>\n )}\n </DatePickerProvider>\n </div>\n );\n}\n\n// Popup component for calendar\nfunction DatePickerPopup({\n children,\n containerRef,\n popupRef: externalPopupRef,\n}: {\n children: ReactNode;\n containerRef?: RefObject<HTMLDivElement>;\n popupRef?: RefObject<HTMLDivElement>;\n}) {\n const internalPopupRef = useRef<HTMLDivElement>(null);\n const popupRef = externalPopupRef || internalPopupRef;\n const [position, setPosition] = useState<{\n top: number;\n left: number;\n } | null>(null);\n\n // Calculate position relative to container\n useEffect(() => {\n if (containerRef?.current) {\n const containerRect = containerRef.current.getBoundingClientRect();\n\n setPosition({\n top: containerRect.bottom + window.scrollY + 8,\n left: containerRect.left + window.scrollX,\n });\n }\n }, [containerRef]);\n\n if (!position) {\n return null; // Wait for position calculation\n }\n\n const popup = (\n <div\n ref={popupRef}\n className={`\n fixed ${getZIndexClass(\"popover\")}\n bg-white\n ${getRadiusClass(\"lg\")}\n ${getShadowClass(\"xl\")}\n border border-gray-200\n `}\n role=\"dialog\"\n aria-modal=\"false\"\n aria-label=\"Date picker calendar\"\n style={{\n top: `${position.top}px`,\n left: `${position.left}px`,\n }}\n >\n {children}\n </div>\n );\n\n // Portal rendering for better z-index handling\n if (typeof window !== \"undefined\") {\n return createPortal(popup, document.body);\n }\n\n return popup;\n}\n\n// Compound components\nDatePickerComponent.Input = DatePickerInput;\nDatePickerComponent.Calendar = DatePickerCalendar;\nDatePickerComponent.Popup = DatePickerPopup;\n\n// Type declaration for compound components\nexport interface DatePickerComponentType extends React.FC<DatePickerProps> {\n Input: typeof DatePickerInput;\n Calendar: typeof DatePickerCalendar;\n Popup: typeof DatePickerPopup;\n}\n\n// Cast to include compound components and export as DatePicker\nconst DatePicker: DatePickerComponentType =\n DatePickerComponent as DatePickerComponentType;\n\nexport { DatePickerComponent };\nexport default DatePicker;\n","\"use client\";\n\n/* eslint-disable react-refresh/only-export-components */\nimport { createContext, useContext } from \"react\";\n\nexport interface TabsContextValue {\n value: string;\n onValueChange: (value: string) => void;\n orientation?: \"horizontal\" | \"vertical\";\n activationMode?: \"automatic\" | \"manual\";\n}\n\nconst TabsContext = createContext<TabsContextValue | undefined>(undefined);\n\n/**\n * Hook to access Tabs context\n *\n * @throws Error if used outside of Tabs component\n */\nexport function useTabsContext(): TabsContextValue {\n const context = useContext(TabsContext);\n\n if (context === undefined) {\n throw new Error(\"useTabsContext must be used within a Tabs component\");\n }\n\n return context;\n}\n\n/**\n * Hook to access Tabs context (optional, returns undefined if not in Tabs)\n */\nexport function useTabsContextOptional(): TabsContextValue | undefined {\n return useContext(TabsContext);\n}\n\nexport { TabsContext };\n","\"use client\";\n\nimport { useState, useCallback, type ReactNode } from \"react\";\nimport { TabsContext, type TabsContextValue } from \"./TabsContext\";\n\nexport interface TabsProviderProps {\n defaultValue?: string;\n value?: string;\n onValueChange?: (value: string) => void;\n orientation?: \"horizontal\" | \"vertical\";\n activationMode?: \"automatic\" | \"manual\";\n children: ReactNode;\n}\n\n/**\n * TabsProvider Component\n *\n * Provides Tabs context to children.\n * Manages active tab state and handles controlled/uncontrolled modes.\n */\nexport function TabsProvider({\n defaultValue,\n value: controlledValue,\n onValueChange,\n orientation = \"horizontal\",\n activationMode = \"automatic\",\n children,\n}: TabsProviderProps) {\n const [uncontrolledValue, setUncontrolledValue] = useState<string>(\n defaultValue || \"\",\n );\n\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : uncontrolledValue;\n\n const handleValueChange = useCallback(\n (newValue: string) => {\n if (!isControlled) {\n setUncontrolledValue(newValue);\n }\n onValueChange?.(newValue);\n },\n [isControlled, onValueChange],\n );\n\n const contextValue: TabsContextValue = {\n value,\n onValueChange: handleValueChange,\n orientation,\n activationMode,\n };\n\n return (\n <TabsContext.Provider value={contextValue}>{children}</TabsContext.Provider>\n );\n}\n","\"use client\";\n\nimport { useTabsContext } from \"./TabsContext\";\nimport { useRef, useEffect, type HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../utils\";\nimport { getRadiusClass, getColorClass, getSpacingClass } from \"../../tokens\";\n\nexport interface TabsListProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n variant?: \"default\" | \"compact\";\n}\n\n/**\n * TabsList Component\n *\n * Container for tab triggers.\n * Manages keyboard navigation between tabs.\n * Must be used within a Tabs component.\n */\nexport function TabsList({\n children,\n className = \"\",\n variant = \"default\",\n ...props\n}: TabsListProps) {\n const { orientation } = useTabsContext();\n const listRef = useRef<HTMLDivElement>(null);\n\n // Handle keyboard navigation at list level\n useEffect(() => {\n const list = listRef.current;\n if (!list) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n const triggers = Array.from(\n list.querySelectorAll<HTMLButtonElement>(\n '[role=\"tab\"]:not([disabled])',\n ),\n );\n const currentIndex = triggers.findIndex(\n (trigger) => trigger === document.activeElement,\n );\n\n if (currentIndex === -1) return;\n\n let nextIndex = currentIndex;\n\n if (orientation === \"horizontal\") {\n if (e.key === \"ArrowRight\") {\n e.preventDefault();\n nextIndex = (currentIndex + 1) % triggers.length;\n } else if (e.key === \"ArrowLeft\") {\n e.preventDefault();\n nextIndex = (currentIndex - 1 + triggers.length) % triggers.length;\n }\n } else {\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n nextIndex = (currentIndex + 1) % triggers.length;\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n nextIndex = (currentIndex - 1 + triggers.length) % triggers.length;\n }\n }\n\n if (e.key === \"Home\") {\n e.preventDefault();\n nextIndex = 0;\n } else if (e.key === \"End\") {\n e.preventDefault();\n nextIndex = triggers.length - 1;\n }\n\n if (nextIndex !== currentIndex) {\n triggers[nextIndex]?.focus();\n }\n };\n\n list.addEventListener(\"keydown\", handleKeyDown);\n return () => list.removeEventListener(\"keydown\", handleKeyDown);\n }, [orientation]);\n\n // Determine display class based on variant and orientation\n // For compact vertical, use 'flex' instead of 'inline-flex' to allow full width\n const displayClass =\n variant === \"compact\" && orientation === \"vertical\"\n ? \"flex\"\n : \"inline-flex\";\n\n const orientationClasses =\n orientation === \"vertical\"\n ? cn(\"flex-col\", getSpacingClass(\"xs\", \"gap\"))\n : cn(\"flex-row\", getSpacingClass(\"xs\", \"gap\"));\n\n return (\n <div\n ref={listRef}\n role=\"tablist\"\n aria-orientation={orientation}\n className={cn(\n displayClass,\n orientationClasses,\n getSpacingClass(\"xs\", \"p\"),\n getColorClass(\"neutral\", \"light\", \"bg\"),\n getRadiusClass(\"md\"),\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n","\"use client\";\n\nimport { useTabsContext } from \"./TabsContext\";\nimport type { HTMLAttributes, ReactNode, KeyboardEvent } from \"react\";\nimport {\n getColorClass,\n getRadiusClass,\n getHoverColorClass,\n getSpacingClass,\n getTypographySize,\n getTypographyWeight,\n} from \"../../tokens\";\nimport { cn } from \"../../utils\";\n\nexport interface TabsTriggerProps extends HTMLAttributes<HTMLButtonElement> {\n value: string;\n children: ReactNode;\n disabled?: boolean;\n}\n\n/**\n * TabsTrigger Component\n *\n * Individual tab trigger button.\n * Must be used within a TabsList component.\n */\nexport function TabsTrigger({\n value,\n children,\n disabled = false,\n className = \"\",\n onClick,\n onKeyDown,\n ...props\n}: TabsTriggerProps) {\n const {\n value: activeValue,\n onValueChange,\n orientation: _orientation,\n activationMode,\n } = useTabsContext();\n\n const isActive = activeValue === value;\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (disabled) return;\n if (activationMode === \"automatic\" || isActive) {\n onValueChange(value);\n }\n onClick?.(e);\n };\n\n const handleFocus = (e: React.FocusEvent<HTMLButtonElement>) => {\n // In automatic mode, activate tab on focus\n if (activationMode === \"automatic\" && !disabled && !isActive) {\n onValueChange(value);\n }\n props.onFocus?.(e);\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLButtonElement>) => {\n if (disabled) return;\n\n // Let parent handle arrow keys, Home, End\n if (\n e.key === \"ArrowRight\" ||\n e.key === \"ArrowLeft\" ||\n e.key === \"ArrowDown\" ||\n e.key === \"ArrowUp\" ||\n e.key === \"Home\" ||\n e.key === \"End\"\n ) {\n // These are handled by TabsList\n return;\n }\n\n // Handle Enter/Space for manual activation\n if (activationMode === \"manual\" && (e.key === \"Enter\" || e.key === \" \")) {\n e.preventDefault();\n onValueChange(value);\n return;\n }\n\n onKeyDown?.(e);\n };\n\n return (\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n aria-controls={`tabpanel-${value}`}\n id={`tab-${value}`}\n tabIndex={disabled ? -1 : isActive ? 0 : -1}\n disabled={disabled}\n onClick={handleClick}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n className={cn(\n \"inline-flex\",\n \"items-center\",\n \"justify-center\",\n getSpacingClass(\"sm\", \"px\"),\n getSpacingClass(\"xs\", \"py\"),\n getTypographySize(\"bodySmall\"),\n getTypographyWeight(\"label\"),\n \"transition-colors\",\n \"focus:outline-none\",\n \"focus:ring-2\",\n \"focus:border-line-focus\".replace(\"focus:border-\", \"focus:ring-\"),\n \"focus:ring-offset-2\",\n getRadiusClass(\"sm\"),\n isActive\n ? cn(\"bg-surface-brand\", \"text-fg-inverse\")\n : cn(\n getColorClass(\"neutral\", \"light\", \"text\"),\n getHoverColorClass(\"neutral\", \"DEFAULT\", \"bg\"),\n ),\n disabled ? \"opacity-50 cursor-not-allowed\" : \"cursor-pointer\",\n className,\n )}\n {...props}\n >\n {children}\n </button>\n );\n}\n","\"use client\";\n\nimport { useTabsContext } from \"./TabsContext\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\n\nexport interface TabsContentProps extends HTMLAttributes<HTMLDivElement> {\n value: string;\n children: ReactNode;\n forceMount?: boolean;\n}\n\n/**\n * TabsContent Component\n *\n * Content panel for a tab.\n * Only renders when the tab is active (unless forceMount is true).\n * Must be used within a Tabs component.\n */\nexport function TabsContent({\n value,\n children,\n forceMount = false,\n className = \"\",\n ...props\n}: TabsContentProps) {\n const { value: activeValue } = useTabsContext();\n\n const isActive = activeValue === value;\n\n if (!isActive && !forceMount) {\n return null;\n }\n\n return (\n <div\n role=\"tabpanel\"\n id={`tabpanel-${value}`}\n aria-labelledby={`tab-${value}`}\n hidden={!isActive}\n className={`\n mt-2\n focus:outline-none\n ${className}\n `}\n {...props}\n >\n {children}\n </div>\n );\n}\n","\"use client\";\n\nimport React, { type ReactNode } from \"react\";\nimport { TabsProvider, type TabsProviderProps } from \"./TabsProvider\";\nimport { TabsList } from \"./TabsList\";\nimport { TabsTrigger } from \"./TabsTrigger\";\nimport { TabsContent } from \"./TabsContent\";\n\nexport interface TabsProps extends Omit<TabsProviderProps, \"children\"> {\n children: ReactNode;\n}\n\n/**\n * Tabs Component\n *\n * A flexible tabs component with compound components pattern.\n * Supports horizontal and vertical orientations, automatic and manual activation modes.\n * Fully accessible with ARIA attributes and keyboard navigation.\n *\n * @example\n * ```tsx\n * <Tabs defaultValue=\"tab1\">\n * <Tabs.List>\n * <Tabs.Trigger value=\"tab1\">Tab 1</Tabs.Trigger>\n * <Tabs.Trigger value=\"tab2\">Tab 2</Tabs.Trigger>\n * </Tabs.List>\n * <Tabs.Content value=\"tab1\">Content 1</Tabs.Content>\n * <Tabs.Content value=\"tab2\">Content 2</Tabs.Content>\n * </Tabs>\n * ```\n */\nfunction TabsComponent({ children, ...providerProps }: TabsProps) {\n return <TabsProvider {...providerProps}>{children}</TabsProvider>;\n}\n\n// Compound components\nTabsComponent.List = TabsList;\nTabsComponent.Trigger = TabsTrigger;\nTabsComponent.Content = TabsContent;\n\n// Type declaration for compound components\nexport interface TabsComponentType extends React.FC<TabsProps> {\n List: typeof TabsList;\n Trigger: typeof TabsTrigger;\n Content: typeof TabsContent;\n}\n\n// Cast to include compound components\nconst Tabs: TabsComponentType = TabsComponent as TabsComponentType;\n\nexport default Tabs;\n","\"use client\";\n\nimport { useState, forwardRef } from \"react\";\nimport type { InputHTMLAttributes } from \"react\";\nimport { Search, X } from \"lucide-react\";\nimport Input from \"../../primitives/Input/Input\";\nimport Button from \"../../primitives/Button/Button\";\nimport { cn } from \"../../utils\";\nimport { getSpacingClass } from \"../../tokens\";\n\nexport interface SearchInputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, \"size\" | \"onChange\"> {\n onSearch?: (value: string) => void;\n onClear?: () => void;\n loading?: boolean;\n showClearButton?: boolean;\n debounceMs?: number;\n}\n\n/**\n * SearchInput Component\n *\n * A search input component with icon, clear button, and loading state.\n * Follows Atomic Design principles as a Molecule component.\n *\n * @example\n * ```tsx\n * <SearchInput\n * placeholder=\"Search...\"\n * onSearch={(value) => console.log(value)}\n * />\n * ```\n */\nconst SearchInput = forwardRef<HTMLInputElement, SearchInputProps>(\n function SearchInput(\n {\n onSearch,\n onClear,\n loading = false,\n showClearButton = true,\n debounceMs = 300,\n value: controlledValue,\n defaultValue,\n onChange,\n className = \"\",\n ...props\n },\n ref,\n ) {\n const [internalValue, setInternalValue] = useState<string>(\n typeof defaultValue === \"string\" ? defaultValue : \"\",\n );\n const [debounceTimer, setDebounceTimer] = useState<NodeJS.Timeout | null>(\n null,\n );\n\n const isControlled = controlledValue !== undefined;\n const currentValue = isControlled ? controlledValue : internalValue;\n const hasValue =\n currentValue !== undefined &&\n currentValue !== null &&\n String(currentValue).length > 0;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n\n if (!isControlled) {\n setInternalValue(newValue);\n }\n\n onChange?.(e);\n\n // Debounce search\n if (debounceTimer) {\n clearTimeout(debounceTimer);\n }\n\n const timer = setTimeout(() => {\n onSearch?.(newValue);\n }, debounceMs);\n\n setDebounceTimer(timer);\n };\n\n const handleClear = () => {\n if (!isControlled) {\n setInternalValue(\"\");\n }\n\n // Create synthetic event for onChange\n const syntheticEvent = {\n target: { value: \"\" },\n currentTarget: { value: \"\" },\n } as React.ChangeEvent<HTMLInputElement>;\n onChange?.(syntheticEvent);\n\n onClear?.();\n onSearch?.(\"\");\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\" && onSearch) {\n onSearch(String(currentValue || \"\"));\n }\n props.onKeyDown?.(e);\n };\n\n return (\n <div className={cn(\"relative\", className)}>\n <Input\n ref={ref}\n {...props}\n type=\"search\"\n value={currentValue}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n leftIcon={\n loading ? (\n <div className=\"animate-spin\">\n <Search className=\"h-4 w-4\" />\n </div>\n ) : (\n <Search className=\"h-4 w-4\" />\n )\n }\n rightIcon={\n showClearButton && hasValue && !loading ? (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleClear}\n className=\"h-auto p-1\"\n aria-label=\"Clear search\"\n >\n <X className=\"h-4 w-4\" />\n </Button>\n ) : undefined\n }\n className={cn(getSpacingClass(\"lg\", \"pr\"))}\n />\n </div>\n );\n },\n);\n\nSearchInput.displayName = \"SearchInput\";\n\nexport default SearchInput;\n","\"use client\";\n\nimport { forwardRef, type ReactNode } from \"react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\nexport interface AutocompleteOptionType {\n value: string;\n label: string;\n disabled?: boolean;\n icon?: ReactNode;\n group?: string;\n}\n\nexport interface AutocompleteOptionProps {\n option: AutocompleteOptionType;\n isHighlighted: boolean;\n onSelect: (option: AutocompleteOptionType) => void;\n}\n\n/**\n * AutocompleteOption Component\n *\n * A single option in the autocomplete list.\n */\nconst AutocompleteOption = forwardRef<HTMLDivElement, AutocompleteOptionProps>(\n function AutocompleteOption({ option, isHighlighted, onSelect }, ref) {\n const handleClick = () => {\n if (!option.disabled) {\n onSelect(option);\n }\n };\n\n return (\n <div\n ref={ref}\n role=\"option\"\n aria-selected={isHighlighted}\n aria-disabled={option.disabled}\n onClick={handleClick}\n className={`\n flex\n items-center\n gap-2\n ${getSpacingClass(\"sm\", \"px\")}\n ${getSpacingClass(\"sm\", \"py\")}\n text-sm\n cursor-pointer\n transition-colors\n ${isHighlighted ? \"bg-gray-100\" : \"\"}\n ${option.disabled ? \"opacity-50 cursor-not-allowed\" : \"hover:bg-gray-50\"}\n `}\n >\n {option.icon && <span className=\"flex-shrink-0\">{option.icon}</span>}\n <span className=\"flex-1\">{option.label}</span>\n </div>\n );\n },\n);\n\nAutocompleteOption.displayName = \"AutocompleteOption\";\n\nexport default AutocompleteOption;\n","\"use client\";\n\nimport { forwardRef, useEffect, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getShadowClass } from \"../../tokens/shadows\";\nimport { getZIndexClass } from \"../../tokens/z-index\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport AutocompleteOption from \"./AutocompleteOption\";\nimport type { AutocompleteOptionType } from \"./AutocompleteOption\";\n\nexport interface AutocompleteListProps {\n options: AutocompleteOptionType[];\n highlightedIndex: number;\n onSelect: (option: AutocompleteOptionType) => void;\n loading?: boolean;\n emptyMessage?: string;\n containerRef: React.RefObject<HTMLDivElement>;\n showSelectAll?: boolean;\n allSelected?: boolean;\n onSelectAll?: () => void;\n onDeselectAll?: () => void;\n}\n\n/**\n * AutocompleteList Component\n *\n * The list container for autocomplete options.\n * Renders in a portal and positions itself below the input.\n */\nconst AutocompleteList = forwardRef<HTMLDivElement, AutocompleteListProps>(\n function AutocompleteList(\n {\n options,\n highlightedIndex,\n onSelect,\n loading = false,\n emptyMessage = \"No options found\",\n containerRef,\n showSelectAll = false,\n allSelected = false,\n onSelectAll,\n onDeselectAll,\n },\n ref,\n ) {\n const [position, setPosition] = useState({ top: 0, left: 0, width: 0 });\n\n // Calculate position\n useEffect(() => {\n if (containerRef.current) {\n const rect = containerRef.current.getBoundingClientRect();\n setPosition({\n top: rect.bottom + window.scrollY + 4,\n left: rect.left + window.scrollX,\n width: rect.width,\n });\n }\n }, [containerRef]);\n\n const listContent = (\n <div\n ref={ref}\n role=\"listbox\"\n className={`\n absolute\n ${getZIndexClass(\"popover\")}\n bg-white\n ${getRadiusClass(\"md\")}\n ${getShadowClass(\"lg\")}\n border\n border-gray-200\n max-h-60\n overflow-y-auto\n ${getSpacingClass(\"xs\", \"py\")}\n `}\n style={{\n top: `${position.top}px`,\n left: `${position.left}px`,\n width: `${position.width}px`,\n }}\n >\n {loading ? (\n <div\n className={`\n ${getSpacingClass(\"md\", \"p\")}\n text-sm\n text-gray-500\n text-center\n `}\n >\n Loading...\n </div>\n ) : options.length === 0 ? (\n <div\n className={`\n ${getSpacingClass(\"md\", \"p\")}\n text-sm\n text-gray-500\n text-center\n `}\n >\n {emptyMessage}\n </div>\n ) : (\n <>\n {showSelectAll && (\n <div\n className={`\n ${getSpacingClass(\"sm\", \"px\")}\n ${getSpacingClass(\"sm\", \"py\")}\n text-sm\n font-medium\n cursor-pointer\n hover:bg-gray-50\n border-b\n border-gray-200\n `}\n onClick={allSelected ? onDeselectAll : onSelectAll}\n >\n {allSelected ? \"Deselect All\" : \"Select All\"}\n </div>\n )}\n {options.map((option, index) => (\n <AutocompleteOption\n key={option.value}\n option={option}\n isHighlighted={index === highlightedIndex}\n onSelect={onSelect}\n />\n ))}\n </>\n )}\n </div>\n );\n\n return typeof window !== \"undefined\"\n ? createPortal(listContent, document.body)\n : null;\n },\n);\n\nAutocompleteList.displayName = \"AutocompleteList\";\n\nexport default AutocompleteList;\n","\"use client\";\n\nimport { useState, useRef, useEffect, forwardRef } from \"react\";\nimport Input from \"../../primitives/Input/Input\";\nimport { ChevronDown, Loader2 } from \"lucide-react\";\nimport AutocompleteOption from \"./AutocompleteOption\";\nimport AutocompleteList from \"./AutocompleteList\";\nimport type { AutocompleteOptionType } from \"./AutocompleteOption\";\n\nexport type { AutocompleteOptionType as AutocompleteOption };\n\nexport interface AutocompleteProps {\n options: AutocompleteOptionType[];\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n onSelect?: (option: AutocompleteOptionType) => void;\n placeholder?: string;\n loading?: boolean;\n disabled?: boolean;\n emptyMessage?: string;\n debounceMs?: number;\n filterOptions?: (\n options: AutocompleteOptionType[],\n searchValue: string,\n ) => AutocompleteOptionType[];\n className?: string;\n inputClassName?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}\n\n/**\n * Autocomplete Component\n *\n * An input component with autocomplete suggestions.\n * Supports keyboard navigation, loading states, and custom filtering.\n *\n * @example\n * ```tsx\n * <Autocomplete\n * options={[\n * { value: '1', label: 'Option 1' },\n * { value: '2', label: 'Option 2' },\n * ]}\n * onSelect={(option) => console.log(option)}\n * />\n * ```\n */\nconst Autocomplete = forwardRef<HTMLInputElement, AutocompleteProps>(\n function Autocomplete(\n {\n options,\n value: controlledValue,\n defaultValue,\n onChange,\n onSelect,\n placeholder = \"Type to search...\",\n loading = false,\n disabled = false,\n emptyMessage = \"No options found\",\n debounceMs = 300,\n filterOptions,\n className = \"\",\n inputClassName = \"\",\n size = \"md\",\n },\n ref,\n ) {\n const [internalValue, setInternalValue] = useState<string>(\n typeof defaultValue === \"string\" ? defaultValue : \"\",\n );\n const [isOpen, setIsOpen] = useState(false);\n const [highlightedIndex, setHighlightedIndex] = useState(-1);\n const [searchValue, setSearchValue] = useState(\"\");\n const containerRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const listRef = useRef<HTMLDivElement>(null);\n const debounceTimerRef = useRef<NodeJS.Timeout | null>(null);\n\n const isControlled = controlledValue !== undefined;\n const currentValue = isControlled ? controlledValue : internalValue;\n\n // Filter options\n const getFilteredOptions = (): AutocompleteOptionType[] => {\n if (!searchValue.trim()) {\n return options;\n }\n\n if (filterOptions) {\n return filterOptions(options, searchValue);\n }\n\n // Default filter: case-insensitive search in label\n return options.filter((option) =>\n option.label.toLowerCase().includes(searchValue.toLowerCase()),\n );\n };\n\n const filteredOptions = getFilteredOptions();\n const hasOptions = filteredOptions.length > 0;\n\n // Handle input change\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setSearchValue(newValue);\n\n if (!isControlled) {\n setInternalValue(newValue);\n }\n\n onChange?.(newValue);\n\n // Debounce search\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n\n debounceTimerRef.current = setTimeout(() => {\n setIsOpen(true);\n setHighlightedIndex(-1);\n }, debounceMs);\n };\n\n // Handle option select\n const handleSelect = (option: AutocompleteOption) => {\n if (option.disabled) return;\n\n if (!isControlled) {\n setInternalValue(option.value);\n }\n\n setSearchValue(option.label);\n setIsOpen(false);\n setHighlightedIndex(-1);\n onChange?.(option.value);\n onSelect?.(option);\n inputRef.current?.focus();\n };\n\n // Handle keyboard navigation\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (!isOpen || filteredOptions.length === 0) {\n if (e.key === \"ArrowDown\" || e.key === \"Enter\") {\n setIsOpen(true);\n }\n return;\n }\n\n switch (e.key) {\n case \"ArrowDown\":\n e.preventDefault();\n setHighlightedIndex((prev) =>\n prev < filteredOptions.length - 1 ? prev + 1 : 0,\n );\n break;\n case \"ArrowUp\":\n e.preventDefault();\n setHighlightedIndex((prev) =>\n prev > 0 ? prev - 1 : filteredOptions.length - 1,\n );\n break;\n case \"Enter\":\n e.preventDefault();\n if (\n highlightedIndex >= 0 &&\n highlightedIndex < filteredOptions.length\n ) {\n handleSelect(filteredOptions[highlightedIndex]);\n }\n break;\n case \"Escape\":\n e.preventDefault();\n setIsOpen(false);\n setHighlightedIndex(-1);\n break;\n }\n };\n\n // Close on click outside\n useEffect(() => {\n if (!isOpen) return;\n\n const handleClickOutside = (e: MouseEvent) => {\n if (\n containerRef.current &&\n !containerRef.current.contains(e.target as Node)\n ) {\n setIsOpen(false);\n setHighlightedIndex(-1);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () =>\n document.removeEventListener(\"mousedown\", handleClickOutside);\n }, [isOpen]);\n\n // Scroll highlighted item into view\n useEffect(() => {\n if (highlightedIndex >= 0 && listRef.current) {\n const items = listRef.current.querySelectorAll('[role=\"option\"]');\n if (\n items[highlightedIndex] &&\n typeof items[highlightedIndex].scrollIntoView === \"function\"\n ) {\n items[highlightedIndex].scrollIntoView({\n block: \"nearest\",\n behavior: \"smooth\",\n });\n }\n }\n }, [highlightedIndex]);\n\n // Sync search value with current value\n useEffect(() => {\n if (currentValue) {\n const option = options.find((opt) => opt.value === currentValue);\n if (option) {\n setSearchValue(option.label);\n } else {\n setSearchValue(currentValue);\n }\n } else {\n setSearchValue(\"\");\n }\n }, [currentValue, options]);\n\n const shouldShowList = isOpen && (hasOptions || loading || emptyMessage);\n\n return (\n <div ref={containerRef} className={`relative ${className}`}>\n <Input\n ref={inputRef || ref}\n value={searchValue}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n onFocus={() => setIsOpen(true)}\n placeholder={placeholder}\n disabled={disabled}\n size={size}\n rightIcon={\n loading ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n ) : (\n <ChevronDown\n className={`h-4 w-4 transition-transform ${\n isOpen ? \"rotate-180\" : \"\"\n }`}\n />\n )\n }\n className={inputClassName}\n />\n\n {shouldShowList && (\n <AutocompleteList\n ref={listRef}\n options={filteredOptions}\n highlightedIndex={highlightedIndex}\n onSelect={handleSelect}\n loading={loading}\n emptyMessage={emptyMessage}\n containerRef={containerRef}\n />\n )}\n </div>\n );\n },\n);\n\nAutocomplete.displayName = \"Autocomplete\";\n\nexport default Autocomplete;\n","\"use client\";\n\nimport { useState, useRef, useEffect, forwardRef } from \"react\";\nimport Chip from \"../../primitives/Chip/Chip\";\nimport { Check } from \"lucide-react\";\nimport AutocompleteList from \"../Autocomplete/AutocompleteList\";\nimport type { AutocompleteOptionType } from \"../Autocomplete/AutocompleteOption\";\nimport { cn } from \"../../utils\";\nimport { getColorClass } from \"../../tokens\";\nimport { getSpacingClass } from \"../../tokens\";\nimport { getRadiusClass } from \"../../tokens\";\n\nexport interface MultiSelectProps {\n options: AutocompleteOptionType[];\n value?: string[];\n defaultValue?: string[];\n onChange?: (values: string[]) => void;\n onSelect?: (options: AutocompleteOptionType[]) => void;\n placeholder?: string;\n loading?: boolean;\n disabled?: boolean;\n emptyMessage?: string;\n maxSelected?: number;\n showSelectAll?: boolean;\n className?: string;\n inputClassName?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}\n\n/**\n * MultiSelect Component\n *\n * A multi-select component with chips for selected items.\n * Supports keyboard navigation, loading states, and custom filtering.\n *\n * @example\n * ```tsx\n * <MultiSelect\n * options={[\n * { value: '1', label: 'Option 1' },\n * { value: '2', label: 'Option 2' },\n * ]}\n * onSelect={(options) => console.log(options)}\n * />\n * ```\n */\nconst MultiSelect = forwardRef<HTMLInputElement, MultiSelectProps>(\n function MultiSelect(\n {\n options,\n value: controlledValue,\n defaultValue = [],\n onChange,\n onSelect,\n placeholder = \"Select options...\",\n loading = false,\n disabled = false,\n emptyMessage = \"No options found\",\n maxSelected,\n showSelectAll = false,\n className = \"\",\n inputClassName = \"\",\n size = \"md\",\n },\n ref,\n ) {\n const [internalValue, setInternalValue] = useState<string[]>(defaultValue);\n const [isOpen, setIsOpen] = useState(false);\n const [highlightedIndex, setHighlightedIndex] = useState(-1);\n const [searchValue, setSearchValue] = useState(\"\");\n const containerRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const listRef = useRef<HTMLDivElement>(null);\n\n const isControlled = controlledValue !== undefined;\n const selectedValues = isControlled ? controlledValue : internalValue;\n\n // Get selected options\n const selectedOptions = options.filter((opt) =>\n selectedValues.includes(opt.value),\n );\n\n // Filter options (exclude already selected if needed, or show all)\n const getFilteredOptions = (): AutocompleteOptionType[] => {\n let filtered = options;\n\n if (searchValue.trim()) {\n filtered = options.filter((option) =>\n option.label.toLowerCase().includes(searchValue.toLowerCase()),\n );\n }\n\n return filtered;\n };\n\n const filteredOptions = getFilteredOptions();\n const hasOptions = filteredOptions.length > 0;\n\n // Handle input change\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setSearchValue(newValue);\n setIsOpen(true);\n setHighlightedIndex(-1);\n };\n\n // Handle option toggle\n const handleToggleOption = (option: AutocompleteOptionType) => {\n if (option.disabled) return;\n if (\n maxSelected &&\n selectedValues.length >= maxSelected &&\n !selectedValues.includes(option.value)\n ) {\n return;\n }\n\n const newValues = selectedValues.includes(option.value)\n ? selectedValues.filter((v) => v !== option.value)\n : [...selectedValues, option.value];\n\n if (!isControlled) {\n setInternalValue(newValues);\n }\n\n onChange?.(newValues);\n onSelect?.(options.filter((opt) => newValues.includes(opt.value)));\n setSearchValue(\"\");\n };\n\n // Handle select all\n const handleSelectAll = () => {\n const allValues = filteredOptions\n .filter((opt) => !opt.disabled)\n .map((opt) => opt.value);\n const newValues = [...new Set([...selectedValues, ...allValues])];\n\n if (!isControlled) {\n setInternalValue(newValues);\n }\n\n onChange?.(newValues);\n onSelect?.(options.filter((opt) => newValues.includes(opt.value)));\n };\n\n // Handle deselect all\n const handleDeselectAll = () => {\n const filteredValues = filteredOptions.map((opt) => opt.value);\n const newValues = selectedValues.filter(\n (v) => !filteredValues.includes(v),\n );\n\n if (!isControlled) {\n setInternalValue(newValues);\n }\n\n onChange?.(newValues);\n onSelect?.(options.filter((opt) => newValues.includes(opt.value)));\n };\n\n // Handle remove chip\n const handleRemoveChip = (value: string) => {\n const newValues = selectedValues.filter((v) => v !== value);\n\n if (!isControlled) {\n setInternalValue(newValues);\n }\n\n onChange?.(newValues);\n onSelect?.(options.filter((opt) => newValues.includes(opt.value)));\n };\n\n // Handle keyboard navigation\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (!isOpen || filteredOptions.length === 0) {\n if (e.key === \"ArrowDown\" || e.key === \"Enter\") {\n setIsOpen(true);\n }\n // Remove last chip on backspace\n if (\n e.key === \"Backspace\" &&\n searchValue === \"\" &&\n selectedValues.length > 0\n ) {\n handleRemoveChip(selectedValues[selectedValues.length - 1]);\n }\n return;\n }\n\n switch (e.key) {\n case \"ArrowDown\":\n e.preventDefault();\n setHighlightedIndex((prev) =>\n prev < filteredOptions.length - 1 ? prev + 1 : 0,\n );\n break;\n case \"ArrowUp\":\n e.preventDefault();\n setHighlightedIndex((prev) =>\n prev > 0 ? prev - 1 : filteredOptions.length - 1,\n );\n break;\n case \"Enter\":\n e.preventDefault();\n if (\n highlightedIndex >= 0 &&\n highlightedIndex < filteredOptions.length\n ) {\n handleToggleOption(filteredOptions[highlightedIndex]);\n }\n break;\n case \"Escape\":\n e.preventDefault();\n setIsOpen(false);\n setHighlightedIndex(-1);\n break;\n }\n };\n\n // Close on click outside\n useEffect(() => {\n if (!isOpen) return;\n\n const handleClickOutside = (e: MouseEvent) => {\n if (\n containerRef.current &&\n !containerRef.current.contains(e.target as Node)\n ) {\n setIsOpen(false);\n setHighlightedIndex(-1);\n setSearchValue(\"\");\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () =>\n document.removeEventListener(\"mousedown\", handleClickOutside);\n }, [isOpen]);\n\n // Check if all filtered options are selected\n const allSelected = filteredOptions\n .filter((opt) => !opt.disabled)\n .every((opt) => selectedValues.includes(opt.value));\n\n const shouldShowList = isOpen && (hasOptions || loading || emptyMessage);\n\n // Get focus-within classes using primary color\n const primaryBorderColor = \"border-line-brand\";\n const primaryRingColor = getColorClass(\n \"primary\",\n \"DEFAULT\",\n \"border\",\n ).replace(\"border-\", \"ring-\");\n\n return (\n <div ref={containerRef} className={cn(\"relative\", className)}>\n <div\n className={cn(\n \"flex\",\n \"flex-wrap\",\n getSpacingClass(\"sm\", \"gap\"),\n getSpacingClass(\"sm\", \"p\"),\n \"border\",\n getColorClass(\"neutral\", \"DEFAULT\", \"border\"),\n getRadiusClass(\"md\"),\n \"min-h-10\",\n \"focus-within:outline-none\",\n \"focus-within:ring-2\",\n \"focus-within:ring-offset-2\",\n `focus-within:${primaryBorderColor}`,\n `focus-within:${primaryRingColor}`,\n )}\n >\n {selectedOptions.map((option) => (\n <Chip\n key={option.value}\n onRemove={() => handleRemoveChip(option.value)}\n size={size === \"sm\" ? \"sm\" : size === \"lg\" ? \"lg\" : \"md\"}\n >\n {option.label}\n </Chip>\n ))}\n <input\n ref={(node) => {\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n (\n ref as React.MutableRefObject<HTMLInputElement | null>\n ).current = node;\n }\n inputRef.current = node;\n }}\n type=\"text\"\n value={searchValue}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n onFocus={() => setIsOpen(true)}\n placeholder={selectedValues.length === 0 ? placeholder : \"\"}\n disabled={disabled}\n className={cn(\n \"flex-1\",\n \"min-w-32\",\n \"outline-none\",\n \"bg-transparent\",\n inputClassName,\n )}\n />\n </div>\n\n {shouldShowList && (\n <AutocompleteList\n ref={listRef}\n options={filteredOptions.map((opt) => ({\n ...opt,\n icon: selectedValues.includes(opt.value) ? (\n <Check className={cn(\"h-4\", \"w-4\", \"text-fg-brand\")} />\n ) : (\n opt.icon\n ),\n }))}\n highlightedIndex={highlightedIndex}\n onSelect={handleToggleOption}\n loading={loading}\n emptyMessage={emptyMessage}\n containerRef={containerRef}\n showSelectAll={showSelectAll && filteredOptions.length > 0}\n allSelected={allSelected}\n onSelectAll={handleSelectAll}\n onDeselectAll={handleDeselectAll}\n />\n )}\n </div>\n );\n },\n);\n\nMultiSelect.displayName = \"MultiSelect\";\n\nexport default MultiSelect;\n","\"use client\";\n\nimport { useState, type ReactNode } from \"react\";\nimport { Star } from \"lucide-react\";\nimport { cn } from \"../../utils\";\nimport {\n getColorClass,\n getSpacingClass,\n getAnimationClass,\n getTypographySizeFromFontSize,\n} from \"../../tokens\";\n\nexport type RatingSize = \"sm\" | \"md\" | \"lg\";\nexport type RatingVariant = \"filled\" | \"outlined\";\n\nexport interface RatingProps {\n value?: number;\n defaultValue?: number;\n max?: number;\n size?: RatingSize;\n variant?: RatingVariant;\n readOnly?: boolean;\n allowHalf?: boolean;\n showValue?: boolean;\n onChange?: (value: number) => void;\n onHover?: (value: number) => void;\n className?: string;\n icon?: ReactNode;\n emptyIcon?: ReactNode;\n}\n\n/**\n * Rating Component\n *\n * A rating component for displaying and selecting ratings.\n * Supports filled and outlined variants, half ratings, and read-only mode.\n * Follows Atomic Design principles as a Molecule component.\n *\n * @example\n * ```tsx\n * <Rating value={4} max={5} onChange={(value) => console.log(value)} />\n *\n * <Rating value={3.5} readOnly showValue />\n * ```\n */\nexport default function Rating({\n value: controlledValue,\n defaultValue = 0,\n max = 5,\n size = \"md\",\n variant = \"filled\",\n readOnly = false,\n allowHalf = false,\n showValue = false,\n onChange,\n onHover,\n className = \"\",\n icon,\n emptyIcon,\n}: RatingProps) {\n const [internalValue, setInternalValue] = useState(defaultValue);\n const [hoverValue, setHoverValue] = useState<number | null>(null);\n\n const isControlled = controlledValue !== undefined;\n const displayValue =\n hoverValue ?? (isControlled ? controlledValue : internalValue);\n\n const sizeConfig = {\n sm: \"h-4 w-4\",\n md: \"h-5 w-5\",\n lg: \"h-6 w-6\",\n };\n\n const handleClick = (newValue: number) => {\n if (readOnly) return;\n\n if (!isControlled) {\n setInternalValue(newValue);\n }\n onChange?.(newValue);\n };\n\n const handleMouseEnter = (newValue: number) => {\n if (readOnly) return;\n setHoverValue(newValue);\n onHover?.(newValue);\n };\n\n const handleMouseLeave = () => {\n if (readOnly) return;\n setHoverValue(null);\n };\n\n const renderStar = (index: number) => {\n const starValue = index + 1;\n const isHalf =\n allowHalf && displayValue >= starValue - 0.5 && displayValue < starValue;\n const isFilled = displayValue >= starValue;\n\n const starClasses = cn(\n sizeConfig[size],\n getAnimationClass(\"base\"),\n !readOnly && \"cursor-pointer\",\n isFilled || isHalf\n ? \"text-fg-warning\"\n : getColorClass(\"neutral\", \"light\", \"text\"),\n );\n\n const CustomIcon = icon || (\n <Star className={starClasses} fill={isFilled ? \"currentColor\" : \"none\"} />\n );\n const CustomEmptyIcon = emptyIcon || (\n <Star className={starClasses} fill=\"none\" />\n );\n\n return (\n <span\n key={index}\n className=\"relative inline-block\"\n onClick={() => handleClick(starValue)}\n onMouseEnter={() => handleMouseEnter(starValue)}\n onMouseLeave={handleMouseLeave}\n role={readOnly ? undefined : \"button\"}\n tabIndex={readOnly ? undefined : 0}\n aria-label={`Rate ${starValue} out of ${max}`}\n onKeyDown={(e) => {\n if (!readOnly && (e.key === \"Enter\" || e.key === \" \")) {\n e.preventDefault();\n handleClick(starValue);\n }\n }}\n >\n {isHalf ? (\n <span className=\"relative inline-block\">\n <span\n className=\"absolute inset-0 overflow-hidden\"\n style={{ width: \"50%\" }}\n >\n {variant === \"filled\" ? (\n <Star className={starClasses} fill=\"currentColor\" />\n ) : (\n CustomIcon\n )}\n </span>\n {variant === \"filled\" ? (\n <Star className={starClasses} fill=\"none\" />\n ) : (\n CustomEmptyIcon\n )}\n </span>\n ) : isFilled ? (\n variant === \"filled\" ? (\n <Star className={starClasses} fill=\"currentColor\" />\n ) : (\n CustomIcon\n )\n ) : variant === \"filled\" ? (\n <Star className={starClasses} fill=\"none\" />\n ) : (\n CustomEmptyIcon\n )}\n </span>\n );\n };\n\n return (\n <div\n className={cn(\n \"inline-flex\",\n \"items-center\",\n getSpacingClass(\"xs\", \"gap\"),\n className,\n )}\n >\n <div\n className={cn(\"flex\", \"items-center\")}\n role={readOnly ? \"img\" : undefined}\n aria-label={\n readOnly ? `Rating: ${displayValue} out of ${max}` : undefined\n }\n >\n {Array.from({ length: max }, (_, i) => renderStar(i))}\n </div>\n {showValue && (\n <span\n className={cn(\n getSpacingClass(\"sm\", \"ml\"),\n getTypographySizeFromFontSize(\"sm\"),\n getColorClass(\"neutral\", \"DEFAULT\", \"text\"),\n )}\n >\n {displayValue.toFixed(allowHalf ? 1 : 0)}/{max}\n </span>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport { useState, useRef, type DragEvent, type ChangeEvent } from \"react\";\nimport { Upload, X, File, CheckCircle2, AlertCircle } from \"lucide-react\";\nimport { cn } from \"../../utils\";\nimport {\n getColorClass,\n getHoverColorClass,\n getSpacingClass,\n getRadiusClass,\n getAnimationClass,\n getTypographySizeFromFontSize,\n getTypographyWeightFromFontWeight,\n} from \"../../tokens\";\nimport Button from \"../../primitives/Button/Button\";\nimport Progress from \"../../primitives/Progress/Progress\";\n\nexport interface FileUploadFile {\n file: File;\n id: string;\n preview?: string;\n progress?: number;\n error?: string;\n}\n\nexport interface FileUploadProps {\n accept?: string;\n multiple?: boolean;\n maxSize?: number; // in bytes\n maxFiles?: number;\n onFilesChange?: (files: FileUploadFile[]) => void;\n onFileRemove?: (fileId: string) => void;\n showPreview?: boolean;\n showProgress?: boolean;\n disabled?: boolean;\n className?: string;\n label?: string;\n description?: string;\n}\n\n/**\n * FileUpload Component\n *\n * A file upload component with drag and drop, preview, validation, and progress.\n * Follows Atomic Design principles as a Molecule component.\n *\n * @example\n * ```tsx\n * <FileUpload\n * accept=\"image/*\"\n * maxSize={5 * 1024 * 1024} // 5MB\n * onFilesChange={(files) => console.log(files)}\n * />\n * ```\n */\nexport default function FileUpload({\n accept,\n multiple = false,\n maxSize,\n maxFiles,\n onFilesChange,\n onFileRemove,\n showPreview = true,\n showProgress = false,\n disabled = false,\n className = \"\",\n label,\n description,\n}: FileUploadProps) {\n const [files, setFiles] = useState<FileUploadFile[]>([]);\n const [isDragging, setIsDragging] = useState(false);\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const formatFileSize = (bytes: number): string => {\n if (bytes === 0) return \"0 Bytes\";\n const k = 1024;\n const sizes = [\"Bytes\", \"KB\", \"MB\", \"GB\"];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return Math.round((bytes / Math.pow(k, i)) * 100) / 100 + \" \" + sizes[i];\n };\n\n const validateFile = (file: File): string | null => {\n if (maxSize && file.size > maxSize) {\n return `File size exceeds ${formatFileSize(maxSize)}`;\n }\n return null;\n };\n\n const processFiles = (fileList: FileList | File[]): FileUploadFile[] => {\n const fileArray = Array.from(fileList);\n const newFiles: FileUploadFile[] = [];\n\n fileArray.forEach((file) => {\n const error = validateFile(file);\n const fileId = `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n\n const fileUpload: FileUploadFile = {\n file,\n id: fileId,\n error,\n progress: showProgress ? 0 : undefined,\n };\n\n // Generate preview for images\n if (showPreview && file.type.startsWith(\"image/\")) {\n const reader = new FileReader();\n reader.onload = (e) => {\n setFiles((prev) =>\n prev.map((f) =>\n f.id === fileId\n ? { ...f, preview: e.target?.result as string }\n : f,\n ),\n );\n };\n reader.readAsDataURL(file);\n }\n\n newFiles.push(fileUpload);\n });\n\n return newFiles;\n };\n\n const handleFiles = (newFiles: FileUploadFile[]) => {\n const updatedFiles = multiple ? [...files, ...newFiles] : newFiles;\n const limitedFiles = maxFiles\n ? updatedFiles.slice(0, maxFiles)\n : updatedFiles;\n\n setFiles(limitedFiles);\n onFilesChange?.(limitedFiles);\n };\n\n const handleDrop = (e: DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n setIsDragging(false);\n\n if (disabled) return;\n\n const droppedFiles = e.dataTransfer.files;\n if (droppedFiles.length > 0) {\n const processedFiles = processFiles(droppedFiles);\n handleFiles(processedFiles);\n }\n };\n\n const handleDragOver = (e: DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n if (!disabled) {\n setIsDragging(true);\n }\n };\n\n const handleDragLeave = (e: DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n setIsDragging(false);\n };\n\n const handleFileInput = (e: ChangeEvent<HTMLInputElement>) => {\n if (e.target.files && e.target.files.length > 0) {\n const processedFiles = processFiles(e.target.files);\n handleFiles(processedFiles);\n }\n // Reset input\n if (fileInputRef.current) {\n fileInputRef.current.value = \"\";\n }\n };\n\n const handleRemove = (fileId: string) => {\n const updatedFiles = files.filter((f) => f.id !== fileId);\n setFiles(updatedFiles);\n onFilesChange?.(updatedFiles);\n onFileRemove?.(fileId);\n };\n\n const handleClick = () => {\n if (!disabled) {\n fileInputRef.current?.click();\n }\n };\n\n return (\n <div\n className={cn(\n getSpacingClass(\"lg\", \"gap\"),\n \"flex\",\n \"flex-col\",\n className,\n )}\n >\n {(label || description) && (\n <div>\n {label && (\n <label\n className={cn(\n \"block\",\n getTypographySizeFromFontSize(\"sm\"),\n getTypographyWeightFromFontWeight(\"medium\"),\n getColorClass(\"neutral\", \"dark\", \"text\"),\n getSpacingClass(\"xs\", \"mb\"),\n )}\n >\n {label}\n </label>\n )}\n {description && (\n <p\n className={cn(\n getTypographySizeFromFontSize(\"sm\"),\n getColorClass(\"neutral\", \"DEFAULT\", \"text\"),\n )}\n >\n {description}\n </p>\n )}\n </div>\n )}\n\n <div\n onDrop={handleDrop}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onClick={handleClick}\n className={cn(\n \"relative\",\n \"border-2\",\n \"border-dashed\",\n isDragging\n ? \"border-line-brand\"\n : getColorClass(\"neutral\", \"DEFAULT\", \"border\"),\n getRadiusClass(\"lg\"),\n getSpacingClass(\"lg\", \"p\"),\n \"text-center\",\n \"cursor-pointer\",\n getAnimationClass(\"base\"),\n \"focus:border-line-focus\",\n disabled\n ? \"opacity-50 cursor-not-allowed\"\n : cn(\n getHoverColorClass(\"neutral\", \"dark\", \"border\"),\n \"focus:outline-none\",\n \"focus:ring-2\",\n \"focus:ring-offset-2\",\n ),\n )}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-label=\"Upload files\"\n aria-disabled={disabled}\n >\n <input\n ref={fileInputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n onChange={handleFileInput}\n disabled={disabled}\n className=\"hidden\"\n />\n\n <div\n className={cn(\n \"flex\",\n \"flex-col\",\n \"items-center\",\n getSpacingClass(\"sm\", \"gap\"),\n )}\n >\n <Upload\n className={cn(\n \"h-8\",\n \"w-8\",\n isDragging\n ? \"text-fg-brand\"\n : getColorClass(\"neutral\", \"DEFAULT\", \"text\"),\n )}\n />\n <div>\n <span\n className={cn(\n getTypographySizeFromFontSize(\"sm\"),\n getTypographyWeightFromFontWeight(\"medium\"),\n getColorClass(\"neutral\", \"dark\", \"text\"),\n )}\n >\n {isDragging\n ? \"Drop files here\"\n : \"Click to upload or drag and drop\"}\n </span>\n {accept && (\n <p\n className={cn(\n getTypographySizeFromFontSize(\"xs\"),\n getColorClass(\"neutral\", \"DEFAULT\", \"text\"),\n getSpacingClass(\"xs\", \"mt\"),\n )}\n >\n Accepted: {accept}\n </p>\n )}\n {maxSize && (\n <p\n className={cn(\n getTypographySizeFromFontSize(\"xs\"),\n getColorClass(\"neutral\", \"DEFAULT\", \"text\"),\n )}\n >\n Max size: {formatFileSize(maxSize)}\n </p>\n )}\n </div>\n </div>\n </div>\n\n {files.length > 0 && (\n <div className={cn(\"flex\", \"flex-col\", getSpacingClass(\"sm\", \"gap\"))}>\n {files.map((fileUpload) => (\n <div\n key={fileUpload.id}\n className={cn(\n \"flex\",\n \"items-center\",\n getSpacingClass(\"md\", \"gap\"),\n getSpacingClass(\"base\", \"p\"),\n \"border\",\n getColorClass(\"neutral\", \"DEFAULT\", \"border\"),\n getRadiusClass(\"md\"),\n fileUpload.error\n ? \"bg-error-bg\"\n : getColorClass(\"neutral\", \"light\", \"bg\"),\n )}\n >\n {showPreview && fileUpload.preview ? (\n <img\n src={fileUpload.preview}\n alt={fileUpload.file.name}\n className={cn(\n \"w-12\",\n \"h-12\",\n \"object-cover\",\n getRadiusClass(\"md\"),\n )}\n />\n ) : (\n <File\n className={cn(\n \"h-8\",\n \"w-8\",\n getColorClass(\"neutral\", \"DEFAULT\", \"text\"),\n )}\n />\n )}\n\n <div className={cn(\"flex-1\", \"min-w-0\")}>\n <p\n className={cn(\n getTypographySizeFromFontSize(\"sm\"),\n getTypographyWeightFromFontWeight(\"medium\"),\n getColorClass(\"neutral\", \"dark\", \"text\"),\n \"truncate\",\n )}\n >\n {fileUpload.file.name}\n </p>\n <p\n className={cn(\n getTypographySizeFromFontSize(\"xs\"),\n getColorClass(\"neutral\", \"DEFAULT\", \"text\"),\n )}\n >\n {formatFileSize(fileUpload.file.size)}\n </p>\n {fileUpload.error && (\n <div\n className={cn(\n \"flex\",\n \"items-center\",\n getSpacingClass(\"xs\", \"gap\"),\n getSpacingClass(\"xs\", \"mt\"),\n )}\n >\n <AlertCircle\n className={cn(\"h-3\", \"w-3\", \"text-fg-error\")}\n />\n <span\n className={cn(\n getTypographySizeFromFontSize(\"xs\"),\n \"text-fg-error\",\n )}\n >\n {fileUpload.error}\n </span>\n </div>\n )}\n {showProgress && fileUpload.progress !== undefined && (\n <div className={cn(getSpacingClass(\"sm\", \"mt\"))}>\n <Progress value={fileUpload.progress} size=\"sm\" />\n </div>\n )}\n </div>\n\n {!fileUpload.error && !showProgress && (\n <CheckCircle2 className={cn(\"h-5\", \"w-5\", \"text-fg-success\")} />\n )}\n\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={(e) => {\n e.stopPropagation();\n handleRemove(fileUpload.id);\n }}\n className=\"h-auto p-1\"\n aria-label={`Remove ${fileUpload.file.name}`}\n >\n <X className=\"h-4 w-4\" />\n </Button>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport {\n useState,\n useRef,\n useEffect,\n useCallback,\n type ReactNode,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { X } from \"lucide-react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getShadowClass } from \"../../tokens/shadows\";\nimport { getZIndexClass } from \"../../tokens/z-index\";\nimport { getAnimationClass } from \"../../tokens/animations\";\nimport { getColorClass } from \"../../tokens/colors\";\nimport {\n getTypographySize,\n getTypographyWeight,\n} from \"../../tokens/typography\";\nimport Button from \"../../primitives/Button/Button\";\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 interface PopoverProps {\n trigger: ReactNode;\n children: ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n placement?: PopoverPlacement;\n showCloseButton?: boolean;\n title?: string;\n closeOnClickOutside?: boolean;\n closeOnEscape?: boolean;\n className?: string;\n triggerClassName?: string;\n contentClassName?: string;\n}\n\n/**\n * Popover Component\n *\n * A popover component that displays content in a floating panel.\n * Supports positioning, portal rendering, and keyboard navigation.\n * Follows Atomic Design principles as an Atom component.\n *\n * @example\n * ```tsx\n * <Popover\n * trigger={<Button>Open Popover</Button>}\n * title=\"Popover Title\"\n * >\n * <p>Popover content goes here</p>\n * </Popover>\n * ```\n */\nexport default function Popover({\n trigger,\n children,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n placement = \"bottom\",\n showCloseButton = false,\n title,\n closeOnClickOutside = true,\n closeOnEscape = true,\n className = \"\",\n triggerClassName = \"\",\n contentClassName = \"\",\n}: PopoverProps) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const triggerRef = useRef<HTMLDivElement>(null);\n const popoverRef = useRef<HTMLDivElement>(null);\n const [position, setPosition] = useState({ top: 0, left: 0 });\n\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : internalOpen;\n\n const updatePosition = useCallback(() => {\n if (!triggerRef.current || !popoverRef.current) return;\n\n const triggerRect = triggerRef.current.getBoundingClientRect();\n const popoverRect = popoverRef.current.getBoundingClientRect();\n const scrollY = window.scrollY;\n const scrollX = window.scrollX;\n\n let top = 0;\n let left = 0;\n\n // Calculate position based on placement\n if (placement.startsWith(\"top\")) {\n top = triggerRect.top + scrollY - popoverRect.height - 8;\n if (placement === \"top-start\") left = triggerRect.left + scrollX;\n else if (placement === \"top-end\")\n left = triggerRect.right + scrollX - popoverRect.width;\n else\n left =\n triggerRect.left +\n scrollX +\n (triggerRect.width - popoverRect.width) / 2;\n } else if (placement.startsWith(\"bottom\")) {\n top = triggerRect.bottom + scrollY + 8;\n if (placement === \"bottom-start\") left = triggerRect.left + scrollX;\n else if (placement === \"bottom-end\")\n left = triggerRect.right + scrollX - popoverRect.width;\n else\n left =\n triggerRect.left +\n scrollX +\n (triggerRect.width - popoverRect.width) / 2;\n } else if (placement.startsWith(\"left\")) {\n left = triggerRect.left + scrollX - popoverRect.width - 8;\n if (placement === \"left-start\") top = triggerRect.top + scrollY;\n else if (placement === \"left-end\")\n top = triggerRect.bottom + scrollY - popoverRect.height;\n else\n top =\n triggerRect.top +\n scrollY +\n (triggerRect.height - popoverRect.height) / 2;\n } else if (placement.startsWith(\"right\")) {\n left = triggerRect.right + scrollX + 8;\n if (placement === \"right-start\") top = triggerRect.top + scrollY;\n else if (placement === \"right-end\")\n top = triggerRect.bottom + scrollY - popoverRect.height;\n else\n top =\n triggerRect.top +\n scrollY +\n (triggerRect.height - popoverRect.height) / 2;\n }\n\n // Keep within viewport\n const padding = 8;\n top = Math.max(\n padding,\n Math.min(\n top,\n window.innerHeight + scrollY - popoverRect.height - padding,\n ),\n );\n left = Math.max(\n padding,\n Math.min(left, window.innerWidth + scrollX - popoverRect.width - padding),\n );\n\n setPosition({ top, left });\n }, [placement]);\n\n useEffect(() => {\n if (isOpen) {\n updatePosition();\n const handleResize = () => updatePosition();\n const handleScroll = () => updatePosition();\n window.addEventListener(\"resize\", handleResize);\n window.addEventListener(\"scroll\", handleScroll, true);\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n window.removeEventListener(\"scroll\", handleScroll, true);\n };\n }\n }, [isOpen, placement, updatePosition]);\n\n useEffect(() => {\n if (isOpen && popoverRef.current) {\n // Small delay to ensure DOM is ready\n setTimeout(updatePosition, 0);\n }\n }, [isOpen, updatePosition]);\n\n const handleOpenChange = useCallback(\n (newOpen: boolean) => {\n if (!isControlled) {\n setInternalOpen(newOpen);\n }\n onOpenChange?.(newOpen);\n },\n [isControlled, onOpenChange],\n );\n\n const handleClose = useCallback(() => {\n handleOpenChange(false);\n }, [handleOpenChange]);\n\n useEffect(() => {\n if (isOpen && closeOnEscape) {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n handleClose();\n }\n };\n document.addEventListener(\"keydown\", handleEscape);\n return () => document.removeEventListener(\"keydown\", handleEscape);\n }\n }, [isOpen, closeOnEscape, handleClose]);\n\n useEffect(() => {\n if (isOpen && closeOnClickOutside) {\n const handleClickOutside = (e: MouseEvent) => {\n if (\n popoverRef.current &&\n triggerRef.current &&\n !popoverRef.current.contains(e.target as Node) &&\n !triggerRef.current.contains(e.target as Node)\n ) {\n handleClose();\n }\n };\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () =>\n document.removeEventListener(\"mousedown\", handleClickOutside);\n }\n }, [isOpen, closeOnClickOutside, handleClose]);\n\n const popoverContent = isOpen ? (\n <div\n ref={popoverRef}\n className={`\n absolute\n ${getZIndexClass(\"popover\")}\n bg-white\n ${getRadiusClass(\"lg\")}\n ${getShadowClass(\"lg\")}\n border\n ${getColorClass(\"neutral\", \"DEFAULT\", \"border\")}\n min-w-48\n max-w-96\n ${getAnimationClass(\"base\")}\n ${contentClassName}\n `}\n style={{\n top: `${position.top}px`,\n left: `${position.left}px`,\n }}\n role=\"dialog\"\n aria-modal=\"false\"\n >\n {(title || showCloseButton) && (\n <div\n className={`\n flex\n items-center\n justify-between\n ${getSpacingClass(\"base\", \"px\")}\n ${getSpacingClass(\"md\", \"py\")}\n border-b\n ${getColorClass(\"neutral\", \"DEFAULT\", \"border\")}\n `}\n >\n {title && (\n <h3\n className={`${getTypographySize(\"bodySmall\")} ${getTypographyWeight(\"h5\")} ${getColorClass(\"neutral\", \"dark\", \"text\")}`}\n >\n {title}\n </h3>\n )}\n {showCloseButton && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleClose}\n className=\"h-auto p-1\"\n aria-label=\"Close popover\"\n >\n <X className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n )}\n <div\n className={`\n ${getSpacingClass(\"base\", \"p\")}\n ${title || showCloseButton ? \"\" : getSpacingClass(\"md\", \"p\")}\n `}\n >\n {children}\n </div>\n </div>\n ) : null;\n\n return (\n <div className={`inline-block ${className}`}>\n <div\n ref={triggerRef}\n className={triggerClassName}\n onClick={() => handleOpenChange(!isOpen)}\n >\n {trigger}\n </div>\n {typeof window !== \"undefined\" &&\n createPortal(popoverContent, document.body)}\n </div>\n );\n}\n","\"use client\";\n\nimport { useState, useEffect, useCallback } from \"react\";\nimport { Clock } from \"lucide-react\";\nimport Input from \"../../primitives/Input/Input\";\nimport Popover from \"../Popover/Popover\";\nimport Button from \"../../primitives/Button/Button\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\nexport type TimeFormat = \"12h\" | \"24h\";\n\nexport interface TimePickerProps {\n value?: string; // Format: \"HH:mm\" for 24h or \"hh:mm AM/PM\" for 12h\n defaultValue?: string;\n format?: TimeFormat;\n onChange?: (value: string) => void;\n disabled?: boolean;\n label?: string;\n error?: boolean;\n helperText?: string;\n className?: string;\n}\n\n/**\n * TimePicker Component\n *\n * A time picker component for selecting time values.\n * Supports 12h and 24h formats.\n * Follows Atomic Design principles as a Molecule component.\n *\n * @example\n * ```tsx\n * <TimePicker\n * value=\"14:30\"\n * format=\"24h\"\n * onChange={(value) => console.log(value)}\n * />\n * ```\n */\nexport default function TimePicker({\n value: controlledValue,\n defaultValue,\n format = \"24h\",\n onChange,\n disabled = false,\n label,\n error = false,\n helperText,\n className = \"\",\n}: TimePickerProps) {\n const [internalValue, setInternalValue] = useState(defaultValue || \"\");\n const [hours, setHours] = useState(12);\n const [minutes, setMinutes] = useState(0);\n const [amPm, setAmPm] = useState<\"AM\" | \"PM\">(\"AM\");\n\n const isControlled = controlledValue !== undefined;\n const currentValue = isControlled ? controlledValue : internalValue;\n\n // Parse time value\n const parseTime = useCallback(\n (timeStr: string) => {\n if (!timeStr) return { hours: 12, minutes: 0, amPm: \"AM\" as const };\n\n if (format === \"24h\") {\n const [h, m] = timeStr.split(\":\").map(Number);\n return { hours: h || 12, minutes: m || 0, amPm: \"AM\" as const };\n } else {\n const match = timeStr.match(/(\\d+):(\\d+)\\s*(AM|PM)/i);\n if (match) {\n return {\n hours: parseInt(match[1]),\n minutes: parseInt(match[2]),\n amPm: match[3].toUpperCase() as \"AM\" | \"PM\",\n };\n }\n return { hours: 12, minutes: 0, amPm: \"AM\" as const };\n }\n },\n [format],\n );\n\n // Format time value\n const formatTime = (h: number, m: number, ap?: \"AM\" | \"PM\"): string => {\n if (format === \"24h\") {\n return `${String(h).padStart(2, \"0\")}:${String(m).padStart(2, \"0\")}`;\n } else {\n const displayHours =\n ap === \"PM\" && h !== 12 ? h + 12 : ap === \"AM\" && h === 12 ? 0 : h;\n return `${String(displayHours === 0 ? 12 : displayHours > 12 ? displayHours - 12 : displayHours).padStart(2, \"0\")}:${String(m).padStart(2, \"0\")} ${ap || \"AM\"}`;\n }\n };\n\n // Initialize from value\n useEffect(() => {\n if (currentValue) {\n const parsed = parseTime(currentValue);\n setHours(parsed.hours);\n setMinutes(parsed.minutes);\n setAmPm(parsed.amPm);\n }\n }, [currentValue, parseTime]);\n\n const handleHoursChange = (newHours: number) => {\n const validHours =\n format === \"24h\"\n ? Math.max(0, Math.min(23, newHours))\n : Math.max(1, Math.min(12, newHours));\n\n setHours(validHours);\n const newValue = formatTime(\n validHours,\n minutes,\n format === \"12h\" ? amPm : undefined,\n );\n\n if (!isControlled) {\n setInternalValue(newValue);\n }\n onChange?.(newValue);\n };\n\n const handleMinutesChange = (newMinutes: number) => {\n const validMinutes = Math.max(0, Math.min(59, newMinutes));\n setMinutes(validMinutes);\n const newValue = formatTime(\n hours,\n validMinutes,\n format === \"12h\" ? amPm : undefined,\n );\n\n if (!isControlled) {\n setInternalValue(newValue);\n }\n onChange?.(newValue);\n };\n\n const handleAmPmToggle = () => {\n const newAmPm = amPm === \"AM\" ? \"PM\" : \"AM\";\n setAmPm(newAmPm);\n const newValue = formatTime(hours, minutes, newAmPm);\n\n if (!isControlled) {\n setInternalValue(newValue);\n }\n onChange?.(newValue);\n };\n\n const incrementHours = () => {\n if (format === \"24h\") {\n handleHoursChange((hours + 1) % 24);\n } else {\n const newHours = hours === 12 ? 1 : hours + 1;\n handleHoursChange(newHours);\n }\n };\n\n const decrementHours = () => {\n if (format === \"24h\") {\n handleHoursChange(hours === 0 ? 23 : hours - 1);\n } else {\n const newHours = hours === 1 ? 12 : hours - 1;\n handleHoursChange(newHours);\n }\n };\n\n const incrementMinutes = () => {\n handleMinutesChange((minutes + 1) % 60);\n };\n\n const decrementMinutes = () => {\n handleMinutesChange(minutes === 0 ? 59 : minutes - 1);\n };\n\n const timePickerContent = (\n <div className={`${getSpacingClass(\"base\", \"p\")} min-w-48`}>\n <div className=\"flex items-center justify-center gap-4\">\n {/* Hours */}\n <div className=\"flex flex-col items-center gap-2\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={incrementHours}\n disabled={disabled}\n aria-label=\"Increment hours\"\n >\n ↑\n </Button>\n <div className=\"text-2xl font-mono font-semibold w-12 text-center\">\n {String(hours).padStart(2, \"0\")}\n </div>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={decrementHours}\n disabled={disabled}\n aria-label=\"Decrement hours\"\n >\n ↓\n </Button>\n </div>\n\n <div className=\"text-2xl font-semibold\">:</div>\n\n {/* Minutes */}\n <div className=\"flex flex-col items-center gap-2\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={incrementMinutes}\n disabled={disabled}\n aria-label=\"Increment minutes\"\n >\n ↑\n </Button>\n <div className=\"text-2xl font-mono font-semibold w-12 text-center\">\n {String(minutes).padStart(2, \"0\")}\n </div>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={decrementMinutes}\n disabled={disabled}\n aria-label=\"Decrement minutes\"\n >\n ↓\n </Button>\n </div>\n\n {/* AM/PM for 12h format */}\n {format === \"12h\" && (\n <div className=\"flex flex-col gap-2 ml-2\">\n <Button\n variant={amPm === \"AM\" ? \"primary\" : \"outline\"}\n size=\"sm\"\n onClick={() => handleAmPmToggle()}\n disabled={disabled}\n >\n AM\n </Button>\n <Button\n variant={amPm === \"PM\" ? \"primary\" : \"outline\"}\n size=\"sm\"\n onClick={() => handleAmPmToggle()}\n disabled={disabled}\n >\n PM\n </Button>\n </div>\n )}\n </div>\n </div>\n );\n\n return (\n <div className={className}>\n <Popover\n trigger={\n <Input\n label={label}\n value={\n currentValue ||\n formatTime(hours, minutes, format === \"12h\" ? amPm : undefined)\n }\n readOnly\n disabled={disabled}\n error={error}\n helperText={helperText}\n leftIcon={<Clock className=\"h-4 w-4\" />}\n className=\"cursor-pointer\"\n />\n }\n placement=\"bottom-start\"\n showCloseButton\n title=\"Select Time\"\n >\n {timePickerContent}\n </Popover>\n </div>\n );\n}\n","\"use client\";\n\nimport { useState, useEffect, type ChangeEvent } from \"react\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getShadowClass } from \"../../tokens/shadows\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport Input from \"../../primitives/Input/Input\";\nimport Popover from \"../Popover/Popover\";\n\nexport type ColorFormat = \"hex\" | \"rgb\" | \"hsl\";\n\nexport interface ColorPickerProps {\n value?: string; // Hex color (e.g., \"#ff0000\")\n defaultValue?: string;\n format?: ColorFormat;\n onChange?: (value: string) => void;\n presets?: string[];\n showInput?: boolean;\n disabled?: boolean;\n label?: string;\n className?: string;\n}\n\n/**\n * ColorPicker Component\n *\n * A color picker component for selecting colors.\n * Supports hex, rgb, and hsl formats with presets.\n * Follows Atomic Design principles as a Molecule component.\n *\n * @example\n * ```tsx\n * <ColorPicker\n * value=\"#ff0000\"\n * onChange={(color) => console.log(color)}\n * />\n * ```\n */\nexport default function ColorPicker({\n value: controlledValue,\n defaultValue = \"#000000\",\n format: _format = \"hex\",\n onChange,\n presets,\n showInput = true,\n disabled = false,\n label,\n className = \"\",\n}: ColorPickerProps) {\n const [internalValue, setInternalValue] = useState(defaultValue);\n const [rgb, setRgb] = useState({ r: 0, g: 0, b: 0 });\n\n const isControlled = controlledValue !== undefined;\n const currentValue = isControlled ? controlledValue : internalValue;\n\n // Convert hex to RGB\n const hexToRgb = (hex: string) => {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result\n ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16),\n }\n : { r: 0, g: 0, b: 0 };\n };\n\n // Convert RGB to hex\n const rgbToHex = (r: number, g: number, b: number) => {\n return (\n \"#\" +\n [r, g, b]\n .map((x) => {\n const hex = x.toString(16);\n return hex.length === 1 ? \"0\" + hex : hex;\n })\n .join(\"\")\n );\n };\n\n // Update RGB when value changes\n useEffect(() => {\n if (currentValue) {\n const rgbValue = hexToRgb(currentValue);\n setRgb(rgbValue);\n }\n }, [currentValue]);\n\n const handleHexChange = (e: ChangeEvent<HTMLInputElement>) => {\n const hex = e.target.value;\n if (/^#[0-9A-F]{6}$/i.test(hex) || hex === \"\") {\n if (!isControlled) {\n setInternalValue(hex);\n }\n onChange?.(hex);\n if (hex) {\n setRgb(hexToRgb(hex));\n }\n }\n };\n\n const handleRgbChange = (component: \"r\" | \"g\" | \"b\", val: number) => {\n const newRgb = { ...rgb, [component]: Math.max(0, Math.min(255, val)) };\n setRgb(newRgb);\n const hex = rgbToHex(newRgb.r, newRgb.g, newRgb.b);\n if (!isControlled) {\n setInternalValue(hex);\n }\n onChange?.(hex);\n };\n\n const defaultPresets = [\n \"#000000\",\n \"#ffffff\",\n \"#ff0000\",\n \"#00ff00\",\n \"#0000ff\",\n \"#ffff00\",\n \"#ff00ff\",\n \"#00ffff\",\n \"#808080\",\n \"#ffa500\",\n ];\n\n const colorPresets = presets || defaultPresets;\n\n const colorPickerContent = (\n <div className={`${getSpacingClass(\"base\", \"p\")} min-w-[280px]`}>\n {/* Color Preview */}\n <div\n className={`\n w-full\n h-32\n ${getRadiusClass(\"md\")}\n ${getShadowClass(\"sm\")}\n mb-4\n border\n border-gray-200\n `}\n style={{ backgroundColor: currentValue }}\n />\n\n {/* RGB Sliders */}\n <div className=\"space-y-3 mb-4\">\n <div>\n <label className=\"block text-xs font-medium text-gray-700 mb-1\">\n Red: {rgb.r}\n </label>\n <input\n type=\"range\"\n min=\"0\"\n max=\"255\"\n value={rgb.r}\n onChange={(e) => handleRgbChange(\"r\", parseInt(e.target.value))}\n disabled={disabled}\n className=\"w-full\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-medium text-gray-700 mb-1\">\n Green: {rgb.g}\n </label>\n <input\n type=\"range\"\n min=\"0\"\n max=\"255\"\n value={rgb.g}\n onChange={(e) => handleRgbChange(\"g\", parseInt(e.target.value))}\n disabled={disabled}\n className=\"w-full\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-medium text-gray-700 mb-1\">\n Blue: {rgb.b}\n </label>\n <input\n type=\"range\"\n min=\"0\"\n max=\"255\"\n value={rgb.b}\n onChange={(e) => handleRgbChange(\"b\", parseInt(e.target.value))}\n disabled={disabled}\n className=\"w-full\"\n />\n </div>\n </div>\n\n {/* Hex Input */}\n {showInput && (\n <div className=\"mb-4\">\n <Input\n label=\"Hex\"\n value={currentValue}\n onChange={handleHexChange}\n disabled={disabled}\n placeholder=\"#000000\"\n className=\"font-mono\"\n />\n </div>\n )}\n\n {/* Color Presets */}\n {colorPresets.length > 0 && (\n <div>\n <label className=\"block text-xs font-medium text-gray-700 mb-2\">\n Presets\n </label>\n <div className=\"grid grid-cols-10 gap-1\">\n {colorPresets.map((color, index) => (\n <button\n key={index}\n type=\"button\"\n onClick={() => {\n if (!disabled) {\n if (!isControlled) {\n setInternalValue(color);\n }\n onChange?.(color);\n setRgb(hexToRgb(color));\n }\n }}\n disabled={disabled}\n className={`\n w-6\n h-6\n ${getRadiusClass(\"sm\")}\n border\n border-gray-300\n hover:scale-110\n ${getShadowClass(\"sm\")}\n ${currentValue.toLowerCase() === color.toLowerCase() ? \"ring-2 ring-offset-1 ring-indigo-500\" : \"\"}\n `}\n style={{ backgroundColor: color }}\n aria-label={`Select color ${color}`}\n />\n ))}\n </div>\n </div>\n )}\n </div>\n );\n\n return (\n <div className={className}>\n <Popover\n trigger={\n <div className=\"flex items-center gap-2\">\n {label && (\n <label className=\"text-sm font-medium text-gray-700\">\n {label}\n </label>\n )}\n <div\n className={`\n w-10\n h-10\n ${getRadiusClass(\"md\")}\n border\n border-gray-300\n ${getShadowClass(\"sm\")}\n cursor-pointer\n ${disabled ? \"opacity-50 cursor-not-allowed\" : \"\"}\n `}\n style={{ backgroundColor: currentValue }}\n />\n {showInput && (\n <Input\n value={currentValue}\n onChange={handleHexChange}\n disabled={disabled}\n placeholder=\"#000000\"\n className=\"w-24 font-mono\"\n />\n )}\n </div>\n }\n placement=\"bottom-start\"\n showCloseButton\n title=\"Pick a Color\"\n >\n {colorPickerContent}\n </Popover>\n </div>\n );\n}\n","\"use client\";\n\n/* eslint-disable react-refresh/only-export-components */\nimport { createContext, useContext, type ReactNode } from \"react\";\nimport type { DrawerPosition } from \"./Drawer\";\n\nexport interface DrawerContextValue {\n isOpen: boolean;\n closeDrawer: () => void;\n position: DrawerPosition;\n size: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\";\n closeOnOverlayClick: boolean;\n closeOnEscape: boolean;\n}\n\nconst DrawerContext = createContext<DrawerContextValue | undefined>(undefined);\n\nexport function DrawerProvider({\n children,\n value,\n}: {\n children: ReactNode;\n value: DrawerContextValue;\n}) {\n return (\n <DrawerContext.Provider value={value}>{children}</DrawerContext.Provider>\n );\n}\n\nexport function useDrawerContext() {\n const context = useContext(DrawerContext);\n if (!context) {\n throw new Error(\"Drawer components must be used within Drawer\");\n }\n return context;\n}\n","\"use client\";\n\nimport { useEffect, type ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { getShadowClass } from \"../../tokens/shadows\";\nimport { getZIndexClass } from \"../../tokens/z-index\";\nimport { getAnimationClass } from \"../../tokens/animations\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getColorClass } from \"../../tokens/colors\";\nimport { useDrawerContext } from \"./DrawerContext\";\nimport { X } from \"lucide-react\";\nimport { Button } from \"../../primitives\";\n\nexport interface DrawerContentProps {\n children: ReactNode;\n className?: string;\n showCloseButton?: boolean;\n}\n\n/**\n * DrawerContent Component\n *\n * The main content container for the drawer.\n * Renders in a portal with overlay.\n */\nexport default function DrawerContent({\n children,\n className = \"\",\n showCloseButton = false,\n}: DrawerContentProps) {\n const {\n isOpen,\n closeDrawer,\n position,\n size,\n closeOnOverlayClick,\n closeOnEscape,\n } = useDrawerContext();\n\n // Close on escape\n useEffect(() => {\n if (isOpen && closeOnEscape) {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n closeDrawer();\n }\n };\n document.addEventListener(\"keydown\", handleEscape);\n return () => document.removeEventListener(\"keydown\", handleEscape);\n }\n }, [isOpen, closeOnEscape, closeDrawer]);\n\n // Prevent body scroll when open\n useEffect(() => {\n if (isOpen) {\n document.body.style.overflow = \"hidden\";\n return () => {\n document.body.style.overflow = \"\";\n };\n }\n }, [isOpen]);\n\n if (!isOpen) return null;\n\n const sizeClasses = {\n sm: position === \"left\" || position === \"right\" ? \"w-64\" : \"h-64\",\n md: position === \"left\" || position === \"right\" ? \"w-96\" : \"h-96\",\n lg: position === \"left\" || position === \"right\" ? \"w-[32rem]\" : \"h-[32rem]\",\n xl: position === \"left\" || position === \"right\" ? \"w-[42rem]\" : \"h-[42rem]\",\n full: position === \"left\" || position === \"right\" ? \"w-full\" : \"h-full\",\n };\n\n const positionClasses = {\n left: \"left-0 top-0 bottom-0\",\n right: \"right-0 top-0 bottom-0\",\n top: \"top-0 left-0 right-0\",\n bottom: \"bottom-0 left-0 right-0\",\n };\n\n const drawerContent = (\n <>\n {/* Overlay */}\n <div\n className={`\n fixed\n inset-0\n bg-black/50\n ${getZIndexClass(\"modal\")}\n ${getAnimationClass(\"base\")}\n ${isOpen ? \"opacity-100\" : \"opacity-0\"}\n `}\n onClick={closeOnOverlayClick ? closeDrawer : undefined}\n aria-hidden=\"true\"\n />\n\n {/* Drawer */}\n <div\n className={`\n fixed\n ${positionClasses[position]}\n ${sizeClasses[size]}\n ${position === \"left\" || position === \"right\" ? \"max-w-[90vw]\" : \"max-h-[90vh]\"}\n bg-white\n ${getShadowClass(\"xl\")}\n ${getZIndexClass(\"modal\")}\n ${getAnimationClass(\"base\")}\n flex\n flex-col\n ${className}\n `}\n role=\"dialog\"\n aria-modal=\"true\"\n onClick={(e) => e.stopPropagation()}\n >\n {showCloseButton && (\n <div\n className={`\n flex\n justify-end\n ${getSpacingClass(\"sm\", \"p\")}\n border-b\n ${getColorClass(\"neutral\", \"DEFAULT\", \"border\")}\n `}\n >\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={closeDrawer}\n className=\"h-auto p-1\"\n aria-label=\"Close drawer\"\n >\n <X className=\"h-4 w-4\" />\n </Button>\n </div>\n )}\n {children}\n </div>\n </>\n );\n\n return typeof window !== \"undefined\"\n ? createPortal(drawerContent, document.body)\n : null;\n}\n","\"use client\";\n\nimport { type ReactNode, type HTMLAttributes } from \"react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getColorClass } from \"../../tokens/colors\";\n\nexport interface DrawerHeaderProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\n/**\n * DrawerHeader Component\n *\n * Header section for drawer content.\n *\n * @example\n * ```tsx\n * <DrawerHeader>\n * <h2>Drawer Title</h2>\n * </DrawerHeader>\n * ```\n */\nexport default function DrawerHeader({\n children,\n className = \"\",\n ...props\n}: DrawerHeaderProps) {\n return (\n <div\n className={`\n ${getSpacingClass(\"lg\", \"p\")}\n border-b\n ${getColorClass(\"neutral\", \"DEFAULT\", \"border\")}\n ${className}\n `}\n {...props}\n >\n {children}\n </div>\n );\n}\n","\"use client\";\n\nimport { type ReactNode, type HTMLAttributes } from \"react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getColorClass } from \"../../tokens/colors\";\n\nexport interface DrawerFooterProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\n/**\n * DrawerFooter Component\n *\n * Footer section for drawer content, typically contains action buttons.\n *\n * @example\n * ```tsx\n * <DrawerFooter>\n * <Button>Save</Button>\n * <Button variant=\"outline\">Cancel</Button>\n * </DrawerFooter>\n * ```\n */\nexport default function DrawerFooter({\n children,\n className = \"\",\n ...props\n}: DrawerFooterProps) {\n return (\n <div\n className={`\n ${getSpacingClass(\"lg\", \"p\")}\n border-t\n ${getColorClass(\"neutral\", \"DEFAULT\", \"border\")}\n flex\n justify-end\n ${getSpacingClass(\"sm\", \"gap\")}\n ${className}\n `}\n {...props}\n >\n {children}\n </div>\n );\n}\n","\"use client\";\n\nimport { useState, type ReactNode } from \"react\";\nimport DrawerContent from \"./DrawerContent\";\nimport DrawerHeader from \"./DrawerHeader\";\nimport DrawerFooter from \"./DrawerFooter\";\nimport { DrawerProvider } from \"./DrawerContext\";\n\nexport type DrawerPosition = \"left\" | \"right\" | \"top\" | \"bottom\";\n\nexport interface DrawerProps {\n children: ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n position?: DrawerPosition;\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\";\n closeOnOverlayClick?: boolean;\n closeOnEscape?: boolean;\n}\n\n/**\n * Drawer Component\n *\n * A side drawer component that slides in from different positions.\n * Follows Atomic Design principles as an Atom component.\n * Uses Compound Component pattern.\n *\n * @example\n * ```tsx\n * <Drawer>\n * <DrawerContent>\n * <DrawerHeader>\n * <h2>Title</h2>\n * </DrawerHeader>\n * <p>Content goes here</p>\n * <DrawerFooter>\n * <Button>Close</Button>\n * </DrawerFooter>\n * </DrawerContent>\n * </Drawer>\n * ```\n */\nexport default function Drawer({\n children,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n position = \"right\",\n size = \"md\",\n closeOnOverlayClick = true,\n closeOnEscape = true,\n}: DrawerProps) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : internalOpen;\n\n const setIsOpen = (newOpen: boolean) => {\n if (!isControlled) {\n setInternalOpen(newOpen);\n }\n onOpenChange?.(newOpen);\n };\n\n const closeDrawer = () => {\n setIsOpen(false);\n };\n\n return (\n <DrawerProvider\n value={{\n isOpen,\n closeDrawer,\n position,\n size,\n closeOnOverlayClick,\n closeOnEscape,\n }}\n >\n {children}\n </DrawerProvider>\n );\n}\n\n// Export sub-components for compound pattern\nDrawer.Content = DrawerContent;\nDrawer.Header = DrawerHeader;\nDrawer.Footer = DrawerFooter;\n\n// Also export as named exports for easier imports\nexport { DrawerContent, DrawerHeader, DrawerFooter };\n","\"use client\";\n\n/* eslint-disable react-refresh/only-export-components */\nimport { createContext, useContext, type ReactNode } from \"react\";\n\ninterface MenuContextValue {\n isOpen: boolean;\n setIsOpen: (open: boolean) => void;\n closeMenu: () => void;\n placement: \"top\" | \"bottom\" | \"left\" | \"right\";\n}\n\nconst MenuContext = createContext<MenuContextValue | undefined>(undefined);\n\nexport function MenuProvider({\n children,\n value,\n}: {\n children: ReactNode;\n value: MenuContextValue;\n}) {\n return <MenuContext.Provider value={value}>{children}</MenuContext.Provider>;\n}\n\nexport function useMenuContext() {\n const context = useContext(MenuContext);\n if (!context) {\n throw new Error(\"Menu components must be used within Menu\");\n }\n return context;\n}\n","\"use client\";\n\nimport { forwardRef, type ReactNode, type HTMLAttributes } from \"react\";\nimport { useMenuContext } from \"./MenuContext\";\n\nexport interface MenuTriggerProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n asChild?: boolean;\n}\n\n/**\n * MenuTrigger Component\n *\n * The trigger element that opens/closes the menu.\n * Must be used within a Menu component.\n */\nconst MenuTrigger = forwardRef<HTMLDivElement, MenuTriggerProps>(\n function MenuTrigger({ children, asChild = false, onClick, ...props }, ref) {\n const { isOpen, setIsOpen } = useMenuContext();\n\n const handleClick = (e: React.MouseEvent<HTMLDivElement>) => {\n onClick?.(e);\n if (!asChild) {\n setIsOpen(!isOpen);\n }\n };\n\n return (\n <div\n ref={ref}\n onClick={handleClick}\n role=\"button\"\n tabIndex={0}\n aria-haspopup=\"menu\"\n aria-expanded={isOpen}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\n\nMenuTrigger.displayName = \"MenuTrigger\";\n\nexport default MenuTrigger;\n","\"use client\";\n\nimport { useState, useEffect, useRef, type ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getShadowClass } from \"../../tokens/shadows\";\nimport { getZIndexClass } from \"../../tokens/z-index\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getColorClass } from \"../../tokens/colors\";\nimport { useMenuContext } from \"./MenuContext\";\n\nexport interface MenuContentProps {\n children: ReactNode;\n className?: string;\n align?: \"start\" | \"end\" | \"center\";\n}\n\n/**\n * MenuContent Component\n *\n * The content container for menu items.\n * Renders in a portal and positions itself relative to the trigger.\n */\nexport default function MenuContent({\n children,\n className = \"\",\n align = \"start\",\n}: MenuContentProps) {\n const { isOpen, closeMenu, placement } = useMenuContext();\n const contentRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLElement | null>(null);\n const [position, setPosition] = useState({ top: 0, left: 0 });\n\n // Find trigger element\n useEffect(() => {\n if (isOpen) {\n // Find the trigger by looking for element with aria-haspopup=\"menu\"\n const trigger = document.querySelector(\n '[aria-haspopup=\"menu\"]',\n ) as HTMLElement;\n triggerRef.current = trigger;\n }\n }, [isOpen]);\n\n // Calculate position\n useEffect(() => {\n if (isOpen && contentRef.current && triggerRef.current) {\n const updatePosition = () => {\n const triggerRect = triggerRef.current!.getBoundingClientRect();\n const contentRect = contentRef.current!.getBoundingClientRect();\n const scrollY = window.scrollY;\n const scrollX = window.scrollX;\n\n let top = 0;\n let left = 0;\n\n if (placement === \"bottom\") {\n top = triggerRect.bottom + scrollY + 4;\n if (align === \"start\") left = triggerRect.left + scrollX;\n else if (align === \"end\")\n left = triggerRect.right + scrollX - contentRect.width;\n else\n left =\n triggerRect.left +\n scrollX +\n (triggerRect.width - contentRect.width) / 2;\n } else if (placement === \"top\") {\n top = triggerRect.top + scrollY - contentRect.height - 4;\n if (align === \"start\") left = triggerRect.left + scrollX;\n else if (align === \"end\")\n left = triggerRect.right + scrollX - contentRect.width;\n else\n left =\n triggerRect.left +\n scrollX +\n (triggerRect.width - contentRect.width) / 2;\n } else if (placement === \"right\") {\n left = triggerRect.right + scrollX + 4;\n if (align === \"start\") top = triggerRect.top + scrollY;\n else if (align === \"end\")\n top = triggerRect.bottom + scrollY - contentRect.height;\n else\n top =\n triggerRect.top +\n scrollY +\n (triggerRect.height - contentRect.height) / 2;\n } else if (placement === \"left\") {\n left = triggerRect.left + scrollX - contentRect.width - 4;\n if (align === \"start\") top = triggerRect.top + scrollY;\n else if (align === \"end\")\n top = triggerRect.bottom + scrollY - contentRect.height;\n else\n top =\n triggerRect.top +\n scrollY +\n (triggerRect.height - contentRect.height) / 2;\n }\n\n // Keep within viewport\n const padding = 8;\n top = Math.max(\n padding,\n Math.min(\n top,\n window.innerHeight + scrollY - contentRect.height - padding,\n ),\n );\n left = Math.max(\n padding,\n Math.min(\n left,\n window.innerWidth + scrollX - contentRect.width - padding,\n ),\n );\n\n setPosition({ top, left });\n };\n\n updatePosition();\n const handleResize = () => updatePosition();\n const handleScroll = () => updatePosition();\n window.addEventListener(\"resize\", handleResize);\n window.addEventListener(\"scroll\", handleScroll, true);\n\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n window.removeEventListener(\"scroll\", handleScroll, true);\n };\n }\n }, [isOpen, placement, align]);\n\n // Close on escape\n useEffect(() => {\n if (isOpen) {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n closeMenu();\n }\n };\n document.addEventListener(\"keydown\", handleEscape);\n return () => document.removeEventListener(\"keydown\", handleEscape);\n }\n }, [isOpen, closeMenu]);\n\n // Close on click outside\n useEffect(() => {\n if (isOpen) {\n const handleClickOutside = (e: MouseEvent) => {\n if (\n contentRef.current &&\n triggerRef.current &&\n !contentRef.current.contains(e.target as Node) &&\n !triggerRef.current.contains(e.target as Node)\n ) {\n closeMenu();\n }\n };\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () =>\n document.removeEventListener(\"mousedown\", handleClickOutside);\n }\n }, [isOpen, closeMenu]);\n\n if (!isOpen) return null;\n\n const menuContent = (\n <div\n ref={contentRef}\n role=\"menu\"\n className={`\n absolute\n ${getZIndexClass(\"popover\")}\n bg-white\n ${getRadiusClass(\"md\")}\n ${getShadowClass(\"lg\")}\n border\n ${getColorClass(\"neutral\", \"DEFAULT\", \"border\")}\n min-w-40\n ${getSpacingClass(\"xs\", \"py\")}\n ${className}\n `}\n style={{\n top: `${position.top}px`,\n left: `${position.left}px`,\n }}\n >\n {children}\n </div>\n );\n\n return typeof window !== \"undefined\"\n ? createPortal(menuContent, document.body)\n : null;\n}\n","\"use client\";\n\nimport { forwardRef, type ReactNode, type HTMLAttributes } from \"react\";\nimport { ChevronRight } from \"lucide-react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport {\n getColorClass,\n getHoverColorClass,\n getFocusColorClass,\n} from \"../../tokens/colors\";\nimport { getTypographySize } from \"../../tokens/typography\";\nimport { useMenuContext } from \"./MenuContext\";\n\nexport interface MenuItemProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"onClick\"> {\n children: ReactNode;\n icon?: ReactNode;\n rightIcon?: ReactNode;\n disabled?: boolean;\n onClick?: (e: React.MouseEvent<HTMLDivElement>) => void;\n onSelect?: (e: React.MouseEvent<HTMLDivElement>) => void;\n hasSubmenu?: boolean;\n}\n\n/**\n * MenuItem Component\n *\n * A single menu item. Supports icons, disabled state, and submenu indicator.\n *\n * @example\n * ```tsx\n * <MenuItem onClick={handleClick} icon={<Icon />}>\n * Menu Item\n * </MenuItem>\n * ```\n */\nconst MenuItem = forwardRef<HTMLDivElement, MenuItemProps>(function MenuItem(\n {\n children,\n icon,\n rightIcon,\n disabled = false,\n onClick,\n onSelect,\n hasSubmenu = false,\n className = \"\",\n ...props\n },\n ref,\n) {\n const { closeMenu } = useMenuContext();\n\n const handleClick = (e: React.MouseEvent<HTMLDivElement>) => {\n if (disabled) return;\n\n onClick?.(e);\n onSelect?.(e);\n\n // Close menu unless it has a submenu\n if (!hasSubmenu && !e.defaultPrevented) {\n closeMenu();\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (disabled) return;\n\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleClick(e as unknown as React.MouseEvent<HTMLDivElement>);\n }\n };\n\n return (\n <div\n ref={ref}\n role=\"menuitem\"\n tabIndex={disabled ? -1 : 0}\n aria-disabled={disabled}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n className={`\n flex\n items-center\n gap-2\n ${getSpacingClass(\"sm\", \"px\")}\n ${getSpacingClass(\"sm\", \"py\")}\n ${getTypographySize(\"bodySmall\")}\n ${getColorClass(\"neutral\", \"dark\", \"text\")}\n cursor-pointer\n transition-colors\n ${getHoverColorClass(\"neutral\", \"light\", \"bg\")}\n ${getFocusColorClass(\"neutral\", \"light\", \"bg\")}\n focus:outline-none\n ${disabled ? \"opacity-50 cursor-not-allowed\" : \"\"}\n ${className}\n `}\n {...props}\n >\n {icon && <span className=\"shrink-0\">{icon}</span>}\n <span className=\"flex-1\">{children}</span>\n {hasSubmenu && (\n <ChevronRight\n className={`h-4 w-4 ${getColorClass(\"neutral\", \"DEFAULT\", \"text\")} shrink-0`}\n />\n )}\n {rightIcon && !hasSubmenu && (\n <span className=\"shrink-0\">{rightIcon}</span>\n )}\n </div>\n );\n});\n\nMenuItem.displayName = \"MenuItem\";\n\nexport default MenuItem;\n","\"use client\";\n\nimport { type HTMLAttributes } from \"react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getColorClass } from \"../../tokens/colors\";\n\nexport type MenuSeparatorProps = HTMLAttributes<HTMLDivElement>;\n\n/**\n * MenuSeparator Component\n *\n * A visual separator for menu items.\n *\n * @example\n * ```tsx\n * <MenuSeparator />\n * ```\n */\nexport default function MenuSeparator({\n className = \"\",\n ...props\n}: MenuSeparatorProps) {\n return (\n <div\n role=\"separator\"\n className={`\n h-px\n ${getColorClass(\"neutral\", \"light\", \"bg\")}\n ${getSpacingClass(\"sm\", \"my\")}\n ${className}\n `}\n {...props}\n />\n );\n}\n","\"use client\";\n\nimport { useState, type ReactNode } from \"react\";\nimport { MenuProvider } from \"./MenuContext\";\nimport MenuTrigger from \"./MenuTrigger\";\nimport MenuContent from \"./MenuContent\";\nimport MenuItem from \"./MenuItem\";\nimport MenuSeparator from \"./MenuSeparator\";\n\nexport type MenuPlacement = \"top\" | \"bottom\" | \"left\" | \"right\";\n\nexport interface MenuProps {\n children: ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n placement?: MenuPlacement;\n}\n\n/**\n * Menu Component\n *\n * A dropdown menu component with keyboard navigation and portal rendering.\n * Follows Atomic Design principles as an Atom component.\n * Uses Compound Component pattern.\n *\n * @example\n * ```tsx\n * <Menu>\n * <MenuTrigger>\n * <Button>Open Menu</Button>\n * </MenuTrigger>\n * <MenuContent>\n * <MenuItem onClick={handleClick}>Item 1</MenuItem>\n * <MenuItem onClick={handleClick}>Item 2</MenuItem>\n * <MenuSeparator />\n * <MenuItem onClick={handleClick}>Item 3</MenuItem>\n * </MenuContent>\n * </Menu>\n * ```\n */\nexport default function Menu({\n children,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n placement = \"bottom\",\n}: MenuProps) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : internalOpen;\n\n const setIsOpen = (newOpen: boolean) => {\n if (!isControlled) {\n setInternalOpen(newOpen);\n }\n onOpenChange?.(newOpen);\n };\n\n const closeMenu = () => {\n setIsOpen(false);\n };\n\n return (\n <MenuProvider\n value={{\n isOpen,\n setIsOpen,\n closeMenu,\n placement,\n }}\n >\n {children}\n </MenuProvider>\n );\n}\n\n// Export sub-components for compound pattern\nMenu.Trigger = MenuTrigger;\nMenu.Content = MenuContent;\nMenu.Item = MenuItem;\nMenu.Separator = MenuSeparator;\n\n// Also export as named exports for easier imports\nexport { MenuTrigger, MenuContent, MenuItem, MenuSeparator };\n","\"use client\";\n\nimport { useState, type ReactNode } from \"react\";\nimport { ChevronDown } from \"lucide-react\";\nimport { getColorClass, getHoverColorClass } from \"../../tokens/colors\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getAnimationClass } from \"../../tokens/animations\";\nimport { getTypographyClasses } from \"../../tokens/typography\";\nimport { getRadiusClass } from \"../../tokens/radius\";\n\nexport type AccordionType = \"single\" | \"multiple\";\n\nexport interface AccordionItem {\n id: string;\n title: string;\n content: ReactNode;\n disabled?: boolean;\n}\n\nexport interface AccordionProps {\n items: AccordionItem[];\n type?: AccordionType;\n defaultOpen?: string | string[];\n onValueChange?: (value: string | string[]) => void;\n className?: string;\n}\n\n/**\n * Accordion Component\n *\n * A collapsible content component that can display multiple items.\n * Supports single and multiple selection modes.\n * Follows Atomic Design principles as an Atom component.\n *\n * @example\n * ```tsx\n * <Accordion\n * type=\"single\"\n * items={[\n * { id: '1', title: 'Item 1', content: 'Content 1' },\n * { id: '2', title: 'Item 2', content: 'Content 2' },\n * ]}\n * />\n * ```\n */\nexport default function Accordion({\n items,\n type = \"single\",\n defaultOpen,\n onValueChange,\n className = \"\",\n}: AccordionProps) {\n const getInitialOpen = (): string[] => {\n if (defaultOpen === undefined) return [];\n return Array.isArray(defaultOpen) ? defaultOpen : [defaultOpen];\n };\n\n const [openItems, setOpenItems] = useState<string[]>(getInitialOpen);\n\n const handleToggle = (itemId: string) => {\n if (items.find((item) => item.id === itemId)?.disabled) return;\n\n let newOpenItems: string[];\n\n if (type === \"single\") {\n newOpenItems = openItems.includes(itemId) ? [] : [itemId];\n } else {\n newOpenItems = openItems.includes(itemId)\n ? openItems.filter((id) => id !== itemId)\n : [...openItems, itemId];\n }\n\n setOpenItems(newOpenItems);\n onValueChange?.(type === \"single\" ? newOpenItems[0] || \"\" : newOpenItems);\n };\n\n return (\n <div className={`${getSpacingClass(\"xs\", \"space-y\")} ${className}`}>\n {items.map((item) => {\n const isOpen = openItems.includes(item.id);\n const isDisabled = item.disabled;\n\n return (\n <div\n key={item.id}\n className={`border ${getColorClass(\"neutral\", \"DEFAULT\", \"border\")} ${getRadiusClass(\"md\")} overflow-hidden`}\n >\n <button\n type=\"button\"\n onClick={() => handleToggle(item.id)}\n disabled={isDisabled}\n className={`\n w-full\n flex\n items-center\n justify-between\n ${getSpacingClass(\"base\", \"px\")}\n ${getSpacingClass(\"md\", \"py\")}\n ${getTypographyClasses(\"label\")}\n text-left\n ${getColorClass(\"neutral\", \"dark\", \"text\")}\n bg-white\n ${getHoverColorClass(\"neutral\", \"light\", \"bg\")}\n focus:outline-none\n focus:ring-2\n focus:ring-offset-2\n ${(() => {\n const primaryBg = \"bg-surface-brand\";\n const parts = primaryBg.split(\"-\");\n return parts.length >= 3\n ? `focus:ring-${parts[1]}-${parts[2]}`\n : \"focus:ring-indigo-500\";\n })()}\n ${getAnimationClass(\"base\")}\n ${isDisabled ? \"opacity-50 cursor-not-allowed\" : \"cursor-pointer\"}\n `}\n aria-expanded={isOpen}\n aria-controls={`accordion-content-${item.id}`}\n aria-disabled={isDisabled}\n >\n <span>{item.title}</span>\n <ChevronDown\n className={`\n ${getSpacingClass(\"sm\", \"ml\")}\n ${getAnimationClass(\"base\")}\n ${isOpen ? \"transform rotate-180\" : \"\"}\n ${isDisabled ? \"opacity-50\" : \"\"}\n `}\n aria-hidden=\"true\"\n />\n </button>\n <div\n id={`accordion-content-${item.id}`}\n className={`\n overflow-hidden\n ${getAnimationClass(\"base\")}\n ${isOpen ? \"max-h-[1000px] opacity-100\" : \"max-h-0 opacity-0\"}\n `}\n aria-hidden={!isOpen}\n >\n <div\n className={`\n ${getSpacingClass(\"base\", \"px\")}\n ${getSpacingClass(\"md\", \"py\")}\n ${getColorClass(\"neutral\", \"DEFAULT\", \"text\")}\n `}\n >\n {item.content}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n","/**\n * Header Context\n *\n * Context for managing Header component state, particularly mobile menu state.\n *\n * @see ADR-002: Header + SideNavbar Compatibility (ACCEPTED)\n * @see EPIC-002: Header Component (Molecule)\n * @see TASK-014: Implementar HeaderContext Completo\n */\n\n\"use client\";\n\n/* eslint-disable react-refresh/only-export-components */\nimport {\n createContext,\n useContext,\n useState,\n useCallback,\n type ReactNode,\n} from \"react\";\n\n/**\n * Header Context Value\n */\nexport interface HeaderContextValue {\n /**\n * Whether the mobile menu is open\n */\n isMobileMenuOpen: boolean;\n\n /**\n * Toggle mobile menu state\n */\n toggleMobileMenu: () => void;\n\n /**\n * Set mobile menu state explicitly\n */\n setMobileMenuOpen: (open: boolean) => void;\n\n /**\n * Open mobile menu\n */\n openMobileMenu: () => void;\n\n /**\n * Close mobile menu\n */\n closeMobileMenu: () => void;\n}\n\n/**\n * Header Context\n *\n * Independent context for Header component state.\n * Does not interfere with SideNavbar contexts (ADR-002).\n */\nconst HeaderContext = createContext<HeaderContextValue | undefined>(undefined);\n\n/**\n * Header Provider Props\n */\nexport interface HeaderProviderProps {\n /**\n * Children components\n */\n children: ReactNode;\n\n /**\n * Controlled mode: mobile menu open state\n */\n mobileMenuOpen?: boolean;\n\n /**\n * Callback when mobile menu state changes\n */\n onMobileMenuChange?: (open: boolean) => void;\n\n /**\n * Default mobile menu open state (uncontrolled mode)\n * @default false\n */\n defaultMobileMenuOpen?: boolean;\n}\n\n/**\n * HeaderProvider\n *\n * Provides Header context for mobile menu state management.\n * Independent from SideNavbarContexts (ADR-002).\n *\n * Supports both controlled and uncontrolled modes.\n *\n * @example\n * ```tsx\n * // Uncontrolled mode\n * <HeaderProvider>\n * <Header>...</Header>\n * </HeaderProvider>\n *\n * // Controlled mode\n * <HeaderProvider\n * mobileMenuOpen={isOpen}\n * onMobileMenuChange={setIsOpen}\n * >\n * <Header>...</Header>\n * </HeaderProvider>\n * ```\n */\nexport function HeaderProvider({\n children,\n mobileMenuOpen: controlledMobileMenuOpen,\n onMobileMenuChange,\n defaultMobileMenuOpen = false,\n}: HeaderProviderProps) {\n const [internalMobileMenuOpen, setInternalMobileMenuOpen] = useState(\n defaultMobileMenuOpen,\n );\n\n const isControlled = controlledMobileMenuOpen !== undefined;\n const isMobileMenuOpen = isControlled\n ? controlledMobileMenuOpen\n : internalMobileMenuOpen;\n\n const setMobileMenuOpen = useCallback(\n (open: boolean) => {\n if (!isControlled) {\n setInternalMobileMenuOpen(open);\n }\n onMobileMenuChange?.(open);\n },\n [isControlled, onMobileMenuChange],\n );\n\n const toggleMobileMenu = useCallback(() => {\n setMobileMenuOpen(!isMobileMenuOpen);\n }, [isMobileMenuOpen, setMobileMenuOpen]);\n\n const openMobileMenu = useCallback(() => {\n setMobileMenuOpen(true);\n }, [setMobileMenuOpen]);\n\n const closeMobileMenu = useCallback(() => {\n setMobileMenuOpen(false);\n }, [setMobileMenuOpen]);\n\n return (\n <HeaderContext.Provider\n value={{\n isMobileMenuOpen,\n toggleMobileMenu,\n setMobileMenuOpen,\n openMobileMenu,\n closeMobileMenu,\n }}\n >\n {children}\n </HeaderContext.Provider>\n );\n}\n\n/**\n * useHeaderContext Hook\n *\n * Hook to access Header context.\n * Must be used within HeaderProvider.\n *\n * @throws Error if used outside HeaderProvider\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const { isMobileMenuOpen, toggleMobileMenu } = useHeaderContext();\n * return <button onClick={toggleMobileMenu}>Toggle</button>;\n * }\n * ```\n */\nexport function useHeaderContext(): HeaderContextValue {\n const context = useContext(HeaderContext);\n if (!context) {\n throw new Error(\"useHeaderContext must be used within HeaderProvider\");\n }\n return context;\n}\n","/**\n * HeaderLogo Component\n *\n * Logo slot component for Header.\n *\n * @see EPIC-002: Header Component (Molecule)\n * @see RFC-003: Header Composition Pattern (APPROVED)\n */\n\n\"use client\";\n\nimport React, { type ReactNode } from \"react\";\nimport { cn } from \"../../../utils\";\nimport type { NavLinkProps } from \"../../../primitives/NavLink\";\nimport { NavLink } from \"../../../primitives/NavLink\";\n\nexport interface HeaderLogoProps extends Omit<NavLinkProps, \"children\"> {\n /**\n * Logo content (text, image, or component)\n */\n children: ReactNode;\n\n /**\n * Additional CSS classes\n */\n className?: string;\n}\n\n/**\n * HeaderLogo Component\n *\n * Logo slot for Header. Renders as a NavLink by default.\n *\n * @example\n * ```tsx\n * <Header.Logo href=\"/\">MyApp</Header.Logo>\n * <Header.Logo href=\"/\">\n * <img src=\"/logo.png\" alt=\"Logo\" />\n * </Header.Logo>\n * ```\n */\nexport function HeaderLogo({ children, className, ...props }: HeaderLogoProps) {\n return (\n <div className=\"flex-shrink-0\">\n <NavLink\n href={props.href || \"/\"}\n variant=\"default\"\n className={cn(\"flex items-center font-semibold text-lg\", className)}\n {...props}\n >\n {children}\n </NavLink>\n </div>\n );\n}\n","/**\n * HeaderNavigation Component\n *\n * Navigation slot component for Header.\n *\n * @see EPIC-002: Header Component (Molecule)\n * @see RFC-003: Header Composition Pattern (APPROVED)\n */\n\n\"use client\";\n\nimport React, { type ReactNode } from \"react\";\nimport { cn } from \"../../../utils\";\n\nexport interface HeaderNavigationProps {\n /**\n * Navigation content (typically NavLink components)\n */\n children: ReactNode;\n\n /**\n * Additional CSS classes\n */\n className?: string;\n}\n\n/**\n * HeaderNavigation Component\n *\n * Navigation slot for Header. Typically contains NavLink components.\n *\n * @example\n * ```tsx\n * <Header.Navigation>\n * <NavLink href=\"/home\">Home</NavLink>\n * <NavLink href=\"/about\">About</NavLink>\n * </Header.Navigation>\n * ```\n */\nexport function HeaderNavigation({\n children,\n className,\n}: HeaderNavigationProps) {\n return (\n <nav\n className={cn(\n \"flex-1 flex items-center justify-center gap-4\",\n \"hidden md:flex\", // Hidden on mobile, visible on desktop\n className,\n )}\n aria-label=\"Main navigation\"\n >\n {children}\n </nav>\n );\n}\n","/**\n * HeaderActions Component\n *\n * Actions slot component for Header (typically buttons, user menu, etc.).\n *\n * @see EPIC-002: Header Component (Molecule)\n * @see RFC-003: Header Composition Pattern (APPROVED)\n */\n\n\"use client\";\n\nimport React, { type ReactNode } from \"react\";\nimport { cn } from \"../../../utils\";\n\nexport interface HeaderActionsProps {\n /**\n * Actions content (typically Button components)\n */\n children: ReactNode;\n\n /**\n * Additional CSS classes\n */\n className?: string;\n}\n\n/**\n * HeaderActions Component\n *\n * Actions slot for Header. Typically contains Button components or user menu.\n *\n * @example\n * ```tsx\n * <Header.Actions>\n * <Button variant=\"outline\">Sign In</Button>\n * <Button variant=\"primary\">Sign Up</Button>\n * </Header.Actions>\n * ```\n */\nexport function HeaderActions({ children, className }: HeaderActionsProps) {\n return (\n <div className={cn(\"flex-shrink-0 flex items-center gap-2\", className)}>\n {children}\n </div>\n );\n}\n","/**\n * HeaderHamburger Component\n *\n * Hamburger button for toggling mobile menu.\n *\n * @see EPIC-002: Header Component (Molecule)\n * @see TASK-027: Hamburger Button\n */\n\n\"use client\";\n\nimport React from \"react\";\nimport { Menu, X } from \"lucide-react\";\nimport { Button } from \"../../../primitives/Button/Button\";\nimport { useHeaderContext } from \"../contexts/HeaderContext\";\nimport { cn } from \"../../../utils\";\n\nexport interface HeaderHamburgerProps {\n /**\n * Additional CSS classes\n */\n className?: string;\n\n /**\n * Custom icon component\n */\n icon?: React.ReactNode;\n\n /**\n * Custom close icon component\n */\n closeIcon?: React.ReactNode;\n\n /**\n * Button variant\n * @default 'ghost'\n */\n variant?: \"ghost\" | \"outline\" | \"default\";\n\n /**\n * Button size\n * @default 'md'\n */\n size?: \"sm\" | \"md\" | \"lg\";\n}\n\n/**\n * HeaderHamburger Component\n *\n * Hamburger button that toggles the mobile menu.\n * Only visible on mobile devices.\n *\n * @example\n * ```tsx\n * <Header>\n * <Header.Hamburger />\n * <Header.Logo href=\"/\">MyApp</Header.Logo>\n * </Header>\n * ```\n */\nexport function HeaderHamburger({\n className,\n icon,\n closeIcon,\n variant = \"ghost\",\n size = \"md\",\n}: HeaderHamburgerProps) {\n const { isMobileMenuOpen, toggleMobileMenu } = useHeaderContext();\n\n const MenuIcon = icon || <Menu className=\"h-5 w-5\" />;\n const CloseIcon = closeIcon || <X className=\"h-5 w-5\" />;\n\n return (\n <Button\n variant={variant}\n size={size}\n onClick={toggleMobileMenu}\n className={cn(\"md:hidden\", className)}\n aria-label={isMobileMenuOpen ? \"Close menu\" : \"Open menu\"}\n aria-expanded={isMobileMenuOpen}\n >\n {isMobileMenuOpen ? CloseIcon : MenuIcon}\n </Button>\n );\n}\n","/**\n * HeaderMobileMenu Component\n *\n * Mobile menu drawer for Header navigation.\n *\n * @see EPIC-002: Header Component (Molecule)\n * @see TASK-028: Mobile Menu (Drawer)\n */\n\n\"use client\";\n\nimport React from \"react\";\nimport { Drawer, DrawerContent } from \"../../Drawer\";\nimport { useHeaderContext } from \"../contexts/HeaderContext\";\nimport { cn } from \"../../../utils\";\n\nexport interface HeaderMobileMenuProps {\n /**\n * Menu content (typically navigation links)\n */\n children: React.ReactNode;\n\n /**\n * Additional CSS classes\n */\n className?: string;\n}\n\n/**\n * HeaderMobileMenu Component\n *\n * Mobile menu drawer that slides in from the side.\n * Uses Drawer component from design system.\n *\n * @example\n * ```tsx\n * <Header>\n * <Header.MobileMenu>\n * <NavLink href=\"/home\">Home</NavLink>\n * <NavLink href=\"/about\">About</NavLink>\n * </Header.MobileMenu>\n * </Header>\n * ```\n */\nexport function HeaderMobileMenu({\n children,\n className,\n}: HeaderMobileMenuProps) {\n const { isMobileMenuOpen, closeMobileMenu } = useHeaderContext();\n\n return (\n <Drawer\n open={isMobileMenuOpen}\n onOpenChange={(open) => {\n if (!open) {\n closeMobileMenu();\n }\n }}\n position=\"left\"\n size=\"sm\"\n closeOnOverlayClick\n closeOnEscape\n >\n <DrawerContent className={cn(\"p-4\", className)}>\n <nav className=\"flex flex-col gap-2\" aria-label=\"Mobile navigation\">\n {children}\n </nav>\n </DrawerContent>\n </Drawer>\n );\n}\n","import React from \"react\";\nimport { cn } from \"../../utils\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\nexport interface ContainerProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Maximum width of the container\n * @default 'lg'\n */\n maxWidth?: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"full\";\n /**\n * Horizontal padding\n * @default 'base'\n */\n paddingX?: \"xs\" | \"sm\" | \"md\" | \"base\" | \"lg\" | \"xl\";\n /**\n * Vertical padding\n * @default 'base'\n */\n paddingY?: \"xs\" | \"sm\" | \"md\" | \"base\" | \"lg\" | \"xl\";\n /**\n * Center the container content\n * @default true\n */\n center?: boolean;\n}\n\nconst maxWidthClasses = {\n sm: \"max-w-screen-sm\",\n md: \"max-w-screen-md\",\n lg: \"max-w-screen-lg\",\n xl: \"max-w-screen-xl\",\n \"2xl\": \"max-w-screen-2xl\",\n full: \"max-w-full\",\n};\n\n/**\n * Container component for constraining content width and providing consistent padding\n *\n * @example\n * ```tsx\n * <Container maxWidth=\"lg\" paddingX=\"base\">\n * <h1>Content</h1>\n * </Container>\n * ```\n */\nexport const Container = React.forwardRef<HTMLDivElement, ContainerProps>(\n (\n {\n className,\n maxWidth = \"lg\",\n paddingX = \"base\",\n paddingY = \"base\",\n center = true,\n children,\n ...props\n },\n ref,\n ) => {\n return (\n <div\n ref={ref}\n className={cn(\n \"w-full\",\n maxWidthClasses[maxWidth],\n getSpacingClass(paddingX, \"px\"),\n getSpacingClass(paddingY, \"py\"),\n center && \"mx-auto\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\n\nContainer.displayName = \"Container\";\n","import React from \"react\";\nimport { cn } from \"../../utils\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\nexport interface StackProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Spacing between children\n * @default 'base'\n */\n spacing?: \"xs\" | \"sm\" | \"md\" | \"base\" | \"lg\" | \"xl\" | \"2xl\";\n /**\n * Alignment of children\n * @default 'stretch'\n */\n align?: \"start\" | \"center\" | \"end\" | \"stretch\";\n /**\n * Justification of children\n * @default 'start'\n */\n justify?: \"start\" | \"center\" | \"end\" | \"between\" | \"around\" | \"evenly\";\n /**\n * Direction of stack\n * @default 'column'\n */\n direction?: \"row\" | \"column\";\n}\n\n/**\n * Stack component for vertical or horizontal layout with consistent spacing\n *\n * @example\n * ```tsx\n * <Stack spacing=\"md\" align=\"center\">\n * <div>Item 1</div>\n * <div>Item 2</div>\n * </Stack>\n * ```\n */\nexport const Stack = React.forwardRef<HTMLDivElement, StackProps>(\n (\n {\n className,\n spacing = \"base\",\n align = \"stretch\",\n justify = \"start\",\n direction = \"column\",\n children,\n ...props\n },\n ref,\n ) => {\n const spacingClass =\n direction === \"column\"\n ? getSpacingClass(spacing, \"gap-y\")\n : getSpacingClass(spacing, \"gap-x\");\n\n const alignClasses = {\n start: \"items-start\",\n center: \"items-center\",\n end: \"items-end\",\n stretch: \"items-stretch\",\n };\n\n const justifyClasses = {\n start: \"justify-start\",\n center: \"justify-center\",\n end: \"justify-end\",\n between: \"justify-between\",\n around: \"justify-around\",\n evenly: \"justify-evenly\",\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n \"flex\",\n direction === \"column\" ? \"flex-col\" : \"flex-row\",\n spacingClass,\n alignClasses[align],\n justifyClasses[justify],\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\n\nStack.displayName = \"Stack\";\n","/**\n * Header Component\n *\n * Horizontal header component with logo, navigation, and actions slots.\n * Uses compound components pattern for maximum flexibility.\n *\n * @see EPIC-002: Header Component (Molecule)\n * @see RFC-003: Header Composition Pattern (APPROVED)\n * @see ADR-002: Header + SideNavbar Compatibility (ACCEPTED)\n */\n\n\"use client\";\n\nimport React from \"react\";\nimport { HeaderProvider } from \"./contexts/HeaderContext\";\nimport { HeaderLogo } from \"./components/HeaderLogo\";\nimport { HeaderNavigation } from \"./components/HeaderNavigation\";\nimport { HeaderActions } from \"./components/HeaderActions\";\nimport { HeaderHamburger } from \"./components/HeaderHamburger\";\nimport { HeaderMobileMenu } from \"./components/HeaderMobileMenu\";\nimport { getZIndexClass } from \"../../tokens/z-index\";\nimport type { HeaderProps } from \"./types\";\nimport { cn, cva } from \"../../utils\";\nimport { Container } from \"../../layouts\";\nimport { getColorClass } from \"../../tokens/colors\";\n\n/**\n * Header Variants using CVA\n * Type-safe variant system for Header component\n */\nconst headerVariants = cva(\n // Base classes\n cn(\"w-full\", \"bg-white\", \"transition-shadow\", \"transition-colors\"),\n {\n variants: {\n variant: {\n default: \"\",\n elevated: \"shadow-sm\",\n bordered: cn(\"border-b\", getColorClass(\"neutral\", \"light\", \"border\")),\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\n/**\n * Header Component\n *\n * Horizontal header with compound components pattern.\n *\n * @example\n * ```tsx\n * <Header>\n * <Header.Logo href=\"/\">MyApp</Header.Logo>\n * <Header.Navigation>\n * <NavLink href=\"/home\">Home</NavLink>\n * <NavLink href=\"/about\">About</NavLink>\n * </Header.Navigation>\n * <Header.Actions>\n * <Button>Sign In</Button>\n * </Header.Actions>\n * </Header>\n * ```\n */\nexport function Header({\n children,\n variant = \"default\",\n sticky = false,\n maxWidth = \"full\",\n bare = false,\n className,\n ...props\n}: HeaderProps) {\n const content = (\n <div className=\"flex items-center justify-between gap-4\">\n {/* Children are rendered here - compound components handle their own layout */}\n {children}\n </div>\n );\n\n // Bare mode: Just render content without header/Container wrapper\n // Useful when used inside DashboardLayout which provides the wrapper\n if (bare) {\n return (\n <HeaderProvider>\n <div className={cn(className)} {...props}>\n {content}\n </div>\n </HeaderProvider>\n );\n }\n\n // Normal mode: Create header element with Container\n return (\n <HeaderProvider>\n <header\n className={cn(\n headerVariants({ variant }),\n sticky && `sticky top-0 ${getZIndexClass(\"sticky\")}`,\n sticky && \"backdrop-blur-sm bg-white/95\",\n className,\n )}\n {...props}\n >\n <Container maxWidth={maxWidth} paddingX=\"base\" paddingY=\"sm\">\n {content}\n </Container>\n </header>\n </HeaderProvider>\n );\n}\n\n// Compound Components\nHeader.Logo = HeaderLogo;\nHeader.Navigation = HeaderNavigation;\nHeader.Actions = HeaderActions;\nHeader.Hamburger = HeaderHamburger;\nHeader.MobileMenu = HeaderMobileMenu;\n\nexport default Header;\n","/**\n * Navigation Component\n *\n * Horizontal or vertical navigation component using NavLink internally.\n *\n * @see EPIC-003: Navigation Component (Molecule)\n * @see RFC-005: Navigation Composition Pattern (APPROVED)\n */\n\n\"use client\";\n\nimport React, { useMemo } from \"react\";\nimport { NavLink } from \"../../primitives/NavLink\";\nimport type { NavigationProps } from \"./types\";\nimport { cn, cva } from \"../../utils\";\n\n/**\n * Navigation Variants using CVA\n * Type-safe variant system for Navigation component\n */\nconst navigationVariants = cva(\n // Base classes\n cn(\"flex\", \"items-center\", \"gap-2\"),\n {\n variants: {\n orientation: {\n horizontal: \"flex-row\",\n vertical: \"flex-col\",\n },\n variant: {\n default: \"\",\n pills: \"\",\n tabs: \"\",\n },\n },\n defaultVariants: {\n orientation: \"horizontal\",\n variant: \"default\",\n },\n compoundVariants: [\n {\n orientation: \"vertical\",\n variant: \"default\",\n class: \"items-stretch\",\n },\n {\n orientation: \"vertical\",\n variant: \"pills\",\n class: \"items-stretch\",\n },\n {\n orientation: \"vertical\",\n variant: \"tabs\",\n class: \"items-stretch\",\n },\n ],\n },\n);\n\n/**\n * Navigation Component\n *\n * Navigation component that uses NavLink internally.\n * Supports horizontal and vertical orientations, variants, and icons.\n *\n * @example\n * ```tsx\n * <Navigation\n * items={[\n * { href: '/home', label: 'Home', active: true },\n * { href: '/about', label: 'About' },\n * ]}\n * orientation=\"horizontal\"\n * variant=\"default\"\n * />\n * ```\n */\n/**\n * Navigation Component (Internal with pathname detection)\n *\n * Internal component that can use Next.js usePathname hook.\n */\nfunction NavigationWithPathname({\n items,\n orientation = \"horizontal\",\n variant = \"default\",\n className,\n \"aria-label\": ariaLabel = \"Main navigation\",\n bare = false,\n pathname: providedPathname,\n ...props\n}: NavigationProps & { pathname?: string }) {\n // Try to get pathname from Next.js if not provided\n // We use a wrapper pattern to safely call usePathname\n let currentPathname: string | undefined = providedPathname;\n\n if (!currentPathname) {\n // Try to use Next.js usePathname hook\n // We need to check if we can safely call it\n try {\n // @ts-expect-error - usePathname is available at runtime but not in TypeScript types\n const nextNavigation =\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n typeof require !== \"undefined\" ? require(\"next/navigation\") : null;\n if (nextNavigation?.usePathname) {\n const usePathname = nextNavigation.usePathname;\n // eslint-disable-next-line react-hooks/rules-of-hooks\n currentPathname = usePathname();\n }\n } catch {\n // Next.js not available or hook failed - this is expected and safe\n currentPathname = undefined;\n }\n }\n\n // Calculate active state for items\n const itemsWithActive = useMemo(() => {\n return items.map((item) => {\n // Manual active prop has priority\n if (item.active !== undefined) {\n return item;\n }\n\n // Auto-detect if pathname is available\n if (currentPathname) {\n const isActive =\n currentPathname === item.href ||\n (item.href !== \"/\" && currentPathname.startsWith(`${item.href}/`));\n return { ...item, active: isActive };\n }\n\n // Default to false\n return { ...item, active: false };\n });\n }, [items, currentPathname]);\n\n const content = (\n <>\n {itemsWithActive.map((item, index) => {\n // Map Navigation variants to NavLink variants\n const navLinkVariant =\n variant === \"pills\"\n ? \"background\"\n : variant === \"tabs\"\n ? \"underline\"\n : \"default\";\n\n return (\n <NavLink\n key={item.href || index}\n href={item.href}\n active={item.active}\n disabled={item.disabled}\n variant={navLinkVariant}\n className={cn(\n \"flex items-center gap-2\",\n orientation === \"vertical\" && \"w-full justify-start\",\n item.className,\n )}\n >\n {item.icon && (\n <span className=\"flex-shrink-0\" aria-hidden=\"true\">\n {item.icon}\n </span>\n )}\n <span>{item.label}</span>\n {item.badge && <span className=\"ml-auto\">{item.badge}</span>}\n </NavLink>\n );\n })}\n </>\n );\n\n // Bare mode: Just render content without nav wrapper\n // Useful when used inside Header.Navigation which provides the nav wrapper\n if (bare) {\n return (\n <div\n className={cn(navigationVariants({ orientation, variant }), className)}\n {...props}\n >\n {content}\n </div>\n );\n }\n\n // Normal mode: Create nav element\n return (\n <nav\n className={cn(navigationVariants({ orientation, variant }), className)}\n aria-label={ariaLabel}\n {...props}\n >\n {content}\n </nav>\n );\n}\n\n/**\n * Navigation Component (Public API)\n *\n * Wrapper that handles Next.js integration safely.\n * Always uses NavigationWithPathname which will try to auto-detect pathname.\n */\nexport function Navigation(props: NavigationProps) {\n return <NavigationWithPathname {...props} pathname={props.pathname} />;\n}\n\nexport default Navigation;\n","/**\n * PageHeader Component\n *\n * Page header component with title, description, breadcrumb, and actions.\n *\n * @see EPIC-004: PageHeader Component (Molecule)\n */\n\n\"use client\";\n\nimport React from \"react\";\nimport Breadcrumb from \"../Breadcrumb/Breadcrumb\";\nimport { Text } from \"../../primitives\";\nimport type { PageHeaderProps } from \"./types\";\nimport { cn, cva } from \"../../utils\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\n/**\n * PageHeader Variants using CVA\n * Type-safe variant system for PageHeader component\n */\nconst pageHeaderVariants = cva(\n // Base classes\n cn(\"w-full\", \"flex\", \"flex-col\", \"gap-2\"),\n {\n variants: {\n variant: {\n default: cn(getSpacingClass(\"base\", \"mb\")),\n compact: cn(getSpacingClass(\"sm\", \"mb\")),\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\n/**\n * PageHeader Component\n *\n * Page header with title, description, breadcrumb, and actions.\n *\n * @example\n * ```tsx\n * <PageHeader\n * title=\"Page Title\"\n * description=\"Page description\"\n * breadcrumb={[\n * { label: 'Home', href: '/' },\n * { label: 'Page', href: '/page' },\n * ]}\n * actions={<Button>Action</Button>}\n * />\n * ```\n */\nexport function PageHeader({\n title,\n description,\n breadcrumb,\n actions,\n variant = \"default\",\n className,\n ...props\n}: PageHeaderProps) {\n return (\n <div className={cn(pageHeaderVariants({ variant }), className)} {...props}>\n {/* Breadcrumb */}\n {breadcrumb && breadcrumb.length > 0 && <Breadcrumb items={breadcrumb} />}\n\n {/* Title and Actions Row */}\n <div className=\"flex items-start justify-between gap-4\">\n {/* Title and Description */}\n <div className=\"flex-1 min-w-0\">\n <Text variant=\"heading\" as=\"h1\" className=\"mb-2 text-2xl font-bold\">\n {title}\n </Text>\n {description && (\n <Text variant=\"body\" className=\"text-gray-600\">\n {description}\n </Text>\n )}\n </div>\n\n {/* Actions */}\n {actions && (\n <div className=\"flex items-center gap-2 flex-shrink-0\">{actions}</div>\n )}\n </div>\n </div>\n );\n}\n\nexport default PageHeader;\n","import type { HTMLAttributes } from \"react\";\nimport { Button, Input, Label } from \"../../primitives\";\nimport { cn } from \"../../utils\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getColorClass } from \"../../tokens/colors\";\n\ninterface Props extends HTMLAttributes<HTMLFormElement> {\n onForgotPasswordClick: () => void;\n}\n\nexport default function LoginBox({\n onForgotPasswordClick,\n className,\n ...props\n}: Props) {\n return (\n <div\n className={cn(\n getSpacingClass(\"base\", \"p\"),\n getColorClass(\"neutral\", \"light\", \"bg\"),\n getRadiusClass(\"md\"),\n className,\n )}\n >\n <form\n {...props}\n onSubmit={(e) => {\n e.preventDefault();\n if (props.onSubmit) props.onSubmit(e);\n }}\n className={cn(\"space-y-4\", props.className)}\n >\n <div className=\"space-y-2\">\n <Label htmlFor=\"login-email\" variant=\"required\">\n Your email\n </Label>\n <Input id=\"login-email\" placeholder=\"myname@email.com\" type=\"email\" />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"login-password\" variant=\"required\">\n Your password\n </Label>\n <Input id=\"login-password\" placeholder=\"••••••••\" type=\"password\" />\n </div>\n <div className=\"flex justify-between\">\n <Button\n variant=\"secondary\"\n type=\"button\"\n onClick={onForgotPasswordClick}\n >\n Forgot password?\n </Button>\n <Button variant=\"regular\" type=\"submit\">\n Sign in\n </Button>\n </div>\n </form>\n </div>\n );\n}\n","\"use client\";\n\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { useEffect, useRef } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { X } from \"lucide-react\";\nimport { getZIndexClass } from \"../../tokens/z-index\";\n\ninterface Props extends HTMLAttributes<HTMLDivElement> {\n isOpen: boolean;\n onClose: () => void;\n title?: string;\n children: ReactNode;\n variant?: \"default\" | \"large\" | \"fullscreen\";\n showCloseButton?: boolean;\n footer?: ReactNode;\n}\n\n/**\n * Modal Component\n *\n * A modal/dialog component with overlay, portal rendering, and accessibility.\n * Follows Atomic Design principles as an Organism component.\n *\n * @example\n * ```tsx\n * <Modal isOpen={isOpen} onClose={handleClose} title=\"Confirm Action\">\n * <p>Are you sure?</p>\n * </Modal>\n * ```\n */\nexport default function Modal({\n isOpen,\n onClose,\n title,\n children,\n variant = \"default\",\n showCloseButton = true,\n footer,\n className = \"\",\n ...props\n}: Props) {\n const modalRef = useRef<HTMLDivElement>(null);\n const previousActiveElement = useRef<HTMLElement | null>(null);\n\n // Focus trap and ESC key handling\n useEffect(() => {\n if (!isOpen) return;\n\n // Store previous active element\n previousActiveElement.current = document.activeElement as HTMLElement;\n\n // Focus modal on open\n const timer = setTimeout(() => {\n modalRef.current?.focus();\n }, 0);\n\n // Handle ESC key\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n onClose();\n }\n };\n\n document.addEventListener(\"keydown\", handleEscape);\n\n // Restore focus on close\n return () => {\n clearTimeout(timer);\n document.removeEventListener(\"keydown\", handleEscape);\n previousActiveElement.current?.focus();\n };\n }, [isOpen, onClose]);\n\n // Prevent body scroll when modal is open\n useEffect(() => {\n if (isOpen) {\n document.body.style.overflow = \"hidden\";\n } else {\n document.body.style.overflow = \"\";\n }\n return () => {\n document.body.style.overflow = \"\";\n };\n }, [isOpen]);\n\n if (!isOpen) return null;\n\n const baseClasses = [\n \"fixed\",\n \"inset-0\",\n getZIndexClass(\"modal\"),\n \"overflow-y-auto\",\n ];\n\n const overlayClasses = [\n \"fixed\",\n \"inset-0\",\n \"bg-black\",\n \"bg-opacity-50\",\n \"transition-opacity\",\n ];\n\n const modalSizeClasses: Record<NonNullable<Props[\"variant\"]>, string> = {\n default: \"max-w-md\",\n large: \"max-w-2xl\",\n fullscreen: \"max-w-full h-full\",\n };\n\n const modalClasses = [\n \"relative\",\n \"bg-white\",\n \"rounded-lg\",\n \"shadow-xl\",\n \"my-8\",\n \"mx-auto\",\n modalSizeClasses[variant],\n \"p-6\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n const modalContent = (\n <div\n className={baseClasses.join(\" \")}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? \"modal-title\" : undefined}\n onClick={(e) => {\n if (e.target === e.currentTarget) {\n onClose();\n }\n }}\n >\n <div className={overlayClasses.join(\" \")} aria-hidden=\"true\" />\n <div className=\"flex min-h-full items-center justify-center p-4\">\n <div\n ref={modalRef}\n tabIndex={-1}\n className={modalClasses}\n onClick={(e) => e.stopPropagation()}\n {...props}\n >\n {title && (\n <div className=\"flex justify-between items-center mb-4\">\n <h2\n id=\"modal-title\"\n className=\"text-xl font-semibold text-gray-900\"\n >\n {title}\n </h2>\n {showCloseButton && (\n <button\n onClick={onClose}\n className=\"text-gray-400 hover:text-gray-500 focus:outline-none\"\n aria-label=\"Close modal\"\n >\n <X className=\"h-6 w-6\" />\n </button>\n )}\n </div>\n )}\n {!title && showCloseButton && (\n <div className=\"flex justify-end mb-4\">\n <button\n onClick={onClose}\n className=\"text-gray-400 hover:text-gray-500 focus:outline-none\"\n aria-label=\"Close modal\"\n >\n <X className=\"h-6 w-6\" />\n </button>\n </div>\n )}\n <div className=\"mb-4\">{children}</div>\n {footer && (\n <div className=\"flex justify-end gap-2 mt-4\">{footer}</div>\n )}\n </div>\n </div>\n </div>\n );\n\n // Portal rendering to avoid z-index issues\n if (typeof window !== \"undefined\") {\n return createPortal(modalContent, document.body);\n }\n\n return modalContent;\n}\n","\"use client\";\n\n/* eslint-disable react-refresh/only-export-components */\nimport { createContext, useContext } from \"react\";\nimport type { ReactNode } from \"react\";\nimport type { TableColumn } from \"./TableTypes\";\nimport type { FilterConfig } from \"./TableFilters/TableFilters\";\nimport type { TableAction } from \"./TableActions/TableActions\";\n\nexport type PaginationMode = \"client\" | \"server\" | \"auto\";\n\nexport interface PaginationState {\n page: number;\n pageSize: number;\n total: number;\n totalPages: number;\n}\n\nexport interface SortState {\n column: string;\n direction: \"asc\" | \"desc\";\n}\n\nimport type { FilterValue } from \"./TableFilters/TableFilters\";\n\nexport interface FilterState {\n values: Record<string, FilterValue>;\n config: FilterConfig[];\n}\n\nexport interface SelectionState {\n selectedRows: string[];\n isAllSelected: boolean;\n isIndeterminate: boolean;\n}\n\nexport interface TableContextValue<\n T extends Record<string, unknown> = Record<string, unknown>,\n> {\n // Data\n columns: TableColumn<T>[];\n data: T[];\n paginatedData: T[];\n loading: boolean;\n\n // State\n paginationState: PaginationState;\n sortState: SortState;\n filterState: FilterState;\n selectionState: SelectionState;\n\n // Configuration\n paginationMode: PaginationMode;\n selectable: boolean;\n rowId?: (row: T) => string;\n actions?: (row: T) => TableAction<T>[];\n resizable?: boolean;\n columnWidths?: Record<string, number>;\n virtualScrolling?: boolean;\n\n // Empty state\n emptyMessage?: string;\n emptyStateTitle?: string;\n emptyStateMessage?: string;\n emptyStateIllustration?: ReactNode;\n emptyStateAction?: ReactNode;\n\n // Methods\n setPage: (page: number) => void;\n setPageSize: (size: number) => void;\n setSorting: (column: string, direction: \"asc\" | \"desc\") => void;\n setFilters: (filters: Record<string, FilterValue>) => void;\n setSelection: (selected: string[]) => void;\n toggleRowSelection: (rowId: string) => void;\n toggleSelectAll: () => void;\n getRowId: (row: T, index: number) => string;\n setColumnWidth?: (columnKey: string, width: number) => void;\n\n // Callbacks (for controlled components)\n onPageChange?: (page: number) => void;\n onPageSizeChange?: (size: number) => void;\n onSort?: (column: string, direction: \"asc\" | \"desc\") => void;\n onFilter?: (filters: Record<string, FilterValue>) => void;\n onSelectionChange?: (selected: string[]) => void;\n onRowClick?: (row: T) => void;\n onColumnResize?: (columnKey: string, width: number) => void;\n}\n\nconst TableContext = createContext<\n TableContextValue<Record<string, unknown>> | undefined\n>(undefined);\n\n/**\n * Hook to access Table context\n *\n * @throws Error if used outside of Table component\n */\nexport function useTableContext<\n T extends Record<string, unknown> = Record<string, unknown>,\n>(): TableContextValue<T> {\n const context = useContext(TableContext);\n\n if (context === undefined) {\n throw new Error(\"useTableContext must be used within a Table component\");\n }\n\n return context as unknown as TableContextValue<T>;\n}\n\n/**\n * Hook to access Table context (optional, returns undefined if not in Table)\n */\nexport function useTableContextOptional<\n T extends Record<string, unknown> = Record<string, unknown>,\n>(): TableContextValue<T> | undefined {\n const context = useContext(TableContext);\n return context ? (context as unknown as TableContextValue<T>) : undefined;\n}\n\nexport { TableContext };\n","\"use client\";\n\nimport { useState, useMemo, useCallback } from \"react\";\nimport type { ReactNode } from \"react\";\nimport {\n TableContext,\n type TableContextValue,\n type PaginationMode,\n} from \"./TableContext\";\nimport type { TableColumn } from \"./TableTypes\";\nimport type { FilterConfig, FilterValue } from \"./TableFilters/TableFilters\";\nimport type { TableAction } from \"./TableActions/TableActions\";\n\nexport interface TableProviderProps<\n T extends Record<string, unknown> = Record<string, unknown>,\n> {\n columns: TableColumn<T>[];\n data: T[];\n loading?: boolean;\n\n // Pagination\n paginationMode?: PaginationMode;\n page?: number; // controlled\n pageSize?: number; // controlled\n total?: number; // required for server mode\n onPageChange?: (page: number) => void; // required for server mode\n onPageSizeChange?: (size: number) => void;\n defaultPageSize?: number;\n pageSizeOptions?: number[];\n\n // Sorting\n sortColumn?: string; // controlled\n sortDirection?: \"asc\" | \"desc\"; // controlled\n onSort?: (column: string, direction: \"asc\" | \"desc\") => void;\n defaultSortColumn?: string;\n defaultSortDirection?: \"asc\" | \"desc\";\n\n // Filters\n filters?: FilterConfig[];\n filterValues?: Record<string, FilterValue>; // controlled\n onFilter?: (filters: Record<string, FilterValue>) => void;\n initialFilterValues?: Record<string, FilterValue>;\n\n // Selection\n selectable?: boolean;\n selectedRows?: string[]; // controlled\n onSelectionChange?: (selected: string[]) => void;\n rowId?: (row: T) => string;\n\n // Actions\n actions?: (row: T) => TableAction<T>[];\n\n // Empty state\n emptyMessage?: string;\n emptyStateTitle?: string;\n emptyStateMessage?: string;\n emptyStateIllustration?: ReactNode;\n emptyStateAction?: ReactNode;\n\n // Callbacks\n onRowClick?: (row: T) => void;\n\n // Column resizing\n resizable?: boolean;\n columnWidths?: Record<string, number>;\n onColumnResize?: (columnKey: string, width: number) => void;\n\n // Virtual scrolling\n virtualScrolling?: boolean;\n virtualScrollingOptions?: {\n itemHeight?: number;\n containerHeight?: number;\n overscan?: number;\n };\n\n children: ReactNode;\n}\n\n/**\n * TableProvider Component\n *\n * Manages table state (pagination, sorting, filters, selection) and provides it via Context.\n * Supports both client-side and server-side pagination with auto-detection.\n */\nexport function TableProvider<\n T extends Record<string, unknown> = Record<string, unknown>,\n>({\n columns,\n data,\n loading = false,\n paginationMode: explicitMode,\n page: controlledPage,\n pageSize: controlledPageSize,\n total: externalTotal,\n onPageChange,\n onPageSizeChange,\n defaultPageSize = 10,\n pageSizeOptions: _pageSizeOptions,\n sortColumn: controlledSortColumn,\n sortDirection: controlledSortDirection,\n onSort,\n defaultSortColumn,\n defaultSortDirection = \"asc\",\n filters,\n filterValues: controlledFilterValues,\n onFilter,\n initialFilterValues = {},\n selectable = false,\n selectedRows: controlledSelectedRows,\n onSelectionChange,\n rowId,\n actions,\n emptyMessage = \"No data available\",\n emptyStateTitle,\n emptyStateMessage,\n emptyStateIllustration,\n emptyStateAction,\n onRowClick,\n resizable = false,\n columnWidths,\n onColumnResize,\n virtualScrolling,\n virtualScrollingOptions: _virtualScrollingOptions,\n children,\n}: TableProviderProps<T>) {\n // Detect pagination mode\n const paginationMode: PaginationMode = useMemo(() => {\n if (explicitMode) return explicitMode;\n\n // Auto-detect: if total and onPageChange are provided, it's server-side\n if (externalTotal !== undefined && onPageChange) {\n return \"server\";\n }\n\n return \"client\";\n }, [explicitMode, externalTotal, onPageChange]);\n\n // Pagination state\n const isPaginationControlled = controlledPage !== undefined;\n const [internalPage, setInternalPage] = useState(1);\n const [internalPageSize, setInternalPageSize] = useState(defaultPageSize);\n\n const page = isPaginationControlled ? controlledPage! : internalPage;\n const pageSize = controlledPageSize ?? internalPageSize;\n\n const total = useMemo(() => {\n if (paginationMode === \"server\") {\n return externalTotal ?? 0;\n }\n return data.length;\n }, [paginationMode, externalTotal, data.length]);\n\n const totalPages = useMemo(() => {\n return Math.ceil(total / pageSize);\n }, [total, pageSize]);\n\n // Sorting state\n const isSortingControlled = controlledSortColumn !== undefined;\n const [internalSortColumn, setInternalSortColumn] = useState(\n defaultSortColumn || \"\",\n );\n const [internalSortDirection, setInternalSortDirection] = useState<\n \"asc\" | \"desc\"\n >(defaultSortDirection);\n\n const sortColumn = isSortingControlled\n ? controlledSortColumn!\n : internalSortColumn;\n const sortDirection = isSortingControlled\n ? controlledSortDirection || \"asc\"\n : internalSortDirection;\n\n // Filter state\n const isFilterControlled = controlledFilterValues !== undefined;\n const [internalFilterValues, setInternalFilterValues] =\n useState<Record<string, unknown>>(initialFilterValues);\n\n const filterValues = isFilterControlled\n ? controlledFilterValues!\n : internalFilterValues;\n\n // Selection state\n const isSelectionControlled = controlledSelectedRows !== undefined;\n const [internalSelectedRows, setInternalSelectedRows] = useState<string[]>(\n [],\n );\n\n const selectedRows = isSelectionControlled\n ? controlledSelectedRows!\n : internalSelectedRows;\n\n // Apply client-side filtering\n const filteredData = useMemo(() => {\n if (!filters || filters.length === 0) return data;\n\n return data.filter((row) => {\n return filters.every((filter) => {\n const value = filterValues[filter.key];\n if (!value || value === \"\") return true;\n\n const rowValue = (row as unknown)[filter.key];\n if (filter.type === \"text\") {\n return String(rowValue || \"\")\n .toLowerCase()\n .includes(String(value).toLowerCase());\n }\n return String(rowValue) === String(value);\n });\n });\n }, [data, filters, filterValues]);\n\n // Apply client-side sorting (only if not controlled externally)\n const sortedData = useMemo(() => {\n // If sorting is controlled externally (onSort provided), don't sort here\n // The parent component should handle sorting on the server or before passing data\n // However, we still apply sorting if sortColumn is set and no onSort callback\n if (isSortingControlled && onSort) {\n // When controlled, assume data is already sorted by parent\n return filteredData;\n }\n\n // Only apply internal sorting if sortColumn is set\n if (!sortColumn) return filteredData;\n\n // Apply internal sorting\n const sorted = [...filteredData];\n sorted.sort((a, b) => {\n const aValue = (a as unknown)[sortColumn];\n const bValue = (b as unknown)[sortColumn];\n const comparison = String(aValue || \"\").localeCompare(\n String(bValue || \"\"),\n );\n return sortDirection === \"asc\" ? comparison : -comparison;\n });\n\n return sorted;\n }, [filteredData, sortColumn, sortDirection, onSort, isSortingControlled]);\n\n // Apply client-side pagination\n const paginatedData = useMemo(() => {\n if (paginationMode === \"server\") {\n return sortedData; // Server already paginated\n }\n\n const startIndex = (page - 1) * pageSize;\n const endIndex = startIndex + pageSize;\n return sortedData.slice(startIndex, endIndex);\n }, [sortedData, paginationMode, page, pageSize]);\n\n // Selection helpers\n const getRowId = useCallback(\n (row: T, index: number): string => {\n if (rowId) {\n return rowId(row);\n }\n return (row as unknown)?.id?.toString() || index.toString();\n },\n [rowId],\n );\n\n const isAllSelected = useMemo(() => {\n if (!selectable || paginatedData.length === 0) return false;\n return paginatedData.every((row, index) => {\n const id = getRowId(row, index);\n return selectedRows.includes(id);\n });\n }, [selectable, paginatedData, selectedRows, getRowId]);\n\n const isIndeterminate = useMemo(() => {\n if (!selectable) return false;\n const selectedCount = selectedRows.length;\n return selectedCount > 0 && selectedCount < paginatedData.length;\n }, [selectable, selectedRows.length, paginatedData.length]);\n\n // Methods\n const setPage = useCallback(\n (newPage: number) => {\n if (isPaginationControlled) {\n onPageChange?.(newPage);\n } else {\n setInternalPage(newPage);\n }\n },\n [isPaginationControlled, onPageChange],\n );\n\n const setPageSize = useCallback(\n (newSize: number) => {\n if (onPageSizeChange) {\n onPageSizeChange(newSize);\n } else {\n setInternalPageSize(newSize);\n }\n setPage(1); // Reset to first page\n },\n [onPageSizeChange, setPage],\n );\n\n const setSorting = useCallback(\n (column: string, direction: \"asc\" | \"desc\") => {\n if (isSortingControlled) {\n onSort?.(column, direction);\n } else {\n setInternalSortColumn(column);\n setInternalSortDirection(direction);\n }\n },\n [isSortingControlled, onSort],\n );\n\n const setFilters = useCallback(\n (newFilters: Record<string, FilterValue>) => {\n if (isFilterControlled) {\n onFilter?.(newFilters);\n } else {\n setInternalFilterValues(newFilters);\n }\n // Reset to first page when filters change\n setPage(1);\n },\n [isFilterControlled, onFilter, setPage],\n );\n\n const setSelection = useCallback(\n (selected: string[]) => {\n if (isSelectionControlled) {\n onSelectionChange?.(selected);\n } else {\n setInternalSelectedRows(selected);\n }\n },\n [isSelectionControlled, onSelectionChange],\n );\n\n const toggleRowSelection = useCallback(\n (rowId: string) => {\n const newSelected = selectedRows.includes(rowId)\n ? selectedRows.filter((id) => id !== rowId)\n : [...selectedRows, rowId];\n setSelection(newSelected);\n },\n [selectedRows, setSelection],\n );\n\n const toggleSelectAll = useCallback(() => {\n if (isAllSelected) {\n setSelection([]);\n } else {\n const allIds = paginatedData.map((row, index) => getRowId(row, index));\n setSelection(allIds);\n }\n }, [isAllSelected, paginatedData, getRowId, setSelection]);\n\n // Column resizing state\n const [internalColumnWidths, setInternalColumnWidths] = useState<\n Record<string, number>\n >({});\n const isColumnWidthsControlled = columnWidths !== undefined;\n const finalColumnWidths = isColumnWidthsControlled\n ? columnWidths!\n : internalColumnWidths;\n\n const setColumnWidth = useCallback(\n (columnKey: string, width: number) => {\n if (isColumnWidthsControlled) {\n onColumnResize?.(columnKey, width);\n } else {\n setInternalColumnWidths((prev) => ({\n ...prev,\n [columnKey]: width,\n }));\n }\n },\n [isColumnWidthsControlled, onColumnResize],\n );\n\n // Use controlledColumnWidths from props if provided\n const _controlledColumnWidths = columnWidths;\n\n // Context value\n const contextValue: TableContextValue<T> = useMemo(\n () => ({\n columns,\n data,\n paginatedData,\n loading,\n paginationState: {\n page,\n pageSize,\n total,\n totalPages,\n },\n sortState: {\n column: sortColumn,\n direction: sortDirection,\n },\n filterState: {\n values: filterValues,\n config: filters || [],\n },\n selectionState: {\n selectedRows,\n isAllSelected,\n isIndeterminate,\n },\n paginationMode,\n selectable,\n rowId,\n actions,\n resizable,\n columnWidths: finalColumnWidths,\n virtualScrolling,\n emptyMessage,\n emptyStateTitle,\n emptyStateMessage,\n emptyStateIllustration,\n emptyStateAction,\n setPage,\n setPageSize,\n setSorting,\n setFilters,\n setSelection,\n toggleRowSelection,\n toggleSelectAll,\n getRowId,\n setColumnWidth,\n onPageChange,\n onPageSizeChange,\n onSort,\n onFilter,\n onSelectionChange,\n onRowClick,\n onColumnResize,\n }),\n [\n columns,\n data,\n paginatedData,\n loading,\n page,\n pageSize,\n total,\n totalPages,\n sortColumn,\n sortDirection,\n filterValues,\n filters,\n selectedRows,\n isAllSelected,\n isIndeterminate,\n paginationMode,\n selectable,\n rowId,\n actions,\n emptyMessage,\n emptyStateTitle,\n emptyStateMessage,\n emptyStateIllustration,\n emptyStateAction,\n setPage,\n setPageSize,\n setSorting,\n setFilters,\n setSelection,\n toggleRowSelection,\n toggleSelectAll,\n getRowId,\n setColumnWidth,\n onPageChange,\n onPageSizeChange,\n onSort,\n onFilter,\n onSelectionChange,\n onRowClick,\n onColumnResize,\n resizable,\n finalColumnWidths,\n virtualScrolling,\n ],\n );\n\n return (\n <TableContext.Provider value={contextValue}>\n {children}\n </TableContext.Provider>\n );\n}\n","\"use client\";\n\nimport {\n useRef,\n type HTMLAttributes,\n type MouseEvent,\n type KeyboardEvent,\n} from \"react\";\nimport { useTableContext } from \"./TableContext\";\nimport type { TableColumn } from \"./TableTypes\";\n\nexport interface TableHeaderCellProps\n extends HTMLAttributes<HTMLTableCellElement> {\n column: TableColumn;\n resizable?: boolean;\n width?: number;\n onResize?: (columnKey: string, width: number) => void;\n minWidth?: number;\n maxWidth?: number;\n}\n\n/**\n * TableHeaderCell Component\n *\n * Renders a header cell (th) for a column.\n * Supports sorting if column is sortable.\n * Must be used within a Table component.\n */\nexport default function TableHeaderCell({\n column,\n resizable = false,\n width,\n onResize,\n minWidth = 50,\n maxWidth,\n className = \"\",\n ...props\n}: TableHeaderCellProps) {\n const { sortState, setSorting, onSort } = useTableContext();\n const resizeHandleRef = useRef<HTMLDivElement>(null);\n const cellRef = useRef<HTMLTableCellElement>(null);\n const resizeStartRef = useRef<{ x: number; width: number } | null>(null);\n\n const handleSort = () => {\n if (!column.sortable || (!onSort && !setSorting)) return;\n\n const newDirection =\n sortState.column === column.key && sortState.direction === \"asc\"\n ? \"desc\"\n : \"asc\";\n\n if (onSort) {\n onSort(column.key, newDirection);\n } else {\n setSorting(column.key, newDirection);\n }\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLTableCellElement>) => {\n if (!isSortable) return;\n\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleSort();\n }\n };\n\n const handleResizeStart = (e: MouseEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (!cellRef.current || !onResize) return;\n\n const currentWidth = width || cellRef.current.offsetWidth;\n resizeStartRef.current = {\n x: e.clientX,\n width: currentWidth,\n };\n\n const handleMouseMove = (moveEvent: MouseEvent) => {\n if (!resizeStartRef.current) return;\n\n const deltaX = moveEvent.clientX - resizeStartRef.current.x;\n const newWidth = resizeStartRef.current.width + deltaX;\n const clampedWidth = Math.max(\n minWidth,\n maxWidth ? Math.min(newWidth, maxWidth) : newWidth,\n );\n\n onResize(column.key, clampedWidth);\n };\n\n const handleMouseUp = () => {\n document.removeEventListener(\"mousemove\", handleMouseMove as unknown);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n resizeStartRef.current = null;\n };\n\n document.addEventListener(\"mousemove\", handleMouseMove as unknown);\n document.addEventListener(\"mouseup\", handleMouseUp);\n };\n\n const isSorted = sortState.column === column.key;\n const isSortable = column.sortable && (onSort || setSorting);\n const sortDirection = isSorted ? sortState.direction : undefined;\n\n return (\n <th\n ref={cellRef}\n scope=\"col\"\n role=\"columnheader\"\n aria-sort={\n isSorted\n ? sortDirection === \"asc\"\n ? \"ascending\"\n : \"descending\"\n : isSortable\n ? \"none\"\n : undefined\n }\n className={`px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider ${\n isSortable\n ? \"cursor-pointer hover:bg-gray-100 focus:bg-gray-100 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 select-none\"\n : \"\"\n } ${column.hiddenOnMobile ? \"hidden md:table-cell\" : \"\"} ${className}`}\n onClick={isSortable ? handleSort : undefined}\n onKeyDown={isSortable ? handleKeyDown : undefined}\n tabIndex={isSortable ? 0 : undefined}\n style={\n width ? { width: `${width}px`, minWidth: `${width}px` } : undefined\n }\n {...props}\n >\n <div className=\"flex items-center gap-2 relative\">\n <span>{column.label}</span>\n {isSorted && (\n <span className=\"text-gray-400\" aria-hidden=\"true\">\n {sortState.direction === \"asc\" ? \"↑\" : \"↓\"}\n </span>\n )}\n {resizable && onResize && (\n <div\n ref={resizeHandleRef}\n className=\"absolute right-0 top-0 bottom-0 w-1 cursor-col-resize hover:bg-indigo-500 transition-colors\"\n onMouseDown={handleResizeStart}\n role=\"separator\"\n aria-orientation=\"vertical\"\n aria-label={`Resize ${column.label} column`}\n style={{ touchAction: \"none\" }}\n />\n )}\n </div>\n </th>\n );\n}\n","\"use client\";\n\nimport type { HTMLAttributes } from \"react\";\nimport { useTableContext } from \"./TableContext\";\nimport { Checkbox } from \"../../primitives\";\nimport TableHeaderCell from \"./TableHeaderCell\";\n\nexport type TableHeaderRowProps = HTMLAttributes<HTMLTableRowElement>;\n\n/**\n * TableHeaderRow Component\n *\n * Renders a header row (tr) with header cells.\n * Must be used within a Table component.\n */\nexport default function TableHeaderRow({\n className = \"\",\n ...props\n}: TableHeaderRowProps) {\n const {\n columns,\n selectable,\n selectionState,\n toggleSelectAll,\n actions,\n resizable,\n columnWidths,\n setColumnWidth,\n } = useTableContext();\n\n return (\n <tr role=\"row\" className={className} {...props}>\n {selectable && (\n <th\n scope=\"col\"\n role=\"columnheader\"\n className=\"px-6 py-3 w-12\"\n aria-label=\"Select all\"\n >\n <Checkbox\n checked={selectionState.isAllSelected}\n onChange={toggleSelectAll}\n aria-label=\"Select all rows\"\n className=\"my-0\"\n indeterminate={selectionState.isIndeterminate}\n />\n </th>\n )}\n\n {columns.map((column) => (\n <TableHeaderCell\n key={column.key}\n column={column}\n resizable={resizable}\n width={columnWidths?.[column.key]}\n onResize={setColumnWidth}\n />\n ))}\n\n {actions && (\n <th\n scope=\"col\"\n role=\"columnheader\"\n className=\"px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider w-12\"\n aria-label=\"Actions\"\n >\n <span className=\"sr-only\">Actions</span>\n </th>\n )}\n </tr>\n );\n}\n","\"use client\";\n\nimport type { HTMLAttributes } from \"react\";\nimport { useTableContext } from \"./TableContext\";\nimport { getZIndexClass } from \"../../tokens/z-index\";\nimport TableHeaderRow from \"./TableHeaderRow\";\n\nexport interface TableHeaderProps\n extends Omit<HTMLAttributes<HTMLTableSectionElement>, \"children\"> {\n className?: string;\n}\n\n/**\n * TableHeader Component\n *\n * Renders the table header (thead) with columns.\n * Must be used within a Table component.\n */\nexport default function TableHeader({\n className = \"\",\n ...props\n}: TableHeaderProps) {\n useTableContext(); // Ensure we're within Table context\n // columns is accessed via TableHeaderRow which uses useTableContext\n\n return (\n <thead\n className={`bg-gray-50 sticky top-0 ${getZIndexClass(\"sticky\")} ${className}`}\n {...props}\n >\n <TableHeaderRow />\n </thead>\n );\n}\n","\"use client\";\n\nimport type { HTMLAttributes } from \"react\";\nimport type { TableColumn } from \"./TableTypes\";\n\nexport interface TableCellProps<T = unknown>\n extends HTMLAttributes<HTMLTableCellElement> {\n column: TableColumn<T>;\n row: T;\n}\n\n/**\n * TableCell Component\n *\n * Renders a table cell (td) for a column.\n * Uses column.render if available, otherwise renders the raw value.\n * Must be used within a Table component.\n */\nexport default function TableCell<\n T extends Record<string, unknown> = Record<string, unknown>,\n>({ column, row, className = \"\", ...props }: TableCellProps<T>) {\n const value = column.key in row ? row[column.key as keyof T] : undefined;\n\n return (\n <td\n className={`px-6 py-4 whitespace-nowrap text-sm text-gray-900 ${\n column.hiddenOnMobile ? \"hidden md:table-cell\" : \"\"\n } ${className}`}\n {...props}\n >\n {column.render ? column.render(value, row) : String(value ?? \"\")}\n </td>\n );\n}\n","\"use client\";\n\nimport type { HTMLAttributes } from \"react\";\nimport Dropdown from \"../../../components/Dropdown/Dropdown\";\nimport { Button } from \"../../../primitives\";\nimport { MoreVertical } from \"lucide-react\";\n\nexport interface TableAction<\n T extends Record<string, unknown> = Record<string, unknown>,\n> {\n label: string;\n onClick: (row: T) => void;\n variant?: \"default\" | \"danger\";\n disabled?: boolean;\n icon?: React.ReactNode;\n}\n\nexport interface TableActionsProps<\n T extends Record<string, unknown> = Record<string, unknown>,\n> extends HTMLAttributes<HTMLDivElement> {\n actions: TableAction<T>[];\n row: T;\n align?: \"left\" | \"right\";\n}\n\n/**\n * TableActions Component\n *\n * Dropdown menu for row actions in tables.\n * Follows Atomic Design principles as a Molecule component.\n *\n * @example\n * ```tsx\n * <TableActions\n * row={rowData}\n * actions={[\n * { label: 'Edit', onClick: (row) => handleEdit(row) },\n * { label: 'Delete', onClick: (row) => handleDelete(row), variant: 'danger' },\n * ]}\n * />\n * ```\n */\nexport default function TableActions<\n T extends Record<string, unknown> = Record<string, unknown>,\n>({\n actions,\n row,\n align = \"right\",\n className = \"\",\n ...props\n}: TableActionsProps<T>) {\n const dropdownItems = actions.map((action) => ({\n label: action.label,\n onClick: () => action.onClick(row),\n variant: action.variant,\n disabled: action.disabled,\n }));\n\n return (\n <div className={`inline-flex ${className}`} {...props}>\n <Dropdown\n trigger={\n <Button\n variant=\"ghost\"\n size=\"sm\"\n aria-label=\"Row actions\"\n className=\"h-8 w-8 p-0\"\n >\n <MoreVertical className=\"h-4 w-4\" />\n </Button>\n }\n items={dropdownItems}\n align={align}\n />\n </div>\n );\n}\n","\"use client\";\n\nimport type { HTMLAttributes } from \"react\";\nimport { useTableContext } from \"./TableContext\";\nimport TableActionsComponent from \"./TableActions/TableActions\";\n\nexport interface TableActionsProps<\n T extends Record<string, unknown> = Record<string, unknown>,\n> extends HTMLAttributes<HTMLDivElement> {\n row: T;\n align?: \"left\" | \"right\";\n}\n\n/**\n * TableActions Component\n *\n * Renders action dropdown menu for a table row.\n * Uses actions configuration from Table context.\n * Must be used within a Table component.\n */\nexport default function TableActions<\n T extends Record<string, unknown> = Record<string, unknown>,\n>({ row, align = \"right\", className = \"\", ...props }: TableActionsProps<T>) {\n const { actions } = useTableContext<T>();\n\n if (!actions) {\n return null;\n }\n\n const rowActions = actions(row);\n\n if (rowActions.length === 0) {\n return null;\n }\n\n return (\n <TableActionsComponent\n row={row}\n actions={rowActions}\n align={align}\n className={className}\n {...props}\n />\n );\n}\n","\"use client\";\n\nimport type { HTMLAttributes } from \"react\";\nimport { useTableContext } from \"./TableContext\";\nimport { Checkbox } from \"../../primitives\";\nimport TableCell from \"./TableCell\";\nimport TableActions from \"./TableActions\";\n\nexport interface TableRowProps<\n T extends Record<string, unknown> = Record<string, unknown>,\n> extends Omit<HTMLAttributes<HTMLTableRowElement>, \"style\"> {\n row: T;\n rowIndex: number;\n style?: React.CSSProperties;\n className?: string;\n}\n\n/**\n * TableRow Component\n *\n * Renders a table row (tr) with cells.\n * Supports selection and row click.\n * Must be used within a Table component.\n */\nexport default function TableRow<\n T extends Record<string, unknown> = Record<string, unknown>,\n>({\n row,\n rowIndex,\n className = \"\",\n onClick,\n style,\n ...props\n}: TableRowProps<T>) {\n const {\n columns,\n selectable,\n selectionState,\n toggleRowSelection,\n getRowId,\n actions,\n onRowClick,\n } = useTableContext<T>();\n\n const id = getRowId(row, rowIndex);\n const isSelected = selectionState.selectedRows.includes(id);\n\n const handleClick = (e: React.MouseEvent<HTMLTableRowElement>) => {\n if (onClick) {\n onClick(e);\n }\n if (onRowClick) {\n onRowClick(row);\n }\n };\n\n return (\n <tr\n role=\"row\"\n aria-selected={selectable ? isSelected : undefined}\n aria-rowindex={rowIndex + 1}\n className={`hover:bg-gray-50 ${isSelected ? \"bg-indigo-50\" : \"\"} ${className}`}\n onClick={handleClick}\n style={style}\n {...props}\n >\n {selectable && (\n <td className=\"px-6 py-4\">\n <Checkbox\n checked={isSelected}\n onChange={() => toggleRowSelection(id)}\n aria-label={`Select row ${id}`}\n className=\"my-0\"\n />\n </td>\n )}\n\n {columns.map((column) => (\n <TableCell key={String(column.key)} column={column} row={row} />\n ))}\n\n {actions && (\n <td className=\"px-6 py-4 text-right\">\n <TableActions row={row} />\n </td>\n )}\n </tr>\n );\n}\n","\"use client\";\n\nimport type { HTMLAttributes } from \"react\";\nimport { useTableContext } from \"./TableContext\";\nimport { EmptyState } from \"../../components\";\n\nexport type TableEmptyStateProps = HTMLAttributes<HTMLDivElement>;\n\n/**\n * TableEmptyState Component\n *\n * Renders empty state when table has no data.\n * Uses empty state configuration from Table context.\n * Must be used within a Table component.\n */\nexport default function TableEmptyState({\n className = \"\",\n ...props\n}: TableEmptyStateProps) {\n const {\n emptyMessage,\n emptyStateTitle,\n emptyStateMessage,\n emptyStateIllustration,\n emptyStateAction,\n } = useTableContext();\n\n if (emptyStateTitle || emptyStateMessage || emptyStateIllustration) {\n return (\n <div className={className} {...props}>\n <EmptyState\n title={emptyStateTitle || \"No data available\"}\n message={emptyStateMessage || emptyMessage || \"No data available\"}\n variant={emptyStateIllustration ? \"withIllustration\" : \"default\"}\n illustration={emptyStateIllustration}\n />\n {emptyStateAction && (\n <div className=\"mt-4 flex justify-center\">{emptyStateAction}</div>\n )}\n </div>\n );\n }\n\n return (\n <div className={`text-center text-gray-500 ${className}`} {...props}>\n {emptyMessage || \"No data available\"}\n </div>\n );\n}\n","\"use client\";\n\nimport { useState, useEffect, useRef, useMemo } from \"react\";\n\nexport interface UseVirtualScrollingOptions {\n itemHeight: number; // Height of each row in pixels\n containerHeight?: number; // Height of visible container\n overscan?: number; // Number of items to render outside visible area\n enabled?: boolean; // Whether virtual scrolling is enabled\n}\n\nexport interface VirtualScrollingResult {\n virtualItems: Array<{\n index: number;\n start: number;\n end: number;\n size: number;\n }>;\n totalHeight: number;\n scrollOffset: number;\n setScrollOffset: (offset: number) => void;\n scrollToIndex: (index: number) => void;\n containerRef: React.RefObject<HTMLDivElement | null>;\n}\n\n/**\n * useVirtualScrolling Hook\n *\n * Hook for virtual scrolling to improve performance with large datasets.\n * Only renders visible items plus overscan buffer.\n *\n * @example\n * ```tsx\n * const { virtualItems, totalHeight, containerRef } = useVirtualScrolling({\n * itemHeight: 50,\n * containerHeight: 400,\n * overscan: 5,\n * });\n * ```\n */\nexport function useVirtualScrolling<T>(\n items: T[],\n options: UseVirtualScrollingOptions,\n): VirtualScrollingResult {\n const { itemHeight, containerHeight, overscan = 5, enabled = true } = options;\n\n const [scrollOffset, setScrollOffset] = useState(0);\n const containerRef = useRef<HTMLDivElement>(null);\n\n // Calculate visible range\n const virtualItems = useMemo(() => {\n if (!enabled || items.length === 0) {\n return items.map((_, index) => ({\n index,\n start: index * itemHeight,\n end: (index + 1) * itemHeight,\n size: itemHeight,\n }));\n }\n\n const visibleStart = Math.max(\n 0,\n Math.floor(scrollOffset / itemHeight) - overscan,\n );\n const visibleEnd = containerHeight\n ? Math.min(\n items.length,\n Math.ceil((scrollOffset + containerHeight) / itemHeight) + overscan,\n )\n : items.length;\n\n const result: Array<{\n index: number;\n start: number;\n end: number;\n size: number;\n }> = [];\n for (let i = visibleStart; i < visibleEnd; i++) {\n result.push({\n index: i,\n start: i * itemHeight,\n end: (i + 1) * itemHeight,\n size: itemHeight,\n });\n }\n return result;\n }, [items, itemHeight, scrollOffset, containerHeight, overscan, enabled]);\n\n const totalHeight = items.length * itemHeight;\n\n // Handle scroll events\n useEffect(() => {\n if (!enabled || !containerRef.current) return;\n\n const container = containerRef.current;\n const handleScroll = () => {\n setScrollOffset(container.scrollTop);\n };\n\n container.addEventListener(\"scroll\", handleScroll, { passive: true });\n return () => container.removeEventListener(\"scroll\", handleScroll);\n }, [enabled]);\n\n const scrollToIndex = (index: number) => {\n if (!containerRef.current) return;\n const offset = index * itemHeight;\n containerRef.current.scrollTop = offset;\n setScrollOffset(offset);\n };\n\n return {\n virtualItems,\n totalHeight,\n scrollOffset,\n setScrollOffset,\n scrollToIndex,\n containerRef,\n };\n}\n","\"use client\";\n\nimport { useMemo, type HTMLAttributes, ReactNode } from \"react\";\nimport { useTableContext } from \"./TableContext\";\nimport { Skeleton } from \"../../primitives\";\nimport TableRow from \"./TableRow\";\nimport TableEmptyState from \"./TableEmptyState\";\nimport { useVirtualScrolling } from \"./useVirtualScrolling\";\n\nexport interface TableBodyProps<\n T extends Record<string, unknown> = Record<string, unknown>,\n> extends Omit<HTMLAttributes<HTMLTableSectionElement>, \"children\"> {\n children?: (row: T, index: number) => ReactNode;\n className?: string;\n}\n\n/**\n * TableBody Component\n *\n * Renders the table body (tbody) with rows.\n * Can render loading skeleton, empty state, or data rows.\n * Must be used within a Table component.\n */\nexport default function TableBody({\n children,\n className = \"\",\n ...props\n}: TableBodyProps) {\n const {\n paginatedData,\n loading,\n columns,\n selectable,\n actions,\n virtualScrolling,\n virtualScrollingOptions,\n } = useTableContext();\n\n // Calculate total columns for colspan\n const totalColumns =\n columns.length + (selectable ? 1 : 0) + (actions ? 1 : 0);\n\n // Virtual scrolling\n const virtualScrollingResult = useVirtualScrolling(paginatedData, {\n itemHeight: virtualScrollingOptions?.itemHeight || 50,\n containerHeight: virtualScrollingOptions?.containerHeight,\n overscan: virtualScrollingOptions?.overscan || 5,\n enabled: virtualScrolling || false,\n });\n\n const rowsToRender = useMemo(() => {\n if (virtualScrolling && virtualScrollingResult.virtualItems.length > 0) {\n return virtualScrollingResult.virtualItems\n .map((item) => ({\n row: paginatedData[item.index],\n index: item.index,\n }))\n .filter((item) => item.row !== undefined);\n }\n return paginatedData.map((row, index) => ({ row, index }));\n }, [virtualScrolling, virtualScrollingResult.virtualItems, paginatedData]);\n\n if (loading) {\n return (\n <tbody\n className={`bg-white divide-y divide-gray-200 ${className}`}\n {...props}\n >\n {Array.from({ length: 5 }).map((_, index) => (\n <tr key={index}>\n {Array.from({ length: totalColumns }).map((_, colIndex) => (\n <td key={colIndex} className=\"px-6 py-4\">\n <Skeleton className=\"h-4 w-full\" />\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n );\n }\n\n if (paginatedData.length === 0) {\n return (\n <tbody\n className={`bg-white divide-y divide-gray-200 ${className}`}\n {...props}\n >\n <tr>\n <td colSpan={totalColumns} className=\"px-6 py-12\">\n <TableEmptyState />\n </td>\n </tr>\n </tbody>\n );\n }\n\n // If children is a render function, use it\n if (typeof children === \"function\") {\n return (\n <tbody\n className={`bg-white divide-y divide-gray-200 ${className}`}\n {...props}\n >\n {paginatedData.map((row, index) => children(row, index))}\n </tbody>\n );\n }\n\n // Default: render TableRow for each data item\n return (\n <tbody\n className={`bg-white divide-y divide-gray-200 ${className}`}\n role=\"rowgroup\"\n {...props}\n >\n {virtualScrolling &&\n virtualScrollingResult.virtualItems.length > 0 &&\n rowsToRender.length > 0 ? (\n // Virtual scrolling: render with spacer rows\n <>\n {virtualScrollingResult.virtualItems[0]?.start > 0 && (\n <tr\n style={{ height: virtualScrollingResult.virtualItems[0].start }}\n aria-hidden=\"true\"\n >\n <td colSpan={totalColumns} />\n </tr>\n )}\n {rowsToRender.map(({ row, index }) => (\n <TableRow key={index} row={row} rowIndex={index} />\n ))}\n {virtualScrollingResult.virtualItems.length > 0 && (\n <tr\n style={{\n height: Math.max(\n 0,\n virtualScrollingResult.totalHeight -\n (virtualScrollingResult.virtualItems[\n virtualScrollingResult.virtualItems.length - 1\n ]?.end || 0),\n ),\n }}\n aria-hidden=\"true\"\n >\n <td colSpan={totalColumns} />\n </tr>\n )}\n </>\n ) : (\n // Normal rendering\n rowsToRender.map(({ row, index }) => (\n <TableRow key={index} row={row} rowIndex={index} />\n ))\n )}\n </tbody>\n );\n}\n","\"use client\";\n\nimport type { HTMLAttributes } from \"react\";\nimport { useState } from \"react\";\nimport { Input, Select, Label, Button } from \"../../../primitives\";\nimport { getSpacingClass } from \"../../../tokens/spacing\";\nimport { X, Filter } from \"lucide-react\";\n\nexport type FilterType = \"text\" | \"select\" | \"date\";\n\nexport interface FilterConfig {\n key: string;\n label: string;\n type: FilterType;\n options?: Array<{ value: string; label: string }>;\n placeholder?: string;\n}\n\nexport type FilterValue = string | number | boolean | null | undefined;\n\nexport interface TableFiltersProps extends HTMLAttributes<HTMLDivElement> {\n filters: FilterConfig[];\n onFilter: (filters: Record<string, FilterValue>) => void;\n initialValues?: Record<string, FilterValue>;\n showClearAll?: boolean;\n}\n\n/**\n * TableFilters Component\n *\n * Filter controls for tables with support for text, select, and date filters.\n * Follows Atomic Design principles as a Molecule component.\n *\n * @example\n * ```tsx\n * <TableFilters\n * filters={[\n * { key: 'status', label: 'Status', type: 'select', options: [...] },\n * { key: 'search', label: 'Search', type: 'text', placeholder: 'Search...' }\n * ]}\n * onFilter={(filters) => handleFilter(filters)}\n * />\n * ```\n */\nexport default function TableFilters({\n filters,\n onFilter,\n initialValues = {},\n showClearAll = true,\n className = \"\",\n ...props\n}: TableFiltersProps) {\n const [filterValues, setFilterValues] =\n useState<Record<string, FilterValue>>(initialValues);\n const [isExpanded, setIsExpanded] = useState(false);\n\n const hasActiveFilters = Object.values(filterValues).some(\n (value) => value !== \"\" && value !== null && value !== undefined,\n );\n\n const handleFilterChange = (key: string, value: FilterValue) => {\n const newFilters = { ...filterValues, [key]: value };\n setFilterValues(newFilters);\n onFilter(newFilters);\n };\n\n const handleClearAll = () => {\n const clearedFilters: Record<string, FilterValue> = {};\n filters.forEach((filter) => {\n clearedFilters[filter.key] = \"\";\n });\n setFilterValues(clearedFilters);\n onFilter(clearedFilters);\n };\n\n const handleClearFilter = (key: string) => {\n const newFilters = { ...filterValues, [key]: \"\" };\n setFilterValues(newFilters);\n onFilter(newFilters);\n };\n\n const activeFilterCount = Object.values(filterValues).filter(\n (value) => value !== \"\" && value !== null && value !== undefined,\n ).length;\n\n return (\n <div\n className={`bg-white border-b border-gray-200 ${className}`}\n {...props}\n >\n <div className=\"px-4 py-3 sm:px-6\">\n <div className=\"flex items-center justify-between\">\n <button\n type=\"button\"\n onClick={() => setIsExpanded(!isExpanded)}\n className=\"flex items-center gap-2 text-sm font-medium text-gray-700 hover:text-gray-900\"\n >\n <Filter className=\"h-4 w-4\" />\n <span>Filters</span>\n {activeFilterCount > 0 && (\n <span\n className={`inline-flex items-center ${getSpacingClass(\"sm\", \"px\")} ${getSpacingClass(\"0.5\", \"py\")} rounded text-xs font-medium bg-indigo-100 text-indigo-800`}\n >\n {activeFilterCount}\n </span>\n )}\n </button>\n\n {hasActiveFilters && showClearAll && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleClearAll}\n className=\"text-sm\"\n >\n Clear all\n </Button>\n )}\n </div>\n\n {isExpanded && (\n <div className=\"mt-4 grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filters.map((filter) => {\n const value = filterValues[filter.key] || \"\";\n\n return (\n <div key={filter.key} className=\"space-y-1\">\n <Label htmlFor={`filter-${filter.key}`} variant=\"optional\">\n {filter.label}\n </Label>\n <div className=\"relative\">\n {filter.type === \"text\" && (\n <Input\n id={`filter-${filter.key}`}\n type=\"text\"\n value={value}\n onChange={(e) =>\n handleFilterChange(filter.key, e.target.value)\n }\n placeholder={\n filter.placeholder ||\n `Filter by ${filter.label.toLowerCase()}`\n }\n size=\"sm\"\n variant=\"outlined\"\n />\n )}\n\n {filter.type === \"select\" && (\n <div className=\"relative\">\n <Select\n id={`filter-${filter.key}`}\n options={[\n { value: \"\", label: `All ${filter.label}` },\n ...(filter.options || []),\n ]}\n value={value}\n onChange={(e) =>\n handleFilterChange(filter.key, e.target.value)\n }\n />\n {value && (\n <button\n type=\"button\"\n onClick={() => handleClearFilter(filter.key)}\n className=\"absolute right-8 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600\"\n aria-label={`Clear ${filter.label} filter`}\n >\n <X className=\"h-4 w-4\" />\n </button>\n )}\n </div>\n )}\n\n {filter.type === \"date\" && (\n <Input\n id={`filter-${filter.key}`}\n type=\"date\"\n value={value}\n onChange={(e) =>\n handleFilterChange(filter.key, e.target.value)\n }\n size=\"sm\"\n variant=\"outlined\"\n />\n )}\n\n {value && filter.type !== \"select\" && (\n <button\n type=\"button\"\n onClick={() => handleClearFilter(filter.key)}\n className=\"absolute right-2 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600\"\n aria-label={`Clear ${filter.label} filter`}\n >\n <X className=\"h-4 w-4\" />\n </button>\n )}\n </div>\n </div>\n );\n })}\n </div>\n )}\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport type { HTMLAttributes } from \"react\";\nimport { useTableContext } from \"./TableContext\";\nimport TableFiltersComponent from \"./TableFilters/TableFilters\";\n\nexport interface TableFiltersProps extends HTMLAttributes<HTMLDivElement> {\n showClearAll?: boolean;\n}\n\n/**\n * TableFilters Component\n *\n * Renders filter controls for the table.\n * Uses filter configuration from Table context.\n * Must be used within a Table component.\n */\nexport default function TableFilters({\n showClearAll = true,\n className = \"\",\n ...props\n}: TableFiltersProps) {\n const { filterState, setFilters } = useTableContext();\n\n if (filterState.config.length === 0) {\n return null;\n }\n\n return (\n <TableFiltersComponent\n filters={filterState.config}\n onFilter={setFilters}\n initialValues={filterState.values}\n showClearAll={showClearAll}\n className={className}\n {...props}\n />\n );\n}\n","\"use client\";\n\nimport type { HTMLAttributes } from \"react\";\nimport { Button, Select, Text } from \"../../../primitives\";\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\n\nexport interface TablePaginationProps extends HTMLAttributes<HTMLDivElement> {\n page: number;\n pageSize: number;\n total: number;\n onPageChange: (page: number) => void;\n onPageSizeChange: (size: number) => void;\n pageSizeOptions?: number[];\n showPageSizeSelector?: boolean;\n showPageInfo?: boolean;\n}\n\n/**\n * TablePagination Component\n *\n * Pagination controls for tables with page navigation and page size selection.\n * Follows Atomic Design principles as a Molecule component.\n *\n * @example\n * ```tsx\n * <TablePagination\n * page={1}\n * pageSize={10}\n * total={100}\n * onPageChange={(page) => setPage(page)}\n * onPageSizeChange={(size) => setPageSize(size)}\n * />\n * ```\n */\nexport default function TablePagination({\n page,\n pageSize,\n total,\n onPageChange,\n onPageSizeChange,\n pageSizeOptions = [10, 25, 50, 100],\n showPageSizeSelector = true,\n showPageInfo = true,\n className = \"\",\n ...props\n}: TablePaginationProps) {\n const totalPages = Math.ceil(total / pageSize);\n const startItem = total === 0 ? 0 : (page - 1) * pageSize + 1;\n const endItem = Math.min(page * pageSize, total);\n\n const handlePrevious = () => {\n if (page > 1) {\n onPageChange(page - 1);\n }\n };\n\n const handleNext = () => {\n if (page < totalPages) {\n onPageChange(page + 1);\n }\n };\n\n const handleFirst = () => {\n if (page > 1) {\n onPageChange(1);\n }\n };\n\n const handleLast = () => {\n if (page < totalPages) {\n onPageChange(totalPages);\n }\n };\n\n return (\n <div\n className={`flex items-center justify-between px-4 py-3 bg-white border-t border-gray-200 sm:px-6 ${className}`}\n {...props}\n >\n <div className=\"flex flex-1 justify-between sm:hidden\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={handlePrevious}\n disabled={page === 1}\n >\n Previous\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={handleNext}\n disabled={page >= totalPages}\n >\n Next\n </Button>\n </div>\n\n <div className=\"hidden sm:flex sm:flex-1 sm:items-center sm:justify-between\">\n {showPageInfo && (\n <div>\n <Text as=\"p\" className=\"text-sm text-gray-700\">\n Showing <span className=\"font-medium\">{startItem}</span> to{\" \"}\n <span className=\"font-medium\">{endItem}</span> of{\" \"}\n <span className=\"font-medium\">{total}</span> results\n </Text>\n </div>\n )}\n\n <div className=\"flex items-center gap-4\">\n {showPageSizeSelector && (\n <div className=\"flex items-center gap-2\">\n <Text as=\"span\" className=\"text-sm text-gray-700\">\n Show:\n </Text>\n <Select\n options={pageSizeOptions.map((size) => ({\n value: size.toString(),\n label: size.toString(),\n }))}\n value={pageSize.toString()}\n onChange={(e) => {\n const newSize = parseInt(e.target.value);\n onPageSizeChange(newSize);\n // Reset to first page when changing page size\n onPageChange(1);\n }}\n className=\"w-20\"\n />\n </div>\n )}\n\n <nav className=\"flex items-center gap-1\" aria-label=\"Pagination\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleFirst}\n disabled={page === 1}\n aria-label=\"First page\"\n >\n <ChevronLeft className=\"h-4 w-4\" />\n <ChevronLeft className=\"h-4 w-4 -ml-2\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handlePrevious}\n disabled={page === 1}\n aria-label=\"Previous page\"\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </Button>\n\n <div className=\"flex items-center gap-1\">\n {Array.from({ length: Math.min(5, totalPages) }, (_, i) => {\n let pageNum: number;\n if (totalPages <= 5) {\n pageNum = i + 1;\n } else if (page <= 3) {\n pageNum = i + 1;\n } else if (page >= totalPages - 2) {\n pageNum = totalPages - 4 + i;\n } else {\n pageNum = page - 2 + i;\n }\n\n return (\n <Button\n key={pageNum}\n variant={page === pageNum ? \"primary\" : \"ghost\"}\n size=\"sm\"\n onClick={() => onPageChange(pageNum)}\n className=\"min-w-10\"\n aria-label={`Page ${pageNum}`}\n aria-current={page === pageNum ? \"page\" : undefined}\n >\n {pageNum}\n </Button>\n );\n })}\n </div>\n\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleNext}\n disabled={page >= totalPages}\n aria-label=\"Next page\"\n >\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleLast}\n disabled={page >= totalPages}\n aria-label=\"Last page\"\n >\n <ChevronRight className=\"h-4 w-4\" />\n <ChevronRight className=\"h-4 w-4 -ml-2\" />\n </Button>\n </nav>\n </div>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport type { HTMLAttributes } from \"react\";\nimport { useTableContext } from \"./TableContext\";\nimport TablePaginationComponent from \"./TablePagination/TablePagination\";\n\nexport interface TablePaginationProps extends HTMLAttributes<HTMLDivElement> {\n showPageSizeSelector?: boolean;\n showPageInfo?: boolean;\n pageSizeOptions?: number[];\n}\n\n/**\n * TablePagination Component\n *\n * Renders pagination controls for the table.\n * Uses pagination state from Table context.\n * Must be used within a Table component.\n */\nexport default function TablePagination({\n showPageSizeSelector = true,\n showPageInfo = true,\n pageSizeOptions,\n className = \"\",\n ...props\n}: TablePaginationProps) {\n const { paginationState, setPage, setPageSize, paginationMode } =\n useTableContext();\n\n // Only show pagination if there's more than one page or if in server mode\n if (paginationMode === \"client\" && paginationState.totalPages <= 1) {\n return null;\n }\n\n return (\n <TablePaginationComponent\n page={paginationState.page}\n pageSize={paginationState.pageSize}\n total={paginationState.total}\n onPageChange={setPage}\n onPageSizeChange={setPageSize}\n pageSizeOptions={pageSizeOptions}\n showPageSizeSelector={showPageSizeSelector}\n showPageInfo={showPageInfo}\n className={className}\n {...props}\n />\n );\n}\n","\"use client\";\n\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { TableProvider, type TableProviderProps } from \"./TableProvider\";\nimport type { FilterConfig, FilterValue } from \"./TableFilters/TableFilters\";\nimport type { TableAction } from \"./TableActions/TableActions\";\nimport type { TableColumn } from \"./TableTypes\";\nimport TableHeader from \"./TableHeader\";\nimport TableHeaderRow from \"./TableHeaderRow\";\nimport TableHeaderCell from \"./TableHeaderCell\";\nimport TableBody from \"./TableBody\";\nimport TableRow from \"./TableRow\";\nimport TableCell from \"./TableCell\";\nimport TableFilters from \"./TableFilters\";\nimport TablePagination from \"./TablePagination\";\nimport TableEmptyState from \"./TableEmptyState\";\nimport TableActions from \"./TableActions\";\n\nexport type { TableColumn } from \"./TableTypes\";\n\n// API Simplificada Props (backward compatible)\ninterface SimplifiedTableProps<\n T extends Record<string, unknown> = Record<string, unknown>,\n> extends Omit<HTMLAttributes<HTMLDivElement>, \"onSort\" | \"children\"> {\n columns: TableColumn<T>[];\n data: T[];\n loading?: boolean;\n onSort?: (columnKey: string, direction: \"asc\" | \"desc\") => void;\n sortColumn?: string;\n sortDirection?: \"asc\" | \"desc\";\n emptyMessage?: string;\n emptyStateTitle?: string;\n emptyStateMessage?: string;\n emptyStateIllustration?: ReactNode;\n emptyStateAction?: ReactNode;\n\n // Pagination\n pagination?: {\n page: number;\n pageSize: number;\n total: number;\n onPageChange: (page: number) => void;\n onPageSizeChange: (size: number) => void;\n pageSizeOptions?: number[];\n };\n\n // Filters\n filters?: {\n config: FilterConfig[];\n onFilter: (filters: Record<string, FilterValue>) => void;\n initialValues?: Record<string, FilterValue>;\n };\n\n // Selection\n selectable?: boolean;\n selectedRows?: string[];\n onSelectionChange?: (selected: string[]) => void;\n rowId?: (row: T) => string;\n\n // Actions\n actions?: (row: T) => TableAction<T>[];\n\n // Row click callback\n onRowClick?: (row: T) => void;\n\n // Pagination mode\n paginationMode?: \"client\" | \"server\" | \"auto\";\n defaultPageSize?: number;\n\n // Column resizing\n resizable?: boolean;\n columnWidths?: Record<string, number>;\n onColumnResize?: (columnKey: string, width: number) => void;\n\n // Virtual scrolling\n virtualScrolling?: boolean;\n virtualScrollingOptions?: {\n itemHeight?: number;\n containerHeight?: number;\n overscan?: number;\n };\n\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n\n children?: never; // Simplified API doesn't accept children\n}\n\n// API Declarativa Props (compound components)\ninterface DeclarativeTableProps<\n T extends Record<string, unknown> = Record<string, unknown>,\n> extends Omit<TableProviderProps<T>, \"children\"> {\n children: ReactNode; // Declarative API requires children\n}\n\ntype TableProps<T extends Record<string, unknown> = Record<string, unknown>> =\n | SimplifiedTableProps<T>\n | DeclarativeTableProps<T>;\n\n/**\n * Table Component\n *\n * A comprehensive table component with sorting, pagination, filters, selection, and actions.\n * Supports both simplified API (props-based) and declarative API (compound components).\n *\n * @example\n * ```tsx\n * // Simplified API\n * <Table\n * columns={columns}\n * data={data}\n * pagination={{ page, pageSize, total, onPageChange }}\n * />\n *\n * // Declarative API\n * <Table columns={columns} data={data}>\n * <Table.Filters />\n * <Table.Header />\n * <Table.Body />\n * <Table.Pagination />\n * </Table>\n * ```\n */\nfunction TableComponent<T = unknown>(props: TableProps<T>) {\n const { className = \"\", ...restProps } = props;\n const hasChildren = \"children\" in props && props.children !== undefined;\n\n // Convert simplified API props to provider props\n const providerProps: TableProviderProps<T> = hasChildren\n ? (restProps as DeclarativeTableProps<T>)\n : convertSimplifiedToProviderProps(restProps as SimplifiedTableProps<T>);\n\n // If children are provided, use declarative API\n if (hasChildren) {\n return (\n <div\n className={`bg-white shadow rounded-lg overflow-hidden ${className}`}\n >\n <TableProvider {...providerProps}>{props.children}</TableProvider>\n </div>\n );\n }\n\n // Otherwise, use simplified API with default structure\n return (\n <div className={`bg-white shadow rounded-lg overflow-hidden ${className}`}>\n <TableProvider {...providerProps}>\n {providerProps.filters && providerProps.filters.length > 0 && (\n <TableFilters />\n )}\n <div className=\"overflow-x-auto\">\n <table\n className=\"min-w-full divide-y divide-gray-200\"\n role=\"table\"\n aria-label={props[\"aria-label\"]}\n aria-labelledby={props[\"aria-labelledby\"]}\n aria-rowcount={providerProps.total || providerProps.data.length}\n aria-colcount={\n providerProps.columns.length +\n (providerProps.selectable ? 1 : 0) +\n (providerProps.actions ? 1 : 0)\n }\n >\n <TableHeader />\n <TableBody />\n </table>\n </div>\n {/* Show pagination - TablePagination component will decide if it should render based on totalPages */}\n <TablePagination />\n </TableProvider>\n </div>\n );\n}\n\n// Helper to convert simplified API props to provider props\nfunction convertSimplifiedToProviderProps<T extends Record<string, unknown>>(\n props: SimplifiedTableProps<T>,\n): TableProviderProps<T> {\n const {\n columns,\n data,\n loading,\n onSort,\n sortColumn,\n sortDirection,\n emptyMessage,\n emptyStateTitle,\n emptyStateMessage,\n emptyStateIllustration,\n emptyStateAction,\n pagination,\n filters,\n selectable,\n selectedRows,\n onSelectionChange,\n rowId,\n actions,\n onRowClick,\n paginationMode,\n defaultPageSize,\n resizable,\n columnWidths,\n onColumnResize,\n virtualScrolling,\n virtualScrollingOptions,\n } = props;\n\n // Determine pagination mode\n let mode: \"client\" | \"server\" | \"auto\" = paginationMode || \"auto\";\n if (mode === \"auto\") {\n mode =\n pagination && pagination.total !== undefined && pagination.onPageChange\n ? \"server\"\n : \"client\";\n }\n\n return {\n columns,\n data,\n loading,\n paginationMode: mode,\n page: pagination?.page,\n pageSize: pagination?.pageSize,\n total: pagination?.total,\n onPageChange: pagination?.onPageChange,\n onPageSizeChange: pagination?.onPageSizeChange,\n defaultPageSize: defaultPageSize || pagination?.pageSize || 10,\n pageSizeOptions: pagination?.pageSizeOptions,\n sortColumn,\n sortDirection,\n onSort,\n filters: filters?.config,\n filterValues: filters?.initialValues,\n onFilter: filters?.onFilter,\n initialFilterValues: filters?.initialValues,\n selectable,\n selectedRows,\n onSelectionChange,\n rowId,\n actions,\n onRowClick,\n emptyMessage,\n emptyStateTitle,\n emptyStateMessage,\n emptyStateIllustration,\n emptyStateAction,\n resizable,\n columnWidths,\n onColumnResize,\n virtualScrolling,\n virtualScrollingOptions,\n children: <></>, // Placeholder, will be overridden by default structure\n };\n}\n\n// Compound Components\nTableComponent.Header = TableHeader;\nTableComponent.HeaderRow = TableHeaderRow;\nTableComponent.HeaderCell = TableHeaderCell;\nTableComponent.Body = TableBody;\nTableComponent.Row = TableRow;\nTableComponent.Cell = TableCell;\nTableComponent.Filters = TableFilters;\nTableComponent.Pagination = TablePagination;\nTableComponent.EmptyState = TableEmptyState;\nTableComponent.Actions = TableActions;\n\nexport default TableComponent;\n","\"use client\";\n\nimport { useState, useCallback, useRef } from \"react\";\n\nexport interface ColumnWidth {\n [key: string]: number;\n}\n\nexport interface UseColumnResizingOptions {\n defaultWidths?: ColumnWidth;\n minWidth?: number;\n maxWidth?: number;\n resizable?: boolean;\n}\n\nexport interface UseColumnResizingResult {\n columnWidths: ColumnWidth;\n setColumnWidth: (columnKey: string, width: number) => void;\n resetColumnWidths: () => void;\n isResizing: boolean;\n resizingColumn: string | null;\n startResize: (columnKey: string, startX: number, startWidth: number) => void;\n handleResize: (currentX: number) => void;\n endResize: () => void;\n}\n\n/**\n * useColumnResizing Hook\n *\n * Hook for managing column resizing in tables.\n *\n * @example\n * ```tsx\n * const {\n * columnWidths,\n * setColumnWidth,\n * startResize,\n * handleResize,\n * endResize,\n * } = useColumnResizing({\n * defaultWidths: { name: 200, email: 250 },\n * minWidth: 100,\n * });\n * ```\n */\nexport function useColumnResizing(\n options: UseColumnResizingOptions = {},\n): UseColumnResizingResult {\n const {\n defaultWidths = {},\n minWidth = 50,\n maxWidth,\n resizable = true,\n } = options;\n\n const [columnWidths, setColumnWidths] = useState<ColumnWidth>(defaultWidths);\n const [isResizing, setIsResizing] = useState(false);\n const [resizingColumn, setResizingColumn] = useState<string | null>(null);\n const resizeStateRef = useRef<{ startX: number; startWidth: number } | null>(\n null,\n );\n\n const setColumnWidth = useCallback(\n (columnKey: string, width: number) => {\n const clampedWidth = Math.max(\n minWidth,\n maxWidth ? Math.min(width, maxWidth) : width,\n );\n setColumnWidths((prev) => ({\n ...prev,\n [columnKey]: clampedWidth,\n }));\n },\n [minWidth, maxWidth],\n );\n\n const resetColumnWidths = useCallback(() => {\n setColumnWidths(defaultWidths);\n }, [defaultWidths]);\n\n const startResize = useCallback(\n (columnKey: string, startX: number, startWidth: number) => {\n if (!resizable) return;\n setIsResizing(true);\n setResizingColumn(columnKey);\n resizeStateRef.current = { startX, startWidth };\n },\n [resizable],\n );\n\n const handleResize = useCallback(\n (currentX: number) => {\n if (!isResizing || !resizingColumn || !resizeStateRef.current) return;\n\n const deltaX = currentX - resizeStateRef.current.startX;\n const newWidth = resizeStateRef.current.startWidth + deltaX;\n setColumnWidth(resizingColumn, newWidth);\n },\n [isResizing, resizingColumn, setColumnWidth],\n );\n\n const endResize = useCallback(() => {\n setIsResizing(false);\n setResizingColumn(null);\n resizeStateRef.current = null;\n }, []);\n\n // Handle mouse move and mouse up globally during resize\n const handleMouseMoveRef = useRef<((e: MouseEvent) => void) | undefined>(\n undefined,\n );\n const handleMouseUpRef = useRef<(() => void) | undefined>(undefined);\n\n if (typeof window !== \"undefined\") {\n handleMouseMoveRef.current = (e: MouseEvent) => {\n if (isResizing) {\n handleResize(e.clientX);\n }\n };\n\n handleMouseUpRef.current = () => {\n if (isResizing) {\n endResize();\n }\n };\n\n if (isResizing) {\n document.addEventListener(\"mousemove\", handleMouseMoveRef.current);\n document.addEventListener(\"mouseup\", handleMouseUpRef.current);\n } else {\n if (handleMouseMoveRef.current) {\n document.removeEventListener(\"mousemove\", handleMouseMoveRef.current);\n }\n if (handleMouseUpRef.current) {\n document.removeEventListener(\"mouseup\", handleMouseUpRef.current);\n }\n }\n }\n\n return {\n columnWidths,\n setColumnWidth,\n resetColumnWidths,\n isResizing,\n resizingColumn,\n startResize,\n handleResize,\n endResize,\n };\n}\n","\"use client\";\n\nimport { createContext, useContext } from \"react\";\nimport type { SideNavbarThemeContextValue } from \"../types\";\n\n/**\n * Theme context for SideNavbar styling configuration.\n * Contains visual customization options that typically don't change during runtime.\n */\nexport const SideNavbarThemeContext =\n createContext<SideNavbarThemeContextValue | null>(null);\n\n/**\n * Hook to access SideNavbar theme context.\n * Returns null if used outside of provider.\n */\nexport function useSideNavbarTheme(): SideNavbarThemeContextValue | null {\n return useContext(SideNavbarThemeContext);\n}\n\n/**\n * Hook to access SideNavbar theme context with required check.\n * Throws error if used outside of provider.\n */\nexport function useSideNavbarThemeRequired(): SideNavbarThemeContextValue {\n const context = useContext(SideNavbarThemeContext);\n if (!context) {\n throw new Error(\n \"useSideNavbarThemeRequired must be used within SideNavbarThemeProvider\",\n );\n }\n return context;\n}\n\n// Default values\nexport const defaultThemeValues: SideNavbarThemeContextValue = {\n variant: \"default\",\n navigationWidth: \"56px\",\n contentWidth: \"320px\",\n animationDuration: 300,\n animationEasing: \"ease-in-out\",\n};\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport {\n SideNavbarThemeContext,\n defaultThemeValues,\n} from \"../contexts/SideNavbarThemeContext\";\nimport type { SideNavbarThemeProviderProps } from \"../types\";\n\n/**\n * Theme Provider for SideNavbar\n *\n * Provides visual customization context for the sidebar.\n * Theme values are typically set once and don't change during runtime.\n *\n * @example\n * ```tsx\n * <SideNavbarThemeProvider variant=\"elevated\" animationDuration={200}>\n * <SideNavbarConfigProvider>\n * <SideNavbarStateProvider>\n * <SideNavbarRoot>...</SideNavbarRoot>\n * </SideNavbarStateProvider>\n * </SideNavbarConfigProvider>\n * </SideNavbarThemeProvider>\n * ```\n */\nexport function SideNavbarThemeProvider({\n children,\n variant = defaultThemeValues.variant,\n navigationWidth = defaultThemeValues.navigationWidth,\n contentWidth = defaultThemeValues.contentWidth,\n animationDuration = defaultThemeValues.animationDuration,\n animationEasing = defaultThemeValues.animationEasing,\n}: SideNavbarThemeProviderProps) {\n const value = useMemo(\n () => ({\n variant,\n navigationWidth,\n contentWidth,\n animationDuration,\n animationEasing,\n }),\n [\n variant,\n navigationWidth,\n contentWidth,\n animationDuration,\n animationEasing,\n ],\n );\n\n return (\n <SideNavbarThemeContext.Provider value={value}>\n {children}\n </SideNavbarThemeContext.Provider>\n );\n}\n\nexport default SideNavbarThemeProvider;\n","\"use client\";\n\nimport { createContext, useContext } from \"react\";\nimport type { SideNavbarConfigContextValue } from \"../types\";\n\n/**\n * Config context for SideNavbar behavior configuration.\n * Contains behavioral settings that typically don't change during runtime.\n */\nexport const SideNavbarConfigContext =\n createContext<SideNavbarConfigContextValue | null>(null);\n\n/**\n * Hook to access SideNavbar config context.\n * Returns null if used outside of provider.\n */\nexport function useSideNavbarConfig(): SideNavbarConfigContextValue | null {\n return useContext(SideNavbarConfigContext);\n}\n\n/**\n * Hook to access SideNavbar config context with required check.\n * Throws error if used outside of provider.\n */\nexport function useSideNavbarConfigRequired(): SideNavbarConfigContextValue {\n const context = useContext(SideNavbarConfigContext);\n if (!context) {\n throw new Error(\n \"useSideNavbarConfigRequired must be used within SideNavbarConfigProvider\",\n );\n }\n return context;\n}\n\n// Default values\nexport const defaultConfigValues: SideNavbarConfigContextValue = {\n mode: \"full\",\n resizable: false,\n minWidth: undefined,\n maxWidth: undefined,\n snapPoints: undefined,\n responsive: false,\n mobileBreakpoint: 768,\n mobileVariant: \"collapse\",\n overlayBackdrop: true,\n persistState: true,\n persistWidth: false,\n storageKey: undefined,\n keyboardShortcut: \"Ctrl+B\",\n enableKeyboardShortcut: true,\n};\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport {\n SideNavbarConfigContext,\n defaultConfigValues,\n} from \"../contexts/SideNavbarConfigContext\";\nimport type { SideNavbarConfigProviderProps } from \"../types\";\n\n/**\n * Config Provider for SideNavbar\n *\n * Provides behavioral configuration context for the sidebar.\n * Config values are typically set once and don't change during runtime.\n *\n * @example\n * ```tsx\n * <SideNavbarConfigProvider mode=\"full\" resizable responsive>\n * <SideNavbarStateProvider>\n * <SideNavbarRoot>...</SideNavbarRoot>\n * </SideNavbarStateProvider>\n * </SideNavbarConfigProvider>\n * ```\n */\nexport function SideNavbarConfigProvider({\n children,\n mode = defaultConfigValues.mode,\n resizable = defaultConfigValues.resizable,\n minWidth = defaultConfigValues.minWidth,\n maxWidth = defaultConfigValues.maxWidth,\n snapPoints = defaultConfigValues.snapPoints,\n responsive = defaultConfigValues.responsive,\n mobileBreakpoint = defaultConfigValues.mobileBreakpoint,\n mobileVariant = defaultConfigValues.mobileVariant,\n overlayBackdrop = defaultConfigValues.overlayBackdrop,\n persistState = defaultConfigValues.persistState,\n persistWidth = defaultConfigValues.persistWidth,\n storageKey = defaultConfigValues.storageKey,\n keyboardShortcut = defaultConfigValues.keyboardShortcut,\n enableKeyboardShortcut = defaultConfigValues.enableKeyboardShortcut,\n}: SideNavbarConfigProviderProps) {\n const value = useMemo(\n () => ({\n mode,\n resizable,\n minWidth,\n maxWidth,\n snapPoints,\n responsive,\n mobileBreakpoint,\n mobileVariant,\n overlayBackdrop,\n persistState,\n persistWidth,\n storageKey,\n keyboardShortcut,\n enableKeyboardShortcut,\n }),\n [\n mode,\n resizable,\n minWidth,\n maxWidth,\n snapPoints,\n responsive,\n mobileBreakpoint,\n mobileVariant,\n overlayBackdrop,\n persistState,\n persistWidth,\n storageKey,\n keyboardShortcut,\n enableKeyboardShortcut,\n ],\n );\n\n return (\n <SideNavbarConfigContext.Provider value={value}>\n {children}\n </SideNavbarConfigContext.Provider>\n );\n}\n\nexport default SideNavbarConfigProvider;\n","\"use client\";\n\nimport { createContext, useContext } from \"react\";\nimport type { SideNavbarStateContextValue } from \"../types\";\n\n/**\n * State context for SideNavbar runtime state.\n * Contains mutable state that changes during component lifecycle.\n */\nexport const SideNavbarStateContext =\n createContext<SideNavbarStateContextValue | null>(null);\n\n/**\n * Hook to access SideNavbar state context.\n * Returns null if used outside of provider.\n */\nexport function useSideNavbarState(): SideNavbarStateContextValue | null {\n return useContext(SideNavbarStateContext);\n}\n\n/**\n * Hook to access SideNavbar state context with required check.\n * Throws error if used outside of provider.\n */\nexport function useSideNavbarStateRequired(): SideNavbarStateContextValue {\n const context = useContext(SideNavbarStateContext);\n if (!context) {\n throw new Error(\n \"useSideNavbarStateRequired must be used within SideNavbarStateProvider\",\n );\n }\n return context;\n}\n\n// Default values factory (needs ref)\nexport function createDefaultStateValues(): SideNavbarStateContextValue {\n return {\n collapsed: false,\n toggle: () => {},\n setCollapsed: () => {},\n currentWidth: 320,\n setWidth: () => {},\n isMobile: false,\n isResizing: false,\n startResize: () => {},\n groupStates: {},\n toggleGroup: () => {},\n setGroupCollapsed: () => {},\n sidebarRef: { current: null },\n };\n}\n","/**\n * Parse a width value (number or string) to pixels\n *\n * Supports:\n * - Numbers: returned as-is\n * - Pixel strings: \"320px\" -> 320\n * - Rem strings: \"20rem\" -> 320 (assuming 16px base)\n * - Em strings: \"20em\" -> 320 (assuming 16px base)\n * - Plain numbers as strings: \"320\" -> 320\n *\n * @param width - The width value to parse\n * @returns The width in pixels\n */\nexport function parseWidthToPixels(width: number | string): number {\n if (typeof width === \"number\") return width;\n\n const numericValue = parseFloat(width);\n if (isNaN(numericValue)) return 0;\n\n if (width.endsWith(\"rem\")) return numericValue * 16;\n if (width.endsWith(\"em\")) return numericValue * 16;\n if (width.endsWith(\"px\")) return numericValue;\n\n return numericValue;\n}\n\n/**\n * Validate that minWidth is less than maxWidth\n *\n * @param minWidth - Minimum width in pixels\n * @param maxWidth - Maximum width in pixels\n * @returns True if valid, false otherwise\n */\nexport function validateWidthBounds(\n minWidth?: number,\n maxWidth?: number,\n): boolean {\n if (minWidth === undefined || maxWidth === undefined) return true;\n return minWidth < maxWidth;\n}\n\n/**\n * Clamp a width value between min and max bounds\n *\n * @param width - The width to clamp\n * @param minWidth - Minimum allowed width\n * @param maxWidth - Maximum allowed width\n * @returns The clamped width value\n */\nexport function clampWidth(\n width: number,\n minWidth?: number,\n maxWidth?: number,\n): number {\n let result = width;\n if (minWidth !== undefined) result = Math.max(result, minWidth);\n if (maxWidth !== undefined) result = Math.min(result, maxWidth);\n return result;\n}\n","/**\n * Parsed keyboard shortcut result\n */\nexport interface ParsedKeyboardShortcut {\n /** The main key (lowercase) */\n key: string;\n /** Whether Ctrl/Cmd is required */\n ctrl: boolean;\n /** Whether Shift is required */\n shift: boolean;\n /** Whether Alt is required */\n alt: boolean;\n /** Whether Meta (Windows/Cmd) is required */\n meta: boolean;\n /** Whether the shortcut is valid */\n isValid: boolean;\n}\n\n/**\n * Known modifier keys\n */\nconst MODIFIER_KEYS = [\n \"ctrl\",\n \"cmd\",\n \"control\",\n \"shift\",\n \"alt\",\n \"meta\",\n \"option\",\n] as const;\n\n/**\n * Parse a keyboard shortcut string into its components\n *\n * Supports various formats:\n * - \"Ctrl+B\" -> { key: 'b', ctrl: true, ... }\n * - \"Cmd+Shift+K\" -> { key: 'k', ctrl: true, shift: true, ... }\n * - \"Alt+Enter\" -> { key: 'enter', alt: true, ... }\n * - \"Ctrl+Shift+Alt+S\" -> { key: 's', ctrl: true, shift: true, alt: true, ... }\n *\n * Modifier aliases:\n * - \"cmd\" and \"control\" are aliases for \"ctrl\"\n * - \"option\" is an alias for \"alt\"\n *\n * @param shortcut - The keyboard shortcut string to parse\n * @returns Parsed shortcut object with key and modifiers\n *\n * @example\n * ```ts\n * parseKeyboardShortcut('Ctrl+B')\n * // { key: 'b', ctrl: true, shift: false, alt: false, meta: false, isValid: true }\n *\n * parseKeyboardShortcut('Cmd+Shift+K')\n * // { key: 'k', ctrl: true, shift: true, alt: false, meta: false, isValid: true }\n *\n * parseKeyboardShortcut('')\n * // { key: '', ctrl: false, shift: false, alt: false, meta: false, isValid: false }\n * ```\n */\nexport function parseKeyboardShortcut(\n shortcut: string,\n): ParsedKeyboardShortcut {\n // Default invalid result\n const invalidResult: ParsedKeyboardShortcut = {\n key: \"\",\n ctrl: false,\n shift: false,\n alt: false,\n meta: false,\n isValid: false,\n };\n\n // Handle empty or invalid input\n if (!shortcut || typeof shortcut !== \"string\") {\n return invalidResult;\n }\n\n // Trim and normalize\n const normalized = shortcut.trim();\n if (!normalized) {\n return invalidResult;\n }\n\n // Split by '+' and filter empty parts\n const parts = normalized\n .split(\"+\")\n .map((part) => part.trim().toLowerCase())\n .filter((part) => part.length > 0);\n\n if (parts.length === 0) {\n return invalidResult;\n }\n\n // The last non-modifier part is the main key\n const modifiers = new Set<string>();\n let mainKey = \"\";\n\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n\n if (MODIFIER_KEYS.includes(part as (typeof MODIFIER_KEYS)[number])) {\n modifiers.add(part);\n } else if (i === parts.length - 1) {\n // Last part should be the main key\n mainKey = part;\n } else {\n // Non-modifier key in the middle is invalid\n return invalidResult;\n }\n }\n\n // Must have a main key\n if (!mainKey) {\n return invalidResult;\n }\n\n // Check for ctrl aliases (cmd, control)\n const hasCtrl =\n modifiers.has(\"ctrl\") || modifiers.has(\"cmd\") || modifiers.has(\"control\");\n\n // Check for alt aliases (option)\n const hasAlt = modifiers.has(\"alt\") || modifiers.has(\"option\");\n\n return {\n key: mainKey,\n ctrl: hasCtrl,\n shift: modifiers.has(\"shift\"),\n alt: hasAlt,\n meta: modifiers.has(\"meta\"),\n isValid: true,\n };\n}\n\n/**\n * Format a parsed shortcut back to a string (for display)\n *\n * @param shortcut - The parsed shortcut object\n * @param platform - The platform (mac uses symbols, others use text)\n * @returns Formatted shortcut string\n *\n * @example\n * ```ts\n * formatKeyboardShortcut({ key: 'b', ctrl: true, ... }, 'mac')\n * // '⌘B'\n *\n * formatKeyboardShortcut({ key: 'b', ctrl: true, ... }, 'windows')\n * // 'Ctrl+B'\n * ```\n */\nexport function formatKeyboardShortcut(\n shortcut: ParsedKeyboardShortcut,\n platform: \"mac\" | \"windows\" | \"linux\" = \"windows\",\n): string {\n if (!shortcut.isValid) return \"\";\n\n const parts: string[] = [];\n\n if (platform === \"mac\") {\n // macOS uses symbols\n if (shortcut.ctrl) parts.push(\"⌘\");\n if (shortcut.shift) parts.push(\"⇧\");\n if (shortcut.alt) parts.push(\"⌥\");\n if (shortcut.meta) parts.push(\"⌃\");\n parts.push(shortcut.key.toUpperCase());\n return parts.join(\"\");\n }\n\n // Windows/Linux use text\n if (shortcut.ctrl) parts.push(\"Ctrl\");\n if (shortcut.shift) parts.push(\"Shift\");\n if (shortcut.alt) parts.push(\"Alt\");\n if (shortcut.meta) parts.push(\"Meta\");\n parts.push(shortcut.key.toUpperCase());\n return parts.join(\"+\");\n}\n","\"use client\";\n\nimport { useState, useCallback, useRef, useEffect } from \"react\";\nimport { clampWidth, validateWidthBounds } from \"../utils\";\n\nexport interface UseResizeOptions {\n /**\n * Initial width\n */\n initialWidth: number;\n\n /**\n * Minimum width constraint\n */\n minWidth?: number;\n\n /**\n * Maximum width constraint\n */\n maxWidth?: number;\n\n /**\n * Snap points (widths to snap to when dragging)\n */\n snapPoints?: number[];\n\n /**\n * Snap threshold in pixels\n * @default 20\n */\n snapThreshold?: number;\n\n /**\n * Callback when width changes\n */\n onWidthChange?: (width: number) => void;\n\n /**\n * Whether resize is enabled\n * @default true\n */\n enabled?: boolean;\n}\n\nexport interface UseResizeReturn {\n /**\n * Current width\n */\n width: number;\n\n /**\n * Whether currently resizing\n */\n isResizing: boolean;\n\n /**\n * Start resize handler (attach to mousedown)\n */\n startResize: (event: React.MouseEvent) => void;\n\n /**\n * Set width programmatically\n */\n setWidth: (width: number) => void;\n}\n\n/**\n * Hook for drag-to-resize functionality\n *\n * Provides resize state and handlers for drag-to-resize interactions.\n * Supports snap points and min/max constraints.\n *\n * @example\n * ```tsx\n * const { width, isResizing, startResize } = useResize({\n * initialWidth: 320,\n * minWidth: 200,\n * maxWidth: 600,\n * snapPoints: [200, 320, 480],\n * onWidthChange: (width) => console.log('Width:', width)\n * });\n * ```\n */\nexport function useResize({\n initialWidth,\n minWidth,\n maxWidth,\n snapPoints,\n snapThreshold = 20,\n onWidthChange,\n enabled = true,\n}: UseResizeOptions): UseResizeReturn {\n // Validate bounds on first render\n if (process.env.NODE_ENV === \"development\") {\n if (!validateWidthBounds(minWidth, maxWidth)) {\n console.warn(\n \"[useResize] Invalid bounds: minWidth must be less than maxWidth\",\n { minWidth, maxWidth },\n );\n }\n }\n\n // Clamp initial width to valid bounds\n const clampedInitialWidth = clampWidth(initialWidth, minWidth, maxWidth);\n const [width, setWidthState] = useState(clampedInitialWidth);\n const [isResizing, setIsResizing] = useState(false);\n const startXRef = useRef<number>(0);\n const startWidthRef = useRef<number>(clampedInitialWidth);\n\n const setWidth = useCallback(\n (newWidth: number) => {\n // Use utility function to clamp width\n let constrainedWidth = clampWidth(newWidth, minWidth, maxWidth);\n\n // Check snap points\n if (snapPoints && snapPoints.length > 0) {\n const closestSnap = snapPoints.reduce((closest, snap) => {\n const distanceToSnap = Math.abs(constrainedWidth - snap);\n const distanceToClosest = Math.abs(constrainedWidth - closest);\n return distanceToSnap < distanceToClosest ? snap : closest;\n }, snapPoints[0]);\n\n if (Math.abs(constrainedWidth - closestSnap) <= snapThreshold) {\n constrainedWidth = closestSnap;\n }\n }\n\n setWidthState(constrainedWidth);\n onWidthChange?.(constrainedWidth);\n },\n [minWidth, maxWidth, snapPoints, snapThreshold, onWidthChange],\n );\n\n const handleMouseMove = useCallback(\n (event: MouseEvent) => {\n if (!enabled || !isResizing) return;\n\n const deltaX = event.clientX - startXRef.current;\n const newWidth = startWidthRef.current + deltaX;\n setWidth(newWidth);\n },\n [enabled, isResizing, setWidth],\n );\n\n const handleMouseUp = useCallback(() => {\n if (!enabled) return;\n\n setIsResizing(false);\n startXRef.current = 0;\n startWidthRef.current = width;\n }, [enabled, width]);\n\n const startResize = useCallback(\n (event: React.MouseEvent) => {\n if (!enabled) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n setIsResizing(true);\n startXRef.current = event.clientX;\n startWidthRef.current = width;\n },\n [enabled, width],\n );\n\n useEffect(() => {\n if (!isResizing) return;\n\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp);\n\n // Prevent text selection while resizing\n document.body.style.userSelect = \"none\";\n document.body.style.cursor = \"col-resize\";\n\n return () => {\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n document.body.style.userSelect = \"\";\n document.body.style.cursor = \"\";\n };\n }, [isResizing, handleMouseMove, handleMouseUp]);\n\n // Update width when initialWidth changes externally\n useEffect(() => {\n if (!isResizing) {\n setWidthState(clampWidth(initialWidth, minWidth, maxWidth));\n }\n }, [initialWidth, minWidth, maxWidth, isResizing]);\n\n return {\n width,\n isResizing,\n startResize,\n setWidth,\n };\n}\n","\"use client\";\n\nimport { useState, useEffect, useCallback } from \"react\";\n\nexport interface UseResponsiveSidebarOptions {\n /**\n * Breakpoint in pixels for mobile detection\n * @default 768\n */\n mobileBreakpoint?: number;\n\n /**\n * Callback when mobile state changes\n */\n onMobileChange?: (isMobile: boolean) => void;\n\n /**\n * Whether responsive behavior is enabled\n * @default true\n */\n enabled?: boolean;\n}\n\nexport interface UseResponsiveSidebarReturn {\n /**\n * Whether current viewport is mobile\n */\n isMobile: boolean;\n\n /**\n * Current viewport width\n */\n viewportWidth: number;\n}\n\n/**\n * Hook for responsive sidebar behavior\n *\n * Detects mobile breakpoints and provides responsive state.\n *\n * @example\n * ```tsx\n * const { isMobile, viewportWidth } = useResponsiveSidebar({\n * mobileBreakpoint: 768,\n * onMobileChange: (isMobile) => console.log('Mobile:', isMobile)\n * });\n * ```\n */\nexport function useResponsiveSidebar({\n mobileBreakpoint = 768,\n onMobileChange,\n enabled = true,\n}: UseResponsiveSidebarOptions = {}): UseResponsiveSidebarReturn {\n const [viewportWidth, setViewportWidth] = useState<number>(\n typeof window !== \"undefined\" ? window.innerWidth : 1024,\n );\n const [isMobile, setIsMobile] = useState<boolean>(\n typeof window !== \"undefined\"\n ? window.innerWidth < mobileBreakpoint\n : false,\n );\n\n const handleResize = useCallback(() => {\n if (!enabled || typeof window === \"undefined\") return;\n\n const newWidth = window.innerWidth;\n const newIsMobile = newWidth < mobileBreakpoint;\n\n setViewportWidth(newWidth);\n\n if (newIsMobile !== isMobile) {\n setIsMobile(newIsMobile);\n onMobileChange?.(newIsMobile);\n }\n }, [enabled, mobileBreakpoint, isMobile, onMobileChange]);\n\n useEffect(() => {\n if (!enabled || typeof window === \"undefined\") return;\n\n // Set initial state\n const initialWidth = window.innerWidth;\n const initialIsMobile = initialWidth < mobileBreakpoint;\n setViewportWidth(initialWidth);\n setIsMobile(initialIsMobile);\n\n // Listen for resize events\n window.addEventListener(\"resize\", handleResize);\n\n // Use ResizeObserver for more accurate detection\n let resizeObserver: ResizeObserver | null = null;\n if (window.ResizeObserver) {\n resizeObserver = new ResizeObserver(() => {\n handleResize();\n });\n resizeObserver.observe(document.body);\n }\n\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n resizeObserver?.disconnect();\n };\n }, [enabled, mobileBreakpoint, handleResize]);\n\n return {\n isMobile,\n viewportWidth,\n };\n}\n","\"use client\";\n\nimport { useEffect, useRef, useCallback } from \"react\";\n\nexport interface UseFocusManagementOptions {\n /**\n * Whether focus trap is active\n */\n isActive: boolean;\n\n /**\n * Container element to trap focus within\n */\n containerRef: React.RefObject<HTMLElement | null>;\n\n /**\n * Whether to restore focus to previous element when deactivated\n * @default true\n */\n restoreFocus?: boolean;\n\n /**\n * Initial element to focus when activated\n */\n initialFocusRef?: React.RefObject<HTMLElement | null>;\n}\n\n/**\n * Hook for managing focus within a container (focus trap)\n *\n * Traps focus within a container element, useful for modals and overlays.\n * Supports restoring focus when deactivated.\n *\n * @example\n * ```tsx\n * const containerRef = useRef<HTMLDivElement>(null);\n * useFocusManagement({\n * isActive: isOpen,\n * containerRef,\n * restoreFocus: true\n * });\n * ```\n */\nexport function useFocusManagement({\n isActive,\n containerRef,\n restoreFocus = true,\n initialFocusRef,\n}: UseFocusManagementOptions) {\n const previousActiveElementRef = useRef<HTMLElement | null>(null);\n\n // Save previous focus when activating\n useEffect(() => {\n if (isActive) {\n previousActiveElementRef.current = document.activeElement as HTMLElement;\n\n // Focus initial element if provided\n if (initialFocusRef?.current) {\n initialFocusRef.current.focus();\n } else if (containerRef.current) {\n // Otherwise focus first focusable element in container\n const firstFocusable = containerRef.current.querySelector(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n ) as HTMLElement;\n firstFocusable?.focus();\n }\n } else if (restoreFocus && previousActiveElementRef.current) {\n // Restore focus when deactivating\n previousActiveElementRef.current.focus();\n previousActiveElementRef.current = null;\n }\n }, [isActive, containerRef, initialFocusRef, restoreFocus]);\n\n // Trap focus within container\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (!isActive || !containerRef.current) return;\n\n // Handle Tab key\n if (event.key === \"Tab\") {\n const focusableElements = containerRef.current.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n );\n\n const firstFocusable = focusableElements[0] as HTMLElement;\n const lastFocusable = focusableElements[\n focusableElements.length - 1\n ] as HTMLElement;\n\n if (event.shiftKey) {\n // Shift + Tab\n if (document.activeElement === firstFocusable) {\n event.preventDefault();\n lastFocusable?.focus();\n }\n } else {\n // Tab\n if (document.activeElement === lastFocusable) {\n event.preventDefault();\n firstFocusable?.focus();\n }\n }\n }\n },\n [isActive, containerRef],\n );\n\n useEffect(() => {\n if (!isActive) return;\n\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [isActive, handleKeyDown]);\n}\n","\"use client\";\n\nimport { useEffect, useCallback } from \"react\";\n\nexport interface UseKeyboardShortcutOptions {\n /**\n * Key to listen for (e.g., 'b', 'Escape', 'Enter')\n */\n key: string;\n\n /**\n * Whether Ctrl/Cmd key should be pressed\n * @default false\n */\n ctrl?: boolean;\n\n /**\n * Whether Shift key should be pressed\n * @default false\n */\n shift?: boolean;\n\n /**\n * Whether Alt key should be pressed\n * @default false\n */\n alt?: boolean;\n\n /**\n * Whether Meta key should be pressed (Cmd on Mac)\n * @default false\n */\n meta?: boolean;\n\n /**\n * Callback when shortcut is triggered\n */\n onTrigger: () => void;\n\n /**\n * Whether the shortcut is enabled\n * @default true\n */\n enabled?: boolean;\n\n /**\n * Whether to prevent default behavior\n * @default true\n */\n preventDefault?: boolean;\n}\n\n/**\n * Hook for keyboard shortcuts\n *\n * Listens for keyboard combinations and triggers callbacks.\n * Automatically ignores input fields unless explicitly allowed.\n *\n * @example\n * ```tsx\n * useKeyboardShortcut({\n * key: 'b',\n * ctrl: true,\n * onTrigger: () => toggleSidebar(),\n * });\n * ```\n */\nexport function useKeyboardShortcut({\n key: targetKey,\n ctrl = false,\n shift = false,\n alt = false,\n meta = false,\n onTrigger,\n enabled = true,\n preventDefault = true,\n}: UseKeyboardShortcutOptions) {\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (!enabled) return;\n\n // Don't trigger in input fields (unless it's a system shortcut)\n const target = event.target as HTMLElement;\n const isInputField =\n target.tagName === \"INPUT\" ||\n target.tagName === \"TEXTAREA\" ||\n target.isContentEditable;\n\n // Allow Ctrl/Cmd shortcuts in inputs (like Ctrl+B)\n if (isInputField && !ctrl && !meta) {\n return;\n }\n\n // Check key match (case-insensitive for letter keys)\n const keyMatch =\n targetKey.length === 1\n ? event.key.toLowerCase() === targetKey.toLowerCase()\n : event.key === targetKey;\n\n // Check modifier keys\n const ctrlMatch = ctrl\n ? event.ctrlKey || event.metaKey\n : !event.ctrlKey && !event.metaKey;\n const shiftMatch = shift ? event.shiftKey : !event.shiftKey;\n const altMatch = alt ? event.altKey : !event.altKey;\n const metaMatch = meta ? event.metaKey : !event.metaKey;\n\n // If ctrl is true, allow either Ctrl or Meta (Cmd on Mac)\n const modifierMatch = ctrl\n ? (event.ctrlKey || event.metaKey) && !meta\n : ctrlMatch && metaMatch;\n\n if (keyMatch && modifierMatch && shiftMatch && altMatch) {\n if (preventDefault) {\n event.preventDefault();\n event.stopPropagation();\n }\n onTrigger();\n }\n },\n [enabled, targetKey, ctrl, shift, alt, meta, onTrigger, preventDefault],\n );\n\n useEffect(() => {\n if (!enabled) return;\n\n window.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n window.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [enabled, handleKeyDown]);\n}\n","\"use client\";\n\nimport React, {\n useState,\n useCallback,\n useEffect,\n useRef,\n useMemo,\n} from \"react\";\nimport { SideNavbarStateContext } from \"../contexts/SideNavbarStateContext\";\nimport { useSideNavbarThemeRequired } from \"../contexts/SideNavbarThemeContext\";\nimport { useSideNavbarConfigRequired } from \"../contexts/SideNavbarConfigContext\";\nimport { useResize } from \"../hooks/useResize\";\nimport { useResponsiveSidebar } from \"../hooks/useResponsiveSidebar\";\nimport { useFocusManagement } from \"../hooks/useFocusManagement\";\nimport { useKeyboardShortcut } from \"../hooks/useKeyboardShortcut\";\nimport { parseWidthToPixels, parseKeyboardShortcut } from \"../utils\";\nimport type {\n SideNavbarStateProviderProps,\n SideNavbarStateContextValue,\n} from \"../types\";\n\n/**\n * State Provider for SideNavbar\n *\n * Provides runtime state management for the sidebar.\n * Manages collapse state, resize, responsive behavior, and group states.\n *\n * Must be nested inside SideNavbarThemeProvider and SideNavbarConfigProvider.\n *\n * @example\n * ```tsx\n * <SideNavbarThemeProvider>\n * <SideNavbarConfigProvider>\n * <SideNavbarStateProvider defaultCollapsed onCollapseChange={handleChange}>\n * <SideNavbarRoot>...</SideNavbarRoot>\n * </SideNavbarStateProvider>\n * </SideNavbarConfigProvider>\n * </SideNavbarThemeProvider>\n * ```\n */\nexport function SideNavbarStateProvider({\n children,\n defaultCollapsed = false,\n collapsed: controlledCollapsed,\n onCollapseChange,\n onWidthChange,\n onMobileChange,\n exclusiveGroups = false,\n}: SideNavbarStateProviderProps) {\n const theme = useSideNavbarThemeRequired();\n const config = useSideNavbarConfigRequired();\n const sidebarRef = useRef<HTMLElement | null>(null);\n\n // Determine if component is controlled\n const isControlled = controlledCollapsed !== undefined;\n\n // Initialize collapsed state from storage or default\n const getInitialCollapsedState = (): boolean => {\n if (isControlled) return controlledCollapsed;\n if (\n config.storageKey &&\n config.persistState &&\n typeof window !== \"undefined\"\n ) {\n const stored = localStorage.getItem(`${config.storageKey}-collapsed`);\n if (stored !== null) {\n return stored === \"true\";\n }\n }\n return defaultCollapsed;\n };\n\n // Initialize width state from storage or default\n const getInitialWidth = (): number => {\n if (\n config.storageKey &&\n config.persistWidth &&\n typeof window !== \"undefined\"\n ) {\n const stored = localStorage.getItem(`${config.storageKey}-width`);\n if (stored !== null) {\n const parsedWidth = parseInt(stored, 10);\n if (!isNaN(parsedWidth)) return parsedWidth;\n }\n }\n return parseWidthToPixels(theme.contentWidth);\n };\n\n const [internalCollapsed, setInternalCollapsed] = useState<boolean>(\n getInitialCollapsedState,\n );\n const [groupStates, setGroupStates] = useState<Record<string, boolean>>({});\n\n // Responsive sidebar\n const { isMobile } = useResponsiveSidebar({\n mobileBreakpoint: config.mobileBreakpoint,\n onMobileChange: (mobile) => {\n onMobileChange?.(mobile);\n // Auto-collapse on mobile if using collapse variant\n if (mobile && config.mobileVariant === \"collapse\" && !isControlled) {\n setInternalCollapsed(true);\n }\n },\n enabled: config.responsive,\n });\n\n // Resize functionality\n const {\n width: resizeWidth,\n isResizing,\n startResize,\n setWidth: setResizeWidth,\n } = useResize({\n initialWidth: getInitialWidth(),\n minWidth: config.minWidth,\n maxWidth: config.maxWidth,\n snapPoints: config.snapPoints,\n onWidthChange: (newWidth) => {\n onWidthChange?.(newWidth);\n // Persist width if enabled\n if (\n config.storageKey &&\n config.persistWidth &&\n typeof window !== \"undefined\"\n ) {\n localStorage.setItem(`${config.storageKey}-width`, String(newWidth));\n }\n },\n enabled: config.resizable && !isMobile,\n });\n\n // Focus management for mobile overlay\n useFocusManagement({\n isActive:\n isMobile && config.mobileVariant === \"overlay\" && !internalCollapsed,\n containerRef: sidebarRef,\n restoreFocus: true,\n });\n\n // Derived collapsed state\n const collapsed = isControlled ? controlledCollapsed : internalCollapsed;\n\n // Set collapsed handler\n const setCollapsed = useCallback(\n (value: boolean) => {\n if (!isControlled) {\n setInternalCollapsed(value);\n }\n onCollapseChange?.(value);\n },\n [isControlled, onCollapseChange],\n );\n\n // Toggle handler\n const toggle = useCallback(() => {\n setCollapsed(!collapsed);\n }, [collapsed, setCollapsed]);\n\n // Keyboard shortcut\n const shortcut = parseKeyboardShortcut(config.keyboardShortcut);\n useKeyboardShortcut({\n key: shortcut.key,\n ctrl: shortcut.ctrl,\n shift: shortcut.shift,\n alt: shortcut.alt,\n meta: shortcut.meta,\n onTrigger: toggle,\n enabled: config.enableKeyboardShortcut,\n });\n\n // Set width handler\n const setWidth = useCallback(\n (newWidth: number) => {\n setResizeWidth(newWidth);\n },\n [setResizeWidth],\n );\n\n // Group state handlers\n const toggleGroup = useCallback(\n (groupId: string) => {\n if (exclusiveGroups) {\n // Exclusive behavior: only one group open at a time (like ButtonGroup)\n // When clicking a group:\n // - If it's open (false = expanded), close it (all groups closed)\n // - If it's closed (true = collapsed or undefined), open it and close all others\n // - After closing, user can click any group (including the same one) to open it again\n setGroupStates((prev) => {\n const currentState = prev[groupId];\n const isCurrentlyOpen = currentState === false; // false means expanded (not collapsed)\n const newStates: Record<string, boolean> = {};\n\n // Get all group IDs (from current state and the one being toggled)\n const allGroupIds = new Set([...Object.keys(prev), groupId]);\n\n if (isCurrentlyOpen) {\n // Group is currently open, close it (and all others remain closed)\n allGroupIds.forEach((id) => {\n newStates[id] = true; // true = collapsed\n });\n } else {\n // Group is currently closed, open it and close all others\n allGroupIds.forEach((id) => {\n newStates[id] = id !== groupId; // true = collapsed, false = expanded\n });\n }\n\n return newStates;\n });\n } else {\n // Default behavior: toggle individual group state\n setGroupStates((prev) => ({\n ...prev,\n [groupId]: !prev[groupId],\n }));\n }\n },\n [exclusiveGroups],\n );\n\n const setGroupCollapsed = useCallback(\n (groupId: string, isCollapsed: boolean) => {\n setGroupStates((prev) => ({\n ...prev,\n [groupId]: isCollapsed,\n }));\n },\n [],\n );\n\n // Sync with controlled value\n useEffect(() => {\n if (isControlled && controlledCollapsed !== internalCollapsed) {\n setInternalCollapsed(controlledCollapsed);\n }\n }, [isControlled, controlledCollapsed, internalCollapsed]);\n\n // Persist collapsed state to storage\n useEffect(() => {\n if (\n config.storageKey &&\n config.persistState &&\n typeof window !== \"undefined\" &&\n !isControlled\n ) {\n localStorage.setItem(\n `${config.storageKey}-collapsed`,\n String(internalCollapsed),\n );\n }\n }, [config.storageKey, config.persistState, internalCollapsed, isControlled]);\n\n const value: SideNavbarStateContextValue = useMemo(\n () => ({\n collapsed,\n toggle,\n setCollapsed,\n currentWidth: resizeWidth,\n setWidth,\n isMobile,\n isResizing,\n startResize,\n groupStates,\n toggleGroup,\n setGroupCollapsed,\n sidebarRef,\n }),\n [\n collapsed,\n toggle,\n setCollapsed,\n resizeWidth,\n setWidth,\n isMobile,\n isResizing,\n startResize,\n groupStates,\n toggleGroup,\n setGroupCollapsed,\n ],\n );\n\n return (\n <SideNavbarStateContext.Provider value={value}>\n {children}\n </SideNavbarStateContext.Provider>\n );\n}\n\nexport default SideNavbarStateProvider;\n","\"use client\";\n\nimport { SideNavbarThemeProvider } from \"./SideNavbarThemeProvider\";\nimport { SideNavbarConfigProvider } from \"./SideNavbarConfigProvider\";\nimport { SideNavbarStateProvider } from \"./SideNavbarStateProvider\";\nimport type { SideNavbarProviderProps } from \"../types\";\n\n/**\n * Combined Provider for SideNavbar\n *\n * Convenience component that wraps all three context providers\n * (Theme, Config, State) with a single component.\n *\n * For most use cases, use this combined provider.\n * For advanced customization, use individual providers.\n *\n * @example\n * ```tsx\n * <SideNavbarProvider\n * variant=\"elevated\"\n * mode=\"full\"\n * resizable\n * responsive\n * defaultCollapsed\n * onCollapseChange={handleChange}\n * >\n * <SideNavbarRoot>...</SideNavbarRoot>\n * </SideNavbarProvider>\n * ```\n */\nexport function SideNavbarProvider({\n children,\n // Theme props\n variant,\n navigationWidth,\n contentWidth,\n animationDuration,\n animationEasing,\n // Config props\n mode,\n resizable,\n minWidth,\n maxWidth,\n snapPoints,\n responsive,\n mobileBreakpoint,\n mobileVariant,\n overlayBackdrop,\n persistState,\n persistWidth,\n storageKey,\n keyboardShortcut,\n enableKeyboardShortcut,\n // State props\n defaultCollapsed,\n collapsed,\n onCollapseChange,\n onWidthChange,\n onMobileChange,\n exclusiveGroups,\n}: SideNavbarProviderProps) {\n return (\n <SideNavbarThemeProvider\n variant={variant}\n navigationWidth={navigationWidth}\n contentWidth={contentWidth}\n animationDuration={animationDuration}\n animationEasing={animationEasing}\n >\n <SideNavbarConfigProvider\n mode={mode}\n resizable={resizable}\n minWidth={minWidth}\n maxWidth={maxWidth}\n snapPoints={snapPoints}\n responsive={responsive}\n mobileBreakpoint={mobileBreakpoint}\n mobileVariant={mobileVariant}\n overlayBackdrop={overlayBackdrop}\n persistState={persistState}\n persistWidth={persistWidth}\n storageKey={storageKey}\n keyboardShortcut={keyboardShortcut}\n enableKeyboardShortcut={enableKeyboardShortcut}\n >\n <SideNavbarStateProvider\n defaultCollapsed={defaultCollapsed}\n collapsed={collapsed}\n onCollapseChange={onCollapseChange}\n onWidthChange={onWidthChange}\n onMobileChange={onMobileChange}\n exclusiveGroups={exclusiveGroups}\n >\n {children}\n </SideNavbarStateProvider>\n </SideNavbarConfigProvider>\n </SideNavbarThemeProvider>\n );\n}\n\nexport default SideNavbarProvider;\n","\"use client\";\n\nimport { createContext, useContext } from \"react\";\nimport type { SidebarSlotContextValue } from \"../types\";\n\n/**\n * Sidebar Slot Context\n *\n * Provides slot management for dynamic sidebar content.\n * Allows registering and switching between different content slots.\n */\nexport const SidebarSlotContext = createContext<SidebarSlotContextValue | null>(\n null,\n);\n\n/**\n * Hook to access sidebar slot context\n * Returns null if used outside provider\n */\nexport function useSidebarSlot(): SidebarSlotContextValue | null {\n return useContext(SidebarSlotContext);\n}\n\n/**\n * Hook to access sidebar slot context (required)\n * Throws error if used outside provider\n */\nexport function useSidebarSlotRequired(): SidebarSlotContextValue {\n const context = useContext(SidebarSlotContext);\n if (!context) {\n throw new Error(\n \"useSidebarSlotRequired must be used within SidebarSlotProvider\",\n );\n }\n return context;\n}\n","\"use client\";\n\nimport React, {\n useState,\n useRef,\n useCallback,\n useMemo,\n type ReactNode,\n} from \"react\";\nimport { SidebarSlotContext } from \"../contexts/SidebarSlotContext\";\nimport type {\n SidebarSlotContextValue,\n SidebarSlotProviderProps,\n} from \"../types\";\n\n/**\n * Sidebar Slot Provider\n *\n * **Important: Slots are exclusive to the Sidebar component, not the Navbar.**\n *\n * Manages slot registration and active slot state for dynamic content switching\n * within the Sidebar. This provider should wrap the Sidebar content where slots\n * will be used.\n *\n * @example\n * ```tsx\n * <SideNavbar>\n * <SideNavbar.Navbar>\n * <SideNavbar.Navbar.Item icon={<Home />} label=\"Home\" />\n * </SideNavbar.Navbar>\n *\n * <SidebarSlotProvider defaultSlot=\"dashboard\">\n * <SideNavbar.Sidebar>\n * <SideNavbar.Sidebar.Content>\n * <SidebarSlot id=\"dashboard\">\n * <DashboardContent />\n * </SidebarSlot>\n * <SidebarSlot id=\"settings\">\n * <SettingsContent />\n * </SidebarSlot>\n * <SidebarSlotContent />\n * </SideNavbar.Sidebar.Content>\n * </SideNavbar.Sidebar>\n * </SidebarSlotProvider>\n * </SideNavbar>\n * ```\n */\nexport function SidebarSlotProvider({\n children,\n defaultSlot = null,\n}: SidebarSlotProviderProps) {\n const [activeSlot, setActiveSlot] = useState<string | null>(defaultSlot);\n const slotsRef = useRef(new Map<string, ReactNode>());\n\n const registerSlot = useCallback((id: string, content: ReactNode) => {\n slotsRef.current.set(id, content);\n }, []);\n\n const unregisterSlot = useCallback((id: string) => {\n slotsRef.current.delete(id);\n }, []);\n\n const contextValue: SidebarSlotContextValue = useMemo(\n () => ({\n activeSlot,\n setActiveSlot,\n slots: slotsRef.current,\n registerSlot,\n unregisterSlot,\n }),\n [activeSlot, registerSlot, unregisterSlot],\n );\n\n return (\n <SidebarSlotContext.Provider value={contextValue}>\n {children}\n </SidebarSlotContext.Provider>\n );\n}\n","\"use client\";\n\nimport { createContext, useContext } from \"react\";\nimport type { SideNavbarTogglePosition } from \"../types\";\n\nexport interface SideNavbarToggleContextValue {\n showMainToggle: boolean;\n mainTogglePosition: SideNavbarTogglePosition;\n}\n\nexport const SideNavbarToggleContext =\n createContext<SideNavbarToggleContextValue | null>(null);\n\nexport function useSideNavbarToggleContext(): SideNavbarToggleContextValue | null {\n return useContext(SideNavbarToggleContext);\n}\n\nexport function useSideNavbarToggleContextRequired(): SideNavbarToggleContextValue {\n const context = useContext(SideNavbarToggleContext);\n if (!context) {\n // Return defaults if context is not available (for backward compatibility)\n return {\n showMainToggle: true,\n mainTogglePosition: \"floating\",\n };\n }\n return context;\n}\n","\"use client\";\n\nimport { type HTMLAttributes } from \"react\";\nimport { GripVertical } from \"lucide-react\";\nimport { useSideNavbarStateRequired } from \"../contexts/SideNavbarStateContext\";\nimport { useSideNavbarConfigRequired } from \"../contexts/SideNavbarConfigContext\";\n\nexport type SideNavbarResizeHandleProps = HTMLAttributes<HTMLDivElement>;\n\n/**\n * SideNavbar Resize Handle Component\n *\n * Drag handle for resizing the sidebar width.\n * Uses context for state management - no props needed for resize configuration.\n *\n * @example\n * ```tsx\n * <SideNavbar resizable minWidth={200} maxWidth={600}>\n * <SideNavbar.ResizeHandle />\n * ...\n * </SideNavbar>\n * ```\n */\nexport default function SideNavbarResizeHandle({\n className = \"\",\n ...props\n}: SideNavbarResizeHandleProps) {\n const { currentWidth, setWidth, isResizing, startResize } =\n useSideNavbarStateRequired();\n const { resizable } = useSideNavbarConfigRequired();\n\n if (!resizable) {\n return null;\n }\n\n return (\n // micro-z: resize handle above sidebar border for grab affordance (see z-10 below)\n <div\n className={`\n group\n absolute\n top-0\n right-0\n w-1\n h-full\n cursor-col-resize\n hover:bg-indigo-500/50\n active:bg-indigo-600\n transition-colors\n duration-150\n z-10\n flex\n items-center\n justify-center\n ${isResizing ? \"bg-indigo-600\" : \"\"}\n ${className}\n `}\n onMouseDown={startResize}\n role=\"separator\"\n aria-orientation=\"vertical\"\n aria-label=\"Resize sidebar\"\n aria-valuenow={currentWidth}\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === \"ArrowLeft\" || e.key === \"ArrowRight\") {\n e.preventDefault();\n const delta = e.key === \"ArrowLeft\" ? -10 : 10;\n setWidth(currentWidth + delta);\n }\n }}\n {...props}\n >\n <div\n className={`\n w-0.5\n h-8\n bg-gray-400\n rounded-full\n opacity-0\n group-hover:opacity-100\n transition-opacity\n ${isResizing ? \"opacity-100\" : \"\"}\n `}\n />\n <GripVertical\n className={`\n h-4\n w-4\n text-gray-400\n opacity-0\n group-hover:opacity-100\n transition-opacity\n absolute\n ${isResizing ? \"opacity-100\" : \"\"}\n `}\n aria-hidden=\"true\"\n />\n </div>\n );\n}\n","\"use client\";\n\nimport { type HTMLAttributes } from \"react\";\nimport { useSideNavbarStateRequired } from \"../contexts/SideNavbarStateContext\";\nimport { useSideNavbarThemeRequired } from \"../contexts/SideNavbarThemeContext\";\nimport { useSideNavbarConfigRequired } from \"../contexts/SideNavbarConfigContext\";\nimport { getZIndexClass } from \"../../../tokens/z-index\";\n\nexport interface SideNavbarBackdropProps\n extends HTMLAttributes<HTMLDivElement> {\n /**\n * Override visibility (uses context by default)\n */\n visible?: boolean;\n\n /**\n * Click handler override\n */\n onBackdropClick?: () => void;\n}\n\n/**\n * SideNavbar Backdrop Component\n *\n * Semi-transparent overlay for mobile overlay mode.\n * Automatically manages visibility based on sidebar state.\n *\n * @example\n * ```tsx\n * // Usually rendered automatically by SideNavbarRoot\n * <SideNavbar.Backdrop />\n *\n * // Or with custom click handler\n * <SideNavbar.Backdrop onBackdropClick={() => console.log('clicked')} />\n * ```\n */\nexport default function SideNavbarBackdrop({\n visible: visibleOverride,\n onBackdropClick,\n className = \"\",\n style,\n ...props\n}: SideNavbarBackdropProps) {\n const { collapsed, setCollapsed, isMobile } = useSideNavbarStateRequired();\n const { animationDuration } = useSideNavbarThemeRequired();\n const { mobileVariant, overlayBackdrop } = useSideNavbarConfigRequired();\n\n // Determine visibility\n const isOverlayMode = isMobile && mobileVariant === \"overlay\";\n const shouldShow =\n visibleOverride ?? (isOverlayMode && overlayBackdrop && !collapsed);\n\n const handleClick = () => {\n if (onBackdropClick) {\n onBackdropClick();\n } else {\n setCollapsed(true);\n }\n };\n\n if (!shouldShow) {\n return null;\n }\n\n return (\n <div\n className={`\n fixed inset-0\n bg-black/50\n ${getZIndexClass(\"modal-backdrop\")}\n ${className}\n `}\n style={{\n animation: `fadeIn ${animationDuration}ms ease-in-out`,\n ...style,\n }}\n onClick={handleClick}\n aria-hidden=\"true\"\n data-testid=\"side-navbar-backdrop\"\n {...props}\n />\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { PanelLeftClose, PanelLeftOpen } from \"lucide-react\";\nimport { useSideNavbarStateRequired } from \"../contexts/SideNavbarStateContext\";\nimport { useSideNavbarThemeRequired } from \"../contexts/SideNavbarThemeContext\";\nimport { useSideNavbarConfigRequired } from \"../contexts/SideNavbarConfigContext\";\nimport { getZIndexClass, Z_INDEX_TOKENS } from \"../../../tokens/z-index\";\nimport Tooltip from \"../../../primitives/Tooltip/Tooltip\";\nimport type {\n SideNavbarToggleProps,\n SideNavbarTogglePosition,\n SideNavbarToggleVariant,\n} from \"../types\";\n\nconst sizeClasses = {\n xs: \"w-5 h-5\",\n sm: \"w-6 h-6\",\n md: \"w-8 h-8\",\n lg: \"w-10 h-10\",\n};\n\nconst iconSizeClasses = {\n xs: \"w-3 h-3\",\n sm: \"w-4 h-4\",\n md: \"w-5 h-5\",\n lg: \"w-6 h-6\",\n};\n\nconst positionClasses: Record<SideNavbarTogglePosition, string> = {\n floating: `absolute ${getZIndexClass(\"fixed\")}`, // Right edge of navbar, vertically centered - position set via style\n // micro-z: toggle above adjacent siblings in absolute corner position\n top: \"absolute top-2 right-2 z-10\",\n // micro-z: toggle above adjacent siblings in absolute corner position\n bottom: \"absolute bottom-2 right-2 z-10\",\n // micro-z: toggle above sibling content in relative inside position\n inside: \"relative z-10\",\n // micro-z: toggle above sibling content in relative inside position\n \"navigation-top\": \"relative mt-2 mx-auto z-10\",\n // micro-z: toggle above sibling content in relative inside position\n \"navigation-bottom\": \"relative mt-auto mb-2 mx-auto z-10\",\n};\n\nconst variantClasses: Record<SideNavbarToggleVariant, string> = {\n default:\n \"bg-[var(--color-card)] border border-[var(--color-border)] shadow-sm hover:bg-[var(--color-accent)] hover:shadow\",\n ghost: \"bg-transparent hover:bg-[var(--color-accent)] border-0\",\n outline:\n \"bg-transparent border border-[var(--color-border)] hover:bg-[var(--color-accent)]\",\n};\n\nconst tooltipPositionMap: Record<\n SideNavbarTogglePosition,\n \"top\" | \"right\" | \"bottom\" | \"left\"\n> = {\n floating: \"right\",\n top: \"bottom\",\n bottom: \"top\",\n inside: \"right\",\n \"navigation-top\": \"right\",\n \"navigation-bottom\": \"right\",\n};\n\n/**\n * SideNavbarToggle Component\n *\n * A flexible toggle button for collapsing/expanding the SideNavbar.\n * Supports custom icons, multiple positions, and variants.\n *\n * @example\n * ```tsx\n * // Default usage (with PanelLeft icons)\n * <SideNavbar.Toggle />\n *\n * // Custom icons\n * <SideNavbar.Toggle\n * icon={(collapsed) => collapsed ? <ChevronRight /> : <ChevronLeft />}\n * />\n *\n * // Or separate icons\n * <SideNavbar.Toggle\n * expandIcon={<ChevronRight />}\n * collapseIcon={<ChevronLeft />}\n * />\n *\n * // Inside navigation\n * <SideNavbar.Navbar>\n * <NavItems />\n * <SideNavbar.Toggle position=\"navigation-bottom\" variant=\"ghost\" />\n * </SideNavbar.Navbar>\n * ```\n */\nexport default function SideNavbarToggle({\n position = \"floating\",\n offset,\n icon,\n expandIcon,\n collapseIcon,\n size = \"sm\",\n variant = \"default\",\n showTooltip = true,\n tooltipPosition: tooltipPositionOverride,\n keyboardShortcut: keyboardShortcutOverride,\n enableKeyboardShortcut: enableKeyboardShortcutOverride,\n className = \"\",\n style,\n \"aria-label\": ariaLabel,\n ...props\n}: SideNavbarToggleProps) {\n const { collapsed, toggle } = useSideNavbarStateRequired();\n const {\n animationDuration,\n animationEasing,\n navigationWidth: _navigationWidth,\n contentWidth: _contentWidth,\n minWidth: _minWidth,\n } = useSideNavbarThemeRequired();\n const config = useSideNavbarConfigRequired();\n\n // Use config values as defaults, allow prop overrides\n const keyboardShortcut = keyboardShortcutOverride ?? config.keyboardShortcut;\n const enableKeyboardShortcut =\n enableKeyboardShortcutOverride ?? config.enableKeyboardShortcut;\n\n // Render icon logic\n const renderIcon = () => {\n // Custom render function\n if (typeof icon === \"function\") {\n return icon(collapsed);\n }\n\n // Static custom icon\n if (icon) {\n return icon;\n }\n\n // Separate expand/collapse icons\n if (collapsed && expandIcon) {\n return expandIcon;\n }\n if (!collapsed && collapseIcon) {\n return collapseIcon;\n }\n\n // Default Lucide icons - sem animação de transform\n const Icon = collapsed ? PanelLeftOpen : PanelLeftClose;\n return (\n <Icon\n className={iconSizeClasses[size]}\n style={{\n transition: \"none\",\n transform: \"none\",\n willChange: \"auto\",\n }}\n />\n );\n };\n\n const defaultAriaLabel = collapsed ? \"Expand sidebar\" : \"Collapse sidebar\";\n const tooltipPosition =\n tooltipPositionOverride ?? tooltipPositionMap[position];\n\n const tooltipContent = showTooltip\n ? `${collapsed ? \"Expand\" : \"Collapse\"} sidebar${enableKeyboardShortcut ? ` (${keyboardShortcut})` : \"\"}`\n : undefined;\n\n // Calculate offset styles\n const offsetStyle = offset\n ? {\n transform: `translate(${offset.x ?? 0}px, ${offset.y ?? 0}px)`,\n }\n : {};\n\n // Determine if this is an inline position (inside navigation)\n const _isInlinePosition =\n position === \"inside\" ||\n position === \"navigation-top\" ||\n position === \"navigation-bottom\";\n\n // Edge-following toggle positioning (right edge of sidebar)\n // The toggle is now positioned in SideNavbarRoot (at <aside> level), not in <nav>\n // This means it's positioned relative to the entire sidebar, not just the navbar\n // When collapsed: sidebar width = nav width, toggle at right edge\n // When expanded: sidebar width = nav + content, toggle at right edge of full sidebar\n // Position: right edge of sidebar, aligned with first navbar item (home icon)\n // The toggle will automatically follow the sidebar's width when resized\n const edgeFollowingStyle =\n position === \"floating\"\n ? {\n // Toggle sempre na borda direita da sidebar completa (<aside>)\n // O <aside> é o container pai, então right: -12px sempre posiciona na borda direita da sidebar\n // Isso faz o toggle acompanhar o resize da sidebar automaticamente\n right: \"-12px\",\n // Posicionar na mesma altura do primeiro ícone (home)\n // Usando 1rem (16px) para melhor alinhamento com o primeiro item\n // Considerando p-2 (8px) + gap-2 (8px) + metade do primeiro item = ~16px\n top: \"1rem\",\n transform: \"translateY(-50%)\",\n // Transição suave para acompanhar o resize da sidebar\n transition: `right ${animationDuration}ms ${animationEasing}`,\n ...offsetStyle,\n }\n : offsetStyle;\n\n const button = (\n <button\n type=\"button\"\n onClick={toggle}\n className={`\n ${sizeClasses[size]}\n ${variantClasses[variant]}\n rounded-full\n flex items-center justify-center\n text-[var(--color-neutral-600)] hover:text-[var(--color-neutral-800)]\n focus:outline-none focus:ring-2 focus:ring-[var(--color-primary-500)] focus:ring-offset-1\n ${position === \"floating\" ? \"\" : positionClasses[position]}\n ${className}\n `}\n style={{\n ...(position === \"floating\"\n ? {\n position: \"absolute\", // Absolute within the floating wrapper\n // The custom wrapper is at sidebar's content edge (right: 0 = 319px, sidebar has 1px border)\n // The Tooltip wrapper (div.static.inline-block) is inside the custom wrapper and doesn't interfere\n // Position button so its RIGHT edge is 12px outside sidebar's border edge\n // Sidebar border edge: 320px, desired right edge: 320 - 12 = 308px\n // Button width: 24px, so left edge should be: 308 - 24 = 284px\n // Wrapper is at content edge (319px), so button right should be: 319 - (320 - 308) = 307px\n // But we want right edge at 308px, so: right = -12px - 1px (border) = -13px\n // Actually, if wrapper is at 319px and we want button right at 308px: 319 - 308 = 11px offset\n // So: right = -11px (but this positions right edge at 319 - 11 = 308px ✓)\n right: \"-11px\", // Position button's right edge 11px outside wrapper (319px) = 308px (12px outside sidebar border)\n left: \"auto\", // Ensure left doesn't interfere\n }\n : {}),\n ...(position !== \"floating\" ? edgeFollowingStyle : {}),\n ...(position === \"floating\"\n ? { zIndex: Z_INDEX_TOKENS.fixed.value }\n : {}), // Ensure z-index is applied inline for floating position\n ...style,\n }}\n aria-label={ariaLabel || defaultAriaLabel}\n aria-expanded={!collapsed}\n aria-controls=\"side-navbar-sidebar\"\n data-position={position}\n {...props}\n >\n {renderIcon()}\n </button>\n );\n\n // For floating position, wrap in a container positioned relative to the sidebar (<aside>)\n // This ensures the toggle is always at the right edge of the entire sidebar, not just the nav\n // The toggle will automatically follow the sidebar's width when resized\n // The toggle should be positioned 12px outside the sidebar edge (half button width for visual balance)\n if (position === \"floating\") {\n // Create a wrapper that positions the toggle at the sidebar's right edge\n // The wrapper is positioned at sidebar's right edge (<aside>), and the button is positioned 12px outside\n const floatingButton =\n showTooltip && tooltipContent ? (\n <Tooltip\n content={tooltipContent}\n position={tooltipPosition}\n preservePositioning={true}\n >\n {button}\n </Tooltip>\n ) : (\n button\n );\n\n return (\n <div\n style={{\n position: \"absolute\",\n right: \"0\", // Align to sidebar's content edge (319px with 1px border)\n // Note: sidebar has box-sizing: border-box, so right: 0 positions at content edge\n // We compensate by adjusting the button's right value\n top: \"1rem\",\n transform: \"translateY(-50%)\",\n zIndex: Z_INDEX_TOKENS.fixed.value,\n }}\n >\n {floatingButton}\n </div>\n );\n }\n\n if (showTooltip && tooltipContent) {\n return (\n <Tooltip content={tooltipContent} position={tooltipPosition}>\n {button}\n </Tooltip>\n );\n }\n\n return button;\n}\n","\"use client\";\n\nimport React, { useState, useEffect } from \"react\";\nimport { useSideNavbarStateRequired } from \"../contexts/SideNavbarStateContext\";\nimport { useSideNavbarThemeRequired } from \"../contexts/SideNavbarThemeContext\";\nimport { useSideNavbarConfigRequired } from \"../contexts/SideNavbarConfigContext\";\nimport { useSideNavbarToggleContextRequired } from \"../contexts/SideNavbarToggleContext\";\nimport { cn } from \"../../../utils\";\nimport { getZIndexClass } from \"../../../tokens/z-index\";\nimport SideNavbarResizeHandle from \"./SideNavbarResizeHandle\";\nimport SideNavbarBackdrop from \"./SideNavbarBackdrop\";\nimport SideNavbarToggle from \"./SideNavbarToggle\";\nimport type { SideNavbarRootProps } from \"../types\";\n\nconst variantClasses = {\n default: \"\",\n compact: \"text-sm\",\n elevated: \"shadow-lg\",\n minimal: \"border-0\",\n bordered: \"border-2\",\n};\n\n/**\n * SideNavbar Root Component\n *\n * The inner container component that renders the sidebar structure.\n * Uses all three contexts (Theme, Config, State) for rendering.\n *\n * This component is typically used internally by SideNavbar,\n * but can be used directly with individual providers for advanced customization.\n *\n * @example\n * ```tsx\n * // Usually wrapped by SideNavbar\n * <SideNavbar>\n * <SideNavbar.Navbar>...</SideNavbar.Navbar>\n * <SideNavbar.Sidebar>\n * <SideNavbar.Sidebar.Content>...</SideNavbar.Sidebar.Content>\n * </SideNavbar.Sidebar>\n * </SideNavbar>\n *\n * // Or with individual providers\n * <SideNavbar.ThemeProvider variant=\"elevated\">\n * <SideNavbar.ConfigProvider mode=\"full\" resizable>\n * <SideNavbar.StateProvider>\n * <SideNavbarRoot>...</SideNavbarRoot>\n * </SideNavbar.StateProvider>\n * </SideNavbar.ConfigProvider>\n * </SideNavbar.ThemeProvider>\n * ```\n */\nexport default function SideNavbarRoot({\n children,\n className = \"\",\n style,\n \"aria-label\": ariaLabel,\n ...props\n}: SideNavbarRootProps) {\n // Get context values\n const state = useSideNavbarStateRequired();\n const theme = useSideNavbarThemeRequired();\n const config = useSideNavbarConfigRequired();\n const toggleContext = useSideNavbarToggleContextRequired();\n\n const {\n collapsed,\n setCollapsed: _setCollapsed,\n currentWidth,\n isResizing,\n sidebarRef,\n isMobile,\n } = state;\n\n const {\n variant,\n navigationWidth,\n contentWidth,\n animationDuration,\n animationEasing,\n } = theme;\n\n const { mode, resizable, mobileVariant, overlayBackdrop } = config;\n\n // Parse widths\n const navWidthValue =\n typeof navigationWidth === \"number\"\n ? `${navigationWidth}px`\n : navigationWidth;\n\n const contentWidthValue =\n typeof contentWidth === \"number\" ? `${contentWidth}px` : contentWidth;\n\n // Calculate displayed width based on mode\n const calculateWidth = () => {\n if (mode === \"navigation\") {\n // Navigation-only mode: always show just navigation\n return navWidthValue;\n }\n\n if (collapsed) {\n return navWidthValue;\n }\n\n // Use resize width if resizable, otherwise configured width\n return resizable ? `${currentWidth}px` : contentWidthValue;\n };\n\n const displayedWidth = calculateWidth();\n\n // Mobile overlay mode\n // Usar estado para evitar hydration mismatch - só renderizar backdrop após mount\n const [isMounted, setIsMounted] = useState(false);\n\n useEffect(() => {\n setIsMounted(true);\n }, []);\n\n const isMobileOverlay = isMobile && mobileVariant === \"overlay\";\n\n // Durante SSR e antes do mount, sempre usar 'relative' para evitar hydration mismatch\n // Após mount, usar a classe correta baseada em isMobileOverlay\n // IMPORTANTE: Em desktop, sempre usar 'relative' para ficar no mesmo plano do conteúdo\n // Apenas em mobile overlay usar 'fixed' para sobrepor o conteúdo\n const shouldUseFixed = isMounted && isMobileOverlay;\n const positionClass = shouldUseFixed\n ? `fixed left-0 top-0 ${getZIndexClass(\"fixed\")}`\n : \"relative\";\n\n return (\n <>\n {/* Mobile overlay backdrop - só renderizar após mount para evitar hydration mismatch */}\n {isMounted && isMobileOverlay && overlayBackdrop && !collapsed && (\n <SideNavbarBackdrop />\n )}\n\n <aside\n ref={sidebarRef as React.RefObject<HTMLElement>}\n className={cn(\n positionClass,\n \"flex\",\n \"h-full\",\n \"overflow-visible\",\n variantClasses[variant],\n shouldUseFixed && collapsed ? \"-translate-x-full\" : \"translate-x-0\",\n className,\n )}\n style={\n {\n // Em desktop: sempre 'relative' para ficar no mesmo plano do conteúdo\n // Em mobile overlay: 'fixed' para sobrepor o conteúdo\n position: shouldUseFixed ? \"fixed\" : \"relative\",\n backgroundColor: \"var(--color-muted)\",\n borderRight: \"1px solid var(--color-border)\",\n width: displayedWidth,\n minWidth: displayedWidth,\n transitionProperty: isResizing\n ? \"none\"\n : \"width, min-width, transform\",\n transitionDuration: `${animationDuration}ms`,\n transitionTimingFunction: animationEasing,\n ...style,\n } as React.CSSProperties\n }\n role=\"complementary\"\n aria-label={ariaLabel || \"Sidebar navigation\"}\n aria-expanded={mode !== \"navigation\" ? !collapsed : undefined}\n data-mode={mode}\n data-collapsed={collapsed}\n {...props}\n >\n {/* Resize handle */}\n {resizable && mode !== \"navigation\" && !collapsed && (\n <SideNavbarResizeHandle />\n )}\n\n {/* Main toggle button at right edge of sidebar - positioned to follow resize */}\n {toggleContext.showMainToggle && mode !== \"navigation\" && (\n <SideNavbarToggle position={toggleContext.mainTogglePosition} />\n )}\n\n {/* Content wrapper */}\n <div className=\"flex h-full w-full overflow-visible\">{children}</div>\n </aside>\n </>\n );\n}\n","\"use client\";\n\n/* eslint-disable react-refresh/only-export-components */\nimport { createContext, useContext } from \"react\";\nimport type { NavbarContextValue } from \"../types\";\n\n/**\n * Context for the Navbar subcomponent\n *\n * Provides navbar-specific state that inherits from the root SideNavbar context.\n * Must be used within a Navbar component.\n */\nexport const NavbarContext = createContext<NavbarContextValue | null>(null);\n\n/**\n * Hook to access Navbar context (returns null if outside Navbar)\n */\nexport function useNavbar(): NavbarContextValue | null {\n return useContext(NavbarContext);\n}\n\n/**\n * Hook to access Navbar context (throws if outside Navbar)\n * @throws Error if used outside of Navbar component\n */\nexport function useNavbarRequired(): NavbarContextValue {\n const context = useContext(NavbarContext);\n if (!context) {\n throw new Error(\n \"useNavbarRequired must be used within a SideNavbar.Navbar component\",\n );\n }\n return context;\n}\n\nexport default NavbarContext;\n","\"use client\";\n\nimport React from \"react\";\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport { useNavbarRequired } from \"../../contexts/NavbarContext\";\nimport Tooltip from \"../../../../primitives/Tooltip/Tooltip\";\nimport type { NavbarToggleProps } from \"../../types\";\n\n/**\n * Toggle button for the Navbar subcomponent\n *\n * Uses the NavbarContext to control the sidebar collapse state.\n * Can be customized with different icons, sizes, and variants.\n *\n * @example\n * ```tsx\n * <SideNavbar.Navbar.Toggle\n * variant=\"ghost\"\n * icon={(collapsed) => collapsed ? <ChevronRight /> : <ChevronLeft />}\n * />\n * ```\n */\nexport default function NavbarToggle({\n icon,\n size = \"sm\",\n variant = \"ghost\",\n className = \"\",\n ...props\n}: NavbarToggleProps) {\n const { collapsed, toggle } = useNavbarRequired();\n\n // Render the icon\n const renderIcon = () => {\n if (icon) {\n return typeof icon === \"function\" ? icon(collapsed) : icon;\n }\n const Icon = collapsed ? ChevronRight : ChevronLeft;\n return (\n <Icon\n className={iconSizeClasses[size]}\n style={{\n transition: \"none\",\n transform: \"none\",\n willChange: \"auto\",\n }}\n />\n );\n };\n\n const sizeClasses = {\n xs: \"w-6 h-6\",\n sm: \"w-8 h-8\",\n md: \"w-10 h-10\",\n };\n\n const iconSizeClasses = {\n xs: \"w-3 h-3\",\n sm: \"w-4 h-4\",\n md: \"w-5 h-5\",\n };\n\n const variantClasses = {\n default: \"bg-white border border-gray-200 shadow-sm hover:bg-gray-50\",\n ghost: \"hover:bg-gray-100\",\n outline: \"border border-gray-300 hover:bg-gray-50\",\n };\n\n return (\n <Tooltip\n content={collapsed ? \"Expand sidebar\" : \"Collapse sidebar\"}\n position=\"right\"\n >\n <button\n type=\"button\"\n onClick={toggle}\n className={`\n flex\n items-center\n justify-center\n rounded-md\n text-gray-600\n hover:text-gray-900\n focus:outline-none\n focus:ring-2\n focus:ring-indigo-500\n focus:ring-offset-1\n ${sizeClasses[size]}\n ${variantClasses[variant]}\n [&:hover]:!transform-none\n ${className}\n `}\n style={{\n // Remover transições que possam causar movimento\n willChange: \"auto\",\n transform: \"none\",\n transition: \"none\",\n }}\n aria-label={collapsed ? \"Expand sidebar\" : \"Collapse sidebar\"}\n aria-expanded={!collapsed}\n {...props}\n >\n {renderIcon()}\n </button>\n </Tooltip>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { useNavbarRequired } from \"../../contexts/NavbarContext\";\nimport { cn } from \"../../../../utils\";\nimport { getSpacingClass } from \"../../../../tokens/spacing\";\nimport { getZIndexClass } from \"../../../../tokens/z-index\";\nimport Tooltip from \"../../../../primitives/Tooltip/Tooltip\";\nimport type { NavbarItemProps, NavbarLabelMode } from \"../../types\";\n\n/**\n * Size configuration for navbar items\n */\nconst SIZE_CLASSES = {\n sm: {\n container: \"w-8 h-8\",\n icon: \"w-4 h-4\",\n badge: \"min-w-3.5 h-3.5 text-2xs\",\n },\n md: {\n container: \"w-10 h-10\",\n icon: \"w-5 h-5\",\n badge: \"min-w-5 h-5 text-xs\",\n },\n lg: {\n container: \"w-12 h-12\",\n icon: \"w-6 h-6\",\n badge: \"min-w-5 h-5 text-xs\",\n },\n} as const;\n\n/**\n * Badge variant colors\n */\nconst BADGE_VARIANTS = {\n default: \"bg-red-500\",\n success: \"bg-green-500\",\n warning: \"bg-amber-500\",\n danger: \"bg-red-600\",\n} as const;\n\n/**\n * Navigation item for the Navbar subcomponent\n *\n * Displays an icon button with optional tooltip, badge, and active state.\n * Supports multiple sizes, variants, and can render as a link when href is provided.\n *\n * @example\n * ```tsx\n * // Basic button\n * <SideNavbar.Navbar.Item\n * icon={<Home />}\n * label=\"Home\"\n * onClick={() => navigate('/')}\n * />\n *\n * // As a link\n * <SideNavbar.Navbar.Item\n * icon={<Docs />}\n * label=\"Documentation\"\n * href=\"/docs\"\n * />\n *\n * // With badge\n * <SideNavbar.Navbar.Item\n * icon={<Bell />}\n * label=\"Notifications\"\n * badge={5}\n * badgeVariant=\"danger\"\n * />\n * ```\n */\nconst LABEL_STYLES: Record<NavbarLabelMode, string> = {\n tooltip: \"\", // Uses existing tooltip behavior\n inline: `flex-row ${getSpacingClass(\"sm\", \"gap\")} w-full ${getSpacingClass(\"md\", \"px\")}`,\n below: `flex-col ${getSpacingClass(\"1.5\", \"gap\")}`,\n};\n\nexport default function NavbarItem({\n id,\n icon,\n label,\n labelMode,\n showLabel = true,\n active = false,\n showTooltip = true,\n badge,\n badgeVariant = \"default\",\n variant = \"default\",\n size = \"md\",\n href,\n target,\n onClick,\n disabled = false,\n className = \"\",\n ...props\n}: NavbarItemProps) {\n const {\n activeItem,\n setActiveItem,\n labelMode: contextLabelMode,\n } = useNavbarRequired();\n\n // Use prop labelMode or fallback to context labelMode or 'tooltip'\n const effectiveLabelMode = labelMode ?? contextLabelMode ?? \"tooltip\";\n\n const isActive = active || (id && activeItem === id);\n const sizeConfig = SIZE_CLASSES[size];\n\n const handleClick = (e: React.MouseEvent) => {\n if (disabled) {\n e.preventDefault();\n return;\n }\n if (id) {\n setActiveItem(id);\n }\n onClick?.();\n };\n\n // Label element (for inline and below modes)\n const labelElement = effectiveLabelMode !== \"tooltip\" &&\n showLabel &&\n label && (\n <span\n className={cn(\n \"text-xs\",\n \"flex-shrink-0\", // Prevenir que label encolha\n // micro-z: redundant with inline zIndex:10 below — see BACKLOG\n \"relative z-10\",\n effectiveLabelMode === \"below\" && \"text-center\",\n effectiveLabelMode === \"inline\" && \"truncate\",\n )}\n style={{\n // Garantir que label não seja afetada por transformações\n willChange: \"auto\",\n transform: \"none\",\n // micro-z: label above icon within navbar item (wins CSS\n // specificity over the className z-10 above)\n zIndex: 10,\n }}\n >\n {label}\n </span>\n );\n\n // Base classes for the item\n // Removido transition-colors e duration-150 para eliminar animações\n // Adicionado box-border para estabilidade dimensional\n const baseClasses = cn(\n \"relative\",\n \"flex\",\n \"items-center\",\n effectiveLabelMode === \"inline\" ? \"justify-start\" : \"justify-center\",\n effectiveLabelMode === \"below\" && \"flex-col\",\n \"rounded-lg\",\n \"box-border\", // Garantir box-sizing consistente\n \"focus:outline-none\",\n \"focus:ring-2\",\n \"focus:ring-[var(--color-primary-500)]\",\n \"focus:ring-offset-1\",\n \"w-full\", // Ensure full width for vertical layout\n \"flex-shrink-0\", // Prevent items from shrinking\n \"min-w-0\", // Prevent flex items from overflowing\n // Remover todas as transições que possam causar movimento\n \"[&>*]:!transition-none\",\n \"[&>*]:!transform-none\",\n effectiveLabelMode === \"tooltip\"\n ? sizeConfig.container\n : cn(getSpacingClass(\"sm\", \"px\"), getSpacingClass(\"1.5\", \"py\")),\n effectiveLabelMode !== \"tooltip\" && LABEL_STYLES[effectiveLabelMode],\n disabled ? \"opacity-50 cursor-not-allowed\" : \"cursor-pointer\",\n className,\n );\n\n // Variant-specific classes usando variáveis CSS via Tailwind arbitrary values\n // Estados hover/active sem transições para evitar movimento\n const variantClasses = {\n default: isActive\n ? \"bg-[var(--color-primary-100)] text-[var(--color-primary-600)]\"\n : disabled\n ? \"text-[var(--color-neutral-400)]\"\n : \"text-[var(--color-neutral-600)] hover:bg-[var(--color-neutral-100)] hover:text-[var(--color-neutral-900)] [&:hover]:!transform-none\",\n ghost: isActive\n ? \"text-[var(--color-primary-600)]\"\n : disabled\n ? \"text-[var(--color-neutral-400)]\"\n : \"text-[var(--color-neutral-600)] hover:text-[var(--color-neutral-900)] [&:hover]:!transform-none\",\n subtle: isActive\n ? \"bg-[var(--color-neutral-100)] text-[var(--color-neutral-900)]\"\n : disabled\n ? \"text-[var(--color-neutral-400)]\"\n : \"text-[var(--color-neutral-500)] hover:bg-[var(--color-neutral-50)] hover:text-[var(--color-neutral-700)] [&:hover]:!transform-none\",\n };\n\n const content = (\n <>\n {/* Wrapper do ícone - sem animações, com estabilidade dimensional */}\n <span\n className={cn(\n \"flex-shrink-0\",\n sizeConfig.icon,\n \"[&>svg]:transition-none\",\n \"[&>svg]:!transform-none\",\n \"[&>svg]:!will-change-auto\",\n \"box-border\",\n \"flex items-center justify-center\",\n // Garantir que ícone não sobreponha label - z-index menor que label\n `relative ${getZIndexClass(\"base\")}`,\n )}\n style={{\n // Garantir dimensões mínimas fixas para evitar \"pular\"\n minWidth:\n sizeConfig.icon === \"w-4 h-4\"\n ? \"1rem\"\n : sizeConfig.icon === \"w-5 h-5\"\n ? \"1.25rem\"\n : \"1.5rem\",\n minHeight:\n sizeConfig.icon === \"w-4 h-4\"\n ? \"1rem\"\n : sizeConfig.icon === \"w-5 h-5\"\n ? \"1.25rem\"\n : \"1.5rem\",\n // Forçar sem animações ou transformações\n willChange: \"auto\",\n transform: \"none\",\n transition: \"none\",\n // micro-z: conditional stacking per label mode — base layer when\n // label visible inline; 'auto' when in tooltip mode to skip\n // stacking context creation (tooltip portals to body).\n zIndex: effectiveLabelMode !== \"tooltip\" ? 0 : \"auto\",\n }}\n >\n {icon}\n </span>\n\n {/* Label (for inline and below modes) - posicionada após o ícone */}\n {labelElement}\n\n {/* Badge */}\n {badge !== undefined && badge !== null && (\n <span\n className={cn(\n \"absolute\",\n \"-top-1\",\n \"-right-1\",\n \"flex\",\n \"items-center\",\n \"justify-center\",\n \"px-1\",\n \"font-medium\",\n \"text-white\",\n \"rounded-full\",\n sizeConfig.badge,\n BADGE_VARIANTS[badgeVariant],\n )}\n >\n {badge}\n </span>\n )}\n </>\n );\n\n // Render as link if href is provided\n // Adicionar style inline para garantir que não há transformações em hover\n const elementStyle = {\n willChange: \"auto\",\n transform: \"none\",\n transition: \"none\",\n };\n\n const element = href ? (\n <a\n href={href}\n target={target}\n rel={target === \"_blank\" ? \"noopener noreferrer\" : undefined}\n onClick={handleClick}\n className={cn(baseClasses, variantClasses[variant])}\n style={elementStyle}\n aria-label={label}\n aria-current={isActive ? \"page\" : undefined}\n aria-disabled={disabled}\n >\n {content}\n </a>\n ) : (\n <button\n type=\"button\"\n onClick={handleClick}\n disabled={disabled}\n className={cn(baseClasses, variantClasses[variant])}\n style={elementStyle}\n aria-label={label}\n aria-current={isActive ? \"page\" : undefined}\n {...props}\n >\n {content}\n </button>\n );\n\n // Wrap with tooltip only if mode is 'tooltip'\n if (effectiveLabelMode === \"tooltip\" && showTooltip && label && !disabled) {\n return (\n <Tooltip content={label} position=\"right\">\n {element}\n </Tooltip>\n );\n }\n\n return element;\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { cn } from \"../../../../utils\";\nimport type { NavbarSeparatorProps } from \"../../types\";\n\n/**\n * Separator for the Navbar subcomponent\n *\n * Creates visual separation between groups of navigation items.\n *\n * @example\n * ```tsx\n * <SideNavbar.Navbar>\n * <SideNavbar.Navbar.Item icon={<Home />} label=\"Home\" />\n * <SideNavbar.Navbar.Separator />\n * <SideNavbar.Navbar.Item icon={<Settings />} label=\"Settings\" />\n * </SideNavbar.Navbar>\n * ```\n */\nexport default function NavbarSeparator({\n orientation = \"horizontal\",\n className = \"\",\n ...props\n}: NavbarSeparatorProps) {\n if (orientation === \"vertical\") {\n return (\n <div\n className={cn(\n \"w-px\",\n \"h-6\",\n \"bg-[var(--color-border)]\",\n \"mx-auto\",\n className,\n )}\n role=\"separator\"\n aria-orientation=\"vertical\"\n {...props}\n />\n );\n }\n\n return (\n <div\n className={cn(\n \"w-full\",\n \"h-px\",\n \"bg-[var(--color-border)]\",\n \"my-2\", // my-2 (8px) para consistência com gap-2 usado em outros lugares\n \"flex-shrink-0\", // Prevenir que separator encolha\n className,\n )}\n role=\"separator\"\n aria-orientation=\"horizontal\"\n style={{\n // Garantir que separator não seja afetado por transformações\n willChange: \"auto\",\n transform: \"none\",\n }}\n {...props}\n />\n );\n}\n","\"use client\";\n\nimport React, { useState } from \"react\";\nimport { ChevronDown, ChevronRight } from \"lucide-react\";\nimport { cn } from \"../../../../utils\";\nimport { getSpacingClass } from \"../../../../tokens/spacing\";\nimport type { NavbarGroupProps } from \"../../types\";\n\n/**\n * NavbarGroup Component\n *\n * Groups navbar items with optional label and collapsible behavior.\n *\n * @example\n * ```tsx\n * <SideNavbar.Navbar>\n * <SideNavbar.Navbar.Group label=\"Main\" collapsible>\n * <SideNavbar.Navbar.Item icon={<Home />} label=\"Home\" />\n * <SideNavbar.Navbar.Item icon={<Settings />} label=\"Settings\" />\n * </SideNavbar.Navbar.Group>\n * </SideNavbar.Navbar>\n * ```\n */\nexport function NavbarGroup({\n id,\n label,\n collapsible = false,\n defaultCollapsed = false,\n children,\n className,\n ...props\n}: NavbarGroupProps) {\n const [isCollapsed, setIsCollapsed] = useState(defaultCollapsed);\n\n return (\n <div id={id} className={cn(\"flex flex-col\", className)} {...props}>\n {label && (\n <div\n className={cn(\n getSpacingClass(\"sm\", \"px\"),\n getSpacingClass(\"1.5\", \"py\"),\n \"text-xs text-gray-500 uppercase tracking-wider\",\n collapsible && \"cursor-pointer hover:text-gray-700\",\n )}\n onClick={collapsible ? () => setIsCollapsed(!isCollapsed) : undefined}\n >\n <div\n className={cn(\"flex items-center\", getSpacingClass(\"1.5\", \"gap\"))}\n >\n {\" \"}\n {collapsible && (\n <span className=\"shrink-0\">\n {isCollapsed ? (\n <ChevronRight\n className=\"w-3 h-3\"\n style={{ transition: \"none\", transform: \"none\" }}\n />\n ) : (\n <ChevronDown\n className=\"w-3 h-3\"\n style={{ transition: \"none\", transform: \"none\" }}\n />\n )}\n </span>\n )}\n <span>{label}</span>\n </div>\n </div>\n )}\n {!isCollapsed && (\n <div className=\"flex flex-col gap-2\">\n {\" \"}\n {/* gap-2 para consistência com outros componentes */}\n {children}\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useState, useRef, useMemo } from \"react\";\nimport { NavbarContext } from \"../../contexts/NavbarContext\";\nimport { useSideNavbarStateRequired } from \"../../contexts/SideNavbarStateContext\";\nimport { useSideNavbarThemeRequired } from \"../../contexts/SideNavbarThemeContext\";\nimport { useSideNavbarConfigRequired } from \"../../contexts/SideNavbarConfigContext\";\nimport { useSideNavbarToggleContextRequired } from \"../../contexts/SideNavbarToggleContext\";\nimport { cn } from \"../../../../utils\";\nimport type { NavbarProps, NavbarContextValue } from \"../../types\";\nimport NavbarToggle from \"./NavbarToggle\";\nimport NavbarItem from \"./NavbarItem\";\nimport NavbarSeparator from \"./NavbarSeparator\";\nimport { NavbarGroup } from \"./NavbarGroup\";\n\n/**\n * Navbar subcomponent for SideNavbar\n *\n * Provides its own context that inherits from the root SideNavbar context.\n * Contains the icon navigation column with optional internal toggle.\n *\n * @example\n * ```tsx\n * <SideNavbar.Navbar showToggle togglePosition=\"bottom\">\n * <SideNavbar.Navbar.Item icon={<Home />} label=\"Home\" />\n * <SideNavbar.Navbar.Item icon={<Settings />} label=\"Settings\" />\n * </SideNavbar.Navbar>\n * ```\n */\nfunction Navbar({\n children,\n showMainToggle: showMainToggleProp,\n mainTogglePosition: mainTogglePositionProp,\n showToggle = false,\n togglePosition = \"bottom\",\n labelMode = \"tooltip\",\n expandedWidth = 200,\n className = \"\",\n style,\n ...props\n}: NavbarProps) {\n const rootState = useSideNavbarStateRequired();\n const rootTheme = useSideNavbarThemeRequired();\n const rootConfig = useSideNavbarConfigRequired();\n const toggleContext = useSideNavbarToggleContextRequired();\n const navbarRef = useRef<HTMLElement>(null);\n const [activeItem, setActiveItem] = useState<string | null>(null);\n const [isHovered, setIsHovered] = useState(false);\n\n // Use props if provided, otherwise use context values\n const showMainToggle = showMainToggleProp ?? toggleContext.showMainToggle;\n const _mainTogglePosition =\n mainTogglePositionProp ?? toggleContext.mainTogglePosition;\n\n // When labelMode is 'inline', navbar should expand\n const shouldExpand = labelMode === \"inline\" && !rootState.collapsed;\n const navbarWidth = shouldExpand\n ? typeof expandedWidth === \"number\"\n ? `${expandedWidth}px`\n : expandedWidth\n : rootTheme.navigationWidth;\n\n const contextValue: NavbarContextValue = useMemo(\n () => ({\n // Inherited from root\n collapsed: rootState.collapsed,\n toggle: rootState.toggle,\n // Navbar-specific\n navbarRef,\n activeItem,\n setActiveItem,\n isHovered,\n showInternalToggle: showToggle,\n togglePosition,\n labelMode,\n }),\n [\n rootState.collapsed,\n rootState.toggle,\n activeItem,\n isHovered,\n showToggle,\n togglePosition,\n labelMode,\n ],\n );\n\n // Determine if main toggle should be shown\n const _shouldShowMainToggle =\n showMainToggle && rootConfig.mode !== \"navigation\";\n\n return (\n <NavbarContext.Provider value={contextValue}>\n <nav\n ref={navbarRef}\n className={cn(\n \"relative\",\n \"flex-shrink-0\",\n \"flex\",\n \"flex-col\",\n \"h-full\",\n shouldExpand ? \"items-stretch\" : \"items-center\",\n className,\n )}\n style={{\n position: \"relative\", // Ensure relative positioning for absolute children (toggle)\n backgroundColor: \"var(--color-card)\",\n borderRight: \"1px solid var(--color-border)\",\n width: navbarWidth,\n transitionProperty: \"width\",\n transitionDuration: `${rootTheme.animationDuration}ms`,\n transitionTimingFunction: rootTheme.animationEasing,\n ...style,\n }}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n aria-label=\"Side navigation\"\n {...props}\n >\n {/* Top toggle position (internal) */}\n {showToggle && togglePosition === \"top\" && (\n <div\n className=\"flex-shrink-0 p-2\"\n style={{ borderBottom: \"1px solid var(--color-border)\" }}\n >\n <NavbarToggle />\n </div>\n )}\n\n {/* Navigation items - vertical layout */}\n <div\n className={cn(\n \"relative\", // Create new stacking context\n \"flex-1\",\n \"flex\",\n \"flex-col\",\n \"overflow-y-auto\",\n \"overflow-x-hidden\",\n \"p-2\", // Padding consistente de 0.5rem (8px)\n \"gap-2\", // Gap consistente de 0.5rem (8px) entre itens\n \"w-full\",\n \"min-w-0\", // Prevent flex items from overflowing\n shouldExpand ? \"items-stretch\" : \"items-center\",\n \"justify-start\",\n )}\n style={{\n // micro-z: navbar content above toggle within parent container\n zIndex: 1,\n }}\n >\n {children}\n </div>\n\n {/* Bottom toggle position (internal) */}\n {showToggle && togglePosition === \"bottom\" && (\n <div\n className=\"flex-shrink-0 p-2\"\n style={{ borderTop: \"1px solid var(--color-border)\" }}\n >\n <NavbarToggle />\n </div>\n )}\n </nav>\n </NavbarContext.Provider>\n );\n}\n\n// Attach compound components\nNavbar.Toggle = NavbarToggle;\nNavbar.Item = NavbarItem;\nNavbar.Separator = NavbarSeparator;\nNavbar.Group = NavbarGroup;\n\n// Add displayName for easier identification in cloneElement\nNavbar.displayName = \"Navbar\";\n\nexport default Navbar;\n","\"use client\";\n\n/* eslint-disable react-refresh/only-export-components */\nimport { createContext, useContext } from \"react\";\nimport type { SidebarContextValue } from \"../types\";\n\n/**\n * Context for the Sidebar subcomponent\n *\n * Provides sidebar-specific state that inherits from the root SideNavbar context.\n * Must be used within a Sidebar component.\n */\nexport const SidebarContext = createContext<SidebarContextValue | null>(null);\n\n/**\n * Hook to access Sidebar context (returns null if outside Sidebar)\n */\nexport function useSidebar(): SidebarContextValue | null {\n return useContext(SidebarContext);\n}\n\n/**\n * Hook to access Sidebar context (throws if outside Sidebar)\n * @throws Error if used outside of Sidebar component\n */\nexport function useSidebarRequired(): SidebarContextValue {\n const context = useContext(SidebarContext);\n if (!context) {\n throw new Error(\n \"useSidebarRequired must be used within a SideNavbar.Sidebar component\",\n );\n }\n return context;\n}\n\nexport default SidebarContext;\n","\"use client\";\n\nimport React, { useEffect } from \"react\";\nimport { useSidebarRequired } from \"../../contexts/SidebarContext\";\nimport {\n getSpacingClass,\n getColorClass,\n getTypographyClasses,\n} from \"../../../../tokens\";\nimport type { SidebarHeaderProps } from \"../../types\";\n\n/**\n * Header component for the Sidebar subcomponent\n *\n * Displays a title and optional subtitle at the top of the sidebar content.\n * Automatically registers its presence with the Sidebar context.\n *\n * @example\n * ```tsx\n * <SideNavbar.Sidebar.Header title=\"Dashboard\" subtitle=\"Overview\" />\n * ```\n */\nexport default function SidebarHeader({\n title,\n subtitle,\n showBorder = true,\n children,\n className = \"\",\n style,\n ...props\n}: SidebarHeaderProps) {\n const { collapsed, registerHeader, unregisterHeader } = useSidebarRequired();\n\n // Register header presence with Sidebar context\n useEffect(() => {\n registerHeader();\n return () => unregisterHeader();\n }, [registerHeader, unregisterHeader]);\n\n if (collapsed) {\n return null;\n }\n\n return (\n <div\n className={`\n flex-shrink-0\n ${getSpacingClass(\"md\", \"px\")}\n ${getSpacingClass(\"sm\", \"py\")}\n ${showBorder ? `border-b ${getColorClass(\"neutral\", \"DEFAULT\", \"border\")}` : \"\"}\n bg-gray-50\n ${className}\n `}\n style={style}\n {...props}\n >\n {children || (\n <>\n {title && (\n <h2\n className={`\n ${getTypographyClasses(\"h4\")}\n ${getColorClass(\"neutral\", \"dark\", \"text\")}\n m-0\n font-semibold\n `}\n >\n {title}\n </h2>\n )}\n {subtitle && (\n <p\n className={`\n ${getTypographyClasses(\"bodySmall\")}\n ${getColorClass(\"neutral\", \"DEFAULT\", \"text\")}\n m-0\n mt-1\n `}\n >\n {subtitle}\n </p>\n )}\n </>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { useSidebarRequired } from \"../../contexts/SidebarContext\";\nimport { getSpacingClass } from \"../../../../tokens\";\nimport { SIDEBAR_TOKENS } from \"../../../../tokens/sidebar\";\nimport type { SidebarContentProps } from \"../../types\";\n\n/**\n * Content component for the Sidebar subcomponent\n *\n * The main scrollable area of the sidebar.\n * Supports configurable padding and scroll tracking.\n *\n * @example\n * ```tsx\n * <SideNavbar.Sidebar.Content padding=\"md\" scrollable>\n * <SideNavbar.Sidebar.Group id=\"filters\" title=\"Filters\">\n * <FilterList />\n * </SideNavbar.Sidebar.Group>\n * </SideNavbar.Sidebar.Content>\n * ```\n */\nexport default function SidebarContent({\n scrollable = true,\n padding = \"md\",\n children,\n className = \"\",\n style,\n ...props\n}: SidebarContentProps) {\n const { collapsed, setScrollPosition } = useSidebarRequired();\n\n if (collapsed) {\n return null;\n }\n\n const paddingClass = padding !== \"none\" ? getSpacingClass(padding, \"p\") : \"\";\n\n const scrollClasses = scrollable\n ? \"overflow-y-auto overflow-x-hidden\"\n : \"overflow-hidden\";\n\n const scrollbarStyles = scrollable\n ? {\n scrollbarWidth: SIDEBAR_TOKENS.content.scrollbar.width as \"thin\",\n scrollbarColor: `${SIDEBAR_TOKENS.content.scrollbar.color.thumb} ${SIDEBAR_TOKENS.content.scrollbar.color.track}`,\n }\n : {};\n\n const handleScroll = (e: React.UIEvent<HTMLDivElement>) => {\n if (scrollable) {\n setScrollPosition(e.currentTarget.scrollTop);\n }\n };\n\n return (\n <div\n className={`\n flex-1\n min-h-0\n ${scrollClasses}\n ${paddingClass}\n ${className}\n `}\n style={{\n ...scrollbarStyles,\n ...style,\n }}\n onScroll={handleScroll}\n {...props}\n >\n {children}\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useEffect } from \"react\";\nimport { useSidebarRequired } from \"../../contexts/SidebarContext\";\nimport { getSpacingClass, getColorClass } from \"../../../../tokens\";\nimport type { SidebarFooterProps } from \"../../types\";\n\n/**\n * Footer component for the Sidebar subcomponent\n *\n * Displays content at the bottom of the sidebar.\n * Automatically registers its presence with the Sidebar context.\n *\n * @example\n * ```tsx\n * <SideNavbar.Sidebar.Footer>\n * <Button variant=\"primary\">Apply Changes</Button>\n * </SideNavbar.Sidebar.Footer>\n * ```\n */\nexport default function SidebarFooter({\n padding = \"md\",\n showBorder = true,\n children,\n className = \"\",\n style,\n ...props\n}: SidebarFooterProps) {\n const { collapsed, registerFooter, unregisterFooter } = useSidebarRequired();\n\n // Register footer presence with Sidebar context\n useEffect(() => {\n registerFooter();\n return () => unregisterFooter();\n }, [registerFooter, unregisterFooter]);\n\n if (collapsed) {\n return null;\n }\n\n const paddingClass = padding !== \"none\" ? getSpacingClass(padding, \"p\") : \"\";\n\n return (\n <div\n className={`\n flex-shrink-0\n ${paddingClass}\n ${showBorder ? `border-t ${getColorClass(\"neutral\", \"DEFAULT\", \"border\")}` : \"\"}\n bg-gray-50\n ${className}\n `}\n style={style}\n {...props}\n >\n {children}\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useEffect, useRef } from \"react\";\nimport { useSidebarRequired } from \"../../contexts/SidebarContext\";\nimport { useSideNavbarStateRequired } from \"../../contexts/SideNavbarStateContext\";\nimport { useSideNavbarThemeRequired } from \"../../contexts/SideNavbarThemeContext\";\nimport Collapsible from \"../../../../primitives/Collapsible/Collapsible\";\nimport { getSpacingClass } from \"../../../../tokens/spacing\";\nimport type { SidebarGroupProps } from \"../../types\";\n\n/**\n * Group component for the Sidebar subcomponent\n *\n * Creates a collapsible section within the sidebar content.\n * State is managed by the root SideNavbar context.\n *\n * @example\n * ```tsx\n * <SideNavbar.Sidebar.Group\n * id=\"filters\"\n * title=\"Filters\"\n * icon={<Filter />}\n * collapsible\n * >\n * <FilterList />\n * </SideNavbar.Sidebar.Group>\n * ```\n */\nexport default function SidebarGroup({\n id,\n title,\n icon,\n actions,\n collapsible = true,\n defaultCollapsed = false,\n children,\n className = \"\",\n ...props\n}: SidebarGroupProps) {\n const {\n collapsed: sidebarCollapsed,\n activeGroup,\n setActiveGroup,\n } = useSidebarRequired();\n const { groupStates, toggleGroup, setGroupCollapsed } =\n useSideNavbarStateRequired();\n const { animationDuration } = useSideNavbarThemeRequired();\n const hasInitialized = useRef(false);\n\n // Initialize group state on mount (only once)\n useEffect(() => {\n if (!hasInitialized.current && groupStates[id] === undefined) {\n hasInitialized.current = true;\n setGroupCollapsed(id, defaultCollapsed);\n }\n }, [id, defaultCollapsed, groupStates, setGroupCollapsed]);\n\n // Don't render if sidebar is collapsed\n if (sidebarCollapsed) {\n return null;\n }\n\n const isCollapsed = groupStates[id] ?? defaultCollapsed;\n const isActive = activeGroup === id;\n\n const _handleToggle = () => {\n if (collapsible) {\n toggleGroup(id);\n }\n setActiveGroup(id);\n };\n\n const handleHeaderClick = () => {\n setActiveGroup(id);\n if (collapsible) {\n toggleGroup(id);\n }\n };\n\n return (\n <div\n className={`\n border-b\n border-gray-200\n last:border-b-0\n ${className}\n `}\n {...props}\n >\n {title && (\n <button\n type=\"button\"\n onClick={handleHeaderClick}\n className={`\n flex\n items-center\n justify-between\n w-full\n ${getSpacingClass(\"md\", \"px\")}\n ${getSpacingClass(\"2.5\", \"py\")}\n text-left\n transition-colors\n duration-150\n ${isActive ? \"bg-gray-100\" : \"hover:bg-gray-100\"}\n ${!collapsible ? \"cursor-default\" : \"cursor-pointer\"}\n `}\n aria-expanded={collapsible ? !isCollapsed : undefined}\n aria-controls={collapsible ? `sidebar-group-${id}` : undefined}\n >\n <div className=\"flex items-center gap-2\">\n {icon && <span className=\"w-4 h-4 text-gray-500\">{icon}</span>}\n <span className=\"text-sm font-medium text-gray-700\">{title}</span>\n </div>\n <div className=\"flex items-center gap-2\">\n {actions}\n {collapsible && (\n <ChevronDown\n className={`\n w-4\n h-4\n text-gray-400\n transition-transform\n ${isCollapsed ? \"-rotate-90\" : \"rotate-0\"}\n `}\n style={{ transitionDuration: `${animationDuration}ms` }}\n aria-hidden=\"true\"\n />\n )}\n </div>\n </button>\n )}\n\n {collapsible ? (\n <Collapsible open={!isCollapsed} duration={animationDuration}>\n <div id={`sidebar-group-${id}`} className=\"px-3 py-2\">\n {children}\n </div>\n </Collapsible>\n ) : (\n <div className=\"px-3 py-2\">{children}</div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useEffect, type ReactNode } from \"react\";\nimport { useSidebarSlotRequired } from \"../../contexts/SidebarSlotContext\";\n\nexport interface SidebarSlotProps {\n /** Unique slot identifier */\n id: string;\n /** Slot content */\n children: ReactNode;\n}\n\n/**\n * SidebarSlot Component\n *\n * **Note: Slots are exclusive to the Sidebar component, not the Navbar.**\n *\n * Registers a content slot that can be displayed dynamically within the Sidebar.\n * The slot content is only rendered when it's the active slot.\n * Use this to switch between different content views in the Sidebar based on navigation.\n *\n * @example\n * ```tsx\n * <SideNavbar>\n * <SideNavbar.Navbar>\n * <SideNavbar.Navbar.Item icon={<Home />} label=\"Home\" />\n * </SideNavbar.Navbar>\n *\n * <SidebarSlotProvider defaultSlot=\"dashboard\">\n * <SideNavbar.Sidebar>\n * <SideNavbar.Sidebar.Content>\n * <SidebarSlot id=\"dashboard\">\n * <DashboardContent />\n * </SidebarSlot>\n * <SidebarSlot id=\"settings\">\n * <SettingsContent />\n * </SidebarSlot>\n * <SidebarSlotContent />\n * </SideNavbar.Sidebar.Content>\n * </SideNavbar.Sidebar>\n * </SidebarSlotProvider>\n * </SideNavbar>\n * ```\n */\nexport function SidebarSlot({ id, children }: SidebarSlotProps) {\n const { activeSlot, registerSlot, unregisterSlot } = useSidebarSlotRequired();\n\n useEffect(() => {\n registerSlot(id, children);\n return () => unregisterSlot(id);\n }, [id, children, registerSlot, unregisterSlot]);\n\n // Only render if this is the active slot\n if (activeSlot !== id) {\n return null;\n }\n\n return <>{children}</>;\n}\n","\"use client\";\n\nimport React, { type ReactNode } from \"react\";\nimport { useSidebarSlotRequired } from \"../../contexts/SidebarSlotContext\";\n\nexport interface SidebarSlotContentProps {\n /** Fallback content when no slot is active */\n fallback?: ReactNode;\n}\n\n/**\n * SidebarSlotContent Component\n *\n * **Note: This component is exclusive to the Sidebar, not the Navbar.**\n *\n * Container that renders the currently active slot content within the Sidebar.\n * Displays fallback content if no slot is active.\n * Must be used inside a SidebarSlotProvider and within the Sidebar component.\n *\n * @example\n * ```tsx\n * <SideNavbar.Sidebar>\n * <SideNavbar.Sidebar.Content>\n * <SidebarSlotProvider defaultSlot=\"dashboard\">\n * <SidebarSlot id=\"dashboard\">\n * <DashboardContent />\n * </SidebarSlot>\n * <SidebarSlotContent fallback={<EmptyState />} />\n * </SidebarSlotProvider>\n * </SideNavbar.Sidebar.Content>\n * </SideNavbar.Sidebar>\n * ```\n */\nexport function SidebarSlotContent({\n fallback = null,\n}: SidebarSlotContentProps) {\n const { activeSlot, slots } = useSidebarSlotRequired();\n\n if (!activeSlot || !slots.has(activeSlot)) {\n return <>{fallback}</>;\n }\n\n return <>{slots.get(activeSlot)}</>;\n}\n","\"use client\";\n\nimport React, { useState, useRef, useMemo, useCallback } from \"react\";\nimport { SidebarContext } from \"../../contexts/SidebarContext\";\nimport { useSideNavbarStateRequired } from \"../../contexts/SideNavbarStateContext\";\nimport { useSideNavbarThemeRequired } from \"../../contexts/SideNavbarThemeContext\";\nimport { parseWidthToPixels } from \"../../utils\";\nimport type { SidebarProps, SidebarContextValue } from \"../../types\";\nimport SidebarHeader from \"./SidebarHeader\";\nimport SidebarContent from \"./SidebarContent\";\nimport SidebarFooter from \"./SidebarFooter\";\nimport SidebarGroup from \"./SidebarGroup\";\nimport { SidebarSlot } from \"./SidebarSlot\";\nimport { SidebarSlotContent } from \"./SidebarSlotContent\";\nimport { cn } from \"../../../../utils\";\n\n/**\n * Sidebar subcomponent for SideNavbar\n *\n * Provides its own context that inherits from the root SideNavbar context.\n * Contains the expandable content area with header, content, and footer.\n *\n * @example\n * ```tsx\n * <SideNavbar.Sidebar>\n * <SideNavbar.Sidebar.Header title=\"Dashboard\" />\n * <SideNavbar.Sidebar.Content>\n * <SideNavbar.Sidebar.Group id=\"filters\" title=\"Filters\">\n * <FilterList />\n * </SideNavbar.Sidebar.Group>\n * </SideNavbar.Sidebar.Content>\n * <SideNavbar.Sidebar.Footer>\n * <Button>Apply</Button>\n * </SideNavbar.Sidebar.Footer>\n * </SideNavbar.Sidebar>\n * ```\n */\nfunction Sidebar({ children, className = \"\", style, ...props }: SidebarProps) {\n const rootState = useSideNavbarStateRequired();\n const rootTheme = useSideNavbarThemeRequired();\n const sidebarRef = useRef<HTMLElement>(null);\n const [scrollPosition, setScrollPosition] = useState(0);\n const [hasHeader, setHasHeader] = useState(false);\n const [hasFooter, setHasFooter] = useState(false);\n const [activeGroup, setActiveGroup] = useState<string | null>(null);\n\n const registerHeader = useCallback(() => setHasHeader(true), []);\n const unregisterHeader = useCallback(() => setHasHeader(false), []);\n const registerFooter = useCallback(() => setHasFooter(true), []);\n const unregisterFooter = useCallback(() => setHasFooter(false), []);\n\n const contextValue: SidebarContextValue = useMemo(\n () => ({\n // Inherited from root\n collapsed: rootState.collapsed,\n currentWidth: rootState.currentWidth,\n isMobile: rootState.isMobile,\n // Sidebar-specific\n sidebarRef,\n scrollPosition,\n setScrollPosition,\n hasHeader,\n hasFooter,\n registerHeader,\n unregisterHeader,\n registerFooter,\n unregisterFooter,\n activeGroup,\n setActiveGroup,\n }),\n [\n rootState.collapsed,\n rootState.currentWidth,\n rootState.isMobile,\n scrollPosition,\n hasHeader,\n hasFooter,\n registerHeader,\n unregisterHeader,\n registerFooter,\n unregisterFooter,\n activeGroup,\n ],\n );\n\n // Calculate sidebar width (total width minus navigation width)\n const totalWidth = parseWidthToPixels(rootTheme.contentWidth);\n const navWidth = parseWidthToPixels(rootTheme.navigationWidth);\n const sidebarWidth = totalWidth - navWidth;\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <aside\n ref={sidebarRef}\n id=\"side-navbar-sidebar\"\n className={cn(\n \"flex\",\n \"flex-col\",\n \"h-full\",\n \"bg-[var(--color-muted)]\",\n \"border-r\",\n \"border-[var(--color-border)]\",\n \"overflow-hidden\",\n className,\n )}\n style={{\n width: rootState.collapsed ? 0 : sidebarWidth,\n opacity: rootState.collapsed ? 0 : 1,\n visibility: rootState.collapsed ? \"hidden\" : \"visible\",\n transitionProperty: \"width, opacity, visibility\",\n transitionDuration: `${rootTheme.animationDuration}ms`,\n transitionTimingFunction: rootTheme.animationEasing,\n ...style,\n }}\n aria-hidden={rootState.collapsed}\n {...props}\n >\n {children}\n </aside>\n </SidebarContext.Provider>\n );\n}\n\n// Attach compound components\nSidebar.Header = SidebarHeader;\nSidebar.Content = SidebarContent;\nSidebar.Footer = SidebarFooter;\nSidebar.Group = SidebarGroup;\n// Slot components (exclusive to Sidebar, not Navbar)\nSidebar.Slot = SidebarSlot;\nSidebar.SlotContent = SidebarSlotContent;\n\nexport default Sidebar;\n","\"use client\";\n\nimport React, { useMemo } from \"react\";\nimport { SideNavbarProvider } from \"./providers/SideNavbarProvider\";\nimport { SideNavbarThemeProvider } from \"./providers/SideNavbarThemeProvider\";\nimport { SideNavbarConfigProvider } from \"./providers/SideNavbarConfigProvider\";\nimport { SideNavbarStateProvider } from \"./providers/SideNavbarStateProvider\";\nimport { SidebarSlotProvider } from \"./providers/SidebarSlotProvider\";\nimport { SideNavbarToggleContext } from \"./contexts/SideNavbarToggleContext\";\nimport SideNavbarRoot from \"./components/SideNavbarRoot\";\nimport SideNavbarToggle from \"./components/SideNavbarToggle\";\nimport SideNavbarResizeHandle from \"./components/SideNavbarResizeHandle\";\nimport SideNavbarBackdrop from \"./components/SideNavbarBackdrop\";\n// Subcomponents with their own contexts\nimport { Navbar } from \"./components/Navbar\";\nimport { Sidebar } from \"./components/Sidebar\";\nimport type { SideNavbarProps } from \"./types\";\n\n/**\n * SideNavbar Component\n *\n * A flexible, compound sidebar component with layered context architecture.\n * Supports multiple modes, resizing, responsive behavior, and content groups.\n *\n * ## Architecture\n *\n * Uses hierarchical context system:\n * - **Root Contexts** (3 layers): Theme, Config, State\n * - **Subcomponent Contexts**: Navbar, Sidebar (inherit from root)\n *\n * ## Modes\n *\n * - `full`: Navigation + Content (default) - Full sidebar with collapsible content\n * - `navigation`: Navigation only - Just the icon bar, no collapsible content\n * - `minimal`: Navigation with hover expand (future)\n *\n * ## Subcomponents (with own contexts)\n *\n * - `SideNavbar.Navbar` - Icon navigation column with its own NavbarContext\n * - Main toggle button is rendered at top-right of navbar by default\n * - `SideNavbar.Navbar.Item` - Navigation item with icon\n * - `SideNavbar.Navbar.Toggle` - Internal toggle button (optional, inside navbar)\n * - `SideNavbar.Navbar.Separator` - Visual separator\n *\n * - `SideNavbar.Sidebar` - Expandable content area with its own SidebarContext\n * - `SideNavbar.Sidebar.Header` - Header section\n * - `SideNavbar.Sidebar.Content` - Scrollable content area\n * - `SideNavbar.Sidebar.Footer` - Footer section\n * - `SideNavbar.Sidebar.Group` - Collapsible groups\n * - `SideNavbar.Sidebar.Slot` - Content slot (exclusive to Sidebar, not Navbar)\n * - `SideNavbar.Sidebar.SlotContent` - Renders active slot content\n *\n * ## Utility Components\n *\n * - `SideNavbar.Toggle` - Toggle button component (rendered in Navbar by default)\n * - `SideNavbar.ResizeHandle` - Resize handle for resizable sidebars\n * - `SideNavbar.Backdrop` - Mobile overlay backdrop\n *\n * ## Providers (for advanced usage)\n *\n * - `SideNavbar.Provider` - Combined provider\n * - `SideNavbar.ThemeProvider`, `SideNavbar.ConfigProvider`, `SideNavbar.StateProvider`\n * - `SideNavbar.SlotProvider` - Slot system provider (exclusive to Sidebar content)\n *\n * ## Slot System (Sidebar Only)\n *\n * The slot system allows dynamic content switching within the Sidebar.\n * **Important: Slots only work within the Sidebar component, not the Navbar.**\n * Use `SidebarSlotProvider` to wrap Sidebar content, then use `SidebarSlot` and\n * `SidebarSlotContent` to manage dynamic content.\n *\n * @example\n * ```tsx\n * @example\n * ```tsx\n * <SideNavbar mode=\"full\" variant=\"elevated\">\n * <SideNavbar.Navbar showToggle togglePosition=\"bottom\">\n * <SideNavbar.Navbar.Item icon={<Home />} label=\"Home\" />\n * <SideNavbar.Navbar.Item icon={<Settings />} label=\"Settings\" />\n * </SideNavbar.Navbar>\n *\n * <SideNavbar.Sidebar>\n * <SideNavbar.Sidebar.Header title=\"Dashboard\" />\n * <SideNavbar.Sidebar.Content>\n * <SideNavbar.Sidebar.Group id=\"stats\" title=\"Statistics\">\n * <StatsList />\n * </SideNavbar.Sidebar.Group>\n * </SideNavbar.Sidebar.Content>\n * <SideNavbar.Sidebar.Footer>\n * <Button>Apply</Button>\n * </SideNavbar.Sidebar.Footer>\n * </SideNavbar.Sidebar>\n * </SideNavbar>\n * ```\n * ```\n */\nfunction SideNavbar({\n // Mode\n mode = \"full\",\n\n // Theme\n variant = \"default\",\n navigationWidth = \"56px\",\n width = \"320px\",\n animationDuration = 300,\n\n // Config\n resizable = false,\n minWidth,\n maxWidth,\n snapPoints,\n responsive = false,\n mobileBreakpoint = 768,\n mobileVariant = \"collapse\",\n overlayBackdrop = true,\n storageKey,\n persistWidth = false,\n\n // State\n defaultCollapsed = false,\n collapsed,\n onCollapseChange,\n onWidthChange,\n onMobileChange,\n exclusiveGroups = false,\n\n // Toggle\n showToggle = true,\n togglePosition = \"floating\",\n\n // Rest\n children,\n ...rootProps\n}: SideNavbarProps) {\n // Memoize toggle context value to prevent unnecessary re-renders\n const toggleContextValue = useMemo(\n () => ({\n showMainToggle: showToggle,\n mainTogglePosition: togglePosition,\n }),\n [showToggle, togglePosition],\n );\n\n return (\n <SideNavbarToggleContext.Provider value={toggleContextValue}>\n <SideNavbarProvider\n // Theme\n variant={variant}\n navigationWidth={navigationWidth}\n contentWidth={width}\n animationDuration={animationDuration}\n // Config\n mode={mode}\n resizable={resizable}\n minWidth={minWidth}\n maxWidth={maxWidth}\n snapPoints={snapPoints}\n responsive={responsive}\n mobileBreakpoint={mobileBreakpoint}\n mobileVariant={mobileVariant}\n overlayBackdrop={overlayBackdrop}\n storageKey={storageKey}\n persistWidth={persistWidth}\n // State\n defaultCollapsed={defaultCollapsed}\n collapsed={collapsed}\n onCollapseChange={onCollapseChange}\n onWidthChange={onWidthChange}\n onMobileChange={onMobileChange}\n exclusiveGroups={exclusiveGroups}\n >\n <SideNavbarRoot {...rootProps}>{children}</SideNavbarRoot>\n </SideNavbarProvider>\n </SideNavbarToggleContext.Provider>\n );\n}\n\n// ============================================================================\n// Subcomponents (with their own contexts)\n// ============================================================================\nSideNavbar.Navbar = Navbar;\nSideNavbar.Sidebar = Sidebar;\n\n// ============================================================================\n// Utility Components\n// ============================================================================\nSideNavbar.Toggle = SideNavbarToggle;\nSideNavbar.ResizeHandle = SideNavbarResizeHandle;\nSideNavbar.Backdrop = SideNavbarBackdrop;\n\n// ============================================================================\n// Providers (for advanced usage)\n// ============================================================================\nSideNavbar.Provider = SideNavbarProvider;\nSideNavbar.ThemeProvider = SideNavbarThemeProvider;\nSideNavbar.ConfigProvider = SideNavbarConfigProvider;\nSideNavbar.StateProvider = SideNavbarStateProvider;\nSideNavbar.SlotProvider = SidebarSlotProvider;\n\nexport default SideNavbar;\n","\"use client\";\n\nimport { useState, useCallback, useEffect } from \"react\";\nimport type { UseGroupStateOptions, UseGroupStateReturn } from \"../types\";\n\n/**\n * Hook for managing collapsible group states\n *\n * Manages collapsed/expanded state for multiple groups with optional persistence.\n * Used internally by SideNavbarStateProvider, but can be used standalone.\n *\n * @example\n * ```tsx\n * const { groupStates, toggleGroup, setGroupCollapsed } = useGroupState({\n * defaultStates: { filters: false, settings: true },\n * persist: true,\n * storageKey: 'my-sidebar-groups',\n * });\n *\n * // Check if group is collapsed\n * const isFiltersCollapsed = groupStates['filters'] ?? false;\n *\n * // Toggle a group\n * toggleGroup('filters');\n *\n * // Set specific state\n * setGroupCollapsed('settings', false);\n * ```\n */\nexport function useGroupState({\n defaultStates = {},\n persist = false,\n storageKey,\n}: UseGroupStateOptions = {}): UseGroupStateReturn {\n // Initialize state from storage or defaults\n const getInitialStates = (): Record<string, boolean> => {\n if (persist && storageKey && typeof window !== \"undefined\") {\n const stored = localStorage.getItem(`${storageKey}-groups`);\n if (stored) {\n try {\n const parsed = JSON.parse(stored);\n return { ...defaultStates, ...parsed };\n } catch {\n // Invalid JSON, use defaults\n }\n }\n }\n return defaultStates;\n };\n\n const [groupStates, setGroupStates] =\n useState<Record<string, boolean>>(getInitialStates);\n\n // Persist state changes\n useEffect(() => {\n if (persist && storageKey && typeof window !== \"undefined\") {\n localStorage.setItem(`${storageKey}-groups`, JSON.stringify(groupStates));\n }\n }, [persist, storageKey, groupStates]);\n\n const toggleGroup = useCallback((groupId: string) => {\n setGroupStates((prev) => ({\n ...prev,\n [groupId]: !prev[groupId],\n }));\n }, []);\n\n const setGroupCollapsed = useCallback(\n (groupId: string, collapsed: boolean) => {\n setGroupStates((prev) => ({\n ...prev,\n [groupId]: collapsed,\n }));\n },\n [],\n );\n\n const resetGroups = useCallback(() => {\n setGroupStates(defaultStates);\n }, [defaultStates]);\n\n return {\n groupStates,\n toggleGroup,\n setGroupCollapsed,\n resetGroups,\n };\n}\n\nexport default useGroupState;\n","\"use client\";\n\nimport { useCallback } from \"react\";\nimport { useNavbarRequired } from \"../contexts/NavbarContext\";\nimport { useSidebarSlot } from \"../contexts/SidebarSlotContext\";\n\n/**\n * Hook for navigation-related state and actions\n *\n * Provides convenience methods for navigating between navbar items\n * and managing associated sidebar slots.\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const { activeItem, navigate } = useSideNavbarNavigation();\n *\n * return (\n * <button onClick={() => navigate('dashboard', 'dashboard-content')}>\n * Go to Dashboard\n * </button>\n * );\n * }\n * ```\n */\nexport function useSideNavbarNavigation() {\n const { activeItem, setActiveItem } = useNavbarRequired();\n const slotContext = useSidebarSlot();\n\n const navigate = useCallback(\n (itemId: string, slotId?: string) => {\n setActiveItem(itemId);\n if (slotId && slotContext?.setActiveSlot) {\n slotContext.setActiveSlot(slotId);\n }\n },\n [setActiveItem, slotContext],\n );\n\n return {\n activeItem,\n setActiveItem,\n navigate,\n };\n}\n","\"use client\";\n\nimport { useSidebarSlot } from \"../contexts/SidebarSlotContext\";\nimport { useSidebar } from \"../contexts/SidebarContext\";\n\n/**\n * Hook for content/slot management\n *\n * Provides access to sidebar slot state and scroll position.\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const { activeSlot, setActiveSlot, scrollPosition } = useSideNavbarContent();\n *\n * return (\n * <div>\n * <p>Active slot: {activeSlot}</p>\n * <p>Scroll position: {scrollPosition}px</p>\n * </div>\n * );\n * }\n * ```\n */\nexport function useSideNavbarContent() {\n const slotContext = useSidebarSlot();\n const sidebarContext = useSidebar();\n\n return {\n activeSlot: slotContext?.activeSlot ?? null,\n setActiveSlot: slotContext?.setActiveSlot ?? (() => {}),\n scrollPosition: sidebarContext?.scrollPosition ?? 0,\n setScrollPosition: sidebarContext?.setScrollPosition ?? (() => {}),\n };\n}\n","\"use client\";\n\n// Layered context hooks\nexport {\n useSideNavbarTheme,\n useSideNavbarThemeRequired,\n} from \"../contexts/SideNavbarThemeContext\";\n\nexport {\n useSideNavbarConfig,\n useSideNavbarConfigRequired,\n} from \"../contexts/SideNavbarConfigContext\";\n\nexport {\n useSideNavbarState,\n useSideNavbarStateRequired,\n} from \"../contexts/SideNavbarStateContext\";\n\n// Subcomponent hooks\nexport { useNavbar, useNavbarRequired } from \"./useNavbar\";\nexport { useSidebar, useSidebarRequired } from \"./useSidebar\";\n\n// Utility hooks\nexport { useResize } from \"./useResize\";\nexport type { UseResizeOptions, UseResizeReturn } from \"./useResize\";\n\nexport { useResponsiveSidebar } from \"./useResponsiveSidebar\";\nexport type {\n UseResponsiveSidebarOptions,\n UseResponsiveSidebarReturn,\n} from \"./useResponsiveSidebar\";\n\nexport { useKeyboardShortcut } from \"./useKeyboardShortcut\";\nexport type { UseKeyboardShortcutOptions } from \"./useKeyboardShortcut\";\n\nexport { useFocusManagement } from \"./useFocusManagement\";\nexport type { UseFocusManagementOptions } from \"./useFocusManagement\";\n\nexport { useGroupState } from \"./useGroupState\";\nexport type { UseGroupStateOptions, UseGroupStateReturn } from \"../types\";\n\n// Navigation and content hooks\nexport { useSideNavbarNavigation } from \"./useSideNavbarNavigation\";\nexport { useSideNavbarContent } from \"./useSideNavbarContent\";\n\n/**\n * Combined hook to access all root contexts\n *\n * Returns an object with theme, config, and state contexts.\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const { theme, config, state } = useSideNavbarCombined();\n * // Access theme.variant, config.mode, state.collapsed, etc.\n * }\n * ```\n */\nexport function useSideNavbarCombined() {\n // Import here to avoid circular dependencies\n const theme = useSideNavbarThemeRequired();\n const config = useSideNavbarConfigRequired();\n const state = useSideNavbarStateRequired();\n\n return { theme, config, state };\n}\n","\"use client\";\n\nimport { cloneElement, isValidElement, type ReactElement } from \"react\";\nimport { useDialogContext } from \"../../providers/DialogContext\";\n\nexport interface DialogTriggerProps {\n children: ReactElement;\n asChild?: boolean;\n}\n\nexport function DialogTrigger({\n children,\n asChild = false,\n}: DialogTriggerProps) {\n const { onOpenChange } = useDialogContext();\n\n if (asChild && isValidElement(children)) {\n return cloneElement(children, {\n onClick: (e: React.MouseEvent) => {\n onOpenChange(true);\n if (children.props.onClick) {\n children.props.onClick(e);\n }\n },\n } as unknown);\n }\n\n return (\n <button\n type=\"button\"\n onClick={() => onOpenChange(true)}\n aria-haspopup=\"dialog\"\n >\n {children}\n </button>\n );\n}\n","\"use client\";\n\nimport { useEffect, useRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useDialogContext } from \"../../providers/DialogContext\";\nimport { getRadiusClass, getShadowClass, getZIndexClass } from \"../../tokens\";\n\nexport interface DialogContentProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"role\"> {\n children: ReactNode;\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"fullscreen\";\n closeOnOverlayClick?: boolean;\n closeOnEscape?: boolean;\n}\n\nexport function DialogContent({\n children,\n size = \"md\",\n closeOnOverlayClick = true,\n closeOnEscape = true,\n className = \"\",\n ...props\n}: DialogContentProps) {\n const { isOpen, onClose, titleId, descriptionId } = useDialogContext();\n const contentRef = useRef<HTMLDivElement>(null);\n const overlayRef = useRef<HTMLDivElement>(null);\n\n // Focus trap and ESC key handling\n useEffect(() => {\n if (!isOpen) return;\n\n // Focus first focusable element in dialog\n const timer = setTimeout(() => {\n const focusableElements = contentRef.current?.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n );\n const firstElement = focusableElements?.[0] as HTMLElement;\n firstElement?.focus();\n }, 0);\n\n // Handle ESC key\n const handleEscape = (e: KeyboardEvent) => {\n if (closeOnEscape && e.key === \"Escape\") {\n onClose();\n }\n };\n\n // Handle Tab key for focus trap\n const handleTab = (e: KeyboardEvent) => {\n if (e.key !== \"Tab\" || !contentRef.current) return;\n\n const focusableElements = Array.from(\n contentRef.current.querySelectorAll<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n ),\n ).filter((el) => !el.disabled && el.offsetParent !== null);\n\n if (focusableElements.length === 0) {\n e.preventDefault();\n return;\n }\n\n const firstElement = focusableElements[0];\n const lastElement = focusableElements[focusableElements.length - 1];\n\n if (e.shiftKey) {\n // Shift + Tab\n if (document.activeElement === firstElement) {\n e.preventDefault();\n lastElement.focus();\n }\n } else {\n // Tab\n if (document.activeElement === lastElement) {\n e.preventDefault();\n firstElement.focus();\n }\n }\n };\n\n document.addEventListener(\"keydown\", handleEscape);\n document.addEventListener(\"keydown\", handleTab);\n\n return () => {\n clearTimeout(timer);\n document.removeEventListener(\"keydown\", handleEscape);\n document.removeEventListener(\"keydown\", handleTab);\n };\n }, [isOpen, onClose, closeOnEscape]);\n\n if (!isOpen) return null;\n\n const sizeClasses = {\n sm: \"max-w-sm\",\n md: \"max-w-md\",\n lg: \"max-w-lg\",\n xl: \"max-w-2xl\",\n fullscreen: \"max-w-full h-full m-0 rounded-none\",\n };\n\n const handleOverlayClick = (e: React.MouseEvent<HTMLDivElement>) => {\n if (closeOnOverlayClick && e.target === overlayRef.current) {\n onClose();\n }\n };\n\n const dialogContent = (\n <div\n className={`fixed inset-0 ${getZIndexClass(\"modal\")} overflow-y-auto`}\n onClick={handleOverlayClick}\n >\n {/* Overlay */}\n <div\n ref={overlayRef}\n className=\"fixed inset-0 bg-black bg-opacity-50 transition-opacity\"\n aria-hidden=\"true\"\n />\n\n {/* Dialog */}\n <div className=\"flex min-h-full items-center justify-center p-4\">\n <div\n ref={contentRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={descriptionId}\n className={`\n relative ${getZIndexClass(\"modal\")} w-full\n ${sizeClasses[size]}\n bg-white\n ${getRadiusClass(\"lg\")}\n ${getShadowClass(\"xl\")}\n ${className}\n `}\n tabIndex={-1}\n {...props}\n >\n {children}\n </div>\n </div>\n </div>\n );\n\n // Portal rendering\n if (typeof window !== \"undefined\") {\n return createPortal(dialogContent, document.body);\n }\n\n return dialogContent;\n}\n","\"use client\";\n\nimport { type HTMLAttributes, type ReactNode } from \"react\";\n\nexport interface DialogHeaderProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport function DialogHeader({\n children,\n className = \"\",\n ...props\n}: DialogHeaderProps) {\n return (\n <div\n className={`flex flex-col space-y-1.5 p-6 pb-4 ${className}`}\n {...props}\n >\n {children}\n </div>\n );\n}\n","\"use client\";\n\nimport { useId, type HTMLAttributes } from \"react\";\nimport { useDialogContext } from \"../../providers/DialogContext\";\nimport { getTypographyClasses } from \"../../tokens\";\n\nexport interface DialogTitleProps extends HTMLAttributes<HTMLHeadingElement> {\n as?: \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\";\n}\n\nexport function DialogTitle({\n as: Component = \"h2\",\n children,\n className = \"\",\n id,\n ...props\n}: DialogTitleProps) {\n const context = useDialogContext();\n const generatedId = useId();\n const finalId = id || context.titleId || generatedId;\n\n return (\n <Component\n id={finalId}\n className={`${getTypographyClasses(\"h3\")} font-semibold leading-none tracking-tight ${className}`}\n {...props}\n >\n {children}\n </Component>\n );\n}\n","\"use client\";\n\nimport { useId, type HTMLAttributes } from \"react\";\nimport { useDialogContext } from \"../../providers/DialogContext\";\nimport { getTypographyClasses } from \"../../tokens\";\n\nexport type DialogDescriptionProps = HTMLAttributes<HTMLParagraphElement>;\n\nexport function DialogDescription({\n children,\n className = \"\",\n id,\n ...props\n}: DialogDescriptionProps) {\n const context = useDialogContext();\n const generatedId = useId();\n const finalId = id || context.descriptionId || generatedId;\n\n return (\n <p\n id={finalId}\n className={`${getTypographyClasses(\"bodySmall\")} text-gray-500 ${className}`}\n {...props}\n >\n {children}\n </p>\n );\n}\n","\"use client\";\n\nimport { type HTMLAttributes, type ReactNode } from \"react\";\n\nexport interface DialogFooterProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport function DialogFooter({\n children,\n className = \"\",\n ...props\n}: DialogFooterProps) {\n return (\n <div\n className={`flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2 p-6 pt-4 ${className}`}\n {...props}\n >\n {children}\n </div>\n );\n}\n","\"use client\";\n\nimport { cloneElement, isValidElement, type ReactElement } from \"react\";\nimport { X } from \"lucide-react\";\nimport { useDialogContext } from \"../../providers/DialogContext\";\nimport Button from \"../../primitives/Button/Button\";\n\nexport interface DialogCloseProps {\n \"aria-label\"?: string;\n className?: string;\n asChild?: boolean;\n children?: ReactElement;\n}\n\nexport function DialogClose({\n \"aria-label\": ariaLabel = \"Close dialog\",\n className = \"\",\n asChild = false,\n children,\n}: DialogCloseProps) {\n const { onClose } = useDialogContext();\n\n if (asChild && isValidElement(children)) {\n return cloneElement(children, {\n onClick: (e: React.MouseEvent) => {\n onClose();\n if (children.props.onClick) {\n children.props.onClick(e);\n }\n },\n } as unknown);\n }\n\n return (\n <Button\n variant=\"iconOnly\"\n size=\"sm\"\n onClick={onClose}\n className={`absolute right-4 top-4 ${className}`}\n aria-label={ariaLabel}\n >\n <X className=\"h-4 w-4\" />\n </Button>\n );\n}\n","\"use client\";\n\nimport { useId, type ReactNode } from \"react\";\nimport { DialogProvider } from \"../../providers/DialogProvider\";\nimport { DialogTrigger } from \"./DialogTrigger\";\nimport { DialogContent } from \"./DialogContent\";\nimport { DialogHeader } from \"./DialogHeader\";\nimport { DialogTitle } from \"./DialogTitle\";\nimport { DialogDescription } from \"./DialogDescription\";\nimport { DialogFooter } from \"./DialogFooter\";\nimport { DialogClose } from \"./DialogClose\";\n\nexport interface DialogProps {\n children: ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\n/**\n * Dialog Component\n *\n * A flexible dialog component using compound components pattern.\n * Supports both controlled and uncontrolled modes.\n * Includes portal rendering, focus trap, and full accessibility.\n *\n * @example\n * ```tsx\n * // Uncontrolled\n * <Dialog>\n * <Dialog.Trigger>Open Dialog</Dialog.Trigger>\n * <Dialog.Content>\n * <Dialog.Header>\n * <Dialog.Title>Dialog Title</Dialog.Title>\n * <Dialog.Description>Dialog description</Dialog.Description>\n * </Dialog.Header>\n * <Dialog.Footer>\n * <Button onClick={handleClose}>Close</Button>\n * </Dialog.Footer>\n * </Dialog.Content>\n * </Dialog>\n *\n * // Controlled\n * <Dialog open={isOpen} onOpenChange={setIsOpen}>\n * <Dialog.Content>\n * <Dialog.Header>\n * <Dialog.Title>Dialog Title</Dialog.Title>\n * </Dialog.Header>\n * </Dialog.Content>\n * </Dialog>\n * ```\n */\nfunction Dialog({ children, open, defaultOpen, onOpenChange }: DialogProps) {\n const titleId = useId();\n const descriptionId = useId();\n\n return (\n <DialogProvider\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n titleId={titleId}\n descriptionId={descriptionId}\n >\n {children}\n </DialogProvider>\n );\n}\n\n// Compound components\nDialog.Trigger = DialogTrigger;\nDialog.Content = DialogContent;\nDialog.Header = DialogHeader;\nDialog.Title = DialogTitle;\nDialog.Description = DialogDescription;\nDialog.Footer = DialogFooter;\nDialog.Close = DialogClose;\n\nexport default Dialog;\n","\"use client\";\n\nimport { type ReactNode } from \"react\";\nimport Dialog from \"./Dialog\";\nimport { DialogContent } from \"./DialogContent\";\nimport { DialogHeader } from \"./DialogHeader\";\nimport { DialogFooter } from \"./DialogFooter\";\nimport Button from \"../../primitives/Button/Button\";\n\nexport interface AlertDialogProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n title: string;\n description?: string;\n confirmLabel?: string;\n cancelLabel?: string;\n variant?: \"default\" | \"destructive\";\n onConfirm?: () => void;\n onCancel?: () => void;\n children?: ReactNode;\n}\n\n/**\n * AlertDialog Component\n *\n * A specialized dialog for confirmations and alerts.\n * Built on top of Dialog with pre-configured layout.\n *\n * @example\n * ```tsx\n * <AlertDialog\n * open={isOpen}\n * onOpenChange={setIsOpen}\n * title=\"Delete Item\"\n * description=\"Are you sure? This action cannot be undone.\"\n * variant=\"destructive\"\n * onConfirm={handleDelete}\n * />\n * ```\n */\nexport function AlertDialog({\n open,\n defaultOpen,\n onOpenChange,\n title,\n description,\n confirmLabel = \"Confirm\",\n cancelLabel = \"Cancel\",\n variant = \"default\",\n onConfirm,\n onCancel,\n children,\n}: AlertDialogProps) {\n const handleConfirm = () => {\n onConfirm?.();\n onOpenChange?.(false);\n };\n\n const handleCancel = () => {\n onCancel?.();\n onOpenChange?.(false);\n };\n\n return (\n <Dialog open={open} defaultOpen={defaultOpen} onOpenChange={onOpenChange}>\n <DialogContent size=\"sm\" closeOnOverlayClick={false}>\n {children || (\n <>\n <DialogHeader>\n <Dialog.Title>{title}</Dialog.Title>\n {description && (\n <Dialog.Description>{description}</Dialog.Description>\n )}\n </DialogHeader>\n <DialogFooter>\n <Button variant=\"outline\" onClick={handleCancel}>\n {cancelLabel}\n </Button>\n <Button\n variant={variant === \"destructive\" ? \"error\" : \"primary\"}\n onClick={handleConfirm}\n >\n {confirmLabel}\n </Button>\n </DialogFooter>\n </>\n )}\n </DialogContent>\n </Dialog>\n );\n}\n\nexport default AlertDialog;\n","\"use client\";\n\nimport { useEffect, useState, type HTMLAttributes } from \"react\";\nimport {\n X,\n CheckCircle2,\n AlertCircle,\n AlertTriangle,\n Info,\n} from \"lucide-react\";\nimport { type Toast as ToastType } from \"../../providers/ToastContext\";\nimport {\n getColorClass,\n getRadiusClass,\n getShadowClass,\n getZIndexClass,\n} from \"../../tokens\";\nimport Button from \"../../primitives/Button/Button\";\n\nexport interface ToastProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n toast: ToastType;\n onDismiss: (id: string) => void;\n position?:\n | \"top-right\"\n | \"top-left\"\n | \"bottom-right\"\n | \"bottom-left\"\n | \"top-center\"\n | \"bottom-center\";\n}\n\nconst variantIcons = {\n success: CheckCircle2,\n error: AlertCircle,\n warning: AlertTriangle,\n info: Info,\n};\n\nconst variantBorderClass = {\n success: \"border-success\",\n error: \"border-error\",\n warning: \"border-warning\",\n info: \"border-info\",\n} as const;\n\nconst variantTextClass = {\n success: \"text-fg-success\",\n error: \"text-fg-error\",\n warning: \"text-fg-warning\",\n info: \"text-fg-info\",\n} as const;\n\nexport function Toast({\n toast,\n onDismiss,\n position = \"top-right\",\n className = \"\",\n style,\n ...props\n}: ToastProps) {\n const [isVisible, setIsVisible] = useState(false);\n const [isExiting, setIsExiting] = useState(false);\n const Icon = variantIcons[toast.variant];\n\n // Auto-dismiss\n useEffect(() => {\n if (toast.duration === undefined) return;\n\n setIsVisible(true);\n\n const timer = setTimeout(() => {\n setIsExiting(true);\n setTimeout(() => {\n onDismiss(toast.id);\n }, 300); // Animation duration\n }, toast.duration);\n\n return () => clearTimeout(timer);\n }, [toast.duration, toast.id, onDismiss]);\n\n // Show animation\n useEffect(() => {\n const timer = setTimeout(() => setIsVisible(true), 10);\n return () => clearTimeout(timer);\n }, []);\n\n const positionClasses = {\n \"top-right\": \"top-4 right-4\",\n \"top-left\": \"top-4 left-4\",\n \"bottom-right\": \"bottom-4 right-4\",\n \"bottom-left\": \"bottom-4 left-4\",\n \"top-center\": \"top-4 left-1/2 -translate-x-1/2\",\n \"bottom-center\": \"bottom-4 left-1/2 -translate-x-1/2\",\n };\n\n const handleDismiss = () => {\n setIsExiting(true);\n setTimeout(() => {\n onDismiss(toast.id);\n }, 300);\n };\n\n return (\n <div\n className={`\n fixed ${positionClasses[position]} ${getZIndexClass(\"toast\")}\n w-full max-w-sm\n transition-all duration-300 ease-in-out\n ${isVisible && !isExiting ? \"opacity-100 translate-y-0\" : \"opacity-0 -translate-y-2\"}\n ${isExiting ? \"opacity-0 translate-y-2\" : \"\"}\n ${className}\n `}\n style={style}\n role=\"alert\"\n aria-live={toast.variant === \"error\" ? \"assertive\" : \"polite\"}\n aria-atomic=\"true\"\n {...props}\n >\n <div\n className={`\n flex items-start gap-3\n p-4\n bg-white\n ${getRadiusClass(\"lg\")}\n ${getShadowClass(\"lg\")}\n border\n ${variantBorderClass[toast.variant]}\n `}\n >\n {/* Icon */}\n <div className={`flex-shrink-0 ${variantTextClass[toast.variant]}`}>\n <Icon className=\"h-5 w-5\" aria-hidden=\"true\" />\n </div>\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n <div\n className={`font-medium ${getColorClass(\"neutral\", \"dark\", \"text\")}`}\n >\n {toast.title}\n </div>\n {toast.description && (\n <div\n className={`mt-1 text-sm ${getColorClass(\"neutral\", \"DEFAULT\", \"text\")}`}\n >\n {toast.description}\n </div>\n )}\n {toast.action && (\n <div className=\"mt-3\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => {\n toast.action?.onClick();\n handleDismiss();\n }}\n >\n {toast.action.label}\n </Button>\n </div>\n )}\n </div>\n\n {/* Close Button */}\n <Button\n variant=\"iconOnly\"\n size=\"sm\"\n onClick={handleDismiss}\n className=\"flex-shrink-0\"\n aria-label=\"Dismiss notification\"\n >\n <X className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport { createPortal } from \"react-dom\";\nimport { useToastContext } from \"../../providers/ToastContext\";\nimport { getZIndexClass } from \"../../tokens/z-index\";\nimport { Toast } from \"./Toast\";\n\nexport interface ToastContainerProps {\n position?:\n | \"top-right\"\n | \"top-left\"\n | \"bottom-right\"\n | \"bottom-left\"\n | \"top-center\"\n | \"bottom-center\";\n maxToasts?: number;\n}\n\nexport function ToastContainer({\n position = \"top-right\",\n maxToasts,\n}: ToastContainerProps) {\n const { toasts, removeToast } = useToastContext();\n\n const toastsToShow = maxToasts ? toasts.slice(0, maxToasts) : toasts;\n\n if (toastsToShow.length === 0) return null;\n\n const container = (\n <div\n className={`fixed inset-0 pointer-events-none ${getZIndexClass(\"toast\")}`}\n aria-live=\"polite\"\n aria-label=\"Notifications\"\n >\n {toastsToShow.map((toast, index) => {\n const isTop = position.includes(\"top\");\n // Calculate offset: base 1rem + (index * 5rem for spacing)\n const offset = 1 + index * 5;\n\n return (\n <Toast\n key={toast.id}\n toast={toast}\n onDismiss={removeToast}\n position={position}\n style={{\n [isTop ? \"top\" : \"bottom\"]: `${offset}rem`,\n }}\n />\n );\n })}\n </div>\n );\n\n // Portal rendering\n if (typeof window !== \"undefined\") {\n return createPortal(container, document.body);\n }\n\n return container;\n}\n","\"use client\";\n\nimport { useCallback } from \"react\";\nimport {\n useToastContext,\n type ToastVariant,\n} from \"../../providers/ToastContext\";\n\nexport interface ToastOptions {\n title: string;\n description?: string;\n variant?: ToastVariant;\n duration?: number; // in milliseconds, undefined = no auto-dismiss\n action?: {\n label: string;\n onClick: () => void;\n };\n}\n\n/**\n * useToast Hook\n *\n * Hook for showing toast notifications.\n *\n * @example\n * ```tsx\n * const toast = useToast();\n *\n * toast.success('Success!', 'Operation completed successfully');\n * toast.error('Error!', 'Something went wrong');\n * toast.info('Info', 'Here is some information');\n * toast.warning('Warning', 'Please be careful');\n * ```\n */\nexport function useToast() {\n const { addToast, removeToast, clearAll } = useToastContext();\n\n const show = useCallback(\n (options: ToastOptions) => {\n return addToast({\n title: options.title,\n description: options.description,\n variant: options.variant || \"info\",\n duration: options.duration,\n action: options.action,\n });\n },\n [addToast],\n );\n\n const success = useCallback(\n (\n title: string,\n description?: string,\n options?: Omit<ToastOptions, \"title\" | \"description\" | \"variant\">,\n ) => {\n return show({ title, description, variant: \"success\", ...options });\n },\n [show],\n );\n\n const error = useCallback(\n (\n title: string,\n description?: string,\n options?: Omit<ToastOptions, \"title\" | \"description\" | \"variant\">,\n ) => {\n return show({ title, description, variant: \"error\", ...options });\n },\n [show],\n );\n\n const warning = useCallback(\n (\n title: string,\n description?: string,\n options?: Omit<ToastOptions, \"title\" | \"description\" | \"variant\">,\n ) => {\n return show({ title, description, variant: \"warning\", ...options });\n },\n [show],\n );\n\n const info = useCallback(\n (\n title: string,\n description?: string,\n options?: Omit<ToastOptions, \"title\" | \"description\" | \"variant\">,\n ) => {\n return show({ title, description, variant: \"info\", ...options });\n },\n [show],\n );\n\n const withUndo = useCallback(\n (\n title: string,\n description: string | undefined,\n onUndo: () => void,\n variant: ToastVariant = \"info\",\n duration?: number,\n ) => {\n return show({\n title,\n description,\n variant,\n duration,\n action: {\n label: \"Undo\",\n onClick: onUndo,\n },\n });\n },\n [show],\n );\n\n return {\n show,\n success,\n error,\n warning,\n info,\n withUndo,\n dismiss: removeToast,\n clearAll,\n };\n}\n","\"use client\";\n\nimport { useState, type ReactNode } from \"react\";\nimport { Check } from \"lucide-react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getAnimationClass } from \"../../tokens/animations\";\nimport Button from \"../../primitives/Button/Button\";\nimport Separator from \"../../primitives/Separator/Separator\";\n\nexport type StepperStatus = \"pending\" | \"active\" | \"completed\" | \"error\";\n\nexport interface StepperStep {\n id: string;\n title: string;\n description?: string;\n content: ReactNode;\n status?: StepperStatus;\n disabled?: boolean;\n}\n\nexport interface StepperProps {\n steps: StepperStep[];\n currentStep?: number;\n defaultCurrentStep?: number;\n onStepChange?: (stepIndex: number) => void;\n onComplete?: () => void;\n allowNavigation?: boolean;\n showStepNumbers?: boolean;\n orientation?: \"horizontal\" | \"vertical\";\n className?: string;\n}\n\n/**\n * Stepper Component\n *\n * A multi-step wizard component for guided workflows.\n * Supports validation, navigation, and completion callbacks.\n * Follows Atomic Design principles as an Organism component.\n *\n * @example\n * ```tsx\n * <Stepper\n * steps={[\n * { id: '1', title: 'Step 1', content: <div>Content 1</div> },\n * { id: '2', title: 'Step 2', content: <div>Content 2</div> },\n * ]}\n * onComplete={() => console.log('Completed!')}\n * />\n * ```\n */\nexport default function Stepper({\n steps,\n currentStep: controlledCurrentStep,\n defaultCurrentStep = 0,\n onStepChange,\n onComplete,\n allowNavigation = true,\n showStepNumbers = true,\n orientation = \"horizontal\",\n className = \"\",\n}: StepperProps) {\n const [internalCurrentStep, setInternalCurrentStep] =\n useState(defaultCurrentStep);\n\n const isControlled = controlledCurrentStep !== undefined;\n const currentStepIndex = isControlled\n ? controlledCurrentStep\n : internalCurrentStep;\n\n const getStepStatus = (index: number): StepperStatus => {\n if (index < currentStepIndex) return \"completed\";\n if (index === currentStepIndex) return \"active\";\n return \"pending\";\n };\n\n const handleNext = () => {\n if (currentStepIndex < steps.length - 1) {\n const nextStep = currentStepIndex + 1;\n if (!isControlled) {\n setInternalCurrentStep(nextStep);\n }\n onStepChange?.(nextStep);\n } else {\n onComplete?.();\n }\n };\n\n const handlePrevious = () => {\n if (currentStepIndex > 0) {\n const prevStep = currentStepIndex - 1;\n if (!isControlled) {\n setInternalCurrentStep(prevStep);\n }\n onStepChange?.(prevStep);\n }\n };\n\n const handleStepClick = (index: number) => {\n if (!allowNavigation) return;\n if (steps[index].disabled) return;\n\n if (!isControlled) {\n setInternalCurrentStep(index);\n }\n onStepChange?.(index);\n };\n\n const currentStep = steps[currentStepIndex];\n const isFirstStep = currentStepIndex === 0;\n const isLastStep = currentStepIndex === steps.length - 1;\n\n if (orientation === \"vertical\") {\n return (\n <div className={`flex gap-4 ${className}`}>\n {/* Steps List */}\n <div className=\"flex flex-col\">\n {steps.map((step, index) => {\n const status = step.status || getStepStatus(index);\n const isActive = index === currentStepIndex;\n\n return (\n <div key={step.id} className=\"flex items-start gap-3\">\n {/* Step Indicator */}\n <div className=\"flex flex-col items-center\">\n <button\n type=\"button\"\n onClick={() => handleStepClick(index)}\n disabled={!allowNavigation || step.disabled}\n className={`\n flex\n items-center\n justify-center\n w-10\n h-10\n ${getRadiusClass(\"full\")}\n border-2\n ${getAnimationClass(\"base\")}\n ${\n status === \"completed\"\n ? `${\"bg-success\"} ${\"border-success\"} text-white`\n : status === \"active\"\n ? `${\"bg-surface-brand\"} ${\"border-line-brand\"} text-white`\n : status === \"error\"\n ? `${\"bg-error\"} ${\"border-error\"} text-white`\n : \"bg-white border-gray-300 text-gray-400\"\n }\n ${!allowNavigation || step.disabled ? \"cursor-not-allowed opacity-50\" : \"cursor-pointer\"}\n `}\n >\n {status === \"completed\" ? (\n <Check className=\"h-5 w-5\" />\n ) : showStepNumbers ? (\n index + 1\n ) : null}\n </button>\n {index < steps.length - 1 && (\n <div\n className={`\n w-0.5\n h-12\n mt-2\n ${status === \"completed\" ? \"bg-success\" : \"bg-gray-300\"}\n `}\n />\n )}\n </div>\n\n {/* Step Content */}\n <div className=\"flex-1 pb-8\">\n <button\n type=\"button\"\n onClick={() => handleStepClick(index)}\n disabled={!allowNavigation || step.disabled}\n className={`\n text-left\n ${isActive ? \"font-semibold\" : \"font-medium\"}\n ${status === \"active\" ? \"text-fg-brand\" : \"text-gray-700\"}\n ${!allowNavigation || step.disabled ? \"cursor-not-allowed opacity-50\" : \"cursor-pointer\"}\n `}\n >\n {step.title}\n </button>\n {step.description && (\n <p className=\"text-sm text-gray-500 mt-1\">\n {step.description}\n </p>\n )}\n </div>\n </div>\n );\n })}\n </div>\n\n {/* Step Content */}\n <div className=\"flex-1\">\n <div\n className={`\n ${getSpacingClass(\"lg\", \"p\")}\n border\n border-gray-200\n ${getRadiusClass(\"lg\")}\n bg-white\n `}\n >\n {currentStep.content}\n </div>\n\n {/* Navigation */}\n <div\n className={`flex justify-between mt-4 ${getSpacingClass(\"base\", \"gap\")}`}\n >\n <Button\n variant=\"outline\"\n onClick={handlePrevious}\n disabled={isFirstStep}\n >\n Previous\n </Button>\n <Button variant=\"primary\" onClick={handleNext}>\n {isLastStep ? \"Complete\" : \"Next\"}\n </Button>\n </div>\n </div>\n </div>\n );\n }\n\n // Horizontal orientation\n return (\n <div className={`space-y-6 ${className}`}>\n {/* Steps List */}\n <div className=\"flex items-center\">\n {steps.map((step, index) => {\n const status = step.status || getStepStatus(index);\n const isActive = index === currentStepIndex;\n\n return (\n <div key={step.id} className=\"flex items-center flex-1\">\n <div className=\"flex flex-col items-center flex-1\">\n <button\n type=\"button\"\n onClick={() => handleStepClick(index)}\n disabled={!allowNavigation || step.disabled}\n className={`\n flex\n items-center\n justify-center\n w-10\n h-10\n ${getRadiusClass(\"full\")}\n border-2\n ${getAnimationClass(\"base\")}\n ${\n status === \"completed\"\n ? `${\"bg-success\"} ${\"border-success\"} text-white`\n : status === \"active\"\n ? `${\"bg-surface-brand\"} ${\"border-line-brand\"} text-white`\n : status === \"error\"\n ? `${\"bg-error\"} ${\"border-error\"} text-white`\n : \"bg-white border-gray-300 text-gray-400\"\n }\n ${!allowNavigation || step.disabled ? \"cursor-not-allowed opacity-50\" : \"cursor-pointer\"}\n `}\n >\n {status === \"completed\" ? (\n <Check className=\"h-5 w-5\" />\n ) : showStepNumbers ? (\n index + 1\n ) : null}\n </button>\n <div\n className={`mt-2 text-center ${getSpacingClass(\"sm\", \"px\")}`}\n >\n <p\n className={`\n text-sm\n font-medium\n ${isActive ? \"text-fg-brand\" : \"text-gray-600\"}\n `}\n >\n {step.title}\n </p>\n {step.description && (\n <p className=\"text-xs text-gray-500 mt-1\">\n {step.description}\n </p>\n )}\n </div>\n </div>\n {index < steps.length - 1 && (\n <div className={`flex-1 mx-2 ${getSpacingClass(\"base\", \"mx\")}`}>\n <Separator\n className={`\n ${status === \"completed\" ? \"border-success\" : \"border-gray-300\"}\n `}\n />\n </div>\n )}\n </div>\n );\n })}\n </div>\n\n {/* Step Content */}\n <div\n className={`\n ${getSpacingClass(\"lg\", \"p\")}\n border\n border-gray-200\n ${getRadiusClass(\"lg\")}\n bg-white\n `}\n >\n {currentStep.content}\n </div>\n\n {/* Navigation */}\n <div className={`flex justify-between ${getSpacingClass(\"base\", \"gap\")}`}>\n <Button\n variant=\"outline\"\n onClick={handlePrevious}\n disabled={isFirstStep}\n >\n Previous\n </Button>\n <Button variant=\"primary\" onClick={handleNext}>\n {isLastStep ? \"Complete\" : \"Next\"}\n </Button>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { CheckCircle2 } from \"lucide-react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getRadiusClass } from \"../../tokens/radius\";\n\nexport type TimelineOrientation = \"horizontal\" | \"vertical\";\n\nexport interface TimelineItem {\n id: string;\n title: string;\n description?: string;\n content?: ReactNode;\n timestamp?: string;\n icon?: ReactNode;\n status?: \"default\" | \"active\" | \"completed\" | \"error\";\n}\n\nexport interface TimelineProps {\n items: TimelineItem[];\n orientation?: TimelineOrientation;\n className?: string;\n}\n\n/**\n * Timeline Component\n *\n * A timeline component for displaying events in chronological order.\n * Supports horizontal and vertical orientations.\n * Follows Atomic Design principles as an Organism component.\n *\n * @example\n * ```tsx\n * <Timeline\n * items={[\n * { id: '1', title: 'Event 1', description: 'Description 1', timestamp: '2024-01-01' },\n * { id: '2', title: 'Event 2', description: 'Description 2', timestamp: '2024-01-02' },\n * ]}\n * />\n * ```\n */\nexport default function Timeline({\n items,\n orientation = \"vertical\",\n className = \"\",\n}: TimelineProps) {\n if (orientation === \"horizontal\") {\n return (\n <div className={`flex items-start ${className}`}>\n {items.map((item, index) => {\n const status =\n item.status ||\n (index === 0\n ? \"active\"\n : index < items.findIndex((i) => i.status === \"active\")\n ? \"completed\"\n : \"default\");\n const isLast = index === items.length - 1;\n\n return (\n <div key={item.id} className=\"flex items-start flex-1\">\n <div className=\"flex flex-col items-center flex-1\">\n {/* Icon/Indicator */}\n <div\n className={`\n flex\n items-center\n justify-center\n w-10\n h-10\n ${getRadiusClass(\"full\")}\n border-2\n ${\n status === \"completed\"\n ? `${\"bg-success\"} ${\"border-success\"} text-white`\n : status === \"active\"\n ? `${\"bg-surface-brand\"} ${\"border-line-brand\"} text-white`\n : status === \"error\"\n ? `${\"bg-error\"} ${\"border-error\"} text-white`\n : \"bg-white border-gray-300 text-gray-400\"\n }\n `}\n >\n {item.icon ||\n (status === \"completed\" ? (\n <CheckCircle2 className=\"h-4 w-4\" />\n ) : (\n index + 1\n ))}\n </div>\n\n {/* Connector Line */}\n {!isLast && (\n <div\n className={`\n w-full\n h-0.5\n mt-2\n ${status === \"completed\" ? \"bg-success\" : \"bg-gray-300\"}\n `}\n />\n )}\n\n {/* Content */}\n <div\n className={`mt-4 text-center ${getSpacingClass(\"base\", \"px\")}`}\n >\n {item.timestamp && (\n <p className=\"text-xs text-gray-500 mb-1\">\n {item.timestamp}\n </p>\n )}\n <h3 className=\"text-sm font-semibold text-gray-900\">\n {item.title}\n </h3>\n {item.description && (\n <p className=\"text-xs text-gray-600 mt-1\">\n {item.description}\n </p>\n )}\n {item.content && <div className=\"mt-2\">{item.content}</div>}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n );\n }\n\n // Vertical orientation\n return (\n <div className={`space-y-0 ${className}`}>\n {items.map((item, index) => {\n const status =\n item.status ||\n (index === 0\n ? \"active\"\n : index < items.findIndex((i) => i.status === \"active\")\n ? \"completed\"\n : \"default\");\n const isLast = index === items.length - 1;\n\n return (\n <div key={item.id} className=\"flex items-start gap-4\">\n {/* Timeline Line & Icon */}\n <div className=\"flex flex-col items-center\">\n <div\n className={`\n flex\n items-center\n justify-center\n w-10\n h-10\n ${getRadiusClass(\"full\")}\n border-2\n ${\n status === \"completed\"\n ? `${\"bg-success\"} ${\"border-success\"} text-white`\n : status === \"active\"\n ? `${\"bg-surface-brand\"} ${\"border-line-brand\"} text-white`\n : status === \"error\"\n ? `${\"bg-error\"} ${\"border-error\"} text-white`\n : \"bg-white border-gray-300 text-gray-400\"\n }\n `}\n >\n {item.icon ||\n (status === \"completed\" ? (\n <CheckCircle2 className=\"h-4 w-4\" />\n ) : (\n index + 1\n ))}\n </div>\n {!isLast && (\n <div\n className={`\n w-0.5\n flex-1\n min-h-16\n mt-2\n ${status === \"completed\" ? \"bg-success\" : \"bg-gray-300\"}\n `}\n />\n )}\n </div>\n\n {/* Content */}\n <div className=\"flex-1 pb-8\">\n {item.timestamp && (\n <p className=\"text-xs text-gray-500 mb-1\">{item.timestamp}</p>\n )}\n <h3\n className={`\n text-base\n font-semibold\n ${status === \"active\" ? \"text-fg-brand\" : \"text-gray-900\"}\n `}\n >\n {item.title}\n </h3>\n {item.description && (\n <p className=\"text-sm text-gray-600 mt-1\">{item.description}</p>\n )}\n {item.content && <div className=\"mt-3\">{item.content}</div>}\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n","\"use client\";\n\nimport {\n useState,\n useEffect,\n useRef,\n useCallback,\n type KeyboardEvent,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Search, Command } from \"lucide-react\";\nimport { getColorClass } from \"../../tokens/colors\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getShadowClass } from \"../../tokens/shadows\";\nimport { getZIndexClass } from \"../../tokens/z-index\";\nimport { getAnimationClass } from \"../../tokens/animations\";\nimport Input from \"../../primitives/Input/Input\";\n\nexport interface CommandItem {\n id: string;\n label: string;\n description?: string;\n icon?: React.ReactNode;\n keywords?: string[];\n group?: string;\n action: () => void;\n}\n\nexport interface CommandPaletteProps {\n items: CommandItem[];\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n trigger?: React.ReactNode;\n placeholder?: string;\n emptyMessage?: string;\n className?: string;\n}\n\n/**\n * CommandPalette Component\n *\n * A command palette component for quick command search and execution.\n * Supports keyboard navigation, grouping, and filtering.\n * Follows Atomic Design principles as an Organism component.\n *\n * @example\n * ```tsx\n * <CommandPalette\n * items={[\n * { id: '1', label: 'New File', action: () => console.log('New File') },\n * { id: '2', label: 'Save', action: () => console.log('Save') },\n * ]}\n * />\n * ```\n */\nexport default function CommandPalette({\n items,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n trigger,\n placeholder = \"Type a command or search...\",\n emptyMessage = \"No commands found\",\n className = \"\",\n}: CommandPaletteProps) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [selectedIndex, setSelectedIndex] = useState(0);\n const inputRef = useRef<HTMLInputElement>(null);\n const listRef = useRef<HTMLDivElement>(null);\n\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : internalOpen;\n\n // Filter items based on search query\n const filteredItems = items.filter((item) => {\n if (!searchQuery) return true;\n const query = searchQuery.toLowerCase();\n const matchesLabel = item.label.toLowerCase().includes(query);\n const matchesDescription = item.description?.toLowerCase().includes(query);\n const matchesKeywords = item.keywords?.some((keyword) =>\n keyword.toLowerCase().includes(query),\n );\n return matchesLabel || matchesDescription || matchesKeywords;\n });\n\n // Group items\n const groupedItems = filteredItems.reduce(\n (acc, item) => {\n const group = item.group || \"Other\";\n if (!acc[group]) {\n acc[group] = [];\n }\n acc[group].push(item);\n return acc;\n },\n {} as Record<string, CommandItem[]>,\n );\n\n const handleOpenChange = useCallback(\n (newOpen: boolean) => {\n if (!isControlled) {\n setInternalOpen(newOpen);\n }\n onOpenChange?.(newOpen);\n if (newOpen) {\n setSearchQuery(\"\");\n setSelectedIndex(0);\n setTimeout(() => inputRef.current?.focus(), 0);\n }\n },\n [isControlled, onOpenChange],\n );\n\n const handleSelect = (item: CommandItem) => {\n item.action();\n handleOpenChange(false);\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Escape\") {\n handleOpenChange(false);\n return;\n }\n\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n setSelectedIndex((prev) => Math.min(prev + 1, filteredItems.length - 1));\n return;\n }\n\n if (e.key === \"ArrowUp\") {\n e.preventDefault();\n setSelectedIndex((prev) => Math.max(prev - 1, 0));\n return;\n }\n\n if (e.key === \"Enter\") {\n e.preventDefault();\n if (filteredItems[selectedIndex]) {\n handleSelect(filteredItems[selectedIndex]);\n }\n return;\n }\n };\n\n // Scroll selected item into view\n useEffect(() => {\n if (listRef.current && selectedIndex >= 0) {\n const selectedElement = listRef.current.querySelector(\n `[data-index=\"${selectedIndex}\"]`,\n );\n if (\n selectedElement &&\n typeof selectedElement.scrollIntoView === \"function\"\n ) {\n selectedElement.scrollIntoView({\n block: \"nearest\",\n behavior: \"smooth\",\n });\n }\n }\n }, [selectedIndex]);\n\n // Reset selected index when search changes\n useEffect(() => {\n setSelectedIndex(0);\n }, [searchQuery]);\n\n // Keyboard shortcut (Cmd/Ctrl + K)\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key === \"k\") {\n e.preventDefault();\n handleOpenChange(!isOpen);\n }\n };\n\n document.addEventListener(\n \"keydown\",\n handleKeyDown as unknown as EventListener,\n );\n return () =>\n document.removeEventListener(\n \"keydown\",\n handleKeyDown as unknown as EventListener,\n );\n }, [isOpen, handleOpenChange]);\n\n const commandPaletteContent = isOpen ? (\n <div\n className={`\n fixed\n inset-0\n ${getZIndexClass(\"modal-backdrop\")}\n bg-black\n bg-opacity-50\n flex\n items-start\n justify-center\n pt-[20vh]\n ${getAnimationClass(\"base\")}\n `}\n onClick={() => handleOpenChange(false)}\n >\n <div\n className={`\n w-full\n max-w-2xl\n ${getSpacingClass(\"base\", \"mx\")}\n bg-white\n ${getRadiusClass(\"lg\")}\n ${getShadowClass(\"xl\")}\n ${getZIndexClass(\"modal\")}\n ${getAnimationClass(\"base\")}\n ${className}\n `}\n onClick={(e) => e.stopPropagation()}\n >\n {/* Search Input */}\n <div\n className={`\n flex\n items-center\n gap-3\n ${getSpacingClass(\"base\", \"p\")}\n border-b\n border-gray-200\n `}\n >\n <Search\n className={`h-5 w-5 ${getColorClass(\"neutral\", \"DEFAULT\", \"text\")}`}\n />\n <Input\n ref={inputRef}\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n className=\"flex-1 border-0 focus:ring-0\"\n autoFocus\n />\n <div\n className={`\n flex\n items-center\n gap-1\n ${getSpacingClass(\"sm\", \"px\")}\n ${getSpacingClass(\"xs\", \"py\")}\n ${getRadiusClass(\"sm\")}\n bg-gray-100\n text-xs\n text-gray-500\n `}\n >\n <Command className=\"h-3 w-3\" />\n <span>K</span>\n </div>\n </div>\n\n {/* Results */}\n <div\n ref={listRef}\n className={`\n max-h-96\n overflow-y-auto\n ${getSpacingClass(\"sm\", \"py\")}\n `}\n >\n {Object.keys(groupedItems).length === 0 ? (\n <div\n className={`\n ${getSpacingClass(\"lg\", \"p\")}\n text-center\n text-sm\n ${getColorClass(\"neutral\", \"DEFAULT\", \"text\")}\n `}\n >\n {emptyMessage}\n </div>\n ) : (\n Object.entries(groupedItems).map(([group, groupItems]) => (\n <div key={group}>\n {group !== \"Other\" && (\n <div\n className={`\n ${getSpacingClass(\"sm\", \"px\")}\n ${getSpacingClass(\"xs\", \"py\")}\n text-xs\n font-semibold\n ${getColorClass(\"neutral\", \"DEFAULT\", \"text\")}\n uppercase\n tracking-wider\n `}\n >\n {group}\n </div>\n )}\n {groupItems.map((item, _index) => {\n const globalIndex = filteredItems.indexOf(item);\n const isSelected = globalIndex === selectedIndex;\n\n return (\n <button\n key={item.id}\n type=\"button\"\n data-index={globalIndex}\n onClick={() => handleSelect(item)}\n className={`\n w-full\n flex\n items-center\n gap-3\n ${getSpacingClass(\"base\", \"px\")}\n ${getSpacingClass(\"md\", \"py\")}\n text-left\n ${getAnimationClass(\"base\")}\n ${isSelected ? \"bg-indigo-400\" : \"hover:bg-gray-50\"}\n `}\n >\n {item.icon && (\n <div\n className={`\n ${\n isSelected\n ? \"text-fg-brand\"\n : getColorClass(\"neutral\", \"DEFAULT\", \"text\")\n }\n `}\n >\n {item.icon}\n </div>\n )}\n <div className=\"flex-1 min-w-0\">\n <div\n className={`\n text-sm\n font-medium\n ${isSelected ? \"text-fg-brand\" : \"text-gray-900\"}\n `}\n >\n {item.label}\n </div>\n {item.description && (\n <div\n className={`text-xs text-gray-500 ${getSpacingClass(\"0.5\", \"mt\")}`}\n >\n {item.description}\n </div>\n )}\n </div>\n </button>\n );\n })}\n </div>\n ))\n )}\n </div>\n </div>\n </div>\n ) : null;\n\n return (\n <>\n {trigger ? (\n <div onClick={() => handleOpenChange(true)}>{trigger}</div>\n ) : null}\n {typeof window !== \"undefined\" &&\n createPortal(commandPaletteContent, document.body)}\n </>\n );\n}\n","\"use client\";\n\nimport { useState, useMemo, type ReactNode } from \"react\";\nimport { Download, ArrowUpDown } from \"lucide-react\";\nimport Table, { type TableColumn } from \"../Table/Table\";\nimport Button from \"../../primitives/Button/Button\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport type { TableAction } from \"../Table/TableActions/TableActions\";\n\nexport type DataGridColumn<T = unknown> = TableColumn<T> & {\n groupable?: boolean;\n exportable?: boolean;\n defaultWidth?: number;\n minWidth?: number;\n maxWidth?: number;\n};\n\nexport interface DataGridGroup {\n column: string;\n expanded?: boolean;\n}\n\nexport interface DataGridProps<\n T extends Record<string, unknown> = Record<string, unknown>,\n> {\n columns: DataGridColumn<T>[];\n data: T[];\n loading?: boolean;\n\n // Sorting\n onSort?: (columnKey: string, direction: \"asc\" | \"desc\") => void;\n sortColumn?: string;\n sortDirection?: \"asc\" | \"desc\";\n multiSort?: boolean;\n\n // Grouping\n groups?: DataGridGroup[];\n onGroupChange?: (groups: DataGridGroup[]) => void;\n groupable?: boolean;\n\n // Column Management\n resizable?: boolean;\n reorderable?: boolean;\n onColumnReorder?: (columns: DataGridColumn<T>[]) => void;\n columnWidths?: Record<string, number>;\n onColumnResize?: (columnKey: string, width: number) => void;\n\n // Selection\n selectable?: boolean;\n selectedRows?: string[];\n onSelectionChange?: (selected: string[]) => void;\n rowId?: (row: T) => string;\n\n // Export\n exportable?: boolean;\n onExport?: (format: \"csv\" | \"xlsx\" | \"json\") => void;\n exportFormats?: (\"csv\" | \"xlsx\" | \"json\")[];\n\n // Pagination\n pagination?: {\n page: number;\n pageSize: number;\n total: number;\n onPageChange: (page: number) => void;\n onPageSizeChange: (size: number) => void;\n pageSizeOptions?: number[];\n };\n\n // Filters\n filters?: {\n config: unknown[];\n onFilter: (filters: Record<string, unknown>) => void;\n initialValues?: Record<string, unknown>;\n };\n\n // Actions\n actions?: (row: T) => TableAction<T>[];\n toolbarActions?: ReactNode;\n\n // Virtual Scrolling\n virtualScrolling?: boolean;\n virtualScrollingOptions?: {\n itemHeight?: number;\n containerHeight?: number;\n overscan?: number;\n };\n\n // Empty State\n emptyMessage?: string;\n emptyStateTitle?: string;\n emptyStateMessage?: string;\n emptyStateIllustration?: ReactNode;\n emptyStateAction?: ReactNode;\n\n className?: string;\n}\n\n/**\n * DataGrid Component\n *\n * An advanced data grid component with sorting, filtering, grouping, column management, and export.\n * Extends the Table component with additional enterprise features.\n * Follows Atomic Design principles as an Organism component.\n *\n * @example\n * ```tsx\n * <DataGrid\n * columns={columns}\n * data={data}\n * groupable\n * exportable\n * onExport={(format) => console.log('Export as', format)}\n * />\n * ```\n */\nexport default function DataGrid<\n T extends Record<string, unknown> = Record<string, unknown>,\n>({\n columns,\n data,\n loading = false,\n onSort,\n sortColumn,\n sortDirection,\n multiSort: _multiSort = false,\n groups = [],\n onGroupChange,\n groupable = false,\n resizable = true,\n reorderable: _reorderable = false,\n onColumnReorder: _onColumnReorder,\n columnWidths,\n onColumnResize,\n selectable = false,\n selectedRows,\n onSelectionChange,\n rowId,\n exportable = false,\n onExport,\n exportFormats = [\"csv\", \"xlsx\", \"json\"],\n pagination,\n filters,\n actions,\n toolbarActions,\n virtualScrolling = false,\n virtualScrollingOptions,\n emptyMessage,\n emptyStateTitle,\n emptyStateMessage,\n emptyStateIllustration,\n emptyStateAction,\n className = \"\",\n}: DataGridProps<T>) {\n const [internalGroups, setInternalGroups] = useState<DataGridGroup[]>(groups);\n const [internalColumnWidths, setInternalColumnWidths] = useState<\n Record<string, number>\n >(columnWidths || {});\n\n // Convert DataGrid columns to Table columns\n const tableColumns: TableColumn<T>[] = useMemo(() => {\n return columns.map((col) => ({\n ...col,\n width: internalColumnWidths[col.key] || col.defaultWidth,\n }));\n }, [columns, internalColumnWidths]);\n\n const _handleGroupToggle = (columnKey: string) => {\n const newGroups = internalGroups.map((g) =>\n g.column === columnKey ? { ...g, expanded: !g.expanded } : g,\n );\n setInternalGroups(newGroups);\n onGroupChange?.(newGroups);\n };\n\n const handleExport = (format: \"csv\" | \"xlsx\" | \"json\") => {\n if (onExport) {\n onExport(format);\n } else {\n // Default export implementation\n if (format === \"csv\") {\n exportToCSV(data, columns);\n } else if (format === \"json\") {\n exportToJSON(data);\n }\n }\n };\n\n const exportToCSV = (data: T[], cols: DataGridColumn<T>[]) => {\n const headers = cols\n .filter((c) => c.exportable !== false)\n .map((c) => c.label || c.key);\n const rows = data.map((row) =>\n cols\n .filter((c) => c.exportable !== false)\n .map((c) => {\n const value = row[c.key];\n return typeof value === \"string\" && value.includes(\",\")\n ? `\"${value}\"`\n : value;\n }),\n );\n\n const csv = [headers.join(\",\"), ...rows.map((r) => r.join(\",\"))].join(\"\\n\");\n const blob = new Blob([csv], { type: \"text/csv\" });\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = `export-${Date.now()}.csv`;\n a.click();\n URL.revokeObjectURL(url);\n };\n\n const exportToJSON = (data: T[]) => {\n const json = JSON.stringify(data, null, 2);\n const blob = new Blob([json], { type: \"application/json\" });\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = `export-${Date.now()}.json`;\n a.click();\n URL.revokeObjectURL(url);\n };\n\n return (\n <div className={`space-y-4 ${className}`}>\n {/* Toolbar */}\n {(exportable || groupable || toolbarActions) && (\n <div\n className={`\n flex\n items-center\n justify-between\n ${getSpacingClass(\"base\", \"p\")}\n bg-white\n border\n border-gray-200\n rounded-lg\n `}\n >\n <div className=\"flex items-center gap-2\">\n {groupable && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n leftIcon={<ArrowUpDown className=\"h-4 w-4\" />}\n >\n Group\n </Button>\n )}\n </div>\n\n <div className=\"flex items-center gap-2\">\n {toolbarActions}\n {exportable && (\n <div className=\"flex items-center gap-1\">\n {exportFormats.map((format) => (\n <Button\n key={format}\n variant=\"outline\"\n size=\"sm\"\n leftIcon={<Download className=\"h-4 w-4\" />}\n onClick={() => handleExport(format)}\n >\n {format.toUpperCase()}\n </Button>\n ))}\n </div>\n )}\n </div>\n </div>\n )}\n\n {/* Table */}\n <Table\n columns={tableColumns}\n data={data}\n loading={loading}\n onSort={onSort}\n sortColumn={sortColumn}\n sortDirection={sortDirection}\n pagination={pagination}\n filters={filters}\n selectable={selectable}\n selectedRows={selectedRows}\n onSelectionChange={onSelectionChange}\n rowId={rowId}\n actions={actions}\n resizable={resizable}\n columnWidths={internalColumnWidths}\n onColumnResize={(key, width) => {\n setInternalColumnWidths((prev) => ({ ...prev, [key]: width }));\n onColumnResize?.(key, width);\n }}\n virtualScrolling={virtualScrolling}\n virtualScrollingOptions={virtualScrollingOptions}\n emptyMessage={emptyMessage}\n emptyStateTitle={emptyStateTitle}\n emptyStateMessage={emptyStateMessage}\n emptyStateIllustration={emptyStateIllustration}\n emptyStateAction={emptyStateAction}\n />\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useState, useMemo } from \"react\";\nimport { Table } from \"../../components\";\nimport { Pagination, SearchInput } from \"../../components\";\nimport { Container } from \"../../layouts/Container/Container\";\nimport { Stack } from \"../../layouts/Stack/Stack\";\nimport type { TableColumn } from \"../../components/Table/TableTypes\";\n\n// Extended TableColumn type for DataTablePattern (supports accessor and header for backward compatibility)\nexport interface DataTableColumn<T = unknown>\n extends Omit<TableColumn<T>, \"key\" | \"label\"> {\n key?: keyof T | string;\n label?: string;\n // Legacy support\n accessor?: keyof T | string | ((row: T) => unknown);\n header?: string;\n}\n\nexport interface DataTablePatternProps<T = unknown> {\n /**\n * Table columns configuration\n * Supports both TableColumn format (key, label) and legacy format (accessor, header)\n */\n columns: DataTableColumn<T>[];\n /**\n * Table data rows\n */\n data: T[];\n /**\n * Search placeholder text\n * @default \"Search...\"\n */\n searchPlaceholder?: string;\n /**\n * Enable search functionality\n * @default true\n */\n enableSearch?: boolean;\n /**\n * Items per page\n * @default 10\n */\n itemsPerPage?: number;\n /**\n * Enable pagination\n * @default true\n */\n enablePagination?: boolean;\n /**\n * Action buttons to display above the table\n */\n actions?: React.ReactNode;\n /**\n * Callback when row is clicked\n */\n onRowClick?: (row: T, index: number) => void;\n /**\n * Loading state\n */\n loading?: boolean;\n /**\n * Empty state message\n */\n emptyMessage?: string;\n}\n\n/**\n * DataTablePattern - A complete data table pattern combining Table, Pagination, Search, and Actions\n *\n * This pattern solves the common UX problem of displaying searchable, paginated data tables\n * with actions. It combines multiple components into a cohesive solution.\n *\n * @example\n * ```tsx\n * <DataTablePattern\n * columns={columns}\n * data={data}\n * enableSearch\n * enablePagination\n * actions={<Button>Export</Button>}\n * />\n * ```\n */\nexport function DataTablePattern<\n T extends Record<string, unknown> = Record<string, unknown>,\n>({\n columns,\n data,\n searchPlaceholder = \"Search...\",\n enableSearch = true,\n itemsPerPage = 10,\n enablePagination = true,\n actions,\n onRowClick,\n loading = false,\n emptyMessage = \"No data available\",\n}: DataTablePatternProps<T>) {\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [currentPage, setCurrentPage] = useState(1);\n\n // Convert columns to Table format (key/label from accessor/header if needed)\n const tableColumns: TableColumn<T>[] = useMemo(() => {\n return columns.map((column) => {\n // If using legacy format (accessor/header), convert to key/label\n if (column.accessor || column.header) {\n const key =\n column.key ||\n (typeof column.accessor === \"string\"\n ? column.accessor\n : String(column.accessor));\n const label = column.label || column.header || \"\";\n return {\n ...column,\n key: key as keyof T | string,\n label,\n } as TableColumn<T>;\n }\n // Otherwise use as-is (already in TableColumn format)\n return column as TableColumn<T>;\n });\n }, [columns]);\n\n // Filter data based on search query\n const filteredData = useMemo(() => {\n if (!searchQuery.trim()) return data;\n\n const query = searchQuery.toLowerCase();\n return data.filter((row) => {\n return tableColumns.some((column) => {\n const value = (row as Record<string, unknown>)[String(column.key)];\n return String(value).toLowerCase().includes(query);\n });\n });\n }, [data, searchQuery, tableColumns]);\n\n // Paginate filtered data\n const paginatedData = useMemo(() => {\n if (!enablePagination) return filteredData;\n\n const startIndex = (currentPage - 1) * itemsPerPage;\n const endIndex = startIndex + itemsPerPage;\n return filteredData.slice(startIndex, endIndex);\n }, [filteredData, currentPage, itemsPerPage, enablePagination]);\n\n const totalPages = enablePagination\n ? Math.ceil(filteredData.length / itemsPerPage)\n : 1;\n\n const handlePageChange = (page: number) => {\n setCurrentPage(page);\n };\n\n const handleSearchChange = (value: string) => {\n setSearchQuery(value);\n setCurrentPage(1); // Reset to first page on search\n };\n\n return (\n <Container maxWidth=\"full\" paddingX=\"base\" paddingY=\"base\">\n <Stack spacing=\"md\">\n {/* Header with Search and Actions */}\n <div className=\"flex items-center justify-between gap-4\">\n {enableSearch && (\n <div className=\"flex-1 max-w-md\">\n <SearchInput\n placeholder={searchPlaceholder}\n value={searchQuery}\n onSearch={handleSearchChange}\n />\n </div>\n )}\n {actions && <div className=\"flex gap-2\">{actions}</div>}\n </div>\n\n {/* Table */}\n <Table\n columns={tableColumns}\n data={paginatedData}\n loading={loading}\n emptyMessage={emptyMessage}\n onRowClick={\n onRowClick\n ? (row) => {\n // Find the index of the row in filteredData (not paginated) for accurate index\n const globalIndex = filteredData.findIndex((r) => r === row);\n onRowClick(\n row,\n globalIndex >= 0\n ? globalIndex\n : paginatedData.findIndex((r) => r === row),\n );\n }\n : undefined\n }\n />\n\n {/* Pagination */}\n {enablePagination && totalPages > 1 && (\n <div className=\"flex justify-center\">\n <Pagination\n currentPage={currentPage}\n totalPages={totalPages}\n onPageChange={handlePageChange}\n />\n </div>\n )}\n\n {/* Results count */}\n {enableSearch && (\n <div className=\"text-sm text-gray-600 text-center\">\n Showing {paginatedData.length} of {filteredData.length} results\n </div>\n )}\n </Stack>\n </Container>\n );\n}\n","import React, { useState } from \"react\";\nimport { Stepper } from \"../../components\";\nimport { Container } from \"../../layouts/Container/Container\";\nimport { Stack } from \"../../layouts/Stack/Stack\";\nimport { Button } from \"../../primitives\";\nimport type { StepperStep } from \"../../components\";\n\nexport interface FormWizardStep extends StepperStep {\n /**\n * Form fields for this step\n */\n fields: React.ReactNode;\n /**\n * Validation function for this step\n */\n validate?: () => boolean | Promise<boolean>;\n /**\n * Submit handler for this step\n */\n onSubmit?: (data: unknown) => void | Promise<void>;\n}\n\nexport interface FormWizardPatternProps {\n /**\n * Steps configuration\n */\n steps: FormWizardStep[];\n /**\n * Callback when wizard is completed\n */\n onComplete?: (data: Record<string, unknown>) => void;\n /**\n * Allow navigation to previous steps\n * @default true\n */\n allowBackNavigation?: boolean;\n /**\n * Show step numbers\n * @default true\n */\n showStepNumbers?: boolean;\n}\n\n/**\n * FormWizardPattern - A complete form wizard pattern combining Stepper and Form\n *\n * This pattern solves the common UX problem of multi-step forms with validation.\n * It combines Stepper for navigation and Form for data collection.\n *\n * @example\n * ```tsx\n * <FormWizardPattern\n * steps={steps}\n * onComplete={(data) => console.log(data)}\n * />\n * ```\n */\nexport function FormWizardPattern({\n steps,\n onComplete,\n allowBackNavigation = true,\n showStepNumbers: _showStepNumbers = true,\n}: FormWizardPatternProps) {\n const [currentStep, setCurrentStep] = useState(0);\n const [formData, _setFormData] = useState<Record<string, unknown>>({});\n const [errors, setErrors] = useState<Record<number, boolean>>({});\n\n const handleNext = async () => {\n const step = steps[currentStep];\n\n // Validate current step if validation function exists\n if (step.validate) {\n const isValid = await step.validate();\n if (!isValid) {\n setErrors({ ...errors, [currentStep]: true });\n return;\n }\n }\n\n // Clear error for current step\n setErrors({ ...errors, [currentStep]: false });\n\n // Submit current step if handler exists\n if (step.onSubmit) {\n await step.onSubmit(formData);\n }\n\n // Move to next step\n if (currentStep < steps.length - 1) {\n setCurrentStep(currentStep + 1);\n } else {\n // Wizard completed\n if (onComplete) {\n onComplete(formData);\n }\n }\n };\n\n const handleBack = () => {\n if (currentStep > 0 && allowBackNavigation) {\n setCurrentStep(currentStep - 1);\n // Clear error when going back\n setErrors({ ...errors, [currentStep - 1]: false });\n }\n };\n\n const handleStepClick = (stepIndex: number) => {\n if (allowBackNavigation && stepIndex < currentStep) {\n setCurrentStep(stepIndex);\n }\n };\n\n const currentStepData = steps[currentStep];\n const isLastStep = currentStep === steps.length - 1;\n const hasError = errors[currentStep] === true;\n\n return (\n <Container maxWidth=\"lg\" paddingX=\"base\" paddingY=\"lg\">\n <Stack spacing=\"lg\">\n {/* Stepper */}\n <Stepper\n steps={steps.map((step, index) => ({\n id: step.id,\n title: step.title,\n content: step.content,\n description: step.description,\n status:\n index < currentStep\n ? \"completed\"\n : index === currentStep\n ? hasError\n ? \"error\"\n : \"active\"\n : \"pending\",\n }))}\n currentStep={currentStep}\n onStepChange={handleStepClick}\n allowNavigation={allowBackNavigation}\n />\n\n {/* Form Content */}\n <div className=\"bg-white rounded-lg border p-6\">\n <Stack spacing=\"md\">\n <div>\n <h2 className=\"text-2xl font-semibold\">\n {currentStepData.title}\n </h2>\n {currentStepData.description && (\n <p className=\"text-gray-600 mt-1\">\n {currentStepData.description}\n </p>\n )}\n </div>\n\n {hasError && (\n <div className=\"bg-red-50 border border-red-200 rounded p-3\">\n <p className=\"text-sm text-red-800\">\n Please fix the errors before proceeding.\n </p>\n </div>\n )}\n\n <div className=\"min-h-48\">{currentStepData.fields}</div>\n\n {/* Navigation Buttons */}\n <div className=\"flex justify-between pt-4 border-t\">\n <Button\n variant=\"outline\"\n onClick={handleBack}\n disabled={currentStep === 0}\n >\n Back\n </Button>\n <Button variant=\"primary\" onClick={handleNext}>\n {isLastStep ? \"Complete\" : \"Next\"}\n </Button>\n </div>\n </Stack>\n </div>\n </Stack>\n </Container>\n );\n}\n","import React, { useState, useMemo } from \"react\";\nimport { SearchInput, Card } from \"../../components\";\nimport { Button, Text } from \"../../primitives\";\nimport { Container } from \"../../layouts/Container/Container\";\nimport { Stack } from \"../../layouts/Stack/Stack\";\n\nexport interface FilterOption {\n id: string;\n label: string;\n value: unknown;\n}\n\nexport interface FilterConfig {\n id: string;\n label: string;\n type: \"select\" | \"multiselect\" | \"date\" | \"range\";\n options?: FilterOption[];\n placeholder?: string;\n}\n\nexport interface SearchAndFilterPatternProps<T = unknown> {\n /**\n * Items to search and filter\n */\n items: T[];\n /**\n * Search function - receives search query and item, returns boolean\n */\n searchFn?: (query: string, item: T) => boolean;\n /**\n * Filter function - receives filter config and item, returns boolean\n */\n filterFn?: (filters: Record<string, unknown>, item: T) => boolean;\n /**\n * Render function for each item\n */\n renderItem: (item: T, index: number) => React.ReactNode;\n /**\n * Filter configurations\n */\n filters?: FilterConfig[];\n /**\n * Search placeholder\n * @default \"Search...\"\n */\n searchPlaceholder?: string;\n /**\n * Empty state message\n */\n emptyMessage?: string;\n /**\n * Show results count\n * @default true\n */\n showResultsCount?: boolean;\n}\n\n/**\n * SearchAndFilterPattern - A complete search and filter pattern\n *\n * This pattern solves the common UX problem of searching and filtering lists of items.\n * It combines SearchInput with filter controls and results display.\n *\n * @example\n * ```tsx\n * <SearchAndFilterPattern\n * items={products}\n * searchFn={(query, item) => item.name.includes(query)}\n * renderItem={(item) => <ProductCard product={item} />}\n * />\n * ```\n */\nexport function SearchAndFilterPattern<T = unknown>({\n items,\n searchFn,\n filterFn,\n renderItem,\n filters = [],\n searchPlaceholder = \"Search...\",\n emptyMessage = \"No results found\",\n showResultsCount = true,\n}: SearchAndFilterPatternProps<T>) {\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [activeFilters, setActiveFilters] = useState<Record<string, unknown>>(\n {},\n );\n\n // Filter items based on search and filters\n const filteredItems = useMemo(() => {\n let result = items;\n\n // Apply search\n if (searchQuery.trim() && searchFn) {\n const query = searchQuery.toLowerCase();\n result = result.filter((item) => searchFn(query, item));\n }\n\n // Apply filters\n if (filterFn && Object.keys(activeFilters).length > 0) {\n result = result.filter((item) => filterFn(activeFilters, item));\n }\n\n return result;\n }, [items, searchQuery, activeFilters, searchFn, filterFn]);\n\n const handleFilterChange = (filterId: string, value: unknown) => {\n setActiveFilters((prev) => ({\n ...prev,\n [filterId]: value,\n }));\n };\n\n const clearFilters = () => {\n setActiveFilters({});\n setSearchQuery(\"\");\n };\n\n const hasActiveFilters =\n searchQuery.trim().length > 0 || Object.keys(activeFilters).length > 0;\n\n return (\n <Container maxWidth=\"full\" paddingX=\"base\" paddingY=\"base\">\n <Stack spacing=\"md\">\n {/* Search and Filters */}\n <Card padding=\"medium\">\n <Stack spacing=\"md\">\n {/* Search */}\n <div>\n <SearchInput\n placeholder={searchPlaceholder}\n value={searchQuery}\n onSearch={setSearchQuery}\n />\n </div>\n\n {/* Filters */}\n {filters.length > 0 && (\n <div className=\"flex flex-wrap gap-2\">\n {filters.map((filter) => (\n <div key={filter.id} className=\"flex items-center gap-2\">\n <Text className=\"text-gray-600 text-sm\">\n {filter.label}:\n </Text>\n <select\n className=\"px-3 py-1 border rounded text-sm\"\n value={String(activeFilters[filter.id] || \"\")}\n onChange={(e) =>\n handleFilterChange(\n filter.id,\n e.target.value || undefined,\n )\n }\n >\n <option value=\"\">All</option>\n {filter.options?.map((option) => (\n <option\n key={option.id}\n value={String(option.value || \"\")}\n >\n {option.label}\n </option>\n ))}\n </select>\n </div>\n ))}\n </div>\n )}\n\n {/* Clear Filters */}\n {hasActiveFilters && (\n <div>\n <Button variant=\"outline\" size=\"sm\" onClick={clearFilters}>\n Clear Filters\n </Button>\n </div>\n )}\n </Stack>\n </Card>\n\n {/* Results Count */}\n {showResultsCount && (\n <div className=\"text-sm text-gray-600\">\n Showing {filteredItems.length} of {items.length} results\n {hasActiveFilters && \" (filtered)\"}\n </div>\n )}\n\n {/* Results */}\n {filteredItems.length === 0 ? (\n <Card padding=\"large\">\n <div className=\"text-center text-gray-500\">\n <Text>{emptyMessage}</Text>\n </div>\n </Card>\n ) : (\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4\">\n {filteredItems.map((item, index) => (\n <div key={index}>{renderItem(item, index)}</div>\n ))}\n </div>\n )}\n </Stack>\n </Container>\n );\n}\n","import React from \"react\";\nimport { SideNavbar } from \"../../components\";\nimport { Container } from \"../../layouts/Container/Container\";\n\nexport interface DashboardLayoutProps {\n /**\n * Sidebar content - use SideNavbar.Navbar and SideNavbar.Sidebar subcomponents\n */\n sidebar?: React.ReactNode;\n /**\n * Main content area\n */\n children: React.ReactNode;\n /**\n * Header content\n */\n header?: React.ReactNode;\n /**\n * Footer content\n */\n footer?: React.ReactNode;\n /**\n * Sidebar collapsed by default\n * @default false\n */\n defaultCollapsed?: boolean;\n /**\n * SideNavbar props\n */\n sidebarProps?: Omit<React.ComponentProps<typeof SideNavbar>, \"children\">;\n}\n\n/**\n * DashboardLayout - A complete dashboard page layout\n *\n * Combines SideNavbar, Container, and Stack to create a full dashboard structure.\n * This template provides a complete page layout with sensible defaults.\n *\n * @example\n * ```tsx\n * <DashboardLayout\n * sidebar={\n * <>\n * <SideNavbar.Navbar>\n * <SideNavbar.Navbar.Item icon={<Home />} label=\"Home\" />\n * </SideNavbar.Navbar>\n * <SideNavbar.Sidebar>\n * <SideNavbar.Sidebar.Content>Content</SideNavbar.Sidebar.Content>\n * </SideNavbar.Sidebar>\n * </>\n * }\n * header={<Header />}\n * >\n * <MainContent />\n * </DashboardLayout>\n * ```\n */\nexport function DashboardLayout({\n sidebar,\n children,\n header,\n footer,\n defaultCollapsed = false,\n sidebarProps,\n}: DashboardLayoutProps) {\n return (\n <div className=\"flex h-screen overflow-hidden\">\n {/* Sidebar */}\n {sidebar && (\n <SideNavbar defaultCollapsed={defaultCollapsed} {...sidebarProps}>\n {sidebar}\n </SideNavbar>\n )}\n\n {/* Main Content Area */}\n <div className=\"flex-1 flex flex-col overflow-hidden\">\n {/* Header */}\n {header && (\n <header className=\"border-b bg-white\">\n <Container maxWidth=\"full\" paddingX=\"base\" paddingY=\"sm\">\n {header}\n </Container>\n </header>\n )}\n\n {/* Main Content */}\n <main className=\"flex-1 overflow-y-auto\">\n <Container maxWidth=\"xl\" paddingX=\"base\" paddingY=\"base\">\n {children}\n </Container>\n </main>\n\n {/* Footer */}\n {footer && (\n <footer className=\"border-t bg-white\">\n <Container maxWidth=\"full\" paddingX=\"base\" paddingY=\"sm\">\n {footer}\n </Container>\n </footer>\n )}\n </div>\n </div>\n );\n}\n"],"names":["r","t","f","o","clsx","concatArrays","array1","array2","combinedArray","i","createClassValidatorObject","classGroupId","validator","createClassPartObject","nextPart","validators","CLASS_PART_SEPARATOR","EMPTY_CONFLICTS","ARBITRARY_PROPERTY_PREFIX","createClassGroupUtils","config","classMap","createClassMap","conflictingClassGroups","conflictingClassGroupModifiers","className","getGroupIdForArbitraryProperty","classParts","startIndex","getGroupRecursive","hasPostfixModifier","modifierConflicts","baseConflicts","classPartObject","currentClassPart","nextClassPartObject","result","classRest","validatorsLength","validatorObj","content","colonIndex","property","theme","classGroups","processClassGroups","group","processClassesRecursively","classGroup","len","classDefinition","processClassDefinition","processStringDefinition","processFunctionDefinition","processObjectDefinition","classPartObjectToEdit","getPart","isThemeGetter","entries","key","value","path","current","parts","part","next","func","createLruCache","maxCacheSize","cacheSize","cache","previousCache","update","IMPORTANT_MODIFIER","MODIFIER_SEPARATOR","EMPTY_MODIFIERS","createResultObject","modifiers","hasImportantModifier","baseClassName","maybePostfixModifierPosition","isExternal","createParseClassName","prefix","experimentalParseClassName","parseClassName","bracketDepth","parenDepth","modifierStart","postfixModifierPosition","index","currentCharacter","baseClassNameWithImportantModifier","fullPrefix","parseClassNameOriginal","createSortModifiers","modifierWeights","mod","currentSegment","modifier","isArbitrary","isOrderSensitive","createConfigUtils","__spreadValues","SPLIT_CLASSES_REGEX","mergeClassList","classList","configUtils","getClassGroupId","getConflictingClassGroupIds","sortModifiers","classGroupsInConflict","classNames","originalClassName","variantModifier","modifierId","classId","conflictGroups","twJoin","classLists","argument","resolvedValue","string","toValue","mix","k","createTailwindMerge","createConfigFirst","createConfigRest","cacheGet","cacheSet","functionToCall","initTailwindMerge","previousConfig","createConfigCurrent","tailwindMerge","cachedResult","args","fallbackThemeArr","fromTheme","themeGetter","arbitraryValueRegex","arbitraryVariableRegex","fractionRegex","tshirtUnitRegex","lengthUnitRegex","colorFunctionRegex","shadowRegex","imageRegex","isFraction","isNumber","isInteger","isPercent","isTshirtSize","isAny","isLengthOnly","isNever","isShadow","isImage","isAnyNonArbitrary","isArbitraryValue","isArbitraryVariable","isArbitrarySize","getIsArbitraryValue","isLabelSize","isArbitraryLength","isLabelLength","isArbitraryNumber","isLabelNumber","isArbitraryPosition","isLabelPosition","isArbitraryImage","isLabelImage","isArbitraryShadow","isLabelShadow","isArbitraryVariableLength","getIsArbitraryVariable","isArbitraryVariableFamilyName","isLabelFamilyName","isArbitraryVariablePosition","isArbitraryVariableSize","isArbitraryVariableImage","isArbitraryVariableShadow","testLabel","testValue","shouldMatchNoLabel","label","getDefaultConfig","themeColor","themeFont","themeText","themeFontWeight","themeTracking","themeLeading","themeBreakpoint","themeContainer","themeSpacing","themeRadius","themeShadow","themeInsetShadow","themeTextShadow","themeDropShadow","themeBlur","themePerspective","themeAspect","themeEase","themeAnimate","scaleBreak","scalePosition","scalePositionWithArbitrary","scaleOverflow","scaleOverscroll","scaleUnambiguousSpacing","scaleInset","scaleGridTemplateColsRows","scaleGridColRowStartAndEnd","scaleGridColRowStartOrEnd","scaleGridAutoColsRows","scaleAlignPrimaryAxis","scaleAlignSecondaryAxis","scaleMargin","scaleSizing","scaleColor","scaleBgPosition","scaleBgRepeat","scaleBgSize","scaleGradientStopPosition","scaleRadius","scaleBorderWidth","scaleLineStyle","scaleBlendMode","scaleMaskImagePosition","scaleBlur","scaleRotate","scaleScale","scaleSkew","scaleTranslate","twMerge","cn","inputs","falsyToString","cx","cva","base","props","_config_compoundVariants","variants","defaultVariants","getVariantClassNames","variant","variantProp","defaultVariantProp","variantKey","propsWithoutUndefined","acc","param","getCompoundVariantClassNames","_a","cvClass","cvClassName","compoundVariantOptions","__objRest","variantFn","cvaLib","variantClasses","REACT_ELEMENT_TYPE","REACT_FRAGMENT_TYPE","jsxProd","type","maybeKey","propName","reactJsxRuntime_production","getComponentNameFromType","REACT_CLIENT_REFERENCE","REACT_PROFILER_TYPE","REACT_STRICT_MODE_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_ACTIVITY_TYPE","REACT_PORTAL_TYPE","REACT_CONTEXT_TYPE","REACT_CONSUMER_TYPE","REACT_FORWARD_REF_TYPE","innerType","REACT_MEMO_TYPE","REACT_LAZY_TYPE","x","testStringCoercion","checkKeyStringCoercion","JSCompiler_inline_result","e","JSCompiler_temp_const","JSCompiler_inline_result$jscomp$0","getTaskName","name","getOwner","dispatcher","ReactSharedInternals","UnknownOwner","hasValidKey","hasOwnProperty","getter","defineKeyPropWarningGetter","displayName","warnAboutAccessingKey","specialPropKeyWarningShown","elementRefGetterWithDeprecationWarning","componentName","didWarnAboutElementRef","ReactElement","owner","debugStack","debugTask","refProp","jsxDEVImpl","isStaticChildren","children","isArrayImpl","validateChildKeys","keys","didWarnAboutKeySpread","node","isValidElement","object","React","require$$0","createTask","callStackForError","unknownOwnerDebugStack","unknownOwnerDebugTask","reactJsxRuntime_development","trackActualOwner","jsxRuntimeModule","require$$1","ToastContext","createContext","useToastContext","context","useContext","useToastContextOptional","DialogContext","useDialogContext","useDialogContextOptional","DialogProvider","controlledOpen","defaultOpen","onOpenChange","titleId","descriptionId","uncontrolledOpen","setUncontrolledOpen","useState","previousActiveElement","useRef","isOpen","setIsOpen","newOpen","useEffect","timer","contextValue","toKebabCase","toCamelCase","match","p1","p2","toPascalCase","camelCase","mergeClasses","classes","array","hasA11yProp","prop","defaultAttributes","Icon","forwardRef","ref","_b","color","size","strokeWidth","absoluteStrokeWidth","iconNode","rest","createElement","__spreadProps","tag","attrs","createLucideIcon","iconName","Component","__iconNode","ArrowUpDown","Calendar","Check","ChevronDown","ChevronLeft","ChevronRight","CircleAlert","CircleCheck","Clock","Command","Download","EllipsisVertical","EyeOff","Eye","File","Funnel","GripVertical","Info","LoaderCircle","Menu","PanelLeftClose","PanelLeftOpen","Search","Star","TriangleAlert","Upload","X","Card","memo","padding","onClick","ariaLabel","ariaLabelledBy","cardVariants","getRadiusClass","getColorClass","getSpacingClass","isInteractive","useMemo","role","tabIndex","handleKeyDown","useCallback","jsx","FormContext","useFormContext","useFormContextOptional","FormProvider","form","loading","Form","onSubmit","error","success","onSubmitData","onSubmitError","formProps","handleSubmit","data","__async","err","errors","jsxs","getTypographySizeFromFontSize","onSubmitSimple","_","simpleProps","FormField","rules","register","watch","fieldRegister","Label","getTypographyWeightFromFontWeight","fieldName","ErrorMessage","isCheckBoxInput","element","isDateObject","isNullOrUndefined","isObjectType","isObject","isPlainObject","tempObject","prototypeCopy","isWeb","cloneObject","isFileListInstance","isArray","copy","isKey","isUndefined","val","compact","stringToPath","input","get","defaultValue","isBoolean","isFunction","set","tempPath","length","lastIndex","newValue","objValue","VALIDATION_MODE","INPUT_VALIDATION_RULES","HookFormControlContext","useFormControlContext","useIsomorphicLayoutEffect","isString","HookFormContext","appendErrors","validateAllFieldCriteria","message","convertToArrayPayload","isEmptyObject","isFileInput","isHTMLElement","isRadioInput","baseGet","updatePath","isEmptyArray","obj","unset","paths","childObject","isRegex","getValidationModes","mode","isWatched","_names","isBlurEvent","watchName","iterateFieldsByAction","fields","action","fieldsNames","abortEarly","field","_f","currentField","updateFieldArrayRootError","fieldArrayErrors","getValidateError","getValueAndMessage","validationData","validateField","disabledFieldNames","formValues","shouldUseNativeValidation","isFieldArray","refs","required","maxLength","minLength","min","max","pattern","validate","valueAsNumber","mount","inputValue","inputRef","setCustomValidity","isEmpty","appendErrorsCurry","getMinMaxMessage","exceedMax","maxLengthMessage","minLengthMessage","maxType","minType","exceedMin","maxOutput","minOutput","valueNumber","valueDate","convertTimeToDate","time","isTime","isWeek","maxLengthOutput","minLengthOutput","patternValue","validateError","validationResult","generateId","d","c","getFocusFieldName","options","appendAt","fillEmptyArray","insert","moveArrayAt","from","to","prependAt","removeAtIndexes","indexes","temp","removeArrayAt","a","b","swapArrayAt","indexA","indexB","updateAt","fieldValues","useFieldArray","formControl","control","keyName","shouldUnregister","setFields","ids","_actioned","values","fieldArrayName","updateValues","updatedFieldArrayValues","append","appendValue","prepend","prependValue","remove","insert$1","insertValue","swap","move","updateValue","item","replace","existingError","updateMounted","useFormFieldArray","Breadcrumb","items","separator","baseClasses","getTypographySize","isLast","getTypographyWeight","getHoverColorClass","Pagination","currentPage","totalPages","onPageChange","totalItems","itemsPerPage","showPageInfo","handlePrevious","handleNext","handlePageClick","page","getPageNumbers","pages","startItem","endItem","Button","pageNum","isActive","EmptyState","title","actionLabel","onAction","illustration","showAction","showIllustration","Text","Dropdown","trigger","align","_variant","activeIndex","setActiveIndex","dropdownRef","triggerRef","menuRef","itemRefs","menuId","triggerId","handleClickOutside","event","firstEnabledIndex","enabledItems","currentEnabledIndex","nextIndex","prevIndex","firstIndex","_c","_d","handleItemClick","menuElement","typedHandleKeyDown","handleTriggerClick","handleTriggerKeyDown","alignClasses","triggerWithProps","Fragment","getShadowClass","itemClasses","getFocusColorClass","el","DatePickerContext","useDatePickerContext","DatePickerProvider","controlledValue","onValueChange","minDate","maxDate","disabledDates","locale","getInitialDate","getInitialRange","uncontrolledDate","setUncontrolledDate","uncontrolledRange","setUncontrolledRange","selectedDate","selectedRange","date","range","formatDate","format","year","month","day","parseDate","isoMatch","usMatch","euMatch","DatePickerInput","placeholder","showCalendarButton","onFocus","onDateChange","setInputValue","_isFocused","setIsFocused","handleInputChange","handleInputBlur","handleCalendarClick","Input","getDaysInMonth","getFirstDayOfMonth","isSameDay","date1","date2","isSameMonth","isDateInRange","start","end","isDateDisabled","WEEKDAYS","MONTHS","DatePickerCalendar","controlledMonth","onMonthChange","onRangeChange","currentMonth","setCurrentMonth","calendarRef","focusedDate","setFocusedDate","daysInMonth","firstDay","days","handleDateClick","currentRange","handlePreviousMonth","newMonth","handleNextMonth","newDate","isSelected","isInRange","isDisabled","isToday","isFocused","DatePickerComponent","containerRef","popupRef","target","clickedInsideContainer","clickedInsidePopup","handleEscape","DatePickerPopup","externalPopupRef","internalPopupRef","position","setPosition","containerRect","popup","getZIndexClass","createPortal","DatePicker","TabsContext","useTabsContext","useTabsContextOptional","TabsProvider","orientation","activationMode","uncontrolledValue","setUncontrolledValue","isControlled","handleValueChange","TabsList","listRef","list","triggers","currentIndex","displayClass","orientationClasses","TabsTrigger","disabled","onKeyDown","activeValue","_orientation","handleClick","handleFocus","TabsContent","forceMount","TabsComponent","providerProps","Tabs","SearchInput","onSearch","onClear","showClearButton","debounceMs","onChange","internalValue","setInternalValue","debounceTimer","setDebounceTimer","currentValue","hasValue","handleChange","handleClear","syntheticEvent","AutocompleteOption","option","isHighlighted","onSelect","AutocompleteList","highlightedIndex","emptyMessage","showSelectAll","allSelected","onSelectAll","onDeselectAll","rect","listContent","Autocomplete","filterOptions","inputClassName","setHighlightedIndex","searchValue","setSearchValue","debounceTimerRef","filteredOptions","hasOptions","handleSelect","prev","opt","shouldShowList","Loader2","MultiSelect","maxSelected","selectedValues","selectedOptions","filtered","handleToggleOption","newValues","v","handleSelectAll","allValues","handleDeselectAll","filteredValues","handleRemoveChip","primaryBorderColor","primaryRingColor","Chip","Rating","readOnly","allowHalf","showValue","onHover","icon","emptyIcon","hoverValue","setHoverValue","displayValue","sizeConfig","handleMouseEnter","handleMouseLeave","renderStar","starValue","isHalf","isFilled","starClasses","getAnimationClass","CustomIcon","CustomEmptyIcon","FileUpload","accept","multiple","maxSize","maxFiles","onFilesChange","onFileRemove","showPreview","showProgress","description","files","setFiles","isDragging","setIsDragging","fileInputRef","formatFileSize","bytes","sizes","validateFile","file","processFiles","fileList","fileArray","newFiles","fileId","fileUpload","reader","handleFiles","updatedFiles","limitedFiles","handleDrop","droppedFiles","processedFiles","handleDragOver","handleDragLeave","handleFileInput","handleRemove","AlertCircle","Progress","CheckCircle2","Popover","placement","showCloseButton","closeOnClickOutside","closeOnEscape","triggerClassName","contentClassName","internalOpen","setInternalOpen","popoverRef","updatePosition","triggerRect","popoverRect","scrollY","scrollX","top","left","handleResize","handleScroll","handleOpenChange","handleClose","popoverContent","TimePicker","helperText","hours","setHours","minutes","setMinutes","amPm","setAmPm","parseTime","timeStr","h","m","formatTime","ap","displayHours","parsed","handleHoursChange","newHours","validHours","handleMinutesChange","newMinutes","validMinutes","handleAmPmToggle","newAmPm","incrementHours","decrementHours","incrementMinutes","decrementMinutes","timePickerContent","ColorPicker","_format","presets","showInput","rgb","setRgb","hexToRgb","hex","rgbToHex","g","rgbValue","handleHexChange","handleRgbChange","component","newRgb","colorPresets","colorPickerContent","DrawerContext","DrawerProvider","useDrawerContext","DrawerContent","closeDrawer","closeOnOverlayClick","sizeClasses","positionClasses","drawerContent","DrawerHeader","DrawerFooter","Drawer","MenuContext","MenuProvider","useMenuContext","MenuTrigger","asChild","MenuContent","closeMenu","contentRef","contentRect","menuContent","MenuItem","rightIcon","hasSubmenu","MenuSeparator","Accordion","getInitialOpen","openItems","setOpenItems","handleToggle","itemId","newOpenItems","id","getTypographyClasses","HeaderContext","HeaderProvider","controlledMobileMenuOpen","onMobileMenuChange","defaultMobileMenuOpen","internalMobileMenuOpen","setInternalMobileMenuOpen","isMobileMenuOpen","setMobileMenuOpen","open","toggleMobileMenu","openMobileMenu","closeMobileMenu","useHeaderContext","HeaderLogo","NavLink","HeaderNavigation","HeaderActions","HeaderHamburger","closeIcon","MenuIcon","CloseIcon","HeaderMobileMenu","maxWidthClasses","Container","maxWidth","paddingX","paddingY","center","Stack","spacing","justify","direction","spacingClass","justifyClasses","headerVariants","Header","sticky","bare","navigationVariants","NavigationWithPathname","providedPathname","currentPathname","nextNavigation","usePathname","itemsWithActive","navLinkVariant","Navigation","pageHeaderVariants","PageHeader","breadcrumb","actions","LoginBox","onForgotPasswordClick","Modal","onClose","footer","modalRef","overlayClasses","modalClasses","modalContent","TableContext","useTableContext","useTableContextOptional","TableProvider","columns","explicitMode","controlledPage","controlledPageSize","externalTotal","onPageSizeChange","defaultPageSize","_pageSizeOptions","controlledSortColumn","controlledSortDirection","onSort","defaultSortColumn","defaultSortDirection","filters","controlledFilterValues","onFilter","initialFilterValues","selectable","controlledSelectedRows","onSelectionChange","rowId","emptyStateTitle","emptyStateMessage","emptyStateIllustration","emptyStateAction","onRowClick","resizable","columnWidths","onColumnResize","virtualScrolling","_virtualScrollingOptions","paginationMode","isPaginationControlled","internalPage","setInternalPage","internalPageSize","setInternalPageSize","pageSize","total","isSortingControlled","internalSortColumn","setInternalSortColumn","internalSortDirection","setInternalSortDirection","sortColumn","sortDirection","isFilterControlled","internalFilterValues","setInternalFilterValues","filterValues","isSelectionControlled","internalSelectedRows","setInternalSelectedRows","selectedRows","filteredData","row","filter","rowValue","sortedData","sorted","aValue","bValue","comparison","paginatedData","endIndex","getRowId","isAllSelected","isIndeterminate","selectedCount","setPage","newPage","setPageSize","newSize","setSorting","column","setFilters","newFilters","setSelection","selected","toggleRowSelection","newSelected","toggleSelectAll","allIds","internalColumnWidths","setInternalColumnWidths","isColumnWidthsControlled","finalColumnWidths","setColumnWidth","columnKey","width","TableHeaderCell","onResize","minWidth","sortState","resizeHandleRef","cellRef","resizeStartRef","handleSort","newDirection","isSortable","handleResizeStart","currentWidth","handleMouseMove","moveEvent","deltaX","newWidth","clampedWidth","handleMouseUp","isSorted","TableHeaderRow","selectionState","Checkbox","TableHeader","TableCell","TableActions","dropdownItems","MoreVertical","rowActions","TableActionsComponent","TableRow","rowIndex","style","TableEmptyState","useVirtualScrolling","itemHeight","containerHeight","overscan","enabled","scrollOffset","setScrollOffset","virtualItems","visibleStart","visibleEnd","totalHeight","container","offset","TableBody","virtualScrollingOptions","totalColumns","virtualScrollingResult","rowsToRender","colIndex","Skeleton","TableFilters","initialValues","showClearAll","setFilterValues","isExpanded","setIsExpanded","hasActiveFilters","handleFilterChange","handleClearAll","clearedFilters","handleClearFilter","activeFilterCount","Filter","Select","filterState","TableFiltersComponent","TablePagination","pageSizeOptions","showPageSizeSelector","handleFirst","handleLast","paginationState","TablePaginationComponent","TableComponent","restProps","hasChildren","convertSimplifiedToProviderProps","pagination","useColumnResizing","defaultWidths","setColumnWidths","isResizing","setIsResizing","resizingColumn","setResizingColumn","resizeStateRef","resetColumnWidths","startResize","startX","startWidth","currentX","endResize","handleMouseMoveRef","handleMouseUpRef","SideNavbarThemeContext","useSideNavbarTheme","useSideNavbarThemeRequired","defaultThemeValues","SideNavbarThemeProvider","navigationWidth","contentWidth","animationDuration","animationEasing","SideNavbarConfigContext","useSideNavbarConfig","useSideNavbarConfigRequired","defaultConfigValues","SideNavbarConfigProvider","snapPoints","responsive","mobileBreakpoint","mobileVariant","overlayBackdrop","persistState","persistWidth","storageKey","keyboardShortcut","enableKeyboardShortcut","SideNavbarStateContext","useSideNavbarState","useSideNavbarStateRequired","parseWidthToPixels","numericValue","validateWidthBounds","clampWidth","MODIFIER_KEYS","parseKeyboardShortcut","shortcut","invalidResult","normalized","mainKey","hasCtrl","hasAlt","formatKeyboardShortcut","platform","useResize","initialWidth","snapThreshold","onWidthChange","clampedInitialWidth","setWidthState","startXRef","startWidthRef","setWidth","constrainedWidth","closestSnap","closest","snap","distanceToSnap","distanceToClosest","useResponsiveSidebar","onMobileChange","viewportWidth","setViewportWidth","isMobile","setIsMobile","newIsMobile","initialIsMobile","resizeObserver","useFocusManagement","restoreFocus","initialFocusRef","previousActiveElementRef","firstFocusable","focusableElements","lastFocusable","useKeyboardShortcut","targetKey","ctrl","shift","alt","meta","onTrigger","preventDefault","keyMatch","ctrlMatch","shiftMatch","altMatch","metaMatch","modifierMatch","SideNavbarStateProvider","defaultCollapsed","controlledCollapsed","onCollapseChange","exclusiveGroups","sidebarRef","getInitialCollapsedState","stored","getInitialWidth","parsedWidth","internalCollapsed","setInternalCollapsed","groupStates","setGroupStates","mobile","resizeWidth","setResizeWidth","collapsed","setCollapsed","toggle","toggleGroup","groupId","isCurrentlyOpen","newStates","allGroupIds","setGroupCollapsed","isCollapsed","SideNavbarProvider","SidebarSlotContext","useSidebarSlot","useSidebarSlotRequired","SidebarSlotProvider","defaultSlot","activeSlot","setActiveSlot","slotsRef","registerSlot","unregisterSlot","SideNavbarToggleContext","useSideNavbarToggleContext","useSideNavbarToggleContextRequired","SideNavbarResizeHandle","delta","SideNavbarBackdrop","visibleOverride","onBackdropClick","isOverlayMode","shouldShow","iconSizeClasses","tooltipPositionMap","SideNavbarToggle","expandIcon","collapseIcon","showTooltip","tooltipPositionOverride","keyboardShortcutOverride","enableKeyboardShortcutOverride","_navigationWidth","_contentWidth","_minWidth","renderIcon","defaultAriaLabel","tooltipPosition","tooltipContent","offsetStyle","edgeFollowingStyle","button","Z_INDEX_TOKENS","floatingButton","Tooltip","SideNavbarRoot","state","toggleContext","_setCollapsed","navWidthValue","contentWidthValue","displayedWidth","isMounted","setIsMounted","isMobileOverlay","shouldUseFixed","positionClass","NavbarContext","useNavbar","useNavbarRequired","NavbarToggle","SIZE_CLASSES","BADGE_VARIANTS","LABEL_STYLES","NavbarItem","labelMode","showLabel","active","badge","badgeVariant","href","activeItem","setActiveItem","contextLabelMode","effectiveLabelMode","labelElement","elementStyle","NavbarSeparator","NavbarGroup","collapsible","setIsCollapsed","Navbar","showMainToggleProp","mainTogglePositionProp","showToggle","togglePosition","expandedWidth","rootState","rootTheme","rootConfig","navbarRef","isHovered","setIsHovered","showMainToggle","shouldExpand","navbarWidth","SidebarContext","useSidebar","useSidebarRequired","SidebarHeader","subtitle","showBorder","registerHeader","unregisterHeader","SidebarContent","scrollable","setScrollPosition","paddingClass","scrollClasses","scrollbarStyles","SIDEBAR_TOKENS","SidebarFooter","registerFooter","unregisterFooter","SidebarGroup","sidebarCollapsed","activeGroup","setActiveGroup","hasInitialized","handleHeaderClick","Collapsible","SidebarSlot","SidebarSlotContent","fallback","slots","Sidebar","scrollPosition","hasHeader","setHasHeader","hasFooter","setHasFooter","totalWidth","navWidth","sidebarWidth","SideNavbar","rootProps","toggleContextValue","useGroupState","defaultStates","persist","getInitialStates","resetGroups","useSideNavbarNavigation","slotContext","navigate","slotId","useSideNavbarContent","sidebarContext","useSideNavbarCombined","DialogTrigger","cloneElement","DialogContent","overlayRef","firstElement","handleTab","lastElement","handleOverlayClick","dialogContent","DialogHeader","DialogTitle","generatedId","useId","finalId","DialogDescription","DialogFooter","DialogClose","Dialog","AlertDialog","confirmLabel","cancelLabel","onConfirm","onCancel","handleConfirm","handleCancel","variantIcons","AlertTriangle","variantBorderClass","variantTextClass","Toast","toast","onDismiss","isVisible","setIsVisible","isExiting","setIsExiting","handleDismiss","ToastContainer","maxToasts","toasts","removeToast","toastsToShow","isTop","useToast","addToast","clearAll","show","warning","info","withUndo","onUndo","duration","Stepper","steps","controlledCurrentStep","defaultCurrentStep","onStepChange","onComplete","allowNavigation","showStepNumbers","internalCurrentStep","setInternalCurrentStep","currentStepIndex","getStepStatus","nextStep","prevStep","handleStepClick","currentStep","isFirstStep","isLastStep","step","status","Separator","Timeline","CommandPalette","searchQuery","setSearchQuery","selectedIndex","setSelectedIndex","filteredItems","query","matchesLabel","matchesDescription","matchesKeywords","keyword","groupedItems","selectedElement","commandPaletteContent","groupItems","_index","globalIndex","DataGrid","_multiSort","groups","onGroupChange","groupable","_reorderable","_onColumnReorder","exportable","onExport","exportFormats","toolbarActions","internalGroups","setInternalGroups","tableColumns","col","handleExport","exportToCSV","exportToJSON","cols","headers","rows","csv","blob","url","json","Table","DataTablePattern","searchPlaceholder","enableSearch","enablePagination","setCurrentPage","handlePageChange","handleSearchChange","FormWizardPattern","allowBackNavigation","_showStepNumbers","setCurrentStep","formData","_setFormData","setErrors","handleBack","stepIndex","currentStepData","hasError","SearchAndFilterPattern","searchFn","filterFn","renderItem","showResultsCount","activeFilters","setActiveFilters","filterId","clearFilters","DashboardLayout","sidebar","header","sidebarProps"],"mappings":"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","x_google_ignoreList":[0,1,3,5,6,7,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,47]}
|