@tribepad/themis 1.0.1 → 1.0.2

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 (301) hide show
  1. package/dist/elements/Accordion/index.js +1 -335
  2. package/dist/elements/Accordion/index.js.map +1 -1
  3. package/dist/elements/Accordion/index.mjs +1 -317
  4. package/dist/elements/Accordion/index.mjs.map +1 -1
  5. package/dist/elements/AlertDialog/AlertDialog.d.ts +43 -0
  6. package/dist/elements/AlertDialog/AlertDialog.d.ts.map +1 -0
  7. package/dist/elements/AlertDialog/AlertDialog.styles.d.ts +15 -0
  8. package/dist/elements/AlertDialog/AlertDialog.styles.d.ts.map +1 -0
  9. package/dist/elements/AlertDialog/AlertDialog.types.d.ts +72 -0
  10. package/dist/elements/AlertDialog/AlertDialog.types.d.ts.map +1 -0
  11. package/dist/elements/AlertDialog/index.d.ts +25 -0
  12. package/dist/elements/AlertDialog/index.d.ts.map +1 -0
  13. package/dist/elements/AlertDialog/index.js +3 -0
  14. package/dist/elements/AlertDialog/index.js.map +1 -0
  15. package/dist/elements/AlertDialog/index.mjs +3 -0
  16. package/dist/elements/AlertDialog/index.mjs.map +1 -0
  17. package/dist/elements/Avatar/index.js +1 -468
  18. package/dist/elements/Avatar/index.js.map +1 -1
  19. package/dist/elements/Avatar/index.mjs +1 -456
  20. package/dist/elements/Avatar/index.mjs.map +1 -1
  21. package/dist/elements/Badge/index.js +1 -243
  22. package/dist/elements/Badge/index.js.map +1 -1
  23. package/dist/elements/Badge/index.mjs +1 -234
  24. package/dist/elements/Badge/index.mjs.map +1 -1
  25. package/dist/elements/Breadcrumbs/index.js +1 -821
  26. package/dist/elements/Breadcrumbs/index.js.map +1 -1
  27. package/dist/elements/Breadcrumbs/index.mjs +1 -810
  28. package/dist/elements/Breadcrumbs/index.mjs.map +1 -1
  29. package/dist/elements/Button/Button.d.ts +26 -81
  30. package/dist/elements/Button/Button.d.ts.map +1 -1
  31. package/dist/elements/Button/Button.styles.d.ts +35 -0
  32. package/dist/elements/Button/Button.styles.d.ts.map +1 -0
  33. package/dist/elements/Button/Button.types.d.ts +20 -8
  34. package/dist/elements/Button/Button.types.d.ts.map +1 -1
  35. package/dist/elements/Button/index.js +1 -288
  36. package/dist/elements/Button/index.js.map +1 -1
  37. package/dist/elements/Button/index.mjs +1 -283
  38. package/dist/elements/Button/index.mjs.map +1 -1
  39. package/dist/elements/ButtonGroup/index.js +1 -237
  40. package/dist/elements/ButtonGroup/index.js.map +1 -1
  41. package/dist/elements/ButtonGroup/index.mjs +1 -222
  42. package/dist/elements/ButtonGroup/index.mjs.map +1 -1
  43. package/dist/elements/Card/index.js +1 -579
  44. package/dist/elements/Card/index.js.map +1 -1
  45. package/dist/elements/Card/index.mjs +1 -560
  46. package/dist/elements/Card/index.mjs.map +1 -1
  47. package/dist/elements/Carousel/Carousel.d.ts +1 -11
  48. package/dist/elements/Carousel/Carousel.d.ts.map +1 -1
  49. package/dist/elements/Carousel/LazyCarousel.d.ts +1 -1
  50. package/dist/elements/Carousel/LazyCarousel.d.ts.map +1 -1
  51. package/dist/elements/Carousel/index.js +1 -789
  52. package/dist/elements/Carousel/index.js.map +1 -1
  53. package/dist/elements/Carousel/index.mjs +1 -786
  54. package/dist/elements/Carousel/index.mjs.map +1 -1
  55. package/dist/elements/Chart/ChartContext.d.ts.map +1 -1
  56. package/dist/elements/Chart/index.js +1 -1842
  57. package/dist/elements/Chart/index.js.map +1 -1
  58. package/dist/elements/Chart/index.mjs +1 -1832
  59. package/dist/elements/Chart/index.mjs.map +1 -1
  60. package/dist/elements/Checkbox/index.js +1 -316
  61. package/dist/elements/Checkbox/index.js.map +1 -1
  62. package/dist/elements/Checkbox/index.mjs +1 -306
  63. package/dist/elements/Checkbox/index.mjs.map +1 -1
  64. package/dist/elements/CheckboxGroup/index.js +1 -455
  65. package/dist/elements/CheckboxGroup/index.js.map +1 -1
  66. package/dist/elements/CheckboxGroup/index.mjs +1 -439
  67. package/dist/elements/CheckboxGroup/index.mjs.map +1 -1
  68. package/dist/elements/Combobox/Combobox.d.ts +56 -0
  69. package/dist/elements/Combobox/Combobox.d.ts.map +1 -0
  70. package/dist/elements/Combobox/Combobox.styles.d.ts +29 -0
  71. package/dist/elements/Combobox/Combobox.styles.d.ts.map +1 -0
  72. package/dist/elements/Combobox/Combobox.types.d.ts +67 -0
  73. package/dist/elements/Combobox/Combobox.types.d.ts.map +1 -0
  74. package/dist/elements/Combobox/index.d.ts +20 -0
  75. package/dist/elements/Combobox/index.d.ts.map +1 -0
  76. package/dist/elements/Combobox/index.js +3 -0
  77. package/dist/elements/Combobox/index.js.map +1 -0
  78. package/dist/elements/Combobox/index.mjs +3 -0
  79. package/dist/elements/Combobox/index.mjs.map +1 -0
  80. package/dist/elements/DatePicker/DatePicker.d.ts +1 -1
  81. package/dist/elements/DatePicker/DatePicker.d.ts.map +1 -1
  82. package/dist/elements/DatePicker/index.js +1 -903
  83. package/dist/elements/DatePicker/index.js.map +1 -1
  84. package/dist/elements/DatePicker/index.mjs +1 -853
  85. package/dist/elements/DatePicker/index.mjs.map +1 -1
  86. package/dist/elements/Dropdown/Dropdown.d.ts +7 -15
  87. package/dist/elements/Dropdown/Dropdown.d.ts.map +1 -1
  88. package/dist/elements/Dropdown/Dropdown.styles.d.ts +22 -0
  89. package/dist/elements/Dropdown/Dropdown.styles.d.ts.map +1 -0
  90. package/dist/elements/Dropdown/index.d.ts +1 -0
  91. package/dist/elements/Dropdown/index.d.ts.map +1 -1
  92. package/dist/elements/Dropdown/index.js +1 -193
  93. package/dist/elements/Dropdown/index.js.map +1 -1
  94. package/dist/elements/Dropdown/index.mjs +1 -184
  95. package/dist/elements/Dropdown/index.mjs.map +1 -1
  96. package/dist/elements/FileField/index.js +1 -1539
  97. package/dist/elements/FileField/index.js.map +1 -1
  98. package/dist/elements/FileField/index.mjs +1 -1507
  99. package/dist/elements/FileField/index.mjs.map +1 -1
  100. package/dist/elements/FormLayout/index.js +1 -170
  101. package/dist/elements/FormLayout/index.js.map +1 -1
  102. package/dist/elements/FormLayout/index.mjs +1 -167
  103. package/dist/elements/FormLayout/index.mjs.map +1 -1
  104. package/dist/elements/Modal/Modal.d.ts +9 -14
  105. package/dist/elements/Modal/Modal.d.ts.map +1 -1
  106. package/dist/elements/Modal/Modal.styles.d.ts +29 -0
  107. package/dist/elements/Modal/Modal.styles.d.ts.map +1 -0
  108. package/dist/elements/Modal/index.d.ts +1 -0
  109. package/dist/elements/Modal/index.d.ts.map +1 -1
  110. package/dist/elements/Modal/index.js +1 -232
  111. package/dist/elements/Modal/index.js.map +1 -1
  112. package/dist/elements/Modal/index.mjs +1 -220
  113. package/dist/elements/Modal/index.mjs.map +1 -1
  114. package/dist/elements/NumberField/index.js +1 -666
  115. package/dist/elements/NumberField/index.js.map +1 -1
  116. package/dist/elements/NumberField/index.mjs +1 -654
  117. package/dist/elements/NumberField/index.mjs.map +1 -1
  118. package/dist/elements/OTPInput/OTPInput.d.ts.map +1 -1
  119. package/dist/elements/OTPInput/index.js +1 -734
  120. package/dist/elements/OTPInput/index.js.map +1 -1
  121. package/dist/elements/OTPInput/index.mjs +1 -732
  122. package/dist/elements/OTPInput/index.mjs.map +1 -1
  123. package/dist/elements/Pagination/Pagination.d.ts +45 -0
  124. package/dist/elements/Pagination/Pagination.d.ts.map +1 -0
  125. package/dist/elements/Pagination/Pagination.styles.d.ts +10 -0
  126. package/dist/elements/Pagination/Pagination.styles.d.ts.map +1 -0
  127. package/dist/elements/Pagination/Pagination.types.d.ts +55 -0
  128. package/dist/elements/Pagination/Pagination.types.d.ts.map +1 -0
  129. package/dist/elements/Pagination/index.d.ts +21 -0
  130. package/dist/elements/Pagination/index.d.ts.map +1 -0
  131. package/dist/elements/Pagination/index.js +3 -0
  132. package/dist/elements/Pagination/index.js.map +1 -0
  133. package/dist/elements/Pagination/index.mjs +3 -0
  134. package/dist/elements/Pagination/index.mjs.map +1 -0
  135. package/dist/elements/Panel/index.js +1 -330
  136. package/dist/elements/Panel/index.js.map +1 -1
  137. package/dist/elements/Panel/index.mjs +1 -323
  138. package/dist/elements/Panel/index.mjs.map +1 -1
  139. package/dist/elements/PasswordField/PasswordField.d.ts +27 -0
  140. package/dist/elements/PasswordField/PasswordField.d.ts.map +1 -0
  141. package/dist/elements/PasswordField/PasswordField.styles.d.ts +32 -0
  142. package/dist/elements/PasswordField/PasswordField.styles.d.ts.map +1 -0
  143. package/dist/elements/PasswordField/PasswordField.types.d.ts +100 -0
  144. package/dist/elements/PasswordField/PasswordField.types.d.ts.map +1 -0
  145. package/dist/elements/PasswordField/index.css +2 -0
  146. package/dist/elements/PasswordField/index.css.map +1 -0
  147. package/dist/elements/PasswordField/index.d.ts +20 -0
  148. package/dist/elements/PasswordField/index.d.ts.map +1 -0
  149. package/dist/elements/PasswordField/index.js +3 -0
  150. package/dist/elements/PasswordField/index.js.map +1 -0
  151. package/dist/elements/PasswordField/index.mjs +3 -0
  152. package/dist/elements/PasswordField/index.mjs.map +1 -0
  153. package/dist/elements/Progress/index.js +1 -187
  154. package/dist/elements/Progress/index.js.map +1 -1
  155. package/dist/elements/Progress/index.mjs +1 -181
  156. package/dist/elements/Progress/index.mjs.map +1 -1
  157. package/dist/elements/RadioGroup/index.js +1 -369
  158. package/dist/elements/RadioGroup/index.js.map +1 -1
  159. package/dist/elements/RadioGroup/index.mjs +1 -359
  160. package/dist/elements/RadioGroup/index.mjs.map +1 -1
  161. package/dist/elements/Resizable/index.js +1 -1580
  162. package/dist/elements/Resizable/index.js.map +1 -1
  163. package/dist/elements/Resizable/index.mjs +1 -1566
  164. package/dist/elements/Resizable/index.mjs.map +1 -1
  165. package/dist/elements/SearchField/SearchField.d.ts +27 -0
  166. package/dist/elements/SearchField/SearchField.d.ts.map +1 -0
  167. package/dist/elements/SearchField/SearchField.styles.d.ts +32 -0
  168. package/dist/elements/SearchField/SearchField.styles.d.ts.map +1 -0
  169. package/dist/elements/SearchField/SearchField.types.d.ts +45 -0
  170. package/dist/elements/SearchField/SearchField.types.d.ts.map +1 -0
  171. package/dist/elements/SearchField/index.css +2 -0
  172. package/dist/elements/SearchField/index.css.map +1 -0
  173. package/dist/elements/SearchField/index.d.ts +21 -0
  174. package/dist/elements/SearchField/index.d.ts.map +1 -0
  175. package/dist/elements/SearchField/index.js +3 -0
  176. package/dist/elements/SearchField/index.js.map +1 -0
  177. package/dist/elements/SearchField/index.mjs +3 -0
  178. package/dist/elements/SearchField/index.mjs.map +1 -0
  179. package/dist/elements/Select/Select.d.ts +19 -48
  180. package/dist/elements/Select/Select.d.ts.map +1 -1
  181. package/dist/elements/Select/Select.styles.d.ts +55 -0
  182. package/dist/elements/Select/Select.styles.d.ts.map +1 -0
  183. package/dist/elements/Select/index.js +1 -589
  184. package/dist/elements/Select/index.js.map +1 -1
  185. package/dist/elements/Select/index.mjs +1 -582
  186. package/dist/elements/Select/index.mjs.map +1 -1
  187. package/dist/elements/Skeleton/index.js +1 -82
  188. package/dist/elements/Skeleton/index.js.map +1 -1
  189. package/dist/elements/Skeleton/index.mjs +1 -78
  190. package/dist/elements/Skeleton/index.mjs.map +1 -1
  191. package/dist/elements/Switch/index.js +1 -179
  192. package/dist/elements/Switch/index.js.map +1 -1
  193. package/dist/elements/Switch/index.mjs +1 -173
  194. package/dist/elements/Switch/index.mjs.map +1 -1
  195. package/dist/elements/Table/Table.d.ts +3 -24
  196. package/dist/elements/Table/Table.d.ts.map +1 -1
  197. package/dist/elements/Table/Table.styles.d.ts +24 -0
  198. package/dist/elements/Table/Table.styles.d.ts.map +1 -0
  199. package/dist/elements/Table/index.js +1 -595
  200. package/dist/elements/Table/index.js.map +1 -1
  201. package/dist/elements/Table/index.mjs +1 -578
  202. package/dist/elements/Table/index.mjs.map +1 -1
  203. package/dist/elements/Tabs/index.js +1 -337
  204. package/dist/elements/Tabs/index.js.map +1 -1
  205. package/dist/elements/Tabs/index.mjs +1 -320
  206. package/dist/elements/Tabs/index.mjs.map +1 -1
  207. package/dist/elements/TextField/TextField.d.ts +6 -42
  208. package/dist/elements/TextField/TextField.d.ts.map +1 -1
  209. package/dist/elements/TextField/TextField.hooks.d.ts +63 -0
  210. package/dist/elements/TextField/TextField.hooks.d.ts.map +1 -0
  211. package/dist/elements/TextField/TextField.icons.d.ts +19 -0
  212. package/dist/elements/TextField/TextField.icons.d.ts.map +1 -0
  213. package/dist/elements/TextField/TextField.styles.d.ts +37 -0
  214. package/dist/elements/TextField/TextField.styles.d.ts.map +1 -0
  215. package/dist/elements/TextField/TextField.types.d.ts +3 -0
  216. package/dist/elements/TextField/TextField.types.d.ts.map +1 -1
  217. package/dist/elements/TextField/index.css +1 -22
  218. package/dist/elements/TextField/index.css.map +1 -1
  219. package/dist/elements/TextField/index.js +1 -902
  220. package/dist/elements/TextField/index.js.map +1 -1
  221. package/dist/elements/TextField/index.mjs +1 -882
  222. package/dist/elements/TextField/index.mjs.map +1 -1
  223. package/dist/elements/TimeField/index.js +1 -254
  224. package/dist/elements/TimeField/index.js.map +1 -1
  225. package/dist/elements/TimeField/index.mjs +1 -238
  226. package/dist/elements/TimeField/index.mjs.map +1 -1
  227. package/dist/elements/Toast/Toast.d.ts +0 -22
  228. package/dist/elements/Toast/Toast.d.ts.map +1 -1
  229. package/dist/elements/Toast/index.js +1 -737
  230. package/dist/elements/Toast/index.js.map +1 -1
  231. package/dist/elements/Toast/index.mjs +1 -724
  232. package/dist/elements/Toast/index.mjs.map +1 -1
  233. package/dist/elements/Tooltip/index.js +1 -323
  234. package/dist/elements/Tooltip/index.js.map +1 -1
  235. package/dist/elements/Tooltip/index.mjs +1 -310
  236. package/dist/elements/Tooltip/index.mjs.map +1 -1
  237. package/dist/elements/index.css +1 -22
  238. package/dist/elements/index.css.map +1 -1
  239. package/dist/elements/index.d.ts +13 -1
  240. package/dist/elements/index.d.ts.map +1 -1
  241. package/dist/elements/index.js +1 -12455
  242. package/dist/elements/index.js.map +1 -1
  243. package/dist/elements/index.mjs +1 -12233
  244. package/dist/elements/index.mjs.map +1 -1
  245. package/dist/index.css +1 -22
  246. package/dist/index.css.map +1 -1
  247. package/dist/index.js +2 -12490
  248. package/dist/index.js.map +1 -1
  249. package/dist/index.mjs +2 -12262
  250. package/dist/index.mjs.map +1 -1
  251. package/dist/schemas/index.js +2 -54
  252. package/dist/schemas/index.js.map +1 -1
  253. package/dist/schemas/index.mjs +2 -48
  254. package/dist/schemas/index.mjs.map +1 -1
  255. package/dist/styles/defaults.css +151 -0
  256. package/dist/styles/index.js +1 -166
  257. package/dist/styles/index.js.map +1 -1
  258. package/dist/styles/index.mjs +1 -129
  259. package/dist/styles/index.mjs.map +1 -1
  260. package/dist/utils/index.js +1 -12
  261. package/dist/utils/index.js.map +1 -1
  262. package/dist/utils/index.mjs +1 -10
  263. package/dist/utils/index.mjs.map +1 -1
  264. package/package.json +9 -7
  265. package/src/elements/Accordion/Accordion.stories.tsx +1 -1
  266. package/src/elements/AlertDialog/AlertDialog.stories.tsx +124 -0
  267. package/src/elements/Avatar/Avatar.stories.tsx +1 -1
  268. package/src/elements/Badge/Badge.stories.tsx +1 -1
  269. package/src/elements/Breadcrumbs/Breadcrumbs.stories.tsx +1 -1
  270. package/src/elements/Button/Button.stories.tsx +1 -1
  271. package/src/elements/ButtonGroup/ButtonGroup.stories.tsx +1 -1
  272. package/src/elements/Card/Card.stories.tsx +1 -1
  273. package/src/elements/Carousel/Carousel.stories.tsx +1 -1
  274. package/src/elements/Chart/Chart.stories.tsx +1 -1
  275. package/src/elements/Checkbox/Checkbox.stories.tsx +1 -1
  276. package/src/elements/CheckboxGroup/CheckboxGroup.stories.tsx +1 -1
  277. package/src/elements/Combobox/Combobox.stories.tsx +133 -0
  278. package/src/elements/DatePicker/DatePicker.stories.tsx +1 -1
  279. package/src/elements/Dropdown/Dropdown.stories.tsx +1 -1
  280. package/src/elements/FileField/FileField.stories.tsx +1 -1
  281. package/src/elements/FileField/FileProgress.stories.tsx +1 -1
  282. package/src/elements/FormLayout/FormLayout.stories.tsx +1 -1
  283. package/src/elements/Modal/Modal.stories.tsx +1 -1
  284. package/src/elements/NumberField/NumberField.stories.tsx +1 -1
  285. package/src/elements/OTPInput/OTPInput.stories.tsx +1 -1
  286. package/src/elements/Pagination/Pagination.stories.tsx +203 -0
  287. package/src/elements/Panel/Panel.stories.tsx +1 -1
  288. package/src/elements/PasswordField/PasswordField.stories.tsx +167 -0
  289. package/src/elements/Progress/Progress.stories.tsx +1 -1
  290. package/src/elements/RadioGroup/RadioGroup.stories.tsx +1 -1
  291. package/src/elements/Resizable/Resizable.stories.tsx +1 -1
  292. package/src/elements/SearchField/SearchField.stories.tsx +146 -0
  293. package/src/elements/Select/Select.stories.tsx +1 -1
  294. package/src/elements/Skeleton/Skeleton.stories.tsx +1 -1
  295. package/src/elements/Switch/Switch.stories.tsx +1 -1
  296. package/src/elements/Table/Table.stories.tsx +1 -1
  297. package/src/elements/Tabs/Tabs.stories.tsx +1 -1
  298. package/src/elements/TextField/TextField.stories.tsx +1 -1
  299. package/src/elements/TimeField/TimeField.stories.tsx +1 -1
  300. package/src/elements/Toast/Toast.stories.tsx +1 -1
  301. package/src/elements/Tooltip/Tooltip.stories.tsx +1 -1
