@scalably/ui 0.2.2 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +72 -20
- package/dist/ellipse-1-KLKF5JLX.png +0 -0
- package/dist/ellipse-2-S4X56YEC.png +0 -0
- package/dist/group-avatar-SDBXEZTD.svg +14 -0
- package/dist/image-placeholder-XP67WFED.svg +5 -0
- package/dist/index.d.cts +593 -17
- package/dist/index.d.ts +593 -17
- package/dist/index.esm.js +3 -3
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/multiple-line-PVJRKNX7.svg +48 -0
- package/dist/profile-avatar-6OK7NBEZ.svg +5 -0
- package/dist/radial-gradient-bg-MNKFH462.png +0 -0
- package/dist/scalably-app-OLHCIWQX.png +0 -0
- package/dist/scalably-app-S22I6VRA.svg +23 -0
- package/dist/scalably-campaign-5AY7VBOH.png +0 -0
- package/dist/scalably-campaign-RDHRQF3F.svg +31 -0
- package/dist/scalably-icon-4F2BCRV7.png +0 -0
- package/dist/scalably-icon-CSNKYSCD.svg +8 -0
- package/dist/scalably-icon-big-ACP74XKY.png +0 -0
- package/dist/scalably-membership-E4EHTRKR.png +0 -0
- package/dist/scalably-membership-YGZ7UT3R.svg +33 -0
- package/dist/styles.css +1 -1
- package/package.json +27 -19
package/dist/index.js.map
CHANGED
|
@@ -1 +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/CaptureIcon.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/SettingsIcon.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/VideoThumbnailModal.tsx","../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/lib/styles-inline.ts","../src/providers/ScalablyUIProvider.tsx","../src/helpers/form.ts","../src/icons/company/DiscordIcon.tsx","../src/icons/company/FacebookIcon.tsx","../src/icons/company/GmailIcon.tsx","../src/icons/company/InstagramIcon.tsx","../src/icons/company/KakaoTalkIcon.tsx","../src/icons/company/LineIcon.tsx","../src/icons/company/LinkedInIcon.tsx","../src/icons/company/MessengerIcon.tsx","../src/icons/company/RedditIcon.tsx","../src/icons/company/SignalIcon.tsx","../src/icons/company/SlackIcon.tsx","../src/icons/company/TelegramIcon.tsx","../src/icons/company/TiktokIcon.tsx","../src/icons/company/TwitchIcon.tsx","../src/icons/company/WhatsAppIcon.tsx","../src/icons/company/XIcon.tsx","../src/icons/company/YoutubeIcon.tsx"],"names":["r","e","t","f","n","o","clsx","clsx_default","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","getProportionalStrokeWidth","baseStrokeWidth","strokeWidth","useScrollThreshold","showAfter","throttleMs","isPastThreshold","setIsPastThreshold","useState","useEffect","threshold","recompute","throttledRecompute","CalendarIcon","memo","forwardRef","props","ref","calculatedStrokeWidth","jsxs","jsx","CaptureIcon","CheckIcon","CloseIcon","DropdownIcon","DropUpIcon","ErrorIcon","FileIcon","FileUploadIcon","GridIcon","ImageIcon","ImageUploadIcon","IndeterminateIcon","InfoIcon","ListIcon","MinusIcon","MultipleSelectionIcon","PlusIcon","SearchIcon","SettingsIcon","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","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","onKeyDown","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","VideoThumbnailModal","isOpen","onClose","videoSrc","onThumbnailCapture","onConfirm","title","captureButtonText","thumbnailTitle","uploadTitle","uploadSubtitle","cancelButtonText","saveButtonText","changeThumbnailText","videoRef","thumbnailDataUrl","setThumbnailDataUrl","isCapturedFromVideo","setIsCapturedFromVideo","capturedTime","setCapturedTime","actualVideoDuration","setActualVideoDuration","isHovering","setIsHovering","onLoaded","onTime","captureThumbnail","canvas","dataUrl","resolve","blob","handleThumbnailUpload","reader","seconds","mins","secs","handleConfirm","handleClose","input","FileUpload","files","fileUploadVariants","controlledFiles","onFilesChange","onUploadSuccess","onUploadError","onFileRemove","maxFiles","multiple","iconType","uploadIcon","successIcon","errorIcon","ariaDescribedBy","messages","renderSubtitle","onValidateFile","enableVideoThumbnail","uploadId","dragOver","setDragOver","internalFiles","setInternalFiles","inlineError","setInlineError","hasInteractiveChildren","selectedVideoId","setSelectedVideoId","setVideoSrc","isThumbModalOpen","setIsThumbModalOpen","currentVariant","validateFile","basicError","generatePreview","handleFiles","selectedFiles","fileArray","newFiles","hadError","existingValidCount","allowed","extra","allowedFiles","validationError","preview","fileUploadFile","objectUrl","updatedFiles","successful","handleDragOver","handleDragLeave","handleDrop","handleFileRemove","fileId","handlePreviewError","updated","getAcceptedTypesText","getMaxSizeText","handleThumbnailCapture","handleThumbnailConfirm","prev","closeThumbModal","subtitleNode","fileUpload","Form","onSubmit","noValidate","handleSubmit","form","firstInvalid","FormErrorSummary","errors","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","setIsOpen","searchTerm","setSearchTerm","optionRefs","searchInputRef","filteredOptions","option","selectedValue","selectedOption","handleCustomChange","newValue","currentValues","newValues","handleSearchChange","newSearchTerm","openDropdown","closeDropdown","currentIndex","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","autoCloseMs","showProgress","customIcon","renderCloseButton","renderProgress","hideCloseButton","progress","setProgress","closeTimerRef","animationFrameRef","remainingTimeRef","startTimeRef","isPausedRef","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","SCALABLY_UI_STYLES","ScalablyUIProvider","asChild","injectStyles","styleEl","fieldErrorToProps","zodErrorsToSummary","DiscordIcon","FacebookIcon","GmailIcon","InstagramIcon","KakaoTalkIcon","LineIcon","LinkedInIcon","MessengerIcon","RedditIcon","SignalIcon","SlackIcon","TelegramIcon","TiktokIcon","TwitchIcon","WhatsAppIcon","XIcon","YoutubeIcon"],"mappings":"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","file":"index.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 clsx from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Type for class values accepted by clsx\n */\ntype ClassValue =\n | ClassArray\n | ClassDictionary\n | string\n | number\n | bigint\n | null\n | boolean\n | undefined;\n\ntype ClassDictionary = Record<string, unknown>;\ntype ClassArray = ClassValue[];\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\n/**\n * Calculates proportional stroke width for SVG icons\n * Ensures stroke width scales appropriately with icon size\n *\n * @param size - Icon size in pixels\n * @param baseStrokeWidth - Base stroke width for 24px icon (default: 1.5)\n * @returns Proportional stroke width\n *\n * @example\n * ```tsx\n * const strokeWidth = getProportionalStrokeWidth(16); // Returns ~1.0 for 16px icon\n * const strokeWidth = getProportionalStrokeWidth(32); // Returns ~2.0 for 32px icon\n * ```\n */\nexport function getProportionalStrokeWidth(\n size: number,\n baseStrokeWidth: number = 1.5\n): number {\n // Calculate proportional stroke width based on 24px base size\n const scale = size / 24;\n const strokeWidth = baseStrokeWidth * scale;\n\n // Ensure minimum stroke width of 0.5 and maximum of 4\n return Math.max(0.5, Math.min(4, strokeWidth));\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, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\n/**\n * Props for the CalendarIcon component\n */\ninterface CalendarIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n}\n\n/**\n * Calendar icon component - displays a calendar with date indicators.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { CalendarIcon } from '@scalably/ui';\n *\n * <CalendarIcon size={32} className=\"sui-text-primary\" />\n * ```\n */\n\nconst CalendarIcon = memo(\n forwardRef<SVGSVGElement, CalendarIconProps>(\n ({ size = 24, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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={calculatedStrokeWidth}\n strokeMiterlimit={10}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M16 2V5\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeMiterlimit={10}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M3.5 9.08997H20.5\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\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={calculatedStrokeWidth}\n strokeMiterlimit={10}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M15.6947 13.7H15.7037\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M15.6947 16.7H15.7037\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M11.9955 13.7H12.0045\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M11.9955 16.7H12.0045\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M8.29431 13.7H8.30329\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M8.29431 16.7H8.30329\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\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\n/**\n * Props for the CaptureIcon component\n */\ninterface CaptureIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * Capture icon component - displays a camera icon with a capture button.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { CaptureIcon } from '@scalably/ui';\n *\n * <CaptureIcon size={24} className=\"sui-text-primary\" />\n * ```\n */\n\nconst CaptureIcon = memo(\n forwardRef<SVGSVGElement, CaptureIconProps>(\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 fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M1.55469 16.6523V21.4046C1.55469 21.7363 1.68625 22.0545 1.92087 22.2891C2.15549 22.5237 2.47365 22.6553 2.80531 22.6553H7.55769C7.83383 22.6553 8.05794 22.4312 8.05794 22.155C8.05794 21.8789 7.83383 21.6548 7.55769 21.6548H2.80531C2.73878 21.6548 2.67525 21.6283 2.62822 21.5817C2.5817 21.5347 2.55519 21.4712 2.55519 21.4046V16.6523C2.55519 16.3761 2.33108 16.152 2.05494 16.152C1.7788 16.152 1.55469 16.3761 1.55469 16.6523ZM16.5622 22.6553H21.3146C21.6462 22.6553 21.9644 22.5237 22.199 22.2891C22.4336 22.0545 22.5652 21.7363 22.5652 21.4046V16.6523C22.5652 16.3761 22.3411 16.152 22.0649 16.152C21.7888 16.152 21.5647 16.3761 21.5647 16.6523V21.4046C21.5647 21.4712 21.5382 21.5347 21.4917 21.5817C21.4446 21.6283 21.3811 21.6548 21.3146 21.6548H16.5622C16.286 21.6548 16.0619 21.8789 16.0619 22.155C16.0619 22.4312 16.286 22.6553 16.5622 22.6553ZM22.5652 7.64778V2.8954C22.5652 2.56373 22.4336 2.24557 22.199 2.01096C21.9644 1.77634 21.6462 1.64478 21.3146 1.64478H16.5622C16.286 1.64478 16.0619 1.86889 16.0619 2.14503C16.0619 2.42116 16.286 2.64528 16.5622 2.64528H21.3146C21.3811 2.64528 21.4446 2.67179 21.4917 2.71831C21.5382 2.76533 21.5647 2.82887 21.5647 2.8954V7.64778C21.5647 7.92391 21.7888 8.14803 22.0649 8.14803C22.3411 8.14803 22.5652 7.92391 22.5652 7.64778ZM7.55769 1.64478H2.80531C2.47365 1.64478 2.15549 1.77634 1.92087 2.01096C1.68625 2.24557 1.55469 2.56373 1.55469 2.8954V7.64778C1.55469 7.92391 1.7788 8.14803 2.05494 8.14803C2.33108 8.14803 2.55519 7.92391 2.55519 7.64778V2.8954C2.55519 2.82887 2.5817 2.76533 2.62822 2.71831C2.67525 2.67179 2.73878 2.64528 2.80531 2.64528H7.55769C7.83383 2.64528 8.05794 2.42116 8.05794 2.14503C8.05794 1.86889 7.83383 1.64478 7.55769 1.64478Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M17.3306 9.14858H15.8143C15.7308 9.14858 15.6527 9.10655 15.6062 9.03702L14.7178 7.70435C14.4862 7.35668 14.0955 7.14758 13.6773 7.14758H10.4787C10.0605 7.14758 9.66975 7.35668 9.43813 7.70435L8.54969 9.03702C8.50317 9.10655 8.42513 9.14858 8.34159 9.14858H6.82533C6.49367 9.14858 6.1755 9.28015 5.94089 9.51476C5.70627 9.74938 5.57471 10.0675 5.57471 10.3992V15.902C5.57471 16.5928 6.13449 17.1526 6.82533 17.1526H17.3306C18.0214 17.1526 18.5812 16.5928 18.5812 15.902V10.3992C18.5812 10.0675 18.4496 9.74938 18.215 9.51476C17.9804 9.28015 17.6622 9.14858 17.3306 9.14858ZM12.078 10.1491C10.6973 10.1491 9.57671 11.2696 9.57671 12.6503C9.57671 14.031 10.6973 15.1516 12.078 15.1516C13.4586 15.1516 14.5792 14.031 14.5792 12.6503C14.5792 11.2696 13.4586 10.1491 12.078 10.1491ZM12.078 11.1496C12.9064 11.1496 13.5787 11.8219 13.5787 12.6503C13.5787 13.4787 12.9064 14.1511 12.078 14.1511C11.2495 14.1511 10.5772 13.4787 10.5772 12.6503C10.5772 11.8219 11.2495 11.1496 12.078 11.1496Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n )\n);\nCaptureIcon.displayName = \"CaptureIcon\";\n\nexport { CaptureIcon, type CaptureIconProps };\n","import { cn, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\n/**\n * Props for the CheckIcon component\n */\ninterface CheckIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 20. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 2.2. */\n strokeWidth?: number;\n}\n\n/**\n * Check icon component - displays a checkmark in a green gradient circle.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { CheckIcon } from '@scalably/ui';\n *\n * <CheckIcon size={24} className=\"sui-text-primary\" />\n * ```\n */\n\nconst CheckIcon = memo(\n forwardRef<SVGSVGElement, CheckIconProps>(\n ({ size = 20, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 2.2);\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\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=\"M6 10L8.66667 13L14 7\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\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, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\n/**\n * Props for the CloseIcon component\n */\ninterface CloseIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n}\n\n/**\n * Close icon component - displays a cross icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { CloseIcon } from '@scalably/ui';\n *\n * <CloseIcon size={24} className=\"sui-text-primary\" />\n * ```\n */\n\nconst CloseIcon = memo(\n forwardRef<SVGSVGElement, CloseIconProps>(\n ({ size = 24, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n }\n )\n);\nCloseIcon.displayName = \"CloseIcon\";\n\nexport { CloseIcon, type CloseIconProps };\n","import { cn, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface DropdownIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 2. */\n strokeWidth?: number;\n}\n\n/**\n * Dropdown icon component - displays a down arrow icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { DropdownIcon } from '@scalably/ui';\n *\n * <DropdownIcon size={24} className=\"sui-text-primary\" />\n * ```\n */\n\nconst DropdownIcon = memo(\n forwardRef<SVGSVGElement, DropdownIconProps>(\n ({ size = 24, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 2);\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={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M12 15L17 10\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n }\n )\n);\nDropdownIcon.displayName = \"DropdownIcon\";\n\nexport { DropdownIcon, type DropdownIconProps };\n","import { cn, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface DropUpIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 2. */\n strokeWidth?: number;\n}\n\n/**\n * DropUp icon component - displays an up arrow icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { DropUpIcon } from '@scalably/ui';\n *\n * <DropUpIcon size={24} className=\"sui-text-primary\" />\n * ```\n */\n\nconst DropUpIcon = memo(\n forwardRef<SVGSVGElement, DropUpIconProps>(\n ({ size = 24, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 2);\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={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M12 9L7 14\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n }\n )\n);\nDropUpIcon.displayName = \"DropUpIcon\";\n\nexport { DropUpIcon, type DropUpIconProps };\n","import { cn, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface ErrorIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n}\n\n/**\n * Error icon component - displays an error icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { ErrorIcon } from '@scalably/ui';\n *\n * <ErrorIcon size={24} className=\"sui-text-primary\" />\n * ```\n */\n\nconst ErrorIcon = memo(\n forwardRef<SVGSVGElement, ErrorIconProps>(\n ({ size = 24, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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=\"24\"\n height=\"24\"\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={calculatedStrokeWidth}\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 of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * File icon component - displays a file icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { FileIcon } from '@scalably/ui';\n *\n * <FileIcon size={24} className=\"sui-text-primary\" />\n * ```\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, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface FileUploadIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * FileUpload icon component - displays a file upload icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { FileUploadIcon } from '@scalably/ui';\n *\n * <FileUploadIcon size={24} className=\"sui-text-primary\" />\n * ```\n */\n\nconst FileUploadIcon = memo(\n forwardRef<SVGSVGElement, FileUploadIconProps>(\n ({ size = 24, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M9 11L11 13\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\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={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M22 10H18C15 10 14 9 14 6V2L22 10Z\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n }\n )\n);\nFileUploadIcon.displayName = \"FileUploadIcon\";\n\nexport { FileUploadIcon, type FileUploadIconProps };\n","import { cn, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface GridIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n}\n\n/**\n * Grid icon component - displays a grid icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { GridIcon } from '@scalably/ui';\n *\n * <GridIcon size={24} className=\"sui-text-primary\" />\n * ```\n */\n\nconst GridIcon = memo(\n forwardRef<SVGSVGElement, GridIconProps>(\n ({ size = 24, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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={calculatedStrokeWidth}\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={calculatedStrokeWidth}\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={calculatedStrokeWidth}\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={calculatedStrokeWidth}\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 of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * Image icon component - displays an image icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { ImageIcon } from '@scalably/ui';\n *\n * <ImageIcon size={24} className=\"sui-text-primary\" />\n * ```\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, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface ImageUploadIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * ImageUpload icon component - displays an image upload icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { ImageUploadIcon } from '@scalably/ui';\n *\n * <ImageUploadIcon size={24} className=\"sui-text-primary\" />\n * ```\n */\n\nconst ImageUploadIcon = memo(\n forwardRef<SVGSVGElement, ImageUploadIconProps>(\n ({ size = 24, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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={calculatedStrokeWidth}\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={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M18 8V2L20 4\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M18 2L16 4\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\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={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n }\n )\n);\nImageUploadIcon.displayName = \"ImageUploadIcon\";\n\nexport { ImageUploadIcon, type ImageUploadIconProps };\n","import { cn, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface IndeterminateIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 20. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 2. */\n strokeWidth?: number;\n}\n\n/**\n * Indeterminate icon component - displays an indeterminate icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { IndeterminateIcon } from '@scalably/ui';\n *\n * <IndeterminateIcon size={20} className=\"sui-text-primary\" />\n * ```\n */\n\nconst IndeterminateIcon = memo(\n forwardRef<SVGSVGElement, IndeterminateIconProps>(\n ({ size = 20, className, strokeWidth, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 2);\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\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=\"M6 10h8\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n />\n </svg>\n );\n }\n )\n);\nIndeterminateIcon.displayName = \"IndeterminateIcon\";\n\nexport { IndeterminateIcon, type IndeterminateIconProps };\n","import { cn, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface InfoIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n}\n\n/**\n * Info icon component - displays an info icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { InfoIcon } from '@scalably/ui';\n *\n * <InfoIcon size={24} className=\"sui-text-primary\" />\n * ```\n */\n\nconst InfoIcon = memo(\n forwardRef<SVGSVGElement, InfoIconProps>(\n ({ size = 24, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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=\"24\"\n height=\"24\"\n rx={6}\n fill=\"url(#paint0_linear_3163_7412)\"\n />\n <path\n d=\"M12 16V11\"\n stroke=\"white\"\n strokeWidth={calculatedStrokeWidth}\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, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface ListIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n}\n\n/**\n * List icon component - displays a list icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { ListIcon } from '@scalably/ui';\n *\n * <ListIcon size={24} className=\"sui-text-primary\" />\n * ```\n */\n\nconst ListIcon = memo(\n forwardRef<SVGSVGElement, ListIconProps>(\n ({ size = 24, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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={calculatedStrokeWidth}\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={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n }\n )\n);\nListIcon.displayName = \"ListIcon\";\n\nexport { ListIcon, type ListIconProps };\n","import { cn, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface MinusIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 16. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n}\n\n/**\n * Minus icon component - displays a minus icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { MinusIcon } from '@scalably/ui';\n *\n * <MinusIcon size={16} className=\"sui-text-primary\" />\n * ```\n */\n\nconst MinusIcon = memo(\n forwardRef<SVGSVGElement, MinusIconProps>(\n ({ size = 16, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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={calculatedStrokeWidth}\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 of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * MultipleSelection icon component - displays a multiple selection icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { MultipleSelectionIcon } from '@scalably/ui';\n *\n * <MultipleSelectionIcon size={24} className=\"sui-text-primary\" />\n * ```\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, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\n/**\n * Props for the PlusIcon component\n */\ninterface PlusIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 16. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n}\n\n/**\n * Plus icon component - displays a plus icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { PlusIcon } from '@scalably/ui';\n *\n * <PlusIcon size={16} className=\"sui-text-primary\" />\n * ```\n */\n\nconst PlusIcon = memo(\n forwardRef<SVGSVGElement, PlusIconProps>(\n ({ size = 16, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M8 2.5V13.5\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n }\n )\n);\nPlusIcon.displayName = \"PlusIcon\";\n\nexport { PlusIcon, type PlusIconProps };\n","import { cn, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\n/**\n * Props for the SearchIcon component\n */\ninterface SearchIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n}\n\n/**\n * Search icon component - a magnifying glass icon for search functionality.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { SearchIcon } from '@scalably/ui';\n *\n * <SearchIcon size={20} className=\"sui-text-blue-500\" />\n * ```\n */\n\nconst SearchIcon = memo(\n forwardRef<SVGSVGElement, SearchIconProps>(\n ({ size = 24, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M17 17L21 21\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n }\n )\n);\nSearchIcon.displayName = \"SearchIcon\";\n\nexport { SearchIcon, type SearchIconProps };\n","import { cn, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface SettingsIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n}\n\n/**\n * Settings icon component - displays a settings icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { SettingsIcon } from '@scalably/ui';\n *\n * <SettingsIcon size={24} className=\"sui-text-primary\" />\n * ```\n */\n\nconst SettingsIcon = memo(\n forwardRef<SVGSVGElement, SettingsIconProps>(\n ({ size = 24, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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=\"M12 15C13.6569 15 15 13.6569 15 12C15 10.3431 13.6569 9 12 9C10.3431 9 9 10.3431 9 12C9 13.6569 10.3431 15 12 15Z\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeMiterlimit={10}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M2 12.88V11.12C2 10.08 2.85 9.22 3.9 9.22C5.71 9.22 6.45 7.94 5.54 6.37C5.02 5.47 5.33 4.3 6.24 3.78L7.97 2.79C8.76 2.32 9.78 2.6 10.25 3.39L10.36 3.58C11.26 5.15 12.74 5.15 13.65 3.58L13.76 3.39C14.23 2.6 15.25 2.32 16.04 2.79L17.77 3.78C18.68 4.3 18.99 5.47 18.47 6.37C17.56 7.94 18.3 9.22 20.11 9.22C21.15 9.22 22.01 10.07 22.01 11.12V12.88C22.01 13.92 21.16 14.78 20.11 14.78C18.3 14.78 17.56 16.06 18.47 17.63C18.99 18.54 18.68 19.7 17.77 20.22L16.04 21.21C15.25 21.68 14.23 21.4 13.76 20.61L13.65 20.42C12.75 18.85 11.27 18.85 10.36 20.42L10.25 20.61C9.78 21.4 8.76 21.68 7.97 21.21L6.24 20.22C5.33 19.7 5.02 18.53 5.54 17.63C6.45 16.06 5.71 14.78 3.9 14.78C2.85 14.78 2 13.92 2 12.88Z\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeMiterlimit={10}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n }\n )\n);\nSettingsIcon.displayName = \"SettingsIcon\";\n\nexport { SettingsIcon, type SettingsIconProps };\n","import { cn, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\n/**\n * Props for the SuccessIcon component\n */\ninterface SuccessIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n}\n\n/**\n * Success icon component - displays a checkmark in a green gradient circle.\n *\n * **Note:** This icon has fixed brand colors (green gradient with white checkmark)\n * and cannot be customized. Use for success/confirmation states.\n *\n * @example\n * ```tsx\n * import { SuccessIcon } from '@scalably/ui';\n *\n * <SuccessIcon size={24} />\n * ```\n */\n\nconst SuccessIcon = memo(\n forwardRef<SVGSVGElement, SuccessIconProps>(\n ({ size = 24, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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=\"24\"\n height=\"24\"\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={calculatedStrokeWidth}\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, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface TickIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 16. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n}\n\n/**\n * Tick icon component - displays a tick icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { TickIcon } from '@scalably/ui';\n *\n * <TickIcon size={16} className=\"sui-text-primary\" />\n * ```\n */\n\nconst TickIcon = memo(\n forwardRef<SVGSVGElement, TickIconProps>(\n ({ size = 16, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n }\n )\n);\nTickIcon.displayName = \"TickIcon\";\n\nexport { TickIcon, type TickIconProps };\n","import { cn, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface ToFirstIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n}\n\n/**\n * ToFirst icon component - displays a to first icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { ToFirstIcon } from '@scalably/ui';\n *\n * <ToFirstIcon size={24} className=\"sui-text-primary\" />\n * ```\n */\n\nconst ToFirstIcon = memo(\n forwardRef<SVGSVGElement, ToFirstIconProps>(\n ({ size = 24, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M6 12L12 18\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M17 6L11 12\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M11 12L17 18\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_3297_5706\">\n <rect width=\"24\" height=\"24\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n }\n )\n);\nToFirstIcon.displayName = \"ToFirstIcon\";\n\nexport { ToFirstIcon, type ToFirstIconProps };\n","import { cn, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface ToLastIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n}\n\n/**\n * ToLast icon component - displays a to last icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { ToLastIcon } from '@scalably/ui';\n *\n * <ToLastIcon size={24} className=\"sui-text-primary\" />\n * ```\n */\n\nconst ToLastIcon = memo(\n forwardRef<SVGSVGElement, ToLastIconProps>(\n ({ size = 24, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M17 12L11 6\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M6 18L12 12\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M12 12L6 6\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_3297_5736\">\n <rect width=\"24\" height=\"24\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n }\n )\n);\nToLastIcon.displayName = \"ToLastIcon\";\n\nexport { ToLastIcon, type ToLastIconProps };\n","import { cn, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface ToNextIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n}\n\n/**\n * ToNext icon component - displays a to next icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { ToNextIcon } from '@scalably/ui';\n *\n * <ToNextIcon size={24} className=\"sui-text-primary\" />\n * ```\n */\n\nconst ToNextIcon = memo(\n forwardRef<SVGSVGElement, ToNextIconProps>(\n ({ size = 24, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M15 12L9 6\"\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_3297_5731\">\n <rect width=\"24\" height=\"24\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n }\n )\n);\nToNextIcon.displayName = \"ToNextIcon\";\n\nexport { ToNextIcon, type ToNextIconProps };\n","import { cn, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface ToPreviousIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n}\n\n/**\n * ToPrevious icon component - displays a to previous icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { ToPreviousIcon } from '@scalably/ui';\n *\n * <ToPreviousIcon size={24} className=\"sui-text-primary\" />\n * ```\n */\n\nconst ToPreviousIcon = memo(\n forwardRef<SVGSVGElement, ToPreviousIconProps>(\n ({ size = 24, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M9 12L15 18\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_3297_5714\">\n <rect width=\"24\" height=\"24\" 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 of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * Video icon component - displays a video icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { VideoIcon } from '@scalably/ui';\n *\n * <VideoIcon size={24} className=\"sui-text-primary\" />\n * ```\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, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface VideoUploadIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * VideoUpload icon component - displays a video upload icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { VideoUploadIcon } from '@scalably/ui';\n *\n * <VideoUploadIcon size={24} className=\"sui-text-primary\" />\n * ```\n */\n\nconst VideoUploadIcon = memo(\n forwardRef<SVGSVGElement, VideoUploadIconProps>(\n ({ size = 24, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M2.52002 7.11H21.48\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M8.52002 2.11V6.97\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M15.48 2.11V6.52\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\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={calculatedStrokeWidth}\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, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface WarnIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n}\n\n/**\n * Warn icon component - displays a warn icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { WarnIcon } from '@scalably/ui';\n *\n * <WarnIcon size={24} className=\"sui-text-primary\" />\n * ```\n */\n\nconst WarnIcon = memo(\n forwardRef<SVGSVGElement, WarnIconProps>(\n ({ size = 24, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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=\"24\"\n height=\"24\"\n rx={6}\n fill=\"url(#paint0_linear_3163_7433)\"\n />\n <path\n d=\"M12 9V14\"\n stroke=\"white\"\n strokeWidth={calculatedStrokeWidth}\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 const content = renderButton ? (\n renderButton({\n onClick: handleClick,\n visible,\n className: defaultClassName,\n ariaLabel,\n })\n ) : (\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 );\n\n if (!containerClassName) {\n return content;\n }\n\n return <div className={cn(containerClassName)}>{content}</div>;\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\n className=\"sui-h-5 sui-w-5 sui-text-white\"\n strokeWidth={2.2}\n />\n </g>\n <g className=\"sui-checkbox-minus sui-opacity-0 sui-transition-opacity sui-duration-200\">\n <IndeterminateIcon\n className=\"sui-h-5 sui-w-5 sui-text-white\"\n strokeWidth={2}\n />\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 { Button } from \"@/components/Button\";\nimport { FileUpload } from \"@/components/FileUpload\";\nimport { CaptureIcon, CloseIcon } from \"@/icons\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\n\ninterface VideoThumbnailModalProps {\n isOpen: boolean;\n onClose: () => void;\n videoSrc: string;\n onThumbnailCapture: (thumbnail: Blob, dataUrl: string) => void;\n onConfirm: (thumbnailDataUrl: string) => void;\n // Customizable content\n title?: string;\n captureButtonText?: string;\n thumbnailTitle?: string;\n uploadTitle?: string;\n uploadSubtitle?: React.ReactNode;\n cancelButtonText?: string;\n saveButtonText?: string;\n changeThumbnailText?: string;\n}\n\n/**\n * Modal component for capturing video thumbnails with both capture and upload options.\n * Reuses the FileUpload component for the thumbnail upload section.\n */\nexport const VideoThumbnailModal = ({\n isOpen,\n onClose,\n videoSrc,\n onThumbnailCapture,\n onConfirm,\n // Customizable content with defaults\n title = \"Capture video thumbnail\",\n captureButtonText = \"Capture for Video Thumbnail\",\n thumbnailTitle = \"Video Thumbnail\",\n uploadTitle = \"Upload Thumbnail\",\n uploadSubtitle,\n cancelButtonText = \"Cancel\",\n saveButtonText = \"Save\",\n changeThumbnailText = \"Click to change thumbnail\",\n}: VideoThumbnailModalProps) => {\n const videoRef = useRef<HTMLVideoElement | null>(null);\n const [thumbnailDataUrl, setThumbnailDataUrl] = useState<string | null>(null);\n const [isCapturedFromVideo, setIsCapturedFromVideo] =\n useState<boolean>(false);\n const [capturedTime, setCapturedTime] = useState<number>(0);\n const [actualVideoDuration, setActualVideoDuration] = useState<number>(0);\n const [isHovering, setIsHovering] = useState<boolean>(false);\n\n // Keep slider in sync with video currentTime\n useEffect(() => {\n const v = videoRef.current;\n if (!v) return;\n const onLoaded = () => {\n setActualVideoDuration(Number.isFinite(v.duration) ? v.duration : 0);\n };\n const onTime = () => {\n // Video time is managed by parent, no need to set it\n };\n v.addEventListener(\"loadedmetadata\", onLoaded);\n v.addEventListener(\"timeupdate\", onTime);\n return () => {\n v.removeEventListener(\"loadedmetadata\", onLoaded);\n v.removeEventListener(\"timeupdate\", onTime);\n };\n }, [videoSrc]);\n\n const captureThumbnail = useCallback(async () => {\n const v = videoRef.current;\n if (!v) return;\n const canvas = document.createElement(\"canvas\");\n canvas.width = v.videoWidth || 0;\n canvas.height = v.videoHeight || 0;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx || canvas.width === 0 || canvas.height === 0) return;\n ctx.drawImage(v, 0, 0, canvas.width, canvas.height);\n const dataUrl = canvas.toDataURL(\"image/jpeg\", 0.9);\n setThumbnailDataUrl(dataUrl);\n setIsCapturedFromVideo(true);\n setCapturedTime(v.currentTime);\n await new Promise<void>((resolve) => {\n canvas.toBlob(\n (blob) => {\n if (!blob) return resolve();\n onThumbnailCapture(blob, dataUrl);\n resolve();\n },\n \"image/jpeg\",\n 0.9\n );\n });\n }, [onThumbnailCapture]);\n\n const handleThumbnailUpload = useCallback((file: File) => {\n const reader = new FileReader();\n reader.onload = (e) => {\n setThumbnailDataUrl(e.target?.result as string);\n setIsCapturedFromVideo(false); // Clear captured flag when uploading custom image\n };\n reader.readAsDataURL(file);\n }, []);\n\n const formatTime = useCallback((seconds: number): string => {\n const mins = Math.floor(seconds / 60);\n const secs = Math.floor(seconds % 60);\n return `${mins}:${secs.toString().padStart(2, \"0\")}`;\n }, []);\n\n const handleConfirm = useCallback(() => {\n if (thumbnailDataUrl) {\n onConfirm(thumbnailDataUrl);\n setThumbnailDataUrl(null);\n }\n }, [thumbnailDataUrl, onConfirm]);\n\n const handleClose = useCallback(() => {\n setThumbnailDataUrl(null);\n setIsCapturedFromVideo(false);\n setCapturedTime(0);\n setActualVideoDuration(0);\n onClose();\n }, [onClose]);\n\n if (!isOpen) return null;\n\n return (\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n className=\"sui-fixed sui-inset-0 sui-z-50 sui-flex sui-items-center sui-justify-center sui-p-4\"\n >\n <div\n className=\"sui-absolute sui-inset-0 sui-bg-black/50\"\n role=\"button\"\n tabIndex={0}\n onClick={handleClose}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") handleClose();\n }}\n aria-label=\"Close modal overlay\"\n />\n <div className=\"sui-relative sui-z-10 sui-w-fit sui-max-w-4xl sui-max-h-[90vh] sui-flex sui-flex-col sui-rounded-md sui-bg-background-secondary1 sui-shadow-lg\">\n {/* Header - Fixed */}\n <div className=\"sui-flex sui-items-center sui-justify-between sui-p-4\">\n <h2 className=\"sui-text-16 sui-text-default\">{title}</h2>\n <button\n type=\"button\"\n className=\"sui-p-1 sui-rounded hover:sui-bg-stroke-level3\"\n aria-label=\"Close\"\n onClick={handleClose}\n >\n <CloseIcon />\n </button>\n </div>\n\n {/* Content - Scrollable */}\n <div className=\"sui-flex-1 sui-overflow-y-auto sui-scrollbars-thin sui-p-4\">\n <div className=\"sui-grid sui-grid-cols-1 sui-lg:grid-cols-2 sui-gap-4 sui-min-w-0\">\n {/* Video Section */}\n <div className=\"sui-space-y-4\">\n {/* eslint-disable-next-line jsx-a11y/media-has-caption */}\n <video\n ref={videoRef}\n src={videoSrc}\n controls\n className=\"sui-w-full sui-max-w-[480px] sui-h-[320px] sui-rounded-md sui-bg-black sui-object-cover\"\n />\n </div>\n\n {/* Thumbnail Upload Section */}\n <div className=\"sui-space-y-4\">\n <h3 className=\"sui-body-14-medium\">{thumbnailTitle}</h3>\n <Button\n onClick={captureThumbnail}\n leftIcon={<CaptureIcon size={16} />}\n variant=\"outline\"\n size=\"md\"\n className=\"sui-w-full sui-max-w-[320px]\"\n onMouseEnter={() => setIsHovering(true)}\n onMouseLeave={() => setIsHovering(false)}\n >\n {thumbnailDataUrl && isCapturedFromVideo\n ? isHovering\n ? `Click to re-capture thumbnail`\n : `Captured at ${formatTime(capturedTime)}/${formatTime(\n actualVideoDuration\n )}`\n : captureButtonText}\n </Button>\n <div className=\"sui-w-full sui-max-w-[320px] sui-h-[213px]\">\n {thumbnailDataUrl ? (\n <div\n className=\"sui-relative sui-w-full sui-h-full sui-rounded-md sui-border-2 sui-border-dashed sui-bg-background-primary sui-transition-all sui-duration-200 sui-ease-in-out hover:sui-border-primary/80 hover:sui-bg-primary/5 focus-visible:sui-outline-none focus-visible:sui-ring-2 focus-visible:sui-ring-primary focus-visible:sui-ring-offset-2 sui-cursor-pointer sui-overflow-hidden\"\n onClick={() => {\n const input = document.createElement(\"input\");\n input.type = \"file\";\n input.accept = \"image/*\";\n input.onchange = (e) => {\n const file = (e.target as HTMLInputElement).files?.[0];\n if (file) handleThumbnailUpload(file);\n };\n input.click();\n }}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n const input = document.createElement(\"input\");\n input.type = \"file\";\n input.accept = \"image/*\";\n input.onchange = (e) => {\n const file = (e.target as HTMLInputElement)\n .files?.[0];\n if (file) handleThumbnailUpload(file);\n };\n input.click();\n }\n }}\n aria-label=\"Click to change thumbnail\"\n >\n <img\n src={thumbnailDataUrl}\n alt=\"Thumbnail preview\"\n className=\"sui-w-full sui-h-full sui-object-cover sui-rounded-md\"\n />\n <div className=\"sui-absolute sui-inset-0 sui-bg-black/50 sui-opacity-0 hover:sui-opacity-100 sui-transition-opacity sui-duration-200 sui-flex sui-items-center sui-justify-center sui-rounded-md\">\n <p className=\"sui-text-white sui-text-14 sui-font-medium\">\n {changeThumbnailText}\n </p>\n </div>\n </div>\n ) : (\n <FileUpload\n label=\"\"\n acceptedFileTypes={[\n \".png\",\n \".jpeg\",\n \".jpg\",\n \".gif\",\n \".svg\",\n ]}\n maxFileSize={7 * 1024 * 1024} // 7MB\n multiple={false}\n iconType=\"image\"\n size=\"sm\"\n className=\"sui-h-full\"\n onUploadSuccess={(files) => {\n if (files.length > 0) {\n handleThumbnailUpload(files[0]);\n }\n }}\n messages={{\n titleIdle: uploadTitle,\n subtitle: uploadSubtitle || (\n <div className=\"sui-text-center sui-space-y-1\">\n <p className=\"sui-text-12 sui-text-inactive\">\n All file types are accepted (.png, .jpeg, .jpg,\n .gif, .svg)\n </p>\n <p className=\"sui-text-12 sui-text-inactive\">\n Maximum size is 7MB.\n </p>\n <p className=\"sui-text-12 sui-text-inactive\">\n Best image size: 1080x720px\n </p>\n </div>\n ),\n }}\n />\n )}\n </div>\n </div>\n </div>\n </div>\n\n {/* Footer - Fixed */}\n <div className=\"sui-flex sui-justify-center sui-gap-4 sui-p-4\">\n <Button\n onClick={handleClose}\n variant=\"outline\"\n size=\"md\"\n className=\"sui-flex-1 sui-max-w-[120px]\"\n >\n {cancelButtonText}\n </Button>\n <Button\n onClick={handleConfirm}\n variant=\"default\"\n size=\"md\"\n className=\"sui-flex-1 sui-max-w-[120px]\"\n disabled={!thumbnailDataUrl}\n >\n {saveButtonText}\n </Button>\n </div>\n </div>\n </div>\n );\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 {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n} from \"react\";\nimport { VideoThumbnailModal } from \"./VideoThumbnailModal\";\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 // Video thumbnail capture (modal only)\n /** Enable video thumbnail capture UI via modal when a video file is selected. */\n enableVideoThumbnail?: boolean;\n /**\n * Called when a thumbnail is captured from the selected video's current frame.\n * Provides the Blob (image/jpeg) and a data URL for immediate preview.\n */\n onThumbnailCapture?: (\n thumbnail: Blob,\n dataUrl: string,\n file: FileUploadFile\n ) => void;\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 enableVideoThumbnail = false,\n onThumbnailCapture,\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 // Video thumbnail capture state (opt-in)\n const [selectedVideoId, setSelectedVideoId] = useState<string | null>(null);\n const [videoSrc, setVideoSrc] = useState<string | null>(null);\n const [isThumbModalOpen, setIsThumbModalOpen] = useState<boolean>(false);\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 // Setup video capture UI on first acceptable video when enabled and single-selection UX\n if (\n enableVideoThumbnail &&\n file.type.startsWith(\"video/\") &&\n selectedVideoId === null\n ) {\n try {\n const objectUrl = URL.createObjectURL(file);\n setVideoSrc(objectUrl);\n setSelectedVideoId(fileUploadFile.id);\n setIsThumbModalOpen(true);\n } catch {\n // ignore URL errors\n }\n }\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 enableVideoThumbnail,\n selectedVideoId,\n setVideoSrc,\n setSelectedVideoId,\n setIsThumbModalOpen,\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 // Clear video state if we removed the selected video\n if (fileId === selectedVideoId) {\n setSelectedVideoId(null);\n if (videoSrc) URL.revokeObjectURL(videoSrc);\n setVideoSrc(null);\n }\n },\n [internalFiles, setInternalFiles, onFileRemove, selectedVideoId, videoSrc]\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 // Cleanup created object URL on unmount/change\n useEffect(() => {\n return () => {\n if (videoSrc) URL.revokeObjectURL(videoSrc);\n };\n }, [videoSrc]);\n\n const handleThumbnailCapture = useCallback(\n (blob: Blob, dataUrl: string) => {\n const selected = (internalFiles ?? []).find(\n (f) => f.id === selectedVideoId\n );\n if (onThumbnailCapture && selected) {\n onThumbnailCapture(blob, dataUrl, selected);\n }\n },\n [internalFiles, onThumbnailCapture, selectedVideoId]\n );\n\n const handleThumbnailConfirm = useCallback(\n (thumbnailDataUrl: string) => {\n if (!selectedVideoId) return;\n\n setInternalFiles(((\n prev: FileUploadFile[] | undefined\n ): FileUploadFile[] => {\n const current = prev ?? [];\n return current.map((f: FileUploadFile) =>\n f.id === selectedVideoId ? { ...f, preview: thumbnailDataUrl } : f\n );\n }) as unknown as FileUploadFile[]);\n setIsThumbModalOpen(false);\n },\n [selectedVideoId, setInternalFiles]\n );\n\n const closeThumbModal = useCallback(() => {\n setIsThumbModalOpen(false);\n }, []);\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.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 {/* Optional video thumbnail capture UI */}\n {enableVideoThumbnail && selectedVideoId && videoSrc && (\n <VideoThumbnailModal\n isOpen={isThumbModalOpen}\n onClose={closeThumbModal}\n videoSrc={videoSrc}\n onThumbnailCapture={handleThumbnailCapture}\n onConfirm={handleThumbnailConfirm}\n />\n )}\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 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\">\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-overflow-y-auto sui-scrollbars-thin\"\n onKeyDown={onKeyDown}\n style={{ maxHeight }}\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","/**\n * Auto-generated file - DO NOT EDIT MANUALLY\n * This file is generated by scripts/generate-styles-inline.js during build.\n * It contains the compiled CSS as a string for automatic injection in ScalablyUIProvider.\n */\n\nexport const SCALABLY_UI_STYLES = \"@import url(\\\"https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap\\\");*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }\\n/*! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:\\\"\\\"}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Poppins,Inter,system-ui,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:JetBrains Mono,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.sui-animate-spin{animation:sui-spin 1s linear infinite}.sui-ring-offset-background{--tw-ring-offset-color:#fff}.sui-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.sui-pointer-events-none{pointer-events:none}.sui-pointer-events-auto{pointer-events:auto}.sui-fixed{position:fixed}.sui-absolute{position:absolute}.sui-relative{position:relative}.-sui-inset-1{inset:-.25rem}.sui-inset-0{inset:0}.sui-inset-y-0{top:0;bottom:0}.sui-bottom-0{bottom:0}.sui-bottom-4{bottom:1rem}.sui-bottom-6{bottom:1.5rem}.sui-bottom-\\\\[-1px\\\\]{bottom:-1px}.sui-left-0{left:0}.sui-left-1{left:.25rem}.sui-left-1\\\\/2{left:50%}.sui-left-12{left:3rem}.sui-left-3{left:.75rem}.sui-left-4{left:1rem}.sui-left-\\\\[-4px\\\\]{left:-4px}.sui-left-\\\\[38px\\\\]{left:38px}.sui-right-0{right:0}.sui-right-1{right:.25rem}.sui-right-1\\\\/2{right:50%}.sui-right-10{right:2.5rem}.sui-right-2{right:.5rem}.sui-right-3{right:.75rem}.sui-right-4{right:1rem}.sui-right-6{right:1.5rem}.sui-right-9{right:2.25rem}.sui-right-\\\\[-4px\\\\]{right:-4px}.sui-right-\\\\[38px\\\\]{right:38px}.sui-top-1{top:.25rem}.sui-top-1\\\\/2{top:50%}.sui-top-4{top:1rem}.sui-top-5{top:1.25rem}.sui-top-full{top:100%}.sui-z-10{z-index:10}.sui-z-20{z-index:20}.sui-z-40{z-index:40}.sui-z-50{z-index:50}.sui-z-\\\\[1\\\\]{z-index:1}.sui-z-\\\\[9999\\\\]{z-index:9999}.sui-order-1{order:1}.sui-mx-4{margin-left:1rem;margin-right:1rem}.sui-mx-auto{margin-left:auto;margin-right:auto}.sui-my-3{margin-top:.75rem;margin-bottom:.75rem}.sui-my-4{margin-top:1rem;margin-bottom:1rem}.sui-my-6{margin-top:1.5rem;margin-bottom:1.5rem}.sui-mb-1{margin-bottom:.25rem}.sui-mb-2{margin-bottom:.5rem}.sui-mb-3{margin-bottom:.75rem}.sui-mb-4{margin-bottom:1rem}.sui-mb-6{margin-bottom:1.5rem}.sui-ml-0{margin-left:0}.sui-ml-1{margin-left:.25rem}.sui-ml-2{margin-left:.5rem}.sui-ml-3{margin-left:.75rem}.sui-ml-4{margin-left:1rem}.sui-mr-2{margin-right:.5rem}.sui-mr-4{margin-right:1rem}.sui-mt-1{margin-top:.25rem}.sui-mt-2{margin-top:.5rem}.sui-mt-3{margin-top:.75rem}.sui-mt-4{margin-top:1rem}.sui-mt-\\\\[220vh\\\\]{margin-top:220vh}.sui-block{display:block}.sui-inline-block{display:inline-block}.sui-flex{display:flex}.sui-inline-flex{display:inline-flex}.sui-grid{display:grid}.sui-h-1{height:.25rem}.sui-h-10{height:2.5rem}.sui-h-11{height:2.75rem}.sui-h-12{height:3rem}.sui-h-2{height:.5rem}.sui-h-4{height:1rem}.sui-h-5{height:1.25rem}.sui-h-6{height:1.5rem}.sui-h-8{height:2rem}.sui-h-9{height:2.25rem}.sui-h-\\\\[120px\\\\]{height:120px}.sui-h-\\\\[213px\\\\]{height:213px}.sui-h-\\\\[2px\\\\]{height:2px}.sui-h-\\\\[30px\\\\]{height:30px}.sui-h-\\\\[320px\\\\]{height:320px}.sui-h-full{height:100%}.sui-h-px{height:1px}.sui-max-h-32{max-height:8rem}.sui-max-h-48{max-height:12rem}.sui-max-h-56{max-height:14rem}.sui-max-h-60{max-height:15rem}.sui-max-h-\\\\[90vh\\\\]{max-height:90vh}.sui-min-h-\\\\[120px\\\\]{min-height:120px}.sui-min-h-\\\\[160px\\\\]{min-height:160px}.sui-min-h-\\\\[200px\\\\]{min-height:200px}.sui-min-h-\\\\[300vh\\\\]{min-height:300vh}.sui-min-h-screen{min-height:100vh}.sui-w-1{width:.25rem}.sui-w-10{width:2.5rem}.sui-w-12{width:3rem}.sui-w-2{width:.5rem}.sui-w-4{width:1rem}.sui-w-48{width:12rem}.sui-w-5{width:1.25rem}.sui-w-6{width:1.5rem}.sui-w-64{width:16rem}.sui-w-8{width:2rem}.sui-w-80{width:20rem}.sui-w-9{width:2.25rem}.sui-w-96{width:24rem}.sui-w-\\\\[2px\\\\]{width:2px}.sui-w-\\\\[30px\\\\]{width:30px}.sui-w-\\\\[320px\\\\]{width:320px}.sui-w-\\\\[360px\\\\]{width:360px}.sui-w-\\\\[400px\\\\]{width:400px}.sui-w-\\\\[480px\\\\]{width:480px}.sui-w-\\\\[520px\\\\]{width:520px}.sui-w-\\\\[560px\\\\]{width:560px}.sui-w-\\\\[640px\\\\]{width:640px}.sui-w-auto{width:auto}.sui-w-fit{width:-moz-fit-content;width:fit-content}.sui-w-full{width:100%}.sui-w-px{width:1px}.sui-min-w-0{min-width:0}.sui-min-w-8{min-width:2rem}.sui-min-w-\\\\[280px\\\\]{min-width:280px}.sui-min-w-\\\\[300px\\\\]{min-width:300px}.sui-min-w-\\\\[320px\\\\]{min-width:320px}.sui-min-w-\\\\[400px\\\\]{min-width:400px}.sui-max-w-4xl{max-width:56rem}.sui-max-w-6xl{max-width:72rem}.sui-max-w-\\\\[120px\\\\]{max-width:120px}.sui-max-w-\\\\[220px\\\\]{max-width:220px}.sui-max-w-\\\\[320px\\\\]{max-width:320px}.sui-max-w-\\\\[360px\\\\]{max-width:360px}.sui-max-w-\\\\[366px\\\\]{max-width:366px}.sui-max-w-\\\\[480px\\\\]{max-width:480px}.sui-max-w-\\\\[95vw\\\\]{max-width:95vw}.sui-max-w-full{max-width:100%}.sui-flex-1{flex:1 1 0%}.sui-flex-none{flex:none}.sui-flex-shrink-0{flex-shrink:0}.sui-origin-top-left{transform-origin:top left}.-sui-translate-x-1{--tw-translate-x:-0.25rem}.-sui-translate-x-1,.-sui-translate-x-1\\\\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-sui-translate-x-1\\\\/2{--tw-translate-x:-50%}.sui--translate-y-1{--tw-translate-y:-0.25rem}.sui--translate-y-1,.sui--translate-y-1\\\\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sui--translate-y-1\\\\/2{--tw-translate-y:-50%}.sui-rotate-180{--tw-rotate:180deg}.sui-rotate-180,.sui-scale-100{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sui-scale-100{--tw-scale-x:1;--tw-scale-y:1}.sui-scale-110{--tw-scale-x:1.1;--tw-scale-y:1.1}.sui-scale-110,.sui-scale-90{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sui-scale-90{--tw-scale-x:.9;--tw-scale-y:.9}.sui-transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes sui-fadeIn{0%{opacity:0}to{opacity:1}}.sui-animate-fade-in{animation:sui-fadeIn .2s ease-in-out}@keyframes sui-slideUp{0%{transform:translateY(10px);opacity:0}to{transform:translateY(0);opacity:1}}.sui-animate-slide-up{animation:sui-slideUp .3s ease-out}@keyframes sui-spin{to{transform:rotate(1turn)}}.sui-animate-spin{animation:sui-spin 1s linear infinite}.sui-cursor-not-allowed{cursor:not-allowed}.sui-cursor-pointer{cursor:pointer}.sui-list-inside{list-style-position:inside}.sui-list-disc{list-style-type:disc}.sui-appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.sui-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.sui-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sui-grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.sui-flex-row{flex-direction:row}.sui-flex-col{flex-direction:column}.sui-flex-wrap{flex-wrap:wrap}.sui-place-items-center{place-items:center}.sui-items-start{align-items:flex-start}.sui-items-end{align-items:flex-end}.sui-items-center{align-items:center}.sui-items-stretch{align-items:stretch}.sui-justify-start{justify-content:flex-start}.sui-justify-center{justify-content:center}.sui-justify-between{justify-content:space-between}.sui-gap-1{gap:.25rem}.sui-gap-1\\\\.5{gap:.375rem}.sui-gap-2{gap:.5rem}.sui-gap-3{gap:.75rem}.sui-gap-4{gap:1rem}.sui-gap-6{gap:1.5rem}.sui-gap-8{gap:2rem}.sui-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.sui-space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.sui-space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.sui-space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem*var(--tw-space-y-reverse))}.sui-space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.sui-space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem*var(--tw-space-y-reverse))}.sui-space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(2rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem*var(--tw-space-y-reverse))}.sui-divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px*var(--tw-divide-y-reverse))}.sui-divide-stroke-level3>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(222 227 231/var(--tw-divide-opacity,1))}.sui-self-stretch{align-self:stretch}.sui-overflow-hidden{overflow:hidden}.sui-overflow-y-auto{overflow-y:auto}.sui-truncate{overflow:hidden;text-overflow:ellipsis}.sui-truncate,.sui-whitespace-nowrap{white-space:nowrap}.sui-break-words{overflow-wrap:break-word}.sui-rounded{border-radius:.5rem}.sui-rounded-\\\\[12px\\\\]{border-radius:12px}.sui-rounded-full{border-radius:9999px}.sui-rounded-lg{border-radius:.5rem}.sui-rounded-md{border-radius:.375rem}.sui-rounded-sm{border-radius:.125rem}.sui-rounded-xl{border-radius:1rem}.sui-rounded-b-\\\\[12px\\\\]{border-bottom-right-radius:12px;border-bottom-left-radius:12px}.sui-rounded-l-md{border-top-left-radius:.375rem;border-bottom-left-radius:.375rem}.sui-rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.sui-rounded-r-md{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.sui-rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.sui-border{border-width:1px}.sui-border-0{border-width:0}.sui-border-2{border-width:2px}.sui-border-b{border-bottom-width:1px}.sui-border-dashed{border-style:dashed}.sui-border-none{border-style:none}.sui-border-\\\\[\\\\#48C1B5\\\\]{--tw-border-opacity:1;border-color:rgb(72 193 181/var(--tw-border-opacity,1))}.sui-border-\\\\[\\\\#9DC0EE\\\\]{--tw-border-opacity:1;border-color:rgb(157 192 238/var(--tw-border-opacity,1))}.sui-border-\\\\[\\\\#A4C3EC\\\\]{--tw-border-opacity:1;border-color:rgb(164 195 236/var(--tw-border-opacity,1))}.sui-border-\\\\[\\\\#F4B0A1\\\\]{--tw-border-opacity:1;border-color:rgb(244 176 161/var(--tw-border-opacity,1))}.sui-border-\\\\[\\\\#F7D9A4\\\\]{--tw-border-opacity:1;border-color:rgb(247 217 164/var(--tw-border-opacity,1))}.sui-border-black{--tw-border-opacity:1;border-color:rgb(35 38 47/var(--tw-border-opacity,1))}.sui-border-disabled{--tw-border-opacity:1;border-color:rgb(178 187 199/var(--tw-border-opacity,1))}.sui-border-disabled\\\\/0{border-color:rgba(178,187,199,0)}.sui-border-disabled\\\\/10{border-color:rgba(178,187,199,.1)}.sui-border-disabled\\\\/100{border-color:#b2bbc7}.sui-border-disabled\\\\/15{border-color:rgba(178,187,199,.15)}.sui-border-disabled\\\\/20{border-color:rgba(178,187,199,.2)}.sui-border-disabled\\\\/25{border-color:rgba(178,187,199,.25)}.sui-border-disabled\\\\/30{border-color:rgba(178,187,199,.3)}.sui-border-disabled\\\\/35{border-color:rgba(178,187,199,.35)}.sui-border-disabled\\\\/40{border-color:rgba(178,187,199,.4)}.sui-border-disabled\\\\/45{border-color:rgba(178,187,199,.45)}.sui-border-disabled\\\\/5{border-color:rgba(178,187,199,.05)}.sui-border-disabled\\\\/50{border-color:rgba(178,187,199,.5)}.sui-border-disabled\\\\/55{border-color:rgba(178,187,199,.55)}.sui-border-disabled\\\\/60{border-color:rgba(178,187,199,.6)}.sui-border-disabled\\\\/65{border-color:rgba(178,187,199,.65)}.sui-border-disabled\\\\/70{border-color:rgba(178,187,199,.7)}.sui-border-disabled\\\\/75{border-color:rgba(178,187,199,.75)}.sui-border-disabled\\\\/80{border-color:rgba(178,187,199,.8)}.sui-border-disabled\\\\/85{border-color:rgba(178,187,199,.85)}.sui-border-disabled\\\\/90{border-color:rgba(178,187,199,.9)}.sui-border-disabled\\\\/95{border-color:rgba(178,187,199,.95)}.sui-border-error{--tw-border-opacity:1;border-color:rgb(234 53 64/var(--tw-border-opacity,1))}.sui-border-error\\\\/0{border-color:rgba(234,53,64,0)}.sui-border-error\\\\/10{border-color:rgba(234,53,64,.1)}.sui-border-error\\\\/100{border-color:#ea3540}.sui-border-error\\\\/15{border-color:rgba(234,53,64,.15)}.sui-border-error\\\\/20{border-color:rgba(234,53,64,.2)}.sui-border-error\\\\/25{border-color:rgba(234,53,64,.25)}.sui-border-error\\\\/30{border-color:rgba(234,53,64,.3)}.sui-border-error\\\\/35{border-color:rgba(234,53,64,.35)}.sui-border-error\\\\/40{border-color:rgba(234,53,64,.4)}.sui-border-error\\\\/45{border-color:rgba(234,53,64,.45)}.sui-border-error\\\\/5{border-color:rgba(234,53,64,.05)}.sui-border-error\\\\/50{border-color:rgba(234,53,64,.5)}.sui-border-error\\\\/55{border-color:rgba(234,53,64,.55)}.sui-border-error\\\\/60{border-color:rgba(234,53,64,.6)}.sui-border-error\\\\/65{border-color:rgba(234,53,64,.65)}.sui-border-error\\\\/70{border-color:rgba(234,53,64,.7)}.sui-border-error\\\\/75{border-color:rgba(234,53,64,.75)}.sui-border-error\\\\/80{border-color:rgba(234,53,64,.8)}.sui-border-error\\\\/85{border-color:rgba(234,53,64,.85)}.sui-border-error\\\\/90{border-color:rgba(234,53,64,.9)}.sui-border-error\\\\/95{border-color:rgba(234,53,64,.95)}.sui-border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.sui-border-icon-black{--tw-border-opacity:1;border-color:rgb(35 38 47/var(--tw-border-opacity,1))}.sui-border-inactive{--tw-border-opacity:1;border-color:rgb(119 126 144/var(--tw-border-opacity,1))}.sui-border-inactive\\\\/0{border-color:rgba(119,126,144,0)}.sui-border-inactive\\\\/10{border-color:rgba(119,126,144,.1)}.sui-border-inactive\\\\/100{border-color:#777e90}.sui-border-inactive\\\\/15{border-color:rgba(119,126,144,.15)}.sui-border-inactive\\\\/20{border-color:rgba(119,126,144,.2)}.sui-border-inactive\\\\/25{border-color:rgba(119,126,144,.25)}.sui-border-inactive\\\\/30{border-color:rgba(119,126,144,.3)}.sui-border-inactive\\\\/35{border-color:rgba(119,126,144,.35)}.sui-border-inactive\\\\/40{border-color:rgba(119,126,144,.4)}.sui-border-inactive\\\\/45{border-color:rgba(119,126,144,.45)}.sui-border-inactive\\\\/5{border-color:rgba(119,126,144,.05)}.sui-border-inactive\\\\/50{border-color:rgba(119,126,144,.5)}.sui-border-inactive\\\\/55{border-color:rgba(119,126,144,.55)}.sui-border-inactive\\\\/60{border-color:rgba(119,126,144,.6)}.sui-border-inactive\\\\/65{border-color:rgba(119,126,144,.65)}.sui-border-inactive\\\\/70{border-color:rgba(119,126,144,.7)}.sui-border-inactive\\\\/75{border-color:rgba(119,126,144,.75)}.sui-border-inactive\\\\/80{border-color:rgba(119,126,144,.8)}.sui-border-inactive\\\\/85{border-color:rgba(119,126,144,.85)}.sui-border-inactive\\\\/90{border-color:rgba(119,126,144,.9)}.sui-border-inactive\\\\/95{border-color:rgba(119,126,144,.95)}.sui-border-info{--tw-border-opacity:1;border-color:rgb(39 114 240/var(--tw-border-opacity,1))}.sui-border-info\\\\/0{border-color:rgba(39,114,240,0)}.sui-border-info\\\\/10{border-color:rgba(39,114,240,.1)}.sui-border-info\\\\/100{border-color:#2772f0}.sui-border-info\\\\/15{border-color:rgba(39,114,240,.15)}.sui-border-info\\\\/20{border-color:rgba(39,114,240,.2)}.sui-border-info\\\\/25{border-color:rgba(39,114,240,.25)}.sui-border-info\\\\/30{border-color:rgba(39,114,240,.3)}.sui-border-info\\\\/35{border-color:rgba(39,114,240,.35)}.sui-border-info\\\\/40{border-color:rgba(39,114,240,.4)}.sui-border-info\\\\/45{border-color:rgba(39,114,240,.45)}.sui-border-info\\\\/5{border-color:rgba(39,114,240,.05)}.sui-border-info\\\\/50{border-color:rgba(39,114,240,.5)}.sui-border-info\\\\/55{border-color:rgba(39,114,240,.55)}.sui-border-info\\\\/60{border-color:rgba(39,114,240,.6)}.sui-border-info\\\\/65{border-color:rgba(39,114,240,.65)}.sui-border-info\\\\/70{border-color:rgba(39,114,240,.7)}.sui-border-info\\\\/75{border-color:rgba(39,114,240,.75)}.sui-border-info\\\\/80{border-color:rgba(39,114,240,.8)}.sui-border-info\\\\/85{border-color:rgba(39,114,240,.85)}.sui-border-info\\\\/90{border-color:rgba(39,114,240,.9)}.sui-border-info\\\\/95{border-color:rgba(39,114,240,.95)}.sui-border-primary{--tw-border-opacity:1;border-color:rgb(54 73 155/var(--tw-border-opacity,1))}.sui-border-primary-100{--tw-border-opacity:1;border-color:rgb(225 230 243/var(--tw-border-opacity,1))}.sui-border-primary-100\\\\/0{border-color:rgba(225,230,243,0)}.sui-border-primary-100\\\\/10{border-color:rgba(225,230,243,.1)}.sui-border-primary-100\\\\/100{border-color:#e1e6f3}.sui-border-primary-100\\\\/15{border-color:rgba(225,230,243,.15)}.sui-border-primary-100\\\\/20{border-color:rgba(225,230,243,.2)}.sui-border-primary-100\\\\/25{border-color:rgba(225,230,243,.25)}.sui-border-primary-100\\\\/30{border-color:rgba(225,230,243,.3)}.sui-border-primary-100\\\\/35{border-color:rgba(225,230,243,.35)}.sui-border-primary-100\\\\/40{border-color:rgba(225,230,243,.4)}.sui-border-primary-100\\\\/45{border-color:rgba(225,230,243,.45)}.sui-border-primary-100\\\\/5{border-color:rgba(225,230,243,.05)}.sui-border-primary-100\\\\/50{border-color:rgba(225,230,243,.5)}.sui-border-primary-100\\\\/55{border-color:rgba(225,230,243,.55)}.sui-border-primary-100\\\\/60{border-color:rgba(225,230,243,.6)}.sui-border-primary-100\\\\/65{border-color:rgba(225,230,243,.65)}.sui-border-primary-100\\\\/70{border-color:rgba(225,230,243,.7)}.sui-border-primary-100\\\\/75{border-color:rgba(225,230,243,.75)}.sui-border-primary-100\\\\/80{border-color:rgba(225,230,243,.8)}.sui-border-primary-100\\\\/85{border-color:rgba(225,230,243,.85)}.sui-border-primary-100\\\\/90{border-color:rgba(225,230,243,.9)}.sui-border-primary-100\\\\/95{border-color:rgba(225,230,243,.95)}.sui-border-primary-200{--tw-border-opacity:1;border-color:rgb(195 205 231/var(--tw-border-opacity,1))}.sui-border-primary-200\\\\/0{border-color:rgba(195,205,231,0)}.sui-border-primary-200\\\\/10{border-color:rgba(195,205,231,.1)}.sui-border-primary-200\\\\/100{border-color:#c3cde7}.sui-border-primary-200\\\\/15{border-color:rgba(195,205,231,.15)}.sui-border-primary-200\\\\/20{border-color:rgba(195,205,231,.2)}.sui-border-primary-200\\\\/25{border-color:rgba(195,205,231,.25)}.sui-border-primary-200\\\\/30{border-color:rgba(195,205,231,.3)}.sui-border-primary-200\\\\/35{border-color:rgba(195,205,231,.35)}.sui-border-primary-200\\\\/40{border-color:rgba(195,205,231,.4)}.sui-border-primary-200\\\\/45{border-color:rgba(195,205,231,.45)}.sui-border-primary-200\\\\/5{border-color:rgba(195,205,231,.05)}.sui-border-primary-200\\\\/50{border-color:rgba(195,205,231,.5)}.sui-border-primary-200\\\\/55{border-color:rgba(195,205,231,.55)}.sui-border-primary-200\\\\/60{border-color:rgba(195,205,231,.6)}.sui-border-primary-200\\\\/65{border-color:rgba(195,205,231,.65)}.sui-border-primary-200\\\\/70{border-color:rgba(195,205,231,.7)}.sui-border-primary-200\\\\/75{border-color:rgba(195,205,231,.75)}.sui-border-primary-200\\\\/80{border-color:rgba(195,205,231,.8)}.sui-border-primary-200\\\\/85{border-color:rgba(195,205,231,.85)}.sui-border-primary-200\\\\/90{border-color:rgba(195,205,231,.9)}.sui-border-primary-200\\\\/95{border-color:rgba(195,205,231,.95)}.sui-border-primary-300{--tw-border-opacity:1;border-color:rgb(165 180 219/var(--tw-border-opacity,1))}.sui-border-primary-300\\\\/0{border-color:rgba(165,180,219,0)}.sui-border-primary-300\\\\/10{border-color:rgba(165,180,219,.1)}.sui-border-primary-300\\\\/100{border-color:#a5b4db}.sui-border-primary-300\\\\/15{border-color:rgba(165,180,219,.15)}.sui-border-primary-300\\\\/20{border-color:rgba(165,180,219,.2)}.sui-border-primary-300\\\\/25{border-color:rgba(165,180,219,.25)}.sui-border-primary-300\\\\/30{border-color:rgba(165,180,219,.3)}.sui-border-primary-300\\\\/35{border-color:rgba(165,180,219,.35)}.sui-border-primary-300\\\\/40{border-color:rgba(165,180,219,.4)}.sui-border-primary-300\\\\/45{border-color:rgba(165,180,219,.45)}.sui-border-primary-300\\\\/5{border-color:rgba(165,180,219,.05)}.sui-border-primary-300\\\\/50{border-color:rgba(165,180,219,.5)}.sui-border-primary-300\\\\/55{border-color:rgba(165,180,219,.55)}.sui-border-primary-300\\\\/60{border-color:rgba(165,180,219,.6)}.sui-border-primary-300\\\\/65{border-color:rgba(165,180,219,.65)}.sui-border-primary-300\\\\/70{border-color:rgba(165,180,219,.7)}.sui-border-primary-300\\\\/75{border-color:rgba(165,180,219,.75)}.sui-border-primary-300\\\\/80{border-color:rgba(165,180,219,.8)}.sui-border-primary-300\\\\/85{border-color:rgba(165,180,219,.85)}.sui-border-primary-300\\\\/90{border-color:rgba(165,180,219,.9)}.sui-border-primary-300\\\\/95{border-color:rgba(165,180,219,.95)}.sui-border-primary-400{--tw-border-opacity:1;border-color:rgb(135 155 207/var(--tw-border-opacity,1))}.sui-border-primary-400\\\\/0{border-color:rgba(135,155,207,0)}.sui-border-primary-400\\\\/10{border-color:rgba(135,155,207,.1)}.sui-border-primary-400\\\\/100{border-color:#879bcf}.sui-border-primary-400\\\\/15{border-color:rgba(135,155,207,.15)}.sui-border-primary-400\\\\/20{border-color:rgba(135,155,207,.2)}.sui-border-primary-400\\\\/25{border-color:rgba(135,155,207,.25)}.sui-border-primary-400\\\\/30{border-color:rgba(135,155,207,.3)}.sui-border-primary-400\\\\/35{border-color:rgba(135,155,207,.35)}.sui-border-primary-400\\\\/40{border-color:rgba(135,155,207,.4)}.sui-border-primary-400\\\\/45{border-color:rgba(135,155,207,.45)}.sui-border-primary-400\\\\/5{border-color:rgba(135,155,207,.05)}.sui-border-primary-400\\\\/50{border-color:rgba(135,155,207,.5)}.sui-border-primary-400\\\\/55{border-color:rgba(135,155,207,.55)}.sui-border-primary-400\\\\/60{border-color:rgba(135,155,207,.6)}.sui-border-primary-400\\\\/65{border-color:rgba(135,155,207,.65)}.sui-border-primary-400\\\\/70{border-color:rgba(135,155,207,.7)}.sui-border-primary-400\\\\/75{border-color:rgba(135,155,207,.75)}.sui-border-primary-400\\\\/80{border-color:rgba(135,155,207,.8)}.sui-border-primary-400\\\\/85{border-color:rgba(135,155,207,.85)}.sui-border-primary-400\\\\/90{border-color:rgba(135,155,207,.9)}.sui-border-primary-400\\\\/95{border-color:rgba(135,155,207,.95)}.sui-border-primary-50{--tw-border-opacity:1;border-color:rgb(240 242 249/var(--tw-border-opacity,1))}.sui-border-primary-50\\\\/0{border-color:rgba(240,242,249,0)}.sui-border-primary-50\\\\/10{border-color:rgba(240,242,249,.1)}.sui-border-primary-50\\\\/100{border-color:#f0f2f9}.sui-border-primary-50\\\\/15{border-color:rgba(240,242,249,.15)}.sui-border-primary-50\\\\/20{border-color:rgba(240,242,249,.2)}.sui-border-primary-50\\\\/25{border-color:rgba(240,242,249,.25)}.sui-border-primary-50\\\\/30{border-color:rgba(240,242,249,.3)}.sui-border-primary-50\\\\/35{border-color:rgba(240,242,249,.35)}.sui-border-primary-50\\\\/40{border-color:rgba(240,242,249,.4)}.sui-border-primary-50\\\\/45{border-color:rgba(240,242,249,.45)}.sui-border-primary-50\\\\/5{border-color:rgba(240,242,249,.05)}.sui-border-primary-50\\\\/50{border-color:rgba(240,242,249,.5)}.sui-border-primary-50\\\\/55{border-color:rgba(240,242,249,.55)}.sui-border-primary-50\\\\/60{border-color:rgba(240,242,249,.6)}.sui-border-primary-50\\\\/65{border-color:rgba(240,242,249,.65)}.sui-border-primary-50\\\\/70{border-color:rgba(240,242,249,.7)}.sui-border-primary-50\\\\/75{border-color:rgba(240,242,249,.75)}.sui-border-primary-50\\\\/80{border-color:rgba(240,242,249,.8)}.sui-border-primary-50\\\\/85{border-color:rgba(240,242,249,.85)}.sui-border-primary-50\\\\/90{border-color:rgba(240,242,249,.9)}.sui-border-primary-50\\\\/95{border-color:rgba(240,242,249,.95)}.sui-border-primary-500{--tw-border-opacity:1;border-color:rgb(54 73 155/var(--tw-border-opacity,1))}.sui-border-primary-500\\\\/0{border-color:rgba(54,73,155,0)}.sui-border-primary-500\\\\/10{border-color:rgba(54,73,155,.1)}.sui-border-primary-500\\\\/100{border-color:#36499b}.sui-border-primary-500\\\\/15{border-color:rgba(54,73,155,.15)}.sui-border-primary-500\\\\/20{border-color:rgba(54,73,155,.2)}.sui-border-primary-500\\\\/25{border-color:rgba(54,73,155,.25)}.sui-border-primary-500\\\\/30{border-color:rgba(54,73,155,.3)}.sui-border-primary-500\\\\/35{border-color:rgba(54,73,155,.35)}.sui-border-primary-500\\\\/40{border-color:rgba(54,73,155,.4)}.sui-border-primary-500\\\\/45{border-color:rgba(54,73,155,.45)}.sui-border-primary-500\\\\/5{border-color:rgba(54,73,155,.05)}.sui-border-primary-500\\\\/50{border-color:rgba(54,73,155,.5)}.sui-border-primary-500\\\\/55{border-color:rgba(54,73,155,.55)}.sui-border-primary-500\\\\/60{border-color:rgba(54,73,155,.6)}.sui-border-primary-500\\\\/65{border-color:rgba(54,73,155,.65)}.sui-border-primary-500\\\\/70{border-color:rgba(54,73,155,.7)}.sui-border-primary-500\\\\/75{border-color:rgba(54,73,155,.75)}.sui-border-primary-500\\\\/80{border-color:rgba(54,73,155,.8)}.sui-border-primary-500\\\\/85{border-color:rgba(54,73,155,.85)}.sui-border-primary-500\\\\/90{border-color:rgba(54,73,155,.9)}.sui-border-primary-500\\\\/95{border-color:rgba(54,73,155,.95)}.sui-border-primary-600{--tw-border-opacity:1;border-color:rgb(43 58 124/var(--tw-border-opacity,1))}.sui-border-primary-600\\\\/0{border-color:rgba(43,58,124,0)}.sui-border-primary-600\\\\/10{border-color:rgba(43,58,124,.1)}.sui-border-primary-600\\\\/100{border-color:#2b3a7c}.sui-border-primary-600\\\\/15{border-color:rgba(43,58,124,.15)}.sui-border-primary-600\\\\/20{border-color:rgba(43,58,124,.2)}.sui-border-primary-600\\\\/25{border-color:rgba(43,58,124,.25)}.sui-border-primary-600\\\\/30{border-color:rgba(43,58,124,.3)}.sui-border-primary-600\\\\/35{border-color:rgba(43,58,124,.35)}.sui-border-primary-600\\\\/40{border-color:rgba(43,58,124,.4)}.sui-border-primary-600\\\\/45{border-color:rgba(43,58,124,.45)}.sui-border-primary-600\\\\/5{border-color:rgba(43,58,124,.05)}.sui-border-primary-600\\\\/50{border-color:rgba(43,58,124,.5)}.sui-border-primary-600\\\\/55{border-color:rgba(43,58,124,.55)}.sui-border-primary-600\\\\/60{border-color:rgba(43,58,124,.6)}.sui-border-primary-600\\\\/65{border-color:rgba(43,58,124,.65)}.sui-border-primary-600\\\\/70{border-color:rgba(43,58,124,.7)}.sui-border-primary-600\\\\/75{border-color:rgba(43,58,124,.75)}.sui-border-primary-600\\\\/80{border-color:rgba(43,58,124,.8)}.sui-border-primary-600\\\\/85{border-color:rgba(43,58,124,.85)}.sui-border-primary-600\\\\/90{border-color:rgba(43,58,124,.9)}.sui-border-primary-600\\\\/95{border-color:rgba(43,58,124,.95)}.sui-border-primary-700{--tw-border-opacity:1;border-color:rgb(32 43 93/var(--tw-border-opacity,1))}.sui-border-primary-700\\\\/0{border-color:rgba(32,43,93,0)}.sui-border-primary-700\\\\/10{border-color:rgba(32,43,93,.1)}.sui-border-primary-700\\\\/100{border-color:#202b5d}.sui-border-primary-700\\\\/15{border-color:rgba(32,43,93,.15)}.sui-border-primary-700\\\\/20{border-color:rgba(32,43,93,.2)}.sui-border-primary-700\\\\/25{border-color:rgba(32,43,93,.25)}.sui-border-primary-700\\\\/30{border-color:rgba(32,43,93,.3)}.sui-border-primary-700\\\\/35{border-color:rgba(32,43,93,.35)}.sui-border-primary-700\\\\/40{border-color:rgba(32,43,93,.4)}.sui-border-primary-700\\\\/45{border-color:rgba(32,43,93,.45)}.sui-border-primary-700\\\\/5{border-color:rgba(32,43,93,.05)}.sui-border-primary-700\\\\/50{border-color:rgba(32,43,93,.5)}.sui-border-primary-700\\\\/55{border-color:rgba(32,43,93,.55)}.sui-border-primary-700\\\\/60{border-color:rgba(32,43,93,.6)}.sui-border-primary-700\\\\/65{border-color:rgba(32,43,93,.65)}.sui-border-primary-700\\\\/70{border-color:rgba(32,43,93,.7)}.sui-border-primary-700\\\\/75{border-color:rgba(32,43,93,.75)}.sui-border-primary-700\\\\/80{border-color:rgba(32,43,93,.8)}.sui-border-primary-700\\\\/85{border-color:rgba(32,43,93,.85)}.sui-border-primary-700\\\\/90{border-color:rgba(32,43,93,.9)}.sui-border-primary-700\\\\/95{border-color:rgba(32,43,93,.95)}.sui-border-primary-800{--tw-border-opacity:1;border-color:rgb(22 29 62/var(--tw-border-opacity,1))}.sui-border-primary-800\\\\/0{border-color:rgba(22,29,62,0)}.sui-border-primary-800\\\\/10{border-color:rgba(22,29,62,.1)}.sui-border-primary-800\\\\/100{border-color:#161d3e}.sui-border-primary-800\\\\/15{border-color:rgba(22,29,62,.15)}.sui-border-primary-800\\\\/20{border-color:rgba(22,29,62,.2)}.sui-border-primary-800\\\\/25{border-color:rgba(22,29,62,.25)}.sui-border-primary-800\\\\/30{border-color:rgba(22,29,62,.3)}.sui-border-primary-800\\\\/35{border-color:rgba(22,29,62,.35)}.sui-border-primary-800\\\\/40{border-color:rgba(22,29,62,.4)}.sui-border-primary-800\\\\/45{border-color:rgba(22,29,62,.45)}.sui-border-primary-800\\\\/5{border-color:rgba(22,29,62,.05)}.sui-border-primary-800\\\\/50{border-color:rgba(22,29,62,.5)}.sui-border-primary-800\\\\/55{border-color:rgba(22,29,62,.55)}.sui-border-primary-800\\\\/60{border-color:rgba(22,29,62,.6)}.sui-border-primary-800\\\\/65{border-color:rgba(22,29,62,.65)}.sui-border-primary-800\\\\/70{border-color:rgba(22,29,62,.7)}.sui-border-primary-800\\\\/75{border-color:rgba(22,29,62,.75)}.sui-border-primary-800\\\\/80{border-color:rgba(22,29,62,.8)}.sui-border-primary-800\\\\/85{border-color:rgba(22,29,62,.85)}.sui-border-primary-800\\\\/90{border-color:rgba(22,29,62,.9)}.sui-border-primary-800\\\\/95{border-color:rgba(22,29,62,.95)}.sui-border-primary-900{--tw-border-opacity:1;border-color:rgb(11 14 31/var(--tw-border-opacity,1))}.sui-border-primary-900\\\\/0{border-color:rgba(11,14,31,0)}.sui-border-primary-900\\\\/10{border-color:rgba(11,14,31,.1)}.sui-border-primary-900\\\\/100{border-color:#0b0e1f}.sui-border-primary-900\\\\/15{border-color:rgba(11,14,31,.15)}.sui-border-primary-900\\\\/20{border-color:rgba(11,14,31,.2)}.sui-border-primary-900\\\\/25{border-color:rgba(11,14,31,.25)}.sui-border-primary-900\\\\/30{border-color:rgba(11,14,31,.3)}.sui-border-primary-900\\\\/35{border-color:rgba(11,14,31,.35)}.sui-border-primary-900\\\\/40{border-color:rgba(11,14,31,.4)}.sui-border-primary-900\\\\/45{border-color:rgba(11,14,31,.45)}.sui-border-primary-900\\\\/5{border-color:rgba(11,14,31,.05)}.sui-border-primary-900\\\\/50{border-color:rgba(11,14,31,.5)}.sui-border-primary-900\\\\/55{border-color:rgba(11,14,31,.55)}.sui-border-primary-900\\\\/60{border-color:rgba(11,14,31,.6)}.sui-border-primary-900\\\\/65{border-color:rgba(11,14,31,.65)}.sui-border-primary-900\\\\/70{border-color:rgba(11,14,31,.7)}.sui-border-primary-900\\\\/75{border-color:rgba(11,14,31,.75)}.sui-border-primary-900\\\\/80{border-color:rgba(11,14,31,.8)}.sui-border-primary-900\\\\/85{border-color:rgba(11,14,31,.85)}.sui-border-primary-900\\\\/90{border-color:rgba(11,14,31,.9)}.sui-border-primary-900\\\\/95{border-color:rgba(11,14,31,.95)}.sui-border-primary\\\\/0{border-color:rgba(54,73,155,0)}.sui-border-primary\\\\/10{border-color:rgba(54,73,155,.1)}.sui-border-primary\\\\/100{border-color:#36499b}.sui-border-primary\\\\/15{border-color:rgba(54,73,155,.15)}.sui-border-primary\\\\/20{border-color:rgba(54,73,155,.2)}.sui-border-primary\\\\/25{border-color:rgba(54,73,155,.25)}.sui-border-primary\\\\/30{border-color:rgba(54,73,155,.3)}.sui-border-primary\\\\/35{border-color:rgba(54,73,155,.35)}.sui-border-primary\\\\/40{border-color:rgba(54,73,155,.4)}.sui-border-primary\\\\/45{border-color:rgba(54,73,155,.45)}.sui-border-primary\\\\/5{border-color:rgba(54,73,155,.05)}.sui-border-primary\\\\/50{border-color:rgba(54,73,155,.5)}.sui-border-primary\\\\/55{border-color:rgba(54,73,155,.55)}.sui-border-primary\\\\/60{border-color:rgba(54,73,155,.6)}.sui-border-primary\\\\/65{border-color:rgba(54,73,155,.65)}.sui-border-primary\\\\/70{border-color:rgba(54,73,155,.7)}.sui-border-primary\\\\/75{border-color:rgba(54,73,155,.75)}.sui-border-primary\\\\/80{border-color:rgba(54,73,155,.8)}.sui-border-primary\\\\/85{border-color:rgba(54,73,155,.85)}.sui-border-primary\\\\/90{border-color:rgba(54,73,155,.9)}.sui-border-primary\\\\/95{border-color:rgba(54,73,155,.95)}.sui-border-secondary{--tw-border-opacity:1;border-color:rgb(242 246 252/var(--tw-border-opacity,1))}.sui-border-secondary-1{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity,1))}.sui-border-secondary-1\\\\/0{border-color:hsla(0,0%,100%,0)}.sui-border-secondary-1\\\\/10{border-color:hsla(0,0%,100%,.1)}.sui-border-secondary-1\\\\/100{border-color:#fff}.sui-border-secondary-1\\\\/15{border-color:hsla(0,0%,100%,.15)}.sui-border-secondary-1\\\\/20{border-color:hsla(0,0%,100%,.2)}.sui-border-secondary-1\\\\/25{border-color:hsla(0,0%,100%,.25)}.sui-border-secondary-1\\\\/30{border-color:hsla(0,0%,100%,.3)}.sui-border-secondary-1\\\\/35{border-color:hsla(0,0%,100%,.35)}.sui-border-secondary-1\\\\/40{border-color:hsla(0,0%,100%,.4)}.sui-border-secondary-1\\\\/45{border-color:hsla(0,0%,100%,.45)}.sui-border-secondary-1\\\\/5{border-color:hsla(0,0%,100%,.05)}.sui-border-secondary-1\\\\/50{border-color:hsla(0,0%,100%,.5)}.sui-border-secondary-1\\\\/55{border-color:hsla(0,0%,100%,.55)}.sui-border-secondary-1\\\\/60{border-color:hsla(0,0%,100%,.6)}.sui-border-secondary-1\\\\/65{border-color:hsla(0,0%,100%,.65)}.sui-border-secondary-1\\\\/70{border-color:hsla(0,0%,100%,.7)}.sui-border-secondary-1\\\\/75{border-color:hsla(0,0%,100%,.75)}.sui-border-secondary-1\\\\/80{border-color:hsla(0,0%,100%,.8)}.sui-border-secondary-1\\\\/85{border-color:hsla(0,0%,100%,.85)}.sui-border-secondary-1\\\\/90{border-color:hsla(0,0%,100%,.9)}.sui-border-secondary-1\\\\/95{border-color:hsla(0,0%,100%,.95)}.sui-border-secondary-2{--tw-border-opacity:1;border-color:rgb(225 234 248/var(--tw-border-opacity,1))}.sui-border-secondary-2\\\\/0{border-color:rgba(225,234,248,0)}.sui-border-secondary-2\\\\/10{border-color:rgba(225,234,248,.1)}.sui-border-secondary-2\\\\/100{border-color:#e1eaf8}.sui-border-secondary-2\\\\/15{border-color:rgba(225,234,248,.15)}.sui-border-secondary-2\\\\/20{border-color:rgba(225,234,248,.2)}.sui-border-secondary-2\\\\/25{border-color:rgba(225,234,248,.25)}.sui-border-secondary-2\\\\/30{border-color:rgba(225,234,248,.3)}.sui-border-secondary-2\\\\/35{border-color:rgba(225,234,248,.35)}.sui-border-secondary-2\\\\/40{border-color:rgba(225,234,248,.4)}.sui-border-secondary-2\\\\/45{border-color:rgba(225,234,248,.45)}.sui-border-secondary-2\\\\/5{border-color:rgba(225,234,248,.05)}.sui-border-secondary-2\\\\/50{border-color:rgba(225,234,248,.5)}.sui-border-secondary-2\\\\/55{border-color:rgba(225,234,248,.55)}.sui-border-secondary-2\\\\/60{border-color:rgba(225,234,248,.6)}.sui-border-secondary-2\\\\/65{border-color:rgba(225,234,248,.65)}.sui-border-secondary-2\\\\/70{border-color:rgba(225,234,248,.7)}.sui-border-secondary-2\\\\/75{border-color:rgba(225,234,248,.75)}.sui-border-secondary-2\\\\/80{border-color:rgba(225,234,248,.8)}.sui-border-secondary-2\\\\/85{border-color:rgba(225,234,248,.85)}.sui-border-secondary-2\\\\/90{border-color:rgba(225,234,248,.9)}.sui-border-secondary-2\\\\/95{border-color:rgba(225,234,248,.95)}.sui-border-secondary-3{--tw-border-opacity:1;border-color:rgb(201 218 244/var(--tw-border-opacity,1))}.sui-border-secondary-3\\\\/0{border-color:rgba(201,218,244,0)}.sui-border-secondary-3\\\\/10{border-color:rgba(201,218,244,.1)}.sui-border-secondary-3\\\\/100{border-color:#c9daf4}.sui-border-secondary-3\\\\/15{border-color:rgba(201,218,244,.15)}.sui-border-secondary-3\\\\/20{border-color:rgba(201,218,244,.2)}.sui-border-secondary-3\\\\/25{border-color:rgba(201,218,244,.25)}.sui-border-secondary-3\\\\/30{border-color:rgba(201,218,244,.3)}.sui-border-secondary-3\\\\/35{border-color:rgba(201,218,244,.35)}.sui-border-secondary-3\\\\/40{border-color:rgba(201,218,244,.4)}.sui-border-secondary-3\\\\/45{border-color:rgba(201,218,244,.45)}.sui-border-secondary-3\\\\/5{border-color:rgba(201,218,244,.05)}.sui-border-secondary-3\\\\/50{border-color:rgba(201,218,244,.5)}.sui-border-secondary-3\\\\/55{border-color:rgba(201,218,244,.55)}.sui-border-secondary-3\\\\/60{border-color:rgba(201,218,244,.6)}.sui-border-secondary-3\\\\/65{border-color:rgba(201,218,244,.65)}.sui-border-secondary-3\\\\/70{border-color:rgba(201,218,244,.7)}.sui-border-secondary-3\\\\/75{border-color:rgba(201,218,244,.75)}.sui-border-secondary-3\\\\/80{border-color:rgba(201,218,244,.8)}.sui-border-secondary-3\\\\/85{border-color:rgba(201,218,244,.85)}.sui-border-secondary-3\\\\/90{border-color:rgba(201,218,244,.9)}.sui-border-secondary-3\\\\/95{border-color:rgba(201,218,244,.95)}.sui-border-secondary\\\\/0{border-color:rgba(242,246,252,0)}.sui-border-secondary\\\\/10{border-color:rgba(242,246,252,.1)}.sui-border-secondary\\\\/100{border-color:#f2f6fc}.sui-border-secondary\\\\/15{border-color:rgba(242,246,252,.15)}.sui-border-secondary\\\\/20{border-color:rgba(242,246,252,.2)}.sui-border-secondary\\\\/25{border-color:rgba(242,246,252,.25)}.sui-border-secondary\\\\/30{border-color:rgba(242,246,252,.3)}.sui-border-secondary\\\\/35{border-color:rgba(242,246,252,.35)}.sui-border-secondary\\\\/40{border-color:rgba(242,246,252,.4)}.sui-border-secondary\\\\/45{border-color:rgba(242,246,252,.45)}.sui-border-secondary\\\\/5{border-color:rgba(242,246,252,.05)}.sui-border-secondary\\\\/50{border-color:rgba(242,246,252,.5)}.sui-border-secondary\\\\/55{border-color:rgba(242,246,252,.55)}.sui-border-secondary\\\\/60{border-color:rgba(242,246,252,.6)}.sui-border-secondary\\\\/65{border-color:rgba(242,246,252,.65)}.sui-border-secondary\\\\/70{border-color:rgba(242,246,252,.7)}.sui-border-secondary\\\\/75{border-color:rgba(242,246,252,.75)}.sui-border-secondary\\\\/80{border-color:rgba(242,246,252,.8)}.sui-border-secondary\\\\/85{border-color:rgba(242,246,252,.85)}.sui-border-secondary\\\\/90{border-color:rgba(242,246,252,.9)}.sui-border-secondary\\\\/95{border-color:rgba(242,246,252,.95)}.sui-border-stroke-brand{--tw-border-opacity:1;border-color:rgb(54 73 155/var(--tw-border-opacity,1))}.sui-border-stroke-level2{--tw-border-opacity:1;border-color:rgb(178 187 199/var(--tw-border-opacity,1))}.sui-border-stroke-level3{--tw-border-opacity:1;border-color:rgb(222 227 231/var(--tw-border-opacity,1))}.sui-border-success{--tw-border-opacity:1;border-color:rgb(34 188 77/var(--tw-border-opacity,1))}.sui-border-success\\\\/0{border-color:rgba(34,188,77,0)}.sui-border-success\\\\/10{border-color:rgba(34,188,77,.1)}.sui-border-success\\\\/100{border-color:#22bc4d}.sui-border-success\\\\/15{border-color:rgba(34,188,77,.15)}.sui-border-success\\\\/20{border-color:rgba(34,188,77,.2)}.sui-border-success\\\\/25{border-color:rgba(34,188,77,.25)}.sui-border-success\\\\/30{border-color:rgba(34,188,77,.3)}.sui-border-success\\\\/35{border-color:rgba(34,188,77,.35)}.sui-border-success\\\\/40{border-color:rgba(34,188,77,.4)}.sui-border-success\\\\/45{border-color:rgba(34,188,77,.45)}.sui-border-success\\\\/5{border-color:rgba(34,188,77,.05)}.sui-border-success\\\\/50{border-color:rgba(34,188,77,.5)}.sui-border-success\\\\/55{border-color:rgba(34,188,77,.55)}.sui-border-success\\\\/60{border-color:rgba(34,188,77,.6)}.sui-border-success\\\\/65{border-color:rgba(34,188,77,.65)}.sui-border-success\\\\/70{border-color:rgba(34,188,77,.7)}.sui-border-success\\\\/75{border-color:rgba(34,188,77,.75)}.sui-border-success\\\\/80{border-color:rgba(34,188,77,.8)}.sui-border-success\\\\/85{border-color:rgba(34,188,77,.85)}.sui-border-success\\\\/90{border-color:rgba(34,188,77,.9)}.sui-border-success\\\\/95{border-color:rgba(34,188,77,.95)}.sui-border-warning{--tw-border-opacity:1;border-color:rgb(255 122 0/var(--tw-border-opacity,1))}.sui-border-warning\\\\/0{border-color:rgba(255,122,0,0)}.sui-border-warning\\\\/10{border-color:rgba(255,122,0,.1)}.sui-border-warning\\\\/100{border-color:#ff7a00}.sui-border-warning\\\\/15{border-color:rgba(255,122,0,.15)}.sui-border-warning\\\\/20{border-color:rgba(255,122,0,.2)}.sui-border-warning\\\\/25{border-color:rgba(255,122,0,.25)}.sui-border-warning\\\\/30{border-color:rgba(255,122,0,.3)}.sui-border-warning\\\\/35{border-color:rgba(255,122,0,.35)}.sui-border-warning\\\\/40{border-color:rgba(255,122,0,.4)}.sui-border-warning\\\\/45{border-color:rgba(255,122,0,.45)}.sui-border-warning\\\\/5{border-color:rgba(255,122,0,.05)}.sui-border-warning\\\\/50{border-color:rgba(255,122,0,.5)}.sui-border-warning\\\\/55{border-color:rgba(255,122,0,.55)}.sui-border-warning\\\\/60{border-color:rgba(255,122,0,.6)}.sui-border-warning\\\\/65{border-color:rgba(255,122,0,.65)}.sui-border-warning\\\\/70{border-color:rgba(255,122,0,.7)}.sui-border-warning\\\\/75{border-color:rgba(255,122,0,.75)}.sui-border-warning\\\\/80{border-color:rgba(255,122,0,.8)}.sui-border-warning\\\\/85{border-color:rgba(255,122,0,.85)}.sui-border-warning\\\\/90{border-color:rgba(255,122,0,.9)}.sui-border-warning\\\\/95{border-color:rgba(255,122,0,.95)}.sui-bg-\\\\[\\\\#DAECFF\\\\]{--tw-bg-opacity:1;background-color:rgb(218 236 255/var(--tw-bg-opacity,1))}.sui-bg-\\\\[\\\\#DCFCE4\\\\]{--tw-bg-opacity:1;background-color:rgb(220 252 228/var(--tw-bg-opacity,1))}.sui-bg-\\\\[\\\\#FDE3E5\\\\]{--tw-bg-opacity:1;background-color:rgb(253 227 229/var(--tw-bg-opacity,1))}.sui-bg-\\\\[\\\\#FFF3D3\\\\]{--tw-bg-opacity:1;background-color:rgb(255 243 211/var(--tw-bg-opacity,1))}.sui-bg-background-default,.sui-bg-background-primary{--tw-bg-opacity:1;background-color:rgb(242 246 252/var(--tw-bg-opacity,1))}.sui-bg-background-secondary1{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.sui-bg-background-secondary2{--tw-bg-opacity:1;background-color:rgb(225 234 248/var(--tw-bg-opacity,1))}.sui-bg-black{--tw-bg-opacity:1;background-color:rgb(35 38 47/var(--tw-bg-opacity,1))}.sui-bg-black\\\\/10{background-color:rgba(35,38,47,.1)}.sui-bg-black\\\\/50{background-color:rgba(35,38,47,.5)}.sui-bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.sui-bg-disabled{--tw-bg-opacity:1;background-color:rgb(178 187 199/var(--tw-bg-opacity,1))}.sui-bg-disabled\\\\/0{background-color:rgba(178,187,199,0)}.sui-bg-disabled\\\\/10{background-color:rgba(178,187,199,.1)}.sui-bg-disabled\\\\/100{background-color:#b2bbc7}.sui-bg-disabled\\\\/15{background-color:rgba(178,187,199,.15)}.sui-bg-disabled\\\\/20{background-color:rgba(178,187,199,.2)}.sui-bg-disabled\\\\/25{background-color:rgba(178,187,199,.25)}.sui-bg-disabled\\\\/30{background-color:rgba(178,187,199,.3)}.sui-bg-disabled\\\\/35{background-color:rgba(178,187,199,.35)}.sui-bg-disabled\\\\/40{background-color:rgba(178,187,199,.4)}.sui-bg-disabled\\\\/45{background-color:rgba(178,187,199,.45)}.sui-bg-disabled\\\\/5{background-color:rgba(178,187,199,.05)}.sui-bg-disabled\\\\/50{background-color:rgba(178,187,199,.5)}.sui-bg-disabled\\\\/55{background-color:rgba(178,187,199,.55)}.sui-bg-disabled\\\\/60{background-color:rgba(178,187,199,.6)}.sui-bg-disabled\\\\/65{background-color:rgba(178,187,199,.65)}.sui-bg-disabled\\\\/70{background-color:rgba(178,187,199,.7)}.sui-bg-disabled\\\\/75{background-color:rgba(178,187,199,.75)}.sui-bg-disabled\\\\/80{background-color:rgba(178,187,199,.8)}.sui-bg-disabled\\\\/85{background-color:rgba(178,187,199,.85)}.sui-bg-disabled\\\\/90{background-color:rgba(178,187,199,.9)}.sui-bg-disabled\\\\/95{background-color:rgba(178,187,199,.95)}.sui-bg-error{--tw-bg-opacity:1;background-color:rgb(234 53 64/var(--tw-bg-opacity,1))}.sui-bg-error\\\\/0{background-color:rgba(234,53,64,0)}.sui-bg-error\\\\/10{background-color:rgba(234,53,64,.1)}.sui-bg-error\\\\/100{background-color:#ea3540}.sui-bg-error\\\\/15{background-color:rgba(234,53,64,.15)}.sui-bg-error\\\\/20{background-color:rgba(234,53,64,.2)}.sui-bg-error\\\\/25{background-color:rgba(234,53,64,.25)}.sui-bg-error\\\\/30{background-color:rgba(234,53,64,.3)}.sui-bg-error\\\\/35{background-color:rgba(234,53,64,.35)}.sui-bg-error\\\\/40{background-color:rgba(234,53,64,.4)}.sui-bg-error\\\\/45{background-color:rgba(234,53,64,.45)}.sui-bg-error\\\\/5{background-color:rgba(234,53,64,.05)}.sui-bg-error\\\\/50{background-color:rgba(234,53,64,.5)}.sui-bg-error\\\\/55{background-color:rgba(234,53,64,.55)}.sui-bg-error\\\\/60{background-color:rgba(234,53,64,.6)}.sui-bg-error\\\\/65{background-color:rgba(234,53,64,.65)}.sui-bg-error\\\\/70{background-color:rgba(234,53,64,.7)}.sui-bg-error\\\\/75{background-color:rgba(234,53,64,.75)}.sui-bg-error\\\\/80{background-color:rgba(234,53,64,.8)}.sui-bg-error\\\\/85{background-color:rgba(234,53,64,.85)}.sui-bg-error\\\\/90{background-color:rgba(234,53,64,.9)}.sui-bg-error\\\\/95{background-color:rgba(234,53,64,.95)}.sui-bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.sui-bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.sui-bg-inactive{--tw-bg-opacity:1;background-color:rgb(119 126 144/var(--tw-bg-opacity,1))}.sui-bg-inactive\\\\/0{background-color:rgba(119,126,144,0)}.sui-bg-inactive\\\\/10{background-color:rgba(119,126,144,.1)}.sui-bg-inactive\\\\/100{background-color:#777e90}.sui-bg-inactive\\\\/15{background-color:rgba(119,126,144,.15)}.sui-bg-inactive\\\\/20{background-color:rgba(119,126,144,.2)}.sui-bg-inactive\\\\/25{background-color:rgba(119,126,144,.25)}.sui-bg-inactive\\\\/30{background-color:rgba(119,126,144,.3)}.sui-bg-inactive\\\\/35{background-color:rgba(119,126,144,.35)}.sui-bg-inactive\\\\/40{background-color:rgba(119,126,144,.4)}.sui-bg-inactive\\\\/45{background-color:rgba(119,126,144,.45)}.sui-bg-inactive\\\\/5{background-color:rgba(119,126,144,.05)}.sui-bg-inactive\\\\/50{background-color:rgba(119,126,144,.5)}.sui-bg-inactive\\\\/55{background-color:rgba(119,126,144,.55)}.sui-bg-inactive\\\\/60{background-color:rgba(119,126,144,.6)}.sui-bg-inactive\\\\/65{background-color:rgba(119,126,144,.65)}.sui-bg-inactive\\\\/70{background-color:rgba(119,126,144,.7)}.sui-bg-inactive\\\\/75{background-color:rgba(119,126,144,.75)}.sui-bg-inactive\\\\/80{background-color:rgba(119,126,144,.8)}.sui-bg-inactive\\\\/85{background-color:rgba(119,126,144,.85)}.sui-bg-inactive\\\\/90{background-color:rgba(119,126,144,.9)}.sui-bg-inactive\\\\/95{background-color:rgba(119,126,144,.95)}.sui-bg-info{--tw-bg-opacity:1;background-color:rgb(39 114 240/var(--tw-bg-opacity,1))}.sui-bg-info\\\\/0{background-color:rgba(39,114,240,0)}.sui-bg-info\\\\/10{background-color:rgba(39,114,240,.1)}.sui-bg-info\\\\/100{background-color:#2772f0}.sui-bg-info\\\\/15{background-color:rgba(39,114,240,.15)}.sui-bg-info\\\\/20{background-color:rgba(39,114,240,.2)}.sui-bg-info\\\\/25{background-color:rgba(39,114,240,.25)}.sui-bg-info\\\\/30{background-color:rgba(39,114,240,.3)}.sui-bg-info\\\\/35{background-color:rgba(39,114,240,.35)}.sui-bg-info\\\\/40{background-color:rgba(39,114,240,.4)}.sui-bg-info\\\\/45{background-color:rgba(39,114,240,.45)}.sui-bg-info\\\\/5{background-color:rgba(39,114,240,.05)}.sui-bg-info\\\\/50{background-color:rgba(39,114,240,.5)}.sui-bg-info\\\\/55{background-color:rgba(39,114,240,.55)}.sui-bg-info\\\\/60{background-color:rgba(39,114,240,.6)}.sui-bg-info\\\\/65{background-color:rgba(39,114,240,.65)}.sui-bg-info\\\\/70{background-color:rgba(39,114,240,.7)}.sui-bg-info\\\\/75{background-color:rgba(39,114,240,.75)}.sui-bg-info\\\\/80{background-color:rgba(39,114,240,.8)}.sui-bg-info\\\\/85{background-color:rgba(39,114,240,.85)}.sui-bg-info\\\\/90{background-color:rgba(39,114,240,.9)}.sui-bg-info\\\\/95{background-color:rgba(39,114,240,.95)}.sui-bg-primary{--tw-bg-opacity:1;background-color:rgb(54 73 155/var(--tw-bg-opacity,1))}.sui-bg-primary-100{--tw-bg-opacity:1;background-color:rgb(225 230 243/var(--tw-bg-opacity,1))}.sui-bg-primary-100\\\\/0{background-color:rgba(225,230,243,0)}.sui-bg-primary-100\\\\/10{background-color:rgba(225,230,243,.1)}.sui-bg-primary-100\\\\/100{background-color:#e1e6f3}.sui-bg-primary-100\\\\/15{background-color:rgba(225,230,243,.15)}.sui-bg-primary-100\\\\/20{background-color:rgba(225,230,243,.2)}.sui-bg-primary-100\\\\/25{background-color:rgba(225,230,243,.25)}.sui-bg-primary-100\\\\/30{background-color:rgba(225,230,243,.3)}.sui-bg-primary-100\\\\/35{background-color:rgba(225,230,243,.35)}.sui-bg-primary-100\\\\/40{background-color:rgba(225,230,243,.4)}.sui-bg-primary-100\\\\/45{background-color:rgba(225,230,243,.45)}.sui-bg-primary-100\\\\/5{background-color:rgba(225,230,243,.05)}.sui-bg-primary-100\\\\/50{background-color:rgba(225,230,243,.5)}.sui-bg-primary-100\\\\/55{background-color:rgba(225,230,243,.55)}.sui-bg-primary-100\\\\/60{background-color:rgba(225,230,243,.6)}.sui-bg-primary-100\\\\/65{background-color:rgba(225,230,243,.65)}.sui-bg-primary-100\\\\/70{background-color:rgba(225,230,243,.7)}.sui-bg-primary-100\\\\/75{background-color:rgba(225,230,243,.75)}.sui-bg-primary-100\\\\/80{background-color:rgba(225,230,243,.8)}.sui-bg-primary-100\\\\/85{background-color:rgba(225,230,243,.85)}.sui-bg-primary-100\\\\/90{background-color:rgba(225,230,243,.9)}.sui-bg-primary-100\\\\/95{background-color:rgba(225,230,243,.95)}.sui-bg-primary-200{--tw-bg-opacity:1;background-color:rgb(195 205 231/var(--tw-bg-opacity,1))}.sui-bg-primary-200\\\\/0{background-color:rgba(195,205,231,0)}.sui-bg-primary-200\\\\/10{background-color:rgba(195,205,231,.1)}.sui-bg-primary-200\\\\/100{background-color:#c3cde7}.sui-bg-primary-200\\\\/15{background-color:rgba(195,205,231,.15)}.sui-bg-primary-200\\\\/20{background-color:rgba(195,205,231,.2)}.sui-bg-primary-200\\\\/25{background-color:rgba(195,205,231,.25)}.sui-bg-primary-200\\\\/30{background-color:rgba(195,205,231,.3)}.sui-bg-primary-200\\\\/35{background-color:rgba(195,205,231,.35)}.sui-bg-primary-200\\\\/40{background-color:rgba(195,205,231,.4)}.sui-bg-primary-200\\\\/45{background-color:rgba(195,205,231,.45)}.sui-bg-primary-200\\\\/5{background-color:rgba(195,205,231,.05)}.sui-bg-primary-200\\\\/50{background-color:rgba(195,205,231,.5)}.sui-bg-primary-200\\\\/55{background-color:rgba(195,205,231,.55)}.sui-bg-primary-200\\\\/60{background-color:rgba(195,205,231,.6)}.sui-bg-primary-200\\\\/65{background-color:rgba(195,205,231,.65)}.sui-bg-primary-200\\\\/70{background-color:rgba(195,205,231,.7)}.sui-bg-primary-200\\\\/75{background-color:rgba(195,205,231,.75)}.sui-bg-primary-200\\\\/80{background-color:rgba(195,205,231,.8)}.sui-bg-primary-200\\\\/85{background-color:rgba(195,205,231,.85)}.sui-bg-primary-200\\\\/90{background-color:rgba(195,205,231,.9)}.sui-bg-primary-200\\\\/95{background-color:rgba(195,205,231,.95)}.sui-bg-primary-300{--tw-bg-opacity:1;background-color:rgb(165 180 219/var(--tw-bg-opacity,1))}.sui-bg-primary-300\\\\/0{background-color:rgba(165,180,219,0)}.sui-bg-primary-300\\\\/10{background-color:rgba(165,180,219,.1)}.sui-bg-primary-300\\\\/100{background-color:#a5b4db}.sui-bg-primary-300\\\\/15{background-color:rgba(165,180,219,.15)}.sui-bg-primary-300\\\\/20{background-color:rgba(165,180,219,.2)}.sui-bg-primary-300\\\\/25{background-color:rgba(165,180,219,.25)}.sui-bg-primary-300\\\\/30{background-color:rgba(165,180,219,.3)}.sui-bg-primary-300\\\\/35{background-color:rgba(165,180,219,.35)}.sui-bg-primary-300\\\\/40{background-color:rgba(165,180,219,.4)}.sui-bg-primary-300\\\\/45{background-color:rgba(165,180,219,.45)}.sui-bg-primary-300\\\\/5{background-color:rgba(165,180,219,.05)}.sui-bg-primary-300\\\\/50{background-color:rgba(165,180,219,.5)}.sui-bg-primary-300\\\\/55{background-color:rgba(165,180,219,.55)}.sui-bg-primary-300\\\\/60{background-color:rgba(165,180,219,.6)}.sui-bg-primary-300\\\\/65{background-color:rgba(165,180,219,.65)}.sui-bg-primary-300\\\\/70{background-color:rgba(165,180,219,.7)}.sui-bg-primary-300\\\\/75{background-color:rgba(165,180,219,.75)}.sui-bg-primary-300\\\\/80{background-color:rgba(165,180,219,.8)}.sui-bg-primary-300\\\\/85{background-color:rgba(165,180,219,.85)}.sui-bg-primary-300\\\\/90{background-color:rgba(165,180,219,.9)}.sui-bg-primary-300\\\\/95{background-color:rgba(165,180,219,.95)}.sui-bg-primary-400{--tw-bg-opacity:1;background-color:rgb(135 155 207/var(--tw-bg-opacity,1))}.sui-bg-primary-400\\\\/0{background-color:rgba(135,155,207,0)}.sui-bg-primary-400\\\\/10{background-color:rgba(135,155,207,.1)}.sui-bg-primary-400\\\\/100{background-color:#879bcf}.sui-bg-primary-400\\\\/15{background-color:rgba(135,155,207,.15)}.sui-bg-primary-400\\\\/20{background-color:rgba(135,155,207,.2)}.sui-bg-primary-400\\\\/25{background-color:rgba(135,155,207,.25)}.sui-bg-primary-400\\\\/30{background-color:rgba(135,155,207,.3)}.sui-bg-primary-400\\\\/35{background-color:rgba(135,155,207,.35)}.sui-bg-primary-400\\\\/40{background-color:rgba(135,155,207,.4)}.sui-bg-primary-400\\\\/45{background-color:rgba(135,155,207,.45)}.sui-bg-primary-400\\\\/5{background-color:rgba(135,155,207,.05)}.sui-bg-primary-400\\\\/50{background-color:rgba(135,155,207,.5)}.sui-bg-primary-400\\\\/55{background-color:rgba(135,155,207,.55)}.sui-bg-primary-400\\\\/60{background-color:rgba(135,155,207,.6)}.sui-bg-primary-400\\\\/65{background-color:rgba(135,155,207,.65)}.sui-bg-primary-400\\\\/70{background-color:rgba(135,155,207,.7)}.sui-bg-primary-400\\\\/75{background-color:rgba(135,155,207,.75)}.sui-bg-primary-400\\\\/80{background-color:rgba(135,155,207,.8)}.sui-bg-primary-400\\\\/85{background-color:rgba(135,155,207,.85)}.sui-bg-primary-400\\\\/90{background-color:rgba(135,155,207,.9)}.sui-bg-primary-400\\\\/95{background-color:rgba(135,155,207,.95)}.sui-bg-primary-50{--tw-bg-opacity:1;background-color:rgb(240 242 249/var(--tw-bg-opacity,1))}.sui-bg-primary-50\\\\/0{background-color:rgba(240,242,249,0)}.sui-bg-primary-50\\\\/10{background-color:rgba(240,242,249,.1)}.sui-bg-primary-50\\\\/100{background-color:#f0f2f9}.sui-bg-primary-50\\\\/15{background-color:rgba(240,242,249,.15)}.sui-bg-primary-50\\\\/20{background-color:rgba(240,242,249,.2)}.sui-bg-primary-50\\\\/25{background-color:rgba(240,242,249,.25)}.sui-bg-primary-50\\\\/30{background-color:rgba(240,242,249,.3)}.sui-bg-primary-50\\\\/35{background-color:rgba(240,242,249,.35)}.sui-bg-primary-50\\\\/40{background-color:rgba(240,242,249,.4)}.sui-bg-primary-50\\\\/45{background-color:rgba(240,242,249,.45)}.sui-bg-primary-50\\\\/5{background-color:rgba(240,242,249,.05)}.sui-bg-primary-50\\\\/50{background-color:rgba(240,242,249,.5)}.sui-bg-primary-50\\\\/55{background-color:rgba(240,242,249,.55)}.sui-bg-primary-50\\\\/60{background-color:rgba(240,242,249,.6)}.sui-bg-primary-50\\\\/65{background-color:rgba(240,242,249,.65)}.sui-bg-primary-50\\\\/70{background-color:rgba(240,242,249,.7)}.sui-bg-primary-50\\\\/75{background-color:rgba(240,242,249,.75)}.sui-bg-primary-50\\\\/80{background-color:rgba(240,242,249,.8)}.sui-bg-primary-50\\\\/85{background-color:rgba(240,242,249,.85)}.sui-bg-primary-50\\\\/90{background-color:rgba(240,242,249,.9)}.sui-bg-primary-50\\\\/95{background-color:rgba(240,242,249,.95)}.sui-bg-primary-500{--tw-bg-opacity:1;background-color:rgb(54 73 155/var(--tw-bg-opacity,1))}.sui-bg-primary-500\\\\/0{background-color:rgba(54,73,155,0)}.sui-bg-primary-500\\\\/10{background-color:rgba(54,73,155,.1)}.sui-bg-primary-500\\\\/100{background-color:#36499b}.sui-bg-primary-500\\\\/15{background-color:rgba(54,73,155,.15)}.sui-bg-primary-500\\\\/20{background-color:rgba(54,73,155,.2)}.sui-bg-primary-500\\\\/25{background-color:rgba(54,73,155,.25)}.sui-bg-primary-500\\\\/30{background-color:rgba(54,73,155,.3)}.sui-bg-primary-500\\\\/35{background-color:rgba(54,73,155,.35)}.sui-bg-primary-500\\\\/40{background-color:rgba(54,73,155,.4)}.sui-bg-primary-500\\\\/45{background-color:rgba(54,73,155,.45)}.sui-bg-primary-500\\\\/5{background-color:rgba(54,73,155,.05)}.sui-bg-primary-500\\\\/50{background-color:rgba(54,73,155,.5)}.sui-bg-primary-500\\\\/55{background-color:rgba(54,73,155,.55)}.sui-bg-primary-500\\\\/60{background-color:rgba(54,73,155,.6)}.sui-bg-primary-500\\\\/65{background-color:rgba(54,73,155,.65)}.sui-bg-primary-500\\\\/70{background-color:rgba(54,73,155,.7)}.sui-bg-primary-500\\\\/75{background-color:rgba(54,73,155,.75)}.sui-bg-primary-500\\\\/80{background-color:rgba(54,73,155,.8)}.sui-bg-primary-500\\\\/85{background-color:rgba(54,73,155,.85)}.sui-bg-primary-500\\\\/90{background-color:rgba(54,73,155,.9)}.sui-bg-primary-500\\\\/95{background-color:rgba(54,73,155,.95)}.sui-bg-primary-600{--tw-bg-opacity:1;background-color:rgb(43 58 124/var(--tw-bg-opacity,1))}.sui-bg-primary-600\\\\/0{background-color:rgba(43,58,124,0)}.sui-bg-primary-600\\\\/10{background-color:rgba(43,58,124,.1)}.sui-bg-primary-600\\\\/100{background-color:#2b3a7c}.sui-bg-primary-600\\\\/15{background-color:rgba(43,58,124,.15)}.sui-bg-primary-600\\\\/20{background-color:rgba(43,58,124,.2)}.sui-bg-primary-600\\\\/25{background-color:rgba(43,58,124,.25)}.sui-bg-primary-600\\\\/30{background-color:rgba(43,58,124,.3)}.sui-bg-primary-600\\\\/35{background-color:rgba(43,58,124,.35)}.sui-bg-primary-600\\\\/40{background-color:rgba(43,58,124,.4)}.sui-bg-primary-600\\\\/45{background-color:rgba(43,58,124,.45)}.sui-bg-primary-600\\\\/5{background-color:rgba(43,58,124,.05)}.sui-bg-primary-600\\\\/50{background-color:rgba(43,58,124,.5)}.sui-bg-primary-600\\\\/55{background-color:rgba(43,58,124,.55)}.sui-bg-primary-600\\\\/60{background-color:rgba(43,58,124,.6)}.sui-bg-primary-600\\\\/65{background-color:rgba(43,58,124,.65)}.sui-bg-primary-600\\\\/70{background-color:rgba(43,58,124,.7)}.sui-bg-primary-600\\\\/75{background-color:rgba(43,58,124,.75)}.sui-bg-primary-600\\\\/80{background-color:rgba(43,58,124,.8)}.sui-bg-primary-600\\\\/85{background-color:rgba(43,58,124,.85)}.sui-bg-primary-600\\\\/90{background-color:rgba(43,58,124,.9)}.sui-bg-primary-600\\\\/95{background-color:rgba(43,58,124,.95)}.sui-bg-primary-700{--tw-bg-opacity:1;background-color:rgb(32 43 93/var(--tw-bg-opacity,1))}.sui-bg-primary-700\\\\/0{background-color:rgba(32,43,93,0)}.sui-bg-primary-700\\\\/10{background-color:rgba(32,43,93,.1)}.sui-bg-primary-700\\\\/100{background-color:#202b5d}.sui-bg-primary-700\\\\/15{background-color:rgba(32,43,93,.15)}.sui-bg-primary-700\\\\/20{background-color:rgba(32,43,93,.2)}.sui-bg-primary-700\\\\/25{background-color:rgba(32,43,93,.25)}.sui-bg-primary-700\\\\/30{background-color:rgba(32,43,93,.3)}.sui-bg-primary-700\\\\/35{background-color:rgba(32,43,93,.35)}.sui-bg-primary-700\\\\/40{background-color:rgba(32,43,93,.4)}.sui-bg-primary-700\\\\/45{background-color:rgba(32,43,93,.45)}.sui-bg-primary-700\\\\/5{background-color:rgba(32,43,93,.05)}.sui-bg-primary-700\\\\/50{background-color:rgba(32,43,93,.5)}.sui-bg-primary-700\\\\/55{background-color:rgba(32,43,93,.55)}.sui-bg-primary-700\\\\/60{background-color:rgba(32,43,93,.6)}.sui-bg-primary-700\\\\/65{background-color:rgba(32,43,93,.65)}.sui-bg-primary-700\\\\/70{background-color:rgba(32,43,93,.7)}.sui-bg-primary-700\\\\/75{background-color:rgba(32,43,93,.75)}.sui-bg-primary-700\\\\/80{background-color:rgba(32,43,93,.8)}.sui-bg-primary-700\\\\/85{background-color:rgba(32,43,93,.85)}.sui-bg-primary-700\\\\/90{background-color:rgba(32,43,93,.9)}.sui-bg-primary-700\\\\/95{background-color:rgba(32,43,93,.95)}.sui-bg-primary-800{--tw-bg-opacity:1;background-color:rgb(22 29 62/var(--tw-bg-opacity,1))}.sui-bg-primary-800\\\\/0{background-color:rgba(22,29,62,0)}.sui-bg-primary-800\\\\/10{background-color:rgba(22,29,62,.1)}.sui-bg-primary-800\\\\/100{background-color:#161d3e}.sui-bg-primary-800\\\\/15{background-color:rgba(22,29,62,.15)}.sui-bg-primary-800\\\\/20{background-color:rgba(22,29,62,.2)}.sui-bg-primary-800\\\\/25{background-color:rgba(22,29,62,.25)}.sui-bg-primary-800\\\\/30{background-color:rgba(22,29,62,.3)}.sui-bg-primary-800\\\\/35{background-color:rgba(22,29,62,.35)}.sui-bg-primary-800\\\\/40{background-color:rgba(22,29,62,.4)}.sui-bg-primary-800\\\\/45{background-color:rgba(22,29,62,.45)}.sui-bg-primary-800\\\\/5{background-color:rgba(22,29,62,.05)}.sui-bg-primary-800\\\\/50{background-color:rgba(22,29,62,.5)}.sui-bg-primary-800\\\\/55{background-color:rgba(22,29,62,.55)}.sui-bg-primary-800\\\\/60{background-color:rgba(22,29,62,.6)}.sui-bg-primary-800\\\\/65{background-color:rgba(22,29,62,.65)}.sui-bg-primary-800\\\\/70{background-color:rgba(22,29,62,.7)}.sui-bg-primary-800\\\\/75{background-color:rgba(22,29,62,.75)}.sui-bg-primary-800\\\\/80{background-color:rgba(22,29,62,.8)}.sui-bg-primary-800\\\\/85{background-color:rgba(22,29,62,.85)}.sui-bg-primary-800\\\\/90{background-color:rgba(22,29,62,.9)}.sui-bg-primary-800\\\\/95{background-color:rgba(22,29,62,.95)}.sui-bg-primary-900{--tw-bg-opacity:1;background-color:rgb(11 14 31/var(--tw-bg-opacity,1))}.sui-bg-primary-900\\\\/0{background-color:rgba(11,14,31,0)}.sui-bg-primary-900\\\\/10{background-color:rgba(11,14,31,.1)}.sui-bg-primary-900\\\\/100{background-color:#0b0e1f}.sui-bg-primary-900\\\\/15{background-color:rgba(11,14,31,.15)}.sui-bg-primary-900\\\\/20{background-color:rgba(11,14,31,.2)}.sui-bg-primary-900\\\\/25{background-color:rgba(11,14,31,.25)}.sui-bg-primary-900\\\\/30{background-color:rgba(11,14,31,.3)}.sui-bg-primary-900\\\\/35{background-color:rgba(11,14,31,.35)}.sui-bg-primary-900\\\\/40{background-color:rgba(11,14,31,.4)}.sui-bg-primary-900\\\\/45{background-color:rgba(11,14,31,.45)}.sui-bg-primary-900\\\\/5{background-color:rgba(11,14,31,.05)}.sui-bg-primary-900\\\\/50{background-color:rgba(11,14,31,.5)}.sui-bg-primary-900\\\\/55{background-color:rgba(11,14,31,.55)}.sui-bg-primary-900\\\\/60{background-color:rgba(11,14,31,.6)}.sui-bg-primary-900\\\\/65{background-color:rgba(11,14,31,.65)}.sui-bg-primary-900\\\\/70{background-color:rgba(11,14,31,.7)}.sui-bg-primary-900\\\\/75{background-color:rgba(11,14,31,.75)}.sui-bg-primary-900\\\\/80{background-color:rgba(11,14,31,.8)}.sui-bg-primary-900\\\\/85{background-color:rgba(11,14,31,.85)}.sui-bg-primary-900\\\\/90{background-color:rgba(11,14,31,.9)}.sui-bg-primary-900\\\\/95{background-color:rgba(11,14,31,.95)}.sui-bg-primary\\\\/0{background-color:rgba(54,73,155,0)}.sui-bg-primary\\\\/10{background-color:rgba(54,73,155,.1)}.sui-bg-primary\\\\/100{background-color:#36499b}.sui-bg-primary\\\\/15{background-color:rgba(54,73,155,.15)}.sui-bg-primary\\\\/20{background-color:rgba(54,73,155,.2)}.sui-bg-primary\\\\/25{background-color:rgba(54,73,155,.25)}.sui-bg-primary\\\\/30{background-color:rgba(54,73,155,.3)}.sui-bg-primary\\\\/35{background-color:rgba(54,73,155,.35)}.sui-bg-primary\\\\/40{background-color:rgba(54,73,155,.4)}.sui-bg-primary\\\\/45{background-color:rgba(54,73,155,.45)}.sui-bg-primary\\\\/5{background-color:rgba(54,73,155,.05)}.sui-bg-primary\\\\/50{background-color:rgba(54,73,155,.5)}.sui-bg-primary\\\\/55{background-color:rgba(54,73,155,.55)}.sui-bg-primary\\\\/60{background-color:rgba(54,73,155,.6)}.sui-bg-primary\\\\/65{background-color:rgba(54,73,155,.65)}.sui-bg-primary\\\\/70{background-color:rgba(54,73,155,.7)}.sui-bg-primary\\\\/75{background-color:rgba(54,73,155,.75)}.sui-bg-primary\\\\/80{background-color:rgba(54,73,155,.8)}.sui-bg-primary\\\\/85{background-color:rgba(54,73,155,.85)}.sui-bg-primary\\\\/90{background-color:rgba(54,73,155,.9)}.sui-bg-primary\\\\/95{background-color:rgba(54,73,155,.95)}.sui-bg-secondary{--tw-bg-opacity:1;background-color:rgb(242 246 252/var(--tw-bg-opacity,1))}.sui-bg-secondary-1{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.sui-bg-secondary-1\\\\/0{background-color:hsla(0,0%,100%,0)}.sui-bg-secondary-1\\\\/10{background-color:hsla(0,0%,100%,.1)}.sui-bg-secondary-1\\\\/100{background-color:#fff}.sui-bg-secondary-1\\\\/15{background-color:hsla(0,0%,100%,.15)}.sui-bg-secondary-1\\\\/20{background-color:hsla(0,0%,100%,.2)}.sui-bg-secondary-1\\\\/25{background-color:hsla(0,0%,100%,.25)}.sui-bg-secondary-1\\\\/30{background-color:hsla(0,0%,100%,.3)}.sui-bg-secondary-1\\\\/35{background-color:hsla(0,0%,100%,.35)}.sui-bg-secondary-1\\\\/40{background-color:hsla(0,0%,100%,.4)}.sui-bg-secondary-1\\\\/45{background-color:hsla(0,0%,100%,.45)}.sui-bg-secondary-1\\\\/5{background-color:hsla(0,0%,100%,.05)}.sui-bg-secondary-1\\\\/50{background-color:hsla(0,0%,100%,.5)}.sui-bg-secondary-1\\\\/55{background-color:hsla(0,0%,100%,.55)}.sui-bg-secondary-1\\\\/60{background-color:hsla(0,0%,100%,.6)}.sui-bg-secondary-1\\\\/65{background-color:hsla(0,0%,100%,.65)}.sui-bg-secondary-1\\\\/70{background-color:hsla(0,0%,100%,.7)}.sui-bg-secondary-1\\\\/75{background-color:hsla(0,0%,100%,.75)}.sui-bg-secondary-1\\\\/80{background-color:hsla(0,0%,100%,.8)}.sui-bg-secondary-1\\\\/85{background-color:hsla(0,0%,100%,.85)}.sui-bg-secondary-1\\\\/90{background-color:hsla(0,0%,100%,.9)}.sui-bg-secondary-1\\\\/95{background-color:hsla(0,0%,100%,.95)}.sui-bg-secondary-2{--tw-bg-opacity:1;background-color:rgb(225 234 248/var(--tw-bg-opacity,1))}.sui-bg-secondary-2\\\\/0{background-color:rgba(225,234,248,0)}.sui-bg-secondary-2\\\\/10{background-color:rgba(225,234,248,.1)}.sui-bg-secondary-2\\\\/100{background-color:#e1eaf8}.sui-bg-secondary-2\\\\/15{background-color:rgba(225,234,248,.15)}.sui-bg-secondary-2\\\\/20{background-color:rgba(225,234,248,.2)}.sui-bg-secondary-2\\\\/25{background-color:rgba(225,234,248,.25)}.sui-bg-secondary-2\\\\/30{background-color:rgba(225,234,248,.3)}.sui-bg-secondary-2\\\\/35{background-color:rgba(225,234,248,.35)}.sui-bg-secondary-2\\\\/40{background-color:rgba(225,234,248,.4)}.sui-bg-secondary-2\\\\/45{background-color:rgba(225,234,248,.45)}.sui-bg-secondary-2\\\\/5{background-color:rgba(225,234,248,.05)}.sui-bg-secondary-2\\\\/50{background-color:rgba(225,234,248,.5)}.sui-bg-secondary-2\\\\/55{background-color:rgba(225,234,248,.55)}.sui-bg-secondary-2\\\\/60{background-color:rgba(225,234,248,.6)}.sui-bg-secondary-2\\\\/65{background-color:rgba(225,234,248,.65)}.sui-bg-secondary-2\\\\/70{background-color:rgba(225,234,248,.7)}.sui-bg-secondary-2\\\\/75{background-color:rgba(225,234,248,.75)}.sui-bg-secondary-2\\\\/80{background-color:rgba(225,234,248,.8)}.sui-bg-secondary-2\\\\/85{background-color:rgba(225,234,248,.85)}.sui-bg-secondary-2\\\\/90{background-color:rgba(225,234,248,.9)}.sui-bg-secondary-2\\\\/95{background-color:rgba(225,234,248,.95)}.sui-bg-secondary-3{--tw-bg-opacity:1;background-color:rgb(201 218 244/var(--tw-bg-opacity,1))}.sui-bg-secondary-3\\\\/0{background-color:rgba(201,218,244,0)}.sui-bg-secondary-3\\\\/10{background-color:rgba(201,218,244,.1)}.sui-bg-secondary-3\\\\/100{background-color:#c9daf4}.sui-bg-secondary-3\\\\/15{background-color:rgba(201,218,244,.15)}.sui-bg-secondary-3\\\\/20{background-color:rgba(201,218,244,.2)}.sui-bg-secondary-3\\\\/25{background-color:rgba(201,218,244,.25)}.sui-bg-secondary-3\\\\/30{background-color:rgba(201,218,244,.3)}.sui-bg-secondary-3\\\\/35{background-color:rgba(201,218,244,.35)}.sui-bg-secondary-3\\\\/40{background-color:rgba(201,218,244,.4)}.sui-bg-secondary-3\\\\/45{background-color:rgba(201,218,244,.45)}.sui-bg-secondary-3\\\\/5{background-color:rgba(201,218,244,.05)}.sui-bg-secondary-3\\\\/50{background-color:rgba(201,218,244,.5)}.sui-bg-secondary-3\\\\/55{background-color:rgba(201,218,244,.55)}.sui-bg-secondary-3\\\\/60{background-color:rgba(201,218,244,.6)}.sui-bg-secondary-3\\\\/65{background-color:rgba(201,218,244,.65)}.sui-bg-secondary-3\\\\/70{background-color:rgba(201,218,244,.7)}.sui-bg-secondary-3\\\\/75{background-color:rgba(201,218,244,.75)}.sui-bg-secondary-3\\\\/80{background-color:rgba(201,218,244,.8)}.sui-bg-secondary-3\\\\/85{background-color:rgba(201,218,244,.85)}.sui-bg-secondary-3\\\\/90{background-color:rgba(201,218,244,.9)}.sui-bg-secondary-3\\\\/95{background-color:rgba(201,218,244,.95)}.sui-bg-secondary\\\\/0{background-color:rgba(242,246,252,0)}.sui-bg-secondary\\\\/10{background-color:rgba(242,246,252,.1)}.sui-bg-secondary\\\\/100{background-color:#f2f6fc}.sui-bg-secondary\\\\/15{background-color:rgba(242,246,252,.15)}.sui-bg-secondary\\\\/20{background-color:rgba(242,246,252,.2)}.sui-bg-secondary\\\\/25{background-color:rgba(242,246,252,.25)}.sui-bg-secondary\\\\/30{background-color:rgba(242,246,252,.3)}.sui-bg-secondary\\\\/35{background-color:rgba(242,246,252,.35)}.sui-bg-secondary\\\\/40{background-color:rgba(242,246,252,.4)}.sui-bg-secondary\\\\/45{background-color:rgba(242,246,252,.45)}.sui-bg-secondary\\\\/5{background-color:rgba(242,246,252,.05)}.sui-bg-secondary\\\\/50{background-color:rgba(242,246,252,.5)}.sui-bg-secondary\\\\/55{background-color:rgba(242,246,252,.55)}.sui-bg-secondary\\\\/60{background-color:rgba(242,246,252,.6)}.sui-bg-secondary\\\\/65{background-color:rgba(242,246,252,.65)}.sui-bg-secondary\\\\/70{background-color:rgba(242,246,252,.7)}.sui-bg-secondary\\\\/75{background-color:rgba(242,246,252,.75)}.sui-bg-secondary\\\\/80{background-color:rgba(242,246,252,.8)}.sui-bg-secondary\\\\/85{background-color:rgba(242,246,252,.85)}.sui-bg-secondary\\\\/90{background-color:rgba(242,246,252,.9)}.sui-bg-secondary\\\\/95{background-color:rgba(242,246,252,.95)}.sui-bg-stroke-level2{--tw-bg-opacity:1;background-color:rgb(178 187 199/var(--tw-bg-opacity,1))}.sui-bg-stroke-level3{--tw-bg-opacity:1;background-color:rgb(222 227 231/var(--tw-bg-opacity,1))}.sui-bg-success{--tw-bg-opacity:1;background-color:rgb(34 188 77/var(--tw-bg-opacity,1))}.sui-bg-success\\\\/0{background-color:rgba(34,188,77,0)}.sui-bg-success\\\\/10{background-color:rgba(34,188,77,.1)}.sui-bg-success\\\\/100{background-color:#22bc4d}.sui-bg-success\\\\/15{background-color:rgba(34,188,77,.15)}.sui-bg-success\\\\/20{background-color:rgba(34,188,77,.2)}.sui-bg-success\\\\/25{background-color:rgba(34,188,77,.25)}.sui-bg-success\\\\/30{background-color:rgba(34,188,77,.3)}.sui-bg-success\\\\/35{background-color:rgba(34,188,77,.35)}.sui-bg-success\\\\/40{background-color:rgba(34,188,77,.4)}.sui-bg-success\\\\/45{background-color:rgba(34,188,77,.45)}.sui-bg-success\\\\/5{background-color:rgba(34,188,77,.05)}.sui-bg-success\\\\/50{background-color:rgba(34,188,77,.5)}.sui-bg-success\\\\/55{background-color:rgba(34,188,77,.55)}.sui-bg-success\\\\/60{background-color:rgba(34,188,77,.6)}.sui-bg-success\\\\/65{background-color:rgba(34,188,77,.65)}.sui-bg-success\\\\/70{background-color:rgba(34,188,77,.7)}.sui-bg-success\\\\/75{background-color:rgba(34,188,77,.75)}.sui-bg-success\\\\/80{background-color:rgba(34,188,77,.8)}.sui-bg-success\\\\/85{background-color:rgba(34,188,77,.85)}.sui-bg-success\\\\/90{background-color:rgba(34,188,77,.9)}.sui-bg-success\\\\/95{background-color:rgba(34,188,77,.95)}.sui-bg-transparent{background-color:transparent}.sui-bg-warning{--tw-bg-opacity:1;background-color:rgb(255 122 0/var(--tw-bg-opacity,1))}.sui-bg-warning\\\\/0{background-color:rgba(255,122,0,0)}.sui-bg-warning\\\\/10{background-color:rgba(255,122,0,.1)}.sui-bg-warning\\\\/100{background-color:#ff7a00}.sui-bg-warning\\\\/15{background-color:rgba(255,122,0,.15)}.sui-bg-warning\\\\/20{background-color:rgba(255,122,0,.2)}.sui-bg-warning\\\\/25{background-color:rgba(255,122,0,.25)}.sui-bg-warning\\\\/30{background-color:rgba(255,122,0,.3)}.sui-bg-warning\\\\/35{background-color:rgba(255,122,0,.35)}.sui-bg-warning\\\\/40{background-color:rgba(255,122,0,.4)}.sui-bg-warning\\\\/45{background-color:rgba(255,122,0,.45)}.sui-bg-warning\\\\/5{background-color:rgba(255,122,0,.05)}.sui-bg-warning\\\\/50{background-color:rgba(255,122,0,.5)}.sui-bg-warning\\\\/55{background-color:rgba(255,122,0,.55)}.sui-bg-warning\\\\/60{background-color:rgba(255,122,0,.6)}.sui-bg-warning\\\\/65{background-color:rgba(255,122,0,.65)}.sui-bg-warning\\\\/70{background-color:rgba(255,122,0,.7)}.sui-bg-warning\\\\/75{background-color:rgba(255,122,0,.75)}.sui-bg-warning\\\\/80{background-color:rgba(255,122,0,.8)}.sui-bg-warning\\\\/85{background-color:rgba(255,122,0,.85)}.sui-bg-warning\\\\/90{background-color:rgba(255,122,0,.9)}.sui-bg-warning\\\\/95{background-color:rgba(255,122,0,.95)}.sui-bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.sui-bg-white\\\\/20{background-color:hsla(0,0%,100%,.2)}.sui-bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.sui-from-primary{--tw-gradient-from:#36499b var(--tw-gradient-from-position);--tw-gradient-to:rgba(54,73,155,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.sui-to-primary{--tw-gradient-to:#36499b var(--tw-gradient-to-position)}.sui-to-primary\\\\/90{--tw-gradient-to:rgba(54,73,155,.9) var(--tw-gradient-to-position)}.sui-fill-error{fill:#ea3540}.sui-fill-primary{fill:#36499b}.sui-stroke-error{stroke:#ea3540}.sui-stroke-inactive{stroke:#777e90}.sui-stroke-primary{stroke:#36499b}.sui-object-cover{-o-object-fit:cover;object-fit:cover}.sui-p-0{padding:0}.sui-p-1{padding:.25rem}.sui-p-2{padding:.5rem}.sui-p-3{padding:.75rem}.sui-p-4{padding:1rem}.sui-p-6{padding:1.5rem}.sui-p-8{padding:2rem}.sui-p-\\\\[2px\\\\]{padding:2px}.sui-px-0{padding-left:0;padding-right:0}.sui-px-1{padding-left:.25rem;padding-right:.25rem}.sui-px-2{padding-left:.5rem;padding-right:.5rem}.sui-px-3{padding-left:.75rem;padding-right:.75rem}.sui-px-4{padding-left:1rem;padding-right:1rem}.sui-py-0{padding-top:0;padding-bottom:0}.sui-py-0\\\\.5{padding-top:.125rem;padding-bottom:.125rem}.sui-py-1{padding-top:.25rem;padding-bottom:.25rem}.sui-py-12{padding-top:3rem;padding-bottom:3rem}.sui-py-2{padding-top:.5rem;padding-bottom:.5rem}.sui-py-2\\\\.5{padding-top:.625rem;padding-bottom:.625rem}.sui-py-3{padding-top:.75rem;padding-bottom:.75rem}.sui-py-6{padding-top:1.5rem;padding-bottom:1.5rem}.sui-pl-10{padding-left:2.5rem}.sui-pl-5{padding-left:1.25rem}.sui-pr-1{padding-right:.25rem}.sui-pr-10{padding-right:2.5rem}.sui-pr-3{padding-right:.75rem}.sui-pr-4{padding-right:1rem}.sui-pt-4{padding-top:1rem}.sui-text-left{text-align:left}.sui-text-center{text-align:center}.sui-align-middle{vertical-align:middle}.sui-text-12{font-size:.75rem}.sui-text-12,.sui-text-14{line-height:150%;letter-spacing:-.02em}.sui-text-14{font-size:.875rem}.sui-text-16{font-size:1rem}.sui-text-16,.sui-text-20{line-height:150%;letter-spacing:-.02em}.sui-text-20{font-size:1.25rem}.sui-text-24{font-size:1.5rem;line-height:150%;letter-spacing:-.02em}.sui-text-lg{font-size:1.125rem;line-height:1.75rem}.sui-text-sm{font-size:.875rem;line-height:1.25rem}.sui-text-xs{font-size:.75rem;line-height:1rem}.sui-font-bold{font-weight:700}.sui-font-medium{font-weight:500}.sui-font-normal{font-weight:400}.sui-font-semibold{font-weight:600}.sui-leading-\\\\[100\\\\%\\\\]{line-height:100%}.sui-leading-\\\\[150\\\\%\\\\]{line-height:150%}.sui-leading-none{line-height:1}.sui-tracking-\\\\[-0\\\\.01em\\\\]{letter-spacing:-.01em}.sui-tracking-wide{letter-spacing:.025em}.sui-text-\\\\[\\\\#777E90\\\\]{--tw-text-opacity:1;color:rgb(119 126 144/var(--tw-text-opacity,1))}.sui-text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.sui-text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.sui-text-current{color:currentColor}.sui-text-disabled{--tw-text-opacity:1;color:rgb(178 187 199/var(--tw-text-opacity,1))}.sui-text-disabled\\\\/0{color:rgba(178,187,199,0)}.sui-text-disabled\\\\/10{color:rgba(178,187,199,.1)}.sui-text-disabled\\\\/100{color:#b2bbc7}.sui-text-disabled\\\\/15{color:rgba(178,187,199,.15)}.sui-text-disabled\\\\/20{color:rgba(178,187,199,.2)}.sui-text-disabled\\\\/25{color:rgba(178,187,199,.25)}.sui-text-disabled\\\\/30{color:rgba(178,187,199,.3)}.sui-text-disabled\\\\/35{color:rgba(178,187,199,.35)}.sui-text-disabled\\\\/40{color:rgba(178,187,199,.4)}.sui-text-disabled\\\\/45{color:rgba(178,187,199,.45)}.sui-text-disabled\\\\/5{color:rgba(178,187,199,.05)}.sui-text-disabled\\\\/50{color:rgba(178,187,199,.5)}.sui-text-disabled\\\\/55{color:rgba(178,187,199,.55)}.sui-text-disabled\\\\/60{color:rgba(178,187,199,.6)}.sui-text-disabled\\\\/65{color:rgba(178,187,199,.65)}.sui-text-disabled\\\\/70{color:rgba(178,187,199,.7)}.sui-text-disabled\\\\/75{color:rgba(178,187,199,.75)}.sui-text-disabled\\\\/80{color:rgba(178,187,199,.8)}.sui-text-disabled\\\\/85{color:rgba(178,187,199,.85)}.sui-text-disabled\\\\/90{color:rgba(178,187,199,.9)}.sui-text-disabled\\\\/95{color:rgba(178,187,199,.95)}.sui-text-error{--tw-text-opacity:1;color:rgb(234 53 64/var(--tw-text-opacity,1))}.sui-text-error\\\\/0{color:rgba(234,53,64,0)}.sui-text-error\\\\/10{color:rgba(234,53,64,.1)}.sui-text-error\\\\/100{color:#ea3540}.sui-text-error\\\\/15{color:rgba(234,53,64,.15)}.sui-text-error\\\\/20{color:rgba(234,53,64,.2)}.sui-text-error\\\\/25{color:rgba(234,53,64,.25)}.sui-text-error\\\\/30{color:rgba(234,53,64,.3)}.sui-text-error\\\\/35{color:rgba(234,53,64,.35)}.sui-text-error\\\\/40{color:rgba(234,53,64,.4)}.sui-text-error\\\\/45{color:rgba(234,53,64,.45)}.sui-text-error\\\\/5{color:rgba(234,53,64,.05)}.sui-text-error\\\\/50{color:rgba(234,53,64,.5)}.sui-text-error\\\\/55{color:rgba(234,53,64,.55)}.sui-text-error\\\\/60{color:rgba(234,53,64,.6)}.sui-text-error\\\\/65{color:rgba(234,53,64,.65)}.sui-text-error\\\\/70{color:rgba(234,53,64,.7)}.sui-text-error\\\\/75{color:rgba(234,53,64,.75)}.sui-text-error\\\\/80{color:rgba(234,53,64,.8)}.sui-text-error\\\\/85{color:rgba(234,53,64,.85)}.sui-text-error\\\\/90{color:rgba(234,53,64,.9)}.sui-text-error\\\\/95{color:rgba(234,53,64,.95)}.sui-text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.sui-text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.sui-text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.sui-text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.sui-text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity,1))}.sui-text-icon-black{--tw-text-opacity:1;color:rgb(35 38 47/var(--tw-text-opacity,1))}.sui-text-icon-brand{--tw-text-opacity:1;color:rgb(54 73 155/var(--tw-text-opacity,1))}.sui-text-icon-grayLight{--tw-text-opacity:1;color:rgb(178 187 199/var(--tw-text-opacity,1))}.sui-text-inactive{--tw-text-opacity:1;color:rgb(119 126 144/var(--tw-text-opacity,1))}.sui-text-inactive\\\\/0{color:rgba(119,126,144,0)}.sui-text-inactive\\\\/10{color:rgba(119,126,144,.1)}.sui-text-inactive\\\\/100{color:#777e90}.sui-text-inactive\\\\/15{color:rgba(119,126,144,.15)}.sui-text-inactive\\\\/20{color:rgba(119,126,144,.2)}.sui-text-inactive\\\\/25{color:rgba(119,126,144,.25)}.sui-text-inactive\\\\/30{color:rgba(119,126,144,.3)}.sui-text-inactive\\\\/35{color:rgba(119,126,144,.35)}.sui-text-inactive\\\\/40{color:rgba(119,126,144,.4)}.sui-text-inactive\\\\/45{color:rgba(119,126,144,.45)}.sui-text-inactive\\\\/5{color:rgba(119,126,144,.05)}.sui-text-inactive\\\\/50{color:rgba(119,126,144,.5)}.sui-text-inactive\\\\/55{color:rgba(119,126,144,.55)}.sui-text-inactive\\\\/60{color:rgba(119,126,144,.6)}.sui-text-inactive\\\\/65{color:rgba(119,126,144,.65)}.sui-text-inactive\\\\/70{color:rgba(119,126,144,.7)}.sui-text-inactive\\\\/75{color:rgba(119,126,144,.75)}.sui-text-inactive\\\\/80{color:rgba(119,126,144,.8)}.sui-text-inactive\\\\/85{color:rgba(119,126,144,.85)}.sui-text-inactive\\\\/90{color:rgba(119,126,144,.9)}.sui-text-inactive\\\\/95{color:rgba(119,126,144,.95)}.sui-text-info{--tw-text-opacity:1;color:rgb(39 114 240/var(--tw-text-opacity,1))}.sui-text-info\\\\/0{color:rgba(39,114,240,0)}.sui-text-info\\\\/10{color:rgba(39,114,240,.1)}.sui-text-info\\\\/100{color:#2772f0}.sui-text-info\\\\/15{color:rgba(39,114,240,.15)}.sui-text-info\\\\/20{color:rgba(39,114,240,.2)}.sui-text-info\\\\/25{color:rgba(39,114,240,.25)}.sui-text-info\\\\/30{color:rgba(39,114,240,.3)}.sui-text-info\\\\/35{color:rgba(39,114,240,.35)}.sui-text-info\\\\/40{color:rgba(39,114,240,.4)}.sui-text-info\\\\/45{color:rgba(39,114,240,.45)}.sui-text-info\\\\/5{color:rgba(39,114,240,.05)}.sui-text-info\\\\/50{color:rgba(39,114,240,.5)}.sui-text-info\\\\/55{color:rgba(39,114,240,.55)}.sui-text-info\\\\/60{color:rgba(39,114,240,.6)}.sui-text-info\\\\/65{color:rgba(39,114,240,.65)}.sui-text-info\\\\/70{color:rgba(39,114,240,.7)}.sui-text-info\\\\/75{color:rgba(39,114,240,.75)}.sui-text-info\\\\/80{color:rgba(39,114,240,.8)}.sui-text-info\\\\/85{color:rgba(39,114,240,.85)}.sui-text-info\\\\/90{color:rgba(39,114,240,.9)}.sui-text-info\\\\/95{color:rgba(39,114,240,.95)}.sui-text-primary{--tw-text-opacity:1;color:rgb(54 73 155/var(--tw-text-opacity,1))}.sui-text-primary-100{--tw-text-opacity:1;color:rgb(225 230 243/var(--tw-text-opacity,1))}.sui-text-primary-100\\\\/0{color:rgba(225,230,243,0)}.sui-text-primary-100\\\\/10{color:rgba(225,230,243,.1)}.sui-text-primary-100\\\\/100{color:#e1e6f3}.sui-text-primary-100\\\\/15{color:rgba(225,230,243,.15)}.sui-text-primary-100\\\\/20{color:rgba(225,230,243,.2)}.sui-text-primary-100\\\\/25{color:rgba(225,230,243,.25)}.sui-text-primary-100\\\\/30{color:rgba(225,230,243,.3)}.sui-text-primary-100\\\\/35{color:rgba(225,230,243,.35)}.sui-text-primary-100\\\\/40{color:rgba(225,230,243,.4)}.sui-text-primary-100\\\\/45{color:rgba(225,230,243,.45)}.sui-text-primary-100\\\\/5{color:rgba(225,230,243,.05)}.sui-text-primary-100\\\\/50{color:rgba(225,230,243,.5)}.sui-text-primary-100\\\\/55{color:rgba(225,230,243,.55)}.sui-text-primary-100\\\\/60{color:rgba(225,230,243,.6)}.sui-text-primary-100\\\\/65{color:rgba(225,230,243,.65)}.sui-text-primary-100\\\\/70{color:rgba(225,230,243,.7)}.sui-text-primary-100\\\\/75{color:rgba(225,230,243,.75)}.sui-text-primary-100\\\\/80{color:rgba(225,230,243,.8)}.sui-text-primary-100\\\\/85{color:rgba(225,230,243,.85)}.sui-text-primary-100\\\\/90{color:rgba(225,230,243,.9)}.sui-text-primary-100\\\\/95{color:rgba(225,230,243,.95)}.sui-text-primary-200{--tw-text-opacity:1;color:rgb(195 205 231/var(--tw-text-opacity,1))}.sui-text-primary-200\\\\/0{color:rgba(195,205,231,0)}.sui-text-primary-200\\\\/10{color:rgba(195,205,231,.1)}.sui-text-primary-200\\\\/100{color:#c3cde7}.sui-text-primary-200\\\\/15{color:rgba(195,205,231,.15)}.sui-text-primary-200\\\\/20{color:rgba(195,205,231,.2)}.sui-text-primary-200\\\\/25{color:rgba(195,205,231,.25)}.sui-text-primary-200\\\\/30{color:rgba(195,205,231,.3)}.sui-text-primary-200\\\\/35{color:rgba(195,205,231,.35)}.sui-text-primary-200\\\\/40{color:rgba(195,205,231,.4)}.sui-text-primary-200\\\\/45{color:rgba(195,205,231,.45)}.sui-text-primary-200\\\\/5{color:rgba(195,205,231,.05)}.sui-text-primary-200\\\\/50{color:rgba(195,205,231,.5)}.sui-text-primary-200\\\\/55{color:rgba(195,205,231,.55)}.sui-text-primary-200\\\\/60{color:rgba(195,205,231,.6)}.sui-text-primary-200\\\\/65{color:rgba(195,205,231,.65)}.sui-text-primary-200\\\\/70{color:rgba(195,205,231,.7)}.sui-text-primary-200\\\\/75{color:rgba(195,205,231,.75)}.sui-text-primary-200\\\\/80{color:rgba(195,205,231,.8)}.sui-text-primary-200\\\\/85{color:rgba(195,205,231,.85)}.sui-text-primary-200\\\\/90{color:rgba(195,205,231,.9)}.sui-text-primary-200\\\\/95{color:rgba(195,205,231,.95)}.sui-text-primary-300{--tw-text-opacity:1;color:rgb(165 180 219/var(--tw-text-opacity,1))}.sui-text-primary-300\\\\/0{color:rgba(165,180,219,0)}.sui-text-primary-300\\\\/10{color:rgba(165,180,219,.1)}.sui-text-primary-300\\\\/100{color:#a5b4db}.sui-text-primary-300\\\\/15{color:rgba(165,180,219,.15)}.sui-text-primary-300\\\\/20{color:rgba(165,180,219,.2)}.sui-text-primary-300\\\\/25{color:rgba(165,180,219,.25)}.sui-text-primary-300\\\\/30{color:rgba(165,180,219,.3)}.sui-text-primary-300\\\\/35{color:rgba(165,180,219,.35)}.sui-text-primary-300\\\\/40{color:rgba(165,180,219,.4)}.sui-text-primary-300\\\\/45{color:rgba(165,180,219,.45)}.sui-text-primary-300\\\\/5{color:rgba(165,180,219,.05)}.sui-text-primary-300\\\\/50{color:rgba(165,180,219,.5)}.sui-text-primary-300\\\\/55{color:rgba(165,180,219,.55)}.sui-text-primary-300\\\\/60{color:rgba(165,180,219,.6)}.sui-text-primary-300\\\\/65{color:rgba(165,180,219,.65)}.sui-text-primary-300\\\\/70{color:rgba(165,180,219,.7)}.sui-text-primary-300\\\\/75{color:rgba(165,180,219,.75)}.sui-text-primary-300\\\\/80{color:rgba(165,180,219,.8)}.sui-text-primary-300\\\\/85{color:rgba(165,180,219,.85)}.sui-text-primary-300\\\\/90{color:rgba(165,180,219,.9)}.sui-text-primary-300\\\\/95{color:rgba(165,180,219,.95)}.sui-text-primary-400{--tw-text-opacity:1;color:rgb(135 155 207/var(--tw-text-opacity,1))}.sui-text-primary-400\\\\/0{color:rgba(135,155,207,0)}.sui-text-primary-400\\\\/10{color:rgba(135,155,207,.1)}.sui-text-primary-400\\\\/100{color:#879bcf}.sui-text-primary-400\\\\/15{color:rgba(135,155,207,.15)}.sui-text-primary-400\\\\/20{color:rgba(135,155,207,.2)}.sui-text-primary-400\\\\/25{color:rgba(135,155,207,.25)}.sui-text-primary-400\\\\/30{color:rgba(135,155,207,.3)}.sui-text-primary-400\\\\/35{color:rgba(135,155,207,.35)}.sui-text-primary-400\\\\/40{color:rgba(135,155,207,.4)}.sui-text-primary-400\\\\/45{color:rgba(135,155,207,.45)}.sui-text-primary-400\\\\/5{color:rgba(135,155,207,.05)}.sui-text-primary-400\\\\/50{color:rgba(135,155,207,.5)}.sui-text-primary-400\\\\/55{color:rgba(135,155,207,.55)}.sui-text-primary-400\\\\/60{color:rgba(135,155,207,.6)}.sui-text-primary-400\\\\/65{color:rgba(135,155,207,.65)}.sui-text-primary-400\\\\/70{color:rgba(135,155,207,.7)}.sui-text-primary-400\\\\/75{color:rgba(135,155,207,.75)}.sui-text-primary-400\\\\/80{color:rgba(135,155,207,.8)}.sui-text-primary-400\\\\/85{color:rgba(135,155,207,.85)}.sui-text-primary-400\\\\/90{color:rgba(135,155,207,.9)}.sui-text-primary-400\\\\/95{color:rgba(135,155,207,.95)}.sui-text-primary-50{--tw-text-opacity:1;color:rgb(240 242 249/var(--tw-text-opacity,1))}.sui-text-primary-50\\\\/0{color:rgba(240,242,249,0)}.sui-text-primary-50\\\\/10{color:rgba(240,242,249,.1)}.sui-text-primary-50\\\\/100{color:#f0f2f9}.sui-text-primary-50\\\\/15{color:rgba(240,242,249,.15)}.sui-text-primary-50\\\\/20{color:rgba(240,242,249,.2)}.sui-text-primary-50\\\\/25{color:rgba(240,242,249,.25)}.sui-text-primary-50\\\\/30{color:rgba(240,242,249,.3)}.sui-text-primary-50\\\\/35{color:rgba(240,242,249,.35)}.sui-text-primary-50\\\\/40{color:rgba(240,242,249,.4)}.sui-text-primary-50\\\\/45{color:rgba(240,242,249,.45)}.sui-text-primary-50\\\\/5{color:rgba(240,242,249,.05)}.sui-text-primary-50\\\\/50{color:rgba(240,242,249,.5)}.sui-text-primary-50\\\\/55{color:rgba(240,242,249,.55)}.sui-text-primary-50\\\\/60{color:rgba(240,242,249,.6)}.sui-text-primary-50\\\\/65{color:rgba(240,242,249,.65)}.sui-text-primary-50\\\\/70{color:rgba(240,242,249,.7)}.sui-text-primary-50\\\\/75{color:rgba(240,242,249,.75)}.sui-text-primary-50\\\\/80{color:rgba(240,242,249,.8)}.sui-text-primary-50\\\\/85{color:rgba(240,242,249,.85)}.sui-text-primary-50\\\\/90{color:rgba(240,242,249,.9)}.sui-text-primary-50\\\\/95{color:rgba(240,242,249,.95)}.sui-text-primary-500{--tw-text-opacity:1;color:rgb(54 73 155/var(--tw-text-opacity,1))}.sui-text-primary-500\\\\/0{color:rgba(54,73,155,0)}.sui-text-primary-500\\\\/10{color:rgba(54,73,155,.1)}.sui-text-primary-500\\\\/100{color:#36499b}.sui-text-primary-500\\\\/15{color:rgba(54,73,155,.15)}.sui-text-primary-500\\\\/20{color:rgba(54,73,155,.2)}.sui-text-primary-500\\\\/25{color:rgba(54,73,155,.25)}.sui-text-primary-500\\\\/30{color:rgba(54,73,155,.3)}.sui-text-primary-500\\\\/35{color:rgba(54,73,155,.35)}.sui-text-primary-500\\\\/40{color:rgba(54,73,155,.4)}.sui-text-primary-500\\\\/45{color:rgba(54,73,155,.45)}.sui-text-primary-500\\\\/5{color:rgba(54,73,155,.05)}.sui-text-primary-500\\\\/50{color:rgba(54,73,155,.5)}.sui-text-primary-500\\\\/55{color:rgba(54,73,155,.55)}.sui-text-primary-500\\\\/60{color:rgba(54,73,155,.6)}.sui-text-primary-500\\\\/65{color:rgba(54,73,155,.65)}.sui-text-primary-500\\\\/70{color:rgba(54,73,155,.7)}.sui-text-primary-500\\\\/75{color:rgba(54,73,155,.75)}.sui-text-primary-500\\\\/80{color:rgba(54,73,155,.8)}.sui-text-primary-500\\\\/85{color:rgba(54,73,155,.85)}.sui-text-primary-500\\\\/90{color:rgba(54,73,155,.9)}.sui-text-primary-500\\\\/95{color:rgba(54,73,155,.95)}.sui-text-primary-600{--tw-text-opacity:1;color:rgb(43 58 124/var(--tw-text-opacity,1))}.sui-text-primary-600\\\\/0{color:rgba(43,58,124,0)}.sui-text-primary-600\\\\/10{color:rgba(43,58,124,.1)}.sui-text-primary-600\\\\/100{color:#2b3a7c}.sui-text-primary-600\\\\/15{color:rgba(43,58,124,.15)}.sui-text-primary-600\\\\/20{color:rgba(43,58,124,.2)}.sui-text-primary-600\\\\/25{color:rgba(43,58,124,.25)}.sui-text-primary-600\\\\/30{color:rgba(43,58,124,.3)}.sui-text-primary-600\\\\/35{color:rgba(43,58,124,.35)}.sui-text-primary-600\\\\/40{color:rgba(43,58,124,.4)}.sui-text-primary-600\\\\/45{color:rgba(43,58,124,.45)}.sui-text-primary-600\\\\/5{color:rgba(43,58,124,.05)}.sui-text-primary-600\\\\/50{color:rgba(43,58,124,.5)}.sui-text-primary-600\\\\/55{color:rgba(43,58,124,.55)}.sui-text-primary-600\\\\/60{color:rgba(43,58,124,.6)}.sui-text-primary-600\\\\/65{color:rgba(43,58,124,.65)}.sui-text-primary-600\\\\/70{color:rgba(43,58,124,.7)}.sui-text-primary-600\\\\/75{color:rgba(43,58,124,.75)}.sui-text-primary-600\\\\/80{color:rgba(43,58,124,.8)}.sui-text-primary-600\\\\/85{color:rgba(43,58,124,.85)}.sui-text-primary-600\\\\/90{color:rgba(43,58,124,.9)}.sui-text-primary-600\\\\/95{color:rgba(43,58,124,.95)}.sui-text-primary-700{--tw-text-opacity:1;color:rgb(32 43 93/var(--tw-text-opacity,1))}.sui-text-primary-700\\\\/0{color:rgba(32,43,93,0)}.sui-text-primary-700\\\\/10{color:rgba(32,43,93,.1)}.sui-text-primary-700\\\\/100{color:#202b5d}.sui-text-primary-700\\\\/15{color:rgba(32,43,93,.15)}.sui-text-primary-700\\\\/20{color:rgba(32,43,93,.2)}.sui-text-primary-700\\\\/25{color:rgba(32,43,93,.25)}.sui-text-primary-700\\\\/30{color:rgba(32,43,93,.3)}.sui-text-primary-700\\\\/35{color:rgba(32,43,93,.35)}.sui-text-primary-700\\\\/40{color:rgba(32,43,93,.4)}.sui-text-primary-700\\\\/45{color:rgba(32,43,93,.45)}.sui-text-primary-700\\\\/5{color:rgba(32,43,93,.05)}.sui-text-primary-700\\\\/50{color:rgba(32,43,93,.5)}.sui-text-primary-700\\\\/55{color:rgba(32,43,93,.55)}.sui-text-primary-700\\\\/60{color:rgba(32,43,93,.6)}.sui-text-primary-700\\\\/65{color:rgba(32,43,93,.65)}.sui-text-primary-700\\\\/70{color:rgba(32,43,93,.7)}.sui-text-primary-700\\\\/75{color:rgba(32,43,93,.75)}.sui-text-primary-700\\\\/80{color:rgba(32,43,93,.8)}.sui-text-primary-700\\\\/85{color:rgba(32,43,93,.85)}.sui-text-primary-700\\\\/90{color:rgba(32,43,93,.9)}.sui-text-primary-700\\\\/95{color:rgba(32,43,93,.95)}.sui-text-primary-800{--tw-text-opacity:1;color:rgb(22 29 62/var(--tw-text-opacity,1))}.sui-text-primary-800\\\\/0{color:rgba(22,29,62,0)}.sui-text-primary-800\\\\/10{color:rgba(22,29,62,.1)}.sui-text-primary-800\\\\/100{color:#161d3e}.sui-text-primary-800\\\\/15{color:rgba(22,29,62,.15)}.sui-text-primary-800\\\\/20{color:rgba(22,29,62,.2)}.sui-text-primary-800\\\\/25{color:rgba(22,29,62,.25)}.sui-text-primary-800\\\\/30{color:rgba(22,29,62,.3)}.sui-text-primary-800\\\\/35{color:rgba(22,29,62,.35)}.sui-text-primary-800\\\\/40{color:rgba(22,29,62,.4)}.sui-text-primary-800\\\\/45{color:rgba(22,29,62,.45)}.sui-text-primary-800\\\\/5{color:rgba(22,29,62,.05)}.sui-text-primary-800\\\\/50{color:rgba(22,29,62,.5)}.sui-text-primary-800\\\\/55{color:rgba(22,29,62,.55)}.sui-text-primary-800\\\\/60{color:rgba(22,29,62,.6)}.sui-text-primary-800\\\\/65{color:rgba(22,29,62,.65)}.sui-text-primary-800\\\\/70{color:rgba(22,29,62,.7)}.sui-text-primary-800\\\\/75{color:rgba(22,29,62,.75)}.sui-text-primary-800\\\\/80{color:rgba(22,29,62,.8)}.sui-text-primary-800\\\\/85{color:rgba(22,29,62,.85)}.sui-text-primary-800\\\\/90{color:rgba(22,29,62,.9)}.sui-text-primary-800\\\\/95{color:rgba(22,29,62,.95)}.sui-text-primary-900{--tw-text-opacity:1;color:rgb(11 14 31/var(--tw-text-opacity,1))}.sui-text-primary-900\\\\/0{color:rgba(11,14,31,0)}.sui-text-primary-900\\\\/10{color:rgba(11,14,31,.1)}.sui-text-primary-900\\\\/100{color:#0b0e1f}.sui-text-primary-900\\\\/15{color:rgba(11,14,31,.15)}.sui-text-primary-900\\\\/20{color:rgba(11,14,31,.2)}.sui-text-primary-900\\\\/25{color:rgba(11,14,31,.25)}.sui-text-primary-900\\\\/30{color:rgba(11,14,31,.3)}.sui-text-primary-900\\\\/35{color:rgba(11,14,31,.35)}.sui-text-primary-900\\\\/40{color:rgba(11,14,31,.4)}.sui-text-primary-900\\\\/45{color:rgba(11,14,31,.45)}.sui-text-primary-900\\\\/5{color:rgba(11,14,31,.05)}.sui-text-primary-900\\\\/50{color:rgba(11,14,31,.5)}.sui-text-primary-900\\\\/55{color:rgba(11,14,31,.55)}.sui-text-primary-900\\\\/60{color:rgba(11,14,31,.6)}.sui-text-primary-900\\\\/65{color:rgba(11,14,31,.65)}.sui-text-primary-900\\\\/70{color:rgba(11,14,31,.7)}.sui-text-primary-900\\\\/75{color:rgba(11,14,31,.75)}.sui-text-primary-900\\\\/80{color:rgba(11,14,31,.8)}.sui-text-primary-900\\\\/85{color:rgba(11,14,31,.85)}.sui-text-primary-900\\\\/90{color:rgba(11,14,31,.9)}.sui-text-primary-900\\\\/95{color:rgba(11,14,31,.95)}.sui-text-primary\\\\/0{color:rgba(54,73,155,0)}.sui-text-primary\\\\/10{color:rgba(54,73,155,.1)}.sui-text-primary\\\\/100{color:#36499b}.sui-text-primary\\\\/15{color:rgba(54,73,155,.15)}.sui-text-primary\\\\/20{color:rgba(54,73,155,.2)}.sui-text-primary\\\\/25{color:rgba(54,73,155,.25)}.sui-text-primary\\\\/30{color:rgba(54,73,155,.3)}.sui-text-primary\\\\/35{color:rgba(54,73,155,.35)}.sui-text-primary\\\\/40{color:rgba(54,73,155,.4)}.sui-text-primary\\\\/45{color:rgba(54,73,155,.45)}.sui-text-primary\\\\/5{color:rgba(54,73,155,.05)}.sui-text-primary\\\\/50{color:rgba(54,73,155,.5)}.sui-text-primary\\\\/55{color:rgba(54,73,155,.55)}.sui-text-primary\\\\/60{color:rgba(54,73,155,.6)}.sui-text-primary\\\\/65{color:rgba(54,73,155,.65)}.sui-text-primary\\\\/70{color:rgba(54,73,155,.7)}.sui-text-primary\\\\/75{color:rgba(54,73,155,.75)}.sui-text-primary\\\\/80{color:rgba(54,73,155,.8)}.sui-text-primary\\\\/85{color:rgba(54,73,155,.85)}.sui-text-primary\\\\/90{color:rgba(54,73,155,.9)}.sui-text-primary\\\\/95{color:rgba(54,73,155,.95)}.sui-text-purple-500{--tw-text-opacity:1;color:rgb(168 85 247/var(--tw-text-opacity,1))}.sui-text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.sui-text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.sui-text-secondary{--tw-text-opacity:1;color:rgb(242 246 252/var(--tw-text-opacity,1))}.sui-text-secondary-1{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.sui-text-secondary-1\\\\/0{color:hsla(0,0%,100%,0)}.sui-text-secondary-1\\\\/10{color:hsla(0,0%,100%,.1)}.sui-text-secondary-1\\\\/100{color:#fff}.sui-text-secondary-1\\\\/15{color:hsla(0,0%,100%,.15)}.sui-text-secondary-1\\\\/20{color:hsla(0,0%,100%,.2)}.sui-text-secondary-1\\\\/25{color:hsla(0,0%,100%,.25)}.sui-text-secondary-1\\\\/30{color:hsla(0,0%,100%,.3)}.sui-text-secondary-1\\\\/35{color:hsla(0,0%,100%,.35)}.sui-text-secondary-1\\\\/40{color:hsla(0,0%,100%,.4)}.sui-text-secondary-1\\\\/45{color:hsla(0,0%,100%,.45)}.sui-text-secondary-1\\\\/5{color:hsla(0,0%,100%,.05)}.sui-text-secondary-1\\\\/50{color:hsla(0,0%,100%,.5)}.sui-text-secondary-1\\\\/55{color:hsla(0,0%,100%,.55)}.sui-text-secondary-1\\\\/60{color:hsla(0,0%,100%,.6)}.sui-text-secondary-1\\\\/65{color:hsla(0,0%,100%,.65)}.sui-text-secondary-1\\\\/70{color:hsla(0,0%,100%,.7)}.sui-text-secondary-1\\\\/75{color:hsla(0,0%,100%,.75)}.sui-text-secondary-1\\\\/80{color:hsla(0,0%,100%,.8)}.sui-text-secondary-1\\\\/85{color:hsla(0,0%,100%,.85)}.sui-text-secondary-1\\\\/90{color:hsla(0,0%,100%,.9)}.sui-text-secondary-1\\\\/95{color:hsla(0,0%,100%,.95)}.sui-text-secondary-2{--tw-text-opacity:1;color:rgb(225 234 248/var(--tw-text-opacity,1))}.sui-text-secondary-2\\\\/0{color:rgba(225,234,248,0)}.sui-text-secondary-2\\\\/10{color:rgba(225,234,248,.1)}.sui-text-secondary-2\\\\/100{color:#e1eaf8}.sui-text-secondary-2\\\\/15{color:rgba(225,234,248,.15)}.sui-text-secondary-2\\\\/20{color:rgba(225,234,248,.2)}.sui-text-secondary-2\\\\/25{color:rgba(225,234,248,.25)}.sui-text-secondary-2\\\\/30{color:rgba(225,234,248,.3)}.sui-text-secondary-2\\\\/35{color:rgba(225,234,248,.35)}.sui-text-secondary-2\\\\/40{color:rgba(225,234,248,.4)}.sui-text-secondary-2\\\\/45{color:rgba(225,234,248,.45)}.sui-text-secondary-2\\\\/5{color:rgba(225,234,248,.05)}.sui-text-secondary-2\\\\/50{color:rgba(225,234,248,.5)}.sui-text-secondary-2\\\\/55{color:rgba(225,234,248,.55)}.sui-text-secondary-2\\\\/60{color:rgba(225,234,248,.6)}.sui-text-secondary-2\\\\/65{color:rgba(225,234,248,.65)}.sui-text-secondary-2\\\\/70{color:rgba(225,234,248,.7)}.sui-text-secondary-2\\\\/75{color:rgba(225,234,248,.75)}.sui-text-secondary-2\\\\/80{color:rgba(225,234,248,.8)}.sui-text-secondary-2\\\\/85{color:rgba(225,234,248,.85)}.sui-text-secondary-2\\\\/90{color:rgba(225,234,248,.9)}.sui-text-secondary-2\\\\/95{color:rgba(225,234,248,.95)}.sui-text-secondary-3{--tw-text-opacity:1;color:rgb(201 218 244/var(--tw-text-opacity,1))}.sui-text-secondary-3\\\\/0{color:rgba(201,218,244,0)}.sui-text-secondary-3\\\\/10{color:rgba(201,218,244,.1)}.sui-text-secondary-3\\\\/100{color:#c9daf4}.sui-text-secondary-3\\\\/15{color:rgba(201,218,244,.15)}.sui-text-secondary-3\\\\/20{color:rgba(201,218,244,.2)}.sui-text-secondary-3\\\\/25{color:rgba(201,218,244,.25)}.sui-text-secondary-3\\\\/30{color:rgba(201,218,244,.3)}.sui-text-secondary-3\\\\/35{color:rgba(201,218,244,.35)}.sui-text-secondary-3\\\\/40{color:rgba(201,218,244,.4)}.sui-text-secondary-3\\\\/45{color:rgba(201,218,244,.45)}.sui-text-secondary-3\\\\/5{color:rgba(201,218,244,.05)}.sui-text-secondary-3\\\\/50{color:rgba(201,218,244,.5)}.sui-text-secondary-3\\\\/55{color:rgba(201,218,244,.55)}.sui-text-secondary-3\\\\/60{color:rgba(201,218,244,.6)}.sui-text-secondary-3\\\\/65{color:rgba(201,218,244,.65)}.sui-text-secondary-3\\\\/70{color:rgba(201,218,244,.7)}.sui-text-secondary-3\\\\/75{color:rgba(201,218,244,.75)}.sui-text-secondary-3\\\\/80{color:rgba(201,218,244,.8)}.sui-text-secondary-3\\\\/85{color:rgba(201,218,244,.85)}.sui-text-secondary-3\\\\/90{color:rgba(201,218,244,.9)}.sui-text-secondary-3\\\\/95{color:rgba(201,218,244,.95)}.sui-text-secondary\\\\/0{color:rgba(242,246,252,0)}.sui-text-secondary\\\\/10{color:rgba(242,246,252,.1)}.sui-text-secondary\\\\/100{color:#f2f6fc}.sui-text-secondary\\\\/15{color:rgba(242,246,252,.15)}.sui-text-secondary\\\\/20{color:rgba(242,246,252,.2)}.sui-text-secondary\\\\/25{color:rgba(242,246,252,.25)}.sui-text-secondary\\\\/30{color:rgba(242,246,252,.3)}.sui-text-secondary\\\\/35{color:rgba(242,246,252,.35)}.sui-text-secondary\\\\/40{color:rgba(242,246,252,.4)}.sui-text-secondary\\\\/45{color:rgba(242,246,252,.45)}.sui-text-secondary\\\\/5{color:rgba(242,246,252,.05)}.sui-text-secondary\\\\/50{color:rgba(242,246,252,.5)}.sui-text-secondary\\\\/55{color:rgba(242,246,252,.55)}.sui-text-secondary\\\\/60{color:rgba(242,246,252,.6)}.sui-text-secondary\\\\/65{color:rgba(242,246,252,.65)}.sui-text-secondary\\\\/70{color:rgba(242,246,252,.7)}.sui-text-secondary\\\\/75{color:rgba(242,246,252,.75)}.sui-text-secondary\\\\/80{color:rgba(242,246,252,.8)}.sui-text-secondary\\\\/85{color:rgba(242,246,252,.85)}.sui-text-secondary\\\\/90{color:rgba(242,246,252,.9)}.sui-text-secondary\\\\/95{color:rgba(242,246,252,.95)}.sui-text-stroke-brand{--tw-text-opacity:1;color:rgb(54 73 155/var(--tw-text-opacity,1))}.sui-text-success{--tw-text-opacity:1;color:rgb(34 188 77/var(--tw-text-opacity,1))}.sui-text-success\\\\/0{color:rgba(34,188,77,0)}.sui-text-success\\\\/10{color:rgba(34,188,77,.1)}.sui-text-success\\\\/100{color:#22bc4d}.sui-text-success\\\\/15{color:rgba(34,188,77,.15)}.sui-text-success\\\\/20{color:rgba(34,188,77,.2)}.sui-text-success\\\\/25{color:rgba(34,188,77,.25)}.sui-text-success\\\\/30{color:rgba(34,188,77,.3)}.sui-text-success\\\\/35{color:rgba(34,188,77,.35)}.sui-text-success\\\\/40{color:rgba(34,188,77,.4)}.sui-text-success\\\\/45{color:rgba(34,188,77,.45)}.sui-text-success\\\\/5{color:rgba(34,188,77,.05)}.sui-text-success\\\\/50{color:rgba(34,188,77,.5)}.sui-text-success\\\\/55{color:rgba(34,188,77,.55)}.sui-text-success\\\\/60{color:rgba(34,188,77,.6)}.sui-text-success\\\\/65{color:rgba(34,188,77,.65)}.sui-text-success\\\\/70{color:rgba(34,188,77,.7)}.sui-text-success\\\\/75{color:rgba(34,188,77,.75)}.sui-text-success\\\\/80{color:rgba(34,188,77,.8)}.sui-text-success\\\\/85{color:rgba(34,188,77,.85)}.sui-text-success\\\\/90{color:rgba(34,188,77,.9)}.sui-text-success\\\\/95{color:rgba(34,188,77,.95)}.sui-text-text-blue{--tw-text-opacity:1;color:rgb(39 114 240/var(--tw-text-opacity,1))}.sui-text-text-brand{--tw-text-opacity:1;color:rgb(54 73 155/var(--tw-text-opacity,1))}.sui-text-text-default,.sui-text-text-primary1{--tw-text-opacity:1;color:rgb(35 38 47/var(--tw-text-opacity,1))}.sui-text-text-secondary1{--tw-text-opacity:1;color:rgb(119 126 144/var(--tw-text-opacity,1))}.sui-text-warning{--tw-text-opacity:1;color:rgb(255 122 0/var(--tw-text-opacity,1))}.sui-text-warning\\\\/0{color:rgba(255,122,0,0)}.sui-text-warning\\\\/10{color:rgba(255,122,0,.1)}.sui-text-warning\\\\/100{color:#ff7a00}.sui-text-warning\\\\/15{color:rgba(255,122,0,.15)}.sui-text-warning\\\\/20{color:rgba(255,122,0,.2)}.sui-text-warning\\\\/25{color:rgba(255,122,0,.25)}.sui-text-warning\\\\/30{color:rgba(255,122,0,.3)}.sui-text-warning\\\\/35{color:rgba(255,122,0,.35)}.sui-text-warning\\\\/40{color:rgba(255,122,0,.4)}.sui-text-warning\\\\/45{color:rgba(255,122,0,.45)}.sui-text-warning\\\\/5{color:rgba(255,122,0,.05)}.sui-text-warning\\\\/50{color:rgba(255,122,0,.5)}.sui-text-warning\\\\/55{color:rgba(255,122,0,.55)}.sui-text-warning\\\\/60{color:rgba(255,122,0,.6)}.sui-text-warning\\\\/65{color:rgba(255,122,0,.65)}.sui-text-warning\\\\/70{color:rgba(255,122,0,.7)}.sui-text-warning\\\\/75{color:rgba(255,122,0,.75)}.sui-text-warning\\\\/80{color:rgba(255,122,0,.8)}.sui-text-warning\\\\/85{color:rgba(255,122,0,.85)}.sui-text-warning\\\\/90{color:rgba(255,122,0,.9)}.sui-text-warning\\\\/95{color:rgba(255,122,0,.95)}.sui-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.sui-text-white\\\\/70{color:hsla(0,0%,100%,.7)}.sui-text-white\\\\/90{color:hsla(0,0%,100%,.9)}.sui-text-yellow-500{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity,1))}.sui-text-yellow-600{--tw-text-opacity:1;color:rgb(202 138 4/var(--tw-text-opacity,1))}.sui-underline-offset-4{text-underline-offset:4px}.sui-placeholder-white::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(255 255 255/var(--tw-placeholder-opacity,1))}.sui-placeholder-white::placeholder{--tw-placeholder-opacity:1;color:rgb(255 255 255/var(--tw-placeholder-opacity,1))}.sui-placeholder-white\\\\/60::-moz-placeholder{color:hsla(0,0%,100%,.6)}.sui-placeholder-white\\\\/60::placeholder{color:hsla(0,0%,100%,.6)}.sui-opacity-0{opacity:0}.sui-opacity-100{opacity:1}.sui-opacity-25{opacity:.25}.sui-opacity-40{opacity:.4}.sui-opacity-50{opacity:.5}.sui-opacity-75{opacity:.75}.sui-shadow-\\\\[0_4px_10px_rgba\\\\(26\\\\,32\\\\,44\\\\,0\\\\.15\\\\)\\\\]{--tw-shadow:0 4px 10px rgba(26,32,44,.15);--tw-shadow-colored:0 4px 10px var(--tw-shadow-color)}.sui-shadow-\\\\[0_4px_10px_rgba\\\\(26\\\\,32\\\\,44\\\\,0\\\\.15\\\\)\\\\],.sui-shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.sui-shadow-lg{--tw-shadow:0 8px 16px 0 rgba(3,7,18,.08);--tw-shadow-colored:0 8px 16px 0 var(--tw-shadow-color)}.sui-shadow-md{--tw-shadow:0 4px 8px 0 rgba(3,7,18,.08);--tw-shadow-colored:0 4px 8px 0 var(--tw-shadow-color)}.sui-shadow-md,.sui-shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.sui-shadow-sm{--tw-shadow:0 2px 8px 0 rgba(3,7,18,.1);--tw-shadow-colored:0 2px 8px 0 var(--tw-shadow-color)}.sui-shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.sui-outline-none{outline:2px solid transparent;outline-offset:2px}.sui-ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.sui-ring-primary-600{--tw-ring-opacity:1;--tw-ring-color:rgb(43 58 124/var(--tw-ring-opacity,1))}.sui-ring-primary-600\\\\/30{--tw-ring-color:rgba(43,58,124,.3)}.sui-ring-offset-2{--tw-ring-offset-width:2px}.sui-ring-offset-white{--tw-ring-offset-color:#fff}.sui-backdrop-blur-sm{--tw-backdrop-blur:blur(4px);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.sui-transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.sui-transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.sui-transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.sui-transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.sui-duration-150{transition-duration:.15s}.sui-duration-200{transition-duration:.2s}.sui-duration-300{transition-duration:.3s}.sui-ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.sui-title-20-medium{font-size:1.25rem;line-height:150%;letter-spacing:-.02em;font-weight:500}.sui-body-16,.sui-body-16-medium{font-size:1rem;line-height:150%;letter-spacing:-.02em}.sui-body-16-medium{font-weight:500}.sui-body-14,.sui-body-14-medium{font-size:.875rem;line-height:150%;letter-spacing:-.02em}.sui-body-14-medium{font-weight:500}.sui-body-12-medium{font-weight:500}.sui-body-12-medium,.sui-label-12{font-size:.75rem;line-height:150%;letter-spacing:-.02em}.sui-button-14-medium{font-weight:500}.sui-button-14-medium,.sui-button-14-semibold{font-size:.875rem;line-height:150%;letter-spacing:-.02em}.sui-button-14-semibold{font-weight:600}.sui-select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.sui-transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.sui-scrollbars-thin{scrollbar-width:thin;scrollbar-color:#b2bbc7 transparent}.sui-scrollbars-thin::-webkit-scrollbar{width:8px;height:8px}.sui-scrollbars-thin::-webkit-scrollbar-track{background:transparent}.sui-scrollbars-thin::-webkit-scrollbar-thumb{background-color:#b2bbc7;border-radius:9999px;border:2px solid transparent;background-clip:content-box}[class*=sui-]{scrollbar-width:thin;scrollbar-color:#b2bbc7 transparent}[class*=sui-]::-webkit-scrollbar{width:8px;height:8px}[class*=sui-]::-webkit-scrollbar-track{background:transparent}[class*=sui-]::-webkit-scrollbar-thumb{background-color:#b2bbc7;border-radius:9999px;border:2px solid transparent;background-clip:content-box}:root{--sui-color-primary:#36499b;--sui-color-secondary:#f2f6fc;--sui-text-default:#23262f;--sui-text-secondary:#777e90;--sui-text-disabled:#b1b5c3;--sui-bg-default:#f2f6fc;--sui-bg-surface:#fff;--sui-stroke-level1:#777e90;--sui-stroke-level2:#b2bbc7;--sui-stroke-level3:#dee3e7;--sui-color-error:#ea3540;--sui-color-warning:#ff7a00;--sui-color-success:#22bc4d;--sui-color-info:#2772f0}[class*=sui-],[class*=sui-] *,[class*=sui-] :after,[class*=sui-] :before{box-sizing:border-box}:root[data-theme=dark],[data-theme=dark],html[data-theme=dark]{color-scheme:dark;--sui-color-primary:#8ea2ff;--sui-color-secondary:#12141a;--sui-text-default:#e6e8ef;--sui-text-secondary:#b3b9c6;--sui-text-disabled:#8a93a5;--sui-bg-default:#0e1116;--sui-bg-surface:#141821;--sui-stroke-level1:#4a5160;--sui-stroke-level2:#3a4150;--sui-stroke-level3:#2a2f3a;--sui-color-error:#ff6b73;--sui-color-warning:#ffb057;--sui-color-success:#43d383;--sui-color-info:#6aa5ff}.placeholder\\\\:sui-text-14::-moz-placeholder{font-size:.875rem;line-height:150%;letter-spacing:-.02em}.placeholder\\\\:sui-text-14::placeholder{font-size:.875rem;line-height:150%;letter-spacing:-.02em}.placeholder\\\\:sui-text-disabled::-moz-placeholder{--tw-text-opacity:1;color:rgb(178 187 199/var(--tw-text-opacity,1))}.placeholder\\\\:sui-text-disabled::placeholder{--tw-text-opacity:1;color:rgb(178 187 199/var(--tw-text-opacity,1))}.focus-within\\\\:sui-border-primary:focus-within{--tw-border-opacity:1;border-color:rgb(54 73 155/var(--tw-border-opacity,1))}.focus-within\\\\:sui-shadow-sm:focus-within{--tw-shadow:0 2px 8px 0 rgba(3,7,18,.1);--tw-shadow-colored:0 2px 8px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.hover\\\\:sui-border-primary\\\\/80:hover{border-color:rgba(54,73,155,.8)}.hover\\\\:sui-bg-background-default:hover{--tw-bg-opacity:1;background-color:rgb(242 246 252/var(--tw-bg-opacity,1))}.hover\\\\:sui-bg-background-secondary2:hover{--tw-bg-opacity:1;background-color:rgb(225 234 248/var(--tw-bg-opacity,1))}.hover\\\\:sui-bg-background-secondary3:hover{--tw-bg-opacity:1;background-color:rgb(201 218 244/var(--tw-bg-opacity,1))}.hover\\\\:sui-bg-primary\\\\/5:hover{background-color:rgba(54,73,155,.05)}.hover\\\\:sui-bg-primary\\\\/90:hover{background-color:rgba(54,73,155,.9)}.hover\\\\:sui-bg-secondary:hover{--tw-bg-opacity:1;background-color:rgb(242 246 252/var(--tw-bg-opacity,1))}.hover\\\\:sui-bg-secondary-2:hover{--tw-bg-opacity:1;background-color:rgb(225 234 248/var(--tw-bg-opacity,1))}.hover\\\\:sui-bg-stroke-level3:hover{--tw-bg-opacity:1;background-color:rgb(222 227 231/var(--tw-bg-opacity,1))}.hover\\\\:sui-bg-white\\\\/60:hover{background-color:hsla(0,0%,100%,.6)}.hover\\\\:sui-underline:hover{text-decoration-line:underline}.hover\\\\:sui-opacity-100:hover{opacity:1}.hover\\\\:sui-opacity-90:hover{opacity:.9}.focus\\\\:sui-border-error:focus{--tw-border-opacity:1;border-color:rgb(234 53 64/var(--tw-border-opacity,1))}.focus\\\\:sui-border-primary:focus{--tw-border-opacity:1;border-color:rgb(54 73 155/var(--tw-border-opacity,1))}.focus\\\\:sui-bg-white\\\\/30:focus{background-color:hsla(0,0%,100%,.3)}.focus\\\\:sui-outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\\\\:sui-ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\\\\:sui-ring-primary:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(54 73 155/var(--tw-ring-opacity,1))}.focus\\\\:sui-ring-offset-1:focus{--tw-ring-offset-width:1px}.focus-visible\\\\:sui-border-error:focus-visible{--tw-border-opacity:1;border-color:rgb(234 53 64/var(--tw-border-opacity,1))}.focus-visible\\\\:sui-border-primary:focus-visible{--tw-border-opacity:1;border-color:rgb(54 73 155/var(--tw-border-opacity,1))}.focus-visible\\\\:sui-outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\\\\:sui-ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\\\\:sui-ring-primary:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgb(54 73 155/var(--tw-ring-opacity,1))}.focus-visible\\\\:sui-ring-stroke-brand:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgb(54 73 155/var(--tw-ring-opacity,1))}.focus-visible\\\\:sui-ring-offset-2:focus-visible{--tw-ring-offset-width:2px}.enabled\\\\:hover\\\\:sui-border-error\\\\/80:hover:enabled{border-color:rgba(234,53,64,.8)}.enabled\\\\:hover\\\\:sui-border-gray-400:hover:enabled{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity,1))}.enabled\\\\:hover\\\\:sui-border-primary\\\\/80:hover:enabled{border-color:rgba(54,73,155,.8)}.enabled\\\\:hover\\\\:sui-bg-gray-50:hover:enabled{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.enabled\\\\:hover\\\\:sui-bg-primary\\\\/5:hover:enabled{background-color:rgba(54,73,155,.05)}.enabled\\\\:hover\\\\:sui-bg-primary\\\\/90:hover:enabled{background-color:rgba(54,73,155,.9)}.enabled\\\\:hover\\\\:sui-bg-red-50:hover:enabled{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.enabled\\\\:hover\\\\:sui-text-info\\\\/80:hover:enabled{color:rgba(39,114,240,.8)}.enabled\\\\:hover\\\\:sui-text-primary\\\\/80:hover:enabled{color:rgba(54,73,155,.8)}.enabled\\\\:hover\\\\:sui-underline:hover:enabled{text-decoration-line:underline}.enabled\\\\:hover\\\\:sui-shadow-md:hover:enabled{--tw-shadow:0 4px 8px 0 rgba(3,7,18,.08);--tw-shadow-colored:0 4px 8px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.enabled\\\\:active\\\\:sui-scale-95:active:enabled{--tw-scale-x:.95;--tw-scale-y:.95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.enabled\\\\:active\\\\:sui-bg-gray-100:active:enabled{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.enabled\\\\:active\\\\:sui-bg-primary\\\\/10:active:enabled{background-color:rgba(54,73,155,.1)}.enabled\\\\:active\\\\:sui-bg-primary\\\\/95:active:enabled{background-color:rgba(54,73,155,.95)}.enabled\\\\:active\\\\:sui-bg-red-100:active:enabled{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.enabled\\\\:active\\\\:sui-text-info\\\\/90:active:enabled{color:rgba(39,114,240,.9)}.disabled\\\\:sui-cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\\\:sui-border-icon-gray:disabled{--tw-border-opacity:1;border-color:rgb(119 126 144/var(--tw-border-opacity,1))}.disabled\\\\:sui-bg-secondary:disabled{--tw-bg-opacity:1;background-color:rgb(242 246 252/var(--tw-bg-opacity,1))}.disabled\\\\:sui-text-icon-gray:disabled{--tw-text-opacity:1;color:rgb(119 126 144/var(--tw-text-opacity,1))}.disabled\\\\:sui-opacity-30:disabled{opacity:.3}.disabled\\\\:sui-opacity-50:disabled{opacity:.5}.sui-group:hover .group-hover\\\\:sui-scale-110{--tw-scale-x:1.1;--tw-scale-y:1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sui-peer:focus-visible~.peer-focus-visible\\\\:sui-ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.sui-peer:focus-visible~.peer-focus-visible\\\\:sui-ring-primary{--tw-ring-opacity:1;--tw-ring-color:rgb(54 73 155/var(--tw-ring-opacity,1))}.sui-peer:focus-visible~.peer-focus-visible\\\\:sui-ring-offset-2{--tw-ring-offset-width:2px}.sui-peer:focus-visible~.peer-focus-visible\\\\:sui-ring-offset-white{--tw-ring-offset-color:#fff}@media (min-width:640px){.sm\\\\:sui-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width:768px){.md\\\\:sui-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (min-width:1024px){.lg\\\\:sui-grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}}.sui-peer:checked~.peer-checked\\\\:\\\\[\\\\&_\\\\.sui-checkbox-check\\\\]\\\\:sui-opacity-100 .sui-checkbox-check{opacity:1}.sui-peer:indeterminate~.peer-indeterminate\\\\:\\\\[\\\\&_\\\\.sui-checkbox-minus\\\\]\\\\:sui-opacity-100 .sui-checkbox-minus{opacity:1}.sui-peer:checked~.peer-checked\\\\:\\\\[\\\\&_\\\\.sui-checkbox-square\\\\]\\\\:sui-fill-error .sui-checkbox-square{fill:#ea3540}.sui-peer:checked~.peer-checked\\\\:\\\\[\\\\&_\\\\.sui-checkbox-square\\\\]\\\\:sui-fill-primary .sui-checkbox-square{fill:#36499b}.sui-peer:checked~.peer-checked\\\\:\\\\[\\\\&_\\\\.sui-checkbox-square\\\\]\\\\:sui-stroke-error .sui-checkbox-square{stroke:#ea3540}.sui-peer:checked~.peer-checked\\\\:\\\\[\\\\&_\\\\.sui-checkbox-square\\\\]\\\\:sui-stroke-primary .sui-checkbox-square{stroke:#36499b}.sui-peer:indeterminate~.peer-indeterminate\\\\:\\\\[\\\\&_\\\\.sui-checkbox-square\\\\]\\\\:sui-fill-primary .sui-checkbox-square{fill:#36499b}.sui-peer:indeterminate~.peer-indeterminate\\\\:\\\\[\\\\&_\\\\.sui-checkbox-square\\\\]\\\\:sui-stroke-primary .sui-checkbox-square{stroke:#36499b}.sui-peer:checked~.peer-checked\\\\:\\\\[\\\\&_\\\\.sui-radio-dot\\\\]\\\\:sui-text-error .sui-radio-dot{--tw-text-opacity:1;color:rgb(234 53 64/var(--tw-text-opacity,1))}.sui-peer:checked~.peer-checked\\\\:\\\\[\\\\&_\\\\.sui-radio-dot\\\\]\\\\:sui-text-primary .sui-radio-dot{--tw-text-opacity:1;color:rgb(54 73 155/var(--tw-text-opacity,1))}.sui-peer:checked~.peer-checked\\\\:\\\\[\\\\&_\\\\.sui-radio-dot\\\\]\\\\:sui-opacity-100 .sui-radio-dot{opacity:1}.sui-peer:checked~.peer-checked\\\\:\\\\[\\\\&_\\\\.sui-radio-ring\\\\]\\\\:sui-text-error .sui-radio-ring{--tw-text-opacity:1;color:rgb(234 53 64/var(--tw-text-opacity,1))}.sui-peer:checked~.peer-checked\\\\:\\\\[\\\\&_\\\\.sui-radio-ring\\\\]\\\\:sui-text-primary .sui-radio-ring{--tw-text-opacity:1;color:rgb(54 73 155/var(--tw-text-opacity,1))}\";\n","import { SCALABLY_UI_STYLES } from \"@/lib/styles-inline\";\nimport { useEffect } from \"react\";\n\ninterface ScalablyUIProviderProps {\n children: React.ReactNode;\n /**\n * @deprecated `className` is no longer needed. Styles are applied globally.\n */\n className?: string;\n /**\n * @deprecated `asChild` is no longer needed. Styles are applied globally.\n */\n asChild?: boolean;\n /**\n * When true, automatically injects the component library styles into document.head.\n * This ensures styles work in portals (modals, tooltips, etc.) without requiring\n * manual CSS imports. Defaults to true.\n */\n injectStyles?: boolean;\n}\n\n/**\n * ScalablyUIProvider\n *\n * Provides the Scalably UI component library context and automatically injects styles.\n * All classes are globally prefixed (`sui-*`), so no wrapper element is required.\n *\n * Features:\n * - Automatically injects CSS into document.head (prevents double-injection)\n * - Works with SSR (only injects on client-side)\n * - Ensures styles are available for portaled components\n * - Maintains style isolation via 'sui-' prefix\n *\n * Usage:\n * ```tsx\n * <ScalablyUIProvider>\n * <App />\n * </ScalablyUIProvider>\n * ```\n *\n * To disable automatic style injection (if you import CSS manually):\n * ```tsx\n * <ScalablyUIProvider injectStyles={false}>\n * <App />\n * </ScalablyUIProvider>\n * ```\n */\nconst ScalablyUIProvider: React.FC<ScalablyUIProviderProps> = ({\n children,\n className,\n asChild,\n injectStyles = true,\n}: ScalablyUIProviderProps) => {\n // Automatically inject styles into document.head\n // This ensures styles work in portals (modals, tooltips, etc.)\n useEffect(() => {\n if (!injectStyles || typeof window === \"undefined\") {\n return;\n }\n\n // Check if styles are already injected (prevent double-injection in StrictMode)\n const existingStyle = document.head.querySelector(\n '[data-scalably-ui-styles=\"true\"]'\n );\n\n if (!existingStyle && SCALABLY_UI_STYLES) {\n const styleEl = document.createElement(\"style\");\n styleEl.setAttribute(\"data-scalably-ui-styles\", \"true\");\n styleEl.textContent = SCALABLY_UI_STYLES;\n document.head.appendChild(styleEl);\n }\n }, [injectStyles]);\n\n const globalProcess =\n typeof globalThis !== \"undefined\"\n ? (\n globalThis as {\n process?: { env?: Record<string, string | undefined> };\n }\n ).process\n : undefined;\n const isDevelopment = globalProcess?.env?.NODE_ENV !== \"production\";\n\n if (isDevelopment && (className || typeof asChild === \"boolean\")) {\n console.warn(\n \"ScalablyUIProvider: 'className' and 'asChild' props are deprecated and will be removed in a future release. Styles are injected globally now.\"\n );\n }\n\n return <>{children}</>;\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","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\n/**\n * Props for the DiscordIcon component\n */\ninterface DiscordIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 32. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * Discord icon component - displays the Discord logo.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { DiscordIcon } from '@scalably/ui';\n *\n * <DiscordIcon size={32} className=\"sui-text-primary\" />\n * ```\n */\nconst DiscordIcon = memo(\n forwardRef<SVGSVGElement, DiscordIconProps>(\n ({ size = 32, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 32 32\"\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_3906_931)\">\n <path\n d=\"M16 0C7.16375 0 0 7.16375 0 16C0 24.8363 7.16375 32 16 32C24.8363 32 32 24.8363 32 16C32 7.16375 24.8363 0 16 0Z\"\n fill=\"#5865F2\"\n />\n <path\n d=\"M22.9419 10.2563C21.6302 9.66168 20.2427 9.2392 18.8158 9C18.638 9.31133 18.4304 9.73006 18.2872 10.0632C16.7487 9.83903 15.2244 9.83903 13.7143 10.0632C13.5712 9.73013 13.3588 9.31133 13.1794 9C11.7512 9.23931 10.3624 9.66286 9.05015 10.2594C6.4389 14.0826 5.73101 17.8107 6.08492 21.486C7.81687 22.7391 9.49531 23.5003 11.1455 23.9985C11.5556 23.4521 11.9181 22.8736 12.2293 22.269C11.6368 22.0504 11.0656 21.7811 10.5226 21.4642C10.6655 21.3616 10.805 21.2546 10.941 21.1435C14.2318 22.6348 17.8074 22.6348 21.059 21.1435C21.1956 21.2539 21.335 21.3608 21.4773 21.4642C20.9334 21.782 20.3612 22.0518 19.7675 22.2706C20.0805 22.8776 20.4423 23.4567 20.8513 24C22.503 23.5019 24.183 22.7407 25.915 21.486C26.3303 17.2254 25.2056 13.5315 22.9419 10.2563ZM12.6776 19.2257C11.6898 19.2257 10.8796 18.3322 10.8796 17.2441C10.8796 16.156 11.6725 15.2609 12.6776 15.2609C13.6828 15.2609 14.493 16.1544 14.4757 17.2441C14.4773 18.3322 13.6829 19.2257 12.6776 19.2257ZM19.3223 19.2257C18.3344 19.2257 17.5243 18.3322 17.5243 17.2441C17.5243 16.156 18.3171 15.2609 19.3223 15.2609C20.3275 15.2609 21.1376 16.1544 21.1203 17.2441C21.1203 18.3322 20.3275 19.2257 19.3223 19.2257Z\"\n fill=\"white\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_3906_931\">\n <rect width={size} height={size} fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n }\n )\n);\nDiscordIcon.displayName = \"DiscordIcon\";\n\nexport { DiscordIcon, type DiscordIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface FacebookIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 32. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * Facebook icon component - displays the Facebook logo.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { FacebookIcon } from '@scalably/ui';\n *\n * <FacebookIcon size={32} className=\"sui-text-primary\" />\n * ```\n */\nconst FacebookIcon = memo(\n forwardRef<SVGSVGElement, FacebookIconProps>(\n ({ size = 32, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 32 32\"\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_3906_896)\">\n <path\n d=\"M32 16C32 7.1635 24.8365 0 16 0C7.1635 0 0 7.1635 0 16C0 23.986 5.851 30.6054 13.5 31.8056V20.625H9.4375V16H13.5V12.475C13.5 8.465 15.8888 6.25 19.5435 6.25C21.294 6.25 23.125 6.5625 23.125 6.5625V10.5H21.1075C19.1199 10.5 18.5 11.7334 18.5 12.9987V16H22.9375L22.2281 20.625H18.5V31.8056C26.149 30.6054 32 23.9861 32 16Z\"\n fill=\"#1877F2\"\n />\n <path\n d=\"M22.2281 20.625L22.9375 16H18.5V12.9987C18.5 11.7332 19.1199 10.5 21.1075 10.5H23.125V6.5625C23.125 6.5625 21.294 6.25 19.5434 6.25C15.8888 6.25 13.5 8.465 13.5 12.475V16H9.4375V20.625H13.5V31.8056C14.327 31.9352 15.1629 32.0002 16 32C16.8371 32.0002 17.673 31.9352 18.5 31.8056V20.625H22.2281Z\"\n fill=\"white\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_3906_896\">\n <rect width={size} height={size} fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n }\n )\n);\nFacebookIcon.displayName = \"FacebookIcon\";\n\nexport { FacebookIcon, type FacebookIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface GmailIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 32. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * Gmail icon component - displays the Gmail logo.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { GmailIcon } from '@scalably/ui';\n *\n * <GmailIcon size={32} className=\"sui-text-primary\" />\n * ```\n */\nconst GmailIcon = memo(\n forwardRef<SVGSVGElement, GmailIconProps>(\n ({ size = 32, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 32 32\"\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.27346 27.8819V15.5822L3.43948 12.0925L0.00146484 10.1559V25.7113C0.00146484 26.9123 0.979488 27.8819 2.18311 27.8819H7.27346Z\"\n fill=\"#4285F4\"\n />\n <path\n d=\"M24.7266 27.8819H29.8169C31.0242 27.8819 31.9986 26.9087 31.9986 25.7113V10.1561L28.1045 12.3741L24.7266 15.5822V27.8819Z\"\n fill=\"#34A853\"\n />\n <path\n d=\"M7.27365 15.5822L6.75195 10.7763L7.27365 6.17667L16 12.6883L24.7263 6.17667L25.3099 10.528L24.7263 15.5822L16 22.0938L7.27365 15.5822Z\"\n fill=\"#EA4335\"\n />\n <path\n d=\"M24.7266 6.17667V15.5822L31.9986 10.1559V7.26189C31.9986 4.57775 28.9189 3.04759 26.7629 4.65733L24.7266 6.17667Z\"\n fill=\"#FBBC04\"\n />\n <path\n d=\"M0.00195312 10.156L3.34648 12.6517L7.27395 15.5822V6.17668L5.23766 4.65734C3.07788 3.04748 0.00195312 4.57776 0.00195312 7.26178V10.156Z\"\n fill=\"#C5221F\"\n />\n </svg>\n );\n }\n )\n);\nGmailIcon.displayName = \"GmailIcon\";\nexport { GmailIcon, type GmailIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface InstagramIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 32. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * Instagram icon component - displays the Instagram logo.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { InstagramIcon } from '@scalably/ui';\n *\n * <InstagramIcon size={32} className=\"sui-text-primary\" />\n * ```\n */\nconst InstagramIcon = memo(\n forwardRef<SVGSVGElement, InstagramIconProps>(\n ({ size = 32, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 32 32\"\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_3906_1520)\">\n <path\n d=\"M24.6217 0H7.37832C3.30338 0 0 3.30338 0 7.37832V24.6217C0 28.6966 3.30338 32 7.37832 32H24.6217C28.6966 32 32 28.6966 32 24.6217V7.37832C32 3.30338 28.6966 0 24.6217 0Z\"\n fill=\"url(#paint0_linear_3906_1520)\"\n />\n <path\n d=\"M21.1612 6.31316C22.376 6.31805 23.5396 6.80279 24.3986 7.66179C25.2576 8.52079 25.7424 9.68444 25.7473 10.8992V21.1008C25.7424 22.3156 25.2576 23.4792 24.3986 24.3382C23.5396 25.1972 22.376 25.6819 21.1612 25.6868H10.8399C9.62514 25.6819 8.4615 25.1972 7.6025 24.3382C6.7435 23.4792 6.25875 22.3156 6.25386 21.1008V10.8992C6.25875 9.68444 6.7435 8.52079 7.6025 7.66179C8.4615 6.80279 9.62514 6.31805 10.8399 6.31316H21.1612ZM21.1612 4.1801H10.8399C7.14424 4.1801 4.12012 7.20767 4.12012 10.8999V21.1008C4.12012 24.7964 7.14768 27.8206 10.8399 27.8206H21.1612C24.8569 27.8206 27.881 24.793 27.881 21.1008V10.8992C27.881 7.20354 24.8569 4.1801 21.1612 4.1801Z\"\n fill=\"white\"\n />\n <path\n d=\"M16.0003 12.018C16.7878 12.018 17.5577 12.2516 18.2125 12.6891C18.8673 13.1267 19.3777 13.7485 19.6791 14.4762C19.9805 15.2038 20.0593 16.0044 19.9057 16.7768C19.752 17.5492 19.3728 18.2587 18.8159 18.8156C18.259 19.3725 17.5495 19.7518 16.7771 19.9054C16.0047 20.059 15.204 19.9802 14.4764 19.6788C13.7488 19.3774 13.1269 18.867 12.6894 18.2122C12.2519 17.5574 12.0183 16.7875 12.0183 16C12.0196 14.9443 12.4395 13.9322 13.186 13.1857C13.9325 12.4392 14.9446 12.0193 16.0003 12.018ZM16.0003 9.88498C14.7908 9.88498 13.6085 10.2436 12.6029 10.9155C11.5973 11.5875 10.8136 12.5425 10.3507 13.6599C9.8879 14.7772 9.76681 16.0068 10.0028 17.193C10.2387 18.3791 10.8211 19.4687 11.6763 20.3239C12.5315 21.1791 13.6211 21.7615 14.8073 21.9975C15.9935 22.2334 17.223 22.1123 18.3404 21.6495C19.4577 21.1867 20.4128 20.4029 21.0847 19.3973C21.7566 18.3917 22.1152 17.2094 22.1152 16C22.1152 14.3782 21.471 12.8228 20.3242 11.676C19.1774 10.5292 17.6221 9.88498 16.0003 9.88498Z\"\n fill=\"white\"\n />\n <path\n d=\"M22.2486 11.0665C23.0493 11.0665 23.6984 10.4174 23.6984 9.61666C23.6984 8.81596 23.0493 8.16687 22.2486 8.16687C21.4479 8.16687 20.7988 8.81596 20.7988 9.61666C20.7988 10.4174 21.4479 11.0665 22.2486 11.0665Z\"\n fill=\"white\"\n />\n </g>\n <defs>\n <linearGradient\n id=\"paint0_linear_3906_1520\"\n x1={20.9728}\n y1={33.3431}\n x2={11.0272}\n y2={-1.34314}\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#FFDB73\" />\n <stop offset={0.08} stopColor=\"#FDAD4E\" />\n <stop offset={0.15} stopColor=\"#FB832E\" />\n <stop offset={0.19} stopColor=\"#FA7321\" />\n <stop offset={0.23} stopColor=\"#F6692F\" />\n <stop offset={0.37} stopColor=\"#E84A5A\" />\n <stop offset={0.48} stopColor=\"#E03675\" />\n <stop offset={0.55} stopColor=\"#DD2F7F\" />\n <stop offset={0.68} stopColor=\"#B43D97\" />\n <stop offset={0.97} stopColor=\"#4D60D4\" />\n <stop offset={1} stopColor=\"#4264DB\" />\n </linearGradient>\n <clipPath id=\"clip0_3906_1520\">\n <rect width={size} height={size} fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n }\n )\n);\nInstagramIcon.displayName = \"InstagramIcon\";\nexport { InstagramIcon, type InstagramIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface KakaoTalkIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 32. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * KakaoTalk icon component - displays the KakaoTalk logo.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { KakaoTalkIcon } from '@scalably/ui';\n *\n * <KakaoTalkIcon size={32} className=\"sui-text-primary\" />\n * ```\n */\nconst KakaoTalkIcon = memo(\n forwardRef<SVGSVGElement, KakaoTalkIconProps>(\n ({ size = 32, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 32 32\"\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_3906_973)\">\n <path\n d=\"M16 32C24.8366 32 32 24.8366 32 16C32 7.16344 24.8366 0 16 0C7.16344 0 0 7.16344 0 16C0 24.8366 7.16344 32 16 32Z\"\n fill=\"#FFEB3B\"\n />\n <path\n d=\"M13.8855 14.6655L13.3091 16.2909H14.46L13.8855 14.6655ZM13.8855 14.6655L13.3091 16.2909H14.46L13.8855 14.6655ZM16 7.74364C10.4782 7.74364 6 11.2491 6 15.5764C6 18.3727 7.87091 20.8273 10.6873 22.2109C9.28909 27.0018 8.46727 27.3145 14.2236 23.2836C14.8121 23.3665 15.4057 23.4078 16 23.4073C21.5218 23.4073 26 19.9 26 15.5745C26 11.2491 21.5218 7.74364 16 7.74364ZM10.4709 18.3091C9.47273 18.3091 10.0618 16.9291 9.89455 14.3582C9.53091 14.2964 8.42727 14.6055 8.42727 13.7964C8.42823 13.6472 8.48829 13.5045 8.59428 13.3995C8.70027 13.2946 8.84355 13.2359 8.99273 13.2364C11.0909 13.3873 12.5127 12.8455 12.5127 13.7964C12.5127 14.62 11.4509 14.2891 11.0473 14.3582C10.88 16.92 11.4673 18.3091 10.4709 18.3091ZM15.8964 18.2218C15 18.6291 14.9782 17.7109 14.7636 17.3127H13.0055C12.7891 17.72 12.7709 18.6364 11.8727 18.2218C11.1982 17.9127 12.2964 16.3436 13.1164 13.8C13.1688 13.6376 13.2715 13.4959 13.4095 13.3955C13.5475 13.295 13.7138 13.2409 13.8845 13.2409C14.0553 13.2409 14.2216 13.295 14.3596 13.3955C14.4976 13.4959 14.6002 13.6376 14.6527 13.8C15.4891 16.3927 16.5745 17.9127 15.8964 18.2218ZM16.9618 18.2218C15.9964 18.2218 16.5836 16.9182 16.4164 13.8036C16.4164 13.0455 17.5945 13.0473 17.5945 13.8036V17.1745C18.1509 17.2491 19.3727 16.9 19.3727 17.7C19.3655 18.5455 18.0527 18.1182 16.9618 18.2255V18.2218ZM22.2964 18.0564L20.9436 16.2745L20.7436 16.4745V17.7273C20.7436 17.803 20.7287 17.878 20.6996 17.948C20.6705 18.0179 20.6278 18.0814 20.5741 18.1348C20.5203 18.1882 20.4566 18.2305 20.3864 18.2591C20.3163 18.2878 20.2412 18.3023 20.1655 18.3018C19.1636 18.3018 19.7636 16.8582 19.5891 13.8073C19.5901 13.655 19.6512 13.5094 19.7592 13.4021C19.8672 13.2948 20.0132 13.2345 20.1655 13.2345C21.0364 13.2345 20.66 14.4673 20.7418 15.04C22.3782 13.4782 22.3364 13.3127 22.6727 13.3127C23.1364 13.3127 23.42 13.8891 23.1109 14.1945L21.7964 15.5L23.2164 17.3691C23.68 17.9745 22.7545 18.6673 22.2964 18.06V18.0564ZM13.3091 16.2909H14.46L13.8855 14.6655L13.3091 16.2909ZM13.8855 14.6655L13.3091 16.2909H14.46L13.8855 14.6655ZM13.8855 14.6655L13.3091 16.2909H14.46L13.8855 14.6655Z\"\n fill=\"#3E2723\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_3906_973\">\n <rect width={size} height={size} fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n }\n )\n);\nKakaoTalkIcon.displayName = \"KakaoTalkIcon\";\nexport { KakaoTalkIcon, type KakaoTalkIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface LineIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 32. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * Line icon component - displays the Line logo.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { LineIcon } from '@scalably/ui';\n *\n * <LineIcon size={32} className=\"sui-text-primary\" />\n * ```\n */\nconst LineIcon = memo(\n forwardRef<SVGSVGElement, LineIconProps>(\n ({ size = 32, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 32 32\"\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_3906_955)\">\n <path\n d=\"M16 32C24.8366 32 32 24.8366 32 16C32 7.16344 24.8366 0 16 0C7.16344 0 0 7.16344 0 16C0 24.8366 7.16344 32 16 32Z\"\n fill=\"#39CD00\"\n />\n <path\n d=\"M26 15.6364C25.9858 15.8395 25.9597 16.0417 25.9218 16.2418C25.7953 17.008 25.5363 17.7463 25.1564 18.4236C24.9745 18.7473 24.1 19.9764 23.8327 20.3C22.3545 22.08 19.8782 24.1345 15.74 26.1327C15.6527 26.1749 15.5557 26.193 15.4591 26.1853C15.3624 26.1775 15.2696 26.1441 15.1902 26.0886C15.1107 26.033 15.0475 25.9573 15.007 25.8692C14.9666 25.781 14.9503 25.6837 14.96 25.5873L15.1691 23.7091C15.1849 23.5654 15.1431 23.4213 15.0527 23.3085C14.9624 23.1956 14.8309 23.1233 14.6873 23.1073C13.3106 22.9695 11.9696 22.5872 10.7273 21.9782C7.89091 20.5764 6 18.0727 6 15.22C6 10.8273 10.4764 7.27272 16 7.27272C18.7745 7.27272 21.2836 8.18181 23.0909 9.62363C24.7836 10.9782 25.8673 12.8164 25.9836 14.8564C26.003 15.1159 26.0085 15.3763 26 15.6364Z\"\n fill=\"white\"\n />\n <path\n d=\"M13.2439 16.98C13.2922 17.0273 13.3305 17.0839 13.3565 17.1464C13.3824 17.2089 13.3954 17.276 13.3948 17.3436C13.395 17.4109 13.382 17.4775 13.3564 17.5397C13.3308 17.6019 13.2933 17.6584 13.2458 17.7061C13.1983 17.7537 13.1419 17.7915 13.0798 17.8173C13.0177 17.8431 12.9511 17.8564 12.8839 17.8564H10.8384C10.7026 17.8559 10.5724 17.8017 10.4764 17.7057C10.3803 17.6096 10.3262 17.4795 10.3257 17.3436V13.48C10.3252 13.4124 10.3384 13.3453 10.3643 13.2829C10.3902 13.2204 10.4284 13.1638 10.4766 13.1164C10.5482 13.0446 10.6395 12.9957 10.7389 12.9759C10.8383 12.9562 10.9414 12.9665 11.0349 13.0055C11.1285 13.0444 11.2084 13.1104 11.2643 13.1949C11.3203 13.2794 11.3499 13.3786 11.3493 13.48V16.8309H12.8839C12.9508 16.8304 13.0172 16.8433 13.079 16.8689C13.1408 16.8945 13.1969 16.9323 13.2439 16.98Z\"\n fill=\"#00C200\"\n />\n <path\n d=\"M14.9095 13.3691V17.4545C14.909 17.5605 14.8667 17.6619 14.7918 17.7368C14.7169 17.8118 14.6154 17.854 14.5095 17.8545H14.2804C14.1743 17.8545 14.0725 17.8124 13.9975 17.7374C13.9225 17.6624 13.8804 17.5606 13.8804 17.4545V13.3691C13.8804 13.263 13.9225 13.1612 13.9975 13.0862C14.0725 13.0112 14.1743 12.9691 14.2804 12.9691H14.504C14.5569 12.9686 14.6094 12.9786 14.6585 12.9984C14.7075 13.0183 14.7522 13.0477 14.7898 13.0848C14.8275 13.122 14.8575 13.1662 14.878 13.215C14.8985 13.2638 14.9092 13.3161 14.9095 13.3691Z\"\n fill=\"#00C200\"\n />\n <path\n d=\"M19.6586 13.48V17.3218C19.6586 17.46 19.605 17.5928 19.509 17.6922C19.413 17.7916 19.2821 17.8498 19.144 17.8545C19.0146 17.8525 18.8906 17.8019 18.7967 17.7127C18.7786 17.6982 18.0913 16.8036 17.5077 16.0509C17.0713 15.4891 16.6931 14.9982 16.6931 14.9982V17.3418C16.6935 17.4412 16.6648 17.5384 16.6108 17.6218C16.5567 17.7051 16.4795 17.7708 16.3886 17.811C16.2977 17.8511 16.1971 17.8639 16.0991 17.8477C16.0011 17.8315 15.9099 17.7872 15.8367 17.72C15.784 17.6722 15.7418 17.6138 15.713 17.5487C15.6842 17.4835 15.6693 17.4131 15.6695 17.3418V13.5018C15.6678 13.3668 15.7179 13.2363 15.8096 13.1372C15.9013 13.0381 16.0275 12.9779 16.1622 12.9691C16.2384 12.9678 16.314 12.9835 16.3835 13.0149C16.453 13.0464 16.5146 13.0928 16.564 13.1509C16.5858 13.1764 17.6422 14.5509 18.2367 15.3327C18.4731 15.6382 18.6367 15.8527 18.6367 15.8527V13.4891C18.6377 13.3539 18.6918 13.2245 18.7874 13.1289C18.8831 13.0333 19.0124 12.9791 19.1477 12.9782C19.2816 12.9782 19.4102 13.0307 19.5057 13.1246C19.6013 13.2185 19.6562 13.3461 19.6586 13.48Z\"\n fill=\"#00C200\"\n />\n <path\n d=\"M21.4549 15.9218V16.8309H22.9876C23.0574 16.8267 23.1273 16.8369 23.193 16.8607C23.2587 16.8846 23.3188 16.9216 23.3697 16.9695C23.4206 17.0175 23.4611 17.0753 23.4888 17.1395C23.5166 17.2036 23.5308 17.2728 23.5308 17.3427C23.5308 17.4126 23.5166 17.4818 23.4888 17.546C23.4611 17.6101 23.4206 17.668 23.3697 17.7159C23.3188 17.7638 23.2587 17.8009 23.193 17.8247C23.1273 17.8485 23.0574 17.8587 22.9876 17.8545H20.9367C20.801 17.8541 20.6711 17.7998 20.5753 17.7037C20.4796 17.6076 20.4258 17.4775 20.4258 17.3418V13.48C20.4263 13.3446 20.4802 13.215 20.576 13.1193C20.6717 13.0235 20.8013 12.9696 20.9367 12.9691H22.9821C23.0519 12.9649 23.1218 12.9751 23.1875 12.9989C23.2532 13.0228 23.3134 13.0598 23.3643 13.1077C23.4151 13.1556 23.4557 13.2135 23.4834 13.2777C23.5111 13.3418 23.5254 13.411 23.5254 13.4809C23.5254 13.5508 23.5111 13.62 23.4834 13.6841C23.4557 13.7483 23.4151 13.8061 23.3643 13.8541C23.3134 13.902 23.2532 13.939 23.1875 13.9629C23.1218 13.9867 23.0519 13.9969 22.9821 13.9927H21.4549V14.9018H22.9876C23.1231 14.9018 23.2531 14.9556 23.3489 15.0514C23.4447 15.1473 23.4985 15.2772 23.4985 15.4127C23.4985 15.5482 23.4447 15.6782 23.3489 15.774C23.2531 15.8698 23.1231 15.9236 22.9876 15.9236L21.4549 15.9218Z\"\n fill=\"#00C200\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_3906_955\">\n <rect width={size} height={size} fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n }\n )\n);\nLineIcon.displayName = \"LineIcon\";\nexport { LineIcon, type LineIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface LinkedInIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 32. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * LinkedIn icon component - displays the LinkedIn logo.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { LinkedInIcon } from '@scalably/ui';\n *\n * <LinkedInIcon size={32} className=\"sui-text-primary\" />\n * ```\n */\nconst LinkedInIcon = memo(\n forwardRef<SVGSVGElement, LinkedInIconProps>(\n ({ size = 32, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 32 32\"\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_3906_908)\">\n <path\n d=\"M27.2655 27.2659H22.5241V19.8405C22.5241 18.0699 22.4925 15.7905 20.0581 15.7905C17.5886 15.7905 17.2108 17.7198 17.2108 19.7116V27.2654H12.4695V11.9959H17.0211V14.0826H17.0849C17.5404 13.3038 18.1987 12.6631 18.9895 12.2287C19.7804 11.7943 20.6742 11.5826 21.5759 11.616C26.3815 11.616 27.2675 14.777 27.2675 18.8893L27.2655 27.2659ZM7.1195 9.90875C5.59988 9.909 4.36775 8.67725 4.3675 7.15763C4.36725 5.638 5.59888 4.40588 7.1185 4.40563C8.63812 4.40525 9.87025 5.637 9.8705 7.15663C9.87063 7.88638 9.58087 8.5863 9.06497 9.10242C8.54906 9.61854 7.84925 9.90859 7.1195 9.90875ZM9.49025 27.266H4.74388V11.9959H9.49012L9.49025 27.266ZM29.6293 0.00225269H2.36137C1.07262 -0.0122473 0.01575 1.02013 0 2.30888V29.6905C0.01525 30.9799 1.072 32.0133 2.36125 31.9998H29.6293C30.9213 32.0158 31.9821 30.9824 32 29.6905V2.30675C31.9816 1.0155 30.9206 -0.0167473 29.6293 0.000127693\"\n fill=\"#0A66C2\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_3906_908\">\n <rect width={size} height={size} fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n }\n )\n);\nLinkedInIcon.displayName = \"LinkedInIcon\";\nexport { LinkedInIcon, type LinkedInIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface MessengerIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 32. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * Messenger icon component - displays the Messenger logo.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { MessengerIcon } from '@scalably/ui';\n *\n * <MessengerIcon size={32} className=\"sui-text-primary\" />\n * ```\n */\nconst MessengerIcon = memo(\n forwardRef<SVGSVGElement, MessengerIconProps>(\n ({ size = 32, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 32 32\"\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_3891_828)\">\n <path\n d=\"M15.9992 0.00311148C7.35243 -0.167372 0.197427 6.68921 0 15.3349C0.0225613 19.7359 1.9714 23.9064 5.33303 26.7471V31.3334C5.33303 31.7015 5.63152 32 5.99969 32C6.12462 32 6.24705 31.9649 6.35298 31.8987L10.0688 29.5776C11.9619 30.3017 13.9723 30.6709 15.9992 30.6668C24.6459 30.8373 31.8009 23.9807 31.9983 15.335C31.8009 6.68921 24.6459 -0.167372 15.9992 0.00311148Z\"\n fill=\"#2196F3\"\n />\n <path\n d=\"M26.5325 10.9354C26.3341 10.6695 25.9704 10.59 25.6792 10.7487L18.7462 14.5285L14.4332 10.83C14.1687 10.6033 13.7742 10.6184 13.5279 10.8647L5.52831 18.8643C5.26876 19.1254 5.27001 19.5475 5.53118 19.8071C5.73999 20.0146 6.06016 20.0606 6.31896 19.9203L13.2519 16.1404L17.569 19.8403C17.8335 20.067 18.228 20.0519 18.4743 19.8056L26.4738 11.806C26.707 11.5707 26.732 11.1999 26.5325 10.9354Z\"\n fill=\"#FAFAFA\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_3891_828\">\n <rect width={size} height={size} fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n }\n )\n);\nMessengerIcon.displayName = \"MessengerIcon\";\nexport { MessengerIcon, type MessengerIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface RedditIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 32. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * Reddit icon component - displays the Reddit logo.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { RedditIcon } from '@scalably/ui';\n *\n * <RedditIcon size={32} className=\"sui-text-primary\" />\n * ```\n */\nconst RedditIcon = memo(\n forwardRef<SVGSVGElement, RedditIconProps>(\n ({ size = 32, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 32 32\"\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_3906_928)\">\n <path\n d=\"M16 32C24.8366 32 32 24.8366 32 16C32 7.16344 24.8366 0 16 0C7.16344 0 0 7.16344 0 16C0 24.8366 7.16344 32 16 32Z\"\n fill=\"#FF4500\"\n />\n <path\n d=\"M26.6439 16.1525C26.6439 14.8555 25.5951 13.8254 24.3168 13.8254C23.713 13.8246 23.1322 14.0569 22.6956 14.474C21.0933 13.3294 18.8996 12.5856 16.4581 12.4903L17.5261 7.49263L20.9977 8.23638C21.0361 9.11388 21.7607 9.81975 22.6574 9.81975C23.5729 9.81975 24.3168 9.076 24.3168 8.16C24.3168 7.2445 23.5731 6.50063 22.6574 6.50063C22.0089 6.50063 21.4364 6.88213 21.1694 7.43538L17.2974 6.61513C17.1829 6.59588 17.0684 6.61513 16.9921 6.67238C16.8967 6.72963 16.8396 6.82488 16.8207 6.93938L15.6377 12.5091C13.1581 12.5856 10.9262 13.3294 9.30495 14.4931C8.86827 14.0761 8.28741 13.8437 7.68357 13.8446C6.38645 13.8446 5.35645 14.8935 5.35645 16.1717C5.35645 17.1254 5.92857 17.9264 6.72995 18.2891C6.69103 18.5223 6.67188 18.7584 6.6727 18.9949C6.6727 22.5806 10.8502 25.4994 16.0003 25.4994C21.1506 25.4994 25.3281 22.5999 25.3281 18.9949C25.3281 18.7585 25.3089 18.5224 25.2708 18.2891C26.0718 17.9264 26.6439 17.1061 26.6439 16.1525ZM10.6592 17.8119C10.6592 16.8964 11.4029 16.1525 12.3189 16.1525C13.2344 16.1525 13.9783 16.8962 13.9783 17.8119C13.9783 18.7275 13.2346 19.4716 12.3189 19.4716C11.4031 19.4904 10.6592 18.7275 10.6592 17.8119ZM19.9488 22.2183C18.8043 23.3629 16.6297 23.4393 16.0003 23.4393C15.3518 23.4393 13.1773 23.3436 12.0516 22.2183C11.8802 22.0466 11.8802 21.7795 12.0516 21.6079C12.2233 21.4365 12.4903 21.4365 12.6621 21.6079C13.3871 22.3329 14.9131 22.5806 16.0003 22.5806C17.0876 22.5806 18.6326 22.3328 19.3383 21.6079C19.5101 21.4365 19.7771 21.4365 19.9488 21.6079C20.1013 21.7795 20.1013 22.0466 19.9488 22.2183ZM19.6434 19.4905C18.7278 19.4905 17.9841 18.7467 17.9841 17.8311C17.9841 16.9155 18.7278 16.1717 19.6434 16.1717C20.5593 16.1717 21.3031 16.9155 21.3031 17.8311C21.3031 18.7274 20.5593 19.4905 19.6434 19.4905Z\"\n fill=\"white\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_3906_928\">\n <rect width={size} height={size} fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n }\n )\n);\nRedditIcon.displayName = \"RedditIcon\";\n\nexport { RedditIcon, type RedditIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface SignalIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 32. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * Signal icon component - displays the Signal logo.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { SignalIcon } from '@scalably/ui';\n *\n * <SignalIcon size={32} className=\"sui-text-primary\" />\n * ```\n */\nconst SignalIcon = memo(\n forwardRef<SVGSVGElement, SignalIconProps>(\n ({ size = 32, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 32 32\"\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_623_7334)\">\n <path\n d=\"M12.1601 0.467495L12.5201 1.92237C11.1039 2.27064 9.74858 2.83111 8.50006 3.58475L7.73006 2.29975C9.1059 1.46913 10.5995 0.851393 12.1601 0.467495ZM19.8401 0.467495L19.4801 1.92237C20.8962 2.27064 22.2515 2.83111 23.5001 3.58475L24.2751 2.29975C22.8977 1.46867 21.4024 0.850916 19.8401 0.467495ZM2.30006 7.72937C1.46939 9.10508 0.851568 10.5985 0.467557 12.159L1.92256 12.519C2.27091 11.103 2.83141 9.74777 3.58506 8.49937L2.30006 7.72937ZM1.50006 15.9987C1.49967 15.2716 1.55399 14.5454 1.66256 13.8264L0.180057 13.6014C-0.060019 15.1906 -0.060019 16.8069 0.180057 18.3961L1.66256 18.1711C1.55399 17.4521 1.49967 16.7259 1.50006 15.9987ZM24.2701 29.6977L23.5001 28.4127C22.2531 29.166 20.8995 29.7265 19.4851 30.0752L19.8451 31.53C21.4039 31.1456 22.8958 30.5279 24.2701 29.6977ZM30.5001 15.9987C30.5004 16.7259 30.4461 17.4521 30.3376 18.1711L31.8201 18.3961C32.0601 16.8069 32.0601 15.1907 31.8201 13.6015L30.3376 13.8265C30.4461 14.5455 30.5004 15.2716 30.5001 15.9987ZM31.5326 19.8385L30.0776 19.4785C29.7292 20.8945 29.1687 22.2497 28.4151 23.4981L29.7001 24.2731C30.5312 22.8959 31.149 21.4007 31.5326 19.8385ZM18.1726 30.3375C16.7323 30.5542 15.2678 30.5542 13.8276 30.3375L13.6026 31.82C15.1919 32.0599 16.8082 32.0599 18.3976 31.82L18.1726 30.3375ZM27.6726 24.6005C26.8077 25.7717 25.772 26.8065 24.6001 27.6702L25.4901 28.8776C26.7829 27.9271 27.9256 26.7878 28.8801 25.4979L27.6726 24.6005ZM24.6001 4.32712C25.7722 5.19165 26.8079 6.22728 27.6726 7.39937L28.8801 6.49937C27.9287 5.21024 26.7893 4.07107 25.5001 3.11987L24.6001 4.32712ZM4.32756 7.39937C5.19218 6.22728 6.22789 5.19165 7.40006 4.32712L6.50006 3.11975C5.21076 4.07102 4.07143 5.21027 3.12006 6.4995L4.32756 7.39937ZM29.7001 7.72937L28.4151 8.49937C29.1682 9.74622 29.7287 11.0997 30.0776 12.514L31.5326 12.154C31.1481 10.5952 30.5303 9.10353 29.7001 7.72937ZM13.8276 1.6625C15.2678 1.44577 16.7323 1.44577 18.1726 1.6625L18.3976 0.179995C16.8082 -0.059917 15.1919 -0.059917 13.6026 0.179995L13.8276 1.6625ZM5.09756 29.2752L2.00006 29.9977L2.72256 26.9004L1.26256 26.5579L0.540057 29.6552C0.481842 29.9037 0.488007 30.163 0.55797 30.4084C0.627933 30.6539 0.759378 30.8774 0.939863 31.0579C1.12035 31.2383 1.3439 31.3698 1.58936 31.4397C1.83482 31.5096 2.09407 31.5157 2.34256 31.4575L5.43756 30.7475L5.09756 29.2752ZM1.57506 25.2205L3.03506 25.5605L3.53506 23.4131C2.8063 22.1884 2.26291 20.8624 1.92256 19.4785L0.467557 19.8385C0.79371 21.164 1.28947 22.4419 1.94256 23.6406L1.57506 25.2205ZM8.57506 28.4702L6.42756 28.9702L6.76756 30.4302L8.34756 30.0627C9.54638 30.7158 10.8244 31.2115 12.1501 31.5375L12.5101 30.0826C11.1289 29.7383 9.80626 29.1916 8.58506 28.4602L8.57506 28.4702ZM16.0001 2.99975C11.2697 3.00225 6.91381 5.57387 4.62693 9.71437C2.34006 13.855 2.48293 18.9109 5.00006 22.9156L3.75006 28.2477L9.08256 26.9979C13.7598 29.9436 19.7884 29.6096 24.1117 26.1654C28.4349 22.7211 30.1071 16.9197 28.2804 11.7031C26.4538 6.48625 21.5276 2.99525 16.0001 2.99975Z\"\n fill=\"#3A76F0\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_623_7334\">\n <rect width={size} height={size} fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n }\n )\n);\nSignalIcon.displayName = \"SignalIcon\";\n\nexport { SignalIcon, type SignalIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface SlackIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 32. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * Slack icon component - displays the Slack logo.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { SlackIcon } from '@scalably/ui';\n *\n * <SlackIcon size={32} className=\"sui-text-primary\" />\n * ```\n */\nconst SlackIcon = memo(\n forwardRef<SVGSVGElement, SlackIconProps>(\n ({ size = 32, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 32 32\"\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_623_7196)\">\n <path\n d=\"M6.73014 20.165C6.73014 22.019 5.23177 23.5175 3.37777 23.5175C1.52377 23.5175 0.0253906 22.019 0.0253906 20.165C0.0253906 18.3111 1.52377 16.8127 3.37789 16.8127H6.73002L6.73014 20.165ZM8.40639 20.165C8.40639 18.3111 9.90477 16.8127 11.7588 16.8127C13.6128 16.8127 15.1111 18.3111 15.1111 20.1651V28.546C15.1111 30.4 13.6128 31.8985 11.7586 31.8985C9.90489 31.8985 8.40639 30.4 8.40639 28.546V20.165Z\"\n fill=\"#E01E5A\"\n />\n <path\n d=\"M11.7587 6.70475C9.90475 6.70475 8.40625 5.20638 8.40625 3.35238C8.40625 1.49838 9.90487 0 11.7587 0C13.6126 0 15.1111 1.49838 15.1111 3.35238V6.70487L11.7587 6.70475ZM11.7587 8.40637C13.6128 8.40637 15.1111 9.90475 15.1111 11.7587C15.1111 13.6128 13.6128 15.1111 11.7586 15.1111H3.3525C1.49837 15.1111 0 13.6128 0 11.7586C0 9.90487 1.49838 8.40637 3.35238 8.40637H11.7587Z\"\n fill=\"#36C5F0\"\n />\n <path\n d=\"M25.194 11.7587C25.194 9.90475 26.6924 8.40625 28.5462 8.40625C30.4001 8.40625 31.8987 9.90475 31.8987 11.7587C31.8987 13.6128 30.4002 15.1111 28.5462 15.1111H25.194V11.7587ZM23.5177 11.7587C23.5177 13.6128 22.0192 15.1111 20.1652 15.1111C18.3114 15.1111 16.813 13.6128 16.813 11.7586V3.3525C16.813 1.49837 18.3114 0 20.1652 0C22.0191 0 23.5176 1.49838 23.5176 3.35238L23.5177 11.7587Z\"\n fill=\"#2EB67D\"\n />\n <path\n d=\"M20.1652 25.1937C22.0192 25.1937 23.5177 26.6921 23.5177 28.546C23.5177 30.3999 22.0192 31.8985 20.1652 31.8985C18.3114 31.8985 16.813 30.4 16.813 28.546V25.1937H20.1652ZM20.1652 23.5175C18.3114 23.5175 16.813 22.019 16.813 20.165C16.813 18.3111 18.3114 16.8127 20.1654 16.8127H28.5716C30.4256 16.8127 31.9241 18.3111 31.9241 20.1651C31.9241 22.0191 30.4256 23.5175 28.5716 23.5175H20.1652Z\"\n fill=\"#ECB22E\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_623_7196\">\n <rect width={size} height={size} fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n }\n )\n);\nSlackIcon.displayName = \"SlackIcon\";\nexport { SlackIcon, type SlackIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface TelegramIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 32. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * Telegram icon component - displays the Telegram logo.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { TelegramIcon } from '@scalably/ui';\n *\n * <TelegramIcon size={32} className=\"sui-text-primary\" />\n * ```\n */\nconst TelegramIcon = memo(\n forwardRef<SVGSVGElement, TelegramIconProps>(\n ({ size = 32, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 32 32\"\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_3906_919)\">\n <path\n d=\"M16 0C11.7575 0 7.685 1.68675 4.6875 4.68625C1.68693 7.68696 0.000858621 11.7565 0 16C0 20.2417 1.6875 24.3142 4.6875 27.3137C7.685 30.3132 11.7575 32 16 32C20.2425 32 24.315 30.3132 27.3125 27.3137C30.3125 24.3142 32 20.2417 32 16C32 11.7583 30.3125 7.68575 27.3125 4.68625C24.315 1.68675 20.2425 0 16 0Z\"\n fill=\"url(#paint0_linear_3906_919)\"\n />\n <path\n d=\"M7.24262 15.831C11.9076 13.799 15.0176 12.4593 16.5726 11.812C21.0176 9.96374 21.9401 9.64274 22.5426 9.63187C22.6751 9.62974 22.9701 9.66249 23.1626 9.81812C23.3226 9.94937 23.3676 10.1269 23.3901 10.2515C23.4101 10.376 23.4376 10.6597 23.4151 10.8812C23.1751 13.4112 22.1326 19.5507 21.6026 22.3845C21.3801 23.5835 20.9376 23.9855 20.5101 24.0247C19.5801 24.1102 18.8751 23.4107 17.9751 22.821C16.5676 21.8977 15.7726 21.3232 14.4051 20.4225C12.8251 19.3815 13.8501 18.8092 14.7501 17.8742C14.9851 17.6295 19.0801 13.9057 19.1576 13.568C19.1676 13.5257 19.1776 13.3682 19.0826 13.2852C18.9901 13.202 18.8526 13.2305 18.7526 13.253C18.6101 13.285 16.3626 14.772 12.0026 17.7137C11.3651 18.1522 10.7876 18.366 10.2676 18.3547C9.69762 18.3425 8.59762 18.0317 7.78012 17.7662C6.78012 17.4405 5.98262 17.2682 6.05262 16.715C6.08762 16.427 6.48512 16.1322 7.24262 15.831Z\"\n fill=\"white\"\n />\n </g>\n <defs>\n <linearGradient\n id=\"paint0_linear_3906_919\"\n x1={1600}\n y1={0}\n x2={1600}\n y2={3200}\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#2AABEE\" />\n <stop offset={1} stopColor=\"#229ED9\" />\n </linearGradient>\n <clipPath id=\"clip0_3906_919\">\n <rect width={size} height={size} fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n }\n )\n);\nTelegramIcon.displayName = \"TelegramIcon\";\nexport { TelegramIcon, type TelegramIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface TiktokIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 32. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * Tiktok icon component - displays the Tiktok logo.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { TiktokIcon } from '@scalably/ui';\n *\n * <TiktokIcon size={32} className=\"sui-text-primary\" />\n * ```\n */\nconst TiktokIcon = memo(\n forwardRef<SVGSVGElement, TiktokIconProps>(\n ({ size = 32, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 32 32\"\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_3906_934)\">\n <path\n d=\"M22.9354 11.5223C24.9964 12.9949 27.5213 13.8613 30.2483 13.8613V8.6166C29.7321 8.6168 29.2174 8.56296 28.7125 8.45594V12.5843C25.9857 12.5843 23.4612 11.718 21.3997 10.2455V20.9485C21.3997 26.3028 17.057 30.6429 11.7004 30.6429C9.70172 30.6429 7.84395 30.0389 6.30078 29.0031C8.06211 30.8032 10.5184 31.9198 13.2357 31.9198C18.5928 31.9198 22.9356 27.5797 22.9356 22.2252V11.5223H22.9354ZM24.83 6.23106C23.7766 5.08093 23.085 3.59459 22.9354 1.95133V1.27679H21.48C21.8464 3.36529 23.096 5.14957 24.83 6.23106ZM9.68881 24.8946C9.10027 24.1234 8.78216 23.1799 8.78365 22.2099C8.78365 19.7611 10.77 17.7756 13.2206 17.7756C13.6772 17.7753 14.1312 17.8454 14.5665 17.9833V12.6213C14.0578 12.5517 13.5445 12.522 13.0314 12.533V16.7064C12.5959 16.5684 12.1417 16.4984 11.6848 16.4988C9.2343 16.4988 7.24809 18.4841 7.24809 20.9332C7.24809 22.6649 8.24086 24.1642 9.68881 24.8946Z\"\n fill=\"#FF004F\"\n />\n <path\n d=\"M21.3999 10.2454C23.4615 11.7178 25.9858 12.5842 28.7127 12.5842V8.45583C27.1906 8.13175 25.8432 7.33682 24.8301 6.23106C23.096 5.14946 21.8466 3.36518 21.4802 1.27679H17.6576V22.225C17.6488 24.6671 15.6659 26.6445 13.2206 26.6445C11.7797 26.6445 10.4995 25.9581 9.68879 24.8944C8.24106 24.1642 7.24818 22.6648 7.24818 20.9333C7.24818 18.4844 9.23439 16.4989 11.6849 16.4989C12.1544 16.4989 12.607 16.5719 13.0315 16.7065V12.5331C7.7689 12.6418 3.53662 16.9395 3.53662 22.2251C3.53662 24.8637 4.59052 27.2556 6.30109 29.0034C7.84426 30.0389 9.70192 30.6431 11.7007 30.6431C17.0574 30.6431 21.4 26.3027 21.4 20.9485L21.3999 10.2454Z\"\n fill=\"black\"\n />\n <path\n d=\"M28.7127 8.45572V7.3397C27.3401 7.34169 25.9947 6.95751 24.8301 6.23106C25.861 7.35902 27.2183 8.13686 28.7127 8.45595M21.4801 1.27669C21.4453 1.07714 21.4185 0.876257 21.3998 0.674538V0H16.1216V20.9484C16.1132 23.3903 14.1303 25.3677 11.6848 25.3677C10.9916 25.3688 10.3078 25.2067 9.6887 24.8947C10.4994 25.9581 11.7796 26.6444 13.2205 26.6444C15.6657 26.6444 17.6489 24.6673 17.6575 22.2251V1.2768L21.4801 1.27669ZM13.0317 12.533V11.3447C12.5906 11.2844 12.146 11.2543 11.7008 11.2544C6.3436 11.2544 2.00098 15.5947 2.00098 20.9484C2.00098 24.305 3.70768 27.2631 6.30122 29.0031C4.59066 27.2555 3.53676 24.8634 3.53676 22.225C3.53676 16.9395 7.76892 12.6417 13.0317 12.533Z\"\n fill=\"#00F2EA\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_3906_934\">\n <rect\n width={28.25}\n height={32}\n fill=\"white\"\n transform=\"translate(2)\"\n />\n </clipPath>\n </defs>\n </svg>\n );\n }\n )\n);\nTiktokIcon.displayName = \"TiktokIcon\";\n\nexport { TiktokIcon, type TiktokIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface TwitchIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 32. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * Twitch icon component - displays the Twitch logo.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { TwitchIcon } from '@scalably/ui';\n *\n * <TwitchIcon size={32} className=\"sui-text-primary\" />\n * ```\n */\nconst TwitchIcon = memo(\n forwardRef<SVGSVGElement, TwitchIconProps>(\n ({ size = 32, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 32 32\"\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=\"M3.086 0L1.00146 5.55893V27.7919H8.64123V31.9631H12.8121L16.979 27.7919H23.231L31.5686 19.4572V0H3.086ZM5.8632 2.77767H28.7901V18.0647L23.9258 22.9293H16.285L12.1194 27.0949V22.9294H5.8632V2.77767ZM13.5059 16.6768H16.285V8.33958H13.5059V16.6768ZM21.1474 16.6768H23.9259V8.33958H21.1474V16.6768Z\"\n fill=\"#5A3E85\"\n />\n </svg>\n );\n }\n )\n);\nTwitchIcon.displayName = \"TwitchIcon\";\n\nexport { TwitchIcon, type TwitchIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface WhatsAppIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 32. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * WhatsApp icon component - displays the WhatsApp logo.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { WhatsAppIcon } from '@scalably/ui';\n *\n * <WhatsAppIcon size={32} className=\"sui-text-primary\" />\n * ```\n */\nconst WhatsAppIcon = memo(\n forwardRef<SVGSVGElement, WhatsAppIconProps>(\n ({ size = 32, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 32 32\"\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_623_7322)\">\n <path\n d=\"M0.681463 15.8085C0.680719 18.4971 1.38323 21.1224 2.71904 23.4363L0.553711 31.3423L8.6445 29.2208C10.8823 30.4391 13.3896 31.0774 15.9375 31.0776H15.9442C24.3554 31.0776 31.2023 24.2332 31.2059 15.8205C31.2075 11.744 29.6214 7.9107 26.7396 5.02673C23.8584 2.14301 20.0265 0.554046 15.9436 0.552185C7.53145 0.552185 0.68506 7.39622 0.681587 15.8085\"\n fill=\"url(#paint0_linear_623_7322)\"\n />\n <path\n d=\"M0.136619 15.8035C0.135751 18.5889 0.863441 21.308 2.24688 23.7048L0.00390625 31.8942L8.38481 29.6967C10.694 30.9558 13.294 31.6196 15.9395 31.6206H15.9464C24.6593 31.6206 31.7521 24.53 31.7558 15.8162C31.7573 11.5932 30.1142 7.62208 27.1295 4.63479C24.1444 1.64788 20.1754 0.00173643 15.9464 0C7.23194 0 0.140092 7.08961 0.136619 15.8035ZM5.12775 23.292L4.81482 22.7953C3.49935 20.7036 2.80502 18.2865 2.80601 15.8045C2.80874 8.56174 8.70319 2.66915 15.9513 2.66915C19.4614 2.67064 22.7601 4.03895 25.2412 6.52155C27.7222 9.0044 29.0874 12.3049 29.0866 15.8152C29.0833 23.058 23.1888 28.9513 15.9464 28.9513H15.9411C13.5829 28.9501 11.2701 28.3168 9.25315 27.12L8.77315 26.8353L3.79975 28.1393L5.12775 23.292Z\"\n fill=\"url(#paint1_linear_623_7322)\"\n />\n <path\n d=\"M11.9949 9.19665C11.699 8.53891 11.3876 8.52564 11.1061 8.5141C10.8757 8.50418 10.6122 8.50493 10.3491 8.50493C10.0856 8.50493 9.65758 8.60403 9.29578 8.99907C8.93361 9.39448 7.91309 10.35 7.91309 12.2935C7.91309 14.2369 9.32865 16.1152 9.52599 16.379C9.72357 16.6424 12.2588 20.7582 16.2739 22.3416C19.6108 23.6574 20.2899 23.3957 21.0141 23.3297C21.7385 23.264 23.3513 22.3744 23.6804 21.452C24.0097 20.5297 24.0097 19.7392 23.911 19.5739C23.8122 19.4094 23.5488 19.3105 23.1538 19.113C22.7587 18.9156 20.8165 17.9598 20.4545 17.828C20.0923 17.6962 19.829 17.6305 19.5656 18.026C19.3021 18.421 18.5456 19.3105 18.3151 19.5739C18.0847 19.838 17.8542 19.8709 17.4593 19.6733C17.064 19.4751 15.7918 19.0585 14.2825 17.7129C13.1081 16.6658 12.3153 15.3728 12.0849 14.9772C11.8544 14.5823 12.0602 14.3682 12.2583 14.1714C12.4358 13.9944 12.6534 13.7101 12.8511 13.4796C13.0481 13.2489 13.1138 13.0843 13.2456 12.8208C13.3774 12.5571 13.3114 12.3264 13.2128 12.1289C13.1138 11.9313 12.3462 9.97767 11.9949 9.19665Z\"\n fill=\"white\"\n />\n </g>\n <defs>\n <linearGradient\n id=\"paint0_linear_623_7322\"\n x1={1533.16}\n y1={3079.56}\n x2={1533.16}\n y2={0.552185}\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#1FAF38\" />\n <stop offset={1} stopColor=\"#60D669\" />\n </linearGradient>\n <linearGradient\n id=\"paint1_linear_623_7322\"\n x1={1587.6}\n y1={3189.42}\n x2={1587.6}\n y2={0}\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#F9F9F9\" />\n <stop offset={1} stopColor=\"white\" />\n </linearGradient>\n <clipPath id=\"clip0_623_7322\">\n <rect width={size} height={size} fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n }\n )\n);\nWhatsAppIcon.displayName = \"WhatsAppIcon\";\nexport { WhatsAppIcon, type WhatsAppIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface XIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 32. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * X icon component - displays the X logo.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { XIcon } from '@scalably/ui';\n *\n * <XIcon size={32} className=\"sui-text-primary\" />\n * ```\n */\nconst XIcon = memo(\n forwardRef<SVGSVGElement, XIconProps>(\n ({ size = 32, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 32 32\"\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_3560_983)\">\n <path\n d=\"M16 0C7.16375 0 0 7.16375 0 16C0 24.8363 7.16375 32 16 32C24.8363 32 32 24.8363 32 16C32 7.16375 24.8363 0 16 0Z\"\n fill=\"black\"\n />\n <path\n d=\"M17.7506 14.5521L24.6 6.59018H22.9769L17.0296 13.5034L12.2795 6.59018H6.80078L13.9839 17.0441L6.80078 25.3934H8.42397L14.7045 18.0928L19.721 25.3934H25.1997L17.7502 14.5521H17.7506ZM9.00881 7.8121H11.5019L22.9777 24.2271H20.4846L9.00881 7.8121Z\"\n fill=\"white\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_3560_983\">\n <rect width={size} height={size} fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n }\n )\n);\n\nXIcon.displayName = \"XIcon\";\nexport { XIcon, type XIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface YoutubeIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 32. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * Youtube icon component - displays the Youtube logo.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { YoutubeIcon } from '@scalably/ui';\n *\n * <YoutubeIcon size={32} className=\"sui-text-primary\" />\n * ```\n */\nconst YoutubeIcon = memo(\n forwardRef<SVGSVGElement, YoutubeIconProps>(\n ({ size = 32, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 32 32\"\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=\"M31.2901 8.43139C31.1066 7.76816 30.7486 7.16351 30.2518 6.67766C29.7551 6.1918 29.1368 5.8417 28.4586 5.6622C25.9759 5 15.9836 5 15.9836 5C15.9836 5 5.99078 5.02004 3.50802 5.68224C2.82984 5.86175 2.21158 6.21188 1.7148 6.69775C1.21802 7.18363 0.860064 7.7883 0.676572 8.45156C-0.0744062 12.7658 -0.365724 19.3396 0.697193 23.4812C0.880704 24.1445 1.23867 24.7491 1.73545 25.235C2.23222 25.7208 2.85048 26.0709 3.52864 26.2504C6.01141 26.9126 16.004 26.9126 16.004 26.9126C16.004 26.9126 25.9964 26.9126 28.479 26.2504C29.1572 26.0709 29.7755 25.7208 30.2723 25.235C30.7691 24.7491 31.1271 24.1445 31.3106 23.4812C32.1027 19.1609 32.3468 12.5911 31.2901 8.43139Z\"\n fill=\"#FF0000\"\n />\n <path\n d=\"M12.8032 20.6518L21.0926 15.9562L12.8032 11.2607V20.6518Z\"\n fill=\"white\"\n />\n </svg>\n );\n }\n )\n);\nYoutubeIcon.displayName = \"YoutubeIcon\";\nexport { YoutubeIcon, type YoutubeIconProps };\n"]}
|
|
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/CaptureIcon.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/SettingsIcon.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/Button/Button.tsx","../src/components/Divider/Divider.tsx","../src/hooks/useControllableState.ts","../src/components/Button/MultipleSelectionButton.tsx","../src/components/AuthPrompt/AuthPrompt.tsx","../src/components/Badge/StatusBadge.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/VideoThumbnailModal.tsx","../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/components/Switch/Switch.tsx","../src/hooks/useDropdownLogic.ts","../src/components/Select/DisplayValue.tsx","../src/components/Select/DropdownMenu.tsx","../src/components/Select/Select.tsx","../src/components/Skeleton/Skeleton.tsx","../src/components/Skeleton/SkeletonText.tsx","../src/components/Tabs/Tabs.tsx","../src/hooks/useCountdown.ts","../src/components/Countdown/Countdown.tsx","../src/components/Toast/Toast.tsx","../src/components/Toast/ToastContainer.tsx","../src/components/Tooltip/Tooltip.tsx","../src/components/ViewToggle/ViewToggle.tsx","../src/assets/default/index.ts","../src/components/AvatarPlaceholder/AvatarPlaceholder.tsx","../src/assets/logo/index.ts","../src/components/Logo/Logo.tsx","../src/components/LoadingScreen/LoadingScreen.tsx","../src/assets/welcome/index.ts","../src/components/WelcomeBackground/WelcomeBackground.tsx","../src/components/RichTextEditor/RichTextCharacterCounter.tsx","../src/icons/editor/AlignCenterIcon.tsx","../src/icons/editor/AlignLeftIcon.tsx","../src/icons/editor/AlignRightIcon.tsx","../src/icons/editor/BoldIcon.tsx","../src/icons/editor/InsertImageIcon.tsx","../src/icons/editor/InsertVideoIcon.tsx","../src/icons/editor/ItalicIcon.tsx","../src/icons/editor/LinkIcon.tsx","../src/icons/editor/ListBulletIcon.tsx","../src/icons/editor/ListNumberIcon.tsx","../src/icons/editor/UnderlineIcon.tsx","../src/components/RichTextEditor/RichTextToolbarButton.tsx","../src/components/RichTextEditor/RichTextImageControl.tsx","../src/components/RichTextEditor/RichTextVideoControl.tsx","../src/components/RichTextEditor/RichtextToolBar.tsx","../src/components/RichTextEditor/styles.ts","../src/components/RichTextEditor/RichTextEditor.tsx","../src/components/RichTextEditor/RichTextViewer.tsx","../src/lib/styles-inline.ts","../src/providers/ScalablyUIProvider.tsx","../src/helpers/form.ts","../src/icons/company/DiscordIcon.tsx","../src/icons/company/FacebookIcon.tsx","../src/icons/company/GmailIcon.tsx","../src/icons/company/InstagramIcon.tsx","../src/icons/company/KakaoTalkIcon.tsx","../src/icons/company/LineIcon.tsx","../src/icons/company/LinkedInIcon.tsx","../src/icons/company/MessengerIcon.tsx","../src/icons/company/RedditIcon.tsx","../src/icons/company/SignalIcon.tsx","../src/icons/company/SlackIcon.tsx","../src/icons/company/TelegramIcon.tsx","../src/icons/company/TiktokIcon.tsx","../src/icons/company/TwitchIcon.tsx","../src/icons/company/WhatsAppIcon.tsx","../src/icons/company/XIcon.tsx","../src/icons/company/YoutubeIcon.tsx"],"names":["r","e","t","f","n","o","clsx","clsx_default","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","getProportionalStrokeWidth","baseStrokeWidth","strokeWidth","useScrollThreshold","showAfter","throttleMs","isPastThreshold","setIsPastThreshold","useState","useEffect","threshold","recompute","throttledRecompute","CalendarIcon","memo","forwardRef","props","ref","calculatedStrokeWidth","jsxs","jsx","CaptureIcon","CheckIcon","CloseIcon","DropdownIcon","DropUpIcon","ErrorIcon","FileIcon","FileUploadIcon","GridIcon","ImageIcon","ImageUploadIcon","IndeterminateIcon","InfoIcon","ListIcon","MinusIcon","MultipleSelectionIcon","PlusIcon","SearchIcon","SettingsIcon","SuccessIcon","TickIcon","ToFirstIcon","ToLastIcon","ToNextIcon","ToPreviousIcon","VideoIcon","VideoUploadIcon","WarnIcon","sc","c","BackToTop","containerClassName","ariaLabel","icon","renderIcon","renderButton","scrollBehavior","scrollOptions","onClick","visible","handleClick","defaultClassName","buttonVariants","cva","Button","variant","loading","disabled","leftIcon","rightIcon","children","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","defaultTitle","defaultDescription","defaultPrimaryLabel","defaultSecondaryLabel","AuthPrompt","title","description","primaryLabel","secondaryLabel","onPrimaryClick","onSecondaryClick","actionsClassName","statusBadgeVariants","STATUS_LABELS","StatusBadge","status","fullWidth","resolvedStatus","resolvedVariant","resolvedSize","hasContent","accessibleLabel","CheckBox","id","name","invalid","indeterminate","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","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","onKeyDown","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","VideoThumbnailModal","isOpen","onClose","videoSrc","onThumbnailCapture","onConfirm","captureButtonText","thumbnailTitle","uploadTitle","uploadSubtitle","cancelButtonText","saveButtonText","changeThumbnailText","videoRef","thumbnailDataUrl","setThumbnailDataUrl","isCapturedFromVideo","setIsCapturedFromVideo","capturedTime","setCapturedTime","actualVideoDuration","setActualVideoDuration","isHovering","setIsHovering","onLoaded","onTime","captureThumbnail","canvas","dataUrl","resolve","blob","handleThumbnailUpload","reader","seconds","mins","secs","handleConfirm","handleClose","input","FileUpload","files","fileUploadVariants","controlledFiles","onFilesChange","onUploadSuccess","onUploadError","onFileRemove","maxFiles","multiple","iconType","uploadIcon","successIcon","errorIcon","ariaDescribedBy","messages","renderSubtitle","onValidateFile","enableVideoThumbnail","uploadId","dragOver","setDragOver","internalFiles","setInternalFiles","inlineError","setInlineError","hasInteractiveChildren","selectedVideoId","setSelectedVideoId","setVideoSrc","isThumbModalOpen","setIsThumbModalOpen","currentVariant","validateFile","basicError","generatePreview","handleFiles","selectedFiles","fileArray","newFiles","hadError","existingValidCount","allowed","extra","allowedFiles","validationError","preview","fileUploadFile","objectUrl","updatedFiles","successful","handleDragOver","handleDragLeave","handleDrop","handleFileRemove","fileId","handlePreviewError","updated","getAcceptedTypesText","getMaxSizeText","handleThumbnailCapture","handleThumbnailConfirm","prev","closeThumbModal","subtitleNode","fileUpload","Form","onSubmit","noValidate","handleSubmit","form","firstInvalid","FormErrorSummary","errors","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","Switch","hasLabelContent","hasDescription","useDropdownLogic","searchable","setIsOpen","searchTerm","setSearchTerm","optionRefs","searchInputRef","filteredOptions","option","selectedValue","selectedOption","handleCustomChange","newValue","currentValues","newValues","handleSearchChange","newSearchTerm","openDropdown","closeDropdown","currentIndex","matchingIndex","DisplayValue","renderOption","val","DropdownMenu","selectId","onSearchChange","onOptionChange","maxHeight","selectVariants","Select","native","renderValue","renderDropdown","selectVariant","selectedValues","existing","skeletonVariants","formatSize","Skeleton","width","height","style","widthStyle","heightStyle","finalWidth","finalHeight","SkeletonText","lines","TabsContext","useTabsContext","Tabs","onValueChange","idBase","TabsList","dense","setValue","listRef","indicator","setIndicator","listEl","listRect","rect","ro","triggers","focusAt","TabsTrigger","internalRef","mergedRef","isIconOnly","TabsContent","forceMount","getTargetTimestamp","targetDate","ts","useCountdown","intervalMs","onComplete","msRemaining","setMsRemaining","completedRef","targetTimestamp","tick","diff","ORDERED_UNITS","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_DAY","UNIT_DIVISORS","UNIT_LABELS","getCountdownTimeValues","displayUnits","safeMs","values","remaining","unit","divisor","sizeStyles","TimeColumn","unitLabel","styles","isAnimating","setIsAnimating","previousValueRef","Separator","DEFAULT_UNITS","Countdown","unitLabels","timeValues","resolvedUnitLabels","isLast","STATUS_STYLES","STATUS_PROGRESS_COLOR","STATUS_ICON","Toast","message","autoCloseMs","showProgress","customIcon","renderCloseButton","renderProgress","hideCloseButton","progress","setProgress","closeTimerRef","animationFrameRef","remainingTimeRef","startTimeRef","isPausedRef","animateProgress","startTime","elapsed","newRemaining","progressPct","startTimer","pauseTimer","resumeTimer","handlePause","handleResume","Icon","progressColor","iconNode","act","POSITION_CLASS","ToastContainer","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","defaultAssets","group_avatar_default","profile_avatar_default","image_placeholder_default","readableLabel","char","AvatarPlaceholder","category","alt","assetSrc","generatedAlt","logoAssets","scalably_app_default","scalably_campaign_default","scalably_membership_default","scalably_icon_default","scalably_icon_big_default","Logo","variantAssets","requestedSource","fallbackSource","finalSource","defaultAlt","LoadingScreen","backdropBlur","backdropOpacity","logoSizeMobile","logoSizeDesktop","defaultAriaLabel","dynamicStyle","welcomeAssets","ellipse_1_default","ellipse_2_default","multiple_line_default","radial_gradient_bg_default","ANIMATION_CONFIG","ELLIPSE_CANVAS","seededRandom","seed","x","AnimatedEllipses","ellipses","disableAnimation","src","rand","styleVars","AnimatedLines","WelcomeBackground","showEllipses","showLines","backgroundImage","ellipsesData","linesSrc","resolvedBackground","backgroundStyle","RichTextCharacterCounter","editor","count","setCount","updateCount","percentage","isFull","isClose","AlignCenterIcon","AlignLeftIcon","AlignRightIcon","BoldIcon","InsertImageIcon","InsertVideoIcon","ItalicIcon","LinkIcon","ListBulletIcon","ListNumberIcon","UnderlineIcon","ToolbarButton","isActive","RichTextImageControl","simple","onImageUpload","imageSourceMode","isImageOpen","setIsImageOpen","imageSrc","setImageSrc","imageAlt","setImageAlt","isUploading","setIsUploading","setError","imageUrlInputRef","imageFileInputRef","resolvedMode","canUpload","canEditUrl","handleClickOutside","openImageMenu","attrs","handleImageFileChange","maybeUrl","applyImage","RichTextVideoControl","videoUrl","setVideoUrl","setWidth","setHeight","openVideoMenu","isYoutubeUrl","host","applyVideo","widthValue","heightValue","RichTextToolbar","setToolbarStateVersion","isLinkOpen","setIsLinkOpen","linkUrl","setLinkUrl","linkContainerRef","linkInputRef","handleUpdate","openLinkMenu","currentHref","applyLink","getHeadingValue","handleHeadingChange","level","RICH_TEXT_STYLES","RichTextEditor","minHeight","dataTestId","maxCharacters","onMaxLengthExceed","editorId","limitWarningFiredRef","validMaxCharacters","useEditor","StarterKit","Placeholder","TextAlign","Image","Youtube","CharacterCount","instance","html","characters","EditorContent","RichTextViewer","SCALABLY_UI_STYLES","ScalablyUIProvider","asChild","injectStyles","styleEl","fieldErrorToProps","zodErrorsToSummary","DiscordIcon","FacebookIcon","GmailIcon","InstagramIcon","KakaoTalkIcon","LineIcon","LinkedInIcon","MessengerIcon","RedditIcon","SignalIcon","SlackIcon","TelegramIcon","TiktokIcon","TwitchIcon","WhatsAppIcon","XIcon","YoutubeIcon"],"mappings":"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","file":"index.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 clsx from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Type for class values accepted by clsx\n */\ntype ClassValue =\n | ClassArray\n | ClassDictionary\n | string\n | number\n | bigint\n | null\n | boolean\n | undefined;\n\ntype ClassDictionary = Record<string, unknown>;\ntype ClassArray = ClassValue[];\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\n/**\n * Calculates proportional stroke width for SVG icons\n * Ensures stroke width scales appropriately with icon size\n *\n * @param size - Icon size in pixels\n * @param baseStrokeWidth - Base stroke width for 24px icon (default: 1.5)\n * @returns Proportional stroke width\n *\n * @example\n * ```tsx\n * const strokeWidth = getProportionalStrokeWidth(16); // Returns ~1.0 for 16px icon\n * const strokeWidth = getProportionalStrokeWidth(32); // Returns ~2.0 for 32px icon\n * ```\n */\nexport function getProportionalStrokeWidth(\n size: number,\n baseStrokeWidth: number = 1.5\n): number {\n // Calculate proportional stroke width based on 24px base size\n const scale = size / 24;\n const strokeWidth = baseStrokeWidth * scale;\n\n // Ensure minimum stroke width of 0.5 and maximum of 4\n return Math.max(0.5, Math.min(4, strokeWidth));\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<boolean>(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, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\n/**\n * Props for the CalendarIcon component\n */\ninterface CalendarIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n}\n\n/**\n * Calendar icon component - displays a calendar with date indicators.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { CalendarIcon } from '@scalably/ui';\n *\n * <CalendarIcon size={32} className=\"sui-text-primary\" />\n * ```\n */\n\nconst CalendarIcon = memo(\n forwardRef<SVGSVGElement, CalendarIconProps>(\n ({ size = 24, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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={calculatedStrokeWidth}\n strokeMiterlimit={10}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M16 2V5\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeMiterlimit={10}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M3.5 9.08997H20.5\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\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={calculatedStrokeWidth}\n strokeMiterlimit={10}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M15.6947 13.7H15.7037\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M15.6947 16.7H15.7037\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M11.9955 13.7H12.0045\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M11.9955 16.7H12.0045\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M8.29431 13.7H8.30329\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M8.29431 16.7H8.30329\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\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\n/**\n * Props for the CaptureIcon component\n */\ninterface CaptureIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * Capture icon component - displays a camera icon with a capture button.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { CaptureIcon } from '@scalably/ui';\n *\n * <CaptureIcon size={24} className=\"sui-text-primary\" />\n * ```\n */\n\nconst CaptureIcon = memo(\n forwardRef<SVGSVGElement, CaptureIconProps>(\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 fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M1.55469 16.6523V21.4046C1.55469 21.7363 1.68625 22.0545 1.92087 22.2891C2.15549 22.5237 2.47365 22.6553 2.80531 22.6553H7.55769C7.83383 22.6553 8.05794 22.4312 8.05794 22.155C8.05794 21.8789 7.83383 21.6548 7.55769 21.6548H2.80531C2.73878 21.6548 2.67525 21.6283 2.62822 21.5817C2.5817 21.5347 2.55519 21.4712 2.55519 21.4046V16.6523C2.55519 16.3761 2.33108 16.152 2.05494 16.152C1.7788 16.152 1.55469 16.3761 1.55469 16.6523ZM16.5622 22.6553H21.3146C21.6462 22.6553 21.9644 22.5237 22.199 22.2891C22.4336 22.0545 22.5652 21.7363 22.5652 21.4046V16.6523C22.5652 16.3761 22.3411 16.152 22.0649 16.152C21.7888 16.152 21.5647 16.3761 21.5647 16.6523V21.4046C21.5647 21.4712 21.5382 21.5347 21.4917 21.5817C21.4446 21.6283 21.3811 21.6548 21.3146 21.6548H16.5622C16.286 21.6548 16.0619 21.8789 16.0619 22.155C16.0619 22.4312 16.286 22.6553 16.5622 22.6553ZM22.5652 7.64778V2.8954C22.5652 2.56373 22.4336 2.24557 22.199 2.01096C21.9644 1.77634 21.6462 1.64478 21.3146 1.64478H16.5622C16.286 1.64478 16.0619 1.86889 16.0619 2.14503C16.0619 2.42116 16.286 2.64528 16.5622 2.64528H21.3146C21.3811 2.64528 21.4446 2.67179 21.4917 2.71831C21.5382 2.76533 21.5647 2.82887 21.5647 2.8954V7.64778C21.5647 7.92391 21.7888 8.14803 22.0649 8.14803C22.3411 8.14803 22.5652 7.92391 22.5652 7.64778ZM7.55769 1.64478H2.80531C2.47365 1.64478 2.15549 1.77634 1.92087 2.01096C1.68625 2.24557 1.55469 2.56373 1.55469 2.8954V7.64778C1.55469 7.92391 1.7788 8.14803 2.05494 8.14803C2.33108 8.14803 2.55519 7.92391 2.55519 7.64778V2.8954C2.55519 2.82887 2.5817 2.76533 2.62822 2.71831C2.67525 2.67179 2.73878 2.64528 2.80531 2.64528H7.55769C7.83383 2.64528 8.05794 2.42116 8.05794 2.14503C8.05794 1.86889 7.83383 1.64478 7.55769 1.64478Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M17.3306 9.14858H15.8143C15.7308 9.14858 15.6527 9.10655 15.6062 9.03702L14.7178 7.70435C14.4862 7.35668 14.0955 7.14758 13.6773 7.14758H10.4787C10.0605 7.14758 9.66975 7.35668 9.43813 7.70435L8.54969 9.03702C8.50317 9.10655 8.42513 9.14858 8.34159 9.14858H6.82533C6.49367 9.14858 6.1755 9.28015 5.94089 9.51476C5.70627 9.74938 5.57471 10.0675 5.57471 10.3992V15.902C5.57471 16.5928 6.13449 17.1526 6.82533 17.1526H17.3306C18.0214 17.1526 18.5812 16.5928 18.5812 15.902V10.3992C18.5812 10.0675 18.4496 9.74938 18.215 9.51476C17.9804 9.28015 17.6622 9.14858 17.3306 9.14858ZM12.078 10.1491C10.6973 10.1491 9.57671 11.2696 9.57671 12.6503C9.57671 14.031 10.6973 15.1516 12.078 15.1516C13.4586 15.1516 14.5792 14.031 14.5792 12.6503C14.5792 11.2696 13.4586 10.1491 12.078 10.1491ZM12.078 11.1496C12.9064 11.1496 13.5787 11.8219 13.5787 12.6503C13.5787 13.4787 12.9064 14.1511 12.078 14.1511C11.2495 14.1511 10.5772 13.4787 10.5772 12.6503C10.5772 11.8219 11.2495 11.1496 12.078 11.1496Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n )\n);\nCaptureIcon.displayName = \"CaptureIcon\";\n\nexport { CaptureIcon, type CaptureIconProps };\n","import { cn, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\n/**\n * Props for the CheckIcon component\n */\ninterface CheckIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 20. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 2.2. */\n strokeWidth?: number;\n}\n\n/**\n * Check icon component - displays a checkmark in a green gradient circle.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { CheckIcon } from '@scalably/ui';\n *\n * <CheckIcon size={24} className=\"sui-text-primary\" />\n * ```\n */\n\nconst CheckIcon = memo(\n forwardRef<SVGSVGElement, CheckIconProps>(\n ({ size = 20, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 2.2);\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\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=\"M6 10L8.66667 13L14 7\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\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, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\n/**\n * Props for the CloseIcon component\n */\ninterface CloseIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n}\n\n/**\n * Close icon component - displays a cross icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { CloseIcon } from '@scalably/ui';\n *\n * <CloseIcon size={24} className=\"sui-text-primary\" />\n * ```\n */\n\nconst CloseIcon = memo(\n forwardRef<SVGSVGElement, CloseIconProps>(\n ({ size = 24, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n }\n )\n);\nCloseIcon.displayName = \"CloseIcon\";\n\nexport { CloseIcon, type CloseIconProps };\n","import { cn, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface DropdownIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 2. */\n strokeWidth?: number;\n}\n\n/**\n * Dropdown icon component - displays a down arrow icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { DropdownIcon } from '@scalably/ui';\n *\n * <DropdownIcon size={24} className=\"sui-text-primary\" />\n * ```\n */\n\nconst DropdownIcon = memo(\n forwardRef<SVGSVGElement, DropdownIconProps>(\n ({ size = 24, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 2);\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={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M12 15L17 10\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n }\n )\n);\nDropdownIcon.displayName = \"DropdownIcon\";\n\nexport { DropdownIcon, type DropdownIconProps };\n","import { cn, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface DropUpIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 2. */\n strokeWidth?: number;\n}\n\n/**\n * DropUp icon component - displays an up arrow icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { DropUpIcon } from '@scalably/ui';\n *\n * <DropUpIcon size={24} className=\"sui-text-primary\" />\n * ```\n */\n\nconst DropUpIcon = memo(\n forwardRef<SVGSVGElement, DropUpIconProps>(\n ({ size = 24, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 2);\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={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M12 9L7 14\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n }\n )\n);\nDropUpIcon.displayName = \"DropUpIcon\";\n\nexport { DropUpIcon, type DropUpIconProps };\n","import { cn, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface ErrorIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n}\n\n/**\n * Error icon component - displays an error icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { ErrorIcon } from '@scalably/ui';\n *\n * <ErrorIcon size={24} className=\"sui-text-primary\" />\n * ```\n */\n\nconst ErrorIcon = memo(\n forwardRef<SVGSVGElement, ErrorIconProps>(\n ({ size = 24, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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=\"24\"\n height=\"24\"\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={calculatedStrokeWidth}\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 of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * File icon component - displays a file icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { FileIcon } from '@scalably/ui';\n *\n * <FileIcon size={24} className=\"sui-text-primary\" />\n * ```\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, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface FileUploadIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * FileUpload icon component - displays a file upload icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { FileUploadIcon } from '@scalably/ui';\n *\n * <FileUploadIcon size={24} className=\"sui-text-primary\" />\n * ```\n */\n\nconst FileUploadIcon = memo(\n forwardRef<SVGSVGElement, FileUploadIconProps>(\n ({ size = 24, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M9 11L11 13\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\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={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M22 10H18C15 10 14 9 14 6V2L22 10Z\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n }\n )\n);\nFileUploadIcon.displayName = \"FileUploadIcon\";\n\nexport { FileUploadIcon, type FileUploadIconProps };\n","import { cn, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface GridIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n}\n\n/**\n * Grid icon component - displays a grid icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { GridIcon } from '@scalably/ui';\n *\n * <GridIcon size={24} className=\"sui-text-primary\" />\n * ```\n */\n\nconst GridIcon = memo(\n forwardRef<SVGSVGElement, GridIconProps>(\n ({ size = 24, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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={calculatedStrokeWidth}\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={calculatedStrokeWidth}\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={calculatedStrokeWidth}\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={calculatedStrokeWidth}\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 of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * Image icon component - displays an image icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { ImageIcon } from '@scalably/ui';\n *\n * <ImageIcon size={24} className=\"sui-text-primary\" />\n * ```\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, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface ImageUploadIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * ImageUpload icon component - displays an image upload icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { ImageUploadIcon } from '@scalably/ui';\n *\n * <ImageUploadIcon size={24} className=\"sui-text-primary\" />\n * ```\n */\n\nconst ImageUploadIcon = memo(\n forwardRef<SVGSVGElement, ImageUploadIconProps>(\n ({ size = 24, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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={calculatedStrokeWidth}\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={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M18 8V2L20 4\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M18 2L16 4\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\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={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n }\n )\n);\nImageUploadIcon.displayName = \"ImageUploadIcon\";\n\nexport { ImageUploadIcon, type ImageUploadIconProps };\n","import { cn, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface IndeterminateIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 20. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 2. */\n strokeWidth?: number;\n}\n\n/**\n * Indeterminate icon component - displays an indeterminate icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { IndeterminateIcon } from '@scalably/ui';\n *\n * <IndeterminateIcon size={20} className=\"sui-text-primary\" />\n * ```\n */\n\nconst IndeterminateIcon = memo(\n forwardRef<SVGSVGElement, IndeterminateIconProps>(\n ({ size = 20, className, strokeWidth, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 2);\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\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=\"M6 10h8\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n />\n </svg>\n );\n }\n )\n);\nIndeterminateIcon.displayName = \"IndeterminateIcon\";\n\nexport { IndeterminateIcon, type IndeterminateIconProps };\n","import { cn, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface InfoIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n}\n\n/**\n * Info icon component - displays an info icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { InfoIcon } from '@scalably/ui';\n *\n * <InfoIcon size={24} className=\"sui-text-primary\" />\n * ```\n */\n\nconst InfoIcon = memo(\n forwardRef<SVGSVGElement, InfoIconProps>(\n ({ size = 24, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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=\"24\"\n height=\"24\"\n rx={6}\n fill=\"url(#paint0_linear_3163_7412)\"\n />\n <path\n d=\"M12 16V11\"\n stroke=\"white\"\n strokeWidth={calculatedStrokeWidth}\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, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface ListIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n}\n\n/**\n * List icon component - displays a list icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { ListIcon } from '@scalably/ui';\n *\n * <ListIcon size={24} className=\"sui-text-primary\" />\n * ```\n */\n\nconst ListIcon = memo(\n forwardRef<SVGSVGElement, ListIconProps>(\n ({ size = 24, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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={calculatedStrokeWidth}\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={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n }\n )\n);\nListIcon.displayName = \"ListIcon\";\n\nexport { ListIcon, type ListIconProps };\n","import { cn, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface MinusIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 16. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n}\n\n/**\n * Minus icon component - displays a minus icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { MinusIcon } from '@scalably/ui';\n *\n * <MinusIcon size={16} className=\"sui-text-primary\" />\n * ```\n */\n\nconst MinusIcon = memo(\n forwardRef<SVGSVGElement, MinusIconProps>(\n ({ size = 16, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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={calculatedStrokeWidth}\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 of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * MultipleSelection icon component - displays a multiple selection icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { MultipleSelectionIcon } from '@scalably/ui';\n *\n * <MultipleSelectionIcon size={24} className=\"sui-text-primary\" />\n * ```\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, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\n/**\n * Props for the PlusIcon component\n */\ninterface PlusIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 16. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n}\n\n/**\n * Plus icon component - displays a plus icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { PlusIcon } from '@scalably/ui';\n *\n * <PlusIcon size={16} className=\"sui-text-primary\" />\n * ```\n */\n\nconst PlusIcon = memo(\n forwardRef<SVGSVGElement, PlusIconProps>(\n ({ size = 16, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M8 2.5V13.5\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n }\n )\n);\nPlusIcon.displayName = \"PlusIcon\";\n\nexport { PlusIcon, type PlusIconProps };\n","import { cn, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\n/**\n * Props for the SearchIcon component\n */\ninterface SearchIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n}\n\n/**\n * Search icon component - a magnifying glass icon for search functionality.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { SearchIcon } from '@scalably/ui';\n *\n * <SearchIcon size={20} className=\"sui-text-blue-500\" />\n * ```\n */\n\nconst SearchIcon = memo(\n forwardRef<SVGSVGElement, SearchIconProps>(\n ({ size = 24, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M17 17L21 21\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n }\n )\n);\nSearchIcon.displayName = \"SearchIcon\";\n\nexport { SearchIcon, type SearchIconProps };\n","import { cn, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface SettingsIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n}\n\n/**\n * Settings icon component - displays a settings icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { SettingsIcon } from '@scalably/ui';\n *\n * <SettingsIcon size={24} className=\"sui-text-primary\" />\n * ```\n */\n\nconst SettingsIcon = memo(\n forwardRef<SVGSVGElement, SettingsIconProps>(\n ({ size = 24, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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=\"M12 15C13.6569 15 15 13.6569 15 12C15 10.3431 13.6569 9 12 9C10.3431 9 9 10.3431 9 12C9 13.6569 10.3431 15 12 15Z\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeMiterlimit={10}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M2 12.88V11.12C2 10.08 2.85 9.22 3.9 9.22C5.71 9.22 6.45 7.94 5.54 6.37C5.02 5.47 5.33 4.3 6.24 3.78L7.97 2.79C8.76 2.32 9.78 2.6 10.25 3.39L10.36 3.58C11.26 5.15 12.74 5.15 13.65 3.58L13.76 3.39C14.23 2.6 15.25 2.32 16.04 2.79L17.77 3.78C18.68 4.3 18.99 5.47 18.47 6.37C17.56 7.94 18.3 9.22 20.11 9.22C21.15 9.22 22.01 10.07 22.01 11.12V12.88C22.01 13.92 21.16 14.78 20.11 14.78C18.3 14.78 17.56 16.06 18.47 17.63C18.99 18.54 18.68 19.7 17.77 20.22L16.04 21.21C15.25 21.68 14.23 21.4 13.76 20.61L13.65 20.42C12.75 18.85 11.27 18.85 10.36 20.42L10.25 20.61C9.78 21.4 8.76 21.68 7.97 21.21L6.24 20.22C5.33 19.7 5.02 18.53 5.54 17.63C6.45 16.06 5.71 14.78 3.9 14.78C2.85 14.78 2 13.92 2 12.88Z\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeMiterlimit={10}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n }\n )\n);\nSettingsIcon.displayName = \"SettingsIcon\";\n\nexport { SettingsIcon, type SettingsIconProps };\n","import { cn, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\n/**\n * Props for the SuccessIcon component\n */\ninterface SuccessIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n}\n\n/**\n * Success icon component - displays a checkmark in a green gradient circle.\n *\n * **Note:** This icon has fixed brand colors (green gradient with white checkmark)\n * and cannot be customized. Use for success/confirmation states.\n *\n * @example\n * ```tsx\n * import { SuccessIcon } from '@scalably/ui';\n *\n * <SuccessIcon size={24} />\n * ```\n */\n\nconst SuccessIcon = memo(\n forwardRef<SVGSVGElement, SuccessIconProps>(\n ({ size = 24, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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=\"24\"\n height=\"24\"\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={calculatedStrokeWidth}\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, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface TickIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 16. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n}\n\n/**\n * Tick icon component - displays a tick icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { TickIcon } from '@scalably/ui';\n *\n * <TickIcon size={16} className=\"sui-text-primary\" />\n * ```\n */\n\nconst TickIcon = memo(\n forwardRef<SVGSVGElement, TickIconProps>(\n ({ size = 16, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n }\n )\n);\nTickIcon.displayName = \"TickIcon\";\n\nexport { TickIcon, type TickIconProps };\n","import { cn, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface ToFirstIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n}\n\n/**\n * ToFirst icon component - displays a to first icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { ToFirstIcon } from '@scalably/ui';\n *\n * <ToFirstIcon size={24} className=\"sui-text-primary\" />\n * ```\n */\n\nconst ToFirstIcon = memo(\n forwardRef<SVGSVGElement, ToFirstIconProps>(\n ({ size = 24, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M6 12L12 18\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M17 6L11 12\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M11 12L17 18\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_3297_5706\">\n <rect width=\"24\" height=\"24\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n }\n )\n);\nToFirstIcon.displayName = \"ToFirstIcon\";\n\nexport { ToFirstIcon, type ToFirstIconProps };\n","import { cn, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface ToLastIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n}\n\n/**\n * ToLast icon component - displays a to last icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { ToLastIcon } from '@scalably/ui';\n *\n * <ToLastIcon size={24} className=\"sui-text-primary\" />\n * ```\n */\n\nconst ToLastIcon = memo(\n forwardRef<SVGSVGElement, ToLastIconProps>(\n ({ size = 24, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M17 12L11 6\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M6 18L12 12\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M12 12L6 6\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_3297_5736\">\n <rect width=\"24\" height=\"24\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n }\n )\n);\nToLastIcon.displayName = \"ToLastIcon\";\n\nexport { ToLastIcon, type ToLastIconProps };\n","import { cn, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface ToNextIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n}\n\n/**\n * ToNext icon component - displays a to next icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { ToNextIcon } from '@scalably/ui';\n *\n * <ToNextIcon size={24} className=\"sui-text-primary\" />\n * ```\n */\n\nconst ToNextIcon = memo(\n forwardRef<SVGSVGElement, ToNextIconProps>(\n ({ size = 24, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M15 12L9 6\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_3297_5731\">\n <rect width={size} height={size} fill=\"currentColor\" />\n </clipPath>\n </defs>\n </svg>\n );\n }\n )\n);\nToNextIcon.displayName = \"ToNextIcon\";\n\nexport { ToNextIcon, type ToNextIconProps };\n","import { cn, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface ToPreviousIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n}\n\n/**\n * ToPrevious icon component - displays a to previous icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { ToPreviousIcon } from '@scalably/ui';\n *\n * <ToPreviousIcon size={24} className=\"sui-text-primary\" />\n * ```\n */\n\nconst ToPreviousIcon = memo(\n forwardRef<SVGSVGElement, ToPreviousIconProps>(\n ({ size = 24, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M9 12L15 18\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_3297_5714\">\n <rect width=\"24\" height=\"24\" 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 of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * Video icon component - displays a video icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { VideoIcon } from '@scalably/ui';\n *\n * <VideoIcon size={24} className=\"sui-text-primary\" />\n * ```\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, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface VideoUploadIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * VideoUpload icon component - displays a video upload icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { VideoUploadIcon } from '@scalably/ui';\n *\n * <VideoUploadIcon size={24} className=\"sui-text-primary\" />\n * ```\n */\n\nconst VideoUploadIcon = memo(\n forwardRef<SVGSVGElement, VideoUploadIconProps>(\n ({ size = 24, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M2.52002 7.11H21.48\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M8.52002 2.11V6.97\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M15.48 2.11V6.52\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\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={calculatedStrokeWidth}\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, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface WarnIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 24. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n}\n\n/**\n * Warn icon component - displays a warn icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { WarnIcon } from '@scalably/ui';\n *\n * <WarnIcon size={24} className=\"sui-text-primary\" />\n * ```\n */\n\nconst WarnIcon = memo(\n forwardRef<SVGSVGElement, WarnIconProps>(\n ({ size = 24, strokeWidth, className, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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=\"24\"\n height=\"24\"\n rx={6}\n fill=\"url(#paint0_linear_3163_7433)\"\n />\n <path\n d=\"M12 9V14\"\n stroke=\"white\"\n strokeWidth={calculatedStrokeWidth}\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 const content = renderButton ? (\n renderButton({\n onClick: handleClick,\n visible,\n className: defaultClassName,\n ariaLabel,\n })\n ) : (\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 );\n\n if (!containerClassName) {\n return content;\n }\n\n return <div className={cn(containerClassName)}>{content}</div>;\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 } 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 { Button } from \"@/components/Button\";\nimport { cn } from \"@/lib/utils\";\n\ninterface AuthPromptProps {\n /** Main heading text. Defaults to \"Login to continue\". */\n title?: React.ReactNode;\n /**\n * Supporting description below the title.\n * Defaults to \"Login to unlock this feature and continue exploring\".\n */\n description?: React.ReactNode;\n /** Label for the primary action button (left). Defaults to \"Login\". */\n primaryLabel?: React.ReactNode;\n /** Label for the secondary action button (right). Defaults to \"Register\". */\n secondaryLabel?: React.ReactNode;\n /**\n * Click handler for the primary action button.\n * Typically used to navigate to the login page.\n */\n onPrimaryClick?: () => void;\n /**\n * Click handler for the secondary action button.\n * Typically used to navigate to the registration page.\n */\n onSecondaryClick?: () => void;\n /** Additional classes for the outer container. */\n className?: string;\n /** Additional classes for the buttons wrapper row. */\n actionsClassName?: string;\n}\n\nconst defaultTitle = \"Login to continue\";\nconst defaultDescription =\n \"Login to unlock this feature and continue exploring\";\nconst defaultPrimaryLabel = \"Login\";\nconst defaultSecondaryLabel = \"Register\";\n\n/**\n * AuthPrompt - A simple authentication call-to-action card.\n *\n * Designed for feature gating flows where users must authenticate before\n * continuing. The layout follows the Scalably design system and the\n * provided reference UI:\n *\n * - Centered card with title and description\n * - Two horizontally aligned buttons on the same row\n * - Mobile-first responsive layout with full-width buttons on small screens\n * - Consumers provide navigation logic via `onPrimaryClick` / `onSecondaryClick`\n *\n * @example\n * ```tsx\n * <AuthPrompt\n * onPrimaryClick={() => router.push(\"/login\")}\n * onSecondaryClick={() => router.push(\"/register\")}\n * />\n *\n * <AuthPrompt\n * title=\"Join Scalably\"\n * description=\"Create an account or log in to save your workspace.\"\n * primaryLabel=\"Sign in\"\n * secondaryLabel=\"Create account\"\n * onPrimaryClick={() => navigate(\"/signin\")}\n * onSecondaryClick={() => navigate(\"/signup\")}\n * />\n * ```\n */\nconst AuthPrompt: React.FC<AuthPromptProps> = ({\n title = defaultTitle,\n description = defaultDescription,\n primaryLabel = defaultPrimaryLabel,\n secondaryLabel = defaultSecondaryLabel,\n onPrimaryClick,\n onSecondaryClick,\n className,\n actionsClassName,\n}) => {\n return (\n <section\n className={cn(\n \"sui-w-full sui-rounded-lg sui-bg-background-secondary1 sui-border sui-border-stroke-level3 sui-shadow-sm sui-p-4 sui-md:p-6 sui-flex sui-flex-col sui-items-center sui-gap-4 sui-text-center\",\n className\n )}\n aria-label=\"Authentication required\"\n >\n <div className=\"sui-flex sui-flex-col sui-gap-2\">\n <h2 className=\"sui-title-20-medium\">{title}</h2>\n {description && <p className=\"sui-body-16\">{description}</p>}\n </div>\n\n <div\n className={cn(\n \"sui-flex sui-w-full sui-flex-row sui-flex-wrap sui-gap-8 sui-justify-center\",\n actionsClassName\n )}\n >\n <Button\n type=\"button\"\n size=\"lg\"\n className=\"sui-flex-1 sui-min-w-[120px] sui-max-w-[320px]\"\n onClick={onPrimaryClick}\n >\n {primaryLabel}\n </Button>\n\n <Button\n type=\"button\"\n size=\"lg\"\n variant=\"outline\"\n className=\"sui-flex-1 sui-min-w-[120px] sui-max-w-[320px]\"\n onClick={onSecondaryClick}\n >\n {secondaryLabel}\n </Button>\n </div>\n </section>\n );\n};\n\nAuthPrompt.displayName = \"AuthPrompt\";\n\nexport { AuthPrompt, type AuthPromptProps };\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 { 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\n className=\"sui-h-5 sui-w-5 sui-text-white\"\n strokeWidth={2.2}\n />\n </g>\n <g className=\"sui-checkbox-minus sui-opacity-0 sui-transition-opacity sui-duration-200\">\n <IndeterminateIcon\n className=\"sui-h-5 sui-w-5 sui-text-white\"\n strokeWidth={2}\n />\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-md 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-md 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-md 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<boolean>(false);\n const [internalValue, setInternalValue] = useState<string>(\n defaultValue || \"\"\n );\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<boolean>(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<boolean>(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<boolean>(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<boolean>(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 { Button } from \"@/components/Button\";\nimport { FileUpload } from \"@/components/FileUpload\";\nimport { CaptureIcon, CloseIcon } from \"@/icons\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\n\ninterface VideoThumbnailModalProps {\n isOpen: boolean;\n onClose: () => void;\n videoSrc: string;\n onThumbnailCapture: (thumbnail: Blob, dataUrl: string) => void;\n onConfirm: (thumbnailDataUrl: string) => void;\n // Customizable content\n title?: string;\n captureButtonText?: string;\n thumbnailTitle?: string;\n uploadTitle?: string;\n uploadSubtitle?: React.ReactNode;\n cancelButtonText?: string;\n saveButtonText?: string;\n changeThumbnailText?: string;\n}\n\n/**\n * Modal component for capturing video thumbnails with both capture and upload options.\n * Reuses the FileUpload component for the thumbnail upload section.\n */\nexport const VideoThumbnailModal = ({\n isOpen,\n onClose,\n videoSrc,\n onThumbnailCapture,\n onConfirm,\n // Customizable content with defaults\n title = \"Capture video thumbnail\",\n captureButtonText = \"Capture for Video Thumbnail\",\n thumbnailTitle = \"Video Thumbnail\",\n uploadTitle = \"Upload Thumbnail\",\n uploadSubtitle,\n cancelButtonText = \"Cancel\",\n saveButtonText = \"Save\",\n changeThumbnailText = \"Click to change thumbnail\",\n}: VideoThumbnailModalProps) => {\n const videoRef = useRef<HTMLVideoElement | null>(null);\n const [thumbnailDataUrl, setThumbnailDataUrl] = useState<string | null>(null);\n const [isCapturedFromVideo, setIsCapturedFromVideo] =\n useState<boolean>(false);\n const [capturedTime, setCapturedTime] = useState<number>(0);\n const [actualVideoDuration, setActualVideoDuration] = useState<number>(0);\n const [isHovering, setIsHovering] = useState<boolean>(false);\n\n // Keep slider in sync with video currentTime\n useEffect(() => {\n const v = videoRef.current;\n if (!v) return;\n const onLoaded = () => {\n setActualVideoDuration(Number.isFinite(v.duration) ? v.duration : 0);\n };\n const onTime = () => {\n // Video time is managed by parent, no need to set it\n };\n v.addEventListener(\"loadedmetadata\", onLoaded);\n v.addEventListener(\"timeupdate\", onTime);\n return () => {\n v.removeEventListener(\"loadedmetadata\", onLoaded);\n v.removeEventListener(\"timeupdate\", onTime);\n };\n }, [videoSrc]);\n\n const captureThumbnail = useCallback(async () => {\n const v = videoRef.current;\n if (!v) return;\n const canvas = document.createElement(\"canvas\");\n canvas.width = v.videoWidth || 0;\n canvas.height = v.videoHeight || 0;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx || canvas.width === 0 || canvas.height === 0) return;\n ctx.drawImage(v, 0, 0, canvas.width, canvas.height);\n const dataUrl = canvas.toDataURL(\"image/jpeg\", 0.9);\n setThumbnailDataUrl(dataUrl);\n setIsCapturedFromVideo(true);\n setCapturedTime(v.currentTime);\n await new Promise<void>((resolve) => {\n canvas.toBlob(\n (blob) => {\n if (!blob) return resolve();\n onThumbnailCapture(blob, dataUrl);\n resolve();\n },\n \"image/jpeg\",\n 0.9\n );\n });\n }, [onThumbnailCapture]);\n\n const handleThumbnailUpload = useCallback((file: File) => {\n const reader = new FileReader();\n reader.onload = (e) => {\n setThumbnailDataUrl(e.target?.result as string);\n setIsCapturedFromVideo(false); // Clear captured flag when uploading custom image\n };\n reader.readAsDataURL(file);\n }, []);\n\n const formatTime = useCallback((seconds: number): string => {\n const mins = Math.floor(seconds / 60);\n const secs = Math.floor(seconds % 60);\n return `${mins}:${secs.toString().padStart(2, \"0\")}`;\n }, []);\n\n const handleConfirm = useCallback(() => {\n if (thumbnailDataUrl) {\n onConfirm(thumbnailDataUrl);\n setThumbnailDataUrl(null);\n }\n }, [thumbnailDataUrl, onConfirm]);\n\n const handleClose = useCallback(() => {\n setThumbnailDataUrl(null);\n setIsCapturedFromVideo(false);\n setCapturedTime(0);\n setActualVideoDuration(0);\n onClose();\n }, [onClose]);\n\n if (!isOpen) return null;\n\n return (\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n className=\"sui-fixed sui-inset-0 sui-z-50 sui-flex sui-items-center sui-justify-center sui-p-4\"\n >\n <div\n className=\"sui-absolute sui-inset-0 sui-bg-black/50\"\n role=\"button\"\n tabIndex={0}\n onClick={handleClose}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") handleClose();\n }}\n aria-label=\"Close modal overlay\"\n />\n <div className=\"sui-relative sui-z-10 sui-w-fit sui-max-w-4xl sui-max-h-[90vh] sui-flex sui-flex-col sui-rounded-md sui-bg-background-secondary1 sui-shadow-lg\">\n {/* Header - Fixed */}\n <div className=\"sui-flex sui-items-center sui-justify-between sui-p-4\">\n <h2 className=\"sui-text-16 sui-text-default\">{title}</h2>\n <button\n type=\"button\"\n className=\"sui-p-1 sui-rounded hover:sui-bg-stroke-level3\"\n aria-label=\"Close\"\n onClick={handleClose}\n >\n <CloseIcon />\n </button>\n </div>\n\n {/* Content - Scrollable */}\n <div className=\"sui-flex-1 sui-overflow-y-auto sui-scrollbars-thin sui-p-4\">\n <div className=\"sui-grid sui-grid-cols-1 sui-lg:grid-cols-2 sui-gap-4 sui-min-w-0\">\n {/* Video Section */}\n <div className=\"sui-space-y-4\">\n {/* eslint-disable-next-line jsx-a11y/media-has-caption */}\n <video\n ref={videoRef}\n src={videoSrc}\n controls\n className=\"sui-w-full sui-max-w-[480px] sui-h-[320px] sui-rounded-md sui-bg-black sui-object-cover\"\n />\n </div>\n\n {/* Thumbnail Upload Section */}\n <div className=\"sui-space-y-4\">\n <h3 className=\"sui-body-14-medium\">{thumbnailTitle}</h3>\n <Button\n onClick={captureThumbnail}\n leftIcon={<CaptureIcon size={16} />}\n variant=\"outline\"\n size=\"md\"\n className=\"sui-w-full sui-max-w-[320px]\"\n onMouseEnter={() => setIsHovering(true)}\n onMouseLeave={() => setIsHovering(false)}\n >\n {thumbnailDataUrl && isCapturedFromVideo\n ? isHovering\n ? `Click to re-capture thumbnail`\n : `Captured at ${formatTime(capturedTime)}/${formatTime(\n actualVideoDuration\n )}`\n : captureButtonText}\n </Button>\n <div className=\"sui-w-full sui-max-w-[320px] sui-h-[213px]\">\n {thumbnailDataUrl ? (\n <div\n className=\"sui-relative sui-w-full sui-h-full sui-rounded-md sui-border-2 sui-border-dashed sui-bg-background-primary sui-transition-all sui-duration-200 sui-ease-in-out hover:sui-border-primary/80 hover:sui-bg-primary/5 focus-visible:sui-outline-none focus-visible:sui-ring-2 focus-visible:sui-ring-primary focus-visible:sui-ring-offset-2 sui-cursor-pointer sui-overflow-hidden\"\n onClick={() => {\n const input = document.createElement(\"input\");\n input.type = \"file\";\n input.accept = \"image/*\";\n input.onchange = (e) => {\n const file = (e.target as HTMLInputElement).files?.[0];\n if (file) handleThumbnailUpload(file);\n };\n input.click();\n }}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n const input = document.createElement(\"input\");\n input.type = \"file\";\n input.accept = \"image/*\";\n input.onchange = (e) => {\n const file = (e.target as HTMLInputElement)\n .files?.[0];\n if (file) handleThumbnailUpload(file);\n };\n input.click();\n }\n }}\n aria-label=\"Click to change thumbnail\"\n >\n <img\n src={thumbnailDataUrl}\n alt=\"Thumbnail preview\"\n className=\"sui-w-full sui-h-full sui-object-cover sui-rounded-md\"\n />\n <div className=\"sui-absolute sui-inset-0 sui-bg-black/50 sui-opacity-0 hover:sui-opacity-100 sui-transition-opacity sui-duration-200 sui-flex sui-items-center sui-justify-center sui-rounded-md\">\n <p className=\"sui-text-white sui-text-14 sui-font-medium\">\n {changeThumbnailText}\n </p>\n </div>\n </div>\n ) : (\n <FileUpload\n label=\"\"\n acceptedFileTypes={[\n \".png\",\n \".jpeg\",\n \".jpg\",\n \".gif\",\n \".svg\",\n ]}\n maxFileSize={7 * 1024 * 1024} // 7MB\n multiple={false}\n iconType=\"image\"\n size=\"sm\"\n className=\"sui-h-full\"\n onUploadSuccess={(files) => {\n if (files.length > 0) {\n handleThumbnailUpload(files[0]);\n }\n }}\n messages={{\n titleIdle: uploadTitle,\n subtitle: uploadSubtitle || (\n <div className=\"sui-text-center sui-space-y-1\">\n <p className=\"sui-text-12 sui-text-inactive\">\n All file types are accepted (.png, .jpeg, .jpg,\n .gif, .svg)\n </p>\n <p className=\"sui-text-12 sui-text-inactive\">\n Maximum size is 7MB.\n </p>\n <p className=\"sui-text-12 sui-text-inactive\">\n Best image size: 1080x720px\n </p>\n </div>\n ),\n }}\n />\n )}\n </div>\n </div>\n </div>\n </div>\n\n {/* Footer - Fixed */}\n <div className=\"sui-flex sui-justify-center sui-gap-4 sui-p-4\">\n <Button\n onClick={handleClose}\n variant=\"outline\"\n size=\"md\"\n className=\"sui-flex-1 sui-max-w-[120px]\"\n >\n {cancelButtonText}\n </Button>\n <Button\n onClick={handleConfirm}\n variant=\"default\"\n size=\"md\"\n className=\"sui-flex-1 sui-max-w-[120px]\"\n disabled={!thumbnailDataUrl}\n >\n {saveButtonText}\n </Button>\n </div>\n </div>\n </div>\n );\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 {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n} from \"react\";\nimport { VideoThumbnailModal } from \"./VideoThumbnailModal\";\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 // Video thumbnail capture (modal only)\n /** Enable video thumbnail capture UI via modal when a video file is selected. */\n enableVideoThumbnail?: boolean;\n /**\n * Called when a thumbnail is captured from the selected video's current frame.\n * Provides the Blob (image/jpeg) and a data URL for immediate preview.\n */\n onThumbnailCapture?: (\n thumbnail: Blob,\n dataUrl: string,\n file: FileUploadFile\n ) => void;\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 enableVideoThumbnail = false,\n onThumbnailCapture,\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<boolean>(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 // Video thumbnail capture state (opt-in)\n const [selectedVideoId, setSelectedVideoId] = useState<string | null>(null);\n const [videoSrc, setVideoSrc] = useState<string | null>(null);\n const [isThumbModalOpen, setIsThumbModalOpen] = useState<boolean>(false);\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 // Setup video capture UI on first acceptable video when enabled and single-selection UX\n if (\n enableVideoThumbnail &&\n file.type.startsWith(\"video/\") &&\n selectedVideoId === null\n ) {\n try {\n const objectUrl = URL.createObjectURL(file);\n setVideoSrc(objectUrl);\n setSelectedVideoId(fileUploadFile.id);\n setIsThumbModalOpen(true);\n } catch {\n // ignore URL errors\n }\n }\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 enableVideoThumbnail,\n selectedVideoId,\n setVideoSrc,\n setSelectedVideoId,\n setIsThumbModalOpen,\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 // Clear video state if we removed the selected video\n if (fileId === selectedVideoId) {\n setSelectedVideoId(null);\n if (videoSrc) URL.revokeObjectURL(videoSrc);\n setVideoSrc(null);\n }\n },\n [internalFiles, setInternalFiles, onFileRemove, selectedVideoId, videoSrc]\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 // Cleanup created object URL on unmount/change\n useEffect(() => {\n return () => {\n if (videoSrc) URL.revokeObjectURL(videoSrc);\n };\n }, [videoSrc]);\n\n const handleThumbnailCapture = useCallback(\n (blob: Blob, dataUrl: string) => {\n const selected = (internalFiles ?? []).find(\n (f) => f.id === selectedVideoId\n );\n if (onThumbnailCapture && selected) {\n onThumbnailCapture(blob, dataUrl, selected);\n }\n },\n [internalFiles, onThumbnailCapture, selectedVideoId]\n );\n\n const handleThumbnailConfirm = useCallback(\n (thumbnailDataUrl: string) => {\n if (!selectedVideoId) return;\n\n setInternalFiles(((\n prev: FileUploadFile[] | undefined\n ): FileUploadFile[] => {\n const current = prev ?? [];\n return current.map((f: FileUploadFile) =>\n f.id === selectedVideoId ? { ...f, preview: thumbnailDataUrl } : f\n );\n }) as unknown as FileUploadFile[]);\n setIsThumbModalOpen(false);\n },\n [selectedVideoId, setInternalFiles]\n );\n\n const closeThumbModal = useCallback(() => {\n setIsThumbModalOpen(false);\n }, []);\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 <div className=\"sui-label-12\">\n {subtitleNode ?? (\n <>\n {getAcceptedTypesText()} • Max {getMaxSizeText()}\n {multiple && ` • Up to ${maxFiles} files`}\n </>\n )}\n </div>\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.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 {/* Optional video thumbnail capture UI */}\n {enableVideoThumbnail && selectedVideoId && videoSrc && (\n <VideoThumbnailModal\n isOpen={isThumbModalOpen}\n onClose={closeThumbModal}\n videoSrc={videoSrc}\n onThumbnailCapture={handleThumbnailCapture}\n onConfirm={handleThumbnailConfirm}\n />\n )}\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 { cn } from \"@/lib/utils\";\nimport { forwardRef } from \"react\";\n\n// Base input props, reusing the checkbox/radio pattern\ntype BaseInputProps = Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"size\" | \"type\"\n>;\n\ninterface SwitchProps extends BaseInputProps {\n /** Marks the field as invalid (error state). Applies error color styling. */\n invalid?: boolean;\n /** Optional visible label displayed next to the switch. */\n label?: React.ReactNode;\n /** Optional hint/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 * Switch - An accessible on/off switch built on a native checkbox.\n *\n * Features:\n * - Uses system design tokens for colors and typography\n * - Optional label and hint/description text\n * - Error/invalid and disabled states with proper styling\n * - Full keyboard navigation and screen reader support\n *\n * Notes:\n * - Implemented as `type=\"checkbox\"` so it keeps the native checkbox role\n * while visually styled as a switch. This ensures maximum compatibility\n * with existing form/a11y helpers in the library.\n *\n * @example\n * ```tsx\n * // Basic usage\n * <Switch\n * id=\"notifications\"\n * name=\"notifications\"\n * checked={enabled}\n * onChange={(e) => setEnabled(e.target.checked)}\n * label=\"Notifications\"\n * description=\"This is a hint text to help user.\"\n * />\n *\n * // With invalid state\n * <Switch\n * id=\"terms\"\n * name=\"terms\"\n * checked={accepted}\n * onChange={(e) => setAccepted(e.target.checked)}\n * label=\"Accept terms\"\n * description=\"You must accept to continue.\"\n * invalid={!accepted && submitted}\n * />\n * ```\n */\nconst Switch = forwardRef<HTMLInputElement, SwitchProps>(\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 const hasLabelContent = Boolean(label || children);\n const hasDescription = Boolean(description);\n\n return (\n <label\n className={cn(\n // group enables hover styles for the entire control row\n \"sui-group sui-inline-flex sui-gap-3 sui-select-none\",\n hasDescription ? \"sui-items-start\" : \"sui-items-center\",\n disabled ? \"sui-cursor-not-allowed\" : \"sui-cursor-pointer\",\n className\n )}\n >\n <span className=\"sui-inline-flex sui-items-center sui-pt-[2px]\">\n <input\n id={id}\n ref={ref}\n type=\"checkbox\"\n name={name}\n disabled={disabled}\n aria-describedby={describedBy}\n className=\"sui-peer sui-sr-only\"\n {...props}\n />\n\n <span\n aria-hidden=\"true\"\n className={cn(\n // Track\n \"sui-relative sui-inline-flex sui-h-6 sui-w-11 sui-items-center sui-rounded-full sui-bg-disabled sui-transition-colors sui-duration-200 sui-ease-out\",\n // Hover (only when enabled)\n !disabled && \"group-hover:sui-bg-stroke-level3\",\n // Focus ring\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\n !invalid &&\n \"peer-checked:sui-bg-primary peer-checked:[&_.sui-switch-thumb]:sui-translate-x-6\",\n // Slight hover tweak for checked state\n !invalid &&\n !disabled &&\n \"peer-checked:group-hover:sui-bg-primary/90\",\n invalid &&\n \"peer-checked:sui-bg-error sui-bg-error/80 peer-checked:[&_.sui-switch-thumb]:sui-translate-x-6\",\n disabled && \"sui-opacity-50\"\n )}\n >\n <span\n className={cn(\n // Thumb\n \"sui-switch-thumb sui-inline-block sui-h-4 sui-w-4 sui-translate-x-1 sui-rounded-full sui-bg-white sui-shadow-xs sui-transition-transform sui-duration-200 sui-ease-out sui-transform-gpu\"\n )}\n />\n </span>\n </span>\n\n {hasLabelContent && (\n <span\n className={cn(\n \"sui-flex sui-gap-1\",\n hasDescription ? \"sui-flex-col\" : \"sui-items-center\"\n )}\n >\n <span\n className={cn(\n \"sui-text-14 sui-font-medium\",\n disabled ? \"sui-text-text-disabled\" : \"sui-text-text-primary1\"\n )}\n >\n {label ?? children}\n </span>\n {description && (\n <span\n id={describedBy}\n aria-hidden=\"true\"\n className={cn(\n \"sui-text-12\",\n invalid\n ? \"sui-text-error\"\n : disabled\n ? \"sui-text-text-disabled\"\n : \"sui-text-text-secondary1\"\n )}\n >\n {description}\n </span>\n )}\n </span>\n )}\n </label>\n );\n }\n);\n\nSwitch.displayName = \"Switch\";\n\nexport { Switch, type SwitchProps };\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<boolean>(false);\n const [searchTerm, setSearchTerm] = useState<string>(\"\");\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 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\">\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-overflow-y-auto sui-scrollbars-thin\"\n onKeyDown={onKeyDown}\n style={{ maxHeight }}\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 { cn } from \"@/lib/utils\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { forwardRef } from \"react\";\n\nconst skeletonVariants = cva(\"sui-animate-shimmer\", {\n variants: {\n variant: {\n text: \"sui-rounded\",\n circle: \"sui-rounded-full\",\n rectangle: \"sui-rounded-xs\",\n },\n size: {\n sm: \"sui-h-4\",\n md: \"sui-h-5\",\n lg: \"sui-h-6\",\n },\n },\n defaultVariants: {\n variant: \"text\",\n size: \"md\",\n },\n});\n\nexport type SkeletonVariant = NonNullable<\n VariantProps<typeof skeletonVariants>[\"variant\"]\n>;\nexport type SkeletonSize = NonNullable<\n VariantProps<typeof skeletonVariants>[\"size\"]\n>;\n\n/**\n * Helper to normalize dimension values.\n * Converts numbers to pixel strings, preserves string values, and returns undefined for undefined.\n */\nconst formatSize = (value?: string | number) => {\n if (value === undefined) return undefined;\n return typeof value === \"number\" ? `${value}px` : value;\n};\n\ninterface SkeletonProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"width\" | \"height\">,\n VariantProps<typeof skeletonVariants> {\n /**\n * Width of the skeleton.\n * If a number is provided, it will be automatically converted to pixels.\n * @example width={40} → width=\"40px\"\n * @example width=\"100%\" → width=\"100%\"\n */\n width?: string | number;\n /**\n * Height of the skeleton.\n * If a number is provided, it will be automatically converted to pixels.\n * @example height={40} → height=\"40px\"\n * @example height=\"100%\" → height=\"100%\"\n */\n height?: string | number;\n /**\n * Accessible label for screen readers.\n * Falls back to a generic \"Loading\" label if not provided.\n */\n \"aria-label\"?: string;\n}\n\n/**\n * Skeleton component for displaying loading placeholders with shimmer animation.\n *\n * Features:\n * - Multiple variants: text, circle, rectangle\n * - Responsive sizes: sm, md, lg\n * - Custom dimensions via width/height props\n * - Shimmer animation with reduced motion support\n * - Full accessibility support\n *\n * @example\n * ```tsx\n * // Basic text skeleton\n * <Skeleton variant=\"text\" size=\"md\" width=\"100%\" />\n *\n * // Circle avatar skeleton\n * <Skeleton variant=\"circle\" width={40} height={40} />\n *\n * // Custom rectangle\n * <Skeleton variant=\"rectangle\" width={200} height={100} />\n * ```\n */\nconst Skeleton = forwardRef<HTMLDivElement, SkeletonProps>(\n (\n {\n className,\n variant = \"text\",\n size = \"md\",\n width,\n height,\n \"aria-label\": ariaLabel,\n style,\n ...props\n },\n ref\n ) => {\n const widthStyle = formatSize(width);\n const heightStyle = formatSize(height);\n\n // Smart logic for circle variant: keep dimensions 1:1 if only one is provided\n let finalWidth = widthStyle;\n let finalHeight = heightStyle;\n\n if (variant === \"circle\") {\n if (widthStyle && !heightStyle) finalHeight = widthStyle;\n if (heightStyle && !widthStyle) finalWidth = heightStyle;\n }\n\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-busy=\"true\"\n aria-label={ariaLabel ?? \"Loading content\"}\n className={cn(skeletonVariants({ variant, size }), className)}\n style={{\n width: finalWidth,\n height: finalHeight,\n ...style,\n }}\n {...props}\n />\n );\n }\n);\n\nSkeleton.displayName = \"Skeleton\";\n\nexport { Skeleton, type SkeletonProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef } from \"react\";\nimport { Skeleton } from \"./Skeleton\";\n\ninterface SkeletonTextProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"children\"> {\n /**\n * Number of lines to render.\n * @default 3\n */\n lines?: number;\n /**\n * Spacing between lines.\n * If a number is provided, it will be automatically converted to pixels.\n * @default \"0.5rem\"\n * @example gap={8} → gap=\"8px\"\n * @example gap=\"1rem\" → gap=\"1rem\"\n */\n gap?: string | number;\n}\n\n/**\n * SkeletonText component for creating multi-line text skeleton placeholders.\n *\n * Features:\n * - Configurable number of lines\n * - Customizable gap between lines\n * - Natural paragraph ending (last line is 80% width when multiple lines)\n * - Composed from Skeleton components\n *\n * This component saves you from repeating the \"flex-col gap + last line width\" pattern\n * and enforces UI consistency across your application.\n *\n * @example\n * ```tsx\n * // Default 3-line paragraph skeleton\n * <SkeletonText />\n *\n * // Custom 5-line skeleton with larger gap\n * <SkeletonText lines={5} gap=\"1rem\" />\n *\n * // Compact 2-line skeleton\n * <SkeletonText lines={2} gap={4} />\n * ```\n */\nconst SkeletonText = forwardRef<HTMLDivElement, SkeletonTextProps>(\n ({ className, lines = 3, gap = \"0.5rem\", style, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\"sui-flex sui-flex-col\", className)}\n style={{\n gap: typeof gap === \"number\" ? `${gap}px` : gap,\n ...style,\n }}\n {...props}\n >\n {Array.from({ length: lines }).map((_, i) => (\n <Skeleton\n key={i}\n variant=\"text\"\n // Last line is 80% width for a natural paragraph look\n // Only apply 80% if there's more than 1 line (single line looks better at 100%)\n width={i === lines - 1 && lines > 1 ? \"80%\" : \"100%\"}\n />\n ))}\n </div>\n );\n }\n);\n\nSkeletonText.displayName = \"SkeletonText\";\n\nexport { SkeletonText, type SkeletonTextProps };\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 { useEffect, useRef, useState } from \"react\";\n\nexport interface UseCountdownOptions {\n /**\n * Interval between updates in milliseconds.\n * @default 1000\n */\n intervalMs?: number;\n\n /**\n * Optional callback fired once when the countdown reaches zero.\n */\n onComplete?: () => void;\n}\n\ntype CountdownTarget = Date | string;\n\nconst getTargetTimestamp = (targetDate: CountdownTarget): number => {\n if (targetDate instanceof Date) {\n return targetDate.getTime();\n }\n\n const ts = new Date(targetDate).getTime();\n // NaN guard – if parsing fails, treat as \"now\" so countdown is zeroed.\n return Number.isFinite(ts) ? ts : Date.now();\n};\n\n/**\n * Client-side countdown hook that returns the remaining time in milliseconds\n * until the provided `targetDate`.\n *\n * The hook:\n * - Clamps negative values to `0`\n * - Invokes `onComplete` exactly once when it reaches zero\n * - Uses a configurable `intervalMs` (defaults to 1s)\n */\nexport const useCountdown = (\n targetDate: CountdownTarget,\n options: UseCountdownOptions = {}\n): number => {\n const { intervalMs = 1000, onComplete } = options;\n const [msRemaining, setMsRemaining] = useState<number>(0);\n const completedRef = useRef<boolean>(false);\n const targetTimestamp = getTargetTimestamp(targetDate);\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n\n if (!Number.isFinite(targetTimestamp)) {\n setMsRemaining(0);\n return;\n }\n\n const tick = () => {\n const diff = Math.max(0, targetTimestamp - Date.now());\n setMsRemaining(diff);\n\n if (diff === 0 && !completedRef.current) {\n completedRef.current = true;\n onComplete?.();\n }\n };\n\n tick();\n const id = window.setInterval(tick, intervalMs);\n\n return () => window.clearInterval(id);\n }, [intervalMs, onComplete, targetTimestamp]);\n\n return msRemaining;\n};\n","import {\n Fragment,\n forwardRef,\n useEffect,\n useRef,\n useState,\n type HTMLAttributes,\n} from \"react\";\n\nimport { useCountdown } from \"@/hooks/useCountdown\";\nimport { cn } from \"@/lib/utils\";\n\ntype CountdownUnit = \"days\" | \"hours\" | \"minutes\" | \"seconds\";\n\nconst ORDERED_UNITS: CountdownUnit[] = [\"days\", \"hours\", \"minutes\", \"seconds\"];\n\ntype CountdownSize = \"sm\" | \"lg\";\n\ntype CountdownTimeValues = Partial<Record<CountdownUnit, number>>;\n\nconst MS_PER_SECOND = 1000;\nconst MS_PER_MINUTE = MS_PER_SECOND * 60;\nconst MS_PER_HOUR = MS_PER_MINUTE * 60;\nconst MS_PER_DAY = MS_PER_HOUR * 24;\n\nconst UNIT_DIVISORS: Record<CountdownUnit, number> = {\n days: MS_PER_DAY,\n hours: MS_PER_HOUR,\n minutes: MS_PER_MINUTE,\n seconds: MS_PER_SECOND,\n};\n\nconst UNIT_LABELS: Record<CountdownUnit, string> = {\n days: \"Days\",\n hours: \"Hours\",\n minutes: \"Mins\",\n seconds: \"Secs\",\n};\n\nconst getCountdownTimeValues = (\n ms: number,\n displayUnits: CountdownUnit[]\n): CountdownTimeValues => {\n const safeMs = Math.max(0, ms);\n const values: CountdownTimeValues = {};\n\n let remaining = safeMs;\n\n for (const unit of ORDERED_UNITS) {\n if (!displayUnits.includes(unit)) continue;\n\n const divisor = UNIT_DIVISORS[unit];\n const value = Math.floor(remaining / divisor);\n\n values[unit] = value;\n remaining -= value * divisor;\n }\n\n return values;\n};\n\nconst sizeStyles: Record<\n CountdownSize,\n {\n column: string;\n box: string;\n label: string;\n separatorWrapper: string;\n separator: string;\n unitLabel: string;\n }\n> = {\n lg: {\n column: \"sui-flex sui-flex-col sui-items-center sui-gap-3 sui-w-20\",\n box: \"sui-min-w-12 sui-h-12 sui-rounded-lg sui-bg-white sui-shadow-soft sui-flex sui-items-center sui-justify-center sui-heading-24-medium sui-px-3\",\n label: \"sui-title-20-medium\",\n separatorWrapper:\n \"sui-h-12 sui-flex sui-items-center sui-justify-center sui-mx-2\",\n separator: \"sui-heading-24-medium\",\n unitLabel: \"sui-body-16-medium\",\n },\n sm: {\n column: \"sui-flex sui-flex-col sui-items-center sui-gap-2 sui-w-12\",\n box: \"sui-min-w-8 sui-h-8 sui-rounded-lg sui-bg-white sui-shadow-soft sui-flex sui-items-center sui-justify-center sui-title-16-medium sui-px-2\",\n label: \"sui-body-14-medium\",\n separatorWrapper:\n \"sui-h-8 sui-flex sui-items-center sui-justify-center sui-mx-2\",\n separator: \"sui-title-16-medium\",\n unitLabel: \"sui-body-12-medium\",\n },\n};\n\ninterface TimeColumnProps {\n value: number;\n unit: CountdownUnit;\n size: CountdownSize;\n unitLabel: string;\n}\n\nconst TimeColumn = ({ value, unitLabel, size }: TimeColumnProps) => {\n const styles = sizeStyles[size];\n const [isAnimating, setIsAnimating] = useState<boolean>(false);\n const previousValueRef = useRef<number>(value);\n\n useEffect(() => {\n if (value !== previousValueRef.current) {\n previousValueRef.current = value;\n setIsAnimating(true);\n\n const timeout = window.setTimeout(() => {\n setIsAnimating(false);\n }, 200);\n\n return () => window.clearTimeout(timeout);\n }\n\n return undefined;\n }, [value]);\n\n return (\n <div className={styles.column}>\n <div\n className={cn(\n \"sui-transition-transform sui-duration-200\",\n isAnimating && \"sui-scale-110\",\n styles.box\n )}\n >\n {String(value).padStart(2, \"0\")}\n </div>\n <span className={styles.unitLabel}>{unitLabel}</span>\n </div>\n );\n};\n\nconst Separator = ({ size }: { size: CountdownSize }) => {\n const styles = sizeStyles[size];\n\n return (\n <div aria-hidden=\"true\" className={styles.separatorWrapper}>\n <span className={styles.separator}>:</span>\n </div>\n );\n};\n\ninterface CountdownProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"children\"> {\n targetDate: Date | string;\n displayUnits?: CountdownUnit[];\n size?: CountdownSize;\n label?: string;\n onComplete?: () => void;\n unitLabels?: Partial<Record<CountdownUnit, string>>;\n}\n\nconst DEFAULT_UNITS: CountdownUnit[] = [\"days\", \"hours\", \"minutes\", \"seconds\"];\n\nconst Countdown = forwardRef<HTMLDivElement, CountdownProps>(\n (\n {\n targetDate,\n displayUnits = DEFAULT_UNITS,\n size = \"sm\",\n label,\n className,\n onComplete,\n unitLabels,\n ...rest\n },\n ref\n ) => {\n const msRemaining = useCountdown(targetDate, {\n onComplete,\n });\n\n const timeValues = getCountdownTimeValues(msRemaining, displayUnits);\n const resolvedUnitLabels: Record<CountdownUnit, string> = {\n ...UNIT_LABELS,\n ...(unitLabels ?? {}),\n };\n\n return (\n <div\n ref={ref}\n role=\"timer\"\n aria-label={label}\n className={cn(\n \"sui-flex sui-flex-col sui-items-center sui-gap-3\",\n className\n )}\n {...rest}\n >\n {label && <span className={sizeStyles[size].label}>{label}</span>}\n\n <div className=\"sui-flex sui-items-start\">\n {displayUnits.map((unit, index) => {\n const isLast = index === displayUnits.length - 1;\n const value = timeValues[unit] ?? 0;\n\n return (\n <Fragment key={unit}>\n <TimeColumn\n unit={unit}\n value={value}\n size={size}\n unitLabel={resolvedUnitLabels[unit]}\n />\n {!isLast && <Separator size={size} />}\n </Fragment>\n );\n })}\n </div>\n </div>\n );\n }\n);\n\nCountdown.displayName = \"Countdown\";\n\nexport {\n Countdown,\n getCountdownTimeValues,\n type CountdownProps,\n type CountdownSize,\n type CountdownTimeValues,\n type CountdownUnit,\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<number>(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 groupAvatar from \"./group-avatar.svg\";\nimport imagePlaceholder from \"./image-placeholder.svg\";\nimport profileAvatar from \"./profile-avatar.svg\";\n\n/**\n * Centralized catalog of fallback imagery for avatars and generic image slots.\n * Consumers can reference these to keep placeholder usage consistent.\n */\nexport const defaultAssets = {\n avatars: {\n group: groupAvatar,\n profile: profileAvatar,\n },\n placeholders: {\n image: imagePlaceholder,\n },\n} as const;\n\nexport type DefaultAssets = typeof defaultAssets;\n","import { forwardRef, type ImgHTMLAttributes } from \"react\";\n\nimport { defaultAssets } from \"@/assets/default\";\nimport { cn } from \"@/lib/utils\";\n\ntype AvatarPlaceholderCategory = keyof typeof defaultAssets;\ntype AvatarPlaceholderVariantMap = {\n [K in AvatarPlaceholderCategory]: keyof (typeof defaultAssets)[K];\n};\ntype AvatarPlaceholderVariant<\n C extends AvatarPlaceholderCategory = AvatarPlaceholderCategory\n> = AvatarPlaceholderVariantMap[C];\n\ninterface BaseAvatarPlaceholderProps\n extends Omit<ImgHTMLAttributes<HTMLImageElement>, \"src\" | \"alt\"> {\n /**\n * Accessible text describing the placeholder image.\n * Falls back to a generated description derived from category and variant.\n */\n alt?: string;\n}\n\nexport interface AvatarPlaceholderProps<\n C extends AvatarPlaceholderCategory = AvatarPlaceholderCategory\n> extends BaseAvatarPlaceholderProps {\n /**\n * Asset grouping to load from (`avatars` or `placeholders`).\n */\n category: C;\n /**\n * Asset key within the selected category (e.g. `group`, `profile`, `image`).\n */\n variant: AvatarPlaceholderVariant<C>;\n}\n\nconst readableLabel = (value: string) =>\n value.replace(/[-_]/g, \" \").replace(/\\b\\w/g, (char) => char.toUpperCase());\n\n/**\n * Thin wrapper around the shared default asset catalog that renders placeholder imagery\n * (e.g. generic avatars) as a standard `<img>` element with sensible defaults.\n */\nconst AvatarPlaceholder = forwardRef<HTMLImageElement, AvatarPlaceholderProps>(\n ({ category, variant, className, alt, ...props }, ref) => {\n const categoryAssets = defaultAssets[category] as\n | Record<string, string>\n | undefined;\n const assetSrc = categoryAssets?.[variant];\n\n if (!assetSrc) {\n console.warn(\n `AvatarPlaceholder asset missing for category \"${category}\" and variant \"${variant}\".`\n );\n return null;\n }\n\n const generatedAlt =\n alt ?? `Default ${readableLabel(category)} ${readableLabel(variant)}`;\n\n return (\n <img\n ref={ref}\n src={assetSrc}\n alt={generatedAlt}\n className={cn(\n \"sui-block sui-max-w-full sui-select-none sui-object-contain\",\n className\n )}\n draggable={false}\n {...props}\n />\n );\n }\n);\n\nAvatarPlaceholder.displayName = \"AvatarPlaceholder\";\n\nexport {\n AvatarPlaceholder,\n type AvatarPlaceholderCategory,\n type AvatarPlaceholderVariant,\n};\n","import appPng from \"./scalably-app.png\";\nimport appSvg from \"./scalably-app.svg\";\nimport campaignPng from \"./scalably-campaign.png\";\nimport campaignSvg from \"./scalably-campaign.svg\";\nimport iconBigPng from \"./scalably-icon-big.png\";\nimport iconPng from \"./scalably-icon.png\";\nimport iconSvg from \"./scalably-icon.svg\";\nimport membershipPng from \"./scalably-membership.png\";\nimport membershipSvg from \"./scalably-membership.svg\";\n\nexport const logoAssets = {\n app: {\n png: appPng,\n svg: appSvg,\n },\n campaign: {\n png: campaignPng,\n svg: campaignSvg,\n },\n membership: {\n png: membershipPng,\n svg: membershipSvg,\n },\n icon: {\n png: iconPng,\n svg: iconSvg,\n },\n \"icon-big\": {\n png: iconBigPng,\n },\n} as const;\n\nexport type LogoAssets = typeof logoAssets;\n","import { forwardRef, type ImgHTMLAttributes } from \"react\";\n\nimport { logoAssets } from \"@/assets/logo\";\nimport { cn } from \"@/lib/utils\";\n\ntype LogoVariant = keyof typeof logoAssets;\ntype LogoFormat = {\n [K in LogoVariant]: keyof (typeof logoAssets)[K];\n}[LogoVariant];\n\ninterface LogoProps\n extends Omit<ImgHTMLAttributes<HTMLImageElement>, \"src\" | \"alt\"> {\n /**\n * Which logo variant to render (derived from logo assets).\n */\n variant: LogoVariant;\n /**\n * File format to render. Defaults to SVG when available, otherwise PNG.\n */\n format?: LogoFormat;\n /**\n * Accessible description. Falls back to \"Scalably {variant} logo\".\n */\n alt?: string;\n}\n\n/**\n * Branded logo renderer that stays tightly coupled to available assets.\n */\nconst Logo = forwardRef<HTMLImageElement, LogoProps>(\n ({ className, variant, format = \"svg\", alt, ...props }, ref) => {\n const variantAssets = logoAssets[variant] as Record<string, string>;\n const requestedSource = variantAssets?.[format];\n const fallbackSource = variantAssets?.svg ?? variantAssets?.png;\n const finalSource = requestedSource ?? fallbackSource;\n\n if (!finalSource) {\n console.warn(`Logo variant \"${variant}\" is missing assets.`);\n return null;\n }\n\n const defaultAlt = alt ?? `Scalably ${variant.replace(/-/g, \" \")} logo`;\n\n return (\n <img\n ref={ref}\n src={finalSource}\n alt={defaultAlt}\n className={cn(\"sui-block sui-max-w-full sui-select-none\", className)}\n draggable={false}\n {...props}\n />\n );\n }\n);\n\nLogo.displayName = \"Logo\";\n\nexport { Logo, type LogoFormat, type LogoProps, type LogoVariant };\n","import { Logo } from \"@/components/Logo\";\nimport { cn } from \"@/lib/utils\";\nimport type React from \"react\";\nimport { forwardRef, useMemo } from \"react\";\n\nexport interface LoadingScreenProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"children\"> {\n /**\n * Optional loading message displayed below the logo.\n */\n message?: string;\n /**\n * Backdrop blur amount. Set to 0 to disable blur.\n * @default 8\n */\n backdropBlur?: number;\n /**\n * Backdrop opacity (0-1).\n * @default 0.8\n */\n backdropOpacity?: number;\n /**\n * Logo size in pixels. Responsive: smaller on mobile, larger on desktop.\n * @default { mobile: 64, desktop: 80 }\n */\n size?: number | { mobile: number; desktop: number };\n /**\n * Accessible label for screen readers.\n * Falls back to \"Loading\" or includes message if provided.\n */\n \"aria-label\"?: string;\n}\n\n/**\n * Full-screen loading overlay component with animated Scalably logo.\n *\n * Features:\n * - Full-screen overlay with customizable backdrop\n * - Animated logo with pulse and rotate combination\n * - Optional loading message\n * - Full accessibility support\n * - Respects reduced motion preferences\n * - Mobile-first responsive design\n *\n * @example\n * ```tsx\n * // Basic usage\n * <LoadingScreen />\n *\n * // With message\n * <LoadingScreen message=\"Loading your data...\" />\n *\n * // Custom backdrop\n * <LoadingScreen backdropBlur={12} backdropOpacity={0.9} />\n *\n * // Custom size\n * <LoadingScreen size={{ mobile: 48, desktop: 96 }} />\n * ```\n */\nconst LoadingScreen = forwardRef<HTMLDivElement, LoadingScreenProps>(\n (\n {\n className,\n message,\n backdropBlur = 8,\n backdropOpacity = 0.8,\n size = { mobile: 64, desktop: 128 },\n \"aria-label\": ariaLabel,\n style,\n ...props\n },\n ref\n ) => {\n // Calculate responsive logo sizes\n const logoSizeMobile = typeof size === \"number\" ? size : size.mobile;\n const logoSizeDesktop = typeof size === \"number\" ? size : size.desktop;\n\n const defaultAriaLabel = message ? `Loading: ${message}` : \"Loading\";\n\n // Optimized styles using CSS variables so Tailwind can consume them\n const dynamicStyle = useMemo<\n React.CSSProperties & {\n \"--loading-opacity\"?: string;\n \"--logo-size-mobile\"?: string;\n \"--logo-size-desktop\"?: string;\n }\n >(() => {\n const base: React.CSSProperties & {\n \"--loading-opacity\"?: string;\n \"--logo-size-mobile\"?: string;\n \"--logo-size-desktop\"?: string;\n } = {\n // Dynamic values exposed as CSS variables\n \"--loading-opacity\": backdropOpacity.toString(),\n \"--logo-size-mobile\": `${logoSizeMobile}px`,\n \"--logo-size-desktop\": `${logoSizeDesktop}px`,\n ...style,\n };\n\n if (backdropBlur > 0) {\n base.backdropFilter = `blur(${backdropBlur}px)`;\n // WebKit prefix for Safari / iOS\n base.WebkitBackdropFilter = `blur(${backdropBlur}px)`;\n }\n\n return base;\n }, [backdropBlur, backdropOpacity, logoSizeMobile, logoSizeDesktop, style]);\n\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-live=\"polite\"\n aria-label={ariaLabel ?? defaultAriaLabel}\n aria-busy=\"true\"\n className={cn(\n // Layout & Z-Index\n \"sui-fixed sui-inset-0 sui-z-50 sui-flex sui-items-center sui-justify-center\",\n // Background color with opacity variable (light mode only for now)\n \"sui-bg-[rgba(255,255,255,var(--loading-opacity))]\",\n className\n )}\n style={dynamicStyle}\n {...props}\n >\n <div className=\"sui-flex sui-flex-col sui-items-center sui-gap-4\">\n <div\n className={cn(\n \"sui-loading-logo-container\",\n // Combined pulse + rotate animation is defined in global CSS\n \"sui-animate-pulse-scale sui-animate-rotate-smooth\",\n // Respect reduced-motion preferences\n \"motion-reduce:sui-animate-none\",\n // Responsive sizing driven by CSS variables\n \"sui-w-[var(--logo-size-mobile)] sui-h-[var(--logo-size-mobile)]\",\n \"md:sui-w-[var(--logo-size-desktop)] md:sui-h-[var(--logo-size-desktop)]\"\n )}\n >\n <Logo\n variant=\"icon\"\n className=\"sui-w-full sui-h-full sui-object-contain\"\n aria-hidden=\"true\"\n />\n </div>\n {message && (\n <p className=\"sui-text-16 sui-font-medium sui-text-text-default sui-text-center sui-max-w-xs sui-px-4 sui-animate-in sui-fade-in sui-duration-300\">\n {message}\n </p>\n )}\n </div>\n </div>\n );\n }\n);\n\nLoadingScreen.displayName = \"LoadingScreen\";\n\nexport { LoadingScreen };\n","import ellipse1 from \"./ellipse-1.png\";\nimport ellipse2 from \"./ellipse-2.png\";\nimport multipleLine from \"./multiple-line.svg\";\nimport radialGradientBg from \"./radial-gradient-bg.png\";\n\nexport const welcomeAssets = {\n ellipses: [ellipse1, ellipse2],\n multipleLine,\n background: radialGradientBg,\n} as const;\n\nexport type WelcomeAssets = typeof welcomeAssets;\n","import { cn } from \"@/lib/utils\";\nimport type React from \"react\";\nimport { useMemo } from \"react\";\nimport { welcomeAssets } from \"../../assets/welcome\";\n\nconst ANIMATION_CONFIG = {\n ellipse: {\n duration: { min: 20, max: 30 },\n delay: { min: 0, max: 5 },\n },\n} as const;\n\nconst ELLIPSE_CANVAS = {\n x: { min: 0, max: 95 },\n y: { min: 0, max: 85 },\n} as const;\n\nfunction seededRandom(seed: number) {\n return (min: number, max: number) => {\n const x = Math.sin(seed++) * 10000;\n return min + (x - Math.floor(x)) * (max - min);\n };\n}\n\ninterface AnimatedEllipsesProps {\n ellipses: readonly string[];\n disableAnimation?: boolean;\n}\n\nfunction AnimatedEllipses({\n ellipses,\n disableAnimation,\n}: AnimatedEllipsesProps) {\n return (\n <>\n {ellipses.map((src, index) => {\n const rand = seededRandom(index * 987);\n const duration = rand(\n ANIMATION_CONFIG.ellipse.duration.min,\n ANIMATION_CONFIG.ellipse.duration.max\n );\n const delay = rand(\n ANIMATION_CONFIG.ellipse.delay.min,\n ANIMATION_CONFIG.ellipse.delay.max\n );\n\n const styleVars: React.CSSProperties & Record<string, string> = {\n \"--tx-0\": `${rand(ELLIPSE_CANVAS.x.min, ELLIPSE_CANVAS.x.max)}vw`,\n \"--ty-0\": `${rand(ELLIPSE_CANVAS.y.min, ELLIPSE_CANVAS.y.max)}vh`,\n \"--tx-25\": `${rand(\n ELLIPSE_CANVAS.x.min + 10,\n ELLIPSE_CANVAS.x.max\n )}vw`,\n \"--ty-25\": `${rand(\n ELLIPSE_CANVAS.y.min + 10,\n ELLIPSE_CANVAS.y.max - 15\n )}vh`,\n \"--tx-50\": `${rand(\n ELLIPSE_CANVAS.x.min + 5,\n ELLIPSE_CANVAS.x.max - 10\n )}vw`,\n \"--ty-50\": `${rand(\n ELLIPSE_CANVAS.y.min + 5,\n ELLIPSE_CANVAS.y.max - 10\n )}vh`,\n \"--tx-75\": `${rand(\n ELLIPSE_CANVAS.x.min + 15,\n ELLIPSE_CANVAS.x.max\n )}vw`,\n \"--ty-75\": `${rand(\n ELLIPSE_CANVAS.y.min + 15,\n ELLIPSE_CANVAS.y.max\n )}vh`,\n };\n\n return (\n <img\n key={src}\n src={src}\n alt=\"\"\n aria-hidden=\"true\"\n draggable={false}\n width={200}\n height={200}\n loading=\"lazy\"\n decoding=\"async\"\n className=\"sui-absolute sui-opacity-25 sui-pointer-events-none sui-select-none sui-welcome-bg-animated\"\n style={{\n left: \"-100px\",\n top: \"-100px\",\n animation: disableAnimation\n ? \"none\"\n : `sui-ellipse-float ${duration}s ease-in-out infinite`,\n animationDelay: disableAnimation ? undefined : `${delay}s`,\n willChange: disableAnimation ? undefined : \"transform\",\n ...styleVars,\n zIndex: 0,\n }}\n />\n );\n })}\n </>\n );\n}\n\ninterface AnimatedLinesProps {\n src: string;\n disableAnimation?: boolean;\n}\n\nfunction AnimatedLines({ src, disableAnimation }: AnimatedLinesProps) {\n return (\n <img\n src={src}\n alt=\"\"\n aria-hidden=\"true\"\n draggable={false}\n width={1200}\n height={800}\n loading=\"lazy\"\n decoding=\"async\"\n className=\"sui-absolute sui-right-0 sui-top-0 sui-w-full sui-opacity-80 sui-pointer-events-none sui-select-none sui-welcome-bg-animated\"\n style={{\n animation: disableAnimation\n ? \"none\"\n : \"sui-ocean-wave 12s ease-in-out infinite\",\n willChange: disableAnimation ? undefined : \"transform\",\n zIndex: 0,\n }}\n />\n );\n}\n\ninterface WelcomeBackgroundProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"children\"> {\n /**\n * Optional children rendered on top of the animated background.\n */\n children?: React.ReactNode;\n /**\n * Toggle ellipse animation layer.\n * @default true\n */\n showEllipses?: boolean;\n /**\n * Toggle line wave animation layer.\n * @default true\n */\n showLines?: boolean;\n /**\n * Disable all animations (also handled automatically for prefers-reduced-motion).\n * @default false\n */\n disableAnimation?: boolean;\n /**\n * Override background image URL.\n */\n backgroundImage?: string;\n /**\n * Override ellipse sources (defaults to bundled welcome assets).\n */\n ellipsesData?: readonly string[];\n /**\n * Override lines overlay source (defaults to bundled welcome assets).\n */\n linesSrc?: string;\n}\n\n/**\n * Animated background for welcome/landing experiences.\n * - Uses deterministic seeded randomness for stable ellipse paths.\n * - Honors reduced-motion preferences and optional animation disabling.\n * - Mobile-first; hides heavy layers on very small screens via consumer control.\n */\nconst WelcomeBackground = ({\n className,\n style,\n children,\n showEllipses = true,\n showLines = true,\n disableAnimation = false,\n backgroundImage,\n ellipsesData = welcomeAssets.ellipses,\n linesSrc = welcomeAssets.multipleLine,\n ...props\n}: WelcomeBackgroundProps) => {\n const resolvedBackground = backgroundImage ?? welcomeAssets.background;\n\n const backgroundStyle = useMemo<React.CSSProperties>(\n () => ({\n backgroundImage: resolvedBackground\n ? `url(${resolvedBackground})`\n : undefined,\n backgroundSize: \"cover\",\n backgroundPosition: \"center\",\n backgroundRepeat: \"no-repeat\",\n ...style,\n }),\n [resolvedBackground, style]\n );\n\n return (\n <div\n className={cn(\n \"sui-relative sui-min-h-screen sui-w-full sui-overflow-hidden\",\n className\n )}\n style={backgroundStyle}\n {...props}\n >\n {showEllipses && ellipsesData?.length ? (\n <div className=\"sui-hidden sm:sui-block sui-absolute sui-inset-0\">\n <AnimatedEllipses\n ellipses={ellipsesData}\n disableAnimation={disableAnimation}\n />\n </div>\n ) : null}\n\n {showLines && linesSrc ? (\n <div className=\"sui-hidden sm:sui-block sui-absolute sui-inset-0\">\n <AnimatedLines src={linesSrc} disableAnimation={disableAnimation} />\n </div>\n ) : null}\n\n {/* Consumer content overlays the animated layers */}\n <div className=\"sui-relative sui-z-10\">{children}</div>\n </div>\n );\n};\n\nWelcomeBackground.displayName = \"WelcomeBackground\";\n\nexport { WelcomeBackground, type WelcomeBackgroundProps };\n","import { cn } from \"@/lib/utils\";\nimport type { Editor } from \"@tiptap/react\";\nimport { useEffect, useState } from \"react\";\n\ninterface RichTextCharacterCounterProps {\n editor: Editor;\n max: number;\n}\n\n/**\n * RichTextCharacterCounter\n *\n * Reactive character counter overlay for the rich text editor.\n * Subscribes to Tiptap's `transaction` events to keep the displayed\n * count in sync with the editor's `CharacterCount` extension storage.\n */\nconst RichTextCharacterCounter = ({\n editor,\n max,\n}: RichTextCharacterCounterProps) => {\n // Local state to force a re-render because Tiptap's storage is mutable\n // but doesn't trigger React updates automatically.\n const [count, setCount] = useState<number>(\n () => editor.storage.characterCount?.characters?.() ?? 0\n );\n\n useEffect(() => {\n if (!editor || editor.isDestroyed) return;\n\n const updateCount = () => {\n if (editor.isDestroyed) return;\n setCount(editor.storage.characterCount?.characters?.() ?? 0);\n };\n\n // Update on every transaction (typing, deleting, pasting)\n editor.on(\"transaction\", updateCount);\n\n return () => {\n if (!editor.isDestroyed) {\n editor.off(\"transaction\", updateCount);\n }\n };\n }, [editor]);\n\n const percentage = Math.round((count / max) * 100);\n const isFull = count >= max;\n const isClose = percentage >= 90;\n\n return (\n <div\n aria-live=\"polite\"\n className={cn(\n \"sui-absolute sui-bottom-2 sui-right-2 sui-pointer-events-none sui-select-none sui-rounded sui-bg-background/80 sui-px-1.5 sui-py-0.5 sui-text-10 sui-font-medium sui-backdrop-blur-[2px] sui-transition-colors\",\n isFull\n ? \"sui-text-error\"\n : isClose\n ? \"sui-text-warning\"\n : \"sui-text-inactive\"\n )}\n >\n {count} / {max}\n </div>\n );\n};\n\nRichTextCharacterCounter.displayName = \"RichTextCharacterCounter\";\n\nexport { RichTextCharacterCounter, type RichTextCharacterCounterProps };\n","import { cn, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface AlignCenterIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 16. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n}\n\nconst AlignCenterIcon = memo(\n forwardRef<SVGSVGElement, AlignCenterIconProps>(\n ({ size = 16, className, strokeWidth, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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 3H14\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M4.84009 6.33337H11.1601\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M2 9.66663H14\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M4.84009 13H11.1601\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n }\n )\n);\nAlignCenterIcon.displayName = \"AlignCenterIcon\";\n\nexport { AlignCenterIcon, type AlignCenterIconProps };\n","import { cn, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface AlignLeftIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 16. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n}\n\nconst AlignLeftIcon = memo(\n forwardRef<SVGSVGElement, AlignLeftIconProps>(\n ({ size = 16, className, strokeWidth, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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 3H14\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M2 6.33337H8.31333\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M2 9.66663H14\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M2 13H8.31333\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n }\n )\n);\nAlignLeftIcon.displayName = \"AlignLeftIcon\";\n\nexport { AlignLeftIcon, type AlignLeftIconProps };\n","import { cn, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface AlignRightIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 16. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n}\n\nconst AlignRightIcon = memo(\n forwardRef<SVGSVGElement, AlignRightIconProps>(\n ({ size = 16, className, strokeWidth, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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 3H14\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M7.68677 6.33337H14.0001\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M2 9.66663H14\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M7.68677 13H14.0001\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n }\n )\n);\nAlignRightIcon.displayName = \"AlignRightIcon\";\n\nexport { AlignRightIcon, type AlignRightIconProps };\n","import { cn, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface BoldIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 16. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n}\n\n/**\n * Bold icon component - displays a bold icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { BoldIcon } from '@scalably/ui';\n *\n * <BoldIcon size={16} className=\"sui-text-primary\" />\n * ```\n */\n\nconst BoldIcon = memo(\n forwardRef<SVGSVGElement, BoldIconProps>(\n ({ size = 16, className, strokeWidth, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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=\"M3.84692 3.62504C3.84692 2.98337 4.37192 2.45837 5.01359 2.45837H8.00026C9.52859 2.45837 10.7711 3.70087 10.7711 5.22921C10.7711 6.75754 9.52859 8.00004 8.00026 8.00004H3.84692V3.62504Z\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M3.84692 8H9.38859C10.9169 8 12.1594 9.2425 12.1594 10.7708C12.1594 12.2992 10.9169 13.5417 9.38859 13.5417H5.01359C4.37192 13.5417 3.84692 13.0167 3.84692 12.375V8V8Z\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n }\n )\n);\n\nBoldIcon.displayName = \"BoldIcon\";\n\nexport { BoldIcon, type BoldIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface InsertImageIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 16. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\nconst InsertImageIcon = memo(\n forwardRef<SVGSVGElement, InsertImageIconProps>(\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=\"M0.5 13.485L0.481132 13.5C0.226415 13.0575 0.0660377 12.555 0 12C0.0660377 12.5475 0.245283 13.0425 0.5 13.485Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M5.625 3.5C6.38439 3.5 7 4.11561 7 4.875C7 5.63439 6.38439 6.25 5.625 6.25C4.86561 6.25 4.25 5.63439 4.25 4.875C4.25 4.11561 4.86561 3.5 5.625 3.5Z\"\n stroke=\"currentColor\"\n />\n <path\n d=\"M4.64844 0.5H11.3516C12.7081 0.5 13.7309 0.902812 14.4141 1.58594C15.0972 2.26906 15.5 3.29187 15.5 4.64844V11.3516C15.5 12.7081 15.0972 13.7309 14.4141 14.4141C13.7309 15.0972 12.7081 15.5 11.3516 15.5H4.64844C2.87765 15.5 1.65449 14.8153 1.02246 13.6562L0.901367 13.4141C0.641647 12.8524 0.5 12.1662 0.5 11.3516V4.64844C0.5 3.29187 0.902812 2.26906 1.58594 1.58594C2.26906 0.902812 3.29187 0.5 4.64844 0.5ZM4.64844 0.700195C3.43637 0.700195 2.42788 1.02134 1.72461 1.72461C1.02134 2.42788 0.700195 3.43637 0.700195 4.64844V11.3516C0.700195 12.0178 0.814409 12.6005 1.01465 13.1104L1.24219 13.6895L1.75879 13.3428L4.75098 11.335L4.75195 11.334C5.21017 11.0249 5.86346 11.0667 6.25488 11.4082L6.2666 11.418L6.53027 11.6348V11.6357C7.34153 12.3324 8.62619 12.3323 9.4375 11.6357L12.7656 8.7793C13.2022 8.40426 13.9335 8.40429 14.3701 8.7793L14.373 8.78125L14.4766 8.87012L15.2998 9.56641V4.64844C15.2998 3.43637 14.9787 2.42788 14.2754 1.72461C13.5721 1.02134 12.5636 0.700195 11.3516 0.700195H4.64844Z\"\n stroke=\"currentColor\"\n />\n </svg>\n );\n }\n )\n);\nInsertImageIcon.displayName = \"InsertImageIcon\";\n\nexport { InsertImageIcon, type InsertImageIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface InsertVideoIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 16. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\nconst InsertVideoIcon = memo(\n forwardRef<SVGSVGElement, InsertVideoIconProps>(\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 <g clipPath=\"url(#clip0_3601_212)\">\n <path\n d=\"M10.4628 7.28101L6.92797 5.34693C6.72473 5.23572 6.4845 5.23987 6.28528 5.35791C6.08594 5.47608 5.96704 5.68482 5.96704 5.91651V9.75147C5.96704 9.98206 6.0852 10.1904 6.2832 10.3087C6.3866 10.3705 6.50122 10.4015 6.61609 10.4015C6.72131 10.4015 6.82678 10.3755 6.92382 10.3232L10.4587 8.42249C10.6686 8.30957 10.7995 8.09143 10.8005 7.85303C10.8014 7.61463 10.672 7.39551 10.4628 7.28101ZM6.90466 9.26904V6.40283L9.54649 7.84839L6.90466 9.26904Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M15.8822 3.83245L15.8815 3.82278C15.8679 3.65275 15.733 2.14036 15.1762 1.37111C14.5325 0.466322 13.8028 0.356406 13.4518 0.303705C13.4227 0.299353 13.3961 0.295324 13.3723 0.291134L13.3444 0.287266C11.2292 0.0841954 8.03473 0.0564747 8.00275 0.0563135L7.99994 0.0561523L7.99713 0.0563135C7.96515 0.0564747 4.77072 0.0841954 2.63645 0.287266L2.60826 0.291134C2.58555 0.295163 2.56053 0.29887 2.53331 0.30306C2.18638 0.355923 1.46447 0.466 0.818963 1.40351C0.288572 2.16454 0.135253 3.64453 0.119506 3.81086L0.117675 3.83245C0.112914 3.9032 0 5.58756 0 7.27852V8.85925C0 10.5502 0.112914 12.2346 0.117675 12.3055L0.118529 12.3161C0.132079 12.4834 0.266844 13.9681 0.821161 14.7376C1.42638 15.6121 2.19163 15.7279 2.60325 15.7901C2.66831 15.7999 2.72434 15.8083 2.76255 15.8171L2.79954 15.8239C4.02084 15.9773 7.85004 16.0529 8.01239 16.056L8.01727 16.0562L8.02216 16.056C8.05414 16.0558 11.2484 16.0281 13.3637 15.825L13.3916 15.8212C13.4184 15.8165 13.4484 15.8123 13.4813 15.8078C13.8263 15.7594 14.5443 15.659 15.1809 14.7343C15.7113 13.9731 15.8647 12.4931 15.8804 12.3269L15.8822 12.3053C15.887 12.2344 16 10.5502 16 8.85925V7.27852C15.9999 5.58756 15.887 3.90337 15.8822 3.83245ZM15.0623 8.85925C15.0623 10.4243 14.9587 12.0362 14.949 12.1841C14.9092 12.5917 14.7474 13.5281 14.489 13.8989C14.0906 14.4777 13.6813 14.5351 13.3825 14.5768C13.3463 14.5818 13.3129 14.5866 13.2826 14.5916C11.2367 14.787 8.1629 14.8169 8.0213 14.8181C7.86249 14.815 4.08932 14.7388 2.90525 14.5936C2.84458 14.5805 2.77903 14.5705 2.70994 14.5602C2.35948 14.5072 1.87975 14.4347 1.51085 13.8989L1.50219 13.8867C1.24828 13.5374 1.09118 12.6618 1.05126 12.189C1.04382 12.0771 0.937615 10.4463 0.937615 8.85925V7.27852C0.937615 5.7152 1.04089 4.10515 1.0509 3.95413C1.09838 3.47402 1.26317 2.59437 1.51085 2.23883C1.92149 1.64252 2.35447 1.57644 2.64085 1.53276C2.66819 1.52857 2.69371 1.5247 2.71726 1.52068C4.79293 1.32437 7.88886 1.2952 7.99994 1.29407C8.11102 1.29504 11.2058 1.32437 13.2631 1.52068C13.2884 1.52487 13.3159 1.52906 13.3456 1.53357C13.6402 1.57789 14.0853 1.64494 14.4939 2.2203L14.4977 2.22562C14.7516 2.57487 14.9087 3.4658 14.9486 3.94817C14.9557 4.05373 15.0623 5.68813 15.0623 7.27852V8.85925Z\"\n fill=\"currentColor\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_3601_212\">\n <rect width={size} height={size} fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n }\n )\n);\nInsertVideoIcon.displayName = \"InsertVideoIcon\";\n\nexport { InsertVideoIcon, type InsertVideoIconProps };\n","import { cn, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface ItalicIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 16. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n}\n\n/**\n * Italic icon component - displays an italic icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { ItalicIcon } from '@scalably/ui';\n *\n * <ItalicIcon size={16} className=\"sui-text-primary\" />\n * ```\n */\n\nconst ItalicIcon = memo(\n forwardRef<SVGSVGElement, ItalicIconProps>(\n ({ size = 16, className, strokeWidth, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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=\"M6.61157 2.75H12.0074\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M3.98657 13.25H9.38241\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M9.3125 2.75L6.6875 13.25\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n }\n )\n);\n\nItalicIcon.displayName = \"ItalicIcon\";\n\nexport { ItalicIcon, type ItalicIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface LinkIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 16. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\nconst LinkIcon = memo(\n forwardRef<SVGSVGElement, LinkIconProps>(\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=\"M6.86071 11.496L5.28959 13.0671C4.63823 13.7185 3.58341 13.7185 2.9326 13.0672C2.28166 12.4163 2.28166 11.3614 2.93247 10.7105L6.07527 7.56775C6.72608 6.91691 7.781 6.91691 8.43182 7.56775C8.64877 7.7847 9.00054 7.7847 9.2175 7.56775C9.43445 7.35079 9.43445 6.99902 9.2175 6.78206C8.13275 5.69732 6.37433 5.69732 5.28959 6.78206L2.14681 9.92484C1.06207 11.0096 1.06207 12.768 2.14681 13.8527C3.23143 14.9381 4.98998 14.9381 6.07529 13.8527L7.64642 12.2816C7.86338 12.0647 7.86338 11.7129 7.64642 11.4959C7.42947 11.279 7.07767 11.279 6.86071 11.496Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M13.8527 2.14693C12.768 1.06219 11.009 1.06219 9.92425 2.14693L8.03924 4.03194C7.82228 4.2489 7.82228 4.60067 8.03924 4.81762C8.25619 5.03458 8.60796 5.03458 8.82492 4.81762L10.7099 2.93261C11.3607 2.28178 12.4162 2.28178 13.067 2.93261C13.7179 3.58342 13.7179 4.63835 13.067 5.28916L9.61036 8.74587C8.95953 9.39671 7.90463 9.39671 7.25382 8.74587C7.03686 8.52892 6.68509 8.52892 6.46814 8.74587C6.25118 8.96282 6.25118 9.3146 6.46814 9.53155C7.55288 10.6163 9.3113 10.6163 10.396 9.53155L13.8527 6.07487C14.9375 4.99012 14.9375 3.23168 13.8527 2.14693Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n )\n);\nLinkIcon.displayName = \"LinkIcon\";\n\nexport { LinkIcon, type LinkIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface ListBulletIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 16. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\nconst ListBulletIcon = memo(\n forwardRef<SVGSVGElement, ListBulletIconProps>(\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=\"M14.0017 12.5262H5.08571C4.71824 12.5262 4.42041 12.2283 4.42041 11.8609C4.42041 11.4934 4.71824 11.1956 5.08571 11.1956H14.0014C14.3689 11.1956 14.6667 11.4934 14.6667 11.8609C14.6667 12.2283 14.3691 12.5262 14.0017 12.5262Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M14.0017 8.35014H5.08571C4.71824 8.35014 4.42041 8.0523 4.42041 7.68483C4.42041 7.31737 4.71824 7.01953 5.08571 7.01953H14.0014C14.3689 7.01953 14.6667 7.31737 14.6667 7.68483C14.667 8.0523 14.3691 8.35014 14.0017 8.35014Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M14.0017 4.17399H5.08571C4.71824 4.17399 4.42041 3.87616 4.42041 3.50869C4.42041 3.14122 4.71824 2.84338 5.08571 2.84338H14.0014C14.3689 2.84338 14.6667 3.14122 14.6667 3.50869C14.6667 3.87616 14.3691 4.17399 14.0017 4.17399Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M2.227 4.45363C2.72047 4.45363 3.1205 4.05359 3.1205 3.56013C3.1205 3.06666 2.72047 2.66663 2.227 2.66663C1.73353 2.66663 1.3335 3.06666 1.3335 3.56013C1.3335 4.05359 1.73353 4.45363 2.227 4.45363Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M2.227 8.57826C2.72047 8.57826 3.1205 8.17823 3.1205 7.68476C3.1205 7.19129 2.72047 6.79126 2.227 6.79126C1.73353 6.79126 1.3335 7.19129 1.3335 7.68476C1.3335 8.17823 1.73353 8.57826 2.227 8.57826Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M2.227 12.703C2.72047 12.703 3.1205 12.303 3.1205 11.8095C3.1205 11.316 2.72047 10.916 2.227 10.916C1.73353 10.916 1.3335 11.316 1.3335 11.8095C1.3335 12.303 1.73353 12.703 2.227 12.703Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n )\n);\nListBulletIcon.displayName = \"ListBulletIcon\";\n\nexport { ListBulletIcon, type ListBulletIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface ListNumberIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 16. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\nconst ListNumberIcon = memo(\n forwardRef<SVGSVGElement, ListNumberIconProps>(\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 fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.51855 3.55556C6.51855 3.14646 6.85018 2.81482 7.2593 2.81482H13.926C14.3351 2.81482 14.6667 3.14646 14.6667 3.55556C14.6667 3.96466 14.3351 4.2963 13.926 4.2963H7.2593C6.85018 4.2963 6.51855 3.96466 6.51855 3.55556Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.51855 8.00002C6.51855 7.59091 6.85018 7.25928 7.2593 7.25928H13.926C14.3351 7.25928 14.6667 7.59091 14.6667 8.00002C14.6667 8.40913 14.3351 8.74076 13.926 8.74076H7.2593C6.85018 8.74076 6.51855 8.40913 6.51855 8.00002Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M7.25928 12.4445C7.25928 12.0354 7.59091 11.7037 8.00002 11.7037H13.9259C14.3351 11.7037 14.6667 12.0354 14.6667 12.4445C14.6667 12.8536 14.3351 13.1852 13.9259 13.1852H8.00002C7.59091 13.1852 7.25928 12.8536 7.25928 12.4445Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M3.55552 10.2222C3.35906 10.2222 3.17065 10.3003 3.03173 10.4392C2.89281 10.5781 2.81478 10.7665 2.81478 10.9629C2.81478 11.3721 2.48313 11.7037 2.07403 11.7037C1.66493 11.7037 1.33329 11.3721 1.33329 10.9629C1.33329 10.3736 1.56742 9.80835 1.98417 9.39161C2.40091 8.97487 2.96615 8.74072 3.55552 8.74072C4.14489 8.74072 4.71012 8.97487 5.12686 9.39161C5.54361 9.80835 5.77774 10.3736 5.77774 10.9629C5.77774 11.4112 5.58181 11.7547 5.38796 12.0015C5.2488 12.1786 5.0657 12.3573 4.92229 12.4973C4.88504 12.5337 4.85046 12.5674 4.82003 12.5978C4.8042 12.6137 4.78766 12.6288 4.77046 12.6431L4.12 13.1852H5.037C5.44609 13.1852 5.77774 13.5168 5.77774 13.9259C5.77774 14.335 5.44609 14.6666 5.037 14.6666H2.07403C1.76217 14.6666 1.4837 14.4713 1.37753 14.1781C1.27137 13.8849 1.36023 13.5565 1.59982 13.3569L3.79674 11.5261C3.83566 11.4875 3.87395 11.45 3.90955 11.4152L3.9164 11.4084C3.96237 11.3635 4.00366 11.323 4.04289 11.2835C4.12237 11.2036 4.17995 11.141 4.22306 11.0861C4.26554 11.0321 4.2836 10.9984 4.29114 10.9806C4.29658 10.9677 4.29632 10.964 4.29626 10.9631C4.29626 10.9632 4.29626 10.963 4.29626 10.9631C4.29626 10.7666 4.21821 10.5781 4.07929 10.4392C3.94038 10.3003 3.75197 10.2222 3.55552 10.2222Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M3.83918 1.38978C4.11598 1.50443 4.29646 1.77454 4.29646 2.07414V6.51856C4.29646 6.92767 3.96481 7.2593 3.55572 7.2593C3.14662 7.2593 2.81498 6.92767 2.81498 6.51856V3.86244L2.59802 4.0794C2.30874 4.36868 1.83973 4.36868 1.55045 4.0794C1.26118 3.79012 1.26118 3.32112 1.55045 3.03183L3.03193 1.55035C3.24378 1.3385 3.56239 1.27513 3.83918 1.38978Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n )\n);\nListNumberIcon.displayName = \"ListNumberIcon\";\n\nexport { ListNumberIcon, type ListNumberIconProps };\n","import { cn, getProportionalStrokeWidth } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface UnderlineIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 16. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n /** Stroke width of the icon in pixels. Defaults to 1.5. */\n strokeWidth?: number;\n}\n\n/**\n * Underline icon component - displays an underline icon.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { UnderlineIcon } from '@scalably/ui';\n *\n * <UnderlineIcon size={16} className=\"sui-text-primary\" />\n * ```\n */\n\nconst UnderlineIcon = memo(\n forwardRef<SVGSVGElement, UnderlineIconProps>(\n ({ size = 16, className, strokeWidth, ...props }, ref) => {\n const calculatedStrokeWidth =\n strokeWidth ?? getProportionalStrokeWidth(size, 1.5);\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=\"M3.9165 13.25H12.0832\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M3.9165 2.75V6.83333C3.9165 9.09083 5.74234 10.9167 7.99984 10.9167C10.2573 10.9167 12.0832 9.09083 12.0832 6.83333V2.75\"\n stroke=\"currentColor\"\n strokeWidth={calculatedStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n }\n )\n);\nUnderlineIcon.displayName = \"UnderlineIcon\";\n\nexport { UnderlineIcon, type UnderlineIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { type Editor } from \"@tiptap/react\";\n\ninterface ToolbarButtonProps {\n editor: Editor | null;\n /** Command to run when clicking the button */\n onClick: () => void;\n /** Accessible label for screen readers */\n ariaLabel: string;\n /** Whether the associated mark/block is currently active */\n isActive?: boolean;\n children: React.ReactNode;\n}\n\nconst ToolbarButton = ({\n editor,\n onClick,\n ariaLabel,\n isActive,\n children,\n}: ToolbarButtonProps) => {\n const disabled = !editor || editor.isDestroyed || !editor.isEditable;\n\n return (\n <button\n type=\"button\"\n aria-label={ariaLabel}\n className={cn(\n \"sui-inline-flex sui-items-center sui-justify-center sui-rounded-md sui-border sui-border-transparent sui-bg-transparent sui-px-2 sui-py-1 sui-text-12 sui-text-secondary-600 hover:sui-bg-secondary-50 focus-visible:sui-outline-none focus-visible:sui-ring-2 focus-visible:sui-ring-primary/60\",\n disabled && \"sui-cursor-not-allowed sui-opacity-40\",\n isActive && \"sui-bg-primary/5 sui-text-primary sui-border-primary/40\"\n )}\n onClick={() => {\n if (disabled) return;\n onClick();\n }}\n disabled={disabled}\n >\n {children}\n </button>\n );\n};\nToolbarButton.displayName = \"ToolbarButton\";\n\nexport { ToolbarButton, type ToolbarButtonProps };\n","import { ImageUploadIcon } from \"@/icons\";\nimport { InsertImageIcon } from \"@/icons/editor\";\nimport { cn } from \"@/lib/utils\";\nimport { type Editor } from \"@tiptap/react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { Button } from \"../Button/Button\";\nimport { Input } from \"../Input/Input\";\nimport type { ImageSourceMode } from \"./RichTextEditor\";\nimport { ToolbarButton } from \"./RichTextToolbarButton\";\n\ninterface RichTextImageControlProps {\n editor: Editor | null;\n simple?: boolean;\n /**\n * Optional handler for image uploads.\n *\n * When provided, this control shows an \"Upload file\" helper inside\n * the image popover. The library passes the selected File to this\n * callback and expects a Promise that resolves to a public URL,\n * which is then used to populate the image URL field.\n */\n onImageUpload?: (file: File) => Promise<string>;\n /**\n * Controls how users are allowed to provide image sources.\n * See `RichTextEditorProps.imageSourceMode` for semantics.\n */\n imageSourceMode?: ImageSourceMode;\n}\n\nconst RichTextImageControl = ({\n editor,\n simple,\n onImageUpload,\n imageSourceMode,\n}: RichTextImageControlProps) => {\n if (!editor || editor.isDestroyed) return null;\n\n // Popover & field state\n const [isImageOpen, setIsImageOpen] = useState<boolean>(false);\n const [imageSrc, setImageSrc] = useState<string>(\"\");\n const [imageAlt, setImageAlt] = useState<string>(\"\");\n const [isUploading, setIsUploading] = useState<boolean>(false);\n const [error, setError] = useState<string | null>(null);\n\n const containerRef = useRef<HTMLDivElement | null>(null);\n const imageUrlInputRef = useRef<HTMLInputElement | null>(null);\n const imageFileInputRef = useRef<HTMLInputElement | null>(null);\n\n const resolvedMode: ImageSourceMode =\n !onImageUpload && imageSourceMode === \"upload-only\"\n ? \"url-only\"\n : imageSourceMode ?? \"both\";\n const canUpload = Boolean(onImageUpload) && resolvedMode !== \"url-only\";\n const canEditUrl = resolvedMode !== \"upload-only\";\n\n // Close image dropdown when clicking outside\n useEffect(() => {\n if (!isImageOpen) return;\n\n const handleClickOutside = (event: MouseEvent) => {\n if (\n containerRef.current &&\n !containerRef.current.contains(event.target as Node)\n ) {\n setIsImageOpen(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [isImageOpen]);\n\n // Focus image URL input when dropdown opens\n useEffect(() => {\n if (isImageOpen && imageUrlInputRef.current) {\n imageUrlInputRef.current.focus();\n imageUrlInputRef.current.select();\n }\n }, [isImageOpen]);\n\n const openImageMenu = () => {\n const attrs = editor.getAttributes(\"image\") ?? {};\n setImageSrc((attrs.src as string | undefined) ?? \"\");\n setImageAlt((attrs.alt as string | undefined) ?? \"\");\n setError(null);\n setIsImageOpen(true);\n };\n\n const handleImageFileChange = async (\n event: React.ChangeEvent<HTMLInputElement>\n ) => {\n const file = event.target.files?.[0];\n if (!file || !onImageUpload) return;\n\n setIsUploading(true);\n setError(null);\n try {\n const maybeUrl = await onImageUpload(file);\n if (typeof maybeUrl === \"string\" && maybeUrl.trim()) {\n setImageSrc(maybeUrl.trim());\n if (!imageAlt) {\n setImageAlt(file.name.replace(/\\.[^/.]+$/, \"\"));\n }\n }\n } catch {\n // Surface a friendly inline error without spamming the console.\n // Hosts can still handle/log the rejection via their own `onImageUpload`\n // implementation or surrounding error boundaries.\n setError(\"Failed to upload image. Please try again.\");\n } finally {\n setIsUploading(false);\n if (imageFileInputRef.current) {\n imageFileInputRef.current.value = \"\";\n }\n }\n };\n\n const applyImage = () => {\n if (!imageSrc.trim()) return;\n\n editor\n .chain()\n .focus()\n .setImage({ src: imageSrc.trim(), alt: imageAlt.trim() || undefined })\n .run();\n setIsImageOpen(false);\n };\n\n if (simple) return null;\n\n return (\n <div className=\"sui-relative\" ref={containerRef}>\n <ToolbarButton\n editor={editor}\n ariaLabel=\"Insert image\"\n isActive={editor.isActive(\"image\") || isImageOpen}\n onClick={() => {\n if (isImageOpen) {\n setIsImageOpen(false);\n editor.chain().focus().run();\n } else {\n openImageMenu();\n }\n }}\n >\n <InsertImageIcon />\n </ToolbarButton>\n\n {isImageOpen && (\n <div className=\"sui-absolute sui-right-0 sui-top-full sui-mt-2 sui-z-50 sui-flex sui-w-80 sui-flex-col sui-gap-3 sui-rounded-md sui-border sui-border-secondary-300 sui-bg-white sui-p-3 sui-shadow-strong\">\n {/* URL input with optional upload helper */}\n <div className=\"sui-space-y-1\">\n <div className=\"sui-flex sui-items-baseline sui-justify-between\">\n <span className=\"sui-text-16 sui-font-medium sui-text-text-default\">\n Source URL\n </span>\n\n {canUpload && (\n <Button\n type=\"button\"\n variant=\"text\"\n size=\"md\"\n className={cn(\n \"sui-h-auto sui-px-0 sui-py-0 sui-text-12\",\n isUploading && \"sui-cursor-wait sui-opacity-50\"\n )}\n onClick={() => {\n if (isUploading || !imageFileInputRef.current) return;\n imageFileInputRef.current.click();\n }}\n disabled={isUploading}\n leftIcon={<ImageUploadIcon className=\"sui-h-3 sui-w-3\" />}\n >\n {isUploading ? \"Uploading...\" : \"Upload file\"}\n </Button>\n )}\n </div>\n <input\n ref={imageFileInputRef}\n type=\"file\"\n accept=\"image/*\"\n className=\"sui-hidden\"\n onChange={handleImageFileChange}\n disabled={isUploading}\n />\n\n {error && (\n <p className=\"sui-text-12 sui-text-error sui-mt-1\">{error}</p>\n )}\n\n <Input\n ref={imageUrlInputRef}\n type=\"url\"\n placeholder=\"https://example.com/image.png\"\n value={imageSrc}\n readOnly={!canEditUrl}\n onChange={(event) => setImageSrc(event.target.value)}\n onKeyDown={(event) => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n applyImage();\n }\n }}\n disabled={isUploading}\n error={error ?? undefined}\n containerClassName=\"sui-mt-1\"\n />\n </div>\n\n {/* Alt text */}\n <div className=\"sui-space-y-1\">\n <Input\n type=\"text\"\n label=\"Alt text\"\n placeholder=\"Describe the image for accessibility\"\n value={imageAlt}\n onChange={(event) => setImageAlt(event.target.value)}\n onKeyDown={(event) => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n applyImage();\n }\n }}\n containerClassName=\"sui-mt-1\"\n />\n </div>\n\n {/* Actions */}\n <div className=\"sui-flex sui-justify-end sui-gap-2 sui-border-t sui-border-secondary-100 sui-pt-2\">\n <Button\n type=\"button\"\n variant=\"text\"\n size=\"md\"\n onClick={() => {\n setIsImageOpen(false);\n editor.chain().focus().run();\n }}\n >\n Cancel\n </Button>\n <Button\n type=\"button\"\n variant=\"default\"\n size=\"md\"\n onClick={applyImage}\n disabled={!imageSrc.trim() || isUploading}\n >\n Save\n </Button>\n </div>\n </div>\n )}\n </div>\n );\n};\n\nRichTextImageControl.displayName = \"RichTextImageControl\";\n\nexport { RichTextImageControl, type RichTextImageControlProps };\n","import { InsertVideoIcon } from \"@/icons/editor\";\nimport { type Editor } from \"@tiptap/react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { Button } from \"../Button/Button\";\nimport { Input } from \"../Input/Input\";\nimport { ToolbarButton } from \"./RichTextToolbarButton\";\n\ninterface RichTextVideoControlProps {\n editor: Editor | null;\n simple?: boolean;\n}\n\nconst RichTextVideoControl = ({\n editor,\n simple,\n}: RichTextVideoControlProps) => {\n if (!editor || editor.isDestroyed) return null;\n if (simple) return null;\n\n const [isOpen, setIsOpen] = useState<boolean>(false);\n const [videoUrl, setVideoUrl] = useState<string>(\"\");\n const [width, setWidth] = useState<string>(\"640\");\n const [height, setHeight] = useState<string>(\"480\");\n const [error, setError] = useState<string | null>(null);\n\n const containerRef = useRef<HTMLDivElement | null>(null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n // Close dropdown when clicking outside\n useEffect(() => {\n if (!isOpen) return;\n\n const handleClickOutside = (event: MouseEvent) => {\n if (\n containerRef.current &&\n !containerRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [isOpen]);\n\n // Focus input when dropdown opens\n useEffect(() => {\n if (isOpen && inputRef.current) {\n inputRef.current.focus();\n inputRef.current.select();\n }\n }, [isOpen]);\n\n const openVideoMenu = () => {\n setError(null);\n setIsOpen(true);\n };\n\n const isYoutubeUrl = (raw: string): boolean => {\n if (!raw.trim()) return false;\n try {\n const url = new URL(raw.trim());\n const host = url.hostname.toLowerCase();\n return host.includes(\"youtube.com\") || host === \"youtu.be\";\n } catch {\n return false;\n }\n };\n\n const applyVideo = () => {\n if (!isYoutubeUrl(videoUrl)) {\n setError(\"Please enter a valid YouTube URL.\");\n return;\n }\n\n const widthValue = parseInt(width, 10);\n const heightValue = parseInt(height, 10);\n\n editor\n .chain()\n .focus()\n .setYoutubeVideo({\n src: videoUrl.trim(),\n ...(Number.isFinite(widthValue) && widthValue > 0\n ? { width: widthValue }\n : {}),\n ...(Number.isFinite(heightValue) && heightValue > 0\n ? { height: heightValue }\n : {}),\n })\n .run();\n\n setIsOpen(false);\n setError(null);\n };\n\n const disabled = !editor || editor.isDestroyed || !editor.isEditable;\n\n return (\n <div className=\"sui-relative\" ref={containerRef}>\n <ToolbarButton\n editor={editor}\n ariaLabel=\"Insert video\"\n isActive={editor.isActive(\"youtubeVideo\") || isOpen}\n onClick={() => {\n if (isOpen) {\n setIsOpen(false);\n editor.chain().focus().run();\n } else {\n openVideoMenu();\n }\n }}\n >\n <InsertVideoIcon />\n </ToolbarButton>\n\n {isOpen && (\n <div className=\"sui-absolute sui-right-0 sui-top-full sui-mt-2 sui-z-50 sui-flex sui-w-80 sui-flex-col sui-gap-3 sui-rounded-md sui-border sui-border-secondary-300 sui-bg-white sui-p-3 sui-shadow-strong\">\n <div className=\"sui-space-y-2\">\n <div className=\"sui-flex sui-items-baseline sui-justify-between\">\n <span className=\"sui-text-16 sui-font-medium sui-text-text-default\">\n YouTube URL\n </span>\n </div>\n\n <Input\n ref={inputRef}\n type=\"url\"\n placeholder=\"https://www.youtube.com/watch?v=...\"\n value={videoUrl}\n onChange={(event) => {\n setVideoUrl(event.target.value);\n if (error) setError(null);\n }}\n onKeyDown={(event) => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n applyVideo();\n }\n if (event.key === \"Escape\") {\n event.preventDefault();\n setIsOpen(false);\n editor.chain().focus().run();\n }\n }}\n disabled={disabled}\n error={error ?? undefined}\n />\n\n <div className=\"sui-flex sui-gap-2\">\n <Input\n type=\"number\"\n label=\"Width\"\n placeholder=\"560\"\n value={width}\n onChange={(event) => setWidth(event.target.value)}\n disabled={disabled}\n containerClassName=\"sui-flex-1\"\n />\n <Input\n type=\"number\"\n label=\"Height\"\n placeholder=\"315\"\n value={height}\n onChange={(event) => setHeight(event.target.value)}\n disabled={disabled}\n containerClassName=\"sui-flex-1\"\n />\n </div>\n </div>\n\n <div className=\"sui-flex sui-justify-end sui-gap-2 sui-border-t sui-border-secondary-100 sui-pt-2\">\n <Button\n type=\"button\"\n variant=\"text\"\n size=\"md\"\n onClick={() => {\n setIsOpen(false);\n editor.chain().focus().run();\n }}\n >\n Cancel\n </Button>\n <Button\n type=\"button\"\n variant=\"default\"\n size=\"md\"\n onClick={applyVideo}\n disabled={!videoUrl.trim() || Boolean(error) || disabled}\n >\n Insert\n </Button>\n </div>\n </div>\n )}\n </div>\n );\n};\n\nRichTextVideoControl.displayName = \"RichTextVideoControl\";\n\nexport { RichTextVideoControl, type RichTextVideoControlProps };\n","import {\n AlignCenterIcon,\n AlignLeftIcon,\n AlignRightIcon,\n BoldIcon,\n ItalicIcon,\n LinkIcon,\n ListBulletIcon,\n ListNumberIcon,\n UnderlineIcon,\n} from \"@/icons/editor\";\nimport { cn } from \"@/lib/utils\";\nimport { type Editor } from \"@tiptap/react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { RichTextImageControl } from \"./RichTextImageControl\";\nimport { ToolbarButton } from \"./RichTextToolbarButton\";\nimport { RichTextVideoControl } from \"./RichTextVideoControl\";\n\ninterface RichTextToolbarProps {\n editor: Editor | null;\n simple?: boolean;\n /**\n * Optional handler for image uploads.\n *\n * When provided, the toolbar shows an \"Upload file\" helper inside\n * the image popover. The library passes the selected File to this\n * callback and expects a Promise that resolves to a public URL,\n * which is then used to populate the image URL field.\n */\n onImageUpload?: (file: File) => Promise<string>;\n /**\n * Controls how users are allowed to provide image sources.\n * See `RichTextEditorProps.imageSourceMode` for semantics.\n */\n imageSourceMode?: \"both\" | \"url-only\" | \"upload-only\";\n}\n\nconst RichTextToolbar = ({\n editor,\n simple,\n onImageUpload,\n imageSourceMode,\n}: RichTextToolbarProps) => {\n if (!editor) return null;\n\n // Force re-render when editor selection/transaction changes\n const [, setToolbarStateVersion] = useState<number>(0);\n const [isLinkOpen, setIsLinkOpen] = useState<boolean>(false);\n const [linkUrl, setLinkUrl] = useState<string>(\"\");\n const linkContainerRef = useRef<HTMLDivElement | null>(null);\n const linkInputRef = useRef<HTMLInputElement | null>(null);\n\n useEffect(() => {\n if (!editor) return;\n\n const handleUpdate = () => {\n setToolbarStateVersion((prev) => prev + 1);\n };\n\n editor.on(\"selectionUpdate\", handleUpdate);\n editor.on(\"transaction\", handleUpdate);\n\n return () => {\n editor.off(\"selectionUpdate\", handleUpdate);\n editor.off(\"transaction\", handleUpdate);\n };\n }, [editor]);\n\n // Close link dropdown when clicking outside\n useEffect(() => {\n if (!isLinkOpen) return;\n\n const handleClickOutside = (event: MouseEvent) => {\n if (\n linkContainerRef.current &&\n !linkContainerRef.current.contains(event.target as Node)\n ) {\n setIsLinkOpen(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [isLinkOpen]);\n\n // Focus link input when dropdown opens\n useEffect(() => {\n if (isLinkOpen && linkInputRef.current) {\n linkInputRef.current.focus();\n linkInputRef.current.select();\n }\n }, [isLinkOpen]);\n\n const openLinkMenu = () => {\n if (!editor) return;\n const currentHref =\n (editor.getAttributes(\"link\")?.href as string | undefined) ?? \"\";\n setLinkUrl(currentHref);\n setIsLinkOpen(true);\n };\n\n const applyLink = () => {\n if (!editor) return;\n\n if (linkUrl) {\n editor\n .chain()\n .focus()\n .extendMarkRange(\"link\")\n .setLink({ href: linkUrl })\n .run();\n } else {\n editor.chain().focus().unsetLink().run();\n }\n\n setIsLinkOpen(false);\n editor.chain().focus().run();\n };\n\n const getHeadingValue = () => {\n if (editor.isActive(\"heading\", { level: 1 })) return \"h1\";\n if (editor.isActive(\"heading\", { level: 2 })) return \"h2\";\n if (editor.isActive(\"heading\", { level: 3 })) return \"h3\";\n return \"paragraph\";\n };\n\n const handleHeadingChange = (value: string) => {\n if (value === \"paragraph\") {\n editor.chain().focus().setParagraph().run();\n return;\n }\n\n const level = parseInt(value.slice(1), 10) as 1 | 2 | 3;\n\n editor.chain().focus().setHeading({ level }).run();\n };\n\n const disabled = !editor || editor.isDestroyed || !editor.isEditable;\n\n return (\n <div className=\"sui-relative sui-flex sui-flex-wrap sui-gap-1 sui-border-b sui-border-secondary-100 sui-bg-secondary-25 sui-p-1\">\n {/* Heading select */}\n <select\n value={getHeadingValue()}\n onChange={(e) => handleHeadingChange(e.target.value)}\n disabled={disabled}\n aria-label=\"Text style\"\n className={cn(\n \"sui-h-7 sui-rounded-md sui-border sui-border-transparent sui-bg-transparent sui-px-2 sui-py-1 sui-text-12 sui-text-secondary-600 focus-visible:sui-outline-none focus-visible:sui-ring-2 focus-visible:sui-ring-primary/60\",\n disabled && \"sui-cursor-not-allowed sui-opacity-40\",\n \"hover:sui-bg-secondary-50\"\n )}\n >\n <option value=\"paragraph\">Paragraph</option>\n <option value=\"h1\">Heading 1</option>\n <option value=\"h2\">Heading 2</option>\n <option value=\"h3\">Heading 3</option>\n </select>\n\n {/* Basic formatting */}\n <ToolbarButton\n editor={editor}\n ariaLabel=\"Bold\"\n isActive={editor.isActive(\"bold\")}\n onClick={() => editor.chain().focus().toggleBold().run()}\n >\n <BoldIcon />\n </ToolbarButton>\n\n <ToolbarButton\n editor={editor}\n ariaLabel=\"Italic\"\n isActive={editor.isActive(\"italic\")}\n onClick={() => editor.chain().focus().toggleItalic().run()}\n >\n <ItalicIcon />\n </ToolbarButton>\n\n <ToolbarButton\n editor={editor}\n ariaLabel=\"Underline\"\n isActive={editor.isActive(\"underline\")}\n onClick={() =>\n editor.chain().focus().toggleUnderline?.().run?.() ?? undefined\n }\n >\n <UnderlineIcon />\n </ToolbarButton>\n\n {/* Alignment & lists (advanced) */}\n {!simple && (\n <>\n <ToolbarButton\n editor={editor}\n ariaLabel=\"Align left\"\n isActive={editor.isActive({ textAlign: \"left\" })}\n onClick={() => editor.chain().focus().setTextAlign(\"left\").run()}\n >\n <AlignLeftIcon />\n </ToolbarButton>\n\n <ToolbarButton\n editor={editor}\n ariaLabel=\"Align center\"\n isActive={editor.isActive({ textAlign: \"center\" })}\n onClick={() => editor.chain().focus().setTextAlign(\"center\").run()}\n >\n <AlignCenterIcon />\n </ToolbarButton>\n\n <ToolbarButton\n editor={editor}\n ariaLabel=\"Align right\"\n isActive={editor.isActive({ textAlign: \"right\" })}\n onClick={() => editor.chain().focus().setTextAlign(\"right\").run()}\n >\n <AlignRightIcon />\n </ToolbarButton>\n </>\n )}\n\n {!simple && (\n <>\n <ToolbarButton\n editor={editor}\n ariaLabel=\"Bullet list\"\n isActive={editor.isActive(\"bulletList\")}\n onClick={() => editor.chain().focus().toggleBulletList().run()}\n >\n <ListBulletIcon />\n </ToolbarButton>\n\n <ToolbarButton\n editor={editor}\n ariaLabel=\"Numbered list\"\n isActive={editor.isActive(\"orderedList\")}\n onClick={() => editor.chain().focus().toggleOrderedList().run()}\n >\n <ListNumberIcon />\n </ToolbarButton>\n </>\n )}\n\n {/* Link button with dropdown */}\n <div className=\"sui-relative\" ref={linkContainerRef}>\n <ToolbarButton\n editor={editor}\n ariaLabel=\"Link\"\n isActive={editor.isActive(\"link\") || isLinkOpen}\n onClick={() => {\n if (isLinkOpen) {\n setIsLinkOpen(false);\n editor.chain().focus().run();\n } else {\n openLinkMenu();\n }\n }}\n >\n <LinkIcon />\n </ToolbarButton>\n\n {isLinkOpen && (\n <div className=\"sui-absolute sui-right-0 sui-top-full sui-mt-2 sui-z-50 sui-flex sui-w-64 sui-flex-col sui-gap-2 sui-rounded-md sui-border sui-border-secondary-300 sui-bg-white sui-p-3 sui-shadow-strong\">\n <div className=\"sui-flex sui-items-center sui-gap-2\">\n <input\n ref={linkInputRef}\n type=\"url\"\n className=\"sui-flex-1 sui-h-8 sui-rounded sui-border sui-border-secondary-300 sui-bg-transparent sui-px-2 sui-text-12 sui-text-primary focus:sui-border-primary focus:sui-outline-none\"\n placeholder=\"https://example.com\"\n value={linkUrl}\n onChange={(e) => setLinkUrl(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n applyLink();\n }\n if (e.key === \"Escape\") {\n e.preventDefault();\n setIsLinkOpen(false);\n editor.chain().focus().run();\n }\n }}\n />\n </div>\n\n <div className=\"sui-flex sui-justify-end sui-gap-2\">\n {editor.isActive(\"link\") && (\n <button\n type=\"button\"\n onClick={() => {\n editor.chain().focus().unsetLink().run();\n setIsLinkOpen(false);\n editor.chain().focus().run();\n }}\n className=\"sui-text-12 sui-text-error hover:sui-text-error/80 sui-px-2\"\n >\n Unlink\n </button>\n )}\n\n <button\n type=\"button\"\n onClick={() => {\n setIsLinkOpen(false);\n editor.chain().focus().run();\n }}\n className=\"sui-rounded sui-px-2 sui-py-1 sui-text-12 sui-text-secondary-600 hover:sui-bg-secondary-100\"\n >\n Cancel\n </button>\n\n <button\n type=\"button\"\n onClick={applyLink}\n className=\"sui-rounded sui-bg-primary sui-px-3 sui-py-1 sui-text-12 sui-font-medium sui-text-white hover:sui-bg-primary/90\"\n >\n Save\n </button>\n </div>\n </div>\n )}\n </div>\n\n {/* Image button with URL + optional upload helper */}\n <RichTextImageControl\n editor={editor}\n simple={simple}\n onImageUpload={onImageUpload}\n imageSourceMode={imageSourceMode}\n />\n\n {/* YouTube video button (URL only) */}\n <RichTextVideoControl editor={editor} simple={simple} />\n </div>\n );\n};\n\nRichTextToolbar.displayName = \"RichTextToolbar\";\n\nexport { RichTextToolbar, type RichTextToolbarProps };\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Shared styling classes for RichTextEditor and RichTextViewer.\n *\n * This ensures that content rendered in \"view\" mode matches \"edit\" mode exactly.\n * All typography, spacing, and element styling is centralized here.\n */\nexport const RICH_TEXT_STYLES = cn(\n \"sui-prose sui-prose-sm sui-max-w-none\",\n \"sui-text-14 sui-text-text-default\",\n // Paragraphs\n \"[&_p]:sui-body-16\",\n // Headings: size + weight + tight margins\n \"[&_h1]:sui-heading-24-medium\",\n \"[&_h2]:sui-heading-20-medium\",\n \"[&_h3]:sui-heading-16-medium\",\n // Lists: bullets/numbers and indent\n \"[&_ul]:sui-list-disc [&_ul]:sui-pl-5\",\n \"[&_ol]:sui-list-decimal [&_ol]:sui-pl-5\",\n // Text alignment from TextAlign extension\n \"[&[style*='text-align:left']]:sui-text-left\",\n \"[&[style*='text-align:center']]:sui-text-center\",\n \"[&[style*='text-align:right']]:sui-text-right\",\n // Links\n \"[&_a]:sui-text-link\",\n // Images\n \"[&_img]:sui-rounded-md [&_img]:sui-max-w-full [&_img]:sui-h-auto [&_img]:sui-border [&_img]:sui-border-secondary-200\",\n // YouTube videos (iframes)\n \"[&_iframe]:sui-rounded-md [&_iframe]:sui-w-full [&_iframe]:sui-aspect-video [&_iframe]:sui-border [&_iframe]:sui-border-secondary-200\"\n);\n","import { cn } from \"@/lib/utils\";\nimport CharacterCount from \"@tiptap/extension-character-count\";\nimport Image from \"@tiptap/extension-image\";\nimport Placeholder from \"@tiptap/extension-placeholder\";\nimport TextAlign from \"@tiptap/extension-text-align\";\nimport Youtube from \"@tiptap/extension-youtube\";\nimport { EditorContent, useEditor } from \"@tiptap/react\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport { useEffect, useId, useRef } from \"react\";\nimport { RichTextCharacterCounter } from \"./RichTextCharacterCounter\";\nimport { RichTextToolbar } from \"./RichtextToolBar\";\nimport { RICH_TEXT_STYLES } from \"./styles\";\n\ntype ImageSourceMode = \"both\" | \"url-only\" | \"upload-only\";\n\ninterface RichTextEditorProps {\n /** Controlled HTML value of the editor */\n value: string;\n /** Called whenever the content changes (HTML string) */\n onChange: (html: string) => void;\n /** Optional label rendered above the editor */\n label?: string;\n /** Error message shown below the editor and applied to border */\n error?: string;\n /** Helper text shown when there is no error */\n helperText?: string;\n /** Placeholder text rendered when editor is empty */\n placeholder?: string;\n /** Minimum height of the content area (e.g. \"160px\") */\n minHeight?: string;\n /** When true, renders a reduced toolbar (basic formatting only) */\n simple?: boolean;\n /** Disables editing and toolbar interaction */\n disabled?: boolean;\n /** Optional test id for querying in tests */\n \"data-testid\"?: string;\n /** Additional className for the outer container */\n containerClassName?: string;\n /**\n * Optional handler for image uploads.\n *\n * The editor **always** inserts images by URL. This callback is an\n * optional helper that lets you plug in your own upload flow:\n *\n * - When **not provided**:\n * - The image popover only shows a \"Source URL\" field and \"Alt text\".\n * - Users can paste any public image URL and click \"Save\" to insert it.\n *\n * - When **provided**:\n * - The image popover also shows an \"Upload file\" button.\n * - After the user selects a file, this function is called with that File.\n * - You upload the file (e.g. S3, Firebase, your API) and return a\n * Promise that resolves to the public image URL.\n * - The returned URL is written into the \"Source URL\" field, and the\n * user can then confirm insertion with \"Save\".\n */\n onImageUpload?: (file: File) => Promise<string>;\n /**\n * Controls how users are allowed to provide image sources.\n *\n * The editor always stores images as URLs; this setting only affects the UI:\n *\n * - \"both\" (default):\n * - Users can type or paste into the Source URL field.\n * - If `onImageUpload` is provided, they can also use the Upload file helper.\n *\n * - \"url-only\":\n * - Users can only type/paste a URL.\n * - The Upload file helper is hidden even if `onImageUpload` is provided.\n *\n * - \"upload-only\":\n * - Users can only upload via `onImageUpload`; the Source URL field is\n * rendered read-only to display the resolved URL.\n * - If `onImageUpload` is not provided, this mode gracefully behaves like\n * \"url-only\" so the image feature is still usable.\n */\n imageSourceMode?: ImageSourceMode;\n /**\n * Maximum number of plain-text characters allowed.\n * If the limit is reached, further typing is prevented by the\n * `CharacterCount` extension.\n *\n * Non-positive or non-finite values (e.g. 0, NaN, Infinity) are treated\n * as \"no limit\".\n */\n maxCharacters?: number;\n /**\n * Callback fired when the max character limit is reached.\n * Fired only once per breach (debounced until length drops below limit).\n */\n onMaxLengthExceed?: (info: { max: number; current: number }) => void;\n}\n\n/**\n * RichTextEditor - Controlled rich text editor built on top of Tiptap.\n *\n * - Exposes a simple HTML-based value/onChange API.\n * - Renders a toolbar with common formatting controls.\n * - Mimics the design system's input styling (label, error, helper text).\n *\n * **Viewing Content:**\n * To display the HTML content created with this editor in read-only mode,\n * use the `RichTextViewer` component. It ensures content rendered in \"view\"\n * mode matches \"edit\" mode styling exactly.\n *\n * @example\n * ```tsx\n * import { RichTextEditor, RichTextViewer } from '@scalably/ui';\n *\n * function BlogPost({ post }) {\n * const [content, setContent] = useState<string>(post.content);\n *\n * return (\n * <div>\n * <RichTextEditor value={content} onChange={setContent} />\n * <RichTextViewer content={content} />\n * </div>\n * );\n * }\n * ```\n *\n * @see RichTextViewer - Read-only viewer component for displaying rich text content\n */\nconst RichTextEditor = ({\n value,\n onChange,\n label,\n error,\n helperText,\n placeholder,\n minHeight = \"160px\",\n simple,\n disabled,\n \"data-testid\": dataTestId,\n containerClassName,\n onImageUpload,\n imageSourceMode = \"both\",\n maxCharacters,\n onMaxLengthExceed,\n}: RichTextEditorProps) => {\n const autoId = useId();\n const editorId = autoId;\n const labelId = `${editorId}-label`;\n const hasError = Boolean(error);\n const errorId = `${editorId}-error`;\n const helpId = `${editorId}-help`;\n const describedById =\n [hasError && errorId, !hasError && helperText && helpId]\n .filter(Boolean)\n .join(\" \") || undefined;\n\n // Ref to track if we have already warned about the limit to prevent spamming\n const limitWarningFiredRef = useRef<boolean>(false);\n\n const validMaxCharacters =\n typeof maxCharacters === \"number\" &&\n Number.isFinite(maxCharacters) &&\n maxCharacters > 0\n ? maxCharacters\n : undefined;\n\n const editor = useEditor({\n extensions: [\n StarterKit.configure({\n heading: { levels: [1, 2, 3] },\n link: {\n openOnClick: false,\n },\n underline: {},\n }),\n Placeholder.configure({\n placeholder: placeholder ?? \"Start typing...\",\n showOnlyWhenEditable: true,\n showOnlyCurrent: false,\n }),\n TextAlign.configure({\n types: [\"heading\", \"paragraph\"],\n }),\n Image,\n Youtube.configure({\n HTMLAttributes: {\n class:\n \"sui-rounded-md sui-w-full sui-aspect-video sui-border sui-border-secondary-200\",\n },\n }),\n CharacterCount.configure({\n // If no valid limit is provided, CharacterCount still tracks the\n // character count but does not enforce a hard cap.\n limit: validMaxCharacters,\n }),\n ],\n editorProps: {\n attributes: {\n class: cn(\n \"focus:sui-outline-none\",\n \"placeholder:sui-text-disabled\",\n RICH_TEXT_STYLES\n ),\n },\n },\n content: value,\n editable: !disabled,\n onUpdate: ({ editor: instance }) => {\n const html = instance.getHTML();\n if (html !== value) {\n onChange(html);\n }\n\n // Handle limit exceed callback (one-shot guard)\n if (validMaxCharacters) {\n const characters = instance.storage.characterCount?.characters?.();\n if (typeof characters === \"number\") {\n if (characters >= validMaxCharacters) {\n if (!limitWarningFiredRef.current) {\n onMaxLengthExceed?.({\n max: validMaxCharacters,\n current: characters,\n });\n limitWarningFiredRef.current = true;\n }\n } else {\n // Reset warning flag if user deletes text below limit\n limitWarningFiredRef.current = false;\n }\n }\n }\n },\n });\n\n // Keep internal editor content in sync when the controlled value changes externally\n useEffect(() => {\n if (!editor || editor.isDestroyed) return;\n\n const current = editor.getHTML();\n if (value !== current) {\n editor.commands.setContent(value, { emitUpdate: false });\n }\n }, [editor, value]);\n\n // Update editable state if disabled changes\n useEffect(() => {\n if (!editor) return;\n editor.setEditable(!disabled);\n }, [editor, disabled]);\n\n return (\n <div\n className={cn(\"sui-w-full sui-isolate\", containerClassName)}\n data-testid={dataTestId}\n >\n {label && (\n <label\n id={labelId}\n htmlFor={editorId}\n className=\"sui-mb-2 sui-block sui-text-14 sui-font-normal sui-text-inactive\"\n >\n {label}\n </label>\n )}\n\n <div\n className={cn(\n \"sui-group sui-flex sui-flex-col sui-rounded-md sui-border sui-bg-background focus-within:sui-border-primary\",\n hasError\n ? \"sui-border-error focus-within:sui-border-error\"\n : \"sui-border-stroke-level3 focus-within:sui-border-primary\",\n disabled && \"sui-opacity-60 sui-cursor-not-allowed\"\n )}\n aria-invalid={hasError}\n aria-describedby={describedById}\n >\n <RichTextToolbar\n editor={editor}\n simple={simple}\n onImageUpload={onImageUpload}\n imageSourceMode={imageSourceMode}\n />\n\n <div\n className=\"sui-relative sui-w-full sui-overflow-y-auto sui-cursor-text sui-p-3 sui-sm:p-4\"\n style={{ minHeight }}\n role=\"textbox\"\n tabIndex={disabled ? -1 : 0}\n aria-labelledby={label ? labelId : undefined}\n onClick={(event) => {\n if (!editor || disabled) return;\n // Only treat clicks on the wrapper itself as a request to focus\n // the editor. Clicks inside the ProseMirror content should be\n // handled by Tiptap's own selection logic.\n if (event.target !== event.currentTarget) return;\n if (!editor.isFocused) {\n editor.chain().focus(\"end\").run();\n }\n }}\n onKeyDown={(event) => {\n if (!editor || disabled) return;\n // Only handle keyboard activation on the wrapper itself to avoid\n // interfering with typing inside the editor content.\n if (event.target !== event.currentTarget) return;\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n editor.chain().focus(\"end\").run();\n }\n }}\n >\n <EditorContent\n id={editorId}\n editor={editor}\n aria-label={label}\n className={cn(\n \"sui-h-full\",\n \"[&_.ProseMirror]:sui-min-h-full\",\n \"[&_.ProseMirror]:focus:sui-outline-none\"\n )}\n />\n {editor && validMaxCharacters && (\n <RichTextCharacterCounter\n editor={editor}\n max={validMaxCharacters}\n />\n )}\n </div>\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};\nRichTextEditor.displayName = \"RichTextEditor\";\n\nexport { RichTextEditor, type ImageSourceMode, type RichTextEditorProps };\n","import { cn } from \"@/lib/utils\";\nimport { RICH_TEXT_STYLES } from \"./styles\";\n\ninterface RichTextViewerProps {\n /**\n * HTML content string to render (typically from RichTextEditor's value prop).\n * This content will be rendered as-is, so ensure it's sanitized if it comes\n * from untrusted sources.\n */\n content: string;\n /**\n * Additional CSS classes to apply to the container.\n */\n className?: string;\n /**\n * Optional test id for querying in tests.\n */\n \"data-testid\"?: string;\n}\n\n/**\n * RichTextViewer - Read-only component for displaying rich text content.\n *\n * This component renders HTML content with the same styling as RichTextEditor,\n * ensuring a consistent appearance between \"edit\" and \"view\" modes.\n *\n * **Security Note:** This component uses `dangerouslySetInnerHTML` to render\n * the provided HTML. If the content comes from untrusted sources (e.g., user\n * input, external APIs), you should sanitize it first using a library like\n * DOMPurify:\n *\n * ```tsx\n * import DOMPurify from 'isomorphic-dompurify';\n *\n * <RichTextViewer content={DOMPurify.sanitize(userContent)} />\n * ```\n *\n * @example\n * ```tsx\n * import { RichTextEditor, RichTextViewer } from '@scalably/ui';\n *\n * function BlogPost({ post }) {\n * return (\n * <div>\n * <RichTextEditor value={post.content} onChange={setContent} />\n * <RichTextViewer content={post.content} />\n * </div>\n * );\n * }\n * ```\n */\nconst RichTextViewer = ({\n content,\n className,\n \"data-testid\": dataTestId,\n}: RichTextViewerProps) => {\n return (\n <div\n className={cn(RICH_TEXT_STYLES, className)}\n dangerouslySetInnerHTML={{ __html: content }}\n data-testid={dataTestId}\n />\n );\n};\n\nRichTextViewer.displayName = \"RichTextViewer\";\n\nexport { RichTextViewer, type RichTextViewerProps };\n","/**\n * Auto-generated file - DO NOT EDIT MANUALLY\n * This file is generated by scripts/generate-styles-inline.js during build.\n * It contains the compiled CSS as a string for automatic injection in ScalablyUIProvider.\n */\n\nexport const SCALABLY_UI_STYLES = \"@import url(\\\"https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap\\\");*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }\\n/*! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:\\\"\\\"}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Poppins,Inter,system-ui,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:JetBrains Mono,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.sui-animate-spin{animation:sui-spin 1s linear infinite}.sui-ring-offset-background{--tw-ring-offset-color:#fff}.sui-shadow-soft{box-shadow:0 2px 15px -3px rgba(0,0,0,.07),0 10px 20px -2px rgba(0,0,0,.04)}.sui-shadow-strong{box-shadow:0 10px 40px -10px rgba(0,0,0,.15),0 2px 10px -2px rgba(0,0,0,.1)}.sui-animate-shimmer{background:linear-gradient(90deg,var(--sui-stroke-level3) 0,hsla(0,0%,100%,.4) 50%,var(--sui-stroke-level3) 100%);background-size:200% 100%;animation:sui-shimmer 1.5s infinite}@media (prefers-reduced-motion:reduce){.sui-animate-shimmer{animation:none;background:var(--sui-stroke-level3)}}.sui-animate-pulse-scale{animation:sui-pulse-scale 2s ease-in-out infinite}@keyframes sui-pulse-scale{0%,to{transform:scale(.9)}50%{transform:scale(1.1)}}.sui-animate-rotate-smooth{animation:sui-rotate-smooth 1.2s linear infinite}@keyframes sui-rotate-smooth{0%{transform:rotate(0deg)}to{transform:rotate(-1turn)}}.sui-animate-pulse-scale.sui-animate-rotate-smooth{animation:sui-pulse-rotate 6s ease-in-out infinite}@keyframes sui-pulse-rotate{0%{transform:scale(.9) rotate(0deg)}25%{transform:scale(1.1) rotate(-90deg)}50%{transform:scale(.9) rotate(-180deg)}75%{transform:scale(1.1) rotate(-270deg)}to{transform:scale(.9) rotate(-1turn)}}@media (prefers-reduced-motion:reduce){.sui-animate-pulse-scale,.sui-animate-pulse-scale.sui-animate-rotate-smooth,.sui-animate-rotate-smooth{animation:none;transform:none}}[class*=sui-] .ProseMirror h1.is-editor-empty:first-child:before,[class*=sui-] .ProseMirror h2.is-editor-empty:first-child:before,[class*=sui-] .ProseMirror h3.is-editor-empty:first-child:before,[class*=sui-] .ProseMirror p.is-editor-empty:first-child:before{content:attr(data-placeholder);float:left;color:var(--sui-text-disabled);pointer-events:none;height:0}@keyframes sui-ellipse-float{0%,to{transform:translate(var(--tx-0),var(--ty-0)) rotate(0deg)}25%{transform:translate(var(--tx-25),var(--ty-25)) rotate(90deg)}50%{transform:translate(var(--tx-50),var(--ty-50)) rotate(180deg)}75%{transform:translate(var(--tx-75),var(--ty-75)) rotate(270deg)}}@keyframes sui-ocean-wave{0%{transform:translateY(0) translateX(0) scaleY(1)}25%{transform:translateY(-8px) translateX(-4px) scaleY(1.05)}50%{transform:translateY(-15px) translateX(0) scaleY(1.1)}75%{transform:translateY(-8px) translateX(4px) scaleY(1.05)}to{transform:translateY(0) translateX(0) scaleY(1)}}@media (min-width:640px){@keyframes sui-ocean-wave{0%{transform:translateY(0) translateX(0) scaleY(1)}25%{transform:translateY(-15px) translateX(-8px) scaleY(1.1)}50%{transform:translateY(-30px) translateX(0) scaleY(1.2)}75%{transform:translateY(-15px) translateX(8px) scaleY(1.1)}to{transform:translateY(0) translateX(0) scaleY(1)}}}@media (prefers-reduced-motion:reduce){.sui-welcome-bg-animated{animation:none!important}}.sui-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.sui-pointer-events-none{pointer-events:none}.sui-pointer-events-auto{pointer-events:auto}.sui-fixed{position:fixed}.sui-absolute{position:absolute}.sui-relative{position:relative}.-sui-inset-1{inset:-.25rem}.sui-inset-0{inset:0}.sui-inset-y-0{top:0;bottom:0}.sui-bottom-0{bottom:0}.sui-bottom-2{bottom:.5rem}.sui-bottom-4{bottom:1rem}.sui-bottom-6{bottom:1.5rem}.sui-bottom-\\\\[-1px\\\\]{bottom:-1px}.sui-left-0{left:0}.sui-left-1{left:.25rem}.sui-left-1\\\\/2{left:50%}.sui-left-12{left:3rem}.sui-left-3{left:.75rem}.sui-left-4{left:1rem}.sui-left-\\\\[-4px\\\\]{left:-4px}.sui-left-\\\\[38px\\\\]{left:38px}.sui-right-0{right:0}.sui-right-1{right:.25rem}.sui-right-1\\\\/2{right:50%}.sui-right-10{right:2.5rem}.sui-right-2{right:.5rem}.sui-right-3{right:.75rem}.sui-right-4{right:1rem}.sui-right-6{right:1.5rem}.sui-right-9{right:2.25rem}.sui-right-\\\\[-4px\\\\]{right:-4px}.sui-right-\\\\[38px\\\\]{right:38px}.sui-top-0{top:0}.sui-top-1{top:.25rem}.sui-top-1\\\\/2{top:50%}.sui-top-4{top:1rem}.sui-top-5{top:1.25rem}.sui-top-full{top:100%}.sui-isolate{isolation:isolate}.sui-z-10{z-index:10}.sui-z-20{z-index:20}.sui-z-40{z-index:40}.sui-z-50{z-index:50}.sui-z-\\\\[1\\\\]{z-index:1}.sui-z-\\\\[9999\\\\]{z-index:9999}.sui-order-1{order:1}.sui-m-0{margin:0}.sui-mx-2{margin-left:.5rem;margin-right:.5rem}.sui-mx-3{margin-left:.75rem;margin-right:.75rem}.sui-mx-4{margin-left:1rem;margin-right:1rem}.sui-mx-auto{margin-left:auto;margin-right:auto}.sui-my-3{margin-top:.75rem;margin-bottom:.75rem}.sui-my-4{margin-top:1rem;margin-bottom:1rem}.sui-my-6{margin-top:1.5rem;margin-bottom:1.5rem}.sui-mb-1{margin-bottom:.25rem}.sui-mb-2{margin-bottom:.5rem}.sui-mb-3{margin-bottom:.75rem}.sui-mb-4{margin-bottom:1rem}.sui-mb-6{margin-bottom:1.5rem}.sui-ml-0{margin-left:0}.sui-ml-1{margin-left:.25rem}.sui-ml-2{margin-left:.5rem}.sui-ml-3{margin-left:.75rem}.sui-ml-4{margin-left:1rem}.sui-ml-auto{margin-left:auto}.sui-mr-2{margin-right:.5rem}.sui-mr-4{margin-right:1rem}.sui-mt-1{margin-top:.25rem}.sui-mt-2{margin-top:.5rem}.sui-mt-3{margin-top:.75rem}.sui-mt-4{margin-top:1rem}.sui-mt-\\\\[220vh\\\\]{margin-top:220vh}.sui-block{display:block}.sui-inline-block{display:inline-block}.sui-flex{display:flex}.sui-inline-flex{display:inline-flex}.sui-grid{display:grid}.sui-hidden{display:none}.sui-aspect-video{aspect-ratio:16/9}.sui-h-1{height:.25rem}.sui-h-10{height:2.5rem}.sui-h-11{height:2.75rem}.sui-h-12{height:3rem}.sui-h-14{height:3.5rem}.sui-h-16{height:4rem}.sui-h-2{height:.5rem}.sui-h-20{height:5rem}.sui-h-24{height:6rem}.sui-h-3{height:.75rem}.sui-h-4{height:1rem}.sui-h-5{height:1.25rem}.sui-h-6{height:1.5rem}.sui-h-7{height:1.75rem}.sui-h-8{height:2rem}.sui-h-9{height:2.25rem}.sui-h-\\\\[120px\\\\]{height:120px}.sui-h-\\\\[213px\\\\]{height:213px}.sui-h-\\\\[2px\\\\]{height:2px}.sui-h-\\\\[30px\\\\]{height:30px}.sui-h-\\\\[320px\\\\]{height:320px}.sui-h-\\\\[400px\\\\]{height:400px}.sui-h-\\\\[var\\\\(--logo-size-mobile\\\\)\\\\]{height:var(--logo-size-mobile)}.sui-h-auto{height:auto}.sui-h-full{height:100%}.sui-h-px{height:1px}.sui-h-screen{height:100vh}.sui-max-h-32{max-height:8rem}.sui-max-h-48{max-height:12rem}.sui-max-h-56{max-height:14rem}.sui-max-h-60{max-height:15rem}.sui-max-h-\\\\[90vh\\\\]{max-height:90vh}.sui-min-h-\\\\[120px\\\\]{min-height:120px}.sui-min-h-\\\\[160px\\\\]{min-height:160px}.sui-min-h-\\\\[200px\\\\]{min-height:200px}.sui-min-h-\\\\[300vh\\\\]{min-height:300vh}.sui-min-h-\\\\[480px\\\\]{min-height:480px}.sui-min-h-\\\\[520px\\\\]{min-height:520px}.sui-min-h-full{min-height:100%}.sui-min-h-screen{min-height:100vh}.sui-w-1{width:.25rem}.sui-w-10{width:2.5rem}.sui-w-11{width:2.75rem}.sui-w-12{width:3rem}.sui-w-16{width:4rem}.sui-w-2{width:.5rem}.sui-w-20{width:5rem}.sui-w-24{width:6rem}.sui-w-3{width:.75rem}.sui-w-4{width:1rem}.sui-w-48{width:12rem}.sui-w-5{width:1.25rem}.sui-w-6{width:1.5rem}.sui-w-64{width:16rem}.sui-w-72{width:18rem}.sui-w-8{width:2rem}.sui-w-80{width:20rem}.sui-w-9{width:2.25rem}.sui-w-96{width:24rem}.sui-w-\\\\[2px\\\\]{width:2px}.sui-w-\\\\[30px\\\\]{width:30px}.sui-w-\\\\[320px\\\\]{width:320px}.sui-w-\\\\[360px\\\\]{width:360px}.sui-w-\\\\[400px\\\\]{width:400px}.sui-w-\\\\[480px\\\\]{width:480px}.sui-w-\\\\[500px\\\\]{width:500px}.sui-w-\\\\[520px\\\\]{width:520px}.sui-w-\\\\[560px\\\\]{width:560px}.sui-w-\\\\[640px\\\\]{width:640px}.sui-w-\\\\[var\\\\(--logo-size-mobile\\\\)\\\\]{width:var(--logo-size-mobile)}.sui-w-auto{width:auto}.sui-w-fit{width:-moz-fit-content;width:fit-content}.sui-w-full{width:100%}.sui-w-px{width:1px}.sui-w-screen{width:100vw}.sui-min-w-0{min-width:0}.sui-min-w-12{min-width:3rem}.sui-min-w-8{min-width:2rem}.sui-min-w-\\\\[120px\\\\]{min-width:120px}.sui-min-w-\\\\[280px\\\\]{min-width:280px}.sui-min-w-\\\\[300px\\\\]{min-width:300px}.sui-min-w-\\\\[320px\\\\]{min-width:320px}.sui-min-w-\\\\[400px\\\\]{min-width:400px}.sui-max-w-2xl{max-width:42rem}.sui-max-w-3xl{max-width:48rem}.sui-max-w-4xl{max-width:56rem}.sui-max-w-6xl{max-width:72rem}.sui-max-w-\\\\[120px\\\\]{max-width:120px}.sui-max-w-\\\\[220px\\\\]{max-width:220px}.sui-max-w-\\\\[320px\\\\]{max-width:320px}.sui-max-w-\\\\[360px\\\\]{max-width:360px}.sui-max-w-\\\\[366px\\\\]{max-width:366px}.sui-max-w-\\\\[480px\\\\]{max-width:480px}.sui-max-w-\\\\[95vw\\\\]{max-width:95vw}.sui-max-w-full{max-width:100%}.sui-max-w-none{max-width:none}.sui-max-w-xl{max-width:36rem}.sui-max-w-xs{max-width:20rem}.sui-flex-1{flex:1 1 0%}.sui-flex-none{flex:none}.sui-flex-shrink-0{flex-shrink:0}.sui-origin-top-left{transform-origin:top left}.-sui-translate-x-1{--tw-translate-x:-0.25rem}.-sui-translate-x-1,.-sui-translate-x-1\\\\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-sui-translate-x-1\\\\/2{--tw-translate-x:-50%}.sui--translate-y-1{--tw-translate-y:-0.25rem}.sui--translate-y-1,.sui--translate-y-1\\\\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sui--translate-y-1\\\\/2{--tw-translate-y:-50%}.sui-translate-x-1{--tw-translate-x:0.25rem}.sui-translate-x-1,.sui-translate-x-5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sui-translate-x-5{--tw-translate-x:1.25rem}.sui-translate-x-6{--tw-translate-x:1.5rem}.sui-rotate-180,.sui-translate-x-6{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sui-rotate-180{--tw-rotate:180deg}.sui-scale-100{--tw-scale-x:1;--tw-scale-y:1}.sui-scale-100,.sui-scale-110{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sui-scale-110{--tw-scale-x:1.1;--tw-scale-y:1.1}.sui-scale-90{--tw-scale-x:.9;--tw-scale-y:.9}.sui-scale-90,.sui-transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sui-transform-gpu{transform:translate3d(var(--tw-translate-x),var(--tw-translate-y),0) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes sui-fadeIn{0%{opacity:0}to{opacity:1}}.sui-animate-fade-in{animation:sui-fadeIn .2s ease-in-out}@keyframes sui-pulse{50%{opacity:.5}}.sui-animate-pulse{animation:sui-pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes sui-shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.sui-animate-shimmer{animation:sui-shimmer 1.5s infinite}@keyframes sui-slideUp{0%{transform:translateY(10px);opacity:0}to{transform:translateY(0);opacity:1}}.sui-animate-slide-up{animation:sui-slideUp .3s ease-out}@keyframes sui-spin{to{transform:rotate(1turn)}}.sui-animate-spin{animation:sui-spin 1s linear infinite}.sui-cursor-not-allowed{cursor:not-allowed}.sui-cursor-pointer{cursor:pointer}.sui-cursor-text{cursor:text}.sui-cursor-wait{cursor:wait}.sui-list-inside{list-style-position:inside}.sui-list-decimal{list-style-type:decimal}.sui-list-disc{list-style-type:disc}.sui-appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.sui-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.sui-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sui-grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.sui-flex-row{flex-direction:row}.sui-flex-col{flex-direction:column}.sui-flex-wrap{flex-wrap:wrap}.sui-place-items-center{place-items:center}.sui-items-start{align-items:flex-start}.sui-items-end{align-items:flex-end}.sui-items-center{align-items:center}.sui-items-baseline{align-items:baseline}.sui-items-stretch{align-items:stretch}.sui-justify-start{justify-content:flex-start}.sui-justify-end{justify-content:flex-end}.sui-justify-center{justify-content:center}.sui-justify-between{justify-content:space-between}.sui-gap-1{gap:.25rem}.sui-gap-1\\\\.5{gap:.375rem}.sui-gap-10{gap:2.5rem}.sui-gap-2{gap:.5rem}.sui-gap-3{gap:.75rem}.sui-gap-4{gap:1rem}.sui-gap-6{gap:1.5rem}.sui-gap-8{gap:2rem}.sui-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.sui-space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.sui-space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.sui-space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem*var(--tw-space-y-reverse))}.sui-space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.sui-space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem*var(--tw-space-y-reverse))}.sui-space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(2rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem*var(--tw-space-y-reverse))}.sui-divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px*var(--tw-divide-y-reverse))}.sui-divide-stroke-level3>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(222 227 231/var(--tw-divide-opacity,1))}.sui-self-stretch{align-self:stretch}.sui-overflow-hidden{overflow:hidden}.sui-overflow-y-auto{overflow-y:auto}.sui-truncate{overflow:hidden;text-overflow:ellipsis}.sui-truncate,.sui-whitespace-nowrap{white-space:nowrap}.sui-break-words{overflow-wrap:break-word}.sui-rounded{border-radius:.5rem}.sui-rounded-2xl{border-radius:1rem}.sui-rounded-3xl{border-radius:1.5rem}.sui-rounded-\\\\[12px\\\\]{border-radius:12px}.sui-rounded-full{border-radius:9999px}.sui-rounded-lg{border-radius:.5rem}.sui-rounded-md{border-radius:.375rem}.sui-rounded-sm{border-radius:.125rem}.sui-rounded-xl{border-radius:1rem}.sui-rounded-xs{border-radius:.25rem}.sui-rounded-b-\\\\[12px\\\\]{border-bottom-right-radius:12px;border-bottom-left-radius:12px}.sui-rounded-l-md{border-top-left-radius:.375rem;border-bottom-left-radius:.375rem}.sui-rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.sui-rounded-r-md{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.sui-rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.sui-border{border-width:1px}.sui-border-0{border-width:0}.sui-border-2{border-width:2px}.sui-border-b{border-bottom-width:1px}.sui-border-b-2{border-bottom-width:2px}.sui-border-t{border-top-width:1px}.sui-border-dashed{border-style:dashed}.sui-border-none{border-style:none}.sui-border-\\\\[\\\\#48C1B5\\\\]{--tw-border-opacity:1;border-color:rgb(72 193 181/var(--tw-border-opacity,1))}.sui-border-\\\\[\\\\#9DC0EE\\\\]{--tw-border-opacity:1;border-color:rgb(157 192 238/var(--tw-border-opacity,1))}.sui-border-\\\\[\\\\#A4C3EC\\\\]{--tw-border-opacity:1;border-color:rgb(164 195 236/var(--tw-border-opacity,1))}.sui-border-\\\\[\\\\#F4B0A1\\\\]{--tw-border-opacity:1;border-color:rgb(244 176 161/var(--tw-border-opacity,1))}.sui-border-\\\\[\\\\#F7D9A4\\\\]{--tw-border-opacity:1;border-color:rgb(247 217 164/var(--tw-border-opacity,1))}.sui-border-black{--tw-border-opacity:1;border-color:rgb(35 38 47/var(--tw-border-opacity,1))}.sui-border-disabled{--tw-border-opacity:1;border-color:rgb(178 187 199/var(--tw-border-opacity,1))}.sui-border-disabled\\\\/0{border-color:rgba(178,187,199,0)}.sui-border-disabled\\\\/10{border-color:rgba(178,187,199,.1)}.sui-border-disabled\\\\/100{border-color:#b2bbc7}.sui-border-disabled\\\\/15{border-color:rgba(178,187,199,.15)}.sui-border-disabled\\\\/20{border-color:rgba(178,187,199,.2)}.sui-border-disabled\\\\/25{border-color:rgba(178,187,199,.25)}.sui-border-disabled\\\\/30{border-color:rgba(178,187,199,.3)}.sui-border-disabled\\\\/35{border-color:rgba(178,187,199,.35)}.sui-border-disabled\\\\/40{border-color:rgba(178,187,199,.4)}.sui-border-disabled\\\\/45{border-color:rgba(178,187,199,.45)}.sui-border-disabled\\\\/5{border-color:rgba(178,187,199,.05)}.sui-border-disabled\\\\/50{border-color:rgba(178,187,199,.5)}.sui-border-disabled\\\\/55{border-color:rgba(178,187,199,.55)}.sui-border-disabled\\\\/60{border-color:rgba(178,187,199,.6)}.sui-border-disabled\\\\/65{border-color:rgba(178,187,199,.65)}.sui-border-disabled\\\\/70{border-color:rgba(178,187,199,.7)}.sui-border-disabled\\\\/75{border-color:rgba(178,187,199,.75)}.sui-border-disabled\\\\/80{border-color:rgba(178,187,199,.8)}.sui-border-disabled\\\\/85{border-color:rgba(178,187,199,.85)}.sui-border-disabled\\\\/90{border-color:rgba(178,187,199,.9)}.sui-border-disabled\\\\/95{border-color:rgba(178,187,199,.95)}.sui-border-error{--tw-border-opacity:1;border-color:rgb(234 53 64/var(--tw-border-opacity,1))}.sui-border-error\\\\/0{border-color:rgba(234,53,64,0)}.sui-border-error\\\\/10{border-color:rgba(234,53,64,.1)}.sui-border-error\\\\/100{border-color:#ea3540}.sui-border-error\\\\/15{border-color:rgba(234,53,64,.15)}.sui-border-error\\\\/20{border-color:rgba(234,53,64,.2)}.sui-border-error\\\\/25{border-color:rgba(234,53,64,.25)}.sui-border-error\\\\/30{border-color:rgba(234,53,64,.3)}.sui-border-error\\\\/35{border-color:rgba(234,53,64,.35)}.sui-border-error\\\\/40{border-color:rgba(234,53,64,.4)}.sui-border-error\\\\/45{border-color:rgba(234,53,64,.45)}.sui-border-error\\\\/5{border-color:rgba(234,53,64,.05)}.sui-border-error\\\\/50{border-color:rgba(234,53,64,.5)}.sui-border-error\\\\/55{border-color:rgba(234,53,64,.55)}.sui-border-error\\\\/60{border-color:rgba(234,53,64,.6)}.sui-border-error\\\\/65{border-color:rgba(234,53,64,.65)}.sui-border-error\\\\/70{border-color:rgba(234,53,64,.7)}.sui-border-error\\\\/75{border-color:rgba(234,53,64,.75)}.sui-border-error\\\\/80{border-color:rgba(234,53,64,.8)}.sui-border-error\\\\/85{border-color:rgba(234,53,64,.85)}.sui-border-error\\\\/90{border-color:rgba(234,53,64,.9)}.sui-border-error\\\\/95{border-color:rgba(234,53,64,.95)}.sui-border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.sui-border-icon-black{--tw-border-opacity:1;border-color:rgb(35 38 47/var(--tw-border-opacity,1))}.sui-border-inactive{--tw-border-opacity:1;border-color:rgb(119 126 144/var(--tw-border-opacity,1))}.sui-border-inactive\\\\/0{border-color:rgba(119,126,144,0)}.sui-border-inactive\\\\/10{border-color:rgba(119,126,144,.1)}.sui-border-inactive\\\\/100{border-color:#777e90}.sui-border-inactive\\\\/15{border-color:rgba(119,126,144,.15)}.sui-border-inactive\\\\/20{border-color:rgba(119,126,144,.2)}.sui-border-inactive\\\\/25{border-color:rgba(119,126,144,.25)}.sui-border-inactive\\\\/30{border-color:rgba(119,126,144,.3)}.sui-border-inactive\\\\/35{border-color:rgba(119,126,144,.35)}.sui-border-inactive\\\\/40{border-color:rgba(119,126,144,.4)}.sui-border-inactive\\\\/45{border-color:rgba(119,126,144,.45)}.sui-border-inactive\\\\/5{border-color:rgba(119,126,144,.05)}.sui-border-inactive\\\\/50{border-color:rgba(119,126,144,.5)}.sui-border-inactive\\\\/55{border-color:rgba(119,126,144,.55)}.sui-border-inactive\\\\/60{border-color:rgba(119,126,144,.6)}.sui-border-inactive\\\\/65{border-color:rgba(119,126,144,.65)}.sui-border-inactive\\\\/70{border-color:rgba(119,126,144,.7)}.sui-border-inactive\\\\/75{border-color:rgba(119,126,144,.75)}.sui-border-inactive\\\\/80{border-color:rgba(119,126,144,.8)}.sui-border-inactive\\\\/85{border-color:rgba(119,126,144,.85)}.sui-border-inactive\\\\/90{border-color:rgba(119,126,144,.9)}.sui-border-inactive\\\\/95{border-color:rgba(119,126,144,.95)}.sui-border-info{--tw-border-opacity:1;border-color:rgb(39 114 240/var(--tw-border-opacity,1))}.sui-border-info\\\\/0{border-color:rgba(39,114,240,0)}.sui-border-info\\\\/10{border-color:rgba(39,114,240,.1)}.sui-border-info\\\\/100{border-color:#2772f0}.sui-border-info\\\\/15{border-color:rgba(39,114,240,.15)}.sui-border-info\\\\/20{border-color:rgba(39,114,240,.2)}.sui-border-info\\\\/25{border-color:rgba(39,114,240,.25)}.sui-border-info\\\\/30{border-color:rgba(39,114,240,.3)}.sui-border-info\\\\/35{border-color:rgba(39,114,240,.35)}.sui-border-info\\\\/40{border-color:rgba(39,114,240,.4)}.sui-border-info\\\\/45{border-color:rgba(39,114,240,.45)}.sui-border-info\\\\/5{border-color:rgba(39,114,240,.05)}.sui-border-info\\\\/50{border-color:rgba(39,114,240,.5)}.sui-border-info\\\\/55{border-color:rgba(39,114,240,.55)}.sui-border-info\\\\/60{border-color:rgba(39,114,240,.6)}.sui-border-info\\\\/65{border-color:rgba(39,114,240,.65)}.sui-border-info\\\\/70{border-color:rgba(39,114,240,.7)}.sui-border-info\\\\/75{border-color:rgba(39,114,240,.75)}.sui-border-info\\\\/80{border-color:rgba(39,114,240,.8)}.sui-border-info\\\\/85{border-color:rgba(39,114,240,.85)}.sui-border-info\\\\/90{border-color:rgba(39,114,240,.9)}.sui-border-info\\\\/95{border-color:rgba(39,114,240,.95)}.sui-border-primary{--tw-border-opacity:1;border-color:rgb(54 73 155/var(--tw-border-opacity,1))}.sui-border-primary-100{--tw-border-opacity:1;border-color:rgb(225 230 243/var(--tw-border-opacity,1))}.sui-border-primary-100\\\\/0{border-color:rgba(225,230,243,0)}.sui-border-primary-100\\\\/10{border-color:rgba(225,230,243,.1)}.sui-border-primary-100\\\\/100{border-color:#e1e6f3}.sui-border-primary-100\\\\/15{border-color:rgba(225,230,243,.15)}.sui-border-primary-100\\\\/20{border-color:rgba(225,230,243,.2)}.sui-border-primary-100\\\\/25{border-color:rgba(225,230,243,.25)}.sui-border-primary-100\\\\/30{border-color:rgba(225,230,243,.3)}.sui-border-primary-100\\\\/35{border-color:rgba(225,230,243,.35)}.sui-border-primary-100\\\\/40{border-color:rgba(225,230,243,.4)}.sui-border-primary-100\\\\/45{border-color:rgba(225,230,243,.45)}.sui-border-primary-100\\\\/5{border-color:rgba(225,230,243,.05)}.sui-border-primary-100\\\\/50{border-color:rgba(225,230,243,.5)}.sui-border-primary-100\\\\/55{border-color:rgba(225,230,243,.55)}.sui-border-primary-100\\\\/60{border-color:rgba(225,230,243,.6)}.sui-border-primary-100\\\\/65{border-color:rgba(225,230,243,.65)}.sui-border-primary-100\\\\/70{border-color:rgba(225,230,243,.7)}.sui-border-primary-100\\\\/75{border-color:rgba(225,230,243,.75)}.sui-border-primary-100\\\\/80{border-color:rgba(225,230,243,.8)}.sui-border-primary-100\\\\/85{border-color:rgba(225,230,243,.85)}.sui-border-primary-100\\\\/90{border-color:rgba(225,230,243,.9)}.sui-border-primary-100\\\\/95{border-color:rgba(225,230,243,.95)}.sui-border-primary-200{--tw-border-opacity:1;border-color:rgb(195 205 231/var(--tw-border-opacity,1))}.sui-border-primary-200\\\\/0{border-color:rgba(195,205,231,0)}.sui-border-primary-200\\\\/10{border-color:rgba(195,205,231,.1)}.sui-border-primary-200\\\\/100{border-color:#c3cde7}.sui-border-primary-200\\\\/15{border-color:rgba(195,205,231,.15)}.sui-border-primary-200\\\\/20{border-color:rgba(195,205,231,.2)}.sui-border-primary-200\\\\/25{border-color:rgba(195,205,231,.25)}.sui-border-primary-200\\\\/30{border-color:rgba(195,205,231,.3)}.sui-border-primary-200\\\\/35{border-color:rgba(195,205,231,.35)}.sui-border-primary-200\\\\/40{border-color:rgba(195,205,231,.4)}.sui-border-primary-200\\\\/45{border-color:rgba(195,205,231,.45)}.sui-border-primary-200\\\\/5{border-color:rgba(195,205,231,.05)}.sui-border-primary-200\\\\/50{border-color:rgba(195,205,231,.5)}.sui-border-primary-200\\\\/55{border-color:rgba(195,205,231,.55)}.sui-border-primary-200\\\\/60{border-color:rgba(195,205,231,.6)}.sui-border-primary-200\\\\/65{border-color:rgba(195,205,231,.65)}.sui-border-primary-200\\\\/70{border-color:rgba(195,205,231,.7)}.sui-border-primary-200\\\\/75{border-color:rgba(195,205,231,.75)}.sui-border-primary-200\\\\/80{border-color:rgba(195,205,231,.8)}.sui-border-primary-200\\\\/85{border-color:rgba(195,205,231,.85)}.sui-border-primary-200\\\\/90{border-color:rgba(195,205,231,.9)}.sui-border-primary-200\\\\/95{border-color:rgba(195,205,231,.95)}.sui-border-primary-300{--tw-border-opacity:1;border-color:rgb(165 180 219/var(--tw-border-opacity,1))}.sui-border-primary-300\\\\/0{border-color:rgba(165,180,219,0)}.sui-border-primary-300\\\\/10{border-color:rgba(165,180,219,.1)}.sui-border-primary-300\\\\/100{border-color:#a5b4db}.sui-border-primary-300\\\\/15{border-color:rgba(165,180,219,.15)}.sui-border-primary-300\\\\/20{border-color:rgba(165,180,219,.2)}.sui-border-primary-300\\\\/25{border-color:rgba(165,180,219,.25)}.sui-border-primary-300\\\\/30{border-color:rgba(165,180,219,.3)}.sui-border-primary-300\\\\/35{border-color:rgba(165,180,219,.35)}.sui-border-primary-300\\\\/40{border-color:rgba(165,180,219,.4)}.sui-border-primary-300\\\\/45{border-color:rgba(165,180,219,.45)}.sui-border-primary-300\\\\/5{border-color:rgba(165,180,219,.05)}.sui-border-primary-300\\\\/50{border-color:rgba(165,180,219,.5)}.sui-border-primary-300\\\\/55{border-color:rgba(165,180,219,.55)}.sui-border-primary-300\\\\/60{border-color:rgba(165,180,219,.6)}.sui-border-primary-300\\\\/65{border-color:rgba(165,180,219,.65)}.sui-border-primary-300\\\\/70{border-color:rgba(165,180,219,.7)}.sui-border-primary-300\\\\/75{border-color:rgba(165,180,219,.75)}.sui-border-primary-300\\\\/80{border-color:rgba(165,180,219,.8)}.sui-border-primary-300\\\\/85{border-color:rgba(165,180,219,.85)}.sui-border-primary-300\\\\/90{border-color:rgba(165,180,219,.9)}.sui-border-primary-300\\\\/95{border-color:rgba(165,180,219,.95)}.sui-border-primary-400{--tw-border-opacity:1;border-color:rgb(135 155 207/var(--tw-border-opacity,1))}.sui-border-primary-400\\\\/0{border-color:rgba(135,155,207,0)}.sui-border-primary-400\\\\/10{border-color:rgba(135,155,207,.1)}.sui-border-primary-400\\\\/100{border-color:#879bcf}.sui-border-primary-400\\\\/15{border-color:rgba(135,155,207,.15)}.sui-border-primary-400\\\\/20{border-color:rgba(135,155,207,.2)}.sui-border-primary-400\\\\/25{border-color:rgba(135,155,207,.25)}.sui-border-primary-400\\\\/30{border-color:rgba(135,155,207,.3)}.sui-border-primary-400\\\\/35{border-color:rgba(135,155,207,.35)}.sui-border-primary-400\\\\/40{border-color:rgba(135,155,207,.4)}.sui-border-primary-400\\\\/45{border-color:rgba(135,155,207,.45)}.sui-border-primary-400\\\\/5{border-color:rgba(135,155,207,.05)}.sui-border-primary-400\\\\/50{border-color:rgba(135,155,207,.5)}.sui-border-primary-400\\\\/55{border-color:rgba(135,155,207,.55)}.sui-border-primary-400\\\\/60{border-color:rgba(135,155,207,.6)}.sui-border-primary-400\\\\/65{border-color:rgba(135,155,207,.65)}.sui-border-primary-400\\\\/70{border-color:rgba(135,155,207,.7)}.sui-border-primary-400\\\\/75{border-color:rgba(135,155,207,.75)}.sui-border-primary-400\\\\/80{border-color:rgba(135,155,207,.8)}.sui-border-primary-400\\\\/85{border-color:rgba(135,155,207,.85)}.sui-border-primary-400\\\\/90{border-color:rgba(135,155,207,.9)}.sui-border-primary-400\\\\/95{border-color:rgba(135,155,207,.95)}.sui-border-primary-50{--tw-border-opacity:1;border-color:rgb(240 242 249/var(--tw-border-opacity,1))}.sui-border-primary-50\\\\/0{border-color:rgba(240,242,249,0)}.sui-border-primary-50\\\\/10{border-color:rgba(240,242,249,.1)}.sui-border-primary-50\\\\/100{border-color:#f0f2f9}.sui-border-primary-50\\\\/15{border-color:rgba(240,242,249,.15)}.sui-border-primary-50\\\\/20{border-color:rgba(240,242,249,.2)}.sui-border-primary-50\\\\/25{border-color:rgba(240,242,249,.25)}.sui-border-primary-50\\\\/30{border-color:rgba(240,242,249,.3)}.sui-border-primary-50\\\\/35{border-color:rgba(240,242,249,.35)}.sui-border-primary-50\\\\/40{border-color:rgba(240,242,249,.4)}.sui-border-primary-50\\\\/45{border-color:rgba(240,242,249,.45)}.sui-border-primary-50\\\\/5{border-color:rgba(240,242,249,.05)}.sui-border-primary-50\\\\/50{border-color:rgba(240,242,249,.5)}.sui-border-primary-50\\\\/55{border-color:rgba(240,242,249,.55)}.sui-border-primary-50\\\\/60{border-color:rgba(240,242,249,.6)}.sui-border-primary-50\\\\/65{border-color:rgba(240,242,249,.65)}.sui-border-primary-50\\\\/70{border-color:rgba(240,242,249,.7)}.sui-border-primary-50\\\\/75{border-color:rgba(240,242,249,.75)}.sui-border-primary-50\\\\/80{border-color:rgba(240,242,249,.8)}.sui-border-primary-50\\\\/85{border-color:rgba(240,242,249,.85)}.sui-border-primary-50\\\\/90{border-color:rgba(240,242,249,.9)}.sui-border-primary-50\\\\/95{border-color:rgba(240,242,249,.95)}.sui-border-primary-500{--tw-border-opacity:1;border-color:rgb(54 73 155/var(--tw-border-opacity,1))}.sui-border-primary-500\\\\/0{border-color:rgba(54,73,155,0)}.sui-border-primary-500\\\\/10{border-color:rgba(54,73,155,.1)}.sui-border-primary-500\\\\/100{border-color:#36499b}.sui-border-primary-500\\\\/15{border-color:rgba(54,73,155,.15)}.sui-border-primary-500\\\\/20{border-color:rgba(54,73,155,.2)}.sui-border-primary-500\\\\/25{border-color:rgba(54,73,155,.25)}.sui-border-primary-500\\\\/30{border-color:rgba(54,73,155,.3)}.sui-border-primary-500\\\\/35{border-color:rgba(54,73,155,.35)}.sui-border-primary-500\\\\/40{border-color:rgba(54,73,155,.4)}.sui-border-primary-500\\\\/45{border-color:rgba(54,73,155,.45)}.sui-border-primary-500\\\\/5{border-color:rgba(54,73,155,.05)}.sui-border-primary-500\\\\/50{border-color:rgba(54,73,155,.5)}.sui-border-primary-500\\\\/55{border-color:rgba(54,73,155,.55)}.sui-border-primary-500\\\\/60{border-color:rgba(54,73,155,.6)}.sui-border-primary-500\\\\/65{border-color:rgba(54,73,155,.65)}.sui-border-primary-500\\\\/70{border-color:rgba(54,73,155,.7)}.sui-border-primary-500\\\\/75{border-color:rgba(54,73,155,.75)}.sui-border-primary-500\\\\/80{border-color:rgba(54,73,155,.8)}.sui-border-primary-500\\\\/85{border-color:rgba(54,73,155,.85)}.sui-border-primary-500\\\\/90{border-color:rgba(54,73,155,.9)}.sui-border-primary-500\\\\/95{border-color:rgba(54,73,155,.95)}.sui-border-primary-600{--tw-border-opacity:1;border-color:rgb(43 58 124/var(--tw-border-opacity,1))}.sui-border-primary-600\\\\/0{border-color:rgba(43,58,124,0)}.sui-border-primary-600\\\\/10{border-color:rgba(43,58,124,.1)}.sui-border-primary-600\\\\/100{border-color:#2b3a7c}.sui-border-primary-600\\\\/15{border-color:rgba(43,58,124,.15)}.sui-border-primary-600\\\\/20{border-color:rgba(43,58,124,.2)}.sui-border-primary-600\\\\/25{border-color:rgba(43,58,124,.25)}.sui-border-primary-600\\\\/30{border-color:rgba(43,58,124,.3)}.sui-border-primary-600\\\\/35{border-color:rgba(43,58,124,.35)}.sui-border-primary-600\\\\/40{border-color:rgba(43,58,124,.4)}.sui-border-primary-600\\\\/45{border-color:rgba(43,58,124,.45)}.sui-border-primary-600\\\\/5{border-color:rgba(43,58,124,.05)}.sui-border-primary-600\\\\/50{border-color:rgba(43,58,124,.5)}.sui-border-primary-600\\\\/55{border-color:rgba(43,58,124,.55)}.sui-border-primary-600\\\\/60{border-color:rgba(43,58,124,.6)}.sui-border-primary-600\\\\/65{border-color:rgba(43,58,124,.65)}.sui-border-primary-600\\\\/70{border-color:rgba(43,58,124,.7)}.sui-border-primary-600\\\\/75{border-color:rgba(43,58,124,.75)}.sui-border-primary-600\\\\/80{border-color:rgba(43,58,124,.8)}.sui-border-primary-600\\\\/85{border-color:rgba(43,58,124,.85)}.sui-border-primary-600\\\\/90{border-color:rgba(43,58,124,.9)}.sui-border-primary-600\\\\/95{border-color:rgba(43,58,124,.95)}.sui-border-primary-700{--tw-border-opacity:1;border-color:rgb(32 43 93/var(--tw-border-opacity,1))}.sui-border-primary-700\\\\/0{border-color:rgba(32,43,93,0)}.sui-border-primary-700\\\\/10{border-color:rgba(32,43,93,.1)}.sui-border-primary-700\\\\/100{border-color:#202b5d}.sui-border-primary-700\\\\/15{border-color:rgba(32,43,93,.15)}.sui-border-primary-700\\\\/20{border-color:rgba(32,43,93,.2)}.sui-border-primary-700\\\\/25{border-color:rgba(32,43,93,.25)}.sui-border-primary-700\\\\/30{border-color:rgba(32,43,93,.3)}.sui-border-primary-700\\\\/35{border-color:rgba(32,43,93,.35)}.sui-border-primary-700\\\\/40{border-color:rgba(32,43,93,.4)}.sui-border-primary-700\\\\/45{border-color:rgba(32,43,93,.45)}.sui-border-primary-700\\\\/5{border-color:rgba(32,43,93,.05)}.sui-border-primary-700\\\\/50{border-color:rgba(32,43,93,.5)}.sui-border-primary-700\\\\/55{border-color:rgba(32,43,93,.55)}.sui-border-primary-700\\\\/60{border-color:rgba(32,43,93,.6)}.sui-border-primary-700\\\\/65{border-color:rgba(32,43,93,.65)}.sui-border-primary-700\\\\/70{border-color:rgba(32,43,93,.7)}.sui-border-primary-700\\\\/75{border-color:rgba(32,43,93,.75)}.sui-border-primary-700\\\\/80{border-color:rgba(32,43,93,.8)}.sui-border-primary-700\\\\/85{border-color:rgba(32,43,93,.85)}.sui-border-primary-700\\\\/90{border-color:rgba(32,43,93,.9)}.sui-border-primary-700\\\\/95{border-color:rgba(32,43,93,.95)}.sui-border-primary-800{--tw-border-opacity:1;border-color:rgb(22 29 62/var(--tw-border-opacity,1))}.sui-border-primary-800\\\\/0{border-color:rgba(22,29,62,0)}.sui-border-primary-800\\\\/10{border-color:rgba(22,29,62,.1)}.sui-border-primary-800\\\\/100{border-color:#161d3e}.sui-border-primary-800\\\\/15{border-color:rgba(22,29,62,.15)}.sui-border-primary-800\\\\/20{border-color:rgba(22,29,62,.2)}.sui-border-primary-800\\\\/25{border-color:rgba(22,29,62,.25)}.sui-border-primary-800\\\\/30{border-color:rgba(22,29,62,.3)}.sui-border-primary-800\\\\/35{border-color:rgba(22,29,62,.35)}.sui-border-primary-800\\\\/40{border-color:rgba(22,29,62,.4)}.sui-border-primary-800\\\\/45{border-color:rgba(22,29,62,.45)}.sui-border-primary-800\\\\/5{border-color:rgba(22,29,62,.05)}.sui-border-primary-800\\\\/50{border-color:rgba(22,29,62,.5)}.sui-border-primary-800\\\\/55{border-color:rgba(22,29,62,.55)}.sui-border-primary-800\\\\/60{border-color:rgba(22,29,62,.6)}.sui-border-primary-800\\\\/65{border-color:rgba(22,29,62,.65)}.sui-border-primary-800\\\\/70{border-color:rgba(22,29,62,.7)}.sui-border-primary-800\\\\/75{border-color:rgba(22,29,62,.75)}.sui-border-primary-800\\\\/80{border-color:rgba(22,29,62,.8)}.sui-border-primary-800\\\\/85{border-color:rgba(22,29,62,.85)}.sui-border-primary-800\\\\/90{border-color:rgba(22,29,62,.9)}.sui-border-primary-800\\\\/95{border-color:rgba(22,29,62,.95)}.sui-border-primary-900{--tw-border-opacity:1;border-color:rgb(11 14 31/var(--tw-border-opacity,1))}.sui-border-primary-900\\\\/0{border-color:rgba(11,14,31,0)}.sui-border-primary-900\\\\/10{border-color:rgba(11,14,31,.1)}.sui-border-primary-900\\\\/100{border-color:#0b0e1f}.sui-border-primary-900\\\\/15{border-color:rgba(11,14,31,.15)}.sui-border-primary-900\\\\/20{border-color:rgba(11,14,31,.2)}.sui-border-primary-900\\\\/25{border-color:rgba(11,14,31,.25)}.sui-border-primary-900\\\\/30{border-color:rgba(11,14,31,.3)}.sui-border-primary-900\\\\/35{border-color:rgba(11,14,31,.35)}.sui-border-primary-900\\\\/40{border-color:rgba(11,14,31,.4)}.sui-border-primary-900\\\\/45{border-color:rgba(11,14,31,.45)}.sui-border-primary-900\\\\/5{border-color:rgba(11,14,31,.05)}.sui-border-primary-900\\\\/50{border-color:rgba(11,14,31,.5)}.sui-border-primary-900\\\\/55{border-color:rgba(11,14,31,.55)}.sui-border-primary-900\\\\/60{border-color:rgba(11,14,31,.6)}.sui-border-primary-900\\\\/65{border-color:rgba(11,14,31,.65)}.sui-border-primary-900\\\\/70{border-color:rgba(11,14,31,.7)}.sui-border-primary-900\\\\/75{border-color:rgba(11,14,31,.75)}.sui-border-primary-900\\\\/80{border-color:rgba(11,14,31,.8)}.sui-border-primary-900\\\\/85{border-color:rgba(11,14,31,.85)}.sui-border-primary-900\\\\/90{border-color:rgba(11,14,31,.9)}.sui-border-primary-900\\\\/95{border-color:rgba(11,14,31,.95)}.sui-border-primary\\\\/0{border-color:rgba(54,73,155,0)}.sui-border-primary\\\\/10{border-color:rgba(54,73,155,.1)}.sui-border-primary\\\\/100{border-color:#36499b}.sui-border-primary\\\\/15{border-color:rgba(54,73,155,.15)}.sui-border-primary\\\\/20{border-color:rgba(54,73,155,.2)}.sui-border-primary\\\\/25{border-color:rgba(54,73,155,.25)}.sui-border-primary\\\\/30{border-color:rgba(54,73,155,.3)}.sui-border-primary\\\\/35{border-color:rgba(54,73,155,.35)}.sui-border-primary\\\\/40{border-color:rgba(54,73,155,.4)}.sui-border-primary\\\\/45{border-color:rgba(54,73,155,.45)}.sui-border-primary\\\\/5{border-color:rgba(54,73,155,.05)}.sui-border-primary\\\\/50{border-color:rgba(54,73,155,.5)}.sui-border-primary\\\\/55{border-color:rgba(54,73,155,.55)}.sui-border-primary\\\\/60{border-color:rgba(54,73,155,.6)}.sui-border-primary\\\\/65{border-color:rgba(54,73,155,.65)}.sui-border-primary\\\\/70{border-color:rgba(54,73,155,.7)}.sui-border-primary\\\\/75{border-color:rgba(54,73,155,.75)}.sui-border-primary\\\\/80{border-color:rgba(54,73,155,.8)}.sui-border-primary\\\\/85{border-color:rgba(54,73,155,.85)}.sui-border-primary\\\\/90{border-color:rgba(54,73,155,.9)}.sui-border-primary\\\\/95{border-color:rgba(54,73,155,.95)}.sui-border-secondary{--tw-border-opacity:1;border-color:rgb(242 246 252/var(--tw-border-opacity,1))}.sui-border-secondary-1{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity,1))}.sui-border-secondary-1\\\\/0{border-color:hsla(0,0%,100%,0)}.sui-border-secondary-1\\\\/10{border-color:hsla(0,0%,100%,.1)}.sui-border-secondary-1\\\\/100{border-color:#fff}.sui-border-secondary-1\\\\/15{border-color:hsla(0,0%,100%,.15)}.sui-border-secondary-1\\\\/20{border-color:hsla(0,0%,100%,.2)}.sui-border-secondary-1\\\\/25{border-color:hsla(0,0%,100%,.25)}.sui-border-secondary-1\\\\/30{border-color:hsla(0,0%,100%,.3)}.sui-border-secondary-1\\\\/35{border-color:hsla(0,0%,100%,.35)}.sui-border-secondary-1\\\\/40{border-color:hsla(0,0%,100%,.4)}.sui-border-secondary-1\\\\/45{border-color:hsla(0,0%,100%,.45)}.sui-border-secondary-1\\\\/5{border-color:hsla(0,0%,100%,.05)}.sui-border-secondary-1\\\\/50{border-color:hsla(0,0%,100%,.5)}.sui-border-secondary-1\\\\/55{border-color:hsla(0,0%,100%,.55)}.sui-border-secondary-1\\\\/60{border-color:hsla(0,0%,100%,.6)}.sui-border-secondary-1\\\\/65{border-color:hsla(0,0%,100%,.65)}.sui-border-secondary-1\\\\/70{border-color:hsla(0,0%,100%,.7)}.sui-border-secondary-1\\\\/75{border-color:hsla(0,0%,100%,.75)}.sui-border-secondary-1\\\\/80{border-color:hsla(0,0%,100%,.8)}.sui-border-secondary-1\\\\/85{border-color:hsla(0,0%,100%,.85)}.sui-border-secondary-1\\\\/90{border-color:hsla(0,0%,100%,.9)}.sui-border-secondary-1\\\\/95{border-color:hsla(0,0%,100%,.95)}.sui-border-secondary-2{--tw-border-opacity:1;border-color:rgb(225 234 248/var(--tw-border-opacity,1))}.sui-border-secondary-2\\\\/0{border-color:rgba(225,234,248,0)}.sui-border-secondary-2\\\\/10{border-color:rgba(225,234,248,.1)}.sui-border-secondary-2\\\\/100{border-color:#e1eaf8}.sui-border-secondary-2\\\\/15{border-color:rgba(225,234,248,.15)}.sui-border-secondary-2\\\\/20{border-color:rgba(225,234,248,.2)}.sui-border-secondary-2\\\\/25{border-color:rgba(225,234,248,.25)}.sui-border-secondary-2\\\\/30{border-color:rgba(225,234,248,.3)}.sui-border-secondary-2\\\\/35{border-color:rgba(225,234,248,.35)}.sui-border-secondary-2\\\\/40{border-color:rgba(225,234,248,.4)}.sui-border-secondary-2\\\\/45{border-color:rgba(225,234,248,.45)}.sui-border-secondary-2\\\\/5{border-color:rgba(225,234,248,.05)}.sui-border-secondary-2\\\\/50{border-color:rgba(225,234,248,.5)}.sui-border-secondary-2\\\\/55{border-color:rgba(225,234,248,.55)}.sui-border-secondary-2\\\\/60{border-color:rgba(225,234,248,.6)}.sui-border-secondary-2\\\\/65{border-color:rgba(225,234,248,.65)}.sui-border-secondary-2\\\\/70{border-color:rgba(225,234,248,.7)}.sui-border-secondary-2\\\\/75{border-color:rgba(225,234,248,.75)}.sui-border-secondary-2\\\\/80{border-color:rgba(225,234,248,.8)}.sui-border-secondary-2\\\\/85{border-color:rgba(225,234,248,.85)}.sui-border-secondary-2\\\\/90{border-color:rgba(225,234,248,.9)}.sui-border-secondary-2\\\\/95{border-color:rgba(225,234,248,.95)}.sui-border-secondary-3{--tw-border-opacity:1;border-color:rgb(201 218 244/var(--tw-border-opacity,1))}.sui-border-secondary-3\\\\/0{border-color:rgba(201,218,244,0)}.sui-border-secondary-3\\\\/10{border-color:rgba(201,218,244,.1)}.sui-border-secondary-3\\\\/100{border-color:#c9daf4}.sui-border-secondary-3\\\\/15{border-color:rgba(201,218,244,.15)}.sui-border-secondary-3\\\\/20{border-color:rgba(201,218,244,.2)}.sui-border-secondary-3\\\\/25{border-color:rgba(201,218,244,.25)}.sui-border-secondary-3\\\\/30{border-color:rgba(201,218,244,.3)}.sui-border-secondary-3\\\\/35{border-color:rgba(201,218,244,.35)}.sui-border-secondary-3\\\\/40{border-color:rgba(201,218,244,.4)}.sui-border-secondary-3\\\\/45{border-color:rgba(201,218,244,.45)}.sui-border-secondary-3\\\\/5{border-color:rgba(201,218,244,.05)}.sui-border-secondary-3\\\\/50{border-color:rgba(201,218,244,.5)}.sui-border-secondary-3\\\\/55{border-color:rgba(201,218,244,.55)}.sui-border-secondary-3\\\\/60{border-color:rgba(201,218,244,.6)}.sui-border-secondary-3\\\\/65{border-color:rgba(201,218,244,.65)}.sui-border-secondary-3\\\\/70{border-color:rgba(201,218,244,.7)}.sui-border-secondary-3\\\\/75{border-color:rgba(201,218,244,.75)}.sui-border-secondary-3\\\\/80{border-color:rgba(201,218,244,.8)}.sui-border-secondary-3\\\\/85{border-color:rgba(201,218,244,.85)}.sui-border-secondary-3\\\\/90{border-color:rgba(201,218,244,.9)}.sui-border-secondary-3\\\\/95{border-color:rgba(201,218,244,.95)}.sui-border-secondary\\\\/0{border-color:rgba(242,246,252,0)}.sui-border-secondary\\\\/10{border-color:rgba(242,246,252,.1)}.sui-border-secondary\\\\/100{border-color:#f2f6fc}.sui-border-secondary\\\\/15{border-color:rgba(242,246,252,.15)}.sui-border-secondary\\\\/20{border-color:rgba(242,246,252,.2)}.sui-border-secondary\\\\/25{border-color:rgba(242,246,252,.25)}.sui-border-secondary\\\\/30{border-color:rgba(242,246,252,.3)}.sui-border-secondary\\\\/35{border-color:rgba(242,246,252,.35)}.sui-border-secondary\\\\/40{border-color:rgba(242,246,252,.4)}.sui-border-secondary\\\\/45{border-color:rgba(242,246,252,.45)}.sui-border-secondary\\\\/5{border-color:rgba(242,246,252,.05)}.sui-border-secondary\\\\/50{border-color:rgba(242,246,252,.5)}.sui-border-secondary\\\\/55{border-color:rgba(242,246,252,.55)}.sui-border-secondary\\\\/60{border-color:rgba(242,246,252,.6)}.sui-border-secondary\\\\/65{border-color:rgba(242,246,252,.65)}.sui-border-secondary\\\\/70{border-color:rgba(242,246,252,.7)}.sui-border-secondary\\\\/75{border-color:rgba(242,246,252,.75)}.sui-border-secondary\\\\/80{border-color:rgba(242,246,252,.8)}.sui-border-secondary\\\\/85{border-color:rgba(242,246,252,.85)}.sui-border-secondary\\\\/90{border-color:rgba(242,246,252,.9)}.sui-border-secondary\\\\/95{border-color:rgba(242,246,252,.95)}.sui-border-stroke-brand{--tw-border-opacity:1;border-color:rgb(54 73 155/var(--tw-border-opacity,1))}.sui-border-stroke-level2{--tw-border-opacity:1;border-color:rgb(178 187 199/var(--tw-border-opacity,1))}.sui-border-stroke-level3{--tw-border-opacity:1;border-color:rgb(222 227 231/var(--tw-border-opacity,1))}.sui-border-success{--tw-border-opacity:1;border-color:rgb(34 188 77/var(--tw-border-opacity,1))}.sui-border-success\\\\/0{border-color:rgba(34,188,77,0)}.sui-border-success\\\\/10{border-color:rgba(34,188,77,.1)}.sui-border-success\\\\/100{border-color:#22bc4d}.sui-border-success\\\\/15{border-color:rgba(34,188,77,.15)}.sui-border-success\\\\/20{border-color:rgba(34,188,77,.2)}.sui-border-success\\\\/25{border-color:rgba(34,188,77,.25)}.sui-border-success\\\\/30{border-color:rgba(34,188,77,.3)}.sui-border-success\\\\/35{border-color:rgba(34,188,77,.35)}.sui-border-success\\\\/40{border-color:rgba(34,188,77,.4)}.sui-border-success\\\\/45{border-color:rgba(34,188,77,.45)}.sui-border-success\\\\/5{border-color:rgba(34,188,77,.05)}.sui-border-success\\\\/50{border-color:rgba(34,188,77,.5)}.sui-border-success\\\\/55{border-color:rgba(34,188,77,.55)}.sui-border-success\\\\/60{border-color:rgba(34,188,77,.6)}.sui-border-success\\\\/65{border-color:rgba(34,188,77,.65)}.sui-border-success\\\\/70{border-color:rgba(34,188,77,.7)}.sui-border-success\\\\/75{border-color:rgba(34,188,77,.75)}.sui-border-success\\\\/80{border-color:rgba(34,188,77,.8)}.sui-border-success\\\\/85{border-color:rgba(34,188,77,.85)}.sui-border-success\\\\/90{border-color:rgba(34,188,77,.9)}.sui-border-success\\\\/95{border-color:rgba(34,188,77,.95)}.sui-border-transparent{border-color:transparent}.sui-border-warning{--tw-border-opacity:1;border-color:rgb(255 122 0/var(--tw-border-opacity,1))}.sui-border-warning\\\\/0{border-color:rgba(255,122,0,0)}.sui-border-warning\\\\/10{border-color:rgba(255,122,0,.1)}.sui-border-warning\\\\/100{border-color:#ff7a00}.sui-border-warning\\\\/15{border-color:rgba(255,122,0,.15)}.sui-border-warning\\\\/20{border-color:rgba(255,122,0,.2)}.sui-border-warning\\\\/25{border-color:rgba(255,122,0,.25)}.sui-border-warning\\\\/30{border-color:rgba(255,122,0,.3)}.sui-border-warning\\\\/35{border-color:rgba(255,122,0,.35)}.sui-border-warning\\\\/40{border-color:rgba(255,122,0,.4)}.sui-border-warning\\\\/45{border-color:rgba(255,122,0,.45)}.sui-border-warning\\\\/5{border-color:rgba(255,122,0,.05)}.sui-border-warning\\\\/50{border-color:rgba(255,122,0,.5)}.sui-border-warning\\\\/55{border-color:rgba(255,122,0,.55)}.sui-border-warning\\\\/60{border-color:rgba(255,122,0,.6)}.sui-border-warning\\\\/65{border-color:rgba(255,122,0,.65)}.sui-border-warning\\\\/70{border-color:rgba(255,122,0,.7)}.sui-border-warning\\\\/75{border-color:rgba(255,122,0,.75)}.sui-border-warning\\\\/80{border-color:rgba(255,122,0,.8)}.sui-border-warning\\\\/85{border-color:rgba(255,122,0,.85)}.sui-border-warning\\\\/90{border-color:rgba(255,122,0,.9)}.sui-border-warning\\\\/95{border-color:rgba(255,122,0,.95)}.sui-border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity,1))}.sui-border-white\\\\/80{border-color:hsla(0,0%,100%,.8)}.sui-bg-\\\\[\\\\#DAECFF\\\\]{--tw-bg-opacity:1;background-color:rgb(218 236 255/var(--tw-bg-opacity,1))}.sui-bg-\\\\[\\\\#DCFCE4\\\\]{--tw-bg-opacity:1;background-color:rgb(220 252 228/var(--tw-bg-opacity,1))}.sui-bg-\\\\[\\\\#FDE3E5\\\\]{--tw-bg-opacity:1;background-color:rgb(253 227 229/var(--tw-bg-opacity,1))}.sui-bg-\\\\[\\\\#FFF3D3\\\\]{--tw-bg-opacity:1;background-color:rgb(255 243 211/var(--tw-bg-opacity,1))}.sui-bg-\\\\[rgba\\\\(255\\\\,255\\\\,255\\\\,var\\\\(--loading-opacity\\\\)\\\\)\\\\]{background-color:rgba(255,255,255,var(--loading-opacity))}.sui-bg-background-default,.sui-bg-background-primary{--tw-bg-opacity:1;background-color:rgb(242 246 252/var(--tw-bg-opacity,1))}.sui-bg-background-secondary1{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.sui-bg-background-secondary2{--tw-bg-opacity:1;background-color:rgb(225 234 248/var(--tw-bg-opacity,1))}.sui-bg-background-secondary3{--tw-bg-opacity:1;background-color:rgb(201 218 244/var(--tw-bg-opacity,1))}.sui-bg-black{--tw-bg-opacity:1;background-color:rgb(35 38 47/var(--tw-bg-opacity,1))}.sui-bg-black\\\\/10{background-color:rgba(35,38,47,.1)}.sui-bg-black\\\\/50{background-color:rgba(35,38,47,.5)}.sui-bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.sui-bg-disabled{--tw-bg-opacity:1;background-color:rgb(178 187 199/var(--tw-bg-opacity,1))}.sui-bg-disabled\\\\/0{background-color:rgba(178,187,199,0)}.sui-bg-disabled\\\\/10{background-color:rgba(178,187,199,.1)}.sui-bg-disabled\\\\/100{background-color:#b2bbc7}.sui-bg-disabled\\\\/15{background-color:rgba(178,187,199,.15)}.sui-bg-disabled\\\\/20{background-color:rgba(178,187,199,.2)}.sui-bg-disabled\\\\/25{background-color:rgba(178,187,199,.25)}.sui-bg-disabled\\\\/30{background-color:rgba(178,187,199,.3)}.sui-bg-disabled\\\\/35{background-color:rgba(178,187,199,.35)}.sui-bg-disabled\\\\/40{background-color:rgba(178,187,199,.4)}.sui-bg-disabled\\\\/45{background-color:rgba(178,187,199,.45)}.sui-bg-disabled\\\\/5{background-color:rgba(178,187,199,.05)}.sui-bg-disabled\\\\/50{background-color:rgba(178,187,199,.5)}.sui-bg-disabled\\\\/55{background-color:rgba(178,187,199,.55)}.sui-bg-disabled\\\\/60{background-color:rgba(178,187,199,.6)}.sui-bg-disabled\\\\/65{background-color:rgba(178,187,199,.65)}.sui-bg-disabled\\\\/70{background-color:rgba(178,187,199,.7)}.sui-bg-disabled\\\\/75{background-color:rgba(178,187,199,.75)}.sui-bg-disabled\\\\/80{background-color:rgba(178,187,199,.8)}.sui-bg-disabled\\\\/85{background-color:rgba(178,187,199,.85)}.sui-bg-disabled\\\\/90{background-color:rgba(178,187,199,.9)}.sui-bg-disabled\\\\/95{background-color:rgba(178,187,199,.95)}.sui-bg-error{--tw-bg-opacity:1;background-color:rgb(234 53 64/var(--tw-bg-opacity,1))}.sui-bg-error\\\\/0{background-color:rgba(234,53,64,0)}.sui-bg-error\\\\/10{background-color:rgba(234,53,64,.1)}.sui-bg-error\\\\/100{background-color:#ea3540}.sui-bg-error\\\\/15{background-color:rgba(234,53,64,.15)}.sui-bg-error\\\\/20{background-color:rgba(234,53,64,.2)}.sui-bg-error\\\\/25{background-color:rgba(234,53,64,.25)}.sui-bg-error\\\\/30{background-color:rgba(234,53,64,.3)}.sui-bg-error\\\\/35{background-color:rgba(234,53,64,.35)}.sui-bg-error\\\\/40{background-color:rgba(234,53,64,.4)}.sui-bg-error\\\\/45{background-color:rgba(234,53,64,.45)}.sui-bg-error\\\\/5{background-color:rgba(234,53,64,.05)}.sui-bg-error\\\\/50{background-color:rgba(234,53,64,.5)}.sui-bg-error\\\\/55{background-color:rgba(234,53,64,.55)}.sui-bg-error\\\\/60{background-color:rgba(234,53,64,.6)}.sui-bg-error\\\\/65{background-color:rgba(234,53,64,.65)}.sui-bg-error\\\\/70{background-color:rgba(234,53,64,.7)}.sui-bg-error\\\\/75{background-color:rgba(234,53,64,.75)}.sui-bg-error\\\\/80{background-color:rgba(234,53,64,.8)}.sui-bg-error\\\\/85{background-color:rgba(234,53,64,.85)}.sui-bg-error\\\\/90{background-color:rgba(234,53,64,.9)}.sui-bg-error\\\\/95{background-color:rgba(234,53,64,.95)}.sui-bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.sui-bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.sui-bg-inactive{--tw-bg-opacity:1;background-color:rgb(119 126 144/var(--tw-bg-opacity,1))}.sui-bg-inactive\\\\/0{background-color:rgba(119,126,144,0)}.sui-bg-inactive\\\\/10{background-color:rgba(119,126,144,.1)}.sui-bg-inactive\\\\/100{background-color:#777e90}.sui-bg-inactive\\\\/15{background-color:rgba(119,126,144,.15)}.sui-bg-inactive\\\\/20{background-color:rgba(119,126,144,.2)}.sui-bg-inactive\\\\/25{background-color:rgba(119,126,144,.25)}.sui-bg-inactive\\\\/30{background-color:rgba(119,126,144,.3)}.sui-bg-inactive\\\\/35{background-color:rgba(119,126,144,.35)}.sui-bg-inactive\\\\/40{background-color:rgba(119,126,144,.4)}.sui-bg-inactive\\\\/45{background-color:rgba(119,126,144,.45)}.sui-bg-inactive\\\\/5{background-color:rgba(119,126,144,.05)}.sui-bg-inactive\\\\/50{background-color:rgba(119,126,144,.5)}.sui-bg-inactive\\\\/55{background-color:rgba(119,126,144,.55)}.sui-bg-inactive\\\\/60{background-color:rgba(119,126,144,.6)}.sui-bg-inactive\\\\/65{background-color:rgba(119,126,144,.65)}.sui-bg-inactive\\\\/70{background-color:rgba(119,126,144,.7)}.sui-bg-inactive\\\\/75{background-color:rgba(119,126,144,.75)}.sui-bg-inactive\\\\/80{background-color:rgba(119,126,144,.8)}.sui-bg-inactive\\\\/85{background-color:rgba(119,126,144,.85)}.sui-bg-inactive\\\\/90{background-color:rgba(119,126,144,.9)}.sui-bg-inactive\\\\/95{background-color:rgba(119,126,144,.95)}.sui-bg-info{--tw-bg-opacity:1;background-color:rgb(39 114 240/var(--tw-bg-opacity,1))}.sui-bg-info\\\\/0{background-color:rgba(39,114,240,0)}.sui-bg-info\\\\/10{background-color:rgba(39,114,240,.1)}.sui-bg-info\\\\/100{background-color:#2772f0}.sui-bg-info\\\\/15{background-color:rgba(39,114,240,.15)}.sui-bg-info\\\\/20{background-color:rgba(39,114,240,.2)}.sui-bg-info\\\\/25{background-color:rgba(39,114,240,.25)}.sui-bg-info\\\\/30{background-color:rgba(39,114,240,.3)}.sui-bg-info\\\\/35{background-color:rgba(39,114,240,.35)}.sui-bg-info\\\\/40{background-color:rgba(39,114,240,.4)}.sui-bg-info\\\\/45{background-color:rgba(39,114,240,.45)}.sui-bg-info\\\\/5{background-color:rgba(39,114,240,.05)}.sui-bg-info\\\\/50{background-color:rgba(39,114,240,.5)}.sui-bg-info\\\\/55{background-color:rgba(39,114,240,.55)}.sui-bg-info\\\\/60{background-color:rgba(39,114,240,.6)}.sui-bg-info\\\\/65{background-color:rgba(39,114,240,.65)}.sui-bg-info\\\\/70{background-color:rgba(39,114,240,.7)}.sui-bg-info\\\\/75{background-color:rgba(39,114,240,.75)}.sui-bg-info\\\\/80{background-color:rgba(39,114,240,.8)}.sui-bg-info\\\\/85{background-color:rgba(39,114,240,.85)}.sui-bg-info\\\\/90{background-color:rgba(39,114,240,.9)}.sui-bg-info\\\\/95{background-color:rgba(39,114,240,.95)}.sui-bg-primary{--tw-bg-opacity:1;background-color:rgb(54 73 155/var(--tw-bg-opacity,1))}.sui-bg-primary-100{--tw-bg-opacity:1;background-color:rgb(225 230 243/var(--tw-bg-opacity,1))}.sui-bg-primary-100\\\\/0{background-color:rgba(225,230,243,0)}.sui-bg-primary-100\\\\/10{background-color:rgba(225,230,243,.1)}.sui-bg-primary-100\\\\/100{background-color:#e1e6f3}.sui-bg-primary-100\\\\/15{background-color:rgba(225,230,243,.15)}.sui-bg-primary-100\\\\/20{background-color:rgba(225,230,243,.2)}.sui-bg-primary-100\\\\/25{background-color:rgba(225,230,243,.25)}.sui-bg-primary-100\\\\/30{background-color:rgba(225,230,243,.3)}.sui-bg-primary-100\\\\/35{background-color:rgba(225,230,243,.35)}.sui-bg-primary-100\\\\/40{background-color:rgba(225,230,243,.4)}.sui-bg-primary-100\\\\/45{background-color:rgba(225,230,243,.45)}.sui-bg-primary-100\\\\/5{background-color:rgba(225,230,243,.05)}.sui-bg-primary-100\\\\/50{background-color:rgba(225,230,243,.5)}.sui-bg-primary-100\\\\/55{background-color:rgba(225,230,243,.55)}.sui-bg-primary-100\\\\/60{background-color:rgba(225,230,243,.6)}.sui-bg-primary-100\\\\/65{background-color:rgba(225,230,243,.65)}.sui-bg-primary-100\\\\/70{background-color:rgba(225,230,243,.7)}.sui-bg-primary-100\\\\/75{background-color:rgba(225,230,243,.75)}.sui-bg-primary-100\\\\/80{background-color:rgba(225,230,243,.8)}.sui-bg-primary-100\\\\/85{background-color:rgba(225,230,243,.85)}.sui-bg-primary-100\\\\/90{background-color:rgba(225,230,243,.9)}.sui-bg-primary-100\\\\/95{background-color:rgba(225,230,243,.95)}.sui-bg-primary-200{--tw-bg-opacity:1;background-color:rgb(195 205 231/var(--tw-bg-opacity,1))}.sui-bg-primary-200\\\\/0{background-color:rgba(195,205,231,0)}.sui-bg-primary-200\\\\/10{background-color:rgba(195,205,231,.1)}.sui-bg-primary-200\\\\/100{background-color:#c3cde7}.sui-bg-primary-200\\\\/15{background-color:rgba(195,205,231,.15)}.sui-bg-primary-200\\\\/20{background-color:rgba(195,205,231,.2)}.sui-bg-primary-200\\\\/25{background-color:rgba(195,205,231,.25)}.sui-bg-primary-200\\\\/30{background-color:rgba(195,205,231,.3)}.sui-bg-primary-200\\\\/35{background-color:rgba(195,205,231,.35)}.sui-bg-primary-200\\\\/40{background-color:rgba(195,205,231,.4)}.sui-bg-primary-200\\\\/45{background-color:rgba(195,205,231,.45)}.sui-bg-primary-200\\\\/5{background-color:rgba(195,205,231,.05)}.sui-bg-primary-200\\\\/50{background-color:rgba(195,205,231,.5)}.sui-bg-primary-200\\\\/55{background-color:rgba(195,205,231,.55)}.sui-bg-primary-200\\\\/60{background-color:rgba(195,205,231,.6)}.sui-bg-primary-200\\\\/65{background-color:rgba(195,205,231,.65)}.sui-bg-primary-200\\\\/70{background-color:rgba(195,205,231,.7)}.sui-bg-primary-200\\\\/75{background-color:rgba(195,205,231,.75)}.sui-bg-primary-200\\\\/80{background-color:rgba(195,205,231,.8)}.sui-bg-primary-200\\\\/85{background-color:rgba(195,205,231,.85)}.sui-bg-primary-200\\\\/90{background-color:rgba(195,205,231,.9)}.sui-bg-primary-200\\\\/95{background-color:rgba(195,205,231,.95)}.sui-bg-primary-300{--tw-bg-opacity:1;background-color:rgb(165 180 219/var(--tw-bg-opacity,1))}.sui-bg-primary-300\\\\/0{background-color:rgba(165,180,219,0)}.sui-bg-primary-300\\\\/10{background-color:rgba(165,180,219,.1)}.sui-bg-primary-300\\\\/100{background-color:#a5b4db}.sui-bg-primary-300\\\\/15{background-color:rgba(165,180,219,.15)}.sui-bg-primary-300\\\\/20{background-color:rgba(165,180,219,.2)}.sui-bg-primary-300\\\\/25{background-color:rgba(165,180,219,.25)}.sui-bg-primary-300\\\\/30{background-color:rgba(165,180,219,.3)}.sui-bg-primary-300\\\\/35{background-color:rgba(165,180,219,.35)}.sui-bg-primary-300\\\\/40{background-color:rgba(165,180,219,.4)}.sui-bg-primary-300\\\\/45{background-color:rgba(165,180,219,.45)}.sui-bg-primary-300\\\\/5{background-color:rgba(165,180,219,.05)}.sui-bg-primary-300\\\\/50{background-color:rgba(165,180,219,.5)}.sui-bg-primary-300\\\\/55{background-color:rgba(165,180,219,.55)}.sui-bg-primary-300\\\\/60{background-color:rgba(165,180,219,.6)}.sui-bg-primary-300\\\\/65{background-color:rgba(165,180,219,.65)}.sui-bg-primary-300\\\\/70{background-color:rgba(165,180,219,.7)}.sui-bg-primary-300\\\\/75{background-color:rgba(165,180,219,.75)}.sui-bg-primary-300\\\\/80{background-color:rgba(165,180,219,.8)}.sui-bg-primary-300\\\\/85{background-color:rgba(165,180,219,.85)}.sui-bg-primary-300\\\\/90{background-color:rgba(165,180,219,.9)}.sui-bg-primary-300\\\\/95{background-color:rgba(165,180,219,.95)}.sui-bg-primary-400{--tw-bg-opacity:1;background-color:rgb(135 155 207/var(--tw-bg-opacity,1))}.sui-bg-primary-400\\\\/0{background-color:rgba(135,155,207,0)}.sui-bg-primary-400\\\\/10{background-color:rgba(135,155,207,.1)}.sui-bg-primary-400\\\\/100{background-color:#879bcf}.sui-bg-primary-400\\\\/15{background-color:rgba(135,155,207,.15)}.sui-bg-primary-400\\\\/20{background-color:rgba(135,155,207,.2)}.sui-bg-primary-400\\\\/25{background-color:rgba(135,155,207,.25)}.sui-bg-primary-400\\\\/30{background-color:rgba(135,155,207,.3)}.sui-bg-primary-400\\\\/35{background-color:rgba(135,155,207,.35)}.sui-bg-primary-400\\\\/40{background-color:rgba(135,155,207,.4)}.sui-bg-primary-400\\\\/45{background-color:rgba(135,155,207,.45)}.sui-bg-primary-400\\\\/5{background-color:rgba(135,155,207,.05)}.sui-bg-primary-400\\\\/50{background-color:rgba(135,155,207,.5)}.sui-bg-primary-400\\\\/55{background-color:rgba(135,155,207,.55)}.sui-bg-primary-400\\\\/60{background-color:rgba(135,155,207,.6)}.sui-bg-primary-400\\\\/65{background-color:rgba(135,155,207,.65)}.sui-bg-primary-400\\\\/70{background-color:rgba(135,155,207,.7)}.sui-bg-primary-400\\\\/75{background-color:rgba(135,155,207,.75)}.sui-bg-primary-400\\\\/80{background-color:rgba(135,155,207,.8)}.sui-bg-primary-400\\\\/85{background-color:rgba(135,155,207,.85)}.sui-bg-primary-400\\\\/90{background-color:rgba(135,155,207,.9)}.sui-bg-primary-400\\\\/95{background-color:rgba(135,155,207,.95)}.sui-bg-primary-50{--tw-bg-opacity:1;background-color:rgb(240 242 249/var(--tw-bg-opacity,1))}.sui-bg-primary-50\\\\/0{background-color:rgba(240,242,249,0)}.sui-bg-primary-50\\\\/10{background-color:rgba(240,242,249,.1)}.sui-bg-primary-50\\\\/100{background-color:#f0f2f9}.sui-bg-primary-50\\\\/15{background-color:rgba(240,242,249,.15)}.sui-bg-primary-50\\\\/20{background-color:rgba(240,242,249,.2)}.sui-bg-primary-50\\\\/25{background-color:rgba(240,242,249,.25)}.sui-bg-primary-50\\\\/30{background-color:rgba(240,242,249,.3)}.sui-bg-primary-50\\\\/35{background-color:rgba(240,242,249,.35)}.sui-bg-primary-50\\\\/40{background-color:rgba(240,242,249,.4)}.sui-bg-primary-50\\\\/45{background-color:rgba(240,242,249,.45)}.sui-bg-primary-50\\\\/5{background-color:rgba(240,242,249,.05)}.sui-bg-primary-50\\\\/50{background-color:rgba(240,242,249,.5)}.sui-bg-primary-50\\\\/55{background-color:rgba(240,242,249,.55)}.sui-bg-primary-50\\\\/60{background-color:rgba(240,242,249,.6)}.sui-bg-primary-50\\\\/65{background-color:rgba(240,242,249,.65)}.sui-bg-primary-50\\\\/70{background-color:rgba(240,242,249,.7)}.sui-bg-primary-50\\\\/75{background-color:rgba(240,242,249,.75)}.sui-bg-primary-50\\\\/80{background-color:rgba(240,242,249,.8)}.sui-bg-primary-50\\\\/85{background-color:rgba(240,242,249,.85)}.sui-bg-primary-50\\\\/90{background-color:rgba(240,242,249,.9)}.sui-bg-primary-50\\\\/95{background-color:rgba(240,242,249,.95)}.sui-bg-primary-500{--tw-bg-opacity:1;background-color:rgb(54 73 155/var(--tw-bg-opacity,1))}.sui-bg-primary-500\\\\/0{background-color:rgba(54,73,155,0)}.sui-bg-primary-500\\\\/10{background-color:rgba(54,73,155,.1)}.sui-bg-primary-500\\\\/100{background-color:#36499b}.sui-bg-primary-500\\\\/15{background-color:rgba(54,73,155,.15)}.sui-bg-primary-500\\\\/20{background-color:rgba(54,73,155,.2)}.sui-bg-primary-500\\\\/25{background-color:rgba(54,73,155,.25)}.sui-bg-primary-500\\\\/30{background-color:rgba(54,73,155,.3)}.sui-bg-primary-500\\\\/35{background-color:rgba(54,73,155,.35)}.sui-bg-primary-500\\\\/40{background-color:rgba(54,73,155,.4)}.sui-bg-primary-500\\\\/45{background-color:rgba(54,73,155,.45)}.sui-bg-primary-500\\\\/5{background-color:rgba(54,73,155,.05)}.sui-bg-primary-500\\\\/50{background-color:rgba(54,73,155,.5)}.sui-bg-primary-500\\\\/55{background-color:rgba(54,73,155,.55)}.sui-bg-primary-500\\\\/60{background-color:rgba(54,73,155,.6)}.sui-bg-primary-500\\\\/65{background-color:rgba(54,73,155,.65)}.sui-bg-primary-500\\\\/70{background-color:rgba(54,73,155,.7)}.sui-bg-primary-500\\\\/75{background-color:rgba(54,73,155,.75)}.sui-bg-primary-500\\\\/80{background-color:rgba(54,73,155,.8)}.sui-bg-primary-500\\\\/85{background-color:rgba(54,73,155,.85)}.sui-bg-primary-500\\\\/90{background-color:rgba(54,73,155,.9)}.sui-bg-primary-500\\\\/95{background-color:rgba(54,73,155,.95)}.sui-bg-primary-600{--tw-bg-opacity:1;background-color:rgb(43 58 124/var(--tw-bg-opacity,1))}.sui-bg-primary-600\\\\/0{background-color:rgba(43,58,124,0)}.sui-bg-primary-600\\\\/10{background-color:rgba(43,58,124,.1)}.sui-bg-primary-600\\\\/100{background-color:#2b3a7c}.sui-bg-primary-600\\\\/15{background-color:rgba(43,58,124,.15)}.sui-bg-primary-600\\\\/20{background-color:rgba(43,58,124,.2)}.sui-bg-primary-600\\\\/25{background-color:rgba(43,58,124,.25)}.sui-bg-primary-600\\\\/30{background-color:rgba(43,58,124,.3)}.sui-bg-primary-600\\\\/35{background-color:rgba(43,58,124,.35)}.sui-bg-primary-600\\\\/40{background-color:rgba(43,58,124,.4)}.sui-bg-primary-600\\\\/45{background-color:rgba(43,58,124,.45)}.sui-bg-primary-600\\\\/5{background-color:rgba(43,58,124,.05)}.sui-bg-primary-600\\\\/50{background-color:rgba(43,58,124,.5)}.sui-bg-primary-600\\\\/55{background-color:rgba(43,58,124,.55)}.sui-bg-primary-600\\\\/60{background-color:rgba(43,58,124,.6)}.sui-bg-primary-600\\\\/65{background-color:rgba(43,58,124,.65)}.sui-bg-primary-600\\\\/70{background-color:rgba(43,58,124,.7)}.sui-bg-primary-600\\\\/75{background-color:rgba(43,58,124,.75)}.sui-bg-primary-600\\\\/80{background-color:rgba(43,58,124,.8)}.sui-bg-primary-600\\\\/85{background-color:rgba(43,58,124,.85)}.sui-bg-primary-600\\\\/90{background-color:rgba(43,58,124,.9)}.sui-bg-primary-600\\\\/95{background-color:rgba(43,58,124,.95)}.sui-bg-primary-700{--tw-bg-opacity:1;background-color:rgb(32 43 93/var(--tw-bg-opacity,1))}.sui-bg-primary-700\\\\/0{background-color:rgba(32,43,93,0)}.sui-bg-primary-700\\\\/10{background-color:rgba(32,43,93,.1)}.sui-bg-primary-700\\\\/100{background-color:#202b5d}.sui-bg-primary-700\\\\/15{background-color:rgba(32,43,93,.15)}.sui-bg-primary-700\\\\/20{background-color:rgba(32,43,93,.2)}.sui-bg-primary-700\\\\/25{background-color:rgba(32,43,93,.25)}.sui-bg-primary-700\\\\/30{background-color:rgba(32,43,93,.3)}.sui-bg-primary-700\\\\/35{background-color:rgba(32,43,93,.35)}.sui-bg-primary-700\\\\/40{background-color:rgba(32,43,93,.4)}.sui-bg-primary-700\\\\/45{background-color:rgba(32,43,93,.45)}.sui-bg-primary-700\\\\/5{background-color:rgba(32,43,93,.05)}.sui-bg-primary-700\\\\/50{background-color:rgba(32,43,93,.5)}.sui-bg-primary-700\\\\/55{background-color:rgba(32,43,93,.55)}.sui-bg-primary-700\\\\/60{background-color:rgba(32,43,93,.6)}.sui-bg-primary-700\\\\/65{background-color:rgba(32,43,93,.65)}.sui-bg-primary-700\\\\/70{background-color:rgba(32,43,93,.7)}.sui-bg-primary-700\\\\/75{background-color:rgba(32,43,93,.75)}.sui-bg-primary-700\\\\/80{background-color:rgba(32,43,93,.8)}.sui-bg-primary-700\\\\/85{background-color:rgba(32,43,93,.85)}.sui-bg-primary-700\\\\/90{background-color:rgba(32,43,93,.9)}.sui-bg-primary-700\\\\/95{background-color:rgba(32,43,93,.95)}.sui-bg-primary-800{--tw-bg-opacity:1;background-color:rgb(22 29 62/var(--tw-bg-opacity,1))}.sui-bg-primary-800\\\\/0{background-color:rgba(22,29,62,0)}.sui-bg-primary-800\\\\/10{background-color:rgba(22,29,62,.1)}.sui-bg-primary-800\\\\/100{background-color:#161d3e}.sui-bg-primary-800\\\\/15{background-color:rgba(22,29,62,.15)}.sui-bg-primary-800\\\\/20{background-color:rgba(22,29,62,.2)}.sui-bg-primary-800\\\\/25{background-color:rgba(22,29,62,.25)}.sui-bg-primary-800\\\\/30{background-color:rgba(22,29,62,.3)}.sui-bg-primary-800\\\\/35{background-color:rgba(22,29,62,.35)}.sui-bg-primary-800\\\\/40{background-color:rgba(22,29,62,.4)}.sui-bg-primary-800\\\\/45{background-color:rgba(22,29,62,.45)}.sui-bg-primary-800\\\\/5{background-color:rgba(22,29,62,.05)}.sui-bg-primary-800\\\\/50{background-color:rgba(22,29,62,.5)}.sui-bg-primary-800\\\\/55{background-color:rgba(22,29,62,.55)}.sui-bg-primary-800\\\\/60{background-color:rgba(22,29,62,.6)}.sui-bg-primary-800\\\\/65{background-color:rgba(22,29,62,.65)}.sui-bg-primary-800\\\\/70{background-color:rgba(22,29,62,.7)}.sui-bg-primary-800\\\\/75{background-color:rgba(22,29,62,.75)}.sui-bg-primary-800\\\\/80{background-color:rgba(22,29,62,.8)}.sui-bg-primary-800\\\\/85{background-color:rgba(22,29,62,.85)}.sui-bg-primary-800\\\\/90{background-color:rgba(22,29,62,.9)}.sui-bg-primary-800\\\\/95{background-color:rgba(22,29,62,.95)}.sui-bg-primary-900{--tw-bg-opacity:1;background-color:rgb(11 14 31/var(--tw-bg-opacity,1))}.sui-bg-primary-900\\\\/0{background-color:rgba(11,14,31,0)}.sui-bg-primary-900\\\\/10{background-color:rgba(11,14,31,.1)}.sui-bg-primary-900\\\\/100{background-color:#0b0e1f}.sui-bg-primary-900\\\\/15{background-color:rgba(11,14,31,.15)}.sui-bg-primary-900\\\\/20{background-color:rgba(11,14,31,.2)}.sui-bg-primary-900\\\\/25{background-color:rgba(11,14,31,.25)}.sui-bg-primary-900\\\\/30{background-color:rgba(11,14,31,.3)}.sui-bg-primary-900\\\\/35{background-color:rgba(11,14,31,.35)}.sui-bg-primary-900\\\\/40{background-color:rgba(11,14,31,.4)}.sui-bg-primary-900\\\\/45{background-color:rgba(11,14,31,.45)}.sui-bg-primary-900\\\\/5{background-color:rgba(11,14,31,.05)}.sui-bg-primary-900\\\\/50{background-color:rgba(11,14,31,.5)}.sui-bg-primary-900\\\\/55{background-color:rgba(11,14,31,.55)}.sui-bg-primary-900\\\\/60{background-color:rgba(11,14,31,.6)}.sui-bg-primary-900\\\\/65{background-color:rgba(11,14,31,.65)}.sui-bg-primary-900\\\\/70{background-color:rgba(11,14,31,.7)}.sui-bg-primary-900\\\\/75{background-color:rgba(11,14,31,.75)}.sui-bg-primary-900\\\\/80{background-color:rgba(11,14,31,.8)}.sui-bg-primary-900\\\\/85{background-color:rgba(11,14,31,.85)}.sui-bg-primary-900\\\\/90{background-color:rgba(11,14,31,.9)}.sui-bg-primary-900\\\\/95{background-color:rgba(11,14,31,.95)}.sui-bg-primary\\\\/0{background-color:rgba(54,73,155,0)}.sui-bg-primary\\\\/10{background-color:rgba(54,73,155,.1)}.sui-bg-primary\\\\/100{background-color:#36499b}.sui-bg-primary\\\\/15{background-color:rgba(54,73,155,.15)}.sui-bg-primary\\\\/20{background-color:rgba(54,73,155,.2)}.sui-bg-primary\\\\/25{background-color:rgba(54,73,155,.25)}.sui-bg-primary\\\\/30{background-color:rgba(54,73,155,.3)}.sui-bg-primary\\\\/35{background-color:rgba(54,73,155,.35)}.sui-bg-primary\\\\/40{background-color:rgba(54,73,155,.4)}.sui-bg-primary\\\\/45{background-color:rgba(54,73,155,.45)}.sui-bg-primary\\\\/5{background-color:rgba(54,73,155,.05)}.sui-bg-primary\\\\/50{background-color:rgba(54,73,155,.5)}.sui-bg-primary\\\\/55{background-color:rgba(54,73,155,.55)}.sui-bg-primary\\\\/60{background-color:rgba(54,73,155,.6)}.sui-bg-primary\\\\/65{background-color:rgba(54,73,155,.65)}.sui-bg-primary\\\\/70{background-color:rgba(54,73,155,.7)}.sui-bg-primary\\\\/75{background-color:rgba(54,73,155,.75)}.sui-bg-primary\\\\/80{background-color:rgba(54,73,155,.8)}.sui-bg-primary\\\\/85{background-color:rgba(54,73,155,.85)}.sui-bg-primary\\\\/90{background-color:rgba(54,73,155,.9)}.sui-bg-primary\\\\/95{background-color:rgba(54,73,155,.95)}.sui-bg-secondary{--tw-bg-opacity:1;background-color:rgb(242 246 252/var(--tw-bg-opacity,1))}.sui-bg-secondary-1{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.sui-bg-secondary-1\\\\/0{background-color:hsla(0,0%,100%,0)}.sui-bg-secondary-1\\\\/10{background-color:hsla(0,0%,100%,.1)}.sui-bg-secondary-1\\\\/100{background-color:#fff}.sui-bg-secondary-1\\\\/15{background-color:hsla(0,0%,100%,.15)}.sui-bg-secondary-1\\\\/20{background-color:hsla(0,0%,100%,.2)}.sui-bg-secondary-1\\\\/25{background-color:hsla(0,0%,100%,.25)}.sui-bg-secondary-1\\\\/30{background-color:hsla(0,0%,100%,.3)}.sui-bg-secondary-1\\\\/35{background-color:hsla(0,0%,100%,.35)}.sui-bg-secondary-1\\\\/40{background-color:hsla(0,0%,100%,.4)}.sui-bg-secondary-1\\\\/45{background-color:hsla(0,0%,100%,.45)}.sui-bg-secondary-1\\\\/5{background-color:hsla(0,0%,100%,.05)}.sui-bg-secondary-1\\\\/50{background-color:hsla(0,0%,100%,.5)}.sui-bg-secondary-1\\\\/55{background-color:hsla(0,0%,100%,.55)}.sui-bg-secondary-1\\\\/60{background-color:hsla(0,0%,100%,.6)}.sui-bg-secondary-1\\\\/65{background-color:hsla(0,0%,100%,.65)}.sui-bg-secondary-1\\\\/70{background-color:hsla(0,0%,100%,.7)}.sui-bg-secondary-1\\\\/75{background-color:hsla(0,0%,100%,.75)}.sui-bg-secondary-1\\\\/80{background-color:hsla(0,0%,100%,.8)}.sui-bg-secondary-1\\\\/85{background-color:hsla(0,0%,100%,.85)}.sui-bg-secondary-1\\\\/90{background-color:hsla(0,0%,100%,.9)}.sui-bg-secondary-1\\\\/95{background-color:hsla(0,0%,100%,.95)}.sui-bg-secondary-2{--tw-bg-opacity:1;background-color:rgb(225 234 248/var(--tw-bg-opacity,1))}.sui-bg-secondary-2\\\\/0{background-color:rgba(225,234,248,0)}.sui-bg-secondary-2\\\\/10{background-color:rgba(225,234,248,.1)}.sui-bg-secondary-2\\\\/100{background-color:#e1eaf8}.sui-bg-secondary-2\\\\/15{background-color:rgba(225,234,248,.15)}.sui-bg-secondary-2\\\\/20{background-color:rgba(225,234,248,.2)}.sui-bg-secondary-2\\\\/25{background-color:rgba(225,234,248,.25)}.sui-bg-secondary-2\\\\/30{background-color:rgba(225,234,248,.3)}.sui-bg-secondary-2\\\\/35{background-color:rgba(225,234,248,.35)}.sui-bg-secondary-2\\\\/40{background-color:rgba(225,234,248,.4)}.sui-bg-secondary-2\\\\/45{background-color:rgba(225,234,248,.45)}.sui-bg-secondary-2\\\\/5{background-color:rgba(225,234,248,.05)}.sui-bg-secondary-2\\\\/50{background-color:rgba(225,234,248,.5)}.sui-bg-secondary-2\\\\/55{background-color:rgba(225,234,248,.55)}.sui-bg-secondary-2\\\\/60{background-color:rgba(225,234,248,.6)}.sui-bg-secondary-2\\\\/65{background-color:rgba(225,234,248,.65)}.sui-bg-secondary-2\\\\/70{background-color:rgba(225,234,248,.7)}.sui-bg-secondary-2\\\\/75{background-color:rgba(225,234,248,.75)}.sui-bg-secondary-2\\\\/80{background-color:rgba(225,234,248,.8)}.sui-bg-secondary-2\\\\/85{background-color:rgba(225,234,248,.85)}.sui-bg-secondary-2\\\\/90{background-color:rgba(225,234,248,.9)}.sui-bg-secondary-2\\\\/95{background-color:rgba(225,234,248,.95)}.sui-bg-secondary-3{--tw-bg-opacity:1;background-color:rgb(201 218 244/var(--tw-bg-opacity,1))}.sui-bg-secondary-3\\\\/0{background-color:rgba(201,218,244,0)}.sui-bg-secondary-3\\\\/10{background-color:rgba(201,218,244,.1)}.sui-bg-secondary-3\\\\/100{background-color:#c9daf4}.sui-bg-secondary-3\\\\/15{background-color:rgba(201,218,244,.15)}.sui-bg-secondary-3\\\\/20{background-color:rgba(201,218,244,.2)}.sui-bg-secondary-3\\\\/25{background-color:rgba(201,218,244,.25)}.sui-bg-secondary-3\\\\/30{background-color:rgba(201,218,244,.3)}.sui-bg-secondary-3\\\\/35{background-color:rgba(201,218,244,.35)}.sui-bg-secondary-3\\\\/40{background-color:rgba(201,218,244,.4)}.sui-bg-secondary-3\\\\/45{background-color:rgba(201,218,244,.45)}.sui-bg-secondary-3\\\\/5{background-color:rgba(201,218,244,.05)}.sui-bg-secondary-3\\\\/50{background-color:rgba(201,218,244,.5)}.sui-bg-secondary-3\\\\/55{background-color:rgba(201,218,244,.55)}.sui-bg-secondary-3\\\\/60{background-color:rgba(201,218,244,.6)}.sui-bg-secondary-3\\\\/65{background-color:rgba(201,218,244,.65)}.sui-bg-secondary-3\\\\/70{background-color:rgba(201,218,244,.7)}.sui-bg-secondary-3\\\\/75{background-color:rgba(201,218,244,.75)}.sui-bg-secondary-3\\\\/80{background-color:rgba(201,218,244,.8)}.sui-bg-secondary-3\\\\/85{background-color:rgba(201,218,244,.85)}.sui-bg-secondary-3\\\\/90{background-color:rgba(201,218,244,.9)}.sui-bg-secondary-3\\\\/95{background-color:rgba(201,218,244,.95)}.sui-bg-secondary\\\\/0{background-color:rgba(242,246,252,0)}.sui-bg-secondary\\\\/10{background-color:rgba(242,246,252,.1)}.sui-bg-secondary\\\\/100{background-color:#f2f6fc}.sui-bg-secondary\\\\/15{background-color:rgba(242,246,252,.15)}.sui-bg-secondary\\\\/20{background-color:rgba(242,246,252,.2)}.sui-bg-secondary\\\\/25{background-color:rgba(242,246,252,.25)}.sui-bg-secondary\\\\/30{background-color:rgba(242,246,252,.3)}.sui-bg-secondary\\\\/35{background-color:rgba(242,246,252,.35)}.sui-bg-secondary\\\\/40{background-color:rgba(242,246,252,.4)}.sui-bg-secondary\\\\/45{background-color:rgba(242,246,252,.45)}.sui-bg-secondary\\\\/5{background-color:rgba(242,246,252,.05)}.sui-bg-secondary\\\\/50{background-color:rgba(242,246,252,.5)}.sui-bg-secondary\\\\/55{background-color:rgba(242,246,252,.55)}.sui-bg-secondary\\\\/60{background-color:rgba(242,246,252,.6)}.sui-bg-secondary\\\\/65{background-color:rgba(242,246,252,.65)}.sui-bg-secondary\\\\/70{background-color:rgba(242,246,252,.7)}.sui-bg-secondary\\\\/75{background-color:rgba(242,246,252,.75)}.sui-bg-secondary\\\\/80{background-color:rgba(242,246,252,.8)}.sui-bg-secondary\\\\/85{background-color:rgba(242,246,252,.85)}.sui-bg-secondary\\\\/90{background-color:rgba(242,246,252,.9)}.sui-bg-secondary\\\\/95{background-color:rgba(242,246,252,.95)}.sui-bg-stroke-level2{--tw-bg-opacity:1;background-color:rgb(178 187 199/var(--tw-bg-opacity,1))}.sui-bg-stroke-level3{--tw-bg-opacity:1;background-color:rgb(222 227 231/var(--tw-bg-opacity,1))}.sui-bg-success{--tw-bg-opacity:1;background-color:rgb(34 188 77/var(--tw-bg-opacity,1))}.sui-bg-success\\\\/0{background-color:rgba(34,188,77,0)}.sui-bg-success\\\\/10{background-color:rgba(34,188,77,.1)}.sui-bg-success\\\\/100{background-color:#22bc4d}.sui-bg-success\\\\/15{background-color:rgba(34,188,77,.15)}.sui-bg-success\\\\/20{background-color:rgba(34,188,77,.2)}.sui-bg-success\\\\/25{background-color:rgba(34,188,77,.25)}.sui-bg-success\\\\/30{background-color:rgba(34,188,77,.3)}.sui-bg-success\\\\/35{background-color:rgba(34,188,77,.35)}.sui-bg-success\\\\/40{background-color:rgba(34,188,77,.4)}.sui-bg-success\\\\/45{background-color:rgba(34,188,77,.45)}.sui-bg-success\\\\/5{background-color:rgba(34,188,77,.05)}.sui-bg-success\\\\/50{background-color:rgba(34,188,77,.5)}.sui-bg-success\\\\/55{background-color:rgba(34,188,77,.55)}.sui-bg-success\\\\/60{background-color:rgba(34,188,77,.6)}.sui-bg-success\\\\/65{background-color:rgba(34,188,77,.65)}.sui-bg-success\\\\/70{background-color:rgba(34,188,77,.7)}.sui-bg-success\\\\/75{background-color:rgba(34,188,77,.75)}.sui-bg-success\\\\/80{background-color:rgba(34,188,77,.8)}.sui-bg-success\\\\/85{background-color:rgba(34,188,77,.85)}.sui-bg-success\\\\/90{background-color:rgba(34,188,77,.9)}.sui-bg-success\\\\/95{background-color:rgba(34,188,77,.95)}.sui-bg-transparent{background-color:transparent}.sui-bg-warning{--tw-bg-opacity:1;background-color:rgb(255 122 0/var(--tw-bg-opacity,1))}.sui-bg-warning\\\\/0{background-color:rgba(255,122,0,0)}.sui-bg-warning\\\\/10{background-color:rgba(255,122,0,.1)}.sui-bg-warning\\\\/100{background-color:#ff7a00}.sui-bg-warning\\\\/15{background-color:rgba(255,122,0,.15)}.sui-bg-warning\\\\/20{background-color:rgba(255,122,0,.2)}.sui-bg-warning\\\\/25{background-color:rgba(255,122,0,.25)}.sui-bg-warning\\\\/30{background-color:rgba(255,122,0,.3)}.sui-bg-warning\\\\/35{background-color:rgba(255,122,0,.35)}.sui-bg-warning\\\\/40{background-color:rgba(255,122,0,.4)}.sui-bg-warning\\\\/45{background-color:rgba(255,122,0,.45)}.sui-bg-warning\\\\/5{background-color:rgba(255,122,0,.05)}.sui-bg-warning\\\\/50{background-color:rgba(255,122,0,.5)}.sui-bg-warning\\\\/55{background-color:rgba(255,122,0,.55)}.sui-bg-warning\\\\/60{background-color:rgba(255,122,0,.6)}.sui-bg-warning\\\\/65{background-color:rgba(255,122,0,.65)}.sui-bg-warning\\\\/70{background-color:rgba(255,122,0,.7)}.sui-bg-warning\\\\/75{background-color:rgba(255,122,0,.75)}.sui-bg-warning\\\\/80{background-color:rgba(255,122,0,.8)}.sui-bg-warning\\\\/85{background-color:rgba(255,122,0,.85)}.sui-bg-warning\\\\/90{background-color:rgba(255,122,0,.9)}.sui-bg-warning\\\\/95{background-color:rgba(255,122,0,.95)}.sui-bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.sui-bg-white\\\\/20{background-color:hsla(0,0%,100%,.2)}.sui-bg-white\\\\/5{background-color:hsla(0,0%,100%,.05)}.sui-bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.sui-from-primary{--tw-gradient-from:#36499b var(--tw-gradient-from-position);--tw-gradient-to:rgba(54,73,155,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.sui-to-primary{--tw-gradient-to:#36499b var(--tw-gradient-to-position)}.sui-to-primary\\\\/90{--tw-gradient-to:rgba(54,73,155,.9) var(--tw-gradient-to-position)}.sui-fill-error{fill:#ea3540}.sui-fill-primary{fill:#36499b}.sui-stroke-error{stroke:#ea3540}.sui-stroke-inactive{stroke:#777e90}.sui-stroke-primary{stroke:#36499b}.sui-object-contain{-o-object-fit:contain;object-fit:contain}.sui-object-cover{-o-object-fit:cover;object-fit:cover}.sui-p-0{padding:0}.sui-p-1{padding:.25rem}.sui-p-2{padding:.5rem}.sui-p-3{padding:.75rem}.sui-p-4{padding:1rem}.sui-p-5{padding:1.25rem}.sui-p-6{padding:1.5rem}.sui-p-8{padding:2rem}.sui-p-\\\\[2px\\\\]{padding:2px}.sui-px-0{padding-left:0;padding-right:0}.sui-px-1{padding-left:.25rem;padding-right:.25rem}.sui-px-1\\\\.5{padding-left:.375rem;padding-right:.375rem}.sui-px-10{padding-left:2.5rem;padding-right:2.5rem}.sui-px-2{padding-left:.5rem;padding-right:.5rem}.sui-px-3{padding-left:.75rem;padding-right:.75rem}.sui-px-4{padding-left:1rem;padding-right:1rem}.sui-px-8{padding-left:2rem;padding-right:2rem}.sui-py-0{padding-top:0;padding-bottom:0}.sui-py-0\\\\.5{padding-top:.125rem;padding-bottom:.125rem}.sui-py-1{padding-top:.25rem;padding-bottom:.25rem}.sui-py-12{padding-top:3rem;padding-bottom:3rem}.sui-py-2{padding-top:.5rem;padding-bottom:.5rem}.sui-py-2\\\\.5{padding-top:.625rem;padding-bottom:.625rem}.sui-py-3{padding-top:.75rem;padding-bottom:.75rem}.sui-py-6{padding-top:1.5rem;padding-bottom:1.5rem}.sui-py-8{padding-top:2rem;padding-bottom:2rem}.sui-pl-10{padding-left:2.5rem}.sui-pl-5{padding-left:1.25rem}.sui-pr-1{padding-right:.25rem}.sui-pr-10{padding-right:2.5rem}.sui-pr-3{padding-right:.75rem}.sui-pr-4{padding-right:1rem}.sui-pt-2{padding-top:.5rem}.sui-pt-4{padding-top:1rem}.sui-pt-\\\\[2px\\\\]{padding-top:2px}.sui-text-left{text-align:left}.sui-text-center{text-align:center}.sui-align-middle{vertical-align:middle}.sui-text-12{font-size:.75rem}.sui-text-12,.sui-text-14{line-height:150%;letter-spacing:-.02em}.sui-text-14{font-size:.875rem}.sui-text-16{font-size:1rem}.sui-text-16,.sui-text-20{line-height:150%;letter-spacing:-.02em}.sui-text-20{font-size:1.25rem}.sui-text-24{font-size:1.5rem;line-height:150%;letter-spacing:-.02em}.sui-text-lg{font-size:1.125rem;line-height:1.75rem}.sui-text-sm{font-size:.875rem;line-height:1.25rem}.sui-text-xs{font-size:.75rem;line-height:1rem}.sui-font-bold{font-weight:700}.sui-font-medium{font-weight:500}.sui-font-normal{font-weight:400}.sui-font-semibold{font-weight:600}.sui-uppercase{text-transform:uppercase}.sui-capitalize{text-transform:capitalize}.sui-italic{font-style:italic}.sui-leading-\\\\[100\\\\%\\\\]{line-height:100%}.sui-leading-\\\\[150\\\\%\\\\]{line-height:150%}.sui-leading-none{line-height:1}.sui-tracking-\\\\[-0\\\\.01em\\\\]{letter-spacing:-.01em}.sui-tracking-\\\\[0\\\\.12em\\\\]{letter-spacing:.12em}.sui-tracking-wide{letter-spacing:.025em}.sui-text-\\\\[\\\\#777E90\\\\]{--tw-text-opacity:1;color:rgb(119 126 144/var(--tw-text-opacity,1))}.sui-text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.sui-text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.sui-text-current{color:currentColor}.sui-text-disabled{--tw-text-opacity:1;color:rgb(178 187 199/var(--tw-text-opacity,1))}.sui-text-disabled\\\\/0{color:rgba(178,187,199,0)}.sui-text-disabled\\\\/10{color:rgba(178,187,199,.1)}.sui-text-disabled\\\\/100{color:#b2bbc7}.sui-text-disabled\\\\/15{color:rgba(178,187,199,.15)}.sui-text-disabled\\\\/20{color:rgba(178,187,199,.2)}.sui-text-disabled\\\\/25{color:rgba(178,187,199,.25)}.sui-text-disabled\\\\/30{color:rgba(178,187,199,.3)}.sui-text-disabled\\\\/35{color:rgba(178,187,199,.35)}.sui-text-disabled\\\\/40{color:rgba(178,187,199,.4)}.sui-text-disabled\\\\/45{color:rgba(178,187,199,.45)}.sui-text-disabled\\\\/5{color:rgba(178,187,199,.05)}.sui-text-disabled\\\\/50{color:rgba(178,187,199,.5)}.sui-text-disabled\\\\/55{color:rgba(178,187,199,.55)}.sui-text-disabled\\\\/60{color:rgba(178,187,199,.6)}.sui-text-disabled\\\\/65{color:rgba(178,187,199,.65)}.sui-text-disabled\\\\/70{color:rgba(178,187,199,.7)}.sui-text-disabled\\\\/75{color:rgba(178,187,199,.75)}.sui-text-disabled\\\\/80{color:rgba(178,187,199,.8)}.sui-text-disabled\\\\/85{color:rgba(178,187,199,.85)}.sui-text-disabled\\\\/90{color:rgba(178,187,199,.9)}.sui-text-disabled\\\\/95{color:rgba(178,187,199,.95)}.sui-text-error{--tw-text-opacity:1;color:rgb(234 53 64/var(--tw-text-opacity,1))}.sui-text-error\\\\/0{color:rgba(234,53,64,0)}.sui-text-error\\\\/10{color:rgba(234,53,64,.1)}.sui-text-error\\\\/100{color:#ea3540}.sui-text-error\\\\/15{color:rgba(234,53,64,.15)}.sui-text-error\\\\/20{color:rgba(234,53,64,.2)}.sui-text-error\\\\/25{color:rgba(234,53,64,.25)}.sui-text-error\\\\/30{color:rgba(234,53,64,.3)}.sui-text-error\\\\/35{color:rgba(234,53,64,.35)}.sui-text-error\\\\/40{color:rgba(234,53,64,.4)}.sui-text-error\\\\/45{color:rgba(234,53,64,.45)}.sui-text-error\\\\/5{color:rgba(234,53,64,.05)}.sui-text-error\\\\/50{color:rgba(234,53,64,.5)}.sui-text-error\\\\/55{color:rgba(234,53,64,.55)}.sui-text-error\\\\/60{color:rgba(234,53,64,.6)}.sui-text-error\\\\/65{color:rgba(234,53,64,.65)}.sui-text-error\\\\/70{color:rgba(234,53,64,.7)}.sui-text-error\\\\/75{color:rgba(234,53,64,.75)}.sui-text-error\\\\/80{color:rgba(234,53,64,.8)}.sui-text-error\\\\/85{color:rgba(234,53,64,.85)}.sui-text-error\\\\/90{color:rgba(234,53,64,.9)}.sui-text-error\\\\/95{color:rgba(234,53,64,.95)}.sui-text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.sui-text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.sui-text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.sui-text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.sui-text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity,1))}.sui-text-icon-black{--tw-text-opacity:1;color:rgb(35 38 47/var(--tw-text-opacity,1))}.sui-text-icon-brand{--tw-text-opacity:1;color:rgb(54 73 155/var(--tw-text-opacity,1))}.sui-text-icon-grayLight{--tw-text-opacity:1;color:rgb(178 187 199/var(--tw-text-opacity,1))}.sui-text-inactive{--tw-text-opacity:1;color:rgb(119 126 144/var(--tw-text-opacity,1))}.sui-text-inactive\\\\/0{color:rgba(119,126,144,0)}.sui-text-inactive\\\\/10{color:rgba(119,126,144,.1)}.sui-text-inactive\\\\/100{color:#777e90}.sui-text-inactive\\\\/15{color:rgba(119,126,144,.15)}.sui-text-inactive\\\\/20{color:rgba(119,126,144,.2)}.sui-text-inactive\\\\/25{color:rgba(119,126,144,.25)}.sui-text-inactive\\\\/30{color:rgba(119,126,144,.3)}.sui-text-inactive\\\\/35{color:rgba(119,126,144,.35)}.sui-text-inactive\\\\/40{color:rgba(119,126,144,.4)}.sui-text-inactive\\\\/45{color:rgba(119,126,144,.45)}.sui-text-inactive\\\\/5{color:rgba(119,126,144,.05)}.sui-text-inactive\\\\/50{color:rgba(119,126,144,.5)}.sui-text-inactive\\\\/55{color:rgba(119,126,144,.55)}.sui-text-inactive\\\\/60{color:rgba(119,126,144,.6)}.sui-text-inactive\\\\/65{color:rgba(119,126,144,.65)}.sui-text-inactive\\\\/70{color:rgba(119,126,144,.7)}.sui-text-inactive\\\\/75{color:rgba(119,126,144,.75)}.sui-text-inactive\\\\/80{color:rgba(119,126,144,.8)}.sui-text-inactive\\\\/85{color:rgba(119,126,144,.85)}.sui-text-inactive\\\\/90{color:rgba(119,126,144,.9)}.sui-text-inactive\\\\/95{color:rgba(119,126,144,.95)}.sui-text-info{--tw-text-opacity:1;color:rgb(39 114 240/var(--tw-text-opacity,1))}.sui-text-info\\\\/0{color:rgba(39,114,240,0)}.sui-text-info\\\\/10{color:rgba(39,114,240,.1)}.sui-text-info\\\\/100{color:#2772f0}.sui-text-info\\\\/15{color:rgba(39,114,240,.15)}.sui-text-info\\\\/20{color:rgba(39,114,240,.2)}.sui-text-info\\\\/25{color:rgba(39,114,240,.25)}.sui-text-info\\\\/30{color:rgba(39,114,240,.3)}.sui-text-info\\\\/35{color:rgba(39,114,240,.35)}.sui-text-info\\\\/40{color:rgba(39,114,240,.4)}.sui-text-info\\\\/45{color:rgba(39,114,240,.45)}.sui-text-info\\\\/5{color:rgba(39,114,240,.05)}.sui-text-info\\\\/50{color:rgba(39,114,240,.5)}.sui-text-info\\\\/55{color:rgba(39,114,240,.55)}.sui-text-info\\\\/60{color:rgba(39,114,240,.6)}.sui-text-info\\\\/65{color:rgba(39,114,240,.65)}.sui-text-info\\\\/70{color:rgba(39,114,240,.7)}.sui-text-info\\\\/75{color:rgba(39,114,240,.75)}.sui-text-info\\\\/80{color:rgba(39,114,240,.8)}.sui-text-info\\\\/85{color:rgba(39,114,240,.85)}.sui-text-info\\\\/90{color:rgba(39,114,240,.9)}.sui-text-info\\\\/95{color:rgba(39,114,240,.95)}.sui-text-primary{--tw-text-opacity:1;color:rgb(54 73 155/var(--tw-text-opacity,1))}.sui-text-primary-100{--tw-text-opacity:1;color:rgb(225 230 243/var(--tw-text-opacity,1))}.sui-text-primary-100\\\\/0{color:rgba(225,230,243,0)}.sui-text-primary-100\\\\/10{color:rgba(225,230,243,.1)}.sui-text-primary-100\\\\/100{color:#e1e6f3}.sui-text-primary-100\\\\/15{color:rgba(225,230,243,.15)}.sui-text-primary-100\\\\/20{color:rgba(225,230,243,.2)}.sui-text-primary-100\\\\/25{color:rgba(225,230,243,.25)}.sui-text-primary-100\\\\/30{color:rgba(225,230,243,.3)}.sui-text-primary-100\\\\/35{color:rgba(225,230,243,.35)}.sui-text-primary-100\\\\/40{color:rgba(225,230,243,.4)}.sui-text-primary-100\\\\/45{color:rgba(225,230,243,.45)}.sui-text-primary-100\\\\/5{color:rgba(225,230,243,.05)}.sui-text-primary-100\\\\/50{color:rgba(225,230,243,.5)}.sui-text-primary-100\\\\/55{color:rgba(225,230,243,.55)}.sui-text-primary-100\\\\/60{color:rgba(225,230,243,.6)}.sui-text-primary-100\\\\/65{color:rgba(225,230,243,.65)}.sui-text-primary-100\\\\/70{color:rgba(225,230,243,.7)}.sui-text-primary-100\\\\/75{color:rgba(225,230,243,.75)}.sui-text-primary-100\\\\/80{color:rgba(225,230,243,.8)}.sui-text-primary-100\\\\/85{color:rgba(225,230,243,.85)}.sui-text-primary-100\\\\/90{color:rgba(225,230,243,.9)}.sui-text-primary-100\\\\/95{color:rgba(225,230,243,.95)}.sui-text-primary-200{--tw-text-opacity:1;color:rgb(195 205 231/var(--tw-text-opacity,1))}.sui-text-primary-200\\\\/0{color:rgba(195,205,231,0)}.sui-text-primary-200\\\\/10{color:rgba(195,205,231,.1)}.sui-text-primary-200\\\\/100{color:#c3cde7}.sui-text-primary-200\\\\/15{color:rgba(195,205,231,.15)}.sui-text-primary-200\\\\/20{color:rgba(195,205,231,.2)}.sui-text-primary-200\\\\/25{color:rgba(195,205,231,.25)}.sui-text-primary-200\\\\/30{color:rgba(195,205,231,.3)}.sui-text-primary-200\\\\/35{color:rgba(195,205,231,.35)}.sui-text-primary-200\\\\/40{color:rgba(195,205,231,.4)}.sui-text-primary-200\\\\/45{color:rgba(195,205,231,.45)}.sui-text-primary-200\\\\/5{color:rgba(195,205,231,.05)}.sui-text-primary-200\\\\/50{color:rgba(195,205,231,.5)}.sui-text-primary-200\\\\/55{color:rgba(195,205,231,.55)}.sui-text-primary-200\\\\/60{color:rgba(195,205,231,.6)}.sui-text-primary-200\\\\/65{color:rgba(195,205,231,.65)}.sui-text-primary-200\\\\/70{color:rgba(195,205,231,.7)}.sui-text-primary-200\\\\/75{color:rgba(195,205,231,.75)}.sui-text-primary-200\\\\/80{color:rgba(195,205,231,.8)}.sui-text-primary-200\\\\/85{color:rgba(195,205,231,.85)}.sui-text-primary-200\\\\/90{color:rgba(195,205,231,.9)}.sui-text-primary-200\\\\/95{color:rgba(195,205,231,.95)}.sui-text-primary-300{--tw-text-opacity:1;color:rgb(165 180 219/var(--tw-text-opacity,1))}.sui-text-primary-300\\\\/0{color:rgba(165,180,219,0)}.sui-text-primary-300\\\\/10{color:rgba(165,180,219,.1)}.sui-text-primary-300\\\\/100{color:#a5b4db}.sui-text-primary-300\\\\/15{color:rgba(165,180,219,.15)}.sui-text-primary-300\\\\/20{color:rgba(165,180,219,.2)}.sui-text-primary-300\\\\/25{color:rgba(165,180,219,.25)}.sui-text-primary-300\\\\/30{color:rgba(165,180,219,.3)}.sui-text-primary-300\\\\/35{color:rgba(165,180,219,.35)}.sui-text-primary-300\\\\/40{color:rgba(165,180,219,.4)}.sui-text-primary-300\\\\/45{color:rgba(165,180,219,.45)}.sui-text-primary-300\\\\/5{color:rgba(165,180,219,.05)}.sui-text-primary-300\\\\/50{color:rgba(165,180,219,.5)}.sui-text-primary-300\\\\/55{color:rgba(165,180,219,.55)}.sui-text-primary-300\\\\/60{color:rgba(165,180,219,.6)}.sui-text-primary-300\\\\/65{color:rgba(165,180,219,.65)}.sui-text-primary-300\\\\/70{color:rgba(165,180,219,.7)}.sui-text-primary-300\\\\/75{color:rgba(165,180,219,.75)}.sui-text-primary-300\\\\/80{color:rgba(165,180,219,.8)}.sui-text-primary-300\\\\/85{color:rgba(165,180,219,.85)}.sui-text-primary-300\\\\/90{color:rgba(165,180,219,.9)}.sui-text-primary-300\\\\/95{color:rgba(165,180,219,.95)}.sui-text-primary-400{--tw-text-opacity:1;color:rgb(135 155 207/var(--tw-text-opacity,1))}.sui-text-primary-400\\\\/0{color:rgba(135,155,207,0)}.sui-text-primary-400\\\\/10{color:rgba(135,155,207,.1)}.sui-text-primary-400\\\\/100{color:#879bcf}.sui-text-primary-400\\\\/15{color:rgba(135,155,207,.15)}.sui-text-primary-400\\\\/20{color:rgba(135,155,207,.2)}.sui-text-primary-400\\\\/25{color:rgba(135,155,207,.25)}.sui-text-primary-400\\\\/30{color:rgba(135,155,207,.3)}.sui-text-primary-400\\\\/35{color:rgba(135,155,207,.35)}.sui-text-primary-400\\\\/40{color:rgba(135,155,207,.4)}.sui-text-primary-400\\\\/45{color:rgba(135,155,207,.45)}.sui-text-primary-400\\\\/5{color:rgba(135,155,207,.05)}.sui-text-primary-400\\\\/50{color:rgba(135,155,207,.5)}.sui-text-primary-400\\\\/55{color:rgba(135,155,207,.55)}.sui-text-primary-400\\\\/60{color:rgba(135,155,207,.6)}.sui-text-primary-400\\\\/65{color:rgba(135,155,207,.65)}.sui-text-primary-400\\\\/70{color:rgba(135,155,207,.7)}.sui-text-primary-400\\\\/75{color:rgba(135,155,207,.75)}.sui-text-primary-400\\\\/80{color:rgba(135,155,207,.8)}.sui-text-primary-400\\\\/85{color:rgba(135,155,207,.85)}.sui-text-primary-400\\\\/90{color:rgba(135,155,207,.9)}.sui-text-primary-400\\\\/95{color:rgba(135,155,207,.95)}.sui-text-primary-50{--tw-text-opacity:1;color:rgb(240 242 249/var(--tw-text-opacity,1))}.sui-text-primary-50\\\\/0{color:rgba(240,242,249,0)}.sui-text-primary-50\\\\/10{color:rgba(240,242,249,.1)}.sui-text-primary-50\\\\/100{color:#f0f2f9}.sui-text-primary-50\\\\/15{color:rgba(240,242,249,.15)}.sui-text-primary-50\\\\/20{color:rgba(240,242,249,.2)}.sui-text-primary-50\\\\/25{color:rgba(240,242,249,.25)}.sui-text-primary-50\\\\/30{color:rgba(240,242,249,.3)}.sui-text-primary-50\\\\/35{color:rgba(240,242,249,.35)}.sui-text-primary-50\\\\/40{color:rgba(240,242,249,.4)}.sui-text-primary-50\\\\/45{color:rgba(240,242,249,.45)}.sui-text-primary-50\\\\/5{color:rgba(240,242,249,.05)}.sui-text-primary-50\\\\/50{color:rgba(240,242,249,.5)}.sui-text-primary-50\\\\/55{color:rgba(240,242,249,.55)}.sui-text-primary-50\\\\/60{color:rgba(240,242,249,.6)}.sui-text-primary-50\\\\/65{color:rgba(240,242,249,.65)}.sui-text-primary-50\\\\/70{color:rgba(240,242,249,.7)}.sui-text-primary-50\\\\/75{color:rgba(240,242,249,.75)}.sui-text-primary-50\\\\/80{color:rgba(240,242,249,.8)}.sui-text-primary-50\\\\/85{color:rgba(240,242,249,.85)}.sui-text-primary-50\\\\/90{color:rgba(240,242,249,.9)}.sui-text-primary-50\\\\/95{color:rgba(240,242,249,.95)}.sui-text-primary-500{--tw-text-opacity:1;color:rgb(54 73 155/var(--tw-text-opacity,1))}.sui-text-primary-500\\\\/0{color:rgba(54,73,155,0)}.sui-text-primary-500\\\\/10{color:rgba(54,73,155,.1)}.sui-text-primary-500\\\\/100{color:#36499b}.sui-text-primary-500\\\\/15{color:rgba(54,73,155,.15)}.sui-text-primary-500\\\\/20{color:rgba(54,73,155,.2)}.sui-text-primary-500\\\\/25{color:rgba(54,73,155,.25)}.sui-text-primary-500\\\\/30{color:rgba(54,73,155,.3)}.sui-text-primary-500\\\\/35{color:rgba(54,73,155,.35)}.sui-text-primary-500\\\\/40{color:rgba(54,73,155,.4)}.sui-text-primary-500\\\\/45{color:rgba(54,73,155,.45)}.sui-text-primary-500\\\\/5{color:rgba(54,73,155,.05)}.sui-text-primary-500\\\\/50{color:rgba(54,73,155,.5)}.sui-text-primary-500\\\\/55{color:rgba(54,73,155,.55)}.sui-text-primary-500\\\\/60{color:rgba(54,73,155,.6)}.sui-text-primary-500\\\\/65{color:rgba(54,73,155,.65)}.sui-text-primary-500\\\\/70{color:rgba(54,73,155,.7)}.sui-text-primary-500\\\\/75{color:rgba(54,73,155,.75)}.sui-text-primary-500\\\\/80{color:rgba(54,73,155,.8)}.sui-text-primary-500\\\\/85{color:rgba(54,73,155,.85)}.sui-text-primary-500\\\\/90{color:rgba(54,73,155,.9)}.sui-text-primary-500\\\\/95{color:rgba(54,73,155,.95)}.sui-text-primary-600{--tw-text-opacity:1;color:rgb(43 58 124/var(--tw-text-opacity,1))}.sui-text-primary-600\\\\/0{color:rgba(43,58,124,0)}.sui-text-primary-600\\\\/10{color:rgba(43,58,124,.1)}.sui-text-primary-600\\\\/100{color:#2b3a7c}.sui-text-primary-600\\\\/15{color:rgba(43,58,124,.15)}.sui-text-primary-600\\\\/20{color:rgba(43,58,124,.2)}.sui-text-primary-600\\\\/25{color:rgba(43,58,124,.25)}.sui-text-primary-600\\\\/30{color:rgba(43,58,124,.3)}.sui-text-primary-600\\\\/35{color:rgba(43,58,124,.35)}.sui-text-primary-600\\\\/40{color:rgba(43,58,124,.4)}.sui-text-primary-600\\\\/45{color:rgba(43,58,124,.45)}.sui-text-primary-600\\\\/5{color:rgba(43,58,124,.05)}.sui-text-primary-600\\\\/50{color:rgba(43,58,124,.5)}.sui-text-primary-600\\\\/55{color:rgba(43,58,124,.55)}.sui-text-primary-600\\\\/60{color:rgba(43,58,124,.6)}.sui-text-primary-600\\\\/65{color:rgba(43,58,124,.65)}.sui-text-primary-600\\\\/70{color:rgba(43,58,124,.7)}.sui-text-primary-600\\\\/75{color:rgba(43,58,124,.75)}.sui-text-primary-600\\\\/80{color:rgba(43,58,124,.8)}.sui-text-primary-600\\\\/85{color:rgba(43,58,124,.85)}.sui-text-primary-600\\\\/90{color:rgba(43,58,124,.9)}.sui-text-primary-600\\\\/95{color:rgba(43,58,124,.95)}.sui-text-primary-700{--tw-text-opacity:1;color:rgb(32 43 93/var(--tw-text-opacity,1))}.sui-text-primary-700\\\\/0{color:rgba(32,43,93,0)}.sui-text-primary-700\\\\/10{color:rgba(32,43,93,.1)}.sui-text-primary-700\\\\/100{color:#202b5d}.sui-text-primary-700\\\\/15{color:rgba(32,43,93,.15)}.sui-text-primary-700\\\\/20{color:rgba(32,43,93,.2)}.sui-text-primary-700\\\\/25{color:rgba(32,43,93,.25)}.sui-text-primary-700\\\\/30{color:rgba(32,43,93,.3)}.sui-text-primary-700\\\\/35{color:rgba(32,43,93,.35)}.sui-text-primary-700\\\\/40{color:rgba(32,43,93,.4)}.sui-text-primary-700\\\\/45{color:rgba(32,43,93,.45)}.sui-text-primary-700\\\\/5{color:rgba(32,43,93,.05)}.sui-text-primary-700\\\\/50{color:rgba(32,43,93,.5)}.sui-text-primary-700\\\\/55{color:rgba(32,43,93,.55)}.sui-text-primary-700\\\\/60{color:rgba(32,43,93,.6)}.sui-text-primary-700\\\\/65{color:rgba(32,43,93,.65)}.sui-text-primary-700\\\\/70{color:rgba(32,43,93,.7)}.sui-text-primary-700\\\\/75{color:rgba(32,43,93,.75)}.sui-text-primary-700\\\\/80{color:rgba(32,43,93,.8)}.sui-text-primary-700\\\\/85{color:rgba(32,43,93,.85)}.sui-text-primary-700\\\\/90{color:rgba(32,43,93,.9)}.sui-text-primary-700\\\\/95{color:rgba(32,43,93,.95)}.sui-text-primary-800{--tw-text-opacity:1;color:rgb(22 29 62/var(--tw-text-opacity,1))}.sui-text-primary-800\\\\/0{color:rgba(22,29,62,0)}.sui-text-primary-800\\\\/10{color:rgba(22,29,62,.1)}.sui-text-primary-800\\\\/100{color:#161d3e}.sui-text-primary-800\\\\/15{color:rgba(22,29,62,.15)}.sui-text-primary-800\\\\/20{color:rgba(22,29,62,.2)}.sui-text-primary-800\\\\/25{color:rgba(22,29,62,.25)}.sui-text-primary-800\\\\/30{color:rgba(22,29,62,.3)}.sui-text-primary-800\\\\/35{color:rgba(22,29,62,.35)}.sui-text-primary-800\\\\/40{color:rgba(22,29,62,.4)}.sui-text-primary-800\\\\/45{color:rgba(22,29,62,.45)}.sui-text-primary-800\\\\/5{color:rgba(22,29,62,.05)}.sui-text-primary-800\\\\/50{color:rgba(22,29,62,.5)}.sui-text-primary-800\\\\/55{color:rgba(22,29,62,.55)}.sui-text-primary-800\\\\/60{color:rgba(22,29,62,.6)}.sui-text-primary-800\\\\/65{color:rgba(22,29,62,.65)}.sui-text-primary-800\\\\/70{color:rgba(22,29,62,.7)}.sui-text-primary-800\\\\/75{color:rgba(22,29,62,.75)}.sui-text-primary-800\\\\/80{color:rgba(22,29,62,.8)}.sui-text-primary-800\\\\/85{color:rgba(22,29,62,.85)}.sui-text-primary-800\\\\/90{color:rgba(22,29,62,.9)}.sui-text-primary-800\\\\/95{color:rgba(22,29,62,.95)}.sui-text-primary-900{--tw-text-opacity:1;color:rgb(11 14 31/var(--tw-text-opacity,1))}.sui-text-primary-900\\\\/0{color:rgba(11,14,31,0)}.sui-text-primary-900\\\\/10{color:rgba(11,14,31,.1)}.sui-text-primary-900\\\\/100{color:#0b0e1f}.sui-text-primary-900\\\\/15{color:rgba(11,14,31,.15)}.sui-text-primary-900\\\\/20{color:rgba(11,14,31,.2)}.sui-text-primary-900\\\\/25{color:rgba(11,14,31,.25)}.sui-text-primary-900\\\\/30{color:rgba(11,14,31,.3)}.sui-text-primary-900\\\\/35{color:rgba(11,14,31,.35)}.sui-text-primary-900\\\\/40{color:rgba(11,14,31,.4)}.sui-text-primary-900\\\\/45{color:rgba(11,14,31,.45)}.sui-text-primary-900\\\\/5{color:rgba(11,14,31,.05)}.sui-text-primary-900\\\\/50{color:rgba(11,14,31,.5)}.sui-text-primary-900\\\\/55{color:rgba(11,14,31,.55)}.sui-text-primary-900\\\\/60{color:rgba(11,14,31,.6)}.sui-text-primary-900\\\\/65{color:rgba(11,14,31,.65)}.sui-text-primary-900\\\\/70{color:rgba(11,14,31,.7)}.sui-text-primary-900\\\\/75{color:rgba(11,14,31,.75)}.sui-text-primary-900\\\\/80{color:rgba(11,14,31,.8)}.sui-text-primary-900\\\\/85{color:rgba(11,14,31,.85)}.sui-text-primary-900\\\\/90{color:rgba(11,14,31,.9)}.sui-text-primary-900\\\\/95{color:rgba(11,14,31,.95)}.sui-text-primary\\\\/0{color:rgba(54,73,155,0)}.sui-text-primary\\\\/10{color:rgba(54,73,155,.1)}.sui-text-primary\\\\/100{color:#36499b}.sui-text-primary\\\\/15{color:rgba(54,73,155,.15)}.sui-text-primary\\\\/20{color:rgba(54,73,155,.2)}.sui-text-primary\\\\/25{color:rgba(54,73,155,.25)}.sui-text-primary\\\\/30{color:rgba(54,73,155,.3)}.sui-text-primary\\\\/35{color:rgba(54,73,155,.35)}.sui-text-primary\\\\/40{color:rgba(54,73,155,.4)}.sui-text-primary\\\\/45{color:rgba(54,73,155,.45)}.sui-text-primary\\\\/5{color:rgba(54,73,155,.05)}.sui-text-primary\\\\/50{color:rgba(54,73,155,.5)}.sui-text-primary\\\\/55{color:rgba(54,73,155,.55)}.sui-text-primary\\\\/60{color:rgba(54,73,155,.6)}.sui-text-primary\\\\/65{color:rgba(54,73,155,.65)}.sui-text-primary\\\\/70{color:rgba(54,73,155,.7)}.sui-text-primary\\\\/75{color:rgba(54,73,155,.75)}.sui-text-primary\\\\/80{color:rgba(54,73,155,.8)}.sui-text-primary\\\\/85{color:rgba(54,73,155,.85)}.sui-text-primary\\\\/90{color:rgba(54,73,155,.9)}.sui-text-primary\\\\/95{color:rgba(54,73,155,.95)}.sui-text-purple-500{--tw-text-opacity:1;color:rgb(168 85 247/var(--tw-text-opacity,1))}.sui-text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.sui-text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.sui-text-secondary{--tw-text-opacity:1;color:rgb(242 246 252/var(--tw-text-opacity,1))}.sui-text-secondary-1{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.sui-text-secondary-1\\\\/0{color:hsla(0,0%,100%,0)}.sui-text-secondary-1\\\\/10{color:hsla(0,0%,100%,.1)}.sui-text-secondary-1\\\\/100{color:#fff}.sui-text-secondary-1\\\\/15{color:hsla(0,0%,100%,.15)}.sui-text-secondary-1\\\\/20{color:hsla(0,0%,100%,.2)}.sui-text-secondary-1\\\\/25{color:hsla(0,0%,100%,.25)}.sui-text-secondary-1\\\\/30{color:hsla(0,0%,100%,.3)}.sui-text-secondary-1\\\\/35{color:hsla(0,0%,100%,.35)}.sui-text-secondary-1\\\\/40{color:hsla(0,0%,100%,.4)}.sui-text-secondary-1\\\\/45{color:hsla(0,0%,100%,.45)}.sui-text-secondary-1\\\\/5{color:hsla(0,0%,100%,.05)}.sui-text-secondary-1\\\\/50{color:hsla(0,0%,100%,.5)}.sui-text-secondary-1\\\\/55{color:hsla(0,0%,100%,.55)}.sui-text-secondary-1\\\\/60{color:hsla(0,0%,100%,.6)}.sui-text-secondary-1\\\\/65{color:hsla(0,0%,100%,.65)}.sui-text-secondary-1\\\\/70{color:hsla(0,0%,100%,.7)}.sui-text-secondary-1\\\\/75{color:hsla(0,0%,100%,.75)}.sui-text-secondary-1\\\\/80{color:hsla(0,0%,100%,.8)}.sui-text-secondary-1\\\\/85{color:hsla(0,0%,100%,.85)}.sui-text-secondary-1\\\\/90{color:hsla(0,0%,100%,.9)}.sui-text-secondary-1\\\\/95{color:hsla(0,0%,100%,.95)}.sui-text-secondary-2{--tw-text-opacity:1;color:rgb(225 234 248/var(--tw-text-opacity,1))}.sui-text-secondary-2\\\\/0{color:rgba(225,234,248,0)}.sui-text-secondary-2\\\\/10{color:rgba(225,234,248,.1)}.sui-text-secondary-2\\\\/100{color:#e1eaf8}.sui-text-secondary-2\\\\/15{color:rgba(225,234,248,.15)}.sui-text-secondary-2\\\\/20{color:rgba(225,234,248,.2)}.sui-text-secondary-2\\\\/25{color:rgba(225,234,248,.25)}.sui-text-secondary-2\\\\/30{color:rgba(225,234,248,.3)}.sui-text-secondary-2\\\\/35{color:rgba(225,234,248,.35)}.sui-text-secondary-2\\\\/40{color:rgba(225,234,248,.4)}.sui-text-secondary-2\\\\/45{color:rgba(225,234,248,.45)}.sui-text-secondary-2\\\\/5{color:rgba(225,234,248,.05)}.sui-text-secondary-2\\\\/50{color:rgba(225,234,248,.5)}.sui-text-secondary-2\\\\/55{color:rgba(225,234,248,.55)}.sui-text-secondary-2\\\\/60{color:rgba(225,234,248,.6)}.sui-text-secondary-2\\\\/65{color:rgba(225,234,248,.65)}.sui-text-secondary-2\\\\/70{color:rgba(225,234,248,.7)}.sui-text-secondary-2\\\\/75{color:rgba(225,234,248,.75)}.sui-text-secondary-2\\\\/80{color:rgba(225,234,248,.8)}.sui-text-secondary-2\\\\/85{color:rgba(225,234,248,.85)}.sui-text-secondary-2\\\\/90{color:rgba(225,234,248,.9)}.sui-text-secondary-2\\\\/95{color:rgba(225,234,248,.95)}.sui-text-secondary-3{--tw-text-opacity:1;color:rgb(201 218 244/var(--tw-text-opacity,1))}.sui-text-secondary-3\\\\/0{color:rgba(201,218,244,0)}.sui-text-secondary-3\\\\/10{color:rgba(201,218,244,.1)}.sui-text-secondary-3\\\\/100{color:#c9daf4}.sui-text-secondary-3\\\\/15{color:rgba(201,218,244,.15)}.sui-text-secondary-3\\\\/20{color:rgba(201,218,244,.2)}.sui-text-secondary-3\\\\/25{color:rgba(201,218,244,.25)}.sui-text-secondary-3\\\\/30{color:rgba(201,218,244,.3)}.sui-text-secondary-3\\\\/35{color:rgba(201,218,244,.35)}.sui-text-secondary-3\\\\/40{color:rgba(201,218,244,.4)}.sui-text-secondary-3\\\\/45{color:rgba(201,218,244,.45)}.sui-text-secondary-3\\\\/5{color:rgba(201,218,244,.05)}.sui-text-secondary-3\\\\/50{color:rgba(201,218,244,.5)}.sui-text-secondary-3\\\\/55{color:rgba(201,218,244,.55)}.sui-text-secondary-3\\\\/60{color:rgba(201,218,244,.6)}.sui-text-secondary-3\\\\/65{color:rgba(201,218,244,.65)}.sui-text-secondary-3\\\\/70{color:rgba(201,218,244,.7)}.sui-text-secondary-3\\\\/75{color:rgba(201,218,244,.75)}.sui-text-secondary-3\\\\/80{color:rgba(201,218,244,.8)}.sui-text-secondary-3\\\\/85{color:rgba(201,218,244,.85)}.sui-text-secondary-3\\\\/90{color:rgba(201,218,244,.9)}.sui-text-secondary-3\\\\/95{color:rgba(201,218,244,.95)}.sui-text-secondary\\\\/0{color:rgba(242,246,252,0)}.sui-text-secondary\\\\/10{color:rgba(242,246,252,.1)}.sui-text-secondary\\\\/100{color:#f2f6fc}.sui-text-secondary\\\\/15{color:rgba(242,246,252,.15)}.sui-text-secondary\\\\/20{color:rgba(242,246,252,.2)}.sui-text-secondary\\\\/25{color:rgba(242,246,252,.25)}.sui-text-secondary\\\\/30{color:rgba(242,246,252,.3)}.sui-text-secondary\\\\/35{color:rgba(242,246,252,.35)}.sui-text-secondary\\\\/40{color:rgba(242,246,252,.4)}.sui-text-secondary\\\\/45{color:rgba(242,246,252,.45)}.sui-text-secondary\\\\/5{color:rgba(242,246,252,.05)}.sui-text-secondary\\\\/50{color:rgba(242,246,252,.5)}.sui-text-secondary\\\\/55{color:rgba(242,246,252,.55)}.sui-text-secondary\\\\/60{color:rgba(242,246,252,.6)}.sui-text-secondary\\\\/65{color:rgba(242,246,252,.65)}.sui-text-secondary\\\\/70{color:rgba(242,246,252,.7)}.sui-text-secondary\\\\/75{color:rgba(242,246,252,.75)}.sui-text-secondary\\\\/80{color:rgba(242,246,252,.8)}.sui-text-secondary\\\\/85{color:rgba(242,246,252,.85)}.sui-text-secondary\\\\/90{color:rgba(242,246,252,.9)}.sui-text-secondary\\\\/95{color:rgba(242,246,252,.95)}.sui-text-stroke-brand{--tw-text-opacity:1;color:rgb(54 73 155/var(--tw-text-opacity,1))}.sui-text-success{--tw-text-opacity:1;color:rgb(34 188 77/var(--tw-text-opacity,1))}.sui-text-success\\\\/0{color:rgba(34,188,77,0)}.sui-text-success\\\\/10{color:rgba(34,188,77,.1)}.sui-text-success\\\\/100{color:#22bc4d}.sui-text-success\\\\/15{color:rgba(34,188,77,.15)}.sui-text-success\\\\/20{color:rgba(34,188,77,.2)}.sui-text-success\\\\/25{color:rgba(34,188,77,.25)}.sui-text-success\\\\/30{color:rgba(34,188,77,.3)}.sui-text-success\\\\/35{color:rgba(34,188,77,.35)}.sui-text-success\\\\/40{color:rgba(34,188,77,.4)}.sui-text-success\\\\/45{color:rgba(34,188,77,.45)}.sui-text-success\\\\/5{color:rgba(34,188,77,.05)}.sui-text-success\\\\/50{color:rgba(34,188,77,.5)}.sui-text-success\\\\/55{color:rgba(34,188,77,.55)}.sui-text-success\\\\/60{color:rgba(34,188,77,.6)}.sui-text-success\\\\/65{color:rgba(34,188,77,.65)}.sui-text-success\\\\/70{color:rgba(34,188,77,.7)}.sui-text-success\\\\/75{color:rgba(34,188,77,.75)}.sui-text-success\\\\/80{color:rgba(34,188,77,.8)}.sui-text-success\\\\/85{color:rgba(34,188,77,.85)}.sui-text-success\\\\/90{color:rgba(34,188,77,.9)}.sui-text-success\\\\/95{color:rgba(34,188,77,.95)}.sui-text-text-blue{--tw-text-opacity:1;color:rgb(39 114 240/var(--tw-text-opacity,1))}.sui-text-text-brand{--tw-text-opacity:1;color:rgb(54 73 155/var(--tw-text-opacity,1))}.sui-text-text-default{--tw-text-opacity:1;color:rgb(35 38 47/var(--tw-text-opacity,1))}.sui-text-text-disabled{--tw-text-opacity:1;color:rgb(201 209 216/var(--tw-text-opacity,1))}.sui-text-text-primary1{--tw-text-opacity:1;color:rgb(35 38 47/var(--tw-text-opacity,1))}.sui-text-text-secondary1{--tw-text-opacity:1;color:rgb(119 126 144/var(--tw-text-opacity,1))}.sui-text-warning{--tw-text-opacity:1;color:rgb(255 122 0/var(--tw-text-opacity,1))}.sui-text-warning\\\\/0{color:rgba(255,122,0,0)}.sui-text-warning\\\\/10{color:rgba(255,122,0,.1)}.sui-text-warning\\\\/100{color:#ff7a00}.sui-text-warning\\\\/15{color:rgba(255,122,0,.15)}.sui-text-warning\\\\/20{color:rgba(255,122,0,.2)}.sui-text-warning\\\\/25{color:rgba(255,122,0,.25)}.sui-text-warning\\\\/30{color:rgba(255,122,0,.3)}.sui-text-warning\\\\/35{color:rgba(255,122,0,.35)}.sui-text-warning\\\\/40{color:rgba(255,122,0,.4)}.sui-text-warning\\\\/45{color:rgba(255,122,0,.45)}.sui-text-warning\\\\/5{color:rgba(255,122,0,.05)}.sui-text-warning\\\\/50{color:rgba(255,122,0,.5)}.sui-text-warning\\\\/55{color:rgba(255,122,0,.55)}.sui-text-warning\\\\/60{color:rgba(255,122,0,.6)}.sui-text-warning\\\\/65{color:rgba(255,122,0,.65)}.sui-text-warning\\\\/70{color:rgba(255,122,0,.7)}.sui-text-warning\\\\/75{color:rgba(255,122,0,.75)}.sui-text-warning\\\\/80{color:rgba(255,122,0,.8)}.sui-text-warning\\\\/85{color:rgba(255,122,0,.85)}.sui-text-warning\\\\/90{color:rgba(255,122,0,.9)}.sui-text-warning\\\\/95{color:rgba(255,122,0,.95)}.sui-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.sui-text-white\\\\/70{color:hsla(0,0%,100%,.7)}.sui-text-white\\\\/90{color:hsla(0,0%,100%,.9)}.sui-text-yellow-500{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity,1))}.sui-text-yellow-600{--tw-text-opacity:1;color:rgb(202 138 4/var(--tw-text-opacity,1))}.sui-underline{text-decoration-line:underline}.sui-underline-offset-4{text-underline-offset:4px}.sui-placeholder-white::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(255 255 255/var(--tw-placeholder-opacity,1))}.sui-placeholder-white::placeholder{--tw-placeholder-opacity:1;color:rgb(255 255 255/var(--tw-placeholder-opacity,1))}.sui-placeholder-white\\\\/60::-moz-placeholder{color:hsla(0,0%,100%,.6)}.sui-placeholder-white\\\\/60::placeholder{color:hsla(0,0%,100%,.6)}.sui-opacity-0{opacity:0}.sui-opacity-100{opacity:1}.sui-opacity-25{opacity:.25}.sui-opacity-40{opacity:.4}.sui-opacity-50{opacity:.5}.sui-opacity-60{opacity:.6}.sui-opacity-75{opacity:.75}.sui-opacity-80{opacity:.8}.sui-shadow-\\\\[0_4px_10px_rgba\\\\(26\\\\,32\\\\,44\\\\,0\\\\.15\\\\)\\\\]{--tw-shadow:0 4px 10px rgba(26,32,44,.15);--tw-shadow-colored:0 4px 10px var(--tw-shadow-color)}.sui-shadow-\\\\[0_4px_10px_rgba\\\\(26\\\\,32\\\\,44\\\\,0\\\\.15\\\\)\\\\],.sui-shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.sui-shadow-lg{--tw-shadow:0 8px 16px 0 rgba(3,7,18,.08);--tw-shadow-colored:0 8px 16px 0 var(--tw-shadow-color)}.sui-shadow-md{--tw-shadow:0 4px 8px 0 rgba(3,7,18,.08);--tw-shadow-colored:0 4px 8px 0 var(--tw-shadow-color)}.sui-shadow-md,.sui-shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.sui-shadow-sm{--tw-shadow:0 2px 8px 0 rgba(3,7,18,.1);--tw-shadow-colored:0 2px 8px 0 var(--tw-shadow-color)}.sui-shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}.sui-shadow-xl,.sui-shadow-xs{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.sui-shadow-xs{--tw-shadow:0 2px 4px 0 rgba(3,7,18,.04);--tw-shadow-colored:0 2px 4px 0 var(--tw-shadow-color)}.sui-outline-none{outline:2px solid transparent;outline-offset:2px}.sui-outline{outline-style:solid}.sui-outline-2{outline-width:2px}.sui-outline-primary{outline-color:#36499b}.sui-ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.sui-ring-primary{--tw-ring-opacity:1;--tw-ring-color:rgb(54 73 155/var(--tw-ring-opacity,1))}.sui-ring-primary-600{--tw-ring-opacity:1;--tw-ring-color:rgb(43 58 124/var(--tw-ring-opacity,1))}.sui-ring-primary-600\\\\/30{--tw-ring-color:rgba(43,58,124,.3)}.sui-ring-offset-2{--tw-ring-offset-width:2px}.sui-ring-offset-white{--tw-ring-offset-color:#fff}.sui-drop-shadow-lg{--tw-drop-shadow:drop-shadow(0 10px 8px rgba(0,0,0,.04)) drop-shadow(0 4px 3px rgba(0,0,0,.1))}.sui-drop-shadow-lg,.sui-drop-shadow-md{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.sui-drop-shadow-md{--tw-drop-shadow:drop-shadow(0 4px 3px rgba(0,0,0,.07)) drop-shadow(0 2px 2px rgba(0,0,0,.06))}.sui-backdrop-blur-\\\\[2px\\\\]{--tw-backdrop-blur:blur(2px)}.sui-backdrop-blur-\\\\[2px\\\\],.sui-backdrop-blur-md{backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.sui-backdrop-blur-md{--tw-backdrop-blur:blur(12px)}.sui-backdrop-blur-sm{--tw-backdrop-blur:blur(4px)}.sui-backdrop-blur-sm,.sui-backdrop-blur-xl{backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.sui-backdrop-blur-xl{--tw-backdrop-blur:blur(24px)}.sui-transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.sui-transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.sui-transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.sui-transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.sui-duration-150{transition-duration:.15s}.sui-duration-200{transition-duration:.2s}.sui-duration-300{transition-duration:.3s}.sui-ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.sui-ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.sui-heading-24-medium{font-size:1.5rem}.sui-heading-20-medium,.sui-heading-24-medium{line-height:150%;letter-spacing:-.02em;font-weight:500}.sui-heading-20-medium{font-size:1.25rem}.sui-heading-16-medium{font-size:1rem}.sui-heading-16-medium,.sui-title-20-medium{line-height:150%;letter-spacing:-.02em;font-weight:500}.sui-title-20-medium{font-size:1.25rem}.sui-title-16-medium{font-weight:500}.sui-body-16,.sui-body-16-medium,.sui-title-16-medium{font-size:1rem;line-height:150%;letter-spacing:-.02em}.sui-body-16-medium{font-weight:500}.sui-body-14,.sui-body-14-medium{font-size:.875rem;line-height:150%;letter-spacing:-.02em}.sui-body-14-medium{font-weight:500}.sui-body-12-medium{font-weight:500}.sui-body-12-medium,.sui-label-12{font-size:.75rem;line-height:150%;letter-spacing:-.02em}.sui-text-link{cursor:pointer;--tw-text-opacity:1;color:rgb(39 114 240/var(--tw-text-opacity,1));text-decoration-line:underline}.sui-button-14-medium{font-weight:500}.sui-button-14-medium,.sui-button-14-semibold{font-size:.875rem;line-height:150%;letter-spacing:-.02em}.sui-button-14-semibold{font-weight:600}.sui-select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.sui-transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.sui-scrollbars-thin{scrollbar-width:thin;scrollbar-color:#b2bbc7 transparent}.sui-scrollbars-thin::-webkit-scrollbar{width:8px;height:8px}.sui-scrollbars-thin::-webkit-scrollbar-track{background:transparent}.sui-scrollbars-thin::-webkit-scrollbar-thumb{background-color:#b2bbc7;border-radius:9999px;border:2px solid transparent;background-clip:content-box}[class*=sui-]{scrollbar-width:thin;scrollbar-color:#b2bbc7 transparent}[class*=sui-]::-webkit-scrollbar{width:8px;height:8px}[class*=sui-]::-webkit-scrollbar-track{background:transparent}[class*=sui-]::-webkit-scrollbar-thumb{background-color:#b2bbc7;border-radius:9999px;border:2px solid transparent;background-clip:content-box}:root{--sui-color-primary:#36499b;--sui-color-secondary:#f2f6fc;--sui-text-default:#23262f;--sui-text-secondary:#777e90;--sui-text-disabled:#b1b5c3;--sui-bg-default:#f2f6fc;--sui-bg-surface:#fff;--sui-stroke-level1:#777e90;--sui-stroke-level2:#b2bbc7;--sui-stroke-level3:#dee3e7;--sui-color-error:#ea3540;--sui-color-warning:#ff7a00;--sui-color-success:#22bc4d;--sui-color-info:#2772f0}[class*=sui-],[class*=sui-] *,[class*=sui-] :after,[class*=sui-] :before{box-sizing:border-box}:root[data-theme=dark],[data-theme=dark],html[data-theme=dark]{color-scheme:dark;--sui-color-primary:#8ea2ff;--sui-color-secondary:#12141a;--sui-text-default:#e6e8ef;--sui-text-secondary:#b3b9c6;--sui-text-disabled:#8a93a5;--sui-bg-default:#0e1116;--sui-bg-surface:#141821;--sui-stroke-level1:#4a5160;--sui-stroke-level2:#3a4150;--sui-stroke-level3:#2a2f3a;--sui-color-error:#ff6b73;--sui-color-warning:#ffb057;--sui-color-success:#43d383;--sui-color-info:#6aa5ff}.placeholder\\\\:sui-text-14::-moz-placeholder{font-size:.875rem;line-height:150%;letter-spacing:-.02em}.placeholder\\\\:sui-text-14::placeholder{font-size:.875rem;line-height:150%;letter-spacing:-.02em}.placeholder\\\\:sui-text-disabled::-moz-placeholder{--tw-text-opacity:1;color:rgb(178 187 199/var(--tw-text-opacity,1))}.placeholder\\\\:sui-text-disabled::placeholder{--tw-text-opacity:1;color:rgb(178 187 199/var(--tw-text-opacity,1))}.focus-within\\\\:sui-border-error:focus-within{--tw-border-opacity:1;border-color:rgb(234 53 64/var(--tw-border-opacity,1))}.focus-within\\\\:sui-border-primary:focus-within{--tw-border-opacity:1;border-color:rgb(54 73 155/var(--tw-border-opacity,1))}.focus-within\\\\:sui-shadow-sm:focus-within{--tw-shadow:0 2px 8px 0 rgba(3,7,18,.1);--tw-shadow-colored:0 2px 8px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.hover\\\\:sui-border-primary\\\\/80:hover{border-color:rgba(54,73,155,.8)}.hover\\\\:sui-bg-background-default:hover{--tw-bg-opacity:1;background-color:rgb(242 246 252/var(--tw-bg-opacity,1))}.hover\\\\:sui-bg-background-secondary2:hover{--tw-bg-opacity:1;background-color:rgb(225 234 248/var(--tw-bg-opacity,1))}.hover\\\\:sui-bg-background-secondary3:hover{--tw-bg-opacity:1;background-color:rgb(201 218 244/var(--tw-bg-opacity,1))}.hover\\\\:sui-bg-primary\\\\/5:hover{background-color:rgba(54,73,155,.05)}.hover\\\\:sui-bg-primary\\\\/90:hover{background-color:rgba(54,73,155,.9)}.hover\\\\:sui-bg-secondary:hover{--tw-bg-opacity:1;background-color:rgb(242 246 252/var(--tw-bg-opacity,1))}.hover\\\\:sui-bg-secondary-2:hover{--tw-bg-opacity:1;background-color:rgb(225 234 248/var(--tw-bg-opacity,1))}.hover\\\\:sui-bg-stroke-level3:hover{--tw-bg-opacity:1;background-color:rgb(222 227 231/var(--tw-bg-opacity,1))}.hover\\\\:sui-bg-white\\\\/60:hover{background-color:hsla(0,0%,100%,.6)}.hover\\\\:sui-text-error\\\\/80:hover{color:rgba(234,53,64,.8)}.hover\\\\:sui-underline:hover{text-decoration-line:underline}.hover\\\\:sui-opacity-100:hover{opacity:1}.hover\\\\:sui-opacity-90:hover{opacity:.9}.focus\\\\:sui-border-error:focus{--tw-border-opacity:1;border-color:rgb(234 53 64/var(--tw-border-opacity,1))}.focus\\\\:sui-border-primary:focus{--tw-border-opacity:1;border-color:rgb(54 73 155/var(--tw-border-opacity,1))}.focus\\\\:sui-bg-white\\\\/30:focus{background-color:hsla(0,0%,100%,.3)}.focus\\\\:sui-outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\\\\:sui-ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\\\\:sui-ring-primary:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(54 73 155/var(--tw-ring-opacity,1))}.focus\\\\:sui-ring-offset-1:focus{--tw-ring-offset-width:1px}.focus-visible\\\\:sui-border-error:focus-visible{--tw-border-opacity:1;border-color:rgb(234 53 64/var(--tw-border-opacity,1))}.focus-visible\\\\:sui-border-primary:focus-visible{--tw-border-opacity:1;border-color:rgb(54 73 155/var(--tw-border-opacity,1))}.focus-visible\\\\:sui-outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\\\\:sui-ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\\\\:sui-ring-primary:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgb(54 73 155/var(--tw-ring-opacity,1))}.focus-visible\\\\:sui-ring-primary\\\\/60:focus-visible{--tw-ring-color:rgba(54,73,155,.6)}.focus-visible\\\\:sui-ring-stroke-brand:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgb(54 73 155/var(--tw-ring-opacity,1))}.focus-visible\\\\:sui-ring-offset-2:focus-visible{--tw-ring-offset-width:2px}.enabled\\\\:hover\\\\:sui-border-error\\\\/80:hover:enabled{border-color:rgba(234,53,64,.8)}.enabled\\\\:hover\\\\:sui-border-gray-400:hover:enabled{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity,1))}.enabled\\\\:hover\\\\:sui-border-primary\\\\/80:hover:enabled{border-color:rgba(54,73,155,.8)}.enabled\\\\:hover\\\\:sui-bg-gray-50:hover:enabled{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.enabled\\\\:hover\\\\:sui-bg-primary\\\\/5:hover:enabled{background-color:rgba(54,73,155,.05)}.enabled\\\\:hover\\\\:sui-bg-primary\\\\/90:hover:enabled{background-color:rgba(54,73,155,.9)}.enabled\\\\:hover\\\\:sui-bg-red-50:hover:enabled{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.enabled\\\\:hover\\\\:sui-text-info\\\\/80:hover:enabled{color:rgba(39,114,240,.8)}.enabled\\\\:hover\\\\:sui-text-primary\\\\/80:hover:enabled{color:rgba(54,73,155,.8)}.enabled\\\\:hover\\\\:sui-underline:hover:enabled{text-decoration-line:underline}.enabled\\\\:hover\\\\:sui-shadow-md:hover:enabled{--tw-shadow:0 4px 8px 0 rgba(3,7,18,.08);--tw-shadow-colored:0 4px 8px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.enabled\\\\:active\\\\:sui-scale-95:active:enabled{--tw-scale-x:.95;--tw-scale-y:.95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.enabled\\\\:active\\\\:sui-bg-gray-100:active:enabled{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.enabled\\\\:active\\\\:sui-bg-primary\\\\/10:active:enabled{background-color:rgba(54,73,155,.1)}.enabled\\\\:active\\\\:sui-bg-primary\\\\/95:active:enabled{background-color:rgba(54,73,155,.95)}.enabled\\\\:active\\\\:sui-bg-red-100:active:enabled{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.enabled\\\\:active\\\\:sui-text-info\\\\/90:active:enabled{color:rgba(39,114,240,.9)}.disabled\\\\:sui-cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\\\:sui-border-icon-gray:disabled{--tw-border-opacity:1;border-color:rgb(119 126 144/var(--tw-border-opacity,1))}.disabled\\\\:sui-bg-secondary:disabled{--tw-bg-opacity:1;background-color:rgb(242 246 252/var(--tw-bg-opacity,1))}.disabled\\\\:sui-text-icon-gray:disabled{--tw-text-opacity:1;color:rgb(119 126 144/var(--tw-text-opacity,1))}.disabled\\\\:sui-opacity-30:disabled{opacity:.3}.disabled\\\\:sui-opacity-50:disabled{opacity:.5}.sui-group:hover .group-hover\\\\:sui-scale-110{--tw-scale-x:1.1;--tw-scale-y:1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sui-group:hover .group-hover\\\\:sui-bg-stroke-level3{--tw-bg-opacity:1;background-color:rgb(222 227 231/var(--tw-bg-opacity,1))}.sui-peer:checked~.peer-checked\\\\:sui-bg-error{--tw-bg-opacity:1;background-color:rgb(234 53 64/var(--tw-bg-opacity,1))}.sui-peer:checked~.peer-checked\\\\:sui-bg-primary{--tw-bg-opacity:1;background-color:rgb(54 73 155/var(--tw-bg-opacity,1))}.sui-peer:checked~.sui-group:hover .peer-checked\\\\:group-hover\\\\:sui-bg-primary\\\\/90{background-color:rgba(54,73,155,.9)}.sui-peer:focus-visible~.peer-focus-visible\\\\:sui-ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.sui-peer:focus-visible~.peer-focus-visible\\\\:sui-ring-primary{--tw-ring-opacity:1;--tw-ring-color:rgb(54 73 155/var(--tw-ring-opacity,1))}.sui-peer:focus-visible~.peer-focus-visible\\\\:sui-ring-offset-2{--tw-ring-offset-width:2px}.sui-peer:focus-visible~.peer-focus-visible\\\\:sui-ring-offset-white{--tw-ring-offset-color:#fff}@media (prefers-reduced-motion:reduce){.motion-reduce\\\\:sui-animate-none{animation:none}}@media (min-width:640px){.sm\\\\:sui-block{display:block}.sm\\\\:sui-h-28{height:7rem}.sm\\\\:sui-w-28{width:7rem}.sm\\\\:sui-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\\\\:sui-flex-row{flex-direction:row}.sm\\\\:sui-p-8{padding:2rem}.sm\\\\:sui-text-16{font-size:1rem;line-height:150%;letter-spacing:-.02em}}@media (min-width:768px){.md\\\\:sui-h-\\\\[var\\\\(--logo-size-desktop\\\\)\\\\]{height:var(--logo-size-desktop)}.md\\\\:sui-w-\\\\[var\\\\(--logo-size-desktop\\\\)\\\\]{width:var(--logo-size-desktop)}.md\\\\:sui-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (min-width:1024px){.lg\\\\:sui-grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}}.\\\\[\\\\&\\\\[style\\\\*\\\\=\\\\'text-align\\\\:center\\\\'\\\\]\\\\]\\\\:sui-text-center[style*=\\\"text-align:center\\\"]{text-align:center}.\\\\[\\\\&\\\\[style\\\\*\\\\=\\\\'text-align\\\\:left\\\\'\\\\]\\\\]\\\\:sui-text-left[style*=\\\"text-align:left\\\"]{text-align:left}.\\\\[\\\\&\\\\[style\\\\*\\\\=\\\\'text-align\\\\:right\\\\'\\\\]\\\\]\\\\:sui-text-right[style*=\\\"text-align:right\\\"]{text-align:right}.\\\\[\\\\&_\\\\.ProseMirror\\\\]\\\\:sui-min-h-full .ProseMirror{min-height:100%}.\\\\[\\\\&_\\\\.ProseMirror\\\\]\\\\:focus\\\\:sui-outline-none:focus .ProseMirror{outline:2px solid transparent;outline-offset:2px}.sui-peer:checked~.peer-checked\\\\:\\\\[\\\\&_\\\\.sui-checkbox-check\\\\]\\\\:sui-opacity-100 .sui-checkbox-check{opacity:1}.sui-peer:indeterminate~.peer-indeterminate\\\\:\\\\[\\\\&_\\\\.sui-checkbox-minus\\\\]\\\\:sui-opacity-100 .sui-checkbox-minus{opacity:1}.sui-peer:checked~.peer-checked\\\\:\\\\[\\\\&_\\\\.sui-checkbox-square\\\\]\\\\:sui-fill-error .sui-checkbox-square{fill:#ea3540}.sui-peer:checked~.peer-checked\\\\:\\\\[\\\\&_\\\\.sui-checkbox-square\\\\]\\\\:sui-fill-primary .sui-checkbox-square{fill:#36499b}.sui-peer:checked~.peer-checked\\\\:\\\\[\\\\&_\\\\.sui-checkbox-square\\\\]\\\\:sui-stroke-error .sui-checkbox-square{stroke:#ea3540}.sui-peer:checked~.peer-checked\\\\:\\\\[\\\\&_\\\\.sui-checkbox-square\\\\]\\\\:sui-stroke-primary .sui-checkbox-square{stroke:#36499b}.sui-peer:indeterminate~.peer-indeterminate\\\\:\\\\[\\\\&_\\\\.sui-checkbox-square\\\\]\\\\:sui-fill-primary .sui-checkbox-square{fill:#36499b}.sui-peer:indeterminate~.peer-indeterminate\\\\:\\\\[\\\\&_\\\\.sui-checkbox-square\\\\]\\\\:sui-stroke-primary .sui-checkbox-square{stroke:#36499b}.sui-peer:checked~.peer-checked\\\\:\\\\[\\\\&_\\\\.sui-radio-dot\\\\]\\\\:sui-text-error .sui-radio-dot{--tw-text-opacity:1;color:rgb(234 53 64/var(--tw-text-opacity,1))}.sui-peer:checked~.peer-checked\\\\:\\\\[\\\\&_\\\\.sui-radio-dot\\\\]\\\\:sui-text-primary .sui-radio-dot{--tw-text-opacity:1;color:rgb(54 73 155/var(--tw-text-opacity,1))}.sui-peer:checked~.peer-checked\\\\:\\\\[\\\\&_\\\\.sui-radio-dot\\\\]\\\\:sui-opacity-100 .sui-radio-dot{opacity:1}.sui-peer:checked~.peer-checked\\\\:\\\\[\\\\&_\\\\.sui-radio-ring\\\\]\\\\:sui-text-error .sui-radio-ring{--tw-text-opacity:1;color:rgb(234 53 64/var(--tw-text-opacity,1))}.sui-peer:checked~.peer-checked\\\\:\\\\[\\\\&_\\\\.sui-radio-ring\\\\]\\\\:sui-text-primary .sui-radio-ring{--tw-text-opacity:1;color:rgb(54 73 155/var(--tw-text-opacity,1))}.sui-peer:checked~.peer-checked\\\\:\\\\[\\\\&_\\\\.sui-switch-thumb\\\\]\\\\:sui-translate-x-6 .sui-switch-thumb{--tw-translate-x:1.5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\\\\[\\\\&_a\\\\]\\\\:sui-text-link a{cursor:pointer;--tw-text-opacity:1;color:rgb(39 114 240/var(--tw-text-opacity,1));text-decoration-line:underline}.\\\\[\\\\&_h1\\\\]\\\\:sui-heading-24-medium h1{font-size:1.5rem;line-height:150%;letter-spacing:-.02em;font-weight:500}.\\\\[\\\\&_h2\\\\]\\\\:sui-heading-20-medium h2{font-size:1.25rem;line-height:150%;letter-spacing:-.02em;font-weight:500}.\\\\[\\\\&_h3\\\\]\\\\:sui-heading-16-medium h3{font-size:1rem;line-height:150%;letter-spacing:-.02em;font-weight:500}.\\\\[\\\\&_iframe\\\\]\\\\:sui-aspect-video iframe{aspect-ratio:16/9}.\\\\[\\\\&_iframe\\\\]\\\\:sui-w-full iframe{width:100%}.\\\\[\\\\&_iframe\\\\]\\\\:sui-rounded-md iframe{border-radius:.375rem}.\\\\[\\\\&_iframe\\\\]\\\\:sui-border iframe{border-width:1px}.\\\\[\\\\&_img\\\\]\\\\:sui-h-auto img{height:auto}.\\\\[\\\\&_img\\\\]\\\\:sui-max-w-full img{max-width:100%}.\\\\[\\\\&_img\\\\]\\\\:sui-rounded-md img{border-radius:.375rem}.\\\\[\\\\&_img\\\\]\\\\:sui-border img{border-width:1px}.\\\\[\\\\&_ol\\\\]\\\\:sui-list-decimal ol{list-style-type:decimal}.\\\\[\\\\&_ol\\\\]\\\\:sui-pl-5 ol{padding-left:1.25rem}.\\\\[\\\\&_p\\\\]\\\\:sui-body-16 p{font-size:1rem;line-height:150%;letter-spacing:-.02em}.\\\\[\\\\&_ul\\\\]\\\\:sui-list-disc ul{list-style-type:disc}.\\\\[\\\\&_ul\\\\]\\\\:sui-pl-5 ul{padding-left:1.25rem}\";\n","import { SCALABLY_UI_STYLES } from \"@/lib/styles-inline\";\nimport { useEffect } from \"react\";\n\ninterface ScalablyUIProviderProps {\n children: React.ReactNode;\n /**\n * @deprecated `className` is no longer needed. Styles are applied globally.\n */\n className?: string;\n /**\n * @deprecated `asChild` is no longer needed. Styles are applied globally.\n */\n asChild?: boolean;\n /**\n * When true, automatically injects the component library styles into document.head.\n * This ensures styles work in portals (modals, tooltips, etc.) without requiring\n * manual CSS imports. Defaults to true.\n */\n injectStyles?: boolean;\n}\n\n/**\n * ScalablyUIProvider\n *\n * Provides the Scalably UI component library context and automatically injects styles.\n * All classes are globally prefixed (`sui-*`), so no wrapper element is required.\n *\n * Features:\n * - Automatically injects CSS into document.head (prevents double-injection)\n * - Works with SSR (only injects on client-side)\n * - Ensures styles are available for portaled components\n * - Maintains style isolation via 'sui-' prefix\n *\n * Usage:\n * ```tsx\n * <ScalablyUIProvider>\n * <App />\n * </ScalablyUIProvider>\n * ```\n *\n * To disable automatic style injection (if you import CSS manually):\n * ```tsx\n * <ScalablyUIProvider injectStyles={false}>\n * <App />\n * </ScalablyUIProvider>\n * ```\n */\nconst ScalablyUIProvider: React.FC<ScalablyUIProviderProps> = ({\n children,\n className,\n asChild,\n injectStyles = true,\n}: ScalablyUIProviderProps) => {\n // Automatically inject styles into document.head\n // This ensures styles work in portals (modals, tooltips, etc.)\n useEffect(() => {\n if (!injectStyles || typeof window === \"undefined\") {\n return;\n }\n\n // Check if styles are already injected (prevent double-injection in StrictMode)\n const existingStyle = document.head.querySelector(\n '[data-scalably-ui-styles=\"true\"]'\n );\n\n if (!existingStyle && SCALABLY_UI_STYLES) {\n const styleEl = document.createElement(\"style\");\n styleEl.setAttribute(\"data-scalably-ui-styles\", \"true\");\n styleEl.textContent = SCALABLY_UI_STYLES;\n document.head.appendChild(styleEl);\n }\n }, [injectStyles]);\n\n const globalProcess =\n typeof globalThis !== \"undefined\"\n ? (\n globalThis as {\n process?: { env?: Record<string, string | undefined> };\n }\n ).process\n : undefined;\n const isDevelopment = globalProcess?.env?.NODE_ENV !== \"production\";\n\n if (isDevelopment && (className || typeof asChild === \"boolean\")) {\n console.warn(\n \"ScalablyUIProvider: 'className' and 'asChild' props are deprecated and will be removed in a future release. Styles are injected globally now.\"\n );\n }\n\n return <>{children}</>;\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","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\n/**\n * Props for the DiscordIcon component\n */\ninterface DiscordIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 32. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * Discord icon component - displays the Discord logo.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { DiscordIcon } from '@scalably/ui';\n *\n * <DiscordIcon size={32} className=\"sui-text-primary\" />\n * ```\n */\nconst DiscordIcon = memo(\n forwardRef<SVGSVGElement, DiscordIconProps>(\n ({ size = 32, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 32 32\"\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_3906_931)\">\n <path\n d=\"M16 0C7.16375 0 0 7.16375 0 16C0 24.8363 7.16375 32 16 32C24.8363 32 32 24.8363 32 16C32 7.16375 24.8363 0 16 0Z\"\n fill=\"#5865F2\"\n />\n <path\n d=\"M22.9419 10.2563C21.6302 9.66168 20.2427 9.2392 18.8158 9C18.638 9.31133 18.4304 9.73006 18.2872 10.0632C16.7487 9.83903 15.2244 9.83903 13.7143 10.0632C13.5712 9.73013 13.3588 9.31133 13.1794 9C11.7512 9.23931 10.3624 9.66286 9.05015 10.2594C6.4389 14.0826 5.73101 17.8107 6.08492 21.486C7.81687 22.7391 9.49531 23.5003 11.1455 23.9985C11.5556 23.4521 11.9181 22.8736 12.2293 22.269C11.6368 22.0504 11.0656 21.7811 10.5226 21.4642C10.6655 21.3616 10.805 21.2546 10.941 21.1435C14.2318 22.6348 17.8074 22.6348 21.059 21.1435C21.1956 21.2539 21.335 21.3608 21.4773 21.4642C20.9334 21.782 20.3612 22.0518 19.7675 22.2706C20.0805 22.8776 20.4423 23.4567 20.8513 24C22.503 23.5019 24.183 22.7407 25.915 21.486C26.3303 17.2254 25.2056 13.5315 22.9419 10.2563ZM12.6776 19.2257C11.6898 19.2257 10.8796 18.3322 10.8796 17.2441C10.8796 16.156 11.6725 15.2609 12.6776 15.2609C13.6828 15.2609 14.493 16.1544 14.4757 17.2441C14.4773 18.3322 13.6829 19.2257 12.6776 19.2257ZM19.3223 19.2257C18.3344 19.2257 17.5243 18.3322 17.5243 17.2441C17.5243 16.156 18.3171 15.2609 19.3223 15.2609C20.3275 15.2609 21.1376 16.1544 21.1203 17.2441C21.1203 18.3322 20.3275 19.2257 19.3223 19.2257Z\"\n fill=\"white\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_3906_931\">\n <rect width={size} height={size} fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n }\n )\n);\nDiscordIcon.displayName = \"DiscordIcon\";\n\nexport { DiscordIcon, type DiscordIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface FacebookIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 32. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * Facebook icon component - displays the Facebook logo.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { FacebookIcon } from '@scalably/ui';\n *\n * <FacebookIcon size={32} className=\"sui-text-primary\" />\n * ```\n */\nconst FacebookIcon = memo(\n forwardRef<SVGSVGElement, FacebookIconProps>(\n ({ size = 32, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 32 32\"\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_3906_896)\">\n <path\n d=\"M32 16C32 7.1635 24.8365 0 16 0C7.1635 0 0 7.1635 0 16C0 23.986 5.851 30.6054 13.5 31.8056V20.625H9.4375V16H13.5V12.475C13.5 8.465 15.8888 6.25 19.5435 6.25C21.294 6.25 23.125 6.5625 23.125 6.5625V10.5H21.1075C19.1199 10.5 18.5 11.7334 18.5 12.9987V16H22.9375L22.2281 20.625H18.5V31.8056C26.149 30.6054 32 23.9861 32 16Z\"\n fill=\"#1877F2\"\n />\n <path\n d=\"M22.2281 20.625L22.9375 16H18.5V12.9987C18.5 11.7332 19.1199 10.5 21.1075 10.5H23.125V6.5625C23.125 6.5625 21.294 6.25 19.5434 6.25C15.8888 6.25 13.5 8.465 13.5 12.475V16H9.4375V20.625H13.5V31.8056C14.327 31.9352 15.1629 32.0002 16 32C16.8371 32.0002 17.673 31.9352 18.5 31.8056V20.625H22.2281Z\"\n fill=\"white\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_3906_896\">\n <rect width={size} height={size} fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n }\n )\n);\nFacebookIcon.displayName = \"FacebookIcon\";\n\nexport { FacebookIcon, type FacebookIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface GmailIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 32. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * Gmail icon component - displays the Gmail logo.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { GmailIcon } from '@scalably/ui';\n *\n * <GmailIcon size={32} className=\"sui-text-primary\" />\n * ```\n */\nconst GmailIcon = memo(\n forwardRef<SVGSVGElement, GmailIconProps>(\n ({ size = 32, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 32 32\"\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.27346 27.8819V15.5822L3.43948 12.0925L0.00146484 10.1559V25.7113C0.00146484 26.9123 0.979488 27.8819 2.18311 27.8819H7.27346Z\"\n fill=\"#4285F4\"\n />\n <path\n d=\"M24.7266 27.8819H29.8169C31.0242 27.8819 31.9986 26.9087 31.9986 25.7113V10.1561L28.1045 12.3741L24.7266 15.5822V27.8819Z\"\n fill=\"#34A853\"\n />\n <path\n d=\"M7.27365 15.5822L6.75195 10.7763L7.27365 6.17667L16 12.6883L24.7263 6.17667L25.3099 10.528L24.7263 15.5822L16 22.0938L7.27365 15.5822Z\"\n fill=\"#EA4335\"\n />\n <path\n d=\"M24.7266 6.17667V15.5822L31.9986 10.1559V7.26189C31.9986 4.57775 28.9189 3.04759 26.7629 4.65733L24.7266 6.17667Z\"\n fill=\"#FBBC04\"\n />\n <path\n d=\"M0.00195312 10.156L3.34648 12.6517L7.27395 15.5822V6.17668L5.23766 4.65734C3.07788 3.04748 0.00195312 4.57776 0.00195312 7.26178V10.156Z\"\n fill=\"#C5221F\"\n />\n </svg>\n );\n }\n )\n);\nGmailIcon.displayName = \"GmailIcon\";\nexport { GmailIcon, type GmailIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface InstagramIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 32. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * Instagram icon component - displays the Instagram logo.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { InstagramIcon } from '@scalably/ui';\n *\n * <InstagramIcon size={32} className=\"sui-text-primary\" />\n * ```\n */\nconst InstagramIcon = memo(\n forwardRef<SVGSVGElement, InstagramIconProps>(\n ({ size = 32, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 32 32\"\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_3906_1520)\">\n <path\n d=\"M24.6217 0H7.37832C3.30338 0 0 3.30338 0 7.37832V24.6217C0 28.6966 3.30338 32 7.37832 32H24.6217C28.6966 32 32 28.6966 32 24.6217V7.37832C32 3.30338 28.6966 0 24.6217 0Z\"\n fill=\"url(#paint0_linear_3906_1520)\"\n />\n <path\n d=\"M21.1612 6.31316C22.376 6.31805 23.5396 6.80279 24.3986 7.66179C25.2576 8.52079 25.7424 9.68444 25.7473 10.8992V21.1008C25.7424 22.3156 25.2576 23.4792 24.3986 24.3382C23.5396 25.1972 22.376 25.6819 21.1612 25.6868H10.8399C9.62514 25.6819 8.4615 25.1972 7.6025 24.3382C6.7435 23.4792 6.25875 22.3156 6.25386 21.1008V10.8992C6.25875 9.68444 6.7435 8.52079 7.6025 7.66179C8.4615 6.80279 9.62514 6.31805 10.8399 6.31316H21.1612ZM21.1612 4.1801H10.8399C7.14424 4.1801 4.12012 7.20767 4.12012 10.8999V21.1008C4.12012 24.7964 7.14768 27.8206 10.8399 27.8206H21.1612C24.8569 27.8206 27.881 24.793 27.881 21.1008V10.8992C27.881 7.20354 24.8569 4.1801 21.1612 4.1801Z\"\n fill=\"white\"\n />\n <path\n d=\"M16.0003 12.018C16.7878 12.018 17.5577 12.2516 18.2125 12.6891C18.8673 13.1267 19.3777 13.7485 19.6791 14.4762C19.9805 15.2038 20.0593 16.0044 19.9057 16.7768C19.752 17.5492 19.3728 18.2587 18.8159 18.8156C18.259 19.3725 17.5495 19.7518 16.7771 19.9054C16.0047 20.059 15.204 19.9802 14.4764 19.6788C13.7488 19.3774 13.1269 18.867 12.6894 18.2122C12.2519 17.5574 12.0183 16.7875 12.0183 16C12.0196 14.9443 12.4395 13.9322 13.186 13.1857C13.9325 12.4392 14.9446 12.0193 16.0003 12.018ZM16.0003 9.88498C14.7908 9.88498 13.6085 10.2436 12.6029 10.9155C11.5973 11.5875 10.8136 12.5425 10.3507 13.6599C9.8879 14.7772 9.76681 16.0068 10.0028 17.193C10.2387 18.3791 10.8211 19.4687 11.6763 20.3239C12.5315 21.1791 13.6211 21.7615 14.8073 21.9975C15.9935 22.2334 17.223 22.1123 18.3404 21.6495C19.4577 21.1867 20.4128 20.4029 21.0847 19.3973C21.7566 18.3917 22.1152 17.2094 22.1152 16C22.1152 14.3782 21.471 12.8228 20.3242 11.676C19.1774 10.5292 17.6221 9.88498 16.0003 9.88498Z\"\n fill=\"white\"\n />\n <path\n d=\"M22.2486 11.0665C23.0493 11.0665 23.6984 10.4174 23.6984 9.61666C23.6984 8.81596 23.0493 8.16687 22.2486 8.16687C21.4479 8.16687 20.7988 8.81596 20.7988 9.61666C20.7988 10.4174 21.4479 11.0665 22.2486 11.0665Z\"\n fill=\"white\"\n />\n </g>\n <defs>\n <linearGradient\n id=\"paint0_linear_3906_1520\"\n x1={20.9728}\n y1={33.3431}\n x2={11.0272}\n y2={-1.34314}\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#FFDB73\" />\n <stop offset={0.08} stopColor=\"#FDAD4E\" />\n <stop offset={0.15} stopColor=\"#FB832E\" />\n <stop offset={0.19} stopColor=\"#FA7321\" />\n <stop offset={0.23} stopColor=\"#F6692F\" />\n <stop offset={0.37} stopColor=\"#E84A5A\" />\n <stop offset={0.48} stopColor=\"#E03675\" />\n <stop offset={0.55} stopColor=\"#DD2F7F\" />\n <stop offset={0.68} stopColor=\"#B43D97\" />\n <stop offset={0.97} stopColor=\"#4D60D4\" />\n <stop offset={1} stopColor=\"#4264DB\" />\n </linearGradient>\n <clipPath id=\"clip0_3906_1520\">\n <rect width={size} height={size} fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n }\n )\n);\nInstagramIcon.displayName = \"InstagramIcon\";\nexport { InstagramIcon, type InstagramIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface KakaoTalkIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 32. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * KakaoTalk icon component - displays the KakaoTalk logo.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { KakaoTalkIcon } from '@scalably/ui';\n *\n * <KakaoTalkIcon size={32} className=\"sui-text-primary\" />\n * ```\n */\nconst KakaoTalkIcon = memo(\n forwardRef<SVGSVGElement, KakaoTalkIconProps>(\n ({ size = 32, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 32 32\"\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_3906_973)\">\n <path\n d=\"M16 32C24.8366 32 32 24.8366 32 16C32 7.16344 24.8366 0 16 0C7.16344 0 0 7.16344 0 16C0 24.8366 7.16344 32 16 32Z\"\n fill=\"#FFEB3B\"\n />\n <path\n d=\"M13.8855 14.6655L13.3091 16.2909H14.46L13.8855 14.6655ZM13.8855 14.6655L13.3091 16.2909H14.46L13.8855 14.6655ZM16 7.74364C10.4782 7.74364 6 11.2491 6 15.5764C6 18.3727 7.87091 20.8273 10.6873 22.2109C9.28909 27.0018 8.46727 27.3145 14.2236 23.2836C14.8121 23.3665 15.4057 23.4078 16 23.4073C21.5218 23.4073 26 19.9 26 15.5745C26 11.2491 21.5218 7.74364 16 7.74364ZM10.4709 18.3091C9.47273 18.3091 10.0618 16.9291 9.89455 14.3582C9.53091 14.2964 8.42727 14.6055 8.42727 13.7964C8.42823 13.6472 8.48829 13.5045 8.59428 13.3995C8.70027 13.2946 8.84355 13.2359 8.99273 13.2364C11.0909 13.3873 12.5127 12.8455 12.5127 13.7964C12.5127 14.62 11.4509 14.2891 11.0473 14.3582C10.88 16.92 11.4673 18.3091 10.4709 18.3091ZM15.8964 18.2218C15 18.6291 14.9782 17.7109 14.7636 17.3127H13.0055C12.7891 17.72 12.7709 18.6364 11.8727 18.2218C11.1982 17.9127 12.2964 16.3436 13.1164 13.8C13.1688 13.6376 13.2715 13.4959 13.4095 13.3955C13.5475 13.295 13.7138 13.2409 13.8845 13.2409C14.0553 13.2409 14.2216 13.295 14.3596 13.3955C14.4976 13.4959 14.6002 13.6376 14.6527 13.8C15.4891 16.3927 16.5745 17.9127 15.8964 18.2218ZM16.9618 18.2218C15.9964 18.2218 16.5836 16.9182 16.4164 13.8036C16.4164 13.0455 17.5945 13.0473 17.5945 13.8036V17.1745C18.1509 17.2491 19.3727 16.9 19.3727 17.7C19.3655 18.5455 18.0527 18.1182 16.9618 18.2255V18.2218ZM22.2964 18.0564L20.9436 16.2745L20.7436 16.4745V17.7273C20.7436 17.803 20.7287 17.878 20.6996 17.948C20.6705 18.0179 20.6278 18.0814 20.5741 18.1348C20.5203 18.1882 20.4566 18.2305 20.3864 18.2591C20.3163 18.2878 20.2412 18.3023 20.1655 18.3018C19.1636 18.3018 19.7636 16.8582 19.5891 13.8073C19.5901 13.655 19.6512 13.5094 19.7592 13.4021C19.8672 13.2948 20.0132 13.2345 20.1655 13.2345C21.0364 13.2345 20.66 14.4673 20.7418 15.04C22.3782 13.4782 22.3364 13.3127 22.6727 13.3127C23.1364 13.3127 23.42 13.8891 23.1109 14.1945L21.7964 15.5L23.2164 17.3691C23.68 17.9745 22.7545 18.6673 22.2964 18.06V18.0564ZM13.3091 16.2909H14.46L13.8855 14.6655L13.3091 16.2909ZM13.8855 14.6655L13.3091 16.2909H14.46L13.8855 14.6655ZM13.8855 14.6655L13.3091 16.2909H14.46L13.8855 14.6655Z\"\n fill=\"#3E2723\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_3906_973\">\n <rect width={size} height={size} fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n }\n )\n);\nKakaoTalkIcon.displayName = \"KakaoTalkIcon\";\nexport { KakaoTalkIcon, type KakaoTalkIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface LineIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 32. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * Line icon component - displays the Line logo.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { LineIcon } from '@scalably/ui';\n *\n * <LineIcon size={32} className=\"sui-text-primary\" />\n * ```\n */\nconst LineIcon = memo(\n forwardRef<SVGSVGElement, LineIconProps>(\n ({ size = 32, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 32 32\"\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_3906_955)\">\n <path\n d=\"M16 32C24.8366 32 32 24.8366 32 16C32 7.16344 24.8366 0 16 0C7.16344 0 0 7.16344 0 16C0 24.8366 7.16344 32 16 32Z\"\n fill=\"#39CD00\"\n />\n <path\n d=\"M26 15.6364C25.9858 15.8395 25.9597 16.0417 25.9218 16.2418C25.7953 17.008 25.5363 17.7463 25.1564 18.4236C24.9745 18.7473 24.1 19.9764 23.8327 20.3C22.3545 22.08 19.8782 24.1345 15.74 26.1327C15.6527 26.1749 15.5557 26.193 15.4591 26.1853C15.3624 26.1775 15.2696 26.1441 15.1902 26.0886C15.1107 26.033 15.0475 25.9573 15.007 25.8692C14.9666 25.781 14.9503 25.6837 14.96 25.5873L15.1691 23.7091C15.1849 23.5654 15.1431 23.4213 15.0527 23.3085C14.9624 23.1956 14.8309 23.1233 14.6873 23.1073C13.3106 22.9695 11.9696 22.5872 10.7273 21.9782C7.89091 20.5764 6 18.0727 6 15.22C6 10.8273 10.4764 7.27272 16 7.27272C18.7745 7.27272 21.2836 8.18181 23.0909 9.62363C24.7836 10.9782 25.8673 12.8164 25.9836 14.8564C26.003 15.1159 26.0085 15.3763 26 15.6364Z\"\n fill=\"white\"\n />\n <path\n d=\"M13.2439 16.98C13.2922 17.0273 13.3305 17.0839 13.3565 17.1464C13.3824 17.2089 13.3954 17.276 13.3948 17.3436C13.395 17.4109 13.382 17.4775 13.3564 17.5397C13.3308 17.6019 13.2933 17.6584 13.2458 17.7061C13.1983 17.7537 13.1419 17.7915 13.0798 17.8173C13.0177 17.8431 12.9511 17.8564 12.8839 17.8564H10.8384C10.7026 17.8559 10.5724 17.8017 10.4764 17.7057C10.3803 17.6096 10.3262 17.4795 10.3257 17.3436V13.48C10.3252 13.4124 10.3384 13.3453 10.3643 13.2829C10.3902 13.2204 10.4284 13.1638 10.4766 13.1164C10.5482 13.0446 10.6395 12.9957 10.7389 12.9759C10.8383 12.9562 10.9414 12.9665 11.0349 13.0055C11.1285 13.0444 11.2084 13.1104 11.2643 13.1949C11.3203 13.2794 11.3499 13.3786 11.3493 13.48V16.8309H12.8839C12.9508 16.8304 13.0172 16.8433 13.079 16.8689C13.1408 16.8945 13.1969 16.9323 13.2439 16.98Z\"\n fill=\"#00C200\"\n />\n <path\n d=\"M14.9095 13.3691V17.4545C14.909 17.5605 14.8667 17.6619 14.7918 17.7368C14.7169 17.8118 14.6154 17.854 14.5095 17.8545H14.2804C14.1743 17.8545 14.0725 17.8124 13.9975 17.7374C13.9225 17.6624 13.8804 17.5606 13.8804 17.4545V13.3691C13.8804 13.263 13.9225 13.1612 13.9975 13.0862C14.0725 13.0112 14.1743 12.9691 14.2804 12.9691H14.504C14.5569 12.9686 14.6094 12.9786 14.6585 12.9984C14.7075 13.0183 14.7522 13.0477 14.7898 13.0848C14.8275 13.122 14.8575 13.1662 14.878 13.215C14.8985 13.2638 14.9092 13.3161 14.9095 13.3691Z\"\n fill=\"#00C200\"\n />\n <path\n d=\"M19.6586 13.48V17.3218C19.6586 17.46 19.605 17.5928 19.509 17.6922C19.413 17.7916 19.2821 17.8498 19.144 17.8545C19.0146 17.8525 18.8906 17.8019 18.7967 17.7127C18.7786 17.6982 18.0913 16.8036 17.5077 16.0509C17.0713 15.4891 16.6931 14.9982 16.6931 14.9982V17.3418C16.6935 17.4412 16.6648 17.5384 16.6108 17.6218C16.5567 17.7051 16.4795 17.7708 16.3886 17.811C16.2977 17.8511 16.1971 17.8639 16.0991 17.8477C16.0011 17.8315 15.9099 17.7872 15.8367 17.72C15.784 17.6722 15.7418 17.6138 15.713 17.5487C15.6842 17.4835 15.6693 17.4131 15.6695 17.3418V13.5018C15.6678 13.3668 15.7179 13.2363 15.8096 13.1372C15.9013 13.0381 16.0275 12.9779 16.1622 12.9691C16.2384 12.9678 16.314 12.9835 16.3835 13.0149C16.453 13.0464 16.5146 13.0928 16.564 13.1509C16.5858 13.1764 17.6422 14.5509 18.2367 15.3327C18.4731 15.6382 18.6367 15.8527 18.6367 15.8527V13.4891C18.6377 13.3539 18.6918 13.2245 18.7874 13.1289C18.8831 13.0333 19.0124 12.9791 19.1477 12.9782C19.2816 12.9782 19.4102 13.0307 19.5057 13.1246C19.6013 13.2185 19.6562 13.3461 19.6586 13.48Z\"\n fill=\"#00C200\"\n />\n <path\n d=\"M21.4549 15.9218V16.8309H22.9876C23.0574 16.8267 23.1273 16.8369 23.193 16.8607C23.2587 16.8846 23.3188 16.9216 23.3697 16.9695C23.4206 17.0175 23.4611 17.0753 23.4888 17.1395C23.5166 17.2036 23.5308 17.2728 23.5308 17.3427C23.5308 17.4126 23.5166 17.4818 23.4888 17.546C23.4611 17.6101 23.4206 17.668 23.3697 17.7159C23.3188 17.7638 23.2587 17.8009 23.193 17.8247C23.1273 17.8485 23.0574 17.8587 22.9876 17.8545H20.9367C20.801 17.8541 20.6711 17.7998 20.5753 17.7037C20.4796 17.6076 20.4258 17.4775 20.4258 17.3418V13.48C20.4263 13.3446 20.4802 13.215 20.576 13.1193C20.6717 13.0235 20.8013 12.9696 20.9367 12.9691H22.9821C23.0519 12.9649 23.1218 12.9751 23.1875 12.9989C23.2532 13.0228 23.3134 13.0598 23.3643 13.1077C23.4151 13.1556 23.4557 13.2135 23.4834 13.2777C23.5111 13.3418 23.5254 13.411 23.5254 13.4809C23.5254 13.5508 23.5111 13.62 23.4834 13.6841C23.4557 13.7483 23.4151 13.8061 23.3643 13.8541C23.3134 13.902 23.2532 13.939 23.1875 13.9629C23.1218 13.9867 23.0519 13.9969 22.9821 13.9927H21.4549V14.9018H22.9876C23.1231 14.9018 23.2531 14.9556 23.3489 15.0514C23.4447 15.1473 23.4985 15.2772 23.4985 15.4127C23.4985 15.5482 23.4447 15.6782 23.3489 15.774C23.2531 15.8698 23.1231 15.9236 22.9876 15.9236L21.4549 15.9218Z\"\n fill=\"#00C200\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_3906_955\">\n <rect width={size} height={size} fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n }\n )\n);\nLineIcon.displayName = \"LineIcon\";\nexport { LineIcon, type LineIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface LinkedInIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 32. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * LinkedIn icon component - displays the LinkedIn logo.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { LinkedInIcon } from '@scalably/ui';\n *\n * <LinkedInIcon size={32} className=\"sui-text-primary\" />\n * ```\n */\nconst LinkedInIcon = memo(\n forwardRef<SVGSVGElement, LinkedInIconProps>(\n ({ size = 32, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 32 32\"\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_3906_908)\">\n <path\n d=\"M27.2655 27.2659H22.5241V19.8405C22.5241 18.0699 22.4925 15.7905 20.0581 15.7905C17.5886 15.7905 17.2108 17.7198 17.2108 19.7116V27.2654H12.4695V11.9959H17.0211V14.0826H17.0849C17.5404 13.3038 18.1987 12.6631 18.9895 12.2287C19.7804 11.7943 20.6742 11.5826 21.5759 11.616C26.3815 11.616 27.2675 14.777 27.2675 18.8893L27.2655 27.2659ZM7.1195 9.90875C5.59988 9.909 4.36775 8.67725 4.3675 7.15763C4.36725 5.638 5.59888 4.40588 7.1185 4.40563C8.63812 4.40525 9.87025 5.637 9.8705 7.15663C9.87063 7.88638 9.58087 8.5863 9.06497 9.10242C8.54906 9.61854 7.84925 9.90859 7.1195 9.90875ZM9.49025 27.266H4.74388V11.9959H9.49012L9.49025 27.266ZM29.6293 0.00225269H2.36137C1.07262 -0.0122473 0.01575 1.02013 0 2.30888V29.6905C0.01525 30.9799 1.072 32.0133 2.36125 31.9998H29.6293C30.9213 32.0158 31.9821 30.9824 32 29.6905V2.30675C31.9816 1.0155 30.9206 -0.0167473 29.6293 0.000127693\"\n fill=\"#0A66C2\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_3906_908\">\n <rect width={size} height={size} fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n }\n )\n);\nLinkedInIcon.displayName = \"LinkedInIcon\";\nexport { LinkedInIcon, type LinkedInIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface MessengerIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 32. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * Messenger icon component - displays the Messenger logo.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { MessengerIcon } from '@scalably/ui';\n *\n * <MessengerIcon size={32} className=\"sui-text-primary\" />\n * ```\n */\nconst MessengerIcon = memo(\n forwardRef<SVGSVGElement, MessengerIconProps>(\n ({ size = 32, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 32 32\"\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_3891_828)\">\n <path\n d=\"M15.9992 0.00311148C7.35243 -0.167372 0.197427 6.68921 0 15.3349C0.0225613 19.7359 1.9714 23.9064 5.33303 26.7471V31.3334C5.33303 31.7015 5.63152 32 5.99969 32C6.12462 32 6.24705 31.9649 6.35298 31.8987L10.0688 29.5776C11.9619 30.3017 13.9723 30.6709 15.9992 30.6668C24.6459 30.8373 31.8009 23.9807 31.9983 15.335C31.8009 6.68921 24.6459 -0.167372 15.9992 0.00311148Z\"\n fill=\"#2196F3\"\n />\n <path\n d=\"M26.5325 10.9354C26.3341 10.6695 25.9704 10.59 25.6792 10.7487L18.7462 14.5285L14.4332 10.83C14.1687 10.6033 13.7742 10.6184 13.5279 10.8647L5.52831 18.8643C5.26876 19.1254 5.27001 19.5475 5.53118 19.8071C5.73999 20.0146 6.06016 20.0606 6.31896 19.9203L13.2519 16.1404L17.569 19.8403C17.8335 20.067 18.228 20.0519 18.4743 19.8056L26.4738 11.806C26.707 11.5707 26.732 11.1999 26.5325 10.9354Z\"\n fill=\"#FAFAFA\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_3891_828\">\n <rect width={size} height={size} fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n }\n )\n);\nMessengerIcon.displayName = \"MessengerIcon\";\nexport { MessengerIcon, type MessengerIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface RedditIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 32. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * Reddit icon component - displays the Reddit logo.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { RedditIcon } from '@scalably/ui';\n *\n * <RedditIcon size={32} className=\"sui-text-primary\" />\n * ```\n */\nconst RedditIcon = memo(\n forwardRef<SVGSVGElement, RedditIconProps>(\n ({ size = 32, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 32 32\"\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_3906_928)\">\n <path\n d=\"M16 32C24.8366 32 32 24.8366 32 16C32 7.16344 24.8366 0 16 0C7.16344 0 0 7.16344 0 16C0 24.8366 7.16344 32 16 32Z\"\n fill=\"#FF4500\"\n />\n <path\n d=\"M26.6439 16.1525C26.6439 14.8555 25.5951 13.8254 24.3168 13.8254C23.713 13.8246 23.1322 14.0569 22.6956 14.474C21.0933 13.3294 18.8996 12.5856 16.4581 12.4903L17.5261 7.49263L20.9977 8.23638C21.0361 9.11388 21.7607 9.81975 22.6574 9.81975C23.5729 9.81975 24.3168 9.076 24.3168 8.16C24.3168 7.2445 23.5731 6.50063 22.6574 6.50063C22.0089 6.50063 21.4364 6.88213 21.1694 7.43538L17.2974 6.61513C17.1829 6.59588 17.0684 6.61513 16.9921 6.67238C16.8967 6.72963 16.8396 6.82488 16.8207 6.93938L15.6377 12.5091C13.1581 12.5856 10.9262 13.3294 9.30495 14.4931C8.86827 14.0761 8.28741 13.8437 7.68357 13.8446C6.38645 13.8446 5.35645 14.8935 5.35645 16.1717C5.35645 17.1254 5.92857 17.9264 6.72995 18.2891C6.69103 18.5223 6.67188 18.7584 6.6727 18.9949C6.6727 22.5806 10.8502 25.4994 16.0003 25.4994C21.1506 25.4994 25.3281 22.5999 25.3281 18.9949C25.3281 18.7585 25.3089 18.5224 25.2708 18.2891C26.0718 17.9264 26.6439 17.1061 26.6439 16.1525ZM10.6592 17.8119C10.6592 16.8964 11.4029 16.1525 12.3189 16.1525C13.2344 16.1525 13.9783 16.8962 13.9783 17.8119C13.9783 18.7275 13.2346 19.4716 12.3189 19.4716C11.4031 19.4904 10.6592 18.7275 10.6592 17.8119ZM19.9488 22.2183C18.8043 23.3629 16.6297 23.4393 16.0003 23.4393C15.3518 23.4393 13.1773 23.3436 12.0516 22.2183C11.8802 22.0466 11.8802 21.7795 12.0516 21.6079C12.2233 21.4365 12.4903 21.4365 12.6621 21.6079C13.3871 22.3329 14.9131 22.5806 16.0003 22.5806C17.0876 22.5806 18.6326 22.3328 19.3383 21.6079C19.5101 21.4365 19.7771 21.4365 19.9488 21.6079C20.1013 21.7795 20.1013 22.0466 19.9488 22.2183ZM19.6434 19.4905C18.7278 19.4905 17.9841 18.7467 17.9841 17.8311C17.9841 16.9155 18.7278 16.1717 19.6434 16.1717C20.5593 16.1717 21.3031 16.9155 21.3031 17.8311C21.3031 18.7274 20.5593 19.4905 19.6434 19.4905Z\"\n fill=\"white\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_3906_928\">\n <rect width={size} height={size} fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n }\n )\n);\nRedditIcon.displayName = \"RedditIcon\";\n\nexport { RedditIcon, type RedditIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface SignalIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 32. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * Signal icon component - displays the Signal logo.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { SignalIcon } from '@scalably/ui';\n *\n * <SignalIcon size={32} className=\"sui-text-primary\" />\n * ```\n */\nconst SignalIcon = memo(\n forwardRef<SVGSVGElement, SignalIconProps>(\n ({ size = 32, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 32 32\"\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_623_7334)\">\n <path\n d=\"M12.1601 0.467495L12.5201 1.92237C11.1039 2.27064 9.74858 2.83111 8.50006 3.58475L7.73006 2.29975C9.1059 1.46913 10.5995 0.851393 12.1601 0.467495ZM19.8401 0.467495L19.4801 1.92237C20.8962 2.27064 22.2515 2.83111 23.5001 3.58475L24.2751 2.29975C22.8977 1.46867 21.4024 0.850916 19.8401 0.467495ZM2.30006 7.72937C1.46939 9.10508 0.851568 10.5985 0.467557 12.159L1.92256 12.519C2.27091 11.103 2.83141 9.74777 3.58506 8.49937L2.30006 7.72937ZM1.50006 15.9987C1.49967 15.2716 1.55399 14.5454 1.66256 13.8264L0.180057 13.6014C-0.060019 15.1906 -0.060019 16.8069 0.180057 18.3961L1.66256 18.1711C1.55399 17.4521 1.49967 16.7259 1.50006 15.9987ZM24.2701 29.6977L23.5001 28.4127C22.2531 29.166 20.8995 29.7265 19.4851 30.0752L19.8451 31.53C21.4039 31.1456 22.8958 30.5279 24.2701 29.6977ZM30.5001 15.9987C30.5004 16.7259 30.4461 17.4521 30.3376 18.1711L31.8201 18.3961C32.0601 16.8069 32.0601 15.1907 31.8201 13.6015L30.3376 13.8265C30.4461 14.5455 30.5004 15.2716 30.5001 15.9987ZM31.5326 19.8385L30.0776 19.4785C29.7292 20.8945 29.1687 22.2497 28.4151 23.4981L29.7001 24.2731C30.5312 22.8959 31.149 21.4007 31.5326 19.8385ZM18.1726 30.3375C16.7323 30.5542 15.2678 30.5542 13.8276 30.3375L13.6026 31.82C15.1919 32.0599 16.8082 32.0599 18.3976 31.82L18.1726 30.3375ZM27.6726 24.6005C26.8077 25.7717 25.772 26.8065 24.6001 27.6702L25.4901 28.8776C26.7829 27.9271 27.9256 26.7878 28.8801 25.4979L27.6726 24.6005ZM24.6001 4.32712C25.7722 5.19165 26.8079 6.22728 27.6726 7.39937L28.8801 6.49937C27.9287 5.21024 26.7893 4.07107 25.5001 3.11987L24.6001 4.32712ZM4.32756 7.39937C5.19218 6.22728 6.22789 5.19165 7.40006 4.32712L6.50006 3.11975C5.21076 4.07102 4.07143 5.21027 3.12006 6.4995L4.32756 7.39937ZM29.7001 7.72937L28.4151 8.49937C29.1682 9.74622 29.7287 11.0997 30.0776 12.514L31.5326 12.154C31.1481 10.5952 30.5303 9.10353 29.7001 7.72937ZM13.8276 1.6625C15.2678 1.44577 16.7323 1.44577 18.1726 1.6625L18.3976 0.179995C16.8082 -0.059917 15.1919 -0.059917 13.6026 0.179995L13.8276 1.6625ZM5.09756 29.2752L2.00006 29.9977L2.72256 26.9004L1.26256 26.5579L0.540057 29.6552C0.481842 29.9037 0.488007 30.163 0.55797 30.4084C0.627933 30.6539 0.759378 30.8774 0.939863 31.0579C1.12035 31.2383 1.3439 31.3698 1.58936 31.4397C1.83482 31.5096 2.09407 31.5157 2.34256 31.4575L5.43756 30.7475L5.09756 29.2752ZM1.57506 25.2205L3.03506 25.5605L3.53506 23.4131C2.8063 22.1884 2.26291 20.8624 1.92256 19.4785L0.467557 19.8385C0.79371 21.164 1.28947 22.4419 1.94256 23.6406L1.57506 25.2205ZM8.57506 28.4702L6.42756 28.9702L6.76756 30.4302L8.34756 30.0627C9.54638 30.7158 10.8244 31.2115 12.1501 31.5375L12.5101 30.0826C11.1289 29.7383 9.80626 29.1916 8.58506 28.4602L8.57506 28.4702ZM16.0001 2.99975C11.2697 3.00225 6.91381 5.57387 4.62693 9.71437C2.34006 13.855 2.48293 18.9109 5.00006 22.9156L3.75006 28.2477L9.08256 26.9979C13.7598 29.9436 19.7884 29.6096 24.1117 26.1654C28.4349 22.7211 30.1071 16.9197 28.2804 11.7031C26.4538 6.48625 21.5276 2.99525 16.0001 2.99975Z\"\n fill=\"#3A76F0\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_623_7334\">\n <rect width={size} height={size} fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n }\n )\n);\nSignalIcon.displayName = \"SignalIcon\";\n\nexport { SignalIcon, type SignalIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface SlackIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 32. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * Slack icon component - displays the Slack logo.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { SlackIcon } from '@scalably/ui';\n *\n * <SlackIcon size={32} className=\"sui-text-primary\" />\n * ```\n */\nconst SlackIcon = memo(\n forwardRef<SVGSVGElement, SlackIconProps>(\n ({ size = 32, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 32 32\"\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_623_7196)\">\n <path\n d=\"M6.73014 20.165C6.73014 22.019 5.23177 23.5175 3.37777 23.5175C1.52377 23.5175 0.0253906 22.019 0.0253906 20.165C0.0253906 18.3111 1.52377 16.8127 3.37789 16.8127H6.73002L6.73014 20.165ZM8.40639 20.165C8.40639 18.3111 9.90477 16.8127 11.7588 16.8127C13.6128 16.8127 15.1111 18.3111 15.1111 20.1651V28.546C15.1111 30.4 13.6128 31.8985 11.7586 31.8985C9.90489 31.8985 8.40639 30.4 8.40639 28.546V20.165Z\"\n fill=\"#E01E5A\"\n />\n <path\n d=\"M11.7587 6.70475C9.90475 6.70475 8.40625 5.20638 8.40625 3.35238C8.40625 1.49838 9.90487 0 11.7587 0C13.6126 0 15.1111 1.49838 15.1111 3.35238V6.70487L11.7587 6.70475ZM11.7587 8.40637C13.6128 8.40637 15.1111 9.90475 15.1111 11.7587C15.1111 13.6128 13.6128 15.1111 11.7586 15.1111H3.3525C1.49837 15.1111 0 13.6128 0 11.7586C0 9.90487 1.49838 8.40637 3.35238 8.40637H11.7587Z\"\n fill=\"#36C5F0\"\n />\n <path\n d=\"M25.194 11.7587C25.194 9.90475 26.6924 8.40625 28.5462 8.40625C30.4001 8.40625 31.8987 9.90475 31.8987 11.7587C31.8987 13.6128 30.4002 15.1111 28.5462 15.1111H25.194V11.7587ZM23.5177 11.7587C23.5177 13.6128 22.0192 15.1111 20.1652 15.1111C18.3114 15.1111 16.813 13.6128 16.813 11.7586V3.3525C16.813 1.49837 18.3114 0 20.1652 0C22.0191 0 23.5176 1.49838 23.5176 3.35238L23.5177 11.7587Z\"\n fill=\"#2EB67D\"\n />\n <path\n d=\"M20.1652 25.1937C22.0192 25.1937 23.5177 26.6921 23.5177 28.546C23.5177 30.3999 22.0192 31.8985 20.1652 31.8985C18.3114 31.8985 16.813 30.4 16.813 28.546V25.1937H20.1652ZM20.1652 23.5175C18.3114 23.5175 16.813 22.019 16.813 20.165C16.813 18.3111 18.3114 16.8127 20.1654 16.8127H28.5716C30.4256 16.8127 31.9241 18.3111 31.9241 20.1651C31.9241 22.0191 30.4256 23.5175 28.5716 23.5175H20.1652Z\"\n fill=\"#ECB22E\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_623_7196\">\n <rect width={size} height={size} fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n }\n )\n);\nSlackIcon.displayName = \"SlackIcon\";\nexport { SlackIcon, type SlackIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface TelegramIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 32. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * Telegram icon component - displays the Telegram logo.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { TelegramIcon } from '@scalably/ui';\n *\n * <TelegramIcon size={32} className=\"sui-text-primary\" />\n * ```\n */\nconst TelegramIcon = memo(\n forwardRef<SVGSVGElement, TelegramIconProps>(\n ({ size = 32, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 32 32\"\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_3906_919)\">\n <path\n d=\"M16 0C11.7575 0 7.685 1.68675 4.6875 4.68625C1.68693 7.68696 0.000858621 11.7565 0 16C0 20.2417 1.6875 24.3142 4.6875 27.3137C7.685 30.3132 11.7575 32 16 32C20.2425 32 24.315 30.3132 27.3125 27.3137C30.3125 24.3142 32 20.2417 32 16C32 11.7583 30.3125 7.68575 27.3125 4.68625C24.315 1.68675 20.2425 0 16 0Z\"\n fill=\"url(#paint0_linear_3906_919)\"\n />\n <path\n d=\"M7.24262 15.831C11.9076 13.799 15.0176 12.4593 16.5726 11.812C21.0176 9.96374 21.9401 9.64274 22.5426 9.63187C22.6751 9.62974 22.9701 9.66249 23.1626 9.81812C23.3226 9.94937 23.3676 10.1269 23.3901 10.2515C23.4101 10.376 23.4376 10.6597 23.4151 10.8812C23.1751 13.4112 22.1326 19.5507 21.6026 22.3845C21.3801 23.5835 20.9376 23.9855 20.5101 24.0247C19.5801 24.1102 18.8751 23.4107 17.9751 22.821C16.5676 21.8977 15.7726 21.3232 14.4051 20.4225C12.8251 19.3815 13.8501 18.8092 14.7501 17.8742C14.9851 17.6295 19.0801 13.9057 19.1576 13.568C19.1676 13.5257 19.1776 13.3682 19.0826 13.2852C18.9901 13.202 18.8526 13.2305 18.7526 13.253C18.6101 13.285 16.3626 14.772 12.0026 17.7137C11.3651 18.1522 10.7876 18.366 10.2676 18.3547C9.69762 18.3425 8.59762 18.0317 7.78012 17.7662C6.78012 17.4405 5.98262 17.2682 6.05262 16.715C6.08762 16.427 6.48512 16.1322 7.24262 15.831Z\"\n fill=\"white\"\n />\n </g>\n <defs>\n <linearGradient\n id=\"paint0_linear_3906_919\"\n x1={1600}\n y1={0}\n x2={1600}\n y2={3200}\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#2AABEE\" />\n <stop offset={1} stopColor=\"#229ED9\" />\n </linearGradient>\n <clipPath id=\"clip0_3906_919\">\n <rect width={size} height={size} fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n }\n )\n);\nTelegramIcon.displayName = \"TelegramIcon\";\nexport { TelegramIcon, type TelegramIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface TiktokIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 32. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * Tiktok icon component - displays the Tiktok logo.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { TiktokIcon } from '@scalably/ui';\n *\n * <TiktokIcon size={32} className=\"sui-text-primary\" />\n * ```\n */\nconst TiktokIcon = memo(\n forwardRef<SVGSVGElement, TiktokIconProps>(\n ({ size = 32, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 32 32\"\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_3906_934)\">\n <path\n d=\"M22.9354 11.5223C24.9964 12.9949 27.5213 13.8613 30.2483 13.8613V8.6166C29.7321 8.6168 29.2174 8.56296 28.7125 8.45594V12.5843C25.9857 12.5843 23.4612 11.718 21.3997 10.2455V20.9485C21.3997 26.3028 17.057 30.6429 11.7004 30.6429C9.70172 30.6429 7.84395 30.0389 6.30078 29.0031C8.06211 30.8032 10.5184 31.9198 13.2357 31.9198C18.5928 31.9198 22.9356 27.5797 22.9356 22.2252V11.5223H22.9354ZM24.83 6.23106C23.7766 5.08093 23.085 3.59459 22.9354 1.95133V1.27679H21.48C21.8464 3.36529 23.096 5.14957 24.83 6.23106ZM9.68881 24.8946C9.10027 24.1234 8.78216 23.1799 8.78365 22.2099C8.78365 19.7611 10.77 17.7756 13.2206 17.7756C13.6772 17.7753 14.1312 17.8454 14.5665 17.9833V12.6213C14.0578 12.5517 13.5445 12.522 13.0314 12.533V16.7064C12.5959 16.5684 12.1417 16.4984 11.6848 16.4988C9.2343 16.4988 7.24809 18.4841 7.24809 20.9332C7.24809 22.6649 8.24086 24.1642 9.68881 24.8946Z\"\n fill=\"#FF004F\"\n />\n <path\n d=\"M21.3999 10.2454C23.4615 11.7178 25.9858 12.5842 28.7127 12.5842V8.45583C27.1906 8.13175 25.8432 7.33682 24.8301 6.23106C23.096 5.14946 21.8466 3.36518 21.4802 1.27679H17.6576V22.225C17.6488 24.6671 15.6659 26.6445 13.2206 26.6445C11.7797 26.6445 10.4995 25.9581 9.68879 24.8944C8.24106 24.1642 7.24818 22.6648 7.24818 20.9333C7.24818 18.4844 9.23439 16.4989 11.6849 16.4989C12.1544 16.4989 12.607 16.5719 13.0315 16.7065V12.5331C7.7689 12.6418 3.53662 16.9395 3.53662 22.2251C3.53662 24.8637 4.59052 27.2556 6.30109 29.0034C7.84426 30.0389 9.70192 30.6431 11.7007 30.6431C17.0574 30.6431 21.4 26.3027 21.4 20.9485L21.3999 10.2454Z\"\n fill=\"black\"\n />\n <path\n d=\"M28.7127 8.45572V7.3397C27.3401 7.34169 25.9947 6.95751 24.8301 6.23106C25.861 7.35902 27.2183 8.13686 28.7127 8.45595M21.4801 1.27669C21.4453 1.07714 21.4185 0.876257 21.3998 0.674538V0H16.1216V20.9484C16.1132 23.3903 14.1303 25.3677 11.6848 25.3677C10.9916 25.3688 10.3078 25.2067 9.6887 24.8947C10.4994 25.9581 11.7796 26.6444 13.2205 26.6444C15.6657 26.6444 17.6489 24.6673 17.6575 22.2251V1.2768L21.4801 1.27669ZM13.0317 12.533V11.3447C12.5906 11.2844 12.146 11.2543 11.7008 11.2544C6.3436 11.2544 2.00098 15.5947 2.00098 20.9484C2.00098 24.305 3.70768 27.2631 6.30122 29.0031C4.59066 27.2555 3.53676 24.8634 3.53676 22.225C3.53676 16.9395 7.76892 12.6417 13.0317 12.533Z\"\n fill=\"#00F2EA\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_3906_934\">\n <rect\n width={28.25}\n height={32}\n fill=\"white\"\n transform=\"translate(2)\"\n />\n </clipPath>\n </defs>\n </svg>\n );\n }\n )\n);\nTiktokIcon.displayName = \"TiktokIcon\";\n\nexport { TiktokIcon, type TiktokIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface TwitchIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 32. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * Twitch icon component - displays the Twitch logo.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { TwitchIcon } from '@scalably/ui';\n *\n * <TwitchIcon size={32} className=\"sui-text-primary\" />\n * ```\n */\nconst TwitchIcon = memo(\n forwardRef<SVGSVGElement, TwitchIconProps>(\n ({ size = 32, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 32 32\"\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=\"M3.086 0L1.00146 5.55893V27.7919H8.64123V31.9631H12.8121L16.979 27.7919H23.231L31.5686 19.4572V0H3.086ZM5.8632 2.77767H28.7901V18.0647L23.9258 22.9293H16.285L12.1194 27.0949V22.9294H5.8632V2.77767ZM13.5059 16.6768H16.285V8.33958H13.5059V16.6768ZM21.1474 16.6768H23.9259V8.33958H21.1474V16.6768Z\"\n fill=\"#5A3E85\"\n />\n </svg>\n );\n }\n )\n);\nTwitchIcon.displayName = \"TwitchIcon\";\n\nexport { TwitchIcon, type TwitchIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface WhatsAppIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 32. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * WhatsApp icon component - displays the WhatsApp logo.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { WhatsAppIcon } from '@scalably/ui';\n *\n * <WhatsAppIcon size={32} className=\"sui-text-primary\" />\n * ```\n */\nconst WhatsAppIcon = memo(\n forwardRef<SVGSVGElement, WhatsAppIconProps>(\n ({ size = 32, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 32 32\"\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_623_7322)\">\n <path\n d=\"M0.681463 15.8085C0.680719 18.4971 1.38323 21.1224 2.71904 23.4363L0.553711 31.3423L8.6445 29.2208C10.8823 30.4391 13.3896 31.0774 15.9375 31.0776H15.9442C24.3554 31.0776 31.2023 24.2332 31.2059 15.8205C31.2075 11.744 29.6214 7.9107 26.7396 5.02673C23.8584 2.14301 20.0265 0.554046 15.9436 0.552185C7.53145 0.552185 0.68506 7.39622 0.681587 15.8085\"\n fill=\"url(#paint0_linear_623_7322)\"\n />\n <path\n d=\"M0.136619 15.8035C0.135751 18.5889 0.863441 21.308 2.24688 23.7048L0.00390625 31.8942L8.38481 29.6967C10.694 30.9558 13.294 31.6196 15.9395 31.6206H15.9464C24.6593 31.6206 31.7521 24.53 31.7558 15.8162C31.7573 11.5932 30.1142 7.62208 27.1295 4.63479C24.1444 1.64788 20.1754 0.00173643 15.9464 0C7.23194 0 0.140092 7.08961 0.136619 15.8035ZM5.12775 23.292L4.81482 22.7953C3.49935 20.7036 2.80502 18.2865 2.80601 15.8045C2.80874 8.56174 8.70319 2.66915 15.9513 2.66915C19.4614 2.67064 22.7601 4.03895 25.2412 6.52155C27.7222 9.0044 29.0874 12.3049 29.0866 15.8152C29.0833 23.058 23.1888 28.9513 15.9464 28.9513H15.9411C13.5829 28.9501 11.2701 28.3168 9.25315 27.12L8.77315 26.8353L3.79975 28.1393L5.12775 23.292Z\"\n fill=\"url(#paint1_linear_623_7322)\"\n />\n <path\n d=\"M11.9949 9.19665C11.699 8.53891 11.3876 8.52564 11.1061 8.5141C10.8757 8.50418 10.6122 8.50493 10.3491 8.50493C10.0856 8.50493 9.65758 8.60403 9.29578 8.99907C8.93361 9.39448 7.91309 10.35 7.91309 12.2935C7.91309 14.2369 9.32865 16.1152 9.52599 16.379C9.72357 16.6424 12.2588 20.7582 16.2739 22.3416C19.6108 23.6574 20.2899 23.3957 21.0141 23.3297C21.7385 23.264 23.3513 22.3744 23.6804 21.452C24.0097 20.5297 24.0097 19.7392 23.911 19.5739C23.8122 19.4094 23.5488 19.3105 23.1538 19.113C22.7587 18.9156 20.8165 17.9598 20.4545 17.828C20.0923 17.6962 19.829 17.6305 19.5656 18.026C19.3021 18.421 18.5456 19.3105 18.3151 19.5739C18.0847 19.838 17.8542 19.8709 17.4593 19.6733C17.064 19.4751 15.7918 19.0585 14.2825 17.7129C13.1081 16.6658 12.3153 15.3728 12.0849 14.9772C11.8544 14.5823 12.0602 14.3682 12.2583 14.1714C12.4358 13.9944 12.6534 13.7101 12.8511 13.4796C13.0481 13.2489 13.1138 13.0843 13.2456 12.8208C13.3774 12.5571 13.3114 12.3264 13.2128 12.1289C13.1138 11.9313 12.3462 9.97767 11.9949 9.19665Z\"\n fill=\"white\"\n />\n </g>\n <defs>\n <linearGradient\n id=\"paint0_linear_623_7322\"\n x1={1533.16}\n y1={3079.56}\n x2={1533.16}\n y2={0.552185}\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#1FAF38\" />\n <stop offset={1} stopColor=\"#60D669\" />\n </linearGradient>\n <linearGradient\n id=\"paint1_linear_623_7322\"\n x1={1587.6}\n y1={3189.42}\n x2={1587.6}\n y2={0}\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#F9F9F9\" />\n <stop offset={1} stopColor=\"white\" />\n </linearGradient>\n <clipPath id=\"clip0_623_7322\">\n <rect width={size} height={size} fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n }\n )\n);\nWhatsAppIcon.displayName = \"WhatsAppIcon\";\nexport { WhatsAppIcon, type WhatsAppIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface XIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 32. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * X icon component - displays the X logo.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { XIcon } from '@scalably/ui';\n *\n * <XIcon size={32} className=\"sui-text-primary\" />\n * ```\n */\nconst XIcon = memo(\n forwardRef<SVGSVGElement, XIconProps>(\n ({ size = 32, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 32 32\"\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_3560_983)\">\n <path\n d=\"M16 0C7.16375 0 0 7.16375 0 16C0 24.8363 7.16375 32 16 32C24.8363 32 32 24.8363 32 16C32 7.16375 24.8363 0 16 0Z\"\n fill=\"black\"\n />\n <path\n d=\"M17.7506 14.5521L24.6 6.59018H22.9769L17.0296 13.5034L12.2795 6.59018H6.80078L13.9839 17.0441L6.80078 25.3934H8.42397L14.7045 18.0928L19.721 25.3934H25.1997L17.7502 14.5521H17.7506ZM9.00881 7.8121H11.5019L22.9777 24.2271H20.4846L9.00881 7.8121Z\"\n fill=\"white\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_3560_983\">\n <rect width={size} height={size} fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n }\n )\n);\n\nXIcon.displayName = \"XIcon\";\nexport { XIcon, type XIconProps };\n","import { cn } from \"@/lib/utils\";\nimport { forwardRef, memo } from \"react\";\n\ninterface YoutubeIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels. Defaults to 32. */\n size?: number;\n /** Additional CSS classes to apply to the icon */\n className?: string;\n}\n\n/**\n * Youtube icon component - displays the Youtube logo.\n *\n * This icon uses `currentColor`, so it can be styled with Tailwind classes.\n *\n * @example\n * ```tsx\n * import { YoutubeIcon } from '@scalably/ui';\n *\n * <YoutubeIcon size={32} className=\"sui-text-primary\" />\n * ```\n */\nconst YoutubeIcon = memo(\n forwardRef<SVGSVGElement, YoutubeIconProps>(\n ({ size = 32, className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 32 32\"\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=\"M31.2901 8.43139C31.1066 7.76816 30.7486 7.16351 30.2518 6.67766C29.7551 6.1918 29.1368 5.8417 28.4586 5.6622C25.9759 5 15.9836 5 15.9836 5C15.9836 5 5.99078 5.02004 3.50802 5.68224C2.82984 5.86175 2.21158 6.21188 1.7148 6.69775C1.21802 7.18363 0.860064 7.7883 0.676572 8.45156C-0.0744062 12.7658 -0.365724 19.3396 0.697193 23.4812C0.880704 24.1445 1.23867 24.7491 1.73545 25.235C2.23222 25.7208 2.85048 26.0709 3.52864 26.2504C6.01141 26.9126 16.004 26.9126 16.004 26.9126C16.004 26.9126 25.9964 26.9126 28.479 26.2504C29.1572 26.0709 29.7755 25.7208 30.2723 25.235C30.7691 24.7491 31.1271 24.1445 31.3106 23.4812C32.1027 19.1609 32.3468 12.5911 31.2901 8.43139Z\"\n fill=\"#FF0000\"\n />\n <path\n d=\"M12.8032 20.6518L21.0926 15.9562L12.8032 11.2607V20.6518Z\"\n fill=\"white\"\n />\n </svg>\n );\n }\n )\n);\nYoutubeIcon.displayName = \"YoutubeIcon\";\nexport { YoutubeIcon, type YoutubeIconProps };\n"]}
|