@teja-app/ui 0.0.11 → 0.0.13

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 (246) hide show
  1. package/dist/hooks/index.d.ts +1 -1
  2. package/dist/hooks/index.d.ts.map +1 -1
  3. package/dist/hooks/useSidebar.d.ts +32 -1
  4. package/dist/hooks/useSidebar.d.ts.map +1 -1
  5. package/dist/index.cjs +0 -4879
  6. package/dist/index.cjs.map +1 -1
  7. package/dist/index.d.ts +6 -3
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +0 -4863
  10. package/dist/index.js.map +1 -1
  11. package/dist/theme/components/Accordion.d.ts +75 -0
  12. package/dist/theme/components/Accordion.d.ts.map +1 -0
  13. package/dist/theme/components/Badge.d.ts +21 -1
  14. package/dist/theme/components/Badge.d.ts.map +1 -1
  15. package/dist/theme/components/Breadcrumbs.d.ts +53 -0
  16. package/dist/theme/components/Breadcrumbs.d.ts.map +1 -0
  17. package/dist/theme/components/Card.d.ts +37 -2
  18. package/dist/theme/components/Card.d.ts.map +1 -1
  19. package/dist/theme/components/Checkbox.d.ts +6 -1
  20. package/dist/theme/components/Checkbox.d.ts.map +1 -1
  21. package/dist/theme/components/DarkScope.d.ts +54 -0
  22. package/dist/theme/components/DarkScope.d.ts.map +1 -0
  23. package/dist/theme/components/Menu.d.ts +84 -0
  24. package/dist/theme/components/Menu.d.ts.map +1 -0
  25. package/dist/theme/components/OTPInput.d.ts +58 -0
  26. package/dist/theme/components/OTPInput.d.ts.map +1 -0
  27. package/dist/theme/components/PasswordInput.d.ts +48 -0
  28. package/dist/theme/components/PasswordInput.d.ts.map +1 -0
  29. package/dist/{components/PillSelector/PillSelector.types.d.ts → theme/components/PillSelector.d.ts} +21 -2
  30. package/dist/theme/components/PillSelector.d.ts.map +1 -0
  31. package/dist/theme/components/Radio.d.ts +89 -0
  32. package/dist/theme/components/Radio.d.ts.map +1 -0
  33. package/dist/theme/components/SegmentedControl.d.ts.map +1 -1
  34. package/dist/theme/components/SelectableCard.d.ts +34 -0
  35. package/dist/theme/components/SelectableCard.d.ts.map +1 -0
  36. package/dist/theme/components/SidebarNav/SidebarNav.d.ts +20 -0
  37. package/dist/theme/components/SidebarNav/SidebarNav.d.ts.map +1 -0
  38. package/dist/theme/components/SidebarNav/SidebarNavDivider.d.ts +8 -0
  39. package/dist/theme/components/SidebarNav/SidebarNavDivider.d.ts.map +1 -0
  40. package/dist/theme/components/SidebarNav/SidebarNavGroupRow.d.ts +8 -0
  41. package/dist/theme/components/SidebarNav/SidebarNavGroupRow.d.ts.map +1 -0
  42. package/dist/theme/components/SidebarNav/SidebarNavItemRow.d.ts +8 -0
  43. package/dist/theme/components/SidebarNav/SidebarNavItemRow.d.ts.map +1 -0
  44. package/dist/theme/components/SidebarNav/index.d.ts +12 -0
  45. package/dist/theme/components/SidebarNav/index.d.ts.map +1 -0
  46. package/dist/theme/components/SidebarNav/types.d.ts +157 -0
  47. package/dist/theme/components/SidebarNav/types.d.ts.map +1 -0
  48. package/dist/theme/components/Table.d.ts +70 -0
  49. package/dist/theme/components/Table.d.ts.map +1 -0
  50. package/dist/theme/components/Toast.d.ts +79 -0
  51. package/dist/theme/components/Toast.d.ts.map +1 -0
  52. package/dist/theme/components/ToggleChip.d.ts +38 -0
  53. package/dist/theme/components/ToggleChip.d.ts.map +1 -0
  54. package/dist/theme/components/Tooltip.d.ts +40 -0
  55. package/dist/theme/components/Tooltip.d.ts.map +1 -0
  56. package/dist/theme/components/index.d.ts +16 -1
  57. package/dist/theme/components/index.d.ts.map +1 -1
  58. package/dist/theme/index.cjs +15555 -2528
  59. package/dist/theme/index.cjs.map +1 -1
  60. package/dist/theme/index.js +17345 -4334
  61. package/dist/theme/index.js.map +1 -1
  62. package/dist/ui.css +159 -159
  63. package/dist/useSidebar-BWe09WbE.js.map +1 -1
  64. package/dist/useSidebar-d1VZFhxd.cjs.map +1 -1
  65. package/package.json +1 -1
  66. package/dist/components/Alert/Alert.d.ts +0 -13
  67. package/dist/components/Alert/Alert.d.ts.map +0 -1
  68. package/dist/components/Alert/Alert.types.d.ts +0 -17
  69. package/dist/components/Alert/Alert.types.d.ts.map +0 -1
  70. package/dist/components/Alert/index.d.ts +0 -3
  71. package/dist/components/Alert/index.d.ts.map +0 -1
  72. package/dist/components/Avatar/Avatar.d.ts +0 -13
  73. package/dist/components/Avatar/Avatar.d.ts.map +0 -1
  74. package/dist/components/Avatar/Avatar.types.d.ts +0 -18
  75. package/dist/components/Avatar/Avatar.types.d.ts.map +0 -1
  76. package/dist/components/Avatar/index.d.ts +0 -3
  77. package/dist/components/Avatar/index.d.ts.map +0 -1
  78. package/dist/components/Badge/Badge.d.ts +0 -13
  79. package/dist/components/Badge/Badge.d.ts.map +0 -1
  80. package/dist/components/Badge/Badge.types.d.ts +0 -14
  81. package/dist/components/Badge/Badge.types.d.ts.map +0 -1
  82. package/dist/components/Badge/index.d.ts +0 -3
  83. package/dist/components/Badge/index.d.ts.map +0 -1
  84. package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +0 -18
  85. package/dist/components/Breadcrumbs/Breadcrumbs.d.ts.map +0 -1
  86. package/dist/components/Breadcrumbs/Breadcrumbs.types.d.ts +0 -22
  87. package/dist/components/Breadcrumbs/Breadcrumbs.types.d.ts.map +0 -1
  88. package/dist/components/Breadcrumbs/index.d.ts +0 -3
  89. package/dist/components/Breadcrumbs/index.d.ts.map +0 -1
  90. package/dist/components/Button/Button.d.ts +0 -13
  91. package/dist/components/Button/Button.d.ts.map +0 -1
  92. package/dist/components/Button/Button.types.d.ts +0 -18
  93. package/dist/components/Button/Button.types.d.ts.map +0 -1
  94. package/dist/components/Button/index.d.ts +0 -3
  95. package/dist/components/Button/index.d.ts.map +0 -1
  96. package/dist/components/Card/Card.d.ts +0 -18
  97. package/dist/components/Card/Card.d.ts.map +0 -1
  98. package/dist/components/Card/Card.types.d.ts +0 -16
  99. package/dist/components/Card/Card.types.d.ts.map +0 -1
  100. package/dist/components/Card/index.d.ts +0 -3
  101. package/dist/components/Card/index.d.ts.map +0 -1
  102. package/dist/components/Checkbox/Checkbox.d.ts +0 -13
  103. package/dist/components/Checkbox/Checkbox.d.ts.map +0 -1
  104. package/dist/components/Checkbox/Checkbox.types.d.ts +0 -21
  105. package/dist/components/Checkbox/Checkbox.types.d.ts.map +0 -1
  106. package/dist/components/Checkbox/index.d.ts +0 -3
  107. package/dist/components/Checkbox/index.d.ts.map +0 -1
  108. package/dist/components/Combobox/Combobox.d.ts +0 -24
  109. package/dist/components/Combobox/Combobox.d.ts.map +0 -1
  110. package/dist/components/Combobox/Combobox.types.d.ts +0 -43
  111. package/dist/components/Combobox/Combobox.types.d.ts.map +0 -1
  112. package/dist/components/Combobox/index.d.ts +0 -3
  113. package/dist/components/Combobox/index.d.ts.map +0 -1
  114. package/dist/components/ConfirmDialog/ConfirmDialog.d.ts +0 -23
  115. package/dist/components/ConfirmDialog/ConfirmDialog.d.ts.map +0 -1
  116. package/dist/components/ConfirmDialog/ConfirmDialog.types.d.ts +0 -24
  117. package/dist/components/ConfirmDialog/ConfirmDialog.types.d.ts.map +0 -1
  118. package/dist/components/ConfirmDialog/index.d.ts +0 -3
  119. package/dist/components/ConfirmDialog/index.d.ts.map +0 -1
  120. package/dist/components/DateInput/DateInput.d.ts +0 -14
  121. package/dist/components/DateInput/DateInput.d.ts.map +0 -1
  122. package/dist/components/DateInput/DateInput.types.d.ts +0 -39
  123. package/dist/components/DateInput/DateInput.types.d.ts.map +0 -1
  124. package/dist/components/DateInput/index.d.ts +0 -3
  125. package/dist/components/DateInput/index.d.ts.map +0 -1
  126. package/dist/components/Drawer/Drawer.d.ts +0 -27
  127. package/dist/components/Drawer/Drawer.d.ts.map +0 -1
  128. package/dist/components/Drawer/Drawer.types.d.ts +0 -25
  129. package/dist/components/Drawer/Drawer.types.d.ts.map +0 -1
  130. package/dist/components/Drawer/index.d.ts +0 -3
  131. package/dist/components/Drawer/index.d.ts.map +0 -1
  132. package/dist/components/EmptyState/EmptyState.d.ts +0 -34
  133. package/dist/components/EmptyState/EmptyState.d.ts.map +0 -1
  134. package/dist/components/EmptyState/EmptyState.types.d.ts +0 -19
  135. package/dist/components/EmptyState/EmptyState.types.d.ts.map +0 -1
  136. package/dist/components/EmptyState/index.d.ts +0 -3
  137. package/dist/components/EmptyState/index.d.ts.map +0 -1
  138. package/dist/components/Input/Input.d.ts +0 -13
  139. package/dist/components/Input/Input.d.ts.map +0 -1
  140. package/dist/components/Input/Input.types.d.ts +0 -20
  141. package/dist/components/Input/Input.types.d.ts.map +0 -1
  142. package/dist/components/Input/index.d.ts +0 -3
  143. package/dist/components/Input/index.d.ts.map +0 -1
  144. package/dist/components/Modal/Modal.d.ts +0 -28
  145. package/dist/components/Modal/Modal.d.ts.map +0 -1
  146. package/dist/components/Modal/Modal.types.d.ts +0 -29
  147. package/dist/components/Modal/Modal.types.d.ts.map +0 -1
  148. package/dist/components/Modal/index.d.ts +0 -3
  149. package/dist/components/Modal/index.d.ts.map +0 -1
  150. package/dist/components/MultiSelect/MultiSelect.d.ts +0 -26
  151. package/dist/components/MultiSelect/MultiSelect.d.ts.map +0 -1
  152. package/dist/components/MultiSelect/MultiSelect.types.d.ts +0 -51
  153. package/dist/components/MultiSelect/MultiSelect.types.d.ts.map +0 -1
  154. package/dist/components/MultiSelect/index.d.ts +0 -3
  155. package/dist/components/MultiSelect/index.d.ts.map +0 -1
  156. package/dist/components/OTPInput/OTPInput.d.ts +0 -22
  157. package/dist/components/OTPInput/OTPInput.d.ts.map +0 -1
  158. package/dist/components/OTPInput/OTPInput.types.d.ts +0 -19
  159. package/dist/components/OTPInput/OTPInput.types.d.ts.map +0 -1
  160. package/dist/components/OTPInput/index.d.ts +0 -3
  161. package/dist/components/OTPInput/index.d.ts.map +0 -1
  162. package/dist/components/Pagination/Pagination.d.ts +0 -35
  163. package/dist/components/Pagination/Pagination.d.ts.map +0 -1
  164. package/dist/components/Pagination/Pagination.types.d.ts +0 -31
  165. package/dist/components/Pagination/Pagination.types.d.ts.map +0 -1
  166. package/dist/components/Pagination/index.d.ts +0 -3
  167. package/dist/components/Pagination/index.d.ts.map +0 -1
  168. package/dist/components/PasswordInput/PasswordInput.d.ts +0 -12
  169. package/dist/components/PasswordInput/PasswordInput.d.ts.map +0 -1
  170. package/dist/components/PasswordInput/PasswordInput.types.d.ts +0 -16
  171. package/dist/components/PasswordInput/PasswordInput.types.d.ts.map +0 -1
  172. package/dist/components/PasswordInput/index.d.ts +0 -3
  173. package/dist/components/PasswordInput/index.d.ts.map +0 -1
  174. package/dist/components/PillSelector/PillSelector.d.ts +0 -16
  175. package/dist/components/PillSelector/PillSelector.d.ts.map +0 -1
  176. package/dist/components/PillSelector/PillSelector.types.d.ts.map +0 -1
  177. package/dist/components/PillSelector/index.d.ts +0 -3
  178. package/dist/components/PillSelector/index.d.ts.map +0 -1
  179. package/dist/components/Radio/Radio.d.ts +0 -12
  180. package/dist/components/Radio/Radio.d.ts.map +0 -1
  181. package/dist/components/Radio/Radio.types.d.ts +0 -49
  182. package/dist/components/Radio/Radio.types.d.ts.map +0 -1
  183. package/dist/components/Radio/RadioGroup.d.ts +0 -23
  184. package/dist/components/Radio/RadioGroup.d.ts.map +0 -1
  185. package/dist/components/Radio/index.d.ts +0 -4
  186. package/dist/components/Radio/index.d.ts.map +0 -1
  187. package/dist/components/Select/Select.d.ts +0 -22
  188. package/dist/components/Select/Select.d.ts.map +0 -1
  189. package/dist/components/Select/Select.types.d.ts +0 -42
  190. package/dist/components/Select/Select.types.d.ts.map +0 -1
  191. package/dist/components/Select/index.d.ts +0 -3
  192. package/dist/components/Select/index.d.ts.map +0 -1
  193. package/dist/components/Sidebar/Sidebar.d.ts +0 -36
  194. package/dist/components/Sidebar/Sidebar.d.ts.map +0 -1
  195. package/dist/components/Sidebar/Sidebar.types.d.ts +0 -200
  196. package/dist/components/Sidebar/Sidebar.types.d.ts.map +0 -1
  197. package/dist/components/Sidebar/SidebarDivider.d.ts +0 -12
  198. package/dist/components/Sidebar/SidebarDivider.d.ts.map +0 -1
  199. package/dist/components/Sidebar/SidebarGroup.d.ts +0 -26
  200. package/dist/components/Sidebar/SidebarGroup.d.ts.map +0 -1
  201. package/dist/components/Sidebar/SidebarItem.d.ts +0 -23
  202. package/dist/components/Sidebar/SidebarItem.d.ts.map +0 -1
  203. package/dist/components/Sidebar/index.d.ts +0 -9
  204. package/dist/components/Sidebar/index.d.ts.map +0 -1
  205. package/dist/components/Skeleton/Skeleton.d.ts +0 -22
  206. package/dist/components/Skeleton/Skeleton.d.ts.map +0 -1
  207. package/dist/components/Skeleton/Skeleton.types.d.ts +0 -19
  208. package/dist/components/Skeleton/Skeleton.types.d.ts.map +0 -1
  209. package/dist/components/Skeleton/index.d.ts +0 -3
  210. package/dist/components/Skeleton/index.d.ts.map +0 -1
  211. package/dist/components/Spinner/Spinner.d.ts +0 -13
  212. package/dist/components/Spinner/Spinner.d.ts.map +0 -1
  213. package/dist/components/Spinner/Spinner.types.d.ts +0 -14
  214. package/dist/components/Spinner/Spinner.types.d.ts.map +0 -1
  215. package/dist/components/Spinner/index.d.ts +0 -3
  216. package/dist/components/Spinner/index.d.ts.map +0 -1
  217. package/dist/components/Table/Table.d.ts +0 -44
  218. package/dist/components/Table/Table.d.ts.map +0 -1
  219. package/dist/components/Table/Table.types.d.ts +0 -33
  220. package/dist/components/Table/Table.types.d.ts.map +0 -1
  221. package/dist/components/Table/index.d.ts +0 -3
  222. package/dist/components/Table/index.d.ts.map +0 -1
  223. package/dist/components/Tabs/Tabs.d.ts +0 -43
  224. package/dist/components/Tabs/Tabs.d.ts.map +0 -1
  225. package/dist/components/Tabs/Tabs.types.d.ts +0 -42
  226. package/dist/components/Tabs/Tabs.types.d.ts.map +0 -1
  227. package/dist/components/Tabs/index.d.ts +0 -3
  228. package/dist/components/Tabs/index.d.ts.map +0 -1
  229. package/dist/components/Textarea/Textarea.d.ts +0 -13
  230. package/dist/components/Textarea/Textarea.d.ts.map +0 -1
  231. package/dist/components/Textarea/Textarea.types.d.ts +0 -22
  232. package/dist/components/Textarea/Textarea.types.d.ts.map +0 -1
  233. package/dist/components/Textarea/index.d.ts +0 -3
  234. package/dist/components/Textarea/index.d.ts.map +0 -1
  235. package/dist/components/Toggle/Toggle.d.ts +0 -20
  236. package/dist/components/Toggle/Toggle.d.ts.map +0 -1
  237. package/dist/components/Toggle/Toggle.types.d.ts +0 -22
  238. package/dist/components/Toggle/Toggle.types.d.ts.map +0 -1
  239. package/dist/components/Toggle/index.d.ts +0 -3
  240. package/dist/components/Toggle/index.d.ts.map +0 -1
  241. package/dist/components/index.d.ts +0 -32
  242. package/dist/components/index.d.ts.map +0 -1
  243. package/dist/style-D6av97Pw.cjs +0 -10406
  244. package/dist/style-D6av97Pw.cjs.map +0 -1
  245. package/dist/style-DyXPy-7b.js +0 -10392
  246. package/dist/style-DyXPy-7b.js.map +0 -1
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/components/Button/Button.tsx","../src/components/Spinner/Spinner.tsx","../src/components/Input/Input.tsx","../src/components/PasswordInput/PasswordInput.tsx","../src/components/Textarea/Textarea.tsx","../node_modules/@headlessui/react/dist/internal/close-provider.js","../node_modules/@headlessui/react/dist/hooks/use-escape.js","../node_modules/@headlessui/react/dist/hooks/use-is-touch-device.js","../node_modules/@headlessui/react/dist/hooks/use-root-containers.js","../node_modules/@headlessui/react/dist/hooks/use-tab-direction.js","../node_modules/@headlessui/react/dist/components/focus-trap/focus-trap.js","../node_modules/@headlessui/react/dist/components/dialog/dialog.js","../node_modules/@headlessui/react/dist/components/field/field.js","../node_modules/@headlessui/react/dist/components/switch/switch.js","../node_modules/@headlessui/react/dist/internal/focus-sentinel.js","../node_modules/@headlessui/react/dist/utils/stable-collection.js","../node_modules/@headlessui/react/dist/components/tabs/tabs.js","../src/components/Select/Select.tsx","../src/components/Modal/Modal.tsx","../src/components/Drawer/Drawer.tsx","../src/components/ConfirmDialog/ConfirmDialog.tsx","../src/components/Card/Card.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/Radio/Radio.tsx","../src/components/Radio/RadioGroup.tsx","../src/components/Toggle/Toggle.tsx","../src/components/Combobox/Combobox.tsx","../src/components/Badge/Badge.tsx","../src/components/Table/Table.tsx","../src/components/Tabs/Tabs.tsx","../src/components/Breadcrumbs/Breadcrumbs.tsx","../src/components/Skeleton/Skeleton.tsx","../src/components/EmptyState/EmptyState.tsx","../src/components/Pagination/Pagination.tsx","../src/components/MultiSelect/MultiSelect.tsx","../src/components/Sidebar/SidebarItem.tsx","../src/components/Sidebar/SidebarGroup.tsx","../src/components/Sidebar/SidebarDivider.tsx","../src/components/Sidebar/Sidebar.tsx","../src/components/Alert/Alert.tsx","../src/components/Avatar/Avatar.tsx","../src/components/OTPInput/OTPInput.tsx","../src/components/DateInput/DateInput.tsx","../src/components/PillSelector/PillSelector.tsx"],"sourcesContent":["import { forwardRef } from 'react';\nimport { cn } from '@/utils';\nimport type { ButtonProps, ButtonVariant, ButtonSize } from './Button.types';\n\nconst variantStyles: Record<ButtonVariant, string> = {\n primary: [\n // Light mode\n 'bg-primary-800 text-white border border-gold-500/40',\n 'hover:bg-primary-900 hover:border-gold-500/60',\n 'focus:ring-gold-500/20',\n // Dark mode\n 'dark:bg-gold-500 dark:text-primary-900 dark:border-gold-400',\n 'dark:hover:bg-gold-400 dark:hover:border-gold-300',\n 'dark:focus:ring-gold-400/30',\n ].join(' '),\n secondary: [\n // Light mode\n 'bg-white text-primary-800 border border-primary-300',\n 'hover:bg-primary-50 hover:border-primary-400',\n 'focus:ring-primary-500/20',\n // Dark mode\n 'dark:bg-primary-800 dark:text-primary-100 dark:border-primary-600',\n 'dark:hover:bg-primary-700 dark:hover:border-primary-500',\n 'dark:focus:ring-primary-400/30',\n ].join(' '),\n ghost: [\n // Light mode\n 'text-primary-600 hover:text-primary-800 hover:bg-primary-50',\n 'focus:ring-primary-500/20',\n // Dark mode\n 'dark:text-primary-300 dark:hover:text-primary-100 dark:hover:bg-primary-800',\n 'dark:focus:ring-primary-400/30',\n ].join(' '),\n danger: [\n // Light mode\n 'bg-error text-white border border-error',\n 'hover:bg-error/90',\n 'focus:ring-error/20',\n // Dark mode (stays similar, just adjust opacity)\n 'dark:bg-error dark:border-error/80',\n 'dark:hover:bg-error/80',\n 'dark:focus:ring-error/30',\n ].join(' '),\n};\n\nconst sizeStyles: Record<ButtonSize, string> = {\n sm: 'px-3 py-1.5 text-sm h-8',\n md: 'px-4 py-2 text-base h-10',\n lg: 'px-6 py-3 text-lg h-12',\n};\n\n/**\n * Button component with multiple variants, sizes, and loading state.\n *\n * @example\n * ```tsx\n * <Button variant=\"primary\" size=\"md\">Click me</Button>\n * <Button variant=\"danger\" loading>Deleting...</Button>\n * <Button icon={<SaveIcon />} iconPosition=\"left\">Save</Button>\n * ```\n */\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n variant = 'primary',\n size = 'md',\n loading = false,\n disabled = false,\n icon,\n iconPosition = 'left',\n fullWidth = false,\n children,\n className,\n ...props\n },\n ref\n ) => {\n return (\n <button\n ref={ref}\n className={cn(\n // Base styles\n 'inline-flex items-center justify-center gap-2 font-medium rounded-md',\n 'transition-colors duration-normal',\n 'focus:outline-none focus:ring-2 focus:ring-offset-2',\n 'dark:focus:ring-offset-primary-900',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n // Variant styles\n variantStyles[variant],\n // Size styles\n sizeStyles[size],\n // Width styles\n fullWidth && 'w-full',\n // Custom className (allows override)\n className\n )}\n disabled={disabled || loading}\n {...props}\n >\n {loading ? (\n <>\n <svg\n className=\"animate-spin h-5 w-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n fill=\"currentColor\"\n />\n </svg>\n <span>Loading...</span>\n </>\n ) : (\n <>\n {icon && iconPosition === 'left' && icon}\n {children}\n {icon && iconPosition === 'right' && icon}\n </>\n )}\n </button>\n );\n }\n);\n\nButton.displayName = 'Button';\n","import { forwardRef } from 'react';\nimport { cn } from '@/utils';\nimport type { SpinnerProps, SpinnerSize, SpinnerColor } from './Spinner.types';\n\nconst sizeStyles: Record<SpinnerSize, string> = {\n xs: 'h-3 w-3', // 12px\n sm: 'h-4 w-4', // 16px\n md: 'h-5 w-5', // 20px\n lg: 'h-6 w-6', // 24px\n};\n\nconst colorStyles: Record<SpinnerColor, string> = {\n current: 'text-current',\n primary: 'text-primary-600 dark:text-primary-400',\n white: 'text-white',\n gold: 'text-gold-500 dark:text-gold-400',\n};\n\n/**\n * Spinner component for loading states.\n * Accessible with screen reader support.\n *\n * @example\n * ```tsx\n * <Spinner size=\"md\" color=\"primary\" />\n * <Spinner size=\"sm\" color=\"current\" label=\"Saving...\" />\n * ```\n */\nexport const Spinner = forwardRef<SVGSVGElement, SpinnerProps>(\n (\n {\n size = 'md',\n color = 'current',\n label = 'Loading',\n className,\n testId,\n ...props\n },\n ref\n ) => {\n return (\n <svg\n ref={ref}\n className={cn(\n 'animate-spin',\n sizeStyles[size],\n colorStyles[color],\n className\n )}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n role=\"status\"\n aria-label={label}\n data-testid={testId}\n {...props}\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n);\n\nSpinner.displayName = 'Spinner';\n","import { forwardRef } from 'react';\nimport { cn } from '@/utils';\nimport { Spinner } from '../Spinner';\nimport type { InputProps } from './Input.types';\n\n/**\n * Input component with label, error states, icons, and helper text.\n *\n * @example\n * ```tsx\n * <Input label=\"Email\" placeholder=\"you@example.com\" />\n * <Input label=\"Search\" leftIcon={<SearchIcon />} />\n * <Input label=\"Password\" error=\"Password is required\" />\n * ```\n */\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\n (\n {\n label,\n error,\n helperText,\n leftIcon,\n rightIcon,\n fullWidth = false,\n className,\n id,\n required,\n disabled,\n isLoading = false,\n testId,\n ...props\n },\n ref\n ) => {\n const inputId = id || label?.toLowerCase().replace(/\\s+/g, '-');\n const hasError = !!error;\n const errorId = hasError ? `${inputId}-error` : undefined;\n const showRightIcon = rightIcon || isLoading;\n\n return (\n <div className={cn(fullWidth ? 'w-full' : 'w-auto')} data-testid={testId}>\n {label && (\n <label\n htmlFor={inputId}\n className=\"mb-2 block text-sm font-medium text-primary-700 dark:text-white\"\n data-testid={testId ? `${testId}-label` : undefined}\n >\n {label}\n {required && <span className=\"ml-1 text-error\">*</span>}\n </label>\n )}\n\n <div className=\"relative\">\n {leftIcon && (\n <div\n className=\"pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3 text-primary-400 dark:text-primary-500\"\n data-testid={testId ? `${testId}-left-icon` : undefined}\n >\n {leftIcon}\n </div>\n )}\n\n <input\n ref={ref}\n id={inputId}\n required={required}\n disabled={disabled}\n aria-label={!label ? (props.placeholder as string) || 'Input' : undefined}\n aria-invalid={hasError ? 'true' : undefined}\n aria-describedby={errorId}\n data-testid={testId ? `${testId}-input` : undefined}\n className={cn(\n // Base styles - Light mode\n 'block w-full rounded-md border bg-white px-4 py-2.5 text-sm text-primary-900',\n 'transition-colors duration-normal',\n 'placeholder:text-primary-400',\n 'focus:outline-none focus:ring-2',\n 'disabled:cursor-not-allowed disabled:bg-primary-50 disabled:text-primary-500',\n // Base styles - Dark mode\n 'dark:bg-primary-800 dark:text-primary-100',\n 'dark:placeholder:text-primary-500',\n 'dark:disabled:bg-primary-900 dark:disabled:text-primary-600',\n // Border and focus styles\n hasError\n ? 'border-error focus:border-error focus:ring-error/20 dark:border-error/70 dark:focus:ring-error/30'\n : 'border-primary-300 focus:border-gold-500 focus:ring-gold-500/20 dark:border-primary-600 dark:focus:border-gold-400 dark:focus:ring-gold-400/30',\n // Icon padding\n leftIcon && 'pl-11',\n showRightIcon && 'pr-11',\n // Custom className\n className\n )}\n {...props}\n />\n\n {showRightIcon && (\n <div\n className=\"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3 text-primary-400 dark:text-primary-500\"\n data-testid={testId ? `${testId}-right-icon` : undefined}\n >\n {isLoading ? <Spinner size=\"sm\" color=\"primary\" /> : rightIcon}\n </div>\n )}\n </div>\n\n {(error || helperText) && (\n <p\n id={errorId}\n role={hasError ? 'alert' : undefined}\n data-testid={testId ? (hasError ? `${testId}-error` : `${testId}-helper-text`) : undefined}\n className={cn(\n 'mt-1.5 text-sm',\n hasError ? 'text-error' : 'text-primary-500 dark:text-primary-400'\n )}\n >\n {error || helperText}\n </p>\n )}\n </div>\n );\n }\n);\n\nInput.displayName = 'Input';\n","import { forwardRef, useState } from 'react';\nimport { cn } from '@/utils';\nimport { Input } from '../Input';\nimport type { PasswordInputProps, PasswordStrength } from './PasswordInput.types';\n\n// Eye icon (visible)\nconst EyeIcon = () => (\n <svg\n className=\"h-5 w-5\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n d=\"M2.036 12.322a1.012 1.012 0 010-.639C3.423 7.51 7.36 4.5 12 4.5c4.638 0 8.573 3.007 9.963 7.178.07.207.07.431 0 .639C20.577 16.49 16.64 19.5 12 19.5c-4.638 0-8.573-3.007-9.963-7.178z\"\n />\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\"\n />\n </svg>\n);\n\n// Eye slash icon (hidden)\nconst EyeSlashIcon = () => (\n <svg\n className=\"h-5 w-5\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n d=\"M3.98 8.223A10.477 10.477 0 001.934 12C3.226 16.338 7.244 19.5 12 19.5c.993 0 1.953-.138 2.863-.395M6.228 6.228A10.45 10.45 0 0112 4.5c4.756 0 8.773 3.162 10.065 7.498a10.523 10.523 0 01-4.293 5.774M6.228 6.228L3 3m3.228 3.228l3.65 3.65m7.894 7.894L21 21m-3.228-3.228l-3.65-3.65m0 0a3 3 0 10-4.243-4.243m4.242 4.242L9.88 9.88\"\n />\n </svg>\n);\n\n/**\n * Calculate password strength based on common criteria\n */\nfunction getPasswordStrength(password: string): PasswordStrength {\n if (!password) {\n return { strength: 0, label: '', color: '' };\n }\n\n let score = 0;\n if (password.length >= 8) score++;\n if (password.length >= 12) score++;\n if (/[a-z]/.test(password) && /[A-Z]/.test(password)) score++;\n if (/\\d/.test(password)) score++;\n if (/[^a-zA-Z0-9]/.test(password)) score++;\n\n if (score <= 2) {\n return { strength: 33, label: 'Weak', color: 'bg-error' };\n } else if (score <= 3) {\n return { strength: 66, label: 'Medium', color: 'bg-warning' };\n } else {\n return { strength: 100, label: 'Strong', color: 'bg-success' };\n }\n}\n\n/**\n * Password input with visibility toggle and optional strength indicator.\n *\n * @example\n * ```tsx\n * <PasswordInput label=\"Password\" placeholder=\"Enter password\" />\n * <PasswordInput label=\"Password\" showStrengthIndicator value={password} onChange={...} />\n * ```\n */\nexport const PasswordInput = forwardRef<HTMLInputElement, PasswordInputProps>(\n ({ showStrengthIndicator = false, value, className, testId, ...props }, ref) => {\n const [showPassword, setShowPassword] = useState(false);\n\n const togglePasswordVisibility = () => {\n setShowPassword((prev) => !prev);\n };\n\n const passwordValue = typeof value === 'string' ? value : '';\n const strength = showStrengthIndicator ? getPasswordStrength(passwordValue) : null;\n\n const toggleButton = (\n <button\n type=\"button\"\n tabIndex={-1}\n onClick={togglePasswordVisibility}\n className={cn(\n 'pointer-events-auto cursor-pointer',\n 'text-primary-400 hover:text-primary-600',\n 'dark:text-primary-500 dark:hover:text-primary-300'\n )}\n aria-label={showPassword ? 'Hide password' : 'Show password'}\n data-testid={testId ? `${testId}-toggle-button` : undefined}\n >\n {showPassword ? <EyeSlashIcon /> : <EyeIcon />}\n </button>\n );\n\n return (\n <div className={cn('w-full', className)} data-testid={testId}>\n <Input\n {...props}\n ref={ref}\n type={showPassword ? 'text' : 'password'}\n value={value}\n rightIcon={toggleButton}\n testId={testId ? `${testId}-input` : undefined}\n />\n\n {showStrengthIndicator && passwordValue && strength && strength.label && (\n <div className=\"mt-2\">\n <div className=\"flex items-center justify-between mb-1\">\n <span className=\"text-xs text-primary-500 dark:text-primary-400\">\n Password strength:\n </span>\n <span\n className={cn(\n 'text-xs font-medium',\n strength.label === 'Weak' && 'text-error',\n strength.label === 'Medium' && 'text-warning',\n strength.label === 'Strong' && 'text-success'\n )}\n >\n {strength.label}\n </span>\n </div>\n <div className=\"h-2 w-full bg-primary-200 dark:bg-primary-700 rounded-full overflow-hidden\">\n <div\n className={cn('h-full transition-all duration-300', strength.color)}\n style={{ width: `${strength.strength}%` }}\n />\n </div>\n </div>\n )}\n </div>\n );\n }\n);\n\nPasswordInput.displayName = 'PasswordInput';\n","import { forwardRef, useCallback, useEffect, useRef } from 'react';\nimport { cn } from '@/utils';\nimport { Spinner } from '../Spinner';\nimport type { TextareaProps } from './Textarea.types';\n\n/**\n * Textarea component with label, error states, and optional character count.\n *\n * @example\n * ```tsx\n * <Textarea label=\"Notes\" placeholder=\"Enter session notes...\" />\n * <Textarea label=\"Description\" maxLength={500} showCharCount />\n * <Textarea label=\"Content\" autoResize />\n * ```\n */\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n (\n {\n label,\n error,\n helperText,\n fullWidth = false,\n rows = 4,\n showCharCount = false,\n autoResize = false,\n className,\n id,\n required,\n disabled,\n maxLength,\n value,\n defaultValue,\n onChange,\n isLoading = false,\n testId,\n ...props\n },\n ref\n ) => {\n const textareaId = id || label?.toLowerCase().replace(/\\s+/g, '-');\n const hasError = !!error;\n const errorId = hasError ? `${textareaId}-error` : undefined;\n const internalRef = useRef<HTMLTextAreaElement>(null);\n\n // Combine refs\n const combinedRef = useCallback(\n (node: HTMLTextAreaElement | null) => {\n (internalRef as React.MutableRefObject<HTMLTextAreaElement | null>).current = node;\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n },\n [ref]\n );\n\n // Get current character count\n const currentValue = value !== undefined ? String(value) : '';\n const charCount = currentValue.length;\n\n // Auto-resize handler\n const adjustHeight = useCallback(() => {\n const textarea = internalRef.current;\n if (textarea && autoResize) {\n textarea.style.height = 'auto';\n textarea.style.height = `${textarea.scrollHeight}px`;\n }\n }, [autoResize]);\n\n // Handle change with auto-resize\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n onChange?.(e);\n if (autoResize) {\n adjustHeight();\n }\n },\n [onChange, autoResize, adjustHeight]\n );\n\n // Initial auto-resize\n useEffect(() => {\n if (autoResize) {\n adjustHeight();\n }\n }, [autoResize, adjustHeight, value, defaultValue]);\n\n return (\n <div className={cn(fullWidth ? 'w-full' : 'w-auto')} data-testid={testId}>\n {label && (\n <label\n htmlFor={textareaId}\n className=\"mb-2 block text-sm font-medium text-primary-700 dark:text-white\"\n data-testid={testId ? `${testId}-label` : undefined}\n >\n {label}\n {required && <span className=\"ml-1 text-error\">*</span>}\n </label>\n )}\n\n <div className=\"relative\">\n <textarea\n ref={combinedRef}\n id={textareaId}\n rows={autoResize ? 1 : rows}\n required={required}\n disabled={disabled}\n maxLength={maxLength}\n value={value}\n defaultValue={defaultValue}\n aria-label={!label ? (props.placeholder as string) || 'Text area' : undefined}\n aria-invalid={hasError ? 'true' : undefined}\n aria-describedby={errorId}\n onChange={handleChange}\n data-testid={testId ? `${testId}-textarea` : undefined}\n className={cn(\n // Base styles - Light mode\n 'block w-full rounded-md border bg-white px-4 py-2.5 text-sm text-primary-900',\n 'transition-colors duration-normal',\n 'placeholder:text-primary-400',\n 'focus:outline-none focus:ring-2',\n 'disabled:cursor-not-allowed disabled:bg-primary-50 disabled:text-primary-500',\n 'resize-none',\n // Base styles - Dark mode\n 'dark:bg-primary-800 dark:text-primary-100',\n 'dark:placeholder:text-primary-500',\n 'dark:disabled:bg-primary-900 dark:disabled:text-primary-600',\n // Auto-resize specific\n autoResize && 'overflow-hidden',\n // Border and focus styles\n hasError\n ? 'border-error focus:border-error focus:ring-error/20 dark:border-error/70 dark:focus:ring-error/30'\n : 'border-primary-300 focus:border-gold-500 focus:ring-gold-500/20 dark:border-primary-600 dark:focus:border-gold-400 dark:focus:ring-gold-400/30',\n // Custom className\n className\n )}\n {...props}\n />\n {isLoading && (\n <div className=\"absolute top-2.5 right-2.5\">\n <Spinner size=\"sm\" color=\"primary\" label=\"Saving...\" />\n </div>\n )}\n </div>\n\n <div className=\"mt-1.5 flex justify-between\">\n {(error || helperText) && (\n <p\n id={errorId}\n role={hasError ? 'alert' : undefined}\n data-testid={testId ? (hasError ? `${testId}-error` : `${testId}-helper-text`) : undefined}\n className={cn(\n 'text-sm',\n hasError ? 'text-error' : 'text-primary-500 dark:text-primary-400'\n )}\n >\n {error || helperText}\n </p>\n )}\n {!error && !helperText && <span />}\n\n {showCharCount && maxLength && (\n <span\n className={cn(\n 'text-sm',\n charCount >= maxLength ? 'text-error' : 'text-primary-400 dark:text-primary-500'\n )}\n >\n {charCount}/{maxLength}\n </span>\n )}\n </div>\n </div>\n );\n }\n);\n\nTextarea.displayName = 'Textarea';\n","\"use client\";import r,{createContext as n,useContext as i}from\"react\";let e=n(()=>{});function u(){return i(e)}function C({value:t,children:o}){return r.createElement(e.Provider,{value:t},o)}export{C as CloseProvider,u as useClose};\n","import{Keys as u}from'../components/keyboard.js';import{useEventListener as i}from'./use-event-listener.js';import{useIsTopLayer as f}from'./use-is-top-layer.js';function a(o,r=typeof document!=\"undefined\"?document.defaultView:null,t){let n=f(o,\"escape\");i(r,\"keydown\",e=>{n&&(e.defaultPrevented||e.key===u.Escape&&t(e))})}export{a as useEscape};\n","import{useState as i}from\"react\";import{useIsoMorphicEffect as s}from'./use-iso-morphic-effect.js';function f(){var t;let[e]=i(()=>typeof window!=\"undefined\"&&typeof window.matchMedia==\"function\"?window.matchMedia(\"(pointer: coarse)\"):null),[o,c]=i((t=e==null?void 0:e.matches)!=null?t:!1);return s(()=>{if(!e)return;function n(r){c(r.matches)}return e.addEventListener(\"change\",n),()=>e.removeEventListener(\"change\",n)},[e]),o}export{f as useIsTouchDevice};\n","import s,{createContext as h,useContext as b,useState as p}from\"react\";import{Hidden as M,HiddenFeatures as v}from'../internal/hidden.js';import*as f from'../utils/dom.js';import{getOwnerDocument as a}from'../utils/owner.js';import{useEvent as m}from'./use-event.js';function S({defaultContainers:l=[],portals:n,mainTreeNode:o}={}){let c=m(()=>{var r,u;let i=a(o),t=[];for(let e of l)e!==null&&(f.isElement(e)?t.push(e):\"current\"in e&&f.isElement(e.current)&&t.push(e.current));if(n!=null&&n.current)for(let e of n.current)t.push(e);for(let e of(r=i==null?void 0:i.querySelectorAll(\"html > *, body > *\"))!=null?r:[])e!==document.body&&e!==document.head&&f.isElement(e)&&e.id!==\"headlessui-portal-root\"&&(o&&(e.contains(o)||e.contains((u=o==null?void 0:o.getRootNode())==null?void 0:u.host))||t.some(E=>e.contains(E))||t.push(e));return t});return{resolveContainers:c,contains:m(i=>c().some(t=>t.contains(i)))}}let d=h(null);function j({children:l,node:n}){let[o,c]=p(null),i=x(n!=null?n:o);return s.createElement(d.Provider,{value:i},l,i===null&&s.createElement(M,{features:v.Hidden,ref:t=>{var r,u;if(t){for(let e of(u=(r=a(t))==null?void 0:r.querySelectorAll(\"html > *, body > *\"))!=null?u:[])if(e!==document.body&&e!==document.head&&f.isElement(e)&&e!=null&&e.contains(t)){c(e);break}}}}))}function x(l=null){var n;return(n=b(d))!=null?n:l}export{j as MainTreeProvider,x as useMainTreeNode,S as useRootContainers};\n","import{useRef as o}from\"react\";import{useWindowEvent as t}from'./use-window-event.js';var a=(r=>(r[r.Forwards=0]=\"Forwards\",r[r.Backwards=1]=\"Backwards\",r))(a||{});function u(){let e=o(0);return t(!0,\"keydown\",r=>{r.key===\"Tab\"&&(e.current=r.shiftKey?1:0)},!0),e}export{a as Direction,u as useTabDirection};\n","\"use client\";import F,{useRef as M}from\"react\";import{useDisposables as W}from'../../hooks/use-disposables.js';import{useEvent as O}from'../../hooks/use-event.js';import{useEventListener as K}from'../../hooks/use-event-listener.js';import{useIsMounted as P}from'../../hooks/use-is-mounted.js';import{useIsTopLayer as C}from'../../hooks/use-is-top-layer.js';import{useOnUnmount as q}from'../../hooks/use-on-unmount.js';import{useOwnerDocument as J}from'../../hooks/use-owner.js';import{useServerHandoffComplete as X}from'../../hooks/use-server-handoff-complete.js';import{useSyncRefs as z}from'../../hooks/use-sync-refs.js';import{Direction as y,useTabDirection as D}from'../../hooks/use-tab-direction.js';import{useWatch as R}from'../../hooks/use-watch.js';import{Hidden as _,HiddenFeatures as S}from'../../internal/hidden.js';import{history as H}from'../../utils/active-element-history.js';import*as i from'../../utils/dom.js';import{Focus as m,FocusResult as h,focusElement as p,focusIn as d}from'../../utils/focus-management.js';import{match as j}from'../../utils/match.js';import{microTask as U}from'../../utils/micro-task.js';import{isActiveElement as Q}from'../../utils/owner.js';import{forwardRefWithAs as Y,useRender as Z}from'../../utils/render.js';function x(o){if(!o)return new Set;if(typeof o==\"function\")return new Set(o());let t=new Set;for(let e of o.current)i.isElement(e.current)&&t.add(e.current);return t}let $=\"div\";var G=(n=>(n[n.None=0]=\"None\",n[n.InitialFocus=1]=\"InitialFocus\",n[n.TabLock=2]=\"TabLock\",n[n.FocusLock=4]=\"FocusLock\",n[n.RestoreFocus=8]=\"RestoreFocus\",n[n.AutoFocus=16]=\"AutoFocus\",n))(G||{});function w(o,t){let e=M(null),r=z(e,t),{initialFocus:u,initialFocusFallback:a,containers:n,features:s=15,...f}=o;X()||(s=0);let l=J(e.current);re(s,{ownerDocument:l});let T=ne(s,{ownerDocument:l,container:e,initialFocus:u,initialFocusFallback:a});oe(s,{ownerDocument:l,container:e,containers:n,previousActiveElement:T});let g=D(),A=O(c=>{if(!i.isHTMLElement(e.current))return;let E=e.current;(V=>V())(()=>{j(g.current,{[y.Forwards]:()=>{d(E,m.First,{skipElements:[c.relatedTarget,a]})},[y.Backwards]:()=>{d(E,m.Last,{skipElements:[c.relatedTarget,a]})}})})}),v=C(!!(s&2),\"focus-trap#tab-lock\"),N=W(),b=M(!1),k={ref:r,onKeyDown(c){c.key==\"Tab\"&&(b.current=!0,N.requestAnimationFrame(()=>{b.current=!1}))},onBlur(c){if(!(s&4))return;let E=x(n);i.isHTMLElement(e.current)&&E.add(e.current);let L=c.relatedTarget;i.isHTMLorSVGElement(L)&&L.dataset.headlessuiFocusGuard!==\"true\"&&(I(E,L)||(b.current?d(e.current,j(g.current,{[y.Forwards]:()=>m.Next,[y.Backwards]:()=>m.Previous})|m.WrapAround,{relativeTo:c.target}):i.isHTMLorSVGElement(c.target)&&p(c.target)))}},B=Z();return F.createElement(F.Fragment,null,v&&F.createElement(_,{as:\"button\",type:\"button\",\"data-headlessui-focus-guard\":!0,onFocus:A,features:S.Focusable}),B({ourProps:k,theirProps:f,defaultTag:$,name:\"FocusTrap\"}),v&&F.createElement(_,{as:\"button\",type:\"button\",\"data-headlessui-focus-guard\":!0,onFocus:A,features:S.Focusable}))}let ee=Y(w),ge=Object.assign(ee,{features:G});function te(o=!0){let t=M(H.slice());return R(([e],[r])=>{r===!0&&e===!1&&U(()=>{t.current.splice(0)}),r===!1&&e===!0&&(t.current=H.slice())},[o,H,t]),O(()=>{var e;return(e=t.current.find(r=>r!=null&&r.isConnected))!=null?e:null})}function re(o,{ownerDocument:t}){let e=!!(o&8),r=te(e);R(()=>{e||Q(t==null?void 0:t.body)&&p(r())},[e]),q(()=>{e&&p(r())})}function ne(o,{ownerDocument:t,container:e,initialFocus:r,initialFocusFallback:u}){let a=M(null),n=C(!!(o&1),\"focus-trap#initial-focus\"),s=P();return R(()=>{if(o===0)return;if(!n){u!=null&&u.current&&p(u.current);return}let f=e.current;f&&U(()=>{if(!s.current)return;let l=t==null?void 0:t.activeElement;if(r!=null&&r.current){if((r==null?void 0:r.current)===l){a.current=l;return}}else if(f.contains(l)){a.current=l;return}if(r!=null&&r.current)p(r.current);else{if(o&16){if(d(f,m.First|m.AutoFocus)!==h.Error)return}else if(d(f,m.First)!==h.Error)return;if(u!=null&&u.current&&(p(u.current),(t==null?void 0:t.activeElement)===u.current))return;console.warn(\"There are no focusable elements inside the <FocusTrap />\")}a.current=t==null?void 0:t.activeElement})},[u,n,o]),a}function oe(o,{ownerDocument:t,container:e,containers:r,previousActiveElement:u}){let a=P(),n=!!(o&4);K(t==null?void 0:t.defaultView,\"focus\",s=>{if(!n||!a.current)return;let f=x(r);i.isHTMLElement(e.current)&&f.add(e.current);let l=u.current;if(!l)return;let T=s.target;i.isHTMLElement(T)?I(f,T)?(u.current=T,p(T)):(s.preventDefault(),s.stopPropagation(),p(l)):p(u.current)},!0)}function I(o,t){for(let e of o)if(e.contains(t))return!0;return!1}export{ge as FocusTrap,G as FocusTrapFeatures};\n","\"use client\";import l,{Fragment as $,createContext as pe,createRef as se,useCallback as de,useContext as ue,useEffect as Te,useMemo as fe,useReducer as ge,useRef as j}from\"react\";import{useEscape as ce}from'../../hooks/use-escape.js';import{useEvent as A}from'../../hooks/use-event.js';import{useId as k}from'../../hooks/use-id.js';import{useInertOthers as me}from'../../hooks/use-inert-others.js';import{useIsTouchDevice as De}from'../../hooks/use-is-touch-device.js';import{useIsoMorphicEffect as Pe}from'../../hooks/use-iso-morphic-effect.js';import{useOnDisappear as ye}from'../../hooks/use-on-disappear.js';import{useOutsideClick as Ee}from'../../hooks/use-outside-click.js';import{useOwnerDocument as Ae}from'../../hooks/use-owner.js';import{MainTreeProvider as Y,useMainTreeNode as _e,useRootContainers as Ce}from'../../hooks/use-root-containers.js';import{useScrollLock as Re}from'../../hooks/use-scroll-lock.js';import{useServerHandoffComplete as Fe}from'../../hooks/use-server-handoff-complete.js';import{useSlot as L}from'../../hooks/use-slot.js';import{useSyncRefs as G}from'../../hooks/use-sync-refs.js';import{CloseProvider as be}from'../../internal/close-provider.js';import{ResetOpenClosedProvider as ve,State as x,useOpenClosed as J}from'../../internal/open-closed.js';import{ForcePortalRoot as K}from'../../internal/portal-force-root.js';import{stackMachines as Le}from'../../machines/stack-machine.js';import{useSlice as xe}from'../../react-glue.js';import{match as he}from'../../utils/match.js';import{RenderFeatures as X,forwardRefWithAs as _,useRender as h}from'../../utils/render.js';import{Description as V,useDescriptions as Oe}from'../description/description.js';import{FocusTrap as Se,FocusTrapFeatures as C}from'../focus-trap/focus-trap.js';import{Portal as Ie,PortalGroup as Me,useNestedPortals as ke}from'../portal/portal.js';import{Transition as Ge,TransitionChild as q}from'../transition/transition.js';var we=(o=>(o[o.Open=0]=\"Open\",o[o.Closed=1]=\"Closed\",o))(we||{}),Be=(t=>(t[t.SetTitleId=0]=\"SetTitleId\",t))(Be||{});let Ue={[0](e,t){return e.titleId===t.id?e:{...e,titleId:t.id}}},w=pe(null);w.displayName=\"DialogContext\";function O(e){let t=ue(w);if(t===null){let o=new Error(`<${e} /> is missing a parent <Dialog /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(o,O),o}return t}function He(e,t){return he(t.type,Ue,e,t)}let z=_(function(t,o){let a=k(),{id:n=`headlessui-dialog-${a}`,open:i,onClose:p,initialFocus:d,role:s=\"dialog\",autoFocus:f=!0,__demoMode:u=!1,unmount:y=!1,...S}=t,R=j(!1);s=function(){return s===\"dialog\"||s===\"alertdialog\"?s:(R.current||(R.current=!0,console.warn(`Invalid role [${s}] passed to <Dialog />. Only \\`dialog\\` and and \\`alertdialog\\` are supported. Using \\`dialog\\` instead.`)),\"dialog\")}();let g=J();i===void 0&&g!==null&&(i=(g&x.Open)===x.Open);let T=j(null),I=G(T,o),F=Ae(T.current),c=i?0:1,[b,Q]=ge(He,{titleId:null,descriptionId:null,panelRef:se()}),m=A(()=>p(!1)),B=A(r=>Q({type:0,id:r})),D=Fe()?c===0:!1,[Z,ee]=ke(),te={get current(){var r;return(r=b.panelRef.current)!=null?r:T.current}},v=_e(),{resolveContainers:M}=Ce({mainTreeNode:v,portals:Z,defaultContainers:[te]}),U=g!==null?(g&x.Closing)===x.Closing:!1;me(u||U?!1:D,{allowed:A(()=>{var r,W;return[(W=(r=T.current)==null?void 0:r.closest(\"[data-headlessui-portal]\"))!=null?W:null]}),disallowed:A(()=>{var r;return[(r=v==null?void 0:v.closest(\"body > *:not(#headlessui-portal-root)\"))!=null?r:null]})});let P=Le.get(null);Pe(()=>{if(D)return P.actions.push(n),()=>P.actions.pop(n)},[P,n,D]);let H=xe(P,de(r=>P.selectors.isTop(r,n),[P,n]));Ee(H,M,r=>{r.preventDefault(),m()}),ce(H,F==null?void 0:F.defaultView,r=>{r.preventDefault(),r.stopPropagation(),document.activeElement&&\"blur\"in document.activeElement&&typeof document.activeElement.blur==\"function\"&&document.activeElement.blur(),m()}),Re(u||U?!1:D,F,M),ye(D,T,m);let[oe,ne]=Oe(),re=fe(()=>[{dialogState:c,close:m,setTitleId:B,unmount:y},b],[c,m,B,y,b]),N=L({open:c===0}),le={ref:I,id:n,role:s,tabIndex:-1,\"aria-modal\":u?void 0:c===0?!0:void 0,\"aria-labelledby\":b.titleId,\"aria-describedby\":oe,unmount:y},ae=!De(),E=C.None;D&&!u&&(E|=C.RestoreFocus,E|=C.TabLock,f&&(E|=C.AutoFocus),ae&&(E|=C.InitialFocus));let ie=h();return l.createElement(ve,null,l.createElement(K,{force:!0},l.createElement(Ie,null,l.createElement(w.Provider,{value:re},l.createElement(Me,{target:T},l.createElement(K,{force:!1},l.createElement(ne,{slot:N},l.createElement(ee,null,l.createElement(Se,{initialFocus:d,initialFocusFallback:T,containers:M,features:E},l.createElement(be,{value:m},ie({ourProps:le,theirProps:S,slot:N,defaultTag:Ne,features:We,visible:c===0,name:\"Dialog\"})))))))))))}),Ne=\"div\",We=X.RenderStrategy|X.Static;function $e(e,t){let{transition:o=!1,open:a,...n}=e,i=J(),p=e.hasOwnProperty(\"open\")||i!==null,d=e.hasOwnProperty(\"onClose\");if(!p&&!d)throw new Error(\"You have to provide an `open` and an `onClose` prop to the `Dialog` component.\");if(!p)throw new Error(\"You provided an `onClose` prop to the `Dialog`, but forgot an `open` prop.\");if(!d)throw new Error(\"You provided an `open` prop to the `Dialog`, but forgot an `onClose` prop.\");if(!i&&typeof e.open!=\"boolean\")throw new Error(`You provided an \\`open\\` prop to the \\`Dialog\\`, but the value is not a boolean. Received: ${e.open}`);if(typeof e.onClose!=\"function\")throw new Error(`You provided an \\`onClose\\` prop to the \\`Dialog\\`, but the value is not a function. Received: ${e.onClose}`);return(a!==void 0||o)&&!n.static?l.createElement(Y,null,l.createElement(Ge,{show:a,transition:o,unmount:n.unmount},l.createElement(z,{ref:t,...n}))):l.createElement(Y,null,l.createElement(z,{ref:t,open:a,...n}))}let je=\"div\";function Ye(e,t){let o=k(),{id:a=`headlessui-dialog-panel-${o}`,transition:n=!1,...i}=e,[{dialogState:p,unmount:d},s]=O(\"Dialog.Panel\"),f=G(t,s.panelRef),u=L({open:p===0}),y=A(I=>{I.stopPropagation()}),S={ref:f,id:a,onClick:y},R=n?q:$,g=n?{unmount:d}:{},T=h();return l.createElement(R,{...g},T({ourProps:S,theirProps:i,slot:u,defaultTag:je,name:\"Dialog.Panel\"}))}let Je=\"div\";function Ke(e,t){let{transition:o=!1,...a}=e,[{dialogState:n,unmount:i}]=O(\"Dialog.Backdrop\"),p=L({open:n===0}),d={ref:t,\"aria-hidden\":!0},s=o?q:$,f=o?{unmount:i}:{},u=h();return l.createElement(s,{...f},u({ourProps:d,theirProps:a,slot:p,defaultTag:Je,name:\"Dialog.Backdrop\"}))}let Xe=\"h2\";function Ve(e,t){let o=k(),{id:a=`headlessui-dialog-title-${o}`,...n}=e,[{dialogState:i,setTitleId:p}]=O(\"Dialog.Title\"),d=G(t);Te(()=>(p(a),()=>p(null)),[a,p]);let s=L({open:i===0}),f={ref:d,id:a};return h()({ourProps:f,theirProps:n,slot:s,defaultTag:Xe,name:\"Dialog.Title\"})}let qe=_($e),ze=_(Ye),Lt=_(Ke),Qe=_(Ve),xt=V,ht=Object.assign(qe,{Panel:ze,Title:Qe,Description:V});export{ht as Dialog,Lt as DialogBackdrop,xt as DialogDescription,ze as DialogPanel,Qe as DialogTitle};\n","\"use client\";import e from\"react\";import{useId as f}from'../../hooks/use-id.js';import{useSlot as P}from'../../hooks/use-slot.js';import{DisabledProvider as y,useDisabled as u}from'../../internal/disabled.js';import{FormFieldsProvider as D}from'../../internal/form-fields.js';import{IdProvider as v}from'../../internal/id.js';import{forwardRefWithAs as b,useRender as E}from'../../utils/render.js';import{useDescriptions as A}from'../description/description.js';import{useLabels as L}from'../label/label.js';let _=\"div\";function c(d,l){let t=`headlessui-control-${f()}`,[p,s]=L(),[n,a]=A(),m=u(),{disabled:r=m||!1,...o}=d,i=P({disabled:r}),F={ref:l,disabled:r||void 0,\"aria-disabled\":r||void 0},T=E();return e.createElement(y,{value:r},e.createElement(s,{value:p},e.createElement(a,{value:n},e.createElement(v,{id:t},T({ourProps:F,theirProps:{...o,children:e.createElement(D,null,typeof o.children==\"function\"?o.children(i):o.children)},slot:i,defaultTag:_,name:\"Field\"})))))}let W=b(c);export{W as Field};\n","\"use client\";import{useFocusRing as z}from\"@react-aria/focus\";import{useHover as Q}from\"@react-aria/interactions\";import i,{Fragment as Y,createContext as Z,useCallback as ee,useContext as te,useMemo as oe,useRef as re,useState as w}from\"react\";import{useActivePress as ne}from'../../hooks/use-active-press.js';import{useControllable as le}from'../../hooks/use-controllable.js';import{useDefaultValue as ie}from'../../hooks/use-default-value.js';import{useDisposables as ae}from'../../hooks/use-disposables.js';import{useEvent as m}from'../../hooks/use-event.js';import{useId as se}from'../../hooks/use-id.js';import{useResolveButtonType as pe}from'../../hooks/use-resolve-button-type.js';import{useSlot as ce}from'../../hooks/use-slot.js';import{useSyncRefs as ue}from'../../hooks/use-sync-refs.js';import{useDisabled as de}from'../../internal/disabled.js';import{FormFields as me}from'../../internal/form-fields.js';import{useProvidedId as fe}from'../../internal/id.js';import{isDisabledReactIssue7711 as he}from'../../utils/bugs.js';import*as be from'../../utils/dom.js';import{attemptSubmit as Te}from'../../utils/form.js';import{forwardRefWithAs as ye,mergeProps as Se,useRender as v}from'../../utils/render.js';import{Description as we,useDescribedBy as Ee,useDescriptions as _e}from'../description/description.js';import{Keys as x}from'../keyboard.js';import{Label as Pe,useLabelledBy as De,useLabels as ge}from'../label/label.js';let E=Z(null);E.displayName=\"GroupContext\";let ve=Y;function xe(n){var c;let[t,a]=w(null),[f,h]=ge(),[b,o]=_e(),s=oe(()=>({switch:t,setSwitch:a}),[t,a]),T={},y=n,p=v();return i.createElement(o,{name:\"Switch.Description\",value:b},i.createElement(h,{name:\"Switch.Label\",value:f,props:{htmlFor:(c=s.switch)==null?void 0:c.id,onClick(u){t&&(be.isHTMLLabelElement(u.currentTarget)&&u.preventDefault(),t.click(),t.focus({preventScroll:!0}))}}},i.createElement(E.Provider,{value:s},p({ourProps:T,theirProps:y,slot:{},defaultTag:ve,name:\"Switch.Group\"}))))}let Ce=\"button\";function Le(n,t){var g;let a=se(),f=fe(),h=de(),{id:b=f||`headlessui-switch-${a}`,disabled:o=h||!1,checked:s,defaultChecked:T,onChange:y,name:p,value:c,form:u,autoFocus:S=!1,...C}=n,_=te(E),[L,R]=w(null),G=re(null),A=ue(G,t,_===null?null:_.setSwitch,R),l=ie(T),[d,r]=le(s,y,l!=null?l:!1),F=ae(),[H,P]=w(!1),D=m(()=>{P(!0),r==null||r(!d),F.nextFrame(()=>{P(!1)})}),k=m(e=>{if(he(e.currentTarget))return e.preventDefault();e.preventDefault(),D()}),M=m(e=>{e.key===x.Space?(e.preventDefault(),D()):e.key===x.Enter&&Te(e.currentTarget)}),U=m(e=>e.preventDefault()),I=De(),B=Ee(),{isFocusVisible:K,focusProps:O}=z({autoFocus:S}),{isHovered:W,hoverProps:N}=Q({isDisabled:o}),{pressed:J,pressProps:V}=ne({disabled:o}),X=ce({checked:d,disabled:o,hover:W,focus:K,active:J,autofocus:S,changing:H}),j=Se({id:b,ref:A,role:\"switch\",type:pe(n,L),tabIndex:n.tabIndex===-1?0:(g=n.tabIndex)!=null?g:0,\"aria-checked\":d,\"aria-labelledby\":I,\"aria-describedby\":B,disabled:o||void 0,autoFocus:S,onClick:k,onKeyUp:M,onKeyPress:U},O,N,V),$=ee(()=>{if(l!==void 0)return r==null?void 0:r(l)},[r,l]),q=v();return i.createElement(i.Fragment,null,p!=null&&i.createElement(me,{disabled:o,data:{[p]:c||\"on\"},overrides:{type:\"checkbox\",checked:d},form:u,onReset:$}),q({ourProps:j,theirProps:C,slot:X,defaultTag:Ce,name:\"Switch\"}))}let Re=ye(Le),Ge=xe,Ae=Pe,Fe=we,tt=Object.assign(Re,{Group:Ge,Label:Ae,Description:Fe});export{tt as Switch,Fe as SwitchDescription,Ge as SwitchGroup,Ae as SwitchLabel};\n","import s,{useState as c}from\"react\";import{useIsMounted as m}from'../hooks/use-is-mounted.js';import{Hidden as f,HiddenFeatures as l}from'./hidden.js';function b({onFocus:n}){let[r,o]=c(!0),u=m();return r?s.createElement(f,{as:\"button\",type:\"button\",features:l.Focusable,onFocus:a=>{a.preventDefault();let e,i=50;function t(){if(i--<=0){e&&cancelAnimationFrame(e);return}if(n()){if(cancelAnimationFrame(e),!u.current)return;o(!1);return}e=requestAnimationFrame(t)}e=requestAnimationFrame(t)}}):null}export{b as FocusSentinel};\n","import*as l from\"react\";const s=l.createContext(null);function a(){return{groups:new Map,get(o,e){var i;let t=this.groups.get(o);t||(t=new Map,this.groups.set(o,t));let n=(i=t.get(e))!=null?i:0;t.set(e,n+1);let r=Array.from(t.keys()).indexOf(e);function u(){let c=t.get(e);c>1?t.set(e,c-1):t.delete(e)}return[r,u]}}}function f({children:o}){let e=l.useRef(a());return l.createElement(s.Provider,{value:e},o)}function C(o){let e=l.useContext(s);if(!e)throw new Error(\"You must wrap your component in a <StableCollection>\");let t=l.useId(),[n,r]=e.current.get(o,t);return l.useEffect(()=>r,[]),n}export{f as StableCollection,C as useStableCollectionIndex};\n","\"use client\";import{useFocusRing as te}from\"@react-aria/focus\";import{useHover as be}from\"@react-aria/interactions\";import G,{createContext as re,useContext as ne,useMemo as ae,useReducer as fe,useRef as q,useState as me}from\"react\";import{useActivePress as Pe}from'../../hooks/use-active-press.js';import{useEvent as F}from'../../hooks/use-event.js';import{useId as le}from'../../hooks/use-id.js';import{useIsoMorphicEffect as W}from'../../hooks/use-iso-morphic-effect.js';import{useLatestValue as j}from'../../hooks/use-latest-value.js';import{useResolveButtonType as ye}from'../../hooks/use-resolve-button-type.js';import{useSlot as U}from'../../hooks/use-slot.js';import{useSyncRefs as H}from'../../hooks/use-sync-refs.js';import{FocusSentinel as xe}from'../../internal/focus-sentinel.js';import{Hidden as ge}from'../../internal/hidden.js';import{Focus as y,FocusResult as K,focusIn as I,sortByDomNode as w}from'../../utils/focus-management.js';import{match as O}from'../../utils/match.js';import{microTask as Ae}from'../../utils/micro-task.js';import{getActiveElement as Ee}from'../../utils/owner.js';import{RenderFeatures as oe,forwardRefWithAs as N,mergeProps as se,useRender as k}from'../../utils/render.js';import{StableCollection as Re,useStableCollectionIndex as ie}from'../../utils/stable-collection.js';import{Keys as x}from'../keyboard.js';var Le=(t=>(t[t.Forwards=0]=\"Forwards\",t[t.Backwards=1]=\"Backwards\",t))(Le||{}),_e=(l=>(l[l.Less=-1]=\"Less\",l[l.Equal=0]=\"Equal\",l[l.Greater=1]=\"Greater\",l))(_e||{}),Se=(n=>(n[n.SetSelectedIndex=0]=\"SetSelectedIndex\",n[n.RegisterTab=1]=\"RegisterTab\",n[n.UnregisterTab=2]=\"UnregisterTab\",n[n.RegisterPanel=3]=\"RegisterPanel\",n[n.UnregisterPanel=4]=\"UnregisterPanel\",n))(Se||{});let De={[0](e,r){var d;let t=w(e.tabs,u=>u.current),l=w(e.panels,u=>u.current),a=t.filter(u=>{var T;return!((T=u.current)!=null&&T.hasAttribute(\"disabled\"))}),n={...e,tabs:t,panels:l};if(r.index<0||r.index>t.length-1){let u=O(Math.sign(r.index-e.selectedIndex),{[-1]:()=>1,[0]:()=>O(Math.sign(r.index),{[-1]:()=>0,[0]:()=>0,[1]:()=>1}),[1]:()=>0});if(a.length===0)return n;let T=O(u,{[0]:()=>t.indexOf(a[0]),[1]:()=>t.indexOf(a[a.length-1])});return{...n,selectedIndex:T===-1?e.selectedIndex:T}}let s=t.slice(0,r.index),f=[...t.slice(r.index),...s].find(u=>a.includes(u));if(!f)return n;let b=(d=t.indexOf(f))!=null?d:e.selectedIndex;return b===-1&&(b=e.selectedIndex),{...n,selectedIndex:b}},[1](e,r){if(e.tabs.includes(r.tab))return e;let t=e.tabs[e.selectedIndex],l=w([...e.tabs,r.tab],n=>n.current),a=e.selectedIndex;return e.info.current.isControlled||(a=l.indexOf(t),a===-1&&(a=e.selectedIndex)),{...e,tabs:l,selectedIndex:a}},[2](e,r){return{...e,tabs:e.tabs.filter(t=>t!==r.tab)}},[3](e,r){return e.panels.includes(r.panel)?e:{...e,panels:w([...e.panels,r.panel],t=>t.current)}},[4](e,r){return{...e,panels:e.panels.filter(t=>t!==r.panel)}}},z=re(null);z.displayName=\"TabsDataContext\";function h(e){let r=ne(z);if(r===null){let t=new Error(`<${e} /> is missing a parent <Tab.Group /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(t,h),t}return r}let V=re(null);V.displayName=\"TabsActionsContext\";function Q(e){let r=ne(V);if(r===null){let t=new Error(`<${e} /> is missing a parent <Tab.Group /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(t,Q),t}return r}function Fe(e,r){return O(r.type,De,e,r)}let Ie=\"div\";function he(e,r){let{defaultIndex:t=0,vertical:l=!1,manual:a=!1,onChange:n,selectedIndex:s=null,...g}=e;const f=l?\"vertical\":\"horizontal\",b=a?\"manual\":\"auto\";let d=s!==null,u=j({isControlled:d}),T=H(r),[p,c]=fe(Fe,{info:u,selectedIndex:s!=null?s:t,tabs:[],panels:[]}),v=U({selectedIndex:p.selectedIndex}),m=j(n||(()=>{})),C=j(p.tabs),D=ae(()=>({orientation:f,activation:b,...p}),[f,b,p]),P=F(i=>(c({type:1,tab:i}),()=>c({type:2,tab:i}))),R=F(i=>(c({type:3,panel:i}),()=>c({type:4,panel:i}))),A=F(i=>{L.current!==i&&m.current(i),d||c({type:0,index:i})}),L=j(d?e.selectedIndex:p.selectedIndex),_=ae(()=>({registerTab:P,registerPanel:R,change:A}),[]);W(()=>{c({type:0,index:s!=null?s:t})},[s]),W(()=>{if(L.current===void 0||p.tabs.length<=0)return;let i=w(p.tabs,S=>S.current);i.some((S,$)=>p.tabs[$]!==S)&&A(i.indexOf(p.tabs[L.current]))});let J={ref:T},X=k();return G.createElement(Re,null,G.createElement(V.Provider,{value:_},G.createElement(z.Provider,{value:D},D.tabs.length<=0&&G.createElement(xe,{onFocus:()=>{var i,M;for(let S of C.current)if(((i=S.current)==null?void 0:i.tabIndex)===0)return(M=S.current)==null||M.focus(),!0;return!1}}),X({ourProps:J,theirProps:g,slot:v,defaultTag:Ie,name:\"Tabs\"}))))}let ve=\"div\";function Ce(e,r){let{orientation:t,selectedIndex:l}=h(\"Tab.List\"),a=H(r),n=U({selectedIndex:l}),s=e,g={ref:a,role:\"tablist\",\"aria-orientation\":t};return k()({ourProps:g,theirProps:s,slot:n,defaultTag:ve,name:\"Tabs.List\"})}let Me=\"button\";function Ge(e,r){var Y,Z;let t=le(),{id:l=`headlessui-tabs-tab-${t}`,disabled:a=!1,autoFocus:n=!1,...s}=e,{orientation:g,activation:f,selectedIndex:b,tabs:d,panels:u}=h(\"Tab\"),T=Q(\"Tab\"),p=h(\"Tab\"),[c,v]=me(null),m=q(null),C=H(m,r,v);W(()=>T.registerTab(m),[T,m]);let D=ie(\"tabs\"),P=d.indexOf(m);P===-1&&(P=D);let R=P===b,A=F(o=>{let E=o();if(E===K.Success&&f===\"auto\"){let ee=Ee(m.current),B=p.tabs.findIndex(ce=>ce.current===ee);B!==-1&&T.change(B)}return E}),L=F(o=>{let E=d.map(B=>B.current).filter(Boolean);if(o.key===x.Space||o.key===x.Enter){o.preventDefault(),o.stopPropagation(),T.change(P);return}switch(o.key){case x.Home:case x.PageUp:return o.preventDefault(),o.stopPropagation(),A(()=>I(E,y.First));case x.End:case x.PageDown:return o.preventDefault(),o.stopPropagation(),A(()=>I(E,y.Last))}if(A(()=>O(g,{vertical(){return o.key===x.ArrowUp?I(E,y.Previous|y.WrapAround):o.key===x.ArrowDown?I(E,y.Next|y.WrapAround):K.Error},horizontal(){return o.key===x.ArrowLeft?I(E,y.Previous|y.WrapAround):o.key===x.ArrowRight?I(E,y.Next|y.WrapAround):K.Error}}))===K.Success)return o.preventDefault()}),_=q(!1),J=F(()=>{var o;_.current||(_.current=!0,(o=m.current)==null||o.focus({preventScroll:!0}),T.change(P),Ae(()=>{_.current=!1}))}),X=F(o=>{o.preventDefault()}),{isFocusVisible:i,focusProps:M}=te({autoFocus:n}),{isHovered:S,hoverProps:$}=be({isDisabled:a}),{pressed:pe,pressProps:ue}=Pe({disabled:a}),Te=U({selected:R,hover:S,active:pe,focus:i,autofocus:n,disabled:a}),de=se({ref:C,onKeyDown:L,onMouseDown:X,onClick:J,id:l,role:\"tab\",type:ye(e,c),\"aria-controls\":(Z=(Y=u[P])==null?void 0:Y.current)==null?void 0:Z.id,\"aria-selected\":R,tabIndex:R?0:-1,disabled:a||void 0,autoFocus:n},M,$,ue);return k()({ourProps:de,theirProps:s,slot:Te,defaultTag:Me,name:\"Tabs.Tab\"})}let Ue=\"div\";function He(e,r){let{selectedIndex:t}=h(\"Tab.Panels\"),l=H(r),a=U({selectedIndex:t}),n=e,s={ref:l};return k()({ourProps:s,theirProps:n,slot:a,defaultTag:Ue,name:\"Tabs.Panels\"})}let we=\"div\",Oe=oe.RenderStrategy|oe.Static;function Ne(e,r){var R,A,L,_;let t=le(),{id:l=`headlessui-tabs-panel-${t}`,tabIndex:a=0,...n}=e,{selectedIndex:s,tabs:g,panels:f}=h(\"Tab.Panel\"),b=Q(\"Tab.Panel\"),d=q(null),u=H(d,r);W(()=>b.registerPanel(d),[b,d]);let T=ie(\"panels\"),p=f.indexOf(d);p===-1&&(p=T);let c=p===s,{isFocusVisible:v,focusProps:m}=te(),C=U({selected:c,focus:v}),D=se({ref:u,id:l,role:\"tabpanel\",\"aria-labelledby\":(A=(R=g[p])==null?void 0:R.current)==null?void 0:A.id,tabIndex:c?a:-1},m),P=k();return!c&&((L=n.unmount)==null||L)&&!((_=n.static)!=null&&_)?G.createElement(ge,{\"aria-hidden\":\"true\",...D}):P({ourProps:D,theirProps:n,slot:C,defaultTag:we,features:Oe,visible:c,name:\"Tabs.Panel\"})}let ke=N(Ge),Be=N(he),We=N(Ce),je=N(He),Ke=N(Ne),dt=Object.assign(ke,{Group:Be,List:We,Panels:je,Panel:Ke});export{dt as Tab,Be as TabGroup,We as TabList,Ke as TabPanel,je as TabPanels};\n","import { Fragment, useId } from 'react';\nimport {\n Listbox,\n ListboxButton,\n ListboxOption,\n ListboxOptions,\n Transition,\n} from '@headlessui/react';\nimport { cn } from '@/utils';\nimport { Spinner } from '../Spinner';\nimport type { SelectProps } from './Select.types';\n\n/**\n * Select component built on Headless UI Listbox for accessibility.\n *\n * @example\n * ```tsx\n * <Select\n * label=\"Status\"\n * options={[\n * { value: 'draft', label: 'Draft' },\n * { value: 'signed', label: 'Signed' },\n * ]}\n * value={status}\n * onChange={setStatus}\n * />\n * ```\n */\nexport function Select({\n options,\n value,\n onChange,\n placeholder = 'Select...',\n label,\n error,\n helperText,\n disabled = false,\n required = false,\n fullWidth = false,\n className,\n isLoading = false,\n loadingText = 'Loading...',\n placement = 'bottom',\n testId,\n}: SelectProps) {\n const selectedOption = options.find((opt) => opt.value === value);\n const hasError = !!error;\n const isDisabled = disabled || isLoading;\n const labelId = useId();\n\n return (\n <div className={cn(fullWidth ? 'w-full' : 'w-auto', className)} data-testid={testId}>\n {label && (\n <label\n id={labelId}\n className=\"mb-2 block text-sm font-medium text-primary-700 dark:text-white\"\n data-testid={testId ? `${testId}-label` : undefined}\n >\n {label}\n {required && <span className=\"ml-1 text-error\">*</span>}\n </label>\n )}\n\n <Listbox disabled={isDisabled} value={value ?? undefined} onChange={onChange}>\n <div className=\"relative\">\n <ListboxButton\n aria-label={!label ? placeholder : undefined}\n aria-labelledby={label ? labelId : undefined}\n data-testid={testId ? `${testId}-button` : undefined}\n className={cn(\n // Base styles - Light mode\n 'relative w-full rounded-md border bg-white px-4 py-2.5 text-left text-sm',\n 'transition-colors duration-normal',\n 'focus:outline-none focus:ring-2',\n 'disabled:cursor-not-allowed disabled:bg-primary-50 disabled:text-primary-500',\n // Base styles - Dark mode\n 'dark:bg-primary-800',\n 'dark:disabled:bg-primary-900 dark:disabled:text-primary-600',\n // Border and focus styles\n hasError\n ? 'border-error focus:border-error focus:ring-error/20 dark:border-error/70 dark:focus:ring-error/30'\n : 'border-primary-300 focus:border-gold-500 focus:ring-gold-500/20 dark:border-primary-600 dark:focus:border-gold-400 dark:focus:ring-gold-400/30'\n )}\n >\n <span\n className={cn(\n 'block truncate',\n selectedOption\n ? 'text-primary-900 dark:text-primary-100'\n : 'text-primary-400 dark:text-primary-500'\n )}\n >\n {selectedOption?.label || placeholder}\n </span>\n <span className=\"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3\">\n {isLoading ? (\n <Spinner size=\"sm\" color=\"primary\" label={loadingText} />\n ) : (\n <svg\n className=\"h-5 w-5 text-primary-400 dark:text-primary-500\"\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n aria-hidden=\"true\"\n >\n <path\n clipRule=\"evenodd\"\n d=\"M5.23 7.21a.75.75 0 011.06.02L10 11.168l3.71-3.938a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z\"\n fillRule=\"evenodd\"\n />\n </svg>\n )}\n </span>\n </ListboxButton>\n\n <Transition\n as={Fragment}\n leave=\"transition ease-in duration-100\"\n leaveFrom=\"opacity-100\"\n leaveTo=\"opacity-0\"\n >\n <ListboxOptions\n className={cn(\n 'absolute z-dropdown max-h-60 w-full overflow-auto rounded-md bg-white py-1 text-sm shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none dark:bg-primary-800 dark:ring-primary-700',\n placement === 'top' ? 'bottom-full mb-1' : 'top-full mt-1'\n )}\n data-testid={testId ? `${testId}-options` : undefined}\n >\n {options.map((option, index) => (\n <ListboxOption\n key={option.value}\n disabled={option.disabled}\n value={option.value}\n data-testid={testId ? `${testId}-option-${index}` : undefined}\n className={({ active, selected }) =>\n cn(\n 'relative cursor-pointer select-none py-2.5 pl-10 pr-4',\n // Light mode\n active ? 'bg-gold-50 text-primary-900' : 'text-primary-900',\n // Dark mode\n active ? 'dark:bg-primary-700 dark:text-primary-100' : 'dark:text-primary-200',\n option.disabled && 'cursor-not-allowed opacity-50',\n selected && 'font-medium'\n )\n }\n >\n {({ selected }) => (\n <>\n <span className=\"block truncate\">{option.label}</span>\n {selected && (\n <span className=\"absolute inset-y-0 left-0 flex items-center pl-3 text-gold-600 dark:text-gold-400\">\n <svg\n className=\"h-5 w-5\"\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n aria-hidden=\"true\"\n >\n <path\n clipRule=\"evenodd\"\n d=\"M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z\"\n fillRule=\"evenodd\"\n />\n </svg>\n </span>\n )}\n </>\n )}\n </ListboxOption>\n ))}\n </ListboxOptions>\n </Transition>\n </div>\n </Listbox>\n\n {(error || helperText) && (\n <p\n role={hasError ? 'alert' : undefined}\n data-testid={testId ? (hasError ? `${testId}-error` : `${testId}-helper-text`) : undefined}\n className={cn(\n 'mt-1.5 text-sm',\n hasError ? 'text-error' : 'text-primary-500 dark:text-primary-400'\n )}\n >\n {error || helperText}\n </p>\n )}\n </div>\n );\n}\n\nSelect.displayName = 'Select';\n","import { Fragment } from 'react';\nimport {\n Dialog,\n DialogPanel,\n DialogTitle,\n Description,\n Transition,\n TransitionChild,\n} from '@headlessui/react';\nimport { cn } from '@/utils';\nimport { Spinner } from '../Spinner';\nimport type { ModalProps, ModalSize } from './Modal.types';\n\n// Close icon component\nconst CloseIcon = () => (\n <svg\n className=\"h-5 w-5\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n);\n\n// Size styles per UX spec: sm (400px), md (560px), lg (720px)\nconst sizeStyles: Record<ModalSize, string> = {\n sm: 'max-w-[400px]',\n md: 'max-w-[560px]',\n lg: 'max-w-[720px]',\n};\n\n/**\n * Modal component for focused tasks requiring attention.\n * Built on Headless UI Dialog for accessibility.\n *\n * @example\n * ```tsx\n * <Modal\n * isOpen={isOpen}\n * onClose={() => setIsOpen(false)}\n * title=\"Delete Note?\"\n * description=\"This action cannot be undone.\"\n * footer={\n * <div className=\"flex justify-end gap-3\">\n * <Button variant=\"secondary\" onClick={() => setIsOpen(false)}>Cancel</Button>\n * <Button variant=\"danger\" onClick={handleDelete}>Delete</Button>\n * </div>\n * }\n * >\n * <p>Are you sure you want to delete this note?</p>\n * </Modal>\n * ```\n */\nexport function Modal({\n isOpen,\n onClose,\n title,\n description,\n children,\n size = 'md',\n showCloseButton = true,\n footer,\n closeOnOverlay = true,\n className,\n isLoading = false,\n testId,\n}: ModalProps) {\n const handleClose = closeOnOverlay ? onClose : () => {};\n\n return (\n <Transition show={isOpen} as={Fragment}>\n <Dialog className=\"relative z-50\" onClose={handleClose}>\n {/* Backdrop */}\n <TransitionChild\n as={Fragment}\n enter=\"ease-out duration-150\"\n enterFrom=\"opacity-0\"\n enterTo=\"opacity-100\"\n leave=\"ease-in duration-100\"\n leaveFrom=\"opacity-100\"\n leaveTo=\"opacity-0\"\n >\n <div className=\"fixed inset-0 bg-black/40 backdrop-blur-sm\" data-testid={testId ? `${testId}-overlay` : undefined} />\n </TransitionChild>\n\n {/* Modal container */}\n <div className=\"fixed inset-0 flex items-center justify-center p-4\">\n <TransitionChild\n as={Fragment}\n enter=\"ease-out duration-150\"\n enterFrom=\"opacity-0 scale-95\"\n enterTo=\"opacity-100 scale-100\"\n leave=\"ease-in duration-100\"\n leaveFrom=\"opacity-100 scale-100\"\n leaveTo=\"opacity-0 scale-95\"\n >\n <DialogPanel\n className={cn(\n 'w-full rounded-lg shadow-xl',\n // Light mode\n 'bg-white border border-primary-200',\n // Dark mode\n 'dark:bg-primary-800 dark:border-primary-700',\n sizeStyles[size],\n className\n )}\n data-testid={testId}\n >\n {/* Header */}\n {(title || showCloseButton) && (\n <div\n className={cn(\n 'flex items-start justify-between px-6 py-4',\n (children || footer) && 'border-b border-primary-200 dark:border-primary-700'\n )}\n data-testid={testId ? `${testId}-header` : undefined}\n >\n <div className=\"flex-1\">\n {title && (\n <DialogTitle className=\"text-lg font-semibold text-primary-900 dark:text-white\">\n {title}\n </DialogTitle>\n )}\n {description && (\n <Description className=\"mt-1 text-sm text-primary-500 dark:text-primary-400\">\n {description}\n </Description>\n )}\n </div>\n {showCloseButton && (\n <button\n type=\"button\"\n aria-label=\"Close modal\"\n onClick={onClose}\n className={cn(\n 'ml-4 flex-shrink-0 rounded-md p-1',\n 'text-primary-400 hover:text-primary-600',\n 'dark:text-primary-500 dark:hover:text-primary-300',\n 'focus:outline-none focus:ring-2 focus:ring-gold-500/20',\n 'transition-colors'\n )}\n data-testid={testId ? `${testId}-close-button` : undefined}\n >\n <CloseIcon />\n </button>\n )}\n </div>\n )}\n\n {/* Content */}\n {children && (\n <div className=\"relative px-6 py-4 text-primary-700 dark:text-primary-300\" data-testid={testId ? `${testId}-body` : undefined}>\n {children}\n {isLoading && (\n <div className=\"absolute inset-0 flex items-center justify-center bg-white/60 dark:bg-primary-800/60\">\n <Spinner size=\"md\" color=\"primary\" />\n </div>\n )}\n </div>\n )}\n\n {/* Footer */}\n {footer && (\n <div\n className={cn(\n 'px-6 py-4 border-t',\n 'border-primary-200 dark:border-primary-700',\n 'bg-primary-50 dark:bg-primary-900/50',\n 'rounded-b-lg'\n )}\n data-testid={testId ? `${testId}-footer` : undefined}\n >\n {footer}\n </div>\n )}\n </DialogPanel>\n </TransitionChild>\n </div>\n </Dialog>\n </Transition>\n );\n}\n\nModal.displayName = 'Modal';\n","import { Fragment } from 'react';\nimport {\n Dialog,\n DialogPanel,\n DialogTitle,\n Transition,\n TransitionChild,\n} from '@headlessui/react';\nimport { cn } from '@/utils';\nimport { Spinner } from '../Spinner';\nimport type { DrawerProps, DrawerSize } from './Drawer.types';\n\n// Close icon component\nconst CloseIcon = () => (\n <svg\n className=\"h-5 w-5\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n);\n\n// Size styles per UX spec: sm (400px), md (560px), lg (720px)\nconst sizeStyles: Record<DrawerSize, string> = {\n sm: 'max-w-[400px]',\n md: 'max-w-[560px]',\n lg: 'max-w-[720px]',\n};\n\n/**\n * Drawer component for slide-in panels without losing page context.\n * Built on Headless UI Dialog for accessibility.\n *\n * @example\n * ```tsx\n * <Drawer\n * isOpen={isOpen}\n * onClose={() => setIsOpen(false)}\n * title=\"New Client\"\n * footer={\n * <div className=\"flex justify-end gap-3\">\n * <Button variant=\"secondary\" onClick={() => setIsOpen(false)}>Cancel</Button>\n * <Button onClick={handleSave}>Save</Button>\n * </div>\n * }\n * >\n * <form>...</form>\n * </Drawer>\n * ```\n */\nexport function Drawer({\n isOpen,\n onClose,\n title,\n children,\n size = 'md',\n showCloseButton = true,\n footer,\n className,\n isLoading = false,\n testId,\n}: DrawerProps) {\n return (\n <Transition show={isOpen} as={Fragment}>\n <Dialog className=\"relative z-50\" onClose={onClose}>\n {/* Backdrop */}\n <TransitionChild\n as={Fragment}\n enter=\"ease-out duration-300\"\n enterFrom=\"opacity-0\"\n enterTo=\"opacity-100\"\n leave=\"ease-in duration-200\"\n leaveFrom=\"opacity-100\"\n leaveTo=\"opacity-0\"\n >\n <div className=\"fixed inset-0 bg-black/40 backdrop-blur-sm\" data-testid={testId ? `${testId}-overlay` : undefined} />\n </TransitionChild>\n\n {/* Drawer container - positioned right */}\n <div className=\"fixed inset-0 flex justify-end\">\n <TransitionChild\n as={Fragment}\n enter=\"transform transition ease-out duration-300\"\n enterFrom=\"translate-x-full\"\n enterTo=\"translate-x-0\"\n leave=\"transform transition ease-in duration-200\"\n leaveFrom=\"translate-x-0\"\n leaveTo=\"translate-x-full\"\n >\n <DialogPanel\n className={cn(\n 'w-full h-full flex flex-col shadow-xl',\n // Light mode\n 'bg-white border-l border-primary-200',\n // Dark mode\n 'dark:bg-primary-800 dark:border-primary-700',\n sizeStyles[size],\n className\n )}\n data-testid={testId}\n >\n {/* Header - fixed at top */}\n {(title || showCloseButton) && (\n <div\n className={cn(\n 'flex items-center justify-between px-6 py-4 flex-shrink-0',\n 'border-b border-primary-200 dark:border-primary-700'\n )}\n >\n {title && (\n <DialogTitle className=\"text-lg font-semibold text-primary-900 dark:text-white\">\n {title}\n </DialogTitle>\n )}\n {showCloseButton && (\n <button\n type=\"button\"\n aria-label=\"Close drawer\"\n onClick={onClose}\n className={cn(\n 'ml-auto flex-shrink-0 rounded-md p-1',\n 'text-primary-400 hover:text-primary-600',\n 'dark:text-primary-500 dark:hover:text-primary-300',\n 'focus:outline-none focus:ring-2 focus:ring-gold-500/20',\n 'transition-colors'\n )}\n data-testid={testId ? `${testId}-close-button` : undefined}\n >\n <CloseIcon />\n </button>\n )}\n </div>\n )}\n\n {/* Content - scrollable */}\n <div className=\"relative flex-1 overflow-y-auto px-6 py-4 text-primary-700 dark:text-primary-300\" data-testid={testId ? `${testId}-content` : undefined}>\n {children}\n {isLoading && (\n <div className=\"absolute inset-0 flex items-center justify-center bg-white/60 dark:bg-primary-800/60\">\n <Spinner size=\"md\" color=\"primary\" />\n </div>\n )}\n </div>\n\n {/* Footer - sticky at bottom */}\n {footer && (\n <div\n className={cn(\n 'flex-shrink-0 px-6 py-4 border-t',\n 'border-primary-200 dark:border-primary-700',\n 'bg-primary-50 dark:bg-primary-900/50'\n )}\n >\n {footer}\n </div>\n )}\n </DialogPanel>\n </TransitionChild>\n </div>\n </Dialog>\n </Transition>\n );\n}\n\nDrawer.displayName = 'Drawer';\n","import { Modal } from '../Modal';\nimport { Button } from '../Button';\nimport type { ConfirmDialogProps, ConfirmDialogVariant } from './ConfirmDialog.types';\nimport type { ButtonVariant } from '../Button/Button.types';\n\n// Map dialog variant to button variant\nconst variantToButton: Record<ConfirmDialogVariant, ButtonVariant> = {\n destructive: 'danger',\n neutral: 'primary',\n caution: 'primary', // Using primary with warning styling could be added later\n};\n\n/**\n * ConfirmDialog component for confirmation prompts.\n * Built on Modal for consistent styling and accessibility.\n *\n * @example\n * ```tsx\n * <ConfirmDialog\n * isOpen={isOpen}\n * onClose={() => setIsOpen(false)}\n * onConfirm={handleDelete}\n * title=\"Delete this note?\"\n * description=\"This will permanently delete the note. This action cannot be undone.\"\n * variant=\"destructive\"\n * confirmText=\"Delete\"\n * />\n * ```\n */\nexport function ConfirmDialog({\n isOpen,\n onClose,\n onConfirm,\n title,\n description,\n variant = 'neutral',\n cancelText = 'Cancel',\n confirmText = 'Confirm',\n loading = false,\n testId,\n}: ConfirmDialogProps) {\n const buttonVariant = variantToButton[variant];\n\n const handleConfirm = () => {\n onConfirm();\n };\n\n return (\n <Modal\n isOpen={isOpen}\n onClose={onClose}\n title={title}\n description={description}\n size=\"sm\"\n showCloseButton={false}\n closeOnOverlay={!loading}\n testId={testId}\n footer={\n <div className=\"flex justify-end gap-3\">\n <Button\n variant=\"secondary\"\n onClick={onClose}\n disabled={loading}\n data-testid={testId ? `${testId}-cancel-button` : undefined}\n >\n {cancelText}\n </Button>\n <Button\n variant={buttonVariant}\n onClick={handleConfirm}\n disabled={loading}\n data-testid={testId ? `${testId}-confirm-button` : undefined}\n >\n {loading ? 'Loading...' : confirmText}\n </Button>\n </div>\n }\n />\n );\n}\n\nConfirmDialog.displayName = 'ConfirmDialog';\n","import { forwardRef } from 'react';\nimport { cn } from '@/utils';\nimport type { CardProps, CardPadding, CardVariant } from './Card.types';\n\n// Padding styles\nconst paddingStyles: Record<CardPadding, string> = {\n none: '',\n sm: 'p-4',\n md: 'p-6',\n lg: 'p-8',\n};\n\n// Variant styles with dark mode\nconst variantStyles: Record<CardVariant, string> = {\n default: [\n 'shadow-sm border border-primary-200',\n 'dark:border-primary-700',\n ].join(' '),\n bordered: [\n 'border-2 border-primary-300',\n 'dark:border-primary-600',\n ].join(' '),\n elevated: [\n 'shadow-md border border-primary-100',\n 'dark:shadow-lg dark:shadow-black/20 dark:border-primary-700',\n ].join(' '),\n 'gold-accent': [\n 'shadow border border-gold-500/20',\n 'dark:border-gold-500/30',\n ].join(' '),\n};\n\n/**\n * Card component for containing related content.\n *\n * @example\n * ```tsx\n * <Card>\n * <h3>Card Title</h3>\n * <p>Card content goes here.</p>\n * </Card>\n *\n * <Card variant=\"gold-accent\" hoverable>\n * <p>Clickable card with gold accent</p>\n * </Card>\n * ```\n */\nexport const Card = forwardRef<HTMLDivElement, CardProps>(\n (\n {\n padding = 'md',\n variant = 'default',\n hoverable = false,\n children,\n className,\n testId,\n ...props\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n className={cn(\n // Base styles\n 'rounded-lg transition-all',\n // Light mode\n 'bg-white',\n // Dark mode\n 'dark:bg-primary-800',\n // Padding\n paddingStyles[padding],\n // Variant\n variantStyles[variant],\n // Hover effect\n hoverable && [\n 'cursor-pointer',\n 'hover:shadow-md hover:border-gold-500/40',\n 'dark:hover:shadow-lg dark:hover:shadow-black/30 dark:hover:border-gold-500/50',\n ],\n className\n )}\n data-testid={testId}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nCard.displayName = 'Card';\n","import { forwardRef, useEffect, useRef, useCallback } from 'react';\nimport { cn } from '@/utils';\nimport type { CheckboxProps, CheckboxSize } from './Checkbox.types';\n\n// Size styles\nconst sizeStyles: Record<CheckboxSize, string> = {\n sm: 'h-4 w-4',\n md: 'h-5 w-5',\n lg: 'h-6 w-6',\n};\n\nconst labelSizeStyles: Record<CheckboxSize, string> = {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n};\n\n/**\n * Checkbox component with label, error states, and indeterminate support.\n *\n * @example\n * ```tsx\n * <Checkbox label=\"Accept terms\" checked={accepted} onChange={setAccepted} />\n * <Checkbox label=\"Select all\" indeterminate={someSelected} />\n * <Checkbox label=\"Option\" size=\"sm\" />\n * ```\n */\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(\n (\n {\n label,\n checked,\n onChange,\n size = 'md',\n disabled = false,\n error,\n helperText,\n indeterminate = false,\n className,\n id,\n testId,\n ...props\n },\n forwardedRef\n ) => {\n const checkboxId = id || label?.toLowerCase().replace(/\\s+/g, '-');\n const hasError = !!error;\n const errorId = hasError ? `${checkboxId}-error` : undefined;\n const internalRef = useRef<HTMLInputElement>(null);\n\n // Handle indeterminate state (must be set via JS, not HTML attribute)\n useEffect(() => {\n const checkbox = internalRef.current;\n if (checkbox) {\n checkbox.indeterminate = indeterminate;\n }\n }, [indeterminate]);\n\n // Combine refs\n const setRefs = useCallback(\n (element: HTMLInputElement | null) => {\n internalRef.current = element;\n if (typeof forwardedRef === 'function') {\n forwardedRef(element);\n } else if (forwardedRef) {\n forwardedRef.current = element;\n }\n },\n [forwardedRef]\n );\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(e.target.checked);\n };\n\n return (\n <div className={className} data-testid={testId}>\n <label\n htmlFor={checkboxId}\n className={cn(\n 'inline-flex items-center gap-2',\n disabled ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'\n )}\n data-testid={testId ? `${testId}-label` : undefined}\n >\n <input\n ref={setRefs}\n type=\"checkbox\"\n id={checkboxId}\n checked={checked}\n disabled={disabled}\n aria-invalid={hasError ? 'true' : undefined}\n aria-describedby={errorId}\n onChange={handleChange}\n data-testid={testId ? `${testId}-checkbox` : undefined}\n className={cn(\n sizeStyles[size],\n 'rounded border transition-colors',\n 'focus:ring-2 focus:ring-offset-0',\n 'disabled:cursor-not-allowed',\n // Light mode\n 'border-primary-300 bg-white',\n 'checked:bg-gold-500 checked:border-gold-500',\n 'checked:hover:bg-gold-600 checked:hover:border-gold-600',\n 'indeterminate:bg-gold-500 indeterminate:border-gold-500',\n 'focus:ring-gold-500/20',\n 'disabled:bg-primary-100',\n // Dark mode\n 'dark:border-primary-600 dark:bg-primary-800',\n 'dark:checked:bg-gold-500 dark:checked:border-gold-500',\n 'dark:checked:hover:bg-gold-400 dark:checked:hover:border-gold-400',\n 'dark:indeterminate:bg-gold-500 dark:indeterminate:border-gold-500',\n 'dark:focus:ring-gold-400/30',\n 'dark:disabled:bg-primary-700',\n // Error state\n hasError && 'border-error dark:border-error/70'\n )}\n {...props}\n />\n {label && (\n <span\n className={cn(\n labelSizeStyles[size],\n 'text-primary-700 dark:text-primary-200',\n hasError && 'text-error'\n )}\n >\n {label}\n </span>\n )}\n </label>\n\n {(error || helperText) && (\n <p\n id={errorId}\n role={hasError ? 'alert' : undefined}\n data-testid={testId ? (hasError ? `${testId}-error` : `${testId}-helper-text`) : undefined}\n className={cn(\n 'mt-1 text-sm',\n hasError ? 'text-error' : 'text-primary-500 dark:text-primary-400'\n )}\n >\n {error || helperText}\n </p>\n )}\n </div>\n );\n }\n);\n\nCheckbox.displayName = 'Checkbox';\n","import { forwardRef } from 'react';\nimport { cn } from '@/utils';\nimport type { RadioProps, RadioSize } from './Radio.types';\n\n// Size styles\nconst sizeStyles: Record<RadioSize, string> = {\n sm: 'h-4 w-4',\n md: 'h-5 w-5',\n lg: 'h-6 w-6',\n};\n\nconst labelSizeStyles: Record<RadioSize, string> = {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n};\n\n/**\n * Radio component for single selection within a group.\n * Use RadioGroup for proper grouping and state management.\n *\n * @example\n * ```tsx\n * <Radio name=\"option\" value=\"a\" label=\"Option A\" />\n * ```\n */\nexport const Radio = forwardRef<HTMLInputElement, RadioProps>(\n (\n {\n label,\n size = 'md',\n disabled = false,\n error = false,\n className,\n id,\n testId,\n ...props\n },\n ref\n ) => {\n const radioId = id || (label ? `${props.name}-${label.toLowerCase().replace(/\\s+/g, '-')}` : undefined);\n\n return (\n <label\n htmlFor={radioId}\n className={cn(\n 'inline-flex items-center gap-2',\n disabled ? 'cursor-not-allowed opacity-50' : 'cursor-pointer',\n className\n )}\n data-testid={testId}\n >\n <input\n ref={ref}\n type=\"radio\"\n id={radioId}\n disabled={disabled}\n data-testid={testId ? `${testId}-radio` : undefined}\n className={cn(\n sizeStyles[size],\n 'border transition-colors',\n 'focus:ring-2 focus:ring-offset-0',\n 'disabled:cursor-not-allowed',\n // Light mode\n 'border-primary-300 bg-white',\n 'checked:border-gold-500 checked:bg-gold-500',\n 'checked:hover:border-gold-600 checked:hover:bg-gold-600',\n 'focus:ring-gold-500/20',\n 'disabled:bg-primary-100',\n // Dark mode\n 'dark:border-primary-600 dark:bg-primary-800',\n 'dark:checked:border-gold-500 dark:checked:bg-gold-500',\n 'dark:checked:hover:border-gold-400 dark:checked:hover:bg-gold-400',\n 'dark:focus:ring-gold-400/30',\n 'dark:disabled:bg-primary-700',\n // Error state\n error && 'border-error dark:border-error/70'\n )}\n {...props}\n />\n {label && (\n <span\n className={cn(\n labelSizeStyles[size],\n 'text-primary-700 dark:text-primary-200',\n error && 'text-error'\n )}\n data-testid={testId ? `${testId}-label` : undefined}\n >\n {label}\n </span>\n )}\n </label>\n );\n }\n);\n\nRadio.displayName = 'Radio';\n","import { cn } from '@/utils';\nimport { Spinner } from '../Spinner';\nimport { Radio } from './Radio';\nimport type { RadioGroupProps } from './Radio.types';\n\n/**\n * RadioGroup component for managing a group of radio options.\n *\n * @example\n * ```tsx\n * <RadioGroup\n * name=\"status\"\n * label=\"Status\"\n * options={[\n * { value: 'active', label: 'Active' },\n * { value: 'inactive', label: 'Inactive' },\n * ]}\n * value={status}\n * onChange={setStatus}\n * />\n * ```\n */\nexport function RadioGroup({\n name,\n options,\n value,\n onChange,\n label,\n size = 'md',\n error,\n helperText,\n disabled = false,\n orientation = 'vertical',\n className,\n isLoading = false,\n testId,\n}: RadioGroupProps) {\n const hasError = !!error;\n const groupId = `${name}-group`;\n const isDisabled = disabled || isLoading;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(e.target.value);\n };\n\n return (\n <fieldset className={className} role=\"radiogroup\" aria-labelledby={label ? groupId : undefined} data-testid={testId}>\n {label && (\n <legend\n id={groupId}\n className=\"mb-3 flex items-center gap-2 text-sm font-medium text-primary-700 dark:text-white\"\n >\n {label}\n {isLoading && <Spinner size=\"xs\" color=\"primary\" />}\n </legend>\n )}\n\n <div\n className={cn(\n orientation === 'vertical' ? 'space-y-2' : 'flex flex-wrap gap-4'\n )}\n >\n {options.map((option, index) => (\n <Radio\n key={option.value}\n name={name}\n value={option.value}\n label={option.label}\n size={size}\n disabled={isDisabled || option.disabled}\n error={hasError}\n checked={value === option.value}\n onChange={handleChange}\n testId={testId ? `${testId}-option-${index}` : undefined}\n />\n ))}\n </div>\n\n {(error || helperText) && (\n <p\n role={hasError ? 'alert' : undefined}\n data-testid={testId ? (hasError ? `${testId}-error` : `${testId}-helper-text`) : undefined}\n className={cn(\n 'mt-2 text-sm',\n hasError ? 'text-error' : 'text-primary-500 dark:text-primary-400'\n )}\n >\n {error || helperText}\n </p>\n )}\n </fieldset>\n );\n}\n\nRadioGroup.displayName = 'RadioGroup';\n","import { Description, Field, Label, Switch } from '@headlessui/react';\nimport { cn } from '@/utils';\nimport { Spinner } from '../Spinner';\nimport type { ToggleProps, ToggleSize } from './Toggle.types';\n\n// Size styles for switch and dot\nconst sizeStyles: Record<ToggleSize, { switch: string; dot: string; translate: string }> = {\n sm: {\n switch: 'h-5 w-9',\n dot: 'h-3 w-3',\n translate: 'translate-x-4',\n },\n md: {\n switch: 'h-6 w-11',\n dot: 'h-4 w-4',\n translate: 'translate-x-5',\n },\n lg: {\n switch: 'h-7 w-14',\n dot: 'h-5 w-5',\n translate: 'translate-x-7',\n },\n};\n\n/**\n * Toggle component for boolean settings.\n * Built on Headless UI Switch for accessibility.\n *\n * @example\n * ```tsx\n * <Toggle\n * enabled={notifications}\n * onChange={setNotifications}\n * label=\"Enable notifications\"\n * description=\"Receive email notifications for important updates\"\n * />\n * ```\n */\nexport function Toggle({\n enabled,\n onChange,\n label,\n description,\n disabled = false,\n size = 'md',\n className,\n isLoading = false,\n testId,\n}: ToggleProps) {\n const currentSize = sizeStyles[size];\n const isDisabled = disabled || isLoading;\n\n return (\n <Field className={className} data-testid={testId}>\n <div className=\"flex items-center justify-between\">\n {(label || description) && (\n <div className=\"flex-1 mr-4\">\n {label && (\n <Label\n className={cn(\n 'text-sm font-medium',\n 'text-primary-700 dark:text-white',\n isDisabled ? 'opacity-50' : 'cursor-pointer'\n )}\n >\n {label}\n </Label>\n )}\n {description && (\n <Description className=\"text-sm text-primary-500 dark:text-primary-400\">\n {description}\n </Description>\n )}\n </div>\n )}\n <Switch\n checked={enabled}\n disabled={isDisabled}\n onChange={onChange}\n aria-label={!label ? 'Toggle' : undefined}\n data-testid={testId ? `${testId}-toggle` : undefined}\n className={cn(\n currentSize.switch,\n 'relative inline-flex shrink-0 cursor-pointer rounded-full',\n 'border-2 border-transparent',\n 'transition-colors duration-200 ease-in-out',\n 'focus:outline-none focus:ring-2 focus:ring-offset-2',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n // Light mode\n enabled ? 'bg-gold-500' : 'bg-primary-200',\n 'focus:ring-gold-500/20',\n // Dark mode\n enabled ? 'dark:bg-gold-500' : 'dark:bg-primary-600',\n 'dark:focus:ring-gold-400/30',\n 'dark:focus:ring-offset-primary-900'\n )}\n >\n <span\n aria-hidden=\"true\"\n className={cn(\n currentSize.dot,\n 'pointer-events-none inline-flex items-center justify-center transform rounded-full shadow ring-0',\n 'transition duration-200 ease-in-out',\n // Light mode\n 'bg-white',\n // Position\n enabled ? currentSize.translate : 'translate-x-0'\n )}\n >\n {isLoading && <Spinner size=\"xs\" color=\"primary\" />}\n </span>\n </Switch>\n </div>\n </Field>\n );\n}\n\nToggle.displayName = 'Toggle';\n","import { Fragment, useState, useMemo, useId } from 'react';\nimport {\n Combobox as HeadlessCombobox,\n ComboboxButton,\n ComboboxInput,\n ComboboxOption,\n ComboboxOptions,\n Transition,\n} from '@headlessui/react';\nimport { cn } from '@/utils';\nimport { Spinner } from '../Spinner';\nimport type { ComboboxProps } from './Combobox.types';\n\n// Chevron icon\nconst ChevronIcon = () => (\n <svg\n className=\"h-5 w-5 text-primary-400 dark:text-primary-500\"\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M5.23 7.21a.75.75 0 011.06.02L10 11.168l3.71-3.938a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z\"\n />\n </svg>\n);\n\n// Check icon\nconst CheckIcon = () => (\n <svg\n className=\"h-5 w-5\"\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z\"\n />\n </svg>\n);\n\n/**\n * Combobox component for searchable selection.\n * Built on Headless UI Combobox for accessibility.\n *\n * @example\n * ```tsx\n * <Combobox\n * label=\"Select Client\"\n * options={[\n * { value: '1', label: 'John Doe' },\n * { value: '2', label: 'Jane Smith' },\n * ]}\n * value={selectedClient}\n * onChange={setSelectedClient}\n * placeholder=\"Search clients...\"\n * />\n * ```\n */\nexport function Combobox({\n options,\n value,\n onChange,\n placeholder = 'Search...',\n label,\n error,\n helperText,\n disabled = false,\n required = false,\n fullWidth = false,\n className,\n isLoading = false,\n loadingText = 'Loading...',\n emptyText = 'No results found',\n onSearch,\n testId,\n}: ComboboxProps) {\n const [query, setQuery] = useState('');\n const hasError = !!error;\n const isDisabled = disabled || isLoading;\n const labelId = useId();\n\n const selectedOption = useMemo(\n () => options.find((opt) => opt.value === value),\n [options, value]\n );\n\n const filteredOptions = useMemo(\n () =>\n query === ''\n ? options\n : options.filter((option) =>\n option.label.toLowerCase().includes(query.toLowerCase())\n ),\n [options, query]\n );\n\n const handleChange = (newValue: string | null) => {\n onChange?.(newValue);\n setQuery('');\n };\n\n return (\n <div className={cn(fullWidth ? 'w-full' : 'w-auto', className)} data-testid={testId}>\n {label && (\n <label\n id={labelId}\n className=\"mb-2 block text-sm font-medium text-primary-700 dark:text-white\"\n data-testid={testId ? `${testId}-label` : undefined}\n >\n {label}\n {required && <span className=\"ml-1 text-error\">*</span>}\n </label>\n )}\n\n <HeadlessCombobox\n value={value ?? null}\n onChange={handleChange}\n disabled={isDisabled}\n >\n <div className=\"relative\">\n <div className=\"relative\">\n <ComboboxInput\n aria-label={!label ? placeholder : undefined}\n aria-labelledby={label ? labelId : undefined}\n displayValue={() => selectedOption?.label || ''}\n onChange={(e) => {\n const newQuery = e.target.value;\n setQuery(newQuery);\n onSearch?.(newQuery);\n }}\n placeholder={placeholder}\n data-testid={testId ? `${testId}-input` : undefined}\n className={cn(\n // Base styles - Light mode\n 'w-full rounded-md border bg-white px-4 py-2.5 pr-10 text-sm text-primary-900',\n 'transition-colors duration-normal',\n 'placeholder:text-primary-400',\n 'focus:outline-none focus:ring-2',\n 'disabled:cursor-not-allowed disabled:bg-primary-50 disabled:text-primary-500',\n // Base styles - Dark mode\n 'dark:bg-primary-800 dark:text-primary-100',\n 'dark:placeholder:text-primary-500',\n 'dark:disabled:bg-primary-900 dark:disabled:text-primary-600',\n // Border and focus styles\n hasError\n ? 'border-error focus:border-error focus:ring-error/20 dark:border-error/70 dark:focus:ring-error/30'\n : 'border-primary-300 focus:border-gold-500 focus:ring-gold-500/20 dark:border-primary-600 dark:focus:border-gold-400 dark:focus:ring-gold-400/30'\n )}\n />\n <ComboboxButton\n aria-label=\"Toggle options\"\n className=\"absolute inset-y-0 right-0 flex items-center pr-3\"\n >\n {isLoading ? (\n <Spinner size=\"sm\" color=\"primary\" label={loadingText} />\n ) : (\n <ChevronIcon />\n )}\n </ComboboxButton>\n </div>\n\n <Transition\n as={Fragment}\n leave=\"transition ease-in duration-100\"\n leaveFrom=\"opacity-100\"\n leaveTo=\"opacity-0\"\n afterLeave={() => setQuery('')}\n >\n <ComboboxOptions\n anchor=\"bottom start\"\n className=\"z-dropdown max-h-60 w-[var(--input-width)] overflow-auto rounded-md bg-white py-1 text-sm shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none dark:bg-primary-800 dark:ring-primary-700 [--anchor-gap:4px]\"\n data-testid={testId ? `${testId}-options` : undefined}\n >\n {isLoading ? (\n <div className=\"flex items-center justify-center gap-2 px-4 py-2.5 text-primary-500 dark:text-primary-400\">\n <Spinner size=\"sm\" color=\"primary\" />\n <span>{loadingText}</span>\n </div>\n ) : filteredOptions.length === 0 && query !== '' ? (\n <div className=\"relative cursor-default select-none px-4 py-2.5 text-primary-500 dark:text-primary-400\">\n {emptyText}\n </div>\n ) : (\n filteredOptions.map((option, index) => (\n <ComboboxOption\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n data-testid={testId ? `${testId}-option-${index}` : undefined}\n className={({ active, selected }) =>\n cn(\n 'relative cursor-pointer select-none py-2.5 pl-10 pr-4',\n // Light mode\n active ? 'bg-gold-50 text-primary-900' : 'text-primary-900',\n // Dark mode\n active ? 'dark:bg-primary-700 dark:text-primary-100' : 'dark:text-primary-200',\n option.disabled && 'cursor-not-allowed opacity-50',\n selected && 'font-medium'\n )\n }\n >\n {({ selected }) => (\n <>\n <span className=\"block truncate\">{option.label}</span>\n {selected && (\n <span className=\"absolute inset-y-0 left-0 flex items-center pl-3 text-gold-600 dark:text-gold-400\">\n <CheckIcon />\n </span>\n )}\n </>\n )}\n </ComboboxOption>\n ))\n )}\n </ComboboxOptions>\n </Transition>\n </div>\n </HeadlessCombobox>\n\n {(error || helperText) && (\n <p\n role={hasError ? 'alert' : undefined}\n data-testid={testId ? (hasError ? `${testId}-error` : `${testId}-helper-text`) : undefined}\n className={cn(\n 'mt-1.5 text-sm',\n hasError ? 'text-error' : 'text-primary-500 dark:text-primary-400'\n )}\n >\n {error || helperText}\n </p>\n )}\n </div>\n );\n}\n\nCombobox.displayName = 'Combobox';\n","import { forwardRef } from 'react';\nimport { cn } from '@/utils';\nimport type { BadgeProps, BadgeVariant, BadgeSize } from './Badge.types';\n\nconst variantStyles: Record<BadgeVariant, string> = {\n default: cn(\n 'bg-primary-100 text-primary-700 border-primary-200',\n 'dark:bg-primary-800 dark:text-primary-200 dark:border-primary-700'\n ),\n success: cn(\n 'bg-success-light text-[#166534] border-success/20',\n 'dark:bg-success/20 dark:text-[#86efac] dark:border-success/30'\n ),\n warning: cn(\n 'bg-warning-light text-[#854d0e] border-warning/20',\n 'dark:bg-warning/20 dark:text-[#fde047] dark:border-warning/30'\n ),\n error: cn(\n 'bg-error-light text-[#991b1b] border-error/20',\n 'dark:bg-error/20 dark:text-[#fca5a5] dark:border-error/30'\n ),\n info: cn(\n 'bg-info-light text-[#1e40af] border-info/20',\n 'dark:bg-info/20 dark:text-[#93c5fd] dark:border-info/30'\n ),\n gold: cn(\n 'bg-gold-100 text-gold-800 border-gold-200',\n 'dark:bg-gold-900/50 dark:text-gold-300 dark:border-gold-700'\n ),\n};\n\nconst sizeStyles: Record<BadgeSize, string> = {\n sm: 'px-2 py-0.5 text-xs',\n md: 'px-2.5 py-1 text-sm',\n lg: 'px-3 py-1.5 text-base',\n};\n\n/**\n * Badge component for status indicators, labels, and tags.\n *\n * @example\n * ```tsx\n * <Badge variant=\"success\">Active</Badge>\n * <Badge variant=\"error\" size=\"sm\">Overdue</Badge>\n * <Badge variant=\"gold\">Premium</Badge>\n * ```\n */\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(\n ({ variant = 'default', size = 'md', children, className, testId, ...props }, ref) => {\n return (\n <span\n ref={ref}\n className={cn(\n 'inline-flex items-center justify-center font-medium rounded-full border',\n variantStyles[variant],\n sizeStyles[size],\n className\n )}\n data-testid={testId}\n {...props}\n >\n {children}\n </span>\n );\n }\n);\n\nBadge.displayName = 'Badge';\n","import { forwardRef } from 'react';\nimport { cn } from '@/utils';\nimport type {\n TableProps,\n TableHeaderProps,\n TableBodyProps,\n TableRowProps,\n TableHeadProps,\n TableCellProps,\n} from './Table.types';\n\n// Sort icons\nconst SortIcon = ({ direction }: { direction: 'asc' | 'desc' | null }) => (\n <svg\n className={cn(\n 'ml-1 h-4 w-4 inline-block',\n direction ? 'text-gold-500' : 'text-primary-400 dark:text-primary-500'\n )}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n {direction === 'asc' ? (\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 15l7-7 7 7\" />\n ) : direction === 'desc' ? (\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n ) : (\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M8 9l4-4 4 4M16 15l-4 4-4-4\" />\n )}\n </svg>\n);\n\n/**\n * Table container component.\n *\n * @example\n * ```tsx\n * <Table striped hoverable>\n * <TableHeader>\n * <TableRow>\n * <TableHead>Name</TableHead>\n * <TableHead align=\"right\">Amount</TableHead>\n * </TableRow>\n * </TableHeader>\n * <TableBody>\n * <TableRow>\n * <TableCell>John Doe</TableCell>\n * <TableCell align=\"right\">$100</TableCell>\n * </TableRow>\n * </TableBody>\n * </Table>\n * ```\n */\nexport const Table = forwardRef<HTMLTableElement, TableProps>(\n ({ fullWidth = true, striped = false, hoverable = false, compact = false, className, children, ...props }, ref) => {\n return (\n <div className=\"w-full overflow-auto\">\n <table\n ref={ref}\n className={cn(\n 'border-collapse text-sm',\n fullWidth && 'w-full',\n className\n )}\n data-striped={striped || undefined}\n data-hoverable={hoverable || undefined}\n data-compact={compact || undefined}\n {...props}\n >\n {children}\n </table>\n </div>\n );\n }\n);\n\nTable.displayName = 'Table';\n\n/**\n * Table header section (thead).\n */\nexport const TableHeader = forwardRef<HTMLTableSectionElement, TableHeaderProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <thead\n ref={ref}\n className={cn(\n 'bg-primary-50 dark:bg-primary-800',\n className\n )}\n {...props}\n >\n {children}\n </thead>\n );\n }\n);\n\nTableHeader.displayName = 'TableHeader';\n\n/**\n * Table body section (tbody).\n */\nexport const TableBody = forwardRef<HTMLTableSectionElement, TableBodyProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <tbody\n ref={ref}\n className={cn(\n 'divide-y divide-primary-200 dark:divide-primary-700',\n className\n )}\n {...props}\n >\n {children}\n </tbody>\n );\n }\n);\n\nTableBody.displayName = 'TableBody';\n\n/**\n * Table row component.\n */\nexport const TableRow = forwardRef<HTMLTableRowElement, TableRowProps>(\n ({ selected = false, className, children, ...props }, ref) => {\n return (\n <tr\n ref={ref}\n className={cn(\n 'border-b border-primary-200 dark:border-primary-700',\n 'transition-colors duration-normal',\n // Striped rows (controlled by parent table data attribute)\n '[table[data-striped]_&:nth-child(even)]:bg-primary-50 [table[data-striped]_&:nth-child(even)]:dark:bg-primary-800/50',\n // Hoverable rows (controlled by parent table data attribute)\n '[table[data-hoverable]_&]:hover:bg-primary-100 [table[data-hoverable]_&]:dark:hover:bg-primary-700/50',\n selected && 'bg-gold-50 dark:bg-gold-900/20',\n className\n )}\n data-selected={selected || undefined}\n {...props}\n >\n {children}\n </tr>\n );\n }\n);\n\nTableRow.displayName = 'TableRow';\n\n/**\n * Table header cell (th).\n */\nexport const TableHead = forwardRef<HTMLTableCellElement, TableHeadProps>(\n ({ sortable = false, sortDirection = null, onSort, align = 'left', className, children, ...props }, ref) => {\n const alignmentClass = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n }[align];\n\n return (\n <th\n ref={ref}\n scope=\"col\"\n className={cn(\n 'px-4 py-3 font-semibold text-primary-700 dark:text-primary-200',\n '[table[data-compact]_&]:px-3 [table[data-compact]_&]:py-2',\n alignmentClass,\n sortable && 'cursor-pointer select-none hover:text-primary-900 dark:hover:text-white',\n className\n )}\n onClick={sortable ? onSort : undefined}\n aria-sort={\n sortDirection === 'asc'\n ? 'ascending'\n : sortDirection === 'desc'\n ? 'descending'\n : undefined\n }\n {...props}\n >\n <span className=\"inline-flex items-center\">\n {children}\n {sortable && <SortIcon direction={sortDirection} />}\n </span>\n </th>\n );\n }\n);\n\nTableHead.displayName = 'TableHead';\n\n/**\n * Table data cell (td).\n */\nexport const TableCell = forwardRef<HTMLTableCellElement, TableCellProps>(\n ({ align = 'left', className, children, ...props }, ref) => {\n const alignmentClass = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n }[align];\n\n return (\n <td\n ref={ref}\n className={cn(\n 'px-4 py-3 text-primary-900 dark:text-primary-100',\n '[table[data-compact]_&]:px-3 [table[data-compact]_&]:py-2',\n alignmentClass,\n className\n )}\n {...props}\n >\n {children}\n </td>\n );\n }\n);\n\nTableCell.displayName = 'TableCell';\n","import { useMemo } from 'react';\nimport { Tab, TabGroup, TabList } from '@headlessui/react';\nimport { cn } from '@/utils';\nimport { Spinner } from '../Spinner';\nimport type { TabsProps, TabPanelsProps } from './Tabs.types';\n\nconst sizeStyles = {\n sm: 'px-3 py-1.5 text-sm',\n md: 'px-4 py-2 text-sm',\n lg: 'px-5 py-2.5 text-base',\n};\n\n/**\n * Tabs component for sectioned content navigation.\n * Built on Headless UI Tab for accessibility.\n *\n * @example\n * ```tsx\n * const [activeTab, setActiveTab] = useState('overview');\n *\n * <Tabs\n * tabs={[\n * { key: 'overview', label: 'Overview' },\n * { key: 'notes', label: 'Notes', count: 12 },\n * { key: 'billing', label: 'Billing' },\n * ]}\n * activeTab={activeTab}\n * onChange={setActiveTab}\n * />\n * ```\n */\nexport function Tabs({\n tabs,\n activeTab,\n onChange,\n fullWidth = false,\n variant = 'default',\n size = 'md',\n className,\n 'aria-label': ariaLabel = 'Navigation tabs',\n testId,\n ...props\n}: TabsProps) {\n const selectedIndex = useMemo(\n () => tabs.findIndex((tab) => tab.key === activeTab),\n [tabs, activeTab]\n );\n\n const handleChange = (index: number) => {\n if (onChange && tabs[index]) {\n onChange(tabs[index].key);\n }\n };\n\n return (\n <TabGroup\n selectedIndex={selectedIndex >= 0 ? selectedIndex : 0}\n onChange={handleChange}\n >\n <TabList\n aria-label={ariaLabel}\n className={cn(\n 'flex',\n variant === 'default' && 'border-b border-primary-200 dark:border-primary-700',\n variant === 'pills' && 'gap-1 p-1 rounded-lg bg-primary-100 dark:bg-primary-800',\n fullWidth && 'w-full',\n className\n )}\n data-testid={testId}\n {...props}\n >\n {tabs.map((tab, index) => (\n <Tab\n key={tab.key}\n disabled={tab.disabled}\n data-testid={testId ? `${testId}-tab-${index}` : undefined}\n className={({ selected }) =>\n cn(\n 'relative outline-none transition-colors duration-normal',\n 'focus-visible:ring-2 focus-visible:ring-gold-500/50',\n sizeStyles[size],\n fullWidth && 'flex-1',\n // Default variant styles\n variant === 'default' && [\n 'border-b-2 -mb-px',\n selected\n ? 'border-gold-500 text-gold-600 dark:text-gold-400 font-medium'\n : 'border-transparent text-primary-500 dark:text-primary-400 hover:text-primary-700 dark:hover:text-primary-200 hover:border-primary-300 dark:hover:border-primary-600',\n tab.disabled && 'cursor-not-allowed opacity-50 hover:border-transparent hover:text-primary-500',\n ],\n // Pills variant styles\n variant === 'pills' && [\n 'rounded-md',\n selected\n ? 'bg-white dark:bg-primary-700 text-primary-900 dark:text-white shadow-sm font-medium'\n : 'text-primary-600 dark:text-primary-300 hover:text-primary-900 dark:hover:text-white',\n tab.disabled && 'cursor-not-allowed opacity-50',\n ]\n )\n }\n >\n <span className=\"inline-flex items-center gap-1.5\">\n {tab.label}\n {tab.count !== undefined && (\n <span\n className={cn(\n 'inline-flex items-center justify-center min-w-[1.25rem] h-5 px-1.5 rounded-full text-xs font-medium',\n 'bg-primary-200 text-primary-600 dark:bg-primary-700 dark:text-primary-300'\n )}\n >\n {tab.count}\n </span>\n )}\n </span>\n </Tab>\n ))}\n </TabList>\n </TabGroup>\n );\n}\n\nTabs.displayName = 'Tabs';\n\n/**\n * Tab panels component for rendering tab content.\n *\n * @example\n * ```tsx\n * <TabPanels tabs={tabs} activeTab={activeTab}>\n * {{\n * overview: <OverviewPanel />,\n * notes: <NotesPanel />,\n * billing: <BillingPanel />,\n * }}\n * </TabPanels>\n * ```\n */\nexport function TabContentPanels({\n tabs: _tabs,\n activeTab,\n children,\n className,\n isLoading = false,\n testId,\n ...props\n}: TabPanelsProps) {\n const activeContent = activeTab && children[activeTab];\n\n return (\n <div\n role=\"tabpanel\"\n className={cn('relative mt-4', className)}\n data-testid={testId}\n {...props}\n >\n {activeContent}\n {isLoading && (\n <div className=\"absolute inset-0 flex items-center justify-center bg-white/60 dark:bg-primary-800/60\">\n <Spinner size=\"md\" color=\"primary\" />\n </div>\n )}\n </div>\n );\n}\n\nTabContentPanels.displayName = 'TabContentPanels';\n","import { forwardRef, useState, Fragment } from 'react';\nimport { cn } from '@/utils';\nimport type { BreadcrumbsProps, BreadcrumbItem } from './Breadcrumbs.types';\n\n// Chevron separator icon\nconst ChevronIcon = () => (\n <svg\n className=\"h-4 w-4 text-primary-400 dark:text-primary-500 flex-shrink-0\"\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M7.21 14.77a.75.75 0 01.02-1.06L11.168 10 7.23 6.29a.75.75 0 111.04-1.08l4.5 4.25a.75.75 0 010 1.08l-4.5 4.25a.75.75 0 01-1.06-.02z\"\n />\n </svg>\n);\n\n// Home icon for first item\nconst HomeIcon = () => (\n <svg\n className=\"h-4 w-4 flex-shrink-0\"\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M9.293 2.293a1 1 0 011.414 0l7 7A1 1 0 0117 11h-1v6a1 1 0 01-1 1h-2a1 1 0 01-1-1v-3a1 1 0 00-1-1H9a1 1 0 00-1 1v3a1 1 0 01-1 1H5a1 1 0 01-1-1v-6H3a1 1 0 01-.707-1.707l7-7z\"\n />\n </svg>\n);\n\n// Ellipsis for collapsed items\nconst EllipsisButton = ({ onClick }: { onClick: () => void }) => (\n <button\n type=\"button\"\n onClick={onClick}\n className={cn(\n 'px-1.5 py-0.5 rounded text-primary-500 dark:text-primary-400',\n 'hover:bg-primary-100 dark:hover:bg-primary-800',\n 'focus:outline-none focus:ring-2 focus:ring-gold-500/50'\n )}\n aria-label=\"Show more breadcrumbs\"\n >\n ...\n </button>\n);\n\n/**\n * Breadcrumbs component for navigation hierarchy.\n *\n * @example\n * ```tsx\n * <Breadcrumbs\n * items={[\n * { label: 'Home', href: '/' },\n * { label: 'Clients', href: '/clients' },\n * { label: 'John Smith', href: '/clients/123' },\n * { label: 'Notes' },\n * ]}\n * />\n * ```\n */\nexport const Breadcrumbs = forwardRef<HTMLElement, BreadcrumbsProps>(\n (\n {\n items,\n separator,\n maxItems = 0,\n renderLink,\n className,\n testId,\n ...props\n },\n ref\n ) => {\n const [isExpanded, setIsExpanded] = useState(false);\n\n // Default link renderer (uses <a> tag)\n const defaultRenderLink = (item: BreadcrumbItem, children: React.ReactNode) => (\n <a\n href={item.href}\n className={cn(\n 'text-primary-500 dark:text-primary-400',\n 'hover:text-primary-700 dark:hover:text-primary-200',\n 'transition-colors duration-normal'\n )}\n >\n {children}\n </a>\n );\n\n const linkRenderer = renderLink || defaultRenderLink;\n\n // Determine which items to show\n let displayItems = items;\n const shouldCollapse = maxItems > 0 && items.length > maxItems && !isExpanded;\n\n if (shouldCollapse) {\n // Show first item, ellipsis, then last (maxItems - 1) items\n const firstItem = items[0];\n const lastItems = items.slice(-(maxItems - 1));\n displayItems = [firstItem, ...lastItems];\n }\n\n const renderItem = (item: BreadcrumbItem, index: number, isLast: boolean) => {\n const content = (\n <span className=\"inline-flex items-center gap-1.5\">\n {index === 0 && !item.icon && <HomeIcon />}\n {item.icon}\n <span className={isLast ? 'font-medium' : ''}>{item.label}</span>\n </span>\n );\n\n if (isLast || !item.href) {\n return (\n <span\n className={cn(\n 'text-primary-900 dark:text-white',\n isLast && 'font-medium'\n )}\n aria-current={isLast ? 'page' : undefined}\n >\n {content}\n </span>\n );\n }\n\n return linkRenderer(item, content);\n };\n\n const separatorElement = separator || <ChevronIcon />;\n\n return (\n <nav\n ref={ref}\n aria-label=\"Breadcrumb\"\n className={cn('text-sm', className)}\n data-testid={testId}\n {...props}\n >\n <ol className=\"flex items-center flex-wrap gap-1\">\n {displayItems.map((item, index) => {\n const isLast = index === displayItems.length - 1;\n const showEllipsis = shouldCollapse && index === 0;\n\n return (\n <Fragment key={item.label + index}>\n <li\n className=\"inline-flex items-center\"\n data-testid={testId ? `${testId}-item-${index}` : undefined}\n >\n {renderItem(item, index, isLast)}\n </li>\n {showEllipsis && (\n <>\n <li className=\"inline-flex items-center\" aria-hidden=\"true\">\n {separatorElement}\n </li>\n <li className=\"inline-flex items-center\">\n <EllipsisButton onClick={() => setIsExpanded(true)} />\n </li>\n </>\n )}\n {!isLast && (\n <li className=\"inline-flex items-center\" aria-hidden=\"true\">\n {separatorElement}\n </li>\n )}\n </Fragment>\n );\n })}\n </ol>\n </nav>\n );\n }\n);\n\nBreadcrumbs.displayName = 'Breadcrumbs';\n","import { forwardRef } from 'react';\nimport { cn } from '@/utils';\nimport type { SkeletonProps, SkeletonVariant } from './Skeleton.types';\n\nconst variantStyles: Record<SkeletonVariant, string> = {\n text: 'rounded',\n circular: 'rounded-full',\n rectangular: 'rounded-md',\n};\n\n/**\n * Skeleton component for loading placeholders.\n * Maintains layout structure during content loading.\n *\n * @example\n * ```tsx\n * // Text placeholder\n * <Skeleton variant=\"text\" width=\"80%\" />\n *\n * // Avatar placeholder\n * <Skeleton variant=\"circular\" width={40} height={40} />\n *\n * // Card placeholder\n * <Skeleton variant=\"rectangular\" width=\"100%\" height={200} />\n *\n * // Multiple text lines\n * <Skeleton variant=\"text\" lines={3} />\n * ```\n */\nexport const Skeleton = forwardRef<HTMLDivElement, SkeletonProps>(\n (\n {\n variant = 'text',\n width,\n height,\n animate = true,\n lines = 1,\n label = 'Loading...',\n className,\n style,\n testId,\n ...props\n },\n ref\n ) => {\n // Convert number values to pixels\n const widthValue = typeof width === 'number' ? `${width}px` : width;\n const heightValue = typeof height === 'number' ? `${height}px` : height;\n\n // Height: use provided height, or default to 1em for text variant\n const finalHeight = heightValue || (variant === 'text' ? '1em' : undefined);\n\n // For text variant with multiple lines\n if (variant === 'text' && lines > 1) {\n return (\n <div\n ref={ref}\n className={cn('flex flex-col gap-2', className)}\n role=\"status\"\n aria-label={label}\n aria-busy=\"true\"\n data-testid={testId}\n {...props}\n >\n {Array.from({ length: lines }).map((_, index) => (\n <div\n key={index}\n className={cn(\n 'bg-primary-200 dark:bg-primary-700',\n variantStyles[variant],\n animate && 'animate-pulse'\n )}\n style={{\n width: index === lines - 1 ? '60%' : (widthValue || '100%'),\n height: finalHeight,\n ...style,\n }}\n />\n ))}\n <span className=\"sr-only\">{label}</span>\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n className={cn(\n 'bg-primary-200 dark:bg-primary-700',\n variantStyles[variant],\n animate && 'animate-pulse',\n className\n )}\n style={{\n width: widthValue || (variant === 'circular' ? heightValue : '100%'),\n height: finalHeight,\n ...style,\n }}\n role=\"status\"\n aria-label={label}\n aria-busy=\"true\"\n data-testid={testId}\n {...props}\n >\n <span className=\"sr-only\">{label}</span>\n </div>\n );\n }\n);\n\nSkeleton.displayName = 'Skeleton';\n","import { forwardRef } from 'react';\nimport { cn } from '@/utils';\nimport type { EmptyStateProps, EmptyStateType } from './EmptyState.types';\n\n// Default icons for each type\nconst defaultIcons: Record<EmptyStateType, React.ReactNode> = {\n 'no-data': (\n <svg\n className=\"w-full h-full\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M20 13V6a2 2 0 00-2-2H6a2 2 0 00-2 2v7m16 0v5a2 2 0 01-2 2H6a2 2 0 01-2-2v-5m16 0h-2.586a1 1 0 00-.707.293l-2.414 2.414a1 1 0 01-.707.293h-3.172a1 1 0 01-.707-.293l-2.414-2.414A1 1 0 006.586 13H4\"\n />\n </svg>\n ),\n 'no-results': (\n <svg\n className=\"w-full h-full\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"\n />\n </svg>\n ),\n 'error': (\n <svg\n className=\"w-full h-full\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.007v.008H12v-.008z\"\n />\n </svg>\n ),\n};\n\nconst sizeStyles = {\n sm: {\n container: 'py-6 px-4',\n icon: 'w-10 h-10',\n title: 'text-sm font-medium',\n description: 'text-xs',\n },\n md: {\n container: 'py-10 px-6',\n icon: 'w-12 h-12',\n title: 'text-base font-medium',\n description: 'text-sm',\n },\n lg: {\n container: 'py-16 px-8',\n icon: 'w-16 h-16',\n title: 'text-lg font-semibold',\n description: 'text-base',\n },\n};\n\nconst typeColors: Record<EmptyStateType, string> = {\n 'no-data': 'text-primary-400 dark:text-primary-500',\n 'no-results': 'text-primary-400 dark:text-primary-500',\n 'error': 'text-error dark:text-error',\n};\n\n/**\n * EmptyState component for displaying empty, no-results, or error states.\n * Commonly used in tables, lists, and search results.\n *\n * @example\n * ```tsx\n * // No data state\n * <EmptyState\n * type=\"no-data\"\n * title=\"No clients yet\"\n * description=\"Get started by adding your first client.\"\n * action={<Button>Add Client</Button>}\n * />\n *\n * // No search results\n * <EmptyState\n * type=\"no-results\"\n * title=\"No matching results\"\n * description=\"Try adjusting your search or filters.\"\n * action={<Button variant=\"ghost\" onClick={clearFilters}>Clear filters</Button>}\n * />\n *\n * // Error state\n * <EmptyState\n * type=\"error\"\n * title=\"Something went wrong\"\n * description=\"We couldn't load the data. Please try again.\"\n * action={<Button onClick={retry}>Retry</Button>}\n * />\n * ```\n */\nexport const EmptyState = forwardRef<HTMLDivElement, EmptyStateProps>(\n (\n {\n type = 'no-data',\n title,\n description,\n icon,\n action,\n size = 'md',\n className,\n testId,\n ...props\n },\n ref\n ) => {\n const styles = sizeStyles[size];\n\n return (\n <div\n ref={ref}\n className={cn(\n 'flex flex-col items-center justify-center text-center',\n styles.container,\n className\n )}\n data-testid={testId}\n {...props}\n >\n <div\n className={cn(styles.icon, typeColors[type], 'mb-4')}\n data-testid={testId ? `${testId}-icon` : undefined}\n >\n {icon || defaultIcons[type]}\n </div>\n <h3\n className={cn(\n styles.title,\n 'text-primary-900 dark:text-primary-100',\n 'mb-1'\n )}\n data-testid={testId ? `${testId}-title` : undefined}\n >\n {title}\n </h3>\n {description && (\n <p\n className={cn(\n styles.description,\n 'text-primary-500 dark:text-primary-400',\n 'max-w-sm mb-4'\n )}\n data-testid={testId ? `${testId}-description` : undefined}\n >\n {description}\n </p>\n )}\n {action && (\n <div className=\"mt-2\" data-testid={testId ? `${testId}-action` : undefined}>\n {action}\n </div>\n )}\n </div>\n );\n }\n);\n\nEmptyState.displayName = 'EmptyState';\n","import { useId, useMemo } from 'react';\nimport { cn } from '@/utils';\nimport { Button } from '../Button';\nimport type { PaginationProps, PaginationSize } from './Pagination.types';\n\n// Chevron icons\nconst ChevronLeftIcon = () => (\n <svg className=\"h-4 w-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 19l-7-7 7-7\" />\n </svg>\n);\n\nconst ChevronRightIcon = () => (\n <svg className=\"h-4 w-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n);\n\nconst sizeStyles: Record<PaginationSize, { button: string; text: string }> = {\n sm: { button: 'h-8 min-w-8 px-2 text-sm', text: 'text-sm' },\n md: { button: 'h-10 min-w-10 px-3 text-sm', text: 'text-sm' },\n};\n\n/**\n * Generate array of page numbers to display with ellipsis\n */\nfunction getPageNumbers(currentPage: number, totalPages: number): (number | 'ellipsis')[] {\n const pages: (number | 'ellipsis')[] = [];\n const showPages = 5; // Max visible page numbers\n\n if (totalPages <= showPages + 2) {\n // Show all pages\n for (let i = 1; i <= totalPages; i++) {\n pages.push(i);\n }\n } else {\n // Always show first page\n pages.push(1);\n\n if (currentPage <= 3) {\n // Near start: 1 2 3 4 ... last\n for (let i = 2; i <= 4; i++) {\n pages.push(i);\n }\n pages.push('ellipsis');\n pages.push(totalPages);\n } else if (currentPage >= totalPages - 2) {\n // Near end: 1 ... last-3 last-2 last-1 last\n pages.push('ellipsis');\n for (let i = totalPages - 3; i <= totalPages; i++) {\n pages.push(i);\n }\n } else {\n // Middle: 1 ... prev current next ... last\n pages.push('ellipsis');\n pages.push(currentPage - 1);\n pages.push(currentPage);\n pages.push(currentPage + 1);\n pages.push('ellipsis');\n pages.push(totalPages);\n }\n }\n\n return pages;\n}\n\n/**\n * Pagination component with three variants: numbered, simple, and load-more.\n *\n * @example\n * ```tsx\n * // Numbered pagination (default)\n * <Pagination\n * currentPage={1}\n * totalPages={10}\n * onPageChange={setPage}\n * />\n *\n * // Simple prev/next\n * <Pagination\n * variant=\"simple\"\n * currentPage={1}\n * totalPages={10}\n * onPageChange={setPage}\n * />\n *\n * // Load more button\n * <Pagination\n * variant=\"load-more\"\n * currentPage={1}\n * totalPages={10}\n * onPageChange={loadMore}\n * />\n * ```\n */\nexport function Pagination({\n currentPage,\n totalPages,\n onPageChange,\n variant = 'numbered',\n showPageSize = false,\n pageSizeOptions = [10, 25, 50, 100],\n pageSize = 10,\n onPageSizeChange,\n totalItems,\n disabled = false,\n size = 'md',\n className,\n testId,\n}: PaginationProps) {\n const pageSizeId = useId();\n const currentSize = sizeStyles[size];\n\n const canGoPrevious = currentPage > 1;\n const canGoNext = currentPage < totalPages;\n\n const pageNumbers = useMemo(\n () => getPageNumbers(currentPage, totalPages),\n [currentPage, totalPages]\n );\n\n // Calculate items range for display\n const itemsRange = useMemo(() => {\n if (!totalItems) return null;\n const start = (currentPage - 1) * pageSize + 1;\n const end = Math.min(currentPage * pageSize, totalItems);\n return { start, end };\n }, [currentPage, pageSize, totalItems]);\n\n const handlePrevious = () => {\n if (canGoPrevious && !disabled) {\n onPageChange(currentPage - 1);\n }\n };\n\n const handleNext = () => {\n if (canGoNext && !disabled) {\n onPageChange(currentPage + 1);\n }\n };\n\n const handlePageClick = (page: number) => {\n if (!disabled && page !== currentPage) {\n onPageChange(page);\n }\n };\n\n // Load more variant\n if (variant === 'load-more') {\n if (!canGoNext) return null;\n\n return (\n <div className={cn('flex justify-center', className)} data-testid={testId}>\n <Button\n variant=\"secondary\"\n size={size === 'sm' ? 'sm' : 'md'}\n onClick={handleNext}\n disabled={disabled}\n data-testid={testId ? `${testId}-load-more` : undefined}\n >\n Load more\n </Button>\n </div>\n );\n }\n\n // Simple variant (just prev/next)\n if (variant === 'simple') {\n return (\n <nav\n aria-label=\"Pagination\"\n className={cn('flex items-center justify-between gap-4', className)}\n data-testid={testId}\n >\n <Button\n variant=\"secondary\"\n size={size === 'sm' ? 'sm' : 'md'}\n onClick={handlePrevious}\n disabled={disabled || !canGoPrevious}\n aria-label=\"Previous page\"\n data-testid={testId ? `${testId}-prev` : undefined}\n >\n <ChevronLeftIcon />\n <span className=\"ml-1\">Previous</span>\n </Button>\n\n <span className={cn('text-primary-600 dark:text-primary-400', currentSize.text)}>\n Page {currentPage} of {totalPages}\n </span>\n\n <Button\n variant=\"secondary\"\n size={size === 'sm' ? 'sm' : 'md'}\n onClick={handleNext}\n disabled={disabled || !canGoNext}\n aria-label=\"Next page\"\n data-testid={testId ? `${testId}-next` : undefined}\n >\n <span className=\"mr-1\">Next</span>\n <ChevronRightIcon />\n </Button>\n </nav>\n );\n }\n\n // Numbered variant (default)\n return (\n <nav\n aria-label=\"Pagination\"\n className={cn('flex items-center justify-between gap-4', className)}\n data-testid={testId}\n >\n {/* Items info and page size */}\n <div className=\"flex items-center gap-4\">\n {itemsRange && (\n <span className={cn('text-primary-600 dark:text-primary-400', currentSize.text)}>\n {itemsRange.start}-{itemsRange.end} of {totalItems}\n </span>\n )}\n\n {showPageSize && onPageSizeChange && (\n <div className=\"flex items-center gap-2\">\n <label\n htmlFor={pageSizeId}\n className={cn('text-primary-600 dark:text-primary-400', currentSize.text)}\n >\n Show:\n </label>\n <select\n id={pageSizeId}\n value={pageSize}\n onChange={(e) => onPageSizeChange(Number(e.target.value))}\n disabled={disabled}\n className={cn(\n 'rounded-md border bg-white px-2 py-1',\n 'border-primary-300 dark:border-primary-600',\n 'dark:bg-primary-800 dark:text-white',\n 'focus:outline-none focus:ring-2 focus:ring-gold-500/20',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n currentSize.text\n )}\n >\n {pageSizeOptions.map((option) => (\n <option key={option} value={option}>\n {option}\n </option>\n ))}\n </select>\n </div>\n )}\n </div>\n\n {/* Page numbers */}\n <div className=\"flex items-center gap-1\">\n {/* Previous button */}\n <button\n type=\"button\"\n onClick={handlePrevious}\n disabled={disabled || !canGoPrevious}\n aria-label=\"Previous page\"\n data-testid={testId ? `${testId}-prev` : undefined}\n className={cn(\n 'inline-flex items-center justify-center rounded-md',\n 'border border-primary-300 dark:border-primary-600',\n 'bg-white dark:bg-primary-800',\n 'text-primary-700 dark:text-primary-300',\n 'hover:bg-primary-50 dark:hover:bg-primary-700',\n 'focus:outline-none focus:ring-2 focus:ring-gold-500/20',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'transition-colors',\n currentSize.button\n )}\n >\n <ChevronLeftIcon />\n </button>\n\n {/* Page numbers */}\n {pageNumbers.map((page, index) =>\n page === 'ellipsis' ? (\n <span\n key={`ellipsis-${index}`}\n className={cn(\n 'inline-flex items-center justify-center',\n 'text-primary-500 dark:text-primary-400',\n currentSize.button\n )}\n >\n ...\n </span>\n ) : (\n <button\n key={page}\n type=\"button\"\n onClick={() => handlePageClick(page)}\n disabled={disabled}\n aria-label={`Page ${page}`}\n aria-current={page === currentPage ? 'page' : undefined}\n data-testid={testId ? `${testId}-page-${page}` : undefined}\n className={cn(\n 'inline-flex items-center justify-center rounded-md',\n 'border transition-colors',\n 'focus:outline-none focus:ring-2 focus:ring-gold-500/20',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n page === currentPage\n ? [\n 'border-gold-500 bg-gold-500 text-white',\n 'dark:border-gold-400 dark:bg-gold-500',\n ]\n : [\n 'border-primary-300 dark:border-primary-600',\n 'bg-white dark:bg-primary-800',\n 'text-primary-700 dark:text-primary-300',\n 'hover:bg-primary-50 dark:hover:bg-primary-700',\n ],\n currentSize.button\n )}\n >\n {page}\n </button>\n )\n )}\n\n {/* Next button */}\n <button\n type=\"button\"\n onClick={handleNext}\n disabled={disabled || !canGoNext}\n aria-label=\"Next page\"\n data-testid={testId ? `${testId}-next` : undefined}\n className={cn(\n 'inline-flex items-center justify-center rounded-md',\n 'border border-primary-300 dark:border-primary-600',\n 'bg-white dark:bg-primary-800',\n 'text-primary-700 dark:text-primary-300',\n 'hover:bg-primary-50 dark:hover:bg-primary-700',\n 'focus:outline-none focus:ring-2 focus:ring-gold-500/20',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'transition-colors',\n currentSize.button\n )}\n >\n <ChevronRightIcon />\n </button>\n </div>\n </nav>\n );\n}\n\nPagination.displayName = 'Pagination';\n","import { useMemo, useState, useRef, useId } from 'react';\nimport {\n Listbox,\n ListboxButton,\n ListboxOption,\n ListboxOptions,\n Transition,\n} from '@headlessui/react';\nimport { cn } from '@/utils';\nimport { Spinner } from '../Spinner';\nimport { Checkbox } from '../Checkbox';\nimport type { MultiSelectProps } from './MultiSelect.types';\n\n// Icons\nconst ChevronIcon = () => (\n <svg\n className=\"h-5 w-5 text-primary-400 dark:text-primary-500\"\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst CloseIcon = ({ className }: { className?: string }) => (\n <svg\n className={cn('h-3 w-3', className)}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n);\n\n/**\n * MultiSelect component for selecting multiple values with chips display.\n *\n * @example\n * ```tsx\n * const [selected, setSelected] = useState<string[]>([]);\n *\n * <MultiSelect\n * options={[\n * { value: '1', label: 'Option 1' },\n * { value: '2', label: 'Option 2' },\n * ]}\n * value={selected}\n * onChange={setSelected}\n * label=\"Select tags\"\n * searchable\n * showSelectAll\n * />\n * ```\n */\nexport function MultiSelect({\n options,\n value,\n onChange,\n searchable = false,\n onSearch,\n showSelectAll = false,\n selectAllLabel = 'Select all',\n placeholder = 'Select...',\n maxDisplayedItems = 3,\n isLoading = false,\n loadingText = 'Loading...',\n emptyText = 'No results found',\n label,\n error,\n helperText,\n required = false,\n disabled = false,\n fullWidth = false,\n className,\n testId,\n}: MultiSelectProps) {\n const [query, setQuery] = useState('');\n const searchInputRef = useRef<HTMLInputElement>(null);\n const hasError = !!error;\n const isDisabled = disabled || isLoading;\n const labelId = useId();\n const searchId = useId();\n\n // Filter options based on query\n const filteredOptions = useMemo(() => {\n if (!query) return options;\n return options.filter((opt) =>\n opt.label.toLowerCase().includes(query.toLowerCase())\n );\n }, [options, query]);\n\n // Get selected options for display\n const selectedOptions = useMemo(\n () => options.filter((opt) => value.includes(opt.value)),\n [options, value]\n );\n\n // Check if all selectable options are selected\n const selectableOptions = useMemo(\n () => filteredOptions.filter((opt) => !opt.disabled),\n [filteredOptions]\n );\n\n const allSelected = selectableOptions.length > 0 &&\n selectableOptions.every((opt) => value.includes(opt.value));\n\n const someSelected = selectableOptions.some((opt) => value.includes(opt.value));\n\n // Handle select all\n const handleSelectAll = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (allSelected) {\n // Deselect all selectable options\n const selectableValues = selectableOptions.map((opt) => opt.value);\n onChange(value.filter((v) => !selectableValues.includes(v)));\n } else {\n // Select all selectable options\n const newValues = new Set(value);\n selectableOptions.forEach((opt) => newValues.add(opt.value));\n onChange(Array.from(newValues));\n }\n };\n\n // Handle chip removal\n const handleRemove = (optionValue: string, e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n onChange(value.filter((v) => v !== optionValue));\n };\n\n // Handle clear all\n const handleClearAll = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n onChange([]);\n };\n\n // Handle search input change\n const handleSearchChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newQuery = e.target.value;\n setQuery(newQuery);\n onSearch?.(newQuery);\n };\n\n // Clear query when dropdown closes\n const handleDropdownClose = () => {\n setQuery('');\n };\n\n // Chips to display\n const displayedChips = selectedOptions.slice(0, maxDisplayedItems);\n const hiddenCount = selectedOptions.length - maxDisplayedItems;\n\n return (\n <div className={cn(fullWidth ? 'w-full' : 'w-auto', className)} data-testid={testId}>\n {label && (\n <label\n id={labelId}\n className=\"mb-2 block text-sm font-medium text-primary-700 dark:text-white\"\n data-testid={testId ? `${testId}-label` : undefined}\n >\n {label}\n {required && <span className=\"ml-1 text-error\">*</span>}\n </label>\n )}\n\n <Listbox\n value={value}\n onChange={(newValue) => {\n onChange(newValue as string[]);\n }}\n disabled={isDisabled}\n multiple\n >\n {({ open }) => (\n <div className=\"relative\">\n {/* Container that looks like input field */}\n <div\n className={cn(\n 'relative flex min-h-[42px] w-full flex-wrap items-center gap-1.5 rounded-md border px-3 py-1.5',\n 'bg-white dark:bg-primary-800',\n 'transition-colors duration-normal',\n isDisabled && 'cursor-not-allowed opacity-50',\n hasError\n ? 'border-error focus-within:border-error focus-within:ring-2 focus-within:ring-error/20'\n : 'border-primary-300 dark:border-primary-600 focus-within:border-gold-500 focus-within:ring-2 focus-within:ring-gold-500/20'\n )}\n >\n {/* Selected chips */}\n {displayedChips.map((option, index) => (\n <span\n key={option.value}\n className={cn(\n 'inline-flex items-center gap-1 rounded-md px-2 py-0.5',\n 'bg-primary-100 dark:bg-primary-700',\n 'text-sm text-primary-700 dark:text-primary-200'\n )}\n data-testid={testId ? `${testId}-chip-${index}` : undefined}\n >\n {option.label}\n <button\n type=\"button\"\n onClick={(e) => handleRemove(option.value, e)}\n className=\"rounded hover:bg-primary-200 dark:hover:bg-primary-600\"\n aria-label={`Remove ${option.label}`}\n disabled={isDisabled}\n >\n <CloseIcon />\n </button>\n </span>\n ))}\n\n {/* Hidden count badge */}\n {hiddenCount > 0 && (\n <span className=\"inline-flex items-center rounded-md bg-gold-100 px-2 py-0.5 text-sm text-gold-700 dark:bg-gold-900/30 dark:text-gold-400\">\n +{hiddenCount} more\n </span>\n )}\n\n {/* Placeholder */}\n {selectedOptions.length === 0 && (\n <span className=\"flex-1 text-sm text-primary-400 dark:text-primary-500\">\n {placeholder}\n </span>\n )}\n\n {/* Spacer to push action buttons to the right */}\n {selectedOptions.length > 0 && <span className=\"flex-1\" />}\n\n {/* Action buttons */}\n <div className=\"flex shrink-0 items-center gap-1\">\n {/* Clear all button */}\n {selectedOptions.length > 0 && !isDisabled && (\n <button\n type=\"button\"\n onClick={handleClearAll}\n className=\"rounded p-0.5 text-primary-400 hover:text-primary-600 dark:text-primary-500 dark:hover:text-primary-300\"\n aria-label=\"Clear all\"\n >\n <CloseIcon className=\"h-4 w-4\" />\n </button>\n )}\n\n {/* Dropdown toggle button */}\n <ListboxButton\n aria-label=\"Toggle options\"\n className=\"flex items-center rounded focus:outline-none focus:ring-2 focus:ring-gold-500/20\"\n >\n {isLoading ? (\n <Spinner size=\"sm\" color=\"primary\" label={loadingText} />\n ) : (\n <ChevronIcon />\n )}\n </ListboxButton>\n </div>\n </div>\n\n <Transition\n show={open}\n leave=\"transition ease-in duration-100\"\n leaveFrom=\"opacity-100\"\n leaveTo=\"opacity-0\"\n afterLeave={handleDropdownClose}\n >\n <ListboxOptions\n anchor=\"bottom start\"\n static\n className=\"z-dropdown max-h-60 w-[var(--button-width)] overflow-auto rounded-md bg-white py-1 text-sm shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none dark:bg-primary-800 dark:ring-primary-700 [--anchor-gap:4px]\"\n data-testid={testId ? `${testId}-options` : undefined}\n >\n {isLoading ? (\n <div className=\"flex items-center justify-center gap-2 px-4 py-2.5 text-primary-500 dark:text-primary-400\">\n <Spinner size=\"sm\" color=\"primary\" />\n <span>{loadingText}</span>\n </div>\n ) : (\n <>\n {/* Search input */}\n {searchable && (\n <div className=\"border-b border-primary-200 px-3 py-2 dark:border-primary-700\">\n <label htmlFor={searchId} className=\"sr-only\">\n Search options\n </label>\n <input\n ref={searchInputRef}\n id={searchId}\n type=\"text\"\n value={query}\n onChange={handleSearchChange}\n placeholder=\"Search...\"\n data-testid={testId ? `${testId}-input` : undefined}\n className={cn(\n 'w-full rounded border border-primary-300 px-2 py-1 text-sm',\n 'bg-white dark:bg-primary-900',\n 'text-primary-900 dark:text-primary-100',\n 'placeholder:text-primary-400 dark:placeholder:text-primary-500',\n 'focus:border-gold-500 focus:outline-none focus:ring-1 focus:ring-gold-500',\n 'dark:border-primary-600'\n )}\n onClick={(e) => e.stopPropagation()}\n />\n </div>\n )}\n\n {/* Select all option */}\n {showSelectAll && selectableOptions.length > 0 && (\n <div\n className={cn(\n 'flex cursor-pointer items-center gap-2 px-4 py-2.5',\n 'border-b border-primary-200 dark:border-primary-700',\n 'hover:bg-primary-50 dark:hover:bg-primary-700'\n )}\n onClick={handleSelectAll}\n >\n <Checkbox\n checked={allSelected}\n indeterminate={someSelected && !allSelected}\n onChange={() => {}}\n aria-label={selectAllLabel}\n />\n <span className=\"text-primary-900 dark:text-primary-100\">\n {selectAllLabel} ({selectableOptions.length})\n </span>\n </div>\n )}\n\n {/* Options */}\n {filteredOptions.length === 0 ? (\n <div className=\"px-4 py-2.5 text-primary-500 dark:text-primary-400\">\n {emptyText}\n </div>\n ) : (\n filteredOptions.map((option, index) => (\n <ListboxOption\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n data-testid={testId ? `${testId}-option-${index}` : undefined}\n className={({ active }) =>\n cn(\n 'flex cursor-pointer items-center gap-2 px-4 py-2.5',\n active && 'bg-primary-50 dark:bg-primary-700',\n option.disabled && 'cursor-not-allowed opacity-50'\n )\n }\n >\n <Checkbox\n checked={value.includes(option.value)}\n disabled={option.disabled}\n onChange={() => {}}\n aria-label={option.label}\n />\n <span className=\"text-primary-900 dark:text-primary-100\">\n {option.label}\n </span>\n </ListboxOption>\n ))\n )}\n </>\n )}\n </ListboxOptions>\n </Transition>\n </div>\n )}\n </Listbox>\n\n {(error || helperText) && (\n <p\n role={hasError ? 'alert' : undefined}\n data-testid={testId ? (hasError ? `${testId}-error` : `${testId}-helper-text`) : undefined}\n className={cn(\n 'mt-1.5 text-sm',\n hasError ? 'text-error' : 'text-primary-500 dark:text-primary-400'\n )}\n >\n {error || helperText}\n </p>\n )}\n </div>\n );\n}\n\nMultiSelect.displayName = 'MultiSelect';\n","import { cn } from '@/utils';\nimport type { SidebarItemProps, SidebarNavItem, ActiveMatcher, SidebarSize, SidebarLinkProps } from './Sidebar.types';\n\n/**\n * Check if an item should be visible based on its visible prop\n */\nfunction shouldShowItem(item: SidebarNavItem): boolean {\n if (item.visible === undefined) return true;\n if (typeof item.visible === 'boolean') return item.visible;\n if (typeof item.visible === 'function') return item.visible();\n return true;\n}\n\n/**\n * Check if an item is active based on current path and matcher\n */\nfunction isItemActive(\n currentPath: string | undefined,\n href: string,\n matcher: ActiveMatcher = 'exact'\n): boolean {\n if (!currentPath) return false;\n\n if (typeof matcher === 'function') {\n return matcher(currentPath, href);\n }\n\n switch (matcher) {\n case 'exact':\n return currentPath === href;\n case 'startsWith':\n return currentPath === href || currentPath.startsWith(`${href}/`);\n default:\n return false;\n }\n}\n\nconst sizeStyles: Record<SidebarSize, string> = {\n sm: 'px-2 py-1.5 text-xs gap-2',\n md: 'px-3 py-2.5 text-sm gap-3',\n lg: 'px-4 py-3 text-base gap-3',\n};\n\nconst iconSizeStyles: Record<SidebarSize, string> = {\n sm: 'h-4 w-4',\n md: 'h-5 w-5',\n lg: 'h-6 w-6',\n};\n\n/**\n * Default link component (falls back to anchor tag)\n */\nconst DefaultLink = ({\n to,\n children,\n className,\n onClick,\n title,\n 'aria-current': ariaCurrent,\n 'aria-label': ariaLabel,\n}: SidebarLinkProps) => (\n <a\n href={to}\n className={className}\n onClick={onClick}\n title={title}\n aria-current={ariaCurrent}\n aria-label={ariaLabel}\n >\n {children}\n </a>\n);\n\n/**\n * SidebarItem component renders an individual navigation item.\n *\n * @example\n * ```tsx\n * <SidebarItem\n * item={{ key: 'home', label: 'Home', href: '/dashboard', icon: <HomeIcon /> }}\n * currentPath=\"/dashboard\"\n * />\n * ```\n */\nexport function SidebarItem({\n item,\n currentPath,\n size = 'md',\n collapsed = false,\n onNavigate,\n LinkComponent,\n className,\n testId,\n ...props\n}: SidebarItemProps) {\n // Don't render if not visible\n if (!shouldShowItem(item)) {\n return null;\n }\n\n const isActive = isItemActive(currentPath, item.href, item.activeMatch);\n const LinkElement = LinkComponent || DefaultLink;\n\n const handleClick = () => {\n if (item.disabled) return;\n item.onClick?.();\n onNavigate?.(item.href);\n };\n\n const content = (\n <>\n {/* Icon */}\n {item.icon && (\n <span\n className={cn(\n 'flex-shrink-0',\n iconSizeStyles[size],\n '[&>svg]:h-full [&>svg]:w-full'\n )}\n aria-hidden=\"true\"\n >\n {item.icon}\n </span>\n )}\n\n {/* Label - hidden when collapsed */}\n {!collapsed && (\n <span className=\"flex-1 truncate\">{item.label}</span>\n )}\n\n {/* Badge - hidden when collapsed */}\n {!collapsed && item.badge !== undefined && (\n <span\n className={cn(\n 'flex-shrink-0 rounded-full px-2 py-0.5 text-xs font-medium',\n isActive\n ? 'bg-primary-200 text-primary-800 dark:bg-primary-700 dark:text-primary-200'\n : 'bg-primary-100 text-primary-600 dark:bg-primary-800 dark:text-primary-300'\n )}\n >\n {item.badge}\n </span>\n )}\n </>\n );\n\n // Use button for onClick-only items, link for navigation\n if (item.onClick && !item.href) {\n return (\n <button\n type=\"button\"\n onClick={handleClick}\n disabled={item.disabled}\n aria-label={item['aria-label'] || item.label}\n title={collapsed ? item.label : undefined}\n data-testid={testId}\n className={cn(\n // Base styles\n 'flex w-full items-center rounded-lg font-medium',\n 'transition-colors duration-150',\n 'focus:outline-none focus:ring-2 focus:ring-primary-500/20 focus:ring-offset-2',\n 'dark:focus:ring-offset-primary-900',\n // Size styles\n sizeStyles[size],\n // State styles\n item.disabled && 'opacity-50 cursor-not-allowed',\n !item.disabled && !isActive && [\n 'text-primary-600 hover:bg-primary-50 hover:text-primary-900',\n 'dark:text-primary-400 dark:hover:bg-primary-800 dark:hover:text-primary-100',\n ],\n isActive && [\n 'bg-primary-100 text-primary-900',\n 'dark:bg-primary-800 dark:text-primary-100',\n ],\n // Collapsed mode\n collapsed && 'justify-center',\n className\n )}\n {...props}\n >\n {content}\n </button>\n );\n }\n\n return (\n <LinkElement\n to={item.href}\n onClick={handleClick}\n data-testid={testId}\n className={cn(\n // Base styles\n 'flex items-center rounded-lg font-medium',\n 'transition-colors duration-150',\n 'focus:outline-none focus:ring-2 focus:ring-primary-500/20 focus:ring-offset-2',\n 'dark:focus:ring-offset-primary-900',\n // Size styles\n sizeStyles[size],\n // State styles\n item.disabled && 'opacity-50 cursor-not-allowed pointer-events-none',\n !item.disabled && !isActive && [\n 'text-primary-600 hover:bg-primary-50 hover:text-primary-900',\n 'dark:text-primary-400 dark:hover:bg-primary-800 dark:hover:text-primary-100',\n ],\n isActive && [\n 'bg-primary-100 text-primary-900',\n 'dark:bg-primary-800 dark:text-primary-100',\n ],\n // Collapsed mode\n collapsed && 'justify-center',\n className\n )}\n aria-current={isActive ? 'page' : undefined}\n aria-label={item['aria-label'] || (collapsed ? item.label : undefined)}\n title={collapsed ? item.label : undefined}\n >\n {content}\n </LinkElement>\n );\n}\n\nexport { shouldShowItem, isItemActive };\n","import { forwardRef } from 'react';\nimport { cn } from '@/utils';\nimport type { SidebarGroupProps, SidebarNavGroup } from './Sidebar.types';\nimport { SidebarItem, shouldShowItem } from './SidebarItem';\n\n/**\n * Check if a group should be visible based on its visible prop\n */\nfunction shouldShowGroup(group: SidebarNavGroup): boolean {\n if (group.visible === undefined) return true;\n if (typeof group.visible === 'boolean') return group.visible;\n if (typeof group.visible === 'function') return group.visible();\n return true;\n}\n\n/**\n * SidebarGroup component wraps a set of navigation items with an optional heading.\n *\n * @example\n * ```tsx\n * <SidebarGroup\n * group={{\n * key: 'main',\n * label: 'Navigation',\n * items: [\n * { key: 'home', label: 'Home', href: '/dashboard' },\n * { key: 'settings', label: 'Settings', href: '/settings' },\n * ],\n * }}\n * currentPath=\"/dashboard\"\n * />\n * ```\n */\nexport const SidebarGroup = forwardRef<HTMLDivElement, SidebarGroupProps>(\n (\n {\n group,\n currentPath,\n size = 'md',\n collapsed = false,\n LinkComponent,\n onNavigate,\n className,\n ...props\n },\n ref\n ) => {\n // Don't render if group is not visible\n if (!shouldShowGroup(group)) {\n return null;\n }\n\n // Filter visible items\n const visibleItems = group.items.filter(shouldShowItem);\n\n // Don't render if no visible items\n if (visibleItems.length === 0) {\n return null;\n }\n\n return (\n <div ref={ref} role=\"group\" className={cn('space-y-1', className)} {...props}>\n {/* Group label - hidden when collapsed */}\n {group.label && !collapsed && (\n <h3\n className={cn(\n 'px-3 py-2 text-xs font-semibold uppercase tracking-wider',\n 'text-primary-500 dark:text-primary-400'\n )}\n >\n {group.label}\n </h3>\n )}\n\n {/* Navigation items */}\n <nav aria-label={group.label || `Navigation group ${group.key}`}>\n <ul className=\"space-y-1\">\n {visibleItems.map((item) => (\n <li key={item.key}>\n <SidebarItem\n item={item}\n currentPath={currentPath}\n size={size}\n collapsed={collapsed}\n LinkComponent={LinkComponent}\n onNavigate={onNavigate}\n />\n </li>\n ))}\n </ul>\n </nav>\n </div>\n );\n }\n);\n\nSidebarGroup.displayName = 'SidebarGroup';\n\nexport { shouldShowGroup };\n","import { forwardRef } from 'react';\nimport { cn } from '@/utils';\nimport type { SidebarDividerProps } from './Sidebar.types';\n\n/**\n * SidebarDivider component provides a visual separator between navigation sections.\n *\n * @example\n * ```tsx\n * <SidebarDivider />\n * <SidebarDivider label=\"More\" />\n * ```\n */\nexport const SidebarDivider = forwardRef<HTMLHRElement, SidebarDividerProps>(\n ({ label, className, ...props }, ref) => {\n if (label) {\n return (\n <div className={cn('relative my-4', className)}>\n <div className=\"absolute inset-0 flex items-center\" aria-hidden=\"true\">\n <hr\n ref={ref}\n className=\"w-full border-t border-primary-200 dark:border-primary-700\"\n {...props}\n />\n </div>\n <div className=\"relative flex justify-center\">\n <span className=\"bg-white px-2 text-xs text-primary-500 dark:bg-primary-900 dark:text-primary-400\">\n {label}\n </span>\n </div>\n </div>\n );\n }\n\n return (\n <hr\n ref={ref}\n className={cn(\n 'my-4 border-t border-primary-200 dark:border-primary-700',\n className\n )}\n {...props}\n />\n );\n }\n);\n\nSidebarDivider.displayName = 'SidebarDivider';\n","import { forwardRef, useCallback, useEffect } from 'react';\nimport { cn } from '@/utils';\nimport type { SidebarProps, SidebarVariant } from './Sidebar.types';\nimport { SidebarGroup, shouldShowGroup } from './SidebarGroup';\nimport { SidebarDivider } from './SidebarDivider';\n\nconst variantStyles: Record<SidebarVariant, string> = {\n default: [\n 'bg-white border-r border-gold-500/40',\n 'dark:bg-primary-900 dark:border-gold-500/20',\n ].join(' '),\n minimal: [\n 'bg-white border-r border-primary-200',\n 'dark:bg-primary-900 dark:border-primary-700',\n ].join(' '),\n};\n\n/**\n * Sidebar component provides a responsive navigation container with support\n * for multiple navigation zones, mobile overlay, and collapsible desktop mode.\n *\n * @example\n * ```tsx\n * <Sidebar\n * navigation={{\n * primary: [{\n * key: 'main',\n * items: [\n * { key: 'home', label: 'Home', href: '/dashboard', icon: <HomeIcon /> },\n * { key: 'calendar', label: 'Calendar', href: '/calendar', icon: <CalendarIcon /> },\n * ],\n * }],\n * secondary: [{\n * key: 'tools',\n * items: [\n * { key: 'admin', label: 'Admin', href: '/admin', visible: hasAdminAccess },\n * ],\n * }],\n * bottom: [{\n * key: 'settings',\n * items: [\n * { key: 'settings', label: 'Settings', href: '/settings', icon: <CogIcon /> },\n * ],\n * }],\n * }}\n * currentPath={pathname}\n * LinkComponent={Link}\n * />\n * ```\n */\nexport const Sidebar = forwardRef<HTMLElement, SidebarProps>(\n (\n {\n navigation,\n currentPath,\n isOpen = false,\n onClose,\n collapsed = false,\n onCollapsedChange,\n variant = 'default',\n size = 'md',\n header,\n footer,\n LinkComponent,\n onNavigate,\n showMobileOverlay = true,\n width = '16rem',\n collapsedWidth = '4rem',\n className,\n 'aria-label': ariaLabel = 'Main navigation',\n testId,\n ...props\n },\n ref\n ) => {\n // Close sidebar on escape key\n useEffect(() => {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && isOpen) {\n onClose?.();\n }\n };\n\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }, [isOpen, onClose]);\n\n // Prevent body scroll when mobile sidebar is open\n useEffect(() => {\n if (isOpen) {\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = '';\n }\n return () => {\n document.body.style.overflow = '';\n };\n }, [isOpen]);\n\n const handleNavigate = useCallback(\n (href: string) => {\n onNavigate?.(href);\n // Close mobile sidebar on navigation\n onClose?.();\n },\n [onNavigate, onClose]\n );\n\n const handleOverlayClick = useCallback(() => {\n onClose?.();\n }, [onClose]);\n\n const handleCollapseToggle = useCallback(() => {\n onCollapsedChange?.(!collapsed);\n }, [collapsed, onCollapsedChange]);\n\n // Check if any groups in a section are visible\n const hasVisibleGroups = (groups?: typeof navigation.primary) =>\n groups?.some(shouldShowGroup) ?? false;\n\n const hasFeatured = hasVisibleGroups(navigation.featured);\n const hasPrimary = hasVisibleGroups(navigation.primary);\n const hasSecondary = hasVisibleGroups(navigation.secondary);\n const hasBottom = hasVisibleGroups(navigation.bottom);\n\n const sidebarWidth = collapsed ? collapsedWidth : width;\n\n const sidebarContent = (\n <>\n {/* Header slot */}\n {header && (\n <div className={cn('flex-shrink-0', collapsed && 'px-2')}>\n {header}\n </div>\n )}\n\n {/* Featured navigation (e.g., AI Assistant) - prominent position at top */}\n {hasFeatured && (\n <div className=\"flex-shrink-0 px-3 py-3\">\n <div className=\"space-y-2\">\n {navigation.featured?.map((group) => (\n <SidebarGroup\n key={group.key}\n group={group}\n currentPath={currentPath}\n size={size}\n collapsed={collapsed}\n LinkComponent={LinkComponent}\n onNavigate={handleNavigate}\n />\n ))}\n </div>\n </div>\n )}\n\n {/* Primary navigation - scrollable */}\n {hasPrimary && (\n <div className=\"flex-1 overflow-y-auto px-3 py-4\">\n <div className=\"space-y-4\">\n {navigation.primary?.map((group) => (\n <SidebarGroup\n key={group.key}\n group={group}\n currentPath={currentPath}\n size={size}\n collapsed={collapsed}\n LinkComponent={LinkComponent}\n onNavigate={handleNavigate}\n />\n ))}\n </div>\n </div>\n )}\n\n {/* Divider between primary and secondary */}\n {hasPrimary && hasSecondary && (\n <div className=\"px-3\">\n <SidebarDivider />\n </div>\n )}\n\n {/* Secondary navigation */}\n {hasSecondary && (\n <div className=\"flex-shrink-0 px-3 py-2\">\n <div className=\"space-y-4\">\n {navigation.secondary?.map((group) => (\n <SidebarGroup\n key={group.key}\n group={group}\n currentPath={currentPath}\n size={size}\n collapsed={collapsed}\n LinkComponent={LinkComponent}\n onNavigate={handleNavigate}\n />\n ))}\n </div>\n </div>\n )}\n\n {/* Spacer */}\n {!hasPrimary && <div className=\"flex-1\" />}\n\n {/* Divider before bottom */}\n {(hasPrimary || hasSecondary) && hasBottom && (\n <div className=\"px-3\">\n <SidebarDivider />\n </div>\n )}\n\n {/* Bottom navigation */}\n {hasBottom && (\n <div className=\"flex-shrink-0 px-3 py-4\">\n <div className=\"space-y-4\">\n {navigation.bottom?.map((group) => (\n <SidebarGroup\n key={group.key}\n group={group}\n currentPath={currentPath}\n size={size}\n collapsed={collapsed}\n LinkComponent={LinkComponent}\n onNavigate={handleNavigate}\n />\n ))}\n </div>\n </div>\n )}\n\n {/* Footer slot */}\n {footer && (\n <div className={cn('flex-shrink-0', collapsed && 'px-2')}>\n {footer}\n </div>\n )}\n\n {/* Collapse toggle button (desktop only) */}\n {onCollapsedChange && (\n <div className=\"hidden lg:block flex-shrink-0 border-t border-primary-200 dark:border-primary-700 p-2\">\n <button\n type=\"button\"\n onClick={handleCollapseToggle}\n className={cn(\n 'flex w-full items-center justify-center rounded-lg p-2',\n 'text-primary-500 hover:bg-primary-50 hover:text-primary-700',\n 'dark:text-primary-400 dark:hover:bg-primary-800 dark:hover:text-primary-200',\n 'transition-colors duration-150',\n 'focus:outline-none focus:ring-2 focus:ring-primary-500/20'\n )}\n aria-label={collapsed ? 'Expand sidebar' : 'Collapse sidebar'}\n data-testid={testId ? `${testId}-toggle` : undefined}\n >\n <svg\n className={cn(\n 'h-5 w-5 transition-transform duration-200',\n collapsed && 'rotate-180'\n )}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M11 19l-7-7 7-7m8 14l-7-7 7-7\"\n />\n </svg>\n </button>\n </div>\n )}\n </>\n );\n\n return (\n <>\n {/* Mobile overlay */}\n {showMobileOverlay && isOpen && (\n <div\n className=\"fixed inset-0 z-40 bg-black/20 lg:hidden\"\n onClick={handleOverlayClick}\n aria-hidden=\"true\"\n data-testid={testId ? `${testId}-overlay` : undefined}\n />\n )}\n\n {/* Sidebar */}\n <aside\n ref={ref}\n className={cn(\n // Base styles\n 'fixed top-0 left-0 z-50 flex h-full flex-col',\n 'transform transition-all duration-300 ease-in-out',\n // Desktop styles\n 'lg:static lg:z-auto lg:translate-x-0',\n // Mobile styles\n isOpen ? 'translate-x-0' : '-translate-x-full',\n // Variant styles\n variantStyles[variant],\n className\n )}\n style={{ width: sidebarWidth }}\n aria-label={ariaLabel}\n data-testid={testId}\n {...props}\n >\n {sidebarContent}\n </aside>\n </>\n );\n }\n);\n\nSidebar.displayName = 'Sidebar';\n","import { forwardRef, type ReactNode } from 'react';\nimport { cn } from '@/utils';\nimport type { AlertProps, AlertVariant } from './Alert.types';\n\n// Default icons for each variant\nconst CheckCircleIcon = () => (\n <svg className=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 12.75L11.25 15 15 9.75M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n);\n\nconst XCircleIcon = () => (\n <svg className=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9.75 9.75l4.5 4.5m0-4.5l-4.5 4.5M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n);\n\nconst ExclamationCircleIcon = () => (\n <svg className=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M12 9v3.75m9-.75a9 9 0 11-18 0 9 9 0 0118 0zm-9 3.75h.008v.008H12v-.008z\" />\n </svg>\n);\n\nconst InformationCircleIcon = () => (\n <svg className=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M11.25 11.25l.041-.02a.75.75 0 011.063.852l-.708 2.836a.75.75 0 001.063.853l.041-.021M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-9-3.75h.008v.008H12V8.25z\" />\n </svg>\n);\n\nconst XMarkIcon = () => (\n <svg className=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n);\n\nconst defaultIcons: Record<AlertVariant, ReactNode> = {\n success: <CheckCircleIcon />,\n error: <XCircleIcon />,\n warning: <ExclamationCircleIcon />,\n info: <InformationCircleIcon />,\n};\n\nconst variantStyles: Record<AlertVariant, { container: string; icon: string; title: string }> = {\n success: {\n container: cn(\n 'bg-success-light border-success/20 text-[#166534]',\n 'dark:bg-success/10 dark:border-success/30 dark:text-[#86efac]'\n ),\n icon: 'text-success dark:text-[#4ade80]',\n title: 'text-[#14532d] dark:text-[#bbf7d0]',\n },\n error: {\n container: cn(\n 'bg-error-light border-error/20 text-[#991b1b]',\n 'dark:bg-error/10 dark:border-error/30 dark:text-[#fca5a5]'\n ),\n icon: 'text-error dark:text-[#f87171]',\n title: 'text-[#7f1d1d] dark:text-[#fecaca]',\n },\n warning: {\n container: cn(\n 'bg-warning-light border-warning/20 text-[#854d0e]',\n 'dark:bg-warning/10 dark:border-warning/30 dark:text-[#fde047]'\n ),\n icon: 'text-warning dark:text-[#facc15]',\n title: 'text-[#713f12] dark:text-[#fef08a]',\n },\n info: {\n container: cn(\n 'bg-info-light border-info/20 text-[#1e40af]',\n 'dark:bg-info/10 dark:border-info/30 dark:text-[#93c5fd]'\n ),\n icon: 'text-info dark:text-[#60a5fa]',\n title: 'text-[#1e3a8a] dark:text-[#bfdbfe]',\n },\n};\n\n/**\n * Alert component for displaying status messages.\n *\n * @example\n * ```tsx\n * <Alert variant=\"success\" message=\"Changes saved successfully!\" />\n * <Alert variant=\"error\" title=\"Error\" message=\"Failed to save changes.\" onClose={() => {}} />\n * <Alert variant=\"warning\" message=\"Please review before continuing.\" />\n * ```\n */\nexport const Alert = forwardRef<HTMLDivElement, AlertProps>(\n ({ variant = 'info', title, message, icon, onClose, className, testId, ...props }, ref) => {\n const styles = variantStyles[variant];\n const displayIcon = icon === null ? null : (icon ?? defaultIcons[variant]);\n\n return (\n <div\n ref={ref}\n role=\"alert\"\n className={cn(\n 'rounded-lg border p-4',\n styles.container,\n className\n )}\n data-testid={testId}\n {...props}\n >\n <div className=\"flex items-start\">\n {displayIcon !== null && (\n <div\n className={cn('flex-shrink-0', styles.icon)}\n aria-hidden=\"true\"\n data-testid={testId ? `${testId}-icon` : undefined}\n >\n {displayIcon}\n </div>\n )}\n <div className={cn('flex-1', displayIcon !== null && 'ml-3')}>\n {title && (\n <h3 className={cn('text-sm font-medium', styles.title)}>\n {title}\n </h3>\n )}\n <div className={cn('text-sm', title && 'mt-1')}>\n {message}\n </div>\n </div>\n {onClose && (\n <div className=\"ml-3 flex-shrink-0\">\n <button\n type=\"button\"\n onClick={onClose}\n className={cn(\n 'inline-flex rounded-md p-1.5',\n 'hover:opacity-75 focus:outline-none focus:ring-2 focus:ring-offset-2',\n 'focus:ring-current/20',\n 'dark:focus:ring-offset-primary-900'\n )}\n data-testid={testId ? `${testId}-close-button` : undefined}\n >\n <span className=\"sr-only\">Dismiss</span>\n <XMarkIcon />\n </button>\n </div>\n )}\n </div>\n </div>\n );\n }\n);\n\nAlert.displayName = 'Alert';\n","import { forwardRef } from 'react';\nimport { cn } from '@/utils';\nimport type { AvatarProps, AvatarSize, AvatarStatus } from './Avatar.types';\n\nconst sizeStyles: Record<AvatarSize, { container: string; text: string; status: string }> = {\n xs: { container: 'w-6 h-6', text: 'text-xs', status: 'w-2 h-2 border' },\n sm: { container: 'w-8 h-8', text: 'text-sm', status: 'w-2.5 h-2.5 border' },\n md: { container: 'w-10 h-10', text: 'text-base', status: 'w-3 h-3 border-2' },\n lg: { container: 'w-12 h-12', text: 'text-lg', status: 'w-3.5 h-3.5 border-2' },\n xl: { container: 'w-16 h-16', text: 'text-2xl', status: 'w-4 h-4 border-2' },\n};\n\nconst statusStyles: Record<AvatarStatus, string> = {\n online: 'bg-success',\n offline: 'bg-primary-400 dark:bg-primary-500',\n away: 'bg-warning',\n busy: 'bg-error',\n};\n\n/**\n * Avatar component for displaying user profile images or initials.\n *\n * @example\n * ```tsx\n * <Avatar name=\"John Doe\" />\n * <Avatar name=\"Jane Smith\" src=\"/avatars/jane.jpg\" size=\"lg\" />\n * <Avatar name=\"Alex\" status=\"online\" />\n * ```\n */\nexport const Avatar = forwardRef<HTMLDivElement, AvatarProps>(\n ({ name, src, size = 'md', alt, status, className, testId, ...props }, ref) => {\n // Get initials from name (first letter of first and last name)\n const getInitials = (fullName: string): string => {\n const names = fullName.trim().split(' ');\n if (names.length === 1) {\n return names[0]?.charAt(0).toUpperCase() || '';\n }\n const firstName = names[0];\n const lastName = names[names.length - 1];\n return (\n (firstName?.charAt(0) || '') + (lastName?.charAt(0) || '')\n ).toUpperCase();\n };\n\n const initials = getInitials(name);\n const styles = sizeStyles[size];\n\n return (\n <div\n ref={ref}\n className={cn(\n 'relative inline-flex items-center justify-center',\n 'rounded-full font-medium',\n // Light mode\n 'bg-gold-500 text-white',\n // Dark mode\n 'dark:bg-gold-600 dark:text-white',\n styles.container,\n className\n )}\n data-testid={testId}\n {...props}\n >\n {src ? (\n <img\n src={src}\n alt={alt || `${name}'s avatar`}\n className=\"w-full h-full rounded-full object-cover\"\n data-testid={testId ? `${testId}-image` : undefined}\n />\n ) : (\n <span className={styles.text}>{initials}</span>\n )}\n {status && (\n <span\n role=\"status\"\n className={cn(\n 'absolute bottom-0 right-0 rounded-full',\n 'border-white dark:border-primary-900',\n styles.status,\n statusStyles[status]\n )}\n aria-label={`Status: ${status}`}\n data-testid={testId ? `${testId}-status` : undefined}\n />\n )}\n </div>\n );\n }\n);\n\nAvatar.displayName = 'Avatar';\n","import {\n useRef,\n useCallback,\n type FC,\n type KeyboardEvent,\n type ClipboardEvent,\n type ChangeEvent,\n} from 'react';\nimport { cn } from '@/utils';\nimport type { OTPInputProps } from './OTPInput.types';\n\n/**\n * OTPInput - A multi-digit code input for MFA verification\n *\n * Features:\n * - Auto-focus to next input on digit entry\n * - Backspace moves to previous input\n * - Arrow keys navigate between inputs\n * - Paste handling distributes digits across inputs\n * - Full keyboard and screen reader accessibility\n *\n * @example\n * ```tsx\n * const [code, setCode] = useState('');\n * <OTPInput value={code} onChange={setCode} />\n * <OTPInput value={code} onChange={setCode} length={4} error=\"Invalid code\" />\n * ```\n */\nexport const OTPInput: FC<OTPInputProps> = ({\n length = 6,\n value,\n onChange,\n error,\n disabled = false,\n autoFocus = false,\n label = 'One-time password',\n className,\n}) => {\n const inputRefs = useRef<Array<HTMLInputElement | null>>([]);\n\n // Convert value string to array of digits\n const digits = value.split('').slice(0, length);\n while (digits.length < length) {\n digits.push('');\n }\n\n const focusInput = useCallback((index: number) => {\n const input = inputRefs.current[index];\n if (input) {\n input.focus();\n input.select();\n }\n }, []);\n\n const handleChange = useCallback(\n (index: number, event_: ChangeEvent<HTMLInputElement>): void => {\n const newValue = event_.target.value;\n\n // Only accept single digit\n if (!/^\\d*$/.test(newValue)) return;\n\n const digit = newValue.slice(-1); // Take last character if multiple\n const newDigits = [...digits];\n newDigits[index] = digit;\n\n const newOtp = newDigits.join('');\n onChange(newOtp);\n\n // Move to next input if digit entered\n if (digit && index < length - 1) {\n focusInput(index + 1);\n }\n },\n [digits, length, onChange, focusInput]\n );\n\n const handleKeyDown = useCallback(\n (index: number, event_: KeyboardEvent<HTMLInputElement>): void => {\n switch (event_.key) {\n case 'Backspace':\n if (!digits[index] && index > 0) {\n // If current input is empty, move to previous and clear it\n event_.preventDefault();\n const newDigits = [...digits];\n newDigits[index - 1] = '';\n onChange(newDigits.join(''));\n focusInput(index - 1);\n } else if (digits[index]) {\n // Clear current input\n const newDigits = [...digits];\n newDigits[index] = '';\n onChange(newDigits.join(''));\n }\n break;\n case 'ArrowLeft':\n event_.preventDefault();\n if (index > 0) {\n focusInput(index - 1);\n }\n break;\n case 'ArrowRight':\n event_.preventDefault();\n if (index < length - 1) {\n focusInput(index + 1);\n }\n break;\n case 'Delete': {\n event_.preventDefault();\n const newDigits = [...digits];\n newDigits[index] = '';\n onChange(newDigits.join(''));\n break;\n }\n }\n },\n [digits, length, onChange, focusInput]\n );\n\n const handlePaste = useCallback(\n (event_: ClipboardEvent<HTMLInputElement>): void => {\n event_.preventDefault();\n const pastedData = event_.clipboardData.getData('text');\n const pastedDigits = pastedData.replace(/\\D/g, '').slice(0, length);\n\n if (pastedDigits) {\n onChange(pastedDigits);\n // Focus last filled input or next empty one\n const focusIndex = Math.min(pastedDigits.length, length - 1);\n focusInput(focusIndex);\n }\n },\n [length, onChange, focusInput]\n );\n\n const errorId = error ? 'otp-input-error' : undefined;\n\n return (\n <div className={cn('w-full', className)} data-testid=\"otp-input\">\n <div\n role=\"group\"\n aria-label={label}\n aria-describedby={errorId}\n className=\"flex justify-center gap-2 sm:gap-3\"\n >\n {digits.map((digit, index) => (\n <input\n key={index}\n ref={(element) => {\n inputRefs.current[index] = element;\n }}\n type=\"text\"\n inputMode=\"numeric\"\n pattern=\"\\d*\"\n maxLength={1}\n value={digit}\n disabled={disabled}\n autoFocus={autoFocus && index === 0}\n aria-label={`Digit ${index + 1} of ${length}`}\n aria-invalid={!!error}\n data-testid={`otp-input-digit-${index}`}\n className={cn(\n 'w-10 h-12 sm:w-12 sm:h-14',\n 'text-center text-xl sm:text-2xl font-semibold',\n 'border-2 rounded-lg',\n 'focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-primary-500',\n 'transition-colors duration-200',\n // Light mode\n error ? 'border-error bg-error-light' : 'border-primary-300 bg-white',\n // Dark mode\n error\n ? 'dark:border-error dark:bg-error/10'\n : 'dark:border-primary-600 dark:bg-primary-900 dark:text-white',\n 'dark:focus:ring-primary-400 dark:focus:border-primary-400',\n disabled && 'bg-primary-100 cursor-not-allowed opacity-50 dark:bg-primary-800'\n )}\n onChange={(event_) => handleChange(index, event_)}\n onKeyDown={(event_) => handleKeyDown(index, event_)}\n onPaste={handlePaste}\n onFocus={(event_) => event_.target.select()}\n />\n ))}\n </div>\n\n {error && (\n <p\n id={errorId}\n role=\"alert\"\n aria-live=\"assertive\"\n data-testid=\"otp-input-error\"\n className={cn(\n 'mt-2 text-sm text-center',\n 'text-error dark:text-[#fca5a5]'\n )}\n >\n {error}\n </p>\n )}\n </div>\n );\n};\n\nexport default OTPInput;\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n useState,\n type SelectHTMLAttributes,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { DayPicker, getDefaultClassNames } from 'react-day-picker';\nimport type { DropdownOption } from 'react-day-picker';\nimport 'react-day-picker/style.css';\nimport { cn } from '@/utils';\nimport type { DateInputProps } from './DateInput.types';\n\n/** Parse YYYY-MM-DD string to Date (local timezone). Returns undefined if invalid. */\nfunction parseDate(value: string | null): Date | undefined {\n if (!value) return undefined;\n const [y, m, d] = value.split('-').map(Number);\n if (!y || !m || !d) return undefined;\n const date = new Date(y, m - 1, d);\n if (date.getFullYear() !== y || date.getMonth() !== m - 1 || date.getDate() !== d) {\n return undefined;\n }\n return date;\n}\n\n/** Format a Date to YYYY-MM-DD */\nfunction formatDate(date: Date): string {\n const y = date.getFullYear();\n const m = String(date.getMonth() + 1).padStart(2, '0');\n const d = String(date.getDate()).padStart(2, '0');\n return `${y}-${m}-${d}`;\n}\n\n/** Check if a YYYY-MM-DD string is valid */\nfunction isValidDateString(value: string): boolean {\n return /^\\d{4}-\\d{2}-\\d{2}$/.test(value) && parseDate(value) !== undefined;\n}\n\n/** Custom dropdown for month/year selection inside the calendar. */\nfunction CalendarDropdown(\n props: {\n options?: DropdownOption[];\n } & Omit<SelectHTMLAttributes<HTMLSelectElement>, 'children'>\n) {\n const { options, value, onChange, className, 'aria-label': ariaLabel, ...rest } = props;\n const [open, setOpen] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n const listRef = useRef<HTMLDivElement>(null);\n\n const selectedOption = options?.find((o) => o.value === Number(value));\n\n // Close on click outside\n useEffect(() => {\n if (!open) return;\n const handleMouseDown = (e: MouseEvent) => {\n if (!containerRef.current?.contains(e.target as Node)) {\n setOpen(false);\n }\n };\n document.addEventListener('mousedown', handleMouseDown);\n return () => document.removeEventListener('mousedown', handleMouseDown);\n }, [open]);\n\n // Scroll selected option into view when opening\n useEffect(() => {\n if (open && listRef.current) {\n const active = listRef.current.querySelector('[data-active=\"true\"]');\n if (active) {\n active.scrollIntoView({ block: 'nearest' });\n }\n }\n }, [open]);\n\n const handleSelect = (optionValue: number) => {\n // Simulate a native select change event for react-day-picker\n if (onChange) {\n const syntheticEvent = {\n target: { value: String(optionValue) },\n } as React.ChangeEvent<HTMLSelectElement>;\n onChange(syntheticEvent);\n }\n setOpen(false);\n };\n\n return (\n <div ref={containerRef} className={cn('relative', className)}>\n {/* Hidden native select to keep rdp's internals happy */}\n <select {...rest} value={value} onChange={onChange} className=\"sr-only\" tabIndex={-1}>\n {options?.map((o) => (\n <option key={o.value} value={o.value}>\n {o.label}\n </option>\n ))}\n </select>\n\n {/* Custom trigger button */}\n <button\n type=\"button\"\n onClick={() => setOpen(!open)}\n aria-label={ariaLabel}\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n className={cn(\n 'inline-flex items-center gap-1 rounded-md px-2 py-1 text-sm font-semibold',\n 'text-primary-800 dark:text-primary-200',\n 'hover:bg-primary-100 dark:hover:bg-primary-700',\n 'transition-colors'\n )}\n >\n {selectedOption?.label}\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n className={cn('h-4 w-4 text-primary-500 transition-transform', open && 'rotate-180')}\n >\n <path\n fillRule=\"evenodd\"\n d=\"M5.22 8.22a.75.75 0 011.06 0L10 11.94l3.72-3.72a.75.75 0 111.06 1.06l-4.25 4.25a.75.75 0 01-1.06 0L5.22 9.28a.75.75 0 010-1.06z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </button>\n\n {/* Options list */}\n {open && (\n <div\n ref={listRef}\n role=\"listbox\"\n aria-label={ariaLabel}\n className={cn(\n 'absolute left-0 top-full z-10 mt-1',\n 'max-h-48 min-w-[8rem] overflow-auto',\n 'rounded-md border border-primary-200 bg-white py-1 shadow-lg',\n 'dark:border-primary-600 dark:bg-primary-800'\n )}\n >\n {options?.map((o) => {\n const isSelected = o.value === Number(value);\n return (\n <button\n key={o.value}\n type=\"button\"\n role=\"option\"\n aria-selected={isSelected}\n data-active={isSelected ? 'true' : undefined}\n disabled={o.disabled}\n onClick={() => handleSelect(o.value)}\n className={cn(\n 'flex w-full items-center px-3 py-1.5 text-left text-sm',\n 'transition-colors',\n isSelected\n ? 'bg-gold-50 font-semibold text-gold-700 dark:bg-gold-900/30 dark:text-gold-400'\n : 'text-primary-700 dark:text-primary-300',\n !o.disabled &&\n !isSelected &&\n 'hover:bg-primary-50 dark:hover:bg-primary-700',\n o.disabled && 'cursor-not-allowed opacity-40'\n )}\n >\n {o.label}\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n\n/**\n * DateInput component with a calendar popup for date selection.\n *\n * @example\n * ```tsx\n * const [date, setDate] = useState<string | null>(null);\n * <DateInput value={date} onChange={setDate} label=\"Birth Date\" />\n * <DateInput value={date} onChange={setDate} error=\"Date is required\" />\n * ```\n */\nexport const DateInput = forwardRef<HTMLInputElement, DateInputProps>(\n (\n {\n value,\n onChange,\n label,\n error,\n helperText,\n fullWidth = false,\n disabled = false,\n className,\n id,\n required,\n min,\n max,\n testId,\n placeholder = 'Select date',\n disabledDate,\n allowClear = true,\n locale,\n formatDisplayValue,\n },\n ref\n ) => {\n const [isOpen, setIsOpen] = useState(false);\n const [inputValue, setInputValue] = useState(value || '');\n const [isEditing, setIsEditing] = useState(false);\n const [month, setMonth] = useState<Date>(() => parseDate(value) || new Date());\n\n const containerRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const [panelPosition, setPanelPosition] = useState<{ top: number; left: number }>({\n top: 0,\n left: 0,\n });\n\n const inputId = id || label?.toLowerCase().replace(/\\s+/g, '-');\n const hasError = !!error;\n const errorId = hasError ? `${inputId}-error` : undefined;\n\n const selectedDate = parseDate(value);\n const minDate = parseDate(min ?? null);\n const maxDate = parseDate(max ?? null);\n\n /** Get the display string for a date value */\n const getDisplayValue = useCallback(\n (val: string | null): string => {\n if (!val) return '';\n const d = parseDate(val);\n if (!d) return val;\n if (formatDisplayValue) return formatDisplayValue(d, locale);\n if (locale) {\n return d.toLocaleDateString(locale.code, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n });\n }\n return val;\n },\n [formatDisplayValue, locale]\n );\n\n // Sync input text when value prop changes externally\n useEffect(() => {\n if (!isEditing) {\n setInputValue(getDisplayValue(value));\n }\n }, [value, isEditing, getDisplayValue]);\n\n // Sync calendar month when value changes\n useEffect(() => {\n const d = parseDate(value);\n if (d) setMonth(d);\n }, [value]);\n\n // Build disabled matcher for react-day-picker\n const disabledMatcher = useCallback(\n (date: Date): boolean => {\n if (minDate && date < new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate())) {\n return true;\n }\n if (maxDate && date > new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate())) {\n return true;\n }\n if (disabledDate?.(date)) return true;\n return false;\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [min, max, disabledDate]\n );\n\n const updatePosition = useCallback(() => {\n if (!containerRef.current) return;\n const rect = containerRef.current.getBoundingClientRect();\n const spaceBelow = window.innerHeight - rect.bottom;\n const panelHeight = 340; // approximate calendar height\n\n const top = spaceBelow >= panelHeight\n ? rect.bottom + window.scrollY + 4\n : rect.top + window.scrollY - panelHeight - 4;\n const left = rect.left + window.scrollX;\n\n setPanelPosition({ top, left });\n }, []);\n\n const openCalendar = useCallback(() => {\n if (disabled) return;\n updatePosition();\n setIsOpen(true);\n }, [disabled, updatePosition]);\n\n const closeCalendar = useCallback(() => {\n setIsOpen(false);\n }, []);\n\n const toggleCalendar = useCallback(() => {\n if (isOpen) {\n closeCalendar();\n } else {\n openCalendar();\n }\n }, [isOpen, openCalendar, closeCalendar]);\n\n // Click outside handler\n useEffect(() => {\n if (!isOpen) return;\n\n const handleMouseDown = (e: MouseEvent) => {\n const target = e.target as Node;\n if (\n containerRef.current?.contains(target) ||\n panelRef.current?.contains(target)\n ) {\n return;\n }\n closeCalendar();\n };\n\n document.addEventListener('mousedown', handleMouseDown);\n return () => document.removeEventListener('mousedown', handleMouseDown);\n }, [isOpen, closeCalendar]);\n\n // Escape key handler\n useEffect(() => {\n if (!isOpen) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n closeCalendar();\n inputRef.current?.focus();\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [isOpen, closeCalendar]);\n\n const handleDaySelect = useCallback(\n (date: Date | undefined) => {\n if (date) {\n const formatted = formatDate(date);\n onChange(formatted);\n setInputValue(getDisplayValue(formatted));\n setIsEditing(false);\n }\n closeCalendar();\n inputRef.current?.focus();\n },\n [onChange, closeCalendar, getDisplayValue]\n );\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const val = e.target.value;\n setIsEditing(true);\n setInputValue(val);\n\n if (val === '') {\n onChange(null);\n } else if (isValidDateString(val)) {\n const d = parseDate(val)!;\n if (!disabledMatcher(d)) {\n onChange(val);\n setMonth(d);\n }\n }\n };\n\n const handleInputBlur = () => {\n setIsEditing(false);\n // Revert to display value on blur\n setInputValue(getDisplayValue(value));\n };\n\n const handleInputKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'ArrowDown' && !isOpen) {\n e.preventDefault();\n openCalendar();\n }\n if (e.key === 'Enter' && !isOpen) {\n e.preventDefault();\n openCalendar();\n }\n };\n\n const handleInputClick = () => {\n if (!isOpen) {\n openCalendar();\n }\n };\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n onChange(null);\n setInputValue('');\n setIsEditing(false);\n inputRef.current?.focus();\n };\n\n const handleTodayClick = () => {\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n if (!disabledMatcher(today)) {\n handleDaySelect(today);\n }\n };\n\n // Assign both the forwarded ref and our internal ref\n const setRefs = useCallback(\n (node: HTMLInputElement | null) => {\n inputRef.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 [ref]\n );\n\n // react-day-picker classNames for our design system\n const defaultClassNames = getDefaultClassNames();\n const tejaClassNames = {\n root: `${defaultClassNames.root} text-primary-900 dark:text-primary-100`,\n months: defaultClassNames.months,\n month: defaultClassNames.month,\n month_caption: `${defaultClassNames.month_caption} text-sm font-semibold text-primary-800 dark:text-primary-200`,\n nav: defaultClassNames.nav,\n button_previous: `${defaultClassNames.button_previous} text-primary-600 hover:text-primary-900 dark:text-primary-400 dark:hover:text-primary-100`,\n button_next: `${defaultClassNames.button_next} text-primary-600 hover:text-primary-900 dark:text-primary-400 dark:hover:text-primary-100`,\n weekday: `${defaultClassNames.weekday} text-xs font-medium text-primary-500 dark:text-primary-400`,\n day: `${defaultClassNames.day} text-sm`,\n day_button: `${defaultClassNames.day_button} !rounded-md hover:bg-gold-100 dark:hover:bg-gold-900/30`,\n selected: `${defaultClassNames.selected} !bg-gold-500 !text-white dark:!bg-gold-600 !font-semibold !text-base`,\n today: `${defaultClassNames.today} !font-semibold !text-gold-600 dark:!text-gold-400`,\n outside: `${defaultClassNames.outside} !opacity-50 text-primary-400 dark:text-primary-500`,\n disabled: `${defaultClassNames.disabled} text-primary-300 dark:text-primary-600 cursor-not-allowed`,\n chevron: `${defaultClassNames.chevron} !fill-primary-600 dark:!fill-primary-400`,\n dropdowns: `${defaultClassNames.dropdowns} flex items-center gap-0`,\n dropdown_root: `${defaultClassNames.dropdown_root}`,\n caption_label: `${defaultClassNames.caption_label} text-sm font-semibold text-primary-800 dark:text-primary-200`,\n };\n\n // Override rdp CSS variables to use our design tokens\n const rdpCssOverrides: React.CSSProperties = {\n '--rdp-accent-color': '#f59e0b',\n '--rdp-accent-background-color': '#fefce8',\n '--rdp-today-color': '#d97706',\n '--rdp-selected-border': '0',\n '--rdp-day-height': '36px',\n '--rdp-day-width': '36px',\n '--rdp-day_button-height': '32px',\n '--rdp-day_button-width': '32px',\n '--rdp-day_button-border-radius': '6px',\n '--rdp-day_button-border': '2px solid transparent',\n } as React.CSSProperties;\n\n return (\n <div\n ref={containerRef}\n className={cn(fullWidth ? 'w-full' : 'w-auto')}\n data-testid={testId}\n >\n {label && (\n <label\n htmlFor={inputId}\n className=\"mb-2 block text-sm font-medium text-primary-700 dark:text-white\"\n data-testid={testId ? `${testId}-label` : undefined}\n >\n {label}\n {required && <span className=\"ml-1 text-error\">*</span>}\n </label>\n )}\n\n <div className=\"relative\">\n <input\n ref={setRefs}\n type=\"text\"\n id={inputId}\n value={inputValue}\n placeholder={placeholder}\n onChange={handleInputChange}\n onBlur={handleInputBlur}\n onKeyDown={handleInputKeyDown}\n onClick={handleInputClick}\n disabled={disabled}\n required={required}\n role=\"combobox\"\n aria-label={label ? undefined : 'Select date'}\n aria-invalid={hasError ? 'true' : undefined}\n aria-describedby={errorId}\n aria-haspopup=\"dialog\"\n aria-expanded={isOpen}\n data-testid={testId ? `${testId}-input` : 'date-input'}\n className={cn(\n 'block w-full rounded-md border bg-white px-4 py-2.5 pr-20 text-sm text-primary-900',\n 'transition-colors duration-normal',\n 'placeholder:text-primary-400',\n 'focus:outline-none focus:ring-2',\n 'disabled:cursor-not-allowed disabled:bg-primary-50 disabled:text-primary-500',\n 'dark:bg-primary-800 dark:text-primary-100',\n 'dark:placeholder:text-primary-500',\n 'dark:disabled:bg-primary-900 dark:disabled:text-primary-600',\n !disabled && 'cursor-pointer',\n hasError\n ? 'border-error focus:border-error focus:ring-error/20 dark:border-error/70 dark:focus:ring-error/30'\n : 'border-primary-300 focus:border-gold-500 focus:ring-gold-500/20 dark:border-primary-600 dark:focus:border-gold-400 dark:focus:ring-gold-400/30',\n className\n )}\n />\n\n <div className=\"absolute inset-y-0 right-0 flex items-center gap-1 pr-3\">\n {/* Clear button */}\n {allowClear && value && !disabled && (\n <button\n type=\"button\"\n onClick={handleClear}\n tabIndex={-1}\n aria-label=\"Clear date\"\n data-testid={testId ? `${testId}-clear` : undefined}\n className=\"rounded p-0.5 text-primary-400 hover:text-primary-600 dark:text-primary-500 dark:hover:text-primary-300\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n className=\"h-4 w-4\"\n >\n <path d=\"M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z\" />\n </svg>\n </button>\n )}\n\n {/* Calendar toggle */}\n <button\n type=\"button\"\n onClick={toggleCalendar}\n tabIndex={-1}\n disabled={disabled}\n aria-label=\"Open calendar\"\n data-testid={testId ? `${testId}-toggle` : undefined}\n className={cn(\n 'rounded p-0.5 text-primary-400 dark:text-primary-500',\n disabled\n ? 'cursor-not-allowed opacity-50'\n : 'hover:text-primary-600 dark:hover:text-primary-300'\n )}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n className=\"h-5 w-5\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M5.75 2a.75.75 0 01.75.75V4h7V2.75a.75.75 0 011.5 0V4h.25A2.75 2.75 0 0118 6.75v8.5A2.75 2.75 0 0115.25 18H4.75A2.75 2.75 0 012 15.25v-8.5A2.75 2.75 0 014.75 4H5V2.75A.75.75 0 015.75 2zm-1 5.5c-.69 0-1.25.56-1.25 1.25v6.5c0 .69.56 1.25 1.25 1.25h10.5c.69 0 1.25-.56 1.25-1.25v-6.5c0-.69-.56-1.25-1.25-1.25H4.75z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </button>\n </div>\n </div>\n\n {(error || helperText) && (\n <p\n id={errorId}\n role={hasError ? 'alert' : undefined}\n data-testid={\n testId ? (hasError ? `${testId}-error` : `${testId}-helper-text`) : undefined\n }\n className={cn(\n 'mt-1.5 text-sm',\n hasError ? 'text-error' : 'text-primary-500 dark:text-primary-400'\n )}\n >\n {error || helperText}\n </p>\n )}\n\n {/* Calendar popover */}\n {isOpen &&\n createPortal(\n <div\n ref={panelRef}\n role=\"dialog\"\n aria-label=\"Date picker\"\n data-testid={testId ? `${testId}-calendar` : undefined}\n className=\"z-dropdown rounded-lg border border-primary-200 bg-white p-3 shadow-lg dark:border-primary-700 dark:bg-primary-800\"\n style={{\n position: 'absolute',\n top: panelPosition.top,\n left: panelPosition.left,\n }}\n >\n <DayPicker\n mode=\"single\"\n selected={selectedDate}\n onSelect={handleDaySelect}\n disabled={disabledMatcher}\n month={month}\n onMonthChange={setMonth}\n locale={locale}\n captionLayout=\"dropdown\"\n startMonth={minDate || new Date(new Date().getFullYear() - 100, 0)}\n endMonth={maxDate || new Date(new Date().getFullYear() + 10, 11)}\n classNames={tejaClassNames}\n components={{ Dropdown: CalendarDropdown }}\n style={rdpCssOverrides}\n showOutsideDays\n fixedWeeks\n footer={\n <button\n type=\"button\"\n onClick={handleTodayClick}\n data-testid={testId ? `${testId}-today` : undefined}\n className=\"mt-2 w-full rounded-md border border-primary-200 px-3 py-1.5 text-xs font-medium text-primary-700 hover:bg-primary-50 dark:border-primary-600 dark:text-primary-300 dark:hover:bg-primary-700\"\n >\n Today\n </button>\n }\n />\n </div>,\n document.body\n )}\n </div>\n );\n }\n);\n\nDateInput.displayName = 'DateInput';\n","import { forwardRef } from 'react';\nimport { cn } from '@/utils';\nimport type { PillSelectorProps, PillSelectorSize } from './PillSelector.types';\n\nconst sizeStyles: Record<PillSelectorSize, string> = {\n sm: 'px-2.5 py-1 text-xs gap-1',\n md: 'px-3 py-1.5 text-sm gap-1.5',\n lg: 'px-4 py-2 text-base gap-2',\n};\n\nconst checkmarkSize: Record<PillSelectorSize, string> = {\n sm: 'w-3 h-3',\n md: 'w-4 h-4',\n lg: 'w-5 h-5',\n};\n\n/**\n * PillSelector component for multi-select chip UI.\n *\n * @example\n * ```tsx\n * const [selected, setSelected] = useState<string[]>([]);\n * <PillSelector\n * options={[{ value: 'a', label: 'Option A' }, { value: 'b', label: 'Option B' }]}\n * selected={selected}\n * onChange={setSelected}\n * />\n * ```\n */\nexport const PillSelector = forwardRef<HTMLDivElement, PillSelectorProps>(\n (\n {\n options,\n selected,\n onChange,\n multiple = true,\n size = 'md',\n label,\n fullWidth = false,\n disabled = false,\n className,\n ...props\n },\n ref\n ) => {\n const handleClick = (value: string): void => {\n if (disabled) return;\n\n if (multiple) {\n if (selected.includes(value)) {\n onChange(selected.filter((v) => v !== value));\n } else {\n onChange([...selected, value]);\n }\n } else {\n onChange([value]);\n }\n };\n\n return (\n <div\n ref={ref}\n className={cn(fullWidth ? 'w-full' : 'w-auto', className)}\n {...props}\n >\n {label && (\n <label className=\"mb-2 block text-sm font-medium text-primary-700 dark:text-white\">\n {label}\n </label>\n )}\n <div className=\"flex flex-wrap gap-2\" role=\"group\" aria-label={label}>\n {options.map((option) => {\n const isSelected = selected.includes(option.value);\n return (\n <button\n key={option.value}\n type=\"button\"\n disabled={disabled}\n aria-pressed={isSelected}\n onClick={() => handleClick(option.value)}\n className={cn(\n 'inline-flex items-center justify-center rounded-full border font-medium',\n 'transition-colors duration-normal',\n 'focus:outline-none focus:ring-2 focus:ring-offset-1',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n sizeStyles[size],\n isSelected\n ? cn(\n // Light mode - selected\n 'border-primary-700 bg-primary-700 text-white',\n 'hover:bg-primary-800 hover:border-primary-800',\n 'focus:ring-primary-500/30',\n // Dark mode - selected\n 'dark:border-gold-500 dark:bg-gold-500 dark:text-primary-900',\n 'dark:hover:bg-gold-400 dark:hover:border-gold-400',\n 'dark:focus:ring-gold-400/30'\n )\n : cn(\n // Light mode - unselected\n 'border-primary-300 bg-white text-primary-700',\n 'hover:border-primary-400 hover:bg-primary-50',\n 'focus:ring-primary-500/20',\n // Dark mode - unselected\n 'dark:border-primary-600 dark:bg-primary-800 dark:text-primary-200',\n 'dark:hover:border-primary-500 dark:hover:bg-primary-700',\n 'dark:focus:ring-primary-400/20'\n )\n )}\n >\n {isSelected && (\n <svg\n className={checkmarkSize[size]}\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z\"\n />\n </svg>\n )}\n {option.icon}\n <span>{option.label}</span>\n </button>\n );\n })}\n </div>\n </div>\n );\n }\n);\n\nPillSelector.displayName = 'PillSelector';\n"],"names":["variantStyles","sizeStyles","e","n","C","t","o","r","a","f","i","u","c","s","l","m","f.isElement","E","d","h","p","x","M","v","b","i.isElement","w","z","X","J","T","g","D","A","O","i.isHTMLElement","V","j","y","N","W","k","i.isHTMLorSVGElement","Z","F","_","S","H","R","U","Q","q","P","K","we","Be","Ue","pe","ue","He","he","I","G","Ae","ge","se","Fe","ee","ke","te","_e","Ce","me","Le","Pe","xe","de","Ee","ce","Re","ye","oe","ne","Oe","re","fe","L","De","ve","Ie","Me","Se","be","Ne","We","Y","Ge","je","$","Ke","Te","be.isHTMLLabelElement","ie","le","ae","Listbox","ListboxButton","Transition","Fragment","ListboxOptions","ListboxOption","CloseIcon","Dialog","TransitionChild","DialogPanel","DialogTitle","Description","labelSizeStyles","Field","Label","Switch","ChevronIcon","HeadlessCombobox","ComboboxInput","ComboboxButton","ComboboxOptions","ComboboxOption","TabGroup","TabList","Tab","defaultIcons"],"mappings":"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","x_google_ignoreList":[5,6,7,8,9,10,11,12,13,14,15,16]}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}