@@ -1,584 +1,3 @@
1
1
  "use client";
2
- import { forwardRef, useId, Children, useMemo, isValidElement } from 'react';
3
- import { Select as Select$1, Label, Text, Button, SelectValue, FieldError, Popover, ListBox, ListBoxItem, Header, ListBoxSection } from 'react-aria-components';
4
- import { cva } from 'class-variance-authority';
5
- import { Loader2, ChevronDown, AlertCircle, CheckSquare, Check } from 'lucide-react';
6
- import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
7
- import { z } from 'zod';
8
-
9
- // src/elements/Select/Select.tsx
10
- var selectTriggerVariants = cva(
11
- [
12
- // Base styles
13
- "flex",
14
- "w-full",
15
- "items-center",
16
- "justify-between",
17
- "rounded-md",
18
- "border",
19
- "bg-[var(--content-background)]",
20
- "text-[var(--content-foreground)]",
21
- "transition-colors",
22
- "duration-200",
23
- "outline-none",
24
- // Focus ring (WCAG 2.2 AAA - 7:1 contrast)
25
- "focus-visible:ring-2",
26
- "focus-visible:ring-[var(--ring)]",
27
- "focus-visible:ring-offset-2",
28
- // Hover state
29
- "hover:bg-[var(--accent)]/10",
30
- // Disabled state
31
- "disabled:cursor-not-allowed",
32
- "disabled:opacity-50",
33
- // Loading state
34
- "data-[loading=true]:cursor-wait",
35
- // Truncate text
36
- "truncate"
37
- ],
38
- {
39
- variants: {
40
- size: {
41
- // All sizes use 44px minimum touch target for WCAG 2.2 AAA compliance
42
- // Visual height varies but touch area remains accessible
43
- sm: "h-9 px-3 text-sm min-h-[44px]",
44
- default: "h-11 px-4 text-base min-h-[44px]",
45
- lg: "h-14 px-5 text-lg min-h-[44px]"
46
- },
47
- isInvalid: {
48
- true: "border-[var(--destructive)]",
49
- false: "border-[var(--input)] hover:border-[var(--input)]/80"
50
- }
51
- },
52
- defaultVariants: {
53
- size: "default",
54
- isInvalid: false
55
- }
56
- }
57
- );
58
- var selectItemVariants = cva(
59
- [
60
- // Base styles
61
- "relative",
62
- "flex",
63
- "w-full",
64
- "cursor-pointer",
65
- "select-none",
66
- "items-center",
67
- "rounded-sm",
68
- "outline-none",
69
- "transition-colors",
70
- // Padding for checkmark icon (left side)
71
- "pl-8",
72
- "pr-2",
73
- // Hover state
74
- "hover:bg-[var(--accent)]",
75
- "hover:text-[var(--accent-foreground)]",
76
- // Focus state
77
- "focus:bg-[var(--accent)]",
78
- "focus:text-[var(--accent-foreground)]",
79
- // Selected state
80
- "data-[selected=true]:bg-[var(--accent)]",
81
- "data-[selected=true]:text-[var(--accent-foreground)]",
82
- // Disabled state
83
- "data-[disabled=true]:pointer-events-none",
84
- "data-[disabled=true]:opacity-50",
85
- "data-[disabled=true]:text-[var(--menu-muted)]"
86
- ],
87
- {
88
- variants: {
89
- size: {
90
- // All sizes use 44px minimum touch target for WCAG 2.2 AAA compliance
91
- sm: "h-9 py-1.5 text-sm min-h-[44px]",
92
- default: "h-11 py-2 text-base min-h-[44px]",
93
- lg: "h-14 py-3 text-lg min-h-[44px]"
94
- }
95
- },
96
- defaultVariants: {
97
- size: "default"
98
- }
99
- }
100
- );
101
- var selectPopoverVariants = cva(
102
- [
103
- // Base styles - use menu tokens to match Dropdown styling
104
- "z-50",
105
- "w-[--trigger-width]",
106
- "rounded-md",
107
- "border",
108
- "border-[var(--menu-border)]",
109
- "bg-[var(--menu-background)]",
110
- "text-[var(--menu-foreground)]",
111
- "shadow-md",
112
- "outline-none",
113
- "overflow-auto",
114
- // Animations
115
- "data-[entering]:animate-in",
116
- "data-[entering]:fade-in-0",
117
- "data-[entering]:zoom-in-95",
118
- "data-[exiting]:animate-out",
119
- "data-[exiting]:fade-out-0",
120
- "data-[exiting]:zoom-out-95"
121
- ],
122
- {
123
- variants: {
124
- size: {
125
- sm: "max-h-[200px] p-1",
126
- default: "max-h-[300px] p-1",
127
- lg: "max-h-[400px] p-1"
128
- }
129
- },
130
- defaultVariants: {
131
- size: "default"
132
- }
133
- }
134
- );
135
- var selectSectionVariants = cva(
136
- [
137
- "px-2",
138
- "py-1.5",
139
- "text-xs",
140
- "font-semibold",
141
- "text-[var(--menu-muted)]",
142
- "uppercase",
143
- "tracking-wider"
144
- ],
145
- {
146
- variants: {
147
- size: {
148
- sm: "px-2 py-1 text-[10px]",
149
- default: "px-2 py-1.5 text-xs",
150
- lg: "px-3 py-2 text-sm"
151
- }
152
- },
153
- defaultVariants: {
154
- size: "default"
155
- }
156
- }
157
- );
158
- var selectErrorVariants = cva(
159
- [
160
- "flex",
161
- "items-center",
162
- "gap-1.5",
163
- "text-sm",
164
- "font-medium",
165
- "text-[var(--destructive)]",
166
- "mt-1.5"
167
- ],
168
- {
169
- variants: {
170
- size: {
171
- sm: "text-xs mt-1",
172
- default: "text-sm mt-1.5",
173
- lg: "text-base mt-2"
174
- }
175
- },
176
- defaultVariants: {
177
- size: "default"
178
- }
179
- }
180
- );
181
- var SelectRoot = forwardRef(
182
- ({
183
- // Display props
184
- label,
185
- placeholder,
186
- description,
187
- // Selection props
188
- value,
189
- defaultValue,
190
- // State props
191
- isOpen,
192
- isDisabled = false,
193
- isRequired = false,
194
- disabledKeys,
195
- // Validation props
196
- validate,
197
- validationBehavior = "aria",
198
- errorMessage,
199
- // Loading state
200
- isLoading = false,
201
- emptyStateMessage,
202
- // Form integration
203
- name,
204
- // Size variant
205
- size = "default",
206
- // Event handlers
207
- onChange,
208
- onOpenChange,
209
- // Standard props
210
- className,
211
- children,
212
- ...props
213
- }, ref) => {
214
- const labelId = useId();
215
- const descriptionId = useId();
216
- const errorId = useId();
217
- const childCount = Children.count(children);
218
- if (childCount > 1e3) {
219
- console.warn(
220
- "Select has >1000 items. Consider using Autocomplete component for better performance."
221
- );
222
- }
223
- const isInvalid = Boolean(errorMessage);
224
- return /* @__PURE__ */ jsxs(
225
- Select$1,
226
- {
227
- value,
228
- defaultValue,
229
- onChange: (key) => {
230
- if (onChange) {
231
- onChange(key);
232
- }
233
- },
234
- placeholder,
235
- disabledKeys,
236
- isOpen,
237
- onOpenChange,
238
- isDisabled: isDisabled || isLoading,
239
- isRequired,
240
- name,
241
- validate,
242
- validationBehavior,
243
- isInvalid,
244
- className,
245
- ...props,
246
- children: [
247
- /* @__PURE__ */ jsxs(Label, { id: labelId, className: "text-sm font-medium text-[var(--content-foreground)]", children: [
248
- label,
249
- isRequired && /* @__PURE__ */ jsx("span", { className: "text-[var(--destructive)] ml-1", children: "*" })
250
- ] }),
251
- description && /* @__PURE__ */ jsx(Text, { id: descriptionId, slot: "description", className: "text-sm text-[var(--menu-muted)] mt-1", children: description }),
252
- /* @__PURE__ */ jsxs(
253
- Button,
254
- {
255
- ref,
256
- className: selectTriggerVariants({ size, isInvalid }),
257
- "aria-labelledby": labelId,
258
- "aria-describedby": description ? descriptionId : errorMessage ? errorId : void 0,
259
- "data-loading": isLoading,
260
- ...isRequired && { "aria-required": "true" },
261
- ...isLoading && { "aria-busy": "true" },
262
- ...(isDisabled || isLoading) && { "aria-disabled": "true" },
263
- children: [
264
- /* @__PURE__ */ jsx(SelectValue, { className: "flex-1 text-left truncate" }),
265
- isLoading ? /* @__PURE__ */ jsx(Loader2, { className: "h-4 w-4 animate-spin text-[var(--menu-muted)]", "aria-hidden": "true" }) : /* @__PURE__ */ jsx(ChevronDown, { className: "h-4 w-4 text-[var(--menu-muted)]", "aria-hidden": "true" })
266
- ]
267
- }
268
- ),
269
- /* @__PURE__ */ jsx(FieldError, { id: errorId, className: selectErrorVariants({ size }), children: ({ validationErrors }) => {
270
- const displayError = errorMessage || validationErrors.join(" ");
271
- return displayError ? /* @__PURE__ */ jsxs(Fragment, { children: [
272
- /* @__PURE__ */ jsx(AlertCircle, { className: "h-4 w-4", "aria-hidden": "true" }),
273
- displayError
274
- ] }) : null;
275
- } }),
276
- /* @__PURE__ */ jsx(Popover, { className: selectPopoverVariants({ size }), children: /* @__PURE__ */ jsxs(ListBox, { className: "outline-none", children: [
277
- isLoading && childCount > 0 && /* @__PURE__ */ jsx(Fragment, { children: Array.from({ length: 3 }).map((_, i) => /* @__PURE__ */ jsx(
278
- "div",
279
- {
280
- className: "h-11 px-4 py-2",
281
- children: /* @__PURE__ */ jsx("div", { className: "h-4 bg-[var(--accent-background)] rounded animate-pulse" })
282
- },
283
- `skeleton-${i}`
284
- )) }),
285
- !isLoading && /* @__PURE__ */ jsxs(Fragment, { children: [
286
- children,
287
- childCount === 0 && /* @__PURE__ */ jsx(
288
- ListBoxItem,
289
- {
290
- id: "__empty__",
291
- textValue: "empty",
292
- isDisabled: true,
293
- className: "py-6 text-center text-sm text-[var(--menu-muted)] cursor-default pointer-events-none",
294
- children: /* @__PURE__ */ jsx("span", { role: "status", children: emptyStateMessage || "No options available" })
295
- }
296
- )
297
- ] })
298
- ] }) })
299
- ]
300
- }
301
- );
302
- }
303
- );
304
- SelectRoot.displayName = "Select";
305
- var MultiSelectRoot = forwardRef(
306
- ({
307
- // Display props
308
- label,
309
- placeholder,
310
- description,
311
- // Selection props
312
- value,
313
- defaultValue,
314
- selectionMode: _selectionMode = "multiple",
315
- // State props
316
- isOpen,
317
- isDisabled = false,
318
- isRequired = false,
319
- disabledKeys,
320
- // Validation props
321
- validate,
322
- validationBehavior = "aria",
323
- errorMessage,
324
- // Loading state
325
- isLoading = false,
326
- emptyStateMessage,
327
- // Form integration
328
- name,
329
- // Size variant
330
- size = "default",
331
- // Event handlers
332
- onChange,
333
- onOpenChange,
334
- // Standard props
335
- className,
336
- children,
337
- ...props
338
- }, ref) => {
339
- const labelId = useId();
340
- const descriptionId = useId();
341
- const errorId = useId();
342
- const childCount = Children.count(children);
343
- if (childCount > 1e3) {
344
- console.warn(
345
- "Select has >1000 items. Consider using Autocomplete component for better performance."
346
- );
347
- }
348
- const isInvalid = Boolean(errorMessage);
349
- const valueToLabelMap = useMemo(() => {
350
- const map = /* @__PURE__ */ new Map();
351
- const processChildren = (nodes) => {
352
- Children.forEach(nodes, (child) => {
353
- if (isValidElement(child)) {
354
- const element = child;
355
- if (element.type === SelectItem || element.props?.value) {
356
- const itemValue = element.props.value;
357
- const itemChildren = element.props.children;
358
- if (itemValue && typeof itemChildren === "string") {
359
- map.set(itemValue, itemChildren);
360
- }
361
- }
362
- if (element.props?.children) {
363
- processChildren(element.props.children);
364
- }
365
- }
366
- });
367
- };
368
- processChildren(children);
369
- return map;
370
- }, [children]);
371
- const displayValue = useMemo(() => {
372
- if (!value || !Array.isArray(value) || value.length === 0) {
373
- return placeholder || "";
374
- }
375
- if (value.length <= 2) {
376
- const labels = value.map((v) => valueToLabelMap.get(v) || v);
377
- return labels.join(", ");
378
- }
379
- return `${value.length} items selected`;
380
- }, [value, valueToLabelMap, placeholder]);
381
- return /* @__PURE__ */ jsxs(
382
- Select$1,
383
- {
384
- value,
385
- defaultValue,
386
- onChange: (keys) => {
387
- if (onChange) {
388
- onChange(keys);
389
- }
390
- },
391
- selectionMode: "multiple",
392
- disabledKeys,
393
- isOpen,
394
- onOpenChange,
395
- isDisabled: isDisabled || isLoading,
396
- isRequired,
397
- name,
398
- validate,
399
- validationBehavior,
400
- isInvalid,
401
- className,
402
- ...props,
403
- children: [
404
- /* @__PURE__ */ jsxs(Label, { id: labelId, className: "text-sm font-medium text-[var(--content-foreground)]", children: [
405
- label,
406
- isRequired && /* @__PURE__ */ jsx("span", { className: "text-[var(--destructive)] ml-1", children: "*" })
407
- ] }),
408
- description && /* @__PURE__ */ jsx(Text, { id: descriptionId, slot: "description", className: "text-sm text-[var(--menu-muted)] mt-1", children: description }),
409
- /* @__PURE__ */ jsxs(
410
- Button,
411
- {
412
- ref,
413
- className: selectTriggerVariants({ size, isInvalid }),
414
- "aria-labelledby": labelId,
415
- "aria-describedby": description ? descriptionId : errorMessage ? errorId : void 0,
416
- "data-loading": isLoading,
417
- ...isRequired && { "aria-required": "true" },
418
- ...isLoading && { "aria-busy": "true" },
419
- ...(isDisabled || isLoading) && { "aria-disabled": "true" },
420
- children: [
421
- /* @__PURE__ */ jsx("span", { className: "flex-1 text-left truncate", children: displayValue }),
422
- isLoading ? /* @__PURE__ */ jsx(Loader2, { className: "h-4 w-4 animate-spin text-[var(--menu-muted)]", "aria-hidden": "true" }) : /* @__PURE__ */ jsx(ChevronDown, { className: "h-4 w-4 text-[var(--menu-muted)]", "aria-hidden": "true" })
423
- ]
424
- }
425
- ),
426
- /* @__PURE__ */ jsx(FieldError, { id: errorId, className: selectErrorVariants({ size }), children: ({ validationErrors }) => {
427
- const displayError = errorMessage || validationErrors.join(" ");
428
- return displayError ? /* @__PURE__ */ jsxs(Fragment, { children: [
429
- /* @__PURE__ */ jsx(AlertCircle, { className: "h-4 w-4", "aria-hidden": "true" }),
430
- displayError
431
- ] }) : null;
432
- } }),
433
- /* @__PURE__ */ jsx(Popover, { className: selectPopoverVariants({ size }), children: /* @__PURE__ */ jsxs(ListBox, { className: "outline-none", children: [
434
- isLoading && childCount > 0 && /* @__PURE__ */ jsx(Fragment, { children: Array.from({ length: 3 }).map((_, i) => /* @__PURE__ */ jsx("div", { className: "h-11 px-4 py-2", children: /* @__PURE__ */ jsx("div", { className: "h-4 bg-[var(--accent-background)] rounded animate-pulse" }) }, `skeleton-${i}`)) }),
435
- !isLoading && /* @__PURE__ */ jsxs(Fragment, { children: [
436
- children,
437
- childCount === 0 && /* @__PURE__ */ jsx(
438
- ListBoxItem,
439
- {
440
- id: "__empty__",
441
- textValue: "empty",
442
- isDisabled: true,
443
- className: "py-6 text-center text-sm text-[var(--menu-muted)] cursor-default pointer-events-none",
444
- children: /* @__PURE__ */ jsx("span", { role: "status", children: emptyStateMessage || "No options available" })
445
- }
446
- )
447
- ] })
448
- ] }) })
449
- ]
450
- }
451
- );
452
- }
453
- );
454
- MultiSelectRoot.displayName = "MultiSelect";
455
- function SelectItem({ children, textValue, value, isDisabled = false, className, ...props }) {
456
- if (!textValue && typeof children !== "string") {
457
- const message = "Select.Item with custom children requires textValue prop for accessibility";
458
- if (process.env.NODE_ENV === "development") {
459
- throw new Error(message);
460
- } else {
461
- console.warn(message);
462
- }
463
- }
464
- return /* @__PURE__ */ jsx(
465
- ListBoxItem,
466
- {
467
- id: value,
468
- textValue: textValue || (typeof children === "string" ? children : void 0),
469
- className: `${selectItemVariants({ size: "default" })} ${className || ""}`,
470
- isDisabled,
471
- ...props,
472
- children: ({ isSelected, selectionMode, isDisabled: itemDisabled }) => /* @__PURE__ */ jsxs(Fragment, { children: [
473
- selectionMode === "multiple" ? /* @__PURE__ */ jsx(
474
- CheckSquare,
475
- {
476
- className: `absolute left-2 h-4 w-4 ${isSelected ? "visible" : "invisible"}`,
477
- "aria-hidden": "true"
478
- }
479
- ) : isSelected && /* @__PURE__ */ jsx(Check, { className: "absolute left-2 h-4 w-4", "aria-hidden": "true" }),
480
- /* @__PURE__ */ jsx("span", { className: itemDisabled ? "text-[var(--menu-muted)]" : "", children })
481
- ] })
482
- }
483
- );
484
- }
485
- SelectItem.displayName = "SelectItem";
486
- function SelectSection({ children, className, ...props }) {
487
- return /* @__PURE__ */ jsx(ListBoxSection, { className: `border-t border-[var(--border)] first:border-t-0 ${className || ""}`, ...props, children });
488
- }
489
- SelectSection.displayName = "SelectSection";
490
- function SelectHeader({ children, className, ...props }) {
491
- return /* @__PURE__ */ jsx(Header, { className: `${selectSectionVariants({ size: "default" })} ${className || ""}`, ...props, children });
492
- }
493
- SelectHeader.displayName = "SelectHeader";
494
- var Select = Object.assign(SelectRoot, {
495
- Item: SelectItem,
496
- Section: SelectSection,
497
- Header: SelectHeader
498
- });
499
- var MultiSelect = Object.assign(MultiSelectRoot, {
500
- Item: SelectItem,
501
- Section: SelectSection,
502
- Header: SelectHeader
503
- });
504
- var BaseComponentPropsSchema = z.object({
505
- // Styling
506
- className: z.string().optional(),
507
- // React
508
- children: z.any().optional(),
509
- // ReactNode not directly supported by Zod
510
- id: z.string().optional(),
511
- // Accessibility (WCAG 2.2 AA requirements)
512
- "aria-label": z.string().optional(),
513
- "aria-labelledby": z.string().optional(),
514
- "aria-describedby": z.string().optional(),
515
- "aria-live": z.enum(["off", "polite", "assertive"]).optional(),
516
- "aria-hidden": z.boolean().optional(),
517
- // Testing & Development
518
- "data-testid": z.string().optional()
519
- });
520
-
521
- // src/elements/Select/Select.types.ts
522
- var SelectSizeSchema = z.enum(["sm", "default", "lg"]);
523
- var SelectionModeSchema = z.enum(["single", "multiple"]);
524
- var ValidationBehaviorSchema = z.enum(["native", "aria"]);
525
- var SelectPropsSchema = BaseComponentPropsSchema.extend({
526
- // Display props (US-1)
527
- label: z.string(),
528
- // Required for accessibility
529
- placeholder: z.string().optional(),
530
- description: z.string().optional(),
531
- // Selection props (US-1, US-6)
532
- value: z.union([z.string(), z.array(z.string())]).optional(),
533
- defaultValue: z.union([z.string(), z.array(z.string())]).optional(),
534
- selectionMode: SelectionModeSchema.optional().default("single"),
535
- // State props (US-1, US-5)
536
- isOpen: z.boolean().optional(),
537
- isDisabled: z.boolean().optional().default(false),
538
- isRequired: z.boolean().optional().default(false),
539
- disabledKeys: z.array(z.string()).optional(),
540
- // Validation props (US-4)
541
- validate: z.custom().optional(),
542
- validationBehavior: ValidationBehaviorSchema.optional().default("aria"),
543
- errorMessage: z.string().optional(),
544
- // Loading state (US-7)
545
- isLoading: z.boolean().optional().default(false),
546
- emptyStateMessage: z.string().optional(),
547
- // Form integration (US-10)
548
- name: z.string().optional(),
549
- // Size variant (US-9)
550
- size: SelectSizeSchema.optional().default("default"),
551
- // Event handlers (US-1)
552
- onChange: z.custom().optional(),
553
- onOpenChange: z.custom().optional(),
554
- // Children (Select.Item, Select.Section components)
555
- children: z.custom()
556
- });
557
- var SelectItemPropsSchema = BaseComponentPropsSchema.extend({
558
- // Item value (required)
559
- value: z.string(),
560
- // Text value for typeahead and accessibility (required for custom children)
561
- textValue: z.string().optional(),
562
- // Disabled state
563
- isDisabled: z.boolean().optional().default(false),
564
- // Item content
565
- children: z.custom(),
566
- // Optional className for custom styling
567
- className: z.string().optional()
568
- });
569
- var SelectSectionPropsSchema = BaseComponentPropsSchema.extend({
570
- // Section content (typically Select.Header + Select.Item components)
571
- children: z.custom(),
572
- // Optional className for custom styling
573
- className: z.string().optional()
574
- });
575
- var SelectHeaderPropsSchema = BaseComponentPropsSchema.extend({
576
- // Header text
577
- children: z.custom(),
578
- // Optional className for header styling
579
- className: z.string().optional()
580
- });
581
-
582
- export { MultiSelect, Select, SelectHeaderPropsSchema, SelectItemPropsSchema, SelectPropsSchema, SelectSectionPropsSchema };
583
- //# sourceMappingURL=index.mjs.map
2
+ import {forwardRef,Children,useMemo,memo,useId,isValidElement}from'react';import {SelectValue,ListBoxItem,Select,Label,Text,Button,FieldError,Popover,ListBox,Header,ListBoxSection}from'react-aria-components';import {CheckSquare,Check,Loader2,ChevronDown,AlertCircle}from'lucide-react';import {cva}from'class-variance-authority';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {z}from'zod';var q=cva(["flex","w-full","items-center","justify-between","rounded-md","border","bg-[var(--content-background)]","text-[var(--content-foreground)]","transition-colors","duration-200","outline-none","focus-visible:ring-2","focus-visible:ring-[var(--ring)]","focus-visible:ring-offset-2","hover:bg-[var(--accent)]/10","disabled:cursor-not-allowed","disabled:opacity-50","data-[loading=true]:cursor-wait","truncate"],{variants:{size:{sm:"h-9 px-3 text-sm min-h-[44px]",default:"h-11 px-4 text-base min-h-[44px]",lg:"h-14 px-5 text-lg min-h-[44px]"},isInvalid:{true:"border-[var(--destructive)]",false:"border-[var(--input)] hover:border-[var(--input)]/80"}},defaultVariants:{size:"default",isInvalid:false}}),F=cva(["relative","flex","w-full","cursor-pointer","select-none","items-center","rounded-sm","outline-none","transition-colors","pl-8","pr-2","hover:bg-[var(--accent)]","hover:text-[var(--accent-foreground)]","focus:bg-[var(--accent)]","focus:text-[var(--accent-foreground)]","data-[selected=true]:bg-[var(--accent)]","data-[selected=true]:text-[var(--accent-foreground)]","data-[disabled=true]:pointer-events-none","data-[disabled=true]:opacity-50","data-[disabled=true]:text-[var(--menu-muted)]"],{variants:{size:{sm:"h-9 py-1.5 text-sm min-h-[44px]",default:"h-11 py-2 text-base min-h-[44px]",lg:"h-14 py-3 text-lg min-h-[44px]"}},defaultVariants:{size:"default"}}),K=cva(["z-50","w-[--trigger-width]","rounded-md","border","border-[var(--menu-border)]","bg-[var(--menu-background)]","text-[var(--menu-foreground)]","shadow-md","outline-none","overflow-auto","data-[entering]:animate-in","data-[entering]:fade-in-0","data-[entering]:zoom-in-95","data-[exiting]:animate-out","data-[exiting]:fade-out-0","data-[exiting]:zoom-out-95"],{variants:{size:{sm:"max-h-[200px] p-1",default:"max-h-[300px] p-1",lg:"max-h-[400px] p-1"}},defaultVariants:{size:"default"}}),G=cva(["px-2","py-1.5","text-xs","font-semibold","text-[var(--menu-muted)]","uppercase","tracking-wider"],{variants:{size:{sm:"px-2 py-1 text-[10px]",default:"px-2 py-1.5 text-xs",lg:"px-3 py-2 text-sm"}},defaultVariants:{size:"default"}}),J=cva(["flex","items-center","gap-1.5","text-sm","font-medium","text-[var(--destructive)]","mt-1.5"],{variants:{size:{sm:"text-xs mt-1",default:"text-sm mt-1.5",lg:"text-base mt-2"}},defaultVariants:{size:"default"}});function X({ariaSelectProps:s,triggerContent:r,triggerRef:n,label:o,description:c,isRequired:u,isDisabled:d,isLoading:a,errorMessage:i,size:p,emptyStateMessage:N,childCount:b,children:v}){let f=useId(),y=useId(),h=useId(),S=!!i;return jsxs(Select,{...s,isInvalid:S,children:[jsxs(Label,{id:f,className:"text-sm font-medium text-[var(--content-foreground)]",children:[o,u&&jsx("span",{className:"text-[var(--destructive)] ml-1",children:"*"})]}),c&&jsx(Text,{id:y,slot:"description",className:"text-sm text-[var(--menu-muted)] mt-1",children:c}),jsxs(Button,{ref:n,className:q({size:p,isInvalid:S}),"aria-labelledby":f,"aria-describedby":c?y:i?h:void 0,"data-loading":a,...u&&{"aria-required":"true"},...a&&{"aria-busy":"true"},...(d||a)&&{"aria-disabled":"true"},children:[r,a?jsx(Loader2,{className:"h-4 w-4 animate-spin text-[var(--menu-muted)]","aria-hidden":"true"}):jsx(ChevronDown,{className:"h-4 w-4 text-[var(--menu-muted)]","aria-hidden":"true"})]}),jsx(FieldError,{id:h,className:J({size:p}),children:({validationErrors:g})=>{let m=i||g.join(" ");return m?jsxs(Fragment,{children:[jsx(AlertCircle,{className:"h-4 w-4","aria-hidden":"true"}),m]}):null}}),jsx(Popover,{className:K({size:p}),children:jsxs(ListBox,{className:"outline-none",children:[a&&b>0&&jsx(Fragment,{children:Array.from({length:3}).map((g,m)=>jsx("div",{className:"h-11 px-4 py-2",children:jsx("div",{className:"h-4 bg-[var(--accent-background)] rounded animate-pulse"})},`skeleton-${m}`))}),!a&&jsxs(Fragment,{children:[v,b===0&&jsx(ListBoxItem,{id:"__empty__",textValue:"empty",isDisabled:true,className:"py-6 text-center text-sm text-[var(--menu-muted)] cursor-default pointer-events-none",children:jsx("span",{role:"status",children:N||"No options available"})})]})]})})]})}var Y=forwardRef(({label:s,placeholder:r,description:n,value:o,defaultValue:c,isOpen:u,isDisabled:d=false,isRequired:a=false,disabledKeys:i,validate:p,validationBehavior:N="aria",errorMessage:b,isLoading:v=false,emptyStateMessage:f,name:y,size:h="default",onChange:S,onOpenChange:g,className:m,children:M,...P},k)=>{let R=Children.count(M);return R>1e3&&console.warn("Select has >1000 items. Consider using Autocomplete component for better performance."),jsx(X,{ariaSelectProps:{value:o,defaultValue:c,onChange:C=>{S&&S(C);},placeholder:r,disabledKeys:i,isOpen:u,onOpenChange:g,isDisabled:d||v,isRequired:a,name:y,validate:p,validationBehavior:N,className:m,...P},triggerContent:jsx(SelectValue,{className:"flex-1 text-left truncate"}),triggerRef:k,label:s,description:n,isRequired:a,isDisabled:d,isLoading:v,errorMessage:b,size:h,emptyStateMessage:f,childCount:R,children:M})});Y.displayName="Select";var Z=forwardRef(({label:s,placeholder:r,description:n,value:o,defaultValue:c,selectionMode:u="multiple",isOpen:d,isDisabled:a=false,isRequired:i=false,disabledKeys:p,validate:N,validationBehavior:b="aria",errorMessage:v,isLoading:f=false,emptyStateMessage:y,name:h,size:S="default",onChange:g,onOpenChange:m,className:M,children:P,...k},R)=>{let C=Children.count(P);C>1e3&&console.warn("Select has >1000 items. Consider using Autocomplete component for better performance.");let O=useMemo(()=>{let z=new Map,I=te=>{Children.forEach(te,$=>{if(isValidElement($)){let V=$;if(V.type===H||V.props?.value){let _=V.props.value,j=V.props.children;_&&typeof j=="string"&&z.set(_,j);}V.props?.children&&I(V.props.children);}});};return I(P),z},[P]),ee=useMemo(()=>!o||!Array.isArray(o)||o.length===0?r||"":o.length<=2?o.map(I=>O.get(I)||I).join(", "):`${o.length} items selected`,[o,O,r]);return jsx(X,{ariaSelectProps:{value:o,defaultValue:c,onChange:z=>{g&&g(z);},selectionMode:"multiple",disabledKeys:p,isOpen:d,onOpenChange:m,isDisabled:a||f,isRequired:i,name:h,validate:N,validationBehavior:b,className:M,...k},triggerContent:jsx("span",{className:"flex-1 text-left truncate",children:ee}),triggerRef:R,label:s,description:n,isRequired:i,isDisabled:a,isLoading:f,errorMessage:v,size:S,emptyStateMessage:y,childCount:C,children:P})});Z.displayName="MultiSelect";var H=memo(function({children:r,textValue:n,value:o,isDisabled:c=false,className:u,...d}){if(!n&&typeof r!="string"){let a="Select.Item with custom children requires textValue prop for accessibility";if(process.env.NODE_ENV==="development")throw new Error(a);console.warn(a);}return jsx(ListBoxItem,{id:o,textValue:n||(typeof r=="string"?r:void 0),className:`${F({size:"default"})} ${u||""}`,isDisabled:c,...d,children:({isSelected:a,selectionMode:i,isDisabled:p})=>jsxs(Fragment,{children:[i==="multiple"?jsx(CheckSquare,{className:`absolute left-2 h-4 w-4 ${a?"visible":"invisible"}`,"aria-hidden":"true"}):a&&jsx(Check,{className:"absolute left-2 h-4 w-4","aria-hidden":"true"}),jsx("span",{className:p?"text-[var(--menu-muted)]":"",children:r})]})})});H.displayName="SelectItem";function T({children:s,className:r,...n}){return jsx(ListBoxSection,{className:`border-t border-[var(--border)] first:border-t-0 ${r||""}`,...n,children:s})}T.displayName="SelectSection";function D({children:s,className:r,...n}){return jsx(Header,{className:`${G({size:"default"})} ${r||""}`,...n,children:s})}D.displayName="SelectHeader";var ve=Object.assign(Y,{Item:H,Section:T,Header:D}),ye=Object.assign(Z,{Item:H,Section:T,Header:D});var B=z.object({className:z.string().optional(),children:z.any().optional(),id:z.string().optional(),"aria-label":z.string().optional(),"aria-labelledby":z.string().optional(),"aria-describedby":z.string().optional(),"aria-live":z.enum(["off","polite","assertive"]).optional(),"aria-hidden":z.boolean().optional(),"data-testid":z.string().optional()});var he=z.enum(["sm","default","lg"]),Pe=z.enum(["single","multiple"]),Ve=z.enum(["native","aria"]),Ne=B.extend({label:z.string(),placeholder:z.string().optional(),description:z.string().optional(),value:z.union([z.string(),z.array(z.string())]).optional(),defaultValue:z.union([z.string(),z.array(z.string())]).optional(),selectionMode:Pe.optional().default("single"),isOpen:z.boolean().optional(),isDisabled:z.boolean().optional().default(false),isRequired:z.boolean().optional().default(false),disabledKeys:z.array(z.string()).optional(),validate:z.custom().optional(),validationBehavior:Ve.optional().default("aria"),errorMessage:z.string().optional(),isLoading:z.boolean().optional().default(false),emptyStateMessage:z.string().optional(),name:z.string().optional(),size:he.optional().default("default"),onChange:z.custom().optional(),onOpenChange:z.custom().optional(),children:z.custom()}),ze=B.extend({value:z.string(),textValue:z.string().optional(),isDisabled:z.boolean().optional().default(false),children:z.custom(),className:z.string().optional()}),Ie=B.extend({children:z.custom(),className:z.string().optional()}),we=B.extend({children:z.custom(),className:z.string().optional()});export{ye as MultiSelect,ve as Select,we as SelectHeaderPropsSchema,ze as SelectItemPropsSchema,Ne as SelectPropsSchema,Ie as SelectSectionPropsSchema};//# sourceMappingURL=index.mjs.map
584
3
  //# sourceMappingURL=index.mjs.map