@thangnqdev/ui 0.1.2 → 0.2.1

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.
Files changed (233) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +54 -206
  3. package/bin/cli.js +125 -0
  4. package/dist/bento/index.cjs.map +1 -1
  5. package/dist/bento/index.js +2 -2
  6. package/dist/bento/styles.css +2 -46
  7. package/dist/buttons/index.cjs +111 -18
  8. package/dist/buttons/index.cjs.map +1 -1
  9. package/dist/buttons/index.d.cts +1 -1
  10. package/dist/buttons/index.d.ts +1 -1
  11. package/dist/buttons/index.js +3 -3
  12. package/dist/buttons/styles.css +2 -6
  13. package/dist/{chunk-4S6L5V7X.js → chunk-2YJBW4E2.js} +2 -2
  14. package/dist/chunk-2YJBW4E2.js.map +1 -0
  15. package/dist/{chunk-F5Q7BTMH.js → chunk-4CRFNALF.js} +1011 -556
  16. package/dist/chunk-4CRFNALF.js.map +1 -0
  17. package/dist/{chunk-LWFRUJRU.js → chunk-4MS6ZHFQ.js} +225 -41
  18. package/dist/chunk-4MS6ZHFQ.js.map +1 -0
  19. package/dist/{chunk-2OXZK6IP.js → chunk-77KTYOMQ.js} +3 -3
  20. package/dist/chunk-77KTYOMQ.js.map +1 -0
  21. package/dist/{chunk-IABPUCAQ.js → chunk-ADO3SVUA.js} +2 -2
  22. package/dist/chunk-ADO3SVUA.js.map +1 -0
  23. package/dist/{chunk-GXI2H5XA.js → chunk-D7FB3TCA.js} +3 -3
  24. package/dist/chunk-D7FB3TCA.js.map +1 -0
  25. package/dist/chunk-DSEL7ELZ.js +314 -0
  26. package/dist/chunk-DSEL7ELZ.js.map +1 -0
  27. package/dist/{chunk-KJRBRTQE.js → chunk-EXFR2BFJ.js} +37 -28
  28. package/dist/chunk-EXFR2BFJ.js.map +1 -0
  29. package/dist/{chunk-PF4ZHGVW.js → chunk-GXWB6BSY.js} +116 -23
  30. package/dist/chunk-GXWB6BSY.js.map +1 -0
  31. package/dist/{chunk-66VWUJEI.js → chunk-I2FQBMVW.js} +3 -3
  32. package/dist/chunk-I2FQBMVW.js.map +1 -0
  33. package/dist/{chunk-EU2LPUYP.js → chunk-I5O2WCGF.js} +3 -3
  34. package/dist/chunk-I5O2WCGF.js.map +1 -0
  35. package/dist/{chunk-ATYGDTMK.js → chunk-ME4XILG5.js} +5 -5
  36. package/dist/chunk-ME4XILG5.js.map +1 -0
  37. package/dist/{chunk-5FZ6ZFII.js → chunk-PC5SZFZC.js} +373 -150
  38. package/dist/chunk-PC5SZFZC.js.map +1 -0
  39. package/dist/{chunk-C4SUXMI3.js → chunk-S6XJMYME.js} +3 -3
  40. package/dist/chunk-S6XJMYME.js.map +1 -0
  41. package/dist/{chunk-A7P3O5Z5.js → chunk-V52JOSDF.js} +3 -3
  42. package/dist/chunk-V52JOSDF.js.map +1 -0
  43. package/dist/{chunk-NFVONJUK.js → chunk-W5WNWTQC.js} +455 -211
  44. package/dist/chunk-W5WNWTQC.js.map +1 -0
  45. package/dist/{chunk-WAFHC4DQ.js → chunk-YJ64RI7J.js} +3 -3
  46. package/dist/chunk-YJ64RI7J.js.map +1 -0
  47. package/dist/chunk-YOCGBORV.js +155 -0
  48. package/dist/chunk-YOCGBORV.js.map +1 -0
  49. package/dist/chunk-ZEDXARXW.js +96 -0
  50. package/dist/chunk-ZEDXARXW.js.map +1 -0
  51. package/dist/components.css +2 -0
  52. package/dist/core/index.cjs +33 -24
  53. package/dist/core/index.cjs.map +1 -1
  54. package/dist/core/index.js +2 -2
  55. package/dist/core/styles.css +2 -134
  56. package/dist/data-display/index.cjs +770 -247
  57. package/dist/data-display/index.cjs.map +1 -1
  58. package/dist/data-display/index.d.cts +1 -1
  59. package/dist/data-display/index.d.ts +1 -1
  60. package/dist/data-display/index.js +5 -4
  61. package/dist/data-display/styles.css +2 -4
  62. package/dist/feedback/index.cjs.map +1 -1
  63. package/dist/feedback/index.js +2 -2
  64. package/dist/feedback/styles.css +2 -4
  65. package/dist/forms/index.cjs +1211 -459
  66. package/dist/forms/index.cjs.map +1 -1
  67. package/dist/forms/index.d.cts +1 -1
  68. package/dist/forms/index.d.ts +1 -1
  69. package/dist/forms/index.js +8 -8
  70. package/dist/forms/styles.css +2 -6
  71. package/dist/glass/index.cjs.map +1 -1
  72. package/dist/glass/index.js +2 -2
  73. package/dist/glass/styles.css +2 -81
  74. package/dist/{index-D6fE7w-b.d.cts → index-BGt_hecO.d.cts} +1 -0
  75. package/dist/{index-D6fE7w-b.d.ts → index-BGt_hecO.d.ts} +1 -0
  76. package/dist/{index-DzcWh1Hs.d.cts → index-BtDvpZCf.d.cts} +7 -0
  77. package/dist/{index-DzcWh1Hs.d.ts → index-BtDvpZCf.d.ts} +7 -0
  78. package/dist/{index-Cle6QzQl.d.ts → index-COX1sBUN.d.ts} +27 -3
  79. package/dist/{index-BkRqGNG1.d.ts → index-Cg8MuP7u.d.cts} +40 -13
  80. package/dist/{index-BkRqGNG1.d.cts → index-Cg8MuP7u.d.ts} +40 -13
  81. package/dist/{index-CenuF_P2.d.ts → index-DHkPRTvE.d.cts} +39 -8
  82. package/dist/{index-CenuF_P2.d.cts → index-DHkPRTvE.d.ts} +39 -8
  83. package/dist/{index-TyK-Ldpy.d.cts → index-Du_oht9k.d.cts} +27 -3
  84. package/dist/index.cjs +2481 -917
  85. package/dist/index.cjs.map +1 -1
  86. package/dist/index.d.cts +5 -5
  87. package/dist/index.d.ts +5 -5
  88. package/dist/index.js +19 -19
  89. package/dist/layout/index.cjs.map +1 -1
  90. package/dist/layout/index.js +2 -2
  91. package/dist/layout/styles.css +2 -8
  92. package/dist/navigation/index.cjs +288 -48
  93. package/dist/navigation/index.cjs.map +1 -1
  94. package/dist/navigation/index.d.cts +1 -1
  95. package/dist/navigation/index.d.ts +1 -1
  96. package/dist/navigation/index.js +6 -6
  97. package/dist/navigation/styles.css +2 -4
  98. package/dist/overlays/index.cjs +566 -229
  99. package/dist/overlays/index.cjs.map +1 -1
  100. package/dist/overlays/index.d.cts +1 -1
  101. package/dist/overlays/index.d.ts +1 -1
  102. package/dist/overlays/index.js +7 -7
  103. package/dist/overlays/styles.css +2 -8
  104. package/dist/reset.css +45 -0
  105. package/dist/styles.css +1 -1
  106. package/dist/tokens.css +11 -0
  107. package/dist/typography/index.cjs.map +1 -1
  108. package/dist/typography/index.js +4 -4
  109. package/dist/typography/styles.css +2 -5
  110. package/llms.txt +211 -113
  111. package/package.json +167 -116
  112. package/scripts/postinstall.js +125 -0
  113. package/src/bento/BentoCard.tsx +140 -140
  114. package/src/bento/BentoGrid.tsx +50 -50
  115. package/src/bento/index.ts +2 -2
  116. package/src/bento/tokens.css +46 -46
  117. package/src/buttons/Button.tsx +104 -104
  118. package/src/buttons/ButtonGroup.tsx +43 -43
  119. package/src/buttons/IconButton.tsx +79 -79
  120. package/src/buttons/SplitButton.tsx +186 -86
  121. package/src/buttons/ToggleButton.tsx +157 -157
  122. package/src/buttons/index.ts +5 -5
  123. package/src/buttons/tokens.css +6 -6
  124. package/src/core/ThemeProvider.tsx +135 -123
  125. package/src/core/index.ts +2 -2
  126. package/src/core/tokens.css +134 -134
  127. package/src/data-display/Accordion.tsx +147 -147
  128. package/src/data-display/Avatar.tsx +134 -134
  129. package/src/data-display/Card.tsx +112 -112
  130. package/src/data-display/Chip.tsx +74 -74
  131. package/src/data-display/DataTablePro.tsx +299 -121
  132. package/src/data-display/StatCard.tsx +60 -60
  133. package/src/data-display/Table.tsx +74 -74
  134. package/src/data-display/Timeline.tsx +62 -62
  135. package/src/data-display/TreeView.tsx +243 -104
  136. package/src/data-display/tokens.css +4 -4
  137. package/src/feedback/Alert.tsx +80 -80
  138. package/src/feedback/EmptyState.tsx +45 -45
  139. package/src/feedback/Skeleton.tsx +66 -66
  140. package/src/feedback/Spinner.tsx +65 -65
  141. package/src/feedback/index.ts +5 -5
  142. package/src/feedback/tokens.css +4 -4
  143. package/src/forms/Checkbox.tsx +149 -69
  144. package/src/forms/CheckboxGroup.tsx +76 -29
  145. package/src/forms/Combobox.tsx +172 -28
  146. package/src/forms/DatePicker.tsx +385 -81
  147. package/src/forms/FileUpload.tsx +51 -7
  148. package/src/forms/FormField.tsx +115 -115
  149. package/src/forms/Input.tsx +151 -151
  150. package/src/forms/NumberInput.tsx +34 -20
  151. package/src/forms/PasswordInput.tsx +35 -35
  152. package/src/forms/PinInput.tsx +139 -125
  153. package/src/forms/Radio.tsx +142 -142
  154. package/src/forms/RangeSlider.tsx +237 -111
  155. package/src/forms/SearchInput.tsx +34 -34
  156. package/src/forms/Select.tsx +103 -103
  157. package/src/forms/Slider.tsx +85 -85
  158. package/src/forms/Textarea.tsx +114 -114
  159. package/src/forms/tokens.css +6 -6
  160. package/src/glass/GlassButton.tsx +59 -59
  161. package/src/glass/GlassCard.tsx +71 -71
  162. package/src/glass/index.ts +3 -3
  163. package/src/glass/tokens.css +81 -81
  164. package/src/index.ts +26 -26
  165. package/src/layout/AspectRatio.tsx +39 -39
  166. package/src/layout/Container.tsx +53 -53
  167. package/src/layout/Divider.tsx +61 -61
  168. package/src/layout/Flex.tsx +79 -79
  169. package/src/layout/Grid.tsx +124 -124
  170. package/src/layout/PageLayout.tsx +59 -59
  171. package/src/layout/Section.tsx +47 -47
  172. package/src/layout/Spacer.tsx +30 -30
  173. package/src/layout/Stack.tsx +88 -88
  174. package/src/layout/tokens.css +8 -8
  175. package/src/navigation/Breadcrumb.tsx +73 -73
  176. package/src/navigation/CommandPalette.tsx +142 -142
  177. package/src/navigation/DropdownMenu.tsx +244 -160
  178. package/src/navigation/Pagination.tsx +114 -114
  179. package/src/navigation/Stepper.tsx +93 -93
  180. package/src/navigation/Tabs.tsx +265 -133
  181. package/src/navigation/index.ts +6 -6
  182. package/src/navigation/tokens.css +4 -4
  183. package/src/overlays/AlertDialog.tsx +63 -54
  184. package/src/overlays/BottomSheet.tsx +30 -10
  185. package/src/overlays/ContextMenu.tsx +51 -9
  186. package/src/overlays/Drawer.tsx +160 -145
  187. package/src/overlays/FocusTrap.tsx +122 -49
  188. package/src/overlays/Modal.tsx +296 -219
  189. package/src/overlays/Popover.tsx +55 -25
  190. package/src/overlays/Portal.tsx +23 -23
  191. package/src/overlays/Toast.tsx +175 -137
  192. package/src/overlays/Tooltip.tsx +125 -100
  193. package/src/overlays/tokens.css +8 -8
  194. package/src/registry/components.ts +1368 -0
  195. package/src/styles/components.css +39 -0
  196. package/src/styles/index.css +2 -93
  197. package/src/styles/reset.css +45 -0
  198. package/src/styles/tokens.css +11 -2
  199. package/src/typography/Blockquote.tsx +32 -32
  200. package/src/typography/Code.tsx +89 -89
  201. package/src/typography/Heading.tsx +56 -56
  202. package/src/typography/Kbd.tsx +25 -25
  203. package/src/typography/Label.tsx +47 -47
  204. package/src/typography/Link.tsx +56 -56
  205. package/src/typography/Text.tsx +62 -62
  206. package/src/typography/index.ts +7 -7
  207. package/src/typography/tokens.css +5 -5
  208. package/src/utils/cn.ts +6 -6
  209. package/src/utils/scroll-lock.ts +19 -0
  210. package/src/utils/useControllableState.ts +54 -0
  211. package/ui-contract.json +192 -35
  212. package/dist/chunk-2OXZK6IP.js.map +0 -1
  213. package/dist/chunk-4S6L5V7X.js.map +0 -1
  214. package/dist/chunk-5FZ6ZFII.js.map +0 -1
  215. package/dist/chunk-66VWUJEI.js.map +0 -1
  216. package/dist/chunk-A7P3O5Z5.js.map +0 -1
  217. package/dist/chunk-ATYGDTMK.js.map +0 -1
  218. package/dist/chunk-C4SUXMI3.js.map +0 -1
  219. package/dist/chunk-EU2LPUYP.js.map +0 -1
  220. package/dist/chunk-F5Q7BTMH.js.map +0 -1
  221. package/dist/chunk-GXI2H5XA.js.map +0 -1
  222. package/dist/chunk-H3LCNPMC.js +0 -101
  223. package/dist/chunk-H3LCNPMC.js.map +0 -1
  224. package/dist/chunk-IABPUCAQ.js.map +0 -1
  225. package/dist/chunk-KJRBRTQE.js.map +0 -1
  226. package/dist/chunk-LBUBXUYQ.js +0 -40
  227. package/dist/chunk-LBUBXUYQ.js.map +0 -1
  228. package/dist/chunk-LWFRUJRU.js.map +0 -1
  229. package/dist/chunk-NFVONJUK.js.map +0 -1
  230. package/dist/chunk-PF4ZHGVW.js.map +0 -1
  231. package/dist/chunk-WAFHC4DQ.js.map +0 -1
  232. package/dist/chunk-X76KBH4Y.js +0 -71
  233. package/dist/chunk-X76KBH4Y.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/forms/index.ts","../src/forms/Input.tsx","../src/forms/SearchInput.tsx","../src/forms/PasswordInput.tsx","../src/forms/Textarea.tsx","../src/forms/Select.tsx","../src/forms/Radio.tsx","../src/forms/Switch.tsx","../src/forms/Slider.tsx","../src/forms/RangeSlider.tsx","../src/forms/PinInput.tsx","../src/forms/DatePicker.tsx","../src/forms/Combobox.tsx","../src/forms/FileUpload.tsx","../src/forms/NumberInput.tsx","../src/forms/MaskedInput.tsx"],"names":["forwardRef","jsx","jsxs","useState","cva","React","useRef","useEffect","CalendarIcon","X","period","Search","Fragment"],"mappings":"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","file":"chunk-4CRFNALF.js","sourcesContent":["export * from './FormField';\nexport * from './Input';\nexport * from './SearchInput';\nexport * from './PasswordInput';\nexport * from './Textarea';\nexport * from './Select';\nexport * from './Checkbox';\nexport * from './CheckboxGroup';\nexport * from './Radio';\nexport * from './Switch';\nexport * from './Slider';\nexport * from './RangeSlider';\nexport * from './PinInput';\nexport * from './DatePicker';\nexport * from './Combobox';\nexport * from './FileUpload';\nexport * from './NumberInput';\nexport * from './MaskedInput';\n","import React, { forwardRef, useState } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { X } from 'lucide-react';\nimport { useFormField } from './FormField';\nimport { cn } from '../utils/cn';\n\nexport const inputVariants = cva(\n 'w-full rounded-[var(--ui-radius-md)] border bg-[var(--ui-bg-surface)]/70 backdrop-blur-md text-[var(--ui-text-primary)] placeholder:text-[var(--ui-text-muted)] transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ui-primary)]/70 focus-visible:border-[var(--ui-primary)] focus-visible:shadow-[0_0_16px_rgba(99,102,241,0.2)] disabled:cursor-not-allowed disabled:opacity-50 shadow-inner',\n {\n variants: {\n size: {\n sm: 'h-8 px-2.5 text-xs',\n md: 'h-10 px-3.5 text-sm',\n lg: 'h-12 px-4 text-base',\n },\n variant: {\n default: 'border-[var(--ui-border-default)] hover:border-[var(--ui-border-strong)]',\n filled: 'bg-[var(--ui-bg-secondary)] border-transparent hover:bg-[var(--ui-bg-tertiary)]',\n },\n isInvalid: {\n true: 'border-[var(--ui-error)] focus-visible:ring-[var(--ui-error)]/70 focus-visible:shadow-[0_0_16px_rgba(244,63,94,0.25)]',\n false: '',\n },\n },\n defaultVariants: {\n size: 'md',\n variant: 'default',\n isInvalid: false,\n },\n }\n);\n\nexport interface InputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'>,\n VariantProps<typeof inputVariants> {\n prefixIcon?: React.ReactNode;\n suffixIcon?: React.ReactNode;\n clearable?: boolean;\n onClear?: () => void;\n}\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n type = 'text',\n size,\n variant,\n isInvalid: customInvalid,\n prefixIcon,\n suffixIcon,\n clearable,\n onClear,\n value,\n onChange,\n disabled,\n id,\n ...props\n },\n ref\n ) => {\n const formField = useFormField();\n const isInvalid = customInvalid ?? formField?.isInvalid ?? false;\n const isDisabled = disabled ?? formField?.isDisabled ?? false;\n const inputId = id || formField?.id;\n\n const isControlled = value !== undefined;\n const [uncontrolledVal, setUncontrolledVal] = useState(\n props.defaultValue !== undefined ? String(props.defaultValue) : ''\n );\n const innerRef = React.useRef<HTMLInputElement | null>(null);\n\n const handleRef = (node: HTMLInputElement | null) => {\n innerRef.current = node;\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLInputElement | null>).current = node;\n }\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) {\n setUncontrolledVal(e.target.value);\n }\n onChange?.(e);\n };\n\n const handleClear = () => {\n if (!isControlled && innerRef.current) {\n innerRef.current.value = '';\n setUncontrolledVal('');\n const event = new Event('input', { bubbles: true });\n innerRef.current.dispatchEvent(event);\n }\n onClear?.();\n };\n\n const hasValue = isControlled\n ? Boolean(value)\n : Boolean(uncontrolledVal || innerRef.current?.value);\n\n return (\n <div className=\"relative w-full flex items-center\">\n {prefixIcon && (\n <div className=\"absolute left-3 flex items-center pointer-events-none text-[var(--ui-text-muted)]\">\n {prefixIcon}\n </div>\n )}\n\n <input\n ref={handleRef}\n id={inputId}\n type={type}\n disabled={isDisabled}\n {...(isControlled ? { value } : {})}\n onChange={handleChange}\n aria-invalid={isInvalid}\n aria-describedby={\n isInvalid\n ? formField?.errorId\n : formField?.descriptionId || undefined\n }\n className={cn(\n inputVariants({ size, variant, isInvalid }),\n prefixIcon && 'pl-9',\n (suffixIcon || (clearable && hasValue)) && 'pr-9',\n className\n )}\n {...props}\n />\n\n <div className=\"absolute right-3 flex items-center gap-1 text-[var(--ui-text-muted)]\">\n {clearable && hasValue && !isDisabled && (\n <button\n type=\"button\"\n onClick={handleClear}\n className=\"p-0.5 rounded-full hover:bg-[var(--ui-bg-tertiary)] hover:text-[var(--ui-text-primary)] transition-colors\"\n aria-label=\"Clear input\"\n >\n <X className=\"w-3.5 h-3.5\" />\n </button>\n )}\n {suffixIcon && <span className=\"pointer-events-none flex items-center\">{suffixIcon}</span>}\n </div>\n </div>\n );\n }\n);\n\nInput.displayName = 'Input';\n","import { forwardRef } from 'react';\nimport { Search } from 'lucide-react';\nimport { Input, InputProps } from './Input';\nimport { Kbd } from '../typography/Kbd';\n\nexport interface SearchInputProps extends Omit<InputProps, 'type' | 'prefixIcon'> {\n shortcut?: string;\n}\n\nexport const SearchInput = forwardRef<HTMLInputElement, SearchInputProps>(\n ({ shortcut, clearable = true, suffixIcon, ...props }, ref) => {\n return (\n <Input\n ref={ref}\n type=\"search\"\n clearable={clearable}\n prefixIcon={<Search className=\"w-4 h-4\" />}\n suffixIcon={\n shortcut ? (\n <div className=\"flex items-center gap-1\">\n <Kbd>{shortcut}</Kbd>\n {suffixIcon}\n </div>\n ) : (\n suffixIcon\n )\n }\n {...props}\n />\n );\n }\n);\n\nSearchInput.displayName = 'SearchInput';\n","import React, { forwardRef, useState } from 'react';\nimport { Eye, EyeOff } from 'lucide-react';\nimport { Input, InputProps } from './Input';\n\nexport interface PasswordInputProps extends Omit<InputProps, 'type' | 'suffixIcon'> {\n showToggle?: boolean;\n}\n\nexport const PasswordInput = forwardRef<HTMLInputElement, PasswordInputProps>(\n ({ showToggle = true, ...props }, ref) => {\n const [showPassword, setShowPassword] = useState(false);\n\n return (\n <Input\n ref={ref}\n type={showPassword ? 'text' : 'password'}\n suffixIcon={\n showToggle ? (\n <button\n type=\"button\"\n onClick={() => setShowPassword(!showPassword)}\n className=\"p-1 rounded hover:bg-[var(--ui-bg-tertiary)] text-[var(--ui-text-muted)] hover:text-[var(--ui-text-primary)] pointer-events-auto transition-colors\"\n aria-label={showPassword ? 'Hide password' : 'Show password'}\n >\n {showPassword ? <EyeOff className=\"w-4 h-4\" /> : <Eye className=\"w-4 h-4\" />}\n </button>\n ) : undefined\n }\n {...props}\n />\n );\n }\n);\n\nPasswordInput.displayName = 'PasswordInput';\n","import React, { forwardRef, useEffect, useRef } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useFormField } from './FormField';\nimport { cn } from '../utils/cn';\n\nexport const textareaVariants = cva(\n 'w-full rounded-[var(--ui-radius-md)] border bg-[var(--ui-bg-surface)] p-3 text-sm text-[var(--ui-text-primary)] placeholder:text-[var(--ui-text-muted)] transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ui-primary)] disabled:cursor-not-allowed disabled:opacity-50 min-h-[80px]',\n {\n variants: {\n variant: {\n default: 'border-[var(--ui-border-default)] hover:border-[var(--ui-border-strong)]',\n filled: 'bg-[var(--ui-bg-secondary)] border-transparent hover:bg-[var(--ui-bg-tertiary)]',\n },\n isInvalid: {\n true: 'border-[var(--ui-error)] focus-visible:ring-[var(--ui-error)]',\n false: '',\n },\n resize: {\n none: 'resize-none',\n vertical: 'resize-y',\n horizontal: 'resize-x',\n both: 'resize',\n },\n },\n defaultVariants: {\n variant: 'default',\n isInvalid: false,\n resize: 'vertical',\n },\n }\n);\n\nexport interface TextareaProps\n extends React.TextareaHTMLAttributes<HTMLTextAreaElement>,\n VariantProps<typeof textareaVariants> {\n autoResize?: boolean;\n}\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n (\n {\n className,\n variant,\n isInvalid: customInvalid,\n resize,\n autoResize = false,\n disabled,\n value,\n onChange,\n id,\n ...props\n },\n ref\n ) => {\n const formField = useFormField();\n const isInvalid = customInvalid ?? formField?.isInvalid ?? false;\n const isDisabled = disabled ?? formField?.isDisabled ?? false;\n const inputId = id || formField?.id;\n\n const innerRef = useRef<HTMLTextAreaElement | null>(null);\n\n const setMergedRef = (element: HTMLTextAreaElement | null) => {\n innerRef.current = element;\n if (typeof ref === 'function') {\n ref(element);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLTextAreaElement | null>).current = element;\n }\n };\n\n const handleInput = () => {\n if (autoResize && innerRef.current) {\n innerRef.current.style.height = 'auto';\n innerRef.current.style.height = `${innerRef.current.scrollHeight}px`;\n }\n };\n\n useEffect(() => {\n if (autoResize && innerRef.current) {\n handleInput();\n }\n }, [value, autoResize]);\n\n return (\n <textarea\n ref={setMergedRef}\n id={inputId}\n disabled={isDisabled}\n value={value}\n onChange={(e) => {\n handleInput();\n onChange?.(e);\n }}\n aria-invalid={isInvalid}\n aria-describedby={\n isInvalid\n ? formField?.errorId\n : formField?.descriptionId || undefined\n }\n className={cn(\n textareaVariants({\n variant,\n isInvalid,\n resize: autoResize ? 'none' : resize,\n }),\n className\n )}\n {...props}\n />\n );\n }\n);\n\nTextarea.displayName = 'Textarea';\n","import React, { forwardRef } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { ChevronDown } from 'lucide-react';\nimport { useFormField } from './FormField';\nimport { cn } from '../utils/cn';\n\nexport const selectVariants = cva(\n 'w-full rounded-[var(--ui-radius-md)] border bg-[var(--ui-bg-surface)] text-[var(--ui-text-primary)] transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ui-primary)] disabled:cursor-not-allowed disabled:opacity-50 appearance-none pr-10',\n {\n variants: {\n size: {\n sm: 'h-8 px-2.5 text-xs',\n md: 'h-10 px-3.5 text-sm',\n lg: 'h-12 px-4 text-base',\n },\n variant: {\n default: 'border-[var(--ui-border-default)] hover:border-[var(--ui-border-strong)]',\n filled: 'bg-[var(--ui-bg-secondary)] border-transparent hover:bg-[var(--ui-bg-tertiary)]',\n },\n isInvalid: {\n true: 'border-[var(--ui-error)] focus-visible:ring-[var(--ui-error)]',\n false: '',\n },\n },\n defaultVariants: {\n size: 'md',\n variant: 'default',\n isInvalid: false,\n },\n }\n);\n\nexport interface SelectOption {\n value: string | number;\n label: string;\n disabled?: boolean;\n}\n\nexport interface SelectProps\n extends Omit<React.SelectHTMLAttributes<HTMLSelectElement>, 'size'>,\n VariantProps<typeof selectVariants> {\n options?: SelectOption[];\n placeholder?: string;\n}\n\nexport const Select = forwardRef<HTMLSelectElement, SelectProps>(\n (\n {\n className,\n size,\n variant,\n isInvalid: customInvalid,\n options,\n placeholder,\n disabled,\n children,\n id,\n ...props\n },\n ref\n ) => {\n const formField = useFormField();\n const isInvalid = customInvalid ?? formField?.isInvalid ?? false;\n const isDisabled = disabled ?? formField?.isDisabled ?? false;\n const inputId = id || formField?.id;\n\n return (\n <div className=\"relative w-full flex items-center\">\n <select\n ref={ref}\n id={inputId}\n disabled={isDisabled}\n aria-invalid={isInvalid}\n aria-describedby={\n isInvalid\n ? formField?.errorId\n : formField?.descriptionId || undefined\n }\n className={cn(selectVariants({ size, variant, isInvalid }), className)}\n {...props}\n >\n {placeholder && (\n <option value=\"\" disabled hidden>\n {placeholder}\n </option>\n )}\n {options\n ? options.map((opt) => (\n <option key={opt.value} value={opt.value} disabled={opt.disabled}>\n {opt.label}\n </option>\n ))\n : children}\n </select>\n <div className=\"absolute right-3 flex items-center pointer-events-none text-[var(--ui-text-muted)]\">\n <ChevronDown className=\"w-4 h-4\" />\n </div>\n </div>\n );\n }\n);\n\nSelect.displayName = 'Select';\n","import React, { forwardRef, createContext, useContext } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../utils/cn';\n\ninterface RadioGroupContextType {\n name?: string;\n value?: string;\n onChange?: (val: string) => void;\n disabled?: boolean;\n}\n\nconst RadioGroupContext = createContext<RadioGroupContextType | null>(null);\n\nexport const radioVariants = cva(\n 'peer shrink-0 rounded-full border border-[var(--ui-border-default)] bg-[var(--ui-bg-surface)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ui-primary)] disabled:cursor-not-allowed disabled:opacity-50 transition-all cursor-pointer flex items-center justify-center',\n {\n variants: {\n size: {\n sm: 'w-4 h-4',\n md: 'w-5 h-5',\n lg: 'w-6 h-6',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n);\n\nexport interface RadioProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'>,\n VariantProps<typeof radioVariants> {\n label?: React.ReactNode;\n value: string;\n}\n\nexport const Radio = forwardRef<HTMLInputElement, RadioProps>(\n ({ className, size, label, value, checked, disabled, id, onChange, ...props }, ref) => {\n const group = useContext(RadioGroupContext);\n const isChecked = checked ?? (group?.value !== undefined ? group.value === value : false);\n const isDisabled = disabled ?? group?.disabled ?? false;\n const name = props.name || group?.name;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(e);\n if (group?.onChange) {\n group.onChange(value);\n }\n };\n\n return (\n <label className={cn('inline-flex items-center gap-2 select-none cursor-pointer', isDisabled && 'cursor-not-allowed opacity-50')}>\n <div className=\"relative flex items-center justify-center\">\n <input\n ref={ref}\n type=\"radio\"\n name={name}\n value={value}\n id={id}\n disabled={isDisabled}\n checked={isChecked}\n onChange={handleChange}\n className=\"sr-only peer\"\n {...props}\n />\n <div\n className={cn(\n radioVariants({ size }),\n isChecked && 'border-[var(--ui-primary)]',\n className\n )}\n >\n {isChecked && (\n <span className=\"w-2.5 h-2.5 rounded-full bg-[var(--ui-primary)] animate-in zoom-in-75 duration-150\" />\n )}\n </div>\n </div>\n {label && <span className=\"text-sm font-medium text-[var(--ui-text-primary)]\">{label}</span>}\n </label>\n );\n }\n);\nRadio.displayName = 'Radio';\n\nexport interface RadioGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n name?: string;\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n orientation?: 'horizontal' | 'vertical';\n disabled?: boolean;\n}\n\nexport const RadioGroup = forwardRef<HTMLDivElement, RadioGroupProps>(\n (\n {\n className,\n name,\n value: controlledValue,\n defaultValue,\n onValueChange,\n orientation = 'vertical',\n disabled,\n children,\n ...props\n },\n ref\n ) => {\n const [val, setVal] = React.useState(defaultValue || '');\n const currentValue = controlledValue !== undefined ? controlledValue : val;\n\n const handleChange = (newValue: string) => {\n setVal(newValue);\n onValueChange?.(newValue);\n };\n\n return (\n <RadioGroupContext.Provider\n value={{\n name,\n value: currentValue,\n onChange: handleChange,\n disabled,\n }}\n >\n <div\n ref={ref}\n role=\"radiogroup\"\n className={cn(\n 'flex gap-2',\n orientation === 'vertical' ? 'flex-col' : 'flex-row flex-wrap items-center',\n className\n )}\n {...props}\n >\n {children}\n </div>\n </RadioGroupContext.Provider>\n );\n }\n);\nRadioGroup.displayName = 'RadioGroup';\n","import React, { forwardRef, useState } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useFormField } from './FormField';\nimport { cn } from '../utils/cn';\n\nexport const switchVariants = cva(\n 'peer inline-flex shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-all duration-200 focus-visible:outline-none focus-visible:ring-4 focus-visible:ring-[#34c759]/30 disabled:cursor-not-allowed disabled:opacity-50 bg-[var(--ui-border-strong)] data-[state=checked]:bg-[#34c759] dark:data-[state=checked]:bg-[#30d158] shadow-inner',\n {\n variants: {\n size: {\n sm: 'h-5 w-9 p-0.5',\n md: 'h-6.5 w-12 p-0.5',\n lg: 'h-8 w-15 p-1',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n);\n\nexport const switchThumbVariants = cva(\n 'pointer-events-none block rounded-full bg-white shadow-[0_2px_4px_rgba(0,0,0,0.25)] ring-0 transition-transform duration-200 ease-out data-[state=unchecked]:translate-x-0',\n {\n variants: {\n size: {\n sm: 'h-4 w-4 data-[state=checked]:translate-x-4',\n md: 'h-5.5 w-5.5 data-[state=checked]:translate-x-5.5',\n lg: 'h-6 w-6 data-[state=checked]:translate-x-7',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n);\n\nexport interface SwitchProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'>,\n VariantProps<typeof switchVariants> {\n label?: React.ReactNode;\n checked?: boolean;\n defaultChecked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n}\n\nexport const Switch = forwardRef<HTMLInputElement, SwitchProps>(\n ({ className, size, label, checked, defaultChecked, onCheckedChange, disabled, id, onChange, ...props }, ref) => {\n const isControlled = checked !== undefined;\n const [internalChecked, setInternalChecked] = useState(defaultChecked ?? false);\n const isChecked = isControlled ? checked : internalChecked;\n\n const formField = useFormField();\n const isDisabled = disabled ?? formField?.isDisabled ?? false;\n const switchId = id || formField?.id;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) {\n setInternalChecked(e.target.checked);\n }\n onChange?.(e);\n onCheckedChange?.(e.target.checked);\n };\n\n return (\n <label className={cn('inline-flex items-center gap-3 select-none cursor-pointer', isDisabled && 'cursor-not-allowed opacity-50')}>\n <div className=\"relative flex items-center\">\n <input\n ref={ref}\n type=\"checkbox\"\n role=\"switch\"\n id={switchId}\n disabled={isDisabled}\n checked={isChecked}\n onChange={handleChange}\n className=\"sr-only peer\"\n {...props}\n />\n <div\n data-state={isChecked ? 'checked' : 'unchecked'}\n className={cn(switchVariants({ size }), className)}\n >\n <span\n data-state={isChecked ? 'checked' : 'unchecked'}\n className={cn(switchThumbVariants({ size }))}\n />\n </div>\n </div>\n {label && <span className=\"text-sm font-medium text-[var(--ui-text-primary)]\">{label}</span>}\n </label>\n );\n }\n);\n\nSwitch.displayName = 'Switch';\n","import React, { forwardRef } from 'react';\nimport { cn } from '../utils/cn';\n\nexport interface SliderProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange' | 'value' | 'defaultValue'> {\n value?: number;\n defaultValue?: number;\n min?: number;\n max?: number;\n step?: number;\n showValue?: boolean;\n formatValue?: (val: number) => string;\n onChange?: (val: number) => void;\n}\n\nexport const Slider = forwardRef<HTMLInputElement, SliderProps>(\n (\n {\n className,\n value: controlledValue,\n defaultValue = 0,\n min = 0,\n max = 100,\n step = 1,\n showValue = false,\n formatValue = (v) => `${v}`,\n onChange,\n disabled,\n ...props\n },\n ref\n ) => {\n const [val, setVal] = React.useState<number>(defaultValue);\n const currentValue = controlledValue !== undefined ? controlledValue : val;\n\n const percentage = Math.min(100, Math.max(0, ((currentValue - min) / (max - min)) * 100));\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const num = Number(e.target.value);\n setVal(num);\n onChange?.(num);\n };\n\n return (\n <div className={cn('w-full flex items-center gap-4', className)}>\n <div className=\"relative w-full flex items-center h-6 select-none touch-none\">\n {/* Rail */}\n <div className=\"w-full h-2 rounded-full bg-[var(--ui-border-default)] overflow-hidden relative\">\n {/* Fill Track */}\n <div\n className=\"h-full bg-[var(--ui-primary)] transition-all duration-75\"\n style={{ width: `${percentage}%` }}\n />\n </div>\n\n <input\n ref={ref}\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={currentValue}\n disabled={disabled}\n onChange={handleChange}\n className=\"absolute inset-0 w-full h-full opacity-0 cursor-pointer disabled:cursor-not-allowed\"\n {...props}\n />\n\n {/* Thumb visual */}\n <div\n className=\"absolute w-5 h-5 rounded-full bg-white border-2 border-[var(--ui-primary)] shadow-md pointer-events-none transition-transform duration-75 -translate-x-1/2\"\n style={{ left: `${percentage}%` }}\n />\n </div>\n\n {showValue && (\n <span className=\"text-xs font-semibold font-mono text-[var(--ui-text-secondary)] min-w-[2.5rem] text-right\">\n {formatValue(currentValue)}\n </span>\n )}\n </div>\n );\n }\n);\n\nSlider.displayName = 'Slider';\n","import React, { forwardRef, useState, useRef, useCallback, useEffect } from 'react';\nimport { cn } from '../utils/cn';\n\nexport interface RangeSliderProps {\n min?: number;\n max?: number;\n step?: number;\n value?: [number, number];\n defaultValue?: [number, number];\n onChange?: (val: [number, number]) => void;\n showValue?: boolean;\n formatValue?: (val: number) => string;\n className?: string;\n disabled?: boolean;\n name?: string;\n 'aria-label'?: string;\n}\n\nexport const RangeSlider = forwardRef<HTMLDivElement, RangeSliderProps>(\n (\n {\n min = 0,\n max = 100,\n step = 1,\n value: controlledValue,\n defaultValue = [20, 80],\n onChange,\n showValue = false,\n formatValue = (v) => `${v}`,\n className,\n disabled = false,\n name,\n 'aria-label': ariaLabel = 'Range slider',\n },\n ref\n ) => {\n const isControlled = controlledValue !== undefined;\n const [internalValue, setInternalValue] = useState<[number, number]>(defaultValue);\n const currentValue = isControlled ? controlledValue : internalValue;\n\n const [minVal, maxVal] = [\n Math.max(min, Math.min(currentValue[0], currentValue[1])),\n Math.min(max, Math.max(currentValue[0], currentValue[1])),\n ];\n\n const trackRef = useRef<HTMLDivElement>(null);\n const draggingThumbRef = useRef<'min' | 'max' | null>(null);\n\n const updateValues = useCallback(\n (newMin: number, newMax: number) => {\n const clampedMin = Math.max(min, Math.min(newMin, newMax));\n const clampedMax = Math.min(max, Math.max(clampedMin, newMax));\n const next: [number, number] = [clampedMin, clampedMax];\n\n if (!isControlled) {\n setInternalValue(next);\n }\n onChange?.(next);\n },\n [min, max, isControlled, onChange]\n );\n\n const getValueFromPointer = useCallback(\n (clientX: number): number => {\n if (!trackRef.current) return min;\n const rect = trackRef.current.getBoundingClientRect();\n const percent = Math.min(1, Math.max(0, (clientX - rect.left) / rect.width));\n const rawValue = min + percent * (max - min);\n const steppedValue = Math.round((rawValue - min) / step) * step + min;\n return Math.min(max, Math.max(min, Number(steppedValue.toFixed(4))));\n },\n [min, max, step]\n );\n\n const handlePointerDown = (e: React.PointerEvent<HTMLDivElement>) => {\n if (disabled) return;\n const clickedVal = getValueFromPointer(e.clientX);\n const distToMin = Math.abs(clickedVal - minVal);\n const distToMax = Math.abs(clickedVal - maxVal);\n\n const targetThumb = distToMin <= distToMax ? 'min' : 'max';\n draggingThumbRef.current = targetThumb;\n\n if (targetThumb === 'min') {\n updateValues(Math.min(clickedVal, maxVal), maxVal);\n } else {\n updateValues(minVal, Math.max(clickedVal, minVal));\n }\n\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n };\n\n const handlePointerMove = (e: React.PointerEvent<HTMLDivElement>) => {\n if (disabled || !draggingThumbRef.current) return;\n const moveVal = getValueFromPointer(e.clientX);\n\n if (draggingThumbRef.current === 'min') {\n updateValues(Math.min(moveVal, maxVal), maxVal);\n } else {\n updateValues(minVal, Math.max(moveVal, minVal));\n }\n };\n\n const handlePointerUp = (e: React.PointerEvent<HTMLDivElement>) => {\n if (draggingThumbRef.current) {\n draggingThumbRef.current = null;\n try {\n (e.currentTarget as HTMLElement).releasePointerCapture(e.pointerId);\n } catch {\n // ignore\n }\n }\n };\n\n const handleKeyDownMin = (e: React.KeyboardEvent) => {\n if (disabled) return;\n let nextMin = minVal;\n if (e.key === 'ArrowRight' || e.key === 'ArrowUp') {\n e.preventDefault();\n nextMin = Math.min(minVal + step, maxVal);\n } else if (e.key === 'ArrowLeft' || e.key === 'ArrowDown') {\n e.preventDefault();\n nextMin = Math.max(minVal - step, min);\n } else if (e.key === 'Home') {\n e.preventDefault();\n nextMin = min;\n } else if (e.key === 'End') {\n e.preventDefault();\n nextMin = maxVal;\n }\n if (nextMin !== minVal) {\n updateValues(nextMin, maxVal);\n }\n };\n\n const handleKeyDownMax = (e: React.KeyboardEvent) => {\n if (disabled) return;\n let nextMax = maxVal;\n if (e.key === 'ArrowRight' || e.key === 'ArrowUp') {\n e.preventDefault();\n nextMax = Math.min(maxVal + step, max);\n } else if (e.key === 'ArrowLeft' || e.key === 'ArrowDown') {\n e.preventDefault();\n nextMax = Math.max(maxVal - step, minVal);\n } else if (e.key === 'Home') {\n e.preventDefault();\n nextMax = minVal;\n } else if (e.key === 'End') {\n e.preventDefault();\n nextMax = max;\n }\n if (nextMax !== maxVal) {\n updateValues(minVal, nextMax);\n }\n };\n\n const minPercentage = Math.min(100, Math.max(0, ((minVal - min) / (max - min || 1)) * 100));\n const maxPercentage = Math.min(100, Math.max(0, ((maxVal - min) / (max - min || 1)) * 100));\n\n return (\n <div\n ref={ref}\n className={cn('w-full flex items-center gap-4', disabled && 'opacity-50 cursor-not-allowed', className)}\n >\n <div\n ref={trackRef}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n className=\"relative w-full flex items-center h-7 select-none touch-none cursor-pointer\"\n >\n {/* Base rail */}\n <div className=\"w-full h-2 rounded-full bg-[var(--ui-border-default)] overflow-hidden relative\">\n {/* Active Range Fill */}\n <div\n className=\"absolute h-full bg-[var(--ui-primary)]\"\n style={{\n left: `${minPercentage}%`,\n width: `${Math.max(0, maxPercentage - minPercentage)}%`,\n }}\n />\n </div>\n\n {/* Hidden inputs for form submission if name provided */}\n {name && (\n <>\n <input type=\"hidden\" name={`${name}_min`} value={minVal} />\n <input type=\"hidden\" name={`${name}_max`} value={maxVal} />\n </>\n )}\n\n {/* Min thumb */}\n <div\n role=\"slider\"\n tabIndex={disabled ? -1 : 0}\n aria-label={`${ariaLabel} minimum`}\n aria-valuemin={min}\n aria-valuemax={maxVal}\n aria-valuenow={minVal}\n aria-disabled={disabled}\n onKeyDown={handleKeyDownMin}\n className={cn(\n 'absolute w-5 h-5 rounded-full bg-white border-2 border-[var(--ui-primary)] shadow-md -translate-x-1/2 z-20 cursor-grab active:cursor-grabbing transition-shadow focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ui-primary)] focus-visible:ring-offset-2',\n disabled && 'pointer-events-none'\n )}\n style={{ left: `${minPercentage}%` }}\n />\n\n {/* Max thumb */}\n <div\n role=\"slider\"\n tabIndex={disabled ? -1 : 0}\n aria-label={`${ariaLabel} maximum`}\n aria-valuemin={minVal}\n aria-valuemax={max}\n aria-valuenow={maxVal}\n aria-disabled={disabled}\n onKeyDown={handleKeyDownMax}\n className={cn(\n 'absolute w-5 h-5 rounded-full bg-white border-2 border-[var(--ui-primary)] shadow-md -translate-x-1/2 z-20 cursor-grab active:cursor-grabbing transition-shadow focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ui-primary)] focus-visible:ring-offset-2',\n disabled && 'pointer-events-none'\n )}\n style={{ left: `${maxPercentage}%` }}\n />\n </div>\n\n {showValue && (\n <span className=\"text-xs font-semibold font-mono text-[var(--ui-text-secondary)] min-w-[5rem] text-right\">\n {formatValue(minVal)} - {formatValue(maxVal)}\n </span>\n )}\n </div>\n );\n }\n);\n\nRangeSlider.displayName = 'RangeSlider';\n","import React, { forwardRef, useRef, useState, useEffect } from 'react';\nimport { cn } from '../utils/cn';\n\nexport interface PinInputProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n length?: number;\n value?: string;\n defaultValue?: string;\n onChange?: (val: string) => void;\n onComplete?: (val: string) => void;\n mask?: boolean;\n disabled?: boolean;\n isInvalid?: boolean;\n autoFocus?: boolean;\n}\n\nexport const PinInput = forwardRef<HTMLDivElement, PinInputProps>(\n (\n {\n className,\n length = 4,\n value: controlledValue,\n defaultValue = '',\n onChange,\n onComplete,\n mask = false,\n disabled = false,\n isInvalid = false,\n autoFocus = false,\n ...props\n },\n ref\n ) => {\n const isControlled = controlledValue !== undefined;\n const [internalPins, setInternalPins] = useState<string[]>(() => {\n const initial = (controlledValue !== undefined ? controlledValue : defaultValue).slice(0, length);\n return Array.from({ length }, (_, i) => initial[i] || '');\n });\n\n const pins = isControlled\n ? Array.from({ length }, (_, i) => controlledValue[i] || '')\n : internalPins;\n\n const inputsRef = useRef<(HTMLInputElement | null)[]>([]);\n\n useEffect(() => {\n if (autoFocus && inputsRef.current[0]) {\n inputsRef.current[0].focus();\n }\n }, [autoFocus]);\n\n const handleDigitChange = (index: number, val: string) => {\n const sanitized = val.replace(/[^0-9a-zA-Z]/g, '').slice(-1);\n const newPins = [...pins];\n newPins[index] = sanitized;\n if (!isControlled) {\n setInternalPins(newPins);\n }\n\n const combined = newPins.join('');\n onChange?.(combined);\n\n if (sanitized && index < length - 1) {\n inputsRef.current[index + 1]?.focus();\n }\n\n if (combined.length === length && !newPins.includes('')) {\n onComplete?.(combined);\n }\n };\n\n const handleKeyDown = (index: number, e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Backspace') {\n if (!pins[index] && index > 0) {\n const newPins = [...pins];\n newPins[index - 1] = '';\n if (!isControlled) setInternalPins(newPins);\n onChange?.(newPins.join(''));\n inputsRef.current[index - 1]?.focus();\n }\n } else if (e.key === 'ArrowLeft' && index > 0) {\n e.preventDefault();\n inputsRef.current[index - 1]?.focus();\n } else if (e.key === 'ArrowRight' && index < length - 1) {\n e.preventDefault();\n inputsRef.current[index + 1]?.focus();\n }\n };\n\n const handlePaste = (e: React.ClipboardEvent<HTMLInputElement>) => {\n e.preventDefault();\n const pasted = e.clipboardData.getData('text').replace(/[^0-9a-zA-Z]/g, '').slice(0, length);\n if (!pasted) return;\n\n const newPins = Array.from({ length }, (_, i) => pasted[i] || '');\n if (!isControlled) setInternalPins(newPins);\n\n const combined = newPins.join('');\n onChange?.(combined);\n\n const nextEmptyIndex = newPins.findIndex((p) => !p);\n const focusIndex = nextEmptyIndex === -1 ? length - 1 : nextEmptyIndex;\n inputsRef.current[focusIndex]?.focus();\n\n if (combined.length === length && !newPins.includes('')) {\n onComplete?.(combined);\n }\n };\n\n return (\n <div ref={ref} role=\"group\" aria-label=\"PIN Code Input\" className={cn('flex items-center gap-2', className)} {...props}>\n {Array.from({ length }).map((_, index) => (\n <input\n key={index}\n ref={(el) => {\n inputsRef.current[index] = el;\n }}\n type={mask ? 'password' : 'text'}\n inputMode=\"numeric\"\n maxLength={1}\n disabled={disabled}\n aria-label={`Digit ${index + 1} of ${length}`}\n value={pins[index]}\n onChange={(e) => handleDigitChange(index, e.target.value)}\n onKeyDown={(e) => handleKeyDown(index, e)}\n onPaste={handlePaste}\n className={cn(\n 'w-11 h-12 text-center text-lg font-bold font-mono rounded-[var(--ui-radius-md)] border bg-[var(--ui-bg-surface)] text-[var(--ui-text-primary)] transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ui-primary)] disabled:opacity-50 disabled:cursor-not-allowed',\n isInvalid\n ? 'border-[var(--ui-error)] focus-visible:ring-[var(--ui-error)]'\n : 'border-[var(--ui-border-default)] hover:border-[var(--ui-border-strong)]'\n )}\n />\n ))}\n </div>\n );\n }\n);\n\nPinInput.displayName = 'PinInput';\n","import React, { forwardRef, useState, useRef, useEffect } from 'react';\nimport { Calendar as CalendarIcon, Clock, ChevronLeft, ChevronRight, X } from 'lucide-react';\nimport { cn } from '../utils/cn';\nimport { Popover } from '../overlays/Popover';\nimport { useControllableState } from '../utils/useControllableState';\n\n// Utility helper to format date as YYYY-MM-DD\nexport function formatDate(d: Date | null | undefined): string {\n if (!d) return '';\n const year = d.getFullYear();\n const month = String(d.getMonth() + 1).padStart(2, '0');\n const day = String(d.getDate()).padStart(2, '0');\n return `${year}-${month}-${day}`;\n}\n\nexport function formatDisplayDate(d: Date | null | undefined): string {\n if (!d) return '';\n return d.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' });\n}\n\nexport interface DatePickerProps {\n value?: Date | null;\n defaultValue?: Date | null;\n onChange?: (date: Date | null) => void;\n placeholder?: string;\n minDate?: Date;\n maxDate?: Date;\n disabled?: boolean;\n clearable?: boolean;\n className?: string;\n presets?: { label: string; date: Date }[];\n}\n\nexport const DatePicker = forwardRef<HTMLDivElement, DatePickerProps>(\n (\n {\n value: controlledValue,\n defaultValue = null,\n onChange,\n placeholder = 'Select date...',\n minDate,\n maxDate,\n disabled = false,\n clearable = true,\n className,\n presets,\n },\n ref\n ) => {\n const [selectedDate, setSelectedDate] = useControllableState<Date | null>({\n value: controlledValue,\n defaultValue,\n onChange,\n name: 'DatePicker',\n });\n\n const [viewDate, setViewDate] = useState<Date>(selectedDate || new Date());\n const [isOpen, setIsOpen] = useState(false);\n const [focusedDate, setFocusedDate] = useState<Date>(selectedDate || new Date());\n\n useEffect(() => {\n if (selectedDate) {\n setViewDate(selectedDate);\n setFocusedDate(selectedDate);\n }\n }, [selectedDate]);\n\n const handleSelectDate = (d: Date) => {\n setSelectedDate(d);\n setIsOpen(false);\n };\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n setSelectedDate(null);\n };\n\n const prevMonth = () => {\n setViewDate(new Date(viewDate.getFullYear(), viewDate.getMonth() - 1, 1));\n };\n\n const nextMonth = () => {\n setViewDate(new Date(viewDate.getFullYear(), viewDate.getMonth() + 1, 1));\n };\n\n // Calendar generation logic\n const year = viewDate.getFullYear();\n const month = viewDate.getMonth();\n const firstDayIndex = new Date(year, month, 1).getDay();\n const daysInMonth = new Date(year, month + 1, 0).getDate();\n const daysInPrevMonth = new Date(year, month, 0).getDate();\n\n const days: { date: Date; currentMonth: boolean; disabled: boolean }[] = [];\n\n // Prev month padding days\n for (let i = firstDayIndex - 1; i >= 0; i--) {\n const d = new Date(year, month - 1, daysInPrevMonth - i);\n const isDis = (minDate && d < minDate) || (maxDate && d > maxDate);\n days.push({ date: d, currentMonth: false, disabled: Boolean(isDis) });\n }\n\n // Current month days\n for (let i = 1; i <= daysInMonth; i++) {\n const d = new Date(year, month, i);\n const isDis = (minDate && d < minDate) || (maxDate && d > maxDate);\n days.push({ date: d, currentMonth: true, disabled: Boolean(isDis) });\n }\n\n // Next month padding days to complete grid of 35 or 42\n const totalSlots = days.length > 35 ? 42 : 35;\n const remainingSlots = totalSlots - days.length;\n for (let i = 1; i <= remainingSlots; i++) {\n const d = new Date(year, month + 1, i);\n const isDis = (minDate && d < minDate) || (maxDate && d > maxDate);\n days.push({ date: d, currentMonth: false, disabled: Boolean(isDis) });\n }\n\n const todayStr = formatDate(new Date());\n const selectedStr = selectedDate ? formatDate(selectedDate) : '';\n const focusedStr = formatDate(focusedDate);\n\n // Keyboard navigation within the calendar grid\n const handleGridKeyDown = (e: React.KeyboardEvent) => {\n let nextDate = new Date(focusedDate);\n let handled = false;\n\n if (e.key === 'ArrowLeft') {\n nextDate.setDate(nextDate.getDate() - 1);\n handled = true;\n } else if (e.key === 'ArrowRight') {\n nextDate.setDate(nextDate.getDate() + 1);\n handled = true;\n } else if (e.key === 'ArrowUp') {\n nextDate.setDate(nextDate.getDate() - 7);\n handled = true;\n } else if (e.key === 'ArrowDown') {\n nextDate.setDate(nextDate.getDate() + 7);\n handled = true;\n } else if (e.key === 'PageUp') {\n nextDate.setMonth(nextDate.getMonth() - 1);\n handled = true;\n } else if (e.key === 'PageDown') {\n nextDate.setMonth(nextDate.getMonth() + 1);\n handled = true;\n } else if (e.key === 'Home') {\n nextDate.setDate(1);\n handled = true;\n } else if (e.key === 'End') {\n const lastDay = new Date(nextDate.getFullYear(), nextDate.getMonth() + 1, 0).getDate();\n nextDate.setDate(lastDay);\n handled = true;\n } else if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleSelectDate(focusedDate);\n return;\n } else if (e.key === 'Escape') {\n e.preventDefault();\n setIsOpen(false);\n return;\n }\n\n if (handled) {\n e.preventDefault();\n setFocusedDate(nextDate);\n if (nextDate.getMonth() !== viewDate.getMonth() || nextDate.getFullYear() !== viewDate.getFullYear()) {\n setViewDate(new Date(nextDate.getFullYear(), nextDate.getMonth(), 1));\n }\n }\n };\n\n return (\n <div ref={ref} className={cn('relative inline-block w-full', className)}>\n <Popover\n open={isOpen}\n onOpenChange={setIsOpen}\n trigger={\n <button\n type=\"button\"\n disabled={disabled}\n aria-haspopup=\"dialog\"\n aria-expanded={isOpen}\n aria-label={selectedDate ? `Selected date: ${formatDisplayDate(selectedDate)}` : placeholder}\n className={cn(\n 'w-full h-10 px-3.5 rounded-[var(--ui-radius-md)] border bg-[var(--ui-bg-surface)] text-left flex items-center justify-between text-sm transition-all shadow-inner cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ui-primary)]',\n disabled\n ? 'opacity-50 cursor-not-allowed border-[var(--ui-border-subtle)]'\n : 'border-[var(--ui-border-default)] hover:border-[var(--ui-border-strong)]'\n )}\n >\n <div className=\"flex items-center gap-2.5 truncate\">\n <CalendarIcon className=\"w-4 h-4 text-[var(--ui-text-muted)] shrink-0\" />\n <span className={selectedDate ? 'text-[var(--ui-text-primary)] font-medium' : 'text-[var(--ui-text-muted)]'}>\n {selectedDate ? formatDisplayDate(selectedDate) : placeholder}\n </span>\n </div>\n\n <div className=\"flex items-center gap-1 text-[var(--ui-text-muted)]\">\n {clearable && selectedDate && !disabled && (\n <span\n role=\"button\"\n tabIndex={0}\n aria-label=\"Clear date\"\n onClick={handleClear}\n onKeyDown={(e) => e.key === 'Enter' && handleClear(e as unknown as React.MouseEvent)}\n className=\"p-1 rounded-full hover:bg-[var(--ui-bg-tertiary)] hover:text-[var(--ui-text-primary)] transition-colors\"\n >\n <X className=\"w-3.5 h-3.5\" />\n </span>\n )}\n </div>\n </button>\n }\n >\n <div\n role=\"dialog\"\n aria-label=\"Choose date\"\n className=\"p-4 w-72 rounded-2xl bg-[var(--ui-bg-surface)] backdrop-blur-2xl border border-[var(--ui-border-default)] shadow-2xl space-y-3\"\n onKeyDown={handleGridKeyDown}\n >\n {/* Header: Month Year + Prev/Next */}\n <div className=\"flex items-center justify-between\">\n <span\n id=\"calendar-month-heading\"\n className=\"text-xs font-bold text-[var(--ui-text-primary)] font-mono uppercase tracking-wider\"\n aria-live=\"polite\"\n >\n {viewDate.toLocaleString('default', { month: 'long', year: 'numeric' })}\n </span>\n <div className=\"flex items-center gap-1\">\n <button\n type=\"button\"\n onClick={prevMonth}\n aria-label=\"Previous month\"\n className=\"p-1 rounded-lg hover:bg-[var(--ui-bg-tertiary)] text-[var(--ui-text-muted)] hover:text-[var(--ui-text-primary)] transition-colors cursor-pointer\"\n >\n <ChevronLeft className=\"w-4 h-4\" />\n </button>\n <button\n type=\"button\"\n onClick={nextMonth}\n aria-label=\"Next month\"\n className=\"p-1 rounded-lg hover:bg-[var(--ui-bg-tertiary)] text-[var(--ui-text-muted)] hover:text-[var(--ui-text-primary)] transition-colors cursor-pointer\"\n >\n <ChevronRight className=\"w-4 h-4\" />\n </button>\n </div>\n </div>\n\n {/* Presets if provided */}\n {presets && presets.length > 0 && (\n <div className=\"flex flex-wrap gap-1 pb-2 border-b border-[var(--ui-border-subtle)]\">\n {presets.map((preset, idx) => (\n <button\n key={idx}\n type=\"button\"\n onClick={() => handleSelectDate(preset.date)}\n className=\"px-2 py-0.5 rounded-md text-[10px] font-semibold bg-[var(--ui-bg-secondary)] hover:bg-[var(--ui-bg-tertiary)] text-[var(--ui-text-secondary)] transition-colors cursor-pointer\"\n >\n {preset.label}\n </button>\n ))}\n </div>\n )}\n\n {/* Weekday headers */}\n <div\n role=\"row\"\n className=\"grid grid-cols-7 text-center text-[10px] font-bold text-[var(--ui-text-muted)] font-mono\"\n >\n {[\n { short: 'Su', full: 'Sunday' },\n { short: 'Mo', full: 'Monday' },\n { short: 'Tu', full: 'Tuesday' },\n { short: 'We', full: 'Wednesday' },\n { short: 'Th', full: 'Thursday' },\n { short: 'Fr', full: 'Friday' },\n { short: 'Sa', full: 'Saturday' },\n ].map((d) => (\n <div key={d.short} role=\"columnheader\" aria-label={d.full} className=\"py-1\">\n {d.short}\n </div>\n ))}\n </div>\n\n {/* Day grid */}\n <div\n role=\"grid\"\n aria-labelledby=\"calendar-month-heading\"\n className=\"grid grid-cols-7 gap-1\"\n >\n {days.map((item, idx) => {\n const itemStr = formatDate(item.date);\n const isSelected = itemStr === selectedStr;\n const isToday = itemStr === todayStr;\n const isFocused = itemStr === focusedStr;\n\n const fullDateLabel = item.date.toLocaleDateString('en-US', {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n });\n\n return (\n <button\n key={idx}\n type=\"button\"\n role=\"gridcell\"\n disabled={item.disabled}\n aria-selected={isSelected}\n aria-current={isToday ? 'date' : undefined}\n aria-label={fullDateLabel}\n tabIndex={isFocused ? 0 : -1}\n onClick={() => handleSelectDate(item.date)}\n className={cn(\n 'h-8 w-8 rounded-full text-xs font-semibold flex items-center justify-center transition-all cursor-pointer outline-none',\n item.disabled && 'opacity-25 cursor-not-allowed pointer-events-none',\n !item.currentMonth && 'text-[var(--ui-text-muted)] opacity-50',\n isFocused && 'ring-2 ring-[var(--ui-primary)]',\n isSelected\n ? 'bg-[var(--ui-primary)] text-white font-bold shadow-md shadow-blue-500/30'\n : isToday\n ? 'border border-[var(--ui-primary)] text-[var(--ui-primary)]'\n : 'hover:bg-[var(--ui-bg-tertiary)] text-[var(--ui-text-primary)]'\n )}\n >\n {item.date.getDate()}\n </button>\n );\n })}\n </div>\n </div>\n </Popover>\n </div>\n );\n }\n);\nDatePicker.displayName = 'DatePicker';\n\n/* -------------------------------------------------------------------------------------------------\n * DateRangePicker Component\n * -----------------------------------------------------------------------------------------------*/\nexport interface DateRange {\n from: Date | null;\n to: Date | null;\n}\n\nexport interface DateRangePickerProps {\n value?: DateRange;\n defaultValue?: DateRange;\n onChange?: (range: DateRange) => void;\n placeholder?: string;\n className?: string;\n disabled?: boolean;\n}\n\nexport const DateRangePicker = forwardRef<HTMLDivElement, DateRangePickerProps>(\n ({ value: controlledVal, defaultValue = { from: null, to: null }, onChange, placeholder = 'Select date range...', className, disabled = false }, ref) => {\n const [range, setRange] = useControllableState<DateRange>({\n value: controlledVal,\n defaultValue,\n onChange,\n name: 'DateRangePicker',\n });\n\n const [viewDate, setViewDate] = useState<Date>(range.from || new Date());\n const [isOpen, setIsOpen] = useState(false);\n\n const handleDayClick = (d: Date) => {\n let next: DateRange;\n if (!range.from || (range.from && range.to)) {\n next = { from: d, to: null };\n } else {\n if (d < range.from) {\n next = { from: d, to: range.from };\n } else {\n next = { from: range.from, to: d };\n setIsOpen(false);\n }\n }\n setRange(next);\n };\n\n const displayText =\n range.from && range.to\n ? `${formatDisplayDate(range.from)} – ${formatDisplayDate(range.to)}`\n : range.from\n ? `${formatDisplayDate(range.from)} – ...`\n : placeholder;\n\n // Calendar generation\n const year = viewDate.getFullYear();\n const month = viewDate.getMonth();\n const firstDayIndex = new Date(year, month, 1).getDay();\n const daysInMonth = new Date(year, month + 1, 0).getDate();\n\n const days: Date[] = [];\n for (let i = 1; i <= daysInMonth; i++) {\n days.push(new Date(year, month, i));\n }\n\n return (\n <div ref={ref} className={cn('relative inline-block w-full', className)}>\n <Popover\n open={isOpen}\n onOpenChange={setIsOpen}\n trigger={\n <button\n type=\"button\"\n disabled={disabled}\n aria-haspopup=\"dialog\"\n aria-expanded={isOpen}\n aria-label={displayText}\n className=\"w-full h-10 px-3.5 rounded-[var(--ui-radius-md)] border border-[var(--ui-border-default)] hover:border-[var(--ui-border-strong)] bg-[var(--ui-bg-surface)] text-left flex items-center justify-between text-sm shadow-inner cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ui-primary)]\"\n >\n <div className=\"flex items-center gap-2.5 truncate\">\n <CalendarIcon className=\"w-4 h-4 text-[var(--ui-text-muted)] shrink-0\" />\n <span className={range.from ? 'text-[var(--ui-text-primary)] font-medium' : 'text-[var(--ui-text-muted)]'}>\n {displayText}\n </span>\n </div>\n </button>\n }\n >\n <div\n role=\"dialog\"\n aria-label=\"Choose date range\"\n className=\"p-4 w-76 rounded-2xl bg-[var(--ui-bg-surface)] backdrop-blur-2xl border border-[var(--ui-border-default)] shadow-2xl space-y-3\"\n >\n <div className=\"flex items-center justify-between\">\n <span id=\"range-month-heading\" className=\"text-xs font-bold text-[var(--ui-text-primary)] font-mono uppercase tracking-wider\">\n {viewDate.toLocaleString('default', { month: 'long', year: 'numeric' })}\n </span>\n <div className=\"flex items-center gap-1\">\n <button\n type=\"button\"\n onClick={() => setViewDate(new Date(year, month - 1, 1))}\n aria-label=\"Previous month\"\n className=\"p-1 rounded-lg hover:bg-[var(--ui-bg-tertiary)] cursor-pointer\"\n >\n <ChevronLeft className=\"w-4 h-4\" />\n </button>\n <button\n type=\"button\"\n onClick={() => setViewDate(new Date(year, month + 1, 1))}\n aria-label=\"Next month\"\n className=\"p-1 rounded-lg hover:bg-[var(--ui-bg-tertiary)] cursor-pointer\"\n >\n <ChevronRight className=\"w-4 h-4\" />\n </button>\n </div>\n </div>\n\n <div\n role=\"grid\"\n aria-labelledby=\"range-month-heading\"\n className=\"grid grid-cols-7 gap-1 text-center\"\n >\n {Array.from({ length: firstDayIndex }).map((_, i) => (\n <div key={`empty-${i}`} />\n ))}\n {days.map((d, idx) => {\n const dStr = formatDate(d);\n const fromStr = range.from ? formatDate(range.from) : '';\n const toStr = range.to ? formatDate(range.to) : '';\n const isFrom = dStr === fromStr;\n const isTo = dStr === toStr;\n const isInRange =\n range.from && range.to && d > range.from && d < range.to;\n\n return (\n <button\n key={idx}\n type=\"button\"\n role=\"gridcell\"\n aria-selected={Boolean(isFrom || isTo || isInRange)}\n aria-label={d.toLocaleDateString('en-US', { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' })}\n onClick={() => handleDayClick(d)}\n className={cn(\n 'h-8 w-8 rounded-full text-xs font-semibold flex items-center justify-center transition-all cursor-pointer',\n (isFrom || isTo) && 'bg-[var(--ui-primary)] text-white shadow-md',\n isInRange && 'bg-[var(--ui-primary)]/20 text-[var(--ui-primary)] rounded-none',\n !isFrom && !isTo && !isInRange && 'hover:bg-[var(--ui-bg-tertiary)] text-[var(--ui-text-primary)]'\n )}\n >\n {d.getDate()}\n </button>\n );\n })}\n </div>\n </div>\n </Popover>\n </div>\n );\n }\n);\nDateRangePicker.displayName = 'DateRangePicker';\n\n/* -------------------------------------------------------------------------------------------------\n * TimePicker Component\n * -----------------------------------------------------------------------------------------------*/\nexport interface TimePickerProps {\n value?: string;\n defaultValue?: string;\n onChange?: (time: string) => void;\n format?: '12h' | '24h';\n className?: string;\n disabled?: boolean;\n placeholder?: string;\n}\n\nexport const TimePicker = forwardRef<HTMLDivElement, TimePickerProps>(\n (\n {\n value: controlledVal,\n defaultValue,\n onChange,\n format = '24h',\n className,\n disabled = false,\n placeholder = 'Select time...',\n },\n ref\n ) => {\n const is12h = format === '12h';\n const fallbackDefault = defaultValue ?? (is12h ? '12:00 PM' : '12:00');\n\n const [time, setTime] = useControllableState<string>({\n value: controlledVal,\n defaultValue: fallbackDefault,\n onChange,\n name: 'TimePicker',\n });\n\n const [isOpen, setIsOpen] = useState(false);\n\n // Parsing helper\n const parseTime = (str: string, is12: boolean) => {\n if (!str) return { hours: is12 ? '12' : '12', minutes: '00', period: 'AM' };\n const trimmed = str.trim();\n let period = 'AM';\n let cleanTime = trimmed;\n if (trimmed.toLowerCase().includes('pm')) {\n period = 'PM';\n cleanTime = trimmed.replace(/pm/i, '').trim();\n } else if (trimmed.toLowerCase().includes('am')) {\n period = 'AM';\n cleanTime = trimmed.replace(/am/i, '').trim();\n }\n const parts = cleanTime.split(':');\n let h = parts[0] ? parts[0].padStart(2, '0') : is12 ? '12' : '00';\n const m = parts[1] ? parts[1].padStart(2, '0') : '00';\n return { hours: h, minutes: m, period };\n };\n\n const { hours, minutes, period } = parseTime(time, is12h);\n\n const updateTime = (newH: string, newM: string, newPeriod?: string) => {\n let formatted: string;\n if (is12h) {\n const p = newPeriod ?? period;\n formatted = `${newH.padStart(2, '0')}:${newM.padStart(2, '0')} ${p}`;\n } else {\n formatted = `${newH.padStart(2, '0')}:${newM.padStart(2, '0')}`;\n }\n setTime(formatted);\n };\n\n const hourOptions = is12h\n ? Array.from({ length: 12 }, (_, i) => String(i + 1).padStart(2, '0'))\n : Array.from({ length: 24 }, (_, i) => String(i).padStart(2, '0'));\n\n const minuteOptions = ['00', '05', '10', '15', '20', '25', '30', '35', '40', '45', '50', '55'];\n\n const hourListRef = useRef<HTMLDivElement>(null);\n const minuteListRef = useRef<HTMLDivElement>(null);\n const periodListRef = useRef<HTMLDivElement>(null);\n\n // Auto-focus active option when opened\n useEffect(() => {\n if (isOpen) {\n const timer = setTimeout(() => {\n const activeHourEl = hourListRef.current?.querySelector<HTMLElement>('[aria-selected=\"true\"]');\n activeHourEl?.focus();\n }, 10);\n return () => clearTimeout(timer);\n }\n }, [isOpen]);\n\n const handleHourKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n const idx = hourOptions.indexOf(hours);\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n const next = hourOptions[(idx + 1) % hourOptions.length];\n updateTime(next, minutes, period);\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n const prev = hourOptions[(idx - 1 + hourOptions.length) % hourOptions.length];\n updateTime(prev, minutes, period);\n } else if (e.key === 'ArrowRight') {\n e.preventDefault();\n const activeMinEl = minuteListRef.current?.querySelector<HTMLElement>('[aria-selected=\"true\"]') || minuteListRef.current?.querySelector<HTMLElement>('[role=\"option\"]');\n activeMinEl?.focus();\n } else if (e.key === 'Escape') {\n e.preventDefault();\n setIsOpen(false);\n }\n };\n\n const handleMinuteKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n const idx = minuteOptions.indexOf(minutes);\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n const next = minuteOptions[(idx + 1) % minuteOptions.length];\n updateTime(hours, next, period);\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n const prev = minuteOptions[(idx - 1 + minuteOptions.length) % minuteOptions.length];\n updateTime(hours, prev, period);\n } else if (e.key === 'ArrowLeft') {\n e.preventDefault();\n const activeHourEl = hourListRef.current?.querySelector<HTMLElement>('[aria-selected=\"true\"]');\n activeHourEl?.focus();\n } else if (e.key === 'ArrowRight' && is12h) {\n e.preventDefault();\n const activePeriodEl = periodListRef.current?.querySelector<HTMLElement>('[aria-selected=\"true\"]');\n activePeriodEl?.focus();\n } else if (e.key === 'Escape') {\n e.preventDefault();\n setIsOpen(false);\n }\n };\n\n const handlePeriodKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault();\n const next = period === 'AM' ? 'PM' : 'AM';\n updateTime(hours, minutes, next);\n } else if (e.key === 'ArrowLeft') {\n e.preventDefault();\n const activeMinEl = minuteListRef.current?.querySelector<HTMLElement>('[aria-selected=\"true\"]');\n activeMinEl?.focus();\n } else if (e.key === 'Escape') {\n e.preventDefault();\n setIsOpen(false);\n }\n };\n\n return (\n <div ref={ref} className={cn('relative inline-block w-full', className)}>\n <Popover\n open={isOpen}\n onOpenChange={setIsOpen}\n trigger={\n <button\n type=\"button\"\n disabled={disabled}\n aria-haspopup=\"dialog\"\n aria-expanded={isOpen}\n aria-label={`Selected time: ${time}`}\n className={cn(\n 'w-full h-10 px-3.5 rounded-[var(--ui-radius-md)] border border-[var(--ui-border-default)] hover:border-[var(--ui-border-strong)] bg-[var(--ui-bg-surface)] text-left flex items-center justify-between text-sm shadow-inner transition-colors cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ui-primary)]',\n disabled && 'opacity-50 cursor-not-allowed'\n )}\n >\n <div className=\"flex items-center gap-2.5\">\n <Clock className=\"w-4 h-4 text-[var(--ui-text-muted)] shrink-0\" />\n <span className=\"font-mono text-sm font-semibold text-[var(--ui-text-primary)]\">\n {time || placeholder}\n </span>\n </div>\n </button>\n }\n >\n <div\n role=\"dialog\"\n aria-label=\"Choose time\"\n className=\"p-4 rounded-2xl bg-[var(--ui-bg-surface)] backdrop-blur-2xl border border-[var(--ui-border-default)] shadow-2xl space-y-3\"\n >\n <span className=\"text-xs font-bold text-[var(--ui-text-muted)] uppercase tracking-wider font-mono\">\n Select Time ({format})\n </span>\n <div className=\"flex items-center justify-center gap-2\">\n {/* Hours */}\n <div\n ref={hourListRef}\n tabIndex={0}\n onKeyDown={handleHourKeyDown}\n className=\"h-40 overflow-y-auto border border-[var(--ui-border-subtle)] rounded-xl p-1 w-16 text-center space-y-1 focus:outline-none focus:ring-1 focus:ring-[var(--ui-primary)]\"\n role=\"listbox\"\n aria-label=\"Hour\"\n >\n {hourOptions.map((h) => {\n const isSelected = hours === h;\n return (\n <div\n key={h}\n tabIndex={isSelected ? 0 : -1}\n role=\"option\"\n aria-selected={isSelected}\n onClick={() => updateTime(h, minutes, period)}\n className={cn(\n 'text-xs py-1 rounded-lg font-mono font-semibold cursor-pointer transition-colors select-none outline-none focus-visible:ring-1 focus-visible:ring-[var(--ui-primary)]',\n isSelected\n ? 'bg-[var(--ui-primary)] text-white'\n : 'hover:bg-[var(--ui-bg-tertiary)] text-[var(--ui-text-primary)]'\n )}\n >\n {h}\n </div>\n );\n })}\n </div>\n <span className=\"text-sm font-bold\">:</span>\n {/* Minutes */}\n <div\n ref={minuteListRef}\n tabIndex={0}\n onKeyDown={handleMinuteKeyDown}\n className=\"h-40 overflow-y-auto border border-[var(--ui-border-subtle)] rounded-xl p-1 w-16 text-center space-y-1 focus:outline-none focus:ring-1 focus:ring-[var(--ui-primary)]\"\n role=\"listbox\"\n aria-label=\"Minute\"\n >\n {minuteOptions.map((m) => {\n const isSelected = minutes === m;\n return (\n <div\n key={m}\n tabIndex={isSelected ? 0 : -1}\n role=\"option\"\n aria-selected={isSelected}\n onClick={() => updateTime(hours, m, period)}\n className={cn(\n 'text-xs py-1 rounded-lg font-mono font-semibold cursor-pointer transition-colors select-none outline-none focus-visible:ring-1 focus-visible:ring-[var(--ui-primary)]',\n isSelected\n ? 'bg-[var(--ui-primary)] text-white'\n : 'hover:bg-[var(--ui-bg-tertiary)] text-[var(--ui-text-primary)]'\n )}\n >\n {m}\n </div>\n );\n })}\n </div>\n {/* Period (AM/PM) for 12h */}\n {is12h && (\n <div\n ref={periodListRef}\n tabIndex={0}\n onKeyDown={handlePeriodKeyDown}\n className=\"h-40 border border-[var(--ui-border-subtle)] rounded-xl p-1 w-14 text-center space-y-1 flex flex-col justify-center focus:outline-none focus:ring-1 focus:ring-[var(--ui-primary)]\"\n role=\"listbox\"\n aria-label=\"Period\"\n >\n {['AM', 'PM'].map((p) => {\n const isSelected = period === p;\n return (\n <div\n key={p}\n tabIndex={isSelected ? 0 : -1}\n role=\"option\"\n aria-selected={isSelected}\n onClick={() => updateTime(hours, minutes, p)}\n className={cn(\n 'text-xs py-2 rounded-lg font-mono font-semibold cursor-pointer transition-colors select-none outline-none focus-visible:ring-1 focus-visible:ring-[var(--ui-primary)]',\n isSelected\n ? 'bg-[var(--ui-primary)] text-white'\n : 'hover:bg-[var(--ui-bg-tertiary)] text-[var(--ui-text-primary)]'\n )}\n >\n {p}\n </div>\n );\n })}\n </div>\n )}\n </div>\n </div>\n </Popover>\n </div>\n );\n }\n);\nTimePicker.displayName = 'TimePicker';\n","import React, { forwardRef, useState, useRef, useEffect, useId } from 'react';\nimport { Check, ChevronsUpDown, Search, X } from 'lucide-react';\nimport { cn } from '../utils/cn';\nimport { Popover } from '../overlays/Popover';\nimport { Chip } from '../data-display/Chip';\n\nexport interface ComboboxOption {\n value: string;\n label: string;\n description?: string;\n icon?: React.ReactNode;\n disabled?: boolean;\n}\n\nexport interface ComboboxProps {\n options: ComboboxOption[];\n value?: string;\n defaultValue?: string;\n onChange?: (val: string) => void;\n placeholder?: string;\n searchPlaceholder?: string;\n emptyText?: string;\n disabled?: boolean;\n clearable?: boolean;\n className?: string;\n name?: string;\n id?: string;\n 'aria-label'?: string;\n}\n\nexport const Combobox = forwardRef<HTMLDivElement, ComboboxProps>(\n (\n {\n options,\n value: controlledVal,\n defaultValue = '',\n onChange,\n placeholder = 'Select option...',\n searchPlaceholder = 'Search items...',\n emptyText = 'No items found.',\n disabled = false,\n clearable = true,\n className,\n name,\n id: customId,\n 'aria-label': ariaLabel = 'Select option',\n },\n ref\n ) => {\n const baseId = useId();\n const comboId = customId || `combobox-${baseId}`;\n const listboxId = `listbox-${baseId}`;\n\n const [internalVal, setInternalVal] = useState(defaultValue);\n const isControlled = controlledVal !== undefined;\n const selectedValue = isControlled ? controlledVal : internalVal;\n\n const [search, setSearch] = useState('');\n const [isOpen, setIsOpen] = useState(false);\n const [highlightIndex, setHighlightIndex] = useState(0);\n\n const searchInputRef = useRef<HTMLInputElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n\n const filteredOptions = options.filter(\n (opt) =>\n opt.label.toLowerCase().includes(search.toLowerCase()) ||\n opt.value.toLowerCase().includes(search.toLowerCase()) ||\n (opt.description && opt.description.toLowerCase().includes(search.toLowerCase()))\n );\n\n const selectedOption = options.find((opt) => opt.value === selectedValue);\n\n // Keep highlight index valid\n useEffect(() => {\n if (filteredOptions.length > 0) {\n setHighlightIndex((prev) => Math.min(prev, filteredOptions.length - 1));\n }\n }, [filteredOptions.length]);\n\n const handleSelect = (val: string) => {\n if (!isControlled) {\n setInternalVal(val);\n }\n onChange?.(val);\n setIsOpen(false);\n setSearch('');\n triggerRef.current?.focus();\n };\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n if (!isControlled) {\n setInternalVal('');\n }\n onChange?.('');\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (!isOpen) {\n if (e.key === 'ArrowDown' || e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n setIsOpen(true);\n }\n return;\n }\n\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n let next = highlightIndex + 1;\n while (next < filteredOptions.length && filteredOptions[next]?.disabled) {\n next++;\n }\n if (next < filteredOptions.length) {\n setHighlightIndex(next);\n }\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n let prev = highlightIndex - 1;\n while (prev >= 0 && filteredOptions[prev]?.disabled) {\n prev--;\n }\n if (prev >= 0) {\n setHighlightIndex(prev);\n }\n } else if (e.key === 'Home') {\n e.preventDefault();\n let first = 0;\n while (first < filteredOptions.length && filteredOptions[first]?.disabled) {\n first++;\n }\n setHighlightIndex(first);\n } else if (e.key === 'End') {\n e.preventDefault();\n let last = filteredOptions.length - 1;\n while (last >= 0 && filteredOptions[last]?.disabled) {\n last--;\n }\n setHighlightIndex(last);\n } else if (e.key === 'Enter') {\n e.preventDefault();\n const highlighted = filteredOptions[highlightIndex];\n if (highlighted && !highlighted.disabled) {\n handleSelect(highlighted.value);\n }\n } else if (e.key === 'Escape') {\n e.preventDefault();\n setIsOpen(false);\n triggerRef.current?.focus();\n }\n };\n\n const activeDescendantId =\n filteredOptions[highlightIndex]\n ? `combobox-opt-${baseId}-${filteredOptions[highlightIndex].value}`\n : undefined;\n\n return (\n <div ref={ref} className={cn('relative w-full', className)}>\n {name && <input type=\"hidden\" name={name} value={selectedValue} />}\n <Popover\n isOpen={isOpen}\n onClose={() => setIsOpen(false)}\n trigger={\n <button\n ref={triggerRef}\n id={comboId}\n type=\"button\"\n disabled={disabled}\n role=\"combobox\"\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-controls={isOpen ? listboxId : undefined}\n aria-label={ariaLabel}\n onClick={() => !disabled && setIsOpen(!isOpen)}\n onKeyDown={handleKeyDown}\n className={cn(\n 'w-full h-10 px-3.5 rounded-[var(--ui-radius-md)] border bg-[var(--ui-bg-surface)] text-left flex items-center justify-between text-sm transition-all shadow-inner cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ui-primary)]',\n disabled\n ? 'opacity-50 cursor-not-allowed border-[var(--ui-border-subtle)]'\n : 'border-[var(--ui-border-default)] hover:border-[var(--ui-border-strong)]'\n )}\n >\n <div className=\"flex items-center gap-2.5 truncate\">\n {selectedOption?.icon}\n <span className={selectedOption ? 'text-[var(--ui-text-primary)] font-medium' : 'text-[var(--ui-text-muted)]'}>\n {selectedOption ? selectedOption.label : placeholder}\n </span>\n </div>\n\n <div className=\"flex items-center gap-1 text-[var(--ui-text-muted)]\">\n {clearable && selectedValue && !disabled && (\n <span\n onClick={handleClear}\n className=\"p-1 rounded-full hover:bg-[var(--ui-bg-tertiary)] hover:text-[var(--ui-text-primary)] transition-colors cursor-pointer\"\n >\n <X className=\"w-3.5 h-3.5\" />\n </span>\n )}\n <ChevronsUpDown className=\"w-4 h-4 opacity-50 shrink-0\" />\n </div>\n </button>\n }\n >\n <div className=\"p-2 w-72 rounded-2xl bg-[var(--ui-bg-surface)] backdrop-blur-2xl border border-[var(--ui-border-default)] shadow-2xl space-y-2\">\n <div className=\"relative flex items-center\">\n <Search className=\"absolute left-2.5 w-3.5 h-3.5 text-[var(--ui-text-muted)] pointer-events-none\" />\n <input\n ref={searchInputRef}\n type=\"text\"\n autoFocus\n placeholder={searchPlaceholder}\n value={search}\n onChange={(e) => {\n setSearch(e.target.value);\n setHighlightIndex(0);\n }}\n onKeyDown={handleKeyDown}\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-expanded=\"true\"\n aria-controls={listboxId}\n aria-activedescendant={activeDescendantId}\n className=\"w-full h-8 pl-8 pr-3 text-xs rounded-xl bg-[var(--ui-bg-secondary)] border border-[var(--ui-border-subtle)] focus:outline-none focus:border-[var(--ui-primary)] text-[var(--ui-text-primary)] placeholder:text-[var(--ui-text-muted)]\"\n />\n </div>\n\n <div id={listboxId} className=\"max-h-56 overflow-y-auto space-y-0.5\" role=\"listbox\">\n {filteredOptions.length === 0 ? (\n <div className=\"py-4 text-center text-xs text-[var(--ui-text-muted)]\">{emptyText}</div>\n ) : (\n filteredOptions.map((opt, idx) => {\n const isSelected = opt.value === selectedValue;\n const isHighlighted = idx === highlightIndex;\n const optId = `combobox-opt-${baseId}-${opt.value}`;\n\n return (\n <div\n key={opt.value}\n id={optId}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={opt.disabled}\n onClick={() => !opt.disabled && handleSelect(opt.value)}\n onMouseEnter={() => !opt.disabled && setHighlightIndex(idx)}\n className={cn(\n 'flex items-center justify-between px-3 py-2 rounded-xl text-xs font-medium cursor-pointer transition-colors select-none',\n opt.disabled && 'opacity-40 cursor-not-allowed pointer-events-none',\n isSelected\n ? 'bg-[var(--ui-primary)] text-white font-semibold shadow-xs'\n : isHighlighted\n ? 'bg-[var(--ui-bg-tertiary)] text-[var(--ui-text-primary)]'\n : 'text-[var(--ui-text-primary)]'\n )}\n >\n <div className=\"flex items-center gap-2 truncate\">\n {opt.icon}\n <div>\n <span className=\"block truncate\">{opt.label}</span>\n {opt.description && (\n <span className={cn('text-[10px] block truncate', isSelected ? 'text-white/80' : 'text-[var(--ui-text-muted)]')}>\n {opt.description}\n </span>\n )}\n </div>\n </div>\n\n {isSelected && <Check className=\"w-3.5 h-3.5 shrink-0\" />}\n </div>\n );\n })\n )}\n </div>\n </div>\n </Popover>\n </div>\n );\n }\n);\nCombobox.displayName = 'Combobox';\n\n/* -------------------------------------------------------------------------------------------------\n * MultiSelect Component\n * -----------------------------------------------------------------------------------------------*/\nexport interface MultiSelectProps {\n options: ComboboxOption[];\n value?: string[];\n defaultValue?: string[];\n onChange?: (val: string[]) => void;\n placeholder?: string;\n searchPlaceholder?: string;\n maxCount?: number;\n disabled?: boolean;\n className?: string;\n}\n\nexport const MultiSelect = forwardRef<HTMLDivElement, MultiSelectProps>(\n (\n {\n options,\n value: controlledVal,\n defaultValue = [],\n onChange,\n placeholder = 'Select items...',\n searchPlaceholder = 'Search options...',\n maxCount = 3,\n disabled = false,\n className,\n },\n ref\n ) => {\n const [internalVal, setInternalVal] = useState<string[]>(defaultValue);\n const isControlled = controlledVal !== undefined;\n const selectedValues = isControlled ? controlledVal : internalVal;\n\n const [search, setSearch] = useState('');\n const [isOpen, setIsOpen] = useState(false);\n const [highlightedIndex, setHighlightedIndex] = useState(0);\n\n const filteredOptions = options.filter(\n (opt) =>\n opt.label.toLowerCase().includes(search.toLowerCase()) ||\n opt.value.toLowerCase().includes(search.toLowerCase())\n );\n\n const toggleOption = (val: string) => {\n const opt = options.find((o) => o.value === val);\n if (opt?.disabled) return;\n\n const next = selectedValues.includes(val)\n ? selectedValues.filter((v) => v !== val)\n : [...selectedValues, val];\n if (!isControlled) {\n setInternalVal(next);\n }\n onChange?.(next);\n };\n\n const removeTag = (val: string, e?: React.MouseEvent) => {\n e?.stopPropagation?.();\n const next = selectedValues.filter((v) => v !== val);\n if (!isControlled) {\n setInternalVal(next);\n }\n onChange?.(next);\n };\n\n const clearAll = (e?: React.MouseEvent) => {\n e?.stopPropagation?.();\n if (!isControlled) {\n setInternalVal([]);\n }\n onChange?.([]);\n };\n\n const handleSearchKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (filteredOptions.length === 0) return;\n\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n setHighlightedIndex((prev) => {\n let next = (prev + 1) % filteredOptions.length;\n while (filteredOptions[next]?.disabled && next !== prev) {\n next = (next + 1) % filteredOptions.length;\n }\n return next;\n });\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n setHighlightedIndex((prev) => {\n let next = (prev - 1 + filteredOptions.length) % filteredOptions.length;\n while (filteredOptions[next]?.disabled && next !== prev) {\n next = (next - 1 + filteredOptions.length) % filteredOptions.length;\n }\n return next;\n });\n } else if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n const current = filteredOptions[highlightedIndex];\n if (current && !current.disabled) {\n toggleOption(current.value);\n }\n } else if (e.key === 'Escape') {\n e.preventDefault();\n setIsOpen(false);\n }\n };\n\n return (\n <div ref={ref} className={cn('relative w-full', className)}>\n <Popover\n isOpen={isOpen}\n onClose={() => setIsOpen(false)}\n trigger={\n <div\n tabIndex={disabled ? -1 : 0}\n role=\"combobox\"\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n onClick={() => !disabled && setIsOpen(!isOpen)}\n onKeyDown={(e) => {\n if ((e.key === 'ArrowDown' || e.key === 'Enter' || e.key === ' ') && !disabled) {\n e.preventDefault();\n setIsOpen(true);\n }\n }}\n className={cn(\n 'min-h-10 py-1.5 px-3 rounded-[var(--ui-radius-md)] border bg-[var(--ui-bg-surface)] flex flex-wrap items-center justify-between gap-1.5 text-sm transition-all shadow-inner cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ui-primary)]',\n disabled\n ? 'opacity-50 cursor-not-allowed border-[var(--ui-border-subtle)]'\n : 'border-[var(--ui-border-default)] hover:border-[var(--ui-border-strong)]'\n )}\n >\n <div className=\"flex flex-wrap items-center gap-1.5 flex-1\">\n {selectedValues.length === 0 ? (\n <span className=\"text-[var(--ui-text-muted)] text-sm\">{placeholder}</span>\n ) : (\n <>\n {selectedValues.slice(0, maxCount).map((val) => {\n const opt = options.find((o) => o.value === val);\n return (\n <Chip\n key={val}\n size=\"sm\"\n variant=\"primary\"\n onRemove={() => removeTag(val, {} as any)}\n >\n {opt?.label || val}\n </Chip>\n );\n })}\n {selectedValues.length > maxCount && (\n <Chip size=\"sm\" variant=\"secondary\">\n +{selectedValues.length - maxCount} more\n </Chip>\n )}\n </>\n )}\n </div>\n\n <div className=\"flex items-center gap-1 text-[var(--ui-text-muted)]\">\n {selectedValues.length > 0 && !disabled && (\n <span\n onClick={clearAll}\n className=\"p-1 rounded-full hover:bg-[var(--ui-bg-tertiary)] hover:text-[var(--ui-text-primary)] transition-colors cursor-pointer\"\n >\n <X className=\"w-3.5 h-3.5\" />\n </span>\n )}\n <ChevronsUpDown className=\"w-4 h-4 opacity-50 shrink-0\" />\n </div>\n </div>\n }\n >\n <div className=\"p-2 w-76 rounded-2xl bg-[var(--ui-bg-surface)] backdrop-blur-2xl border border-[var(--ui-border-default)] shadow-2xl space-y-2\">\n <div className=\"relative flex items-center\">\n <Search className=\"absolute left-2.5 w-3.5 h-3.5 text-[var(--ui-text-muted)] pointer-events-none\" />\n <input\n type=\"text\"\n autoFocus\n placeholder={searchPlaceholder}\n value={search}\n onChange={(e) => {\n setSearch(e.target.value);\n setHighlightedIndex(0);\n }}\n onKeyDown={handleSearchKeyDown}\n className=\"w-full h-8 pl-8 pr-3 text-xs rounded-xl bg-[var(--ui-bg-secondary)] border border-[var(--ui-border-subtle)] focus:outline-none focus:border-[var(--ui-primary)] text-[var(--ui-text-primary)]\"\n />\n </div>\n\n <div className=\"max-h-56 overflow-y-auto space-y-0.5\" role=\"listbox\">\n {filteredOptions.length === 0 ? (\n <div className=\"py-4 text-center text-xs text-[var(--ui-text-muted)]\">No options found.</div>\n ) : (\n filteredOptions.map((opt, index) => {\n const isChecked = selectedValues.includes(opt.value);\n const isHighlighted = highlightedIndex === index;\n\n return (\n <div\n key={opt.value}\n role=\"option\"\n aria-selected={isChecked}\n aria-disabled={opt.disabled}\n onClick={() => !opt.disabled && toggleOption(opt.value)}\n className={cn(\n 'flex items-center justify-between px-3 py-2 rounded-xl text-xs font-medium transition-colors select-none',\n opt.disabled\n ? 'opacity-40 cursor-not-allowed text-[var(--ui-text-muted)]'\n : 'cursor-pointer',\n isChecked && 'text-[var(--ui-primary)] font-semibold',\n isHighlighted && !opt.disabled && 'bg-[var(--ui-primary)]/15'\n )}\n >\n <div className=\"flex items-center gap-2 truncate\">\n {opt.icon}\n <span>{opt.label}</span>\n </div>\n {isChecked && <Check className=\"w-3.5 h-3.5 text-[var(--ui-primary)] shrink-0\" />}\n </div>\n );\n })\n )}\n </div>\n </div>\n </Popover>\n </div>\n );\n }\n);\nMultiSelect.displayName = 'MultiSelect';\n","import React, { forwardRef, useState, useRef, useEffect } from 'react';\nimport { UploadCloud, File, FileText, Image as ImageIcon, X, CheckCircle2, AlertCircle } from 'lucide-react';\nimport { cn } from '../utils/cn';\nimport { ProgressBar } from '../feedback/ProgressBar';\nimport { Button } from '../buttons/Button';\n\nexport interface UploadedFile {\n id: string;\n file: File;\n name: string;\n size: number;\n type: string;\n progress?: number;\n status?: 'pending' | 'uploading' | 'completed' | 'error';\n previewUrl?: string;\n errorMessage?: string;\n}\n\nexport interface FileUploadProps {\n accept?: string;\n maxSizeMB?: number;\n multiple?: boolean;\n maxFiles?: number;\n disabled?: boolean;\n onFilesSelected?: (files: File[]) => void;\n onFileRemove?: (fileId: string) => void;\n className?: string;\n label?: string;\n description?: string;\n}\n\nexport function formatFileSize(bytes: number): string {\n if (bytes === 0) return '0 B';\n const k = 1024;\n const sizes = ['B', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(1))} ${sizes[i]}`;\n}\n\nexport const FileUpload = forwardRef<HTMLDivElement, FileUploadProps>(\n (\n {\n accept,\n maxSizeMB = 10,\n multiple = true,\n maxFiles = 5,\n disabled = false,\n onFilesSelected,\n onFileRemove,\n className,\n label = 'Drag & drop files here, or browse',\n description = 'Supports images, documents, and media up to 10MB',\n },\n ref\n ) => {\n const [isDragOver, setIsDragOver] = useState(false);\n const [fileList, setFileList] = useState<UploadedFile[]>([]);\n const inputRef = useRef<HTMLInputElement | null>(null);\n const fileListRef = useRef<UploadedFile[]>(fileList);\n fileListRef.current = fileList;\n\n // Cleanup object URLs on unmount\n useEffect(() => {\n return () => {\n fileListRef.current.forEach((item) => {\n if (item.previewUrl) {\n URL.revokeObjectURL(item.previewUrl);\n }\n });\n };\n }, []);\n\n const matchesAccept = (file: File, acceptStr?: string): boolean => {\n if (!acceptStr) return true;\n const patterns = acceptStr.split(',').map((p) => p.trim().toLowerCase());\n const fileName = file.name.toLowerCase();\n const fileType = file.type.toLowerCase();\n\n return patterns.some((p) => {\n if (p.startsWith('.')) {\n return fileName.endsWith(p);\n }\n if (p.endsWith('/*')) {\n const baseType = p.replace('/*', '');\n return fileType.startsWith(baseType);\n }\n return fileType === p;\n });\n };\n\n const processFiles = (incoming: FileList | null) => {\n if (!incoming) return;\n\n const validFiles: File[] = [];\n const newUploaded: UploadedFile[] = [];\n\n Array.from(incoming).forEach((file) => {\n if (fileList.length + newUploaded.length >= maxFiles) return;\n\n const isAccepted = matchesAccept(file, accept);\n const isOversized = file.size > maxSizeMB * 1024 * 1024;\n const hasError = !isAccepted || isOversized;\n\n let errorMsg: string | undefined;\n if (!isAccepted) errorMsg = `File type not supported (${accept})`;\n else if (isOversized) errorMsg = `File exceeds ${maxSizeMB}MB limit`;\n\n const fileObj: UploadedFile = {\n id: `${file.name}-${Date.now()}-${Math.random()}`,\n file,\n name: file.name,\n size: file.size,\n type: file.type,\n progress: hasError ? 0 : 100,\n status: hasError ? 'error' : 'completed',\n errorMessage: errorMsg,\n previewUrl: file.type.startsWith('image/') && !hasError ? URL.createObjectURL(file) : undefined,\n };\n\n newUploaded.push(fileObj);\n if (!hasError) validFiles.push(file);\n });\n\n setFileList((prev) => [...prev, ...newUploaded]);\n if (validFiles.length > 0) {\n onFilesSelected?.(validFiles);\n }\n };\n\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault();\n if (!disabled) setIsDragOver(true);\n };\n\n const handleDragLeave = (e: React.DragEvent) => {\n e.preventDefault();\n setIsDragOver(false);\n };\n\n const handleDrop = (e: React.DragEvent) => {\n e.preventDefault();\n setIsDragOver(false);\n if (disabled) return;\n processFiles(e.dataTransfer.files);\n };\n\n const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n processFiles(e.target.files);\n if (inputRef.current) inputRef.current.value = '';\n };\n\n const removeFile = (id: string) => {\n setFileList((prev) => {\n const item = prev.find((f) => f.id === id);\n if (item?.previewUrl) {\n URL.revokeObjectURL(item.previewUrl);\n }\n return prev.filter((f) => f.id !== id);\n });\n onFileRemove?.(id);\n };\n\n return (\n <div ref={ref} className={cn('w-full space-y-4', className)}>\n {/* Dropzone Box */}\n <div\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n onClick={() => !disabled && inputRef.current?.click()}\n className={cn(\n 'relative rounded-2xl p-6 sm:p-8 text-center border-2 border-dashed transition-all cursor-pointer flex flex-col items-center justify-center gap-3 select-none',\n disabled\n ? 'opacity-50 cursor-not-allowed border-[var(--ui-border-subtle)] bg-[var(--ui-bg-secondary)]/30'\n : isDragOver\n ? 'border-[var(--ui-primary)] bg-[var(--ui-primary)]/10 shadow-lg shadow-blue-500/20 scale-[0.99]'\n : 'border-[var(--ui-border-default)] hover:border-[var(--ui-border-strong)] bg-[var(--ui-bg-surface)]/60 hover:bg-[var(--ui-bg-secondary)]'\n )}\n >\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n onChange={handleFileChange}\n className=\"hidden\"\n />\n\n <div className=\"w-12 h-12 rounded-2xl bg-[var(--ui-primary)]/15 text-[var(--ui-primary)] flex items-center justify-center shadow-inner\">\n <UploadCloud className=\"w-6 h-6\" />\n </div>\n\n <div className=\"space-y-1\">\n <h4 className=\"text-sm font-bold text-[var(--ui-text-primary)]\">{label}</h4>\n <p className=\"text-xs text-[var(--ui-text-muted)]\">{description}</p>\n </div>\n\n <Button size=\"xs\" variant=\"outline\" className=\"rounded-full px-4 mt-1 pointer-events-none\">\n Browse Files\n </Button>\n </div>\n\n {/* Uploaded Files List */}\n {fileList.length > 0 && (\n <div className=\"space-y-2\">\n <span className=\"text-xs font-mono font-bold text-[var(--ui-text-muted)] uppercase tracking-wider\">\n Files ({fileList.length}/{maxFiles})\n </span>\n\n <div className=\"space-y-2\">\n {fileList.map((item) => (\n <div\n key={item.id}\n className=\"p-3 rounded-2xl bg-[var(--ui-bg-surface)] border border-[var(--ui-border-default)] flex items-center justify-between gap-3 shadow-xs animate-in fade-in duration-200\"\n >\n <div className=\"flex items-center gap-3 truncate\">\n {item.previewUrl ? (\n <img\n src={item.previewUrl}\n alt={item.name}\n className=\"w-10 h-10 rounded-xl object-cover border border-[var(--ui-border-subtle)] shrink-0\"\n />\n ) : (\n <div className=\"w-10 h-10 rounded-xl bg-[var(--ui-bg-tertiary)] flex items-center justify-center text-[var(--ui-text-muted)] shrink-0\">\n {item.type.includes('pdf') ? <FileText className=\"w-5 h-5\" /> : <File className=\"w-5 h-5\" />}\n </div>\n )}\n\n <div className=\"truncate space-y-0.5\">\n <span className=\"text-xs font-semibold text-[var(--ui-text-primary)] block truncate\">\n {item.name}\n </span>\n <div className=\"flex items-center gap-2 text-[11px] text-[var(--ui-text-muted)] font-mono\">\n <span>{formatFileSize(item.size)}</span>\n {item.status === 'completed' && (\n <span className=\"text-emerald-500 font-semibold flex items-center gap-0.5\">\n <CheckCircle2 className=\"w-3 h-3\" /> Ready\n </span>\n )}\n {item.status === 'error' && (\n <span className=\"text-rose-500 font-semibold flex items-center gap-0.5\">\n <AlertCircle className=\"w-3 h-3\" /> {item.errorMessage}\n </span>\n )}\n </div>\n </div>\n </div>\n\n <button\n type=\"button\"\n onClick={() => removeFile(item.id)}\n className=\"p-1.5 rounded-full hover:bg-[var(--ui-bg-tertiary)] text-[var(--ui-text-muted)] hover:text-rose-500 transition-colors\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n );\n }\n);\nFileUpload.displayName = 'FileUpload';\n","import React, { forwardRef, useState, useEffect } from 'react';\nimport { Plus, Minus } from 'lucide-react';\nimport { cn } from '../utils/cn';\nimport { useControllableState } from '../utils/useControllableState';\n\nexport interface NumberInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange' | 'value' | 'defaultValue' | 'size'> {\n value?: number;\n defaultValue?: number;\n onChange?: (val: number) => void;\n min?: number;\n max?: number;\n step?: number;\n precision?: number;\n size?: 'sm' | 'md' | 'lg';\n stepperPosition?: 'right' | 'split';\n}\n\nexport const NumberInput = forwardRef<HTMLInputElement, NumberInputProps>(\n (\n {\n value: controlledVal,\n defaultValue = 0,\n onChange,\n min = -Infinity,\n max = Infinity,\n step = 1,\n precision = 0,\n size = 'md',\n stepperPosition = 'right',\n disabled = false,\n className,\n ...props\n },\n ref\n ) => {\n const [value, setValue] = useControllableState<number>({\n value: controlledVal,\n defaultValue,\n onChange,\n name: 'NumberInput',\n });\n\n const clamp = (num: number) => {\n let clamped = Math.min(max, Math.max(min, num));\n if (precision > 0) {\n clamped = parseFloat(clamped.toFixed(precision));\n }\n return clamped;\n };\n\n const handleIncrement = () => {\n if (disabled) return;\n const next = clamp(value + step);\n setValue(next);\n };\n\n const handleDecrement = () => {\n if (disabled) return;\n const next = clamp(value - step);\n setValue(next);\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const val = e.target.value;\n if (val === '' || val === '-') {\n return;\n }\n const parsed = parseFloat(val);\n if (!isNaN(parsed)) {\n const next = clamp(parsed);\n setValue(next);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n handleIncrement();\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n handleDecrement();\n }\n };\n\n const heightClass = size === 'sm' ? 'h-8 text-xs' : size === 'lg' ? 'h-12 text-base' : 'h-10 text-sm';\n\n if (stepperPosition === 'split') {\n return (\n <div className={cn('inline-flex items-center rounded-[var(--ui-radius-md)] border border-[var(--ui-border-default)] bg-[var(--ui-bg-surface)] overflow-hidden shadow-inner', className)}>\n <button\n type=\"button\"\n disabled={disabled || value <= min}\n onClick={handleDecrement}\n className=\"px-3 h-full flex items-center justify-center hover:bg-[var(--ui-bg-tertiary)] disabled:opacity-30 disabled:pointer-events-none text-[var(--ui-text-muted)] hover:text-[var(--ui-text-primary)] transition-colors border-r border-[var(--ui-border-subtle)] cursor-pointer\"\n >\n <Minus className=\"w-3.5 h-3.5\" />\n </button>\n\n <input\n ref={ref}\n type=\"number\"\n value={value}\n disabled={disabled}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n className={cn('w-20 text-center font-mono font-semibold bg-transparent text-[var(--ui-text-primary)] focus:outline-none [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none', heightClass)}\n {...props}\n />\n\n <button\n type=\"button\"\n disabled={disabled || value >= max}\n onClick={handleIncrement}\n className=\"px-3 h-full flex items-center justify-center hover:bg-[var(--ui-bg-tertiary)] disabled:opacity-30 disabled:pointer-events-none text-[var(--ui-text-muted)] hover:text-[var(--ui-text-primary)] transition-colors border-l border-[var(--ui-border-subtle)] cursor-pointer\"\n >\n <Plus className=\"w-3.5 h-3.5\" />\n </button>\n </div>\n );\n }\n\n return (\n <div className={cn('relative w-full inline-flex items-center', className)}>\n <input\n ref={ref}\n type=\"number\"\n value={value}\n disabled={disabled}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n className={cn(\n 'w-full rounded-[var(--ui-radius-md)] border border-[var(--ui-border-default)] hover:border-[var(--ui-border-strong)] bg-[var(--ui-bg-surface)] px-3.5 pr-10 font-mono font-semibold text-[var(--ui-text-primary)] transition-all shadow-inner focus:outline-none focus:ring-2 focus:ring-[var(--ui-primary)]/50 [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none',\n heightClass,\n disabled && 'opacity-50 cursor-not-allowed'\n )}\n {...props}\n />\n\n <div className=\"absolute right-1 top-1 bottom-1 flex flex-col justify-center border-l border-[var(--ui-border-subtle)] pl-1 pr-1\">\n <button\n type=\"button\"\n disabled={disabled || value >= max}\n onClick={handleIncrement}\n className=\"px-1.5 h-1/2 flex items-center justify-center hover:bg-[var(--ui-bg-tertiary)] rounded-t text-[var(--ui-text-muted)] hover:text-[var(--ui-text-primary)] disabled:opacity-30 transition-colors cursor-pointer\"\n >\n <Plus className=\"w-3 h-3\" />\n </button>\n <button\n type=\"button\"\n disabled={disabled || value <= min}\n onClick={handleDecrement}\n className=\"px-1.5 h-1/2 flex items-center justify-center hover:bg-[var(--ui-bg-tertiary)] rounded-b text-[var(--ui-text-muted)] hover:text-[var(--ui-text-primary)] disabled:opacity-30 transition-colors cursor-pointer\"\n >\n <Minus className=\"w-3 h-3\" />\n </button>\n </div>\n </div>\n );\n }\n);\nNumberInput.displayName = 'NumberInput';\n\n/* -------------------------------------------------------------------------------------------------\n * CurrencyInput Component\n * -----------------------------------------------------------------------------------------------*/\nexport interface CurrencyInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange' | 'value' | 'defaultValue'> {\n value?: number;\n defaultValue?: number;\n onChange?: (val: number) => void;\n currency?: 'USD' | 'VND' | 'EUR' | string;\n currencySymbol?: string;\n position?: 'prefix' | 'suffix';\n}\n\nexport function formatCurrencyString(val: number, separator = ','): string {\n if (isNaN(val)) return '0';\n const parts = val.toString().split('.');\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, separator);\n return parts.join('.');\n}\n\nexport const CurrencyInput = forwardRef<HTMLInputElement, CurrencyInputProps>(\n (\n {\n value: controlledVal,\n defaultValue = 0,\n onChange,\n currency = 'USD',\n currencySymbol,\n position = 'prefix',\n disabled = false,\n className,\n ...props\n },\n ref\n ) => {\n const symbol = currencySymbol || (currency === 'VND' ? '₫' : currency === 'EUR' ? '€' : '$');\n const isSuffix = position === 'suffix' || currency === 'VND';\n\n const [value, setValue, isControlled] = useControllableState<number>({\n value: controlledVal,\n defaultValue,\n onChange,\n name: 'CurrencyInput',\n });\n\n const [internalInputString, setInternalInputString] = useState<string>(formatCurrencyString(value));\n\n // When value changes, update internal display for uncontrolled mode\n useEffect(() => {\n if (!isControlled) {\n setInternalInputString(formatCurrencyString(value));\n }\n }, [value, isControlled]);\n\n // For controlled inputs, display value is ALWAYS pure derived from the source-of-truth prop\n const displayVal = isControlled ? formatCurrencyString(value) : internalInputString;\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = e.target.value.replace(/[^0-9.]/g, '');\n const parsed = parseFloat(raw);\n const num = isNaN(parsed) ? 0 : parsed;\n\n if (!isControlled) {\n setInternalInputString(raw ? formatCurrencyString(num) : '');\n }\n setValue(num);\n };\n\n return (\n <div className={cn('relative w-full flex items-center', className)}>\n {!isSuffix && (\n <span className=\"absolute left-3.5 text-sm font-bold text-[var(--ui-text-muted)] pointer-events-none font-mono\">\n {symbol}\n </span>\n )}\n\n <input\n ref={ref}\n type=\"text\"\n value={displayVal}\n disabled={disabled}\n onChange={handleInputChange}\n className={cn(\n 'w-full h-10 rounded-[var(--ui-radius-md)] border border-[var(--ui-border-default)] hover:border-[var(--ui-border-strong)] bg-[var(--ui-bg-surface)] px-3.5 font-mono font-bold text-sm text-[var(--ui-text-primary)] transition-all shadow-inner focus:outline-none focus:ring-2 focus:ring-[var(--ui-primary)]/50',\n !isSuffix && 'pl-8',\n isSuffix && 'pr-12',\n disabled && 'opacity-50 cursor-not-allowed'\n )}\n {...props}\n />\n\n {isSuffix && (\n <span className=\"absolute right-3.5 text-xs font-bold text-[var(--ui-text-muted)] pointer-events-none font-mono uppercase\">\n {currency}\n </span>\n )}\n </div>\n );\n }\n);\nCurrencyInput.displayName = 'CurrencyInput';\n","import React, { forwardRef, useState, useEffect } from 'react';\nimport { cn } from '../utils/cn';\n\nexport interface MaskedInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange' | 'value' | 'defaultValue'> {\n mask: string; // e.g. '(###) ###-####' or '#### #### #### ####'\n maskChar?: string; // default '#'\n value?: string;\n defaultValue?: string;\n onValueChange?: (unmasked: string, formatted: string) => void;\n prefixIcon?: React.ReactNode;\n suffixIcon?: React.ReactNode;\n}\n\nexport function applyMask(rawVal: string, mask: string, maskChar = '#'): { formatted: string; unmasked: string } {\n const digitsOnly = rawVal.replace(/\\D/g, '');\n if (!digitsOnly) return { formatted: '', unmasked: '' };\n let formatted = '';\n let digitIndex = 0;\n\n for (let i = 0; i < mask.length; i++) {\n const char = mask[i];\n if (char === maskChar) {\n if (digitIndex < digitsOnly.length) {\n formatted += digitsOnly[digitIndex++];\n } else {\n break;\n }\n } else {\n if (digitIndex < digitsOnly.length) {\n formatted += char;\n }\n }\n }\n\n return { formatted, unmasked: digitsOnly };\n}\n\nexport const MaskedInput = forwardRef<HTMLInputElement, MaskedInputProps>(\n (\n {\n mask,\n maskChar = '#',\n value: controlledVal,\n defaultValue = '',\n onValueChange,\n prefixIcon,\n suffixIcon,\n disabled = false,\n className,\n ...props\n },\n ref\n ) => {\n const [internalVal, setInternalVal] = useState<string>(\n applyMask(defaultValue, mask, maskChar).formatted\n );\n const displayValue = controlledVal !== undefined ? applyMask(controlledVal, mask, maskChar).formatted : internalVal;\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const { formatted, unmasked } = applyMask(e.target.value, mask, maskChar);\n setInternalVal(formatted);\n onValueChange?.(unmasked, formatted);\n };\n\n return (\n <div className={cn('relative w-full flex items-center', className)}>\n {prefixIcon && (\n <div className=\"absolute left-3.5 flex items-center pointer-events-none text-[var(--ui-text-muted)]\">\n {prefixIcon}\n </div>\n )}\n\n <input\n ref={ref}\n type=\"text\"\n value={displayValue}\n disabled={disabled}\n onChange={handleInputChange}\n className={cn(\n 'w-full h-10 rounded-[var(--ui-radius-md)] border border-[var(--ui-border-default)] hover:border-[var(--ui-border-strong)] bg-[var(--ui-bg-surface)] px-3.5 font-mono text-sm text-[var(--ui-text-primary)] transition-all shadow-inner focus:outline-none focus:ring-2 focus:ring-[var(--ui-primary)]/50',\n prefixIcon && 'pl-9',\n suffixIcon && 'pr-9',\n disabled && 'opacity-50 cursor-not-allowed'\n )}\n {...props}\n />\n\n {suffixIcon && (\n <div className=\"absolute right-3.5 flex items-center pointer-events-none text-[var(--ui-text-muted)]\">\n {suffixIcon}\n </div>\n )}\n </div>\n );\n }\n);\nMaskedInput.displayName = 'MaskedInput';\n"]}