@scalably/ui 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../node_modules/clsx/dist/clsx.mjs","../node_modules/tailwind-merge/src/lib/class-group-utils.ts","../node_modules/tailwind-merge/src/lib/lru-cache.ts","../node_modules/tailwind-merge/src/lib/parse-class-name.ts","../node_modules/tailwind-merge/src/lib/config-utils.ts","../node_modules/tailwind-merge/src/lib/merge-classlist.ts","../node_modules/tailwind-merge/src/lib/tw-join.ts","../node_modules/tailwind-merge/src/lib/create-tailwind-merge.ts","../node_modules/tailwind-merge/src/lib/from-theme.ts","../node_modules/tailwind-merge/src/lib/validators.ts","../node_modules/tailwind-merge/src/lib/default-config.ts","../node_modules/tailwind-merge/src/lib/tw-merge.ts","../src/lib/utils.ts","../src/hooks/useScrollThreshold.ts","../src/icons/CalendarIcon.tsx","../src/icons/CheckIcon.tsx","../src/icons/CloseIcon.tsx","../src/icons/DropdownIcon.tsx","../src/icons/DropUpIcon.tsx","../src/icons/ErrorIcon.tsx","../src/icons/FileIcon.tsx","../src/icons/FileUploadIcon.tsx","../src/icons/GridIcon.tsx","../src/icons/ImageIcon.tsx","../src/icons/ImageUploadIcon.tsx","../src/icons/IndeterminateIcon.tsx","../src/icons/InfoIcon.tsx","../src/icons/ListIcon.tsx","../src/icons/MinusIcon.tsx","../src/icons/MultipleSelectionIcon.tsx","../src/icons/PlusIcon.tsx","../src/icons/SearchIcon.tsx","../src/icons/SuccessIcon.tsx","../src/icons/TickIcon.tsx","../src/icons/ToFirstIcon.tsx","../src/icons/ToLastIcon.tsx","../src/icons/ToNextIcon.tsx","../src/icons/ToPreviousIcon.tsx","../src/icons/VideoIcon.tsx","../src/icons/VideoUploadIcon.tsx","../src/icons/WarnIcon.tsx","../src/components/BackToTop/BackToTop.tsx","../src/components/Badge/StatusBadge.tsx","../src/components/Button/Button.tsx","../src/components/Divider/Divider.tsx","../src/hooks/useControllableState.ts","../src/components/Button/MultipleSelectionButton.tsx","../src/components/CheckBox/CheckBox.tsx","../src/components/CheckBox/CheckboxGroup.tsx","../src/components/Input/Input.tsx","../src/components/Input/QuantityInput.tsx","../src/hooks/useMergeRefs.ts","../src/components/Input/SearchInput.tsx","../src/helpers/date.ts","../src/hooks/useDateInputPopover.ts","../src/hooks/useClickOutside.ts","../src/components/TimePicker/TimePicker.tsx","../src/contexts/datePickerContext.ts","../src/hooks/useCalendarKeyboardNavigation.ts","../src/components/DatePicker/Calendar.tsx","../src/components/DatePicker/MonthYearDropdown.tsx","../src/components/DatePicker/DatePicker.tsx","../src/components/DatePicker/DateInput.tsx","../src/validations/file.ts","../src/components/FileUpload/FileUpload.tsx","../src/components/Form/Form.tsx","../src/hooks/usePagination.ts","../src/components/Pagination/Pagination.tsx","../src/components/Radio/Radio.tsx","../src/components/Radio/RadioGroup.tsx","../src/hooks/useDropdownLogic.ts","../src/components/Select/DisplayValue.tsx","../src/components/Select/DropdownMenu.tsx","../src/components/Select/Select.tsx","../src/components/Tabs/Tabs.tsx","../src/components/Toast/Toast.tsx","../src/components/Toast/ToastContainer.tsx","../src/components/Tooltip/Tooltip.tsx","../src/components/ViewToggle/ViewToggle.tsx","../src/providers/ScalablyUIProvider.tsx","../src/helpers/form.ts"],"names":["r","f","n","clsx","createClassGroupUtils","config","classMap","createClassMap","conflictingClassGroups","conflictingClassGroupModifiers","getClassGroupId","className","classParts","split","CLASS_PART_SEPARATOR","length","shift","getGroupRecursive","getGroupIdForArbitraryProperty","getConflictingClassGroupIds","classGroupId","hasPostfixModifier","conflicts","classPartObject","currentClassPart","nextClassPartObject","nextPart","get","classGroupFromNextClassPart","slice","undefined","validators","classRest","join","find","validator","arbitraryPropertyRegex","test","arbitraryPropertyClassName","exec","property","substring","indexOf","theme","prefix","Map","prefixedClassGroupEntries","getPrefixedClassGroupEntries","Object","entries","classGroups","forEach","classGroup","processClassesRecursively","classDefinition","classPartObjectToEdit","getPart","isThemeGetter","push","key","path","currentClassPartObject","pathPart","has","set","func","classGroupEntries","map","prefixedClassGroup","fromEntries","value","createLruCache","maxCacheSize","cacheSize","cache","previousCache","update","createParseClassName","separator","experimentalParseClassName","isSeparatorSingleCharacter","firstSeparatorCharacter","separatorLength","parseClassName","modifiers","bracketDepth","modifierStart","postfixModifierPosition","index","currentCharacter","baseClassNameWithImportantModifier","hasImportantModifier","startsWith","IMPORTANT_MODIFIER","baseClassName","maybePostfixModifierPosition","sortModifiers","sortedModifiers","unsortedModifiers","modifier","sort","createConfigUtils","SPLIT_CLASSES_REGEX","mergeClassList","classList","configUtils","classGroupsInConflict","classNames","trim","result","originalClassName","Boolean","variantModifier","modifierId","classId","includes","conflictGroups","i","group","twJoin","argument","resolvedValue","string","arguments","toValue","mix","k","createTailwindMerge","createConfigFirst","createConfigRest","cacheGet","cacheSet","functionToCall","initTailwindMerge","reduce","previousConfig","createConfigCurrent","tailwindMerge","cachedResult","apply","fromTheme","themeGetter","arbitraryValueRegex","fractionRegex","stringLengths","Set","tshirtUnitRegex","lengthUnitRegex","colorFunctionRegex","shadowRegex","imageRegex","isLength","isNumber","isArbitraryLength","getIsArbitraryValue","isLengthOnly","Number","isNaN","isArbitraryNumber","isInteger","isPercent","endsWith","isArbitraryValue","isTshirtSize","sizeLabels","isArbitrarySize","isNever","isArbitraryPosition","imageLabels","isArbitraryImage","isImage","isArbitraryShadow","isShadow","isAny","label","testValue","getDefaultConfig","colors","spacing","blur","brightness","borderColor","borderRadius","borderSpacing","borderWidth","contrast","grayscale","hueRotate","invert","gap","gradientColorStops","gradientColorStopPositions","inset","margin","opacity","padding","saturate","scale","sepia","skew","space","translate","getOverscroll","getOverflow","getSpacingWithAutoAndArbitrary","getSpacingWithArbitrary","getLengthWithEmptyAndArbitrary","getNumberWithAutoAndArbitrary","getPositions","getLineStyles","getBlendModes","getAlign","getZeroAndEmpty","getBreaks","getNumberAndArbitrary","aspect","container","columns","box","display","float","clear","isolation","object","overflow","overscroll","position","start","end","top","right","bottom","left","visibility","z","basis","flex","grow","shrink","order","col","span","row","justify","content","items","self","p","px","py","ps","pe","pt","pr","pb","pl","m","mx","my","ms","me","mt","mr","mb","ml","w","screen","h","size","text","font","tracking","leading","list","placeholder","decoration","indent","align","whitespace","break","hyphens","bg","repeat","from","via","to","rounded","border","divide","outline","ring","shadow","filter","table","caption","transition","duration","ease","delay","animate","transform","rotate","origin","accent","appearance","cursor","caret","resize","scroll","snap","touch","select","fill","stroke","sr","twMerge","cn","inputs","scopeClass","cls","debounce","wait","timeout","args","throttle","limit","inThrottle","generateId","useScrollThreshold","showAfter","throttleMs","isPastThreshold","setIsPastThreshold","useState","useEffect","threshold","recompute","throttledRecompute","CalendarIcon","memo","forwardRef","props","ref","jsxs","jsx","CheckIcon","strokeWidth","CloseIcon","DropdownIcon","DropUpIcon","ErrorIcon","FileIcon","FileUploadIcon","GridIcon","ImageIcon","ImageUploadIcon","IndeterminateIcon","InfoIcon","ListIcon","MinusIcon","MultipleSelectionIcon","PlusIcon","SearchIcon","SuccessIcon","TickIcon","ToFirstIcon","ToLastIcon","ToNextIcon","ToPreviousIcon","VideoIcon","VideoUploadIcon","WarnIcon","sc","c","BackToTop","containerClassName","ariaLabel","icon","renderIcon","renderButton","scrollBehavior","scrollOptions","onClick","visible","handleClick","defaultClassName","statusBadgeVariants","cva","STATUS_LABELS","StatusBadge","status","variant","fullWidth","children","resolvedStatus","resolvedVariant","resolvedSize","hasContent","accessibleLabel","buttonVariants","Button","loading","disabled","leftIcon","rightIcon","dividerVariants","Divider","orientation","thickness","stretch","colorClassName","useControllableState","defaultValue","onChange","uncontrolled","setUncontrolled","isControlled","state","setState","useCallback","v","MultipleSelectionButton","selectedCount","actions","defaultActive","activeProp","onActiveChange","iconButtonAriaLabel","selectedLabel","toggleIcon","closeIcon","renderCount","maxDisplayCount","renderInactive","renderActive","active","setActive","labelId","useId","resolvedLabel","Children","Checkbox","id","name","invalid","indeterminate","description","descriptionId","forwardedRef","localRef","useRef","useImperativeHandle","describedBy","CheckboxGroup","legend","options","showSelectAll","selectAllLabel","fieldsetProps","selected","setSelected","groupDescId","enabledOptionValues","opt","allChecked","isIndeterminate","handleSelectAll","checked","allEnabledValues","handleOptionChange","optionValue","current","e","inputVariants","IconContainer","side","positionClasses","commonClasses","Input","type","error","helperText","contentSize","leftDivider","rightDivider","required","onLeftIconClick","leftIconAriaLabel","onRightIconClick","rightIconAriaLabel","autoId","inputId","hasError","inputVariant","errorId","helpId","describedById","QuantityInput","min","max","step","inputClassName","readOnlyInput","inputProps","clamp","setCurrent","lastValidRef","canDecrement","canIncrement","pendingRaw","setPendingRaw","next","handleDecrease","handleIncrease","handleInputChange","raw","sanitized","parsed","handleBlur","numeric","formatNumber","userOnKeyDown","rest","useMergeRefs","refs","searchInputVariants","SearchInput","onSearch","clearable","isExpanded","setIsExpanded","internalValue","setInternalValue","inputRef","containerRef","mergedInputRef","currentValue","hasValue","handleFocus","handleChange","handleSearch","handleClear","syntheticEvent","handleInputKeyDown","handleContainerClick","handleKeyDown","isCompactAndExpanded","shouldShowInput","locales","ja","enUS","fr","de","es","it","ru","zhCN","zhTW","clampDate","d","toDateKey","format","daysGrid","viewMonth","localeCode","startOfMonth","weekStartsOn","startCal","startOfWeek","endCal","addDays","eachDayOfInterval","isRangeLike","formatSingle","includeTime","locale","timeFormat","formatDateLocalized","opts","monthsForLocale","_","weekdaysForLocale","weekdays","day","useDateInputPopover","onOpenChange","initialOpen","open","setOpen","triggerRef","onDoc","focusFirst","t","onKeyDown","o","useClickOutside","handler","listener","event","TimeSpinner","minuteStep","hoursLabel","minutesLabel","renderHourOption","renderMinuteOption","hoursRef","minutesRef","hours","useMemo","minutes","selectedHourEl","selectedMinuteEl","isSelected","TimePicker","formatTime","renderTrigger","renderSpinner","buttonRef","onDocKey","formattedTime","date","DatePickerContext","createContext","useDatePicker","ctx","useContext","useCalendarKeyboardNavigation","onNavigateMonth","curDateAttr","base","delta","selector","nextEl","tableCellBase","WeekHeader","Calendar","onSelect","minDate","maxDate","isDateDisabled","isDateMarked","mode","singleValue","rangeValue","days","isInView","isInRange","cur","isDisabled","liveRegion","onGridKeyDown","isToday","isSameDay","inRange","out","marked","isRangeStart","isRangeEnd","yearsAround","center","range","years","y","MonthYearDropdown","month","year","monthLabels","minYear","maxYear","minMonth","maxMonth","visibleYears","visibleMonths","idx","headerClasses","DatePicker","defaultMonth","showTime","labels","weekdayLabels","formatHeaderDate","viewLeft","setViewLeft","viewRight","setViewRight","addMonths","isSmallScreen","setIsSmallScreen","mobileStep","setMobileStep","hasFrom","hasTo","mq","handle","handleSelectSingle","clamped","withTime","handleSelectRange","newRange","headerDate","effectiveLocale","formatHeader","months","onApplyClick","contextValue","now","Fragment","popoverBase","SingleDateInput","parse","closeOnSelect","autoWidth","pickerProps","handleTriggerFocus","handleIconToggle","closePopover","formatFn","useTime","displayValue","handleApply","placeholderLen","iconExtra","len","el","RangeDateInput","DateInput","validateFileTypeAndSize","file","acceptedFileTypes","maxFileSize","fileExtension","mimeType","fileUploadVariants","FileUpload","controlledFiles","onFilesChange","onUploadSuccess","onUploadError","onFileRemove","maxFiles","multiple","iconType","uploadIcon","successIcon","errorIcon","ariaDescribedBy","messages","renderSubtitle","onValidateFile","uploadId","dragOver","setDragOver","internalFiles","setInternalFiles","inlineError","setInlineError","hasInteractiveChildren","currentVariant","validateFile","basicError","generatePreview","resolve","reader","handleFiles","selectedFiles","fileArray","newFiles","hadError","existingValidCount","allowed","extra","allowedFiles","validationError","preview","fileUploadFile","updatedFiles","successful","handleDragOver","handleDragLeave","handleDrop","files","handleFileRemove","fileId","handlePreviewError","updated","getAcceptedTypesText","getMaxSizeText","subtitleNode","fileUpload","Form","onSubmit","noValidate","handleSubmit","form","firstInvalid","FormErrorSummary","errors","title","hasErrors","generatedId","regionId","err","FormField","asFieldset","getRange","usePagination","currentPage","totalCount","pageSize","siblingCount","hasNextPage","hasPrevPage","startPage","totalPageCount","leftSiblingIndex","rightSiblingIndex","shouldShowLeftEllipsis","shouldShowRightEllipsis","Pagination","total","page","defaultPage","onPageChange","showInfo","showFirstLast","renderInfo","setCurrentPage","totalPages","clampedPage","goto","info","item","Radio","RadioGroup","useDropdownLogic","searchable","isOpen","setIsOpen","searchTerm","setSearchTerm","optionRefs","searchInputRef","filteredOptions","option","selectedValue","selectedOption","handleCustomChange","newValue","currentValues","newValues","handleSearchChange","newSearchTerm","openDropdown","closeDropdown","currentIndex","prev","matchingIndex","DisplayValue","renderOption","val","DropdownMenu","selectId","onSearchChange","onOptionChange","maxHeight","selectVariants","Select","native","renderValue","renderDropdown","selectVariant","selectedValues","existing","TabsContext","useTabsContext","Tabs","onValueChange","idBase","TabsList","dense","setValue","listRef","indicator","setIndicator","listEl","listRect","rect","ro","triggers","focusAt","TabsTrigger","internalRef","mergedRef","isIconOnly","TabsContent","forceMount","STATUS_STYLES","STATUS_PROGRESS_COLOR","STATUS_ICON","Toast","message","onClose","autoCloseMs","showProgress","customIcon","renderCloseButton","renderProgress","hideCloseButton","progress","setProgress","closeTimerRef","animationFrameRef","remainingTimeRef","startTimeRef","isPausedRef","handleClose","animateProgress","startTime","elapsed","newRemaining","progressPct","startTimer","pauseTimer","resumeTimer","handlePause","handleResume","Icon","styles","progressColor","iconNode","act","POSITION_CLASS","ToastContainer","width","child","ARROW_BASE","Tooltip","defaultOpen","delayMs","withBackdrop","portal","showArrow","renderArrow","arrowClassName","tooltipId","openControlled","timerRef","arrowRef","show","hide","basePlacement","placement","floatingStyles","middlewareData","resolvedPlacement","useFloating","autoUpdate","offset","flip","arrowMw","setReference","setFloating","isValidElement","cloneElement","floatingNode","node","createPortal","ViewToggle","gridIcon","listIcon","gridLabel","listLabel","gridRef","focusOption","isGrid","ScalablyUIProvider","asChild","fieldErrorToProps","zodErrorsToSummary"],"mappings":"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","file":"index.esm.js","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;","import {\n ClassGroup,\n ClassValidator,\n Config,\n GenericClassGroupIds,\n GenericConfig,\n GenericThemeGroupIds,\n ThemeGetter,\n ThemeObject,\n} from './types'\n\nexport interface ClassPartObject {\n nextPart: Map<string, ClassPartObject>\n validators: ClassValidatorObject[]\n classGroupId?: GenericClassGroupIds\n}\n\ninterface ClassValidatorObject {\n classGroupId: GenericClassGroupIds\n validator: ClassValidator\n}\n\nconst CLASS_PART_SEPARATOR = '-'\n\nexport const createClassGroupUtils = (config: GenericConfig) => {\n const classMap = createClassMap(config)\n const { conflictingClassGroups, conflictingClassGroupModifiers } = config\n\n const getClassGroupId = (className: string) => {\n const classParts = className.split(CLASS_PART_SEPARATOR)\n\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and remove it from classParts.\n if (classParts[0] === '' && classParts.length !== 1) {\n classParts.shift()\n }\n\n return getGroupRecursive(classParts, classMap) || getGroupIdForArbitraryProperty(className)\n }\n\n const getConflictingClassGroupIds = (\n classGroupId: GenericClassGroupIds,\n hasPostfixModifier: boolean,\n ) => {\n const conflicts = conflictingClassGroups[classGroupId] || []\n\n if (hasPostfixModifier && conflictingClassGroupModifiers[classGroupId]) {\n return [...conflicts, ...conflictingClassGroupModifiers[classGroupId]!]\n }\n\n return conflicts\n }\n\n return {\n getClassGroupId,\n getConflictingClassGroupIds,\n }\n}\n\nconst getGroupRecursive = (\n classParts: string[],\n classPartObject: ClassPartObject,\n): GenericClassGroupIds | undefined => {\n if (classParts.length === 0) {\n return classPartObject.classGroupId\n }\n\n const currentClassPart = classParts[0]!\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart)\n const classGroupFromNextClassPart = nextClassPartObject\n ? getGroupRecursive(classParts.slice(1), nextClassPartObject)\n : undefined\n\n if (classGroupFromNextClassPart) {\n return classGroupFromNextClassPart\n }\n\n if (classPartObject.validators.length === 0) {\n return undefined\n }\n\n const classRest = classParts.join(CLASS_PART_SEPARATOR)\n\n return classPartObject.validators.find(({ validator }) => validator(classRest))?.classGroupId\n}\n\nconst arbitraryPropertyRegex = /^\\[(.+)\\]$/\n\nconst getGroupIdForArbitraryProperty = (className: string) => {\n if (arbitraryPropertyRegex.test(className)) {\n const arbitraryPropertyClassName = arbitraryPropertyRegex.exec(className)![1]\n const property = arbitraryPropertyClassName?.substring(\n 0,\n arbitraryPropertyClassName.indexOf(':'),\n )\n\n if (property) {\n // I use two dots here because one dot is used as prefix for class groups in plugins\n return 'arbitrary..' + property\n }\n }\n}\n\n/**\n * Exported for testing only\n */\nexport const createClassMap = (config: Config<GenericClassGroupIds, GenericThemeGroupIds>) => {\n const { theme, prefix } = config\n const classMap: ClassPartObject = {\n nextPart: new Map<string, ClassPartObject>(),\n validators: [],\n }\n\n const prefixedClassGroupEntries = getPrefixedClassGroupEntries(\n Object.entries(config.classGroups),\n prefix,\n )\n\n prefixedClassGroupEntries.forEach(([classGroupId, classGroup]) => {\n processClassesRecursively(classGroup, classMap, classGroupId, theme)\n })\n\n return classMap\n}\n\nconst processClassesRecursively = (\n classGroup: ClassGroup<GenericThemeGroupIds>,\n classPartObject: ClassPartObject,\n classGroupId: GenericClassGroupIds,\n theme: ThemeObject<GenericThemeGroupIds>,\n) => {\n classGroup.forEach((classDefinition) => {\n if (typeof classDefinition === 'string') {\n const classPartObjectToEdit =\n classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition)\n classPartObjectToEdit.classGroupId = classGroupId\n return\n }\n\n if (typeof classDefinition === 'function') {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(\n classDefinition(theme),\n classPartObject,\n classGroupId,\n theme,\n )\n return\n }\n\n classPartObject.validators.push({\n validator: classDefinition,\n classGroupId,\n })\n\n return\n }\n\n Object.entries(classDefinition).forEach(([key, classGroup]) => {\n processClassesRecursively(\n classGroup,\n getPart(classPartObject, key),\n classGroupId,\n theme,\n )\n })\n })\n}\n\nconst getPart = (classPartObject: ClassPartObject, path: string) => {\n let currentClassPartObject = classPartObject\n\n path.split(CLASS_PART_SEPARATOR).forEach((pathPart) => {\n if (!currentClassPartObject.nextPart.has(pathPart)) {\n currentClassPartObject.nextPart.set(pathPart, {\n nextPart: new Map(),\n validators: [],\n })\n }\n\n currentClassPartObject = currentClassPartObject.nextPart.get(pathPart)!\n })\n\n return currentClassPartObject\n}\n\nconst isThemeGetter = (func: ClassValidator | ThemeGetter): func is ThemeGetter =>\n (func as ThemeGetter).isThemeGetter\n\nconst getPrefixedClassGroupEntries = (\n classGroupEntries: Array<[classGroupId: string, classGroup: ClassGroup<GenericThemeGroupIds>]>,\n prefix: string | undefined,\n): Array<[classGroupId: string, classGroup: ClassGroup<GenericThemeGroupIds>]> => {\n if (!prefix) {\n return classGroupEntries\n }\n\n return classGroupEntries.map(([classGroupId, classGroup]) => {\n const prefixedClassGroup = classGroup.map((classDefinition) => {\n if (typeof classDefinition === 'string') {\n return prefix + classDefinition\n }\n\n if (typeof classDefinition === 'object') {\n return Object.fromEntries(\n Object.entries(classDefinition).map(([key, value]) => [prefix + key, value]),\n )\n }\n\n return classDefinition\n })\n\n return [classGroupId, prefixedClassGroup]\n })\n}\n","// Export is needed because TypeScript complains about an error otherwise:\n// Error: …/tailwind-merge/src/config-utils.ts(8,17): semantic error TS4058: Return type of exported function has or is using name 'LruCache' from external module \"…/tailwind-merge/src/lru-cache\" but cannot be named.\nexport interface LruCache<Key, Value> {\n get(key: Key): Value | undefined\n set(key: Key, value: Value): void\n}\n\n// LRU cache inspired from hashlru (https://github.com/dominictarr/hashlru/blob/v1.0.4/index.js) but object replaced with Map to improve performance\nexport const createLruCache = <Key, Value>(maxCacheSize: number): LruCache<Key, Value> => {\n if (maxCacheSize < 1) {\n return {\n get: () => undefined,\n set: () => {},\n }\n }\n\n let cacheSize = 0\n let cache = new Map<Key, Value>()\n let previousCache = new Map<Key, Value>()\n\n const update = (key: Key, value: Value) => {\n cache.set(key, value)\n cacheSize++\n\n if (cacheSize > maxCacheSize) {\n cacheSize = 0\n previousCache = cache\n cache = new Map()\n }\n }\n\n return {\n get(key) {\n let value = cache.get(key)\n\n if (value !== undefined) {\n return value\n }\n if ((value = previousCache.get(key)) !== undefined) {\n update(key, value)\n return value\n }\n },\n set(key, value) {\n if (cache.has(key)) {\n cache.set(key, value)\n } else {\n update(key, value)\n }\n },\n }\n}\n","import { GenericConfig } from './types'\n\nexport const IMPORTANT_MODIFIER = '!'\n\nexport const createParseClassName = (config: GenericConfig) => {\n const { separator, experimentalParseClassName } = config\n const isSeparatorSingleCharacter = separator.length === 1\n const firstSeparatorCharacter = separator[0]\n const separatorLength = separator.length\n\n // parseClassName inspired by https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n const parseClassName = (className: string) => {\n const modifiers = []\n\n let bracketDepth = 0\n let modifierStart = 0\n let postfixModifierPosition: number | undefined\n\n for (let index = 0; index < className.length; index++) {\n let currentCharacter = className[index]\n\n if (bracketDepth === 0) {\n if (\n currentCharacter === firstSeparatorCharacter &&\n (isSeparatorSingleCharacter ||\n className.slice(index, index + separatorLength) === separator)\n ) {\n modifiers.push(className.slice(modifierStart, index))\n modifierStart = index + separatorLength\n continue\n }\n\n if (currentCharacter === '/') {\n postfixModifierPosition = index\n continue\n }\n }\n\n if (currentCharacter === '[') {\n bracketDepth++\n } else if (currentCharacter === ']') {\n bracketDepth--\n }\n }\n\n const baseClassNameWithImportantModifier =\n modifiers.length === 0 ? className : className.substring(modifierStart)\n const hasImportantModifier =\n baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER)\n const baseClassName = hasImportantModifier\n ? baseClassNameWithImportantModifier.substring(1)\n : baseClassNameWithImportantModifier\n\n const maybePostfixModifierPosition =\n postfixModifierPosition && postfixModifierPosition > modifierStart\n ? postfixModifierPosition - modifierStart\n : undefined\n\n return {\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition,\n }\n }\n\n if (experimentalParseClassName) {\n return (className: string) => experimentalParseClassName({ className, parseClassName })\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 */\nexport const sortModifiers = (modifiers: string[]) => {\n if (modifiers.length <= 1) {\n return modifiers\n }\n\n const sortedModifiers: string[] = []\n let unsortedModifiers: string[] = []\n\n modifiers.forEach((modifier) => {\n const isArbitraryVariant = modifier[0] === '['\n\n if (isArbitraryVariant) {\n sortedModifiers.push(...unsortedModifiers.sort(), modifier)\n unsortedModifiers = []\n } else {\n unsortedModifiers.push(modifier)\n }\n })\n\n sortedModifiers.push(...unsortedModifiers.sort())\n\n return sortedModifiers\n}\n","import { createClassGroupUtils } from './class-group-utils'\nimport { createLruCache } from './lru-cache'\nimport { createParseClassName } from './parse-class-name'\nimport { GenericConfig } from './types'\n\nexport type ConfigUtils = ReturnType<typeof createConfigUtils>\n\nexport const createConfigUtils = (config: GenericConfig) => ({\n cache: createLruCache<string, string>(config.cacheSize),\n parseClassName: createParseClassName(config),\n ...createClassGroupUtils(config),\n})\n","import { ConfigUtils } from './config-utils'\nimport { IMPORTANT_MODIFIER, sortModifiers } from './parse-class-name'\n\nconst SPLIT_CLASSES_REGEX = /\\s+/\n\nexport const mergeClassList = (classList: string, configUtils: ConfigUtils) => {\n const { parseClassName, getClassGroupId, getConflictingClassGroupIds } = configUtils\n\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: string[] = []\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX)\n\n let result = ''\n\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index]!\n\n const { modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition } =\n parseClassName(originalClassName)\n\n let hasPostfixModifier = Boolean(maybePostfixModifierPosition)\n let classGroupId = getClassGroupId(\n hasPostfixModifier\n ? baseClassName.substring(0, maybePostfixModifierPosition)\n : baseClassName,\n )\n\n if (!classGroupId) {\n if (!hasPostfixModifier) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result)\n continue\n }\n\n classGroupId = getClassGroupId(baseClassName)\n\n if (!classGroupId) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result)\n continue\n }\n\n hasPostfixModifier = false\n }\n\n const variantModifier = sortModifiers(modifiers).join(':')\n\n const modifierId = hasImportantModifier\n ? variantModifier + IMPORTANT_MODIFIER\n : variantModifier\n\n const classId = modifierId + classGroupId\n\n if (classGroupsInConflict.includes(classId)) {\n // Tailwind class omitted due to conflict\n continue\n }\n\n classGroupsInConflict.push(classId)\n\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\n // Tailwind class not in conflict\n result = originalClassName + (result.length > 0 ? ' ' + result : result)\n }\n\n return result\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 */\n\nexport type ClassNameValue = ClassNameArray | string | null | undefined | 0 | 0n | false\ntype ClassNameArray = ClassNameValue[]\n\nexport function twJoin(...classLists: ClassNameValue[]): string\nexport function twJoin() {\n let index = 0\n let argument: ClassNameValue\n let resolvedValue: string\n let string = ''\n\n while (index < arguments.length) {\n if ((argument = arguments[index++])) {\n if ((resolvedValue = toValue(argument))) {\n string && (string += ' ')\n string += resolvedValue\n }\n }\n }\n return string\n}\n\nconst toValue = (mix: ClassNameArray | string) => {\n if (typeof mix === 'string') {\n return mix\n }\n\n let resolvedValue: string\n let string = ''\n\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if ((resolvedValue = toValue(mix[k] as ClassNameArray | string))) {\n string && (string += ' ')\n string += resolvedValue\n }\n }\n }\n\n return string\n}\n","import { createConfigUtils } from './config-utils'\nimport { mergeClassList } from './merge-classlist'\nimport { ClassNameValue, twJoin } from './tw-join'\nimport { GenericConfig } from './types'\n\ntype CreateConfigFirst = () => GenericConfig\ntype CreateConfigSubsequent = (config: GenericConfig) => GenericConfig\ntype TailwindMerge = (...classLists: ClassNameValue[]) => string\ntype ConfigUtils = ReturnType<typeof createConfigUtils>\n\nexport function createTailwindMerge(\n createConfigFirst: CreateConfigFirst,\n ...createConfigRest: CreateConfigSubsequent[]\n): TailwindMerge {\n let configUtils: ConfigUtils\n let cacheGet: ConfigUtils['cache']['get']\n let cacheSet: ConfigUtils['cache']['set']\n let functionToCall = initTailwindMerge\n\n function initTailwindMerge(classList: string) {\n const config = createConfigRest.reduce(\n (previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig),\n createConfigFirst() as GenericConfig,\n )\n\n configUtils = createConfigUtils(config)\n cacheGet = configUtils.cache.get\n cacheSet = configUtils.cache.set\n functionToCall = tailwindMerge\n\n return tailwindMerge(classList)\n }\n\n function tailwindMerge(classList: string) {\n const cachedResult = cacheGet(classList)\n\n if (cachedResult) {\n return cachedResult\n }\n\n const result = mergeClassList(classList, configUtils)\n cacheSet(classList, result)\n\n return result\n }\n\n return function callTailwindMerge() {\n return functionToCall(twJoin.apply(null, arguments as any))\n }\n}\n","import { DefaultThemeGroupIds, NoInfer, ThemeGetter, ThemeObject } from './types'\n\nexport const fromTheme = <\n AdditionalThemeGroupIds extends string = never,\n DefaultThemeGroupIdsInner extends string = DefaultThemeGroupIds,\n>(key: NoInfer<DefaultThemeGroupIdsInner | AdditionalThemeGroupIds>): ThemeGetter => {\n const themeGetter = (theme: ThemeObject<DefaultThemeGroupIdsInner | AdditionalThemeGroupIds>) =>\n theme[key] || []\n\n themeGetter.isThemeGetter = true as const\n\n return themeGetter\n}\n","const arbitraryValueRegex = /^\\[(?:([a-z-]+):)?(.+)\\]$/i\nconst fractionRegex = /^\\d+\\/\\d+$/\nconst stringLengths = new Set(['px', 'full', 'screen'])\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/\nconst lengthUnitRegex =\n /\\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))\\(.+\\)$/\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 =\n /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/\n\nexport const isLength = (value: string) =>\n isNumber(value) || stringLengths.has(value) || fractionRegex.test(value)\n\nexport const isArbitraryLength = (value: string) =>\n getIsArbitraryValue(value, 'length', isLengthOnly)\n\nexport const isNumber = (value: string) => Boolean(value) && !Number.isNaN(Number(value))\n\nexport const isArbitraryNumber = (value: string) => getIsArbitraryValue(value, 'number', isNumber)\n\nexport const isInteger = (value: string) => Boolean(value) && Number.isInteger(Number(value))\n\nexport const isPercent = (value: string) => value.endsWith('%') && isNumber(value.slice(0, -1))\n\nexport const isArbitraryValue = (value: string) => arbitraryValueRegex.test(value)\n\nexport const isTshirtSize = (value: string) => tshirtUnitRegex.test(value)\n\nconst sizeLabels = new Set(['length', 'size', 'percentage'])\n\nexport const isArbitrarySize = (value: string) => getIsArbitraryValue(value, sizeLabels, isNever)\n\nexport const isArbitraryPosition = (value: string) =>\n getIsArbitraryValue(value, 'position', isNever)\n\nconst imageLabels = new Set(['image', 'url'])\n\nexport const isArbitraryImage = (value: string) => getIsArbitraryValue(value, imageLabels, isImage)\n\nexport const isArbitraryShadow = (value: string) => getIsArbitraryValue(value, '', isShadow)\n\nexport const isAny = () => true\n\nconst getIsArbitraryValue = (\n value: string,\n label: string | Set<string>,\n testValue: (value: string) => boolean,\n) => {\n const result = arbitraryValueRegex.exec(value)\n\n if (result) {\n if (result[1]) {\n return typeof label === 'string' ? result[1] === label : label.has(result[1])\n }\n\n return testValue(result[2]!)\n }\n\n return false\n}\n\nconst isLengthOnly = (value: string) =>\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.\n lengthUnitRegex.test(value) && !colorFunctionRegex.test(value)\n\nconst isNever = () => false\n\nconst isShadow = (value: string) => shadowRegex.test(value)\n\nconst isImage = (value: string) => imageRegex.test(value)\n","import { fromTheme } from './from-theme'\nimport { Config, DefaultClassGroupIds, DefaultThemeGroupIds } from './types'\nimport {\n isAny,\n isArbitraryImage,\n isArbitraryLength,\n isArbitraryNumber,\n isArbitraryPosition,\n isArbitraryShadow,\n isArbitrarySize,\n isArbitraryValue,\n isInteger,\n isLength,\n isNumber,\n isPercent,\n isTshirtSize,\n} from './validators'\n\nexport const getDefaultConfig = () => {\n const colors = fromTheme('colors')\n const spacing = fromTheme('spacing')\n const blur = fromTheme('blur')\n const brightness = fromTheme('brightness')\n const borderColor = fromTheme('borderColor')\n const borderRadius = fromTheme('borderRadius')\n const borderSpacing = fromTheme('borderSpacing')\n const borderWidth = fromTheme('borderWidth')\n const contrast = fromTheme('contrast')\n const grayscale = fromTheme('grayscale')\n const hueRotate = fromTheme('hueRotate')\n const invert = fromTheme('invert')\n const gap = fromTheme('gap')\n const gradientColorStops = fromTheme('gradientColorStops')\n const gradientColorStopPositions = fromTheme('gradientColorStopPositions')\n const inset = fromTheme('inset')\n const margin = fromTheme('margin')\n const opacity = fromTheme('opacity')\n const padding = fromTheme('padding')\n const saturate = fromTheme('saturate')\n const scale = fromTheme('scale')\n const sepia = fromTheme('sepia')\n const skew = fromTheme('skew')\n const space = fromTheme('space')\n const translate = fromTheme('translate')\n\n const getOverscroll = () => ['auto', 'contain', 'none'] as const\n const getOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'] as const\n const getSpacingWithAutoAndArbitrary = () => ['auto', isArbitraryValue, spacing] as const\n const getSpacingWithArbitrary = () => [isArbitraryValue, spacing] as const\n const getLengthWithEmptyAndArbitrary = () => ['', isLength, isArbitraryLength] as const\n const getNumberWithAutoAndArbitrary = () => ['auto', isNumber, isArbitraryValue] as const\n const getPositions = () =>\n [\n 'bottom',\n 'center',\n 'left',\n 'left-bottom',\n 'left-top',\n 'right',\n 'right-bottom',\n 'right-top',\n 'top',\n ] as const\n const getLineStyles = () => ['solid', 'dashed', 'dotted', 'double', 'none'] as const\n const getBlendModes = () =>\n [\n 'normal',\n 'multiply',\n 'screen',\n 'overlay',\n 'darken',\n 'lighten',\n 'color-dodge',\n 'color-burn',\n 'hard-light',\n 'soft-light',\n 'difference',\n 'exclusion',\n 'hue',\n 'saturation',\n 'color',\n 'luminosity',\n ] as const\n const getAlign = () =>\n ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch'] as const\n const getZeroAndEmpty = () => ['', '0', isArbitraryValue] as const\n const getBreaks = () =>\n ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'] as const\n const getNumberAndArbitrary = () => [isNumber, isArbitraryValue]\n\n return {\n cacheSize: 500,\n separator: ':',\n theme: {\n colors: [isAny],\n spacing: [isLength, isArbitraryLength],\n blur: ['none', '', isTshirtSize, isArbitraryValue],\n brightness: getNumberAndArbitrary(),\n borderColor: [colors],\n borderRadius: ['none', '', 'full', isTshirtSize, isArbitraryValue],\n borderSpacing: getSpacingWithArbitrary(),\n borderWidth: getLengthWithEmptyAndArbitrary(),\n contrast: getNumberAndArbitrary(),\n grayscale: getZeroAndEmpty(),\n hueRotate: getNumberAndArbitrary(),\n invert: getZeroAndEmpty(),\n gap: getSpacingWithArbitrary(),\n gradientColorStops: [colors],\n gradientColorStopPositions: [isPercent, isArbitraryLength],\n inset: getSpacingWithAutoAndArbitrary(),\n margin: getSpacingWithAutoAndArbitrary(),\n opacity: getNumberAndArbitrary(),\n padding: getSpacingWithArbitrary(),\n saturate: getNumberAndArbitrary(),\n scale: getNumberAndArbitrary(),\n sepia: getZeroAndEmpty(),\n skew: getNumberAndArbitrary(),\n space: getSpacingWithArbitrary(),\n translate: getSpacingWithArbitrary(),\n },\n classGroups: {\n // Layout\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [{ aspect: ['auto', 'square', 'video', isArbitraryValue] }],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n */\n container: ['container'],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [{ columns: [isTshirtSize] }],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{ 'break-after': getBreaks() }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{ 'break-before': getBreaks() }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{ 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column'] }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{ 'box-decoration': ['slice', 'clone'] }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{ box: ['border', 'content'] }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: [\n 'block',\n 'inline-block',\n 'inline',\n 'flex',\n 'inline-flex',\n 'table',\n 'inline-table',\n 'table-caption',\n 'table-cell',\n 'table-column',\n 'table-column-group',\n 'table-footer-group',\n 'table-header-group',\n 'table-row-group',\n 'table-row',\n 'flow-root',\n 'grid',\n 'inline-grid',\n 'contents',\n 'list-item',\n 'hidden',\n ],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{ float: ['right', 'left', 'none', 'start', 'end'] }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{ clear: ['left', 'right', 'both', 'none', 'start', 'end'] }],\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': [{ object: ['contain', 'cover', 'fill', 'none', 'scale-down'] }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{ object: [...getPositions(), isArbitraryValue] }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{ overflow: getOverflow() }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{ 'overflow-x': getOverflow() }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{ 'overflow-y': getOverflow() }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{ overscroll: getOverscroll() }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{ 'overscroll-x': getOverscroll() }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{ 'overscroll-y': getOverscroll() }],\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: [{ inset: [inset] }],\n /**\n * Right / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{ 'inset-x': [inset] }],\n /**\n * Top / Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{ 'inset-y': [inset] }],\n /**\n * Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n start: [{ start: [inset] }],\n /**\n * End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n end: [{ end: [inset] }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{ top: [inset] }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{ right: [inset] }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{ bottom: [inset] }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{ left: [inset] }],\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: [{ z: ['auto', isInteger, isArbitraryValue] }],\n // Flexbox and Grid\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [{ basis: getSpacingWithAutoAndArbitrary() }],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{ flex: ['row', 'row-reverse', 'col', 'col-reverse'] }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{ flex: ['wrap', 'wrap-reverse', 'nowrap'] }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{ flex: ['1', 'auto', 'initial', 'none', isArbitraryValue] }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{ grow: getZeroAndEmpty() }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{ shrink: getZeroAndEmpty() }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [{ order: ['first', 'last', 'none', isInteger, isArbitraryValue] }],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{ 'grid-cols': [isAny] }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [\n {\n col: [\n 'auto',\n { span: ['full', isInteger, isArbitraryValue] },\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{ 'col-start': getNumberWithAutoAndArbitrary() }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{ 'col-end': getNumberWithAutoAndArbitrary() }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{ 'grid-rows': [isAny] }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [\n { row: ['auto', { span: [isInteger, isArbitraryValue] }, isArbitraryValue] },\n ],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{ 'row-start': getNumberWithAutoAndArbitrary() }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{ 'row-end': getNumberWithAutoAndArbitrary() }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{ 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense'] }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{ 'auto-cols': ['auto', 'min', 'max', 'fr', isArbitraryValue] }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{ 'auto-rows': ['auto', 'min', 'max', 'fr', isArbitraryValue] }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{ gap: [gap] }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{ 'gap-x': [gap] }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{ 'gap-y': [gap] }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{ justify: ['normal', ...getAlign()] }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{ 'justify-items': ['start', 'end', 'center', 'stretch'] }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{ 'justify-self': ['auto', 'start', 'end', 'center', 'stretch'] }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{ content: ['normal', ...getAlign(), 'baseline'] }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{ items: ['start', 'end', 'center', 'baseline', 'stretch'] }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [{ self: ['auto', 'start', 'end', 'center', 'stretch', 'baseline'] }],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{ 'place-content': [...getAlign(), 'baseline'] }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{ 'place-items': ['start', 'end', 'center', 'baseline', 'stretch'] }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{ 'place-self': ['auto', 'start', 'end', 'center', 'stretch'] }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{ p: [padding] }],\n /**\n * Padding X\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{ px: [padding] }],\n /**\n * Padding Y\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{ py: [padding] }],\n /**\n * Padding Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{ ps: [padding] }],\n /**\n * Padding End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{ pe: [padding] }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{ pt: [padding] }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{ pr: [padding] }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{ pb: [padding] }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{ pl: [padding] }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{ m: [margin] }],\n /**\n * Margin X\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{ mx: [margin] }],\n /**\n * Margin Y\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{ my: [margin] }],\n /**\n * Margin Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{ ms: [margin] }],\n /**\n * Margin End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{ me: [margin] }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{ mt: [margin] }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{ mr: [margin] }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{ mb: [margin] }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{ ml: [margin] }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/space\n */\n 'space-x': [{ 'space-x': [space] }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/space\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/space\n */\n 'space-y': [{ 'space-y': [space] }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/space\n */\n 'space-y-reverse': ['space-y-reverse'],\n // Sizing\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [\n {\n w: [\n 'auto',\n 'min',\n 'max',\n 'fit',\n 'svw',\n 'lvw',\n 'dvw',\n isArbitraryValue,\n spacing,\n ],\n },\n ],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [{ 'min-w': [isArbitraryValue, spacing, 'min', 'max', 'fit'] }],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [\n {\n 'max-w': [\n isArbitraryValue,\n spacing,\n 'none',\n 'full',\n 'min',\n 'max',\n 'fit',\n 'prose',\n { screen: [isTshirtSize] },\n isTshirtSize,\n ],\n },\n ],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [\n {\n h: [\n isArbitraryValue,\n spacing,\n 'auto',\n 'min',\n 'max',\n 'fit',\n 'svh',\n 'lvh',\n 'dvh',\n ],\n },\n ],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [\n { 'min-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh'] },\n ],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [\n { 'max-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh'] },\n ],\n /**\n * Size\n * @see https://tailwindcss.com/docs/size\n */\n size: [{ size: [isArbitraryValue, spacing, 'auto', 'min', 'max', 'fit'] }],\n // Typography\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [{ text: ['base', isTshirtSize, isArbitraryLength] }],\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 {\n font: [\n 'thin',\n 'extralight',\n 'light',\n 'normal',\n 'medium',\n 'semibold',\n 'bold',\n 'extrabold',\n 'black',\n isArbitraryNumber,\n ],\n },\n ],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [{ font: [isAny] }],\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-fractons'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [\n {\n tracking: [\n 'tighter',\n 'tight',\n 'normal',\n 'wide',\n 'wider',\n 'widest',\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [{ 'line-clamp': ['none', isNumber, isArbitraryNumber] }],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [\n {\n leading: [\n 'none',\n 'tight',\n 'snug',\n 'normal',\n 'relaxed',\n 'loose',\n isLength,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{ 'list-image': ['none', isArbitraryValue] }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [{ list: ['none', 'disc', 'decimal', isArbitraryValue] }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{ list: ['inside', 'outside'] }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{ placeholder: [colors] }],\n /**\n * Placeholder Opacity\n * @see https://tailwindcss.com/docs/placeholder-opacity\n */\n 'placeholder-opacity': [{ 'placeholder-opacity': [opacity] }],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{ text: ['left', 'center', 'right', 'justify', 'start', 'end'] }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{ text: [colors] }],\n /**\n * Text Opacity\n * @see https://tailwindcss.com/docs/text-opacity\n */\n 'text-opacity': [{ 'text-opacity': [opacity] }],\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': [{ decoration: [...getLineStyles(), 'wavy'] }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [\n { decoration: ['auto', 'from-font', isLength, isArbitraryLength] },\n ],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [{ 'underline-offset': ['auto', isLength, isArbitraryValue] }],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{ decoration: [colors] }],\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': [{ text: ['wrap', 'nowrap', 'balance', 'pretty'] }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{ indent: getSpacingWithArbitrary() }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [\n {\n align: [\n 'baseline',\n 'top',\n 'middle',\n 'bottom',\n 'text-top',\n 'text-bottom',\n 'sub',\n 'super',\n isArbitraryValue,\n ],\n },\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: [{ break: ['normal', 'words', 'all', 'keep'] }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{ hyphens: ['none', 'manual', 'auto'] }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{ content: ['none', isArbitraryValue] }],\n // Backgrounds\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{ bg: ['fixed', 'local', 'scroll'] }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{ 'bg-clip': ['border', 'padding', 'content', 'text'] }],\n /**\n * Background Opacity\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/background-opacity\n */\n 'bg-opacity': [{ 'bg-opacity': [opacity] }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{ 'bg-origin': ['border', 'padding', 'content'] }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{ bg: [...getPositions(), isArbitraryPosition] }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{ bg: ['no-repeat', { repeat: ['', 'x', 'y', 'round', 'space'] }] }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{ bg: ['auto', 'cover', 'contain', isArbitrarySize] }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [\n {\n bg: [\n 'none',\n { 'gradient-to': ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl'] },\n isArbitraryImage,\n ],\n },\n ],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{ bg: [colors] }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{ from: [gradientColorStopPositions] }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{ via: [gradientColorStopPositions] }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{ to: [gradientColorStopPositions] }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{ from: [gradientColorStops] }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{ via: [gradientColorStops] }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{ to: [gradientColorStops] }],\n // Borders\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{ rounded: [borderRadius] }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{ 'rounded-s': [borderRadius] }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{ 'rounded-e': [borderRadius] }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{ 'rounded-t': [borderRadius] }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{ 'rounded-r': [borderRadius] }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{ 'rounded-b': [borderRadius] }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{ 'rounded-l': [borderRadius] }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{ 'rounded-ss': [borderRadius] }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{ 'rounded-se': [borderRadius] }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{ 'rounded-ee': [borderRadius] }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{ 'rounded-es': [borderRadius] }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{ 'rounded-tl': [borderRadius] }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{ 'rounded-tr': [borderRadius] }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{ 'rounded-br': [borderRadius] }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{ 'rounded-bl': [borderRadius] }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{ border: [borderWidth] }],\n /**\n * Border Width X\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{ 'border-x': [borderWidth] }],\n /**\n * Border Width Y\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{ 'border-y': [borderWidth] }],\n /**\n * Border Width Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{ 'border-s': [borderWidth] }],\n /**\n * Border Width End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{ 'border-e': [borderWidth] }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{ 'border-t': [borderWidth] }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{ 'border-r': [borderWidth] }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{ 'border-b': [borderWidth] }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{ 'border-l': [borderWidth] }],\n /**\n * Border Opacity\n * @see https://tailwindcss.com/docs/border-opacity\n */\n 'border-opacity': [{ 'border-opacity': [opacity] }],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{ border: [...getLineStyles(), 'hidden'] }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-x': [{ 'divide-x': [borderWidth] }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-y': [{ 'divide-y': [borderWidth] }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Divide Opacity\n * @see https://tailwindcss.com/docs/divide-opacity\n */\n 'divide-opacity': [{ 'divide-opacity': [opacity] }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/divide-style\n */\n 'divide-style': [{ divide: getLineStyles() }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{ border: [borderColor] }],\n /**\n * Border Color X\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{ 'border-x': [borderColor] }],\n /**\n * Border Color Y\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{ 'border-y': [borderColor] }],\n /**\n * Border Color S\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{ 'border-s': [borderColor] }],\n /**\n * Border Color E\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{ 'border-e': [borderColor] }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{ 'border-t': [borderColor] }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{ 'border-r': [borderColor] }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{ 'border-b': [borderColor] }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{ 'border-l': [borderColor] }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{ divide: [borderColor] }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{ outline: ['', ...getLineStyles()] }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [{ 'outline-offset': [isLength, isArbitraryValue] }],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [{ outline: [isLength, isArbitraryLength] }],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{ outline: [colors] }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/ring-width\n */\n 'ring-w': [{ ring: getLengthWithEmptyAndArbitrary() }],\n /**\n * Ring Width Inset\n * @see https://tailwindcss.com/docs/ring-width\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/ring-color\n */\n 'ring-color': [{ ring: [colors] }],\n /**\n * Ring Opacity\n * @see https://tailwindcss.com/docs/ring-opacity\n */\n 'ring-opacity': [{ 'ring-opacity': [opacity] }],\n /**\n * Ring Offset Width\n * @see https://tailwindcss.com/docs/ring-offset-width\n */\n 'ring-offset-w': [{ 'ring-offset': [isLength, isArbitraryLength] }],\n /**\n * Ring Offset Color\n * @see https://tailwindcss.com/docs/ring-offset-color\n */\n 'ring-offset-color': [{ 'ring-offset': [colors] }],\n // Effects\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [{ shadow: ['', 'inner', 'none', isTshirtSize, isArbitraryShadow] }],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow-color\n */\n 'shadow-color': [{ shadow: [isAny] }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{ opacity: [opacity] }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{ 'mix-blend': [...getBlendModes(), 'plus-lighter', 'plus-darker'] }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{ 'bg-blend': getBlendModes() }],\n // Filters\n /**\n * Filter\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [{ filter: ['', 'none'] }],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{ blur: [blur] }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{ brightness: [brightness] }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{ contrast: [contrast] }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [{ 'drop-shadow': ['', 'none', isTshirtSize, isArbitraryValue] }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{ grayscale: [grayscale] }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{ 'hue-rotate': [hueRotate] }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{ invert: [invert] }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{ saturate: [saturate] }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{ sepia: [sepia] }],\n /**\n * Backdrop Filter\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [{ 'backdrop-filter': ['', 'none'] }],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{ 'backdrop-blur': [blur] }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [{ 'backdrop-brightness': [brightness] }],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [{ 'backdrop-contrast': [contrast] }],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [{ 'backdrop-grayscale': [grayscale] }],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [{ 'backdrop-hue-rotate': [hueRotate] }],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [{ 'backdrop-invert': [invert] }],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [{ 'backdrop-opacity': [opacity] }],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [{ 'backdrop-saturate': [saturate] }],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [{ 'backdrop-sepia': [sepia] }],\n // Tables\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{ border: ['collapse', 'separate'] }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{ 'border-spacing': [borderSpacing] }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{ 'border-spacing-x': [borderSpacing] }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{ 'border-spacing-y': [borderSpacing] }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{ table: ['auto', 'fixed'] }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{ caption: ['top', 'bottom'] }],\n // Transitions and Animation\n /**\n * Tranisition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [\n {\n transition: [\n 'none',\n 'all',\n '',\n 'colors',\n 'opacity',\n 'shadow',\n 'transform',\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{ duration: getNumberAndArbitrary() }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [{ ease: ['linear', 'in', 'out', 'in-out', isArbitraryValue] }],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{ delay: getNumberAndArbitrary() }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{ animate: ['none', 'spin', 'ping', 'pulse', 'bounce', isArbitraryValue] }],\n // Transforms\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [{ transform: ['', 'gpu', 'none'] }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{ scale: [scale] }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{ 'scale-x': [scale] }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{ 'scale-y': [scale] }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{ rotate: [isInteger, isArbitraryValue] }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{ 'translate-x': [translate] }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{ 'translate-y': [translate] }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{ 'skew-x': [skew] }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{ 'skew-y': [skew] }],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [\n {\n origin: [\n 'center',\n 'top',\n 'top-right',\n 'right',\n 'bottom-right',\n 'bottom',\n 'bottom-left',\n 'left',\n 'top-left',\n isArbitraryValue,\n ],\n },\n ],\n // Interactivity\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{ accent: ['auto', colors] }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{ appearance: ['none', 'auto'] }],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [\n {\n cursor: [\n 'auto',\n 'default',\n 'pointer',\n 'wait',\n 'text',\n 'move',\n 'help',\n 'not-allowed',\n 'none',\n 'context-menu',\n 'progress',\n 'cell',\n 'crosshair',\n 'vertical-text',\n 'alias',\n 'copy',\n 'no-drop',\n 'grab',\n 'grabbing',\n 'all-scroll',\n 'col-resize',\n 'row-resize',\n 'n-resize',\n 'e-resize',\n 's-resize',\n 'w-resize',\n 'ne-resize',\n 'nw-resize',\n 'se-resize',\n 'sw-resize',\n 'ew-resize',\n 'ns-resize',\n 'nesw-resize',\n 'nwse-resize',\n 'zoom-in',\n 'zoom-out',\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{ caret: [colors] }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{ 'pointer-events': ['none', 'auto'] }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{ resize: ['none', 'y', 'x', ''] }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{ scroll: ['auto', 'smooth'] }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{ 'scroll-m': getSpacingWithArbitrary() }],\n /**\n * Scroll Margin X\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{ 'scroll-mx': getSpacingWithArbitrary() }],\n /**\n * Scroll Margin Y\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{ 'scroll-my': getSpacingWithArbitrary() }],\n /**\n * Scroll Margin Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{ 'scroll-ms': getSpacingWithArbitrary() }],\n /**\n * Scroll Margin End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{ 'scroll-me': getSpacingWithArbitrary() }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{ 'scroll-mt': getSpacingWithArbitrary() }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{ 'scroll-mr': getSpacingWithArbitrary() }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{ 'scroll-mb': getSpacingWithArbitrary() }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{ 'scroll-ml': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{ 'scroll-p': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding X\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{ 'scroll-px': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding Y\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{ 'scroll-py': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{ 'scroll-ps': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{ 'scroll-pe': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{ 'scroll-pt': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{ 'scroll-pr': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{ 'scroll-pb': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{ 'scroll-pl': getSpacingWithArbitrary() }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{ snap: ['start', 'end', 'center', 'align-none'] }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{ snap: ['normal', 'always'] }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{ snap: ['none', 'x', 'y', 'both'] }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{ snap: ['mandatory', 'proximity'] }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [\n {\n touch: ['auto', 'none', 'manipulation'],\n },\n ],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [\n {\n 'touch-pan': ['x', 'left', 'right'],\n },\n ],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [\n {\n 'touch-pan': ['y', 'up', 'down'],\n },\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: [{ select: ['none', 'text', 'all', 'auto'] }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [\n { 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryValue] },\n ],\n // SVG\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{ fill: [colors, 'none'] }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [{ stroke: [isLength, isArbitraryLength, isArbitraryNumber] }],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{ stroke: [colors, 'none'] }],\n // Accessibility\n /**\n * Screen Readers\n * @see https://tailwindcss.com/docs/screen-readers\n */\n sr: ['sr-only', 'not-sr-only'],\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{ 'forced-color-adjust': ['auto', 'none'] }],\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': [\n 'fvn-ordinal',\n 'fvn-slashed-zero',\n 'fvn-figure',\n 'fvn-spacing',\n 'fvn-fraction',\n ],\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: [\n 'rounded-s',\n 'rounded-e',\n 'rounded-t',\n 'rounded-r',\n 'rounded-b',\n 'rounded-l',\n 'rounded-ss',\n 'rounded-se',\n 'rounded-ee',\n 'rounded-es',\n 'rounded-tl',\n 'rounded-tr',\n 'rounded-br',\n 'rounded-bl',\n ],\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': [\n 'border-w-s',\n 'border-w-e',\n 'border-w-t',\n 'border-w-r',\n 'border-w-b',\n 'border-w-l',\n ],\n 'border-w-x': ['border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-t', 'border-w-b'],\n 'border-color': [\n 'border-color-s',\n 'border-color-e',\n 'border-color-t',\n 'border-color-r',\n 'border-color-b',\n 'border-color-l',\n ],\n 'border-color-x': ['border-color-r', 'border-color-l'],\n 'border-color-y': ['border-color-t', 'border-color-b'],\n 'scroll-m': [\n 'scroll-mx',\n 'scroll-my',\n 'scroll-ms',\n 'scroll-me',\n 'scroll-mt',\n 'scroll-mr',\n 'scroll-mb',\n 'scroll-ml',\n ],\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\n 'scroll-p': [\n 'scroll-px',\n 'scroll-py',\n 'scroll-ps',\n 'scroll-pe',\n 'scroll-pt',\n 'scroll-pr',\n 'scroll-pb',\n 'scroll-pl',\n ],\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 } as const satisfies Config<DefaultClassGroupIds, DefaultThemeGroupIds>\n}\n","import { createTailwindMerge } from './create-tailwind-merge'\nimport { getDefaultConfig } from './default-config'\n\nexport const twMerge = createTailwindMerge(getDefaultConfig)\n","import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Utility function to merge Tailwind CSS classes intelligently\n * Combines clsx for conditional classes and tailwind-merge for conflict resolution\n *\n * @param inputs - Class values to merge\n * @returns Merged class string\n *\n * @example\n * ```tsx\n * cn('sui-p-4', isActive && 'sui-bg-blue-500', 'sui-text-white')\n * // Returns: 'sui-p-4 sui-bg-blue-500 sui-text-white'\n * ```\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\n/**\n * Creates a scoped class name with the UI prefix\n * Ensures all classes are properly prefixed for isolation\n *\n * @param className - The class name to scope\n * @returns Scoped class name\n *\n * @example\n * ```tsx\n * scopeClass('p-4 bg-blue-500') // Returns: 'ui-p-4 ui-bg-blue-500'\n * ```\n */\nexport function scopeClass(className: string): string {\n return className\n .split(\" \")\n .filter(Boolean)\n .map((cls) => (cls.startsWith(\"sui-\") ? cls : `sui-${cls}`))\n .join(\" \");\n}\n\n/**\n * Debounce utility for performance optimization\n *\n * @param func - Function to debounce\n * @param wait - Wait time in milliseconds\n * @returns Debounced function\n */\nexport function debounce<T extends (...args: unknown[]) => unknown>(\n func: T,\n wait: number\n): (...args: Parameters<T>) => void {\n let timeout: ReturnType<typeof setTimeout>;\n return (...args: Parameters<T>) => {\n clearTimeout(timeout);\n timeout = setTimeout(() => func(...args), wait);\n };\n}\n\n/**\n * Throttle utility for performance optimization\n *\n * @param func - Function to throttle\n * @param limit - Time limit in milliseconds\n * @returns Throttled function\n */\nexport function throttle<T extends (...args: unknown[]) => unknown>(\n func: T,\n limit: number\n): (...args: Parameters<T>) => void {\n let inThrottle: boolean;\n return (...args: Parameters<T>) => {\n if (!inThrottle) {\n func(...args);\n inThrottle = true;\n setTimeout(() => (inThrottle = false), limit);\n }\n };\n}\n\n/**\n * Generates a robust unique ID. Prefers `crypto.randomUUID()` when available,\n * and falls back to a timestamp + random suffix.\n */\nexport function generateId(): string {\n if (\n typeof crypto !== \"undefined\" &&\n typeof crypto.randomUUID === \"function\"\n ) {\n return crypto.randomUUID();\n }\n return `${Date.now()}-${Math.random().toString(36).slice(2, 11)}`;\n}\n","import { throttle } from \"@/lib/utils\";\nimport { useEffect, useState } from \"react\";\n\n/**\n * A hook to determine if the window scroll position has passed a certain threshold.\n * @param showAfter - The scroll distance in pixels before returning true. Defaults to 2x viewport height.\n * @param throttleMs - The throttle delay in milliseconds.\n */\nexport const useScrollThreshold = (\n showAfter?: number,\n throttleMs = 150\n): boolean => {\n const [isPastThreshold, setIsPastThreshold] = useState(false);\n\n useEffect(() => {\n const threshold =\n typeof showAfter === \"number\" ? showAfter : window.innerHeight * 2;\n const recompute = () => {\n setIsPastThreshold(window.scrollY > threshold);\n };\n const throttledRecompute = throttle(recompute, throttleMs);\n\n // Run once on mount\n recompute();\n\n window.addEventListener(\"scroll\", throttledRecompute, { passive: true });\n window.addEventListener(\"resize\", throttledRecompute);\n\n return () => {\n window.removeEventListener(\"scroll\", throttledRecompute);\n window.removeEventListener(\"resize\", throttledRecompute);\n };\n }, [showAfter, throttleMs]);\n\n return isPastThreshold;\n};\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface CalendarIconProps extends React.SVGProps<SVGSVGElement> {\n size?: number;\n className?: string;\n}\n\nconst CalendarIcon = memo(\n forwardRef<SVGSVGElement, CalendarIconProps>(\n ({ size = 24, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\"sui-text-current\", className)}\n aria-hidden=\"true\"\n {...props}\n >\n <path\n d=\"M8 2V5\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeMiterlimit={10}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M16 2V5\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeMiterlimit={10}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M3.5 9.08997H20.5\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeMiterlimit={10}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M21 8.5V17C21 20 19.5 22 16 22H8C4.5 22 3 20 3 17V8.5C3 5.5 4.5 3.5 8 3.5H16C19.5 3.5 21 5.5 21 8.5Z\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeMiterlimit={10}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M15.6947 13.7H15.7037\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M15.6947 16.7H15.7037\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M11.9955 13.7H12.0045\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M11.9955 16.7H12.0045\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M8.29431 13.7H8.30329\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M8.29431 16.7H8.30329\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n }\n )\n);\nCalendarIcon.displayName = \"CalendarIcon\";\n\nexport { CalendarIcon, type CalendarIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface CheckIconProps extends React.SVGProps<SVGSVGElement> {\n strokeWidth?: number;\n}\n\nconst CheckIcon = memo(\n forwardRef<SVGSVGElement, CheckIconProps>(\n ({ className, strokeWidth = 2.2, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\"sui-text-white\", className)}\n aria-hidden=\"true\"\n {...props}\n >\n <path\n d=\"M6 10L8.66667 13L14 7\"\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n fill=\"none\"\n />\n </svg>\n );\n }\n )\n);\nCheckIcon.displayName = \"CheckIcon\";\n\nexport { CheckIcon, type CheckIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface CloseIconProps extends React.SVGProps<SVGSVGElement> {\n size?: number;\n className?: string;\n}\n\nconst CloseIcon = memo(\n forwardRef<SVGSVGElement, CloseIconProps>(\n ({ size = 24, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\"sui-text-current\", className)}\n aria-hidden=\"true\"\n {...props}\n >\n <path\n d=\"M18 18L12 12M12 12L6 6M12 12L18 6M12 12L6 18\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n }\n )\n);\nCloseIcon.displayName = \"CloseIcon\";\n\nexport { CloseIcon, type CloseIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface DropdownIconProps extends React.SVGProps<SVGSVGElement> {\n size?: number;\n className?: string;\n}\n\nconst DropdownIcon = memo(\n forwardRef<SVGSVGElement, DropdownIconProps>(\n ({ size = 24, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\"sui-text-current\", className)}\n aria-hidden=\"true\"\n {...props}\n >\n <path\n d=\"M7 10L12 15\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M12 15L17 10\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n }\n )\n);\nDropdownIcon.displayName = \"DropdownIcon\";\n\nexport { DropdownIcon, type DropdownIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface DropUpIconProps extends React.SVGProps<SVGSVGElement> {\n size?: number;\n className?: string;\n}\n\nconst DropUpIcon = memo(\n forwardRef<SVGSVGElement, DropUpIconProps>(\n ({ size = 24, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\"sui-text-current\", className)}\n aria-hidden=\"true\"\n {...props}\n >\n <path\n d=\"M17 14L12 9\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M12 9L7 14\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n }\n )\n);\nDropUpIcon.displayName = \"DropUpIcon\";\n\nexport { DropUpIcon, type DropUpIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface ErrorIconProps extends React.SVGProps<SVGSVGElement> {\n size?: number;\n className?: string;\n}\n\nconst ErrorIcon = memo(\n forwardRef<SVGSVGElement, ErrorIconProps>(\n ({ size = 24, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\"sui-text-current\", className)}\n aria-hidden=\"true\"\n {...props}\n >\n <rect\n width={size}\n height={size}\n rx={6}\n fill=\"url(#paint0_linear_3163_7467)\"\n />\n <path\n d=\"M15 9.00002L9 15M8.99997 9L14.9999 15\"\n stroke=\"white\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n />\n <defs>\n <linearGradient\n id=\"paint0_linear_3163_7467\"\n x1={12}\n y1={0}\n x2={12}\n y2={24}\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#E88B76\" />\n <stop offset={1} stopColor=\"#CA5048\" />\n </linearGradient>\n </defs>\n </svg>\n );\n }\n )\n);\nErrorIcon.displayName = \"ErrorIcon\";\n\nexport { ErrorIcon, type ErrorIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface FileIconProps extends React.SVGProps<SVGSVGElement> {\n size?: number;\n className?: string;\n}\n\nconst FileIcon = memo(\n forwardRef<SVGSVGElement, FileIconProps>(\n ({ size = 24, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\"sui-text-current\", className)}\n aria-hidden=\"true\"\n {...props}\n >\n <path\n d=\"M15.8002 2.20999C15.3902 1.79999 14.6802 2.07999 14.6802 2.64999V6.13999C14.6802 7.59999 15.9202 8.80999 17.4302 8.80999C18.3802 8.81999 19.7002 8.81999 20.8302 8.81999C21.4002 8.81999 21.7002 8.14999 21.3002 7.74999C19.8602 6.29999 17.2802 3.68999 15.8002 2.20999Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M20.5 10.19H17.61C15.24 10.19 13.31 8.26 13.31 5.89V3C13.31 2.45 12.86 2 12.31 2H8.07C4.99 2 2.5 4 2.5 7.57V16.43C2.5 20 4.99 22 8.07 22H15.93C19.01 22 21.5 20 21.5 16.43V11.19C21.5 10.64 21.05 10.19 20.5 10.19ZM11.5 17.75H7.5C7.09 17.75 6.75 17.41 6.75 17C6.75 16.59 7.09 16.25 7.5 16.25H11.5C11.91 16.25 12.25 16.59 12.25 17C12.25 17.41 11.91 17.75 11.5 17.75ZM13.5 13.75H7.5C7.09 13.75 6.75 13.41 6.75 13C6.75 12.59 7.09 12.25 7.5 12.25H13.5C13.91 12.25 14.25 12.59 14.25 13C14.25 13.41 13.91 13.75 13.5 13.75Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n )\n);\nFileIcon.displayName = \"FileIcon\";\n\nexport { FileIcon, type FileIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface FileUploadIconProps extends React.SVGProps<SVGSVGElement> {\n size?: number;\n strokeWidth?: number;\n className?: string;\n}\n\nconst FileUploadIcon = memo(\n forwardRef<SVGSVGElement, FileUploadIconProps>(\n ({ size = 24, strokeWidth = 1.5, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\"sui-text-current\", className)}\n aria-hidden=\"true\"\n {...props}\n >\n <path\n d=\"M9 17V11L7 13\"\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M9 11L11 13\"\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M22 10V15C22 20 20 22 15 22H9C4 22 2 20 2 15V9C2 4 4 2 9 2H14\"\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M22 10H18C15 10 14 9 14 6V2L22 10Z\"\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n }\n )\n);\nFileUploadIcon.displayName = \"FileUploadIcon\";\n\nexport { FileUploadIcon, type FileUploadIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface GridIconProps extends React.SVGProps<SVGSVGElement> {\n size?: number;\n className?: string;\n}\n\nconst GridIcon = memo(\n forwardRef<SVGSVGElement, GridIconProps>(\n ({ size = 24, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\"sui-text-current\", className)}\n aria-hidden=\"true\"\n {...props}\n >\n <path\n d=\"M22 8.52V3.98C22 2.57 21.36 2 19.77 2H15.73C14.14 2 13.5 2.57 13.5 3.98V8.51C13.5 9.93 14.14 10.49 15.73 10.49H19.77C21.36 10.5 22 9.93 22 8.52Z\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M22 19.77V15.73C22 14.14 21.36 13.5 19.77 13.5H15.73C14.14 13.5 13.5 14.14 13.5 15.73V19.77C13.5 21.36 14.14 22 15.73 22H19.77C21.36 22 22 21.36 22 19.77Z\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M10.5 8.52V3.98C10.5 2.57 9.86 2 8.27 2H4.23C2.64 2 2 2.57 2 3.98V8.51C2 9.93 2.64 10.49 4.23 10.49H8.27C9.86 10.5 10.5 9.93 10.5 8.52Z\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M10.5 19.77V15.73C10.5 14.14 9.86 13.5 8.27 13.5H4.23C2.64 13.5 2 14.14 2 15.73V19.77C2 21.36 2.64 22 4.23 22H8.27C9.86 22 10.5 21.36 10.5 19.77Z\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n }\n )\n);\nGridIcon.displayName = \"GridIcon\";\n\nexport { GridIcon, type GridIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface ImageIconProps extends React.SVGProps<SVGSVGElement> {\n size?: number;\n className?: string;\n}\n\nconst ImageIcon = memo(\n forwardRef<SVGSVGElement, ImageIconProps>(\n ({ size = 24, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\"sui-text-current\", className)}\n aria-hidden=\"true\"\n {...props}\n >\n <path\n d=\"M2.5798 19.01L2.5598 19.03C2.2898 18.44 2.1198 17.77 2.0498 17.03C2.1198 17.76 2.3098 18.42 2.5798 19.01Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M9.00012 10.38C10.3146 10.38 11.3801 9.31443 11.3801 8C11.3801 6.68556 10.3146 5.62 9.00012 5.62C7.68568 5.62 6.62012 6.68556 6.62012 8C6.62012 9.31443 7.68568 10.38 9.00012 10.38Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M16.19 2H7.81C4.17 2 2 4.17 2 7.81V16.19C2 17.28 2.19 18.23 2.56 19.03C3.42 20.93 5.26 22 7.81 22H16.19C19.83 22 22 19.83 22 16.19V13.9V7.81C22 4.17 19.83 2 16.19 2ZM20.37 12.5C19.59 11.83 18.33 11.83 17.55 12.5L13.39 16.07C12.61 16.74 11.35 16.74 10.57 16.07L10.23 15.79C9.52 15.17 8.39 15.11 7.59 15.65L3.85 18.16C3.63 17.6 3.5 16.95 3.5 16.19V7.81C3.5 4.99 4.99 3.5 7.81 3.5H16.19C19.01 3.5 20.5 4.99 20.5 7.81V12.61L20.37 12.5Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n )\n);\nImageIcon.displayName = \"ImageIcon\";\n\nexport { ImageIcon, type ImageIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface ImageUploadIconProps extends React.SVGProps<SVGSVGElement> {\n size?: number;\n strokeWidth?: number;\n className?: string;\n}\n\nconst ImageUploadIcon = memo(\n forwardRef<SVGSVGElement, ImageUploadIconProps>(\n ({ size = 24, strokeWidth = 1.5, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\"sui-text-current\", className)}\n aria-hidden=\"true\"\n {...props}\n >\n <path\n d=\"M9 10C10.1046 10 11 9.10457 11 8C11 6.89543 10.1046 6 9 6C7.89543 6 7 6.89543 7 8C7 9.10457 7.89543 10 9 10Z\"\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M13 2H9C4 2 2 4 2 9V15C2 20 4 22 9 22H15C20 22 22 20 22 15V10\"\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M18 8V2L20 4\"\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M18 2L16 4\"\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M2.66992 18.95L7.59992 15.64C8.38992 15.11 9.52992 15.17 10.2399 15.78L10.5699 16.07C11.3499 16.74 12.6099 16.74 13.3899 16.07L17.5499 12.5C18.3299 11.83 19.5899 11.83 20.3699 12.5L21.9999 13.9\"\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n }\n )\n);\nImageUploadIcon.displayName = \"ImageUploadIcon\";\n\nexport { ImageUploadIcon, type ImageUploadIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface IndeterminateIconProps extends React.SVGProps<SVGSVGElement> {\n strokeWidth?: number;\n}\n\nconst IndeterminateIcon = memo(\n forwardRef<SVGSVGElement, IndeterminateIconProps>(\n ({ className, strokeWidth = 2, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\"sui-text-white\", className)}\n aria-hidden=\"true\"\n {...props}\n >\n <path\n d=\"M6 10h8\"\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n />\n </svg>\n );\n }\n )\n);\nIndeterminateIcon.displayName = \"IndeterminateIcon\";\n\nexport { IndeterminateIcon, type IndeterminateIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface InfoIconProps extends React.SVGProps<SVGSVGElement> {\n size?: number;\n className?: string;\n}\n\nconst InfoIcon = memo(\n forwardRef<SVGSVGElement, InfoIconProps>(\n ({ size = 24, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\"sui-text-current\", className)}\n aria-hidden=\"true\"\n {...props}\n >\n <rect\n width={size}\n height={size}\n rx={6}\n fill=\"url(#paint0_linear_3163_7412)\"\n />\n <path\n d=\"M12 16V11\"\n stroke=\"white\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n />\n <circle\n cx={1}\n cy={1}\n r={1}\n transform=\"matrix(1 0 0 -1 11 9)\"\n fill=\"white\"\n />\n <defs>\n <linearGradient\n id=\"paint0_linear_3163_7412\"\n x1={12}\n y1={-4.5}\n x2={12}\n y2={28}\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#4DCAFF\" />\n <stop offset={1} stopColor=\"#4EA3E0\" />\n </linearGradient>\n </defs>\n </svg>\n );\n }\n )\n);\nInfoIcon.displayName = \"InfoIcon\";\n\nexport { InfoIcon, type InfoIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface ListIconProps extends React.SVGProps<SVGSVGElement> {\n size?: number;\n className?: string;\n}\n\nconst ListIcon = memo(\n forwardRef<SVGSVGElement, ListIconProps>(\n ({ size = 24, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\"sui-text-current\", className)}\n aria-hidden=\"true\"\n {...props}\n >\n <path\n d=\"M19.9 13.5H4.1C2.6 13.5 2 14.14 2 15.73V19.77C2 21.36 2.6 22 4.1 22H19.9C21.4 22 22 21.36 22 19.77V15.73C22 14.14 21.4 13.5 19.9 13.5Z\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M19.9 2H4.1C2.6 2 2 2.64 2 4.23V8.27C2 9.86 2.6 10.5 4.1 10.5H19.9C21.4 10.5 22 9.86 22 8.27V4.23C22 2.64 21.4 2 19.9 2Z\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n }\n )\n);\nListIcon.displayName = \"ListIcon\";\n\nexport { ListIcon, type ListIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface MinusIconProps extends React.SVGProps<SVGSVGElement> {\n size?: number;\n className?: string;\n}\n\nconst MinusIcon = memo(\n forwardRef<SVGSVGElement, MinusIconProps>(\n ({ size = 16, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\"sui-text-current\", className)}\n aria-hidden=\"true\"\n {...props}\n >\n <path\n d=\"M2.5 8H13.5\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n }\n )\n);\nMinusIcon.displayName = \"MinusIcon\";\n\nexport { MinusIcon, type MinusIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface MultipleSelectionIconProps extends React.SVGProps<SVGSVGElement> {\n size?: number;\n className?: string;\n}\n\nconst MultipleSelectionIcon = memo(\n forwardRef<SVGSVGElement, MultipleSelectionIconProps>(\n ({ size = 24, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\"sui-text-current\", className)}\n aria-hidden=\"true\"\n {...props}\n >\n <path\n d=\"M7.05299 8.10139C6.93126 7.42517 7.58008 6.88883 8.20261 7.09228L8.32637 7.14365L20.5037 13.1717L20.6284 13.2451C21.1683 13.6252 21.1091 14.463 20.5211 14.7634L20.3872 14.8184L17.3326 15.8266L20.2112 19.2833L20.2671 19.3585C20.5242 19.7413 20.4479 20.2653 20.0774 20.5566L17.2079 22.8096C16.8449 23.0946 16.3297 23.0533 16.0161 22.728L15.9565 22.6592L13.1201 19.0484L10.9538 21.5519C10.4631 22.1182 9.5357 21.8631 9.40264 21.1254L7.05299 8.10139ZM10.5953 19.8126L12.4655 17.6531L12.538 17.5788C12.8892 17.2561 13.4374 17.269 13.7728 17.6081L13.8407 17.6861L16.744 21.3822L18.7893 19.7768L15.7649 16.1458C15.3621 15.6622 15.5727 14.9241 16.1702 14.7267L18.7499 13.8744L8.62065 8.86098L10.5953 19.8126ZM4.40814 14.4982V16.7458H6.68629V18.1549H3.89201C3.39947 18.1549 3 17.7552 3 17.2623V14.4982H4.40814ZM4.40814 6.62534V12.5296H3V6.62534H4.40814ZM20.3121 6.62534V10.5618H18.9039V6.62534H20.3121ZM6.68629 1V2.40909H4.40814V4.65665H3V1.8926C3 1.39973 3.39947 1 3.89201 1H6.68629ZM14.6383 1V2.40909H8.67382V1H14.6383ZM20.3121 4.65665H18.9039V2.40909H16.6258V1H19.4201C19.9126 1.00002 20.3121 1.39974 20.3121 1.8926V4.65665Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n )\n);\nMultipleSelectionIcon.displayName = \"MultipleSelectionIcon\";\n\nexport { MultipleSelectionIcon, type MultipleSelectionIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface PlusIconProps extends React.SVGProps<SVGSVGElement> {\n size?: number;\n className?: string;\n}\n\nconst PlusIcon = memo(\n forwardRef<SVGSVGElement, PlusIconProps>(\n ({ size = 16, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\"sui-text-current\", className)}\n aria-hidden=\"true\"\n {...props}\n >\n <path\n d=\"M2.5 8H13.5\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M8 2.5V13.5\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n }\n )\n);\nPlusIcon.displayName = \"PlusIcon\";\n\nexport { PlusIcon, type PlusIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface SearchIconProps extends React.SVGProps<SVGSVGElement> {\n size?: number;\n className?: string;\n}\n\nconst SearchIcon = memo(\n forwardRef<SVGSVGElement, SearchIconProps>(\n ({ size = 24, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\"sui-text-current\", className)}\n aria-hidden=\"true\"\n {...props}\n >\n <path\n d=\"M11 19C15.4183 19 19 15.4183 19 11C19 6.58172 15.4183 3 11 3C6.58172 3 3 6.58172 3 11C3 15.4183 6.58172 19 11 19Z\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M17 17L21 21\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n }\n )\n);\nSearchIcon.displayName = \"SearchIcon\";\n\nexport { SearchIcon, type SearchIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface SuccessIconProps extends React.SVGProps<SVGSVGElement> {\n size?: number;\n className?: string;\n}\n\nconst SuccessIcon = memo(\n forwardRef<SVGSVGElement, SuccessIconProps>(\n ({ size = 24, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\"sui-text-current\", className)}\n aria-hidden=\"true\"\n {...props}\n >\n <rect\n width={size}\n height={size}\n rx={6}\n fill=\"url(#paint0_linear_3163_7450)\"\n />\n <path\n d=\"M8.5 12.5L10.5 14.5L15.5 9.5\"\n stroke=\"white\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <defs>\n <linearGradient\n id=\"paint0_linear_3163_7450\"\n x1={12}\n y1={0}\n x2={12}\n y2={24}\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#48CA93\" />\n <stop offset={1} stopColor=\"#48BACA\" />\n </linearGradient>\n </defs>\n </svg>\n );\n }\n )\n);\nSuccessIcon.displayName = \"SuccessIcon\";\n\nexport { SuccessIcon, type SuccessIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface TickIconProps extends React.SVGProps<SVGSVGElement> {\n size?: number;\n className?: string;\n}\n\nconst TickIcon = memo(\n forwardRef<SVGSVGElement, TickIconProps>(\n ({ size = 16, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\"sui-text-current\", className)}\n aria-hidden=\"true\"\n {...props}\n >\n <path\n d=\"M4 7.83L6.83 10.66L12.5 5\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n }\n )\n);\nTickIcon.displayName = \"TickIcon\";\n\nexport { TickIcon, type TickIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface ToFirstIconProps extends React.SVGProps<SVGSVGElement> {\n size?: number;\n className?: string;\n}\n\nconst ToFirstIcon = memo(\n forwardRef<SVGSVGElement, ToFirstIconProps>(\n ({ size = 24, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\"sui-text-current\", className)}\n aria-hidden=\"true\"\n {...props}\n >\n <g clipPath=\"url(#clip0_3297_5706)\">\n <path\n d=\"M12 6L6 12\"\n stroke=\"#23262F\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M6 12L12 18\"\n stroke=\"#23262F\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M17 6L11 12\"\n stroke=\"#23262F\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M11 12L17 18\"\n stroke=\"#23262F\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_3297_5706\">\n <rect width={size} height={size} fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n }\n )\n);\nToFirstIcon.displayName = \"ToFirstIcon\";\n\nexport { ToFirstIcon, type ToFirstIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface ToLastIconProps extends React.SVGProps<SVGSVGElement> {\n size?: number;\n className?: string;\n}\n\nconst ToLastIcon = memo(\n forwardRef<SVGSVGElement, ToLastIconProps>(\n ({ size = 24, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\"sui-text-current\", className)}\n aria-hidden=\"true\"\n {...props}\n >\n <g clipPath=\"url(#clip0_3297_5736)\">\n <path\n d=\"M11 18L17 12\"\n stroke=\"#23262F\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M17 12L11 6\"\n stroke=\"#23262F\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M6 18L12 12\"\n stroke=\"#23262F\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M12 12L6 6\"\n stroke=\"#23262F\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_3297_5736\">\n <rect width={size} height={size} fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n }\n )\n);\nToLastIcon.displayName = \"ToLastIcon\";\n\nexport { ToLastIcon, type ToLastIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface ToNextIconProps extends React.SVGProps<SVGSVGElement> {\n size?: number;\n className?: string;\n}\n\nconst ToNextIcon = memo(\n forwardRef<SVGSVGElement, ToNextIconProps>(\n ({ size = 24, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\"sui-text-current\", className)}\n aria-hidden=\"true\"\n {...props}\n >\n <g clipPath=\"url(#clip0_3297_5731)\">\n <path\n d=\"M9 18L15 12\"\n stroke=\"#23262F\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M15 12L9 6\"\n stroke=\"#23262F\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_3297_5731\">\n <rect width={size} height={size} fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n }\n )\n);\nToNextIcon.displayName = \"ToNextIcon\";\n\nexport { ToNextIcon, type ToNextIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface ToPreviousIconProps extends React.SVGProps<SVGSVGElement> {\n size?: number;\n className?: string;\n}\n\nconst ToPreviousIcon = memo(\n forwardRef<SVGSVGElement, ToPreviousIconProps>(\n ({ size = 24, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\"sui-text-current\", className)}\n aria-hidden=\"true\"\n {...props}\n >\n <g clipPath=\"url(#clip0_3297_5714)\">\n <path\n d=\"M15 6L9 12\"\n stroke=\"#23262F\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M9 12L15 18\"\n stroke=\"#23262F\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_3297_5714\">\n <rect width={size} height={size} fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n }\n )\n);\nToPreviousIcon.displayName = \"ToPreviousIcon\";\n\nexport { ToPreviousIcon, type ToPreviousIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface VideoIconProps extends React.SVGProps<SVGSVGElement> {\n size?: number;\n className?: string;\n}\n\nconst VideoIcon = memo(\n forwardRef<SVGSVGElement, VideoIconProps>(\n ({ size = 24, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\"sui-text-current\", className)}\n aria-hidden=\"true\"\n {...props}\n >\n <path d=\"M14.73 2H9.27002V6.36H14.73V2Z\" fill=\"currentColor\" />\n <path\n d=\"M16.23 2V6.36H21.87C21.36 3.61 19.33 2.01 16.23 2Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M2 7.86V16.19C2 19.83 4.17 22 7.81 22H16.19C19.83 22 22 19.83 22 16.19V7.86H2ZM14.44 16.18L12.36 17.38C11.92 17.63 11.49 17.76 11.09 17.76C10.79 17.76 10.52 17.69 10.27 17.55C9.69 17.22 9.37 16.54 9.37 15.66V13.26C9.37 12.38 9.69 11.7 10.27 11.37C10.85 11.03 11.59 11.09 12.36 11.54L14.44 12.74C15.21 13.18 15.63 13.8 15.63 14.47C15.63 15.14 15.2 15.73 14.44 16.18Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M7.76988 2C4.66988 2.01 2.63988 3.61 2.12988 6.36H7.76988V2Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n )\n);\nVideoIcon.displayName = \"VideoIcon\";\n\nexport { VideoIcon, type VideoIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface VideoUploadIconProps extends React.SVGProps<SVGSVGElement> {\n size?: number;\n strokeWidth?: number;\n className?: string;\n}\n\nconst VideoUploadIcon = memo(\n forwardRef<SVGSVGElement, VideoUploadIconProps>(\n ({ size = 24, strokeWidth = 1.5, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\"sui-text-current\", className)}\n aria-hidden=\"true\"\n {...props}\n >\n <path\n d=\"M22 15V9C22 4 20 2 15 2H9C4 2 2 4 2 9V15C2 20 4 22 9 22H15C20 22 22 20 22 15Z\"\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M2.52002 7.11H21.48\"\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M8.52002 2.11V6.97\"\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M15.48 2.11V6.52\"\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M9.75 14.45V13.25C9.75 11.71 10.84 11.08 12.17 11.85L13.21 12.45L14.25 13.05C15.58 13.82 15.58 15.08 14.25 15.85L13.21 16.45L12.17 17.05C10.84 17.82 9.75 17.19 9.75 15.65V14.45V14.45Z\"\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n strokeMiterlimit={10}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n }\n )\n);\nVideoUploadIcon.displayName = \"VideoUploadIcon\";\n\nexport { VideoUploadIcon, type VideoUploadIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface WarnIconProps extends React.SVGProps<SVGSVGElement> {\n size?: number;\n className?: string;\n}\n\nconst WarnIcon = memo(\n forwardRef<SVGSVGElement, WarnIconProps>(\n ({ size = 24, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\"sui-text-current\", className)}\n aria-hidden=\"true\"\n {...props}\n >\n <rect\n width={size}\n height={size}\n rx={6}\n fill=\"url(#paint0_linear_3163_7433)\"\n />\n <path\n d=\"M12 9V14\"\n stroke=\"white\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n />\n <circle cx={12} cy={17} r={1} fill=\"white\" />\n <defs>\n <linearGradient\n id=\"paint0_linear_3163_7433\"\n x1={12}\n y1={0}\n x2={12}\n y2={24}\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#DBA948\" />\n <stop offset={0.0001} stopColor=\"#FFC46B\" />\n <stop offset={1} stopColor=\"#FFA318\" />\n </linearGradient>\n </defs>\n </svg>\n );\n }\n )\n);\nWarnIcon.displayName = \"WarnIcon\";\n\nexport { WarnIcon, type WarnIconProps };\n","\"use client\";\n\nimport { useScrollThreshold } from \"@/hooks/useScrollThreshold\";\nimport { DropUpIcon } from \"@/icons\";\nimport { cn, scopeClass } from \"@/lib/utils\";\nimport { forwardRef } from \"react\";\n\ninterface BackToTopProps {\n /** Offset in px before button appears */\n showAfter?: number;\n /** Positioning class overrides */\n className?: string;\n /** Container class (wrapper) */\n containerClassName?: string;\n /** Accessible label */\n ariaLabel?: string;\n /** Custom icon to display */\n icon?: React.ReactNode;\n /** Custom render function for the icon */\n renderIcon?: (visible: boolean) => React.ReactNode;\n /** Custom render function for the entire button */\n renderButton?: (props: {\n onClick: () => void;\n visible: boolean;\n className: string;\n ariaLabel: string;\n }) => React.ReactNode;\n /** Scroll behavior: 'smooth' (default) or 'auto' */\n scrollBehavior?: ScrollBehavior;\n /** Full scroll options for advanced control */\n scrollOptions?: ScrollToOptions;\n /** Custom click handler (overrides default scroll behavior) */\n onClick?: () => void;\n}\n\nconst sc = (c: string) => scopeClass(c);\n\n/**\n * BackToTop - A floating action button that appears after scrolling and scrolls to the top.\n *\n * Features:\n * - Auto-hide/show based on scroll position\n * - Smooth scroll animation\n * - Fully customizable icon and button rendering\n * - Keyboard and screen-reader accessible\n * - Responsive sizing\n *\n * Customization:\n * - `icon`: Replace the default icon\n * - `renderIcon`: Full control over icon rendering\n * - `renderButton`: Complete button customization\n * - `scrollBehavior`/`scrollOptions`: Control scroll behavior\n *\n * @example\n * ```tsx\n * // Basic usage\n * <BackToTop showAfter={300} />\n *\n * // Custom icon\n * <BackToTop icon={<ChevronUpIcon />} />\n *\n * // Custom icon render\n * <BackToTop\n * renderIcon={(visible) => (\n * <div className={visible ? \"animate-bounce\" : \"\"}>\n * <ArrowUpIcon />\n * </div>\n * )}\n * />\n *\n * // Fully custom button\n * <BackToTop\n * renderButton={({ onClick, visible, ariaLabel }) => (\n * <button\n * onClick={onClick}\n * aria-label={ariaLabel}\n * className={`custom-back-to-top ${visible ? 'show' : 'hide'}`}\n * >\n * ↑ Top\n * </button>\n * )}\n * />\n *\n * // Custom scroll behavior\n * <BackToTop\n * scrollBehavior=\"auto\"\n * onClick={() => window.scrollTo({ top: 0, behavior: 'instant' })}\n * />\n * ```\n */\nconst BackToTop = forwardRef<HTMLButtonElement, BackToTopProps>(\n (\n {\n showAfter,\n className,\n containerClassName,\n ariaLabel = \"Back to Top\",\n icon,\n renderIcon,\n renderButton,\n scrollBehavior = \"smooth\",\n scrollOptions,\n onClick,\n },\n ref\n ) => {\n const visible = useScrollThreshold(showAfter);\n\n const handleClick = () => {\n if (onClick) {\n onClick();\n } else if (scrollOptions) {\n window.scrollTo(scrollOptions);\n } else {\n window.scrollTo({ top: 0, behavior: scrollBehavior });\n }\n };\n\n const defaultClassName = cn(\n sc(\n \"sui-fixed sui-bottom-4 sui-right-4 sui-z-40 sui-rounded-full sui-bg-white sui-border sui-border-stroke-level3 sui-shadow-[0_4px_10px_rgba(26,32,44,0.15)] sui-w-10 sui-h-10 sui-md:bottom-5 sui-md:right-5 sui-md:w-12 sui-md:h-12 sui-lg:bottom-6 sui-lg:right-6 sui-lg:w-14 sui-lg:h-14 sui-flex sui-items-center sui-justify-center sui-transition-all sui-duration-300 sui-focus-visible:outline-none sui-focus-visible:ring-2 sui-focus-visible:ring-primary\"\n ),\n visible\n ? sc(\"sui-opacity-100 sui-scale-100\")\n : sc(\"sui-opacity-0 sui-scale-90 sui-pointer-events-none\"),\n className\n );\n\n // Full button override\n if (renderButton) {\n return (\n <div className={cn(sc(\"sui-scope\"), containerClassName)}>\n {renderButton({\n onClick: handleClick,\n visible,\n className: defaultClassName,\n ariaLabel,\n })}\n </div>\n );\n }\n\n // Default button with custom icon support\n return (\n <div className={cn(sc(\"sui-scope\"), containerClassName)}>\n <button\n type=\"button\"\n aria-label={ariaLabel}\n onClick={handleClick}\n ref={ref}\n className={defaultClassName}\n >\n <span className={sc(\"sui-relative sui-grid sui-place-items-center\")}>\n {renderIcon ? (\n renderIcon(visible)\n ) : icon ? (\n icon\n ) : (\n <DropUpIcon className={sc(\"sui-text-primary\")} size={24} />\n )}\n </span>\n </button>\n </div>\n );\n }\n);\nBackToTop.displayName = \"BackToTop\";\n\nexport { BackToTop, type BackToTopProps };\n","import { cn } from \"@/lib/utils\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { forwardRef, type ReactNode } from \"react\";\n\n/**\n * Accessible status badge with semantic color variants.\n *\n * Aligns with design system color semantics:\n * - `success`: Active/Complete/Done/Confirmed/Verified\n * - `warning`: In progress/Waiting for confirmation\n * - `error`: Needs attention/Important/Alert/Danger\n * - `inactive`: Closed/Passed/Not active/Too late\n * - `info`: Informational status\n *\n * @example\n * ```tsx\n * <StatusBadge status=\"success\">Active</StatusBadge>\n * <StatusBadge status=\"warning\" variant=\"outline\">Pending</StatusBadge>\n * <StatusBadge status=\"inactive\">Closed</StatusBadge>\n * <StatusBadge status=\"error\" icon={<AlertIcon />}>Urgent</StatusBadge>\n * ```\n */\nconst statusBadgeVariants = cva(\n \"sui-inline-flex sui-items-center sui-whitespace-nowrap sui-rounded-md sui-leading-none sui-select-none sui-transition-colors sui-duration-150\",\n {\n variants: {\n size: {\n sm: \"sui-body-12-medium sui-gap-1 sui-px-2 sui-py-1\",\n md: \"sui-body-14-medium sui-gap-1.5 sui-px-2 sui-py-1\",\n lg: \"sui-body-16-medium sui-gap-2 sui-px-2 sui-py-1\",\n },\n status: {\n success: \"\",\n warning: \"\",\n error: \"\",\n info: \"\",\n inactive: \"\",\n },\n variant: {\n solid: \"\",\n soft: \"\",\n outline: \"\",\n },\n fullWidth: {\n true: \"sui-w-full sui-justify-between\",\n false: \"sui-w-fit\",\n },\n },\n compoundVariants: [\n // Success variants\n {\n status: \"success\",\n variant: \"soft\",\n className: \"sui-bg-success/10 sui-text-success\",\n },\n {\n status: \"success\",\n variant: \"solid\",\n className: \"sui-bg-success sui-text-white\",\n },\n {\n status: \"success\",\n variant: \"outline\",\n className: \"sui-bg-transparent sui-text-success\",\n },\n // Warning variants\n {\n status: \"warning\",\n variant: \"soft\",\n className: \"sui-bg-warning/10 sui-text-warning\",\n },\n {\n status: \"warning\",\n variant: \"solid\",\n className: \"sui-bg-warning sui-text-white\",\n },\n {\n status: \"warning\",\n variant: \"outline\",\n className: \"sui-bg-transparent sui-text-warning\",\n },\n // Error variants\n {\n status: \"error\",\n variant: \"soft\",\n className: \"sui-bg-error/10 sui-text-error\",\n },\n {\n status: \"error\",\n variant: \"solid\",\n className: \"sui-bg-error sui-text-white\",\n },\n {\n status: \"error\",\n variant: \"outline\",\n className: \"sui-bg-transparent sui-text-error\",\n },\n // Info variants\n {\n status: \"info\",\n variant: \"soft\",\n className: \"sui-bg-info/10 sui-text-info\",\n },\n {\n status: \"info\",\n variant: \"solid\",\n className: \"sui-bg-info sui-text-white\",\n },\n {\n status: \"info\",\n variant: \"outline\",\n className: \"sui-bg-transparent sui-text-info\",\n },\n // Inactive variants\n {\n status: \"inactive\",\n variant: \"soft\",\n className: \"sui-bg-inactive/10 sui-text-inactive\",\n },\n {\n status: \"inactive\",\n variant: \"solid\",\n className: \"sui-bg-inactive sui-text-white\",\n },\n {\n status: \"inactive\",\n variant: \"outline\",\n className: \"sui-bg-transparent sui-text-inactive\",\n },\n ],\n defaultVariants: {\n size: \"sm\",\n status: \"inactive\",\n variant: \"soft\",\n fullWidth: false,\n },\n }\n);\n\nconst STATUS_LABELS: Record<StatusBadgeStatus, string> = {\n success: \"Success\",\n warning: \"Warning\",\n error: \"Error\",\n info: \"Info\",\n inactive: \"Inactive\",\n};\n\ntype StatusBadgeStatus = NonNullable<\n VariantProps<typeof statusBadgeVariants>[\"status\"]\n>;\ntype StatusBadgeVariant = NonNullable<\n VariantProps<typeof statusBadgeVariants>[\"variant\"]\n>;\ntype StatusBadgeSize = NonNullable<\n VariantProps<typeof statusBadgeVariants>[\"size\"]\n>;\n\ninterface StatusBadgeProps\n extends Omit<React.HTMLAttributes<HTMLSpanElement>, \"children\">,\n VariantProps<typeof statusBadgeVariants> {\n /**\n * Badge size using design system typography.\n * - `sm`: 12px medium (label-12-medium) - default\n * - `md`: 14px medium (body-14-medium)\n * - `lg`: 16px medium (body-16-medium)\n * @default \"sm\"\n */\n size?: \"sm\" | \"md\" | \"lg\";\n /**\n * Optional leading icon.\n */\n icon?: ReactNode;\n /**\n * Badge content (text or elements).\n */\n children?: ReactNode;\n /**\n * Accessible label for icon-only badges.\n * Falls back to the status label if no children provided.\n */\n \"aria-label\"?: string;\n}\n\nconst StatusBadge = forwardRef<HTMLSpanElement, StatusBadgeProps>(\n (\n {\n status = \"inactive\",\n variant = \"soft\",\n size = \"sm\",\n fullWidth = false,\n icon,\n className,\n children,\n \"aria-label\": ariaLabel,\n ...props\n },\n ref\n ) => {\n const resolvedStatus = status ?? \"inactive\";\n const resolvedVariant = variant ?? \"soft\";\n const resolvedSize = size ?? \"sm\";\n const hasContent = Boolean(children);\n const accessibleLabel =\n ariaLabel ?? (hasContent ? undefined : STATUS_LABELS[resolvedStatus]);\n\n return (\n <span\n ref={ref}\n role={hasContent ? undefined : \"status\"}\n aria-label={accessibleLabel}\n data-status={resolvedStatus}\n data-variant={resolvedVariant}\n className={cn(\n statusBadgeVariants({\n status: resolvedStatus,\n variant: resolvedVariant,\n size: resolvedSize,\n fullWidth,\n }),\n className\n )}\n {...props}\n >\n {icon && (\n <span\n aria-hidden=\"true\"\n className=\"sui-flex sui-flex-shrink-0 sui-items-center sui-justify-center\"\n >\n {icon}\n </span>\n )}\n {children && (\n <span className=\"sui-inline-flex sui-items-center\">{children}</span>\n )}\n </span>\n );\n }\n);\nStatusBadge.displayName = \"StatusBadge\";\n\nexport {\n StatusBadge,\n type StatusBadgeProps,\n type StatusBadgeSize,\n type StatusBadgeStatus,\n type StatusBadgeVariant,\n};\n","import { cn } from \"@/lib/utils\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { forwardRef } from \"react\";\n\nconst buttonVariants = cva(\n \"sui-inline-flex sui-items-center sui-justify-center sui-whitespace-nowrap sui-rounded-md sui-ring-offset-background sui-transition-all sui-duration-200 sui-ease-in-out focus-visible:sui-outline-none focus-visible:sui-ring-2 focus-visible:sui-ring-ring focus-visible:sui-ring-offset-2 disabled:sui-opacity-50 disabled:sui-cursor-not-allowed\",\n {\n variants: {\n variant: {\n default:\n \"sui-bg-primary sui-text-white sui-button-14-semibold enabled:hover:sui-bg-primary/90 enabled:hover:sui-shadow-md enabled:active:sui-bg-primary/95 enabled:active:sui-scale-95\",\n destructive:\n \"sui-border sui-border-error sui-bg-white sui-text-error sui-button-14-medium enabled:hover:sui-bg-red-50 enabled:hover:sui-border-error/80 enabled:active:sui-bg-red-100 enabled:active:sui-scale-95\",\n outline:\n \"sui-border sui-border-primary sui-bg-white sui-text-primary sui-button-14-medium enabled:hover:sui-bg-primary/5 enabled:hover:sui-border-primary/80 enabled:active:sui-bg-primary/10 enabled:active:sui-scale-95\",\n secondary:\n \"sui-border sui-border-gray-300 sui-bg-white sui-text-gray-700 sui-button-14-medium enabled:hover:sui-bg-gray-50 enabled:hover:sui-border-gray-400 enabled:active:sui-bg-gray-100 enabled:active:sui-scale-95\",\n text: \"sui-bg-transparent sui-text-primary sui-button-14-medium enabled:hover:sui-bg-primary/5 enabled:hover:sui-text-primary/80 enabled:active:sui-bg-primary/10 enabled:active:sui-scale-95 disabled:sui-opacity-30\",\n link: \"sui-text-info sui-underline-offset-4 sui-button-14-medium enabled:hover:sui-underline enabled:hover:sui-text-info/80 enabled:active:sui-text-info/90\",\n },\n size: {\n md: \"sui-h-9 sui-px-3 sui-py-2 sui-md:h-10 sui-md:px-4 sui-md:py-3 sui-lg:h-12\", // 36→40→48px\n lg: \"sui-h-10 sui-px-4 sui-py-3 sui-md:h-12 sui-lg:h-14\", // 40→48→56px\n icon: \"sui-h-10 sui-w-10 sui-p-0 sui-md:h-12 sui-md:w-12 sui-lg:h-14 sui-lg:w-14\", // 40→48→56px square\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n }\n);\n\ntype ButtonVariant = VariantProps<typeof buttonVariants>[\"variant\"];\ntype ButtonSize = VariantProps<typeof buttonVariants>[\"size\"];\n\ntype ButtonBaseProps = Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n \"size\"\n>;\n\ninterface ButtonProps\n extends ButtonBaseProps,\n VariantProps<typeof buttonVariants> {\n loading?: boolean;\n disabled?: boolean;\n leftIcon?: React.ReactNode;\n rightIcon?: React.ReactNode;\n}\n\n/**\n * Button - A versatile button component with multiple variants, sizes, and states.\n *\n * Features:\n * - Multiple variants: default, destructive, outline, secondary, text, link\n * - Responsive sizes: md, lg, icon (mobile-first, scales up on larger screens)\n * - Loading state with built-in spinner\n * - Left and right icon slots\n * - Full keyboard navigation and accessibility\n * - Smooth transitions and interactive states\n *\n * @example\n * ```tsx\n * // Basic usage\n * <Button onClick={handleClick}>\n * Click me\n * </Button>\n *\n * // With variant and size\n * <Button variant=\"outline\" size=\"lg\">\n * Large Outline Button\n * </Button>\n *\n * // Loading state\n * <Button loading disabled>\n * Saving...\n * </Button>\n *\n * // With icons\n * <Button leftIcon={<SaveIcon />} rightIcon={<ArrowIcon />}>\n * Save and Continue\n * </Button>\n *\n * // Icon-only button\n * <Button variant=\"text\" size=\"icon\" aria-label=\"Close\">\n * <CloseIcon />\n * </Button>\n * ```\n */\nconst Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant = \"default\",\n size = \"md\",\n loading = false,\n disabled = false,\n leftIcon,\n rightIcon,\n children,\n ...props\n },\n ref\n ) => {\n return (\n <button\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n disabled={disabled || loading}\n {...props}\n >\n {loading && (\n <svg\n className={cn(\n \"sui-h-4 sui-w-4 sui-animate-spin\",\n // add margin only when text children are present\n children && size !== \"icon\" && \"sui-mr-2\"\n )}\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"sui-opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"sui-opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n )}\n {!loading && leftIcon && (\n <span className={cn(children && size !== \"icon\" && \"sui-mr-2\")}>\n {leftIcon}\n </span>\n )}\n {children}\n {!loading && rightIcon && (\n <span className={cn(children && size !== \"icon\" && \"sui-ml-2\")}>\n {rightIcon}\n </span>\n )}\n </button>\n );\n }\n);\nButton.displayName = \"Button\";\n\nexport { Button, type ButtonProps, type ButtonSize, type ButtonVariant };\n","import { cn } from \"@/lib/utils\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { forwardRef } from \"react\";\n\nconst dividerVariants = cva(\"sui-bg-stroke-level3\", {\n variants: {\n orientation: {\n horizontal: \"sui-h-px sui-w-full\",\n vertical: \"sui-w-px\",\n },\n inset: {\n none: \"\",\n start: \"\",\n end: \"\",\n both: \"\",\n },\n thickness: {\n px: \"\",\n sm: \"\",\n },\n stretch: {\n none: \"\",\n full: \"sui-h-full\",\n },\n },\n compoundVariants: [\n // thickness depends on orientation\n {\n orientation: \"horizontal\",\n thickness: \"sm\",\n className: \"sui-h-[2px]\",\n },\n {\n orientation: \"vertical\",\n thickness: \"sm\",\n className: \"sui-w-[2px]\",\n },\n // inset depends on orientation\n {\n orientation: \"horizontal\",\n inset: \"start\",\n className: \"sui-ml-4\",\n },\n {\n orientation: \"horizontal\",\n inset: \"end\",\n className: \"sui-mr-4\",\n },\n {\n orientation: \"horizontal\",\n inset: \"both\",\n className: \"sui-mx-4\",\n },\n {\n orientation: \"vertical\",\n inset: \"start\",\n className: \"sui-mt-4\",\n },\n {\n orientation: \"vertical\",\n inset: \"end\",\n className: \"sui-mb-4\",\n },\n {\n orientation: \"vertical\",\n inset: \"both\",\n className: \"sui-my-4\",\n },\n ],\n defaultVariants: {\n orientation: \"horizontal\",\n inset: \"none\",\n thickness: \"px\",\n stretch: \"none\",\n },\n});\n\ntype DividerVariant = VariantProps<typeof dividerVariants>;\n\ntype DividerProps = React.HTMLAttributes<HTMLDivElement> &\n VariantProps<typeof dividerVariants> & {\n colorClassName?: string; // override color utility\n };\n\n/**\n * - Themed horizontal or vertical separator with orientation, inset, thickness,\n * and stretch variants. Uses role=\"separator\" for a11y.\n */\nconst Divider = forwardRef<HTMLDivElement, DividerProps>(\n (\n {\n className,\n orientation,\n inset,\n thickness,\n stretch,\n colorClassName,\n ...props\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n role=\"separator\"\n aria-orientation={\n orientation === \"vertical\" ? \"vertical\" : \"horizontal\"\n }\n className={cn(\n dividerVariants({ orientation, inset, thickness, stretch }),\n colorClassName,\n className\n )}\n {...props}\n />\n );\n }\n);\n\nDivider.displayName = \"Divider\";\n\nexport { Divider, type DividerProps, type DividerVariant };\n","import { useCallback, useState } from \"react\";\n\nexport const useControllableState = <T>({\n value,\n defaultValue,\n onChange,\n}: {\n value: T | undefined;\n defaultValue: T | undefined;\n onChange?: (v: T) => void;\n}) => {\n const [uncontrolled, setUncontrolled] = useState<T | undefined>(defaultValue);\n const isControlled = value !== undefined;\n const state = isControlled ? value : uncontrolled;\n const setState = useCallback(\n (v: T) => {\n if (isControlled) {\n onChange?.(v);\n return;\n }\n setUncontrolled(v);\n onChange?.(v);\n },\n [isControlled, onChange]\n );\n return [state, setState] as const;\n};\n","import { Divider } from \"@/components/Divider\";\nimport { useControllableState } from \"@/hooks/useControllableState\";\nimport { CloseIcon, MultipleSelectionIcon } from \"@/icons\";\nimport { cn } from \"@/lib/utils\";\nimport { Children, forwardRef, useId } from \"react\";\nimport { Button } from \"./Button\";\n\ntype MultipleSelectionButtonBaseProps = Omit<\n React.HTMLAttributes<HTMLDivElement>,\n | \"selectedCount\"\n | \"actions\"\n | \"defaultActive\"\n | \"active\"\n | \"onActiveChange\"\n | \"iconButtonAriaLabel\"\n>;\n\ninterface MultipleSelectionButtonProps\n extends MultipleSelectionButtonBaseProps {\n selectedCount?: number;\n actions?: React.ReactNode | React.ReactNode[];\n defaultActive?: boolean;\n active?: boolean;\n onActiveChange?: (active: boolean) => void;\n iconButtonAriaLabel?: string;\n selectedLabel?: React.ReactNode | ((count: number) => React.ReactNode);\n /** Custom toggle icon (when inactive) */\n toggleIcon?: React.ReactNode;\n /** Custom close icon (when active) */\n closeIcon?: React.ReactNode;\n /** Custom render function for count badge */\n renderCount?: (count: number) => React.ReactNode;\n /** Maximum count to display before showing \"99+\" */\n maxDisplayCount?: number;\n /** Custom render function for the entire component when inactive */\n renderInactive?: (props: {\n onClick: () => void;\n ariaLabel: string;\n }) => React.ReactNode;\n /** Custom render function for the entire component when active */\n renderActive?: (props: {\n onClose: () => void;\n selectedCount: number;\n selectedLabel: React.ReactNode;\n actions?: React.ReactNode | React.ReactNode[];\n }) => React.ReactNode;\n}\n\n/**\n * MultipleSelectionButton - A compact controller for multi-select mode with action toolbar.\n *\n * Features:\n * - Toggle between inactive (icon button) and active (toolbar) states\n * - Selection counter with customizable max display\n * - Action slots for bulk operations\n * - Controlled and uncontrolled modes\n * - Fully customizable icons and rendering\n *\n * Customization:\n * - `toggleIcon`/`closeIcon`: Replace default icons\n * - `renderCount`: Custom count badge rendering\n * - `renderInactive`/`renderActive`: Complete state customization\n * - `maxDisplayCount`: Control when to show \"99+\"\n *\n * @example\n * ```tsx\n * // Basic usage\n * <MultipleSelectionButton\n * active={isSelecting}\n * onActiveChange={setIsSelecting}\n * selectedCount={selected.length}\n * actions={[\n * <Button onClick={handleDelete}>Delete</Button>,\n * <Button onClick={handleExport}>Export</Button>\n * ]}\n * />\n *\n * // Custom icons\n * <MultipleSelectionButton\n * active={isSelecting}\n * onActiveChange={setIsSelecting}\n * selectedCount={selected.length}\n * toggleIcon={<CheckSquareIcon />}\n * closeIcon={<XIcon />}\n * />\n *\n * // Custom count rendering\n * <MultipleSelectionButton\n * active={isSelecting}\n * selectedCount={selected.length}\n * renderCount={(count) => (\n * <div className=\"badge\">{count} items</div>\n * )}\n * />\n *\n * // Fully custom rendering\n * <MultipleSelectionButton\n * active={isSelecting}\n * onActiveChange={setIsSelecting}\n * selectedCount={selected.length}\n * renderActive={({ onClose, selectedCount }) => (\n * <div className=\"custom-toolbar\">\n * <button onClick={onClose}>✕</button>\n * <span>{selectedCount} selected</span>\n * </div>\n * )}\n * />\n * ```\n */\nconst MultipleSelectionButton = forwardRef<\n HTMLDivElement,\n MultipleSelectionButtonProps\n>(\n (\n {\n className,\n selectedCount = 0,\n actions,\n defaultActive = false,\n active: activeProp,\n onActiveChange,\n iconButtonAriaLabel = \"Toggle multiple selection\",\n selectedLabel = \"Selected\",\n toggleIcon,\n closeIcon,\n renderCount,\n maxDisplayCount = 99,\n renderInactive,\n renderActive,\n ...props\n },\n ref\n ) => {\n const [active, setActive] = useControllableState<boolean>({\n value: activeProp,\n defaultValue: defaultActive,\n onChange: onActiveChange,\n });\n\n const labelId = useId();\n\n const resolvedLabel =\n typeof selectedLabel === \"function\"\n ? selectedLabel(selectedCount)\n : selectedLabel;\n\n // Custom inactive rendering\n if (!active) {\n if (renderInactive) {\n return (\n <div\n ref={ref}\n className={cn(\"sui-inline-flex\", className)}\n {...props}\n >\n {renderInactive({\n onClick: () => setActive(true),\n ariaLabel: iconButtonAriaLabel,\n })}\n </div>\n );\n }\n\n return (\n <div ref={ref} className={cn(\"sui-inline-flex\", className)} {...props}>\n <Button\n type=\"button\"\n aria-pressed={false}\n aria-label={iconButtonAriaLabel}\n variant=\"outline\"\n size=\"icon\"\n onClick={() => setActive(true)}\n >\n {toggleIcon || (\n <MultipleSelectionIcon size={24} className=\"sui-text-primary\" />\n )}\n </Button>\n </div>\n );\n }\n\n // Custom active rendering\n if (renderActive) {\n return (\n <div ref={ref} className={cn(\"sui-inline-flex\", className)} {...props}>\n {renderActive({\n onClose: () => setActive(false),\n selectedCount,\n selectedLabel: resolvedLabel,\n actions,\n })}\n </div>\n );\n }\n\n // Default active rendering\n return (\n <div\n ref={ref}\n role=\"group\"\n aria-labelledby={labelId}\n className={cn(\n \"sui-flex sui-items-center sui-gap-3 sui-bg-white sui-px-2 sui-py-1 sui-md:gap-4 sui-md:px-3 sui-md:py-2 sui-lg:px-4 sui-lg:py-3\",\n className\n )}\n {...props}\n >\n <Button\n type=\"button\"\n variant=\"text\"\n size=\"icon\"\n aria-label=\"Exit selection\"\n onClick={() => setActive(false)}\n >\n {closeIcon || <CloseIcon size={24} className=\"sui-text-text\" />}\n </Button>\n\n <span id={labelId} className=\"sui-body-16 sui-text-text-secondary1\">\n {resolvedLabel}\n </span>\n\n {renderCount ? (\n renderCount(selectedCount)\n ) : (\n <span className=\"sui-flex sui-h-10 sui-w-10 sui-items-center sui-justify-center sui-rounded-full sui-bg-secondary-2 sui-body-16 sui-text-text sui-md:h-12 sui-md:w-12 sui-lg:h-14 sui-lg:w-14\">\n {selectedCount > maxDisplayCount\n ? `${maxDisplayCount}+`\n : selectedCount}\n </span>\n )}\n\n <Divider\n orientation=\"vertical\"\n inset=\"both\"\n className=\"sui-h-10 sui-md:h-12 sui-lg:h-14\"\n />\n\n <div className=\"sui-flex sui-items-center sui-gap-3\">\n {Children.toArray(actions)}\n </div>\n </div>\n );\n }\n);\n\nMultipleSelectionButton.displayName = \"MultipleSelectionButton\";\n\nexport { MultipleSelectionButton, type MultipleSelectionButtonProps };\n","import { CheckIcon, IndeterminateIcon } from \"@/icons\";\nimport { cn } from \"@/lib/utils\";\nimport { forwardRef, useEffect, useImperativeHandle, useRef } from \"react\";\n\ntype BaseInputProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\">;\n\ninterface CheckboxProps extends BaseInputProps {\n /** Marks the field as invalid (error state). Applies error color styling. */\n invalid?: boolean;\n /** Sets the checkbox to an indeterminate state. */\n indeterminate?: boolean;\n /** Optional visible label. Use `children` if you need custom label layout. */\n label?: React.ReactNode;\n /** Optional description text shown under the label for a11y. */\n description?: React.ReactNode;\n /** Id of the description element for aria-describedby; auto-wired if `description` provided. */\n descriptionId?: string;\n}\n\n/**\n * Checkbox - An accessible checkbox component with custom SVG UI and advanced states.\n *\n * Features:\n * - Native checkbox behavior with custom visual design\n * - Indeterminate state support\n * - Error/invalid state styling\n * - Optional label and description\n * - Full keyboard navigation and accessibility\n * - ARIA attributes for screen readers\n *\n * @example\n * ```tsx\n * // Basic usage\n * <Checkbox\n * checked={agreed}\n * onChange={(e) => setAgreed(e.target.checked)}\n * label=\"I agree to the terms\"\n * />\n *\n * // With description\n * <Checkbox\n * checked={notifications}\n * onChange={(e) => setNotifications(e.target.checked)}\n * label=\"Enable notifications\"\n * description=\"Receive email updates about your account\"\n * />\n *\n * // With indeterminate state (e.g., \"select all\")\n * <Checkbox\n * checked={allSelected}\n * indeterminate={someSelected}\n * onChange={handleSelectAll}\n * label=\"Select all items\"\n * />\n *\n * // With error state\n * <Checkbox\n * checked={agreed}\n * onChange={(e) => setAgreed(e.target.checked)}\n * label=\"I agree to the terms\"\n * invalid={!agreed && submitted}\n * />\n * ```\n */\nconst Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(\n (\n {\n id,\n name,\n className,\n invalid = false,\n indeterminate,\n disabled,\n label,\n description,\n descriptionId,\n children,\n ...props\n },\n forwardedRef\n ) => {\n const localRef = useRef<HTMLInputElement>(null);\n\n useImperativeHandle(forwardedRef, () => localRef.current!, [forwardedRef]);\n\n useEffect(() => {\n if (localRef.current) {\n localRef.current.indeterminate = indeterminate || false;\n }\n }, [indeterminate]);\n const describedBy = description\n ? descriptionId || (id ? `${id}-desc` : undefined)\n : props[\"aria-describedby\"]; // allow override\n\n return (\n <label\n className={cn(\n \"sui-inline-flex sui-items-start sui-gap-2 sui-select-none\",\n disabled && \"sui-cursor-not-allowed\",\n className\n )}\n >\n <input\n id={id}\n ref={localRef}\n type=\"checkbox\"\n name={name}\n disabled={disabled}\n aria-describedby={describedBy}\n className={cn(\n // Keep input accessible but visually hidden; pair with peer for styling\n \"sui-peer sui-sr-only\"\n )}\n {...props}\n />\n <span\n className={cn(\n // 24x24 container with 2px padding around the inner square\n \"sui-relative sui-inline-flex sui-h-6 sui-w-6 sui-items-center sui-justify-center sui-p-[2px]\",\n // focus ring via peer\n \"peer-focus-visible:sui-ring-2 peer-focus-visible:sui-ring-primary peer-focus-visible:sui-ring-offset-2 peer-focus-visible:sui-ring-offset-white\",\n // When input is checked, update square fill and show checkmark\n !invalid &&\n \"peer-checked:[&_.sui-checkbox-square]:sui-fill-primary peer-checked:[&_.sui-checkbox-square]:sui-stroke-primary peer-checked:[&_.sui-checkbox-check]:sui-opacity-100\",\n invalid &&\n \"peer-checked:[&_.sui-checkbox-square]:sui-fill-error peer-checked:[&_.sui-checkbox-square]:sui-stroke-error peer-checked:[&_.sui-checkbox-check]:sui-opacity-100\",\n // When indeterminate, show minus sign\n \"peer-indeterminate:[&_.sui-checkbox-square]:sui-fill-primary peer-indeterminate:[&_.sui-checkbox-square]:sui-stroke-primary peer-indeterminate:[&_.sui-checkbox-minus]:sui-opacity-100\",\n disabled && \"sui-opacity-40\"\n )}\n aria-hidden=\"true\"\n >\n <svg\n className=\"sui-h-5 sui-w-5\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect\n className={cn(\n \"sui-checkbox-square\",\n !invalid ? \"sui-stroke-inactive\" : \"sui-stroke-error\",\n \"sui-transition-all sui-duration-200\"\n )}\n x=\"1.4\"\n y=\"1.4\"\n width=\"17.2\"\n height=\"17.2\"\n rx=\"4\"\n ry=\"4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.4\"\n vectorEffect=\"non-scaling-stroke\"\n />\n <g className=\"sui-checkbox-check sui-opacity-0 sui-transition-opacity sui-duration-200\">\n <CheckIcon className=\"sui-h-5 sui-w-5\" strokeWidth={2.2} />\n </g>\n <g className=\"sui-checkbox-minus sui-opacity-0 sui-transition-opacity sui-duration-200\">\n <IndeterminateIcon className=\"sui-h-5 sui-w-5\" strokeWidth={2} />\n </g>\n </svg>\n </span>\n\n {(label || children) && (\n <span className=\"sui-flex sui-flex-col sui-gap-1\">\n {label ?? children}\n {description && (\n <span\n id={describedBy}\n aria-hidden=\"true\"\n className={cn(\n \"sui-text-12\",\n invalid ? \"sui-text-error\" : \"sui-text-text-secondary1\"\n )}\n >\n {description}\n </span>\n )}\n </span>\n )}\n </label>\n );\n }\n);\n\nCheckbox.displayName = \"Checkbox\";\n\nexport { Checkbox, type CheckboxProps };\n","import { useControllableState } from \"@/hooks/useControllableState\";\nimport { cn } from \"@/lib/utils\";\nimport { Orientation } from \"@/types\";\nimport { forwardRef, useCallback } from \"react\";\nimport { Checkbox } from \"./CheckBox\";\n\ninterface CheckboxGroupOption<T extends string = string> {\n value: T;\n label: React.ReactNode;\n description?: React.ReactNode;\n disabled?: boolean;\n invalid?: boolean;\n id?: string;\n}\n\ntype BaseFieldSetProps = Omit<\n React.HTMLAttributes<HTMLFieldSetElement>,\n \"onChange\"\n>;\n\ninterface CheckboxGroupProps<T extends string = string>\n extends BaseFieldSetProps {\n /** Accessible legend/title for the group */\n legend: React.ReactNode;\n /** Shared name assigned to all checkboxes in this group */\n name: string;\n /** Layout direction */\n orientation?: Orientation;\n /** Checkbox options list */\n options: CheckboxGroupOption<T>[];\n /** Controlled values array */\n value?: T[];\n /** Uncontrolled default values array */\n defaultValue?: T[];\n /** Change handler (receives array of selected values) */\n onChange?: (selected: T[]) => void;\n /** Marks group invalid; individual option invalids override per item */\n invalid?: boolean;\n /** Description for the group for SR users */\n description?: React.ReactNode;\n /** ID for description element, auto if omitted */\n descriptionId?: string;\n /** Show \"Select All\" checkbox */\n showSelectAll?: boolean;\n /** Label for the \"Select All\" checkbox */\n selectAllLabel?: React.ReactNode;\n}\n\n/**\n * - Fieldset wrapper managing a group of checkboxes with optional Select All,description, and orientation.\n */\nconst CheckboxGroup = forwardRef<\n HTMLFieldSetElement,\n CheckboxGroupProps<string>\n>((props, forwardedRef) => {\n const {\n legend,\n name,\n orientation = \"vertical\",\n options,\n value,\n defaultValue,\n onChange,\n className,\n invalid,\n description,\n descriptionId,\n showSelectAll = false,\n selectAllLabel = \"Select All\",\n ...fieldsetProps\n } = props;\n\n const [selected, setSelected] = useControllableState<string[]>({\n value,\n defaultValue,\n onChange,\n });\n\n const groupDescId = description ? descriptionId || `${name}-desc` : undefined;\n\n // Consider only enabled options for aggregate states\n const enabledOptionValues = options\n .filter((opt) => !opt.disabled)\n .map((opt) => opt.value);\n\n const allChecked = (selected?.length ?? 0) === enabledOptionValues.length;\n const someChecked = (selected?.length ?? 0) > 0;\n const isIndeterminate = someChecked && !allChecked;\n\n const handleSelectAll = useCallback(\n (checked: boolean) => {\n if (checked) {\n // Only select the options that are NOT disabled\n const allEnabledValues = options\n .filter((opt) => !opt.disabled)\n .map((opt) => opt.value);\n setSelected(allEnabledValues);\n } else {\n setSelected([]);\n }\n },\n [options, setSelected]\n );\n\n const handleOptionChange = useCallback(\n (optionValue: string, checked: boolean) => {\n const current = selected || [];\n if (checked) {\n setSelected([...current, optionValue]);\n } else {\n setSelected(current.filter((v) => v !== optionValue));\n }\n },\n [selected, setSelected]\n );\n\n return (\n <fieldset\n className={cn(\n \"sui-flex\",\n orientation === \"horizontal\"\n ? \"sui-flex-row sui-gap-4\"\n : \"sui-flex-col sui-gap-2\",\n className\n )}\n aria-invalid={invalid || undefined}\n aria-describedby={groupDescId}\n ref={forwardedRef}\n {...fieldsetProps}\n >\n <legend className=\"sui-text-14 sui-font-medium sui-text-text-default\">\n {legend}\n </legend>\n {description && (\n <p\n id={groupDescId}\n className={cn(\n \"sui-text-12\",\n invalid ? \"sui-text-error\" : \"sui-text-text-secondary1\"\n )}\n >\n {description}\n </p>\n )}\n {showSelectAll && (\n <Checkbox\n id={`${name}-select-all`}\n name={`${name}-select-all`}\n label={selectAllLabel}\n checked={allChecked}\n indeterminate={isIndeterminate}\n onChange={(e) => handleSelectAll(e.target.checked)}\n />\n )}\n {options.map((opt) => {\n const checked = selected?.includes(opt.value) ?? false;\n const id = opt.id || `${name}-${opt.value}`;\n return (\n <Checkbox\n key={opt.value}\n id={id}\n name={name}\n label={opt.label}\n description={opt.description}\n disabled={opt.disabled}\n invalid={opt.invalid ?? invalid}\n checked={checked}\n onChange={(e) => handleOptionChange(opt.value, e.target.checked)}\n />\n );\n })}\n </fieldset>\n );\n});\n\nCheckboxGroup.displayName = \"CheckboxGroup\";\n\nexport { CheckboxGroup, type CheckboxGroupOption, type CheckboxGroupProps };\n","import { cn } from \"@/lib/utils\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { forwardRef, useId } from \"react\";\n\nconst inputVariants = cva(\n // Mobile-first: slightly smaller on base, scale up at sm\n \"sui-flex sui-h-10 sui-w-full sui-rounded-md sui-border sui-border-secondary-300 sui-bg-background sui-px-3 sui-py-2 sui-body-14 sui-sm:h-12 sui-sm:px-4 sui-sm:py-3 sui-sm:body-16 placeholder:sui-text-disabled placeholder:sui-body-12 sui-sm:placeholder:sui-body-14 focus-visible:sui-outline-none disabled:sui-cursor-not-allowed disabled:sui-opacity-50\",\n {\n variants: {\n variant: {\n default:\n \"sui-border-secondary focus:sui-border-primary focus-visible:sui-border-primary\",\n error:\n \"sui-border-error focus:sui-border-error focus-visible:sui-border-error\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n);\n\ntype InputVariants = VariantProps<typeof inputVariants>;\ntype InputVariant = InputVariants[\"variant\"];\n\ntype InputBaseProps = Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"size\" | \"required\"\n>;\n\ninterface InputProps extends InputBaseProps {\n variant?: InputVariant;\n label?: string;\n error?: string;\n helperText?: string;\n // Native input size attribute, exposed as a safer, explicit prop name\n // to avoid confusion with layout sizing props.\n contentSize?: number;\n leftDivider?: boolean;\n rightDivider?: boolean;\n containerClassName?: string;\n required?: boolean;\n disabled?: boolean;\n\n leftIcon?: React.ReactNode;\n onLeftIconClick?: () => void;\n leftIconAriaLabel?: string;\n\n rightIcon?: React.ReactNode;\n onRightIconClick?: () => void;\n rightIconAriaLabel?: string;\n}\n\n/**\n * - Internal icon container to render left/right icons (clickable or static)\n */\nconst IconContainer = ({\n icon,\n onClick,\n ariaLabel,\n side,\n}: {\n icon: React.ReactNode;\n onClick?: () => void;\n ariaLabel?: string;\n side: \"left\" | \"right\";\n}) => {\n const positionClasses = side === \"left\" ? \"sui-left-3\" : \"sui-right-3\";\n const commonClasses =\n // Slightly smaller icon container on mobile, scale up at sm\n \"sui-absolute sui-top-1/2 sui--translate-y-1/2 sui-inline-flex sui-items-center sui-justify-center sui-w-5 sui-h-5 sui-sm:w-6 sui-sm:h-6 sui-text-secondary-400 sui-z-20\";\n\n if (onClick) {\n return (\n <button\n type=\"button\"\n aria-label={ariaLabel ?? \"icon button\"}\n className={cn(commonClasses, positionClasses)}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n onClick();\n }}\n >\n {icon}\n </button>\n );\n }\n\n return (\n <div\n className={\n // pointer-events-none so clicks go through when not interactive\n cn(\n commonClasses,\n positionClasses,\n \"sui-pointer-events-none sui-transform\"\n )\n }\n >\n {icon}\n </div>\n );\n};\n\n/**\n * Input - A text input component with validation, icons, and accessibility features.\n *\n * Features:\n * - Validation states with error styling\n * - Label, helper text, and error message support\n * - Left and right icon slots (static or clickable)\n * - Optional dividers between icons and input\n * - Responsive sizing (mobile-first design)\n * - Full keyboard navigation and accessibility\n * - Support for all native input types\n *\n * @example\n * ```tsx\n * // Basic usage\n * <Input\n * label=\"Email\"\n * placeholder=\"Enter your email\"\n * value={email}\n * onChange={(e) => setEmail(e.target.value)}\n * />\n *\n * // With validation\n * <Input\n * label=\"Password\"\n * type=\"password\"\n * required\n * error=\"Password must be at least 8 characters\"\n * helperText=\"Use a strong password\"\n * />\n *\n * // With icons\n * <Input\n * leftIcon={<SearchIcon />}\n * placeholder=\"Search...\"\n * />\n *\n * // With clickable icons\n * <Input\n * type=\"password\"\n * rightIcon={<EyeIcon />}\n * onRightIconClick={togglePasswordVisibility}\n * rightIconAriaLabel=\"Toggle password visibility\"\n * />\n *\n * // With dividers\n * <Input\n * leftIcon={<DollarIcon />}\n * leftDivider\n * placeholder=\"0.00\"\n * />\n * ```\n */\nconst Input = forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n variant = \"default\",\n type = \"text\",\n label,\n error,\n helperText,\n contentSize,\n leftIcon,\n rightIcon,\n leftDivider,\n rightDivider,\n containerClassName,\n id,\n required = false,\n disabled = false,\n onLeftIconClick,\n leftIconAriaLabel,\n onRightIconClick,\n rightIconAriaLabel,\n ...props\n },\n ref\n ) => {\n const autoId = useId();\n const inputId = id ?? autoId;\n const hasError = Boolean(error);\n const inputVariant = hasError ? \"error\" : variant;\n const errorId = `${inputId}-error`;\n const helpId = `${inputId}-help`;\n // Combine IDs when both are relevant. Helper text is only rendered when no error.\n const describedById =\n [hasError && errorId, !hasError && helperText && helpId]\n .filter(Boolean)\n .join(\" \") || undefined;\n\n return (\n <div className={cn(\"sui-w-full\", containerClassName)}>\n {label && (\n <label\n htmlFor={inputId}\n className=\"sui-block sui-text-14 sui-font-normal sui-text-inactive sui-mb-2\"\n >\n {label}\n {required && <span className=\"sui-text-error sui-ml-1\">*</span>}\n </label>\n )}\n\n <div className=\"sui-relative\">\n {leftIcon && (\n <IconContainer\n icon={leftIcon}\n onClick={onLeftIconClick}\n ariaLabel={leftIconAriaLabel}\n side=\"left\"\n />\n )}\n {leftDivider && leftIcon && (\n <div className=\"sui-pointer-events-none sui-absolute sui-top-1/2 sui-left-[38px] sui-sm:left-[42px] sui-h-6 sui-w-px sui--translate-y-1/2 sui-bg-stroke-level3 sui-z-10\" />\n )}\n\n <input\n type={type}\n className={cn(\n inputVariants({ variant: inputVariant, className }),\n leftIcon && \"sui-pl-10 sui-sm:pl-12\",\n rightIcon && \"sui-pr-10 sui-sm:pr-12\"\n )}\n ref={ref}\n id={inputId}\n size={contentSize}\n required={required}\n aria-required={required}\n aria-invalid={hasError}\n aria-describedby={describedById}\n disabled={disabled}\n {...props}\n />\n\n {rightDivider && rightIcon && (\n <div className=\"sui-pointer-events-none sui-absolute sui-top-1/2 sui-right-[38px] sui-sm:sui-right-[42px] sui-h-6 sui-w-px sui--translate-y-1/2 sui-bg-stroke-level3 sui-z-10\" />\n )}\n {rightIcon && (\n <IconContainer\n icon={rightIcon}\n onClick={onRightIconClick}\n ariaLabel={rightIconAriaLabel}\n side=\"right\"\n />\n )}\n </div>\n\n {(error || helperText) && (\n <div className=\"sui-mt-2\">\n {error && (\n <p\n id={`${inputId}-error`}\n role=\"alert\"\n className=\"sui-text-12 sui-leading-[100%] sui-tracking-[-0.01em] sui-text-error\"\n >\n {error}\n </p>\n )}\n {!error && helperText && (\n <p\n id={`${inputId}-help`}\n className=\"sui-text-12 sui-leading-[100%] sui-tracking-[-0.01em] sui-text-inactive\"\n >\n {helperText}\n </p>\n )}\n </div>\n )}\n </div>\n );\n }\n);\nInput.displayName = \"Input\";\n\nexport { Input, type InputProps, type InputVariant };\n","import { useControllableState } from \"@/hooks/useControllableState\";\nimport { MinusIcon, PlusIcon } from \"@/icons\";\nimport { cn } from \"@/lib/utils\";\nimport { forwardRef, useCallback, useId, useRef, useState } from \"react\";\n\ntype QuantityInputBaseProps = Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"onChange\" | \"type\" | \"value\" | \"defaultValue\"\n>;\n\ninterface QuantityInputProps extends QuantityInputBaseProps {\n value?: number;\n defaultValue?: number;\n onChange?: (value: number) => void;\n min?: number;\n max?: number;\n step?: number;\n label?: string;\n helperText?: string;\n error?: string;\n containerClassName?: string;\n inputClassName?: string;\n /** Disable manual typing; only allow +/- */\n readOnlyInput?: boolean;\n}\n\n/**\n * - Controlled/uncontrolled via useControllableState\n * - Clamps to [min, max]\n * - Disables +/- when at bounds\n * - Auto-clamps manual input on blur or invalid typing\n */\nconst QuantityInput = forwardRef<HTMLInputElement, QuantityInputProps>(\n (\n {\n value,\n defaultValue = 0,\n onChange,\n min = Number.NEGATIVE_INFINITY,\n max = Number.POSITIVE_INFINITY,\n step = 1,\n id,\n label,\n helperText,\n error,\n disabled,\n containerClassName,\n inputClassName,\n readOnlyInput = false,\n ...inputProps\n },\n ref\n ) => {\n const autoId = useId();\n const inputId = id ?? autoId;\n const errorId = `${inputId}-error`;\n const helpId = `${inputId}-help`;\n\n const clamp = useCallback(\n (n: number) => {\n // If NaN is passed (e.g., while typing empty), fall back to the\n // initial default value clamped into range for predictable resets.\n if (Number.isNaN(n))\n return Math.min(Math.max(defaultValue ?? 0, min), max);\n if (n < min) return min;\n if (n > max) return max;\n return n;\n },\n [min, max, defaultValue]\n );\n\n const [current, setCurrent] = useControllableState<number>({\n value: value as number | undefined,\n defaultValue: clamp(defaultValue),\n onChange,\n });\n\n // Keep track of the last valid value to support Escape revert\n const lastValidRef = useRef<number>(clamp(defaultValue ?? 0));\n\n const canDecrement = current !== undefined ? current - step >= min : true;\n const canIncrement = current !== undefined ? current + step <= max : true;\n\n // Track transient raw input (e.g., \"-\" or empty) to allow user to type negatives naturally.\n const [pendingRaw, setPendingRaw] = useState<string | null>(null);\n\n const update = useCallback(\n (n: number) => {\n const next = clamp(n);\n lastValidRef.current = next;\n setCurrent(next);\n },\n [clamp, setCurrent]\n );\n\n const handleDecrease = useCallback(() => {\n if (disabled || !canDecrement) return;\n update((current ?? 0) - step);\n }, [disabled, canDecrement, update, current, step]);\n\n const handleIncrease = useCallback(() => {\n if (disabled || !canIncrement) return;\n update((current ?? 0) + step);\n }, [disabled, canIncrement, update, current, step]);\n\n const handleInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (disabled) return;\n const raw = e.target.value;\n // Allow empty or standalone '-' while typing; clamp/normalize on blur\n if (raw === \"\" || raw === \"-\") {\n setPendingRaw(raw);\n setCurrent(NaN as unknown as number);\n return;\n }\n // Locale-agnostic: strip everything except digits and a leading '-'\n const sanitized = raw\n .replace(/[^\\d-]/g, \"\") // keep digits and '-'\n .replace(/(?!^)-/g, \"\"); // remove any '-' not at start\n const parsed = Number(sanitized);\n if (!Number.isFinite(parsed)) return;\n setPendingRaw(null);\n setCurrent(parsed);\n },\n [disabled, setCurrent]\n );\n\n const handleBlur = useCallback(() => {\n if (disabled) return;\n // If current is not a finite number (e.g., empty), reset to initial default (clamped)\n const numeric = Number(current);\n const next = Number.isFinite(numeric)\n ? clamp(numeric)\n : clamp(defaultValue ?? 0);\n lastValidRef.current = next;\n setCurrent(next);\n setPendingRaw(null);\n }, [disabled, clamp, current, setCurrent, defaultValue]);\n\n const hasError = Boolean(error);\n const describedBy =\n [hasError && errorId, !hasError && helperText && helpId]\n .filter(Boolean)\n .join(\" \") || undefined;\n\n const formatNumber = useCallback((n: number) => {\n return Number.isFinite(n) ? n.toLocaleString() : \"\";\n }, []);\n\n return (\n <div className={cn(\"sui-w-full\", containerClassName)}>\n {label && (\n <label\n htmlFor={inputId}\n className=\"sui-block sui-text-14 sui-font-normal sui-text-inactive sui-mb-2\"\n >\n {label}\n </label>\n )}\n\n <div className={cn(\"sui-flex sui-items-stretch sui-w-full sui-gap-2\")}>\n <button\n type=\"button\"\n aria-label=\"Decrease quantity\"\n onClick={handleDecrease}\n disabled={disabled || !canDecrement}\n className={cn(\n \"sui-h-[30px] sui-w-[30px] sui-rounded-sm sui-border sui-border-icon-black disabled:sui-border-icon-gray sui-bg-background-secondary1 sui-inline-flex sui-items-center sui-justify-center sui-text-icon-black disabled:sui-text-icon-gray focus-visible:sui-outline-none focus-visible:sui-ring-2 focus-visible:sui-ring-primary disabled:sui-opacity-50 disabled:sui-cursor-not-allowed\"\n )}\n >\n <MinusIcon aria-hidden=\"true\" />\n </button>\n\n <input\n ref={ref}\n id={inputId}\n inputMode=\"numeric\"\n type=\"text\"\n role=\"spinbutton\"\n aria-valuemin={Number.isFinite(min) ? min : undefined}\n aria-valuemax={Number.isFinite(max) ? max : undefined}\n aria-valuenow={\n Number.isFinite(Number(current)) ? Number(current) : undefined\n }\n aria-invalid={hasError}\n aria-describedby={describedBy}\n className={cn(\n \"sui-flex-1 sui-h-[30px] sui-text-center sui-rounded-sm sui-border sui-border-secondary-300 sui-bg-background-default sui-text-text-default sui-body-14-medium focus-visible:sui-outline-none disabled:sui-cursor-not-allowed disabled:sui-opacity-50\",\n inputClassName\n )}\n value={\n pendingRaw !== null\n ? pendingRaw\n : Number.isFinite(Number(current))\n ? formatNumber(Number(current))\n : \"\"\n }\n onChange={readOnlyInput ? undefined : handleInputChange}\n readOnly={readOnlyInput}\n onBlur={handleBlur}\n disabled={disabled}\n {...(() => {\n const { onKeyDown: userOnKeyDown, ...rest } = inputProps;\n return {\n ...rest,\n onKeyDown: (e: React.KeyboardEvent<HTMLInputElement>) => {\n userOnKeyDown?.(e);\n if (e.defaultPrevented) return;\n if (e.key === \"Enter\") {\n e.preventDefault();\n const numeric = Number(current);\n const next = Number.isFinite(numeric)\n ? clamp(numeric)\n : clamp(defaultValue ?? 0);\n lastValidRef.current = next;\n setCurrent(next);\n setPendingRaw(null);\n } else if (e.key === \"Escape\") {\n e.preventDefault();\n setCurrent(lastValidRef.current);\n setPendingRaw(null);\n }\n },\n } as const;\n })()}\n />\n\n <button\n type=\"button\"\n aria-label=\"Increase quantity\"\n onClick={handleIncrease}\n disabled={disabled || !canIncrement}\n className={cn(\n \"sui-h-[30px] sui-w-[30px] sui-rounded-sm sui-border sui-border-icon-black disabled:sui-border-icon-gray sui-bg-background-secondary1 sui-inline-flex sui-items-center sui-justify-center sui-text-icon-black disabled:sui-text-icon-gray focus-visible:sui-outline-none focus-visible:sui-ring-2 focus-visible:sui-ring-primary disabled:sui-opacity-50 disabled:sui-cursor-not-allowed\"\n )}\n >\n <PlusIcon aria-hidden=\"true\" />\n </button>\n </div>\n\n {(error || helperText) && (\n <div className=\"sui-mt-2\">\n {error && (\n <p\n id={errorId}\n role=\"alert\"\n className=\"sui-text-12 sui-leading-[100%] sui-tracking-[-0.01em] sui-text-error\"\n >\n {error}\n </p>\n )}\n {!error && helperText && (\n <p\n id={helpId}\n className=\"sui-text-12 sui-leading-[100%] sui-tracking-[-0.01em] sui-text-inactive\"\n >\n {helperText}\n </p>\n )}\n </div>\n )}\n </div>\n );\n }\n);\nQuantityInput.displayName = \"QuantityInput\";\n\nexport { QuantityInput, type QuantityInputProps };\n","import { LegacyRef, MutableRefObject, RefCallback } from \"react\";\n\n/**\n * Robust ref merging utility for handling multiple refs\n * Properly handles both callback refs and RefObjects\n *\n * @param refs - Array of refs to merge\n * @returns Merged ref callback\n *\n * @example\n * ```tsx\n * const inputRef = useRef<HTMLInputElement>(null);\n * const mergedRef = useMergeRefs(ref, inputRef);\n * <input ref={mergedRef} />\n * ```\n */\nexport const useMergeRefs = <T>(\n ...refs: Array<LegacyRef<T> | undefined | null>\n): RefCallback<T> => {\n return (value) => {\n refs.forEach((ref) => {\n if (typeof ref === \"function\") {\n ref(value);\n } else if (ref != null) {\n (ref as MutableRefObject<T | null>).current = value;\n }\n });\n };\n};\n","import { useMergeRefs } from \"@/hooks/useMergeRefs\";\nimport { CloseIcon, SearchIcon } from \"@/icons\";\nimport { cn } from \"@/lib/utils\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { forwardRef, useCallback, useRef, useState } from \"react\";\n\nconst searchInputVariants = cva(\n \"sui-flex sui-items-center sui-h-12 sui-rounded-md sui-border sui-border-secondary-300 sui-bg-background sui-transition-all sui-duration-300 sui-ease-in-out focus-within:sui-border-primary focus-within:sui-shadow-sm\",\n {\n variants: {\n variant: {\n compact: \"sui-w-12 sui-p-0 sui-justify-center\",\n full: \"sui-w-full sui-px-4 sui-py-3\",\n },\n },\n defaultVariants: {\n variant: \"full\",\n },\n }\n);\n\ntype SearchInputVariant = VariantProps<typeof searchInputVariants>[\"variant\"];\n\ntype SearchInputBaseProps = Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"size\" | \"type\"\n>;\n\ninterface SearchInputProps extends SearchInputBaseProps {\n variant?: SearchInputVariant;\n placeholder?: string;\n onSearch?: (value: string) => void;\n clearable?: boolean;\n containerClassName?: string;\n disabled?: boolean;\n defaultValue?: string;\n}\n\n/**\n * - Search field with compact and full variants, animated expansion, keyboard\n * handling, and optional clear button.\n */\nconst SearchInput = forwardRef<HTMLInputElement, SearchInputProps>(\n (\n {\n className,\n variant = \"full\",\n placeholder = \"Search...\",\n onSearch,\n clearable = true,\n containerClassName,\n disabled = false,\n value,\n defaultValue,\n onChange,\n ...props\n },\n ref\n ) => {\n const [isExpanded, setIsExpanded] = useState(false);\n const [internalValue, setInternalValue] = useState(defaultValue || \"\");\n const inputRef = useRef<HTMLInputElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n\n // Use the ref merging hook for robust ref handling\n const mergedInputRef = useMergeRefs(ref, inputRef);\n\n const isControlled = value !== undefined;\n const currentValue = isControlled ? value : internalValue;\n const hasValue = Boolean(currentValue && String(currentValue).length > 0);\n\n // Handle focus for compact variant\n const handleFocus = useCallback(() => {\n if (variant === \"compact\" && !disabled) {\n setIsExpanded(true);\n // Focus the input after expansion animation\n setTimeout(() => {\n inputRef.current?.focus();\n }, 150);\n }\n }, [variant, disabled]);\n\n // Handle blur for compact variant\n const handleBlur = useCallback(\n (e: React.FocusEvent) => {\n // Don't collapse if focus is moving to the clear button\n if (\n variant === \"compact\" &&\n !containerRef.current?.contains(e.relatedTarget as Node)\n ) {\n setIsExpanded(false);\n }\n },\n [variant]\n );\n\n // Handle input change\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) {\n setInternalValue(e.target.value);\n }\n onChange?.(e);\n },\n [isControlled, onChange]\n );\n\n // Handle search (Enter key or search button click)\n const handleSearch = useCallback(() => {\n onSearch?.(String(currentValue));\n }, [onSearch, currentValue]);\n\n // Handle clear\n const handleClear = useCallback(() => {\n if (!isControlled) {\n setInternalValue(\"\");\n }\n\n // Create a more robust synthetic event\n const syntheticEvent = {\n ...new Event(\"change\", { bubbles: true }),\n target: { value: \"\" } as HTMLInputElement,\n currentTarget: { value: \"\" } as HTMLInputElement,\n } as unknown as React.ChangeEvent<HTMLInputElement>;\n\n onChange?.(syntheticEvent);\n inputRef.current?.focus();\n }, [isControlled, onChange]);\n\n // Handle input key down\n const handleInputKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\") {\n handleSearch();\n }\n },\n [handleSearch]\n );\n\n // Handle click on container (for compact variant)\n const handleContainerClick = useCallback(() => {\n if (variant === \"compact\" && !isExpanded && !disabled) {\n handleFocus();\n }\n }, [variant, isExpanded, disabled, handleFocus]);\n\n // Handle keyboard events for accessibility\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if ((e.key === \"Enter\" || e.key === \" \") && !disabled) {\n e.preventDefault();\n handleContainerClick();\n }\n },\n [handleContainerClick, disabled]\n );\n\n const isCompactAndExpanded = variant === \"compact\" && isExpanded;\n const shouldShowInput = variant === \"full\" || isCompactAndExpanded;\n\n return (\n <div className={cn(\"sui-relative\", containerClassName)}>\n <div\n ref={containerRef}\n className={cn(\n searchInputVariants({ variant }),\n // Apply expansion styles dynamically only for the compact variant\n isCompactAndExpanded && \"sui-w-full sui-px-4 sui-py-3\",\n className,\n disabled && \"sui-opacity-50 sui-cursor-not-allowed\",\n variant === \"compact\" &&\n !isExpanded &&\n !disabled &&\n \"sui-cursor-pointer\"\n )}\n onClick={handleContainerClick}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n onBlur={handleBlur}\n role={variant === \"compact\" && !isExpanded ? \"button\" : undefined}\n tabIndex={variant === \"compact\" && !isExpanded ? 0 : undefined}\n aria-expanded={variant === \"compact\" ? isExpanded : undefined}\n aria-label={\n variant === \"compact\" && !isExpanded ? \"Open search\" : undefined\n }\n >\n {/* Search Icon */}\n <div className=\"sui-flex sui-items-center sui-justify-center sui-text-secondary-400 shrink-0\">\n <SearchIcon size={24} />\n </div>\n\n {/* Input Field */}\n {shouldShowInput && (\n <div className=\"sui-flex-1 sui-ml-3 sui-relative\">\n <input\n ref={mergedInputRef}\n type=\"text\"\n value={currentValue}\n onChange={handleChange}\n onKeyDown={handleInputKeyDown}\n placeholder={placeholder}\n disabled={disabled}\n className=\"sui-w-full sui-bg-transparent sui-border-none sui-outline-none sui-text-16 sui-text-foreground placeholder:sui-text-disabled placeholder:sui-text-14\"\n aria-label=\"Search input\"\n {...props}\n />\n </div>\n )}\n\n {/* Clear Button */}\n {shouldShowInput && hasValue && clearable && (\n <button\n type=\"button\"\n onClick={handleClear}\n disabled={disabled}\n className=\"sui-ml-2 sui-flex sui-items-center sui-justify-center sui-text-secondary-400 hover:sui-text-secondary-600 sui-transition-colors sui-duration-200 sui-w-6 sui-h-6 sui-rounded-sm hover:sui-bg-secondary-100 shrink-0\"\n aria-label=\"Clear search\"\n tabIndex={0}\n >\n <CloseIcon size={24} />\n </button>\n )}\n </div>\n </div>\n );\n }\n);\nSearchInput.displayName = \"SearchInput\";\n\nexport { SearchInput, type SearchInputProps, type SearchInputVariant };\n","import {\n addDays,\n addMonths,\n eachDayOfInterval,\n endOfMonth,\n format,\n isSameDay,\n startOfMonth,\n startOfWeek,\n} from \"date-fns\";\nimport { de, enUS, es, fr, it, ja, pt, ru, zhCN, zhTW } from \"date-fns/locale\";\n\n// Locale mapping for date-fns locales\nconst locales = {\n ja,\n en: enUS,\n enUS,\n fr,\n de,\n es,\n it,\n pt,\n ru,\n zh: zhCN,\n zhCN,\n zhTW,\n} as const;\n\nconst clampDate = (d: Date, min?: Date, max?: Date) => {\n if (min && d < min) return min;\n if (max && d > max) return max;\n return d;\n};\n\nconst toDateKey = (d: Date) => format(d, \"yyyy-M-d\");\n\nconst daysGrid = (viewMonth: Date, localeCode = \"en\") => {\n const start = startOfMonth(viewMonth);\n const locale = locales[localeCode as keyof typeof locales] ?? enUS;\n const weekStartsOn = (locale.options?.weekStartsOn ?? 1) as\n | 0\n | 1\n | 2\n | 3\n | 4\n | 5\n | 6;\n\n const startCal = startOfWeek(start, { weekStartsOn });\n // To ensure a fixed 6-week grid, we add 41 days to the start (total 42 days)\n const endCal = addDays(startCal, 41);\n\n return eachDayOfInterval({\n start: startCal,\n end: endCal,\n });\n};\n\n// ------------- Formatting helpers (localized) -------------\nexport type DateLikeRange = { from: Date | null; to: Date | null };\n\nconst isRangeLike = (v: Date | DateLikeRange | null): v is DateLikeRange => {\n return !!v && typeof v === \"object\" && \"from\" in v && \"to\" in v;\n};\n\nconst formatSingle = (d: Date, localeCode: string, includeTime: boolean) => {\n const locale = locales[localeCode as keyof typeof locales] ?? enUS;\n\n if (includeTime) {\n const timeFormat = format(d, \"HH:mm\", { locale });\n if (localeCode.startsWith(\"ja\")) {\n return `${format(d, \"yyyy年M月d日\", { locale })} ${timeFormat}`;\n }\n return `${timeFormat}, ${format(d, \"d MMM yyyy\", { locale })}`;\n }\n // date only\n if (localeCode.startsWith(\"ja\")) {\n return format(d, \"yyyy年M月d日\", { locale });\n }\n return format(d, \"d MMM yyyy\", { locale });\n};\n\nconst formatDateLocalized = (\n value: Date | DateLikeRange | null,\n opts: { locale?: string | string[]; includeTime?: boolean } = {}\n): string => {\n if (!value) return \"\";\n const localeCode = (opts.locale ?? \"en\").toString();\n const includeTime = opts.includeTime ?? false;\n if (isRangeLike(value)) {\n const left = value.from\n ? formatSingle(value.from, localeCode, includeTime)\n : \"\";\n const right = value.to\n ? formatSingle(value.to, localeCode, includeTime)\n : \"\";\n return right ? `${left} – ${right}` : left;\n }\n return formatSingle(value as Date, localeCode, includeTime);\n};\n\n// Locale-derived labels (months and weekdays)\nconst monthsForLocale = (localeCode = \"en\") => {\n const locale = locales[localeCode as keyof typeof locales] ?? enUS;\n return Array.from({ length: 12 }, (_, i) =>\n format(new Date(2024, i, 1), \"MMMM\", { locale })\n );\n};\n\nconst weekdaysForLocale = (localeCode = \"en\") => {\n const locale = locales[localeCode as keyof typeof locales] ?? enUS;\n const weekStartsOn = (locale.options?.weekStartsOn ?? 1) as\n | 0\n | 1\n | 2\n | 3\n | 4\n | 5\n | 6;\n\n const weekdays = [];\n // Use a known date to get the start of a week consistently\n const start = startOfWeek(new Date(2024, 0, 1), { weekStartsOn });\n\n for (let i = 0; i < 7; i++) {\n const day = addDays(start, i);\n // Use 'EE' for the short day name like 'Mo', 'Tu' which is common in calendars\n weekdays.push(format(day, \"EEEEEE\", { locale }));\n }\n\n return weekdays;\n};\n\nexport {\n addMonths,\n clampDate,\n daysGrid,\n endOfMonth,\n formatDateLocalized,\n isSameDay,\n monthsForLocale,\n startOfMonth,\n toDateKey,\n weekdaysForLocale,\n};\n","import { useEffect, useRef, useState } from \"react\";\n\ninterface UseDateInputPopoverProps {\n onOpenChange?: (open: boolean) => void;\n initialOpen?: boolean;\n disabled?: boolean;\n}\n\nexport const useDateInputPopover = ({\n onOpenChange,\n initialOpen = false,\n disabled = false,\n}: UseDateInputPopoverProps) => {\n const [open, setOpen] = useState(initialOpen);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const triggerRef = useRef<HTMLInputElement | null>(null);\n\n // Click outside logic\n useEffect(() => {\n if (!open) return;\n const onDoc = (e: MouseEvent) => {\n if (!containerRef.current?.contains(e.target as Node)) {\n setOpen(false);\n onOpenChange?.(false);\n }\n };\n document.addEventListener(\"mousedown\", onDoc);\n return () => document.removeEventListener(\"mousedown\", onDoc);\n }, [open, onOpenChange]);\n\n // Keyboard and focus logic\n useEffect(() => {\n if (!open) return;\n const focusFirst = () => {\n const grid = containerRef.current?.querySelector('[role=\"grid\"]');\n (grid as HTMLElement | null)?.focus?.();\n };\n const t = window.setTimeout(focusFirst, 0);\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n setOpen(false);\n onOpenChange?.(false);\n triggerRef.current?.focus();\n }\n };\n document.addEventListener(\"keydown\", onKeyDown);\n return () => {\n window.clearTimeout(t);\n document.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [open, onOpenChange]);\n\n const handleTriggerFocus = () => {\n if (disabled) return;\n setOpen(true);\n onOpenChange?.(true);\n };\n\n const handleIconToggle = () => {\n if (disabled) return;\n setOpen((o) => {\n const next = !o;\n onOpenChange?.(next);\n if (next) triggerRef.current?.focus();\n return next;\n });\n };\n\n const closePopover = () => {\n setOpen(false);\n onOpenChange?.(false);\n };\n\n return {\n open,\n setOpen,\n containerRef,\n triggerRef,\n handleTriggerFocus,\n handleIconToggle,\n closePopover,\n };\n};\n","import { RefObject, useEffect } from \"react\";\n\n/**\n * Custom hook to handle clicks outside of a referenced element\n * @param ref - Reference to the element to monitor\n * @param handler - Function to call when click outside occurs\n */\nexport const useClickOutside = <T extends HTMLElement = HTMLElement>(\n ref: RefObject<T>,\n handler: (event: MouseEvent | TouchEvent) => void\n) => {\n useEffect(() => {\n const listener = (event: MouseEvent | TouchEvent) => {\n // Do nothing if clicking ref's element or descendent elements\n if (!ref.current || ref.current.contains(event.target as Node)) {\n return;\n }\n handler(event);\n };\n\n document.addEventListener(\"mousedown\", listener);\n document.addEventListener(\"touchstart\", listener);\n\n return () => {\n document.removeEventListener(\"mousedown\", listener);\n document.removeEventListener(\"touchstart\", listener);\n };\n }, [ref, handler]);\n};\n","import { useClickOutside } from \"@/hooks/useClickOutside\";\nimport { DropdownIcon } from \"@/icons\";\nimport { cn } from \"@/lib/utils\";\nimport { forwardRef, useEffect, useMemo, useRef, useState } from \"react\";\n\ninterface TimePickerProps {\n value: Date | null;\n onChange: (d: Date) => void;\n minuteStep?: number;\n hoursLabel?: string;\n minutesLabel?: string;\n className?: string;\n placeholder?: string;\n /** Custom format function for displaying time */\n formatTime?: (date: Date) => string;\n /** Custom render function for the trigger button */\n renderTrigger?: (props: {\n value: Date | null;\n formattedTime: string;\n onClick: () => void;\n open: boolean;\n disabled: boolean;\n }) => React.ReactNode;\n /** Custom render function for hour options */\n renderHourOption?: (hour: number, isSelected: boolean) => React.ReactNode;\n /** Custom render function for minute options */\n renderMinuteOption?: (minute: number, isSelected: boolean) => React.ReactNode;\n /** Custom render function for the entire spinner */\n renderSpinner?: (props: {\n value: Date;\n onChange: (d: Date) => void;\n minuteStep: number;\n hoursLabel: string;\n minutesLabel: string;\n }) => React.ReactNode;\n}\n\nconst TimeSpinner = ({\n value,\n onChange,\n minuteStep = 1,\n hoursLabel = \"Hours\",\n minutesLabel = \"Minutes\",\n renderHourOption,\n renderMinuteOption,\n}: {\n value: Date;\n onChange: (d: Date) => void;\n minuteStep?: number;\n hoursLabel?: string;\n minutesLabel?: string;\n renderHourOption?: (hour: number, isSelected: boolean) => React.ReactNode;\n renderMinuteOption?: (minute: number, isSelected: boolean) => React.ReactNode;\n}) => {\n const hoursRef = useRef<HTMLDivElement>(null);\n const minutesRef = useRef<HTMLDivElement>(null);\n\n const hours = useMemo(() => Array.from({ length: 24 }, (_, i) => i), []);\n const minutes = useMemo(\n () =>\n Array.from(\n { length: Math.floor(60 / minuteStep) },\n (_, i) => i * minuteStep\n ),\n [minuteStep]\n );\n\n // UX Improvement: Scroll to the selected time when the spinner opens\n useEffect(() => {\n const selectedHourEl = hoursRef.current?.querySelector<HTMLButtonElement>(\n '[aria-selected=\"true\"]'\n );\n if (selectedHourEl && typeof selectedHourEl.scrollIntoView === \"function\") {\n selectedHourEl.scrollIntoView({ block: \"nearest\" });\n }\n\n const selectedMinuteEl =\n minutesRef.current?.querySelector<HTMLButtonElement>(\n '[aria-selected=\"true\"]'\n );\n if (\n selectedMinuteEl &&\n typeof selectedMinuteEl.scrollIntoView === \"function\"\n ) {\n selectedMinuteEl.scrollIntoView({ block: \"nearest\" });\n }\n }, []);\n\n return (\n <div className=\"sui-bg-white sui-shadow-md sui-rounded-md sui-p-4 sui-grid sui-grid-cols-2 sui-gap-6\">\n <div>\n <div\n id=\"hours-label\"\n className=\"sui-text-12 sui-text-secondary-400 sui-mb-2\"\n >\n {hoursLabel}\n </div>\n {/* A11y Improvement: Use appropriate roles and labels */}\n <div\n ref={hoursRef}\n role=\"listbox\"\n aria-labelledby=\"hours-label\"\n className=\"sui-max-h-48 sui-overflow-y-auto sui-pr-1 sui-scrollbars-thin\"\n >\n {hours.map((h) => {\n const isSelected = value.getHours() === h;\n return (\n <button\n key={h}\n type=\"button\"\n role=\"option\"\n aria-selected={isSelected}\n className={cn(\n \"sui-w-full sui-text-left sui-py-2 sui-px-3 sui-rounded-md hover:sui-bg-secondary focus:sui-outline-none focus:sui-ring-2 focus:sui-ring-primary focus:sui-ring-offset-1\",\n isSelected && \"sui-text-primary sui-font-semibold\"\n )}\n onClick={() => {\n const d = new Date(value);\n d.setHours(h);\n onChange(d);\n }}\n >\n {renderHourOption\n ? renderHourOption(h, isSelected)\n : String(h).padStart(2, \"0\")}\n </button>\n );\n })}\n </div>\n </div>\n <div>\n <div\n id=\"minutes-label\"\n className=\"sui-text-12 sui-text-secondary-400 sui-mb-2\"\n >\n {minutesLabel}\n </div>\n {/* A11y Improvement: Use appropriate roles and labels */}\n <div\n ref={minutesRef}\n role=\"listbox\"\n aria-labelledby=\"minutes-label\"\n className=\"sui-max-h-48 sui-overflow-y-auto sui-pr-1 sui-scrollbars-thin\"\n >\n {minutes.map((m) => {\n const isSelected = value.getMinutes() === m;\n return (\n <button\n key={m}\n type=\"button\"\n role=\"option\"\n aria-selected={isSelected}\n className={cn(\n \"sui-w-full sui-text-left sui-py-2 sui-px-3 sui-rounded-md hover:sui-bg-secondary focus:sui-outline-none focus:sui-ring-2 focus:sui-ring-primary focus:sui-ring-offset-1\",\n isSelected && \"sui-text-primary sui-font-semibold\"\n )}\n onClick={() => {\n const d = new Date(value);\n d.setMinutes(m);\n onChange(d);\n }}\n >\n {renderMinuteOption\n ? renderMinuteOption(m, isSelected)\n : String(m).padStart(2, \"0\")}\n </button>\n );\n })}\n </div>\n </div>\n </div>\n );\n};\n\n/**\n * TimePicker - A time selection component with hour/minute spinners.\n *\n * Features:\n * - Hour and minute selection with customizable step\n * - Dropdown with scrollable spinners\n * - Keyboard navigation (Escape to close)\n * - Click-outside to close\n * - Fully customizable trigger, options, and spinner\n * - Auto-scroll to selected time\n *\n * Customization:\n * - `formatTime`: Custom time formatting\n * - `renderTrigger`: Complete trigger customization\n * - `renderHourOption`/`renderMinuteOption`: Custom option rendering\n * - `renderSpinner`: Complete spinner customization\n *\n * @example\n * ```tsx\n * // Basic usage\n * <TimePicker\n * value={time}\n * onChange={setTime}\n * minuteStep={15}\n * />\n *\n * // Custom format\n * <TimePicker\n * value={time}\n * onChange={setTime}\n * formatTime={(date) => date.toLocaleTimeString('en-US', {\n * hour: '2-digit',\n * minute: '2-digit',\n * hour12: true\n * })}\n * />\n *\n * // Custom trigger\n * <TimePicker\n * value={time}\n * onChange={setTime}\n * renderTrigger={({ formattedTime, onClick, open }) => (\n * <button onClick={onClick} className=\"custom-trigger\">\n * 🕐 {formattedTime || 'Pick time'}\n * </button>\n * )}\n * />\n *\n * // Custom option rendering\n * <TimePicker\n * value={time}\n * onChange={setTime}\n * renderHourOption={(hour, isSelected) => (\n * <span className={isSelected ? 'selected' : ''}>\n * {hour === 0 ? '12 AM' : hour < 12 ? `${hour} AM` : hour === 12 ? '12 PM' : `${hour - 12} PM`}\n * </span>\n * )}\n * />\n * ```\n */\nconst TimePicker = forwardRef<HTMLDivElement, TimePickerProps>(\n (\n {\n value,\n onChange,\n minuteStep = 1,\n hoursLabel = \"Hours\",\n minutesLabel = \"Minutes\",\n className,\n placeholder = \"Select time\",\n formatTime,\n renderTrigger,\n renderHourOption,\n renderMinuteOption,\n renderSpinner,\n },\n ref\n ) => {\n const [open, setOpen] = useState(false);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const buttonRef = useRef<HTMLButtonElement | null>(null);\n\n // UX Improvement: Close the dropdown when clicking outside\n useClickOutside(containerRef, () => setOpen(false));\n\n useEffect(() => {\n const onDocKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n e.preventDefault();\n setOpen(false);\n buttonRef.current?.focus();\n }\n };\n if (open) document.addEventListener(\"keydown\", onDocKey);\n return () => document.removeEventListener(\"keydown\", onDocKey);\n }, [open]);\n\n const defaultFormatTime = (date: Date) =>\n `${String(date.getHours()).padStart(2, \"0\")}:${String(\n date.getMinutes()\n ).padStart(2, \"0\")}`;\n\n const formattedTime = value\n ? formatTime\n ? formatTime(value)\n : defaultFormatTime(value)\n : \"\";\n\n const disabled = !value;\n\n // Custom trigger rendering\n if (renderTrigger) {\n return (\n <div ref={ref} className={cn(\"sui-relative\", className)}>\n {renderTrigger({\n value,\n formattedTime,\n onClick: () => setOpen((o) => !o),\n open,\n disabled,\n })}\n {open && value && (\n <div\n ref={containerRef}\n className=\"sui-absolute sui-z-50 sui-mt-1\"\n aria-label=\"Time selection panel\"\n >\n {renderSpinner ? (\n renderSpinner({\n value,\n onChange: (d) => {\n onChange(d);\n setOpen(false);\n setTimeout(() => buttonRef.current?.focus(), 0);\n },\n minuteStep,\n hoursLabel,\n minutesLabel,\n })\n ) : (\n <TimeSpinner\n value={value}\n minuteStep={minuteStep}\n onChange={(d) => {\n onChange(d);\n setOpen(false);\n setTimeout(() => buttonRef.current?.focus(), 0);\n }}\n hoursLabel={hoursLabel}\n minutesLabel={minutesLabel}\n renderHourOption={renderHourOption}\n renderMinuteOption={renderMinuteOption}\n />\n )}\n </div>\n )}\n </div>\n );\n }\n\n // Default rendering\n return (\n <div ref={ref} className={cn(\"sui-relative\", className)}>\n <button\n type=\"button\"\n ref={buttonRef}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n disabled={disabled}\n className=\"sui-h-12 sui-w-full sui-rounded-md sui-border sui-border-secondary-300 sui-bg-background sui-px-4 sui-flex sui-items-center sui-justify-between disabled:sui-bg-secondary disabled:sui-cursor-not-allowed\"\n onClick={() => setOpen((o) => !o)}\n >\n <span\n className={cn(\"sui-body-16\", !value && \"sui-text-secondary-400\")}\n >\n {value ? formattedTime : placeholder}\n </span>\n <DropdownIcon\n size={20}\n className={cn(\"sui-transition-transform\", open && \"sui-rotate-180\")}\n />\n </button>\n {open && value && (\n <div\n ref={containerRef}\n className=\"sui-absolute sui-z-50 sui-mt-1\"\n aria-label=\"Time selection panel\"\n >\n {renderSpinner ? (\n renderSpinner({\n value,\n onChange: (d) => {\n onChange(d);\n setOpen(false);\n setTimeout(() => buttonRef.current?.focus(), 0);\n },\n minuteStep,\n hoursLabel,\n minutesLabel,\n })\n ) : (\n <TimeSpinner\n value={value}\n minuteStep={minuteStep}\n onChange={(d) => {\n onChange(d);\n setOpen(false);\n setTimeout(() => buttonRef.current?.focus(), 0);\n }}\n hoursLabel={hoursLabel}\n minutesLabel={minutesLabel}\n renderHourOption={renderHourOption}\n renderMinuteOption={renderMinuteOption}\n />\n )}\n </div>\n )}\n </div>\n );\n }\n);\n\nTimePicker.displayName = \"TimePicker\";\n\nexport { TimePicker, type TimePickerProps };\n","import { createContext, useContext } from \"react\";\n\ntype DatePickerMode = \"single\" | \"range\";\n\ninterface RangeValue {\n from: Date | null;\n to: Date | null;\n}\n\ninterface DatePickerContextValue {\n mode: DatePickerMode;\n minDate?: Date;\n maxDate?: Date;\n isDateDisabled?: (date: Date) => boolean;\n isDateMarked?: (date: Date) => boolean;\n weekdays: string[];\n months: string[];\n viewLeft: Date;\n setViewLeft: (d: Date) => void;\n viewRight: Date;\n setViewRight: (d: Date) => void;\n singleValue: Date | null;\n rangeValue: RangeValue;\n onSingleChange: (value: Date | null) => void;\n onRangeChange: (value: RangeValue) => void;\n t: {\n from: string;\n to: string;\n today: string;\n cancel: string;\n apply: string;\n hours: string;\n minutes: string;\n };\n showTime: boolean;\n minuteStep: number;\n locale?: string | string[];\n}\n\nconst DatePickerContext = createContext<DatePickerContextValue | null>(null);\n\nconst useDatePicker = () => {\n const ctx = useContext(DatePickerContext);\n if (!ctx) throw new Error(\"useDatePicker must be used within DatePicker\");\n return ctx;\n};\n\nexport { DatePickerContext, useDatePicker, type DatePickerContextValue };\n","import { toDateKey } from \"@/helpers/date\";\nimport { useCallback } from \"react\";\n\ninterface UseCalendarKeyboardNavigationArgs {\n viewMonth: Date;\n onNavigateMonth?: (monthStart: Date) => void;\n}\n\nexport const useCalendarKeyboardNavigation = ({\n viewMonth,\n onNavigateMonth,\n}: UseCalendarKeyboardNavigationArgs) => {\n const onGridKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLDivElement>) => {\n const key = e.key;\n if (\n key !== \"ArrowLeft\" &&\n key !== \"ArrowRight\" &&\n key !== \"ArrowUp\" &&\n key !== \"ArrowDown\" &&\n key !== \"Home\" &&\n key !== \"End\" &&\n key !== \"PageUp\" &&\n key !== \"PageDown\"\n )\n return;\n e.preventDefault();\n const active = document.activeElement as HTMLElement | null;\n const curDateAttr = active?.getAttribute?.(\"data-date\");\n const base = curDateAttr ? new Date(curDateAttr) : new Date(viewMonth);\n const deltaByKey: Record<string, number> = {\n ArrowLeft: -1,\n ArrowRight: 1,\n ArrowUp: -7,\n ArrowDown: 7,\n Home: -((base.getDay() + 6) % 7),\n End: 6 - ((base.getDay() + 6) % 7),\n PageUp: -30,\n PageDown: 30,\n } as const;\n const delta = deltaByKey[key] ?? 0;\n const next = new Date(base);\n next.setDate(base.getDate() + delta);\n const selector = `[data-key=\"${toDateKey(next)}\"]`;\n const nextEl = (\n e.currentTarget as HTMLElement\n ).querySelector<HTMLElement>(selector);\n if (nextEl) {\n if (next.getMonth() !== viewMonth.getMonth()) {\n onNavigateMonth?.(new Date(next.getFullYear(), next.getMonth(), 1));\n }\n nextEl.focus();\n }\n },\n [viewMonth, onNavigateMonth]\n );\n\n return { onGridKeyDown };\n};\n","import { useDatePicker } from \"@/contexts/datePickerContext\";\nimport { daysGrid, isSameDay, toDateKey } from \"@/helpers/date\";\nimport { useCalendarKeyboardNavigation } from \"@/hooks/useCalendarKeyboardNavigation\";\nimport { useCallback, useMemo } from \"react\";\n\nconst tableCellBase =\n \"sui-w-9 sui-h-9 sui-rounded-md sui-flex sui-items-center sui-justify-center sui-body-16\";\n\nfunction WeekHeader({ weekdays }: { weekdays: string[] }) {\n return (\n <div className=\"sui-grid sui-grid-cols-7 sui-body-16 sui-text-secondary-400 sui-mt-2\">\n {weekdays.map((d) => (\n <div\n key={d}\n className=\"sui-h-8 sui-flex sui-items-center sui-justify-center\"\n >\n {d}\n </div>\n ))}\n </div>\n );\n}\n\n/**\n * Month grid used by DatePicker with keyboard navigation, range highlights,\n * and marked dates. Screen-reader friendly live region updates.\n */\nexport function Calendar({\n viewMonth,\n onSelect,\n onNavigateMonth,\n}: {\n viewMonth: Date;\n onSelect: (d: Date) => void;\n onNavigateMonth?: (monthStart: Date) => void;\n}) {\n const {\n minDate,\n maxDate,\n isDateDisabled,\n isDateMarked,\n weekdays,\n mode,\n singleValue,\n rangeValue,\n locale,\n } = useDatePicker();\n const days = useMemo(\n () => daysGrid(viewMonth, Array.isArray(locale) ? locale[0] : locale),\n [viewMonth, locale]\n );\n const isInView = useCallback(\n (d: Date) => d.getMonth() === viewMonth.getMonth(),\n [viewMonth]\n );\n\n const isInRange = useCallback(\n (d: Date) => {\n if (!rangeValue?.from || !rangeValue?.to) return false;\n const start = new Date(\n rangeValue.from.getFullYear(),\n rangeValue.from.getMonth(),\n rangeValue.from.getDate()\n );\n const end = new Date(\n rangeValue.to.getFullYear(),\n rangeValue.to.getMonth(),\n rangeValue.to.getDate()\n );\n const cur = new Date(d.getFullYear(), d.getMonth(), d.getDate());\n return cur >= start && cur <= end;\n },\n [rangeValue]\n );\n\n const isDisabled = (d: Date) =>\n isDateDisabled?.(d) ||\n (minDate &&\n d <\n new Date(\n minDate.getFullYear(),\n minDate.getMonth(),\n minDate.getDate()\n )) ||\n (maxDate &&\n d >\n new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate()));\n\n const liveRegion = `${viewMonth.toLocaleString(\n Array.isArray(locale) ? locale[0] : locale,\n {\n month: \"long\",\n year: \"numeric\",\n }\n )}`;\n\n const { onGridKeyDown } = useCalendarKeyboardNavigation({\n viewMonth,\n onNavigateMonth,\n });\n\n return (\n <div>\n <div className=\"sui-sr-only\" aria-live=\"polite\">\n {liveRegion}\n </div>\n <WeekHeader weekdays={weekdays} />\n <div\n key={`${viewMonth.getFullYear()}-${viewMonth.getMonth()}`}\n className=\"sui-grid sui-grid-cols-7 sui-gap-1 sui-mt-1 sui-animate-slide-up\"\n role=\"grid\"\n tabIndex={0}\n aria-label={liveRegion}\n onKeyDown={onGridKeyDown}\n >\n {days.map((d) => {\n const isToday = isSameDay(d, new Date());\n const selected =\n mode === \"single\"\n ? singleValue\n ? isSameDay(d, singleValue)\n : false\n : (rangeValue.from ? isSameDay(d, rangeValue.from) : false) ||\n (rangeValue.to ? isSameDay(d, rangeValue.to) : false);\n const inRange = isInRange(d);\n const out = !isInView(d);\n const disabled = isDisabled(d);\n const marked = isDateMarked?.(d) ?? false;\n const isRangeStart = rangeValue?.from\n ? isSameDay(d, rangeValue.from)\n : false;\n const isRangeEnd = rangeValue?.to\n ? isSameDay(d, rangeValue.to)\n : false;\n\n // In range mode, hide out-of-month cells with a non-interactive placeholder\n if (mode === \"range\" && out) {\n return (\n <div\n key={toDateKey(d)}\n role=\"gridcell\"\n aria-hidden=\"true\"\n className={tableCellBase}\n />\n );\n }\n return (\n <div key={toDateKey(d)} role=\"gridcell\">\n <button\n type=\"button\"\n disabled={disabled}\n data-key={toDateKey(d)}\n data-date={d.toISOString()}\n tabIndex={selected ? 0 : -1}\n className={\n `${tableCellBase} ` +\n [\n out && \"sui-text-secondary-300\",\n isToday &&\n !selected &&\n !inRange &&\n \"sui-bg-background-secondary2\",\n selected && \"sui-bg-primary sui-text-white\",\n selected &&\n isRangeStart &&\n !isRangeEnd &&\n \"sui-rounded-l-md sui-rounded-r-none\",\n selected &&\n isRangeEnd &&\n !isRangeStart &&\n \"sui-rounded-r-md sui-rounded-l-none\",\n !disabled && !selected && \"hover:sui-bg-background-default\",\n disabled &&\n \"sui-text-disabled sui-opacity-50 sui-cursor-not-allowed\",\n ]\n .filter(Boolean)\n .join(\" \")\n }\n onClick={() => {\n if (disabled) return;\n if (out) {\n onNavigateMonth?.(\n new Date(d.getFullYear(), d.getMonth(), 1)\n );\n }\n onSelect(d);\n }}\n >\n <span className=\"sui-relative sui-inline-flex sui-items-center sui-justify-center sui-w-full sui-h-full\">\n {(inRange || isRangeStart || isRangeEnd) && (\n <span\n aria-hidden=\"true\"\n className={\n \"sui-absolute sui-inset-y-0 sui-bg-secondary sui-pointer-events-none \" +\n (isRangeStart && !isRangeEnd\n ? \"sui-left-1/2 sui-rounded-l-md\"\n : isRangeEnd && !isRangeStart\n ? \"sui-right-1/2 sui-rounded-r-md\"\n : \"sui-left-[-4px] sui-right-[-4px]\")\n }\n />\n )}\n <span className=\"sui-relative sui-z-10\">{d.getDate()}</span>\n {marked && (\n <span\n aria-hidden=\"true\"\n className=\"sui-absolute sui-top-1 sui-right-1 sui-w-1 sui-h-1 sui-rounded-full sui-bg-primary\"\n />\n )}\n </span>\n </button>\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n","import { DropdownIcon } from \"@/icons\";\nimport { cn } from \"@/lib/utils\";\nimport { useMemo, useState } from \"react\";\n\nconst yearsAround = (center: number, range = 7) => {\n const years: number[] = [];\n for (let y = center - range; y <= center + range; y++) years.push(y);\n return years;\n};\n\n/**\n * - Dropdown controls for selecting month and year with min/max constraints.\n * - Used inside DatePicker headers.\n */\nexport function MonthYearDropdown({\n month,\n year,\n onChange,\n monthLabels,\n minDate,\n maxDate,\n}: {\n month: number;\n year: number;\n onChange: (m: number, y: number) => void;\n monthLabels: string[];\n minDate?: Date;\n maxDate?: Date;\n}) {\n const [open, setOpen] = useState(false);\n const years = useMemo(() => yearsAround(year), [year]);\n const minYear = minDate ? minDate.getFullYear() : undefined;\n const maxYear = maxDate ? maxDate.getFullYear() : undefined;\n const minMonth = minDate ? minDate.getMonth() : undefined;\n const maxMonth = maxDate ? maxDate.getMonth() : undefined;\n\n const visibleYears = useMemo(() => {\n return years.filter((y) => {\n if (minYear !== undefined && y < minYear) return false;\n if (maxYear !== undefined && y > maxYear) return false;\n return true;\n });\n }, [years, minYear, maxYear]);\n\n const visibleMonths = useMemo(() => {\n return monthLabels\n .map((m, idx) => ({ label: m, idx }))\n .filter(({ idx }) => {\n if (\n minYear !== undefined &&\n year === minYear &&\n minMonth !== undefined &&\n idx < minMonth\n ) {\n return false;\n }\n if (\n maxYear !== undefined &&\n year === maxYear &&\n maxMonth !== undefined &&\n idx > maxMonth\n ) {\n return false;\n }\n return true;\n });\n }, [monthLabels, year, minYear, maxYear, minMonth, maxMonth]);\n\n return (\n <div className=\"sui-relative sui-w-full\">\n <button\n type=\"button\"\n className=\"sui-h-10 sui-w-full sui-border sui-border-secondary-300 sui-rounded-md sui-bg-background sui-px-4 sui-flex sui-items-center sui-justify-between\"\n onClick={() => setOpen((o) => !o)}\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n aria-label=\"Select month and year\"\n >\n <span className=\"sui-body-16\">\n {monthLabels[month].slice(0, 3)} {year}\n </span>\n <DropdownIcon\n className={cn(\"sui-transition-transform\", open && \"sui-rotate-180\")}\n size={20}\n />\n </button>\n {open && (\n <div\n className=\"sui-absolute sui-left-0 sui-right-0 sui-w-full sui-z-50 sui-mt-1 sui-bg-white sui-border sui-border-secondary-300 sui-rounded-md sui-shadow-md sui-grid sui-grid-cols-2 sui-gap-2 sui-p-2 sui-scrollbars-thin\"\n role=\"listbox\"\n aria-label=\"Month and year selection\"\n >\n <div\n className=\"sui-max-h-56 sui-overflow-y-auto sui-scrollbars-thin\"\n aria-label=\"Months\"\n >\n {visibleMonths.map(({ label: m, idx }) => (\n <button\n key={`${m}-${idx}`}\n type=\"button\"\n role=\"option\"\n aria-selected={idx === month}\n className={cn(\n \"sui-block sui-w-full sui-text-left sui-px-3 sui-py-2 sui-rounded-md hover:sui-bg-secondary-2 sui-body-14\",\n idx === month && \"sui-text-primary sui-body-14-medium\"\n )}\n onClick={() => {\n onChange(idx, year);\n setOpen(false);\n }}\n >\n {m}\n </button>\n ))}\n </div>\n <div\n className=\"sui-max-h-56 sui-overflow-y-auto sui-scrollbars-thin\"\n aria-label=\"Years\"\n >\n {visibleYears.map((y) => (\n <button\n key={y}\n type=\"button\"\n role=\"option\"\n aria-selected={y === year}\n className={cn(\n \"sui-block sui-w-full sui-text-left sui-px-3 sui-py-2 sui-rounded hover:sui-bg-secondary-2 sui-body-14\",\n y === year && \"sui-text-primary sui-body-14-medium\"\n )}\n onClick={() => {\n onChange(month, y);\n setOpen(false);\n }}\n >\n {y}\n </button>\n ))}\n </div>\n </div>\n )}\n </div>\n );\n}\n","import { Divider } from \"@/components/Divider\";\nimport { TimePicker } from \"@/components/TimePicker\";\nimport {\n DatePickerContext,\n type DatePickerContextValue,\n} from \"@/contexts/datePickerContext\";\nimport {\n addMonths,\n clampDate,\n formatDateLocalized,\n monthsForLocale,\n startOfMonth,\n weekdaysForLocale,\n} from \"@/helpers/date\";\nimport { cn } from \"@/lib/utils\";\nimport { cva } from \"class-variance-authority\";\nimport { forwardRef, useEffect, useMemo, useState } from \"react\";\nimport { Calendar } from \"./Calendar\";\nimport { MonthYearDropdown } from \"./MonthYearDropdown\";\n\ntype DatePickerMode = \"single\" | \"range\";\n\ninterface BaseProps {\n label?: string;\n mode?: DatePickerMode;\n defaultMonth?: Date; // calendar view start\n minDate?: Date;\n maxDate?: Date;\n isDateDisabled?: (date: Date) => boolean;\n isDateMarked?: (date: Date) => boolean;\n showTime?: boolean;\n minuteStep?: number;\n onCancel?: () => void;\n onApply?: (value: Date | { from: Date | null; to: Date | null }) => void;\n className?: string;\n // i18n\n locale?: string | string[];\n labels?: {\n from?: string;\n to?: string;\n today?: string;\n cancel?: string;\n apply?: string;\n hours?: string;\n minutes?: string;\n };\n weekdayLabels?: string[]; // 7 items, Monday first\n monthLabels?: string[]; // 12 items, Jan..Dec\n formatHeaderDate?: (date: Date) => string;\n}\n\ninterface SingleProps extends BaseProps {\n mode?: \"single\";\n value?: Date | null;\n onChange?: (value: Date | null) => void;\n}\n\ninterface RangeValue {\n from: Date | null;\n to: Date | null;\n}\n\ninterface RangeProps extends BaseProps {\n mode: \"range\";\n value?: RangeValue;\n onChange?: (value: RangeValue) => void;\n}\n\ntype DatePickerProps = SingleProps | RangeProps;\n\nconst headerClasses = cva(\n \"sui-flex sui-items-center sui-justify-between sui-mb-4\"\n);\n\n/**\n * DatePicker - A comprehensive date and time picker with single and range selection modes.\n *\n * Features:\n * - Single date or date range selection\n * - Optional time picker with customizable minute steps\n * - Responsive design (side-by-side on desktop, step-by-step on mobile)\n * - Full internationalization support\n * - Min/max date constraints\n * - Custom date validation and marking\n * - Keyboard navigation and accessibility\n * - Customizable labels and formatting\n *\n * @example\n * ```tsx\n * // Single date selection\n * <DatePicker\n * mode=\"single\"\n * value={selectedDate}\n * onChange={setSelectedDate}\n * showTime\n * minuteStep={15}\n * onApply={(date) => console.log('Applied:', date)}\n * />\n *\n * // Date range selection\n * <DatePicker\n * mode=\"range\"\n * value={{ from: startDate, to: endDate }}\n * onChange={setDateRange}\n * minDate={new Date()}\n * maxDate={addMonths(new Date(), 6)}\n * onApply={(range) => console.log('Applied:', range)}\n * />\n *\n * // With localization\n * <DatePicker\n * mode=\"single\"\n * value={date}\n * onChange={setDate}\n * locale=\"es\"\n * labels={{\n * today: 'Hoy',\n * cancel: 'Cancelar',\n * apply: 'Aplicar'\n * }}\n * />\n *\n * // With custom validation\n * <DatePicker\n * mode=\"single\"\n * value={date}\n * onChange={setDate}\n * isDateDisabled={(d) => d.getDay() === 0 || d.getDay() === 6}\n * isDateMarked={(d) => isHoliday(d)}\n * />\n * ```\n */\nconst DatePicker = forwardRef<HTMLDivElement, DatePickerProps>((props, ref) => {\n const {\n mode = \"single\",\n defaultMonth,\n minDate,\n maxDate,\n isDateDisabled,\n isDateMarked,\n className,\n showTime = true,\n minuteStep = 1,\n locale,\n labels,\n weekdayLabels,\n monthLabels,\n formatHeaderDate,\n } = props as DatePickerProps;\n\n const [viewLeft, setViewLeft] = useState<Date>(() =>\n startOfMonth(defaultMonth ?? new Date())\n );\n const [viewRight, setViewRight] = useState<Date>(() =>\n addMonths(viewLeft, 1)\n );\n // Small-screen detection and step flow for range mode\n const [isSmallScreen, setIsSmallScreen] = useState(false);\n const [mobileStep, setMobileStep] = useState<\"from\" | \"to\">(\"from\");\n\n // Get current values directly from props (fully controlled)\n const singleValue =\n props.mode === \"single\" ? (props as SingleProps).value : null;\n const rangeValue =\n props.mode === \"range\"\n ? (props as RangeProps).value\n : { from: null, to: null };\n\n // Sync calendar views in range mode\n useEffect(() => {\n if (mode !== \"range\") return;\n const hasFrom = !!rangeValue?.from;\n const hasTo = !!rangeValue?.to;\n if (hasFrom || hasTo) {\n const left = startOfMonth(rangeValue?.from ?? rangeValue?.to ?? viewLeft);\n const right = startOfMonth(rangeValue?.to ?? addMonths(left, 1));\n setViewLeft(left);\n setViewRight(right);\n return;\n }\n // No selection yet: keep right adjacent to left\n setViewRight(addMonths(viewLeft, 1));\n }, [mode, rangeValue?.from, rangeValue?.to]);\n\n // When adjusting the left view while no To is selected, keep right adjacent\n useEffect(() => {\n if (mode === \"range\" && !rangeValue?.to) {\n setViewRight(addMonths(viewLeft, 1));\n }\n }, [viewLeft, mode, rangeValue?.to]);\n\n // Detect small screens on client only\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n const mq = window.matchMedia(\"(max-width: 640px)\");\n const handle = (e: MediaQueryListEvent | MediaQueryList) => {\n setIsSmallScreen(\n \"matches\" in e ? e.matches : (e as MediaQueryList).matches\n );\n };\n handle(mq);\n if (typeof mq.addEventListener === \"function\") {\n mq.addEventListener(\n \"change\",\n handle as (ev: MediaQueryListEvent) => void\n );\n } else if (typeof mq.addListener === \"function\") {\n mq.addListener(\n handle as (this: MediaQueryList, ev: MediaQueryListEvent) => void\n );\n }\n return () => {\n if (typeof mq.removeEventListener === \"function\") {\n mq.removeEventListener(\n \"change\",\n handle as (ev: MediaQueryListEvent) => void\n );\n } else if (typeof mq.removeListener === \"function\") {\n mq.removeListener(\n handle as (this: MediaQueryList, ev: MediaQueryListEvent) => void\n );\n }\n };\n }, []);\n\n // Auto-advance to \"to\" after selecting from on small screens\n useEffect(() => {\n if (mode !== \"range\" || !isSmallScreen) return;\n if (rangeValue?.from && !rangeValue?.to) {\n setMobileStep(\"to\");\n }\n }, [mode, isSmallScreen, rangeValue?.from, rangeValue?.to]);\n\n const handleSelectSingle = (d: Date) => {\n const clamped = clampDate(d, minDate, maxDate);\n const withTime = new Date(\n clamped.getFullYear(),\n clamped.getMonth(),\n clamped.getDate(),\n singleValue?.getHours() ?? 0,\n singleValue?.getMinutes() ?? 0\n );\n if (props.mode === \"single\") {\n (props as SingleProps).onChange?.(withTime);\n }\n };\n\n const handleSelectRange = (d: Date) => {\n const current = rangeValue;\n if (!current || !current.from || (current.from && current.to)) {\n const newRange = { from: d, to: null };\n if (props.mode === \"range\") {\n (props as RangeProps).onChange?.(newRange);\n }\n return;\n }\n // pick end\n const from = current.from;\n const to = d < from ? from : d;\n const newRange = { from: d < from ? d : from, to };\n if (props.mode === \"range\") {\n (props as RangeProps).onChange?.(newRange);\n }\n };\n\n const headerDate = useMemo(() => {\n const d =\n mode === \"single\"\n ? singleValue ?? new Date()\n : rangeValue?.to ?? rangeValue?.from ?? new Date();\n return d;\n }, [mode, singleValue, rangeValue]);\n\n const effectiveLocale = (Array.isArray(locale) ? locale[0] : locale) ?? \"en\";\n\n const formatHeader = (d: Date | null) =>\n formatHeaderDate\n ? formatHeaderDate(d ?? new Date())\n : formatDateLocalized(d ?? new Date(), {\n locale: effectiveLocale,\n includeTime: false,\n });\n\n const months = monthLabels ?? monthsForLocale(effectiveLocale);\n const weekdays = weekdayLabels ?? weekdaysForLocale(effectiveLocale);\n const t = {\n from: labels?.from ?? \"From\",\n to: labels?.to ?? \"To\",\n today: labels?.today ?? \"Today\",\n cancel: labels?.cancel ?? \"Cancel\",\n apply: labels?.apply ?? \"Apply\",\n hours: labels?.hours ?? \"Hours\",\n minutes: labels?.minutes ?? \"Minutes\",\n };\n\n const onApplyClick = () => {\n if (props.mode === \"single\" && singleValue) {\n props.onApply?.(singleValue);\n } else if (props.mode === \"range\" && rangeValue) {\n props.onApply?.(rangeValue);\n }\n };\n\n const contextValue: DatePickerContextValue = {\n mode,\n minDate,\n maxDate,\n isDateDisabled,\n isDateMarked,\n weekdays,\n months,\n viewLeft,\n setViewLeft,\n viewRight,\n setViewRight,\n singleValue: singleValue ?? null,\n rangeValue: rangeValue ?? { from: null, to: null },\n onSingleChange:\n props.mode === \"single\"\n ? (props as { onChange?: (d: Date | null) => void }).onChange ??\n (() => {})\n : () => {},\n onRangeChange:\n props.mode === \"range\"\n ? (\n props as {\n onChange?: (r: { from: Date | null; to: Date | null }) => void;\n }\n ).onChange ?? (() => {})\n : () => {},\n t,\n showTime,\n minuteStep,\n locale: effectiveLocale,\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n \"sui-w-full sui-min-w-[280px] sui-bg-white sui-rounded-lg sui-shadow-lg sui-p-4\",\n className\n )}\n >\n <DatePickerContext.Provider value={contextValue}>\n {mode === \"range\" ? (\n <div className=\"sui-flex sui-items-center sui-justify-between sui-mb-4\">\n <div className=\"sui-title-20-medium\">\n {formatHeader(rangeValue?.from ?? null)}\n </div>\n <div className=\"sui-title-20-medium\">\n {formatHeader(rangeValue?.to ?? null)}\n </div>\n </div>\n ) : (\n <div className={headerClasses()}>\n <div className=\"sui-title-20-medium\">\n {formatHeader(headerDate)}\n </div>\n <button\n type=\"button\"\n className=\"sui-h-8 sui-px-2 sui-rounded-sm sui-border sui-border-stroke-brand sui-text-text-brand hover:sui-bg-background-default sui-label-12\"\n onClick={() => {\n const now = new Date();\n if (props.mode === \"single\") {\n (props as SingleProps).onChange?.(now);\n }\n setViewLeft(startOfMonth(now));\n }}\n >\n {t.today}\n </button>\n </div>\n )}\n\n {mode === \"single\" ? (\n <div>\n <Divider className=\"sui-mb-6\" />\n <div>\n <div className=\"sui-mb-3\">\n <MonthYearDropdown\n month={viewLeft.getMonth()}\n year={viewLeft.getFullYear()}\n onChange={(m: number, y: number) =>\n setViewLeft(new Date(y, m, 1))\n }\n monthLabels={months}\n />\n </div>\n <Calendar\n viewMonth={viewLeft}\n onSelect={handleSelectSingle}\n onNavigateMonth={(m) => setViewLeft(m)}\n />\n </div>\n <Divider className=\"sui-my-6\" />\n {showTime && (\n <div>\n <TimePicker\n value={singleValue ?? null}\n minuteStep={minuteStep}\n onChange={(d) => {\n if (props.mode === \"single\") {\n (props as SingleProps).onChange?.(d);\n }\n }}\n hoursLabel={t.hours}\n minutesLabel={t.minutes}\n />\n <Divider className=\"sui-mt-3\" />\n </div>\n )}\n </div>\n ) : (\n <>\n {isSmallScreen ? (\n <>\n <Divider className=\"sui-mb-3\" />\n <div className=\"sui-px-4 sui-py-3\">\n <div className=\"sui-flex sui-items-center sui-justify-between sui-mb-3\">\n <div className=\"sui-text-14 sui-text-inactive\">\n {mobileStep === \"from\" ? t.from : t.to}\n </div>\n {mobileStep === \"to\" && (\n <button\n type=\"button\"\n className=\"sui-h-8 sui-px-2 sui-rounded-sm sui-border sui-border-stroke-brand sui-text-text-brand hover:sui-bg-background-default sui-label-12\"\n onClick={() => setMobileStep(\"from\")}\n aria-label=\"Go back to From date\"\n >\n Back\n </button>\n )}\n </div>\n {mobileStep === \"from\" ? (\n <>\n <div className=\"sui-mb-3\">\n <MonthYearDropdown\n month={viewLeft.getMonth()}\n year={viewLeft.getFullYear()}\n onChange={(m: number, y: number) =>\n setViewLeft(new Date(y, m, 1))\n }\n monthLabels={months}\n minDate={minDate}\n maxDate={maxDate}\n />\n </div>\n <Calendar\n viewMonth={viewLeft}\n onSelect={handleSelectRange}\n onNavigateMonth={(m) => setViewLeft(m)}\n />\n <Divider className=\"sui-my-3\" />\n {showTime && rangeValue?.from && (\n <div className=\"sui-mt-3\">\n <TimePicker\n value={rangeValue.from}\n minuteStep={minuteStep}\n onChange={(d) => {\n if (props.mode === \"range\") {\n (props as RangeProps).onChange?.({\n from: d,\n to: rangeValue?.to ?? null,\n });\n }\n }}\n hoursLabel={t.hours}\n minutesLabel={t.minutes}\n />\n </div>\n )}\n </>\n ) : (\n <>\n <div className=\"sui-mb-3\">\n <MonthYearDropdown\n month={viewRight.getMonth()}\n year={viewRight.getFullYear()}\n onChange={(m: number, y: number) =>\n setViewRight(new Date(y, m, 1))\n }\n monthLabels={months}\n minDate={rangeValue?.from ?? minDate}\n maxDate={maxDate}\n />\n </div>\n <Calendar\n viewMonth={viewRight}\n onSelect={handleSelectRange}\n onNavigateMonth={(m) => setViewRight(m)}\n />\n <Divider className=\"sui-my-3\" />\n {showTime && rangeValue?.to && (\n <div className=\"sui-mt-3\">\n <TimePicker\n value={rangeValue.to}\n minuteStep={minuteStep}\n onChange={(d) => {\n if (props.mode === \"range\") {\n (props as RangeProps).onChange?.({\n from: rangeValue?.from ?? null,\n to: d,\n });\n }\n }}\n hoursLabel={t.hours}\n minutesLabel={t.minutes}\n />\n </div>\n )}\n </>\n )}\n </div>\n <Divider className=\"sui-mt-3\" />\n </>\n ) : (\n <>\n <Divider className=\"sui-mb-3\" />\n <div className=\"sui-flex sui-items-stretch sui-px-4\">\n <div className=\"sui-flex-1 sui-py-3\">\n <div className=\"sui-mb-3\">\n <div className=\"sui-text-14 sui-text-inactive\">\n {t.from}\n </div>\n <MonthYearDropdown\n month={viewLeft.getMonth()}\n year={viewLeft.getFullYear()}\n onChange={(m: number, y: number) =>\n setViewLeft(new Date(y, m, 1))\n }\n monthLabels={months}\n minDate={minDate}\n maxDate={maxDate}\n />\n </div>\n <Calendar\n viewMonth={viewLeft}\n onSelect={handleSelectRange}\n onNavigateMonth={(m) => setViewLeft(m)}\n />\n <Divider className=\"sui-my-3\" />\n {showTime && rangeValue?.from && (\n <div className=\"sui-mt-3\">\n <TimePicker\n value={rangeValue.from}\n minuteStep={minuteStep}\n onChange={(d) => {\n if (props.mode === \"range\") {\n (props as RangeProps).onChange?.({\n from: d,\n to: rangeValue?.to ?? null,\n });\n }\n }}\n hoursLabel={t.hours}\n minutesLabel={t.minutes}\n />\n {/* no column-level bottom divider; a global one is added below */}\n </div>\n )}\n </div>\n\n <div className=\"sui-flex sui-items-stretch\">\n <Divider\n orientation=\"vertical\"\n className=\"sui-self-stretch sui-mx-4\"\n />\n </div>\n <div className=\"sui-flex-1 sui-py-3\">\n <div className=\"sui-mb-3\">\n <div className=\"sui-text-14 sui-text-inactive\">\n {t.to}\n </div>\n <MonthYearDropdown\n month={viewRight.getMonth()}\n year={viewRight.getFullYear()}\n onChange={(m: number, y: number) =>\n setViewRight(new Date(y, m, 1))\n }\n monthLabels={months}\n // For the To side, enforce minDate based on selected From when choosing end date\n minDate={rangeValue?.from ?? minDate}\n maxDate={maxDate}\n />\n </div>\n <Calendar\n viewMonth={viewRight}\n onSelect={handleSelectRange}\n onNavigateMonth={(m) => setViewRight(m)}\n />\n <Divider className=\"sui-my-3\" />\n {showTime && rangeValue?.to && (\n <div className=\"sui-mt-3\">\n <TimePicker\n value={rangeValue.to}\n minuteStep={minuteStep}\n onChange={(d) => {\n if (props.mode === \"range\") {\n (props as RangeProps).onChange?.({\n from: rangeValue?.from ?? null,\n to: d,\n });\n }\n }}\n hoursLabel={t.hours}\n minutesLabel={t.minutes}\n />\n {/* no column-level bottom divider; a global one is added below */}\n </div>\n )}\n </div>\n </div>\n <Divider className=\"sui-mt-3\" />\n </>\n )}\n </>\n )}\n\n {/* Footer actions */}\n <div className=\"sui-flex sui-items-center sui-gap-3 sui-mt-4\">\n <button\n type=\"button\"\n className=\"sui-flex-1 sui-h-11 sui-rounded-md sui-border sui-border-black sui-bg-white sui-text-text-default hover:sui-bg-background-default sui-button-14-medium\"\n onClick={() => props.onCancel?.()}\n >\n {t.cancel}\n </button>\n <button\n type=\"button\"\n className=\"sui-flex-1 sui-h-11 sui-rounded-md sui-bg-primary sui-text-white hover:sui-opacity-90 sui-button-14-semibold\"\n onClick={onApplyClick}\n >\n {t.apply}\n </button>\n </div>\n </DatePickerContext.Provider>\n </div>\n );\n});\n\nDatePicker.displayName = \"DatePicker\";\n\nexport {\n DatePicker,\n type DatePickerMode,\n type DatePickerProps,\n type RangeValue,\n};\n","import { Input, type InputProps } from \"@/components/Input\";\nimport { formatDateLocalized } from \"@/helpers/date\";\nimport { useDateInputPopover } from \"@/hooks/useDateInputPopover\";\nimport { CalendarIcon } from \"@/icons\";\nimport { cn } from \"@/lib/utils\";\nimport { cva } from \"class-variance-authority\";\nimport { forwardRef, useId, useMemo } from \"react\";\nimport {\n DatePicker,\n type DatePickerProps,\n type RangeValue,\n} from \"./DatePicker\";\n\nconst popoverBase = cva(\n \"sui-absolute sui-z-50 sui-mt-1 sui-origin-top-left sui-rounded-lg sui-shadow-lg\"\n);\n\ntype DateInputMode = \"single\" | \"range\";\n\ntype BaseProps = {\n label?: string;\n helperText?: string;\n error?: string;\n required?: boolean;\n disabled?: boolean;\n className?: string;\n containerClassName?: string;\n placeholder?: string;\n autoWidth?: boolean;\n format?: (\n value: Date | { from: Date | null; to: Date | null } | null\n ) => string;\n parse?: (text: string) => Date | null;\n onOpenChange?: (open: boolean) => void;\n closeOnSelect?: boolean;\n} & Pick<\n DatePickerProps,\n | \"minDate\"\n | \"maxDate\"\n | \"isDateDisabled\"\n | \"isDateMarked\"\n | \"showTime\"\n | \"minuteStep\"\n | \"locale\"\n | \"labels\"\n | \"weekdayLabels\"\n | \"monthLabels\"\n | \"formatHeaderDate\"\n>;\n\ntype SingleValue = Date | null;\ninterface SingleProps\n extends Omit<InputProps, \"value\" | \"onChange\" | \"type\" | \"defaultValue\">,\n BaseProps {\n mode?: \"single\";\n value?: SingleValue;\n defaultValue?: SingleValue;\n onChange?: (value: SingleValue) => void;\n}\n\ninterface RangeProps\n extends Omit<InputProps, \"value\" | \"onChange\" | \"type\" | \"defaultValue\">,\n BaseProps {\n mode: \"range\";\n value?: RangeValue;\n defaultValue?: RangeValue;\n onChange?: (value: RangeValue) => void;\n}\n\ntype DateInputProps = SingleProps | RangeProps;\n\nconst SingleDateInput = forwardRef<HTMLInputElement, SingleProps>(\n (props, ref) => {\n const {\n value,\n onChange,\n label,\n helperText,\n error,\n required,\n disabled,\n className,\n containerClassName,\n placeholder = \"Select date\",\n format,\n parse,\n onOpenChange,\n closeOnSelect = true,\n leftIcon,\n rightIcon,\n onRightIconClick,\n rightIconAriaLabel,\n onLeftIconClick,\n leftIconAriaLabel,\n leftDivider,\n rightDivider,\n autoWidth = true,\n ...pickerProps\n } = props;\n\n const {\n open,\n containerRef,\n triggerRef,\n handleTriggerFocus,\n handleIconToggle,\n closePopover,\n } = useDateInputPopover({\n onOpenChange,\n disabled,\n });\n\n const inputId = useId();\n\n const formatFn = (v: SingleValue | null) => {\n if (format) return format(v);\n const useTime = (pickerProps as { showTime?: boolean }).showTime ?? false;\n const localeCode = (\n (pickerProps as { locale?: string | string[] }).locale ?? \"en\"\n ).toString();\n return formatDateLocalized(v, {\n locale: localeCode,\n includeTime: useTime,\n });\n };\n\n const displayValue = useMemo(() => {\n return formatFn(value ?? null);\n }, [value, format, pickerProps]);\n\n const handleApply = (d: Date | null) => {\n onChange?.(d);\n if (closeOnSelect) {\n closePopover();\n }\n };\n\n const handleInputChange: React.ChangeEventHandler<HTMLInputElement> = (\n e\n ) => {\n if (!parse) return;\n const parsed = parse(e.target.value);\n if (parsed) {\n onChange?.(parsed);\n }\n };\n\n const contentSize = useMemo(() => {\n if (!autoWidth) return undefined;\n const base = displayValue?.length ?? 0;\n const placeholderLen = (placeholder ?? \"\").length;\n const iconExtra = (leftIcon ? 2 : 0) + (rightIcon ? 2 : 0);\n const buffer = 2;\n const len = Math.max(base, placeholderLen) + iconExtra + buffer;\n return Math.max(len, 12);\n }, [autoWidth, displayValue, placeholder, leftIcon, rightIcon]);\n\n return (\n <div\n ref={containerRef}\n className={cn(\n \"sui-relative\",\n autoWidth ? \"sui-inline-block\" : \"sui-w-full\",\n containerClassName\n )}\n >\n <Input\n id={inputId}\n label={label}\n helperText={helperText}\n error={error}\n required={required}\n disabled={disabled}\n placeholder={placeholder}\n value={displayValue}\n onChange={handleInputChange}\n onFocus={handleTriggerFocus}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n className={cn(className, autoWidth && \"sui-w-auto\")}\n contentSize={contentSize}\n rightIcon={\n rightIcon ?? (\n <CalendarIcon\n aria-hidden=\"true\"\n className={\n disabled ? \"sui-opacity-50 sui-cursor-not-allowed\" : \"\"\n }\n />\n )\n }\n onRightIconClick={() => {\n onRightIconClick?.();\n handleIconToggle();\n }}\n rightIconAriaLabel={rightIconAriaLabel ?? \"Open date picker\"}\n leftIcon={leftIcon}\n onLeftIconClick={() => {\n onLeftIconClick?.();\n handleIconToggle();\n }}\n leftIconAriaLabel={leftIconAriaLabel ?? \"Open date picker\"}\n leftDivider={leftDivider}\n rightDivider={rightDivider}\n ref={(el) => {\n if (typeof ref === \"function\") ref(el);\n else if (ref && typeof ref === \"object\") ref.current = el;\n triggerRef.current = el;\n }}\n readOnly={!parse}\n />\n\n {open && (\n <div\n className={cn(\n popoverBase(),\n \"sui-w-full sui-max-w-[360px] sui-min-w-[320px]\"\n )}\n role=\"dialog\"\n aria-modal=\"false\"\n >\n <DatePicker\n mode=\"single\"\n value={value}\n onChange={(d) => onChange?.(d)}\n onApply={(d) => handleApply(d as Date | null)}\n onCancel={closePopover}\n defaultMonth={value ?? undefined}\n {...(pickerProps as Omit<\n DatePickerProps,\n \"mode\" | \"value\" | \"onChange\"\n >)}\n locale={\n (pickerProps as { locale?: string | string[] }).locale ?? \"en\"\n }\n showTime={\n (pickerProps as { showTime?: boolean }).showTime ?? false\n }\n />\n </div>\n )}\n </div>\n );\n }\n);\n\nconst RangeDateInput = forwardRef<HTMLInputElement, RangeProps>(\n (props, ref) => {\n const {\n value,\n onChange,\n label,\n helperText,\n error,\n required,\n disabled,\n className,\n containerClassName,\n placeholder = \"Select date\",\n format,\n onOpenChange,\n closeOnSelect = true,\n leftIcon,\n rightIcon,\n onRightIconClick,\n rightIconAriaLabel,\n onLeftIconClick,\n leftIconAriaLabel,\n leftDivider,\n rightDivider,\n autoWidth = true,\n ...pickerProps\n } = props;\n\n const {\n open,\n containerRef,\n triggerRef,\n handleTriggerFocus,\n handleIconToggle,\n closePopover,\n } = useDateInputPopover({\n onOpenChange,\n disabled,\n });\n\n const inputId = useId();\n\n const formatFn = (v: RangeValue | null) => {\n if (format) return format(v as unknown as Date | RangeValue | null);\n const useTime = (pickerProps as { showTime?: boolean }).showTime ?? false;\n const localeCode = (\n (pickerProps as { locale?: string | string[] }).locale ?? \"en\"\n ).toString();\n return formatDateLocalized(v as unknown as Date | RangeValue | null, {\n locale: localeCode,\n includeTime: useTime,\n });\n };\n\n const displayValue = useMemo(() => {\n return formatFn(value ?? null);\n }, [value, format, pickerProps]);\n\n const handleApply = (r: RangeValue) => {\n onChange?.(r);\n if (closeOnSelect) {\n closePopover();\n }\n };\n\n const contentSize = useMemo(() => {\n if (!autoWidth) return undefined;\n const base = displayValue?.length ?? 0;\n const placeholderLen = (placeholder ?? \"\").length;\n const iconExtra = (leftIcon ? 2 : 0) + (rightIcon ? 2 : 0);\n const buffer = 2;\n const len = Math.max(base, placeholderLen) + iconExtra + buffer;\n return Math.max(len, 20);\n }, [autoWidth, displayValue, placeholder, leftIcon, rightIcon]);\n\n return (\n <div\n ref={containerRef}\n className={cn(\n \"sui-relative\",\n autoWidth ? \"sui-inline-block\" : \"sui-w-full\",\n containerClassName\n )}\n >\n <Input\n id={inputId}\n label={label}\n helperText={helperText}\n error={error}\n required={required}\n disabled={disabled}\n placeholder={placeholder}\n value={displayValue}\n onFocus={handleTriggerFocus}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n className={cn(className, autoWidth && \"sui-w-auto\")}\n contentSize={contentSize}\n rightIcon={\n rightIcon ?? (\n <CalendarIcon\n aria-hidden=\"true\"\n className={disabled ? \"sui-text-disabled\" : \"\"}\n />\n )\n }\n onRightIconClick={() => {\n onRightIconClick?.();\n handleIconToggle();\n }}\n rightIconAriaLabel={rightIconAriaLabel ?? \"Open date picker\"}\n leftIcon={leftIcon}\n onLeftIconClick={() => {\n onLeftIconClick?.();\n handleIconToggle();\n }}\n leftIconAriaLabel={leftIconAriaLabel ?? \"Open date picker\"}\n leftDivider={leftDivider}\n rightDivider={rightDivider}\n ref={(el) => {\n if (typeof ref === \"function\") ref(el);\n else if (ref && typeof ref === \"object\") ref.current = el;\n triggerRef.current = el;\n }}\n readOnly\n />\n\n {open && (\n <div\n className={cn(\n popoverBase(),\n // Mobile-friendly width; large width on >= sm to fit dual calendars\n \"sui-w-full sui-min-w-[320px] sui-max-w-[360px] sui-sm:w-auto sui-sm:min-w-[640px] sui-sm:max-w-none\"\n )}\n role=\"dialog\"\n aria-modal=\"false\"\n >\n <DatePicker\n mode=\"range\"\n value={value}\n onChange={(r) => onChange?.(r)}\n onApply={(r) => handleApply(r as RangeValue)}\n onCancel={closePopover}\n defaultMonth={value?.to ?? value?.from ?? undefined}\n {...(pickerProps as Omit<\n DatePickerProps,\n \"mode\" | \"value\" | \"onChange\"\n >)}\n locale={\n (pickerProps as { locale?: string | string[] }).locale ?? \"en\"\n }\n showTime={\n (pickerProps as { showTime?: boolean }).showTime ?? false\n }\n />\n </div>\n )}\n </div>\n );\n }\n);\n\n/**\n * - Text input that opens an accessible date (and optional time) picker. Supports\n * single and range modes, localization, and formatted display values.\n */\nconst DateInput = forwardRef<HTMLInputElement, DateInputProps>((props, ref) => {\n if (props.mode === \"range\") {\n return <RangeDateInput {...props} ref={ref} />;\n }\n return <SingleDateInput {...props} ref={ref} />;\n});\n\nDateInput.displayName = \"DateInput\";\n\nexport { DateInput, type DateInputMode, type DateInputProps };\n","export type BasicFileValidationErrorType = \"fileType\" | \"fileSize\";\n\nexport interface BasicFileValidationError {\n type: BasicFileValidationErrorType;\n message: string;\n}\n\n/**\n * Validate a File against accepted types and max size.\n * Returns null when valid, or a BasicFileValidationError when invalid.\n */\nexport function validateFileTypeAndSize(\n file: File,\n acceptedFileTypes: string[],\n maxFileSize: number\n): BasicFileValidationError | null {\n // Type check\n if (acceptedFileTypes.length > 0) {\n const fileExtension = `.${file.name.split(\".\").pop()?.toLowerCase()}`;\n const mimeType = file.type;\n const isAccepted = acceptedFileTypes.some((type) =>\n type.startsWith(\".\") ? fileExtension === type : mimeType === type\n );\n if (!isAccepted) {\n return {\n type: \"fileType\",\n message: `File type not supported. Accepted types: ${acceptedFileTypes.join(\n \", \"\n )}`,\n };\n }\n }\n\n // Size check\n if (file.size > maxFileSize) {\n const maxSizeMB = Math.round(maxFileSize / (1024 * 1024));\n return {\n type: \"fileSize\",\n message: `File is too large. Maximum size is ${maxSizeMB}MB`,\n };\n }\n\n return null;\n}\n","import { useControllableState } from \"@/hooks/useControllableState\";\nimport {\n CloseIcon,\n ErrorIcon,\n FileIcon,\n FileUploadIcon,\n ImageIcon,\n ImageUploadIcon,\n SuccessIcon,\n VideoIcon,\n VideoUploadIcon,\n} from \"@/icons\";\nimport { cn, generateId } from \"@/lib/utils\";\nimport { validateFileTypeAndSize } from \"@/validations/file\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { forwardRef, useCallback, useId, useRef, useState } from \"react\";\n\nconst fileUploadVariants = cva(\n \"sui-relative sui-w-full sui-rounded-md sui-border-2 sui-border-dashed sui-bg-background-primary sui-transition-all sui-duration-200 sui-ease-in-out focus-visible:sui-outline-none focus-visible:sui-ring-2 focus-visible:sui-ring-primary focus-visible:sui-ring-offset-2\",\n {\n variants: {\n variant: {\n default:\n \"sui-border-primary sui-bg-background-primary hover:sui-border-primary/80 hover:sui-bg-primary/5\",\n dragOver: \"sui-border-primary sui-bg-primary/10\",\n error: \"sui-border-error sui-bg-error/5\",\n disabled:\n \"sui-border-stroke-level3 sui-bg-background-secondary2 sui-cursor-not-allowed\",\n },\n size: {\n sm: \"sui-min-h-[120px] sui-p-4\",\n md: \"sui-min-h-[160px] sui-p-6\",\n lg: \"sui-min-h-[200px] sui-p-8\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n }\n);\n\ntype FileUploadVariant = VariantProps<typeof fileUploadVariants>[\"variant\"];\ntype FileUploadSize = VariantProps<typeof fileUploadVariants>[\"size\"];\n\ntype FileUploadIconType = \"file\" | \"image\" | \"video\";\n\ninterface FileUploadError {\n type: \"fileType\" | \"fileSize\" | \"fileCount\" | \"network\" | \"unknown\";\n message: string;\n file?: File;\n}\n\ninterface FileUploadFile {\n id: string;\n file: File;\n preview?: string;\n status: \"pending\" | \"uploading\" | \"success\" | \"error\";\n error?: FileUploadError;\n progress?: number;\n}\n\ntype FileUploadSubtitleContext = {\n acceptedFileTypes: string[];\n maxFileSize: number;\n multiple: boolean;\n maxFiles: number;\n};\n\ninterface FileUploadMessages {\n titleIdle?: React.ReactNode;\n titleDragOver?: React.ReactNode;\n subtitle?: React.ReactNode;\n}\n\ninterface FileUploadProps {\n // Core functionality\n files?: FileUploadFile[];\n onFilesChange?: (files: FileUploadFile[]) => void;\n onUploadSuccess?: (files: File[]) => void;\n onUploadError?: (error: FileUploadError) => void;\n onFileRemove?: (fileId: string) => void;\n\n // Configuration\n acceptedFileTypes?: string[];\n maxFileSize?: number;\n maxFiles?: number;\n multiple?: boolean;\n disabled?: boolean;\n\n // UI customization\n label?: string;\n error?: string;\n /** Optional helper text displayed under the dropzone when no error */\n helperText?: string;\n variant?: FileUploadVariant;\n size?: FileUploadSize;\n className?: string;\n\n // Icons\n iconType?: FileUploadIconType;\n uploadIcon?: React.ReactNode;\n successIcon?: React.ReactNode;\n errorIcon?: React.ReactNode;\n\n // Accessibility\n id?: string;\n required?: boolean;\n \"aria-label\"?: string;\n \"aria-describedby\"?: string;\n\n // Copy overrides\n messages?: FileUploadMessages;\n /**\n * Fully control the subtitle line using a render function.\n * If provided, this takes precedence over messages.subtitle.\n */\n renderSubtitle?: (ctx: FileUploadSubtitleContext) => React.ReactNode;\n\n /**\n * Optional callback for custom file validation.\n * Return a FileUploadError to reject the file, or null/undefined to accept it.\n * This runs after internal type/size validation.\n */\n onValidateFile?: (file: File) => FileUploadError | null | undefined;\n}\n\n/**\n * File upload component with drag-and-drop, validation, previews, and accessibility support.\n * Supports multiple files, file type validation, size limits, and comprehensive error handling.\n */\n/**\n * Note on uploading state:\n * - The component does not perform uploads; the parent owns upload lifecycle.\n * - To show progress or uploading state, manage `files` as a controlled prop and\n * update each item's `status` (\"uploading\" | \"success\" | \"error\") and `progress`.\n */\nconst FileUpload = forwardRef<HTMLDivElement, FileUploadProps>(\n (\n {\n files: controlledFiles,\n onFilesChange,\n onUploadSuccess,\n onUploadError,\n onFileRemove,\n acceptedFileTypes = [],\n maxFileSize = 7 * 1024 * 1024, // 7MB default\n maxFiles = 10,\n multiple = false,\n disabled = false,\n label,\n error,\n helperText,\n variant,\n size = \"md\",\n className,\n iconType = \"file\",\n uploadIcon,\n successIcon,\n errorIcon,\n id,\n required = false,\n \"aria-label\": ariaLabel,\n \"aria-describedby\": ariaDescribedBy,\n messages,\n renderSubtitle,\n onValidateFile,\n ...props\n },\n ref\n ) => {\n const autoId = useId();\n const uploadId = id ?? autoId;\n const inputRef = useRef<HTMLInputElement>(null);\n const [dragOver, setDragOver] = useState(false);\n const [internalFiles, setInternalFiles] = useControllableState({\n value: controlledFiles,\n defaultValue: [],\n onChange: onFilesChange,\n });\n const [inlineError, setInlineError] = useState<string | null>(null);\n const hasInteractiveChildren = (internalFiles?.length ?? 0) > 0;\n\n const hasError = Boolean(error);\n const currentVariant = hasError ? \"error\" : dragOver ? \"dragOver\" : variant;\n const errorId = `${uploadId}-error`;\n const helpId = `${uploadId}-help`;\n\n // File validation\n const validateFile = useCallback(\n (file: File): FileUploadError | null => {\n const basicError = validateFileTypeAndSize(\n file,\n acceptedFileTypes,\n maxFileSize\n );\n if (basicError) {\n return { ...basicError, file } as FileUploadError;\n }\n return null;\n },\n [acceptedFileTypes, maxFileSize]\n );\n\n // Generate preview for images\n const generatePreview = useCallback((file: File): Promise<string> => {\n return new Promise((resolve) => {\n if (file.type.startsWith(\"image/\")) {\n const reader = new FileReader();\n reader.onload = (e) => resolve(e.target?.result as string);\n reader.readAsDataURL(file);\n } else {\n resolve(\"\");\n }\n });\n }, []);\n\n // Handle file selection\n const handleFiles = useCallback(\n async (selectedFiles: FileList | File[]) => {\n if (disabled) return;\n\n const fileArray = Array.from(selectedFiles);\n const newFiles: FileUploadFile[] = [];\n let hadError = false;\n\n const existingValidCount = (internalFiles ?? []).filter(\n (f) => f.status !== \"error\"\n ).length;\n\n // Check file count limit\n if (!multiple && fileArray.length > 1) {\n const error: FileUploadError = {\n type: \"fileCount\",\n message: \"Only one file is allowed\",\n };\n onUploadError?.(error);\n setInlineError(error.message);\n hadError = true;\n // Show all selected as error chips\n fileArray.forEach((file) =>\n newFiles.push({\n id: generateId(),\n file,\n status: \"error\",\n error,\n })\n );\n setInternalFiles([...(internalFiles ?? []), ...newFiles]);\n return;\n }\n\n if (existingValidCount + fileArray.length > maxFiles) {\n const allowed = Math.max(0, maxFiles - existingValidCount);\n const extra = fileArray.slice(allowed);\n const allowedFiles = fileArray.slice(0, allowed);\n const error: FileUploadError = {\n type: \"fileCount\",\n message: `Maximum ${maxFiles} files allowed`,\n };\n if (extra.length > 0) {\n onUploadError?.(error);\n setInlineError(error.message);\n hadError = true;\n extra.forEach((file) =>\n newFiles.push({\n id: generateId(),\n file,\n status: \"error\",\n error,\n })\n );\n }\n // Continue to process only the allowed part\n fileArray.length = allowedFiles.length;\n for (let i = 0; i < allowedFiles.length; i++)\n fileArray[i] = allowedFiles[i];\n }\n\n for (const file of fileArray) {\n let validationError = validateFile(file);\n if (!validationError && onValidateFile) {\n validationError = onValidateFile(file) ?? null;\n }\n if (validationError) {\n onUploadError?.(validationError);\n setInlineError(validationError.message);\n hadError = true;\n newFiles.push({\n id: generateId(),\n file,\n status: \"error\",\n error: validationError,\n });\n continue;\n }\n\n const preview = await generatePreview(file);\n const fileUploadFile: FileUploadFile = {\n id: generateId(),\n file,\n preview,\n status: \"pending\",\n };\n\n newFiles.push(fileUploadFile);\n }\n\n if (newFiles.length > 0) {\n const updatedFiles = multiple\n ? [...(internalFiles ?? []), ...newFiles]\n : newFiles;\n setInternalFiles(updatedFiles);\n const successful = newFiles\n .filter((f) => f.status !== \"error\")\n .map((f) => f.file);\n if (successful.length > 0) onUploadSuccess?.(successful);\n if (!hadError) setInlineError(null);\n }\n },\n [\n disabled,\n multiple,\n maxFiles,\n internalFiles?.length,\n validateFile,\n generatePreview,\n onUploadError,\n onUploadSuccess,\n setInternalFiles,\n ]\n );\n\n // Handle drag events\n const handleDragOver = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (!disabled) {\n setDragOver(true);\n }\n },\n [disabled]\n );\n\n const handleDragLeave = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setDragOver(false);\n }, []);\n\n const handleDrop = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setDragOver(false);\n\n if (disabled) return;\n\n const files = e.dataTransfer.files;\n if (files.length > 0) {\n handleFiles(files);\n }\n },\n [disabled, handleFiles]\n );\n\n // Handle click to browse\n const handleClick = useCallback(() => {\n if (!disabled && inputRef.current) {\n inputRef.current.click();\n }\n }, [disabled]);\n\n // Handle file input change\n const handleInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const files = e.target.files;\n if (files && files.length > 0) {\n handleFiles(files);\n }\n // Reset input value to allow selecting the same file again\n e.target.value = \"\";\n },\n [handleFiles]\n );\n\n // Handle file removal\n const handleFileRemove = useCallback(\n (fileId: string) => {\n const updatedFiles = (internalFiles ?? []).filter(\n (f) => f.id !== fileId\n );\n setInternalFiles(updatedFiles);\n onFileRemove?.(fileId);\n\n // Clear inline error if no remaining error files\n const hasRemainingErrors = updatedFiles.some(\n (f) => f.status === \"error\"\n );\n if (!hasRemainingErrors) {\n setInlineError(null);\n }\n },\n [internalFiles, setInternalFiles, onFileRemove]\n );\n\n // Clear preview on load error to fall back to the ImageIcon\n const handlePreviewError = useCallback(\n (fileId: string) => {\n const updated = (internalFiles ?? []).map((f) =>\n f.id === fileId ? { ...f, preview: undefined } : f\n );\n setInternalFiles(updated);\n },\n [internalFiles, setInternalFiles]\n );\n\n // Handle keyboard navigation\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleClick();\n }\n },\n [handleClick]\n );\n\n // Get accepted file types display text\n const getAcceptedTypesText = (): string => {\n if (acceptedFileTypes.length === 0) return \"All file types\";\n return acceptedFileTypes.join(\", \");\n };\n\n // Get max file size display text\n const getMaxSizeText = (): string => {\n const maxSizeMB = Math.round(maxFileSize / (1024 * 1024));\n return `${maxSizeMB}MB`;\n };\n\n const describedById =\n [hasError && errorId, !hasError && helperText && helpId, ariaDescribedBy]\n .filter(Boolean)\n .join(\" \") || undefined;\n\n const subtitleNode =\n renderSubtitle?.({\n acceptedFileTypes,\n maxFileSize,\n multiple,\n maxFiles,\n }) ?? messages?.subtitle;\n\n return (\n <div className={cn(\"sui-w-full\", className)} ref={ref} {...props}>\n {label && (\n <label\n htmlFor={uploadId}\n className=\"sui-block sui-text-14 sui-font-normal sui-text-inactive sui-mb-2\"\n >\n {label}\n {required && <span className=\"sui-text-error sui-ml-1\">*</span>}\n </label>\n )}\n {/* Hidden input placed outside the interactive dropzone to avoid nested focusable descendants */}\n <input\n ref={inputRef}\n type=\"file\"\n id={uploadId}\n className=\"sui-sr-only\"\n tabIndex={-1}\n aria-hidden=\"true\"\n multiple={multiple}\n accept={acceptedFileTypes.join(\",\")}\n disabled={disabled}\n onChange={handleInputChange}\n aria-describedby={describedById}\n />\n <div\n className={cn(\n fileUploadVariants({ variant: currentVariant, size }),\n disabled && \"sui-cursor-not-allowed sui-opacity-50\"\n )}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n onClick={handleClick}\n onKeyDown={!hasInteractiveChildren ? handleKeyDown : undefined}\n tabIndex={disabled ? -1 : hasInteractiveChildren ? -1 : 0}\n role={hasInteractiveChildren ? undefined : \"button\"}\n aria-label={\n hasInteractiveChildren\n ? undefined\n : ariaLabel || label || \"File upload area\"\n }\n aria-describedby={describedById}\n >\n <div className=\"sui-flex sui-flex-col sui-items-center sui-justify-center sui-text-center sui-space-y-3\">\n {/* Upload Icon */}\n <div className=\"sui-flex sui-items-center sui-space-x-2 sui-text-primary sui-p-2 sui-bg-background-secondary2 sui-rounded-md\">\n {uploadIcon || (\n <>\n {iconType === \"file\" && <FileUploadIcon />}\n {iconType === \"image\" && <ImageUploadIcon />}\n {iconType === \"video\" && <VideoUploadIcon />}\n </>\n )}\n </div>\n\n {/* Upload Text */}\n <div className=\"sui-space-y-1\">\n <p className=\"sui-body-14-medium sui-text-default\">\n {(dragOver ? messages?.titleDragOver : messages?.titleIdle) ??\n (dragOver\n ? \"Drop your files here\"\n : \"Click to upload or drag and drop\")}\n </p>\n <p className=\"sui-label-12\">\n {subtitleNode ?? (\n <>\n {getAcceptedTypesText()} • Max {getMaxSizeText()}\n {multiple && ` • Up to ${maxFiles} files`}\n </>\n )}\n </p>\n </div>\n\n {/* Inline files list (chips) inside the dropzone */}\n {(internalFiles?.length ?? 0) > 0 && (\n <div className=\"sui-w-full sui-mt-3 sui-flex sui-flex-wrap sui-gap-2 sui-justify-start\">\n {(internalFiles ?? []).map((fileUpload) => (\n <div\n key={fileUpload.id}\n className={cn(\n \"sui-relative sui-overflow-hidden sui-flex sui-items-center sui-gap-2 sui-max-w-full sui-rounded-md sui-border sui-px-2 sui-py-1\",\n fileUpload.status === \"error\" &&\n \"sui-border-error sui-bg-error/5\",\n fileUpload.status === \"success\" &&\n \"sui-border-success sui-bg-success/5\",\n fileUpload.status === \"pending\" &&\n \"sui-border-stroke-level2 sui-bg-background-secondary1\"\n )}\n >\n {/* Progress overlay fill across chip */}\n <div\n className={cn(\n \"sui-absolute sui-inset-y-0 sui-left-0 sui-transition-all sui-duration-300\",\n fileUpload.status === \"uploading\" &&\n \"sui-bg-primary/20\",\n fileUpload.status === \"success\" && \"sui-bg-success/20\",\n fileUpload.status === \"error\" && \"sui-bg-error/20\"\n )}\n style={{\n width:\n fileUpload.status === \"uploading\"\n ? `${Math.min(\n 100,\n Math.max(0, fileUpload.progress ?? 0)\n )}%`\n : fileUpload.status === \"success\"\n ? \"100%\"\n : fileUpload.status === \"error\"\n ? \"100%\"\n : \"0%\",\n }}\n aria-hidden=\"true\"\n />\n <div className=\"sui-relative sui-z-10 sui-flex sui-items-center sui-gap-2\">\n <div className=\"sui-flex sui-items-center sui-justify-center sui-h-5 sui-w-5 sui-rounded sui-overflow-hidden sui-text-text-blue\">\n {fileUpload.file.type.startsWith(\"image/\") &&\n fileUpload.preview ? (\n <img\n src={fileUpload.preview}\n alt={fileUpload.file.name}\n className=\"sui-h-full sui-w-full sui-object-cover\"\n onError={() => handlePreviewError(fileUpload.id)}\n />\n ) : fileUpload.file.type.startsWith(\"image/\") ? (\n <ImageIcon />\n ) : fileUpload.file.type.startsWith(\"video/\") ? (\n <VideoIcon />\n ) : (\n <FileIcon />\n )}\n </div>\n <span className=\"sui-label-12 sui-truncate sui-max-w-[220px] sui-text-text-blue\">\n {fileUpload.file.name}\n </span>\n {fileUpload.status === \"success\" &&\n (successIcon ?? <SuccessIcon />)}\n {fileUpload.status === \"error\" &&\n (errorIcon ?? <ErrorIcon />)}\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n handleFileRemove(fileUpload.id);\n }}\n className=\"sui-p-1 sui-rounded hover:sui-bg-stroke-level3\"\n aria-label={`Remove ${fileUpload.file.name}`}\n >\n <CloseIcon />\n </button>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n\n {/* Inline validation error (latest) */}\n {inlineError && !error && (\n <div className=\"sui-mt-2\">\n <p\n role=\"alert\"\n aria-live=\"polite\"\n className=\"sui-text-12 sui-leading-[100%] sui-tracking-[-0.01em] sui-text-error\"\n >\n {inlineError}\n </p>\n </div>\n )}\n\n {/* Helper text (only when no error) */}\n {!inlineError && !error && helperText && (\n <div className=\"sui-mt-2\">\n <p\n id={helpId}\n className=\"sui-text-12 sui-leading-[100%] sui-tracking-[-0.01em] sui-text-inactive\"\n >\n {helperText}\n </p>\n </div>\n )}\n\n {/* File List moved inside dropzone as inline chips */}\n\n {/* Error Text */}\n {error && (\n <div className=\"sui-mt-2\">\n <p\n id={errorId}\n role=\"alert\"\n className=\"sui-text-12 sui-leading-[100%] sui-tracking-[-0.01em] sui-text-error\"\n >\n {error}\n </p>\n </div>\n )}\n </div>\n );\n }\n);\nFileUpload.displayName = \"FileUpload\";\n\nexport {\n FileUpload,\n type FileUploadError,\n type FileUploadFile,\n type FileUploadIconType,\n type FileUploadProps,\n type FileUploadSize,\n type FileUploadVariant,\n};\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, useCallback, useId } from \"react\";\n\ntype FormBaseProps = Omit<\n React.FormHTMLAttributes<HTMLFormElement>,\n \"onSubmit\"\n>;\n\ninterface FormProps extends FormBaseProps {\n onSubmit?: (event: React.FormEvent<HTMLFormElement>) => void;\n noValidate?: boolean;\n children: React.ReactNode;\n className?: string;\n \"aria-describedby\"?: string;\n}\n\n/**\n * - Accessible form primitives: form wrapper with invalid focus management,\n * error summary region, and grouping field container.\n */\nconst Form = forwardRef<HTMLFormElement, FormProps>(\n (\n {\n onSubmit,\n noValidate,\n children,\n className,\n \"aria-describedby\": ariaDescribedBy,\n ...rest\n },\n ref\n ) => {\n const handleSubmit = useCallback(\n (e: React.FormEvent<HTMLFormElement>) => {\n const form = e.currentTarget;\n if (!noValidate && !form.checkValidity()) {\n e.preventDefault();\n // Focus first invalid element\n const firstInvalid = form.querySelector<HTMLElement>(\n \":invalid, [aria-invalid='true']\"\n );\n if (firstInvalid) {\n firstInvalid.focus();\n }\n return;\n }\n onSubmit?.(e);\n },\n [onSubmit, noValidate]\n );\n\n return (\n <form\n ref={ref}\n className={cn(\"sui-w-full\", className)}\n onSubmit={handleSubmit}\n noValidate={noValidate}\n aria-describedby={ariaDescribedBy}\n {...rest}\n >\n {children}\n </form>\n );\n }\n);\n\ninterface FormErrorItem {\n id: string; // id of the field/control to scroll to\n message: string;\n}\n\ninterface FormErrorSummaryProps {\n errors: FormErrorItem[];\n className?: string;\n title?: string;\n id?: string;\n}\n\n/**\n * Renders a concise error summary with links to corresponding fields.\n * Uses role=\"alert\" and aria-live to announce updates to screen readers.\n */\nconst FormErrorSummary = forwardRef<HTMLDivElement, FormErrorSummaryProps>(\n ({ errors, className, title, id }: FormErrorSummaryProps, ref) => {\n const hasErrors = errors && errors.length > 0;\n const generatedId = useId();\n const regionId = id ?? generatedId;\n\n if (!hasErrors) return null;\n\n return (\n <div\n ref={ref}\n role=\"alert\"\n aria-live=\"assertive\"\n aria-atomic=\"true\"\n className={cn(\n \"sui-mb-4 sui-rounded-md sui-border sui-border-error/40 sui-bg-error/5 sui-p-3\",\n className\n )}\n id={regionId}\n >\n <p className=\"sui-text-14 sui-text-error sui-font-medium sui-mb-2\">\n {title ?? \"Please fix the following errors:\"}\n </p>\n <ul className=\"sui-list-disc sui-pl-5 sui-space-y-1\">\n {errors.map((err) => (\n <li key={err.id} className=\"sui-text-14\">\n <a\n href={`#${err.id}`}\n className=\"sui-text-error hover:sui-underline\"\n onClick={(e) => {\n // Smooth focus to the target control\n e.preventDefault();\n const el = document.getElementById(\n err.id\n ) as HTMLElement | null;\n el?.focus();\n }}\n >\n {err.message}\n </a>\n </li>\n ))}\n </ul>\n </div>\n );\n }\n);\n\ninterface FormFieldProps {\n children: React.ReactNode;\n className?: string;\n asFieldset?: boolean;\n legend?: string;\n}\n\n/**\n * Lightweight grouping container for related controls.\n * Optionally renders a fieldset/legend for semantic grouping.\n */\nconst FormField = forwardRef<\n HTMLFieldSetElement | HTMLDivElement,\n FormFieldProps\n>(\n (\n { children, className, asFieldset = false, legend }: FormFieldProps,\n ref\n ) => {\n if (asFieldset) {\n return (\n <fieldset\n ref={ref as React.Ref<HTMLFieldSetElement>}\n className={cn(\"sui-mb-4 sui-space-y-2\", className)}\n >\n {legend && (\n <legend className=\"sui-text-14 sui-font-medium\">{legend}</legend>\n )}\n {children}\n </fieldset>\n );\n }\n return (\n <div\n ref={ref as React.Ref<HTMLDivElement>}\n className={cn(\"sui-mb-4 sui-space-y-2\", className)}\n >\n {children}\n </div>\n );\n }\n);\n\nForm.displayName = \"Form\";\nFormErrorSummary.displayName = \"FormErrorSummary\";\nFormField.displayName = \"FormField\";\n\nexport {\n Form,\n FormErrorSummary,\n FormField,\n type FormErrorItem,\n type FormErrorSummaryProps,\n type FormFieldProps,\n type FormProps,\n};\n","export type PaginationPageItem = number | \"ellipsis\";\nimport { useMemo } from \"react\";\n\nconst getRange = (start: number, end: number): number[] => {\n const length = end - start + 1;\n return Array.from({ length }, (_, idx) => idx + start);\n};\n\nexport const usePagination = ({\n currentPage,\n totalCount,\n pageSize,\n siblingCount,\n hasNextPage,\n hasPrevPage,\n}: {\n currentPage: number;\n totalCount: number;\n pageSize: number;\n siblingCount: number;\n hasNextPage?: boolean;\n hasPrevPage?: boolean;\n}): PaginationPageItem[] => {\n return useMemo(() => {\n // Unknown total → show only current page\n if (totalCount === 0) return [currentPage];\n\n // Known last page (no next page) → show a trailing window ending at current\n if (hasNextPage === false) {\n const startPage = Math.max(1, currentPage - siblingCount);\n return getRange(startPage, currentPage);\n }\n\n const totalPageCount = Math.max(1, Math.ceil(totalCount / pageSize));\n\n // 1 (first) + 1 (last) + 1 (current) + 2*siblings + 2 (ellipses)\n const totalPageNumbersToShow = 5 + siblingCount * 2;\n\n // Small page count → show all pages\n if (totalPageNumbersToShow >= totalPageCount) {\n return getRange(1, totalPageCount);\n }\n\n const leftSiblingIndex = Math.max(currentPage - siblingCount, 1);\n const rightSiblingIndex = Math.min(\n currentPage + siblingCount,\n totalPageCount\n );\n\n const shouldShowLeftEllipsis = leftSiblingIndex > 2;\n const shouldShowRightEllipsis = rightSiblingIndex < totalPageCount - 1;\n\n // Only right ellipsis (e.g., 1, 2, 3, 4, ..., 10)\n if (!shouldShowLeftEllipsis && shouldShowRightEllipsis) {\n const leftRange = getRange(1, rightSiblingIndex + 1);\n return [...leftRange, \"ellipsis\", totalPageCount];\n }\n\n // Only left ellipsis (e.g., 1, ..., 7, 8, 9, 10)\n if (shouldShowLeftEllipsis && !shouldShowRightEllipsis) {\n const rightRange = getRange(leftSiblingIndex - 1, totalPageCount);\n return [1, \"ellipsis\", ...rightRange];\n }\n\n // Both ellipses (e.g., 1, ..., 4, 5, 6, ..., 10)\n const middleRange = getRange(leftSiblingIndex, rightSiblingIndex);\n return [1, \"ellipsis\", ...middleRange, \"ellipsis\", totalPageCount];\n }, [\n currentPage,\n pageSize,\n siblingCount,\n totalCount,\n hasNextPage,\n hasPrevPage,\n ]);\n};\n","import { useControllableState } from \"@/hooks/useControllableState\";\nimport { usePagination } from \"@/hooks/usePagination\";\nimport { ToFirstIcon, ToLastIcon, ToNextIcon, ToPreviousIcon } from \"@/icons\";\nimport { cn } from \"@/lib/utils\";\nimport { forwardRef } from \"react\";\n\ntype PaginationBaseProps = Omit<React.HTMLAttributes<HTMLElement>, \"onChange\">;\n\ninterface PaginationProps extends PaginationBaseProps {\n total?: number;\n pageSize?: number;\n page?: number;\n defaultPage?: number;\n onPageChange?: (page: number) => void;\n siblingCount?: 0 | 1 | 2;\n showInfo?: boolean;\n showFirstLast?: boolean;\n hasNextPage?: boolean;\n hasPrevPage?: boolean;\n renderInfo?: (from: number, to: number, total: number) => React.ReactNode;\n className?: string;\n}\n\n/**\n * Pagination - An accessible pagination component with flexible configuration.\n *\n * Features:\n * - Page number buttons with ellipsis for large datasets\n * - Previous/Next navigation\n * - Optional First/Last page buttons\n * - Page info display (e.g., \"1-10 of 100\")\n * - Controlled or uncontrolled modes\n * - Responsive design\n * - Configurable sibling page count\n * - Custom info renderer\n * - Full keyboard navigation and ARIA support\n *\n * @example\n * ```tsx\n * // Basic usage\n * <Pagination\n * total={100}\n * pageSize={10}\n * page={currentPage}\n * onPageChange={setCurrentPage}\n * />\n *\n * // With first/last buttons\n * <Pagination\n * total={500}\n * pageSize={20}\n * page={page}\n * onPageChange={setPage}\n * showFirstLast\n * siblingCount={2}\n * />\n *\n * // Without page info\n * <Pagination\n * total={200}\n * pageSize={25}\n * page={page}\n * onPageChange={setPage}\n * showInfo={false}\n * />\n *\n * // Custom info renderer\n * <Pagination\n * total={150}\n * pageSize={15}\n * page={page}\n * onPageChange={setPage}\n * renderInfo={(from, to, total) => (\n * <span>Showing {from}-{to} of {total} items</span>\n * )}\n * />\n *\n * // For infinite scroll/cursor pagination\n * <Pagination\n * page={page}\n * onPageChange={setPage}\n * hasNextPage={hasMore}\n * hasPrevPage={page > 1}\n * showInfo={false}\n * />\n * ```\n */\nconst Pagination = forwardRef<HTMLElement, PaginationProps>(\n (\n {\n total,\n pageSize = 10,\n page,\n defaultPage = 1,\n onPageChange,\n siblingCount = 1,\n showInfo = true,\n showFirstLast = false,\n hasNextPage,\n hasPrevPage,\n renderInfo,\n className,\n ...rest\n },\n ref\n ) => {\n const [currentPage, setCurrentPage] = useControllableState<number>({\n value: page,\n defaultValue: defaultPage,\n onChange: onPageChange,\n });\n\n const totalPages = total\n ? Math.max(1, Math.ceil(total / pageSize))\n : undefined;\n const clampedPage = totalPages\n ? Math.min(Math.max(currentPage ?? 1, 1), totalPages)\n : Math.max(currentPage ?? 1, 1);\n const items = usePagination({\n currentPage: clampedPage,\n totalCount: total ?? 0,\n pageSize: pageSize,\n siblingCount,\n hasNextPage,\n hasPrevPage,\n });\n\n const from = total ? (clampedPage - 1) * pageSize + 1 : undefined;\n const to = total ? Math.min(clampedPage * pageSize, total) : undefined;\n\n const goto = (p: number) => {\n const next = totalPages\n ? Math.min(Math.max(p, 1), totalPages)\n : Math.max(p, 1);\n setCurrentPage(next);\n };\n\n const info = renderInfo ? (\n renderInfo(from ?? 0, to ?? 0, total ?? 0)\n ) : total ? (\n <span className=\"sui-text-text/70 sui-text-14\">{`Showing ${\n (to ?? 0) - (from ?? 0) + 1\n } of ${total} entries`}</span>\n ) : (\n <span className=\"sui-text-text/70 sui-text-14\">Page {clampedPage}</span>\n );\n\n return (\n <nav\n ref={ref}\n aria-label=\"Pagination\"\n className={cn(\n // Mobile-first: stack info above controls, space tightened on small screens\n \"sui-flex sui-flex-col sui-items-stretch sui-gap-3 sui-sm:flex-row sui-sm:items-center sui-sm:justify-between sui-sm:gap-6\",\n className\n )}\n {...rest}\n >\n {showInfo && (\n <div className=\"sui-order-1 sui-sm:order-none\">{info}</div>\n )}\n <ul className=\"sui-flex sui-items-center sui-gap-2 sui-sm:gap-4\">\n {showFirstLast && (\n <li>\n <button\n type=\"button\"\n aria-label=\"Go to first page\"\n disabled={clampedPage === 1}\n onClick={() => goto(1)}\n className={cn(\n \"sui-h-8 sui-w-8 sui-rounded-md sui-flex sui-items-center sui-justify-center sui-text-16 disabled:sui-text-text/30 disabled:sui-opacity-50 disabled:sui-cursor-not-allowed\",\n \"enabled:hover:sui-bg-gray-50\"\n )}\n >\n <ToFirstIcon />\n </button>\n </li>\n )}\n <li>\n <button\n type=\"button\"\n aria-label=\"Go to previous page\"\n disabled={hasPrevPage === false || clampedPage === 1}\n onClick={() => goto(clampedPage - 1)}\n className={cn(\n \"sui-h-8 sui-w-8 sui-rounded-md sui-flex sui-items-center sui-justify-center sui-text-16 disabled:sui-text-text/30 disabled:sui-opacity-50 disabled:sui-cursor-not-allowed\",\n \"enabled:hover:sui-bg-gray-50\"\n )}\n >\n <ToPreviousIcon />\n </button>\n </li>\n {items.map((item, idx) => (\n <li key={`${item}-${idx}`}>\n {item === \"ellipsis\" ? (\n <span className=\"sui-text-text/60 sui-text-16\">…</span>\n ) : (\n <button\n type=\"button\"\n aria-current={item === clampedPage ? \"page\" : undefined}\n aria-label={`Go to page ${item}`}\n onClick={() => goto(item)}\n className={cn(\n \"sui-min-w-8 sui-h-8 sui-rounded-md sui-px-2 sui-text-16 sui-transition-all\",\n item === clampedPage\n ? \"sui-bg-primary sui-text-white\"\n : \"sui-text-text enabled:hover:sui-bg-gray-50\"\n )}\n >\n {item}\n </button>\n )}\n </li>\n ))}\n <li>\n <button\n type=\"button\"\n aria-label=\"Go to next page\"\n disabled={\n hasNextPage === false ||\n (totalPages ? clampedPage === totalPages : false)\n }\n onClick={() => goto(clampedPage + 1)}\n className={cn(\n \"sui-h-8 sui-w-8 sui-rounded-md sui-flex sui-items-center sui-justify-center sui-text-16 disabled:sui-text-text/30 disabled:sui-opacity-50 disabled:sui-cursor-not-allowed\",\n \"enabled:hover:sui-bg-gray-50\"\n )}\n >\n <ToNextIcon />\n </button>\n </li>\n {showFirstLast && (\n <li>\n <button\n type=\"button\"\n aria-label=\"Go to last page\"\n disabled={totalPages ? clampedPage === totalPages : false}\n onClick={() => goto(totalPages ?? 1)}\n className={cn(\n \"sui-h-8 sui-w-8 sui-rounded-md sui-flex sui-items-center sui-justify-center sui-text-16 disabled:sui-text-text/30 disabled:sui-opacity-50 disabled:sui-cursor-not-allowed\",\n \"enabled:hover:sui-bg-gray-50\"\n )}\n >\n <ToLastIcon />\n </button>\n </li>\n )}\n </ul>\n </nav>\n );\n }\n);\n\nPagination.displayName = \"Pagination\";\n\nexport { Pagination, type PaginationProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef } from \"react\";\n\ntype BaseInputProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\">;\n\ninterface RadioProps extends BaseInputProps {\n /** Marks the field as invalid (error state). Applies error color styling. */\n invalid?: boolean;\n /** Optional visible label. Use `children` if you need custom label layout. */\n label?: React.ReactNode;\n /** Optional description text shown under the label for a11y. */\n description?: React.ReactNode;\n /** Id of the description element for aria-describedby; auto-wired if `description` provided. */\n descriptionId?: string;\n}\n\n/**\n * Radio - An accessible radio button component with custom SVG UI.\n *\n * Features:\n * - Native radio button behavior with custom visual design\n * - Error/invalid state styling\n * - Optional label and description\n * - Full keyboard navigation within radio groups\n * - ARIA attributes for screen readers\n * - Works with RadioGroup for managing groups\n *\n * @example\n * ```tsx\n * // Basic usage (standalone)\n * <Radio\n * name=\"size\"\n * value=\"medium\"\n * checked={size === 'medium'}\n * onChange={(e) => setSize(e.target.value)}\n * label=\"Medium\"\n * />\n *\n * // With description\n * <Radio\n * name=\"plan\"\n * value=\"pro\"\n * checked={plan === 'pro'}\n * onChange={(e) => setPlan(e.target.value)}\n * label=\"Pro Plan\"\n * description=\"$29/month - Advanced features included\"\n * />\n *\n * // With error state\n * <Radio\n * name=\"payment\"\n * value=\"card\"\n * checked={payment === 'card'}\n * onChange={(e) => setPayment(e.target.value)}\n * label=\"Credit Card\"\n * invalid={!payment && submitted}\n * />\n *\n * // Use RadioGroup for managing multiple radios\n * <RadioGroup value={size} onChange={setSize}>\n * <Radio value=\"small\" label=\"Small\" />\n * <Radio value=\"medium\" label=\"Medium\" />\n * <Radio value=\"large\" label=\"Large\" />\n * </RadioGroup>\n * ```\n */\nconst Radio = forwardRef<HTMLInputElement, RadioProps>(\n (\n {\n id,\n name,\n className,\n invalid = false,\n disabled,\n label,\n description,\n descriptionId,\n children,\n ...props\n },\n ref\n ) => {\n const describedBy = description\n ? descriptionId || (id ? `${id}-desc` : undefined)\n : props[\"aria-describedby\"]; // allow override\n\n return (\n <label\n className={cn(\n \"sui-inline-flex sui-items-start sui-gap-2 sui-select-none\",\n disabled && \"sui-cursor-not-allowed\",\n className\n )}\n >\n <input\n id={id}\n ref={ref}\n type=\"radio\"\n name={name}\n disabled={disabled}\n aria-describedby={describedBy}\n className={cn(\n // Keep input accessible but visually hidden; pair with peer for styling\n \"sui-peer sui-sr-only\"\n )}\n {...props}\n />\n <span\n className={cn(\n // 24x24 container with 2px padding around the inner circle\n \"sui-relative sui-inline-flex sui-h-6 sui-w-6 sui-items-center sui-justify-center sui-p-[2px]\",\n // focus ring via peer\n \"peer-focus-visible:sui-ring-2 peer-focus-visible:sui-ring-primary peer-focus-visible:sui-ring-offset-2 peer-focus-visible:sui-ring-offset-white\",\n // Checked state: colorize ring and show dot\n !invalid &&\n \"peer-checked:[&_.sui-radio-ring]:sui-text-primary peer-checked:[&_.sui-radio-dot]:sui-text-primary peer-checked:[&_.sui-radio-dot]:sui-opacity-100\",\n invalid &&\n \"peer-checked:[&_.sui-radio-ring]:sui-text-error peer-checked:[&_.sui-radio-dot]:sui-text-error peer-checked:[&_.sui-radio-dot]:sui-opacity-100\",\n disabled && \"sui-opacity-40\"\n )}\n aria-hidden=\"true\"\n >\n <svg\n className=\"sui-h-5 sui-w-5\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n className={cn(\n \"sui-radio-ring\",\n // default (unchecked) color\n invalid ? \"sui-text-error\" : \"sui-text-inactive\",\n \"sui-transition-colors sui-duration-200\"\n )}\n cx=\"10\"\n cy=\"10\"\n r=\"9.3\"\n stroke=\"currentColor\"\n strokeWidth=\"1.4\"\n vectorEffect=\"non-scaling-stroke\"\n />\n <circle\n className=\"sui-radio-dot sui-opacity-0 sui-transition-opacity sui-duration-200\"\n cx=\"10\"\n cy=\"10\"\n r=\"6.8\"\n fill=\"currentColor\"\n />\n </svg>\n </span>\n\n {(label || children) && (\n <span className=\"sui-flex sui-flex-col sui-gap-1\">\n {label ?? children}\n {description && (\n <span\n id={describedBy}\n aria-hidden=\"true\"\n className={cn(\n \"sui-text-12\",\n invalid ? \"sui-text-error\" : \"sui-text-text-secondary1\"\n )}\n >\n {description}\n </span>\n )}\n </span>\n )}\n </label>\n );\n }\n);\n\nRadio.displayName = \"Radio\";\n\nexport { Radio, type RadioProps };\n","import { useControllableState } from \"@/hooks/useControllableState\";\nimport { cn } from \"@/lib/utils\";\nimport { Orientation } from \"@/types\";\nimport { forwardRef } from \"react\";\nimport { Radio } from \"./Radio\";\n\ninterface RadioGroupOption<T extends string = string> {\n value: T;\n label: React.ReactNode;\n description?: React.ReactNode;\n disabled?: boolean;\n invalid?: boolean;\n id?: string;\n}\n\ntype BaseFieldSetProps = Omit<\n React.HTMLAttributes<HTMLFieldSetElement>,\n \"onChange\"\n>;\n\ninterface RadioGroupProps<T extends string = string> extends BaseFieldSetProps {\n /** Accessible legend/title for the group */\n legend: React.ReactNode;\n /** Shared name assigned to all radios in this group */\n name: string;\n /** Layout direction */\n orientation?: Orientation;\n /** Radio options list */\n options: RadioGroupOption<T>[];\n /** Controlled value */\n value?: T;\n /** Uncontrolled default value */\n defaultValue?: T;\n /** Change handler (receives next value) */\n onChange?: (next: T) => void;\n /** Marks group invalid; individual option invalids override per item */\n invalid?: boolean;\n /** Description for the group for SR users */\n description?: React.ReactNode;\n /** ID for description element, auto if omitted */\n descriptionId?: string;\n}\n\n/**\n * - Fieldset wrapper managing a group of radios with description and orientation.\n * - Supports controlled and uncontrolled selection.\n */\nconst RadioGroup = forwardRef<HTMLFieldSetElement, RadioGroupProps<string>>(\n (props, ref) => {\n const {\n legend,\n name,\n orientation = \"vertical\",\n options,\n value,\n defaultValue,\n onChange,\n className,\n invalid,\n description,\n descriptionId,\n ...fieldsetProps\n } = props;\n\n const [selected, setSelected] = useControllableState<string>({\n value,\n defaultValue,\n onChange,\n });\n\n const groupDescId = description\n ? descriptionId || `${name}-desc`\n : undefined;\n\n return (\n <fieldset\n className={cn(\n \"sui-flex\",\n orientation === \"horizontal\"\n ? \"sui-flex-row sui-gap-4\"\n : \"sui-flex-col sui-gap-2\",\n className\n )}\n aria-invalid={invalid || undefined}\n aria-describedby={groupDescId}\n ref={ref}\n {...fieldsetProps}\n >\n <legend className=\"sui-text-14 sui-font-medium sui-text-text-default\">\n {legend}\n </legend>\n {description && (\n <p\n id={groupDescId}\n className={cn(\n \"sui-text-12\",\n invalid ? \"sui-text-error\" : \"sui-text-text-secondary1\"\n )}\n >\n {description}\n </p>\n )}\n {options.map((opt) => {\n const checked = selected === opt.value;\n const id = opt.id || `${name}-${opt.value}`;\n return (\n <Radio\n key={opt.value}\n id={id}\n name={name}\n label={opt.label}\n description={opt.description}\n disabled={opt.disabled}\n invalid={opt.invalid ?? invalid}\n checked={checked}\n onChange={() => setSelected(opt.value)}\n />\n );\n })}\n </fieldset>\n );\n }\n);\n\nRadioGroup.displayName = \"RadioGroup\";\n\nexport { RadioGroup, type RadioGroupOption, type RadioGroupProps };\n","import { useCallback, useMemo, useRef, useState } from \"react\";\nimport { SelectOption } from \"../components/Select\";\n\ninterface UseDropdownLogicProps {\n options: SelectOption[];\n value?: string | string[];\n multiple?: boolean;\n searchable?: boolean;\n onSearch?: (searchTerm: string) => void;\n onChange?: (value: string | string[]) => void;\n}\n\nexport const useDropdownLogic = ({\n options,\n value,\n multiple = false,\n searchable = false,\n onSearch,\n onChange,\n}: UseDropdownLogicProps) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchTerm, setSearchTerm] = useState(\"\");\n const optionRefs = useRef<Array<HTMLButtonElement | null>>([]);\n const searchInputRef = useRef<HTMLInputElement>(null);\n\n // Memoized filtered options for performance\n const filteredOptions = useMemo(() => {\n if (!searchable) return options;\n\n if (onSearch) {\n // For API search, show all options (filtering handled by API)\n return options;\n }\n\n return options.filter((option) =>\n option.label.toLowerCase().includes(searchTerm.toLowerCase())\n );\n }, [options, searchTerm, searchable, onSearch]);\n\n const selectedValue = multiple\n ? Array.isArray(value)\n ? value\n : []\n : typeof value === \"string\"\n ? value\n : \"\";\n\n const selectedOption = !multiple\n ? options.find((option) => option.value === selectedValue)\n : null;\n\n const handleCustomChange = useCallback(\n (newValue: string) => {\n if (multiple) {\n const currentValues = Array.isArray(value) ? value : [];\n const newValues = currentValues.includes(newValue)\n ? currentValues.filter((v) => v !== newValue)\n : [...currentValues, newValue];\n onChange?.(newValues);\n } else {\n onChange?.(newValue);\n setIsOpen(false);\n }\n },\n [multiple, value, onChange]\n );\n\n const handleSearchChange = useCallback(\n (newSearchTerm: string) => {\n setSearchTerm(newSearchTerm);\n onSearch?.(newSearchTerm);\n },\n [onSearch]\n );\n\n const openDropdown = useCallback(() => {\n setIsOpen(true);\n // Focus management: search input first if searchable, otherwise first option\n setTimeout(() => {\n if (searchable && searchInputRef.current) {\n searchInputRef.current.focus();\n } else if (optionRefs.current[0]) {\n optionRefs.current[0].focus();\n }\n }, 0);\n }, [searchable]);\n\n const closeDropdown = useCallback(() => {\n setIsOpen(false);\n setSearchTerm(\"\");\n }, []);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n const currentIndex = optionRefs.current.findIndex(\n (el) => el === (document.activeElement as HTMLButtonElement)\n );\n\n switch (e.key) {\n case \"ArrowDown\": {\n e.preventDefault();\n const next = Math.min(\n optionRefs.current.length - 1,\n currentIndex + 1\n );\n optionRefs.current[next]?.focus();\n break;\n }\n case \"ArrowUp\": {\n e.preventDefault();\n const prev = Math.max(0, currentIndex - 1);\n optionRefs.current[prev]?.focus();\n break;\n }\n case \"Home\":\n e.preventDefault();\n optionRefs.current[0]?.focus();\n break;\n case \"End\":\n e.preventDefault();\n optionRefs.current[optionRefs.current.length - 1]?.focus();\n break;\n case \"Escape\":\n e.preventDefault();\n closeDropdown();\n break;\n default:\n // Handle alphanumeric keys for quick navigation\n if (e.key.length === 1 && /[a-zA-Z0-9]/.test(e.key)) {\n e.preventDefault();\n const key = e.key.toLowerCase();\n const matchingIndex = filteredOptions.findIndex((option) =>\n option.label.toLowerCase().startsWith(key)\n );\n if (matchingIndex !== -1) {\n optionRefs.current[matchingIndex]?.focus();\n }\n }\n break;\n }\n },\n [filteredOptions, closeDropdown]\n );\n\n return {\n isOpen,\n searchTerm,\n optionRefs,\n searchInputRef,\n filteredOptions,\n selectedValue,\n selectedOption,\n handleCustomChange,\n handleSearchChange,\n openDropdown,\n closeDropdown,\n handleKeyDown,\n };\n};\n","import { type SelectOption } from \"./Select\";\n\ninterface DisplayValueProps {\n selectedValue: string | string[];\n selectedOption: SelectOption | null;\n multiple: boolean;\n placeholder?: string;\n renderOption?: (option: SelectOption) => React.ReactNode;\n options: SelectOption[];\n}\n\n/**\n * - Select helper that renders the selected option(s) label(s) or placeholder,\n * supporting custom renderers and multi-select badges.\n */\nexport function DisplayValue({\n selectedValue,\n selectedOption,\n multiple,\n placeholder,\n renderOption,\n options,\n}: DisplayValueProps) {\n if (multiple) {\n return Array.isArray(selectedValue) && selectedValue.length > 0 ? (\n <span className=\"sui-flex sui-items-center sui-gap-1\">\n {selectedValue.slice(0, 2).map((val) => {\n const option = options.find((opt) => opt.value === val);\n return option ? (\n <span\n key={val}\n className=\"sui-bg-background-secondary2 sui-px-2 sui-rounded-sm sui-label-12 sui-text-text-blue sui-border sui-border-[#A4C3EC] sui-truncate sui-whitespace-nowrap\"\n >\n {renderOption ? renderOption(option) : option.label}\n </span>\n ) : null;\n })}\n {selectedValue.length > 2 && (\n <span className=\"sui-label-12 sui-text-text-blue\">\n +{selectedValue.length - 2} more\n </span>\n )}\n </span>\n ) : (\n placeholder || \"Select options...\"\n );\n }\n\n return selectedOption\n ? renderOption\n ? renderOption(selectedOption)\n : selectedOption.label\n : placeholder || \"Select an option...\";\n}\n","import { SearchIcon } from \"@/icons\";\nimport { TickIcon } from \"@/icons/TickIcon\";\nimport { cn } from \"@/lib/utils\";\nimport { type SelectOption } from \"./Select\";\n\ninterface DropdownMenuProps {\n isOpen: boolean;\n selectId: string;\n searchable: boolean;\n searchTerm: string;\n searchInputRef: React.RefObject<HTMLInputElement>;\n onSearchChange: (searchTerm: string) => void;\n filteredOptions: SelectOption[];\n selectedValue: string | string[];\n multiple: boolean;\n optionRefs: React.MutableRefObject<Array<HTMLButtonElement | null>>;\n onOptionChange: (value: string) => void;\n onKeyDown: (e: React.KeyboardEvent) => void;\n renderOption?: (option: SelectOption) => React.ReactNode;\n maxHeight: number;\n}\n\n/**\n * - Internal listbox for the custom Select: optional search field, keyboard\n * interaction, single/multi selection with checkbox affordance.\n */\nexport function DropdownMenu({\n isOpen,\n selectId,\n searchable,\n searchTerm,\n searchInputRef,\n onSearchChange,\n filteredOptions,\n selectedValue,\n multiple,\n optionRefs,\n onOptionChange,\n onKeyDown,\n renderOption,\n maxHeight,\n}: DropdownMenuProps) {\n if (!isOpen) return null;\n\n return (\n <div\n className=\"sui-absolute sui-top-full sui-left-0 sui-right-0 sui-mt-1 sui-bg-white sui-border sui-border-secondary-300 sui-rounded-md sui-shadow-md sui-z-50 sui-overflow-hidden\"\n style={{ maxHeight: `${maxHeight}px` }}\n >\n {/* Search Input */}\n {searchable && (\n <div className=\"sui-p-2 sui-border-b sui-border-secondary-300\">\n <div className=\"sui-relative\">\n <div className=\"sui-absolute sui-left-3 sui-top-1/2 sui-transform sui--translate-y-1/2 sui-text-secondary-400 sui-w-4 sui-h-4 sui-flex sui-items-center sui-justify-center\">\n <SearchIcon size={16} />\n </div>\n <input\n ref={searchInputRef}\n type=\"text\"\n placeholder=\"Search...\"\n value={searchTerm}\n onChange={(e) => onSearchChange(e.target.value)}\n className=\"sui-w-full sui-pl-10 sui-pr-3 sui-py-2 sui-text-14 sui-border sui-border-secondary-300 sui-rounded sui-focus:sui-outline-none sui-focus:sui-border-primary\"\n />\n </div>\n </div>\n )}\n\n {/* Options List */}\n <ul\n id={`${selectId}-listbox`}\n role=\"listbox\"\n aria-multiselectable={multiple || undefined}\n tabIndex={-1}\n className=\"sui-max-h-60 sui-overflow-y-auto sui-scrollbars-thin\"\n onKeyDown={onKeyDown}\n >\n {filteredOptions.length > 0 ? (\n filteredOptions.map((option, index) => {\n const isSelected = multiple\n ? Array.isArray(selectedValue) &&\n selectedValue.includes(option.value)\n : selectedValue === option.value;\n\n return (\n <li key={option.value} role=\"presentation\">\n <button\n type=\"button\"\n className={cn(\n \"sui-w-full sui-px-4 sui-py-3 sui-text-left sui-body-16 sui-flex sui-items-center sui-justify-between hover:sui-bg-secondary sui-transition-colors\",\n option.disabled &&\n \"sui-text-disabled sui-cursor-not-allowed sui-opacity-50\"\n )}\n ref={(el) => (optionRefs.current[index] = el)}\n onClick={() => {\n if (!option.disabled) {\n onOptionChange(option.value);\n }\n }}\n disabled={option.disabled}\n role=\"option\"\n aria-selected={isSelected}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n if (!option.disabled) {\n onOptionChange(option.value);\n }\n }\n }}\n >\n <span className=\"sui-flex sui-items-center sui-gap-2 sui-min-w-0 sui-flex-1 sui-truncate\">\n {renderOption ? renderOption(option) : option.label}\n </span>\n {isSelected && (\n <TickIcon size={20} className=\"sui-text-primary\" />\n )}\n </button>\n </li>\n );\n })\n ) : (\n <li role=\"presentation\">\n <div className=\"sui-px-4 sui-py-3 sui-text-14 sui-text-secondary-400 sui-text-center\">\n No options found\n </div>\n </li>\n )}\n </ul>\n </div>\n );\n}\n","import { useClickOutside } from \"@/hooks/useClickOutside\";\nimport { useDropdownLogic } from \"@/hooks/useDropdownLogic\";\nimport { CloseIcon, DropdownIcon } from \"@/icons\";\nimport { cn } from \"@/lib/utils\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { forwardRef, RefObject, useId, useRef } from \"react\";\nimport { DisplayValue } from \"./DisplayValue\";\nimport { DropdownMenu } from \"./DropdownMenu\";\n\nconst selectVariants = cva(\n // Mobile-first: slightly smaller base, scale up at sm\n \"sui-flex sui-h-10 sui-w-full sui-rounded-md sui-border sui-border-secondary-300 sui-bg-background sui-px-3 sui-py-2 sui-body-14 sui-sm:h-12 sui-sm:px-4 sui-sm:py-3 sui-sm:body-16 focus-visible:sui-outline-none disabled:sui-cursor-not-allowed disabled:sui-opacity-50 sui-appearance-none sui-pr-10 sui-sm:pr-12\",\n {\n variants: {\n variant: {\n default:\n \"sui-border-secondary focus:sui-border-primary focus-visible:sui-border-primary\",\n error:\n \"sui-border-error focus:sui-border-error focus-visible:sui-border-error\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n);\n\ntype SelectVariant = VariantProps<typeof selectVariants>[\"variant\"];\n\ninterface SelectOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\ntype SelectBaseProps = Omit<\n React.SelectHTMLAttributes<HTMLSelectElement>,\n \"size\" | \"required\" | \"multiple\" | \"onChange\"\n>;\n\ninterface SelectProps extends SelectBaseProps {\n variant?: SelectVariant;\n label?: string;\n error?: string;\n helperText?: string;\n required?: boolean;\n disabled?: boolean;\n placeholder?: string;\n options: SelectOption[];\n value?: string | string[];\n multiple?: boolean;\n native?: boolean;\n onChange?: (value: string | string[]) => void;\n containerClassName?: string;\n renderOption?: (option: SelectOption) => React.ReactNode;\n // Custom dropdown props\n searchable?: boolean;\n onSearch?: (searchTerm: string) => void;\n clearable?: boolean;\n maxHeight?: number;\n // Override render functions\n renderValue?: (props: {\n selectedValue: string | string[];\n selectedOption: SelectOption | null;\n options: SelectOption[];\n multiple: boolean;\n placeholder?: string;\n }) => React.ReactNode;\n renderDropdown?: (props: {\n isOpen: boolean;\n selectId: string;\n searchable: boolean;\n searchTerm: string;\n searchInputRef: React.RefObject<HTMLInputElement>;\n onSearchChange: (searchTerm: string) => void;\n filteredOptions: SelectOption[];\n selectedValue: string | string[];\n multiple: boolean;\n optionRefs: React.MutableRefObject<Array<HTMLButtonElement | null>>;\n onOptionChange: (value: string) => void;\n onKeyDown: (e: React.KeyboardEvent) => void;\n renderOption?: (option: SelectOption) => React.ReactNode;\n maxHeight: number;\n }) => React.ReactNode;\n}\n\n/**\n * Select - A versatile form select component with native and custom dropdown modes.\n *\n * Features:\n * - Native HTML select or custom dropdown UI\n * - Single and multi-select support\n * - Searchable options (client-side or API-driven)\n * - Clearable selections\n * - Custom option rendering\n * - Validation states (error, helper text)\n * - Full keyboard navigation and accessibility\n *\n * Customization:\n * - `renderValue`: Override the display of the selected value(s) in the button\n * - `renderDropdown`: Override the entire dropdown menu rendering\n * - `renderOption`: Customize individual option rendering\n *\n * @example\n * ```tsx\n * // Basic usage\n * <Select\n * options={[{ value: \"1\", label: \"Option 1\" }]}\n * value={value}\n * onChange={setValue}\n * />\n *\n * // Custom value display\n * <Select\n * options={options}\n * value={value}\n * onChange={setValue}\n * renderValue={({ selectedOption }) => (\n * <span className=\"sui-font-bold\">{selectedOption?.label}</span>\n * )}\n * />\n *\n * // Custom dropdown\n * <Select\n * options={options}\n * value={value}\n * onChange={setValue}\n * renderDropdown={({ isOpen, filteredOptions, onOptionChange }) => (\n * // Your custom dropdown JSX\n * )}\n * />\n * ```\n */\nconst Select = forwardRef<HTMLSelectElement | HTMLButtonElement, SelectProps>(\n (\n {\n className,\n variant = \"default\",\n label,\n error,\n helperText,\n required = false,\n disabled = false,\n placeholder,\n options,\n value,\n multiple = false,\n native = false, // Custom dropdown by default\n onChange,\n containerClassName,\n id,\n renderOption,\n // Custom dropdown props\n searchable = false,\n clearable = false,\n maxHeight = 200,\n onSearch,\n // Override render functions\n renderValue,\n renderDropdown,\n ...props\n },\n ref\n ) => {\n const autoId = useId();\n const selectId = id ?? autoId;\n const hasError = Boolean(error);\n const selectVariant = hasError ? \"error\" : variant;\n const describedById = hasError\n ? `${selectId}-error`\n : helperText\n ? `${selectId}-help`\n : undefined;\n\n // Use custom dropdown logic hook\n const {\n isOpen,\n searchTerm,\n optionRefs,\n searchInputRef,\n filteredOptions,\n selectedValue,\n selectedOption,\n handleCustomChange,\n handleSearchChange,\n openDropdown,\n closeDropdown,\n handleKeyDown,\n } = useDropdownLogic({\n options,\n value,\n multiple,\n searchable,\n onSearch,\n onChange,\n });\n\n // Click outside to close\n const containerRef = useRef<HTMLDivElement>(null);\n useClickOutside(containerRef, () => {\n if (isOpen) {\n closeDropdown();\n }\n });\n\n const handleChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\n if (multiple) {\n const selectedValues = Array.from(\n e.target.selectedOptions,\n (option) => option.value\n );\n onChange?.(selectedValues);\n } else {\n onChange?.(e.target.value);\n }\n };\n\n return (\n <div ref={containerRef} className={cn(\"sui-w-full\", containerClassName)}>\n {label && (\n <label\n htmlFor={selectId}\n className=\"sui-block sui-text-14 sui-font-normal sui-text-inactive sui-mb-2\"\n >\n {label}\n {required && <span className=\"sui-text-error sui-ml-1\">*</span>}\n </label>\n )}\n\n <div className=\"sui-relative\">\n {native ? (\n // Native Select\n <>\n <select\n className={cn(\n selectVariants({ variant: selectVariant, className })\n )}\n ref={ref as RefObject<HTMLSelectElement>}\n id={selectId}\n required={required}\n aria-required={required}\n aria-invalid={hasError}\n aria-describedby={describedById}\n disabled={disabled}\n multiple={multiple}\n value={selectedValue}\n onChange={handleChange}\n {...props}\n >\n {placeholder && !multiple && (\n <option value=\"\" disabled style={{ color: \"#B1B5C3\" }}>\n {placeholder}\n </option>\n )}\n {options.map((option) => (\n <option\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n >\n {renderOption ? renderOption(option) : option.label}\n </option>\n ))}\n </select>\n\n {/* Dropdown Icon */}\n <div\n className={cn(\n \"sui-pointer-events-none sui-absolute sui-right-3 sui-top-1/2 sui-transform sui--translate-y-1/2 sui-w-6 sui-h-6 sui-flex sui-items-center sui-justify-center\",\n disabled ? \"sui-text-disabled\" : \"sui-text-secondary-400\"\n )}\n >\n <DropdownIcon size={24} />\n </div>\n </>\n ) : (\n // Custom Dropdown\n <>\n {/* Hidden inputs for form submission */}\n {props.name &&\n !disabled &&\n (Array.isArray(selectedValue) ? (\n selectedValue.map((val) => (\n <input\n key={val}\n type=\"hidden\"\n name={props.name}\n value={val}\n />\n ))\n ) : (\n <input\n type=\"hidden\"\n name={props.name}\n value={selectedValue}\n />\n ))}\n {/* Custom Select Button */}\n <button\n type=\"button\"\n className={cn(\n selectVariants({ variant: selectVariant, className }),\n \"sui-overflow-hidden\"\n )}\n onClick={() =>\n !disabled && (isOpen ? closeDropdown() : openDropdown())\n }\n disabled={disabled}\n ref={ref as RefObject<HTMLButtonElement>}\n id={selectId}\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-describedby={describedById}\n aria-controls={isOpen ? `${selectId}-listbox` : undefined}\n onKeyDown={(e) => {\n if (disabled) return;\n if (\n !isOpen &&\n (e.key === \"ArrowDown\" || e.key === \"ArrowUp\")\n ) {\n e.preventDefault();\n openDropdown();\n } else if (isOpen && e.key === \"Escape\") {\n e.preventDefault();\n closeDropdown();\n }\n }}\n >\n <span\n className={cn(\n \"sui-flex sui-items-center sui-gap-2 sui-truncate sui-flex-1 sui-min-w-0\",\n !selectedOption && !multiple && \"sui-text-disabled\"\n )}\n >\n {multiple &&\n Array.isArray(selectedValue) &&\n selectedValue.length > 0 ? (\n // Hide inline text when chips overlay is rendered\n <span aria-hidden=\"true\" />\n ) : renderValue ? (\n renderValue({\n selectedValue,\n selectedOption: selectedOption || null,\n options,\n multiple,\n placeholder,\n })\n ) : (\n <DisplayValue\n selectedValue={selectedValue}\n selectedOption={selectedOption || null}\n multiple={multiple}\n placeholder={placeholder}\n renderOption={renderOption}\n options={options}\n />\n )}\n </span>\n\n {/* Dropdown Icon */}\n <div\n className={cn(\n \"sui-pointer-events-none sui-absolute sui-right-3 sui-top-1/2 sui-transform sui--translate-y-1/2 sui-w-6 sui-h-6 sui-flex sui-items-center sui-justify-center sui-transition-transform\",\n disabled ? \"sui-text-disabled\" : \"sui-text-secondary-400\",\n isOpen && \"sui-rotate-180\"\n )}\n >\n <DropdownIcon size={24} />\n </div>\n </button>\n\n {/* Selected chips overlay (sibling to avoid nesting) */}\n {multiple &&\n Array.isArray(selectedValue) &&\n selectedValue.length > 0 &&\n !disabled && (\n <div\n className=\"sui-absolute sui-left-3 sui-right-9 sui-top-1/2 sui--translate-y-1/2 sui-flex sui-items-center sui-gap-1 sui-overflow-hidden sui-whitespace-nowrap\"\n role=\"group\"\n aria-label=\"Selected options\"\n >\n {selectedValue.slice(0, 2).map((val) => {\n const option = options.find((opt) => opt.value === val);\n if (!option) return null;\n return (\n <span\n key={val}\n className=\"sui-inline-flex sui-items-center sui-gap-1 sui-bg-background-secondary2 sui-px-2 sui-rounded-sm sui-label-12 sui-text-text-blue sui-border sui-border-[#A4C3EC]\"\n >\n {renderOption ? renderOption(option) : option.label}\n <button\n type=\"button\"\n aria-label={`Remove ${option.label}`}\n className=\"sui-pointer-events-auto sui-inline-flex sui-items-center sui-justify-center sui-text-secondary-400 hover:sui-text-secondary-600 focus-visible:sui-outline-none focus-visible:sui-ring-2 focus-visible:sui-ring-primary sui-rounded-sm\"\n onClick={(e) => {\n e.stopPropagation();\n const currentValues = Array.isArray(selectedValue)\n ? selectedValue\n : [];\n onChange?.(\n currentValues.filter(\n (existing) => existing !== val\n )\n );\n }}\n >\n <CloseIcon size={12} />\n </button>\n </span>\n );\n })}\n {selectedValue.length > 2 && (\n <span className=\"sui-label-12 sui-text-text-blue\">\n +{selectedValue.length - 2} more\n </span>\n )}\n </div>\n )}\n\n {/* Clear Button (sibling to avoid button-in-button nesting) */}\n {clearable && selectedValue && !disabled && (\n <button\n type=\"button\"\n className=\"sui-absolute sui-right-10 sui-top-1/2 sui-transform sui--translate-y-1/2 sui-text-secondary-400 hover:sui-text-secondary-600 sui-w-6 sui-h-6 sui-flex sui-items-center sui-justify-center\"\n aria-label=\"Clear\"\n onClick={(e) => {\n e.stopPropagation();\n onChange?.(multiple ? [] : \"\");\n }}\n >\n <CloseIcon size={16} />\n </button>\n )}\n\n {/* Custom Dropdown Menu */}\n {renderDropdown ? (\n renderDropdown({\n isOpen,\n selectId,\n searchable,\n searchTerm,\n searchInputRef,\n onSearchChange: handleSearchChange,\n filteredOptions,\n selectedValue,\n multiple,\n optionRefs,\n onOptionChange: handleCustomChange,\n onKeyDown: handleKeyDown,\n renderOption,\n maxHeight,\n })\n ) : (\n <DropdownMenu\n isOpen={isOpen}\n selectId={selectId}\n searchable={searchable}\n searchTerm={searchTerm}\n searchInputRef={searchInputRef}\n onSearchChange={handleSearchChange}\n filteredOptions={filteredOptions}\n selectedValue={selectedValue}\n multiple={multiple}\n optionRefs={optionRefs}\n onOptionChange={handleCustomChange}\n onKeyDown={handleKeyDown}\n renderOption={renderOption}\n maxHeight={maxHeight}\n />\n )}\n </>\n )}\n </div>\n\n {(error || helperText) && (\n <div className=\"sui-mt-2\">\n {error && (\n <p\n id={`${selectId}-error`}\n role=\"alert\"\n className=\"sui-text-12 sui-leading-[100%] sui-tracking-[-0.01em] sui-text-error\"\n >\n {error}\n </p>\n )}\n {!error && helperText && (\n <p\n id={`${selectId}-help`}\n className=\"sui-text-12 sui-leading-[100%] sui-tracking-[-0.01em] sui-text-inactive\"\n >\n {helperText}\n </p>\n )}\n </div>\n )}\n </div>\n );\n }\n);\nSelect.displayName = \"Select\";\n\nexport { Select, type SelectOption, type SelectProps, type SelectVariant };\n","import { useControllableState } from \"@/hooks/useControllableState\";\nimport { useMergeRefs } from \"@/hooks/useMergeRefs\";\nimport { cn } from \"@/lib/utils\";\nimport {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from \"react\";\n\ntype TabsContextValue = {\n value: string | undefined;\n setValue: (v: string) => void;\n idBase: string;\n};\n\nconst TabsContext = createContext<TabsContextValue | null>(null);\n\nfunction useTabsContext(): TabsContextValue {\n const ctx = useContext(TabsContext);\n if (!ctx) throw new Error(\"Tabs components must be used inside <Tabs>\");\n return ctx;\n}\n\ntype TabsProps = {\n className?: string;\n value?: string;\n defaultValue?: string;\n onValueChange?: (v: string) => void;\n children: React.ReactNode;\n};\n\n/**\n * Tabs - An accessible tabs system with animated indicator and keyboard navigation.\n *\n * Features:\n * - Compound component pattern (Tabs, TabsList, TabsTrigger, TabsContent)\n * - Animated indicator following active tab\n * - Roving tabindex for keyboard navigation (Arrow keys)\n * - Controlled or uncontrolled modes\n * - Responsive and mobile-friendly\n * - Full ARIA support for screen readers\n * - Dense mode for compact UIs\n *\n * Components:\n * - `Tabs`: Root container with state management\n * - `TabsList`: Container for tab triggers with animated indicator\n * - `TabsTrigger`: Individual tab button\n * - `TabsContent`: Content panel for each tab\n *\n * @example\n * ```tsx\n * // Basic usage\n * <Tabs defaultValue=\"tab1\">\n * <TabsList>\n * <TabsTrigger value=\"tab1\">Overview</TabsTrigger>\n * <TabsTrigger value=\"tab2\">Details</TabsTrigger>\n * <TabsTrigger value=\"tab3\">Settings</TabsTrigger>\n * </TabsList>\n * <TabsContent value=\"tab1\">\n * <h2>Overview Content</h2>\n * </TabsContent>\n * <TabsContent value=\"tab2\">\n * <h2>Details Content</h2>\n * </TabsContent>\n * <TabsContent value=\"tab3\">\n * <h2>Settings Content</h2>\n * </TabsContent>\n * </Tabs>\n *\n * // Controlled mode\n * <Tabs value={activeTab} onValueChange={setActiveTab}>\n * <TabsList>\n * <TabsTrigger value=\"profile\">Profile</TabsTrigger>\n * <TabsTrigger value=\"billing\">Billing</TabsTrigger>\n * </TabsList>\n * <TabsContent value=\"profile\">Profile form...</TabsContent>\n * <TabsContent value=\"billing\">Billing info...</TabsContent>\n * </Tabs>\n *\n * // Dense mode (compact UI)\n * <Tabs defaultValue=\"tab1\">\n * <TabsList dense>\n * <TabsTrigger value=\"tab1\">Tab 1</TabsTrigger>\n * <TabsTrigger value=\"tab2\">Tab 2</TabsTrigger>\n * </TabsList>\n * <TabsContent value=\"tab1\">Content 1</TabsContent>\n * <TabsContent value=\"tab2\">Content 2</TabsContent>\n * </Tabs>\n * ```\n */\nconst Tabs = ({\n className,\n value,\n defaultValue,\n onValueChange,\n children,\n}: TabsProps) => {\n const idBase = useId();\n const [current, setCurrent] = useControllableState<string>({\n value,\n defaultValue,\n onChange: onValueChange,\n });\n\n const contextValue = useMemo<TabsContextValue>(\n () => ({ value: current, setValue: (v) => setCurrent(v), idBase }),\n [current, idBase, setCurrent]\n );\n\n return (\n <TabsContext.Provider value={contextValue}>\n <div className={cn(\"sui-w-full\", className)}>{children}</div>\n </TabsContext.Provider>\n );\n};\n\ntype TabsListProps = React.HTMLAttributes<HTMLDivElement> & {\n /** When true, reduce horizontal padding for compact UIs */\n dense?: boolean;\n};\n\nconst TabsList = ({ className, dense = false, ...props }: TabsListProps) => {\n const { value, setValue } = useTabsContext();\n const listRef = useRef<HTMLDivElement | null>(null);\n const [indicator, setIndicator] = useState<{ left: number; width: number }>({\n left: 0,\n width: 0,\n });\n\n // Recompute indicator whenever selection or layout changes\n const recompute = useCallback(() => {\n const listEl = listRef.current;\n if (!listEl) return;\n const active = listEl.querySelector<HTMLButtonElement>(\n `button[role=\"tab\"][data-value=\"${CSS.escape(value ?? \"\")}\"]`\n );\n if (!active) {\n setIndicator((prev) => (prev.width === 0 ? prev : { left: 0, width: 0 }));\n return;\n }\n const listRect = listEl.getBoundingClientRect();\n const rect = active.getBoundingClientRect();\n setIndicator({ left: rect.left - listRect.left, width: rect.width });\n }, [value]);\n\n useEffect(() => {\n recompute();\n }, [recompute]);\n\n useEffect(() => {\n const listEl = listRef.current;\n if (!listEl) return;\n const ro = new ResizeObserver(recompute);\n ro.observe(listEl);\n const active = listEl.querySelector(\n `button[role=\"tab\"][data-value=\"${CSS.escape(value ?? \"\")}\"]`\n );\n if (active instanceof HTMLElement) ro.observe(active);\n window.addEventListener(\"resize\", recompute);\n return () => {\n ro.disconnect();\n window.removeEventListener(\"resize\", recompute);\n };\n }, [recompute, value]);\n\n // Auto-activate the first available tab if none is selected and consumer didn't pass defaults\n useEffect(() => {\n if (value) return;\n const listEl = listRef.current;\n if (!listEl) return;\n const first = listEl.querySelector<HTMLButtonElement>(\n \"button[role='tab']:not([disabled])\"\n );\n const v = first?.getAttribute(\"data-value\");\n if (v) setValue(v);\n }, [value, setValue]);\n\n // Keyboard navigation (roving tabindex)\n const onKeyDown = useCallback<React.KeyboardEventHandler<HTMLDivElement>>(\n (e) => {\n const listEl = listRef.current;\n if (!listEl) return;\n const triggers = Array.from(\n listEl.querySelectorAll<HTMLButtonElement>(\n \"button[role='tab']:not([disabled])\"\n )\n );\n if (triggers.length === 0) return;\n const currentIndex = triggers.findIndex(\n (el) => el.getAttribute(\"data-value\") === value\n );\n const focusAt = (idx: number) => {\n const clamped = (idx + triggers.length) % triggers.length;\n triggers[clamped]?.focus();\n triggers[clamped]?.click();\n };\n switch (e.key) {\n case \"ArrowRight\":\n e.preventDefault();\n focusAt((currentIndex + 1) % triggers.length);\n break;\n case \"ArrowLeft\":\n e.preventDefault();\n focusAt((currentIndex - 1 + triggers.length) % triggers.length);\n break;\n case \"Home\":\n e.preventDefault();\n focusAt(0);\n break;\n case \"End\":\n e.preventDefault();\n focusAt(triggers.length - 1);\n break;\n }\n },\n [value]\n );\n\n return (\n <div\n role=\"tablist\"\n ref={listRef}\n onKeyDown={onKeyDown}\n className={cn(\n // Mobile-first: tighter gaps and padding, grow at sm\n \"sui-relative sui-flex sui-gap-3 sui-border-b sui-border-stroke-level3 sui-px-1 sui-sm:gap-6 sui-sm:px-2\",\n dense ? \"sui-px-0\" : \"sui-px-2\",\n className\n )}\n tabIndex={0}\n {...props}\n >\n {/* Animated indicator */}\n <div\n aria-hidden\n className=\"sui-pointer-events-none sui-absolute sui-bottom-[-1px] sui-h-[2px] sui-bg-primary sui-transition-all sui-duration-300\"\n style={{ left: indicator.left, width: indicator.width }}\n />\n {props.children}\n </div>\n );\n};\n\ntype TabsTriggerProps = Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n \"onChange\"\n> & {\n value: string;\n /** Optional icon displayed to the left of the label */\n icon?: React.ReactNode;\n};\n\nconst TabsTrigger = forwardRef<HTMLButtonElement, TabsTriggerProps>(\n ({ className, value, icon, children, disabled, ...props }, ref) => {\n const { value: selected, setValue, idBase } = useTabsContext();\n const isSelected = selected === value;\n const internalRef = useRef<HTMLButtonElement | null>(null);\n const mergedRef = useMergeRefs(ref, internalRef);\n\n const ariaLabel = (props as Record<string, unknown>)[\"aria-label\"] as\n | string\n | undefined;\n const isIconOnly = !children; // treat any tab without textual children as icon-only\n\n useEffect(() => {\n if (isSelected) internalRef.current?.setAttribute(\"data-active\", \"true\");\n else internalRef.current?.removeAttribute(\"data-active\");\n }, [isSelected]);\n\n return (\n <button\n ref={mergedRef}\n type=\"button\"\n role=\"tab\"\n data-value={value}\n id={`${idBase}-tab-${value}`}\n aria-selected={isSelected}\n aria-controls={`${idBase}-panel-${value}`}\n tabIndex={isSelected ? 0 : -1}\n disabled={disabled}\n onClick={() => setValue(value)}\n className={cn(\n \"sui-relative sui-flex sui-items-center sui-gap-2\",\n \"sui-py-3\",\n // inactive colors and typography\n !isSelected && \"sui-text-[#777E90] sui-body-16\",\n // active colors and typography\n isSelected && \"sui-text-primary sui-body-16-medium\",\n // focus ring for accessibility\n \"focus:sui-outline-none focus-visible:sui-ring-2 focus-visible:sui-ring-primary sui-ring-offset-2\",\n disabled && \"sui-opacity-40 sui-cursor-not-allowed\",\n className\n )}\n aria-label={isIconOnly ? ariaLabel : undefined}\n title={isIconOnly ? ariaLabel ?? value : undefined}\n {...props}\n >\n {icon && (\n <span\n className={cn(\n \"sui-inline-flex sui-items-center sui-justify-center\",\n !children && \"sui-w-5 sui-h-5\"\n )}\n >\n {icon}\n </span>\n )}\n {children && <span>{children}</span>}\n </button>\n );\n }\n);\n\ntype TabsContentProps = React.HTMLAttributes<HTMLDivElement> & {\n value: string;\n /** Keep content mounted when inactive (hidden). Useful to preserve state. */\n forceMount?: boolean;\n};\n\nconst TabsContent = ({\n className,\n value,\n children,\n forceMount,\n ...props\n}: TabsContentProps) => {\n const { value: selected, idBase } = useTabsContext();\n const isSelected = selected === value;\n if (!forceMount && !isSelected) {\n return null;\n }\n return (\n <div\n role=\"tabpanel\"\n id={`${idBase}-panel-${value}`}\n aria-labelledby={`${idBase}-tab-${value}`}\n hidden={!isSelected}\n className={cn(\"sui-pt-4\", className)}\n {...props}\n >\n <div className={cn(isSelected && \"sui-animate-fade-in\")}>{children}</div>\n </div>\n );\n};\n\nTabs.displayName = \"Tabs\";\nTabsList.displayName = \"TabsList\";\nTabsContent.displayName = \"TabsContent\";\nTabsTrigger.displayName = \"TabsTrigger\";\n\nexport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n type TabsContentProps,\n type TabsListProps,\n type TabsProps,\n type TabsTriggerProps,\n};\n","import { Button } from \"@/components/Button\";\nimport { CloseIcon, ErrorIcon, InfoIcon, SuccessIcon, WarnIcon } from \"@/icons\";\nimport { cn } from \"@/lib/utils\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\n\ntype ToastStatus = \"success\" | \"info\" | \"warn\" | \"error\";\n\ninterface ToastAction {\n label: string;\n onClick: () => void;\n variant?: React.ComponentProps<typeof Button>[\"variant\"];\n}\n\ninterface ToastProps {\n status: ToastStatus;\n title: string;\n message?: string;\n className?: string;\n actions?: ToastAction[];\n onClose?: () => void;\n autoCloseMs?: number; // 0 disables auto-close\n showProgress?: boolean;\n /** Custom icon for this toast (overrides status icon) */\n customIcon?: React.ReactNode;\n /** Custom render function for the icon */\n renderIcon?: (status: ToastStatus) => React.ReactNode;\n /** Custom render function for the close button */\n renderCloseButton?: (props: { onClick: () => void }) => React.ReactNode;\n /** Custom render function for the progress bar */\n renderProgress?: (progress: number, status: ToastStatus) => React.ReactNode;\n /** Hide the close button */\n hideCloseButton?: boolean;\n}\n\nconst STATUS_STYLES: Record<ToastStatus, { bg: string; border: string }> = {\n success: { bg: \"sui-bg-[#DCFCE4]\", border: \"sui-border-[#48C1B5]\" },\n info: { bg: \"sui-bg-[#DAECFF]\", border: \"sui-border-[#9DC0EE]\" },\n warn: { bg: \"sui-bg-[#FFF3D3]\", border: \"sui-border-[#F7D9A4]\" },\n error: { bg: \"sui-bg-[#FDE3E5]\", border: \"sui-border-[#F4B0A1]\" },\n};\n\nconst STATUS_PROGRESS_COLOR: Record<ToastStatus, string> = {\n success: \"#48C1B5\",\n info: \"#9DC0EE\",\n warn: \"#F7D9A4\",\n error: \"#F4B0A1\",\n};\n\nconst STATUS_ICON: Record<ToastStatus, React.ElementType> = {\n success: SuccessIcon,\n info: InfoIcon,\n warn: WarnIcon,\n error: ErrorIcon,\n};\n\n/**\n * Toast - A status notification component with auto-dismiss and action buttons.\n *\n * Features:\n * - Multiple status types: success, info, warn, error\n * - Auto-dismiss with configurable timeout\n * - Visual progress bar showing remaining time\n * - Pauses on hover/focus for better UX\n * - Optional action buttons\n * - Manual close button\n * - ARIA live region for screen reader announcements\n * - Smooth animations\n * - Fully customizable icons, close button, and progress bar\n *\n * Customization:\n * - `customIcon`: Replace the default status icon\n * - `renderIcon`: Full control over icon rendering\n * - `renderCloseButton`: Custom close button\n * - `renderProgress`: Custom progress bar\n * - `hideCloseButton`: Hide the close button\n *\n * @example\n * ```tsx\n * // Basic success toast\n * <Toast\n * status=\"success\"\n * title=\"Success\"\n * message=\"Your changes have been saved\"\n * onClose={() => console.log('Toast closed')}\n * />\n *\n * // Custom icon\n * <Toast\n * status=\"info\"\n * title=\"New Feature\"\n * customIcon={<SparklesIcon />}\n * onClose={handleClose}\n * />\n *\n * // Custom close button\n * <Toast\n * status=\"warn\"\n * title=\"Warning\"\n * renderCloseButton={({ onClick }) => (\n * <button onClick={onClick} className=\"custom-close\">×</button>\n * )}\n * />\n *\n * // Custom progress bar\n * <Toast\n * status=\"success\"\n * title=\"Uploading...\"\n * renderProgress={(progress, status) => (\n * <div className=\"custom-progress\">\n * {Math.round(progress)}%\n * </div>\n * )}\n * />\n *\n * // Error toast with action\n * <Toast\n * status=\"error\"\n * title=\"Upload Failed\"\n * message=\"Unable to upload file. Please try again.\"\n * actions={[\n * { label: 'Retry', onClick: handleRetry, variant: 'default' },\n * { label: 'Dismiss', onClick: handleClose, variant: 'text' }\n * ]}\n * onClose={handleClose}\n * />\n * ```\n */\nconst Toast: React.FC<ToastProps> = ({\n status,\n title,\n message,\n className,\n actions,\n onClose,\n autoCloseMs = 5000,\n showProgress = true,\n customIcon,\n renderIcon,\n renderCloseButton,\n renderProgress,\n hideCloseButton = false,\n}) => {\n const [progress, setProgress] = useState(100);\n\n // Refs to hold state without causing re-renders\n const closeTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const animationFrameRef = useRef<number | null>(null);\n const remainingTimeRef = useRef<number>(autoCloseMs);\n const startTimeRef = useRef<number>(Date.now());\n const isPausedRef = useRef<boolean>(false);\n const containerRef = useRef<HTMLDivElement>(null);\n\n // The main callback to close the toast, memoized for stability\n const handleClose = useCallback(() => {\n onClose?.();\n }, [onClose]);\n\n // Use requestAnimationFrame for smooth progress animation\n const animateProgress = useCallback(\n (startTime: number) => {\n if (isPausedRef.current) return;\n\n const elapsed = Date.now() - startTime;\n const newRemaining = Math.max(0, remainingTimeRef.current - elapsed);\n const progressPct = Math.max(\n 0,\n Math.min(100, (newRemaining / autoCloseMs) * 100)\n );\n\n setProgress(progressPct);\n\n // Continue animation until progress is 0 or paused\n if (newRemaining > 0 && !isPausedRef.current) {\n animationFrameRef.current = requestAnimationFrame(() =>\n animateProgress(startTime)\n );\n }\n },\n [autoCloseMs]\n );\n\n const startTimer = useCallback(() => {\n if (!autoCloseMs || isPausedRef.current) return;\n\n startTimeRef.current = Date.now();\n\n // Set the final timeout to close the toast\n closeTimerRef.current = setTimeout(handleClose, remainingTimeRef.current);\n\n // Start the progress bar animation\n if (showProgress) {\n animationFrameRef.current = requestAnimationFrame(() =>\n animateProgress(startTimeRef.current)\n );\n }\n }, [autoCloseMs, showProgress, handleClose, animateProgress]);\n\n const pauseTimer = useCallback(() => {\n if (!autoCloseMs || isPausedRef.current) return;\n\n // Clear the main close timer\n if (closeTimerRef.current) {\n clearTimeout(closeTimerRef.current);\n closeTimerRef.current = null;\n }\n\n // Stop the animation loop\n if (animationFrameRef.current) {\n cancelAnimationFrame(animationFrameRef.current);\n animationFrameRef.current = null;\n }\n\n // Calculate and store the time remaining\n const elapsed = Date.now() - startTimeRef.current;\n remainingTimeRef.current = Math.max(0, remainingTimeRef.current - elapsed);\n\n isPausedRef.current = true;\n }, [autoCloseMs]);\n\n const resumeTimer = useCallback(() => {\n if (!autoCloseMs || !isPausedRef.current) return;\n\n // Set a new start time for the remaining duration\n startTimeRef.current = Date.now();\n\n isPausedRef.current = false;\n\n // Restart the timer and animation\n startTimer();\n }, [autoCloseMs, startTimer]);\n\n useEffect(() => {\n remainingTimeRef.current = autoCloseMs;\n setProgress(100);\n isPausedRef.current = false;\n\n if (autoCloseMs > 0) {\n startTimer();\n }\n\n // Cleanup function\n return () => {\n if (closeTimerRef.current) clearTimeout(closeTimerRef.current);\n if (animationFrameRef.current)\n cancelAnimationFrame(animationFrameRef.current);\n };\n }, [autoCloseMs, startTimer]);\n\n // Handlers for both mouse and keyboard focus\n const handlePause = useCallback(() => {\n pauseTimer();\n }, [pauseTimer]);\n\n const handleResume = useCallback(() => {\n resumeTimer();\n }, [resumeTimer]);\n\n // Handle focus events for accessibility\n const handleFocus = useCallback(\n (e: React.FocusEvent) => {\n // Only pause if focus is within the toast container\n if (containerRef.current?.contains(e.target as Node)) {\n handlePause();\n }\n },\n [handlePause]\n );\n\n const handleBlur = useCallback(\n (e: React.FocusEvent) => {\n // Only resume if focus is leaving the toast container entirely\n if (!containerRef.current?.contains(e.relatedTarget as Node)) {\n handleResume();\n }\n },\n [handleResume]\n );\n\n const Icon = STATUS_ICON[status];\n const styles = STATUS_STYLES[status];\n const progressColor = STATUS_PROGRESS_COLOR[status];\n\n // Determine which icon to render\n const iconNode = renderIcon ? (\n renderIcon(status)\n ) : customIcon ? (\n customIcon\n ) : (\n <Icon size={24} />\n );\n\n return (\n <div\n ref={containerRef}\n role=\"status\"\n className={cn(\n // Mobile-first spacing and layout; allow wrapping on narrow screens\n \"sui-relative sui-flex sui-flex-col sui-gap-3 sui-rounded-[12px] sui-border sui-overflow-hidden sui-p-3 sui-pr-10 sui-sm:flex-row sui-sm:items-start sui-sm:gap-4 sui-sm:p-5\",\n styles.bg,\n styles.border,\n className\n )}\n onMouseEnter={handlePause}\n onMouseLeave={handleResume}\n onFocus={handleFocus} // A11y: Pause when an element inside gets focus\n onBlur={handleBlur} // A11y: Resume when focus leaves the component\n >\n {iconNode}\n\n <div className=\"sui-flex sui-min-w-0 sui-flex-1 sui-flex-col sui-gap-1 sui-max-w-[366px]\">\n <p className=\"sui-font-medium sui-text-16 sui-text-text-default sui-truncate\">\n {title}\n </p>\n {message ? (\n <div className=\"sui-text-14 sui-text-text-secondary1 sui-leading-[150%] sui-max-h-32 sui-overflow-y-auto\">\n {message}\n </div>\n ) : null}\n </div>\n <div className=\"sui-ml-0 sui-flex sui-items-center sui-justify-center sui-gap-3 sui-sm:ml-2 sui-sm:self-center sui-sm:gap-4\">\n {Array.isArray(actions)\n ? actions.map((act, idx) => (\n <Button\n key={`${act.label}-${idx}`}\n size=\"md\"\n variant={act.variant ?? \"link\"}\n onClick={act.onClick}\n >\n {act.label}\n </Button>\n ))\n : null}\n </div>\n {showProgress && autoCloseMs > 0 ? (\n renderProgress ? (\n renderProgress(progress, status)\n ) : (\n <div className=\"sui-absolute sui-bottom-0 sui-left-0 sui-right-0 sui-h-1 sui-overflow-hidden sui-rounded-b-[12px]\">\n <div\n data-testid=\"toast-progress\"\n className=\"sui-h-full\"\n style={{\n width: `${progress}%`,\n backgroundColor: progressColor,\n transition: \"width 100ms linear\",\n }}\n />\n </div>\n )\n ) : null}\n {!hideCloseButton &&\n (renderCloseButton ? (\n renderCloseButton({ onClick: handleClose })\n ) : (\n <button\n type=\"button\"\n aria-label=\"Close\"\n onClick={handleClose}\n className=\"sui-absolute sui-right-2 sui-top-5 sui-inline-flex sui-h-8 sui-w-8 sui-items-center sui-justify-center sui-rounded-full hover:sui-bg-white/60 focus:sui-outline-none focus-visible:sui-ring-2 focus-visible:sui-ring-stroke-brand\"\n >\n <CloseIcon size={24} className=\"sui-text-stroke-brand\" />\n </button>\n ))}\n </div>\n );\n};\nToast.displayName = \"Toast\";\n\nexport { Toast, type ToastAction, type ToastProps, type ToastStatus };\n","import { cn } from \"@/lib/utils\";\nimport { Children } from \"react\";\n\ntype ToastPosition =\n | \"top-left\"\n | \"top-right\"\n | \"top-center\"\n | \"bottom-left\"\n | \"bottom-right\"\n | \"bottom-center\";\n\ninterface ToastContainerProps {\n position?: ToastPosition;\n className?: string;\n children?: React.ReactNode;\n width?: number | string;\n}\n\nconst POSITION_CLASS: Record<ToastPosition, string> = {\n \"top-left\": \"sui-top-4 sui-left-4\",\n \"top-right\": \"sui-top-4 sui-right-4\",\n \"top-center\": \"sui-top-4 sui-left-1/2 -sui-translate-x-1/2\",\n \"bottom-left\": \"sui-bottom-4 sui-left-4\",\n \"bottom-right\": \"sui-bottom-4 sui-right-4\",\n \"bottom-center\": \"sui-bottom-4 sui-left-1/2 -sui-translate-x-1/2\",\n};\n\n/**\n * - Fixed-position portal region to stack toasts at screen edges.\n * - Click-through outer wrapper with pointer-enabled children.\n */\nconst ToastContainer: React.FC<ToastContainerProps> = ({\n position = \"top-right\",\n className,\n children,\n width = \"420px\",\n}) => {\n return (\n <div\n className={cn(\n \"sui-pointer-events-none sui-fixed sui-z-[9999]\",\n POSITION_CLASS[position],\n className\n )}\n role=\"region\"\n aria-live=\"polite\"\n >\n <div\n className=\"sui-flex sui-max-w-[95vw] sui-flex-col sui-gap-3\"\n style={{ width: typeof width === \"number\" ? `${width}px` : width }}\n >\n {/* Allow children to be clickable */}\n {Children.map(children, (child) => (\n <div className=\"sui-pointer-events-auto\">{child}</div>\n ))}\n </div>\n </div>\n );\n};\nToastContainer.displayName = \"ToastContainer\";\n\nexport { ToastContainer, type ToastContainerProps, type ToastPosition };\n","\"use client\";\n\nimport { cn } from \"@/lib/utils\";\nimport {\n arrow as arrowMw,\n autoUpdate,\n flip,\n offset,\n shift,\n useFloating,\n type Placement,\n} from \"@floating-ui/react\";\nimport {\n cloneElement,\n isValidElement,\n useEffect,\n useId,\n useRef,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\n\ntype TooltipSide = \"top\" | \"bottom\" | \"left\" | \"right\" | \"auto\";\ntype TooltipAlign = \"center\" | \"start\" | \"end\";\n\ntype TooltipProps = {\n children?: React.ReactElement;\n content: React.ReactNode;\n className?: string;\n containerClassName?: string;\n side?: TooltipSide;\n align?: TooltipAlign;\n open?: boolean;\n defaultOpen?: boolean;\n disabled?: boolean;\n delayMs?: number;\n id?: string;\n withBackdrop?: boolean;\n portal?: boolean;\n /** Show or hide the arrow */\n showArrow?: boolean;\n /** Custom arrow element */\n renderArrow?: () => React.ReactNode;\n /** Custom class for the arrow */\n arrowClassName?: string;\n};\n\n// Arrow base class outside for perf\nconst ARROW_BASE =\n \"sui-absolute sui-w-2 sui-h-2 sui-bg-black sui-pointer-events-none\"; // triangle via clip-path, rotation applied inline\n\n/**\n * Tooltip - A lightweight, accessible tooltip with smart positioning.\n *\n * Features:\n * - Smart positioning using Floating UI (auto-adjusts to viewport)\n * - Multiple placement options (top, bottom, left, right, auto)\n * - Alignment control (center, start, end)\n * - Controlled or uncontrolled modes\n * - Configurable delay before showing\n * - Optional backdrop overlay\n * - Portal rendering for z-index management\n * - Customizable arrow indicator\n * - ARIA compliant (aria-describedby)\n * - Mouse and keyboard support\n *\n * Customization:\n * - `showArrow`: Show or hide the arrow\n * - `renderArrow`: Custom arrow rendering\n * - `arrowClassName`: Custom arrow styling\n *\n * @example\n * ```tsx\n * // Basic usage\n * <Tooltip content=\"This is a helpful tooltip\">\n * <Button>Hover me</Button>\n * </Tooltip>\n *\n * // With custom positioning\n * <Tooltip\n * content=\"Positioned on the right side\"\n * side=\"right\"\n * align=\"start\"\n * >\n * <span>Hover for info</span>\n * </Tooltip>\n *\n * // Without arrow\n * <Tooltip\n * content=\"No arrow tooltip\"\n * showArrow={false}\n * >\n * <Button>Hover me</Button>\n * </Tooltip>\n *\n * // Custom arrow styling\n * <Tooltip\n * content=\"Custom arrow\"\n * arrowClassName=\"sui-bg-blue-500\"\n * >\n * <Button>Hover me</Button>\n * </Tooltip>\n *\n * // Custom arrow render\n * <Tooltip\n * content=\"Custom arrow element\"\n * renderArrow={() => (\n * <div className=\"custom-arrow\">▼</div>\n * )}\n * >\n * <Button>Hover me</Button>\n * </Tooltip>\n *\n * // With backdrop and portal\n * <Tooltip\n * content=\"Important information\"\n * withBackdrop\n * portal\n * delayMs={300}\n * >\n * <Button variant=\"outline\">Show info</Button>\n * </Tooltip>\n * ```\n */\nconst Tooltip: React.FC<TooltipProps> = ({\n children,\n content,\n className,\n containerClassName,\n side = \"auto\",\n align = \"center\",\n open,\n defaultOpen = false,\n disabled = false,\n delayMs = 150,\n id,\n withBackdrop = false,\n portal = false,\n showArrow = true,\n renderArrow,\n arrowClassName,\n}) => {\n const autoId = useId();\n const tooltipId = id ?? autoId;\n const [isOpen, setIsOpen] = useState<boolean>(defaultOpen);\n const openControlled = typeof open === \"boolean\" ? open : isOpen;\n const timerRef = useRef<number | null>(null);\n const arrowRef = useRef<HTMLSpanElement | null>(null);\n\n useEffect(() => {\n return () => {\n if (timerRef.current) window.clearTimeout(timerRef.current);\n };\n }, []);\n\n const show = () => {\n if (disabled || typeof open === \"boolean\") return;\n if (timerRef.current) window.clearTimeout(timerRef.current);\n timerRef.current = window.setTimeout(() => setIsOpen(true), delayMs);\n };\n\n const hide = () => {\n if (disabled || typeof open === \"boolean\") return;\n if (timerRef.current) window.clearTimeout(timerRef.current);\n setIsOpen(false);\n };\n\n // kept for potential non-floating fallback; currently unused after Floating UI adoption\n\n // Floating UI for robust positioning (flip handles auto)\n const basePlacement = (side === \"auto\" ? \"top\" : side) as Exclude<\n TooltipSide,\n \"auto\"\n >;\n const placement: Placement = (\n align === \"center\" ? basePlacement : `${basePlacement}-${align}`\n ) as Placement;\n\n const {\n refs,\n floatingStyles,\n middlewareData,\n placement: resolvedPlacement,\n } = useFloating({\n placement,\n whileElementsMounted: autoUpdate,\n strategy: portal ? \"fixed\" : \"absolute\",\n middleware: [\n offset(16),\n flip(),\n shift({ padding: 24 }),\n arrowMw({ element: arrowRef, padding: 12 }),\n ],\n });\n\n // We attach reference to the container element to avoid cloning child's ref types\n const setReference: (node: HTMLElement | null) => void = refs.setReference;\n const setFloating: (node: HTMLElement | null) => void = refs.setFloating;\n\n // Clone child to add aria-describedby\n type ChildProps = React.HTMLAttributes<HTMLElement> & React.AriaAttributes;\n const child =\n children && isValidElement(children)\n ? cloneElement<ChildProps>(children as React.ReactElement<ChildProps>, {\n [\"aria-describedby\"]: openControlled ? tooltipId : undefined,\n })\n : children;\n\n const floatingNode = (\n <div\n ref={setFloating}\n style={floatingStyles}\n className=\"sui-z-50 sui-pointer-events-none\"\n >\n {withBackdrop && (\n <span\n aria-hidden=\"true\"\n className={cn(\n \"sui-z-40 sui-pointer-events-none sui-rounded-lg sui-animate-fade-in\",\n \"-sui-inset-1 sui-backdrop-blur-sm sui-bg-black/10\"\n )}\n />\n )}\n <div\n role=\"tooltip\"\n id={tooltipId}\n className={cn(\n \"sui-z-50 sui-bg-black sui-text-white sui-text-12 sui-px-3 sui-py-2 sui-rounded-md sui-shadow-md sui-animate-fade-in sui-pointer-events-auto\",\n className\n )}\n >\n {content}\n {showArrow &&\n (renderArrow ? (\n renderArrow()\n ) : (\n <span\n ref={arrowRef}\n className={cn(ARROW_BASE, arrowClassName)}\n style={\n {\n left:\n middlewareData.arrow?.x != null\n ? `${middlewareData.arrow.x}px`\n : \"\",\n top:\n middlewareData.arrow?.y != null\n ? `${middlewareData.arrow.y}px`\n : \"\",\n [{\n top: \"bottom\",\n bottom: \"top\",\n left: \"right\",\n right: \"left\",\n }[\n resolvedPlacement.split(\"-\")[0] as\n | \"top\"\n | \"bottom\"\n | \"left\"\n | \"right\"\n ]]: \"-8px\",\n clipPath: \"polygon(50% 0, 0 100%, 100% 100%)\",\n transform: {\n top: \"rotate(180deg)\",\n bottom: \"rotate(0deg)\",\n left: \"rotate(90deg)\",\n right: \"rotate(-90deg)\",\n }[\n resolvedPlacement.split(\"-\")[0] as\n | \"top\"\n | \"bottom\"\n | \"left\"\n | \"right\"\n ],\n } as React.CSSProperties\n }\n aria-hidden=\"true\"\n />\n ))}\n </div>\n </div>\n );\n\n return (\n <span\n ref={(node) => {\n setReference(node);\n }}\n className={cn(\n \"sui-inline-flex sui-relative sui-align-middle\",\n disabled && \"sui-cursor-not-allowed\",\n containerClassName\n )}\n onMouseEnter={show}\n onMouseLeave={hide}\n onFocus={show}\n onBlur={hide}\n >\n {child}\n {openControlled &&\n !disabled &&\n (portal ? createPortal(floatingNode, document.body) : floatingNode)}\n </span>\n );\n};\nTooltip.displayName = \"Tooltip\";\n\nexport { Tooltip, type TooltipAlign, type TooltipProps, type TooltipSide };\n","import { GridIcon, ListIcon } from \"@/icons\";\nimport { cn } from \"@/lib/utils\";\nimport { useRef } from \"react\";\n\ntype ViewMode = \"grid\" | \"list\";\n\ninterface ViewToggleProps {\n value: ViewMode;\n onChange?: (value: ViewMode) => void;\n className?: string;\n \"aria-label\"?: string;\n /** Custom grid icon */\n gridIcon?: React.ReactNode;\n /** Custom list icon */\n listIcon?: React.ReactNode;\n /** Accessible label for grid option */\n gridLabel?: string;\n /** Accessible label for list option */\n listLabel?: string;\n /** Custom render function for individual options */\n renderOption?: (\n mode: ViewMode,\n props: {\n isActive: boolean;\n onClick: () => void;\n onKeyDown: (e: React.KeyboardEvent<HTMLDivElement>) => void;\n ref: React.RefObject<HTMLDivElement>;\n ariaLabel: string;\n }\n ) => React.ReactNode;\n}\n\n/**\n * ViewToggle - A compact switch for toggling between grid and list views.\n *\n * Features:\n * - Two-option toggle (grid/list)\n * - Keyboard navigation (Arrow keys)\n * - Fully accessible radio group\n * - Animated selection indicator\n * - Customizable icons and rendering\n *\n * Customization:\n * - `gridIcon`/`listIcon`: Replace default icons\n * - `gridLabel`/`listLabel`: Custom ARIA labels\n * - `renderOption`: Complete option customization\n *\n * @example\n * ```tsx\n * // Basic usage\n * <ViewToggle value={view} onChange={setView} />\n *\n * // Custom icons\n * <ViewToggle\n * value={view}\n * onChange={setView}\n * gridIcon={<CustomGridIcon />}\n * listIcon={<CustomListIcon />}\n * />\n *\n * // Custom labels\n * <ViewToggle\n * value={view}\n * onChange={setView}\n * gridLabel=\"Card view\"\n * listLabel=\"Table view\"\n * />\n *\n * // Fully custom rendering\n * <ViewToggle\n * value={view}\n * onChange={setView}\n * renderOption={(mode, { isActive, onClick, ariaLabel }) => (\n * <button\n * onClick={onClick}\n * aria-label={ariaLabel}\n * className={isActive ? 'active' : ''}\n * >\n * {mode === 'grid' ? '⊞' : '☰'} {mode}\n * </button>\n * )}\n * />\n * ```\n */\nconst ViewToggle: React.FC<ViewToggleProps> = ({\n value,\n onChange,\n className,\n \"aria-label\": ariaLabel = \"Toggle view\",\n gridIcon,\n listIcon,\n gridLabel = \"Grid view\",\n listLabel = \"List view\",\n renderOption,\n}) => {\n const gridRef = useRef<HTMLDivElement>(null);\n const listRef = useRef<HTMLDivElement>(null);\n\n const setValue = (next: ViewMode) => {\n if (next === value) return;\n onChange?.(next);\n };\n\n const focusOption = (next: ViewMode) => {\n if (next === \"grid\") gridRef.current?.focus();\n else listRef.current?.focus();\n };\n\n const onKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === \"ArrowLeft\" || e.key === \"ArrowUp\") {\n e.preventDefault();\n setValue(\"grid\");\n focusOption(\"grid\");\n } else if (e.key === \"ArrowRight\" || e.key === \"ArrowDown\") {\n e.preventDefault();\n setValue(\"list\");\n focusOption(\"list\");\n }\n };\n\n const isGrid = value === \"grid\";\n\n // If custom render provided, use it for both options\n if (renderOption) {\n return (\n <div\n role=\"radiogroup\"\n aria-label={ariaLabel}\n className={cn(\n \"sui-relative sui-inline-flex sui-h-12 sui-items-center sui-justify-between sui-bg-secondary-2 sui-rounded-sm sui-px-4 sui-py-3\",\n \"sui-gap-2\",\n className\n )}\n >\n {/* selection backdrop */}\n <div\n aria-hidden\n className={cn(\n \"sui-absolute sui-top-1/2 sui-h-6 sui-w-6 sui--translate-y-1/2 sui-rounded-sm\",\n \"sui-bg-secondary-2\",\n \"sui-transition-all sui-duration-200 sui-ease-in-out\",\n isGrid ? \"sui-left-4\" : \"sui-left-12\"\n )}\n />\n {renderOption(\"grid\", {\n isActive: isGrid,\n onClick: () => setValue(\"grid\"),\n onKeyDown: (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n setValue(\"grid\");\n return;\n }\n onKeyDown(e);\n },\n ref: gridRef,\n ariaLabel: gridLabel,\n })}\n {renderOption(\"list\", {\n isActive: !isGrid,\n onClick: () => setValue(\"list\"),\n onKeyDown: (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n setValue(\"list\");\n return;\n }\n onKeyDown(e);\n },\n ref: listRef,\n ariaLabel: listLabel,\n })}\n </div>\n );\n }\n\n // Default rendering with custom icon support\n return (\n <div\n role=\"radiogroup\"\n aria-label={ariaLabel}\n className={cn(\n \"sui-relative sui-inline-flex sui-h-12 sui-items-center sui-justify-between sui-bg-secondary-2 sui-rounded-sm sui-px-4 sui-py-3\",\n \"sui-gap-2\",\n className\n )}\n >\n {/* selection backdrop */}\n <div\n aria-hidden\n className={cn(\n \"sui-absolute sui-top-1/2 sui-h-6 sui-w-6 sui--translate-y-1/2 sui-rounded-sm\",\n \"sui-bg-secondary-2\",\n \"sui-transition-all sui-duration-200 sui-ease-in-out\",\n isGrid ? \"sui-left-4\" : \"sui-left-12\"\n )}\n />\n\n {/* grid option */}\n <div\n ref={gridRef}\n role=\"radio\"\n aria-checked={isGrid}\n tabIndex={isGrid ? 0 : -1}\n onClick={() => setValue(\"grid\")}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n setValue(\"grid\");\n return;\n }\n onKeyDown(e);\n }}\n className={cn(\n \"sui-relative sui-z-[1] sui-inline-flex sui-items-center sui-justify-center sui-h-6 sui-w-6 sui-rounded-sm sui-cursor-pointer\",\n \"focus:sui-outline-none focus-visible:sui-ring-2 focus-visible:sui-ring-stroke-brand\",\n isGrid ? \"sui-text-icon-brand\" : \"sui-text-icon-grayLight\"\n )}\n aria-label={gridLabel}\n >\n {gridIcon ? (\n gridIcon\n ) : (\n <GridIcon\n className={cn(isGrid ? \"sui-text-primary\" : \"sui-text-disabled\")}\n />\n )}\n </div>\n\n {/* list option */}\n <div\n ref={listRef}\n role=\"radio\"\n aria-checked={!isGrid}\n tabIndex={!isGrid ? 0 : -1}\n onClick={() => setValue(\"list\")}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n setValue(\"list\");\n return;\n }\n onKeyDown(e);\n }}\n className={cn(\n \"sui-relative sui-z-[1] sui-inline-flex sui-items-center sui-justify-center sui-h-6 sui-w-6 sui-rounded-sm sui-cursor-pointer\",\n \"focus:sui-outline-none focus-visible:sui-ring-2 focus-visible:sui-ring-stroke-brand\",\n !isGrid ? \"sui-text-icon-brand\" : \"sui-text-icon-grayLight\"\n )}\n aria-label={listLabel}\n >\n {listIcon ? (\n listIcon\n ) : (\n <ListIcon\n className={cn(!isGrid ? \"sui-text-primary\" : \"sui-text-disabled\")}\n />\n )}\n </div>\n </div>\n );\n};\nViewToggle.displayName = \"ViewToggle\";\n\nexport { ViewToggle, type ViewMode, type ViewToggleProps };\n","import { cn } from \"@/lib/utils\";\nimport { Children, cloneElement } from \"react\";\n\ninterface ScalablyUIProviderProps {\n children: React.ReactNode;\n className?: string;\n /**\n * When true, merges the scope class onto the single child instead of adding an extra wrapper div.\n */\n asChild?: boolean;\n}\n\n/**\n * ScalablyUIProvider\n *\n * Adds the required `sui-scope` wrapper so prefixed Tailwind styles apply.\n *\n * Usage:\n * <ScalablyUIProvider>\n * <App />\n * </ScalablyUIProvider>\n *\n * Or to avoid an extra DOM node:\n * <ScalablyUIProvider asChild>\n * <main />\n * </ScalablyUIProvider>\n */\nconst ScalablyUIProvider: React.FC<ScalablyUIProviderProps> = ({\n children,\n className,\n asChild = false,\n}: ScalablyUIProviderProps) => {\n if (asChild) {\n const child = Children.only(children) as React.ReactElement<{\n className?: string;\n }>;\n return cloneElement(child, {\n className: cn(\"sui-scope\", child.props?.className, className),\n });\n }\n\n return <div className={cn(\"sui-scope\", className)}>{children}</div>;\n};\nScalablyUIProvider.displayName = \"ScalablyUIProvider\";\n\nexport { ScalablyUIProvider, type ScalablyUIProviderProps };\n","type FieldErrorLike = { message?: string } | undefined | null;\n\nconst fieldErrorToProps = (\n error: FieldErrorLike\n): {\n error?: string;\n} => {\n if (!error || !error.message) return {};\n return { error: String(error.message) };\n};\n\nconst zodErrorsToSummary = (\n errors: Record<string, FieldErrorLike>\n): {\n id: string;\n message: string;\n}[] => {\n return Object.entries(errors)\n .filter(([, err]) => !!err && !!err?.message)\n .map(([path, err]) => ({ id: path, message: String(err?.message) }));\n};\n\nexport { fieldErrorToProps, zodErrorsToSummary, type FieldErrorLike };\n"]}