@texturehq/edges 0.1.6 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components.manifest.json +122 -2
- package/dist/index.cjs +5 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +64 -3
- package/dist/index.d.ts +64 -3
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/dist/styles.css +168 -22
- package/package.json +1 -1
- package/scripts/setup-cursor-rules-manual.js +1 -14
- package/scripts/setup-cursor-rules.js +24 -44
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Autocomplete/Autocomplete.tsx","../packages/@react-aria/ssr/src/SSRProvider.tsx","../node_modules/@react-aria/i18n/dist/packages/@react-aria/i18n/src/utils.ts","../node_modules/@react-aria/i18n/dist/packages/@react-aria/i18n/src/useDefaultLocale.ts","../node_modules/@react-aria/i18n/dist/packages/@react-aria/i18n/src/context.tsx","../node_modules/@react-aria/i18n/dist/packages/@react-aria/i18n/src/useCollator.ts","../node_modules/@react-aria/i18n/dist/packages/@react-aria/i18n/src/useFilter.ts","../src/components/Icon/Icon.tsx","../src/utils/controlStyles.ts","../src/components/Field/Field.tsx","../src/components/ListBoxItem/ListBoxItem.tsx","../src/components/Popover/Popover.tsx","../src/utils/index.ts","../src/hooks/useDebounce.ts","../src/components/Button/Button.tsx","../src/components/Calendar/Calendar.tsx","../src/components/Heading/Heading.tsx","../src/components/Skeleton/Skeleton.tsx","../src/components/Card/Card.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/Tooltip/Tooltip.tsx","../src/components/CopyToClipboard/CopyToClipboard.tsx","../src/components/DateField/DateField.tsx","../src/components/Dialog/Dialog.tsx","../src/components/RangeCalendar/RangeCalendar.tsx","../src/components/DateRangePicker/DateRangePicker.tsx","../src/components/DialogHeader/DialogHeader.tsx","../src/components/ErrorBoundary/ErrorBoundary.tsx","../src/components/Drawer/Drawer.tsx","../src/components/Form/Form.tsx","../src/components/ListBox/ListBox.tsx","../src/components/Loader/Loader.tsx","../src/components/Logo/Logo.tsx","../src/components/NumberField/NumberField.tsx","../src/components/PlaceSearch/PlaceSearch.tsx","../src/components/ProgressBar/ProgressBar.tsx","../src/components/Select/Select.tsx","../src/components/Switch/Switch.tsx","../src/components/Tabs/Tabs.tsx","../src/components/TextArea/TextArea.tsx","../src/components/TextField/TextField.tsx","../src/components/TextLink/TextLink.tsx","../src/components/TimeField/TimeField.tsx","../src/components/ToggleButton/ToggleButton.tsx","../src/components/Slider/Slider.tsx","../src/components/RadioGroup/RadioGroup.tsx"],"names":["$b5e257d569688ac6$var$defaultContext","$b5e257d569688ac6$var$SSRContext","$670gB$react","$b5e257d569688ac6$var$IsSSRContext","$b5e257d569688ac6$var$canUseDOM","$b5e257d569688ac6$var$componentIds","$b5e257d569688ac6$var$useCounter","isDisabled","ctx","$670gB$useContext","ref","$670gB$useRef","_React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED_ReactCurrentOwner","_React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","currentOwner","prevComponentValue","$b5e257d569688ac6$var$useLegacySSRSafeId","defaultId","counter","prefix","$b5e257d569688ac6$var$useModernSSRSafeId","id","didSSR","$670gB$useState","$b5e257d569688ac6$export$535bd6ca7f90a273","$b5e257d569688ac6$var$getSnapshot","$b5e257d569688ac6$var$getServerSnapshot","$b5e257d569688ac6$var$subscribe","onStoreChange","$148a7a147e38ea7f$var$RTL_SCRIPTS","$148a7a147e38ea7f$var$RTL_LANGS","$148a7a147e38ea7f$export$702d680b21cbd764","localeString","locale","textInfo","lang","$1e5a04cdaf7d1af8$var$localeSymbol","$1e5a04cdaf7d1af8$export$f09106e7c6677ec5","$1e5a04cdaf7d1af8$var$currentLocale","$1e5a04cdaf7d1af8$var$listeners","$1e5a04cdaf7d1af8$var$updateLocale","listener","$1e5a04cdaf7d1af8$export$188ec29ebc2bdc3a","isSSR","defaultLocale","setDefaultLocale","$ffhGL$useState","$ffhGL$useEffect","$18f2051aff69b9bf$var$I18nContext","$h9FiU$react","$18f2051aff69b9bf$export$43bb16f9c6d9e3f7","$h9FiU$useContext","$325a3faab7a68acd$var$cache","$325a3faab7a68acd$export$a16aca283550c30d","options","cacheKey","a","b","formatter","$bb77f239b46e8c72$export$3274cf84b703fff","collator","startsWith","$21ck9$useCallback","string","substring","endsWith","contains","scan","sliceLen","slice","$21ck9$useMemo","TextureMenuLight","jsx","TextureMenuDark","iconMapping","AppWindow","ArrowCircleUp","ArrowDown","ArrowLeft","ArrowLineLeft","ArrowRight","ArrowSquareOut","ArrowUp","ArrowsClockwise","BatteryCharging","BatteryEmpty","BatteryFull","BatteryHigh","BatteryLow","BatteryMedium","BatteryWarning","BookOpen","BookmarkSimple","BracketsCurly","Broadcast","Buildings","CalendarBlank","CaretDown","CaretLeft","CaretRight","CaretUp","CarSimple","ChargingStation","ChartBar","ChartLine","ChartLineUp","Check","CheckCircle","CheckSquare","Circle","CircleDashed","CircleNotch","ClipboardText","ClockCountdown","Cloud","CloudArrowDown","CloudFog","CloudLightning","CloudRain","CloudSnow","CloudSun","Code","Columns","Copy","Cursor","Database","DotsSix","DotsThree","DownloadSimple","EnvelopeSimple","Eye","EyeClosed","EyeSlash","Export","FireSimple","Flag","Gauge","GearSix","GitBranch","HandPointing","Handshake","Info","IntersectSquare","Lightning","LightningSlash","List","ListBullets","ListNumbers","Lock","MagnifyingGlass","MapPin","MapPinArea","MaskHappy","Moon","PaperPlaneRight","PaperPlaneTilt","PaperclipHorizontal","PencilSimple","Plugs","PlugsConnected","Plus","Power","Pulse","Question","Repeat","Rocket","ShareNetwork","ShieldCheck","SignOut","SlackLogo","Sliders","SlidersHorizontal","Snowflake","SolarPanel","Square","SquaresFour","Stack","Sun","Terminal","ThermometerCold","ThermometerHot","ThermometerSimple","Trash","TreeEvergreen","User","UserCircle","UserPlus","Users","UsersFour","Warning","WarningCircle","WebhooksLogo","Wind","X","WaveSine","Icon","memo","name","size","color","weight","className","title","ariaLabel","grow","variant","rounded","bgColor","props","IconComponent","isCustom","accessibilityLabel","defaultBg","brandWrapperClasses","twMerge","wrapperClasses","iconEl","controlStyles","useInputFocus","isFocused","setIsFocused","React","handleFocus","e","onFocus","handleBlur","onBlur","InputWrapper","children","ClearButton","onClick","getInputStateStyles","isInvalid","baseStyles","getInputBackgroundStyles","getInputBaseStyles","transparent","getFieldGroupStyles","isFocusWithin","Label","tooltip","isRequired","htmlFor","jsxs","Description","FieldError","Input","FieldGroup","rest","itemHeightStylesObject","textSizeStylesObject","ListBoxItem","AriaListBoxItem","getPopoverStyles","isEntering","isExiting","enteringStyles","exitingStyles","Popover","showArrow","isSubmenu","useSlottedContext","PopoverContext","offset","AriaPopover","composeRenderProps","renderProps","OverlayArrow","focusRing","showDefaultOutline","composeTailwindRenderProps","tw","useDebounce","value","delay","debouncedValue","setDebouncedValue","useState","useEffect","timer","iconSizeClassMap","inputPaddingLeftMap","state","ComboBoxStateContext","AriaButton","getItemName","key","staticItems","sections","selectedItem","s","item","handleRestRequest","config","filterText","signal","baseUrl","params","finalUrl","response","json","error","errorMessage","handleGraphQLRequest","query","obj","Autocomplete","label","selectedKey","defaultSelectedKey","onSelectionChange","requestConfig","defaultFilter","placeholder","description","validationResult","showErrors","renderItem","renderLeftIcon","renderSection","autoFocus","triggerRef","triggerWidth","setTriggerWidth","inputValue","setInputValue","debouncedInputValue","setError","textSizeClass","heightSizeClass","dynamicItems","updateTriggerWidth","useAsyncList","result","handleInternalSelectionChange","newName","handleInternalInputChange","text","currentSelectedItemName","ComboBox","section","Group","AriaInput","isPressed","ListBox","sectionItems","Fragment","ListBoxSection","Header","variantStyles","widthStyles","disabledStyles","enabledStyles","badgePositionStyles","badgeVariantStyles","getButtonStyles","fullWidth","isLoading","styles","Button","icon","loadingText","loadingIndicator","iconPosition","iconWeight","href","badgeNumber","badgeVariant","badgePosition","style","restProps","iconElement","content","loadingNode","composedClassName","buttonOrLink","RACLink","RACButton","getCellStyles","isSelected","Calendar","AriaCalendar","CalendarHeader","CalendarGrid","CalendarGridHeader","CalendarGridBody","date","CalendarCell","Text","direction","useLocale","buttonSize","Heading","AriaCalendarGridHeader","day","CalendarHeaderCell","sizeVariants","heightVariants","Tag","height","sizeClasses","heightClasses","Skeleton","width","animation","gradient","flex","stack","responsive","adjustAnimationSpeedBasedOnWidth","dataTestId","visible","setVisible","baseClasses","animationSpeed","numWidth","animationClasses","shapeClasses","layoutClasses","responsiveStyles","breakpoint","lineWidth","index","Card","heading","upperRightText","withPadding","isGhost","cardClasses","getCheckboxStyles","getBoxStyles","isIndeterminate","colorStyles","iconStyles","Checkbox","otherProps","AriaCheckbox","checkboxContent","Minus","Tooltip","TooltipTrigger","AriaTooltip","CopyToClipboard","showTooltip","setShowTooltip","copyButton","textToCopy","DateField","AriaDateField","DateInput","getSegmentStyles","isPlaceholder","AriaDateInput","segment","DateSegment","Dialog","RACDialog","getCellClassName","selectionState","selectionStateClasses","disabledClasses","RangeCalendar","AriaRangeCalendar","formattedDate","isSelectionStart","isSelectionEnd","_isFocusVisible","DateRangePicker","AriaDateRangePicker","CalendarIcon","DialogHeader","onClose","hideCloseIcon","titleAlign","hasBackArrow","onBack","headerContent","ErrorBoundary","Component","__publicField","errorInfo","Drawer","isOpen","slideInFrom","transparentOverlay","primaryAction","secondaryAction","footerContent","contentPadding","isAnimating","setIsAnimating","hasActions","hasFooter","ModalOverlay","Modal","Form","RACForm","AriaListBox","Loader","Logo","showWordmark","fillClass","getNumberFieldStyles","NumberField","useId","AriaNumberField","isMapboxResponse","data","MAPBOX_TOKEN","PlaceSearch","onSelect","searchTypes","countryRestrictions","proximity","itemDataRef","useRef","loadedItemsRef","items","feature","itemData","nameParts","primaryText","secondaryText","selected","ProgressBar","rightLabel","progressWidth","hideLabels","AriaProgressBar","percentage","valueText","getSelectValueClassName","useElementFocus","Select","controlledSelectedKey","internalSelectedKey","setInternalSelectedKey","handleSelectionChange","selectRef","AriaSelect","SelectValue","getTrackClassName","getHandleClassName","Switch","AriaSwitch","getTabsStyles","orientation","Tabs","RACTabs","getTabListStyles","TabList","RACTabList","getTabStyles","focusRingStyles","stateStyles","Tab","RACTab","getTabPanelStyles","TabPanel","RACTabPanel","getTextAreaStyles","TextArea","required","getTextFieldStyles","paddingStyles","TextField","showSearchIcon","isClearable","onClear","type","showPassword","setShowPassword","isPassword","AriaTextFieldComponent","TextLink","external","asButton","onPress","externalProps","combinedClasses","getTimeFieldStyles","TimeField","focusedSegment","setFocusedSegment","inputRef","handleFocusIn","target","handleFocusOut","inputElement","AriaTimeField","getToggleButtonStyles","borderRadius","borderRight","borderLeft","ToggleButton","renderChildren","toggleButton","RACToggleButton","Slider","defaultValue","onChange","min","max","step","disabled","showValue","isControlled","internalValue","setInternalValue","currentValue","clamped","range","percent","next","RadioGroup","RACRadioGroup","getRadioStyles","Radio","RACRadio"],"mappings":"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","file":"index.cjs","sourcesContent":["\"use client\";\n\nimport React, { useEffect, useState } from \"react\";\nimport { useFilter } from \"react-aria\";\nimport {\n Button as AriaButton,\n Input as AriaInput,\n ComboBox,\n ComboBoxStateContext,\n Group,\n Header,\n ListBox,\n ListBoxSection,\n ValidationResult,\n type Key,\n} from \"react-aria-components\";\nimport { useAsyncList } from \"react-stately\";\n\nimport { Description, FieldError, Label, getFieldGroupStyles } from \"../Field/Field\";\nimport { Icon } from \"../Icon/Icon\";\nimport { ListBoxItem } from \"../ListBoxItem/ListBoxItem\";\nimport { Popover } from \"../Popover/Popover\";\nimport { composeTailwindRenderProps } from \"../../utils\";\nimport { useDebounce } from \"../../hooks/useDebounce\";\nimport { controlStyles, type Size } from \"../../utils/controlStyles\";\n\ninterface Item {\n id: string;\n name: string;\n}\n\ninterface Section {\n name: string;\n items: Item[];\n}\n\nconst iconSizeClassMap = {\n sm: \"h-4 w-4\",\n md: \"h-5 w-5\",\n lg: \"h-6 w-6\",\n xl: \"h-7 w-7\",\n};\n\nconst inputPaddingLeftMap = {\n sm: \"pl-7\",\n md: \"pl-9\",\n lg: \"pl-10\",\n xl: \"pl-12\",\n};\n\nconst itemHeightStylesObject = {\n sm: \"py-1\",\n md: \"py-2\",\n lg: \"py-3\",\n xl: \"py-4\",\n};\n\ntype RequestMethod = \"GET\" | \"POST\";\n\ninterface BaseRequestConfig {\n url: string;\n headers?: Record<string, string>;\n transformResponse: (data: unknown) => Item[];\n}\n\ninterface RestRequestConfig extends BaseRequestConfig {\n requestType: \"REST\";\n method?: RequestMethod;\n queryKey?: string; // For APIs that expect \"query\" in URL or JSON body\n extraParams?: Record<string, string>;\n shouldLoad?: (filterText: string) => boolean;\n}\n\ninterface GraphQLRequestConfig extends BaseRequestConfig {\n requestType: \"GraphQL\";\n graphqlQuery: string;\n variableKey?: string;\n responsePath?: string;\n shouldLoad?: (filterText: string) => boolean;\n}\n\ntype AutocompleteRequestConfig = RestRequestConfig | GraphQLRequestConfig;\n\n/**\n * Autocomplete\n *\n * Text input with typeahead suggestions and keyboard navigation.\n */\nexport interface AutocompleteProps {\n label?: string;\n staticItems?: Item[];\n sections?: Section[];\n selectedKey?: Key | null;\n defaultSelectedKey?: Key | null;\n onSelectionChange?: (key: Key | null) => void;\n requestConfig?: AutocompleteRequestConfig;\n defaultFilter?: (textValue: string, inputValue: string) => boolean;\n placeholder?: string;\n renderItem?: (item: Item) => React.ReactNode;\n renderLeftIcon?: (isLoading: boolean) => React.ReactNode;\n renderSection?: (section: Section, children: React.ReactNode) => React.ReactNode;\n errorMessage?: string | ((validation: ValidationResult) => string);\n description?: string;\n size?: Size;\n tooltip?: string;\n isRequired?: boolean;\n isDisabled?: boolean;\n isInvalid?: boolean;\n validationResult?: ValidationResult;\n showErrors?: boolean;\n autoFocus?: boolean;\n}\n\nfunction ClearButton() {\n const state = React.useContext(ComboBoxStateContext);\n return (\n <AriaButton\n // Don't inherit default Button behavior from ComboBox.\n slot={null}\n className=\"clear-button\"\n aria-label=\"Clear\"\n onPress={() => state?.setSelectedKey(null)}\n >\n ✕\n </AriaButton>\n );\n}\n\n// Helper function to get item name by key\nconst getItemName = (key: Key | null | undefined, staticItems: Item[], sections?: Section[]): string => {\n if (key == null || key === \"\") return \"\";\n const allItems = sections ? sections.flatMap((s) => s.items) : staticItems || [];\n const selectedItem = allItems.find((item) => item.id === key);\n return selectedItem ? selectedItem.name : \"\";\n};\n\nasync function handleRestRequest(\n config: RestRequestConfig,\n filterText: string,\n signal: AbortSignal,\n): Promise<{ items: Item[]; error?: string }> {\n try {\n // Extract the base URL and access token from config\n const baseUrl = config.url.replace(\"{q}\", filterText);\n\n // Add query parameters\n const params = new URLSearchParams();\n if (config.extraParams) {\n Object.entries(config.extraParams).forEach(([key, value]) => {\n params.append(key, value.toString());\n });\n }\n\n // Construct final URL\n const finalUrl = `${baseUrl}${params.toString() ? \"?\" + params.toString() : \"\"}`;\n\n const response = await fetch(finalUrl, {\n method: \"GET\",\n headers: config.headers,\n signal,\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n const json = await response.json();\n return { items: config.transformResponse(json) };\n } catch (error) {\n console.error(\"Error in REST request:\", error);\n const errorMessage = error instanceof Error ? error.message : \"Unknown error occurred\";\n return { items: [], error: errorMessage };\n }\n}\n\nasync function handleGraphQLRequest(\n config: GraphQLRequestConfig,\n filterText: string,\n signal: AbortSignal,\n): Promise<{ items: Item[]; error?: string }> {\n try {\n const query = config.graphqlQuery.replace(`$${config.variableKey || \"filter\"}`, `\"${filterText}\"`);\n\n const response = await fetch(config.url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...config.headers,\n },\n body: JSON.stringify({ query }),\n signal,\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n let json = await response.json();\n\n if (json.errors) {\n throw new Error(json.errors[0]?.message || \"GraphQL error occurred\");\n }\n\n // For GraphQL, traverse the response path if specified\n if (config.responsePath) {\n json = config.responsePath.split(\".\").reduce((obj, key) => obj?.[key], json);\n }\n\n return { items: config.transformResponse(json) };\n } catch (error) {\n console.error(\"Error in GraphQL request:\", error);\n const errorMessage = error instanceof Error ? error.message : \"Unknown error occurred\";\n return { items: [], error: errorMessage };\n }\n}\n\nexport function Autocomplete({\n label,\n staticItems = [],\n sections,\n selectedKey,\n defaultSelectedKey,\n onSelectionChange,\n requestConfig,\n defaultFilter,\n placeholder,\n errorMessage,\n description,\n size = \"md\",\n tooltip,\n isRequired,\n isDisabled,\n isInvalid,\n validationResult,\n showErrors = true,\n renderItem,\n renderLeftIcon,\n renderSection,\n autoFocus = false,\n}: AutocompleteProps) {\n const triggerRef = React.useRef<HTMLDivElement>(null);\n const [triggerWidth, setTriggerWidth] = React.useState<number | undefined>();\n const [inputValue, setInputValue] = useState(() =>\n getItemName(selectedKey || defaultSelectedKey, staticItems, sections),\n );\n const [isFocused, setIsFocused] = useState(false);\n const debouncedInputValue = useDebounce(inputValue);\n const { contains } = useFilter({ sensitivity: \"base\" });\n const [error, setError] = useState<string | undefined>();\n\n const textSizeClass = controlStyles[size].text;\n const heightSizeClass = controlStyles[size].height;\n\n let dynamicItems: ReturnType<typeof useAsyncList<Item>> | null = null;\n\n useEffect(() => {\n if (autoFocus) {\n setIsFocused(true);\n }\n }, [autoFocus]);\n\n // Update trigger width when component mounts or resizes\n useEffect(() => {\n const updateTriggerWidth = () => {\n if (triggerRef.current) {\n setTriggerWidth(triggerRef.current.offsetWidth);\n }\n };\n\n updateTriggerWidth();\n window.addEventListener(\"resize\", updateTriggerWidth);\n return () => window.removeEventListener(\"resize\", updateTriggerWidth);\n }, []);\n\n useEffect(() => {\n if (dynamicItems) {\n dynamicItems.setFilterText(debouncedInputValue);\n }\n }, [debouncedInputValue, dynamicItems]);\n\n if (requestConfig) {\n dynamicItems = useAsyncList<Item>({\n async load({ signal, filterText = \"\" }) {\n if (!requestConfig.url || (requestConfig.shouldLoad && !requestConfig.shouldLoad(filterText))) {\n return { items: [] };\n }\n\n try {\n let result;\n if (requestConfig.requestType === \"GraphQL\") {\n result = await handleGraphQLRequest(requestConfig, filterText, signal);\n } else {\n result = await handleRestRequest(requestConfig, filterText, signal);\n }\n\n setError(result.error);\n return { items: result.items };\n } catch (error) {\n console.error(\"Error loading items:\", error);\n setError(error instanceof Error ? error.message : \"Unknown error occurred\");\n return { items: [] };\n }\n },\n initialFilterText: \"\",\n });\n }\n\n if (debouncedInputValue === \"\") {\n dynamicItems = null;\n }\n\n const handleInternalSelectionChange = (key: Key | null) => {\n const newName = getItemName(key, staticItems, sections);\n setInputValue(newName);\n if (onSelectionChange) {\n onSelectionChange(key);\n }\n };\n\n const handleInternalInputChange = (text: string) => {\n setInputValue(text);\n const currentSelectedItemName = getItemName(selectedKey, staticItems, sections);\n if (selectedKey != null && text !== currentSelectedItemName) {\n if (onSelectionChange) {\n // Clear selection if input text no longer matches selected item's name\n onSelectionChange(null);\n }\n }\n };\n\n return (\n <ComboBox\n onSelectionChange={handleInternalSelectionChange}\n selectedKey={selectedKey || undefined}\n defaultSelectedKey={defaultSelectedKey || undefined}\n defaultItems={sections ? sections.flatMap((section) => section.items) : staticItems}\n items={dynamicItems ? dynamicItems.items : undefined}\n className={composeTailwindRenderProps(\"group flex flex-col\", \"w-full\")}\n menuTrigger=\"focus\"\n isDisabled={isDisabled}\n isInvalid={isInvalid || !!errorMessage}\n inputValue={inputValue}\n onInputChange={handleInternalInputChange}\n autoFocus={autoFocus}\n defaultFilter={defaultFilter || contains}\n >\n {(state) => (\n <div className=\"flex flex-col\">\n {label && (\n <Label size={size} tooltip={tooltip} isRequired={isRequired}>\n {label}\n </Label>\n )}\n <Group\n ref={triggerRef}\n className={getFieldGroupStyles({\n size,\n isInvalid: isInvalid || !!errorMessage,\n isDisabled,\n isFocusWithin: isFocused || state.isOpen,\n className: \"w-full cursor-pointer\",\n })}\n style={{ position: \"relative\" }}\n >\n {renderLeftIcon ? (\n <div className=\"absolute left-3\">{renderLeftIcon(!!dynamicItems?.isLoading)}</div>\n ) : (\n <Icon name=\"MagnifyingGlass\" className={`${iconSizeClassMap[size]} absolute left-3 text-inherit`} />\n )}\n <AriaInput\n className={`flex-1 min-w-0 border-none bg-background-input pr-3 outline-0 placeholder:text-text-placeholder ${inputPaddingLeftMap[size]} ${textSizeClass} ${heightSizeClass}`}\n placeholder={placeholder}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n />\n {inputValue && <ClearButton />}\n <AriaButton className={`bg-background-input px-2 text-text-body ${textSizeClass} ${heightSizeClass}`}>\n {({ isPressed }) => <Icon name={isPressed ? \"CaretUp\" : \"CaretDown\"} className=\"h-4 w-4\" />}\n </AriaButton>\n </Group>\n {description && <Description size={size}>{description}</Description>}\n {showErrors && error && (\n <FieldError size={size} className=\"text-feedback-error-text\">\n {error}\n </FieldError>\n )}\n {showErrors && typeof errorMessage === \"string\" && (\n <FieldError size={size} className=\"text-feedback-error-text\">\n {errorMessage}\n </FieldError>\n )}\n {showErrors && typeof errorMessage === \"function\" && validationResult && (\n <FieldError size={size} className=\"text-feedback-error-text\">\n {errorMessage(validationResult)}\n </FieldError>\n )}\n <Popover\n className=\"bg-background-input shadow-xl border border-border-input/20 backdrop-blur-sm ring-1 ring-black/5\"\n style={{ minWidth: triggerWidth ? `${triggerWidth}px` : undefined }}\n >\n <ListBox className={`max-h-[300px] overflow-auto bg-background-input outline-none ${textSizeClass}`}>\n {sections\n ? sections.map((section) => {\n const sectionItems = section.items.map((item) => (\n <ListBoxItem\n key={item.id}\n id={item.id}\n textValue={item.name}\n size={size}\n className={`flex cursor-default items-center gap-2 rounded-sm px-3 ${itemHeightStylesObject[size]} text-text-body outline-none data-[focused]:bg-background-hover data-[selected]:bg-background-selected data-[selected]:font-medium`}\n >\n {renderItem ? (\n renderItem(item)\n ) : (\n <>\n {item.name}\n <Icon\n name=\"X\"\n className=\"ml-auto h-4 w-4 text-text-muted opacity-0 data-[focused]:opacity-100 data-[selected]:opacity-100\"\n />\n </>\n )}\n </ListBoxItem>\n ));\n\n if (renderSection) {\n return renderSection(section, sectionItems);\n }\n\n return (\n <ListBoxSection key={section.name}>\n <Header className=\"px-3 py-1 text-sm font-bold text-text-muted\">{section.name}</Header>\n {sectionItems}\n </ListBoxSection>\n );\n })\n : (item: Item) => (\n <ListBoxItem\n key={item.id}\n id={item.id}\n textValue={item.name}\n size={size}\n className={`flex cursor-default items-center gap-2 rounded-sm px-3 ${itemHeightStylesObject[size]} text-text-body outline-none data-[focused]:bg-background-hover data-[selected]:bg-background-selected data-[selected]:font-medium`}\n >\n {renderItem ? (\n renderItem(item)\n ) : (\n <>\n {item.name}\n <Icon\n name=\"X\"\n className=\"ml-auto h-4 w-4 text-text-muted opacity-0 data-[focused]:opacity-100 data-[selected]:opacity-100\"\n />\n </>\n )}\n </ListBoxItem>\n )}\n </ListBox>\n </Popover>\n </div>\n )}\n </ComboBox>\n );\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// We must avoid a circular dependency with @react-aria/utils, and this useLayoutEffect is\n// guarded by a check that it only runs on the client side.\n// eslint-disable-next-line rulesdir/useLayoutEffectRule\nimport React, {JSX, ReactNode, useContext, useLayoutEffect, useMemo, useRef, useState} from 'react';\n\n// To support SSR, the auto incrementing id counter is stored in a context. This allows\n// it to be reset on every request to ensure the client and server are consistent.\n// There is also a prefix string that is used to support async loading components\n// Each async boundary must be wrapped in an SSR provider, which appends to the prefix\n// and resets the current id counter. This ensures that async loaded components have\n// consistent ids regardless of the loading order.\ninterface SSRContextValue {\n prefix: string,\n current: number\n}\n\n// Default context value to use in case there is no SSRProvider. This is fine for\n// client-only apps. In order to support multiple copies of React Aria potentially\n// being on the page at once, the prefix is set to a random number. SSRProvider\n// will reset this to zero for consistency between server and client, so in the\n// SSR case multiple copies of React Aria is not supported.\nconst defaultContext: SSRContextValue = {\n prefix: String(Math.round(Math.random() * 10000000000)),\n current: 0\n};\n\nconst SSRContext = React.createContext<SSRContextValue>(defaultContext);\nconst IsSSRContext = React.createContext(false);\n\nexport interface SSRProviderProps {\n /** Your application here. */\n children: ReactNode\n}\n\n// This is only used in React < 18.\nfunction LegacySSRProvider(props: SSRProviderProps): JSX.Element {\n let cur = useContext(SSRContext);\n let counter = useCounter(cur === defaultContext);\n let [isSSR, setIsSSR] = useState(true);\n let value: SSRContextValue = useMemo(() => ({\n // If this is the first SSRProvider, start with an empty string prefix, otherwise\n // append and increment the counter.\n prefix: cur === defaultContext ? '' : `${cur.prefix}-${counter}`,\n current: 0\n }), [cur, counter]);\n\n // If on the client, and the component was initially server rendered,\n // then schedule a layout effect to update the component after hydration.\n if (typeof document !== 'undefined') {\n // This if statement technically breaks the rules of hooks, but is safe\n // because the condition never changes after mounting.\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useLayoutEffect(() => {\n setIsSSR(false);\n }, []);\n }\n\n return (\n <SSRContext.Provider value={value}>\n <IsSSRContext.Provider value={isSSR}>\n {props.children}\n </IsSSRContext.Provider>\n </SSRContext.Provider>\n );\n}\n\nlet warnedAboutSSRProvider = false;\n\n/**\n * When using SSR with React Aria in React 16 or 17, applications must be wrapped in an SSRProvider.\n * This ensures that auto generated ids are consistent between the client and server.\n */\nexport function SSRProvider(props: SSRProviderProps): JSX.Element {\n if (typeof React['useId'] === 'function') {\n if (process.env.NODE_ENV !== 'test' && !warnedAboutSSRProvider) {\n console.warn('In React 18, SSRProvider is not necessary and is a noop. You can remove it from your app.');\n warnedAboutSSRProvider = true;\n }\n return <>{props.children}</>;\n }\n return <LegacySSRProvider {...props} />;\n}\n\nlet canUseDOM = Boolean(\n typeof window !== 'undefined' &&\n window.document &&\n window.document.createElement\n);\n\nlet componentIds = new WeakMap();\n\nfunction useCounter(isDisabled = false) {\n let ctx = useContext(SSRContext);\n let ref = useRef<number | null>(null);\n // eslint-disable-next-line rulesdir/pure-render\n if (ref.current === null && !isDisabled) {\n // In strict mode, React renders components twice, and the ref will be reset to null on the second render.\n // This means our id counter will be incremented twice instead of once. This is a problem because on the\n // server, components are only rendered once and so ids generated on the server won't match the client.\n // In React 18, useId was introduced to solve this, but it is not available in older versions. So to solve this\n // we need to use some React internals to access the underlying Fiber instance, which is stable between renders.\n // This is exposed as ReactCurrentOwner in development, which is all we need since StrictMode only runs in development.\n // To ensure that we only increment the global counter once, we store the starting id for this component in\n // a weak map associated with the Fiber. On the second render, we reset the global counter to this value.\n // Since React runs the second render immediately after the first, this is safe.\n // @ts-ignore\n let currentOwner = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED?.ReactCurrentOwner?.current;\n if (currentOwner) {\n let prevComponentValue = componentIds.get(currentOwner);\n if (prevComponentValue == null) {\n // On the first render, and first call to useId, store the id and state in our weak map.\n componentIds.set(currentOwner, {\n id: ctx.current,\n state: currentOwner.memoizedState\n });\n } else if (currentOwner.memoizedState !== prevComponentValue.state) {\n // On the second render, the memoizedState gets reset by React.\n // Reset the counter, and remove from the weak map so we don't\n // do this for subsequent useId calls.\n ctx.current = prevComponentValue.id;\n componentIds.delete(currentOwner);\n }\n }\n\n // eslint-disable-next-line rulesdir/pure-render\n ref.current = ++ctx.current;\n }\n\n // eslint-disable-next-line rulesdir/pure-render\n return ref.current;\n}\n\nfunction useLegacySSRSafeId(defaultId?: string): string {\n let ctx = useContext(SSRContext);\n\n // If we are rendering in a non-DOM environment, and there's no SSRProvider,\n // provide a warning to hint to the developer to add one.\n if (ctx === defaultContext && !canUseDOM) {\n console.warn('When server rendering, you must wrap your application in an <SSRProvider> to ensure consistent ids are generated between the client and server.');\n }\n\n let counter = useCounter(!!defaultId);\n let prefix = ctx === defaultContext && process.env.NODE_ENV === 'test' ? 'react-aria' : `react-aria${ctx.prefix}`;\n return defaultId || `${prefix}-${counter}`;\n}\n\nfunction useModernSSRSafeId(defaultId?: string): string {\n let id = React.useId();\n let [didSSR] = useState(useIsSSR());\n let prefix = didSSR || process.env.NODE_ENV === 'test' ? 'react-aria' : `react-aria${defaultContext.prefix}`;\n return defaultId || `${prefix}-${id}`;\n}\n\n// Use React.useId in React 18 if available, otherwise fall back to our old implementation.\n/** @private */\nexport const useSSRSafeId = typeof React['useId'] === 'function' ? useModernSSRSafeId : useLegacySSRSafeId;\n\nfunction getSnapshot() {\n return false;\n}\n\nfunction getServerSnapshot() {\n return true;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction subscribe(onStoreChange: () => void): () => void {\n // noop\n return () => {};\n}\n\n/**\n * Returns whether the component is currently being server side rendered or\n * hydrated on the client. Can be used to delay browser-specific rendering\n * until after hydration.\n */\nexport function useIsSSR(): boolean {\n // In React 18, we can use useSyncExternalStore to detect if we're server rendering or hydrating.\n if (typeof React['useSyncExternalStore'] === 'function') {\n return React['useSyncExternalStore'](subscribe, getSnapshot, getServerSnapshot);\n }\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useContext(IsSSRContext);\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// https://en.wikipedia.org/wiki/Right-to-left\nconst RTL_SCRIPTS = new Set(['Arab', 'Syrc', 'Samr', 'Mand', 'Thaa', 'Mend', 'Nkoo', 'Adlm', 'Rohg', 'Hebr']);\nconst RTL_LANGS = new Set(['ae', 'ar', 'arc', 'bcc', 'bqi', 'ckb', 'dv', 'fa', 'glk', 'he', 'ku', 'mzn', 'nqo', 'pnb', 'ps', 'sd', 'ug', 'ur', 'yi']);\n\n/**\n * Determines if a locale is read right to left using [Intl.Locale]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale}.\n */\nexport function isRTL(localeString: string) {\n // If the Intl.Locale API is available, use it to get the locale's text direction.\n if (Intl.Locale) {\n let locale = new Intl.Locale(localeString).maximize();\n\n // Use the text info object to get the direction if possible.\n // @ts-ignore - this was implemented as a property by some browsers before it was standardized as a function.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/getTextInfo\n let textInfo = typeof locale.getTextInfo === 'function' ? locale.getTextInfo() : locale.textInfo;\n if (textInfo) {\n return textInfo.direction === 'rtl';\n }\n\n // Fallback: guess using the script.\n // This is more accurate than guessing by language, since languages can be written in multiple scripts.\n if (locale.script) {\n return RTL_SCRIPTS.has(locale.script);\n }\n }\n\n // If not, just guess by the language (first part of the locale)\n let lang = localeString.split('-')[0];\n return RTL_LANGS.has(lang);\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {Direction} from '@react-types/shared';\nimport {isRTL} from './utils';\nimport {useEffect, useState} from 'react';\nimport {useIsSSR} from '@react-aria/ssr';\n\nexport interface Locale {\n /** The [BCP47](https://www.ietf.org/rfc/bcp/bcp47.txt) language code for the locale. */\n locale: string,\n /** The writing direction for the locale. */\n direction: Direction\n}\n\n// Locale passed from server by PackageLocalizationProvider.\nconst localeSymbol = Symbol.for('react-aria.i18n.locale');\n\n/**\n * Gets the locale setting of the browser.\n */\nexport function getDefaultLocale(): Locale {\n let locale = typeof window !== 'undefined' && window[localeSymbol]\n // @ts-ignore\n || (typeof navigator !== 'undefined' && (navigator.language || navigator.userLanguage))\n || 'en-US';\n\n try {\n Intl.DateTimeFormat.supportedLocalesOf([locale]);\n } catch {\n locale = 'en-US';\n }\n return {\n locale,\n direction: isRTL(locale) ? 'rtl' : 'ltr'\n };\n}\n\nlet currentLocale = getDefaultLocale();\nlet listeners = new Set<(locale: Locale) => void>();\n\nfunction updateLocale() {\n currentLocale = getDefaultLocale();\n for (let listener of listeners) {\n listener(currentLocale);\n }\n}\n\n/**\n * Returns the current browser/system language, and updates when it changes.\n */\nexport function useDefaultLocale(): Locale {\n let isSSR = useIsSSR();\n let [defaultLocale, setDefaultLocale] = useState(currentLocale);\n\n useEffect(() => {\n if (listeners.size === 0) {\n window.addEventListener('languagechange', updateLocale);\n }\n\n listeners.add(setDefaultLocale);\n\n return () => {\n listeners.delete(setDefaultLocale);\n if (listeners.size === 0) {\n window.removeEventListener('languagechange', updateLocale);\n }\n };\n }, []);\n\n // We cannot determine the browser's language on the server, so default to\n // en-US. This will be updated after hydration on the client to the correct value.\n if (isSSR) {\n return {\n locale: 'en-US',\n direction: 'ltr'\n };\n }\n\n return defaultLocale;\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {isRTL} from './utils';\nimport {Locale, useDefaultLocale} from './useDefaultLocale';\nimport React, {ReactNode, useContext} from 'react';\n\nexport interface I18nProviderProps {\n /** Contents that should have the locale applied. */\n children: ReactNode,\n /** The locale to apply to the children. */\n locale?: string\n}\n\nconst I18nContext = React.createContext<Locale | null>(null);\n\n/**\n * Provides the locale for the application to all child components.\n */\nexport function I18nProvider(props: I18nProviderProps) {\n let {locale, children} = props;\n let defaultLocale = useDefaultLocale();\n\n let value: Locale = React.useMemo(() => {\n if (!locale) {\n return defaultLocale;\n }\n\n return {\n locale,\n direction: isRTL(locale) ? 'rtl' : 'ltr'\n };\n }, [defaultLocale, locale]);\n\n return (\n <I18nContext.Provider value={value}>\n {children}\n </I18nContext.Provider>\n );\n}\n\n/**\n * Returns the current locale and layout direction.\n */\nexport function useLocale(): Locale {\n let defaultLocale = useDefaultLocale();\n let context = useContext(I18nContext);\n return context || defaultLocale;\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {useLocale} from './context';\n\nlet cache = new Map<string, Intl.Collator>();\n\n/**\n * Provides localized string collation for the current locale. Automatically updates when the locale changes,\n * and handles caching of the collator for performance.\n * @param options - Collator options.\n */\nexport function useCollator(options?: Intl.CollatorOptions): Intl.Collator {\n let {locale} = useLocale();\n\n let cacheKey = locale + (options ? Object.entries(options).sort((a, b) => a[0] < b[0] ? -1 : 1).join() : '');\n if (cache.has(cacheKey)) {\n return cache.get(cacheKey)!;\n }\n\n let formatter = new Intl.Collator(locale, options);\n cache.set(cacheKey, formatter);\n return formatter;\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {useCallback, useMemo} from 'react';\nimport {useCollator} from './useCollator';\n\nexport interface Filter {\n /** Returns whether a string starts with a given substring. */\n startsWith(string: string, substring: string): boolean,\n /** Returns whether a string ends with a given substring. */\n endsWith(string: string, substring: string): boolean,\n /** Returns whether a string contains a given substring. */\n contains(string: string, substring: string): boolean\n}\n\n/**\n * Provides localized string search functionality that is useful for filtering or matching items\n * in a list. Options can be provided to adjust the sensitivity to case, diacritics, and other parameters.\n */\nexport function useFilter(options?: Intl.CollatorOptions): Filter {\n let collator = useCollator({\n usage: 'search',\n ...options\n });\n\n // TODO(later): these methods don't currently support the ignorePunctuation option.\n let startsWith = useCallback((string, substring) => {\n if (substring.length === 0) {\n return true;\n }\n\n // Normalize both strings so we can slice safely\n // TODO: take into account the ignorePunctuation option as well...\n string = string.normalize('NFC');\n substring = substring.normalize('NFC');\n return collator.compare(string.slice(0, substring.length), substring) === 0;\n }, [collator]);\n\n let endsWith = useCallback((string, substring) => {\n if (substring.length === 0) {\n return true;\n }\n\n string = string.normalize('NFC');\n substring = substring.normalize('NFC');\n return collator.compare(string.slice(-substring.length), substring) === 0;\n }, [collator]);\n\n let contains = useCallback((string, substring) => {\n if (substring.length === 0) {\n return true;\n }\n\n string = string.normalize('NFC');\n substring = substring.normalize('NFC');\n\n let scan = 0;\n let sliceLen = substring.length;\n for (; scan + sliceLen <= string.length; scan++) {\n let slice = string.slice(scan, scan + sliceLen);\n if (collator.compare(substring, slice) === 0) {\n return true;\n }\n }\n\n return false;\n }, [collator]);\n\n return useMemo(() => ({\n startsWith,\n endsWith,\n contains\n }), [startsWith, endsWith, contains]);\n}\n","\"use client\";\nimport { memo } from \"react\";\nimport {\n AppWindow,\n ArrowCircleUp,\n ArrowDown,\n ArrowLeft,\n ArrowLineLeft,\n ArrowRight,\n ArrowSquareOut,\n ArrowUp,\n ArrowsClockwise,\n BatteryCharging,\n BatteryEmpty,\n BatteryFull,\n BatteryHigh,\n BatteryLow,\n BatteryMedium,\n BatteryWarning,\n BookmarkSimple,\n BookOpen,\n BracketsCurly,\n Broadcast,\n Buildings,\n CalendarBlank,\n CaretDown,\n CaretLeft,\n CaretRight,\n CaretUp,\n CarSimple,\n ChargingStation,\n ChartBar,\n ChartLine,\n ChartLineUp,\n Check,\n CheckCircle,\n CheckSquare,\n Circle,\n CircleDashed,\n CircleNotch,\n ClipboardText,\n ClockCountdown,\n Cloud,\n CloudArrowDown,\n CloudFog,\n CloudLightning,\n CloudRain,\n CloudSnow,\n CloudSun,\n Code,\n Columns,\n Copy,\n Cursor,\n Database,\n DotsSix,\n DotsThree,\n DownloadSimple,\n EnvelopeSimple,\n Eye,\n EyeClosed,\n EyeSlash,\n Export,\n FireSimple,\n Flag,\n Gauge,\n GearSix,\n GitBranch,\n HandPointing,\n Handshake,\n Info,\n IntersectSquare,\n Lightning,\n LightningSlash,\n List,\n ListBullets,\n ListNumbers,\n Lock,\n MagnifyingGlass,\n MapPin,\n MapPinArea,\n MaskHappy,\n Moon,\n PaperPlaneRight,\n PaperPlaneTilt,\n PaperclipHorizontal,\n PencilSimple,\n Plugs,\n PlugsConnected,\n Plus,\n Power,\n Pulse,\n Question,\n Repeat,\n Rocket,\n ShareNetwork,\n ShieldCheck,\n SignOut,\n SlackLogo,\n Sliders,\n SlidersHorizontal,\n Snowflake,\n SolarPanel,\n Square,\n SquaresFour,\n Stack,\n Sun,\n Terminal,\n ThermometerCold,\n ThermometerHot,\n ThermometerSimple,\n Trash,\n TreeEvergreen,\n User,\n UserCircle,\n UserPlus,\n Users,\n UsersFour,\n Warning,\n WarningCircle,\n WebhooksLogo,\n Wind,\n WaveSine,\n X,\n} from \"@phosphor-icons/react\";\nimport { twMerge } from \"tailwind-merge\";\n\n// Custom SVG icons\nconst TextureMenuLight = () => (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n {/* Add path data here */}\n </svg>\n);\n\nconst TextureMenuDark = () => (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n {/* Add path data here */}\n </svg>\n);\n\nexport const iconMapping = {\n AppWindow,\n ArrowCircleUp,\n ArrowDown,\n ArrowLeft,\n ArrowLineLeft,\n ArrowRight,\n ArrowSquareOut,\n ArrowUp,\n ArrowsClockwise,\n BatteryCharging,\n BatteryEmpty,\n BatteryFull,\n BatteryHigh,\n BatteryLow,\n BatteryMedium,\n BatteryWarning,\n BookOpen,\n BookmarkSimple,\n BracketsCurly,\n Broadcast,\n Buildings,\n CalendarBlank,\n CaretDown,\n CaretLeft,\n CaretRight,\n CaretUp,\n CarSimple,\n ChargingStation,\n ChartBar,\n ChartLine,\n ChartLineUp,\n Check,\n CheckCircle,\n CheckSquare,\n Circle,\n CircleDashed,\n CircleNotch,\n ClipboardText,\n ClockCountdown,\n Cloud,\n CloudArrowDown,\n CloudFog,\n CloudLightning,\n CloudRain,\n CloudSnow,\n CloudSun,\n Code,\n Columns,\n Copy,\n Cursor,\n Database,\n DotsSix,\n DotsThree,\n DownloadSimple,\n EnvelopeSimple,\n Eye,\n EyeClosed,\n EyeSlash,\n Export,\n FireSimple,\n Flag,\n Gauge,\n GearSix,\n GitBranch,\n HandPointing,\n Handshake,\n Info,\n IntersectSquare,\n Lightning,\n LightningSlash,\n List,\n ListBullets,\n ListNumbers,\n Lock,\n MagnifyingGlass,\n MapPin,\n MapPinArea,\n MaskHappy,\n Moon,\n PaperPlaneRight,\n PaperPlaneTilt,\n PaperclipHorizontal,\n PencilSimple,\n Plugs,\n PlugsConnected,\n Plus,\n Power,\n Pulse,\n Question,\n Repeat,\n Rocket,\n ShareNetwork,\n ShieldCheck,\n SignOut,\n SlackLogo,\n Sliders,\n SlidersHorizontal,\n Snowflake,\n SolarPanel,\n Square,\n SquaresFour,\n Stack,\n Sun,\n Terminal,\n ThermometerCold,\n ThermometerHot,\n ThermometerSimple,\n Trash,\n TreeEvergreen,\n User,\n UserCircle,\n UserPlus,\n Users,\n UsersFour,\n Warning,\n WarningCircle,\n WebhooksLogo,\n Wind,\n X,\n TextureMenuLight,\n TextureMenuDark,\n WaveSine,\n} as const;\n\nexport type IconName = keyof typeof iconMapping;\ntype IconVariant = \"default\" | \"container\" | \"brand\";\n\ninterface ExtendedIconProps {\n name: IconName;\n size?: number;\n color?: string;\n weight?: \"thin\" | \"light\" | \"regular\" | \"bold\" | \"fill\" | \"duotone\";\n className?: string;\n title?: string;\n ariaLabel?: string;\n grow?: boolean;\n variant?: IconVariant;\n rounded?: boolean;\n bgColor?: string;\n [key: string]: unknown;\n}\n\nexport const Icon = memo(\n ({\n name,\n size = 24,\n color,\n weight = \"regular\",\n className,\n title,\n ariaLabel,\n grow,\n variant = \"default\",\n rounded = false,\n bgColor,\n ...props\n }: ExtendedIconProps) => {\n if (!name) return null;\n\n const IconComponent = iconMapping[name];\n if (!IconComponent) {\n if (process.env.NODE_ENV === \"development\") {\n console.error(`Icon with name \"${name}\" does not exist.`);\n }\n return null;\n }\n\n const isCustom = name === \"TextureMenuLight\" || name === \"TextureMenuDark\";\n const accessibilityLabel = ariaLabel || title || `${name} icon`;\n\n const defaultBg = variant === \"container\" ? \"bg-[#F3F4F6\" : variant === \"brand\" ? \"bg-gray-light\" : \"\";\n\n const brandWrapperClasses = twMerge(\n \"inline-flex items-center justify-center w-12 h-12 p-3 rounded-xl bg-brand-light\",\n bgColor,\n rounded ? \"rounded-md\" : \"\",\n grow ? \"w-full h-full\" : \"\",\n className,\n );\n\n const wrapperClasses = [\n \"inline-flex items-center justify-center\",\n bgColor || defaultBg,\n rounded ? \"rounded-md\" : \"\",\n grow ? \"w-full h-full\" : `w-[${size}px] h-[${size}px]`,\n ]\n .filter(Boolean)\n .join(\" \");\n\n const iconSize = grow ? undefined : size;\n const iconColor = variant === \"brand\" && !isCustom ? undefined : color;\n const brandIconClass = variant === \"brand\" && !isCustom ? \"text-brand-dark w-6 h-6\" : className || \"\";\n\n const iconEl = (\n <IconComponent\n size={iconSize}\n color={iconColor}\n className={brandIconClass}\n weight={weight}\n aria-label={accessibilityLabel}\n data-testid={`${name}-icon`}\n {...props}\n />\n );\n\n if (variant === \"brand\") {\n return <div className={brandWrapperClasses}>{iconEl}</div>;\n }\n return variant === \"default\" ? iconEl : <div className={wrapperClasses}>{iconEl}</div>;\n },\n);\n\nIcon.displayName = \"Icon\";\n","/**\n * Control-specific style utilities for form elements and interactive components.\n * These styles use CSS variables defined in the theme for consistent sizing\n * and spacing across all control elements.\n *\n * Text sizes follow the relationships defined in theme.css:\n * sm: --control-text-sm (maps to --text-xs)\n * md: --control-text-md (maps to --text-sm)\n * lg: --control-text-lg (maps to --text-base)\n * xl: --control-text-xl (maps to --text-lg)\n */\n\nexport type Size = \"sm\" | \"md\" | \"lg\" | \"xl\";\n\nexport const controlStyles = {\n sm: {\n text: \"text-[length:var(--control-text-sm)]\",\n height: \"h-[var(--control-sm-height)]\",\n padding: \"px-[var(--control-padding-sm)]\",\n gap: \"gap-[var(--control-gap-sm)]\",\n },\n md: {\n text: \"text-[length:var(--control-text-md)]\",\n height: \"h-[var(--control-md-height)]\",\n padding: \"px-[var(--control-padding-md)]\",\n gap: \"gap-[var(--control-gap-md)]\",\n },\n lg: {\n text: \"text-[length:var(--control-text-lg)]\",\n height: \"h-[var(--control-lg-height)]\",\n padding: \"px-[var(--control-padding-lg)]\",\n gap: \"gap-[var(--control-gap-lg)]\",\n },\n xl: {\n text: \"text-[length:var(--control-text-xl)]\",\n height: \"h-[var(--control-xl-height)]\",\n padding: \"px-[var(--control-padding-xl)]\",\n gap: \"gap-[var(--control-gap-xl)]\",\n },\n} as const;\n","\"use client\";\n/**\n * Field Component System\n *\n * A comprehensive system for building form fields and input components with consistent\n * styling, accessibility, and behavior. This module provides both base components and\n * styling utilities that can be composed to create complex form controls.\n *\n * Key Features:\n * - Consistent styling across all form elements\n * - Built-in state handling (invalid, disabled, focused)\n * - Accessibility support out of the box\n * - Flexible composition through style utilities\n *\n * @example Basic Usage\n * ```tsx\n * <Label htmlFor=\"name\">Name</Label>\n * <Input id=\"name\" size=\"md\" />\n * ```\n *\n * @example Complex Field with All Components\n * ```tsx\n * <div>\n * <Label htmlFor=\"email\" tooltip=\"Enter your work email\">Email</Label>\n * <Input\n * id=\"email\"\n * type=\"email\"\n * isInvalid={hasError}\n * isDisabled={isSubmitting}\n * />\n * <Description>We'll never share your email</Description>\n * {hasError && <FieldError>Please enter a valid email</FieldError>}\n * </div>\n * ```\n */\n\nimport React from \"react\";\nimport { Icon } from \"../Icon/Icon\";\nimport { twMerge } from \"tailwind-merge\";\nimport type { TextProps } from \"react-aria-components\";\nimport { controlStyles, type Size } from \"../../utils/controlStyles\";\n\n// Base style props interface for all input-like components\nexport interface InputStyleProps {\n /** Whether the input is in an invalid state */\n isInvalid?: boolean;\n /** Whether the input is disabled */\n isDisabled?: boolean;\n /** Whether the input should have a transparent background */\n transparent?: boolean;\n /** The size variant of the input */\n size?: Size;\n /** Whether the input is currently focused */\n isFocused?: boolean;\n /** Additional CSS classes to apply */\n className?: string;\n}\n\n// Common interfaces\nexport interface BaseProps {\n /** The size variant of the component */\n size?: Size;\n /** Additional CSS classes to apply */\n className?: string;\n}\n\nexport interface BaseInputProps extends BaseProps {\n /** Whether the input should have a transparent background */\n transparent?: boolean;\n /** Whether to show a clear button when the input has a value */\n isClearable?: boolean;\n /** Callback when the clear button is clicked */\n onClear?: () => void;\n /** Whether to show a search icon */\n showSearchIcon?: boolean;\n}\n\nexport interface LabelProps extends BaseProps {\n /** The label content */\n children: React.ReactNode;\n /** Optional tooltip text to show next to the label */\n tooltip?: string;\n /** Whether to show a required field indicator (*) */\n isRequired?: boolean;\n /** The ID of the input this label is associated with */\n htmlFor?: string;\n}\n\nexport interface FieldErrorProps extends BaseProps {\n /** The error message to display */\n children: React.ReactNode;\n}\n\nexport interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\">, InputStyleProps {\n /** The size variant of the input */\n size?: Size;\n}\n\nexport interface DescriptionProps extends Omit<TextProps, \"className\">, BaseProps {\n /** The description content */\n children: React.ReactNode;\n}\n\nexport interface FieldGroupProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"children\">, InputStyleProps {\n /** Whether any child of the group is focused */\n isFocusWithin?: boolean;\n /** Children can be either a ReactNode or a render function */\n children?: React.ReactNode | ((props: InputStyleProps) => React.ReactNode);\n}\n\n/**\n * Hook for managing input focus state\n */\nexport function useInputFocus() {\n const [isFocused, setIsFocused] = React.useState(false);\n\n const handleFocus = React.useCallback(\n (e: React.FocusEvent<HTMLInputElement>, onFocus?: (e: React.FocusEvent<HTMLInputElement>) => void) => {\n setIsFocused(true);\n onFocus?.(e);\n },\n [],\n );\n\n const handleBlur = React.useCallback(\n (e: React.FocusEvent<HTMLInputElement>, onBlur?: (e: React.FocusEvent<HTMLInputElement>) => void) => {\n setIsFocused(false);\n onBlur?.(e);\n },\n [],\n );\n\n return { isFocused, handleFocus, handleBlur };\n}\n\n/**\n * Wrapper component for input containers\n */\nexport function InputWrapper({ children, className }: { children: React.ReactNode; className?: string }) {\n return <div className={twMerge(\"relative w-full\", className)}>{children}</div>;\n}\n\n/**\n * Clear button component for inputs\n */\nexport function ClearButton({\n onClick,\n size = \"md\",\n className,\n}: {\n onClick: () => void;\n size?: Size;\n className?: string;\n}) {\n return (\n <button\n type=\"button\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n onClick();\n }}\n className={twMerge(\n \"absolute right-2 top-1/2 -translate-y-1/2 transform text-text-muted hover:text-text-body\",\n className,\n )}\n aria-label=\"Clear input\"\n onMouseDown={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n <Icon name=\"X\" size={size === \"sm\" ? 16 : 20} />\n </button>\n );\n}\n\n/**\n * Generates state-specific styles for inputs based on their current state\n * (invalid, disabled, focused).\n *\n * State Priority:\n * 1. Disabled (overrides all other states)\n * 2. Invalid + Focused\n * 3. Invalid\n * 4. Focused\n * 5. Default\n *\n * @example\n * ```tsx\n * const styles = getInputStateStyles({ isInvalid: true, isFocused: true });\n * ```\n */\nexport function getInputStateStyles(props: { isInvalid?: boolean; isDisabled?: boolean; isFocused?: boolean }) {\n const { isInvalid, isDisabled, isFocused } = props;\n const baseStyles = \"border rounded-[var(--control-border-radius)] \";\n\n // Disabled state overrides all others\n if (isDisabled) {\n return `${baseStyles} border-border-muted focus:outline-none`;\n }\n\n // Handle combinations of invalid and focus states\n if (isInvalid && isFocused) {\n return `${baseStyles} border-feedback-error-border outline-[1.5px] outline-[var(--control-focus-ring-color-error)]`;\n }\n\n if (isInvalid) {\n return `${baseStyles} border-feedback-error-border`;\n }\n\n if (isFocused) {\n return `${baseStyles} !outline-[1.5px] !outline-[var(--control-focus-ring-color)] ![--tw-outline-style:solid]`;\n }\n\n // Default state\n return `${baseStyles}`;\n}\n\n/**\n * Generates background styles based on the transparent and disabled props.\n * Uses Tailwind classes for consistent styling across light/dark modes.\n */\nexport function getInputBackgroundStyles(props: { transparent?: boolean; isDisabled?: boolean }) {\n if (props.isDisabled) {\n return \"bg-background-muted\";\n }\n return props.transparent ? \"bg-transparent\" : \"bg-background-input\";\n}\n\n/**\n * Generates the complete set of base styles for input components.\n * This includes state styles, background, sizing, and custom classes.\n *\n * @example\n * ```tsx\n * const styles = getInputBaseStyles({\n * isInvalid: formState.hasError,\n * isDisabled: isLoading,\n * size: \"md\"\n * });\n * ```\n */\nexport function getInputBaseStyles(props: InputStyleProps) {\n const { isInvalid, isDisabled, isFocused, transparent, size = \"md\", className } = props;\n\n return twMerge(\n \"w-full\",\n getInputStateStyles({ isInvalid, isDisabled, isFocused }),\n getInputBackgroundStyles({ transparent, isDisabled }),\n controlStyles[size].text,\n controlStyles[size].height,\n controlStyles[size].padding,\n className,\n );\n}\n\n/**\n * Generates styles for grouped form elements (like input with buttons)\n *\n * @example\n * ```tsx\n * <div className={getFieldGroupStyles({ size: \"md\" })}>\n * <Input />\n * <Button>Submit</Button>\n * </div>\n * ```\n */\nexport function getFieldGroupStyles(props: FieldGroupProps) {\n const { size = \"md\", isFocusWithin, isInvalid, isDisabled, transparent, className } = props;\n\n return twMerge(\n \"group flex items-center rounded-sm overflow-hidden\",\n !transparent && \"bg-background-input\",\n transparent && \"bg-transparent\",\n controlStyles[size].height,\n getInputStateStyles({ isFocused: isFocusWithin, isInvalid, isDisabled }),\n className,\n );\n}\n\n// Components\n\n/**\n * Label component for form fields. Supports tooltips and required field indicators.\n *\n * @example\n * ```tsx\n * <Label\n * htmlFor=\"email\"\n * tooltip=\"Enter your work email\"\n * isRequired\n * >\n * Email Address\n * </Label>\n * ```\n */\nexport function Label({ children, size = \"md\", tooltip, isRequired, className, htmlFor }: LabelProps) {\n return (\n <label\n htmlFor={htmlFor}\n className={twMerge(controlStyles[size].text, \"!text-text-caption flex items-center gap-1\", className)}\n >\n {children}\n {isRequired && <span>*</span>}\n {tooltip && (\n <span className=\"text-text-muted\">\n <Icon name=\"Info\" size={size === \"sm\" ? 16 : 20} />\n </span>\n )}\n </label>\n );\n}\n\n/**\n * Description component for providing additional context about a form field.\n *\n * @example\n * ```tsx\n * <Description>Must be at least 8 characters</Description>\n * ```\n */\nexport function Description({ size = \"md\", className, children, ...props }: DescriptionProps) {\n return (\n <div {...props} className={twMerge(\"leading-[2.25] text-text-muted\", controlStyles[size].text, className)}>\n {children}\n </div>\n );\n}\n\n/**\n * Error message component for form fields. Automatically handles\n * accessibility attributes for screen readers.\n *\n * @example\n * ```tsx\n * {hasError && <FieldError>This field is required</FieldError>}\n * ```\n */\nexport function FieldError({ children, size = \"md\", className }: FieldErrorProps) {\n return (\n <div role=\"alert\" className={twMerge(controlStyles[size].text, \"text-feedback-error-text\", className)}>\n {children}\n </div>\n );\n}\n\n/**\n * Base input component with consistent styling and state handling.\n * Extends the native input element with our custom styling system.\n *\n * @example\n * ```tsx\n * <Input\n * size=\"md\"\n * isInvalid={hasError}\n * isDisabled={isLoading}\n * transparent={false}\n * />\n * ```\n */\nexport function Input({ size = \"md\", isInvalid, isDisabled, isFocused, transparent, className, ...props }: InputProps) {\n return (\n <input\n className={getInputBaseStyles({\n isInvalid,\n isDisabled,\n isFocused,\n transparent,\n size,\n className,\n })}\n {...props}\n />\n );\n}\n\n/**\n * Container for grouping form elements with consistent styling.\n * Useful for creating compound components like input with buttons.\n *\n * @example\n * ```tsx\n * <FieldGroup>\n * <Input placeholder=\"Search...\" />\n * <Button>Search</Button>\n * </FieldGroup>\n * ```\n */\nexport function FieldGroup(props: FieldGroupProps) {\n const { children, ...rest } = props;\n return (\n <div {...rest} className={getFieldGroupStyles(props)}>\n {typeof children === \"function\" ? children(props) : children}\n </div>\n );\n}\n","import { ListBoxItem as AriaListBoxItem } from \"react-aria-components\";\nimport type { ListBoxItemProps as AriaListBoxItemProps } from \"react-aria-components\";\nimport { twMerge } from \"tailwind-merge\";\n\nconst itemHeightStylesObject = {\n sm: \"py-1\",\n md: \"py-2\",\n lg: \"py-3\",\n xl: \"py-4\",\n};\n\nconst textSizeStylesObject = {\n sm: \"text-controlElementSm\",\n md: \"text-controlElementMd\",\n lg: \"text-controlElementLg\",\n xl: \"text-controlElementXl\",\n};\n\n/**\n * ListBoxItem\n *\n * A styled wrapper around `react-aria-components` ListBoxItem with size\n * variants that align with Edges typography.\n */\nexport interface ExtendedListBoxItemProps extends Omit<AriaListBoxItemProps, \"className\"> {\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n className?: string;\n}\n\nexport type ListBoxItemProps = ExtendedListBoxItemProps;\n\nexport function ListBoxItem({ size = \"md\", className, ...props }: ExtendedListBoxItemProps) {\n const baseClassName =\n \"flex cursor-default items-center gap-2 rounded-sm px-3 text-text-body outline-none data-[focused]:bg-background-hover data-[selected]:bg-background-selected data-[selected]:font-medium\";\n\n return (\n <AriaListBoxItem\n {...props}\n className={twMerge(baseClassName, itemHeightStylesObject[size], textSizeStylesObject[size], className)}\n />\n );\n}\n","import {\n OverlayArrow,\n Popover as AriaPopover,\n PopoverProps as AriaPopoverProps,\n composeRenderProps,\n PopoverContext,\n useSlottedContext,\n} from \"react-aria-components\";\nimport React from \"react\";\n\n/**\n * Popover\n *\n * Positioned overlay container with optional arrow, built on\n * `react-aria-components` Popover.\n */\nexport interface PopoverProps extends Omit<AriaPopoverProps, \"children\"> {\n showArrow?: boolean;\n children: React.ReactNode;\n}\n\nfunction getPopoverStyles({\n isEntering,\n isExiting,\n className = \"\",\n}: {\n isEntering?: boolean;\n isExiting?: boolean;\n className?: string;\n}) {\n const baseStyles = [\n \"bg-white\",\n \"dark:bg-zinc-900/70\",\n \"dark:backdrop-blur-2xl\",\n \"dark:backdrop-saturate-200\",\n \"forced-colors:bg-[Canvas]\",\n \"shadow-md\",\n \"rounded-md\",\n \"overflow-hidden\",\n \"bg-clip-padding\",\n \"border\",\n \"border-gray-100\",\n \"dark:border-white/5\",\n \"dark:text-zinc-300\",\n ].join(\" \");\n\n const enteringStyles = isEntering\n ? [\n \"animate-in\",\n \"fade-in\",\n \"placement-bottom:slide-in-from-top-1\",\n \"placement-top:slide-in-from-bottom-1\",\n \"placement-left:slide-in-from-right-1\",\n \"placement-right:slide-in-from-left-1\",\n \"ease-out\",\n \"duration-200\",\n ].join(\" \")\n : \"\";\n\n const exitingStyles = isExiting\n ? [\n \"animate-out\",\n \"fade-out\",\n \"placement-bottom:slide-out-to-top-1\",\n \"placement-top:slide-out-to-bottom-1\",\n \"placement-left:slide-out-to-right-1\",\n \"placement-right:slide-out-to-left-1\",\n \"ease-in\",\n \"duration-150\",\n ].join(\" \")\n : \"\";\n\n return [baseStyles, enteringStyles, exitingStyles, className].filter(Boolean).join(\" \");\n}\n\nexport function Popover({ children, showArrow, className, ...props }: PopoverProps) {\n const popoverContext = useSlottedContext(PopoverContext)!;\n const isSubmenu = popoverContext?.trigger === \"SubmenuTrigger\";\n let offset = showArrow ? 12 : 8;\n offset = isSubmenu ? offset - 6 : offset;\n return (\n <AriaPopover\n offset={offset}\n {...props}\n className={composeRenderProps(className, (className, renderProps) =>\n getPopoverStyles({ ...renderProps, className }),\n )}\n >\n {showArrow && (\n <OverlayArrow className=\"group\">\n <svg\n width={12}\n height={12}\n viewBox=\"0 0 12 12\"\n className=\"block fill-white stroke-black/10 stroke-1 group-placement-left:-rotate-90 group-placement-right:rotate-90 group-placement-bottom:rotate-180 dark:fill-[#1f1f21] dark:stroke-zinc-600 forced-colors:fill-[Canvas] forced-colors:stroke-[ButtonBorder]\"\n >\n <path d=\"M0 0 L6 6 L12 0\" />\n </svg>\n </OverlayArrow>\n )}\n {children}\n </AriaPopover>\n );\n}\n","import { DateTime } from \"luxon\";\nimport { composeRenderProps } from \"react-aria-components\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport { ColorModeProvider, useColorMode } from \"./ColorModeProvider\";\n\nexport const formatIsoDateString = (isoDateString: string) => {\n const dateTime = DateTime.fromISO(isoDateString);\n\n return {\n toFullDateTime() {\n return dateTime.toLocaleString(DateTime.DATETIME_MED_WITH_WEEKDAY);\n },\n toRelative() {\n return dateTime.toRelative();\n },\n };\n};\n\nexport function focusRing(showDefaultOutline: boolean = false) {\n const baseClasses = showDefaultOutline\n ? \"outline outline-1 outline-border-input focus:outline-2 focus:outline-border-focus focus:outline-offset-0 invalid:outline-2 invalid:outline-feedback-error-border group-invalid:outline-2 group-invalid:outline-feedback-error-border forced-colors:focus:outline-[Highlight] forced-colors:focus:outline-2 forced-colors:focus:outline-offset-2\"\n : \"outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-border-focus focus-visible:outline-offset-0 invalid:outline-2 invalid:outline-feedback-error-border group-invalid:outline-2 group-invalid:outline-feedback-error-border forced-colors:focus:outline-[Highlight] forced-colors:focus:outline-2 forced-colors:focus:outline-offset-2\";\n return `${baseClasses}`;\n}\n\nexport function composeTailwindRenderProps<T>(\n className: string | ((v: T) => string) | undefined,\n tw: string,\n): string | ((v: T) => string) {\n return composeRenderProps(className, (className) => twMerge(tw, className));\n}\n\nexport function toTitleCase(text: string): string {\n if (!text) return text;\n const articles = new Set([\"a\", \"an\", \"the\", \"and\", \"but\", \"or\", \"for\", \"nor\", \"on\", \"at\", \"to\", \"with\"]);\n return text\n .toLocaleLowerCase()\n .split(/\\s+/)\n .map((word, index) =>\n articles.has(word) && index !== 0 ? word : word.charAt(0).toLocaleUpperCase() + word.slice(1),\n )\n .join(\" \");\n}\n\nexport function truncateMiddle(value: string, length: number = 16): string {\n if (!value) return value;\n if (value.length <= length) return value;\n const mid = Math.floor(length / 2);\n return `${value.slice(0, mid)}...${value.slice(-mid)}`;\n}\n\nexport function toSentenceCase(text: string): string {\n if (!text) return text;\n return text.charAt(0).toLocaleUpperCase() + text.slice(1).toLocaleLowerCase();\n}\n\nexport function formatPhoneNumber(phone: string): string {\n if (!phone) return phone;\n return phone.replace(/(\\d{3})(\\d{3})(\\d{4})/, \"($1) $2-$3\");\n}\n\nexport function toDateString(date: string, showTime: boolean = false): string {\n if (!date) return date;\n\n // Normalize the date string to ensure uppercase \"T\" and \"Z\"\n const normalizedDate = date.replace(\"t\", \"T\").replace(\"z\", \"Z\");\n\n const dt = DateTime.fromISO(normalizedDate); // Parse the ISO date string\n\n if (!dt.isValid) {\n return \"Invalid Date\";\n }\n\n return showTime\n ? dt.toLocaleString(DateTime.DATETIME_SHORT) // Includes both date and time\n : dt.toLocaleString(DateTime.DATE_SHORT); // Date only\n}\n\nconst colorCache = new Map<string, string>();\n\nexport const getResolvedColor = (variableName: string): string => {\n // Early return if running in non-browser environment\n if (typeof window === \"undefined\") return \"\";\n\n // Return cached value if available\n if (colorCache.has(variableName)) {\n return colorCache.get(variableName)!;\n }\n\n try {\n const tempElement = document.createElement(\"div\");\n tempElement.style.color = `var(${variableName})`;\n document.body.appendChild(tempElement);\n const resolvedColor = getComputedStyle(tempElement).color;\n document.body.removeChild(tempElement);\n // Cache the result\n colorCache.set(variableName, resolvedColor);\n return resolvedColor;\n } catch (error) {\n console.error(`Failed to resolve color for ${variableName}:`, error);\n return \"\";\n }\n};\n","import { useEffect, useState } from \"react\";\n\nexport function useDebounce<T>(value: T, delay: number = 300): T {\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\n\n useEffect(() => {\n const timer = setTimeout(() => setDebouncedValue(value), delay);\n\n return () => clearTimeout(timer);\n }, [value, delay]);\n\n return debouncedValue;\n}\n","import {\n Button as RACButton,\n Link as RACLink,\n ButtonProps as RACButtonProps,\n ButtonRenderProps,\n LinkRenderProps,\n} from \"react-aria-components\";\nimport { Icon } from \"../Icon\";\nimport { focusRing } from \"../../utils\";\nimport type { ComponentProps, ReactNode } from \"react\";\nimport type { Size } from \"../../utils/controlStyles\";\nimport { controlStyles } from \"../../utils/controlStyles\";\n\ntype IconName = ComponentProps<typeof Icon>[\"name\"];\n\ntype BaseButtonProps = Omit<RACButtonProps, \"className\">;\n\n/**\n * Button\n *\n * A versatile action component that supports multiple visual variants, sizes,\n * optional icons, a loading state, and badge indicators. Follows the Edges\n * design system tokens and composes `react-aria-components` under the hood.\n *\n * Example usage:\n * ```tsx\n * <Button variant=\"primary\" size=\"md\" icon=\"Check\">Save</Button>\n * ```\n */\nexport interface ButtonProps extends BaseButtonProps {\n variant?: \"default\" | \"primary\" | \"secondary\" | \"destructive\" | \"icon\" | \"link\" | \"unstyled\" | \"ghost\";\n size?: Size;\n badgeNumber?: number;\n badgeVariant?: \"primary\" | \"destructive\";\n badgePosition?: \"top-right\" | \"top-left\" | \"bottom-right\" | \"bottom-left\";\n fullWidth?: boolean;\n icon?: IconName;\n iconWeight?: \"thin\" | \"light\" | \"regular\" | \"bold\" | \"fill\" | \"duotone\";\n iconPosition?: \"left\" | \"right\";\n isLoading?: boolean;\n loadingText?: string;\n loadingIndicator?: React.ReactNode;\n className?: string;\n href?: string;\n target?: string;\n rel?: string;\n style?: React.CSSProperties;\n}\n\nconst baseStyles =\n \"flex font-medium justify-center items-center gap-2 text-center transition rounded-sm whitespace-nowrap box-border\";\n\nconst variantStyles = {\n default:\n \"bg-neutral-black text-neutral-white hover:brightness-90 forced-colors:bg-[ButtonText] forced-colors:text-[ButtonFace] border-2 border-transparent\",\n primary:\n \"bg-action-primary text-neutral-white hover:brightness-90 forced-colors:bg-[ButtonText] forced-colors:text-[ButtonFace] border-2 border-transparent\",\n secondary:\n \"bg-transparent text-text-body border-2 border-border-muted hover:bg-text-body/5 forced-colors:border-[ButtonBorder] forced-colors:bg-[ButtonFace] forced-colors:text-[ButtonText]\",\n ghost:\n \"border-none text-text-body hover:bg-text-body/5 forced-colors:text-[ButtonText] forced-colors:hover:bg-[ButtonFace]\",\n destructive:\n \"bg-transparent text-action-destructive border-2 border-border-muted hover:bg-action-destructive/5 forced-colors:border-[ButtonBorder] forced-colors:bg-[ButtonFace] forced-colors:text-[Mark]\",\n link: \"!text-action-primary hover:text-action-primary/90 hover:underline hover:decoration-2 hover:underline-offset-4\",\n icon: \"border-none text-text-body hover:bg-text-body/5 forced-colors:text-[ButtonText] forced-colors:hover:bg-[ButtonFace] p-2 flex-shrink-0\",\n unstyled: \"bg-transparent\",\n};\n\nconst widthStyles = {\n full: \"w-full\",\n default: \"w-fit\",\n};\n\nconst disabledStyles = \"opacity-control-hover cursor-not-allowed pointer-events-none grayscale\";\nconst enabledStyles = \"opacity-100 cursor-pointer\";\n\nconst badgePositionStyles = {\n \"top-right\": \"-right-2 -top-2\",\n \"top-left\": \"-left-2 -top-2\",\n \"bottom-right\": \"-right-2 -bottom-2\",\n \"bottom-left\": \"-left-2 -bottom-2\",\n} as const;\n\nconst badgeVariantStyles = {\n primary: \"bg-action-primary text-white\",\n destructive: \"bg-action-destructive text-white\",\n} as const;\n\nfunction getButtonStyles(props: ButtonProps) {\n const { variant = \"default\", size = \"md\", isDisabled, fullWidth = false, isLoading = false } = props;\n\n let styles = variant === \"unstyled\" ? \"\" : `${baseStyles} ${variantStyles[variant]}`;\n\n // Add size styles using controlStyles\n if (variant !== \"unstyled\") {\n styles += ` ${controlStyles[size].text} ${controlStyles[size].height} ${controlStyles[size].padding} ${controlStyles[size].gap}`;\n }\n\n if (isDisabled || isLoading) {\n styles += ` ${disabledStyles}`;\n } else {\n styles += ` ${enabledStyles}`;\n }\n\n if (fullWidth) {\n styles += ` ${widthStyles.full}`;\n } else {\n styles += ` ${widthStyles.default}`;\n }\n\n return `${styles} ${focusRing()}`;\n}\n\n/**\n * Renders an Edges Button. When `href` is provided, renders a link-styled\n * button using the same visual system.\n */\nexport function Button(props: ButtonProps) {\n const {\n icon,\n children,\n isLoading = false,\n loadingText,\n loadingIndicator,\n size = \"md\",\n iconPosition = \"left\",\n iconWeight,\n href,\n className,\n badgeNumber,\n badgeVariant = \"primary\",\n badgePosition = \"top-right\",\n style,\n ...restProps\n } = props;\n\n // Shared icon logic\n const iconElement = icon ? (\n <Icon name={icon} className={`icon-[--control-icon-size-${size}]`} weight={iconWeight} />\n ) : null;\n\n // Shared content logic\n const content = (\n <>\n {iconPosition === \"left\" && iconElement}\n {typeof children === \"function\" ? null : children}\n {iconPosition === \"right\" && iconElement}\n </>\n );\n\n // Loading state\n const loadingNode = (\n <div className=\"relative inline-flex items-center justify-center\">\n <div className=\"absolute inset-0 flex items-center justify-center\">\n {loadingIndicator || (\n <Icon name=\"CircleNotch\" className={`animate-spin icon-[--control-icon-size-${size}]`} aria-hidden=\"true\" />\n )}\n </div>\n <div className=\"invisible\" aria-hidden=\"true\">\n {content}\n </div>\n {loadingText && (\n <span className=\"sr-only\" role=\"status\" aria-live=\"polite\">\n {loadingText}\n </span>\n )}\n </div>\n );\n\n // Compose className as a string\n const composedClassName = [getButtonStyles(props), className, isLoading ? \"aria-busy\" : \"\"].filter(Boolean).join(\" \");\n\n // Compose the button or link element\n const buttonOrLink = href ? (\n <RACLink href={href} {...restProps} style={style} className={composedClassName}>\n {isLoading\n ? loadingNode\n : typeof children === \"function\"\n ? (function (renderProps: LinkRenderProps & { defaultChildren: ReactNode }) {\n return (\n <>\n {iconPosition === \"left\" && iconElement}\n {children(renderProps as unknown as ButtonRenderProps & { defaultChildren: ReactNode })}\n {iconPosition === \"right\" && iconElement}\n </>\n );\n } as (props: LinkRenderProps & { defaultChildren: ReactNode }) => ReactNode)\n : content}\n </RACLink>\n ) : (\n <RACButton {...restProps} style={style} className={composedClassName}>\n {isLoading\n ? loadingNode\n : typeof children === \"function\"\n ? (function (renderProps: ButtonRenderProps & { defaultChildren: ReactNode }) {\n return (\n <>\n {iconPosition === \"left\" && iconElement}\n {children(renderProps)}\n {iconPosition === \"right\" && iconElement}\n </>\n );\n } as (props: ButtonRenderProps & { defaultChildren: ReactNode }) => ReactNode)\n : content}\n </RACButton>\n );\n\n // Render badge if badgeNumber is provided and > 0\n if (badgeNumber && badgeNumber > 0) {\n return (\n <div className=\"relative\">\n {buttonOrLink}\n <span\n className={`absolute ${badgePositionStyles[badgePosition]} flex h-5 w-5 items-center justify-center rounded-full ${badgeVariantStyles[badgeVariant]} text-xs`}\n aria-label={`${badgeNumber} items`}\n >\n {badgeNumber}\n </span>\n </div>\n );\n }\n\n return buttonOrLink;\n}\n","import {\n Calendar as AriaCalendar,\n CalendarGridHeader as AriaCalendarGridHeader,\n CalendarProps as AriaCalendarProps,\n CalendarCell,\n CalendarGrid,\n CalendarGridBody,\n CalendarHeaderCell,\n DateValue,\n Heading,\n Text,\n useLocale,\n} from \"react-aria-components\";\nimport { Button } from \"../Button\";\nimport { Icon } from \"../Icon\";\nimport { focusRing } from \"../../utils\";\n\nfunction getCellStyles({ isSelected, isDisabled }: { isSelected: boolean; isDisabled: boolean }) {\n const baseStyles = [\n focusRing,\n \"w-9 h-9 text-base cursor-default rounded-full flex items-center justify-center forced-color-adjust-none\",\n ];\n\n if (isDisabled) {\n baseStyles.push(\"text-gray-300 dark:text-zinc-600 forced-colors:text-[GrayText]\");\n } else if (isSelected) {\n baseStyles.push(\n \"bg-blue-600 invalid:bg-red-600 text-white forced-colors:bg-[Highlight] forced-colors:invalid:bg-[Mark] forced-colors:text-[HighlightText]\",\n );\n } else {\n baseStyles.push(\n \"text-zinc-900 dark:text-zinc-200 hover:bg-gray-100 dark:hover:bg-zinc-700 pressed:bg-gray-200 dark:pressed:bg-zinc-600\",\n );\n }\n\n return baseStyles.join(\" \");\n}\n\n/**\n * Calendar\n *\n * Single-date calendar primitive with Edges styling.\n */\nexport interface CalendarProps<T extends DateValue> extends Omit<AriaCalendarProps<T>, \"visibleDuration\"> {\n errorMessage?: string;\n}\n\nexport function Calendar<T extends DateValue>({ errorMessage, ...props }: CalendarProps<T>) {\n return (\n <AriaCalendar {...props}>\n <CalendarHeader />\n <CalendarGrid>\n <CalendarGridHeader />\n <CalendarGridBody>\n {(date) => (\n <CalendarCell\n date={date}\n className={({ isSelected, isDisabled }) => getCellStyles({ isSelected, isDisabled })}\n />\n )}\n </CalendarGridBody>\n </CalendarGrid>\n {errorMessage && (\n <Text slot=\"errorMessage\" className=\"text-sm text-red-600\">\n {errorMessage}\n </Text>\n )}\n </AriaCalendar>\n );\n}\n\nexport function CalendarHeader() {\n const { direction } = useLocale();\n\n const buttonSize = 18;\n\n return (\n <header className=\"flex w-full items-center gap-1 px-1 pb-4\">\n <Button variant=\"icon\" slot=\"previous\" className=\"pl-0\">\n {direction === \"rtl\" ? (\n <Icon name=\"CaretRight\" aria-hidden size={buttonSize} />\n ) : (\n <Icon name=\"CaretLeft\" aria-hidden size={buttonSize} />\n )}\n </Button>\n <Heading className=\"text-md mx-2 flex-1 text-center font-semibold text-zinc-900 dark:text-zinc-200\" />\n <Button variant=\"icon\" slot=\"next\" className=\"pr-0\">\n {direction === \"rtl\" ? (\n <Icon name=\"CaretLeft\" aria-hidden size={buttonSize} />\n ) : (\n <Icon name=\"CaretRight\" aria-hidden size={buttonSize} />\n )}\n </Button>\n </header>\n );\n}\n\nexport function CalendarGridHeader() {\n return (\n <AriaCalendarGridHeader>\n {(day) => <CalendarHeaderCell className=\"text-xs font-semibold text-text-caption\">{day}</CalendarHeaderCell>}\n </AriaCalendarGridHeader>\n );\n}\n","import React from \"react\";\nimport { twMerge } from \"tailwind-merge\";\n\nconst sizeVariants = {\n xs: \"text-lg font-semibold\",\n sm: \"text-xl font-semibold\",\n md: \"text-2xl font-semibold\",\n lg: \"text-3xl font-semibold\",\n xl: \"text-4xl font-semibold\",\n} as const;\n\nconst heightVariants = {\n page: \"h-16 leading-[62px]\",\n} as const;\n\nexport type HeadingSize = keyof typeof sizeVariants;\nexport type HeadingHeight = keyof typeof heightVariants;\n\n/**\n * Heading\n *\n * Typography component for page/section headings with size and height options.\n */\nexport interface HeadingProps {\n tag?: keyof JSX.IntrinsicElements;\n size?: HeadingSize;\n height?: HeadingHeight;\n className?: string;\n children?: React.ReactNode;\n}\n\nexport function Heading({ tag: Tag = \"h1\", size = \"lg\", height, className = \"\", children }: HeadingProps) {\n const sizeClasses = sizeVariants[size];\n const heightClasses = height ? heightVariants[height] : \"\";\n\n return <Tag className={twMerge(sizeClasses, heightClasses, className)}>{children}</Tag>;\n}\n","\"use client\";\n\nimport React, { useState, useEffect } from \"react\";\nimport { twMerge } from \"tailwind-merge\";\n\ninterface SkeletonProps {\n width?: number | string;\n height?: number | string;\n variant?: \"text\" | \"rect\" | \"circle\";\n animation?: \"pulse\" | \"wave\" | \"none\";\n gradient?: boolean;\n flex?: boolean;\n stack?: (number | string)[]; // Array of widths for stacked skeletons\n responsive?: Record<string, string | number>;\n delay?: number;\n adjustAnimationSpeedBasedOnWidth?: boolean;\n ariaLabel?: string;\n className?: string;\n \"data-testid\"?: string;\n}\n\nexport const Skeleton: React.FC<SkeletonProps> = ({\n width,\n height,\n variant = \"rect\",\n animation = \"pulse\",\n gradient = false,\n flex = false,\n stack,\n responsive,\n delay = 0,\n adjustAnimationSpeedBasedOnWidth = false,\n ariaLabel,\n className,\n \"data-testid\": dataTestId,\n}) => {\n const [visible, setVisible] = useState(delay === 0);\n\n useEffect(() => {\n if (delay > 0) {\n const timer = setTimeout(() => setVisible(true), delay);\n return () => clearTimeout(timer);\n }\n }, [delay]);\n\n if (!visible) return null;\n\n // Base styles\n const baseClasses = gradient\n ? \"bg-gradient-to-r from-[var(--skeleton-base)] via-[var(--skeleton-highlight)] to-[var(--skeleton-base)]\"\n : \"bg-[var(--skeleton-base)]\";\n\n // Adjust animation speed dynamically based on width\n const animationSpeed =\n adjustAnimationSpeedBasedOnWidth && width\n ? (() => {\n const numWidth = typeof width === \"number\" ? width : parseFloat(String(width));\n return !isNaN(numWidth) ? `animation-duration-[${Math.max(0.8, numWidth / 100)}s]` : \"\";\n })()\n : \"\";\n\n // Animation styles\n const animationClasses =\n animation === \"pulse\"\n ? `animate-pulse ${animationSpeed}`\n : animation === \"wave\"\n ? `relative overflow-hidden before:absolute before:inset-0 before:bg-gradient-to-r before:from-transparent before:via-[var(--skeleton-wave)] before:to-transparent before:animate-wave ${animationSpeed}`\n : \"\";\n\n // Shape-specific styles\n let shapeClasses = \"rounded-sm\";\n if (variant === \"circle\") shapeClasses = \"rounded-full\";\n if (variant === \"text\") shapeClasses = \"h-4 w-full rounded-sm\";\n\n // Dynamic layout handling\n const layoutClasses = flex ? \"flex-1 min-w-0\" : \"\";\n\n // Responsive styles\n const responsiveStyles = responsive\n ? Object.entries(responsive)\n .map(([breakpoint, value]) => `${breakpoint}:w-[${value}]`)\n .join(\" \")\n : \"\";\n\n // Stacking Multiple Skeletons\n if (stack) {\n return (\n <div className=\"space-y-2\" data-testid={dataTestId}>\n {stack.map((lineWidth, index) => (\n <div\n key={index}\n className={twMerge(baseClasses, animationClasses, shapeClasses, layoutClasses, responsiveStyles, className)}\n style={{ width: lineWidth, height }}\n />\n ))}\n </div>\n );\n }\n\n return (\n <div\n className={twMerge(baseClasses, animationClasses, shapeClasses, layoutClasses, responsiveStyles, className)}\n style={{ width, height }}\n role=\"presentation\"\n aria-hidden={!ariaLabel}\n aria-label={ariaLabel ?? undefined}\n data-testid={dataTestId}\n />\n );\n};\n\ninterface SkeletonGroupProps {\n count?: number;\n children: React.ReactNode;\n className?: string;\n \"data-testid\"?: string;\n}\n\nexport const SkeletonGroup: React.FC<SkeletonGroupProps> = ({\n count = 1,\n children,\n className,\n \"data-testid\": dataTestId,\n}) => {\n return (\n <div className={className} data-testid={dataTestId}>\n {Array.from({ length: count }).map((_, index) => (\n <div key={index}>{children}</div>\n ))}\n </div>\n );\n};\n","import React from \"react\";\n\nimport { Heading } from \"../Heading\";\nimport { Skeleton } from \"../Skeleton\";\n\n/**\n * Card\n *\n * Surface container with optional heading and actions.\n */\nexport interface CardProps {\n heading?: React.ReactNode;\n upperRightText?: React.ReactNode;\n withPadding?: boolean;\n isGhost?: boolean;\n children?: React.ReactNode;\n className?: string;\n isLoading?: boolean;\n}\n\nexport const Card: React.FC<CardProps> = ({\n heading,\n upperRightText,\n withPadding = true,\n isGhost = false,\n children,\n className = \"\",\n isLoading,\n}) => {\n const baseClasses = \"w-full rounded md:border-x border-y bg-background-surface \";\n const paddingClasses = withPadding ? \"p-6\" : \"\";\n const ghostClasses = isGhost ? \"md:border-x-0 border-y-0 shadow-none p-0\" : \"shadow-sm\";\n\n const cardClasses = `${baseClasses} ${paddingClasses} ${ghostClasses} ${className}`.trim();\n\n return (\n <div className={cardClasses} data-testid=\"card\">\n <>\n {heading && (\n <div className=\"mb-4 h-[28px] min-h-[28px]\">\n {isLoading ? (\n <Skeleton width={100} height={16} data-testid=\"skeleton\" />\n ) : (\n <div className=\"flex justify-between\">\n <div className=\"flex items-center gap-2\">\n {typeof heading === \"string\" ? <Heading size=\"xs\">{heading}</Heading> : heading}\n </div>\n {upperRightText && <span className=\"text-sm text-textFaint\">{upperRightText}</span>}\n </div>\n )}\n </div>\n )}\n {children}\n </>\n </div>\n );\n};\n","import { ReactNode } from \"react\";\nimport { Check, Minus } from \"lucide-react\";\nimport {\n Checkbox as AriaCheckbox,\n CheckboxGroup as AriaCheckboxGroup,\n CheckboxGroupProps as AriaCheckboxGroupProps,\n CheckboxProps as AriaCheckboxProps,\n CheckboxRenderProps,\n ValidationResult,\n composeRenderProps,\n} from \"react-aria-components\";\nimport { Description, FieldError, Label } from \"../Field\";\nimport { composeTailwindRenderProps } from \"../../utils\";\n\n/**\n * CheckboxGroup\n *\n * Groups multiple checkboxes with shared label/description.\n */\nexport interface CheckboxGroupProps extends Omit<AriaCheckboxGroupProps, \"children\"> {\n label?: string;\n children?: ReactNode;\n description?: string;\n errorMessage?: string | ((validation: ValidationResult) => string);\n}\n\n/**\n * Checkbox\n *\n * Single checkbox with Edges visuals.\n */\nexport interface CheckboxProps extends Omit<AriaCheckboxProps, \"children\"> {\n children?: ReactNode | ((props: CheckboxRenderProps) => ReactNode);\n}\n\nexport function CheckboxGroup(props: CheckboxGroupProps) {\n return (\n <AriaCheckboxGroup {...props} className={composeTailwindRenderProps(props.className, \"flex flex-col gap-2\")}>\n <Label>{props.label}</Label>\n {props.children}\n {props.description && <Description>{props.description}</Description>}\n <FieldError>{typeof props.errorMessage === \"function\" ? undefined : props.errorMessage}</FieldError>\n </AriaCheckboxGroup>\n );\n}\n\nfunction getCheckboxStyles({ isDisabled }: { isDisabled?: boolean }) {\n return `flex gap-2 items-center group text-sm transition ${isDisabled ? \"text-text-disabled\" : \"text-text-caption\"}`;\n}\n\nfunction getBoxStyles({\n isSelected,\n isInvalid,\n isDisabled,\n isIndeterminate,\n}: {\n isSelected?: boolean;\n isInvalid?: boolean;\n isDisabled?: boolean;\n isIndeterminate?: boolean;\n}) {\n const baseStyles =\n \"w-5 h-5 flex-shrink-0 rounded flex items-center justify-center border-2 transition ring-offset-2 focus:ring-2 focus:ring-border-focus\";\n\n let colorStyles = \"\";\n if (isDisabled) {\n colorStyles = \"border-border-muted bg-background-muted\";\n } else if (isInvalid) {\n colorStyles = \"border-feedback-error-border bg-feedback-error-background\";\n } else if (isSelected || isIndeterminate) {\n colorStyles =\n \"bg-action-primary border-action-primary hover:bg-action-primary-hover hover:border-action-primary-hover\";\n } else {\n colorStyles = \"bg-background-input border-border-input hover:border-border-focus\";\n }\n\n return `${baseStyles} ${colorStyles}`;\n}\n\nconst iconStyles = \"w-4 h-4 text-text-onPrimary group-disabled:text-text-disabled\";\n\nexport function Checkbox(props: CheckboxProps) {\n const { children, ...otherProps } = props;\n return (\n <AriaCheckbox\n {...otherProps}\n className={composeRenderProps(\n props.className,\n (className, renderProps) => `${getCheckboxStyles(renderProps)} ${className || \"\"}`,\n )}\n >\n {(renderProps) => {\n const { isSelected, isIndeterminate, ...rest } = renderProps;\n const checkboxContent = (\n <div\n className={getBoxStyles({\n isSelected,\n isIndeterminate,\n ...rest,\n })}\n >\n {isIndeterminate ? (\n <Minus aria-hidden className={iconStyles} />\n ) : isSelected ? (\n <Check aria-hidden className={iconStyles} />\n ) : null}\n </div>\n );\n\n return (\n <>\n {checkboxContent}\n {typeof children === \"function\" ? children(renderProps) : children}\n </>\n );\n }}\n </AriaCheckbox>\n );\n}\n","import React from \"react\";\nimport {\n Tooltip as AriaTooltip,\n TooltipProps as AriaTooltipProps,\n OverlayArrow,\n composeRenderProps,\n TooltipTrigger,\n} from \"react-aria-components\";\n\n/**\n * Tooltip\n *\n * Lightweight content container that appears on hover/focus/press.\n */\nexport interface TooltipProps extends Omit<AriaTooltipProps, \"children\"> {\n children: React.ReactNode;\n content: React.ReactNode;\n}\n\nconst styles = ({\n isEntering,\n isExiting,\n className,\n}: {\n isEntering?: boolean;\n isExiting?: boolean;\n className?: string;\n}) => {\n const baseClasses =\n \"max-w-[200px] group bg-slate-700 dark:bg-slate-600 border border-slate-800 dark:border-white/10 shadow-[inset_0_1px_0_0_theme(colors.gray.600)] dark:shadow-none text-white text-sm rounded-lg drop-shadow-lg will-change-transform px-3 py-1\";\n\n const enteringClasses = isEntering\n ? \"animate-in fade-in placement-bottom:slide-in-from-top-0.5 placement-top:slide-in-from-bottom-0.5 placement-left:slide-in-from-right-0.5 placement-right:slide-in-from-left-0.5 ease-out duration-200\"\n : \"\";\n\n const exitingClasses = isExiting\n ? \"animate-out fade-out placement-bottom:slide-out-to-top-0.5 placement-top:slide-out-to-bottom-0.5 placement-left:slide-out-to-right-0.5 placement-right:slide-out-to-left-0.5 ease-in duration-150\"\n : \"\";\n\n return [baseClasses, enteringClasses, exitingClasses, className].filter(Boolean).join(\" \");\n};\n\nexport function Tooltip({ children, content, ...props }: TooltipProps) {\n return (\n <TooltipTrigger delay={200}>\n {children}\n <AriaTooltip\n {...props}\n offset={10}\n className={composeRenderProps(props.className, (className, renderProps) =>\n styles({ ...renderProps, className }),\n )}\n >\n <OverlayArrow>\n <svg\n width={8}\n height={8}\n viewBox=\"0 0 8 8\"\n className=\"fill-slate-700 stroke-gray-800 group-placement-left:-rotate-90 group-placement-right:rotate-90 group-placement-bottom:rotate-180 dark:fill-slate-600 dark:stroke-white/10 forced-colors:fill-[Canvas] forced-colors:stroke-[ButtonBorder]\"\n >\n <path d=\"M0 0 L4 4 L8 0\" />\n </svg>\n </OverlayArrow>\n {content}\n </AriaTooltip>\n </TooltipTrigger>\n );\n}\n","\"use client\";\n\nimport React, { useState } from \"react\";\nimport { Button } from \"../Button\";\nimport { Icon } from \"../Icon\";\nimport { Tooltip } from \"../Tooltip\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport interface CopyToClipboardProps {\n /**\n * The value to copy to clipboard. If not provided, will use the text content of children\n */\n value?: string;\n /**\n * The content to display\n */\n children: React.ReactNode;\n /**\n * Optional className for the container\n */\n className?: string;\n /**\n * Size of the copy button, defaults to \"sm\"\n */\n size?: \"sm\" | \"md\";\n}\n\nexport function CopyToClipboard({ value, children, className, size = \"sm\" }: CopyToClipboardProps) {\n const [showTooltip, setShowTooltip] = useState(false);\n\n const handleCopy = () => {\n const textToCopy = value || (typeof children === \"string\" ? children : \"\");\n navigator.clipboard.writeText(textToCopy);\n setShowTooltip(true);\n setTimeout(() => {\n setShowTooltip(false);\n }, 2000);\n };\n\n const iconSize = size === \"sm\" ? 14 : 16;\n\n const copyButton = (\n <Button variant=\"icon\" size={size} onPress={handleCopy} className=\"!px-2\">\n <Icon name=\"Copy\" size={iconSize} />\n </Button>\n );\n\n return (\n <div className={twMerge(\"flex items-center gap-1\", className)}>\n {children}\n {showTooltip ? <Tooltip content=\"Copied!\">{copyButton}</Tooltip> : copyButton}\n </div>\n );\n}\n","import {\n DateField as AriaDateField,\n DateFieldProps as AriaDateFieldProps,\n DateInput as AriaDateInput,\n DateInputProps,\n DateSegment,\n DateValue,\n ValidationResult,\n} from \"react-aria-components\";\nimport { Description, FieldError, Label } from \"../Field\";\nimport { getFieldGroupStyles } from \"../Field\";\nimport { composeTailwindRenderProps } from \"../../utils\";\n\n/**\n * DateField\n *\n * Segmented date input with Edges styling.\n */\nexport interface DateFieldProps<T extends DateValue> extends AriaDateFieldProps<T> {\n label?: string;\n description?: string;\n errorMessage?: string | ((validation: ValidationResult) => string);\n}\n\nexport function DateField<T extends DateValue>({ label, description, errorMessage, ...props }: DateFieldProps<T>) {\n return (\n <AriaDateField {...props} className={composeTailwindRenderProps(props.className, \"flex flex-col gap-1\")}>\n {label && <Label>{label}</Label>}\n <DateInput />\n {description && <Description>{description}</Description>}\n {typeof errorMessage === \"string\" ? <FieldError>{errorMessage}</FieldError> : null}\n </AriaDateField>\n );\n}\n\nfunction getSegmentStyles({\n isPlaceholder,\n isDisabled,\n isFocused,\n}: {\n isPlaceholder?: boolean;\n isDisabled?: boolean;\n isFocused?: boolean;\n}) {\n return [\n \"inline p-0.5 type-literal:px-0 rounded outline-none forced-color-adjust-none caret-transparent text-gray-800 dark:text-zinc-200 forced-colors:text-[ButtonText]\",\n isPlaceholder && \"text-gray-600 dark:text-zinc-400 italic\",\n isDisabled && \"text-gray-200 dark:text-zinc-600 forced-colors:text-[GrayText]\",\n isFocused &&\n \"bg-blue-600 text-white dark:text-white forced-colors:bg-[Highlight] forced-colors:text-[HighlightText]\",\n ]\n .filter(Boolean)\n .join(\" \");\n}\n\nexport function DateInput(props: Omit<DateInputProps, \"children\">) {\n return (\n <AriaDateInput\n className={(renderProps) =>\n getFieldGroupStyles({\n ...renderProps,\n className: \"block min-w-[150px] px-2 py-1.5 text-sm\",\n })\n }\n {...props}\n >\n {(segment) => (\n <DateSegment\n segment={segment}\n className={getSegmentStyles({\n isPlaceholder: segment.isPlaceholder,\n isDisabled: segment.isEditable,\n })}\n />\n )}\n </AriaDateInput>\n );\n}\n","import { DialogProps, Dialog as RACDialog } from \"react-aria-components\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Dialog\n *\n * Generic modal/dialog surface with Edges defaults.\n */\nexport function Dialog(props: DialogProps) {\n // Ensure the dialog is properly labeled for accessibility\n return (\n <RACDialog\n {...props}\n className={twMerge(\n \"relative h-auto max-h-[inherit] overflow-auto outline-none [[data-placement]>&]:p-4\",\n props.className,\n )}\n role=\"dialog\"\n />\n );\n}\n","import {\n RangeCalendar as AriaRangeCalendar,\n RangeCalendarProps as AriaRangeCalendarProps,\n CalendarCell,\n CalendarGrid,\n CalendarGridBody,\n DateValue,\n Text,\n} from \"react-aria-components\";\nimport { CalendarGridHeader, CalendarHeader } from \"../Calendar\";\nimport { focusRing } from \"../../utils\";\n\n/**\n * RangeCalendar\n *\n * Calendar allowing selection of a date range.\n */\nexport interface RangeCalendarProps<T extends DateValue> extends Omit<AriaRangeCalendarProps<T>, \"visibleDuration\"> {\n errorMessage?: string;\n}\n\nfunction getCellClassName({\n selectionState,\n isDisabled,\n}: {\n selectionState: \"none\" | \"middle\" | \"cap\";\n isDisabled?: boolean;\n}) {\n const baseClasses = `${focusRing} w-full h-full flex items-center justify-center rounded-sm forced-color-adjust-none font-semibold`;\n\n const selectionStateClasses = {\n none: \"text-text-body group-hover:bg-gray-200 group-pressed:bg-gray-200\",\n middle: [\n \"group-hover:bg-gray-300 forced-colors:group-hover:bg-[Highlight]\",\n \"group-invalid:group-hover:bg-red-200 forced-colors:group-invalid:group-hover:bg-[Mark]\",\n \"group-pressed:bg-blue-300 forced-colors:group-pressed:bg-[Highlight] forced-colors:text-[HighlightText]\",\n \"group-invalid:group-pressed:bg-red-300 forced-colors:group-invalid:group-pressed:bg-[Mark]\",\n ].join(\" \"),\n cap: \" group-invalid:bg-red-600 forced-colors:bg-[Highlight] forced-colors:group-invalid:bg-[Mark] text-white forced-colors:text-white !bg-neutral-black\",\n };\n\n const disabledClasses = isDisabled ? \"text-textFaint dark:text-zinc-600 forced-colors:text-textFaint font-light\" : \"\";\n\n return [baseClasses, selectionStateClasses[selectionState], disabledClasses].filter(Boolean).join(\" \");\n}\n\nexport function RangeCalendar<T extends DateValue>({ errorMessage, ...props }: RangeCalendarProps<T>) {\n return (\n <AriaRangeCalendar {...props}>\n <CalendarHeader />\n <CalendarGrid className=\"w-full [&_td]:px-0\">\n <CalendarGridHeader />\n <CalendarGridBody>\n {(date) => (\n <CalendarCell\n date={date}\n className=\"selection-start:rounded-s-end selection-end:rounded-e-end [td:last-child_&]:rounded-e-end group h-9 w-9 cursor-default text-sm outline-none outside-month:text-gray-300 selected:bg-background-selected invalid:selected:bg-red-100 forced-colors:selected:bg-[Highlight] forced-colors:selected:text-white forced-colors:invalid:selected:bg-[Mark] [td:first-child_&]:rounded-s-full\"\n >\n {({\n formattedDate,\n isSelected,\n isSelectionStart,\n isSelectionEnd,\n isFocusVisible: _isFocusVisible,\n isDisabled,\n }) => (\n <span\n className={getCellClassName({\n selectionState:\n isSelected && (isSelectionStart || isSelectionEnd) ? \"cap\" : isSelected ? \"middle\" : \"none\",\n isDisabled,\n })}\n >\n {formattedDate}\n </span>\n )}\n </CalendarCell>\n )}\n </CalendarGridBody>\n </CalendarGrid>\n {errorMessage && (\n <Text slot=\"errorMessage\" className=\"text-sm text-red-600\">\n {errorMessage}\n </Text>\n )}\n </AriaRangeCalendar>\n );\n}\n","import { CalendarIcon } from \"lucide-react\";\nimport {\n DateRangePicker as AriaDateRangePicker,\n DateRangePickerProps as AriaDateRangePickerProps,\n DateValue,\n ValidationResult,\n} from \"react-aria-components\";\nimport { Button } from \"../Button\";\nimport { DateInput } from \"../DateField\";\nimport { Dialog } from \"../Dialog\";\nimport { Description, FieldError, FieldGroup, Label } from \"../Field\";\nimport { Popover } from \"../Popover\";\nimport { RangeCalendar } from \"../RangeCalendar\";\nimport { composeTailwindRenderProps } from \"../../utils\";\n\n/**\n * DateRangePicker\n *\n * Composed date range input with popover calendar.\n */\nexport interface DateRangePickerProps<T extends DateValue> extends AriaDateRangePickerProps<T> {\n label?: string;\n description?: string;\n errorMessage?: string | ((validation: ValidationResult) => string);\n}\n\nexport function DateRangePicker<T extends DateValue>({\n label,\n description,\n errorMessage,\n ...props\n}: DateRangePickerProps<T>) {\n return (\n <AriaDateRangePicker\n {...props}\n className={composeTailwindRenderProps(props.className, \"group flex flex-col gap-1\")}\n >\n {label && <Label>{label}</Label>}\n <FieldGroup className=\"w-auto min-w-[208px]\">\n <DateInput slot=\"start\" className=\"px-2 py-1.5 text-sm\" />\n <span\n aria-hidden=\"true\"\n className=\"text-gray-800 group-disabled:text-gray-200 dark:text-zinc-200 group-disabled:dark:text-zinc-600 forced-colors:text-[ButtonText] group-disabled:forced-colors:text-[GrayText]\"\n >\n –\n </span>\n <DateInput slot=\"end\" className=\"flex-1 px-2 py-1.5 text-sm\" />\n <Button variant=\"icon\" className=\"mr-1 w-6 rounded outline-offset-0\">\n <CalendarIcon aria-hidden className=\"h-4 w-4\" />\n </Button>\n </FieldGroup>\n {description && <Description>{description}</Description>}\n {typeof errorMessage === \"string\" ? <FieldError>{errorMessage}</FieldError> : null}\n <Popover>\n <Dialog>\n <RangeCalendar />\n </Dialog>\n </Popover>\n </AriaDateRangePicker>\n );\n}\n","import React from \"react\";\nimport { Heading } from \"../Heading\";\nimport { Button } from \"../Button\";\nimport { Icon } from \"../Icon\";\nimport { twMerge } from \"tailwind-merge\";\n\ntype BaseDialogHeaderProps = {\n title?: string;\n onClose: () => void;\n hideCloseIcon?: boolean;\n titleAlign?: \"left\" | \"center\";\n headerContent?: React.ReactNode;\n};\n\ntype WithBackArrow = BaseDialogHeaderProps & {\n hasBackArrow: true;\n onBack: () => void;\n};\n\ntype WithoutBackArrow = BaseDialogHeaderProps & {\n hasBackArrow?: false;\n onBack?: never;\n};\n\n/**\n * DialogHeader\n *\n * Header area for dialogs with optional back arrow.\n */\nexport type DialogHeaderProps = WithBackArrow | WithoutBackArrow;\n\nexport const DialogHeader: React.FC<DialogHeaderProps> = ({\n title,\n onClose,\n hideCloseIcon = false,\n titleAlign = \"left\",\n hasBackArrow = false,\n onBack,\n headerContent,\n}) => {\n return (\n <div\n className={twMerge(\n \"relative flex h-16 w-full items-center justify-between border-b px-4\",\n title && \"border-b\",\n titleAlign === \"center\" ? \"justify-center\" : \"\",\n )}\n >\n {hasBackArrow && (\n <Button variant=\"unstyled\" onPress={onBack} className=\"absolute left-4\">\n <Icon name=\"CaretLeft\" data-testid=\"back-arrow\" />\n </Button>\n )}\n {headerContent || (\n <>\n {title && <Heading size=\"xs\">{title}</Heading>}\n {onClose && !hideCloseIcon && (\n <Button variant=\"unstyled\" onPress={onClose} aria-label=\"Close dialog\">\n <Icon name=\"X\" data-testid=\"close-button\" />\n </Button>\n )}\n </>\n )}\n </div>\n );\n};\n","import { Component, ErrorInfo, ReactNode } from \"react\";\nimport { Card } from \"../Card\";\n\ninterface Props {\n children: ReactNode;\n fallback?: ReactNode;\n title?: string;\n}\n\ninterface State {\n hasError: boolean;\n error?: Error;\n}\n\nexport class ErrorBoundary extends Component<Props, State> {\n public state: State = {\n hasError: false,\n };\n\n public static getDerivedStateFromError(error: Error): State {\n return { hasError: true, error };\n }\n\n public componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n console.error(\"Error Boundary caught an error:\", error, errorInfo);\n }\n\n private handleRetry = () => {\n this.setState({ hasError: false, error: undefined });\n if (typeof window !== \"undefined\") {\n window.location.reload();\n }\n };\n\n public render() {\n if (this.state.hasError) {\n if (this.props.fallback) {\n return this.props.fallback;\n }\n\n return (\n <Card heading={this.props.title}>\n <div className=\"flex flex-col items-center justify-center gap-4 p-6\" data-testid=\"error-boundary\">\n <p className=\"text-red-500\">{this.state.error?.message || \"Something went wrong\"}</p>\n <button className=\"rounded bg-blue-500 px-4 py-2 text-white hover:bg-blue-600\" onClick={this.handleRetry}>\n Retry\n </button>\n </div>\n </Card>\n );\n }\n\n return this.props.children;\n }\n}\n","import React, { useEffect, useState } from \"react\";\nimport { ModalOverlay } from \"react-aria-components\";\nimport { Modal } from \"react-aria-components\";\nimport { Dialog } from \"../Dialog\";\nimport { DialogHeader } from \"../DialogHeader\";\nimport { ErrorBoundary } from \"../ErrorBoundary\";\nimport { Button } from \"../Button\";\n\nexport interface DrawerAction {\n label: string;\n onPress: () => void;\n variant?: \"default\" | \"primary\" | \"secondary\" | \"destructive\" | \"icon\" | \"link\" | \"unstyled\" | \"ghost\";\n size?: \"sm\" | \"md\" | \"lg\";\n isLoading?: boolean;\n isDisabled?: boolean;\n}\n\n/**\n * Drawer\n *\n * Sliding panel that anchors to screen edges.\n */\nexport interface DrawerProps {\n title?: string;\n headerContent?: React.ReactNode;\n children?: React.ReactNode;\n isOpen: boolean;\n slideInFrom?: \"left\" | \"right\";\n transparentOverlay?: boolean;\n onClose?: () => void;\n className?: string;\n // Actions footer props\n primaryAction?: DrawerAction;\n secondaryAction?: DrawerAction;\n footerContent?: React.ReactNode;\n /** Whether to include padding inside the content area. Defaults to true. */\n contentPadding?: boolean;\n}\n\nexport const Drawer: React.FC<DrawerProps> = ({\n children,\n title,\n headerContent,\n isOpen,\n slideInFrom = \"right\",\n transparentOverlay = false,\n onClose,\n className,\n primaryAction,\n secondaryAction,\n footerContent,\n contentPadding = true,\n}) => {\n const [isAnimating, setIsAnimating] = useState(false);\n\n useEffect(() => {\n if (isOpen) {\n // Small delay to ensure the element is positioned before animation starts\n const timer = setTimeout(() => setIsAnimating(true), 10);\n return () => clearTimeout(timer);\n } else {\n setIsAnimating(false);\n }\n }, [isOpen]);\n\n if (!isOpen) return null;\n\n const hasActions = primaryAction || secondaryAction;\n const hasFooter = hasActions || footerContent;\n\n return (\n <ErrorBoundary>\n <ModalOverlay\n isOpen={isOpen}\n onOpenChange={onClose}\n isDismissable\n className={`fixed inset-0 z-50 ${transparentOverlay ? \"bg-transparent\" : \"bg-black/50\"}`}\n >\n <Modal className=\"flex justify-end\" isDismissable>\n <Dialog\n className={`fixed bottom-0 top-0 z-50 flex max-w-[400px] w-full flex-col bg-background-surface shadow-xl duration-300 h-full min-h-0 overflow-hidden dark:bg-gray-800 ${\n isAnimating\n ? slideInFrom === \"right\"\n ? \"animate-in slide-in-from-right\"\n : \"animate-in slide-in-from-left\"\n : \"\"\n } ${className || \"\"}`}\n style={{\n // Explicit positioning\n [slideInFrom === \"right\" ? \"right\" : \"left\"]: 0,\n // Initial transform to position off-screen\n transform: !isAnimating\n ? slideInFrom === \"right\"\n ? \"translateX(100%)\"\n : \"translateX(-100%)\"\n : undefined,\n }}\n >\n {(title || headerContent) && (\n <DialogHeader title={title} headerContent={headerContent} onClose={onClose || (() => {})} />\n )}\n <div className={`flex-1 overflow-y-auto overscroll-contain ${contentPadding ? \"p-6\" : \"p-0\"}`}>\n {children}\n </div>\n {hasFooter && (\n <div className=\"flex h-28 w-full flex-col items-center justify-center border-t p-4\">\n {footerContent && <div className=\"flex h-10 justify-center\">{footerContent}</div>}\n {hasActions && (\n <div className=\"flex h-full w-full items-center justify-between gap-4\">\n {secondaryAction && (\n <Button\n size={secondaryAction.size || \"lg\"}\n fullWidth\n variant={secondaryAction.variant || \"secondary\"}\n onPress={secondaryAction.onPress}\n isLoading={secondaryAction.isLoading}\n isDisabled={secondaryAction.isDisabled}\n >\n {secondaryAction.label}\n </Button>\n )}\n {primaryAction && (\n <Button\n size={primaryAction.size || \"lg\"}\n fullWidth\n onPress={primaryAction.onPress}\n isLoading={primaryAction.isLoading}\n isDisabled={primaryAction.isDisabled}\n >\n {primaryAction.label}\n </Button>\n )}\n </div>\n )}\n </div>\n )}\n </Dialog>\n </Modal>\n </ModalOverlay>\n </ErrorBoundary>\n );\n};\n\nDrawer.displayName = \"Drawer\";\n","import { FormProps, Form as RACForm } from \"react-aria-components\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Form\n *\n * Accessibility-first form wrapper with consistent spacing.\n */\nexport function Form(props: FormProps) {\n return <RACForm {...props} className={twMerge(\"flex flex-col gap-4\", props.className)} />;\n}\n","import { Check } from \"lucide-react\";\nimport {\n ListBox as AriaListBox,\n ListBoxItem as AriaListBoxItem,\n ListBoxProps as AriaListBoxProps,\n Collection,\n Header,\n ListBoxItemProps,\n Section,\n SectionProps,\n composeRenderProps,\n} from \"react-aria-components\";\nimport { composeTailwindRenderProps, focusRing } from \"../../utils\";\n\n/**\n * ListBox\n *\n * Styled wrapper around `react-aria-components` ListBox and related parts\n * used in dropdowns and menus.\n */\ninterface ListBoxProps<T> extends Omit<AriaListBoxProps<T>, \"layout\" | \"orientation\"> {}\n\nexport function ListBox<T extends object>({ children, ...props }: ListBoxProps<T>) {\n return (\n <AriaListBox {...props} className={composeTailwindRenderProps(props.className, \"outline-0\")}>\n {children}\n </AriaListBox>\n );\n}\n\nexport function getItemStyles({\n isSelected,\n isDisabled,\n size,\n}: {\n isSelected?: boolean;\n isDisabled?: boolean;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n let styles = `${focusRing} group relative flex items-center gap-8 cursor-default select-none py-2 px-3 will-change-transform text-sm forced-color-adjust-none`;\n\n if (isSelected) {\n styles +=\n \" bg-background-input text-text-body forced-colors:bg-[Highlight] forced-colors:text-[HighlightText] -outline-offset-4 outline-white dark:outline-white forced-colors:outline-[HighlightText]\";\n } else {\n styles += \" dark:text-zinc-300 hover:bg-background-hover dark:hover:bg-zinc-700 -outline-offset-2\";\n }\n\n if (isDisabled) {\n styles += \" text-slate-300 dark:text-zinc-600 forced-colors:text-[GrayText]\";\n }\n\n if (size === \"sm\") {\n styles += \" py-1 text-xs\";\n }\n\n return styles;\n}\n\n/**\n * ListBoxItem with Edges styling.\n */\nexport function ListBoxItem(props: ListBoxItemProps) {\n const textValue = props.textValue || (typeof props.children === \"string\" ? props.children : undefined);\n\n return (\n <AriaListBoxItem {...props} textValue={textValue} className={(props) => getItemStyles(props)}>\n {composeRenderProps(props.children, (children) => (\n <>\n {children}\n <div className=\"absolute bottom-0 left-4 right-4 hidden h-px bg-white/20 forced-colors:bg-[HighlightText] [.group[data-selected]:has(+[data-selected])_&]:block\" />\n </>\n ))}\n </AriaListBoxItem>\n );\n}\n\nexport function getDropdownItemStyles({\n isDisabled,\n isFocused,\n isOpen,\n isSelected,\n}: {\n isDisabled?: boolean;\n isFocused?: boolean;\n isOpen?: boolean;\n isSelected?: boolean;\n}) {\n let styles =\n \"group flex items-center gap-4 cursor-default select-none py-2 pl-3 pr-1 outline-none text-sm forced-color-adjust-none hover:bg-background-hover dark:hover:bg-background-hover\";\n\n if (isDisabled) {\n styles += \" text-gray-300 dark:text-zinc-600 forced-colors:text-[GrayText]\";\n } else {\n styles += \" text-text-body dark:text-zinc-100\";\n }\n\n if (isFocused) {\n styles += \" bg-background-hover forced-colors:bg-[Highlight] forced-colors:text-[HighlightText]\";\n }\n\n if (isSelected) {\n styles += \" bg-background-selected font-medium forced-colors:bg-[Highlight] forced-colors:text-[HighlightText]\";\n }\n\n if (!isFocused && !isSelected && isOpen) {\n styles += \" bg-background-input\";\n }\n\n return styles;\n}\n\n/**\n * DropdownItem with selection checkmark and hover states.\n */\nexport function DropdownItem(props: ListBoxItemProps) {\n const textValue = props.textValue || (typeof props.children === \"string\" ? props.children : undefined);\n return (\n <AriaListBoxItem {...props} textValue={textValue} className={(props) => getDropdownItemStyles({ ...props })}>\n {composeRenderProps(props.children, (children, { isSelected }) => (\n <>\n <span className=\"flex flex-1 items-center gap-2 truncate font-normal group-selected:font-semibold\">\n {children}\n </span>\n <span className=\"flex w-5 items-center\">{isSelected && <Check className=\"h-4 w-4\" />}</span>\n </>\n ))}\n </AriaListBoxItem>\n );\n}\n\n/**\n * Section for grouping dropdown items.\n */\nexport interface DropdownSectionProps<T> extends SectionProps<T> {\n title?: string;\n}\n\nexport function DropdownSection<T extends object>(props: DropdownSectionProps<T>) {\n return (\n <Section className=\"after:block after:h-[5px] after:content-[''] first:-mt-[5px]\">\n <Header className=\"sticky -top-[5px] z-10 -mx-1 -mt-px truncate border-y bg-gray-100/60 px-4 py-1 text-sm font-semibold text-text-caption backdrop-blur-md supports-[-moz-appearance:none]:bg-gray-100 dark:border-y-zinc-700 dark:bg-zinc-700/60 dark:text-zinc-300 [&+*]:mt-1\">\n {props.title}\n </Header>\n <Collection items={props.items}>{props.children}</Collection>\n </Section>\n );\n}\n","import { twMerge } from \"tailwind-merge\";\n\nexport interface LoaderProps {\n /**\n * Optional className for custom styling\n */\n className?: string;\n /**\n * Size of the loader in pixels\n * @default 24\n */\n size?: number;\n /**\n * Color of the loader\n * @default \"text-action-primary\"\n */\n color?: string;\n}\n\nexport const Loader = ({ className, size = 24, color = \"text-action-primary\" }: LoaderProps) => {\n return (\n <div\n className={twMerge(\n \"inline-block animate-spin rounded-full border-2 border-solid border-current border-r-transparent\",\n color,\n className,\n )}\n style={{\n width: size,\n height: size,\n }}\n role=\"status\"\n aria-label=\"loading\"\n >\n <span className=\"sr-only\">Loading...</span>\n </div>\n );\n};\n","export interface LogoProps {\n className?: string;\n showWordmark?: boolean;\n}\n\nexport const Logo = ({ className, showWordmark = true }: LogoProps) => {\n // Use Tailwind fill classes for color, default to fill-[#333333] if no className\n const fillClass = className ? className : \"fill-[#333333]\";\n\n if (showWordmark) {\n return (\n <svg width=\"270\" height=\"80\" viewBox=\"0 0 270 80\" xmlns=\"http://www.w3.org/2000/svg\" className={fillClass}>\n <g clipPath=\"url(#clip0_796_283)\">\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M0.223654 20.2934C0.417233 19.8234 0.873598 19.517 1.37984 19.517H20.5909C21.282 19.517 21.8422 20.0798 21.8422 20.774V40.049C21.8422 40.5572 21.5375 41.0155 21.0702 41.2102C20.6028 41.405 20.0647 41.2977 19.7067 40.9385L0.495628 21.6635C0.137428 21.3041 0.030075 20.7633 0.223654 20.2934ZM4.40349 22.0311L19.3396 37.017V22.0311H4.40349Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M38.6458 20.2934C38.8394 19.8234 39.2958 19.517 39.802 19.517H59.013C59.7041 19.517 60.2642 20.0798 60.2642 20.774V40.049C60.2642 40.5572 59.9597 41.0155 59.4923 41.2102C59.025 41.405 58.4867 41.2977 58.1289 40.9385L38.9178 21.6635C38.5595 21.3041 38.4522 20.7633 38.6458 20.2934ZM42.8255 22.0311L57.7618 37.017V22.0311H42.8255Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M19.4347 58.8447C19.6283 58.3747 20.0847 58.0685 20.5909 58.0685H39.802C40.493 58.0685 41.0532 58.6312 41.0532 59.3255V78.6005C41.0532 79.1087 40.7486 79.567 40.2813 79.7617C39.8139 79.9562 39.2757 79.849 38.9178 79.49L19.7067 60.215C19.3485 59.8555 19.2411 59.3147 19.4347 58.8447ZM23.6146 60.5825L38.5508 75.5682V60.5825H23.6146Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M39.3227 58.1643C39.79 57.9695 40.3283 58.0768 40.6861 58.436L59.8972 77.711C60.2555 78.0703 60.3628 78.6113 60.1692 79.081C59.9756 79.551 59.5192 79.8575 59.013 79.8575H39.802C39.1109 79.8575 38.5508 79.2948 38.5508 78.6005V59.3255C38.5508 58.8173 38.8554 58.359 39.3227 58.1643ZM41.0532 62.3575V77.3433H55.9893L41.0532 62.3575Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M39.3227 19.6129C39.79 19.4182 40.3283 19.5254 40.6861 19.8846L59.8972 39.1595C60.2555 39.519 60.3628 40.0598 60.1692 40.5298C59.9756 40.9995 59.5192 41.306 59.013 41.306H39.802C39.1109 41.306 38.5508 40.7433 38.5508 40.049V20.7741C38.5508 20.2658 38.8554 19.8075 39.3227 19.6129ZM41.0532 23.8061V38.792H55.9893L41.0532 23.8061Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M39.3227 38.8885C39.79 38.694 40.3283 38.8012 40.6861 39.1602L59.8972 58.4352C60.2555 58.7945 60.3628 59.3355 60.1692 59.8055C59.9756 60.2752 59.5192 60.5817 59.013 60.5817H39.802C39.1109 60.5817 38.5508 60.019 38.5508 59.3247V40.0497C38.5508 39.5415 38.8554 39.0832 39.3227 38.8885ZM41.0532 43.0817V58.0675H55.9893L41.0532 43.0817Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M38.6458 39.569C38.8394 39.0992 39.2958 38.7927 39.802 38.7927H59.013C59.7041 38.7927 60.2642 39.3555 60.2642 40.0497V59.3247C60.2642 59.833 59.9597 60.2912 59.4923 60.486C59.025 60.6805 58.4867 60.5732 58.1289 60.2142L38.9178 40.9392C38.5595 40.5797 38.4522 40.039 38.6458 39.569ZM42.8255 41.3067L57.7618 56.2927V41.3067H42.8255Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M38.6458 58.8447C38.8394 58.3747 39.2958 58.0685 39.802 58.0685H59.013C59.7041 58.0685 60.2642 58.6312 60.2642 59.3255V78.6005C60.2642 79.1087 59.9597 79.567 59.4923 79.7617C59.025 79.9562 58.4867 79.849 58.1289 79.49L38.9178 60.215C38.5595 59.8555 38.4522 59.3147 38.6458 58.8447ZM42.8255 60.5825L57.7618 75.5682V60.5825H42.8255Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M58.5338 19.6129C59.0011 19.4182 59.5394 19.5254 59.8972 19.8846L79.1083 39.1595C79.4666 39.519 79.5739 40.0598 79.3803 40.5298C79.1867 40.9995 78.7303 41.306 78.2241 41.306H59.013C58.322 41.306 57.7618 40.7433 57.7618 40.049V20.7741C57.7618 20.2658 58.0664 19.8075 58.5338 19.6129ZM60.2643 23.8061V38.792H75.2006L60.2643 23.8061Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M58.5338 0.338803C59.0011 0.144135 59.5394 0.251385 59.8972 0.610565L79.1083 19.8855C79.4666 20.2449 79.5739 20.7857 79.3803 21.2556C79.1867 21.7256 78.7303 22.032 78.2241 22.032H59.013C58.322 22.032 57.7618 21.4692 57.7618 20.775V1.50003C57.7618 0.99174 58.0664 0.533468 58.5338 0.338803ZM60.2643 4.53208V19.5179H75.2006L60.2643 4.53208Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M57.8569 20.2934C58.0505 19.8234 58.5069 19.517 59.013 19.517H78.2241C78.9151 19.517 79.4753 20.0798 79.4753 20.774V40.049C79.4753 40.5572 79.1707 41.0155 78.7034 41.2102C78.236 41.405 77.6978 41.2977 77.3399 40.9385L58.1289 21.6635C57.7705 21.3041 57.6633 20.7633 57.8569 20.2934ZM62.0365 22.0311L76.9729 37.017V22.0311H62.0365Z\"\n />\n <path d=\"M269.838 49.4457H249.005C249.266 51.801 250.162 53.6985 251.695 55.1377C253.225 56.577 255.134 57.2967 257.416 57.2967C259.307 57.2967 260.887 56.8715 262.159 56.021C263.463 55.1377 264.408 53.9927 264.996 52.5862H269.251C268.502 54.9415 267.084 56.937 264.996 58.5725C262.943 60.208 260.414 61.026 257.416 61.026C255.069 61.026 252.917 60.4697 250.961 59.3575C249.037 58.2127 247.504 56.6587 246.363 54.696C245.255 52.7332 244.7 50.558 244.7 48.17C244.7 45.782 245.255 43.6067 246.363 41.644C247.504 39.6812 249.037 38.1437 250.961 37.0315C252.917 35.8867 255.069 35.3142 257.416 35.3142C259.73 35.3142 261.833 35.8702 263.724 36.9825C265.615 38.0947 267.098 39.6485 268.176 41.644C269.283 43.6395 269.838 45.913 269.838 48.4645V49.4457ZM257.416 39.0432C255.263 39.0432 253.439 39.6812 251.939 40.957C250.47 42.2327 249.542 43.9337 249.152 46.06H265.583C265.192 43.9992 264.262 42.3145 262.796 41.006C261.36 39.6975 259.568 39.0432 257.416 39.0432Z\" />\n <path d=\"M228.356 60.5352V35.8049H232.219V39.7794H232.464C233.05 38.5689 233.963 37.5712 235.202 36.7862C236.474 35.9684 237.974 35.5594 239.701 35.5594H243.125V39.4359H239.701C237.517 39.4359 235.757 40.1554 234.42 41.5949C233.083 43.0342 232.414 44.9152 232.414 47.2377V60.5352H228.356Z\" />\n <path d=\"M208.607 61.0259C205.64 61.0259 203.326 60.1262 201.663 58.3272C200 56.4952 199.169 53.8947 199.169 50.5252V35.8047H203.228V49.8874C203.228 52.2427 203.766 54.0744 204.842 55.3829C205.95 56.6587 207.532 57.2967 209.586 57.2967C211.02 57.2967 212.308 56.9694 213.449 56.3152C214.623 55.6284 215.536 54.6959 216.188 53.5184C216.84 52.3407 217.166 50.9997 217.166 49.4949V35.8047H221.225V60.5352H217.313V56.5607H217.068C216.286 57.9019 215.161 58.9814 213.694 59.7992C212.226 60.6169 210.531 61.0259 208.607 61.0259Z\" />\n <path d=\"M186.736 39.534V56.806H194.756V60.5352H182.677V39.534H177.199V35.8047H182.677V29.5732H186.736V35.8047H193.24V39.534H186.736Z\" />\n <path d=\"M156.585 60.5352H151.988L158.394 48.0227L152.33 35.8047H156.976L162.062 46.0599H165.388L170.474 35.8047H175.022L168.958 48.0227L175.365 60.5352H170.67L165.29 49.7892H162.013L156.585 60.5352Z\" />\n <path d=\"M150.138 49.1315H129.304C129.565 51.4867 130.461 53.3842 131.994 54.8235C133.526 56.2627 135.433 56.9825 137.715 56.9825C139.606 56.9825 141.188 56.5572 142.459 55.7067C143.763 54.8235 144.709 53.6785 145.296 52.272H149.551C148.801 54.6272 147.382 56.6227 145.296 58.2582C143.242 59.8937 140.715 60.7118 137.715 60.7118C135.368 60.7118 133.216 60.1555 131.26 59.0432C129.336 57.8985 127.804 56.3445 126.663 54.3817C125.554 52.419 125 50.2437 125 47.8557C125 45.4677 125.554 43.2925 126.663 41.3298C127.804 39.367 129.336 37.8295 131.26 36.7173C133.216 35.5725 135.368 35 137.715 35C140.03 35 142.133 35.556 144.024 36.6682C145.915 37.7805 147.399 39.3342 148.475 41.3298C149.583 43.3252 150.138 45.5987 150.138 48.1502V49.1315ZM137.715 38.729C135.564 38.729 133.738 39.367 132.238 40.6427C130.771 41.9185 129.842 43.6195 129.45 45.7458H145.883C145.491 43.685 144.562 42.0002 143.095 40.6917C141.661 39.3832 139.867 38.729 137.715 38.729Z\" />\n <path d=\"M116.961 60.5353H112.559V30.4072H101.164V26.1875H128.307V30.4072H116.961V60.5353Z\" />\n </g>\n <defs>\n <clipPath id=\"clip0_796_283\">\n <rect width=\"270\" height=\"80\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n }\n // Logo only\n return (\n <svg width=\"80\" height=\"80\" viewBox=\"0 0 80 80\" xmlns=\"http://www.w3.org/2000/svg\" className={fillClass}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M0.223654 20.2934C0.417233 19.8234 0.873598 19.517 1.37984 19.517H20.5909C21.282 19.517 21.8422 20.0798 21.8422 20.774V40.049C21.8422 40.5572 21.5375 41.0155 21.0702 41.2102C20.6028 41.405 20.0647 41.2977 19.7067 40.9385L0.495628 21.6635C0.137428 21.3041 0.030075 20.7633 0.223654 20.2934ZM4.40349 22.0311L19.3396 37.017V22.0311H4.40349Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M38.6458 20.2934C38.8394 19.8234 39.2958 19.517 39.802 19.517H59.013C59.7041 19.517 60.2642 20.0798 60.2642 20.774V40.049C60.2642 40.5572 59.9597 41.0155 59.4923 41.2102C59.025 41.405 58.4867 41.2977 58.1289 40.9385L38.9178 21.6635C38.5595 21.3041 38.4522 20.7633 38.6458 20.2934ZM42.8255 22.0311L57.7618 37.017V22.0311H42.8255Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M19.4347 58.8447C19.6283 58.3747 20.0847 58.0685 20.5909 58.0685H39.802C40.493 58.0685 41.0532 58.6312 41.0532 59.3255V78.6005C41.0532 79.1087 40.7486 79.567 40.2813 79.7617C39.8139 79.9562 39.2757 79.849 38.9178 79.49L19.7067 60.215C19.3485 59.8555 19.2411 59.3147 19.4347 58.8447ZM23.6146 60.5825L38.5508 75.5682V60.5825H23.6146Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M39.3227 58.1643C39.79 57.9695 40.3283 58.0768 40.6861 58.436L59.8972 77.711C60.2555 78.0703 60.3628 78.6113 60.1692 79.081C59.9756 79.551 59.5192 79.8575 59.013 79.8575H39.802C39.1109 79.8575 38.5508 79.2948 38.5508 78.6005V59.3255C38.5508 58.8173 38.8554 58.359 39.3227 58.1643ZM41.0532 62.3575V77.3433H55.9893L41.0532 62.3575Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M39.3227 19.6129C39.79 19.4182 40.3283 19.5254 40.6861 19.8846L59.8972 39.1595C60.2555 39.519 60.3628 40.0598 60.1692 40.5298C59.9756 40.9995 59.5192 41.306 59.013 41.306H39.802C39.1109 41.306 38.5508 40.7433 38.5508 40.049V20.7741C38.5508 20.2658 38.8554 19.8075 39.3227 19.6129ZM41.0532 23.8061V38.792H55.9893L41.0532 23.8061Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M39.3227 38.8885C39.79 38.694 40.3283 38.8012 40.6861 39.1602L59.8972 58.4352C60.2555 58.7945 60.3628 59.3355 60.1692 59.8055C59.9756 60.2752 59.5192 60.5817 59.013 60.5817H39.802C39.1109 60.5817 38.5508 60.019 38.5508 59.3247V40.0497C38.5508 39.5415 38.8554 39.0832 39.3227 38.8885ZM41.0532 43.0817V58.0675H55.9893L41.0532 43.0817Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M38.6458 39.569C38.8394 39.0992 39.2958 38.7927 39.802 38.7927H59.013C59.7041 38.7927 60.2642 39.3555 60.2642 40.0497V59.3247C60.2642 59.833 59.9597 60.2912 59.4923 60.486C59.025 60.6805 58.4867 60.5732 58.1289 60.2142L38.9178 40.9392C38.5595 40.5797 38.4522 40.039 38.6458 39.569ZM42.8255 41.3067L57.7618 56.2927V41.3067H42.8255Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M38.6458 58.8447C38.8394 58.3747 39.2958 58.0685 39.802 58.0685H59.013C59.7041 58.0685 60.2642 58.6312 60.2642 59.3255V78.6005C60.2642 79.1087 59.9597 79.567 59.4923 79.7617C59.025 79.9562 58.4867 79.849 58.1289 79.49L38.9178 60.215C38.5595 59.8555 38.4522 59.3147 38.6458 58.8447ZM42.8255 60.5825L57.7618 75.5682V60.5825H42.8255Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M58.5338 19.6129C59.0011 19.4182 59.5394 19.5254 59.8972 19.8846L79.1083 39.1595C79.4666 39.519 79.5739 40.0598 79.3803 40.5298C79.1867 40.9995 78.7303 41.306 78.2241 41.306H59.013C58.322 41.306 57.7618 40.7433 57.7618 40.049V20.7741C57.7618 20.2658 58.0664 19.8075 58.5338 19.6129ZM60.2643 23.8061V38.792H75.2006L60.2643 23.8061Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M58.5338 0.338803C59.0011 0.144135 59.5394 0.251385 59.8972 0.610565L79.1083 19.8855C79.4666 20.2449 79.5739 20.7857 79.3803 21.2556C79.1867 21.7256 78.7303 22.032 78.2241 22.032H59.013C58.322 22.032 57.7618 21.4692 57.7618 20.775V1.50003C57.7618 0.99174 58.0664 0.533468 58.5338 0.338803ZM60.2643 4.53208V19.5179H75.2006L60.2643 4.53208Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M57.8569 20.2934C58.0505 19.8234 58.5069 19.517 59.013 19.517H78.2241C78.9151 19.517 79.4753 20.0798 79.4753 20.774V40.049C79.4753 40.5572 79.1707 41.0155 78.7034 41.2102C78.236 41.405 77.6978 41.2977 77.3399 40.9385L58.1289 21.6635C57.7705 21.3041 57.6633 20.7633 57.8569 20.2934ZM62.0365 22.0311L76.9729 37.017V22.0311H62.0365Z\"\n />\n </svg>\n );\n};\n","import {\n NumberField as AriaNumberField,\n NumberFieldProps as AriaNumberFieldProps,\n Button as AriaButton,\n ValidationResult,\n Group,\n Input as AriaInput,\n} from \"react-aria-components\";\nimport { Description, FieldError, Label, getInputStateStyles, BaseInputProps } from \"../Field\";\nimport { composeTailwindRenderProps } from \"../../utils\";\nimport { twMerge } from \"tailwind-merge\";\nimport type { Size } from \"../../utils/controlStyles\";\nimport { useId } from \"react\";\nimport { Icon } from \"../Icon\";\n\nconst getNumberFieldStyles = (props: {\n isInvalid?: boolean;\n isDisabled?: boolean;\n isFocused?: boolean;\n transparent?: boolean;\n size?: Size;\n className?: string;\n}): string => {\n return twMerge(\n getInputStateStyles({\n isInvalid: props.isInvalid,\n isDisabled: props.isDisabled,\n isFocused: props.isFocused,\n }),\n props.transparent ? \"bg-transparent\" : \"bg-background-input\",\n \"pr-9\", // Space for stepper buttons\n \"[appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none\", // Hide native spinners\n props.className,\n );\n};\n\n/**\n * NumberField\n *\n * Numeric input with stepper controls and validation.\n */\nexport interface NumberFieldProps extends Omit<AriaNumberFieldProps, \"size\" | \"className\">, BaseInputProps {\n value?: number;\n defaultValue?: number;\n onChange?: (value: number) => void;\n minValue?: number;\n maxValue?: number;\n step?: number;\n formatOptions?: Intl.NumberFormatOptions;\n id?: string;\n label?: string;\n description?: string;\n errorMessage?: string | ((validation: ValidationResult) => string);\n tooltip?: string;\n isRequired?: boolean;\n className?: string;\n validationResult?: ValidationResult;\n}\n\nexport function NumberField({\n label,\n description,\n errorMessage,\n size,\n tooltip,\n isRequired,\n transparent,\n validationResult,\n ...props\n}: NumberFieldProps) {\n const id = useId();\n\n return (\n <AriaNumberField\n {...props}\n id={id}\n isRequired={isRequired}\n className={composeTailwindRenderProps(props.className, \"group flex flex-col gap-1\")}\n step={props.step ?? 1}\n onChange={(value) => {\n if (typeof value === \"number\") {\n if (props.maxValue != null && value > props.maxValue) {\n props.onChange?.(props.maxValue);\n } else if (props.minValue != null && value < props.minValue) {\n props.onChange?.(props.minValue);\n } else {\n props.onChange?.(value);\n }\n }\n }}\n isInvalid={\n !!errorMessage ||\n (typeof props.value === \"number\" &&\n ((props.maxValue != null && props.value > props.maxValue) ||\n (props.minValue != null && props.value < props.minValue)))\n }\n >\n {({ isDisabled, isInvalid }) => {\n const isValueInvalid = isInvalid || !!errorMessage;\n return (\n <div className=\"flex flex-col\">\n {label && (\n <Label size={size} tooltip={tooltip} isRequired={isRequired} htmlFor={id}>\n {label}\n </Label>\n )}\n <div className=\"relative\">\n <Group className=\"relative\">\n <AriaInput\n className={getNumberFieldStyles({\n isInvalid: isValueInvalid,\n isDisabled,\n transparent,\n size,\n className: typeof props.className === \"string\" ? props.className : undefined,\n })}\n />\n <div className=\"absolute inset-y-[1px] right-[1px] flex flex-col divide-y border-l overflow-hidden rounded-r-[calc(var(--control-border-radius)-1px)]\">\n <AriaButton\n slot=\"increment\"\n isDisabled={isDisabled}\n className=\"flex h-1/2 w-7 items-center justify-center bg-background-input hover:bg-background-input-hover active:bg-background-input-active disabled:cursor-not-allowed disabled:opacity-50\"\n >\n <Icon name=\"CaretUp\" size={14} />\n </AriaButton>\n <AriaButton\n slot=\"decrement\"\n isDisabled={isDisabled}\n className=\"flex h-1/2 w-7 items-center justify-center bg-background-input hover:bg-background-input-hover active:bg-background-input-active disabled:cursor-not-allowed disabled:opacity-50\"\n >\n <Icon name=\"CaretDown\" size={14} />\n </AriaButton>\n </div>\n </Group>\n </div>\n {description && (\n <Description size={size} className=\"mt-3\">\n {description}\n </Description>\n )}\n {errorMessage && (\n <FieldError size={size} className=\"mt-3\">\n {typeof errorMessage === \"function\" ? errorMessage(validationResult!) : errorMessage}\n </FieldError>\n )}\n </div>\n );\n }}\n </AriaNumberField>\n );\n}\n","import { useRef } from \"react\";\nimport { type Key, type ValidationResult } from \"react-aria-components\";\n\nimport { Autocomplete } from \"../Autocomplete/Autocomplete\";\nimport { Icon } from \"../Icon/Icon\";\n\nexport interface Place {\n id: string;\n place_name: string;\n place_type: string[];\n center: [number, number];\n}\n\ninterface MapboxResponse {\n features: Place[];\n type: string;\n}\n\n// Type guard to validate MapboxResponse shape\nfunction isMapboxResponse(data: unknown): data is MapboxResponse {\n return (\n typeof data === \"object\" &&\n data !== null &&\n \"features\" in data &&\n Array.isArray(data.features) &&\n \"type\" in data &&\n typeof data.type === \"string\"\n );\n}\n\ntype SearchType = \"country\" | \"region\" | \"district\" | \"place\" | \"locality\" | \"neighborhood\" | \"address\" | \"street\";\n\n/**\n * PlaceSearch\n *\n * Location search component with autocomplete; emits a `Place` value on\n * selection.\n */\nexport interface PlaceSearchProps {\n label?: string;\n selectedKey?: Key | null;\n defaultSelectedKey?: Key | null;\n onSelectionChange?: (key: Key | null) => void;\n placeholder?: string;\n errorMessage?: string | ((validation: ValidationResult) => string);\n description?: string;\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n tooltip?: string;\n isRequired?: boolean;\n isDisabled?: boolean;\n showErrors?: boolean;\n autoFocus?: boolean;\n onSelect: (place: Place) => void;\n searchTypes?: SearchType[];\n defaultFilter?: (textValue: string, inputValue: string) => boolean;\n validationResult?: ValidationResult;\n countryRestrictions?: string[]; // Array of ISO 3166-1 alpha-2 country codes\n proximity?: \"ip\" | [number, number]; // Either \"ip\" for IP-based location or [longitude, latitude] coordinates\n}\n\nconst MAPBOX_TOKEN = process.env.NEXT_PUBLIC_MAPBOX_ACCESS_TOKEN || \"\";\n\nexport function PlaceSearch({\n label = \"Search for a place\",\n selectedKey,\n defaultSelectedKey,\n onSelectionChange,\n placeholder = \"Enter a location...\",\n errorMessage,\n description,\n size = \"md\",\n tooltip,\n isRequired,\n isDisabled,\n showErrors = true,\n autoFocus = false,\n onSelect,\n searchTypes = [\"place\", \"address\"],\n defaultFilter,\n validationResult,\n countryRestrictions,\n proximity = \"ip\", // Set IP-based location as default\n}: PlaceSearchProps) {\n // Use a WeakMap to store additional data for each item\n const itemDataRef = useRef(new WeakMap<{ id: string; name: string }, { type: string; center: [number, number] }>());\n\n // Store the last loaded items for use in selection\n const loadedItemsRef = useRef<{ id: string; name: string }[]>([]);\n\n const requestConfig = {\n requestType: \"REST\" as const,\n method: \"GET\" as const,\n url: \"https://api.mapbox.com/geocoding/v5/mapbox.places/{q}.json\",\n extraParams: {\n access_token: MAPBOX_TOKEN,\n types: searchTypes.join(\",\"),\n limit: \"5\",\n ...(countryRestrictions?.length ? { country: countryRestrictions.join(\",\").toLowerCase() } : {}),\n ...(proximity\n ? {\n proximity: proximity === \"ip\" ? \"ip\" : proximity.join(\",\"),\n }\n : {}),\n },\n shouldLoad: (filterText: string) => {\n return filterText.length > 0;\n },\n transformResponse: (data: unknown) => {\n if (!isMapboxResponse(data)) return [];\n\n const items = data.features.map((feature) => {\n const item = {\n id: feature.id,\n name: feature.place_name,\n };\n // Store additional data in the WeakMap\n itemDataRef.current.set(item, {\n type: feature.place_type[0],\n center: feature.center,\n });\n return item;\n });\n\n // Store the items for later use\n if (items.length > 0) {\n loadedItemsRef.current = items;\n }\n\n return items;\n },\n };\n\n const renderItem = (item: { id: string; name: string }) => {\n const itemData = itemDataRef.current.get(item);\n\n // Split the place name into parts by commas for better formatting\n const nameParts = item.name.split(\", \");\n const primaryText = nameParts[0];\n const secondaryText = nameParts.slice(1).join(\", \");\n\n return (\n <div className=\"flex items-center gap-3 py-0.5\">\n <Icon\n name={\n itemData?.type === \"address\"\n ? \"MapPin\"\n : itemData?.type === \"place\"\n ? \"Buildings\"\n : itemData?.type === \"region\"\n ? \"MapPinArea\"\n : itemData?.type === \"country\"\n ? \"Flag\"\n : \"Circle\"\n }\n className=\"h-5 w-5 flex-shrink-0 text-text-muted\"\n />\n <div className=\"flex min-w-0 flex-col\">\n <span className=\"truncate font-medium text-text-body\">{primaryText}</span>\n {secondaryText && <span className=\"truncate text-sm text-text-muted\">{secondaryText}</span>}\n </div>\n </div>\n );\n };\n\n const renderLeftIcon = (isLoading: boolean) => {\n if (isLoading) {\n return <Icon name=\"CircleNotch\" className=\"h-4 w-4 animate-spin text-text-muted\" />;\n }\n return <Icon name=\"MagnifyingGlass\" className=\"h-4 w-4 text-text-muted\" />;\n };\n\n return (\n <Autocomplete\n data-testid=\"autocomplete\"\n data-config={JSON.stringify({\n types: searchTypes.join(\",\"),\n country: countryRestrictions?.join(\",\").toLowerCase(),\n proximity: proximity === \"ip\" ? \"ip\" : proximity?.join(\",\"),\n })}\n label={label}\n selectedKey={selectedKey}\n defaultSelectedKey={defaultSelectedKey}\n onSelectionChange={(key) => {\n onSelectionChange?.(key);\n if (key) {\n // Use the stored items instead of creating an empty array\n const items = loadedItemsRef.current;\n const selected = items.find((item) => item.id === key);\n\n if (selected) {\n const itemData = itemDataRef.current.get(selected);\n\n if (itemData) {\n onSelect({\n id: selected.id,\n place_name: selected.name,\n place_type: [itemData.type],\n center: itemData.center,\n });\n }\n }\n }\n }}\n requestConfig={requestConfig}\n placeholder={placeholder}\n errorMessage={errorMessage}\n description={description}\n size={size}\n tooltip={tooltip}\n isRequired={isRequired}\n isDisabled={isDisabled}\n showErrors={showErrors}\n autoFocus={autoFocus}\n renderItem={renderItem}\n renderLeftIcon={renderLeftIcon}\n defaultFilter={defaultFilter}\n validationResult={validationResult}\n />\n );\n}\n","import { ProgressBar as AriaProgressBar, ProgressBarProps as AriaProgressBarProps } from \"react-aria-components\";\nimport { composeTailwindRenderProps } from \"../../utils\";\n\n/**\n * ProgressBar\n *\n * Linear progress indicator with optional labels.\n */\nexport interface ProgressBarProps extends AriaProgressBarProps {\n label?: string;\n rightLabel?: string;\n progressWidth?: number;\n hideLabels?: boolean;\n}\n\nexport function ProgressBar({ label, rightLabel, progressWidth = 64, hideLabels = false, ...props }: ProgressBarProps) {\n return (\n <AriaProgressBar {...props} className={composeTailwindRenderProps(props.className, \"flex flex-col gap-1\")}>\n {({ percentage, valueText, isIndeterminate }) => (\n <>\n {!hideLabels && (\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"text-sm text-text-heading\">{label}</span>\n <span className=\"text-sm text-text-heading\">{rightLabel || valueText}</span>\n </div>\n )}\n <div\n className={`relative h-2 w-${progressWidth} overflow-hidden rounded-full bg-background-muted outline-none`}\n >\n <div\n className={`absolute top-0 h-full rounded-full bg-blue-600 dark:bg-blue-500 forced-colors:bg-[Highlight] ${isIndeterminate ? \"left-full duration-1000 ease-out animate-in slide-out-to-right-full repeat-infinite [--tw-enter-translate-x:calc(-16rem-100%)]\" : \"left-0\"}`}\n style={{ width: (isIndeterminate ? 40 : percentage) + \"%\" }}\n />\n </div>\n </>\n )}\n </AriaProgressBar>\n );\n}\n","\"use client\";\nimport React, { useState, useRef } from \"react\";\nimport {\n Select as AriaSelect,\n SelectProps as AriaSelectProps,\n ListBox,\n SelectValue,\n ValidationResult,\n Key,\n} from \"react-aria-components\";\nimport { Description, Label, FieldError, InputWrapper, getInputBaseStyles } from \"../Field\";\nimport { Button } from \"../Button\";\nimport { DropdownSection, DropdownSectionProps } from \"../ListBox\";\nimport { Popover } from \"../Popover\";\nimport { Icon } from \"../Icon\";\nimport { composeTailwindRenderProps } from \"../../utils\";\nimport { twMerge } from \"tailwind-merge\";\nimport { controlStyles, Size } from \"../../utils/controlStyles\";\n\n// Replace tv() with a regular function\ntype SelectVariants = {\n isDisabled?: boolean;\n size?: Size;\n isOpen?: boolean;\n isInvalid?: boolean;\n};\n\nfunction getSelectValueClassName(size: Size = \"md\") {\n // Use controlStyles for consistent text sizing\n return `flex-1 text-start data-[placeholder]:text-text-placeholder ${controlStyles[size].text}`;\n}\n\nexport type SelectVariantType = SelectVariants;\n\n// Define a custom hook for focus handling that works with any element\nfunction useElementFocus() {\n const handleFocus = React.useCallback(\n (e: React.FocusEvent<Element>, onFocus?: (e: React.FocusEvent<Element>) => void) => {\n onFocus?.(e);\n },\n [],\n );\n\n const handleBlur = React.useCallback(\n (e: React.FocusEvent<Element>, onBlur?: (e: React.FocusEvent<Element>) => void) => {\n onBlur?.(e);\n },\n [],\n );\n\n return { handleFocus, handleBlur };\n}\n\n/**\n * Interface defining the shape of items in the Select component\n */\nexport interface SelectItem<T = unknown> {\n /** Unique identifier for the item */\n id: string;\n /** Display label for the item */\n label: string;\n /** Value associated with the item */\n value: T;\n}\n\n/**\n * Props for the Select component\n * @template T - The type of the items, must extend SelectItem\n */\nexport interface SelectProps<T extends SelectItem> extends Omit<AriaSelectProps<T>, \"children\" | \"onSelectionChange\"> {\n /** Label text displayed above the select */\n label?: string;\n /** Helper text displayed below the select */\n description?: string;\n /** Error message or function to generate error message */\n errorMessage?: string | ((validation: ValidationResult) => React.ReactNode);\n /** Collection of items to display in the select */\n items?: Iterable<T>;\n /** Size variant of the select */\n size?: Size;\n /** Render function for items or static children */\n children: React.ReactNode | ((item: T) => React.ReactNode);\n /** Currently selected item's id. Uses the SelectItem's `id` field for stable selection tracking */\n selectedKey?: Key;\n /** Default selected item's id for uncontrolled usage */\n defaultSelectedKey?: Key;\n /** Callback when selection changes, provides the selected item's id */\n onSelectionChange?: (key: Key) => void;\n /** Whether to show error states */\n showErrors?: boolean;\n /** Tooltip text */\n tooltip?: string;\n /** Whether the field is required */\n isRequired?: boolean;\n /** Validation result object */\n validationResult?: ValidationResult;\n /** Whether to use transparent background */\n transparent?: boolean;\n}\n\nexport function Select<T extends SelectItem>({\n label,\n description,\n errorMessage,\n children,\n items,\n size = \"md\",\n selectedKey: controlledSelectedKey,\n defaultSelectedKey,\n onSelectionChange,\n placeholder,\n showErrors = false,\n tooltip,\n isRequired,\n transparent,\n ...props\n}: SelectProps<T>) {\n const [internalSelectedKey, setInternalSelectedKey] = useState<Key | null>(null);\n const selectedKey = controlledSelectedKey ?? internalSelectedKey ?? defaultSelectedKey;\n const { handleFocus, handleBlur } = useElementFocus();\n\n const handleSelectionChange = (key: Key) => {\n if (onSelectionChange) {\n onSelectionChange(key);\n } else {\n setInternalSelectedKey(key); // Update internal state if uncontrolled\n }\n };\n\n const selectRef = useRef<HTMLDivElement>(null);\n\n return (\n <AriaSelect\n {...props}\n selectedKey={selectedKey}\n defaultSelectedKey={defaultSelectedKey}\n onSelectionChange={handleSelectionChange}\n placeholder={placeholder}\n className={composeTailwindRenderProps(props.className, \"group flex w-full flex-col\")}\n ref={selectRef}\n onOpenChange={(isOpen) => {\n if (!isOpen) {\n selectRef.current?.blur();\n }\n }}\n >\n {({ isDisabled, isInvalid, isOpen }: { isDisabled: boolean; isInvalid: boolean; isOpen: boolean }) => (\n <div className=\"flex flex-col\">\n {label && (\n <Label size={size} tooltip={tooltip} isRequired={isRequired}>\n {label}\n </Label>\n )}\n <InputWrapper>\n <Button\n variant=\"unstyled\"\n className={twMerge(\n getInputBaseStyles({\n isInvalid: isInvalid || (showErrors && !!errorMessage),\n isDisabled,\n isFocused: isOpen,\n transparent,\n size,\n }),\n // Keep left padding consistent across sizes\n \"flex items-center text-start gap-4 cursor-pointer min-w-[200px] max-w-[400px] pl-[var(--control-padding-sm)]\",\n )}\n onFocus={(e) => handleFocus(e, props.onFocus)}\n onBlur={(e) => handleBlur(e, props.onBlur)}\n data-open={isOpen}\n >\n <SelectValue className={getSelectValueClassName(size)} />\n <Icon\n name=\"CaretDown\"\n aria-hidden\n className={twMerge(\n \"h-4 w-4 text-text-body group-disabled:text-gray-200 forced-colors:text-[ButtonText] transition-transform\",\n isOpen && \"rotate-180\",\n )}\n />\n </Button>\n </InputWrapper>\n {description && (\n <Description size={size} className=\"mt-3\">\n {description}\n </Description>\n )}\n {showErrors && (\n <FieldError size={size} className=\"mt-3 text-feedback-error-text\">\n {typeof errorMessage === \"function\" && props.validationResult\n ? errorMessage(props.validationResult)\n : typeof errorMessage === \"string\"\n ? errorMessage\n : null}\n </FieldError>\n )}\n <Popover className=\"min-w-[var(--trigger-width)] max-w-[400px] bg-background-input shadow-xl border border-border-input/20 backdrop-blur-sm\">\n <ListBox items={items} className=\"w-full max-h-[300px] overflow-auto bg-background-input p-0 outline-0\">\n {children}\n </ListBox>\n </Popover>\n </div>\n )}\n </AriaSelect>\n );\n}\n\nexport function SelectSection<T extends object>(props: DropdownSectionProps<T>) {\n return <DropdownSection {...props} />;\n}\n","import React from \"react\";\nimport { Switch as AriaSwitch, SwitchProps as AriaSwitchProps } from \"react-aria-components\";\nimport { composeTailwindRenderProps, focusRing } from \"../../utils\";\n\nexport interface SwitchProps extends Omit<AriaSwitchProps, \"children\"> {\n children: React.ReactNode;\n}\n\nfunction getTrackClassName({ isSelected, isDisabled }: { isSelected: boolean; isDisabled: boolean }) {\n const baseClasses =\n \"flex h-4 w-7 px-px items-center shrink-0 cursor-default rounded-full transition duration-200 ease-in-out shadow-inner border border-transparent\";\n const focusRingClasses = focusRing;\n\n const selectedClasses = isSelected\n ? \"bg-gray-700 dark:bg-zinc-300 forced-colors:!bg-[Highlight] group-pressed:bg-gray-800 dark:group-pressed:bg-zinc-200\"\n : \"bg-gray-400 dark:bg-zinc-400 group-pressed:bg-gray-500 dark:group-pressed:bg-zinc-300\";\n\n const disabledClasses = isDisabled\n ? \"bg-gray-200 dark:bg-zinc-700 forced-colors:group-selected:!bg-[GrayText] forced-colors:border-[GrayText]\"\n : \"\";\n\n return [baseClasses, focusRingClasses, selectedClasses, disabledClasses].filter(Boolean).join(\" \");\n}\n\nfunction getHandleClassName({ isSelected, isDisabled }: { isSelected: boolean; isDisabled: boolean }) {\n const baseClasses =\n \"h-3 w-3 transform rounded-full bg-white dark:bg-zinc-900 outline-none shadow transition duration-200 ease-in-out\";\n\n const selectedClasses = isSelected ? \"translate-x-[100%]\" : \"translate-x-0\";\n\n const disabledClasses = isDisabled ? \"forced-colors:outline-[GrayText]\" : \"\";\n\n return [baseClasses, selectedClasses, disabledClasses].filter(Boolean).join(\" \");\n}\n\nexport function Switch({ children, ...props }: SwitchProps) {\n return (\n <AriaSwitch\n {...props}\n className={composeTailwindRenderProps(\n props.className,\n \"group flex items-center gap-2 text-sm text-gray-800 transition disabled:text-gray-300 dark:text-zinc-200 dark:disabled:text-zinc-600 forced-colors:disabled:text-[GrayText]\",\n )}\n >\n {(renderProps) => (\n <>\n <div className={getTrackClassName(renderProps)}>\n <span className={getHandleClassName(renderProps)} />\n </div>\n {children}\n </>\n )}\n </AriaSwitch>\n );\n}\n","import {\n Tab as RACTab,\n TabList as RACTabList,\n TabPanel as RACTabPanel,\n Tabs as RACTabs,\n TabListProps,\n TabPanelProps,\n TabProps as RACTabProps,\n TabsProps,\n composeRenderProps,\n Key,\n} from \"react-aria-components\";\nimport { focusRing } from \"../../utils\";\n\nexport type { Key };\n\ntype TabProps = RACTabProps & {\n isSelected?: boolean;\n id?: string;\n};\n\nfunction getTabsStyles({\n orientation,\n className = \"\",\n}: {\n orientation: \"horizontal\" | \"vertical\";\n className?: string;\n}) {\n const baseStyles = \"flex flex-col w-full\";\n const orientationStyles = {\n horizontal: \"\",\n vertical: \"flex-row\",\n };\n\n return `${baseStyles} ${orientationStyles[orientation] || \"\"} ${className}`.trim();\n}\n\n/**\n * Tabs\n *\n * Tabbed interface with styled tabs and panels.\n */\nexport function Tabs(props: TabsProps) {\n return (\n <div className=\"w-full\">\n <RACTabs\n {...props}\n className={composeRenderProps(props.className, (className, renderProps) =>\n getTabsStyles({ ...renderProps, className }),\n )}\n />\n </div>\n );\n}\n\nfunction getTabListStyles({\n orientation,\n className = \"\",\n}: {\n orientation: \"horizontal\" | \"vertical\";\n className?: string;\n}) {\n const baseStyles =\n \"flex gap-10 relative after:absolute after:bottom-0 after:left-0 after:right-0 after:h-[2px] after:bg-border-default\";\n const orientationStyles = {\n horizontal: \"flex-row w-full\",\n vertical: \"flex-col items-start\",\n };\n\n return `${baseStyles} ${orientationStyles[orientation] || \"\"} ${className}`.trim();\n}\n\n/**\n * TabList container.\n */\nexport function TabList<T extends object>(props: TabListProps<T>) {\n return (\n <RACTabList\n {...props}\n className={composeRenderProps(props.className, (className, renderProps) =>\n getTabListStyles({\n ...renderProps,\n className: className || \"\",\n }),\n )}\n />\n );\n}\n\nfunction getTabStyles({\n isSelected,\n isDisabled,\n className = \"\",\n}: {\n isSelected: boolean;\n isDisabled: boolean;\n className?: string;\n}) {\n const baseStyles = \"flex items-center cursor-default px-1 py-2 font-medium transition hover:cursor-pointer relative\";\n const focusRingStyles = focusRing();\n\n let stateStyles = \"\";\n if (isDisabled) {\n stateStyles =\n \"text-gray-200 forced-colors:text-[GrayText] selected:text-gray-300 forced-colors:selected:text-[HighlightText] selected:bg-gray-200 forced-colors:selected:bg-[GrayText]\";\n } else if (isSelected) {\n stateStyles = \"text-action-primary border-b-2 border-action-primary z-10 forced-colors:bg-[Highlight]\";\n } else {\n stateStyles = \"text-text-muted hover:text-text-body\";\n }\n\n return `${baseStyles} ${focusRingStyles} ${stateStyles} ${className}`.trim();\n}\n\n/**\n * Tab trigger element.\n */\nexport function Tab(props: TabProps) {\n return (\n <RACTab\n {...props}\n data-testid={props.id ? `tab-${props.id}` : undefined}\n className={composeRenderProps(props.className, (className, renderProps) =>\n getTabStyles({\n ...renderProps,\n className,\n isSelected: renderProps.isSelected,\n }),\n )}\n />\n );\n}\n\nfunction getTabPanelStyles({ className = \"\" }: { className?: string }) {\n const baseStyles = \"block w-full mt-4 text-text-body\";\n const focusRingStyles = focusRing();\n\n return `${baseStyles} ${focusRingStyles} ${className}`.trim();\n}\n\n/**\n * TabPanel content area.\n */\nexport function TabPanel(props: TabPanelProps) {\n return (\n <RACTabPanel\n {...props}\n className={composeRenderProps(props.className, (className, renderProps) =>\n getTabPanelStyles({\n ...renderProps,\n className: className || \"\",\n }),\n )}\n />\n );\n}\n","import React from \"react\";\nimport type { ValidationResult } from \"react-aria-components\";\nimport {\n Description,\n FieldError,\n Label,\n getInputBaseStyles,\n BaseInputProps,\n useInputFocus,\n InputWrapper,\n} from \"../Field\";\nimport { twMerge } from \"tailwind-merge\";\nimport type { Size } from \"../../utils/controlStyles\";\n\nconst getTextAreaStyles = (props: {\n isInvalid?: boolean;\n isDisabled?: boolean;\n isFocused?: boolean;\n transparent?: boolean;\n size?: Size;\n className?: string;\n}): string => {\n // Get base input styles\n const baseStyles = getInputBaseStyles({\n isInvalid: props.isInvalid,\n isDisabled: props.isDisabled,\n isFocused: props.isFocused,\n transparent: props.transparent,\n size: props.size,\n });\n\n // Add TextArea-specific styles\n const textAreaStyles = \"min-h-[100px] resize-y py-2\";\n\n return twMerge(baseStyles, textAreaStyles, props.className);\n};\n\n/**\n * TextArea\n *\n * Multi-line text input with Edges styling, label, description, and error.\n */\nexport interface TextAreaProps extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, \"size\">, BaseInputProps {\n label?: string;\n description?: string;\n errorMessage?: string | ((validation: ValidationResult) => string);\n tooltip?: string;\n size?: Size;\n isInvalid?: boolean;\n validationResult?: ValidationResult;\n}\n\nexport function TextArea({\n label,\n description,\n errorMessage,\n size = \"md\",\n tooltip,\n required,\n transparent,\n isInvalid,\n className,\n validationResult,\n ...props\n}: TextAreaProps) {\n const { isFocused, handleFocus, handleBlur } = useInputFocus();\n\n return (\n <div className=\"group flex flex-col\">\n <div className=\"flex flex-col\">\n {label && (\n <Label size={size} tooltip={tooltip} isRequired={required}>\n {label}\n </Label>\n )}\n <InputWrapper>\n <textarea\n {...props}\n required={required}\n onFocus={(e) => {\n // Properly handle the textarea focus event\n if (props.onFocus) {\n props.onFocus(e);\n }\n handleFocus(e as unknown as React.FocusEvent<HTMLInputElement>);\n }}\n onBlur={(e) => {\n // Properly handle the textarea blur event\n if (props.onBlur) {\n props.onBlur(e);\n }\n handleBlur(e as unknown as React.FocusEvent<HTMLInputElement>);\n }}\n className={getTextAreaStyles({\n isInvalid,\n isDisabled: props.disabled,\n isFocused,\n size,\n transparent,\n className,\n })}\n />\n </InputWrapper>\n {description && (\n <Description size={size} className=\"mt-3\">\n {description}\n </Description>\n )}\n {typeof errorMessage === \"string\" && (\n <FieldError size={size} className=\"mt-1\">\n {errorMessage}\n </FieldError>\n )}\n {typeof errorMessage === \"function\" && validationResult && (\n <FieldError size={size} className=\"mt-1\">\n {errorMessage(validationResult)}\n </FieldError>\n )}\n </div>\n </div>\n );\n}\n","\"use client\";\nimport React from \"react\";\nimport type {\n TextFieldProps as AriaTextFieldProps,\n ValidationResult,\n TextFieldRenderProps,\n} from \"react-aria-components\";\nimport { TextField as AriaTextFieldComponent } from \"react-aria-components\";\nimport {\n Description,\n FieldError,\n Input,\n Label,\n getInputBaseStyles,\n BaseInputProps,\n useInputFocus,\n InputWrapper,\n ClearButton,\n} from \"../Field\";\nimport { composeTailwindRenderProps } from \"../../utils\";\nimport { Icon } from \"../Icon/Icon\";\nimport { twMerge } from \"tailwind-merge\";\nimport type { Size } from \"../../utils/controlStyles\";\n\nconst getTextFieldStyles = (props: {\n isInvalid?: boolean;\n isDisabled?: boolean;\n isFocused?: boolean;\n transparent?: boolean;\n size?: Size;\n showSearchIcon?: boolean;\n isClearable?: boolean;\n hasValue?: boolean;\n isPassword?: boolean;\n className?: string;\n}): string => {\n // Get base input styles\n const baseStyles = getInputBaseStyles({\n isInvalid: props.isInvalid,\n isDisabled: props.isDisabled,\n isFocused: props.isFocused,\n transparent: props.transparent,\n size: props.size,\n });\n\n // Add TextField-specific padding styles\n const paddingStyles = [\n props.showSearchIcon ? \"pl-8\" : \"pl-3\",\n (props.isClearable && props.hasValue) || props.isPassword ? \"pr-8\" : \"pr-3\",\n ].join(\" \");\n\n return twMerge(baseStyles, paddingStyles, props.className);\n};\n\n/**\n * TextField\n *\n * A controlled or uncontrolled text input with Edges styling, label,\n * description, error messaging, and optional affordances like a search icon,\n * clear button, and password visibility toggle. Wraps\n * `react-aria-components` TextField for accessible behavior.\n */\nexport interface TextFieldProps extends Omit<AriaTextFieldProps, \"isRequired\" | \"size\" | \"className\">, BaseInputProps {\n label?: string;\n description?: string;\n errorMessage?: string | ((validation: ValidationResult) => string);\n placeholder?: string;\n tooltip?: string;\n isRequired?: boolean;\n className?: string;\n validationResult?: ValidationResult;\n}\n\n/**\n * Renders an Edges TextField with label, description, validation states and\n * optional search/clear/password affordances.\n */\nexport function TextField({\n label,\n description,\n errorMessage,\n size = \"md\",\n tooltip,\n isRequired,\n transparent,\n showSearchIcon,\n isClearable,\n onClear,\n type,\n validationResult,\n ...props\n}: TextFieldProps) {\n const [showPassword, setShowPassword] = React.useState(false);\n const { isFocused, handleFocus, handleBlur } = useInputFocus();\n const isPassword = type === \"password\";\n\n return (\n <AriaTextFieldComponent\n {...props}\n isRequired={isRequired}\n className={composeTailwindRenderProps(props.className, \"group flex flex-col\")}\n >\n {({ isDisabled, isInvalid }: TextFieldRenderProps) => (\n <div className=\"flex flex-col\">\n {label && (\n <Label size={size} tooltip={tooltip} isRequired={isRequired}>\n {label}\n </Label>\n )}\n <InputWrapper>\n {showSearchIcon && (\n <div className=\"pointer-events-none absolute left-2 top-1/2 -translate-y-1/2 transform\">\n <Icon name=\"MagnifyingGlass\" className=\"h-4 w-4 text-text-muted\" />\n </div>\n )}\n <Input\n size={size}\n disabled={isDisabled}\n type={isPassword ? (showPassword ? \"text\" : \"password\") : type}\n value={props.value as string | undefined}\n defaultValue={props.defaultValue as string | undefined}\n placeholder={props.placeholder}\n onFocus={(e) => handleFocus(e, props.onFocus)}\n onBlur={(e) => handleBlur(e, props.onBlur)}\n onChange={(e) => props.onChange?.(e.target.value)}\n className={getTextFieldStyles({\n isInvalid,\n isDisabled,\n isFocused,\n size,\n transparent,\n showSearchIcon,\n isClearable,\n hasValue: !!props.value,\n isPassword,\n className: typeof props.className === \"string\" ? props.className : undefined,\n })}\n />\n {isClearable && props.value && !isDisabled && (\n <ClearButton\n onClick={() => {\n if (onClear) {\n onClear();\n } else if (props.onChange) {\n props.onChange(\"\");\n }\n }}\n size={size}\n />\n )}\n {isPassword && !isDisabled && (\n <button\n type=\"button\"\n onClick={() => setShowPassword(!showPassword)}\n className=\"absolute right-3 top-1/2 -translate-y-1/2 transform text-text-muted hover:text-text-body\"\n aria-label={showPassword ? \"Hide password\" : \"Show password\"}\n onMouseDown={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n <Icon\n name={showPassword ? \"EyeSlash\" : \"Eye\"}\n size={size === \"sm\" ? 16 : 20}\n className=\"text-text-body\"\n />\n </button>\n )}\n </InputWrapper>\n {description && (\n <Description size={size} className=\"mt-3\">\n {description}\n </Description>\n )}\n {typeof errorMessage === \"string\" && (\n <FieldError size={size} className=\"mt-1\">\n {errorMessage}\n </FieldError>\n )}\n {typeof errorMessage === \"function\" && validationResult && (\n <FieldError size={size} className=\"mt-1\">\n {errorMessage(validationResult)}\n </FieldError>\n )}\n </div>\n )}\n </AriaTextFieldComponent>\n );\n}\n","import { ReactNode } from \"react\";\n\nexport interface TextLinkProps {\n href?: string;\n children: ReactNode;\n className?: string;\n external?: boolean;\n title?: string;\n variant?: \"default\" | \"primary\" | \"muted\";\n onClick?: (e: React.MouseEvent<HTMLAnchorElement>) => void;\n asButton?: boolean;\n onPress?: () => void;\n showArrow?: boolean;\n}\n\nexport const TextLink = ({\n href,\n children,\n className = \"\",\n external = false,\n title,\n variant = \"default\",\n onClick,\n asButton = false,\n onPress,\n showArrow = false,\n}: TextLinkProps) => {\n const externalProps = external ? { target: \"_blank\", rel: \"noopener noreferrer\" } : {};\n\n const baseClasses = \"hover:underline hover:decoration-1 hover:underline-offset-4 cursor-pointer\";\n\n const variantClasses = {\n default: \"text-text-link-default hover:text-text-link-hover visited:text-text-link-default\",\n primary: \"text-action-primary hover:text-action-primary-hover visited:text-action-primary\",\n muted: \"text-text-muted hover:text-text-muted visited:text-text-muted\",\n };\n\n const combinedClasses = `${baseClasses} ${variantClasses[variant]} ${className}`;\n\n const content = (\n <>\n {children}\n {showArrow && <span>{\"\\u00A0\"}→</span>}\n </>\n );\n\n if (asButton) {\n return (\n <button type=\"button\" className={combinedClasses} onClick={onPress} title={title}>\n {content}\n </button>\n );\n }\n\n return (\n <a href={href || \"#\"} className={combinedClasses} {...externalProps} title={title} onClick={onClick}>\n {content}\n </a>\n );\n};\n\nexport default TextLink;\n","\"use client\";\nimport {\n Description,\n FieldError,\n Label,\n BaseInputProps,\n getInputBackgroundStyles,\n getInputStateStyles,\n useInputFocus,\n} from \"../Field\";\nimport { twMerge } from \"tailwind-merge\";\nimport type { Size } from \"../../utils/controlStyles\";\nimport { controlStyles } from \"../../utils/controlStyles\";\nimport {\n TimeField as AriaTimeField,\n TimeFieldProps as AriaTimeFieldProps,\n DateInput,\n DateSegment,\n TimeValue,\n ValidationResult,\n} from \"react-aria-components\";\nimport { useState, useRef, useEffect } from \"react\";\n\nconst getTimeFieldStyles = (props: {\n isInvalid?: boolean;\n isDisabled?: boolean;\n isFocused?: boolean;\n transparent?: boolean;\n size?: Size;\n className?: string;\n}): string => {\n return twMerge(\n \"w-full\",\n getInputStateStyles({ isInvalid: props.isInvalid, isDisabled: props.isDisabled, isFocused: props.isFocused }),\n getInputBackgroundStyles({ transparent: props.transparent, isDisabled: props.isDisabled }),\n controlStyles[props.size || \"md\"].text,\n controlStyles[props.size || \"md\"].height,\n controlStyles[props.size || \"md\"].padding,\n \"flex items-center gap-0.5\",\n props.className,\n );\n};\n\nconst getSegmentStyles = ({\n isPlaceholder,\n isDisabled,\n isFocused,\n size = \"md\",\n}: {\n isPlaceholder?: boolean;\n isDisabled?: boolean;\n isInvalid?: boolean;\n isFocused?: boolean;\n size?: Size;\n}) => {\n return twMerge(\n // Base styles\n \"outline-none rounded transition-colors box-content tabular-nums text-center\",\n // Text styles based on state\n isPlaceholder ? \"text-text-muted italic\" : \"text-text-body\",\n isDisabled ? \"text-text-disabled cursor-not-allowed\" : \"cursor-default\",\n // Size styles\n controlStyles[size].text,\n // Padding and spacing\n \"px-0.5 -my-0.5\",\n // Focus styles\n isFocused && \"!outline-[1.5px] !outline-[var(--control-focus-ring-color)] ![--tw-outline-style:solid]\",\n // Hover styles (only when not disabled and not focused)\n !isDisabled && !isFocused && \"hover:bg-text-body/[0.05]\",\n );\n};\n\n/**\n * TimeField\n *\n * Input segmented time with Edges styling and accessible behavior via\n * `react-aria-components`. Supports labels, descriptions and validation.\n */\nexport interface TimeFieldProps extends Omit<AriaTimeFieldProps<TimeValue>, \"size\" | \"className\">, BaseInputProps {\n label?: string;\n description?: string;\n errorMessage?: string | ((validation: ValidationResult) => string);\n placeholder?: string;\n tooltip?: string;\n isRequired?: boolean;\n className?: string;\n validationResult?: ValidationResult;\n}\n\n/**\n * Renders an Edges TimeField composed from segmented date parts.\n */\nexport function TimeField({\n label,\n description,\n errorMessage,\n size = \"md\",\n tooltip,\n isRequired,\n transparent,\n validationResult,\n ...props\n}: TimeFieldProps) {\n const { isFocused } = useInputFocus();\n const [focusedSegment, setFocusedSegment] = useState<string | null>(null);\n const inputRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const handleFocusIn = (e: FocusEvent) => {\n const target = e.target as HTMLElement;\n if (target.hasAttribute(\"data-type\")) {\n setFocusedSegment(target.getAttribute(\"data-type\"));\n }\n };\n\n const handleFocusOut = () => {\n setFocusedSegment(null);\n };\n\n const inputElement = inputRef.current;\n if (inputElement) {\n inputElement.addEventListener(\"focusin\", handleFocusIn);\n inputElement.addEventListener(\"focusout\", handleFocusOut);\n }\n\n return () => {\n if (inputElement) {\n inputElement.removeEventListener(\"focusin\", handleFocusIn);\n inputElement.removeEventListener(\"focusout\", handleFocusOut);\n }\n };\n }, []);\n\n return (\n <AriaTimeField {...props}>\n {({ isDisabled, isInvalid }) => (\n <>\n {label && (\n <Label isRequired={isRequired} tooltip={tooltip}>\n {label}\n </Label>\n )}\n <DateInput\n ref={inputRef}\n className={getTimeFieldStyles({ size, transparent, isDisabled, isInvalid, isFocused })}\n >\n {(segment) => (\n <DateSegment\n segment={segment}\n className={getSegmentStyles({\n isPlaceholder: segment.isPlaceholder,\n isDisabled: segment.isEditable,\n isFocused: focusedSegment === segment.type,\n size,\n })}\n />\n )}\n </DateInput>\n {description && <Description>{description}</Description>}\n {typeof errorMessage === \"string\" ? <FieldError>{errorMessage}</FieldError> : null}\n </>\n )}\n </AriaTimeField>\n );\n}\n","import React from \"react\";\nimport { ToggleButton as RACToggleButton } from \"react-aria-components\";\nimport { focusRing } from \"../../utils\";\nimport { twMerge } from \"tailwind-merge\";\nimport { Icon } from \"../Icon\";\nimport type { ComponentProps } from \"react\";\nimport { controlStyles, type Size } from \"../../utils/controlStyles\";\n\ntype IconName = ComponentProps<typeof Icon>[\"name\"];\n\nexport interface ToggleButtonProps {\n variant?: \"default\" | \"primary\";\n \n size?: Size;\n className?: string;\n children: React.ReactNode;\n onChange?: (isSelected: boolean) => void;\n onPress?: () => void;\n isSelected?: boolean;\n isDisabled?: boolean;\n borderRadius?: \"left\" | \"right\";\n borderRight?: boolean;\n borderLeft?: boolean;\n icon?: IconName;\n iconWeight?: \"thin\" | \"light\" | \"regular\" | \"bold\" | \"fill\" | \"duotone\";\n iconPosition?: \"left\" | \"right\";\n /** Value used for group selection state */\n value?: string;\n isLoading?: boolean;\n loadingText?: string;\n loadingIndicator?: React.ReactNode;\n badgeNumber?: number;\n badgeVariant?: \"primary\" | \"destructive\";\n badgePosition?: \"top-right\" | \"top-left\" | \"bottom-right\" | \"bottom-left\";\n}\n\nconst baseStyles =\n \"flex font-medium justify-center items-center gap-2 text-center transition whitespace-nowrap box-border\";\n\nconst variantStyles = {\n default: {\n selected:\n \"bg-text-body text-white hover:brightness-[var(--control-hover-opacity)] forced-colors:bg-[ButtonText] forced-colors:text-[ButtonFace] border-2 border-transparent\",\n unselected:\n \"bg-transparent text-text-body border-2 border-border-muted hover:bg-text-body/[0.05] forced-colors:border-[ButtonBorder] forced-colors:bg-[ButtonFace] forced-colors:text-[ButtonText]\",\n },\n primary: {\n selected:\n \"bg-action-primary text-white hover:brightness-[var(--control-hover-opacity)] forced-colors:bg-[ButtonText] forced-colors:text-[ButtonFace] border-2 border-transparent\",\n unselected:\n \"bg-transparent text-text-body border-2 border-border-muted hover:bg-text-body/[0.05] forced-colors:border-[ButtonBorder] forced-colors:bg-[ButtonFace] forced-colors:text-[ButtonText]\",\n },\n};\n\nconst disabledStyles = \"opacity-[--control-hover-opacity] cursor-not-allowed pointer-events-none grayscale\";\nconst enabledStyles = \"opacity-100 cursor-pointer\";\n\nconst badgePositionStyles = {\n \"top-right\": \"-right-2 -top-2\",\n \"top-left\": \"-left-2 -top-2\",\n \"bottom-right\": \"-right-2 -bottom-2\",\n \"bottom-left\": \"-left-2 -bottom-2\",\n} as const;\n\nconst badgeVariantStyles = {\n primary: \"bg-action-primary text-white\",\n destructive: \"bg-action-destructive text-white\",\n} as const;\n\nfunction getToggleButtonStyles(props: ToggleButtonProps) {\n const { variant = \"default\", size = \"md\", isDisabled, isSelected, borderRadius, borderRight, borderLeft } = props;\n\n let styles = `${baseStyles} ${isSelected ? variantStyles[variant].selected : variantStyles[variant].unselected}`;\n\n // Add size styles using control-specific variables\n styles += ` ${controlStyles[size].text} ${controlStyles[size].height} ${controlStyles[size].padding} ${controlStyles[size].gap}`;\n\n // Add state styles\n styles += ` ${isDisabled ? disabledStyles : enabledStyles}`;\n\n // Add border styles\n if (borderRadius === \"left\") styles += \" rounded-l-sm\";\n if (borderRadius === \"right\") styles += \" rounded-r-sm\";\n if (borderRight) styles += \" border-r\";\n if (borderLeft) styles += \" border-l\";\n\n // Add focus ring\n styles += ` ${focusRing()}`;\n\n return twMerge(styles);\n}\n\nexport function ToggleButton(props: ToggleButtonProps) {\n const {\n className,\n children,\n onPress,\n icon,\n iconPosition = \"left\",\n iconWeight,\n isLoading = false,\n loadingText,\n loadingIndicator,\n size = \"md\",\n badgeNumber,\n badgeVariant = \"primary\",\n badgePosition = \"top-right\",\n ...rest\n } = props;\n\n const iconElement = icon ? (\n <Icon name={icon} className={`icon-[--control-icon-size-${size}]`} weight={iconWeight} />\n ) : null;\n\n const renderChildren = () => {\n const content = (\n <>\n {iconPosition === \"left\" && iconElement}\n {children}\n {iconPosition === \"right\" && iconElement}\n </>\n );\n\n if (isLoading) {\n return (\n <div className=\"relative inline-flex items-center justify-center\">\n <div className=\"absolute inset-0 flex items-center justify-center\">\n {loadingIndicator || (\n <Icon\n name=\"CircleNotch\"\n className={`animate-spin icon-[--control-icon-size-${size}]`}\n aria-hidden=\"true\"\n />\n )}\n </div>\n <div className=\"invisible\" aria-hidden=\"true\">\n {content}\n </div>\n {loadingText && (\n <span className=\"sr-only\" role=\"status\" aria-live=\"polite\">\n {loadingText}\n </span>\n )}\n </div>\n );\n }\n\n return content;\n };\n\n const toggleButton = (\n <RACToggleButton\n onPress={onPress}\n {...rest}\n className={twMerge(getToggleButtonStyles(props), className)}\n aria-busy={isLoading}\n >\n {renderChildren()}\n </RACToggleButton>\n );\n\n if (badgeNumber && badgeNumber > 0) {\n return (\n <div className=\"relative\">\n {toggleButton}\n <span\n className={`absolute ${badgePositionStyles[badgePosition]} flex h-5 w-5 items-center justify-center rounded-full ${badgeVariantStyles[badgeVariant]} text-xs`}\n aria-label={`${badgeNumber} items`}\n >\n {badgeNumber}\n </span>\n </div>\n );\n }\n\n return toggleButton;\n}\n","\"use client\";\nimport React from \"react\";\nimport { twMerge } from \"tailwind-merge\";\nimport { Label, Description, FieldError } from \"../Field\";\nimport type { Size } from \"../../utils/controlStyles\";\nimport { composeTailwindRenderProps } from \"../../utils\";\n\nexport interface SliderProps {\n label?: string;\n description?: string;\n tooltip?: string;\n errorMessage?: string;\n size?: Size;\n className?: string;\n value?: number;\n defaultValue?: number;\n onChange?: (value: number) => void;\n min?: number;\n max?: number;\n step?: number;\n disabled?: boolean;\n /** Show the current numeric value to the right of the track */\n showValue?: boolean;\n}\n\nexport function Slider({\n label,\n description,\n tooltip,\n errorMessage,\n size = \"md\",\n className,\n value,\n defaultValue = 0,\n onChange,\n min = 0,\n max = 100,\n step = 1,\n disabled,\n showValue = true,\n}: SliderProps) {\n const isControlled = typeof value === \"number\";\n const [internalValue, setInternalValue] = React.useState<number>(defaultValue);\n const currentValue = isControlled ? (value as number) : internalValue;\n\n const clamped = Math.min(Math.max(currentValue, min), max);\n const range = Math.max(max - min, 0.00001);\n const percent = ((clamped - min) / range) * 100;\n\n return (\n <div className={composeTailwindRenderProps(className, \"group flex w-full flex-col gap-1\") as string}>\n {label && (\n <Label size={size} tooltip={tooltip} className=\"mb-1\">\n {label}\n </Label>\n )}\n\n <div className=\"flex items-center gap-3\">\n <div className=\"relative w-full select-none\">\n {/* Rail */}\n <div className=\"h-1.5 w-full rounded-full bg-background-muted\" />\n {/* Track fill */}\n <div\n className=\"pointer-events-none absolute left-0 top-1/2 h-1.5 -translate-y-1/2 rounded-full bg-action-primary\"\n style={{ width: `${percent}%` }}\n aria-hidden\n />\n {/* Range input overlay for interaction */}\n <input\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={currentValue}\n disabled={disabled}\n aria-invalid={!!errorMessage}\n onChange={(e) => {\n const next = Number(e.currentTarget.value);\n if (isControlled) {\n onChange?.(next);\n } else {\n setInternalValue(next);\n onChange?.(next);\n }\n }}\n className={twMerge(\n \"absolute inset-0 w-full cursor-pointer appearance-none bg-transparent outline-none\",\n // WebKit thumb styles\n \"[&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:h-4 [&::-webkit-slider-thumb]:w-4 [&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:bg-background-input [&::-webkit-slider-thumb]:border [&::-webkit-slider-thumb]:border-border-input\",\n \"hover:[&::-webkit-slider-thumb]:shadow-sm focus-visible:[&::-webkit-slider-thumb]:outline-2 focus-visible:[&::-webkit-slider-thumb]:outline-border-focus\",\n // Firefox\n \"[&::-moz-range-thumb]:h-4 [&::-moz-range-thumb]:w-4 [&::-moz-range-thumb]:rounded-full [&::-moz-range-thumb]:bg-background-input [&::-moz-range-thumb]:border [&::-moz-range-thumb]:border-border-input\",\n \"hover:[&::-moz-range-thumb]:shadow-sm focus-visible:[&::-moz-range-thumb]:outline-2 focus-visible:[&::-moz-range-thumb]:outline-border-focus\",\n disabled ? \"cursor-not-allowed opacity-60\" : undefined,\n )}\n />\n </div>\n {showValue && (\n <div className=\"min-w-10 text-right text-sm text-text-heading tabular-nums\">{Math.round(clamped)}</div>\n )}\n </div>\n\n {description && <Description className=\"mt-2 text-text-muted\">{description}</Description>}\n {errorMessage && <FieldError className=\"mt-1\">{errorMessage}</FieldError>}\n </div>\n );\n}\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport {\n Radio as RACRadio,\n RadioGroup as RACRadioGroup,\n RadioGroupProps as RACRadioGroupProps,\n RadioProps,\n ValidationResult,\n} from \"react-aria-components\";\nimport { Description, FieldError, Label } from \"../Field\";\nimport { composeTailwindRenderProps, focusRing } from \"../../utils\";\n\nexport interface RadioGroupProps extends Omit<RACRadioGroupProps, \"children\"> {\n /** Label for the radio group */\n label?: string;\n /** Children elements */\n children?: ReactNode;\n /** Optional description for the radio group */\n description?: string;\n /** Error message to display when validation fails */\n errorMessage?: string | ((validation: ValidationResult) => string);\n /** Validation result object for functional errorMessage */\n validationResult?: ValidationResult;\n}\n\nexport function RadioGroup(props: RadioGroupProps) {\n return (\n <RACRadioGroup {...props} className={composeTailwindRenderProps(props.className, \"group flex flex-col gap-2\")}>\n <Label>{props.label}</Label>\n <div className=\"flex gap-2 group-orientation-horizontal:gap-4 group-orientation-vertical:flex-col\">\n {props.children}\n </div>\n {props.description && <Description>{props.description}</Description>}\n <FieldError>\n {typeof props.errorMessage === \"function\" && props.validationResult\n ? props.errorMessage(props.validationResult)\n : typeof props.errorMessage === \"string\"\n ? props.errorMessage\n : null}\n </FieldError>\n </RACRadioGroup>\n );\n}\n\nfunction getRadioStyles({\n isSelected,\n isInvalid,\n isDisabled,\n}: {\n isSelected?: boolean;\n isInvalid?: boolean;\n isDisabled?: boolean;\n}) {\n const baseClasses = [focusRing(), \"w-5 h-5 rounded-full border-2 bg-background-surface transition-all\"];\n\n if (isDisabled) {\n baseClasses.push(\"border-border-muted forced-colors:!border-[GrayText]\");\n } else if (isInvalid) {\n baseClasses.push(\n \"border-feedback-error-border group-pressed:border-feedback-error-border dark:group-pressed:border-feedback-error-border forced-colors:!border-[Mark]\",\n );\n } else if (isSelected) {\n baseClasses.push(\n \"border-[7px] border-action-primary forced-colors:!border-[Highlight] group-pressed:border-action-primary-hover dark:group-pressed:border-action-primary-hover\",\n );\n } else {\n baseClasses.push(\"border-border-default group-pressed:border-border-focus dark:group-pressed:border-border-focus\");\n }\n\n return baseClasses.join(\" \");\n}\n\nexport function Radio(props: RadioProps) {\n return (\n <RACRadio\n {...props}\n className={composeTailwindRenderProps(\n props.className,\n \"group flex items-center gap-2 text-sm text-text-body transition disabled:text-text-muted dark:text-text-body dark:disabled:text-text-muted forced-colors:disabled:text-[GrayText]\",\n )}\n >\n {(renderProps) => (\n <>\n <div className={getRadioStyles(renderProps)} />\n {props.children}\n </>\n )}\n </RACRadio>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/Autocomplete/Autocomplete.tsx","../packages/@react-aria/ssr/src/SSRProvider.tsx","../node_modules/@react-aria/i18n/dist/packages/@react-aria/i18n/src/utils.ts","../node_modules/@react-aria/i18n/dist/packages/@react-aria/i18n/src/useDefaultLocale.ts","../node_modules/@react-aria/i18n/dist/packages/@react-aria/i18n/src/context.tsx","../node_modules/@react-aria/i18n/dist/packages/@react-aria/i18n/src/useCollator.ts","../node_modules/@react-aria/i18n/dist/packages/@react-aria/i18n/src/useFilter.ts","../src/components/Icon/Icon.tsx","../src/components/Field/Field.tsx","../src/utils/controlStyles.ts","../src/components/ListBoxItem/ListBoxItem.tsx","../src/components/Popover/Popover.tsx","../src/utils/index.ts","../src/hooks/useDebounce.ts","../src/components/Button/Button.tsx","../src/components/Calendar/Calendar.tsx","../src/components/Heading/Heading.tsx","../src/components/Skeleton/Skeleton.tsx","../src/components/Card/Card.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/Chip/Chip.tsx","../src/components/Tooltip/Tooltip.tsx","../src/components/CopyToClipboard/CopyToClipboard.tsx","../src/components/DateField/DateField.tsx","../src/components/Dialog/Dialog.tsx","../src/components/RangeCalendar/RangeCalendar.tsx","../src/components/DateRangePicker/DateRangePicker.tsx","../src/components/DialogHeader/DialogHeader.tsx","../src/components/ErrorBoundary/ErrorBoundary.tsx","../src/components/Drawer/Drawer.tsx","../src/components/Form/Form.tsx","../src/components/ListBox/ListBox.tsx","../src/components/Loader/Loader.tsx","../src/components/Logo/Logo.tsx","../src/components/NumberField/NumberField.tsx","../src/components/PlaceSearch/PlaceSearch.tsx","../src/components/ProgressBar/ProgressBar.tsx","../src/components/Select/Select.tsx","../src/components/Switch/Switch.tsx","../src/components/Tabs/Tabs.tsx","../src/components/TextArea/TextArea.tsx","../src/components/TextAreaWithChips/TextAreaWithChips.tsx","../src/components/TextField/TextField.tsx","../src/components/TextLink/TextLink.tsx","../src/components/TimeField/TimeField.tsx","../src/components/ToggleButton/ToggleButton.tsx","../src/components/Slider/Slider.tsx","../src/components/RadioGroup/RadioGroup.tsx"],"names":["$b5e257d569688ac6$var$defaultContext","$b5e257d569688ac6$var$SSRContext","$670gB$react","$b5e257d569688ac6$var$IsSSRContext","$b5e257d569688ac6$var$canUseDOM","$b5e257d569688ac6$var$componentIds","$b5e257d569688ac6$var$useCounter","isDisabled","ctx","$670gB$useContext","ref","$670gB$useRef","_React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED_ReactCurrentOwner","_React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","currentOwner","prevComponentValue","$b5e257d569688ac6$var$useLegacySSRSafeId","defaultId","counter","prefix","$b5e257d569688ac6$var$useModernSSRSafeId","id","didSSR","$670gB$useState","$b5e257d569688ac6$export$535bd6ca7f90a273","$b5e257d569688ac6$var$getSnapshot","$b5e257d569688ac6$var$getServerSnapshot","$b5e257d569688ac6$var$subscribe","onStoreChange","$148a7a147e38ea7f$var$RTL_SCRIPTS","$148a7a147e38ea7f$var$RTL_LANGS","$148a7a147e38ea7f$export$702d680b21cbd764","localeString","locale","textInfo","lang","$1e5a04cdaf7d1af8$var$localeSymbol","$1e5a04cdaf7d1af8$export$f09106e7c6677ec5","$1e5a04cdaf7d1af8$var$currentLocale","$1e5a04cdaf7d1af8$var$listeners","$1e5a04cdaf7d1af8$var$updateLocale","listener","$1e5a04cdaf7d1af8$export$188ec29ebc2bdc3a","isSSR","defaultLocale","setDefaultLocale","$ffhGL$useState","$ffhGL$useEffect","$18f2051aff69b9bf$var$I18nContext","$h9FiU$react","$18f2051aff69b9bf$export$43bb16f9c6d9e3f7","$h9FiU$useContext","$325a3faab7a68acd$var$cache","$325a3faab7a68acd$export$a16aca283550c30d","options","cacheKey","a","b","formatter","$bb77f239b46e8c72$export$3274cf84b703fff","collator","startsWith","$21ck9$useCallback","string","substring","endsWith","contains","scan","sliceLen","slice","$21ck9$useMemo","TextureMenuLight","jsx","TextureMenuDark","iconMapping","AppWindow","ArrowCircleUp","ArrowDown","ArrowLeft","ArrowLineLeft","ArrowRight","ArrowSquareOut","ArrowUp","ArrowsClockwise","BatteryCharging","BatteryEmpty","BatteryFull","BatteryHigh","BatteryLow","BatteryMedium","BatteryWarning","BookOpen","BookmarkSimple","BracketsCurly","Broadcast","Buildings","CalendarBlank","CaretDown","CaretLeft","CaretRight","CaretUp","CarSimple","ChargingStation","ChartBar","ChartLine","ChartLineUp","Check","CheckCircle","CheckSquare","Circle","CircleDashed","CircleNotch","ClipboardText","ClockCountdown","Cloud","CloudArrowDown","CloudFog","CloudLightning","CloudRain","CloudSnow","CloudSun","Code","Columns","Copy","Cursor","Database","DotsSix","DotsThree","DownloadSimple","EnvelopeSimple","Eye","EyeClosed","EyeSlash","Export","FireSimple","Flag","Gauge","GearSix","GitBranch","HandPointing","Handshake","Info","IntersectSquare","Lightning","LightningSlash","List","ListBullets","ListNumbers","Lock","MagnifyingGlass","MapPin","MapPinArea","MaskHappy","Moon","PaperPlaneRight","PaperPlaneTilt","PaperclipHorizontal","PencilSimple","Plugs","PlugsConnected","Plus","Power","Pulse","Question","Repeat","Rocket","ShareNetwork","ShieldCheck","SignOut","SlackLogo","Sliders","SlidersHorizontal","Snowflake","SolarPanel","Square","SquaresFour","Stack","Sun","Terminal","ThermometerCold","ThermometerHot","ThermometerSimple","Trash","TreeEvergreen","User","UserCircle","UserPlus","Users","UsersFour","Warning","WarningCircle","WebhooksLogo","Wind","X","WaveSine","Icon","memo","name","size","color","weight","className","title","ariaLabel","grow","variant","rounded","bgColor","props","IconComponent","isCustom","accessibilityLabel","defaultBg","brandWrapperClasses","twMerge","wrapperClasses","iconEl","controlStyles","useInputFocus","isFocused","setIsFocused","React","handleFocus","e","onFocus","handleBlur","onBlur","InputWrapper","children","ClearButton","onClick","getInputStateStyles","isInvalid","baseStyles","getInputBackgroundStyles","getInputBaseStyles","transparent","getFieldGroupStyles","isFocusWithin","Label","tooltip","isRequired","htmlFor","jsxs","Description","FieldError","Input","FieldGroup","rest","itemHeightStylesObject","textSizeStylesObject","ListBoxItem","AriaListBoxItem","getPopoverStyles","isEntering","isExiting","enteringStyles","exitingStyles","Popover","showArrow","isSubmenu","useSlottedContext","PopoverContext","offset","AriaPopover","composeRenderProps","renderProps","OverlayArrow","focusRing","showDefaultOutline","composeTailwindRenderProps","tw","useDebounce","value","delay","debouncedValue","setDebouncedValue","useState","useEffect","timer","iconSizeClassMap","inputPaddingLeftMap","state","ComboBoxStateContext","AriaButton","getItemName","key","staticItems","sections","selectedItem","s","item","handleRestRequest","config","filterText","signal","baseUrl","params","finalUrl","response","json","error","errorMessage","handleGraphQLRequest","query","obj","Autocomplete","label","selectedKey","defaultSelectedKey","onSelectionChange","requestConfig","defaultFilter","placeholder","description","validationResult","showErrors","renderItem","renderLeftIcon","renderSection","autoFocus","triggerRef","triggerWidth","setTriggerWidth","inputValue","setInputValue","debouncedInputValue","setError","textSizeClass","heightSizeClass","dynamicItems","updateTriggerWidth","useAsyncList","result","handleInternalSelectionChange","newName","handleInternalInputChange","text","currentSelectedItemName","ComboBox","section","Group","AriaInput","isPressed","ListBox","sectionItems","Fragment","ListBoxSection","Header","variantStyles","widthStyles","disabledStyles","enabledStyles","badgePositionStyles","badgeVariantStyles","getButtonStyles","fullWidth","isLoading","styles","Button","icon","loadingText","loadingIndicator","iconPosition","iconWeight","href","badgeNumber","badgeVariant","badgePosition","style","restProps","iconElement","content","loadingNode","composedClassName","buttonOrLink","RACLink","RACButton","getCellStyles","isSelected","Calendar","AriaCalendar","CalendarHeader","CalendarGrid","CalendarGridHeader","CalendarGridBody","date","CalendarCell","Text","direction","useLocale","buttonSize","Heading","AriaCalendarGridHeader","day","CalendarHeaderCell","sizeVariants","heightVariants","Tag","height","sizeClasses","heightClasses","Skeleton","width","animation","gradient","flex","stack","responsive","adjustAnimationSpeedBasedOnWidth","dataTestId","visible","setVisible","baseClasses","animationSpeed","numWidth","animationClasses","shapeClasses","layoutClasses","responsiveStyles","breakpoint","lineWidth","index","Card","heading","upperRightText","withPadding","isGhost","cardClasses","getCheckboxStyles","getBoxStyles","isIndeterminate","colorStyles","iconStyles","Checkbox","otherProps","AriaCheckbox","checkboxContent","Minus","chipVariantStyles","chipSizeStyles","getChipStyles","isClickable","Chip","onRemove","isRemovable","showRemoveButton","handleRemoveClick","handleChipClick","chipContent","Tooltip","TooltipTrigger","AriaTooltip","CopyToClipboard","showTooltip","setShowTooltip","copyButton","textToCopy","DateField","AriaDateField","DateInput","getSegmentStyles","isPlaceholder","AriaDateInput","segment","DateSegment","Dialog","RACDialog","getCellClassName","selectionState","selectionStateClasses","disabledClasses","RangeCalendar","AriaRangeCalendar","formattedDate","isSelectionStart","isSelectionEnd","_isFocusVisible","DateRangePicker","AriaDateRangePicker","CalendarIcon","DialogHeader","onClose","hideCloseIcon","titleAlign","hasBackArrow","onBack","headerContent","ErrorBoundary","Component","__publicField","errorInfo","Drawer","isOpen","slideInFrom","transparentOverlay","primaryAction","secondaryAction","footerContent","contentPadding","maxWidth","isAnimating","setIsAnimating","hasActions","hasFooter","ModalOverlay","Modal","Form","RACForm","AriaListBox","Loader","Logo","showWordmark","fillClass","getNumberFieldStyles","NumberField","useId","AriaNumberField","isMapboxResponse","data","MAPBOX_TOKEN","PlaceSearch","onSelect","searchTypes","countryRestrictions","proximity","itemDataRef","useRef","loadedItemsRef","items","feature","itemData","nameParts","primaryText","secondaryText","selected","ProgressBar","rightLabel","progressWidth","hideLabels","AriaProgressBar","percentage","valueText","getSelectValueClassName","useElementFocus","Select","controlledSelectedKey","internalSelectedKey","setInternalSelectedKey","handleSelectionChange","selectRef","AriaSelect","SelectValue","getTrackClassName","getHandleClassName","Switch","AriaSwitch","getTabsStyles","orientation","Tabs","RACTabs","getTabListStyles","TabList","RACTabList","getTabStyles","focusRingStyles","stateStyles","Tab","RACTab","getTabPanelStyles","TabPanel","RACTabPanel","getTextAreaStyles","TextArea","required","TextAreaWithChips","onChange","chips","onChipsChange","triggerPattern","onTriggerDetected","onTriggerDismissed","renderChip","chipVariant","chipSize","textareaRef","actualChipSize","selectionOffsetRef","getDOMTextWithPlaceholders","useCallback","container","processNode","node","textContent","element","chipId","i","setCaretAtOffset","targetOffset","walker","parentElement","currentNode","remaining","range","sel","useLayoutEffect","handleTextChange","newValue","cursorPosition","textBeforeCursor","triggerRegex","match","startIndex","handleChipRemove","updatedChips","chip","updatedText","renderChipElement","textAreaStyles","contentEditableStyles","renderContent","part","chipMatch","c","selection","line","lineIndex","target","hasChips","position","found","calculatePosition","tempRange","chipElement","newRange","newSelection","textNode","prev","maybeChip","elementNode","chipPlaceholder","chipIndex","newText","newChips","getTextFieldStyles","paddingStyles","TextField","showSearchIcon","isClearable","onClear","type","showPassword","setShowPassword","isPassword","AriaTextFieldComponent","TextLink","external","asButton","onPress","externalProps","combinedClasses","getTimeFieldStyles","TimeField","focusedSegment","setFocusedSegment","inputRef","handleFocusIn","handleFocusOut","inputElement","AriaTimeField","getToggleButtonStyles","borderRadius","borderRight","borderLeft","ToggleButton","renderChildren","toggleButton","RACToggleButton","Slider","defaultValue","min","max","step","disabled","showValue","isControlled","internalValue","setInternalValue","currentValue","clamped","percent","next","RadioGroup","RACRadioGroup","getRadioStyles","Radio","RACRadio"],"mappings":"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","file":"index.cjs","sourcesContent":["\"use client\";\n\nimport React, { useEffect, useState } from \"react\";\nimport { useFilter } from \"react-aria\";\nimport {\n Button as AriaButton,\n Input as AriaInput,\n ComboBox,\n ComboBoxStateContext,\n Group,\n Header,\n ListBox,\n ListBoxSection,\n ValidationResult,\n type Key,\n} from \"react-aria-components\";\nimport { useAsyncList } from \"react-stately\";\n\nimport { Description, FieldError, Label, getFieldGroupStyles } from \"../Field/Field\";\nimport { Icon } from \"../Icon/Icon\";\nimport { ListBoxItem } from \"../ListBoxItem/ListBoxItem\";\nimport { Popover } from \"../Popover/Popover\";\nimport { composeTailwindRenderProps } from \"../../utils\";\nimport { useDebounce } from \"../../hooks/useDebounce\";\nimport { controlStyles, type Size } from \"../../utils/controlStyles\";\n\ninterface Item {\n id: string;\n name: string;\n}\n\ninterface Section {\n name: string;\n items: Item[];\n}\n\nconst iconSizeClassMap = {\n sm: \"h-4 w-4\",\n md: \"h-5 w-5\",\n lg: \"h-6 w-6\",\n xl: \"h-7 w-7\",\n};\n\nconst inputPaddingLeftMap = {\n sm: \"pl-7\",\n md: \"pl-9\",\n lg: \"pl-10\",\n xl: \"pl-12\",\n};\n\nconst itemHeightStylesObject = {\n sm: \"py-1\",\n md: \"py-2\",\n lg: \"py-3\",\n xl: \"py-4\",\n};\n\ntype RequestMethod = \"GET\" | \"POST\";\n\ninterface BaseRequestConfig {\n url: string;\n headers?: Record<string, string>;\n transformResponse: (data: unknown) => Item[];\n}\n\ninterface RestRequestConfig extends BaseRequestConfig {\n requestType: \"REST\";\n method?: RequestMethod;\n queryKey?: string; // For APIs that expect \"query\" in URL or JSON body\n extraParams?: Record<string, string>;\n shouldLoad?: (filterText: string) => boolean;\n}\n\ninterface GraphQLRequestConfig extends BaseRequestConfig {\n requestType: \"GraphQL\";\n graphqlQuery: string;\n variableKey?: string;\n responsePath?: string;\n shouldLoad?: (filterText: string) => boolean;\n}\n\ntype AutocompleteRequestConfig = RestRequestConfig | GraphQLRequestConfig;\n\n/**\n * Autocomplete\n *\n * Text input with typeahead suggestions and keyboard navigation.\n */\nexport interface AutocompleteProps {\n label?: string;\n staticItems?: Item[];\n sections?: Section[];\n selectedKey?: Key | null;\n defaultSelectedKey?: Key | null;\n onSelectionChange?: (key: Key | null) => void;\n requestConfig?: AutocompleteRequestConfig;\n defaultFilter?: (textValue: string, inputValue: string) => boolean;\n placeholder?: string;\n renderItem?: (item: Item) => React.ReactNode;\n renderLeftIcon?: (isLoading: boolean) => React.ReactNode;\n renderSection?: (section: Section, children: React.ReactNode) => React.ReactNode;\n errorMessage?: string | ((validation: ValidationResult) => string);\n description?: string;\n size?: Size;\n tooltip?: string;\n isRequired?: boolean;\n isDisabled?: boolean;\n isInvalid?: boolean;\n validationResult?: ValidationResult;\n showErrors?: boolean;\n autoFocus?: boolean;\n}\n\nfunction ClearButton() {\n const state = React.useContext(ComboBoxStateContext);\n return (\n <AriaButton\n // Don't inherit default Button behavior from ComboBox.\n slot={null}\n className=\"clear-button\"\n aria-label=\"Clear\"\n onPress={() => state?.setSelectedKey(null)}\n >\n ✕\n </AriaButton>\n );\n}\n\n// Helper function to get item name by key\nconst getItemName = (key: Key | null | undefined, staticItems: Item[], sections?: Section[]): string => {\n if (key == null || key === \"\") return \"\";\n const allItems = sections ? sections.flatMap((s) => s.items) : staticItems || [];\n const selectedItem = allItems.find((item) => item.id === key);\n return selectedItem ? selectedItem.name : \"\";\n};\n\nasync function handleRestRequest(\n config: RestRequestConfig,\n filterText: string,\n signal: AbortSignal,\n): Promise<{ items: Item[]; error?: string }> {\n try {\n // Extract the base URL and access token from config\n const baseUrl = config.url.replace(\"{q}\", filterText);\n\n // Add query parameters\n const params = new URLSearchParams();\n if (config.extraParams) {\n Object.entries(config.extraParams).forEach(([key, value]) => {\n params.append(key, value.toString());\n });\n }\n\n // Construct final URL\n const finalUrl = `${baseUrl}${params.toString() ? \"?\" + params.toString() : \"\"}`;\n\n const response = await fetch(finalUrl, {\n method: \"GET\",\n headers: config.headers,\n signal,\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n const json = await response.json();\n return { items: config.transformResponse(json) };\n } catch (error) {\n console.error(\"Error in REST request:\", error);\n const errorMessage = error instanceof Error ? error.message : \"Unknown error occurred\";\n return { items: [], error: errorMessage };\n }\n}\n\nasync function handleGraphQLRequest(\n config: GraphQLRequestConfig,\n filterText: string,\n signal: AbortSignal,\n): Promise<{ items: Item[]; error?: string }> {\n try {\n const query = config.graphqlQuery.replace(`$${config.variableKey || \"filter\"}`, `\"${filterText}\"`);\n\n const response = await fetch(config.url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...config.headers,\n },\n body: JSON.stringify({ query }),\n signal,\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n let json = await response.json();\n\n if (json.errors) {\n throw new Error(json.errors[0]?.message || \"GraphQL error occurred\");\n }\n\n // For GraphQL, traverse the response path if specified\n if (config.responsePath) {\n json = config.responsePath.split(\".\").reduce((obj, key) => obj?.[key], json);\n }\n\n return { items: config.transformResponse(json) };\n } catch (error) {\n console.error(\"Error in GraphQL request:\", error);\n const errorMessage = error instanceof Error ? error.message : \"Unknown error occurred\";\n return { items: [], error: errorMessage };\n }\n}\n\nexport function Autocomplete({\n label,\n staticItems = [],\n sections,\n selectedKey,\n defaultSelectedKey,\n onSelectionChange,\n requestConfig,\n defaultFilter,\n placeholder,\n errorMessage,\n description,\n size = \"md\",\n tooltip,\n isRequired,\n isDisabled,\n isInvalid,\n validationResult,\n showErrors = true,\n renderItem,\n renderLeftIcon,\n renderSection,\n autoFocus = false,\n}: AutocompleteProps) {\n const triggerRef = React.useRef<HTMLDivElement>(null);\n const [triggerWidth, setTriggerWidth] = React.useState<number | undefined>();\n const [inputValue, setInputValue] = useState(() =>\n getItemName(selectedKey || defaultSelectedKey, staticItems, sections),\n );\n const [isFocused, setIsFocused] = useState(false);\n const debouncedInputValue = useDebounce(inputValue);\n const { contains } = useFilter({ sensitivity: \"base\" });\n const [error, setError] = useState<string | undefined>();\n\n const textSizeClass = controlStyles[size].text;\n const heightSizeClass = controlStyles[size].height;\n\n let dynamicItems: ReturnType<typeof useAsyncList<Item>> | null = null;\n\n useEffect(() => {\n if (autoFocus) {\n setIsFocused(true);\n }\n }, [autoFocus]);\n\n // Update trigger width when component mounts or resizes\n useEffect(() => {\n const updateTriggerWidth = () => {\n if (triggerRef.current) {\n setTriggerWidth(triggerRef.current.offsetWidth);\n }\n };\n\n updateTriggerWidth();\n window.addEventListener(\"resize\", updateTriggerWidth);\n return () => window.removeEventListener(\"resize\", updateTriggerWidth);\n }, []);\n\n useEffect(() => {\n if (dynamicItems) {\n dynamicItems.setFilterText(debouncedInputValue);\n }\n }, [debouncedInputValue, dynamicItems]);\n\n if (requestConfig) {\n dynamicItems = useAsyncList<Item>({\n async load({ signal, filterText = \"\" }) {\n if (!requestConfig.url || (requestConfig.shouldLoad && !requestConfig.shouldLoad(filterText))) {\n return { items: [] };\n }\n\n try {\n let result;\n if (requestConfig.requestType === \"GraphQL\") {\n result = await handleGraphQLRequest(requestConfig, filterText, signal);\n } else {\n result = await handleRestRequest(requestConfig, filterText, signal);\n }\n\n setError(result.error);\n return { items: result.items };\n } catch (error) {\n console.error(\"Error loading items:\", error);\n setError(error instanceof Error ? error.message : \"Unknown error occurred\");\n return { items: [] };\n }\n },\n initialFilterText: \"\",\n });\n }\n\n if (debouncedInputValue === \"\") {\n dynamicItems = null;\n }\n\n const handleInternalSelectionChange = (key: Key | null) => {\n const newName = getItemName(key, staticItems, sections);\n setInputValue(newName);\n if (onSelectionChange) {\n onSelectionChange(key);\n }\n };\n\n const handleInternalInputChange = (text: string) => {\n setInputValue(text);\n const currentSelectedItemName = getItemName(selectedKey, staticItems, sections);\n if (selectedKey != null && text !== currentSelectedItemName) {\n if (onSelectionChange) {\n // Clear selection if input text no longer matches selected item's name\n onSelectionChange(null);\n }\n }\n };\n\n return (\n <ComboBox\n onSelectionChange={handleInternalSelectionChange}\n selectedKey={selectedKey || undefined}\n defaultSelectedKey={defaultSelectedKey || undefined}\n defaultItems={sections ? sections.flatMap((section) => section.items) : staticItems}\n items={dynamicItems ? dynamicItems.items : undefined}\n className={composeTailwindRenderProps(\"group flex flex-col\", \"w-full\")}\n menuTrigger=\"focus\"\n isDisabled={isDisabled}\n isInvalid={isInvalid || !!errorMessage}\n inputValue={inputValue}\n onInputChange={handleInternalInputChange}\n autoFocus={autoFocus}\n defaultFilter={defaultFilter || contains}\n aria-label={label || placeholder || \"Autocomplete\"}\n >\n {(state) => (\n <div className=\"flex flex-col\">\n {label && (\n <Label size={size} tooltip={tooltip} isRequired={isRequired}>\n {label}\n </Label>\n )}\n <Group\n ref={triggerRef}\n className={getFieldGroupStyles({\n size,\n isInvalid: isInvalid || !!errorMessage,\n isDisabled,\n isFocusWithin: isFocused || state.isOpen,\n className: \"w-full cursor-pointer\",\n })}\n aria-label={label || placeholder || \"Autocomplete\"}\n style={{ position: \"relative\" }}\n >\n {renderLeftIcon ? (\n <div className=\"absolute left-3\">{renderLeftIcon(!!dynamicItems?.isLoading)}</div>\n ) : (\n <Icon name=\"MagnifyingGlass\" className={`${iconSizeClassMap[size]} absolute left-3 text-inherit`} />\n )}\n <AriaInput\n className={`flex-1 min-w-0 border-none bg-background-input pr-3 outline-0 placeholder:text-text-placeholder ${inputPaddingLeftMap[size]} ${textSizeClass} ${heightSizeClass}`}\n placeholder={placeholder}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n />\n {inputValue && <ClearButton />}\n <AriaButton\n className={`bg-background-input px-2 text-text-body ${textSizeClass} ${heightSizeClass}`}\n aria-label=\"Toggle menu\"\n >\n {({ isPressed }) => <Icon name={isPressed ? \"CaretUp\" : \"CaretDown\"} className=\"h-4 w-4\" />}\n </AriaButton>\n </Group>\n {description && <Description size={size}>{description}</Description>}\n {showErrors && error && (\n <FieldError size={size} className=\"text-feedback-error-text\">\n {error}\n </FieldError>\n )}\n {showErrors && typeof errorMessage === \"string\" && (\n <FieldError size={size} className=\"text-feedback-error-text\">\n {errorMessage}\n </FieldError>\n )}\n {showErrors && typeof errorMessage === \"function\" && validationResult && (\n <FieldError size={size} className=\"text-feedback-error-text\">\n {errorMessage(validationResult)}\n </FieldError>\n )}\n <Popover\n className=\"bg-background-input shadow-xl border border-border-input/20 backdrop-blur-sm ring-1 ring-black/5\"\n style={{ minWidth: triggerWidth ? `${triggerWidth}px` : undefined }}\n >\n <ListBox className={`max-h-[300px] overflow-auto bg-background-input outline-none ${textSizeClass}`}>\n {sections\n ? sections.map((section) => {\n const sectionItems = section.items.map((item) => (\n <ListBoxItem\n key={item.id}\n id={item.id}\n textValue={item.name}\n size={size}\n className={`flex cursor-default items-center gap-2 rounded-sm px-3 ${itemHeightStylesObject[size]} text-text-body outline-none data-[focused]:bg-background-hover data-[selected]:bg-background-selected data-[selected]:font-medium`}\n >\n {renderItem ? (\n renderItem(item)\n ) : (\n <>\n {item.name}\n <Icon\n name=\"X\"\n className=\"ml-auto h-4 w-4 text-text-muted opacity-0 data-[focused]:opacity-100 data-[selected]:opacity-100\"\n />\n </>\n )}\n </ListBoxItem>\n ));\n\n if (renderSection) {\n return renderSection(section, sectionItems);\n }\n\n return (\n <ListBoxSection key={section.name}>\n <Header className=\"px-3 py-1 text-sm font-bold text-text-muted\">{section.name}</Header>\n {sectionItems}\n </ListBoxSection>\n );\n })\n : (item: Item) => (\n <ListBoxItem\n key={item.id}\n id={item.id}\n textValue={item.name}\n size={size}\n className={`flex cursor-default items-center gap-2 rounded-sm px-3 ${itemHeightStylesObject[size]} text-text-body outline-none data-[focused]:bg-background-hover data-[selected]:bg-background-selected data-[selected]:font-medium`}\n >\n {renderItem ? (\n renderItem(item)\n ) : (\n <>\n {item.name}\n <Icon\n name=\"X\"\n className=\"ml-auto h-4 w-4 text-text-muted opacity-0 data-[focused]:opacity-100 data-[selected]:opacity-100\"\n />\n </>\n )}\n </ListBoxItem>\n )}\n </ListBox>\n </Popover>\n </div>\n )}\n </ComboBox>\n );\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// We must avoid a circular dependency with @react-aria/utils, and this useLayoutEffect is\n// guarded by a check that it only runs on the client side.\n// eslint-disable-next-line rulesdir/useLayoutEffectRule\nimport React, {JSX, ReactNode, useContext, useLayoutEffect, useMemo, useRef, useState} from 'react';\n\n// To support SSR, the auto incrementing id counter is stored in a context. This allows\n// it to be reset on every request to ensure the client and server are consistent.\n// There is also a prefix string that is used to support async loading components\n// Each async boundary must be wrapped in an SSR provider, which appends to the prefix\n// and resets the current id counter. This ensures that async loaded components have\n// consistent ids regardless of the loading order.\ninterface SSRContextValue {\n prefix: string,\n current: number\n}\n\n// Default context value to use in case there is no SSRProvider. This is fine for\n// client-only apps. In order to support multiple copies of React Aria potentially\n// being on the page at once, the prefix is set to a random number. SSRProvider\n// will reset this to zero for consistency between server and client, so in the\n// SSR case multiple copies of React Aria is not supported.\nconst defaultContext: SSRContextValue = {\n prefix: String(Math.round(Math.random() * 10000000000)),\n current: 0\n};\n\nconst SSRContext = React.createContext<SSRContextValue>(defaultContext);\nconst IsSSRContext = React.createContext(false);\n\nexport interface SSRProviderProps {\n /** Your application here. */\n children: ReactNode\n}\n\n// This is only used in React < 18.\nfunction LegacySSRProvider(props: SSRProviderProps): JSX.Element {\n let cur = useContext(SSRContext);\n let counter = useCounter(cur === defaultContext);\n let [isSSR, setIsSSR] = useState(true);\n let value: SSRContextValue = useMemo(() => ({\n // If this is the first SSRProvider, start with an empty string prefix, otherwise\n // append and increment the counter.\n prefix: cur === defaultContext ? '' : `${cur.prefix}-${counter}`,\n current: 0\n }), [cur, counter]);\n\n // If on the client, and the component was initially server rendered,\n // then schedule a layout effect to update the component after hydration.\n if (typeof document !== 'undefined') {\n // This if statement technically breaks the rules of hooks, but is safe\n // because the condition never changes after mounting.\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useLayoutEffect(() => {\n setIsSSR(false);\n }, []);\n }\n\n return (\n <SSRContext.Provider value={value}>\n <IsSSRContext.Provider value={isSSR}>\n {props.children}\n </IsSSRContext.Provider>\n </SSRContext.Provider>\n );\n}\n\nlet warnedAboutSSRProvider = false;\n\n/**\n * When using SSR with React Aria in React 16 or 17, applications must be wrapped in an SSRProvider.\n * This ensures that auto generated ids are consistent between the client and server.\n */\nexport function SSRProvider(props: SSRProviderProps): JSX.Element {\n if (typeof React['useId'] === 'function') {\n if (process.env.NODE_ENV !== 'test' && !warnedAboutSSRProvider) {\n console.warn('In React 18, SSRProvider is not necessary and is a noop. You can remove it from your app.');\n warnedAboutSSRProvider = true;\n }\n return <>{props.children}</>;\n }\n return <LegacySSRProvider {...props} />;\n}\n\nlet canUseDOM = Boolean(\n typeof window !== 'undefined' &&\n window.document &&\n window.document.createElement\n);\n\nlet componentIds = new WeakMap();\n\nfunction useCounter(isDisabled = false) {\n let ctx = useContext(SSRContext);\n let ref = useRef<number | null>(null);\n // eslint-disable-next-line rulesdir/pure-render\n if (ref.current === null && !isDisabled) {\n // In strict mode, React renders components twice, and the ref will be reset to null on the second render.\n // This means our id counter will be incremented twice instead of once. This is a problem because on the\n // server, components are only rendered once and so ids generated on the server won't match the client.\n // In React 18, useId was introduced to solve this, but it is not available in older versions. So to solve this\n // we need to use some React internals to access the underlying Fiber instance, which is stable between renders.\n // This is exposed as ReactCurrentOwner in development, which is all we need since StrictMode only runs in development.\n // To ensure that we only increment the global counter once, we store the starting id for this component in\n // a weak map associated with the Fiber. On the second render, we reset the global counter to this value.\n // Since React runs the second render immediately after the first, this is safe.\n // @ts-ignore\n let currentOwner = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED?.ReactCurrentOwner?.current;\n if (currentOwner) {\n let prevComponentValue = componentIds.get(currentOwner);\n if (prevComponentValue == null) {\n // On the first render, and first call to useId, store the id and state in our weak map.\n componentIds.set(currentOwner, {\n id: ctx.current,\n state: currentOwner.memoizedState\n });\n } else if (currentOwner.memoizedState !== prevComponentValue.state) {\n // On the second render, the memoizedState gets reset by React.\n // Reset the counter, and remove from the weak map so we don't\n // do this for subsequent useId calls.\n ctx.current = prevComponentValue.id;\n componentIds.delete(currentOwner);\n }\n }\n\n // eslint-disable-next-line rulesdir/pure-render\n ref.current = ++ctx.current;\n }\n\n // eslint-disable-next-line rulesdir/pure-render\n return ref.current;\n}\n\nfunction useLegacySSRSafeId(defaultId?: string): string {\n let ctx = useContext(SSRContext);\n\n // If we are rendering in a non-DOM environment, and there's no SSRProvider,\n // provide a warning to hint to the developer to add one.\n if (ctx === defaultContext && !canUseDOM) {\n console.warn('When server rendering, you must wrap your application in an <SSRProvider> to ensure consistent ids are generated between the client and server.');\n }\n\n let counter = useCounter(!!defaultId);\n let prefix = ctx === defaultContext && process.env.NODE_ENV === 'test' ? 'react-aria' : `react-aria${ctx.prefix}`;\n return defaultId || `${prefix}-${counter}`;\n}\n\nfunction useModernSSRSafeId(defaultId?: string): string {\n let id = React.useId();\n let [didSSR] = useState(useIsSSR());\n let prefix = didSSR || process.env.NODE_ENV === 'test' ? 'react-aria' : `react-aria${defaultContext.prefix}`;\n return defaultId || `${prefix}-${id}`;\n}\n\n// Use React.useId in React 18 if available, otherwise fall back to our old implementation.\n/** @private */\nexport const useSSRSafeId = typeof React['useId'] === 'function' ? useModernSSRSafeId : useLegacySSRSafeId;\n\nfunction getSnapshot() {\n return false;\n}\n\nfunction getServerSnapshot() {\n return true;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction subscribe(onStoreChange: () => void): () => void {\n // noop\n return () => {};\n}\n\n/**\n * Returns whether the component is currently being server side rendered or\n * hydrated on the client. Can be used to delay browser-specific rendering\n * until after hydration.\n */\nexport function useIsSSR(): boolean {\n // In React 18, we can use useSyncExternalStore to detect if we're server rendering or hydrating.\n if (typeof React['useSyncExternalStore'] === 'function') {\n return React['useSyncExternalStore'](subscribe, getSnapshot, getServerSnapshot);\n }\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useContext(IsSSRContext);\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// https://en.wikipedia.org/wiki/Right-to-left\nconst RTL_SCRIPTS = new Set(['Arab', 'Syrc', 'Samr', 'Mand', 'Thaa', 'Mend', 'Nkoo', 'Adlm', 'Rohg', 'Hebr']);\nconst RTL_LANGS = new Set(['ae', 'ar', 'arc', 'bcc', 'bqi', 'ckb', 'dv', 'fa', 'glk', 'he', 'ku', 'mzn', 'nqo', 'pnb', 'ps', 'sd', 'ug', 'ur', 'yi']);\n\n/**\n * Determines if a locale is read right to left using [Intl.Locale]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale}.\n */\nexport function isRTL(localeString: string) {\n // If the Intl.Locale API is available, use it to get the locale's text direction.\n if (Intl.Locale) {\n let locale = new Intl.Locale(localeString).maximize();\n\n // Use the text info object to get the direction if possible.\n // @ts-ignore - this was implemented as a property by some browsers before it was standardized as a function.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/getTextInfo\n let textInfo = typeof locale.getTextInfo === 'function' ? locale.getTextInfo() : locale.textInfo;\n if (textInfo) {\n return textInfo.direction === 'rtl';\n }\n\n // Fallback: guess using the script.\n // This is more accurate than guessing by language, since languages can be written in multiple scripts.\n if (locale.script) {\n return RTL_SCRIPTS.has(locale.script);\n }\n }\n\n // If not, just guess by the language (first part of the locale)\n let lang = localeString.split('-')[0];\n return RTL_LANGS.has(lang);\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {Direction} from '@react-types/shared';\nimport {isRTL} from './utils';\nimport {useEffect, useState} from 'react';\nimport {useIsSSR} from '@react-aria/ssr';\n\nexport interface Locale {\n /** The [BCP47](https://www.ietf.org/rfc/bcp/bcp47.txt) language code for the locale. */\n locale: string,\n /** The writing direction for the locale. */\n direction: Direction\n}\n\n// Locale passed from server by PackageLocalizationProvider.\nconst localeSymbol = Symbol.for('react-aria.i18n.locale');\n\n/**\n * Gets the locale setting of the browser.\n */\nexport function getDefaultLocale(): Locale {\n let locale = typeof window !== 'undefined' && window[localeSymbol]\n // @ts-ignore\n || (typeof navigator !== 'undefined' && (navigator.language || navigator.userLanguage))\n || 'en-US';\n\n try {\n Intl.DateTimeFormat.supportedLocalesOf([locale]);\n } catch {\n locale = 'en-US';\n }\n return {\n locale,\n direction: isRTL(locale) ? 'rtl' : 'ltr'\n };\n}\n\nlet currentLocale = getDefaultLocale();\nlet listeners = new Set<(locale: Locale) => void>();\n\nfunction updateLocale() {\n currentLocale = getDefaultLocale();\n for (let listener of listeners) {\n listener(currentLocale);\n }\n}\n\n/**\n * Returns the current browser/system language, and updates when it changes.\n */\nexport function useDefaultLocale(): Locale {\n let isSSR = useIsSSR();\n let [defaultLocale, setDefaultLocale] = useState(currentLocale);\n\n useEffect(() => {\n if (listeners.size === 0) {\n window.addEventListener('languagechange', updateLocale);\n }\n\n listeners.add(setDefaultLocale);\n\n return () => {\n listeners.delete(setDefaultLocale);\n if (listeners.size === 0) {\n window.removeEventListener('languagechange', updateLocale);\n }\n };\n }, []);\n\n // We cannot determine the browser's language on the server, so default to\n // en-US. This will be updated after hydration on the client to the correct value.\n if (isSSR) {\n return {\n locale: 'en-US',\n direction: 'ltr'\n };\n }\n\n return defaultLocale;\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {isRTL} from './utils';\nimport {Locale, useDefaultLocale} from './useDefaultLocale';\nimport React, {ReactNode, useContext} from 'react';\n\nexport interface I18nProviderProps {\n /** Contents that should have the locale applied. */\n children: ReactNode,\n /** The locale to apply to the children. */\n locale?: string\n}\n\nconst I18nContext = React.createContext<Locale | null>(null);\n\n/**\n * Provides the locale for the application to all child components.\n */\nexport function I18nProvider(props: I18nProviderProps) {\n let {locale, children} = props;\n let defaultLocale = useDefaultLocale();\n\n let value: Locale = React.useMemo(() => {\n if (!locale) {\n return defaultLocale;\n }\n\n return {\n locale,\n direction: isRTL(locale) ? 'rtl' : 'ltr'\n };\n }, [defaultLocale, locale]);\n\n return (\n <I18nContext.Provider value={value}>\n {children}\n </I18nContext.Provider>\n );\n}\n\n/**\n * Returns the current locale and layout direction.\n */\nexport function useLocale(): Locale {\n let defaultLocale = useDefaultLocale();\n let context = useContext(I18nContext);\n return context || defaultLocale;\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {useLocale} from './context';\n\nlet cache = new Map<string, Intl.Collator>();\n\n/**\n * Provides localized string collation for the current locale. Automatically updates when the locale changes,\n * and handles caching of the collator for performance.\n * @param options - Collator options.\n */\nexport function useCollator(options?: Intl.CollatorOptions): Intl.Collator {\n let {locale} = useLocale();\n\n let cacheKey = locale + (options ? Object.entries(options).sort((a, b) => a[0] < b[0] ? -1 : 1).join() : '');\n if (cache.has(cacheKey)) {\n return cache.get(cacheKey)!;\n }\n\n let formatter = new Intl.Collator(locale, options);\n cache.set(cacheKey, formatter);\n return formatter;\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {useCallback, useMemo} from 'react';\nimport {useCollator} from './useCollator';\n\nexport interface Filter {\n /** Returns whether a string starts with a given substring. */\n startsWith(string: string, substring: string): boolean,\n /** Returns whether a string ends with a given substring. */\n endsWith(string: string, substring: string): boolean,\n /** Returns whether a string contains a given substring. */\n contains(string: string, substring: string): boolean\n}\n\n/**\n * Provides localized string search functionality that is useful for filtering or matching items\n * in a list. Options can be provided to adjust the sensitivity to case, diacritics, and other parameters.\n */\nexport function useFilter(options?: Intl.CollatorOptions): Filter {\n let collator = useCollator({\n usage: 'search',\n ...options\n });\n\n // TODO(later): these methods don't currently support the ignorePunctuation option.\n let startsWith = useCallback((string, substring) => {\n if (substring.length === 0) {\n return true;\n }\n\n // Normalize both strings so we can slice safely\n // TODO: take into account the ignorePunctuation option as well...\n string = string.normalize('NFC');\n substring = substring.normalize('NFC');\n return collator.compare(string.slice(0, substring.length), substring) === 0;\n }, [collator]);\n\n let endsWith = useCallback((string, substring) => {\n if (substring.length === 0) {\n return true;\n }\n\n string = string.normalize('NFC');\n substring = substring.normalize('NFC');\n return collator.compare(string.slice(-substring.length), substring) === 0;\n }, [collator]);\n\n let contains = useCallback((string, substring) => {\n if (substring.length === 0) {\n return true;\n }\n\n string = string.normalize('NFC');\n substring = substring.normalize('NFC');\n\n let scan = 0;\n let sliceLen = substring.length;\n for (; scan + sliceLen <= string.length; scan++) {\n let slice = string.slice(scan, scan + sliceLen);\n if (collator.compare(substring, slice) === 0) {\n return true;\n }\n }\n\n return false;\n }, [collator]);\n\n return useMemo(() => ({\n startsWith,\n endsWith,\n contains\n }), [startsWith, endsWith, contains]);\n}\n","\"use client\";\nimport { memo } from \"react\";\nimport {\n AppWindow,\n ArrowCircleUp,\n ArrowDown,\n ArrowLeft,\n ArrowLineLeft,\n ArrowRight,\n ArrowSquareOut,\n ArrowUp,\n ArrowsClockwise,\n BatteryCharging,\n BatteryEmpty,\n BatteryFull,\n BatteryHigh,\n BatteryLow,\n BatteryMedium,\n BatteryWarning,\n BookmarkSimple,\n BookOpen,\n BracketsCurly,\n Broadcast,\n Buildings,\n CalendarBlank,\n CaretDown,\n CaretLeft,\n CaretRight,\n CaretUp,\n CarSimple,\n ChargingStation,\n ChartBar,\n ChartLine,\n ChartLineUp,\n Check,\n CheckCircle,\n CheckSquare,\n Circle,\n CircleDashed,\n CircleNotch,\n ClipboardText,\n ClockCountdown,\n Cloud,\n CloudArrowDown,\n CloudFog,\n CloudLightning,\n CloudRain,\n CloudSnow,\n CloudSun,\n Code,\n Columns,\n Copy,\n Cursor,\n Database,\n DotsSix,\n DotsThree,\n DownloadSimple,\n EnvelopeSimple,\n Eye,\n EyeClosed,\n EyeSlash,\n Export,\n FireSimple,\n Flag,\n Gauge,\n GearSix,\n GitBranch,\n HandPointing,\n Handshake,\n Info,\n IntersectSquare,\n Lightning,\n LightningSlash,\n List,\n ListBullets,\n ListNumbers,\n Lock,\n MagnifyingGlass,\n MapPin,\n MapPinArea,\n MaskHappy,\n Moon,\n PaperPlaneRight,\n PaperPlaneTilt,\n PaperclipHorizontal,\n PencilSimple,\n Plugs,\n PlugsConnected,\n Plus,\n Power,\n Pulse,\n Question,\n Repeat,\n Rocket,\n ShareNetwork,\n ShieldCheck,\n SignOut,\n SlackLogo,\n Sliders,\n SlidersHorizontal,\n Snowflake,\n SolarPanel,\n Square,\n SquaresFour,\n Stack,\n Sun,\n Terminal,\n ThermometerCold,\n ThermometerHot,\n ThermometerSimple,\n Trash,\n TreeEvergreen,\n User,\n UserCircle,\n UserPlus,\n Users,\n UsersFour,\n Warning,\n WarningCircle,\n WebhooksLogo,\n Wind,\n WaveSine,\n X,\n} from \"@phosphor-icons/react\";\nimport { twMerge } from \"tailwind-merge\";\n\n// Custom SVG icons\nconst TextureMenuLight = () => (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n {/* Add path data here */}\n </svg>\n);\n\nconst TextureMenuDark = () => (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n {/* Add path data here */}\n </svg>\n);\n\nexport const iconMapping = {\n AppWindow,\n ArrowCircleUp,\n ArrowDown,\n ArrowLeft,\n ArrowLineLeft,\n ArrowRight,\n ArrowSquareOut,\n ArrowUp,\n ArrowsClockwise,\n BatteryCharging,\n BatteryEmpty,\n BatteryFull,\n BatteryHigh,\n BatteryLow,\n BatteryMedium,\n BatteryWarning,\n BookOpen,\n BookmarkSimple,\n BracketsCurly,\n Broadcast,\n Buildings,\n CalendarBlank,\n CaretDown,\n CaretLeft,\n CaretRight,\n CaretUp,\n CarSimple,\n ChargingStation,\n ChartBar,\n ChartLine,\n ChartLineUp,\n Check,\n CheckCircle,\n CheckSquare,\n Circle,\n CircleDashed,\n CircleNotch,\n ClipboardText,\n ClockCountdown,\n Cloud,\n CloudArrowDown,\n CloudFog,\n CloudLightning,\n CloudRain,\n CloudSnow,\n CloudSun,\n Code,\n Columns,\n Copy,\n Cursor,\n Database,\n DotsSix,\n DotsThree,\n DownloadSimple,\n EnvelopeSimple,\n Eye,\n EyeClosed,\n EyeSlash,\n Export,\n FireSimple,\n Flag,\n Gauge,\n GearSix,\n GitBranch,\n HandPointing,\n Handshake,\n Info,\n IntersectSquare,\n Lightning,\n LightningSlash,\n List,\n ListBullets,\n ListNumbers,\n Lock,\n MagnifyingGlass,\n MapPin,\n MapPinArea,\n MaskHappy,\n Moon,\n PaperPlaneRight,\n PaperPlaneTilt,\n PaperclipHorizontal,\n PencilSimple,\n Plugs,\n PlugsConnected,\n Plus,\n Power,\n Pulse,\n Question,\n Repeat,\n Rocket,\n ShareNetwork,\n ShieldCheck,\n SignOut,\n SlackLogo,\n Sliders,\n SlidersHorizontal,\n Snowflake,\n SolarPanel,\n Square,\n SquaresFour,\n Stack,\n Sun,\n Terminal,\n ThermometerCold,\n ThermometerHot,\n ThermometerSimple,\n Trash,\n TreeEvergreen,\n User,\n UserCircle,\n UserPlus,\n Users,\n UsersFour,\n Warning,\n WarningCircle,\n WebhooksLogo,\n Wind,\n X,\n TextureMenuLight,\n TextureMenuDark,\n WaveSine,\n} as const;\n\nexport type IconName = keyof typeof iconMapping;\ntype IconVariant = \"default\" | \"container\" | \"brand\";\n\ninterface ExtendedIconProps {\n name: IconName;\n size?: number;\n color?: string;\n weight?: \"thin\" | \"light\" | \"regular\" | \"bold\" | \"fill\" | \"duotone\";\n className?: string;\n title?: string;\n ariaLabel?: string;\n grow?: boolean;\n variant?: IconVariant;\n rounded?: boolean;\n bgColor?: string;\n [key: string]: unknown;\n}\n\nexport const Icon = memo(\n ({\n name,\n size = 24,\n color,\n weight = \"regular\",\n className,\n title,\n ariaLabel,\n grow,\n variant = \"default\",\n rounded = false,\n bgColor,\n ...props\n }: ExtendedIconProps) => {\n if (!name) return null;\n\n const IconComponent = iconMapping[name];\n if (!IconComponent) {\n if (process.env.NODE_ENV === \"development\") {\n console.error(`Icon with name \"${name}\" does not exist.`);\n }\n return null;\n }\n\n const isCustom = name === \"TextureMenuLight\" || name === \"TextureMenuDark\";\n const accessibilityLabel = ariaLabel || title || `${name} icon`;\n\n const defaultBg = variant === \"container\" ? \"bg-[#F3F4F6\" : variant === \"brand\" ? \"bg-gray-light\" : \"\";\n\n const brandWrapperClasses = twMerge(\n \"inline-flex items-center justify-center w-12 h-12 p-3 rounded-xl bg-brand-light\",\n bgColor,\n rounded ? \"rounded-md\" : \"\",\n grow ? \"w-full h-full\" : \"\",\n className,\n );\n\n const wrapperClasses = [\n \"inline-flex items-center justify-center\",\n bgColor || defaultBg,\n rounded ? \"rounded-md\" : \"\",\n grow ? \"w-full h-full\" : `w-[${size}px] h-[${size}px]`,\n ]\n .filter(Boolean)\n .join(\" \");\n\n const iconSize = grow ? undefined : size;\n const iconColor = variant === \"brand\" && !isCustom ? undefined : color;\n const brandIconClass = variant === \"brand\" && !isCustom ? \"text-brand-dark w-6 h-6\" : className || \"\";\n\n const iconEl = (\n <IconComponent\n size={iconSize}\n color={iconColor}\n className={brandIconClass}\n weight={weight}\n aria-label={accessibilityLabel}\n data-testid={`${name}-icon`}\n {...props}\n />\n );\n\n if (variant === \"brand\") {\n return <div className={brandWrapperClasses}>{iconEl}</div>;\n }\n return variant === \"default\" ? iconEl : <div className={wrapperClasses}>{iconEl}</div>;\n },\n);\n\nIcon.displayName = \"Icon\";\n","\"use client\";\n/**\n * Field Component System\n *\n * A comprehensive system for building form fields and input components with consistent\n * styling, accessibility, and behavior. This module provides both base components and\n * styling utilities that can be composed to create complex form controls.\n *\n * Key Features:\n * - Consistent styling across all form elements\n * - Built-in state handling (invalid, disabled, focused)\n * - Accessibility support out of the box\n * - Flexible composition through style utilities\n *\n * @example Basic Usage\n * ```tsx\n * <Label htmlFor=\"name\">Name</Label>\n * <Input id=\"name\" size=\"md\" />\n * ```\n *\n * @example Complex Field with All Components\n * ```tsx\n * <div>\n * <Label htmlFor=\"email\" tooltip=\"Enter your work email\">Email</Label>\n * <Input\n * id=\"email\"\n * type=\"email\"\n * isInvalid={hasError}\n * isDisabled={isSubmitting}\n * />\n * <Description>We'll never share your email</Description>\n * {hasError && <FieldError>Please enter a valid email</FieldError>}\n * </div>\n * ```\n */\n\nimport React from \"react\";\nimport { Icon } from \"../Icon/Icon\";\nimport { twMerge } from \"tailwind-merge\";\nimport type { TextProps } from \"react-aria-components\";\nimport { controlStyles, type Size } from \"../../utils/controlStyles\";\n\n// Base style props interface for all input-like components\nexport interface InputStyleProps {\n /** Whether the input is in an invalid state */\n isInvalid?: boolean;\n /** Whether the input is disabled */\n isDisabled?: boolean;\n /** Whether the input should have a transparent background */\n transparent?: boolean;\n /** The size variant of the input */\n size?: Size;\n /** Whether the input is currently focused */\n isFocused?: boolean;\n /** Additional CSS classes to apply */\n className?: string;\n}\n\n// Common interfaces\nexport interface BaseProps {\n /** The size variant of the component */\n size?: Size;\n /** Additional CSS classes to apply */\n className?: string;\n}\n\nexport interface BaseInputProps extends BaseProps {\n /** Whether the input should have a transparent background */\n transparent?: boolean;\n /** Whether to show a clear button when the input has a value */\n isClearable?: boolean;\n /** Callback when the clear button is clicked */\n onClear?: () => void;\n /** Whether to show a search icon */\n showSearchIcon?: boolean;\n}\n\nexport interface LabelProps extends BaseProps {\n /** The label content */\n children: React.ReactNode;\n /** Optional tooltip text to show next to the label */\n tooltip?: string;\n /** Whether to show a required field indicator (*) */\n isRequired?: boolean;\n /** The ID of the input this label is associated with */\n htmlFor?: string;\n}\n\nexport interface FieldErrorProps extends BaseProps {\n /** The error message to display */\n children: React.ReactNode;\n}\n\nexport interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\">, InputStyleProps {\n /** The size variant of the input */\n size?: Size;\n}\n\nexport interface DescriptionProps extends Omit<TextProps, \"className\">, BaseProps {\n /** The description content */\n children: React.ReactNode;\n}\n\nexport interface FieldGroupProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"children\">, InputStyleProps {\n /** Whether any child of the group is focused */\n isFocusWithin?: boolean;\n /** Children can be either a ReactNode or a render function */\n children?: React.ReactNode | ((props: InputStyleProps) => React.ReactNode);\n}\n\n/**\n * Hook for managing input focus state\n */\nexport function useInputFocus() {\n const [isFocused, setIsFocused] = React.useState(false);\n\n const handleFocus = React.useCallback(\n (e: React.FocusEvent<HTMLInputElement>, onFocus?: (e: React.FocusEvent<HTMLInputElement>) => void) => {\n setIsFocused(true);\n onFocus?.(e);\n },\n [],\n );\n\n const handleBlur = React.useCallback(\n (e: React.FocusEvent<HTMLInputElement>, onBlur?: (e: React.FocusEvent<HTMLInputElement>) => void) => {\n setIsFocused(false);\n onBlur?.(e);\n },\n [],\n );\n\n return { isFocused, handleFocus, handleBlur };\n}\n\n/**\n * Wrapper component for input containers\n */\nexport function InputWrapper({ children, className }: { children: React.ReactNode; className?: string }) {\n return <div className={twMerge(\"relative w-full\", className)}>{children}</div>;\n}\n\n/**\n * Clear button component for inputs\n */\nexport function ClearButton({\n onClick,\n size = \"md\",\n className,\n}: {\n onClick: () => void;\n size?: Size;\n className?: string;\n}) {\n return (\n <button\n type=\"button\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n onClick();\n }}\n className={twMerge(\n \"absolute right-2 top-1/2 -translate-y-1/2 transform text-text-muted hover:text-text-body\",\n className,\n )}\n aria-label=\"Clear input\"\n onMouseDown={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n <Icon name=\"X\" size={size === \"sm\" ? 16 : 20} />\n </button>\n );\n}\n\n/**\n * Generates state-specific styles for inputs based on their current state\n * (invalid, disabled, focused).\n *\n * State Priority:\n * 1. Disabled (overrides all other states)\n * 2. Invalid + Focused\n * 3. Invalid\n * 4. Focused\n * 5. Default\n *\n * @example\n * ```tsx\n * const styles = getInputStateStyles({ isInvalid: true, isFocused: true });\n * ```\n */\nexport function getInputStateStyles(props: { isInvalid?: boolean; isDisabled?: boolean; isFocused?: boolean }) {\n const { isInvalid, isDisabled, isFocused } = props;\n const baseStyles = \"border rounded-[var(--control-border-radius)] \";\n\n // Disabled state overrides all others\n if (isDisabled) {\n return `${baseStyles} border-border-muted focus:outline-none`;\n }\n\n // Handle combinations of invalid and focus states\n if (isInvalid && isFocused) {\n return `${baseStyles} border-feedback-error-border outline-[1.5px] outline-[var(--control-focus-ring-color-error)]`;\n }\n\n if (isInvalid) {\n return `${baseStyles} border-feedback-error-border`;\n }\n\n if (isFocused) {\n return `${baseStyles} !outline-[1.5px] !outline-[var(--control-focus-ring-color)] ![--tw-outline-style:solid]`;\n }\n\n // Default state\n return `${baseStyles}`;\n}\n\n/**\n * Generates background styles based on the transparent and disabled props.\n * Uses Tailwind classes for consistent styling across light/dark modes.\n */\nexport function getInputBackgroundStyles(props: { transparent?: boolean; isDisabled?: boolean }) {\n if (props.isDisabled) {\n return \"bg-background-muted\";\n }\n return props.transparent ? \"bg-transparent\" : \"bg-background-input\";\n}\n\n/**\n * Generates the complete set of base styles for input components.\n * This includes state styles, background, sizing, and custom classes.\n *\n * @example\n * ```tsx\n * const styles = getInputBaseStyles({\n * isInvalid: formState.hasError,\n * isDisabled: isLoading,\n * size: \"md\"\n * });\n * ```\n */\nexport function getInputBaseStyles(props: InputStyleProps) {\n const { isInvalid, isDisabled, isFocused, transparent, size = \"md\", className } = props;\n\n return twMerge(\n \"w-full\",\n getInputStateStyles({ isInvalid, isDisabled, isFocused }),\n getInputBackgroundStyles({ transparent, isDisabled }),\n controlStyles[size].text,\n controlStyles[size].height,\n controlStyles[size].padding,\n className,\n );\n}\n\n/**\n * Generates styles for grouped form elements (like input with buttons)\n *\n * @example\n * ```tsx\n * <div className={getFieldGroupStyles({ size: \"md\" })}>\n * <Input />\n * <Button>Submit</Button>\n * </div>\n * ```\n */\nexport function getFieldGroupStyles(props: FieldGroupProps) {\n const { size = \"md\", isFocusWithin, isInvalid, isDisabled, transparent, className } = props;\n\n return twMerge(\n \"group flex items-center rounded-sm overflow-hidden\",\n !transparent && \"bg-background-input\",\n transparent && \"bg-transparent\",\n controlStyles[size].height,\n getInputStateStyles({ isFocused: isFocusWithin, isInvalid, isDisabled }),\n className,\n );\n}\n\n// Components\n\n/**\n * Label component for form fields. Supports tooltips and required field indicators.\n *\n * @example\n * ```tsx\n * <Label\n * htmlFor=\"email\"\n * tooltip=\"Enter your work email\"\n * isRequired\n * >\n * Email Address\n * </Label>\n * ```\n */\nexport function Label({ children, size = \"md\", tooltip, isRequired, className, htmlFor }: LabelProps) {\n return (\n <label\n htmlFor={htmlFor}\n className={twMerge(controlStyles[size].text, \"!text-text-caption flex items-center gap-1\", className)}\n >\n {children}\n {isRequired && <span>*</span>}\n {tooltip && (\n <span className=\"text-text-muted\">\n <Icon name=\"Info\" size={size === \"sm\" ? 16 : 20} />\n </span>\n )}\n </label>\n );\n}\n\n/**\n * Description component for providing additional context about a form field.\n *\n * @example\n * ```tsx\n * <Description>Must be at least 8 characters</Description>\n * ```\n */\nexport function Description({ size = \"md\", className, children, ...props }: DescriptionProps) {\n return (\n <div {...props} className={twMerge(\"leading-[2.25] text-text-muted\", controlStyles[size].text, className)}>\n {children}\n </div>\n );\n}\n\n/**\n * Error message component for form fields. Automatically handles\n * accessibility attributes for screen readers.\n *\n * @example\n * ```tsx\n * {hasError && <FieldError>This field is required</FieldError>}\n * ```\n */\nexport function FieldError({ children, size = \"md\", className }: FieldErrorProps) {\n return (\n <div role=\"alert\" className={twMerge(controlStyles[size].text, \"text-feedback-error-text\", className)}>\n {children}\n </div>\n );\n}\n\n/**\n * Base input component with consistent styling and state handling.\n * Extends the native input element with our custom styling system.\n *\n * @example\n * ```tsx\n * <Input\n * size=\"md\"\n * isInvalid={hasError}\n * isDisabled={isLoading}\n * transparent={false}\n * />\n * ```\n */\nexport function Input({ size = \"md\", isInvalid, isDisabled, isFocused, transparent, className, ...props }: InputProps) {\n return (\n <input\n className={getInputBaseStyles({\n isInvalid,\n isDisabled,\n isFocused,\n transparent,\n size,\n className,\n })}\n {...props}\n />\n );\n}\n\n/**\n * Container for grouping form elements with consistent styling.\n * Useful for creating compound components like input with buttons.\n *\n * @example\n * ```tsx\n * <FieldGroup>\n * <Input placeholder=\"Search...\" />\n * <Button>Search</Button>\n * </FieldGroup>\n * ```\n */\nexport function FieldGroup(props: FieldGroupProps) {\n const { children, ...rest } = props;\n return (\n <div {...rest} className={getFieldGroupStyles(props)}>\n {typeof children === \"function\" ? children(props) : children}\n </div>\n );\n}\n","/**\n * Control-specific style utilities for form elements and interactive components.\n * These styles use CSS variables defined in the theme for consistent sizing\n * and spacing across all control elements.\n *\n * Text sizes follow the relationships defined in theme.css:\n * sm: --control-text-sm (maps to --text-xs)\n * md: --control-text-md (maps to --text-sm)\n * lg: --control-text-lg (maps to --text-base)\n * xl: --control-text-xl (maps to --text-lg)\n */\n\nexport type Size = \"sm\" | \"md\" | \"lg\" | \"xl\";\n\nexport const controlStyles = {\n sm: {\n text: \"text-[length:var(--control-text-sm)]\",\n height: \"h-[var(--control-sm-height)]\",\n padding: \"px-[var(--control-padding-sm)]\",\n gap: \"gap-[var(--control-gap-sm)]\",\n },\n md: {\n text: \"text-[length:var(--control-text-md)]\",\n height: \"h-[var(--control-md-height)]\",\n padding: \"px-[var(--control-padding-md)]\",\n gap: \"gap-[var(--control-gap-md)]\",\n },\n lg: {\n text: \"text-[length:var(--control-text-lg)]\",\n height: \"h-[var(--control-lg-height)]\",\n padding: \"px-[var(--control-padding-lg)]\",\n gap: \"gap-[var(--control-gap-lg)]\",\n },\n xl: {\n text: \"text-[length:var(--control-text-xl)]\",\n height: \"h-[var(--control-xl-height)]\",\n padding: \"px-[var(--control-padding-xl)]\",\n gap: \"gap-[var(--control-gap-xl)]\",\n },\n} as const;\n","import { ListBoxItem as AriaListBoxItem } from \"react-aria-components\";\nimport type { ListBoxItemProps as AriaListBoxItemProps } from \"react-aria-components\";\nimport { twMerge } from \"tailwind-merge\";\n\nconst itemHeightStylesObject = {\n sm: \"py-1\",\n md: \"py-2\",\n lg: \"py-3\",\n xl: \"py-4\",\n};\n\nconst textSizeStylesObject = {\n sm: \"text-controlElementSm\",\n md: \"text-controlElementMd\",\n lg: \"text-controlElementLg\",\n xl: \"text-controlElementXl\",\n};\n\n/**\n * ListBoxItem\n *\n * A styled wrapper around `react-aria-components` ListBoxItem with size\n * variants that align with Edges typography.\n */\nexport interface ExtendedListBoxItemProps extends Omit<AriaListBoxItemProps, \"className\"> {\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n className?: string;\n}\n\nexport type ListBoxItemProps = ExtendedListBoxItemProps;\n\nexport function ListBoxItem({ size = \"md\", className, ...props }: ExtendedListBoxItemProps) {\n const baseClassName =\n \"flex cursor-default items-center gap-2 rounded-sm px-3 text-text-body outline-none data-[focused]:bg-background-hover data-[selected]:bg-background-selected data-[selected]:font-medium\";\n\n return (\n <AriaListBoxItem\n {...props}\n className={twMerge(baseClassName, itemHeightStylesObject[size], textSizeStylesObject[size], className)}\n />\n );\n}\n","import {\n OverlayArrow,\n Popover as AriaPopover,\n PopoverProps as AriaPopoverProps,\n composeRenderProps,\n PopoverContext,\n useSlottedContext,\n} from \"react-aria-components\";\nimport React from \"react\";\n\n/**\n * Popover\n *\n * Positioned overlay container with optional arrow, built on\n * `react-aria-components` Popover.\n */\nexport interface PopoverProps extends Omit<AriaPopoverProps, \"children\"> {\n showArrow?: boolean;\n children: React.ReactNode;\n}\n\nfunction getPopoverStyles({\n isEntering,\n isExiting,\n className = \"\",\n}: {\n isEntering?: boolean;\n isExiting?: boolean;\n className?: string;\n}) {\n const baseStyles = [\n \"bg-white\",\n \"dark:bg-zinc-900/70\",\n \"dark:backdrop-blur-2xl\",\n \"dark:backdrop-saturate-200\",\n \"forced-colors:bg-[Canvas]\",\n \"shadow-md\",\n \"rounded-md\",\n \"overflow-hidden\",\n \"bg-clip-padding\",\n \"border\",\n \"border-gray-100\",\n \"dark:border-white/5\",\n \"dark:text-zinc-300\",\n ].join(\" \");\n\n const enteringStyles = isEntering\n ? [\n \"animate-in\",\n \"fade-in\",\n \"placement-bottom:slide-in-from-top-1\",\n \"placement-top:slide-in-from-bottom-1\",\n \"placement-left:slide-in-from-right-1\",\n \"placement-right:slide-in-from-left-1\",\n \"ease-out\",\n \"duration-200\",\n ].join(\" \")\n : \"\";\n\n const exitingStyles = isExiting\n ? [\n \"animate-out\",\n \"fade-out\",\n \"placement-bottom:slide-out-to-top-1\",\n \"placement-top:slide-out-to-bottom-1\",\n \"placement-left:slide-out-to-right-1\",\n \"placement-right:slide-out-to-left-1\",\n \"ease-in\",\n \"duration-150\",\n ].join(\" \")\n : \"\";\n\n return [baseStyles, enteringStyles, exitingStyles, className].filter(Boolean).join(\" \");\n}\n\nexport function Popover({ children, showArrow, className, ...props }: PopoverProps) {\n const popoverContext = useSlottedContext(PopoverContext)!;\n const isSubmenu = popoverContext?.trigger === \"SubmenuTrigger\";\n let offset = showArrow ? 12 : 8;\n offset = isSubmenu ? offset - 6 : offset;\n return (\n <AriaPopover\n offset={offset}\n {...props}\n className={composeRenderProps(className, (className, renderProps) =>\n getPopoverStyles({ ...renderProps, className }),\n )}\n >\n {showArrow && (\n <OverlayArrow className=\"group\">\n <svg\n width={12}\n height={12}\n viewBox=\"0 0 12 12\"\n className=\"block fill-white stroke-black/10 stroke-1 group-placement-left:-rotate-90 group-placement-right:rotate-90 group-placement-bottom:rotate-180 dark:fill-[#1f1f21] dark:stroke-zinc-600 forced-colors:fill-[Canvas] forced-colors:stroke-[ButtonBorder]\"\n >\n <path d=\"M0 0 L6 6 L12 0\" />\n </svg>\n </OverlayArrow>\n )}\n {children}\n </AriaPopover>\n );\n}\n","import { DateTime } from \"luxon\";\nimport { composeRenderProps } from \"react-aria-components\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport { ColorModeProvider, useColorMode } from \"./ColorModeProvider\";\n\nexport const formatIsoDateString = (isoDateString: string) => {\n const dateTime = DateTime.fromISO(isoDateString);\n\n return {\n toFullDateTime() {\n return dateTime.toLocaleString(DateTime.DATETIME_MED_WITH_WEEKDAY);\n },\n toRelative() {\n return dateTime.toRelative();\n },\n };\n};\n\nexport function focusRing(showDefaultOutline: boolean = false) {\n const baseClasses = showDefaultOutline\n ? \"outline outline-1 outline-border-input focus:outline-2 focus:outline-border-focus focus:outline-offset-0 invalid:outline-2 invalid:outline-feedback-error-border group-invalid:outline-2 group-invalid:outline-feedback-error-border forced-colors:focus:outline-[Highlight] forced-colors:focus:outline-2 forced-colors:focus:outline-offset-2\"\n : \"outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-border-focus focus-visible:outline-offset-0 invalid:outline-2 invalid:outline-feedback-error-border group-invalid:outline-2 group-invalid:outline-feedback-error-border forced-colors:focus:outline-[Highlight] forced-colors:focus:outline-2 forced-colors:focus:outline-offset-2\";\n return `${baseClasses}`;\n}\n\nexport function composeTailwindRenderProps<T>(\n className: string | ((v: T) => string) | undefined,\n tw: string,\n): string | ((v: T) => string) {\n return composeRenderProps(className, (className) => twMerge(tw, className));\n}\n\nexport function toTitleCase(text: string): string {\n if (!text) return text;\n const articles = new Set([\"a\", \"an\", \"the\", \"and\", \"but\", \"or\", \"for\", \"nor\", \"on\", \"at\", \"to\", \"with\"]);\n return text\n .toLocaleLowerCase()\n .split(/\\s+/)\n .map((word, index) =>\n articles.has(word) && index !== 0 ? word : word.charAt(0).toLocaleUpperCase() + word.slice(1),\n )\n .join(\" \");\n}\n\nexport function truncateMiddle(value: string, length: number = 16): string {\n if (!value) return value;\n if (value.length <= length) return value;\n const mid = Math.floor(length / 2);\n return `${value.slice(0, mid)}...${value.slice(-mid)}`;\n}\n\nexport function toSentenceCase(text: string): string {\n if (!text) return text;\n return text.charAt(0).toLocaleUpperCase() + text.slice(1).toLocaleLowerCase();\n}\n\nexport function formatPhoneNumber(phone: string): string {\n if (!phone) return phone;\n return phone.replace(/(\\d{3})(\\d{3})(\\d{4})/, \"($1) $2-$3\");\n}\n\nexport function toDateString(date: string, showTime: boolean = false): string {\n if (!date) return date;\n\n // Normalize the date string to ensure uppercase \"T\" and \"Z\"\n const normalizedDate = date.replace(\"t\", \"T\").replace(\"z\", \"Z\");\n\n const dt = DateTime.fromISO(normalizedDate); // Parse the ISO date string\n\n if (!dt.isValid) {\n return \"Invalid Date\";\n }\n\n return showTime\n ? dt.toLocaleString(DateTime.DATETIME_SHORT) // Includes both date and time\n : dt.toLocaleString(DateTime.DATE_SHORT); // Date only\n}\n\nconst colorCache = new Map<string, string>();\n\nexport const getResolvedColor = (variableName: string): string => {\n // Early return if running in non-browser environment\n if (typeof window === \"undefined\") return \"\";\n\n // Return cached value if available\n if (colorCache.has(variableName)) {\n return colorCache.get(variableName)!;\n }\n\n try {\n const tempElement = document.createElement(\"div\");\n tempElement.style.color = `var(${variableName})`;\n document.body.appendChild(tempElement);\n const resolvedColor = getComputedStyle(tempElement).color;\n document.body.removeChild(tempElement);\n // Cache the result\n colorCache.set(variableName, resolvedColor);\n return resolvedColor;\n } catch (error) {\n console.error(`Failed to resolve color for ${variableName}:`, error);\n return \"\";\n }\n};\n","import { useEffect, useState } from \"react\";\n\nexport function useDebounce<T>(value: T, delay: number = 300): T {\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\n\n useEffect(() => {\n const timer = setTimeout(() => setDebouncedValue(value), delay);\n\n return () => clearTimeout(timer);\n }, [value, delay]);\n\n return debouncedValue;\n}\n","import {\n Button as RACButton,\n Link as RACLink,\n ButtonProps as RACButtonProps,\n ButtonRenderProps,\n LinkRenderProps,\n} from \"react-aria-components\";\nimport { Icon } from \"../Icon\";\nimport { focusRing } from \"../../utils\";\nimport type { ComponentProps, ReactNode } from \"react\";\nimport type { Size } from \"../../utils/controlStyles\";\nimport { controlStyles } from \"../../utils/controlStyles\";\n\ntype IconName = ComponentProps<typeof Icon>[\"name\"];\n\ntype BaseButtonProps = Omit<RACButtonProps, \"className\">;\n\n/**\n * Button\n *\n * A versatile action component that supports multiple visual variants, sizes,\n * optional icons, a loading state, and badge indicators. Follows the Edges\n * design system tokens and composes `react-aria-components` under the hood.\n *\n * Example usage:\n * ```tsx\n * <Button variant=\"primary\" size=\"md\" icon=\"Check\">Save</Button>\n * ```\n */\nexport interface ButtonProps extends BaseButtonProps {\n variant?: \"default\" | \"primary\" | \"secondary\" | \"destructive\" | \"icon\" | \"link\" | \"unstyled\" | \"ghost\";\n size?: Size;\n badgeNumber?: number;\n badgeVariant?: \"primary\" | \"destructive\";\n badgePosition?: \"top-right\" | \"top-left\" | \"bottom-right\" | \"bottom-left\";\n fullWidth?: boolean;\n icon?: IconName;\n iconWeight?: \"thin\" | \"light\" | \"regular\" | \"bold\" | \"fill\" | \"duotone\";\n iconPosition?: \"left\" | \"right\";\n isLoading?: boolean;\n loadingText?: string;\n loadingIndicator?: React.ReactNode;\n className?: string;\n href?: string;\n target?: string;\n rel?: string;\n style?: React.CSSProperties;\n}\n\nconst baseStyles =\n \"flex font-medium justify-center items-center gap-2 text-center transition rounded-sm whitespace-nowrap box-border\";\n\nconst variantStyles = {\n default:\n \"bg-neutral-black text-neutral-white hover:brightness-90 forced-colors:bg-[ButtonText] forced-colors:text-[ButtonFace] border-2 border-transparent\",\n primary:\n \"bg-action-primary text-neutral-white hover:brightness-90 forced-colors:bg-[ButtonText] forced-colors:text-[ButtonFace] border-2 border-transparent\",\n secondary:\n \"bg-transparent text-text-body border-2 border-border-muted hover:bg-text-body/5 forced-colors:border-[ButtonBorder] forced-colors:bg-[ButtonFace] forced-colors:text-[ButtonText]\",\n ghost:\n \"border-none text-text-body hover:bg-text-body/5 forced-colors:text-[ButtonText] forced-colors:hover:bg-[ButtonFace]\",\n destructive:\n \"bg-transparent text-action-destructive border-2 border-border-muted hover:bg-action-destructive/5 forced-colors:border-[ButtonBorder] forced-colors:bg-[ButtonFace] forced-colors:text-[Mark]\",\n link: \"!text-action-primary hover:text-action-primary/90 hover:underline hover:decoration-2 hover:underline-offset-4\",\n icon: \"border-none text-text-body hover:bg-text-body/5 forced-colors:text-[ButtonText] forced-colors:hover:bg-[ButtonFace] p-2 flex-shrink-0\",\n unstyled: \"bg-transparent\",\n};\n\nconst widthStyles = {\n full: \"w-full\",\n default: \"w-fit\",\n};\n\nconst disabledStyles = \"opacity-control-hover cursor-not-allowed pointer-events-none grayscale\";\nconst enabledStyles = \"opacity-100 cursor-pointer\";\n\nconst badgePositionStyles = {\n \"top-right\": \"-right-2 -top-2\",\n \"top-left\": \"-left-2 -top-2\",\n \"bottom-right\": \"-right-2 -bottom-2\",\n \"bottom-left\": \"-left-2 -bottom-2\",\n} as const;\n\nconst badgeVariantStyles = {\n primary: \"bg-action-primary text-white\",\n destructive: \"bg-action-destructive text-white\",\n} as const;\n\nfunction getButtonStyles(props: ButtonProps) {\n const { variant = \"default\", size = \"md\", isDisabled, fullWidth = false, isLoading = false } = props;\n\n let styles = variant === \"unstyled\" ? \"\" : `${baseStyles} ${variantStyles[variant]}`;\n\n // Add size styles using controlStyles\n if (variant !== \"unstyled\") {\n styles += ` ${controlStyles[size].text} ${controlStyles[size].height} ${controlStyles[size].padding} ${controlStyles[size].gap}`;\n }\n\n if (isDisabled || isLoading) {\n styles += ` ${disabledStyles}`;\n } else {\n styles += ` ${enabledStyles}`;\n }\n\n if (fullWidth) {\n styles += ` ${widthStyles.full}`;\n } else {\n styles += ` ${widthStyles.default}`;\n }\n\n return `${styles} ${focusRing()}`;\n}\n\n/**\n * Renders an Edges Button. When `href` is provided, renders a link-styled\n * button using the same visual system.\n */\nexport function Button(props: ButtonProps) {\n const {\n icon,\n children,\n isLoading = false,\n loadingText,\n loadingIndicator,\n size = \"md\",\n iconPosition = \"left\",\n iconWeight,\n href,\n className,\n badgeNumber,\n badgeVariant = \"primary\",\n badgePosition = \"top-right\",\n style,\n ...restProps\n } = props;\n\n // Shared icon logic\n const iconElement = icon ? (\n <Icon name={icon} className={`icon-[--control-icon-size-${size}]`} weight={iconWeight} />\n ) : null;\n\n // Shared content logic\n const content = (\n <>\n {iconPosition === \"left\" && iconElement}\n {typeof children === \"function\" ? null : children}\n {iconPosition === \"right\" && iconElement}\n </>\n );\n\n // Loading state\n const loadingNode = (\n <div className=\"relative inline-flex items-center justify-center\">\n <div className=\"absolute inset-0 flex items-center justify-center\">\n {loadingIndicator || (\n <Icon name=\"CircleNotch\" className={`animate-spin icon-[--control-icon-size-${size}]`} aria-hidden=\"true\" />\n )}\n </div>\n <div className=\"invisible\" aria-hidden=\"true\">\n {content}\n </div>\n {loadingText && (\n <span className=\"sr-only\" role=\"status\" aria-live=\"polite\">\n {loadingText}\n </span>\n )}\n </div>\n );\n\n // Compose className as a string\n const composedClassName = [getButtonStyles(props), className, isLoading ? \"aria-busy\" : \"\"].filter(Boolean).join(\" \");\n\n // Compose the button or link element\n const buttonOrLink = href ? (\n <RACLink href={href} {...restProps} style={style} className={composedClassName}>\n {isLoading\n ? loadingNode\n : typeof children === \"function\"\n ? (function (renderProps: LinkRenderProps & { defaultChildren: ReactNode }) {\n return (\n <>\n {iconPosition === \"left\" && iconElement}\n {children(renderProps as unknown as ButtonRenderProps & { defaultChildren: ReactNode })}\n {iconPosition === \"right\" && iconElement}\n </>\n );\n } as (props: LinkRenderProps & { defaultChildren: ReactNode }) => ReactNode)\n : content}\n </RACLink>\n ) : (\n <RACButton {...restProps} style={style} className={composedClassName}>\n {isLoading\n ? loadingNode\n : typeof children === \"function\"\n ? (function (renderProps: ButtonRenderProps & { defaultChildren: ReactNode }) {\n return (\n <>\n {iconPosition === \"left\" && iconElement}\n {children(renderProps)}\n {iconPosition === \"right\" && iconElement}\n </>\n );\n } as (props: ButtonRenderProps & { defaultChildren: ReactNode }) => ReactNode)\n : content}\n </RACButton>\n );\n\n // Render badge if badgeNumber is provided and > 0\n if (badgeNumber && badgeNumber > 0) {\n return (\n <div className=\"relative\">\n {buttonOrLink}\n <span\n className={`absolute ${badgePositionStyles[badgePosition]} flex h-5 w-5 items-center justify-center rounded-full ${badgeVariantStyles[badgeVariant]} text-xs`}\n aria-label={`${badgeNumber} items`}\n >\n {badgeNumber}\n </span>\n </div>\n );\n }\n\n return buttonOrLink;\n}\n","import {\n Calendar as AriaCalendar,\n CalendarGridHeader as AriaCalendarGridHeader,\n CalendarProps as AriaCalendarProps,\n CalendarCell,\n CalendarGrid,\n CalendarGridBody,\n CalendarHeaderCell,\n DateValue,\n Heading,\n Text,\n useLocale,\n} from \"react-aria-components\";\nimport { Button } from \"../Button\";\nimport { Icon } from \"../Icon\";\nimport { focusRing } from \"../../utils\";\n\nfunction getCellStyles({ isSelected, isDisabled }: { isSelected: boolean; isDisabled: boolean }) {\n const baseStyles = [\n focusRing,\n \"w-9 h-9 text-base cursor-default rounded-full flex items-center justify-center forced-color-adjust-none\",\n ];\n\n if (isDisabled) {\n baseStyles.push(\"text-gray-300 dark:text-zinc-600 forced-colors:text-[GrayText]\");\n } else if (isSelected) {\n baseStyles.push(\n \"bg-blue-600 invalid:bg-red-600 text-white forced-colors:bg-[Highlight] forced-colors:invalid:bg-[Mark] forced-colors:text-[HighlightText]\",\n );\n } else {\n baseStyles.push(\n \"text-zinc-900 dark:text-zinc-200 hover:bg-gray-100 dark:hover:bg-zinc-700 pressed:bg-gray-200 dark:pressed:bg-zinc-600\",\n );\n }\n\n return baseStyles.join(\" \");\n}\n\n/**\n * Calendar\n *\n * Single-date calendar primitive with Edges styling.\n */\nexport interface CalendarProps<T extends DateValue> extends Omit<AriaCalendarProps<T>, \"visibleDuration\"> {\n errorMessage?: string;\n}\n\nexport function Calendar<T extends DateValue>({ errorMessage, ...props }: CalendarProps<T>) {\n return (\n <AriaCalendar {...props}>\n <CalendarHeader />\n <CalendarGrid>\n <CalendarGridHeader />\n <CalendarGridBody>\n {(date) => (\n <CalendarCell\n date={date}\n className={({ isSelected, isDisabled }) => getCellStyles({ isSelected, isDisabled })}\n />\n )}\n </CalendarGridBody>\n </CalendarGrid>\n {errorMessage && (\n <Text slot=\"errorMessage\" className=\"text-sm text-red-600\">\n {errorMessage}\n </Text>\n )}\n </AriaCalendar>\n );\n}\n\nexport function CalendarHeader() {\n const { direction } = useLocale();\n\n const buttonSize = 18;\n\n return (\n <header className=\"flex w-full items-center gap-1 px-1 pb-4\">\n <Button variant=\"icon\" slot=\"previous\" className=\"pl-0\">\n {direction === \"rtl\" ? (\n <Icon name=\"CaretRight\" aria-hidden size={buttonSize} />\n ) : (\n <Icon name=\"CaretLeft\" aria-hidden size={buttonSize} />\n )}\n </Button>\n <Heading className=\"text-md mx-2 flex-1 text-center font-semibold text-zinc-900 dark:text-zinc-200\" />\n <Button variant=\"icon\" slot=\"next\" className=\"pr-0\">\n {direction === \"rtl\" ? (\n <Icon name=\"CaretLeft\" aria-hidden size={buttonSize} />\n ) : (\n <Icon name=\"CaretRight\" aria-hidden size={buttonSize} />\n )}\n </Button>\n </header>\n );\n}\n\nexport function CalendarGridHeader() {\n return (\n <AriaCalendarGridHeader>\n {(day) => <CalendarHeaderCell className=\"text-xs font-semibold text-text-caption\">{day}</CalendarHeaderCell>}\n </AriaCalendarGridHeader>\n );\n}\n","import React from \"react\";\nimport { twMerge } from \"tailwind-merge\";\n\nconst sizeVariants = {\n xs: \"text-lg font-semibold\",\n sm: \"text-xl font-semibold\",\n md: \"text-2xl font-semibold\",\n lg: \"text-3xl font-semibold\",\n xl: \"text-4xl font-semibold\",\n} as const;\n\nconst heightVariants = {\n page: \"h-16 leading-[62px]\",\n} as const;\n\nexport type HeadingSize = keyof typeof sizeVariants;\nexport type HeadingHeight = keyof typeof heightVariants;\n\n/**\n * Heading\n *\n * Typography component for page/section headings with size and height options.\n */\nexport interface HeadingProps {\n tag?: keyof JSX.IntrinsicElements;\n size?: HeadingSize;\n height?: HeadingHeight;\n className?: string;\n children?: React.ReactNode;\n}\n\nexport function Heading({ tag: Tag = \"h1\", size = \"lg\", height, className = \"\", children }: HeadingProps) {\n const sizeClasses = sizeVariants[size];\n const heightClasses = height ? heightVariants[height] : \"\";\n\n return <Tag className={twMerge(sizeClasses, heightClasses, className)}>{children}</Tag>;\n}\n","\"use client\";\n\nimport React, { useState, useEffect } from \"react\";\nimport { twMerge } from \"tailwind-merge\";\n\ninterface SkeletonProps {\n width?: number | string;\n height?: number | string;\n variant?: \"text\" | \"rect\" | \"circle\";\n animation?: \"pulse\" | \"wave\" | \"none\";\n gradient?: boolean;\n flex?: boolean;\n stack?: (number | string)[]; // Array of widths for stacked skeletons\n responsive?: Record<string, string | number>;\n delay?: number;\n adjustAnimationSpeedBasedOnWidth?: boolean;\n ariaLabel?: string;\n className?: string;\n \"data-testid\"?: string;\n}\n\nexport const Skeleton: React.FC<SkeletonProps> = ({\n width,\n height,\n variant = \"rect\",\n animation = \"pulse\",\n gradient = false,\n flex = false,\n stack,\n responsive,\n delay = 0,\n adjustAnimationSpeedBasedOnWidth = false,\n ariaLabel,\n className,\n \"data-testid\": dataTestId,\n}) => {\n const [visible, setVisible] = useState(delay === 0);\n\n useEffect(() => {\n if (delay > 0) {\n const timer = setTimeout(() => setVisible(true), delay);\n return () => clearTimeout(timer);\n }\n }, [delay]);\n\n if (!visible) return null;\n\n // Base styles\n const baseClasses = gradient\n ? \"bg-gradient-to-r from-[var(--skeleton-base)] via-[var(--skeleton-highlight)] to-[var(--skeleton-base)]\"\n : \"bg-[var(--skeleton-base)]\";\n\n // Adjust animation speed dynamically based on width\n const animationSpeed =\n adjustAnimationSpeedBasedOnWidth && width\n ? (() => {\n const numWidth = typeof width === \"number\" ? width : parseFloat(String(width));\n return !isNaN(numWidth) ? `animation-duration-[${Math.max(0.8, numWidth / 100)}s]` : \"\";\n })()\n : \"\";\n\n // Animation styles\n const animationClasses =\n animation === \"pulse\"\n ? `animate-pulse ${animationSpeed}`\n : animation === \"wave\"\n ? `relative overflow-hidden before:absolute before:inset-0 before:bg-gradient-to-r before:from-transparent before:via-[var(--skeleton-wave)] before:to-transparent before:animate-wave ${animationSpeed}`\n : \"\";\n\n // Shape-specific styles\n let shapeClasses = \"rounded-sm\";\n if (variant === \"circle\") shapeClasses = \"rounded-full\";\n if (variant === \"text\") shapeClasses = \"h-4 w-full rounded-sm\";\n\n // Dynamic layout handling\n const layoutClasses = flex ? \"flex-1 min-w-0\" : \"\";\n\n // Responsive styles\n const responsiveStyles = responsive\n ? Object.entries(responsive)\n .map(([breakpoint, value]) => `${breakpoint}:w-[${value}]`)\n .join(\" \")\n : \"\";\n\n // Stacking Multiple Skeletons\n if (stack) {\n return (\n <div className=\"space-y-2\" data-testid={dataTestId}>\n {stack.map((lineWidth, index) => (\n <div\n key={index}\n className={twMerge(baseClasses, animationClasses, shapeClasses, layoutClasses, responsiveStyles, className)}\n style={{ width: lineWidth, height }}\n />\n ))}\n </div>\n );\n }\n\n return (\n <div\n className={twMerge(baseClasses, animationClasses, shapeClasses, layoutClasses, responsiveStyles, className)}\n style={{ width, height }}\n role=\"presentation\"\n aria-hidden={!ariaLabel}\n aria-label={ariaLabel ?? undefined}\n data-testid={dataTestId}\n />\n );\n};\n\ninterface SkeletonGroupProps {\n count?: number;\n children: React.ReactNode;\n className?: string;\n \"data-testid\"?: string;\n}\n\nexport const SkeletonGroup: React.FC<SkeletonGroupProps> = ({\n count = 1,\n children,\n className,\n \"data-testid\": dataTestId,\n}) => {\n return (\n <div className={className} data-testid={dataTestId}>\n {Array.from({ length: count }).map((_, index) => (\n <div key={index}>{children}</div>\n ))}\n </div>\n );\n};\n","import React from \"react\";\n\nimport { Heading } from \"../Heading\";\nimport { Skeleton } from \"../Skeleton\";\n\n/**\n * Card\n *\n * Surface container with optional heading and actions.\n */\nexport interface CardProps {\n heading?: React.ReactNode;\n upperRightText?: React.ReactNode;\n withPadding?: boolean;\n isGhost?: boolean;\n children?: React.ReactNode;\n className?: string;\n isLoading?: boolean;\n}\n\nexport const Card: React.FC<CardProps> = ({\n heading,\n upperRightText,\n withPadding = true,\n isGhost = false,\n children,\n className = \"\",\n isLoading,\n}) => {\n const baseClasses = \"w-full rounded md:border-x border-y bg-background-surface \";\n const paddingClasses = withPadding ? \"p-6\" : \"\";\n const ghostClasses = isGhost ? \"md:border-x-0 border-y-0 shadow-none p-0\" : \"shadow-sm\";\n\n const cardClasses = `${baseClasses} ${paddingClasses} ${ghostClasses} ${className}`.trim();\n\n return (\n <div className={cardClasses} data-testid=\"card\">\n <>\n {heading && (\n <div className=\"mb-4 h-[28px] min-h-[28px]\">\n {isLoading ? (\n <Skeleton width={100} height={16} data-testid=\"skeleton\" />\n ) : (\n <div className=\"flex justify-between\">\n <div className=\"flex items-center gap-2\">\n {typeof heading === \"string\" ? <Heading size=\"xs\">{heading}</Heading> : heading}\n </div>\n {upperRightText && <span className=\"text-sm text-textFaint\">{upperRightText}</span>}\n </div>\n )}\n </div>\n )}\n {children}\n </>\n </div>\n );\n};\n","import { ReactNode } from \"react\";\nimport { Check, Minus } from \"lucide-react\";\nimport {\n Checkbox as AriaCheckbox,\n CheckboxGroup as AriaCheckboxGroup,\n CheckboxGroupProps as AriaCheckboxGroupProps,\n CheckboxProps as AriaCheckboxProps,\n CheckboxRenderProps,\n ValidationResult,\n composeRenderProps,\n} from \"react-aria-components\";\nimport { Description, FieldError, Label } from \"../Field\";\nimport { composeTailwindRenderProps } from \"../../utils\";\n\n/**\n * CheckboxGroup\n *\n * Groups multiple checkboxes with shared label/description.\n */\nexport interface CheckboxGroupProps extends Omit<AriaCheckboxGroupProps, \"children\"> {\n label?: string;\n children?: ReactNode;\n description?: string;\n errorMessage?: string | ((validation: ValidationResult) => string);\n}\n\n/**\n * Checkbox\n *\n * Single checkbox with Edges visuals.\n */\nexport interface CheckboxProps extends Omit<AriaCheckboxProps, \"children\"> {\n children?: ReactNode | ((props: CheckboxRenderProps) => ReactNode);\n}\n\nexport function CheckboxGroup(props: CheckboxGroupProps) {\n return (\n <AriaCheckboxGroup {...props} className={composeTailwindRenderProps(props.className, \"flex flex-col gap-2\")}>\n <Label>{props.label}</Label>\n {props.children}\n {props.description && <Description>{props.description}</Description>}\n <FieldError>{typeof props.errorMessage === \"function\" ? undefined : props.errorMessage}</FieldError>\n </AriaCheckboxGroup>\n );\n}\n\nfunction getCheckboxStyles({ isDisabled }: { isDisabled?: boolean }) {\n return `flex gap-2 items-center group text-sm transition ${isDisabled ? \"text-text-disabled\" : \"text-text-caption\"}`;\n}\n\nfunction getBoxStyles({\n isSelected,\n isInvalid,\n isDisabled,\n isIndeterminate,\n}: {\n isSelected?: boolean;\n isInvalid?: boolean;\n isDisabled?: boolean;\n isIndeterminate?: boolean;\n}) {\n const baseStyles =\n \"w-5 h-5 flex-shrink-0 rounded flex items-center justify-center border-2 transition ring-offset-2 focus:ring-2 focus:ring-border-focus\";\n\n let colorStyles = \"\";\n if (isDisabled) {\n colorStyles = \"border-border-muted bg-background-muted\";\n } else if (isInvalid) {\n colorStyles = \"border-feedback-error-border bg-feedback-error-background\";\n } else if (isSelected || isIndeterminate) {\n colorStyles =\n \"bg-action-primary border-action-primary hover:bg-action-primary-hover hover:border-action-primary-hover\";\n } else {\n colorStyles = \"bg-background-input border-border-input hover:border-border-focus\";\n }\n\n return `${baseStyles} ${colorStyles}`;\n}\n\nconst iconStyles = \"w-4 h-4 text-text-onPrimary group-disabled:text-text-disabled\";\n\nexport function Checkbox(props: CheckboxProps) {\n const { children, ...otherProps } = props;\n return (\n <AriaCheckbox\n {...otherProps}\n className={composeRenderProps(\n props.className,\n (className, renderProps) => `${getCheckboxStyles(renderProps)} ${className || \"\"}`,\n )}\n >\n {(renderProps) => {\n const { isSelected, isIndeterminate, ...rest } = renderProps;\n const checkboxContent = (\n <div\n className={getBoxStyles({\n isSelected,\n isIndeterminate,\n ...rest,\n })}\n >\n {isIndeterminate ? (\n <Minus aria-hidden className={iconStyles} />\n ) : isSelected ? (\n <Check aria-hidden className={iconStyles} />\n ) : null}\n </div>\n );\n\n return (\n <>\n {checkboxContent}\n {typeof children === \"function\" ? children(renderProps) : children}\n </>\n );\n }}\n </AriaCheckbox>\n );\n}\n","\"use client\";\nimport React from \"react\";\nimport { twMerge } from \"tailwind-merge\";\nimport { Icon } from \"../Icon/Icon\";\nimport { controlStyles, type Size } from \"../../utils/controlStyles\";\n\nexport interface ChipProps {\n /** The content to display inside the chip */\n children: React.ReactNode;\n /** Callback when the remove button is clicked */\n onRemove?: () => void;\n /** Size variant of the chip */\n size?: Size;\n /** Visual variant of the chip */\n variant?: \"default\" | \"primary\" | \"secondary\";\n /** Whether the chip can be removed (shows X button) */\n isRemovable?: boolean;\n /** Whether the chip is disabled */\n isDisabled?: boolean;\n /** Additional CSS classes */\n className?: string;\n /** Click handler for the chip itself (not the remove button) */\n onClick?: () => void;\n}\n\nconst chipVariantStyles = {\n default: \"bg-background-muted text-text-body border border-border-muted hover:bg-background-hover\",\n primary: \"bg-action-primary/10 text-action-primary border border-action-primary/20 hover:bg-action-primary/15\",\n secondary: \"bg-background-input text-text-body border border-border-input hover:bg-background-hover\",\n};\n\nconst chipSizeStyles = {\n sm: \"px-2 py-1 gap-1\",\n md: \"px-3 py-1.5 gap-1.5\",\n lg: \"px-3 py-2 gap-2\",\n xl: \"px-4 py-2.5 gap-2\",\n};\n\nconst disabledStyles = \"opacity-50 cursor-not-allowed pointer-events-none\";\n\nfunction getChipStyles(props: {\n variant: NonNullable<ChipProps[\"variant\"]>;\n size: NonNullable<ChipProps[\"size\"]>;\n isDisabled?: boolean;\n isClickable?: boolean;\n className?: string;\n}) {\n const { variant, size, isDisabled, isClickable, className } = props;\n\n return twMerge(\n // Base styles\n \"inline-flex items-center justify-center rounded-full font-medium transition-colors\",\n \"whitespace-nowrap select-none\",\n\n // Size styles\n chipSizeStyles[size],\n controlStyles[size].text,\n\n // Variant styles\n chipVariantStyles[variant],\n\n // Interactive styles\n isClickable && !isDisabled && \"cursor-pointer\",\n\n // Disabled styles\n isDisabled && disabledStyles,\n\n // Custom className\n className,\n );\n}\n\n/**\n * Chip\n *\n * A compact element that represents an input, attribute, or action.\n * Can be removable with an X button and supports different variants and sizes.\n */\nexport function Chip({\n children,\n onRemove,\n size = \"md\",\n variant = \"default\",\n isRemovable = true,\n isDisabled = false,\n className,\n onClick,\n}: ChipProps) {\n const isClickable = !!onClick && !isDisabled;\n const showRemoveButton = isRemovable && onRemove && !isDisabled;\n\n const handleRemoveClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n if (onRemove && !isDisabled) {\n onRemove();\n }\n };\n\n const handleChipClick = () => {\n if (onClick && !isDisabled) {\n onClick();\n }\n };\n\n const chipContent = (\n <>\n <span className=\"truncate\">{children}</span>\n {showRemoveButton && (\n <button\n type=\"button\"\n onClick={handleRemoveClick}\n className=\"flex-shrink-0 rounded-full p-0.5 hover:bg-black/10 transition-colors cursor-pointer\"\n aria-label=\"Remove\"\n tabIndex={-1}\n >\n <Icon\n name=\"X\"\n size={size === \"sm\" ? 12 : size === \"md\" ? 14 : 16}\n className=\"text-current opacity-70 hover:opacity-100\"\n />\n </button>\n )}\n </>\n );\n\n if (isClickable) {\n return (\n <button\n type=\"button\"\n onClick={handleChipClick}\n className={getChipStyles({ variant, size, isDisabled, isClickable, className })}\n disabled={isDisabled}\n >\n {chipContent}\n </button>\n );\n }\n\n return <span className={getChipStyles({ variant, size, isDisabled, isClickable, className })}>{chipContent}</span>;\n}\n","import React from \"react\";\nimport {\n Tooltip as AriaTooltip,\n TooltipProps as AriaTooltipProps,\n OverlayArrow,\n composeRenderProps,\n TooltipTrigger,\n} from \"react-aria-components\";\n\n/**\n * Tooltip\n *\n * Lightweight content container that appears on hover/focus/press.\n */\nexport interface TooltipProps extends Omit<AriaTooltipProps, \"children\"> {\n children: React.ReactNode;\n content: React.ReactNode;\n}\n\nconst styles = ({\n isEntering,\n isExiting,\n className,\n}: {\n isEntering?: boolean;\n isExiting?: boolean;\n className?: string;\n}) => {\n const baseClasses =\n \"max-w-[200px] group bg-slate-700 dark:bg-slate-600 border border-slate-800 dark:border-white/10 shadow-[inset_0_1px_0_0_theme(colors.gray.600)] dark:shadow-none text-white text-sm rounded-lg drop-shadow-lg will-change-transform px-3 py-1\";\n\n const enteringClasses = isEntering\n ? \"animate-in fade-in placement-bottom:slide-in-from-top-0.5 placement-top:slide-in-from-bottom-0.5 placement-left:slide-in-from-right-0.5 placement-right:slide-in-from-left-0.5 ease-out duration-200\"\n : \"\";\n\n const exitingClasses = isExiting\n ? \"animate-out fade-out placement-bottom:slide-out-to-top-0.5 placement-top:slide-out-to-bottom-0.5 placement-left:slide-out-to-right-0.5 placement-right:slide-out-to-left-0.5 ease-in duration-150\"\n : \"\";\n\n return [baseClasses, enteringClasses, exitingClasses, className].filter(Boolean).join(\" \");\n};\n\nexport function Tooltip({ children, content, ...props }: TooltipProps) {\n return (\n <TooltipTrigger delay={200}>\n {children}\n <AriaTooltip\n {...props}\n offset={10}\n className={composeRenderProps(props.className, (className, renderProps) =>\n styles({ ...renderProps, className }),\n )}\n >\n <OverlayArrow>\n <svg\n width={8}\n height={8}\n viewBox=\"0 0 8 8\"\n className=\"fill-slate-700 stroke-gray-800 group-placement-left:-rotate-90 group-placement-right:rotate-90 group-placement-bottom:rotate-180 dark:fill-slate-600 dark:stroke-white/10 forced-colors:fill-[Canvas] forced-colors:stroke-[ButtonBorder]\"\n >\n <path d=\"M0 0 L4 4 L8 0\" />\n </svg>\n </OverlayArrow>\n {content}\n </AriaTooltip>\n </TooltipTrigger>\n );\n}\n","\"use client\";\n\nimport React, { useState } from \"react\";\nimport { Button } from \"../Button\";\nimport { Icon } from \"../Icon\";\nimport { Tooltip } from \"../Tooltip\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport interface CopyToClipboardProps {\n /**\n * The value to copy to clipboard. If not provided, will use the text content of children\n */\n value?: string;\n /**\n * The content to display\n */\n children: React.ReactNode;\n /**\n * Optional className for the container\n */\n className?: string;\n /**\n * Size of the copy button, defaults to \"sm\"\n */\n size?: \"sm\" | \"md\";\n}\n\nexport function CopyToClipboard({ value, children, className, size = \"sm\" }: CopyToClipboardProps) {\n const [showTooltip, setShowTooltip] = useState(false);\n\n const handleCopy = () => {\n const textToCopy = value || (typeof children === \"string\" ? children : \"\");\n navigator.clipboard.writeText(textToCopy);\n setShowTooltip(true);\n setTimeout(() => {\n setShowTooltip(false);\n }, 2000);\n };\n\n const iconSize = size === \"sm\" ? 14 : 16;\n\n const copyButton = (\n <Button variant=\"icon\" size={size} onPress={handleCopy} className=\"!px-2\">\n <Icon name=\"Copy\" size={iconSize} />\n </Button>\n );\n\n return (\n <div className={twMerge(\"flex items-center gap-1\", className)}>\n {children}\n {showTooltip ? <Tooltip content=\"Copied!\">{copyButton}</Tooltip> : copyButton}\n </div>\n );\n}\n","\"use client\";\nimport {\n DateField as AriaDateField,\n DateFieldProps as AriaDateFieldProps,\n DateInput as AriaDateInput,\n DateInputProps,\n DateSegment,\n DateValue,\n ValidationResult,\n} from \"react-aria-components\";\nimport { Description, FieldError, Label } from \"../Field\";\nimport { getFieldGroupStyles } from \"../Field\";\nimport { composeTailwindRenderProps } from \"../../utils\";\n\n/**\n * DateField\n *\n * Segmented date input with Edges styling.\n */\nexport interface DateFieldProps<T extends DateValue> extends AriaDateFieldProps<T> {\n label?: string;\n description?: string;\n errorMessage?: string | ((validation: ValidationResult) => string);\n}\n\nexport function DateField<T extends DateValue>({ label, description, errorMessage, ...props }: DateFieldProps<T>) {\n return (\n <AriaDateField {...props} className={composeTailwindRenderProps(props.className, \"flex flex-col gap-1\")}>\n {label && <Label>{label}</Label>}\n <DateInput />\n {description && <Description>{description}</Description>}\n {typeof errorMessage === \"string\" ? <FieldError>{errorMessage}</FieldError> : null}\n </AriaDateField>\n );\n}\n\nfunction getSegmentStyles({ isPlaceholder, isDisabled }: { isPlaceholder?: boolean; isDisabled?: boolean }) {\n return [\n // Base\n \"inline box-content px-0.5 -my-0.5 rounded outline-none tabular-nums text-center transition-colors\",\n // Text color\n isPlaceholder ? \"text-text-muted italic\" : \"text-text-body\",\n // Disabled state\n isDisabled ? \"text-text-disabled cursor-not-allowed\" : \"cursor-text\",\n // Hover/focus visuals (data-* comes from react-aria-components)\n \"hover:bg-text-body/5\",\n \"data-[focused]:!outline-[1.5px] data-[focused]:!outline-[var(--control-focus-ring-color)] data-[focused]:![--tw-outline-style:solid]\",\n ]\n .filter(Boolean)\n .join(\" \");\n}\n\nexport function DateInput(props: Omit<DateInputProps, \"children\">) {\n return (\n <AriaDateInput\n className={(renderProps) =>\n getFieldGroupStyles({\n ...renderProps,\n className: \"min-w-[150px] px-2 py-1.5 text-sm flex items-center gap-0.5\",\n })\n }\n {...props}\n >\n {(segment) => (\n <DateSegment\n segment={segment}\n className={getSegmentStyles({\n isPlaceholder: segment.isPlaceholder,\n isDisabled: !segment.isEditable,\n })}\n />\n )}\n </AriaDateInput>\n );\n}\n","import { DialogProps, Dialog as RACDialog } from \"react-aria-components\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Dialog\n *\n * Generic modal/dialog surface with Edges defaults.\n */\nexport function Dialog(props: DialogProps) {\n // Ensure the dialog is properly labeled for accessibility\n return (\n <RACDialog\n {...props}\n className={twMerge(\n \"relative h-auto max-h-[inherit] overflow-auto outline-none [[data-placement]>&]:p-4\",\n props.className,\n )}\n role=\"dialog\"\n />\n );\n}\n","import {\n RangeCalendar as AriaRangeCalendar,\n RangeCalendarProps as AriaRangeCalendarProps,\n CalendarCell,\n CalendarGrid,\n CalendarGridBody,\n DateValue,\n Text,\n} from \"react-aria-components\";\nimport { CalendarGridHeader, CalendarHeader } from \"../Calendar\";\nimport { focusRing } from \"../../utils\";\n\n/**\n * RangeCalendar\n *\n * Calendar allowing selection of a date range.\n */\nexport interface RangeCalendarProps<T extends DateValue> extends Omit<AriaRangeCalendarProps<T>, \"visibleDuration\"> {\n errorMessage?: string;\n}\n\nfunction getCellClassName({\n selectionState,\n isDisabled,\n}: {\n selectionState: \"none\" | \"middle\" | \"cap\";\n isDisabled?: boolean;\n}) {\n const baseClasses = `${focusRing} w-full h-full flex items-center justify-center rounded-sm forced-color-adjust-none font-semibold`;\n\n const selectionStateClasses = {\n none: \"text-text-body group-hover:bg-gray-200 group-pressed:bg-gray-200\",\n middle: [\n \"group-hover:bg-gray-300 forced-colors:group-hover:bg-[Highlight]\",\n \"group-invalid:group-hover:bg-red-200 forced-colors:group-invalid:group-hover:bg-[Mark]\",\n \"group-pressed:bg-blue-300 forced-colors:group-pressed:bg-[Highlight] forced-colors:text-[HighlightText]\",\n \"group-invalid:group-pressed:bg-red-300 forced-colors:group-invalid:group-pressed:bg-[Mark]\",\n ].join(\" \"),\n cap: \" group-invalid:bg-red-600 forced-colors:bg-[Highlight] forced-colors:group-invalid:bg-[Mark] text-white forced-colors:text-white !bg-neutral-black\",\n };\n\n const disabledClasses = isDisabled ? \"text-textFaint dark:text-zinc-600 forced-colors:text-textFaint font-light\" : \"\";\n\n return [baseClasses, selectionStateClasses[selectionState], disabledClasses].filter(Boolean).join(\" \");\n}\n\nexport function RangeCalendar<T extends DateValue>({ errorMessage, ...props }: RangeCalendarProps<T>) {\n return (\n <AriaRangeCalendar {...props}>\n <CalendarHeader />\n <CalendarGrid className=\"w-full [&_td]:px-0\">\n <CalendarGridHeader />\n <CalendarGridBody>\n {(date) => (\n <CalendarCell\n date={date}\n className=\"selection-start:rounded-s-end selection-end:rounded-e-end [td:last-child_&]:rounded-e-end group h-9 w-9 cursor-default text-sm outline-none outside-month:text-gray-300 selected:bg-background-selected invalid:selected:bg-red-100 forced-colors:selected:bg-[Highlight] forced-colors:selected:text-white forced-colors:invalid:selected:bg-[Mark] [td:first-child_&]:rounded-s-full\"\n >\n {({\n formattedDate,\n isSelected,\n isSelectionStart,\n isSelectionEnd,\n isFocusVisible: _isFocusVisible,\n isDisabled,\n }) => (\n <span\n className={getCellClassName({\n selectionState:\n isSelected && (isSelectionStart || isSelectionEnd) ? \"cap\" : isSelected ? \"middle\" : \"none\",\n isDisabled,\n })}\n >\n {formattedDate}\n </span>\n )}\n </CalendarCell>\n )}\n </CalendarGridBody>\n </CalendarGrid>\n {errorMessage && (\n <Text slot=\"errorMessage\" className=\"text-sm text-red-600\">\n {errorMessage}\n </Text>\n )}\n </AriaRangeCalendar>\n );\n}\n","import { CalendarIcon } from \"lucide-react\";\nimport {\n DateRangePicker as AriaDateRangePicker,\n DateRangePickerProps as AriaDateRangePickerProps,\n DateValue,\n ValidationResult,\n} from \"react-aria-components\";\nimport { Button } from \"../Button\";\nimport { DateInput } from \"../DateField\";\nimport { Dialog } from \"../Dialog\";\nimport { Description, FieldError, FieldGroup, Label } from \"../Field\";\nimport { Popover } from \"../Popover\";\nimport { RangeCalendar } from \"../RangeCalendar\";\nimport { composeTailwindRenderProps } from \"../../utils\";\n\n/**\n * DateRangePicker\n *\n * Composed date range input with popover calendar.\n */\nexport interface DateRangePickerProps<T extends DateValue> extends AriaDateRangePickerProps<T> {\n label?: string;\n description?: string;\n errorMessage?: string | ((validation: ValidationResult) => string);\n}\n\nexport function DateRangePicker<T extends DateValue>({\n label,\n description,\n errorMessage,\n ...props\n}: DateRangePickerProps<T>) {\n return (\n <AriaDateRangePicker\n {...props}\n className={composeTailwindRenderProps(props.className, \"group flex flex-col gap-1\")}\n >\n {label && <Label>{label}</Label>}\n <FieldGroup className=\"w-auto min-w-[208px]\">\n <DateInput slot=\"start\" className=\"px-2 py-1.5 text-sm\" />\n <span\n aria-hidden=\"true\"\n className=\"text-gray-800 group-disabled:text-gray-200 dark:text-zinc-200 group-disabled:dark:text-zinc-600 forced-colors:text-[ButtonText] group-disabled:forced-colors:text-[GrayText]\"\n >\n –\n </span>\n <DateInput slot=\"end\" className=\"flex-1 px-2 py-1.5 text-sm\" />\n <Button variant=\"icon\" className=\"mr-1 w-6 rounded outline-offset-0\">\n <CalendarIcon aria-hidden className=\"h-4 w-4\" />\n </Button>\n </FieldGroup>\n {description && <Description>{description}</Description>}\n {typeof errorMessage === \"string\" ? <FieldError>{errorMessage}</FieldError> : null}\n <Popover>\n <Dialog>\n <RangeCalendar />\n </Dialog>\n </Popover>\n </AriaDateRangePicker>\n );\n}\n","import React from \"react\";\nimport { Heading } from \"../Heading\";\nimport { Button } from \"../Button\";\nimport { Icon } from \"../Icon\";\nimport { twMerge } from \"tailwind-merge\";\n\ntype BaseDialogHeaderProps = {\n title?: string;\n onClose: () => void;\n hideCloseIcon?: boolean;\n titleAlign?: \"left\" | \"center\";\n headerContent?: React.ReactNode;\n};\n\ntype WithBackArrow = BaseDialogHeaderProps & {\n hasBackArrow: true;\n onBack: () => void;\n};\n\ntype WithoutBackArrow = BaseDialogHeaderProps & {\n hasBackArrow?: false;\n onBack?: never;\n};\n\n/**\n * DialogHeader\n *\n * Header area for dialogs with optional back arrow.\n */\nexport type DialogHeaderProps = WithBackArrow | WithoutBackArrow;\n\nexport const DialogHeader: React.FC<DialogHeaderProps> = ({\n title,\n onClose,\n hideCloseIcon = false,\n titleAlign = \"left\",\n hasBackArrow = false,\n onBack,\n headerContent,\n}) => {\n return (\n <div\n className={twMerge(\n \"relative flex h-16 w-full items-center justify-between border-b px-4\",\n title && \"border-b\",\n titleAlign === \"center\" ? \"justify-center\" : \"\",\n )}\n >\n {hasBackArrow && (\n <Button variant=\"unstyled\" onPress={onBack} className=\"absolute left-4\">\n <Icon name=\"CaretLeft\" data-testid=\"back-arrow\" />\n </Button>\n )}\n {headerContent || (\n <>\n {title && <Heading size=\"xs\">{title}</Heading>}\n {onClose && !hideCloseIcon && (\n <Button variant=\"unstyled\" onPress={onClose} aria-label=\"Close dialog\">\n <Icon name=\"X\" data-testid=\"close-button\" />\n </Button>\n )}\n </>\n )}\n </div>\n );\n};\n","import { Component, ErrorInfo, ReactNode } from \"react\";\nimport { Card } from \"../Card\";\n\ninterface Props {\n children: ReactNode;\n fallback?: ReactNode;\n title?: string;\n}\n\ninterface State {\n hasError: boolean;\n error?: Error;\n}\n\nexport class ErrorBoundary extends Component<Props, State> {\n public state: State = {\n hasError: false,\n };\n\n public static getDerivedStateFromError(error: Error): State {\n return { hasError: true, error };\n }\n\n public componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n console.error(\"Error Boundary caught an error:\", error, errorInfo);\n }\n\n private handleRetry = () => {\n this.setState({ hasError: false, error: undefined });\n if (typeof window !== \"undefined\") {\n window.location.reload();\n }\n };\n\n public render() {\n if (this.state.hasError) {\n if (this.props.fallback) {\n return this.props.fallback;\n }\n\n return (\n <Card heading={this.props.title}>\n <div className=\"flex flex-col items-center justify-center gap-4 p-6\" data-testid=\"error-boundary\">\n <p className=\"text-red-500\">{this.state.error?.message || \"Something went wrong\"}</p>\n <button className=\"rounded bg-blue-500 px-4 py-2 text-white hover:bg-blue-600\" onClick={this.handleRetry}>\n Retry\n </button>\n </div>\n </Card>\n );\n }\n\n return this.props.children;\n }\n}\n","import React, { useEffect, useState } from \"react\";\nimport { ModalOverlay } from \"react-aria-components\";\nimport { Modal } from \"react-aria-components\";\nimport { Dialog } from \"../Dialog\";\nimport { DialogHeader } from \"../DialogHeader\";\nimport { ErrorBoundary } from \"../ErrorBoundary\";\nimport { Button } from \"../Button\";\n\nexport interface DrawerAction {\n label: string;\n onPress: () => void;\n variant?: \"default\" | \"primary\" | \"secondary\" | \"destructive\" | \"icon\" | \"link\" | \"unstyled\" | \"ghost\";\n size?: \"sm\" | \"md\" | \"lg\";\n isLoading?: boolean;\n isDisabled?: boolean;\n}\n\n/**\n * Drawer\n *\n * Sliding panel that anchors to screen edges.\n */\nexport interface DrawerProps {\n title?: string;\n headerContent?: React.ReactNode;\n children?: React.ReactNode;\n isOpen: boolean;\n slideInFrom?: \"left\" | \"right\";\n transparentOverlay?: boolean;\n onClose?: () => void;\n className?: string;\n // Actions footer props\n primaryAction?: DrawerAction;\n secondaryAction?: DrawerAction;\n footerContent?: React.ReactNode;\n /** Whether to include padding inside the content area. Defaults to true. */\n contentPadding?: boolean;\n /** Maximum width of the drawer. Defaults to \"400px\". Can be any valid CSS width value. */\n maxWidth?: string;\n}\n\nexport const Drawer: React.FC<DrawerProps> = ({\n children,\n title,\n headerContent,\n isOpen,\n slideInFrom = \"right\",\n transparentOverlay = false,\n onClose,\n className,\n primaryAction,\n secondaryAction,\n footerContent,\n contentPadding = true,\n maxWidth = \"400px\",\n}) => {\n const [isAnimating, setIsAnimating] = useState(false);\n\n useEffect(() => {\n if (isOpen) {\n // Small delay to ensure the element is positioned before animation starts\n const timer = setTimeout(() => setIsAnimating(true), 10);\n return () => clearTimeout(timer);\n } else {\n setIsAnimating(false);\n }\n }, [isOpen]);\n\n if (!isOpen) return null;\n\n const hasActions = primaryAction || secondaryAction;\n const hasFooter = hasActions || footerContent;\n\n return (\n <ErrorBoundary>\n <ModalOverlay\n isOpen={isOpen}\n onOpenChange={onClose}\n isDismissable\n className={`fixed inset-0 z-50 ${transparentOverlay ? \"bg-transparent\" : \"bg-black/50\"}`}\n >\n <Modal className=\"flex justify-end\" isDismissable>\n <Dialog\n className={`fixed bottom-0 top-0 z-50 flex w-full flex-col bg-background-surface shadow-xl duration-300 h-full min-h-0 overflow-hidden dark:bg-gray-800 ${\n isAnimating\n ? slideInFrom === \"right\"\n ? \"animate-in slide-in-from-right\"\n : \"animate-in slide-in-from-left\"\n : \"\"\n } ${className || \"\"}`}\n style={{\n // Explicit positioning\n [slideInFrom === \"right\" ? \"right\" : \"left\"]: 0,\n // Dynamic max width\n maxWidth: maxWidth,\n // Initial transform to position off-screen\n transform: !isAnimating\n ? slideInFrom === \"right\"\n ? \"translateX(100%)\"\n : \"translateX(-100%)\"\n : undefined,\n }}\n >\n {(title || headerContent) && (\n <DialogHeader title={title} headerContent={headerContent} onClose={onClose || (() => {})} />\n )}\n <div className={`flex-1 overflow-y-auto overscroll-contain ${contentPadding ? \"p-6\" : \"p-0\"}`}>\n {children}\n </div>\n {hasFooter && (\n <div className=\"flex h-28 w-full flex-col items-center justify-center border-t p-4\">\n {footerContent && <div className=\"flex h-10 justify-center\">{footerContent}</div>}\n {hasActions && (\n <div className=\"flex h-full w-full items-center justify-between gap-4\">\n {secondaryAction && (\n <Button\n size={secondaryAction.size || \"lg\"}\n fullWidth\n variant={secondaryAction.variant || \"secondary\"}\n onPress={secondaryAction.onPress}\n isLoading={secondaryAction.isLoading}\n isDisabled={secondaryAction.isDisabled}\n >\n {secondaryAction.label}\n </Button>\n )}\n {primaryAction && (\n <Button\n size={primaryAction.size || \"lg\"}\n fullWidth\n onPress={primaryAction.onPress}\n isLoading={primaryAction.isLoading}\n isDisabled={primaryAction.isDisabled}\n >\n {primaryAction.label}\n </Button>\n )}\n </div>\n )}\n </div>\n )}\n </Dialog>\n </Modal>\n </ModalOverlay>\n </ErrorBoundary>\n );\n};\n\nDrawer.displayName = \"Drawer\";\n","import { FormProps, Form as RACForm } from \"react-aria-components\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Form\n *\n * Accessibility-first form wrapper with consistent spacing.\n */\nexport function Form(props: FormProps) {\n return <RACForm {...props} className={twMerge(\"flex flex-col gap-4\", props.className)} />;\n}\n","import { Check } from \"lucide-react\";\nimport {\n ListBox as AriaListBox,\n ListBoxItem as AriaListBoxItem,\n ListBoxProps as AriaListBoxProps,\n Collection,\n Header,\n ListBoxItemProps,\n Section,\n SectionProps,\n composeRenderProps,\n} from \"react-aria-components\";\nimport { composeTailwindRenderProps, focusRing } from \"../../utils\";\n\n/**\n * ListBox\n *\n * Styled wrapper around `react-aria-components` ListBox and related parts\n * used in dropdowns and menus.\n */\ninterface ListBoxProps<T> extends Omit<AriaListBoxProps<T>, \"layout\" | \"orientation\"> {}\n\nexport function ListBox<T extends object>({ children, ...props }: ListBoxProps<T>) {\n return (\n <AriaListBox {...props} className={composeTailwindRenderProps(props.className, \"outline-0\")}>\n {children}\n </AriaListBox>\n );\n}\n\nexport function getItemStyles({\n isSelected,\n isDisabled,\n size,\n}: {\n isSelected?: boolean;\n isDisabled?: boolean;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n let styles = `${focusRing} group relative flex items-center gap-8 cursor-default select-none py-2 px-3 will-change-transform text-sm forced-color-adjust-none`;\n\n if (isSelected) {\n styles +=\n \" bg-background-input text-text-body forced-colors:bg-[Highlight] forced-colors:text-[HighlightText] -outline-offset-4 outline-white dark:outline-white forced-colors:outline-[HighlightText]\";\n } else {\n styles += \" dark:text-zinc-300 hover:bg-background-hover dark:hover:bg-zinc-700 -outline-offset-2\";\n }\n\n if (isDisabled) {\n styles += \" text-slate-300 dark:text-zinc-600 forced-colors:text-[GrayText]\";\n }\n\n if (size === \"sm\") {\n styles += \" py-1 text-xs\";\n }\n\n return styles;\n}\n\n/**\n * ListBoxItem with Edges styling.\n */\nexport function ListBoxItem(props: ListBoxItemProps) {\n const textValue = props.textValue || (typeof props.children === \"string\" ? props.children : undefined);\n\n return (\n <AriaListBoxItem {...props} textValue={textValue} className={(props) => getItemStyles(props)}>\n {composeRenderProps(props.children, (children) => (\n <>\n {children}\n <div className=\"absolute bottom-0 left-4 right-4 hidden h-px bg-white/20 forced-colors:bg-[HighlightText] [.group[data-selected]:has(+[data-selected])_&]:block\" />\n </>\n ))}\n </AriaListBoxItem>\n );\n}\n\nexport function getDropdownItemStyles({\n isDisabled,\n isFocused,\n isOpen,\n isSelected,\n}: {\n isDisabled?: boolean;\n isFocused?: boolean;\n isOpen?: boolean;\n isSelected?: boolean;\n}) {\n let styles =\n \"group flex items-center gap-4 cursor-default select-none py-2 pl-3 pr-1 outline-none text-sm forced-color-adjust-none hover:bg-background-hover dark:hover:bg-background-hover\";\n\n if (isDisabled) {\n styles += \" text-gray-300 dark:text-zinc-600 forced-colors:text-[GrayText]\";\n } else {\n styles += \" text-text-body dark:text-zinc-100\";\n }\n\n if (isFocused) {\n styles += \" bg-background-hover forced-colors:bg-[Highlight] forced-colors:text-[HighlightText]\";\n }\n\n if (isSelected) {\n styles += \" bg-background-selected font-medium forced-colors:bg-[Highlight] forced-colors:text-[HighlightText]\";\n }\n\n if (!isFocused && !isSelected && isOpen) {\n styles += \" bg-background-input\";\n }\n\n return styles;\n}\n\n/**\n * DropdownItem with selection checkmark and hover states.\n */\nexport function DropdownItem(props: ListBoxItemProps) {\n const textValue = props.textValue || (typeof props.children === \"string\" ? props.children : undefined);\n return (\n <AriaListBoxItem {...props} textValue={textValue} className={(props) => getDropdownItemStyles({ ...props })}>\n {composeRenderProps(props.children, (children, { isSelected }) => (\n <>\n <span className=\"flex flex-1 items-center gap-2 truncate font-normal group-selected:font-semibold\">\n {children}\n </span>\n <span className=\"flex w-5 items-center\">{isSelected && <Check className=\"h-4 w-4\" />}</span>\n </>\n ))}\n </AriaListBoxItem>\n );\n}\n\n/**\n * Section for grouping dropdown items.\n */\nexport interface DropdownSectionProps<T> extends SectionProps<T> {\n title?: string;\n}\n\nexport function DropdownSection<T extends object>(props: DropdownSectionProps<T>) {\n return (\n <Section className=\"after:block after:h-[5px] after:content-[''] first:-mt-[5px]\">\n <Header className=\"sticky -top-[5px] z-10 -mx-1 -mt-px truncate border-y bg-gray-100/60 px-4 py-1 text-sm font-semibold text-text-caption backdrop-blur-md supports-[-moz-appearance:none]:bg-gray-100 dark:border-y-zinc-700 dark:bg-zinc-700/60 dark:text-zinc-300 [&+*]:mt-1\">\n {props.title}\n </Header>\n <Collection items={props.items}>{props.children}</Collection>\n </Section>\n );\n}\n","import { twMerge } from \"tailwind-merge\";\n\nexport interface LoaderProps {\n /**\n * Optional className for custom styling\n */\n className?: string;\n /**\n * Size of the loader in pixels\n * @default 24\n */\n size?: number;\n /**\n * Color of the loader\n * @default \"text-action-primary\"\n */\n color?: string;\n}\n\nexport const Loader = ({ className, size = 24, color = \"text-action-primary\" }: LoaderProps) => {\n return (\n <div\n className={twMerge(\n \"inline-block animate-spin rounded-full border-2 border-solid border-current border-r-transparent\",\n color,\n className,\n )}\n style={{\n width: size,\n height: size,\n }}\n role=\"status\"\n aria-label=\"loading\"\n >\n <span className=\"sr-only\">Loading...</span>\n </div>\n );\n};\n","export interface LogoProps {\n className?: string;\n showWordmark?: boolean;\n}\n\nexport const Logo = ({ className, showWordmark = true }: LogoProps) => {\n // Use Tailwind fill classes for color, default to fill-[#333333] if no className\n const fillClass = className ? className : \"fill-[#333333]\";\n\n if (showWordmark) {\n return (\n <svg width=\"270\" height=\"80\" viewBox=\"0 0 270 80\" xmlns=\"http://www.w3.org/2000/svg\" className={fillClass}>\n <g clipPath=\"url(#clip0_796_283)\">\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M0.223654 20.2934C0.417233 19.8234 0.873598 19.517 1.37984 19.517H20.5909C21.282 19.517 21.8422 20.0798 21.8422 20.774V40.049C21.8422 40.5572 21.5375 41.0155 21.0702 41.2102C20.6028 41.405 20.0647 41.2977 19.7067 40.9385L0.495628 21.6635C0.137428 21.3041 0.030075 20.7633 0.223654 20.2934ZM4.40349 22.0311L19.3396 37.017V22.0311H4.40349Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M38.6458 20.2934C38.8394 19.8234 39.2958 19.517 39.802 19.517H59.013C59.7041 19.517 60.2642 20.0798 60.2642 20.774V40.049C60.2642 40.5572 59.9597 41.0155 59.4923 41.2102C59.025 41.405 58.4867 41.2977 58.1289 40.9385L38.9178 21.6635C38.5595 21.3041 38.4522 20.7633 38.6458 20.2934ZM42.8255 22.0311L57.7618 37.017V22.0311H42.8255Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M19.4347 58.8447C19.6283 58.3747 20.0847 58.0685 20.5909 58.0685H39.802C40.493 58.0685 41.0532 58.6312 41.0532 59.3255V78.6005C41.0532 79.1087 40.7486 79.567 40.2813 79.7617C39.8139 79.9562 39.2757 79.849 38.9178 79.49L19.7067 60.215C19.3485 59.8555 19.2411 59.3147 19.4347 58.8447ZM23.6146 60.5825L38.5508 75.5682V60.5825H23.6146Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M39.3227 58.1643C39.79 57.9695 40.3283 58.0768 40.6861 58.436L59.8972 77.711C60.2555 78.0703 60.3628 78.6113 60.1692 79.081C59.9756 79.551 59.5192 79.8575 59.013 79.8575H39.802C39.1109 79.8575 38.5508 79.2948 38.5508 78.6005V59.3255C38.5508 58.8173 38.8554 58.359 39.3227 58.1643ZM41.0532 62.3575V77.3433H55.9893L41.0532 62.3575Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M39.3227 19.6129C39.79 19.4182 40.3283 19.5254 40.6861 19.8846L59.8972 39.1595C60.2555 39.519 60.3628 40.0598 60.1692 40.5298C59.9756 40.9995 59.5192 41.306 59.013 41.306H39.802C39.1109 41.306 38.5508 40.7433 38.5508 40.049V20.7741C38.5508 20.2658 38.8554 19.8075 39.3227 19.6129ZM41.0532 23.8061V38.792H55.9893L41.0532 23.8061Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M39.3227 38.8885C39.79 38.694 40.3283 38.8012 40.6861 39.1602L59.8972 58.4352C60.2555 58.7945 60.3628 59.3355 60.1692 59.8055C59.9756 60.2752 59.5192 60.5817 59.013 60.5817H39.802C39.1109 60.5817 38.5508 60.019 38.5508 59.3247V40.0497C38.5508 39.5415 38.8554 39.0832 39.3227 38.8885ZM41.0532 43.0817V58.0675H55.9893L41.0532 43.0817Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M38.6458 39.569C38.8394 39.0992 39.2958 38.7927 39.802 38.7927H59.013C59.7041 38.7927 60.2642 39.3555 60.2642 40.0497V59.3247C60.2642 59.833 59.9597 60.2912 59.4923 60.486C59.025 60.6805 58.4867 60.5732 58.1289 60.2142L38.9178 40.9392C38.5595 40.5797 38.4522 40.039 38.6458 39.569ZM42.8255 41.3067L57.7618 56.2927V41.3067H42.8255Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M38.6458 58.8447C38.8394 58.3747 39.2958 58.0685 39.802 58.0685H59.013C59.7041 58.0685 60.2642 58.6312 60.2642 59.3255V78.6005C60.2642 79.1087 59.9597 79.567 59.4923 79.7617C59.025 79.9562 58.4867 79.849 58.1289 79.49L38.9178 60.215C38.5595 59.8555 38.4522 59.3147 38.6458 58.8447ZM42.8255 60.5825L57.7618 75.5682V60.5825H42.8255Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M58.5338 19.6129C59.0011 19.4182 59.5394 19.5254 59.8972 19.8846L79.1083 39.1595C79.4666 39.519 79.5739 40.0598 79.3803 40.5298C79.1867 40.9995 78.7303 41.306 78.2241 41.306H59.013C58.322 41.306 57.7618 40.7433 57.7618 40.049V20.7741C57.7618 20.2658 58.0664 19.8075 58.5338 19.6129ZM60.2643 23.8061V38.792H75.2006L60.2643 23.8061Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M58.5338 0.338803C59.0011 0.144135 59.5394 0.251385 59.8972 0.610565L79.1083 19.8855C79.4666 20.2449 79.5739 20.7857 79.3803 21.2556C79.1867 21.7256 78.7303 22.032 78.2241 22.032H59.013C58.322 22.032 57.7618 21.4692 57.7618 20.775V1.50003C57.7618 0.99174 58.0664 0.533468 58.5338 0.338803ZM60.2643 4.53208V19.5179H75.2006L60.2643 4.53208Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M57.8569 20.2934C58.0505 19.8234 58.5069 19.517 59.013 19.517H78.2241C78.9151 19.517 79.4753 20.0798 79.4753 20.774V40.049C79.4753 40.5572 79.1707 41.0155 78.7034 41.2102C78.236 41.405 77.6978 41.2977 77.3399 40.9385L58.1289 21.6635C57.7705 21.3041 57.6633 20.7633 57.8569 20.2934ZM62.0365 22.0311L76.9729 37.017V22.0311H62.0365Z\"\n />\n <path d=\"M269.838 49.4457H249.005C249.266 51.801 250.162 53.6985 251.695 55.1377C253.225 56.577 255.134 57.2967 257.416 57.2967C259.307 57.2967 260.887 56.8715 262.159 56.021C263.463 55.1377 264.408 53.9927 264.996 52.5862H269.251C268.502 54.9415 267.084 56.937 264.996 58.5725C262.943 60.208 260.414 61.026 257.416 61.026C255.069 61.026 252.917 60.4697 250.961 59.3575C249.037 58.2127 247.504 56.6587 246.363 54.696C245.255 52.7332 244.7 50.558 244.7 48.17C244.7 45.782 245.255 43.6067 246.363 41.644C247.504 39.6812 249.037 38.1437 250.961 37.0315C252.917 35.8867 255.069 35.3142 257.416 35.3142C259.73 35.3142 261.833 35.8702 263.724 36.9825C265.615 38.0947 267.098 39.6485 268.176 41.644C269.283 43.6395 269.838 45.913 269.838 48.4645V49.4457ZM257.416 39.0432C255.263 39.0432 253.439 39.6812 251.939 40.957C250.47 42.2327 249.542 43.9337 249.152 46.06H265.583C265.192 43.9992 264.262 42.3145 262.796 41.006C261.36 39.6975 259.568 39.0432 257.416 39.0432Z\" />\n <path d=\"M228.356 60.5352V35.8049H232.219V39.7794H232.464C233.05 38.5689 233.963 37.5712 235.202 36.7862C236.474 35.9684 237.974 35.5594 239.701 35.5594H243.125V39.4359H239.701C237.517 39.4359 235.757 40.1554 234.42 41.5949C233.083 43.0342 232.414 44.9152 232.414 47.2377V60.5352H228.356Z\" />\n <path d=\"M208.607 61.0259C205.64 61.0259 203.326 60.1262 201.663 58.3272C200 56.4952 199.169 53.8947 199.169 50.5252V35.8047H203.228V49.8874C203.228 52.2427 203.766 54.0744 204.842 55.3829C205.95 56.6587 207.532 57.2967 209.586 57.2967C211.02 57.2967 212.308 56.9694 213.449 56.3152C214.623 55.6284 215.536 54.6959 216.188 53.5184C216.84 52.3407 217.166 50.9997 217.166 49.4949V35.8047H221.225V60.5352H217.313V56.5607H217.068C216.286 57.9019 215.161 58.9814 213.694 59.7992C212.226 60.6169 210.531 61.0259 208.607 61.0259Z\" />\n <path d=\"M186.736 39.534V56.806H194.756V60.5352H182.677V39.534H177.199V35.8047H182.677V29.5732H186.736V35.8047H193.24V39.534H186.736Z\" />\n <path d=\"M156.585 60.5352H151.988L158.394 48.0227L152.33 35.8047H156.976L162.062 46.0599H165.388L170.474 35.8047H175.022L168.958 48.0227L175.365 60.5352H170.67L165.29 49.7892H162.013L156.585 60.5352Z\" />\n <path d=\"M150.138 49.1315H129.304C129.565 51.4867 130.461 53.3842 131.994 54.8235C133.526 56.2627 135.433 56.9825 137.715 56.9825C139.606 56.9825 141.188 56.5572 142.459 55.7067C143.763 54.8235 144.709 53.6785 145.296 52.272H149.551C148.801 54.6272 147.382 56.6227 145.296 58.2582C143.242 59.8937 140.715 60.7118 137.715 60.7118C135.368 60.7118 133.216 60.1555 131.26 59.0432C129.336 57.8985 127.804 56.3445 126.663 54.3817C125.554 52.419 125 50.2437 125 47.8557C125 45.4677 125.554 43.2925 126.663 41.3298C127.804 39.367 129.336 37.8295 131.26 36.7173C133.216 35.5725 135.368 35 137.715 35C140.03 35 142.133 35.556 144.024 36.6682C145.915 37.7805 147.399 39.3342 148.475 41.3298C149.583 43.3252 150.138 45.5987 150.138 48.1502V49.1315ZM137.715 38.729C135.564 38.729 133.738 39.367 132.238 40.6427C130.771 41.9185 129.842 43.6195 129.45 45.7458H145.883C145.491 43.685 144.562 42.0002 143.095 40.6917C141.661 39.3832 139.867 38.729 137.715 38.729Z\" />\n <path d=\"M116.961 60.5353H112.559V30.4072H101.164V26.1875H128.307V30.4072H116.961V60.5353Z\" />\n </g>\n <defs>\n <clipPath id=\"clip0_796_283\">\n <rect width=\"270\" height=\"80\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n }\n // Logo only\n return (\n <svg width=\"80\" height=\"80\" viewBox=\"0 0 80 80\" xmlns=\"http://www.w3.org/2000/svg\" className={fillClass}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M0.223654 20.2934C0.417233 19.8234 0.873598 19.517 1.37984 19.517H20.5909C21.282 19.517 21.8422 20.0798 21.8422 20.774V40.049C21.8422 40.5572 21.5375 41.0155 21.0702 41.2102C20.6028 41.405 20.0647 41.2977 19.7067 40.9385L0.495628 21.6635C0.137428 21.3041 0.030075 20.7633 0.223654 20.2934ZM4.40349 22.0311L19.3396 37.017V22.0311H4.40349Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M38.6458 20.2934C38.8394 19.8234 39.2958 19.517 39.802 19.517H59.013C59.7041 19.517 60.2642 20.0798 60.2642 20.774V40.049C60.2642 40.5572 59.9597 41.0155 59.4923 41.2102C59.025 41.405 58.4867 41.2977 58.1289 40.9385L38.9178 21.6635C38.5595 21.3041 38.4522 20.7633 38.6458 20.2934ZM42.8255 22.0311L57.7618 37.017V22.0311H42.8255Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M19.4347 58.8447C19.6283 58.3747 20.0847 58.0685 20.5909 58.0685H39.802C40.493 58.0685 41.0532 58.6312 41.0532 59.3255V78.6005C41.0532 79.1087 40.7486 79.567 40.2813 79.7617C39.8139 79.9562 39.2757 79.849 38.9178 79.49L19.7067 60.215C19.3485 59.8555 19.2411 59.3147 19.4347 58.8447ZM23.6146 60.5825L38.5508 75.5682V60.5825H23.6146Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M39.3227 58.1643C39.79 57.9695 40.3283 58.0768 40.6861 58.436L59.8972 77.711C60.2555 78.0703 60.3628 78.6113 60.1692 79.081C59.9756 79.551 59.5192 79.8575 59.013 79.8575H39.802C39.1109 79.8575 38.5508 79.2948 38.5508 78.6005V59.3255C38.5508 58.8173 38.8554 58.359 39.3227 58.1643ZM41.0532 62.3575V77.3433H55.9893L41.0532 62.3575Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M39.3227 19.6129C39.79 19.4182 40.3283 19.5254 40.6861 19.8846L59.8972 39.1595C60.2555 39.519 60.3628 40.0598 60.1692 40.5298C59.9756 40.9995 59.5192 41.306 59.013 41.306H39.802C39.1109 41.306 38.5508 40.7433 38.5508 40.049V20.7741C38.5508 20.2658 38.8554 19.8075 39.3227 19.6129ZM41.0532 23.8061V38.792H55.9893L41.0532 23.8061Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M39.3227 38.8885C39.79 38.694 40.3283 38.8012 40.6861 39.1602L59.8972 58.4352C60.2555 58.7945 60.3628 59.3355 60.1692 59.8055C59.9756 60.2752 59.5192 60.5817 59.013 60.5817H39.802C39.1109 60.5817 38.5508 60.019 38.5508 59.3247V40.0497C38.5508 39.5415 38.8554 39.0832 39.3227 38.8885ZM41.0532 43.0817V58.0675H55.9893L41.0532 43.0817Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M38.6458 39.569C38.8394 39.0992 39.2958 38.7927 39.802 38.7927H59.013C59.7041 38.7927 60.2642 39.3555 60.2642 40.0497V59.3247C60.2642 59.833 59.9597 60.2912 59.4923 60.486C59.025 60.6805 58.4867 60.5732 58.1289 60.2142L38.9178 40.9392C38.5595 40.5797 38.4522 40.039 38.6458 39.569ZM42.8255 41.3067L57.7618 56.2927V41.3067H42.8255Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M38.6458 58.8447C38.8394 58.3747 39.2958 58.0685 39.802 58.0685H59.013C59.7041 58.0685 60.2642 58.6312 60.2642 59.3255V78.6005C60.2642 79.1087 59.9597 79.567 59.4923 79.7617C59.025 79.9562 58.4867 79.849 58.1289 79.49L38.9178 60.215C38.5595 59.8555 38.4522 59.3147 38.6458 58.8447ZM42.8255 60.5825L57.7618 75.5682V60.5825H42.8255Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M58.5338 19.6129C59.0011 19.4182 59.5394 19.5254 59.8972 19.8846L79.1083 39.1595C79.4666 39.519 79.5739 40.0598 79.3803 40.5298C79.1867 40.9995 78.7303 41.306 78.2241 41.306H59.013C58.322 41.306 57.7618 40.7433 57.7618 40.049V20.7741C57.7618 20.2658 58.0664 19.8075 58.5338 19.6129ZM60.2643 23.8061V38.792H75.2006L60.2643 23.8061Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M58.5338 0.338803C59.0011 0.144135 59.5394 0.251385 59.8972 0.610565L79.1083 19.8855C79.4666 20.2449 79.5739 20.7857 79.3803 21.2556C79.1867 21.7256 78.7303 22.032 78.2241 22.032H59.013C58.322 22.032 57.7618 21.4692 57.7618 20.775V1.50003C57.7618 0.99174 58.0664 0.533468 58.5338 0.338803ZM60.2643 4.53208V19.5179H75.2006L60.2643 4.53208Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M57.8569 20.2934C58.0505 19.8234 58.5069 19.517 59.013 19.517H78.2241C78.9151 19.517 79.4753 20.0798 79.4753 20.774V40.049C79.4753 40.5572 79.1707 41.0155 78.7034 41.2102C78.236 41.405 77.6978 41.2977 77.3399 40.9385L58.1289 21.6635C57.7705 21.3041 57.6633 20.7633 57.8569 20.2934ZM62.0365 22.0311L76.9729 37.017V22.0311H62.0365Z\"\n />\n </svg>\n );\n};\n","import {\n NumberField as AriaNumberField,\n NumberFieldProps as AriaNumberFieldProps,\n Button as AriaButton,\n ValidationResult,\n Group,\n Input as AriaInput,\n} from \"react-aria-components\";\nimport { Description, FieldError, Label, getInputStateStyles, BaseInputProps } from \"../Field\";\nimport { composeTailwindRenderProps } from \"../../utils\";\nimport { twMerge } from \"tailwind-merge\";\nimport type { Size } from \"../../utils/controlStyles\";\nimport { useId } from \"react\";\nimport { Icon } from \"../Icon\";\n\nconst getNumberFieldStyles = (props: {\n isInvalid?: boolean;\n isDisabled?: boolean;\n isFocused?: boolean;\n transparent?: boolean;\n size?: Size;\n className?: string;\n}): string => {\n return twMerge(\n getInputStateStyles({\n isInvalid: props.isInvalid,\n isDisabled: props.isDisabled,\n isFocused: props.isFocused,\n }),\n props.transparent ? \"bg-transparent\" : \"bg-background-input\",\n \"pr-9\", // Space for stepper buttons\n \"[appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none\", // Hide native spinners\n props.className,\n );\n};\n\n/**\n * NumberField\n *\n * Numeric input with stepper controls and validation.\n */\nexport interface NumberFieldProps extends Omit<AriaNumberFieldProps, \"size\" | \"className\">, BaseInputProps {\n value?: number;\n defaultValue?: number;\n onChange?: (value: number) => void;\n minValue?: number;\n maxValue?: number;\n step?: number;\n formatOptions?: Intl.NumberFormatOptions;\n id?: string;\n label?: string;\n description?: string;\n errorMessage?: string | ((validation: ValidationResult) => string);\n tooltip?: string;\n isRequired?: boolean;\n className?: string;\n validationResult?: ValidationResult;\n}\n\nexport function NumberField({\n label,\n description,\n errorMessage,\n size,\n tooltip,\n isRequired,\n transparent,\n validationResult,\n ...props\n}: NumberFieldProps) {\n const id = useId();\n\n return (\n <AriaNumberField\n {...props}\n id={id}\n isRequired={isRequired}\n className={composeTailwindRenderProps(props.className, \"group flex flex-col gap-1\")}\n step={props.step ?? 1}\n onChange={(value) => {\n if (typeof value === \"number\") {\n if (props.maxValue != null && value > props.maxValue) {\n props.onChange?.(props.maxValue);\n } else if (props.minValue != null && value < props.minValue) {\n props.onChange?.(props.minValue);\n } else {\n props.onChange?.(value);\n }\n }\n }}\n isInvalid={\n !!errorMessage ||\n (typeof props.value === \"number\" &&\n ((props.maxValue != null && props.value > props.maxValue) ||\n (props.minValue != null && props.value < props.minValue)))\n }\n >\n {({ isDisabled, isInvalid }) => {\n const isValueInvalid = isInvalid || !!errorMessage;\n return (\n <div className=\"flex flex-col\">\n {label && (\n <Label size={size} tooltip={tooltip} isRequired={isRequired} htmlFor={id}>\n {label}\n </Label>\n )}\n <div className=\"relative\">\n <Group className=\"relative\">\n <AriaInput\n className={getNumberFieldStyles({\n isInvalid: isValueInvalid,\n isDisabled,\n transparent,\n size,\n className: typeof props.className === \"string\" ? props.className : undefined,\n })}\n />\n <div className=\"absolute inset-y-[1px] right-[1px] flex flex-col divide-y border-l overflow-hidden rounded-r-[calc(var(--control-border-radius)-1px)]\">\n <AriaButton\n slot=\"increment\"\n isDisabled={isDisabled}\n className=\"flex h-1/2 w-7 items-center justify-center bg-background-input hover:bg-background-input-hover active:bg-background-input-active disabled:cursor-not-allowed disabled:opacity-50\"\n >\n <Icon name=\"CaretUp\" size={14} />\n </AriaButton>\n <AriaButton\n slot=\"decrement\"\n isDisabled={isDisabled}\n className=\"flex h-1/2 w-7 items-center justify-center bg-background-input hover:bg-background-input-hover active:bg-background-input-active disabled:cursor-not-allowed disabled:opacity-50\"\n >\n <Icon name=\"CaretDown\" size={14} />\n </AriaButton>\n </div>\n </Group>\n </div>\n {description && (\n <Description size={size} className=\"mt-3\">\n {description}\n </Description>\n )}\n {errorMessage && (\n <FieldError size={size} className=\"mt-3\">\n {typeof errorMessage === \"function\" ? errorMessage(validationResult!) : errorMessage}\n </FieldError>\n )}\n </div>\n );\n }}\n </AriaNumberField>\n );\n}\n","import { useRef } from \"react\";\nimport { type Key, type ValidationResult } from \"react-aria-components\";\n\nimport { Autocomplete } from \"../Autocomplete/Autocomplete\";\nimport { Icon } from \"../Icon/Icon\";\n\nexport interface Place {\n id: string;\n place_name: string;\n place_type: string[];\n center: [number, number];\n}\n\ninterface MapboxResponse {\n features: Place[];\n type: string;\n}\n\n// Type guard to validate MapboxResponse shape\nfunction isMapboxResponse(data: unknown): data is MapboxResponse {\n return (\n typeof data === \"object\" &&\n data !== null &&\n \"features\" in data &&\n Array.isArray(data.features) &&\n \"type\" in data &&\n typeof data.type === \"string\"\n );\n}\n\ntype SearchType = \"country\" | \"region\" | \"district\" | \"place\" | \"locality\" | \"neighborhood\" | \"address\" | \"street\";\n\n/**\n * PlaceSearch\n *\n * Location search component with autocomplete; emits a `Place` value on\n * selection.\n */\nexport interface PlaceSearchProps {\n label?: string;\n selectedKey?: Key | null;\n defaultSelectedKey?: Key | null;\n onSelectionChange?: (key: Key | null) => void;\n placeholder?: string;\n errorMessage?: string | ((validation: ValidationResult) => string);\n description?: string;\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n tooltip?: string;\n isRequired?: boolean;\n isDisabled?: boolean;\n showErrors?: boolean;\n autoFocus?: boolean;\n onSelect: (place: Place) => void;\n searchTypes?: SearchType[];\n defaultFilter?: (textValue: string, inputValue: string) => boolean;\n validationResult?: ValidationResult;\n countryRestrictions?: string[]; // Array of ISO 3166-1 alpha-2 country codes\n proximity?: \"ip\" | [number, number]; // Either \"ip\" for IP-based location or [longitude, latitude] coordinates\n}\n\nconst MAPBOX_TOKEN = process.env.NEXT_PUBLIC_MAPBOX_ACCESS_TOKEN || \"\";\n\nexport function PlaceSearch({\n label = \"Search for a place\",\n selectedKey,\n defaultSelectedKey,\n onSelectionChange,\n placeholder = \"Enter a location...\",\n errorMessage,\n description,\n size = \"md\",\n tooltip,\n isRequired,\n isDisabled,\n showErrors = true,\n autoFocus = false,\n onSelect,\n searchTypes = [\"place\", \"address\"],\n defaultFilter,\n validationResult,\n countryRestrictions,\n proximity = \"ip\", // Set IP-based location as default\n}: PlaceSearchProps) {\n // Use a WeakMap to store additional data for each item\n const itemDataRef = useRef(new WeakMap<{ id: string; name: string }, { type: string; center: [number, number] }>());\n\n // Store the last loaded items for use in selection\n const loadedItemsRef = useRef<{ id: string; name: string }[]>([]);\n\n const requestConfig = {\n requestType: \"REST\" as const,\n method: \"GET\" as const,\n url: \"https://api.mapbox.com/geocoding/v5/mapbox.places/{q}.json\",\n extraParams: {\n access_token: MAPBOX_TOKEN,\n types: searchTypes.join(\",\"),\n limit: \"5\",\n ...(countryRestrictions?.length ? { country: countryRestrictions.join(\",\").toLowerCase() } : {}),\n ...(proximity\n ? {\n proximity: proximity === \"ip\" ? \"ip\" : proximity.join(\",\"),\n }\n : {}),\n },\n shouldLoad: (filterText: string) => {\n return filterText.length > 0;\n },\n transformResponse: (data: unknown) => {\n if (!isMapboxResponse(data)) return [];\n\n const items = data.features.map((feature) => {\n const item = {\n id: feature.id,\n name: feature.place_name,\n };\n // Store additional data in the WeakMap\n itemDataRef.current.set(item, {\n type: feature.place_type[0],\n center: feature.center,\n });\n return item;\n });\n\n // Store the items for later use\n if (items.length > 0) {\n loadedItemsRef.current = items;\n }\n\n return items;\n },\n };\n\n const renderItem = (item: { id: string; name: string }) => {\n const itemData = itemDataRef.current.get(item);\n\n // Split the place name into parts by commas for better formatting\n const nameParts = item.name.split(\", \");\n const primaryText = nameParts[0];\n const secondaryText = nameParts.slice(1).join(\", \");\n\n return (\n <div className=\"flex items-center gap-3 py-0.5\">\n <Icon\n name={\n itemData?.type === \"address\"\n ? \"MapPin\"\n : itemData?.type === \"place\"\n ? \"Buildings\"\n : itemData?.type === \"region\"\n ? \"MapPinArea\"\n : itemData?.type === \"country\"\n ? \"Flag\"\n : \"Circle\"\n }\n className=\"h-5 w-5 flex-shrink-0 text-text-muted\"\n />\n <div className=\"flex min-w-0 flex-col\">\n <span className=\"truncate font-medium text-text-body\">{primaryText}</span>\n {secondaryText && <span className=\"truncate text-sm text-text-muted\">{secondaryText}</span>}\n </div>\n </div>\n );\n };\n\n const renderLeftIcon = (isLoading: boolean) => {\n if (isLoading) {\n return <Icon name=\"CircleNotch\" className=\"h-4 w-4 animate-spin text-text-muted\" />;\n }\n return <Icon name=\"MagnifyingGlass\" className=\"h-4 w-4 text-text-muted\" />;\n };\n\n return (\n <Autocomplete\n data-testid=\"autocomplete\"\n data-config={JSON.stringify({\n types: searchTypes.join(\",\"),\n country: countryRestrictions?.join(\",\").toLowerCase(),\n proximity: proximity === \"ip\" ? \"ip\" : proximity?.join(\",\"),\n })}\n label={label}\n selectedKey={selectedKey}\n defaultSelectedKey={defaultSelectedKey}\n onSelectionChange={(key) => {\n onSelectionChange?.(key);\n if (key) {\n // Use the stored items instead of creating an empty array\n const items = loadedItemsRef.current;\n const selected = items.find((item) => item.id === key);\n\n if (selected) {\n const itemData = itemDataRef.current.get(selected);\n\n if (itemData) {\n onSelect({\n id: selected.id,\n place_name: selected.name,\n place_type: [itemData.type],\n center: itemData.center,\n });\n }\n }\n }\n }}\n requestConfig={requestConfig}\n placeholder={placeholder}\n errorMessage={errorMessage}\n description={description}\n size={size}\n tooltip={tooltip}\n isRequired={isRequired}\n isDisabled={isDisabled}\n showErrors={showErrors}\n autoFocus={autoFocus}\n renderItem={renderItem}\n renderLeftIcon={renderLeftIcon}\n defaultFilter={defaultFilter}\n validationResult={validationResult}\n />\n );\n}\n","import { ProgressBar as AriaProgressBar, ProgressBarProps as AriaProgressBarProps } from \"react-aria-components\";\nimport { composeTailwindRenderProps } from \"../../utils\";\n\n/**\n * ProgressBar\n *\n * Linear progress indicator with optional labels.\n */\nexport interface ProgressBarProps extends AriaProgressBarProps {\n label?: string;\n rightLabel?: string;\n progressWidth?: number;\n hideLabels?: boolean;\n}\n\nexport function ProgressBar({ label, rightLabel, progressWidth = 64, hideLabels = false, ...props }: ProgressBarProps) {\n return (\n <AriaProgressBar {...props} className={composeTailwindRenderProps(props.className, \"flex flex-col gap-1\")}>\n {({ percentage, valueText, isIndeterminate }) => (\n <>\n {!hideLabels && (\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"text-sm text-text-heading\">{label}</span>\n <span className=\"text-sm text-text-heading\">{rightLabel || valueText}</span>\n </div>\n )}\n <div\n className={`relative h-2 w-${progressWidth} overflow-hidden rounded-full bg-background-muted outline-none`}\n >\n <div\n className={`absolute top-0 h-full rounded-full bg-blue-600 dark:bg-blue-500 forced-colors:bg-[Highlight] ${isIndeterminate ? \"left-full duration-1000 ease-out animate-in slide-out-to-right-full repeat-infinite [--tw-enter-translate-x:calc(-16rem-100%)]\" : \"left-0\"}`}\n style={{ width: (isIndeterminate ? 40 : percentage) + \"%\" }}\n />\n </div>\n </>\n )}\n </AriaProgressBar>\n );\n}\n","\"use client\";\nimport React, { useState, useRef } from \"react\";\nimport {\n Select as AriaSelect,\n SelectProps as AriaSelectProps,\n ListBox,\n SelectValue,\n ValidationResult,\n Key,\n} from \"react-aria-components\";\nimport { Description, Label, FieldError, InputWrapper, getInputBaseStyles } from \"../Field\";\nimport { Button } from \"../Button\";\nimport { DropdownSection, DropdownSectionProps } from \"../ListBox\";\nimport { ListBoxItem } from \"../ListBoxItem\";\nimport { Popover } from \"../Popover\";\nimport { Icon } from \"../Icon\";\nimport { composeTailwindRenderProps } from \"../../utils\";\nimport { twMerge } from \"tailwind-merge\";\nimport { controlStyles, Size } from \"../../utils/controlStyles\";\n\n// Replace tv() with a regular function\ntype SelectVariants = {\n isDisabled?: boolean;\n size?: Size;\n isOpen?: boolean;\n isInvalid?: boolean;\n};\n\nfunction getSelectValueClassName(size: Size = \"md\") {\n // Use controlStyles for consistent text sizing\n return `flex-1 text-start data-[placeholder]:text-text-placeholder ${controlStyles[size].text}`;\n}\n\nexport type SelectVariantType = SelectVariants;\n\n// Define a custom hook for focus handling that works with any element\nfunction useElementFocus() {\n const handleFocus = React.useCallback(\n (e: React.FocusEvent<Element>, onFocus?: (e: React.FocusEvent<Element>) => void) => {\n onFocus?.(e);\n },\n [],\n );\n\n const handleBlur = React.useCallback(\n (e: React.FocusEvent<Element>, onBlur?: (e: React.FocusEvent<Element>) => void) => {\n onBlur?.(e);\n },\n [],\n );\n\n return { handleFocus, handleBlur };\n}\n\n/**\n * Interface defining the shape of items in the Select component\n */\nexport interface SelectItem<T = unknown> {\n /** Unique identifier for the item */\n id: string;\n /** Display label for the item */\n label: string;\n /** Value associated with the item */\n value: T;\n}\n\n/**\n * Props for the Select component\n * @template T - The type of the items, must extend SelectItem\n */\nexport interface SelectProps<T extends SelectItem> extends Omit<AriaSelectProps<T>, \"children\" | \"onSelectionChange\"> {\n /** Label text displayed above the select */\n label?: string;\n /** Helper text displayed below the select */\n description?: string;\n /** Error message or function to generate error message */\n errorMessage?: string | ((validation: ValidationResult) => React.ReactNode);\n /** Collection of items to display in the select */\n items?: Iterable<T>;\n /** Size variant of the select */\n size?: Size;\n /** Render function for items or static children */\n children?: React.ReactNode | ((item: T) => React.ReactNode);\n /** Custom render function for individual items. When provided, items prop is used to render items automatically */\n renderItem?: (item: T) => React.ReactNode;\n /** Currently selected item's id. Uses the SelectItem's `id` field for stable selection tracking */\n selectedKey?: Key;\n /** Default selected item's id for uncontrolled usage */\n defaultSelectedKey?: Key;\n /** Callback when selection changes, provides the selected item's id */\n onSelectionChange?: (key: Key) => void;\n /** Whether to show error states */\n showErrors?: boolean;\n /** Tooltip text */\n tooltip?: string;\n /** Whether the field is required */\n isRequired?: boolean;\n /** Validation result object */\n validationResult?: ValidationResult;\n /** Whether to use transparent background */\n transparent?: boolean;\n}\n\nexport function Select<T extends SelectItem>({\n label,\n description,\n errorMessage,\n children,\n items,\n renderItem,\n size = \"md\",\n selectedKey: controlledSelectedKey,\n defaultSelectedKey,\n onSelectionChange,\n placeholder,\n showErrors = false,\n tooltip,\n isRequired,\n transparent,\n ...props\n}: SelectProps<T>) {\n const [internalSelectedKey, setInternalSelectedKey] = useState<Key | null>(null);\n const [triggerWidth, setTriggerWidth] = useState<number | null>(null);\n const selectedKey = controlledSelectedKey ?? internalSelectedKey ?? defaultSelectedKey;\n const { handleFocus, handleBlur } = useElementFocus();\n\n const handleSelectionChange = (key: Key) => {\n if (onSelectionChange) {\n onSelectionChange(key);\n } else {\n setInternalSelectedKey(key); // Update internal state if uncontrolled\n }\n };\n\n const selectRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLDivElement>(null);\n\n return (\n <AriaSelect\n {...props}\n selectedKey={selectedKey}\n defaultSelectedKey={defaultSelectedKey}\n onSelectionChange={handleSelectionChange}\n placeholder={placeholder}\n className={composeTailwindRenderProps(props.className, \"group flex w-full flex-col\")}\n ref={selectRef}\n onOpenChange={(isOpen) => {\n if (isOpen && triggerRef.current) {\n setTriggerWidth(triggerRef.current.offsetWidth);\n } else if (!isOpen) {\n selectRef.current?.blur();\n }\n }}\n >\n {({ isDisabled, isInvalid, isOpen }: { isDisabled: boolean; isInvalid: boolean; isOpen: boolean }) => (\n <div className=\"flex flex-col\">\n {label && (\n <Label size={size} tooltip={tooltip} isRequired={isRequired}>\n {label}\n </Label>\n )}\n <InputWrapper>\n <div ref={triggerRef}>\n <Button\n variant=\"unstyled\"\n className={twMerge(\n getInputBaseStyles({\n isInvalid: isInvalid || (showErrors && !!errorMessage),\n isDisabled,\n isFocused: isOpen,\n transparent,\n size,\n }),\n // Keep left padding consistent across sizes\n \"flex items-center text-start gap-4 cursor-pointer pl-[var(--control-padding-sm)]\",\n )}\n onFocus={(e) => handleFocus(e, props.onFocus)}\n onBlur={(e) => handleBlur(e, props.onBlur)}\n data-open={isOpen}\n >\n <SelectValue className={getSelectValueClassName(size)} />\n <Icon\n name=\"CaretDown\"\n aria-hidden\n className={twMerge(\n \"h-4 w-4 text-text-body group-disabled:text-gray-200 forced-colors:text-[ButtonText] transition-transform\",\n isOpen && \"rotate-180\",\n )}\n />\n </Button>\n </div>\n </InputWrapper>\n {description && (\n <Description size={size} className=\"mt-3\">\n {description}\n </Description>\n )}\n {showErrors && (\n <FieldError size={size} className=\"mt-3 text-feedback-error-text\">\n {typeof errorMessage === \"function\" && props.validationResult\n ? errorMessage(props.validationResult)\n : typeof errorMessage === \"string\"\n ? errorMessage\n : null}\n </FieldError>\n )}\n <Popover\n className=\"bg-background-input shadow-xl border border-border-input/20 backdrop-blur-sm\"\n style={{ minWidth: triggerWidth ? `${triggerWidth}px` : undefined }}\n >\n <ListBox items={items} className=\"w-full max-h-[300px] overflow-auto bg-background-input p-0 outline-0\">\n {renderItem && items\n ? (item: T) => (\n <ListBoxItem key={item.id} id={item.id} textValue={item.label} size={size}>\n {renderItem(item)}\n </ListBoxItem>\n )\n : children}\n </ListBox>\n </Popover>\n </div>\n )}\n </AriaSelect>\n );\n}\n\nexport function SelectSection<T extends object>(props: DropdownSectionProps<T>) {\n return <DropdownSection {...props} />;\n}\n","import React from \"react\";\nimport { Switch as AriaSwitch, SwitchProps as AriaSwitchProps } from \"react-aria-components\";\nimport { composeTailwindRenderProps, focusRing } from \"../../utils\";\n\nexport interface SwitchProps extends Omit<AriaSwitchProps, \"children\"> {\n children: React.ReactNode;\n}\n\nfunction getTrackClassName({ isSelected, isDisabled }: { isSelected: boolean; isDisabled: boolean }) {\n const baseClasses =\n \"flex h-4 w-7 px-px items-center shrink-0 cursor-default rounded-full transition duration-200 ease-in-out shadow-inner border border-transparent\";\n const focusRingClasses = focusRing;\n\n const selectedClasses = isSelected\n ? \"bg-gray-700 dark:bg-zinc-300 forced-colors:!bg-[Highlight] group-pressed:bg-gray-800 dark:group-pressed:bg-zinc-200\"\n : \"bg-gray-400 dark:bg-zinc-400 group-pressed:bg-gray-500 dark:group-pressed:bg-zinc-300\";\n\n const disabledClasses = isDisabled\n ? \"bg-gray-200 dark:bg-zinc-700 forced-colors:group-selected:!bg-[GrayText] forced-colors:border-[GrayText]\"\n : \"\";\n\n return [baseClasses, focusRingClasses, selectedClasses, disabledClasses].filter(Boolean).join(\" \");\n}\n\nfunction getHandleClassName({ isSelected, isDisabled }: { isSelected: boolean; isDisabled: boolean }) {\n const baseClasses =\n \"h-3 w-3 transform rounded-full bg-white dark:bg-zinc-900 outline-none shadow transition duration-200 ease-in-out\";\n\n const selectedClasses = isSelected ? \"translate-x-[100%]\" : \"translate-x-0\";\n\n const disabledClasses = isDisabled ? \"forced-colors:outline-[GrayText]\" : \"\";\n\n return [baseClasses, selectedClasses, disabledClasses].filter(Boolean).join(\" \");\n}\n\nexport function Switch({ children, ...props }: SwitchProps) {\n return (\n <AriaSwitch\n {...props}\n className={composeTailwindRenderProps(\n props.className,\n \"group flex items-center gap-2 text-sm text-gray-800 transition disabled:text-gray-300 dark:text-zinc-200 dark:disabled:text-zinc-600 forced-colors:disabled:text-[GrayText]\",\n )}\n >\n {(renderProps) => (\n <>\n <div className={getTrackClassName(renderProps)}>\n <span className={getHandleClassName(renderProps)} />\n </div>\n {children}\n </>\n )}\n </AriaSwitch>\n );\n}\n","import {\n Tab as RACTab,\n TabList as RACTabList,\n TabPanel as RACTabPanel,\n Tabs as RACTabs,\n TabListProps,\n TabPanelProps,\n TabProps as RACTabProps,\n TabsProps,\n composeRenderProps,\n Key,\n} from \"react-aria-components\";\nimport { focusRing } from \"../../utils\";\n\nexport type { Key };\n\ntype TabProps = RACTabProps & {\n isSelected?: boolean;\n id?: string;\n};\n\nfunction getTabsStyles({\n orientation,\n className = \"\",\n}: {\n orientation: \"horizontal\" | \"vertical\";\n className?: string;\n}) {\n const baseStyles = \"flex flex-col w-full\";\n const orientationStyles = {\n horizontal: \"\",\n vertical: \"flex-row\",\n };\n\n return `${baseStyles} ${orientationStyles[orientation] || \"\"} ${className}`.trim();\n}\n\n/**\n * Tabs\n *\n * Tabbed interface with styled tabs and panels.\n */\nexport function Tabs(props: TabsProps) {\n return (\n <div className=\"w-full\">\n <RACTabs\n {...props}\n className={composeRenderProps(props.className, (className, renderProps) =>\n getTabsStyles({ ...renderProps, className }),\n )}\n />\n </div>\n );\n}\n\nfunction getTabListStyles({\n orientation,\n className = \"\",\n}: {\n orientation: \"horizontal\" | \"vertical\";\n className?: string;\n}) {\n const baseStyles =\n \"flex gap-10 relative after:absolute after:bottom-0 after:left-0 after:right-0 after:h-[2px] after:bg-border-default\";\n const orientationStyles = {\n horizontal: \"flex-row w-full\",\n vertical: \"flex-col items-start\",\n };\n\n return `${baseStyles} ${orientationStyles[orientation] || \"\"} ${className}`.trim();\n}\n\n/**\n * TabList container.\n */\nexport function TabList<T extends object>(props: TabListProps<T>) {\n return (\n <RACTabList\n {...props}\n className={composeRenderProps(props.className, (className, renderProps) =>\n getTabListStyles({\n ...renderProps,\n className: className || \"\",\n }),\n )}\n />\n );\n}\n\nfunction getTabStyles({\n isSelected,\n isDisabled,\n className = \"\",\n}: {\n isSelected: boolean;\n isDisabled: boolean;\n className?: string;\n}) {\n const baseStyles = \"flex items-center cursor-default px-1 py-2 font-medium transition hover:cursor-pointer relative\";\n const focusRingStyles = focusRing();\n\n let stateStyles = \"\";\n if (isDisabled) {\n stateStyles =\n \"text-gray-200 forced-colors:text-[GrayText] selected:text-gray-300 forced-colors:selected:text-[HighlightText] selected:bg-gray-200 forced-colors:selected:bg-[GrayText]\";\n } else if (isSelected) {\n stateStyles = \"text-action-primary border-b-2 border-action-primary z-10 forced-colors:bg-[Highlight]\";\n } else {\n stateStyles = \"text-text-muted hover:text-text-body\";\n }\n\n return `${baseStyles} ${focusRingStyles} ${stateStyles} ${className}`.trim();\n}\n\n/**\n * Tab trigger element.\n */\nexport function Tab(props: TabProps) {\n return (\n <RACTab\n {...props}\n data-testid={props.id ? `tab-${props.id}` : undefined}\n className={composeRenderProps(props.className, (className, renderProps) =>\n getTabStyles({\n ...renderProps,\n className,\n isSelected: renderProps.isSelected,\n }),\n )}\n />\n );\n}\n\nfunction getTabPanelStyles({ className = \"\" }: { className?: string }) {\n const baseStyles = \"block w-full mt-4 text-text-body\";\n const focusRingStyles = focusRing();\n\n return `${baseStyles} ${focusRingStyles} ${className}`.trim();\n}\n\n/**\n * TabPanel content area.\n */\nexport function TabPanel(props: TabPanelProps) {\n return (\n <RACTabPanel\n {...props}\n className={composeRenderProps(props.className, (className, renderProps) =>\n getTabPanelStyles({\n ...renderProps,\n className: className || \"\",\n }),\n )}\n />\n );\n}\n","import React from \"react\";\nimport type { ValidationResult } from \"react-aria-components\";\nimport {\n Description,\n FieldError,\n Label,\n getInputBaseStyles,\n BaseInputProps,\n useInputFocus,\n InputWrapper,\n} from \"../Field\";\nimport { twMerge } from \"tailwind-merge\";\nimport type { Size } from \"../../utils/controlStyles\";\n\nconst getTextAreaStyles = (props: {\n isInvalid?: boolean;\n isDisabled?: boolean;\n isFocused?: boolean;\n transparent?: boolean;\n size?: Size;\n className?: string;\n}): string => {\n // Get base input styles\n const baseStyles = getInputBaseStyles({\n isInvalid: props.isInvalid,\n isDisabled: props.isDisabled,\n isFocused: props.isFocused,\n transparent: props.transparent,\n size: props.size,\n });\n\n // Add TextArea-specific styles\n const textAreaStyles = \"min-h-[100px] resize-y py-2\";\n\n return twMerge(baseStyles, textAreaStyles, props.className);\n};\n\n/**\n * TextArea\n *\n * Multi-line text input with Edges styling, label, description, and error.\n */\nexport interface TextAreaProps extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, \"size\">, BaseInputProps {\n label?: string;\n description?: string;\n errorMessage?: string | ((validation: ValidationResult) => string);\n tooltip?: string;\n size?: Size;\n isInvalid?: boolean;\n validationResult?: ValidationResult;\n}\n\nexport function TextArea({\n label,\n description,\n errorMessage,\n size = \"md\",\n tooltip,\n required,\n transparent,\n isInvalid,\n className,\n validationResult,\n ...props\n}: TextAreaProps) {\n const { isFocused, handleFocus, handleBlur } = useInputFocus();\n\n return (\n <div className=\"group flex flex-col\">\n <div className=\"flex flex-col\">\n {label && (\n <Label size={size} tooltip={tooltip} isRequired={required}>\n {label}\n </Label>\n )}\n <InputWrapper>\n <textarea\n {...props}\n required={required}\n onFocus={(e) => {\n // Properly handle the textarea focus event\n if (props.onFocus) {\n props.onFocus(e);\n }\n handleFocus(e as unknown as React.FocusEvent<HTMLInputElement>);\n }}\n onBlur={(e) => {\n // Properly handle the textarea blur event\n if (props.onBlur) {\n props.onBlur(e);\n }\n handleBlur(e as unknown as React.FocusEvent<HTMLInputElement>);\n }}\n className={getTextAreaStyles({\n isInvalid,\n isDisabled: props.disabled,\n isFocused,\n size,\n transparent,\n className,\n })}\n />\n </InputWrapper>\n {description && (\n <Description size={size} className=\"mt-3\">\n {description}\n </Description>\n )}\n {typeof errorMessage === \"string\" && (\n <FieldError size={size} className=\"mt-1\">\n {errorMessage}\n </FieldError>\n )}\n {typeof errorMessage === \"function\" && validationResult && (\n <FieldError size={size} className=\"mt-1\">\n {errorMessage(validationResult)}\n </FieldError>\n )}\n </div>\n </div>\n );\n}\n","\"use client\";\nimport React, { useRef, useCallback, useEffect, useLayoutEffect } from \"react\";\nimport type { ValidationResult } from \"react-aria-components\";\nimport {\n Description,\n FieldError,\n Label,\n BaseInputProps,\n useInputFocus,\n InputWrapper,\n getInputBaseStyles,\n} from \"../Field\";\nimport { Chip } from \"../Chip\";\nimport { twMerge } from \"tailwind-merge\";\nimport type { Size } from \"../../utils/controlStyles\";\n\nexport interface ChipData {\n id: string;\n label: string;\n value: unknown;\n}\n\nexport interface TriggerInfo {\n query: string;\n position: number;\n startIndex: number;\n}\n\nexport interface TextAreaWithChipsProps\n extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, \"size\" | \"value\" | \"onChange\">,\n BaseInputProps {\n // Standard TextArea props (consistent with TextArea.tsx)\n label?: string;\n description?: string;\n errorMessage?: string | ((validation: ValidationResult) => string);\n tooltip?: string;\n size?: Size;\n isInvalid?: boolean;\n validationResult?: ValidationResult;\n\n // Text content - using standard 'value' and 'onChange' names for consistency\n value?: string;\n onChange?: (value: string) => void;\n\n // Chip functionality\n chips?: ChipData[];\n onChipsChange?: (chips: ChipData[]) => void;\n\n // Trigger detection\n triggerPattern?: string | RegExp;\n onTriggerDetected?: (triggerInfo: TriggerInfo) => void;\n onTriggerDismissed?: () => void;\n\n // Chip rendering customization\n renderChip?: (chip: ChipData, onRemove: () => void) => React.ReactNode;\n chipVariant?: \"default\" | \"primary\" | \"secondary\";\n chipSize?: Size;\n}\n\nexport function TextAreaWithChips({\n label,\n description,\n errorMessage,\n size = \"md\",\n tooltip,\n required,\n transparent,\n isInvalid,\n className,\n validationResult,\n\n // Text props (consistent naming with standard TextArea)\n value = \"\",\n onChange,\n\n // Chip props\n chips = [],\n onChipsChange,\n triggerPattern = \"{{\",\n onTriggerDetected,\n onTriggerDismissed,\n renderChip,\n chipVariant = \"primary\",\n chipSize,\n\n ...props\n}: TextAreaWithChipsProps) {\n const textareaRef = useRef<HTMLDivElement>(null);\n const { isFocused, handleFocus, handleBlur } = useInputFocus();\n // Use smaller chip sizes that match text line height better\n const actualChipSize = chipSize || \"sm\";\n\n // Track desired caret offset across re-renders to preserve cursor position\n const selectionOffsetRef = useRef<number | null>(null);\n\n // Helper: convert DOM content back to text with chip placeholders\n const getDOMTextWithPlaceholders = useCallback((container: HTMLDivElement): string => {\n let result = \"\";\n\n const processNode = (node: Node) => {\n if (node.nodeType === Node.TEXT_NODE) {\n // Only include text nodes that are not inside chip elements\n const parentElement = node.parentElement;\n if (!parentElement?.closest(\"[data-chip-id]\")) {\n const textContent = node.textContent || \"\";\n result += textContent;\n }\n } else if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as Element;\n\n if (element.hasAttribute(\"data-chip-id\")) {\n // Replace chip with placeholder\n const chipId = element.getAttribute(\"data-chip-id\");\n result += `{{${chipId}}}`;\n // Don't process children of chip elements\n return;\n } else if (element.tagName === \"BR\") {\n result += \"\\n\";\n return;\n } else if (element.tagName === \"DIV\") {\n // Handle div elements that might be created by contentEditable\n // Process children but don't add extra content\n }\n }\n\n // Process child nodes\n for (let i = 0; i < node.childNodes.length; i++) {\n processNode(node.childNodes[i]);\n }\n };\n\n processNode(container);\n\n // Clean up any extra whitespace that might have been introduced\n // but preserve intentional spaces and line breaks\n return result;\n }, []);\n\n // Helper: set caret at given text offset within the contentEditable container\n const setCaretAtOffset = useCallback((container: HTMLDivElement, targetOffset: number) => {\n const walker = document.createTreeWalker(container, NodeFilter.SHOW_TEXT, {\n acceptNode: (node) => {\n // Skip text within chip elements (contentEditable=false)\n const parentElement = node.parentElement;\n if (parentElement && parentElement.closest(\"[data-chip-id]\")) {\n return NodeFilter.FILTER_REJECT;\n }\n return NodeFilter.FILTER_ACCEPT;\n },\n });\n\n let currentNode: Node | null = walker.nextNode();\n let remaining = Math.max(0, targetOffset);\n\n while (currentNode) {\n const text = currentNode.nodeValue || \"\";\n if (text.length >= remaining) {\n const range = document.createRange();\n range.setStart(currentNode, remaining);\n range.collapse(true);\n const sel = window.getSelection();\n sel?.removeAllRanges();\n sel?.addRange(range);\n return;\n }\n remaining -= text.length;\n currentNode = walker.nextNode();\n }\n\n // Fallback: place at end\n const sel = window.getSelection();\n const range = document.createRange();\n range.selectNodeContents(container);\n range.collapse(false);\n sel?.removeAllRanges();\n sel?.addRange(range);\n }, []);\n\n // Handle empty state properly to avoid DOM conflicts\n useEffect(() => {\n if (textareaRef.current && !value) {\n // Only clear if there's actual content to avoid DOM manipulation conflicts\n if (textareaRef.current.textContent !== \"\") {\n textareaRef.current.textContent = \"\";\n }\n }\n }, [value]);\n\n // After value changes, restore caret to the last known offset\n useLayoutEffect(() => {\n if (!textareaRef.current) return;\n if (value === \"\") {\n // If empty and focused, ensure focus and caret at start so user can type immediately\n if (isFocused) {\n try {\n textareaRef.current.focus({ preventScroll: true } as unknown as FocusOptions);\n setCaretAtOffset(textareaRef.current, 0);\n } catch (_) {\n // ignore\n }\n }\n return;\n }\n if (selectionOffsetRef.current == null) return;\n try {\n setCaretAtOffset(textareaRef.current, selectionOffsetRef.current);\n } finally {\n selectionOffsetRef.current = null;\n }\n }, [value, setCaretAtOffset, isFocused]);\n\n // Handle text changes and trigger detection for contentEditable\n const handleTextChange = useCallback(\n (newValue: string, cursorPosition?: number) => {\n onChange?.(newValue);\n\n // If text is empty, dismiss any active triggers\n if (newValue === \"\") {\n onTriggerDismissed?.();\n return;\n }\n\n // Check for trigger pattern\n if (triggerPattern && onTriggerDetected && cursorPosition !== undefined) {\n const textBeforeCursor = newValue.slice(0, cursorPosition);\n\n const triggerRegex =\n typeof triggerPattern === \"string\" ? new RegExp(`\\\\${triggerPattern}([^\\\\s]*)$`) : triggerPattern;\n\n const match = textBeforeCursor.match(triggerRegex);\n\n if (match) {\n const query = match[1] || \"\";\n const startIndex = cursorPosition - match[0].length;\n\n onTriggerDetected({\n query,\n position: cursorPosition,\n startIndex,\n });\n } else {\n onTriggerDismissed?.();\n }\n }\n },\n [onChange, triggerPattern, onTriggerDetected, onTriggerDismissed],\n );\n\n // Handle chip removal\n const handleChipRemove = useCallback(\n (chipId: string) => {\n if (!onChipsChange || !onChange) return;\n\n const updatedChips = chips.filter((chip) => chip.id !== chipId);\n onChipsChange(updatedChips);\n\n // Also remove from text content\n const updatedText = value.replace(new RegExp(`\\\\{\\\\{${chipId}\\\\}\\\\}`, \"g\"), \"\");\n onChange(updatedText);\n },\n [chips, onChipsChange, value, onChange],\n );\n\n // Render chip or use default rendering\n const renderChipElement = useCallback(\n (chip: ChipData) => {\n if (renderChip) {\n return renderChip(chip, () => handleChipRemove(chip.id));\n }\n\n return (\n <Chip\n key={chip.id}\n variant={chipVariant}\n size={actualChipSize}\n onRemove={() => handleChipRemove(chip.id)}\n className=\"!py-0.5 !px-1.5 !gap-1 !text-xs !leading-none !rounded-md\"\n >\n {chip.label}\n </Chip>\n );\n },\n [renderChip, chipVariant, actualChipSize, handleChipRemove],\n );\n\n // Get textarea styles - using same approach as TextField\n const getTextAreaStyles = () => {\n // Get base input styles (same as TextField)\n const baseStyles = getInputBaseStyles({\n isInvalid,\n isDisabled: props.disabled,\n isFocused,\n transparent,\n size,\n });\n\n // Add TextArea-specific styles\n const textAreaStyles = \"min-h-[100px] py-2 px-3\";\n\n // ContentEditable and chip-specific styles\n const contentEditableStyles = twMerge(\n \"focus:outline-none overflow-auto\",\n\n // Chip selection styles\n \"[&_[data-chip-id]::selection]:bg-action-primary/20\",\n\n // Placeholder styles for contentEditable - only show when completely empty\n \"[&:empty]:before:content-[attr(data-placeholder)] [&:empty]:before:text-text-placeholder [&:empty]:before:pointer-events-none\",\n );\n\n return twMerge(baseStyles, textAreaStyles, contentEditableStyles, className);\n };\n\n // Render content with inline chips\n const renderContent = () => {\n // If no text value, return nothing (let CSS placeholder handle it)\n if (!value) {\n return null;\n }\n\n const parts = value.split(/(\\{\\{[^}]+\\}\\})/g);\n\n return parts.map((part, index) => {\n // Check if this part is a chip placeholder\n const chipMatch = part.match(/\\{\\{([^}]+)\\}\\}/);\n if (chipMatch) {\n const chipId = chipMatch[1];\n const chip = chips.find((c) => c.id === chipId);\n if (chip) {\n return (\n <span\n key={`chip-${chipId}-${index}`}\n className=\"inline-block align-baseline cursor-pointer\"\n contentEditable={false}\n suppressContentEditableWarning\n data-chip-id={chipId}\n style={{\n userSelect: \"none\",\n verticalAlign: \"baseline\",\n lineHeight: \"1\",\n }}\n onClick={(e) => {\n e.preventDefault();\n // Select the chip element\n const selection = window.getSelection();\n const range = document.createRange();\n range.selectNode(e.currentTarget);\n selection?.removeAllRanges();\n selection?.addRange(range);\n }}\n >\n {renderChipElement(chip)}\n </span>\n );\n }\n }\n\n // Regular text - preserve line breaks\n if (part.includes(\"\\n\")) {\n return part.split(\"\\n\").map((line, lineIndex) => (\n <React.Fragment key={`line-${index}-${lineIndex}`}>\n {line}\n {lineIndex < part.split(\"\\n\").length - 1 && <br />}\n </React.Fragment>\n ));\n }\n\n return part;\n });\n };\n\n return (\n <div className=\"group flex flex-col\">\n <div className=\"flex flex-col\">\n {label && (\n <Label size={size} tooltip={tooltip} isRequired={required}>\n {label}\n </Label>\n )}\n\n <InputWrapper>\n <div\n // Force a safe remount when the content becomes fully empty to avoid\n // React diffing contentEditable internals during browser normalization\n key={value === \"\" ? \"empty\" : \"content\"}\n ref={textareaRef}\n contentEditable\n suppressContentEditableWarning\n onInput={(e) => {\n const target = e.target as HTMLDivElement;\n\n // Check if there are any chip elements in the DOM\n const hasChips = target.querySelector(\"[data-chip-id]\") !== null;\n\n let newValue: string;\n\n if (hasChips) {\n // Only use complex DOM parsing when chips are present\n newValue = getDOMTextWithPlaceholders(target);\n // Normalize runaway spaces that can accumulate adjacent to chips\n newValue = newValue\n // collapse 2+ spaces AFTER a chip to a single space\n .replace(/(\\{\\{[^}]+\\}\\})\\s{2,}/g, \"$1 \")\n // collapse 2+ spaces BEFORE a chip to a single space\n .replace(/\\s{2,}(\\{\\{[^}]+\\}\\})/g, \" $1\");\n } else {\n // Use simple textContent for plain text to avoid issues\n newValue = target.textContent || \"\";\n }\n\n // If cleared, short-circuit to avoid selection/range work during DOM teardown\n if (newValue === \"\") {\n // Place caret at start and keep focus so user can continue typing\n try {\n const range = document.createRange();\n range.selectNodeContents(target);\n range.collapse(true);\n const sel = window.getSelection();\n sel?.removeAllRanges();\n sel?.addRange(range);\n selectionOffsetRef.current = 0;\n } catch (_) {\n // ignore\n }\n handleTextChange(\"\", 0);\n return;\n }\n\n // Only update if the value actually changed to avoid unnecessary re-renders\n if (newValue === value) {\n return;\n }\n\n // Get cursor position based on text with placeholders\n const selection = window.getSelection();\n let cursorPosition = 0;\n\n if (selection && selection.rangeCount > 0) {\n try {\n const range = selection.getRangeAt(0);\n\n if (hasChips) {\n // Use complex calculation when chips are present\n let position = 0;\n let found = false;\n\n const calculatePosition = (node: Node): boolean => {\n if (found) return true;\n\n if (node === range.startContainer) {\n position += range.startOffset;\n found = true;\n return true;\n }\n\n if (node.nodeType === Node.TEXT_NODE) {\n // Only count text nodes that are not inside chip elements\n const parentElement = node.parentElement;\n if (!parentElement?.closest(\"[data-chip-id]\")) {\n if (node.contains(range.startContainer)) {\n position += range.startOffset;\n found = true;\n return true;\n }\n position += (node.textContent || \"\").length;\n }\n } else if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as Element;\n\n if (element.hasAttribute(\"data-chip-id\")) {\n // Check if cursor is within this chip element\n if (element.contains(range.startContainer) || element === range.startContainer) {\n const chipId = element.getAttribute(\"data-chip-id\");\n position += `{{${chipId}}}`.length;\n found = true;\n return true;\n }\n const chipId = element.getAttribute(\"data-chip-id\");\n position += `{{${chipId}}}`.length;\n return false; // Don't process children\n } else if (element.tagName === \"BR\") {\n if (element === range.startContainer) {\n found = true;\n return true;\n }\n position += 1; // for \\n\n return false;\n }\n }\n\n // Process child nodes\n for (let i = 0; i < node.childNodes.length; i++) {\n if (calculatePosition(node.childNodes[i])) {\n return true;\n }\n }\n\n return false;\n };\n\n calculatePosition(target);\n cursorPosition = position;\n } else {\n // Use simple calculation for plain text\n const tempRange = document.createRange();\n tempRange.setStart(target, 0);\n tempRange.setEnd(range.startContainer, range.startOffset);\n cursorPosition = tempRange.toString().length;\n }\n } catch (error) {\n // Fallback to end of content if range creation fails\n cursorPosition = newValue.length;\n }\n }\n\n // Persist caret position so we can restore it after React re-renders\n selectionOffsetRef.current = cursorPosition;\n handleTextChange(newValue, cursorPosition);\n }}\n onKeyDown={(e) => {\n const selection = window.getSelection();\n if (!selection || selection.rangeCount === 0) return;\n\n try {\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n\n // Handle arrow key navigation around chips\n if (e.key === \"ArrowLeft\" || e.key === \"ArrowRight\") {\n const chipElement =\n container.nodeType === Node.TEXT_NODE\n ? container.parentElement?.closest(\"[data-chip-id]\")\n : (container as Element).closest(\"[data-chip-id]\");\n\n if (chipElement) {\n e.preventDefault();\n\n try {\n // Move cursor to before or after the chip\n const newRange = document.createRange();\n const newSelection = window.getSelection();\n\n if (e.key === \"ArrowLeft\") {\n newRange.setStartBefore(chipElement);\n } else {\n newRange.setStartAfter(chipElement);\n }\n\n newRange.collapse(true);\n newSelection?.removeAllRanges();\n newSelection?.addRange(newRange);\n } catch (rangeError) {\n // Ignore range errors - let default behavior happen\n }\n }\n }\n\n // Handle backspace on chips\n if (e.key === \"Backspace\") {\n // Identify a chip either selected, or immediately before the caret\n let chipElement: Element | null = null;\n\n // Case 1: caret is inside text or element inside a chip (selected chip)\n chipElement =\n (container.nodeType === Node.TEXT_NODE\n ? container.parentElement?.closest(\"[data-chip-id]\")\n : (container as Element).closest(\"[data-chip-id]\")) || null;\n\n // Case 2: caret is immediately after a chip (most common backspace case)\n if (!chipElement) {\n if (container.nodeType === Node.TEXT_NODE) {\n const textNode = container as Text;\n if (range.startOffset === 0 && textNode.parentElement) {\n const prev = textNode.previousSibling;\n if (prev && prev.nodeType === Node.ELEMENT_NODE) {\n const maybeChip = (prev as Element).closest(\"[data-chip-id]\");\n if (maybeChip) chipElement = maybeChip as Element;\n }\n }\n } else {\n const elementNode = container as Element;\n if (range.startOffset > 0) {\n const prev = elementNode.childNodes[range.startOffset - 1];\n if (prev && prev.nodeType === Node.ELEMENT_NODE) {\n const maybeChip = (prev as Element).closest(\"[data-chip-id]\");\n if (maybeChip) chipElement = maybeChip as Element;\n }\n }\n }\n }\n\n if (chipElement) {\n e.preventDefault();\n e.stopPropagation();\n\n const chipId = chipElement.getAttribute(\"data-chip-id\");\n if (!chipId) return;\n\n // Find the position of this chip in the text\n const chipPlaceholder = `{{${chipId}}}`;\n const chipIndex = value.indexOf(chipPlaceholder);\n\n if (chipIndex !== -1) {\n // Remove the chip placeholder from the text\n const newText = value.slice(0, chipIndex) + value.slice(chipIndex + chipPlaceholder.length);\n\n // Update chips array\n const newChips = chips.filter((c) => c.id !== chipId);\n\n // Set caret position to where the chip was\n selectionOffsetRef.current = chipIndex;\n\n // Clear any live selection ranges that may reference the chip DOM node\n try {\n const sel = window.getSelection();\n sel?.removeAllRanges();\n } catch (_) {\n // ignore\n }\n\n // Update state directly without any DOM manipulation\n onChipsChange?.(newChips);\n onChange?.(newText);\n }\n }\n }\n } catch (error) {\n // Ignore selection/range errors and let default behavior happen\n }\n }}\n onFocus={(e) => {\n if (props.onFocus) {\n props.onFocus(e as unknown as React.FocusEvent<HTMLTextAreaElement>);\n }\n handleFocus(e as unknown as React.FocusEvent<HTMLInputElement>);\n }}\n onBlur={(e) => {\n if (props.onBlur) {\n props.onBlur(e as unknown as React.FocusEvent<HTMLTextAreaElement>);\n }\n handleBlur(e as unknown as React.FocusEvent<HTMLInputElement>);\n }}\n className={getTextAreaStyles()}\n style={{\n whiteSpace: \"pre-wrap\",\n wordBreak: \"break-word\",\n ...props.style,\n }}\n data-placeholder={props.placeholder}\n >\n {renderContent()}\n </div>\n </InputWrapper>\n\n {description && (\n <Description size={size} className=\"mt-3\">\n {description}\n </Description>\n )}\n\n {typeof errorMessage === \"string\" && (\n <FieldError size={size} className=\"mt-1\">\n {errorMessage}\n </FieldError>\n )}\n\n {typeof errorMessage === \"function\" && validationResult && (\n <FieldError size={size} className=\"mt-1\">\n {errorMessage(validationResult)}\n </FieldError>\n )}\n </div>\n </div>\n );\n}\n","\"use client\";\nimport React from \"react\";\nimport type {\n TextFieldProps as AriaTextFieldProps,\n ValidationResult,\n TextFieldRenderProps,\n} from \"react-aria-components\";\nimport { TextField as AriaTextFieldComponent } from \"react-aria-components\";\nimport {\n Description,\n FieldError,\n Input,\n Label,\n getInputBaseStyles,\n BaseInputProps,\n useInputFocus,\n InputWrapper,\n ClearButton,\n} from \"../Field\";\nimport { composeTailwindRenderProps } from \"../../utils\";\nimport { Icon } from \"../Icon/Icon\";\nimport { twMerge } from \"tailwind-merge\";\nimport type { Size } from \"../../utils/controlStyles\";\n\nconst getTextFieldStyles = (props: {\n isInvalid?: boolean;\n isDisabled?: boolean;\n isFocused?: boolean;\n transparent?: boolean;\n size?: Size;\n showSearchIcon?: boolean;\n isClearable?: boolean;\n hasValue?: boolean;\n isPassword?: boolean;\n className?: string;\n}): string => {\n // Get base input styles\n const baseStyles = getInputBaseStyles({\n isInvalid: props.isInvalid,\n isDisabled: props.isDisabled,\n isFocused: props.isFocused,\n transparent: props.transparent,\n size: props.size,\n });\n\n // Add TextField-specific padding styles\n const paddingStyles = [\n props.showSearchIcon ? \"pl-8\" : \"pl-3\",\n (props.isClearable && props.hasValue) || props.isPassword ? \"pr-8\" : \"pr-3\",\n ].join(\" \");\n\n return twMerge(baseStyles, paddingStyles, props.className);\n};\n\n/**\n * TextField\n *\n * A controlled or uncontrolled text input with Edges styling, label,\n * description, error messaging, and optional affordances like a search icon,\n * clear button, and password visibility toggle. Wraps\n * `react-aria-components` TextField for accessible behavior.\n */\nexport interface TextFieldProps extends Omit<AriaTextFieldProps, \"isRequired\" | \"size\" | \"className\">, BaseInputProps {\n label?: string;\n description?: string;\n errorMessage?: string | ((validation: ValidationResult) => string);\n placeholder?: string;\n tooltip?: string;\n isRequired?: boolean;\n className?: string;\n validationResult?: ValidationResult;\n}\n\n/**\n * Renders an Edges TextField with label, description, validation states and\n * optional search/clear/password affordances.\n */\nexport function TextField({\n label,\n description,\n errorMessage,\n size = \"md\",\n tooltip,\n isRequired,\n transparent,\n showSearchIcon,\n isClearable,\n onClear,\n type,\n validationResult,\n ...props\n}: TextFieldProps) {\n const [showPassword, setShowPassword] = React.useState(false);\n const { isFocused, handleFocus, handleBlur } = useInputFocus();\n const isPassword = type === \"password\";\n\n return (\n <AriaTextFieldComponent\n {...props}\n isRequired={isRequired}\n className={composeTailwindRenderProps(props.className, \"group flex flex-col\")}\n >\n {({ isDisabled, isInvalid }: TextFieldRenderProps) => (\n <div className=\"flex flex-col\">\n {label && (\n <Label size={size} tooltip={tooltip} isRequired={isRequired}>\n {label}\n </Label>\n )}\n <InputWrapper>\n {showSearchIcon && (\n <div className=\"pointer-events-none absolute left-2 top-1/2 -translate-y-1/2 transform\">\n <Icon name=\"MagnifyingGlass\" className=\"h-4 w-4 text-text-muted\" />\n </div>\n )}\n <Input\n size={size}\n disabled={isDisabled}\n type={isPassword ? (showPassword ? \"text\" : \"password\") : type}\n value={props.value as string | undefined}\n defaultValue={props.defaultValue as string | undefined}\n placeholder={props.placeholder}\n onFocus={(e) => handleFocus(e, props.onFocus)}\n onBlur={(e) => handleBlur(e, props.onBlur)}\n onChange={(e) => props.onChange?.(e.target.value)}\n className={getTextFieldStyles({\n isInvalid,\n isDisabled,\n isFocused,\n size,\n transparent,\n showSearchIcon,\n isClearable,\n hasValue: !!props.value,\n isPassword,\n className: typeof props.className === \"string\" ? props.className : undefined,\n })}\n />\n {isClearable && props.value && !isDisabled && (\n <ClearButton\n onClick={() => {\n if (onClear) {\n onClear();\n } else if (props.onChange) {\n props.onChange(\"\");\n }\n }}\n size={size}\n />\n )}\n {isPassword && !isDisabled && (\n <button\n type=\"button\"\n onClick={() => setShowPassword(!showPassword)}\n className=\"absolute right-3 top-1/2 -translate-y-1/2 transform text-text-muted hover:text-text-body\"\n aria-label={showPassword ? \"Hide password\" : \"Show password\"}\n onMouseDown={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n <Icon\n name={showPassword ? \"EyeSlash\" : \"Eye\"}\n size={size === \"sm\" ? 16 : 20}\n className=\"text-text-body\"\n />\n </button>\n )}\n </InputWrapper>\n {description && (\n <Description size={size} className=\"mt-3\">\n {description}\n </Description>\n )}\n {typeof errorMessage === \"string\" && (\n <FieldError size={size} className=\"mt-1\">\n {errorMessage}\n </FieldError>\n )}\n {typeof errorMessage === \"function\" && validationResult && (\n <FieldError size={size} className=\"mt-1\">\n {errorMessage(validationResult)}\n </FieldError>\n )}\n </div>\n )}\n </AriaTextFieldComponent>\n );\n}\n","import { ReactNode } from \"react\";\n\nexport interface TextLinkProps {\n href?: string;\n children: ReactNode;\n className?: string;\n external?: boolean;\n title?: string;\n variant?: \"default\" | \"primary\" | \"muted\";\n onClick?: (e: React.MouseEvent<HTMLAnchorElement>) => void;\n asButton?: boolean;\n onPress?: () => void;\n showArrow?: boolean;\n}\n\nexport const TextLink = ({\n href,\n children,\n className = \"\",\n external = false,\n title,\n variant = \"default\",\n onClick,\n asButton = false,\n onPress,\n showArrow = false,\n}: TextLinkProps) => {\n const externalProps = external ? { target: \"_blank\", rel: \"noopener noreferrer\" } : {};\n\n const baseClasses = \"hover:underline hover:decoration-1 hover:underline-offset-4 cursor-pointer\";\n\n const variantClasses = {\n default: \"text-text-link-default hover:text-text-link-hover visited:text-text-link-default\",\n primary: \"text-action-primary hover:text-action-primary-hover visited:text-action-primary\",\n muted: \"text-text-muted hover:text-text-muted visited:text-text-muted\",\n };\n\n const combinedClasses = `${baseClasses} ${variantClasses[variant]} ${className}`;\n\n const content = (\n <>\n {children}\n {showArrow && <span>{\"\\u00A0\"}→</span>}\n </>\n );\n\n if (asButton) {\n return (\n <button type=\"button\" className={combinedClasses} onClick={onPress} title={title}>\n {content}\n </button>\n );\n }\n\n return (\n <a href={href || \"#\"} className={combinedClasses} {...externalProps} title={title} onClick={onClick}>\n {content}\n </a>\n );\n};\n\nexport default TextLink;\n","\"use client\";\nimport {\n Description,\n FieldError,\n Label,\n BaseInputProps,\n getInputBackgroundStyles,\n getInputStateStyles,\n useInputFocus,\n} from \"../Field\";\nimport { twMerge } from \"tailwind-merge\";\nimport type { Size } from \"../../utils/controlStyles\";\nimport { controlStyles } from \"../../utils/controlStyles\";\nimport {\n TimeField as AriaTimeField,\n TimeFieldProps as AriaTimeFieldProps,\n DateInput,\n DateSegment,\n TimeValue,\n ValidationResult,\n} from \"react-aria-components\";\nimport { useState, useRef, useEffect } from \"react\";\n\nconst getTimeFieldStyles = (props: {\n isInvalid?: boolean;\n isDisabled?: boolean;\n isFocused?: boolean;\n transparent?: boolean;\n size?: Size;\n className?: string;\n}): string => {\n return twMerge(\n \"w-full\",\n getInputStateStyles({ isInvalid: props.isInvalid, isDisabled: props.isDisabled, isFocused: props.isFocused }),\n getInputBackgroundStyles({ transparent: props.transparent, isDisabled: props.isDisabled }),\n controlStyles[props.size || \"md\"].text,\n controlStyles[props.size || \"md\"].height,\n controlStyles[props.size || \"md\"].padding,\n // Align left padding with other fields (override left side only)\n \"pl-[var(--control-padding-sm)]\",\n \"flex items-center gap-0.5\",\n props.className,\n );\n};\n\nconst getSegmentStyles = ({\n isPlaceholder,\n isDisabled,\n isFocused,\n size = \"md\",\n}: {\n isPlaceholder?: boolean;\n isDisabled?: boolean;\n isInvalid?: boolean;\n isFocused?: boolean;\n size?: Size;\n}) => {\n return twMerge(\n // Base styles\n \"outline-none rounded transition-colors box-content tabular-nums text-center\",\n // Text styles based on state\n isPlaceholder ? \"text-text-muted italic\" : \"text-text-body\",\n isDisabled ? \"text-text-disabled cursor-not-allowed\" : \"cursor-text\",\n // Size styles\n controlStyles[size].text,\n // Padding and spacing\n \"px-0.5 -my-0.5\",\n // Focus styles\n isFocused && \"!outline-[1.5px] !outline-[var(--control-focus-ring-color)] ![--tw-outline-style:solid]\",\n // Hover styles (only when not disabled and not focused)\n !isDisabled && !isFocused && \"hover:bg-text-body/[0.05]\",\n );\n};\n\n/**\n * TimeField\n *\n * Input segmented time with Edges styling and accessible behavior via\n * `react-aria-components`. Supports labels, descriptions and validation.\n */\nexport interface TimeFieldProps extends Omit<AriaTimeFieldProps<TimeValue>, \"size\" | \"className\">, BaseInputProps {\n label?: string;\n description?: string;\n errorMessage?: string | ((validation: ValidationResult) => string);\n placeholder?: string;\n tooltip?: string;\n isRequired?: boolean;\n className?: string;\n validationResult?: ValidationResult;\n}\n\n/**\n * Renders an Edges TimeField composed from segmented date parts.\n */\nexport function TimeField({\n label,\n description,\n errorMessage,\n size = \"md\",\n tooltip,\n isRequired,\n transparent,\n validationResult,\n ...props\n}: TimeFieldProps) {\n const { isFocused } = useInputFocus();\n const [focusedSegment, setFocusedSegment] = useState<string | null>(null);\n const inputRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const handleFocusIn = (e: FocusEvent) => {\n const target = e.target as HTMLElement;\n if (target.hasAttribute(\"data-type\")) {\n setFocusedSegment(target.getAttribute(\"data-type\"));\n }\n };\n\n const handleFocusOut = () => {\n setFocusedSegment(null);\n };\n\n const inputElement = inputRef.current;\n if (inputElement) {\n inputElement.addEventListener(\"focusin\", handleFocusIn);\n inputElement.addEventListener(\"focusout\", handleFocusOut);\n }\n\n return () => {\n if (inputElement) {\n inputElement.removeEventListener(\"focusin\", handleFocusIn);\n inputElement.removeEventListener(\"focusout\", handleFocusOut);\n }\n };\n }, []);\n\n return (\n <AriaTimeField {...props}>\n {({ isDisabled, isInvalid }) => (\n <>\n {label && (\n <Label isRequired={isRequired} tooltip={tooltip}>\n {label}\n </Label>\n )}\n <DateInput\n ref={inputRef}\n className={getTimeFieldStyles({ size, transparent, isDisabled, isInvalid, isFocused })}\n >\n {(segment) => (\n <DateSegment\n segment={segment}\n className={getSegmentStyles({\n isPlaceholder: segment.isPlaceholder,\n isDisabled: !segment.isEditable,\n isFocused: focusedSegment === segment.type,\n size,\n })}\n />\n )}\n </DateInput>\n {description && <Description>{description}</Description>}\n {typeof errorMessage === \"string\" ? <FieldError>{errorMessage}</FieldError> : null}\n </>\n )}\n </AriaTimeField>\n );\n}\n","import React from \"react\";\nimport { ToggleButton as RACToggleButton } from \"react-aria-components\";\nimport { focusRing } from \"../../utils\";\nimport { twMerge } from \"tailwind-merge\";\nimport { Icon } from \"../Icon\";\nimport type { ComponentProps } from \"react\";\nimport { controlStyles, type Size } from \"../../utils/controlStyles\";\n\ntype IconName = ComponentProps<typeof Icon>[\"name\"];\n\nexport interface ToggleButtonProps {\n variant?: \"default\" | \"primary\";\n \n size?: Size;\n className?: string;\n children: React.ReactNode;\n onChange?: (isSelected: boolean) => void;\n onPress?: () => void;\n isSelected?: boolean;\n isDisabled?: boolean;\n borderRadius?: \"left\" | \"right\";\n borderRight?: boolean;\n borderLeft?: boolean;\n icon?: IconName;\n iconWeight?: \"thin\" | \"light\" | \"regular\" | \"bold\" | \"fill\" | \"duotone\";\n iconPosition?: \"left\" | \"right\";\n /** Value used for group selection state */\n value?: string;\n isLoading?: boolean;\n loadingText?: string;\n loadingIndicator?: React.ReactNode;\n badgeNumber?: number;\n badgeVariant?: \"primary\" | \"destructive\";\n badgePosition?: \"top-right\" | \"top-left\" | \"bottom-right\" | \"bottom-left\";\n}\n\nconst baseStyles =\n \"flex font-medium justify-center items-center gap-2 text-center transition whitespace-nowrap box-border\";\n\nconst variantStyles = {\n default: {\n selected:\n \"bg-text-body text-white hover:brightness-[var(--control-hover-opacity)] forced-colors:bg-[ButtonText] forced-colors:text-[ButtonFace] border-2 border-transparent\",\n unselected:\n \"bg-transparent text-text-body border-2 border-border-muted hover:bg-text-body/[0.05] forced-colors:border-[ButtonBorder] forced-colors:bg-[ButtonFace] forced-colors:text-[ButtonText]\",\n },\n primary: {\n selected:\n \"bg-action-primary text-white hover:brightness-[var(--control-hover-opacity)] forced-colors:bg-[ButtonText] forced-colors:text-[ButtonFace] border-2 border-transparent\",\n unselected:\n \"bg-transparent text-text-body border-2 border-border-muted hover:bg-text-body/[0.05] forced-colors:border-[ButtonBorder] forced-colors:bg-[ButtonFace] forced-colors:text-[ButtonText]\",\n },\n};\n\nconst disabledStyles = \"opacity-[--control-hover-opacity] cursor-not-allowed pointer-events-none grayscale\";\nconst enabledStyles = \"opacity-100 cursor-pointer\";\n\nconst badgePositionStyles = {\n \"top-right\": \"-right-2 -top-2\",\n \"top-left\": \"-left-2 -top-2\",\n \"bottom-right\": \"-right-2 -bottom-2\",\n \"bottom-left\": \"-left-2 -bottom-2\",\n} as const;\n\nconst badgeVariantStyles = {\n primary: \"bg-action-primary text-white\",\n destructive: \"bg-action-destructive text-white\",\n} as const;\n\nfunction getToggleButtonStyles(props: ToggleButtonProps) {\n const { variant = \"default\", size = \"md\", isDisabled, isSelected, borderRadius, borderRight, borderLeft } = props;\n\n let styles = `${baseStyles} ${isSelected ? variantStyles[variant].selected : variantStyles[variant].unselected}`;\n\n // Add size styles using control-specific variables\n styles += ` ${controlStyles[size].text} ${controlStyles[size].height} ${controlStyles[size].padding} ${controlStyles[size].gap}`;\n\n // Add state styles\n styles += ` ${isDisabled ? disabledStyles : enabledStyles}`;\n\n // Add border styles\n if (borderRadius === \"left\") styles += \" rounded-l-sm\";\n if (borderRadius === \"right\") styles += \" rounded-r-sm\";\n if (borderRight) styles += \" border-r\";\n if (borderLeft) styles += \" border-l\";\n\n // Add focus ring\n styles += ` ${focusRing()}`;\n\n return twMerge(styles);\n}\n\nexport function ToggleButton(props: ToggleButtonProps) {\n const {\n className,\n children,\n onPress,\n icon,\n iconPosition = \"left\",\n iconWeight,\n isLoading = false,\n loadingText,\n loadingIndicator,\n size = \"md\",\n badgeNumber,\n badgeVariant = \"primary\",\n badgePosition = \"top-right\",\n ...rest\n } = props;\n\n const iconElement = icon ? (\n <Icon name={icon} className={`icon-[--control-icon-size-${size}]`} weight={iconWeight} />\n ) : null;\n\n const renderChildren = () => {\n const content = (\n <>\n {iconPosition === \"left\" && iconElement}\n {children}\n {iconPosition === \"right\" && iconElement}\n </>\n );\n\n if (isLoading) {\n return (\n <div className=\"relative inline-flex items-center justify-center\">\n <div className=\"absolute inset-0 flex items-center justify-center\">\n {loadingIndicator || (\n <Icon\n name=\"CircleNotch\"\n className={`animate-spin icon-[--control-icon-size-${size}]`}\n aria-hidden=\"true\"\n />\n )}\n </div>\n <div className=\"invisible\" aria-hidden=\"true\">\n {content}\n </div>\n {loadingText && (\n <span className=\"sr-only\" role=\"status\" aria-live=\"polite\">\n {loadingText}\n </span>\n )}\n </div>\n );\n }\n\n return content;\n };\n\n const toggleButton = (\n <RACToggleButton\n onPress={onPress}\n {...rest}\n className={twMerge(getToggleButtonStyles(props), className)}\n aria-busy={isLoading}\n >\n {renderChildren()}\n </RACToggleButton>\n );\n\n if (badgeNumber && badgeNumber > 0) {\n return (\n <div className=\"relative\">\n {toggleButton}\n <span\n className={`absolute ${badgePositionStyles[badgePosition]} flex h-5 w-5 items-center justify-center rounded-full ${badgeVariantStyles[badgeVariant]} text-xs`}\n aria-label={`${badgeNumber} items`}\n >\n {badgeNumber}\n </span>\n </div>\n );\n }\n\n return toggleButton;\n}\n","\"use client\";\nimport React from \"react\";\nimport { twMerge } from \"tailwind-merge\";\nimport { Label, Description, FieldError } from \"../Field\";\nimport type { Size } from \"../../utils/controlStyles\";\nimport { composeTailwindRenderProps } from \"../../utils\";\n\nexport interface SliderProps {\n label?: string;\n description?: string;\n tooltip?: string;\n errorMessage?: string;\n size?: Size;\n className?: string;\n value?: number;\n defaultValue?: number;\n onChange?: (value: number) => void;\n min?: number;\n max?: number;\n step?: number;\n disabled?: boolean;\n /** Show the current numeric value to the right of the track */\n showValue?: boolean;\n}\n\nexport function Slider({\n label,\n description,\n tooltip,\n errorMessage,\n size = \"md\",\n className,\n value,\n defaultValue = 0,\n onChange,\n min = 0,\n max = 100,\n step = 1,\n disabled,\n showValue = true,\n}: SliderProps) {\n const isControlled = typeof value === \"number\";\n const [internalValue, setInternalValue] = React.useState<number>(defaultValue);\n const currentValue = isControlled ? (value as number) : internalValue;\n\n const clamped = Math.min(Math.max(currentValue, min), max);\n const range = Math.max(max - min, 0.00001);\n const percent = ((clamped - min) / range) * 100;\n\n return (\n <div className={composeTailwindRenderProps(className, \"group flex w-full flex-col gap-1\") as string}>\n {label && (\n <Label size={size} tooltip={tooltip} className=\"mb-1\">\n {label}\n </Label>\n )}\n\n <div className=\"flex items-center gap-3\">\n <div className=\"relative w-full select-none\">\n {/* Rail */}\n <div className=\"h-1.5 w-full rounded-full bg-background-muted\" />\n {/* Track fill */}\n <div\n className=\"pointer-events-none absolute left-0 top-1/2 h-1.5 -translate-y-1/2 rounded-full bg-action-primary\"\n style={{ width: `${percent}%` }}\n aria-hidden\n />\n {/* Range input overlay for interaction */}\n <input\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={currentValue}\n disabled={disabled}\n aria-invalid={!!errorMessage}\n onChange={(e) => {\n const next = Number(e.currentTarget.value);\n if (isControlled) {\n onChange?.(next);\n } else {\n setInternalValue(next);\n onChange?.(next);\n }\n }}\n className={twMerge(\n \"absolute inset-0 w-full cursor-pointer appearance-none bg-transparent outline-none\",\n // WebKit thumb styles\n \"[&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:h-4 [&::-webkit-slider-thumb]:w-4 [&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:bg-background-input [&::-webkit-slider-thumb]:border [&::-webkit-slider-thumb]:border-border-input\",\n \"hover:[&::-webkit-slider-thumb]:shadow-sm focus-visible:[&::-webkit-slider-thumb]:outline-2 focus-visible:[&::-webkit-slider-thumb]:outline-border-focus\",\n // Firefox\n \"[&::-moz-range-thumb]:h-4 [&::-moz-range-thumb]:w-4 [&::-moz-range-thumb]:rounded-full [&::-moz-range-thumb]:bg-background-input [&::-moz-range-thumb]:border [&::-moz-range-thumb]:border-border-input\",\n \"hover:[&::-moz-range-thumb]:shadow-sm focus-visible:[&::-moz-range-thumb]:outline-2 focus-visible:[&::-moz-range-thumb]:outline-border-focus\",\n disabled ? \"cursor-not-allowed opacity-60\" : undefined,\n )}\n />\n </div>\n {showValue && (\n <div className=\"min-w-10 text-right text-sm text-text-heading tabular-nums\">{Math.round(clamped)}</div>\n )}\n </div>\n\n {description && <Description className=\"mt-2 text-text-muted\">{description}</Description>}\n {errorMessage && <FieldError className=\"mt-1\">{errorMessage}</FieldError>}\n </div>\n );\n}\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport {\n Radio as RACRadio,\n RadioGroup as RACRadioGroup,\n RadioGroupProps as RACRadioGroupProps,\n RadioProps,\n ValidationResult,\n} from \"react-aria-components\";\nimport { Description, FieldError, Label } from \"../Field\";\nimport { composeTailwindRenderProps, focusRing } from \"../../utils\";\n\nexport interface RadioGroupProps extends Omit<RACRadioGroupProps, \"children\"> {\n /** Label for the radio group */\n label?: string;\n /** Children elements */\n children?: ReactNode;\n /** Optional description for the radio group */\n description?: string;\n /** Error message to display when validation fails */\n errorMessage?: string | ((validation: ValidationResult) => string);\n /** Validation result object for functional errorMessage */\n validationResult?: ValidationResult;\n}\n\nexport function RadioGroup(props: RadioGroupProps) {\n return (\n <RACRadioGroup {...props} className={composeTailwindRenderProps(props.className, \"group flex flex-col gap-2\")}>\n <Label>{props.label}</Label>\n <div className=\"flex gap-2 group-orientation-horizontal:gap-4 group-orientation-vertical:flex-col\">\n {props.children}\n </div>\n {props.description && <Description>{props.description}</Description>}\n <FieldError>\n {typeof props.errorMessage === \"function\" && props.validationResult\n ? props.errorMessage(props.validationResult)\n : typeof props.errorMessage === \"string\"\n ? props.errorMessage\n : null}\n </FieldError>\n </RACRadioGroup>\n );\n}\n\nfunction getRadioStyles({\n isSelected,\n isInvalid,\n isDisabled,\n}: {\n isSelected?: boolean;\n isInvalid?: boolean;\n isDisabled?: boolean;\n}) {\n const baseClasses = [focusRing(), \"w-5 h-5 rounded-full border-2 bg-background-surface transition-all\"];\n\n if (isDisabled) {\n baseClasses.push(\"border-border-muted forced-colors:!border-[GrayText]\");\n } else if (isInvalid) {\n baseClasses.push(\n \"border-feedback-error-border group-pressed:border-feedback-error-border dark:group-pressed:border-feedback-error-border forced-colors:!border-[Mark]\",\n );\n } else if (isSelected) {\n baseClasses.push(\n \"border-[7px] border-action-primary forced-colors:!border-[Highlight] group-pressed:border-action-primary-hover dark:group-pressed:border-action-primary-hover\",\n );\n } else {\n baseClasses.push(\"border-border-default group-pressed:border-border-focus dark:group-pressed:border-border-focus\");\n }\n\n return baseClasses.join(\" \");\n}\n\nexport function Radio(props: RadioProps) {\n return (\n <RACRadio\n {...props}\n className={composeTailwindRenderProps(\n props.className,\n \"group flex items-center gap-2 text-sm text-text-body transition disabled:text-text-muted dark:text-text-body dark:disabled:text-text-muted forced-colors:disabled:text-[GrayText]\",\n )}\n >\n {(renderProps) => (\n <>\n <div className={getRadioStyles(renderProps)} />\n {props.children}\n </>\n )}\n </RACRadio>\n );\n}\n"]}
|