@tribepad/themis 1.0.0 → 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 (482) hide show
  1. package/dist/elements/Accordion/index.js +2 -77
  2. package/dist/elements/Accordion/index.js.map +1 -1
  3. package/dist/elements/Accordion/index.mjs +2 -4
  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 +2 -53
  18. package/dist/elements/Avatar/index.js.map +1 -1
  19. package/dist/elements/Avatar/index.mjs +2 -4
  20. package/dist/elements/Avatar/index.mjs.map +1 -1
  21. package/dist/elements/Badge/index.js +2 -42
  22. package/dist/elements/Badge/index.js.map +1 -1
  23. package/dist/elements/Badge/index.mjs +2 -5
  24. package/dist/elements/Badge/index.mjs.map +1 -1
  25. package/dist/elements/Breadcrumbs/index.js +2 -53
  26. package/dist/elements/Breadcrumbs/index.js.map +1 -1
  27. package/dist/elements/Breadcrumbs/index.mjs +2 -8
  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 +2 -26
  36. package/dist/elements/Button/index.js.map +1 -1
  37. package/dist/elements/Button/index.mjs +2 -5
  38. package/dist/elements/Button/index.mjs.map +1 -1
  39. package/dist/elements/ButtonGroup/index.js +2 -65
  40. package/dist/elements/ButtonGroup/index.js.map +1 -1
  41. package/dist/elements/ButtonGroup/index.mjs +2 -4
  42. package/dist/elements/ButtonGroup/index.mjs.map +1 -1
  43. package/dist/elements/Card/Card.d.ts.map +1 -1
  44. package/dist/elements/Card/index.js +2 -84
  45. package/dist/elements/Card/index.js.map +1 -1
  46. package/dist/elements/Card/index.mjs +2 -7
  47. package/dist/elements/Card/index.mjs.map +1 -1
  48. package/dist/elements/Carousel/Carousel.d.ts +1 -11
  49. package/dist/elements/Carousel/Carousel.d.ts.map +1 -1
  50. package/dist/elements/Carousel/LazyCarousel.d.ts +1 -1
  51. package/dist/elements/Carousel/LazyCarousel.d.ts.map +1 -1
  52. package/dist/elements/Carousel/index.js +2 -22
  53. package/dist/elements/Carousel/index.js.map +1 -1
  54. package/dist/elements/Carousel/index.mjs +2 -9
  55. package/dist/elements/Carousel/index.mjs.map +1 -1
  56. package/dist/elements/Chart/ChartContext.d.ts.map +1 -1
  57. package/dist/elements/Chart/index.js +2 -46
  58. package/dist/elements/Chart/index.js.map +1 -1
  59. package/dist/elements/Chart/index.mjs +2 -5
  60. package/dist/elements/Chart/index.mjs.map +1 -1
  61. package/dist/elements/Checkbox/index.js +2 -46
  62. package/dist/elements/Checkbox/index.js.map +1 -1
  63. package/dist/elements/Checkbox/index.mjs +2 -5
  64. package/dist/elements/Checkbox/index.mjs.map +1 -1
  65. package/dist/elements/CheckboxGroup/index.js +2 -70
  66. package/dist/elements/CheckboxGroup/index.js.map +1 -1
  67. package/dist/elements/CheckboxGroup/index.mjs +2 -5
  68. package/dist/elements/CheckboxGroup/index.mjs.map +1 -1
  69. package/dist/elements/Combobox/Combobox.d.ts +56 -0
  70. package/dist/elements/Combobox/Combobox.d.ts.map +1 -0
  71. package/dist/elements/Combobox/Combobox.styles.d.ts +29 -0
  72. package/dist/elements/Combobox/Combobox.styles.d.ts.map +1 -0
  73. package/dist/elements/Combobox/Combobox.types.d.ts +67 -0
  74. package/dist/elements/Combobox/Combobox.types.d.ts.map +1 -0
  75. package/dist/elements/Combobox/index.d.ts +20 -0
  76. package/dist/elements/Combobox/index.d.ts.map +1 -0
  77. package/dist/elements/Combobox/index.js +3 -0
  78. package/dist/elements/Combobox/index.js.map +1 -0
  79. package/dist/elements/Combobox/index.mjs +3 -0
  80. package/dist/elements/Combobox/index.mjs.map +1 -0
  81. package/dist/elements/DatePicker/DatePicker.d.ts +1 -1
  82. package/dist/elements/DatePicker/DatePicker.d.ts.map +1 -1
  83. package/dist/elements/DatePicker/index.js +2 -122
  84. package/dist/elements/DatePicker/index.js.map +1 -1
  85. package/dist/elements/DatePicker/index.mjs +2 -5
  86. package/dist/elements/DatePicker/index.mjs.map +1 -1
  87. package/dist/elements/Dropdown/Dropdown.d.ts +7 -15
  88. package/dist/elements/Dropdown/Dropdown.d.ts.map +1 -1
  89. package/dist/elements/Dropdown/Dropdown.styles.d.ts +22 -0
  90. package/dist/elements/Dropdown/Dropdown.styles.d.ts.map +1 -0
  91. package/dist/elements/Dropdown/index.d.ts +1 -0
  92. package/dist/elements/Dropdown/index.d.ts.map +1 -1
  93. package/dist/elements/Dropdown/index.js +2 -40
  94. package/dist/elements/Dropdown/index.js.map +1 -1
  95. package/dist/elements/Dropdown/index.mjs +2 -3
  96. package/dist/elements/Dropdown/index.mjs.map +1 -1
  97. package/dist/elements/FileField/index.js +2 -137
  98. package/dist/elements/FileField/index.js.map +1 -1
  99. package/dist/elements/FileField/index.mjs +2 -8
  100. package/dist/elements/FileField/index.mjs.map +1 -1
  101. package/dist/elements/FormLayout/index.js +2 -16
  102. package/dist/elements/FormLayout/index.js.map +1 -1
  103. package/dist/elements/FormLayout/index.mjs +2 -3
  104. package/dist/elements/FormLayout/index.mjs.map +1 -1
  105. package/dist/elements/Modal/Modal.d.ts +9 -14
  106. package/dist/elements/Modal/Modal.d.ts.map +1 -1
  107. package/dist/elements/Modal/Modal.styles.d.ts +29 -0
  108. package/dist/elements/Modal/Modal.styles.d.ts.map +1 -0
  109. package/dist/elements/Modal/index.d.ts +1 -0
  110. package/dist/elements/Modal/index.d.ts.map +1 -1
  111. package/dist/elements/Modal/index.js +2 -51
  112. package/dist/elements/Modal/index.js.map +1 -1
  113. package/dist/elements/Modal/index.mjs +2 -2
  114. package/dist/elements/Modal/index.mjs.map +1 -1
  115. package/dist/elements/NumberField/index.js +2 -56
  116. package/dist/elements/NumberField/index.js.map +1 -1
  117. package/dist/elements/NumberField/index.mjs +2 -7
  118. package/dist/elements/NumberField/index.mjs.map +1 -1
  119. package/dist/elements/OTPInput/OTPInput.d.ts.map +1 -1
  120. package/dist/elements/OTPInput/index.js +2 -12
  121. package/dist/elements/OTPInput/index.js.map +1 -1
  122. package/dist/elements/OTPInput/index.mjs +2 -3
  123. package/dist/elements/OTPInput/index.mjs.map +1 -1
  124. package/dist/elements/Pagination/Pagination.d.ts +45 -0
  125. package/dist/elements/Pagination/Pagination.d.ts.map +1 -0
  126. package/dist/elements/Pagination/Pagination.styles.d.ts +10 -0
  127. package/dist/elements/Pagination/Pagination.styles.d.ts.map +1 -0
  128. package/dist/elements/Pagination/Pagination.types.d.ts +55 -0
  129. package/dist/elements/Pagination/Pagination.types.d.ts.map +1 -0
  130. package/dist/elements/Pagination/index.d.ts +21 -0
  131. package/dist/elements/Pagination/index.d.ts.map +1 -0
  132. package/dist/elements/Pagination/index.js +3 -0
  133. package/dist/elements/Pagination/index.js.map +1 -0
  134. package/dist/elements/Pagination/index.mjs +3 -0
  135. package/dist/elements/Pagination/index.mjs.map +1 -0
  136. package/dist/elements/Panel/index.js +2 -32
  137. package/dist/elements/Panel/index.js.map +1 -1
  138. package/dist/elements/Panel/index.mjs +2 -3
  139. package/dist/elements/Panel/index.mjs.map +1 -1
  140. package/dist/elements/PasswordField/PasswordField.d.ts +27 -0
  141. package/dist/elements/PasswordField/PasswordField.d.ts.map +1 -0
  142. package/dist/elements/PasswordField/PasswordField.styles.d.ts +32 -0
  143. package/dist/elements/PasswordField/PasswordField.styles.d.ts.map +1 -0
  144. package/dist/elements/PasswordField/PasswordField.types.d.ts +100 -0
  145. package/dist/elements/PasswordField/PasswordField.types.d.ts.map +1 -0
  146. package/dist/elements/PasswordField/index.css +2 -0
  147. package/dist/elements/PasswordField/index.css.map +1 -0
  148. package/dist/elements/PasswordField/index.d.ts +20 -0
  149. package/dist/elements/PasswordField/index.d.ts.map +1 -0
  150. package/dist/elements/PasswordField/index.js +3 -0
  151. package/dist/elements/PasswordField/index.js.map +1 -0
  152. package/dist/elements/PasswordField/index.mjs +3 -0
  153. package/dist/elements/PasswordField/index.mjs.map +1 -0
  154. package/dist/elements/Progress/index.js +2 -29
  155. package/dist/elements/Progress/index.js.map +1 -1
  156. package/dist/elements/Progress/index.mjs +2 -4
  157. package/dist/elements/Progress/index.mjs.map +1 -1
  158. package/dist/elements/RadioGroup/index.js +2 -46
  159. package/dist/elements/RadioGroup/index.js.map +1 -1
  160. package/dist/elements/RadioGroup/index.mjs +2 -5
  161. package/dist/elements/RadioGroup/index.mjs.map +1 -1
  162. package/dist/elements/Resizable/components/ResizableHandle.d.ts +0 -8
  163. package/dist/elements/Resizable/components/ResizableHandle.d.ts.map +1 -1
  164. package/dist/elements/Resizable/components/ResizablePanel.d.ts +0 -8
  165. package/dist/elements/Resizable/components/ResizablePanel.d.ts.map +1 -1
  166. package/dist/elements/Resizable/components/ResizablePanelGroup.d.ts +0 -8
  167. package/dist/elements/Resizable/components/ResizablePanelGroup.d.ts.map +1 -1
  168. package/dist/elements/Resizable/components/ResizablePopover.d.ts +0 -8
  169. package/dist/elements/Resizable/components/ResizablePopover.d.ts.map +1 -1
  170. package/dist/elements/Resizable/index.js +2 -64
  171. package/dist/elements/Resizable/index.js.map +1 -1
  172. package/dist/elements/Resizable/index.mjs +2 -7
  173. package/dist/elements/Resizable/index.mjs.map +1 -1
  174. package/dist/elements/SearchField/SearchField.d.ts +27 -0
  175. package/dist/elements/SearchField/SearchField.d.ts.map +1 -0
  176. package/dist/elements/SearchField/SearchField.styles.d.ts +32 -0
  177. package/dist/elements/SearchField/SearchField.styles.d.ts.map +1 -0
  178. package/dist/elements/SearchField/SearchField.types.d.ts +45 -0
  179. package/dist/elements/SearchField/SearchField.types.d.ts.map +1 -0
  180. package/dist/elements/SearchField/index.css +2 -0
  181. package/dist/elements/SearchField/index.css.map +1 -0
  182. package/dist/elements/SearchField/index.d.ts +21 -0
  183. package/dist/elements/SearchField/index.d.ts.map +1 -0
  184. package/dist/elements/SearchField/index.js +3 -0
  185. package/dist/elements/SearchField/index.js.map +1 -0
  186. package/dist/elements/SearchField/index.mjs +3 -0
  187. package/dist/elements/SearchField/index.mjs.map +1 -0
  188. package/dist/elements/Select/Select.d.ts +19 -48
  189. package/dist/elements/Select/Select.d.ts.map +1 -1
  190. package/dist/elements/Select/Select.styles.d.ts +55 -0
  191. package/dist/elements/Select/Select.styles.d.ts.map +1 -0
  192. package/dist/elements/Select/index.js +2 -32
  193. package/dist/elements/Select/index.js.map +1 -1
  194. package/dist/elements/Select/index.mjs +2 -3
  195. package/dist/elements/Select/index.mjs.map +1 -1
  196. package/dist/elements/Skeleton/index.js +2 -21
  197. package/dist/elements/Skeleton/index.js.map +1 -1
  198. package/dist/elements/Skeleton/index.mjs +2 -4
  199. package/dist/elements/Skeleton/index.mjs.map +1 -1
  200. package/dist/elements/Switch/index.js +2 -48
  201. package/dist/elements/Switch/index.js.map +1 -1
  202. package/dist/elements/Switch/index.mjs +2 -30
  203. package/dist/elements/Switch/index.mjs.map +1 -1
  204. package/dist/elements/Table/Table.d.ts +3 -24
  205. package/dist/elements/Table/Table.d.ts.map +1 -1
  206. package/dist/elements/Table/Table.styles.d.ts +24 -0
  207. package/dist/elements/Table/Table.styles.d.ts.map +1 -0
  208. package/dist/elements/Table/index.js +2 -75
  209. package/dist/elements/Table/index.js.map +1 -1
  210. package/dist/elements/Table/index.mjs +2 -6
  211. package/dist/elements/Table/index.mjs.map +1 -1
  212. package/dist/elements/Tabs/index.js +2 -73
  213. package/dist/elements/Tabs/index.js.map +1 -1
  214. package/dist/elements/Tabs/index.mjs +2 -4
  215. package/dist/elements/Tabs/index.mjs.map +1 -1
  216. package/dist/elements/TextField/TextField.d.ts +6 -42
  217. package/dist/elements/TextField/TextField.d.ts.map +1 -1
  218. package/dist/elements/TextField/TextField.hooks.d.ts +63 -0
  219. package/dist/elements/TextField/TextField.hooks.d.ts.map +1 -0
  220. package/dist/elements/TextField/TextField.icons.d.ts +19 -0
  221. package/dist/elements/TextField/TextField.icons.d.ts.map +1 -0
  222. package/dist/elements/TextField/TextField.styles.d.ts +37 -0
  223. package/dist/elements/TextField/TextField.styles.d.ts.map +1 -0
  224. package/dist/elements/TextField/TextField.types.d.ts +3 -0
  225. package/dist/elements/TextField/TextField.types.d.ts.map +1 -1
  226. package/dist/elements/TextField/index.css +1 -22
  227. package/dist/elements/TextField/index.css.map +1 -1
  228. package/dist/elements/TextField/index.js +2 -259
  229. package/dist/elements/TextField/index.js.map +1 -1
  230. package/dist/elements/TextField/index.mjs +2 -206
  231. package/dist/elements/TextField/index.mjs.map +1 -1
  232. package/dist/elements/TimeField/index.js +2 -44
  233. package/dist/elements/TimeField/index.js.map +1 -1
  234. package/dist/elements/TimeField/index.mjs +2 -3
  235. package/dist/elements/TimeField/index.mjs.map +1 -1
  236. package/dist/elements/Toast/Toast.d.ts +0 -22
  237. package/dist/elements/Toast/Toast.d.ts.map +1 -1
  238. package/dist/elements/Toast/index.js +2 -59
  239. package/dist/elements/Toast/index.js.map +1 -1
  240. package/dist/elements/Toast/index.mjs +2 -6
  241. package/dist/elements/Toast/index.mjs.map +1 -1
  242. package/dist/elements/Tooltip/index.js +2 -58
  243. package/dist/elements/Tooltip/index.js.map +1 -1
  244. package/dist/elements/Tooltip/index.mjs +2 -5
  245. package/dist/elements/Tooltip/index.mjs.map +1 -1
  246. package/dist/elements/index.css +1 -22
  247. package/dist/elements/index.css.map +1 -1
  248. package/dist/elements/index.d.ts +13 -1
  249. package/dist/elements/index.d.ts.map +1 -1
  250. package/dist/elements/index.js +2 -838
  251. package/dist/elements/index.js.map +1 -1
  252. package/dist/elements/index.mjs +2 -41
  253. package/dist/elements/index.mjs.map +1 -1
  254. package/dist/index.css +1 -22
  255. package/dist/index.css.map +1 -1
  256. package/dist/index.js +3 -864
  257. package/dist/index.js.map +1 -1
  258. package/dist/index.mjs +3 -43
  259. package/dist/index.mjs.map +1 -1
  260. package/dist/schemas/index.js +2 -28
  261. package/dist/schemas/index.js.map +1 -1
  262. package/dist/schemas/index.mjs +2 -3
  263. package/dist/schemas/index.mjs.map +1 -1
  264. package/dist/styles/defaults.css +151 -0
  265. package/dist/styles/index.js +1 -152
  266. package/dist/styles/index.js.map +1 -1
  267. package/dist/styles/index.mjs +1 -3
  268. package/dist/styles/index.mjs.map +1 -1
  269. package/dist/utils/index.js +1 -12
  270. package/dist/utils/index.js.map +1 -1
  271. package/dist/utils/index.mjs +1 -3
  272. package/dist/utils/index.mjs.map +1 -1
  273. package/package.json +9 -7
  274. package/src/elements/Accordion/Accordion.stories.tsx +1 -1
  275. package/src/elements/AlertDialog/AlertDialog.stories.tsx +124 -0
  276. package/src/elements/Avatar/Avatar.stories.tsx +1 -1
  277. package/src/elements/Badge/Badge.stories.tsx +1 -1
  278. package/src/elements/Breadcrumbs/Breadcrumbs.stories.tsx +1 -1
  279. package/src/elements/Button/Button.stories.tsx +1 -1
  280. package/src/elements/ButtonGroup/ButtonGroup.stories.tsx +1 -1
  281. package/src/elements/Card/Card.stories.tsx +1 -1
  282. package/src/elements/Carousel/Carousel.stories.tsx +1 -1
  283. package/src/elements/Chart/Chart.stories.tsx +1 -1
  284. package/src/elements/Checkbox/Checkbox.stories.tsx +1 -1
  285. package/src/elements/CheckboxGroup/CheckboxGroup.stories.tsx +1 -1
  286. package/src/elements/Combobox/Combobox.stories.tsx +133 -0
  287. package/src/elements/DatePicker/DatePicker.stories.tsx +1 -1
  288. package/src/elements/Dropdown/Dropdown.stories.tsx +1 -1
  289. package/src/elements/FileField/FileField.stories.tsx +1 -1
  290. package/src/elements/FileField/FileProgress.stories.tsx +1 -1
  291. package/src/elements/FormLayout/FormLayout.stories.tsx +1 -1
  292. package/src/elements/Modal/Modal.stories.tsx +1 -1
  293. package/src/elements/NumberField/NumberField.stories.tsx +1 -1
  294. package/src/elements/OTPInput/OTPInput.stories.tsx +1 -1
  295. package/src/elements/Pagination/Pagination.stories.tsx +203 -0
  296. package/src/elements/Panel/Panel.stories.tsx +1 -1
  297. package/src/elements/PasswordField/PasswordField.stories.tsx +167 -0
  298. package/src/elements/Progress/Progress.stories.tsx +1 -1
  299. package/src/elements/RadioGroup/RadioGroup.stories.tsx +1 -1
  300. package/src/elements/Resizable/Resizable.stories.tsx +1 -1
  301. package/src/elements/SearchField/SearchField.stories.tsx +146 -0
  302. package/src/elements/Select/Select.stories.tsx +1 -1
  303. package/src/elements/Skeleton/Skeleton.stories.tsx +1 -1
  304. package/src/elements/Switch/Switch.stories.tsx +1 -1
  305. package/src/elements/Table/Table.stories.tsx +1 -1
  306. package/src/elements/Tabs/Tabs.stories.tsx +1 -1
  307. package/src/elements/TextField/TextField.stories.tsx +1 -1
  308. package/src/elements/TimeField/TimeField.stories.tsx +1 -1
  309. package/src/elements/Toast/Toast.stories.tsx +1 -1
  310. package/src/elements/Tooltip/Tooltip.stories.tsx +1 -1
  311. package/dist/Carousel-NTZX5TOW.js +0 -16
  312. package/dist/Carousel-NTZX5TOW.js.map +0 -1
  313. package/dist/Carousel-YH3DOQJU.mjs +0 -7
  314. package/dist/Carousel-YH3DOQJU.mjs.map +0 -1
  315. package/dist/chunk-2HIUTHMU.mjs +0 -234
  316. package/dist/chunk-2HIUTHMU.mjs.map +0 -1
  317. package/dist/chunk-34GTFTDO.js +0 -431
  318. package/dist/chunk-34GTFTDO.js.map +0 -1
  319. package/dist/chunk-3H7ASYR7.js +0 -250
  320. package/dist/chunk-3H7ASYR7.js.map +0 -1
  321. package/dist/chunk-3IEN7JOP.js +0 -316
  322. package/dist/chunk-3IEN7JOP.js.map +0 -1
  323. package/dist/chunk-3JHN4GAL.js +0 -326
  324. package/dist/chunk-3JHN4GAL.js.map +0 -1
  325. package/dist/chunk-3MJPASQU.js +0 -232
  326. package/dist/chunk-3MJPASQU.js.map +0 -1
  327. package/dist/chunk-3XD2JUL3.js +0 -572
  328. package/dist/chunk-3XD2JUL3.js.map +0 -1
  329. package/dist/chunk-3YOY2VJ6.js +0 -189
  330. package/dist/chunk-3YOY2VJ6.js.map +0 -1
  331. package/dist/chunk-4DU5JSXB.js +0 -408
  332. package/dist/chunk-4DU5JSXB.js.map +0 -1
  333. package/dist/chunk-4E4E2GSS.js +0 -352
  334. package/dist/chunk-4E4E2GSS.js.map +0 -1
  335. package/dist/chunk-4NHAP4AN.mjs +0 -3
  336. package/dist/chunk-4NHAP4AN.mjs.map +0 -1
  337. package/dist/chunk-4S33J5NY.mjs +0 -415
  338. package/dist/chunk-4S33J5NY.mjs.map +0 -1
  339. package/dist/chunk-5SMGRT3G.mjs +0 -354
  340. package/dist/chunk-5SMGRT3G.mjs.map +0 -1
  341. package/dist/chunk-5SVLJN2C.mjs +0 -22
  342. package/dist/chunk-5SVLJN2C.mjs.map +0 -1
  343. package/dist/chunk-66WTU4EB.mjs +0 -299
  344. package/dist/chunk-66WTU4EB.mjs.map +0 -1
  345. package/dist/chunk-6S25NMOT.mjs +0 -335
  346. package/dist/chunk-6S25NMOT.mjs.map +0 -1
  347. package/dist/chunk-6SP7UB3D.js +0 -4
  348. package/dist/chunk-6SP7UB3D.js.map +0 -1
  349. package/dist/chunk-6TYWWQHM.mjs +0 -565
  350. package/dist/chunk-6TYWWQHM.mjs.map +0 -1
  351. package/dist/chunk-A3YUJA6W.mjs +0 -384
  352. package/dist/chunk-A3YUJA6W.mjs.map +0 -1
  353. package/dist/chunk-A6KEDVUR.js +0 -61
  354. package/dist/chunk-A6KEDVUR.js.map +0 -1
  355. package/dist/chunk-A77RUEWL.js +0 -730
  356. package/dist/chunk-A77RUEWL.js.map +0 -1
  357. package/dist/chunk-AA4IKMPE.mjs +0 -3
  358. package/dist/chunk-AA4IKMPE.mjs.map +0 -1
  359. package/dist/chunk-AKIA6GW6.mjs +0 -163
  360. package/dist/chunk-AKIA6GW6.mjs.map +0 -1
  361. package/dist/chunk-AL6P275L.mjs +0 -435
  362. package/dist/chunk-AL6P275L.mjs.map +0 -1
  363. package/dist/chunk-AZ3RJYTB.js +0 -37
  364. package/dist/chunk-AZ3RJYTB.js.map +0 -1
  365. package/dist/chunk-B5Q4UPL6.js +0 -32
  366. package/dist/chunk-B5Q4UPL6.js.map +0 -1
  367. package/dist/chunk-B6DHPMDP.mjs +0 -335
  368. package/dist/chunk-B6DHPMDP.mjs.map +0 -1
  369. package/dist/chunk-BDXKKMBZ.mjs +0 -184
  370. package/dist/chunk-BDXKKMBZ.mjs.map +0 -1
  371. package/dist/chunk-BL6E2DLZ.mjs +0 -52
  372. package/dist/chunk-BL6E2DLZ.mjs.map +0 -1
  373. package/dist/chunk-CGFDS4XS.mjs +0 -121
  374. package/dist/chunk-CGFDS4XS.mjs.map +0 -1
  375. package/dist/chunk-CJIW5TKI.js +0 -139
  376. package/dist/chunk-CJIW5TKI.js.map +0 -1
  377. package/dist/chunk-CKNISJOQ.js +0 -314
  378. package/dist/chunk-CKNISJOQ.js.map +0 -1
  379. package/dist/chunk-D6CBOECS.mjs +0 -1757
  380. package/dist/chunk-D6CBOECS.mjs.map +0 -1
  381. package/dist/chunk-DDWEVC2S.js +0 -166
  382. package/dist/chunk-DDWEVC2S.js.map +0 -1
  383. package/dist/chunk-DZ556D2F.mjs +0 -176
  384. package/dist/chunk-DZ556D2F.mjs.map +0 -1
  385. package/dist/chunk-E2KQFV3O.mjs +0 -10
  386. package/dist/chunk-E2KQFV3O.mjs.map +0 -1
  387. package/dist/chunk-EMMLADSC.js +0 -126
  388. package/dist/chunk-EMMLADSC.js.map +0 -1
  389. package/dist/chunk-EP4WOI5D.mjs +0 -926
  390. package/dist/chunk-EP4WOI5D.mjs.map +0 -1
  391. package/dist/chunk-FJRXLJC2.mjs +0 -160
  392. package/dist/chunk-FJRXLJC2.mjs.map +0 -1
  393. package/dist/chunk-FKQI434R.js +0 -345
  394. package/dist/chunk-FKQI434R.js.map +0 -1
  395. package/dist/chunk-FPKEAJRZ.mjs +0 -100
  396. package/dist/chunk-FPKEAJRZ.mjs.map +0 -1
  397. package/dist/chunk-FWQYB22U.js +0 -183
  398. package/dist/chunk-FWQYB22U.js.map +0 -1
  399. package/dist/chunk-GD5GHTMA.js +0 -189
  400. package/dist/chunk-GD5GHTMA.js.map +0 -1
  401. package/dist/chunk-GE5XTSDZ.js +0 -447
  402. package/dist/chunk-GE5XTSDZ.js.map +0 -1
  403. package/dist/chunk-GVE47ZAX.mjs +0 -32
  404. package/dist/chunk-GVE47ZAX.mjs.map +0 -1
  405. package/dist/chunk-HK46BT5U.mjs +0 -18
  406. package/dist/chunk-HK46BT5U.mjs.map +0 -1
  407. package/dist/chunk-HQVRMR6N.js +0 -365
  408. package/dist/chunk-HQVRMR6N.js.map +0 -1
  409. package/dist/chunk-HSGBJPJO.mjs +0 -398
  410. package/dist/chunk-HSGBJPJO.mjs.map +0 -1
  411. package/dist/chunk-I3AUTOMZ.mjs +0 -125
  412. package/dist/chunk-I3AUTOMZ.mjs.map +0 -1
  413. package/dist/chunk-IEI5LD5C.mjs +0 -1161
  414. package/dist/chunk-IEI5LD5C.mjs.map +0 -1
  415. package/dist/chunk-IIPTC2X7.mjs +0 -118
  416. package/dist/chunk-IIPTC2X7.mjs.map +0 -1
  417. package/dist/chunk-J7TLHF2Q.js +0 -4
  418. package/dist/chunk-J7TLHF2Q.js.map +0 -1
  419. package/dist/chunk-JJOWXFXQ.mjs +0 -765
  420. package/dist/chunk-JJOWXFXQ.mjs.map +0 -1
  421. package/dist/chunk-JPTSS2OA.mjs +0 -3
  422. package/dist/chunk-JPTSS2OA.mjs.map +0 -1
  423. package/dist/chunk-KFXXRLTP.js +0 -396
  424. package/dist/chunk-KFXXRLTP.js.map +0 -1
  425. package/dist/chunk-KPRRBSG6.mjs +0 -272
  426. package/dist/chunk-KPRRBSG6.mjs.map +0 -1
  427. package/dist/chunk-NFSBGRDB.mjs +0 -57
  428. package/dist/chunk-NFSBGRDB.mjs.map +0 -1
  429. package/dist/chunk-NGJVCFTM.js +0 -219
  430. package/dist/chunk-NGJVCFTM.js.map +0 -1
  431. package/dist/chunk-NSQ6MZJ6.mjs +0 -728
  432. package/dist/chunk-NSQ6MZJ6.mjs.map +0 -1
  433. package/dist/chunk-NYQYHT76.mjs +0 -296
  434. package/dist/chunk-NYQYHT76.mjs.map +0 -1
  435. package/dist/chunk-OLJJGI5B.js +0 -1193
  436. package/dist/chunk-OLJJGI5B.js.map +0 -1
  437. package/dist/chunk-Q3572X2J.js +0 -292
  438. package/dist/chunk-Q3572X2J.js.map +0 -1
  439. package/dist/chunk-QH7N7D4I.mjs +0 -210
  440. package/dist/chunk-QH7N7D4I.mjs.map +0 -1
  441. package/dist/chunk-R7XUIV25.js +0 -466
  442. package/dist/chunk-R7XUIV25.js.map +0 -1
  443. package/dist/chunk-RFFO4KPM.js +0 -135
  444. package/dist/chunk-RFFO4KPM.js.map +0 -1
  445. package/dist/chunk-RFX7QKA7.mjs +0 -180
  446. package/dist/chunk-RFX7QKA7.mjs.map +0 -1
  447. package/dist/chunk-SN5LFAP3.js +0 -940
  448. package/dist/chunk-SN5LFAP3.js.map +0 -1
  449. package/dist/chunk-T4COXKQ3.js +0 -24
  450. package/dist/chunk-T4COXKQ3.js.map +0 -1
  451. package/dist/chunk-TS54QM27.js +0 -125
  452. package/dist/chunk-TS54QM27.js.map +0 -1
  453. package/dist/chunk-UE2S4PCX.mjs +0 -220
  454. package/dist/chunk-UE2S4PCX.mjs.map +0 -1
  455. package/dist/chunk-UTW3QX2A.mjs +0 -282
  456. package/dist/chunk-UTW3QX2A.mjs.map +0 -1
  457. package/dist/chunk-V74LGMAE.js +0 -1767
  458. package/dist/chunk-V74LGMAE.js.map +0 -1
  459. package/dist/chunk-VIREG536.js +0 -12
  460. package/dist/chunk-VIREG536.js.map +0 -1
  461. package/dist/chunk-VY7M7346.js +0 -4
  462. package/dist/chunk-VY7M7346.js.map +0 -1
  463. package/dist/chunk-W3TJOO7H.mjs +0 -319
  464. package/dist/chunk-W3TJOO7H.mjs.map +0 -1
  465. package/dist/chunk-WIUOB36M.js +0 -54
  466. package/dist/chunk-WIUOB36M.js.map +0 -1
  467. package/dist/chunk-WJGLM4CY.js +0 -291
  468. package/dist/chunk-WJGLM4CY.js.map +0 -1
  469. package/dist/chunk-WNURH5OO.mjs +0 -453
  470. package/dist/chunk-WNURH5OO.mjs.map +0 -1
  471. package/dist/chunk-X25TNRSD.mjs +0 -364
  472. package/dist/chunk-X25TNRSD.mjs.map +0 -1
  473. package/dist/chunk-Y3GT7ETK.js +0 -108
  474. package/dist/chunk-Y3GT7ETK.js.map +0 -1
  475. package/dist/chunk-Z4FRNOF6.mjs +0 -115
  476. package/dist/chunk-Z4FRNOF6.mjs.map +0 -1
  477. package/dist/chunk-ZMYLD3BN.js +0 -166
  478. package/dist/chunk-ZMYLD3BN.js.map +0 -1
  479. package/dist/chunk-ZP2KV6EX.js +0 -815
  480. package/dist/chunk-ZP2KV6EX.js.map +0 -1
  481. package/dist/chunk-ZVKXFELU.js +0 -366
  482. package/dist/chunk-ZVKXFELU.js.map +0 -1
@@ -0,0 +1,55 @@
1
+ import { type VariantProps } from 'class-variance-authority';
2
+ /**
3
+ * CVA Variants for Select Trigger Button
4
+ *
5
+ * Styles the trigger button that opens the select popover.
6
+ * All sizes enforce 44px minimum touch targets for WCAG 2.2 AAA compliance.
7
+ */
8
+ export declare const selectTriggerVariants: (props?: ({
9
+ size?: "default" | "sm" | "lg" | null | undefined;
10
+ isInvalid?: boolean | null | undefined;
11
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
12
+ /**
13
+ * CVA Variants for Select Items
14
+ *
15
+ * Styles individual selectable items within the listbox.
16
+ * All sizes enforce 44px minimum touch targets for WCAG 2.2 AAA compliance.
17
+ */
18
+ export declare const selectItemVariants: (props?: ({
19
+ size?: "default" | "sm" | "lg" | null | undefined;
20
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
21
+ /**
22
+ * CVA Variants for Select Popover
23
+ *
24
+ * Styles the popover container that holds the listbox.
25
+ * Uses menu tokens to match Dropdown styling.
26
+ */
27
+ export declare const selectPopoverVariants: (props?: ({
28
+ size?: "default" | "sm" | "lg" | null | undefined;
29
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
30
+ /**
31
+ * CVA Variants for Section Headers
32
+ *
33
+ * Styles the non-interactive section header labels within grouped selects.
34
+ */
35
+ export declare const selectSectionVariants: (props?: ({
36
+ size?: "default" | "sm" | "lg" | null | undefined;
37
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
38
+ /**
39
+ * CVA Variants for Error Messages
40
+ *
41
+ * Styles the error message displayed below the select trigger.
42
+ */
43
+ export declare const selectErrorVariants: (props?: ({
44
+ size?: "default" | "sm" | "lg" | null | undefined;
45
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
46
+ /**
47
+ * Type exports for variant props.
48
+ * Allows TypeScript inference of variant combinations.
49
+ */
50
+ export type SelectTriggerVariantProps = VariantProps<typeof selectTriggerVariants>;
51
+ export type SelectItemVariantProps = VariantProps<typeof selectItemVariants>;
52
+ export type SelectPopoverVariantProps = VariantProps<typeof selectPopoverVariants>;
53
+ export type SelectSectionVariantProps = VariantProps<typeof selectSectionVariants>;
54
+ export type SelectErrorVariantProps = VariantProps<typeof selectErrorVariants>;
55
+ //# sourceMappingURL=Select.styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Select.styles.d.ts","sourceRoot":"","sources":["../../../src/elements/Select/Select.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAElE;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB;;;8EA+CjC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB;;8EA0C9B,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB;;8EAiCjC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,qBAAqB;;8EAsBjC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB;;8EAsB/B,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,yBAAyB,GAAG,YAAY,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACnF,MAAM,MAAM,sBAAsB,GAAG,YAAY,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC7E,MAAM,MAAM,yBAAyB,GAAG,YAAY,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACnF,MAAM,MAAM,yBAAyB,GAAG,YAAY,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACnF,MAAM,MAAM,uBAAuB,GAAG,YAAY,CAAC,OAAO,mBAAmB,CAAC,CAAC"}
@@ -1,33 +1,3 @@
1
- 'use strict';
2
-
3
- var chunk3XD2JUL3_js = require('../../chunk-3XD2JUL3.js');
4
- require('../../chunk-T4COXKQ3.js');
5
-
6
-
7
-
8
- Object.defineProperty(exports, "MultiSelect", {
9
- enumerable: true,
10
- get: function () { return chunk3XD2JUL3_js.MultiSelect; }
11
- });
12
- Object.defineProperty(exports, "Select", {
13
- enumerable: true,
14
- get: function () { return chunk3XD2JUL3_js.Select; }
15
- });
16
- Object.defineProperty(exports, "SelectHeaderPropsSchema", {
17
- enumerable: true,
18
- get: function () { return chunk3XD2JUL3_js.SelectHeaderPropsSchema; }
19
- });
20
- Object.defineProperty(exports, "SelectItemPropsSchema", {
21
- enumerable: true,
22
- get: function () { return chunk3XD2JUL3_js.SelectItemPropsSchema; }
23
- });
24
- Object.defineProperty(exports, "SelectPropsSchema", {
25
- enumerable: true,
26
- get: function () { return chunk3XD2JUL3_js.SelectPropsSchema; }
27
- });
28
- Object.defineProperty(exports, "SelectSectionPropsSchema", {
29
- enumerable: true,
30
- get: function () { return chunk3XD2JUL3_js.SelectSectionPropsSchema; }
31
- });
32
- //# sourceMappingURL=index.js.map
1
+ "use client";
2
+ 'use strict';var react=require('react'),reactAriaComponents=require('react-aria-components'),lucideReact=require('lucide-react'),classVarianceAuthority=require('class-variance-authority'),jsxRuntime=require('react/jsx-runtime'),zod=require('zod');var q=classVarianceAuthority.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=classVarianceAuthority.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=classVarianceAuthority.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=classVarianceAuthority.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=classVarianceAuthority.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=react.useId(),y=react.useId(),h=react.useId(),S=!!i;return jsxRuntime.jsxs(reactAriaComponents.Select,{...s,isInvalid:S,children:[jsxRuntime.jsxs(reactAriaComponents.Label,{id:f,className:"text-sm font-medium text-[var(--content-foreground)]",children:[o,u&&jsxRuntime.jsx("span",{className:"text-[var(--destructive)] ml-1",children:"*"})]}),c&&jsxRuntime.jsx(reactAriaComponents.Text,{id:y,slot:"description",className:"text-sm text-[var(--menu-muted)] mt-1",children:c}),jsxRuntime.jsxs(reactAriaComponents.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?jsxRuntime.jsx(lucideReact.Loader2,{className:"h-4 w-4 animate-spin text-[var(--menu-muted)]","aria-hidden":"true"}):jsxRuntime.jsx(lucideReact.ChevronDown,{className:"h-4 w-4 text-[var(--menu-muted)]","aria-hidden":"true"})]}),jsxRuntime.jsx(reactAriaComponents.FieldError,{id:h,className:J({size:p}),children:({validationErrors:g})=>{let m=i||g.join(" ");return m?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(lucideReact.AlertCircle,{className:"h-4 w-4","aria-hidden":"true"}),m]}):null}}),jsxRuntime.jsx(reactAriaComponents.Popover,{className:K({size:p}),children:jsxRuntime.jsxs(reactAriaComponents.ListBox,{className:"outline-none",children:[a&&b>0&&jsxRuntime.jsx(jsxRuntime.Fragment,{children:Array.from({length:3}).map((g,m)=>jsxRuntime.jsx("div",{className:"h-11 px-4 py-2",children:jsxRuntime.jsx("div",{className:"h-4 bg-[var(--accent-background)] rounded animate-pulse"})},`skeleton-${m}`))}),!a&&jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[v,b===0&&jsxRuntime.jsx(reactAriaComponents.ListBoxItem,{id:"__empty__",textValue:"empty",isDisabled:true,className:"py-6 text-center text-sm text-[var(--menu-muted)] cursor-default pointer-events-none",children:jsxRuntime.jsx("span",{role:"status",children:N||"No options available"})})]})]})})]})}var Y=react.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=react.Children.count(M);return R>1e3&&console.warn("Select has >1000 items. Consider using Autocomplete component for better performance."),jsxRuntime.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:jsxRuntime.jsx(reactAriaComponents.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=react.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=react.Children.count(P);C>1e3&&console.warn("Select has >1000 items. Consider using Autocomplete component for better performance.");let O=react.useMemo(()=>{let z=new Map,I=te=>{react.Children.forEach(te,$=>{if(react.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=react.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 jsxRuntime.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:jsxRuntime.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=react.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 jsxRuntime.jsx(reactAriaComponents.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})=>jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[i==="multiple"?jsxRuntime.jsx(lucideReact.CheckSquare,{className:`absolute left-2 h-4 w-4 ${a?"visible":"invisible"}`,"aria-hidden":"true"}):a&&jsxRuntime.jsx(lucideReact.Check,{className:"absolute left-2 h-4 w-4","aria-hidden":"true"}),jsxRuntime.jsx("span",{className:p?"text-[var(--menu-muted)]":"",children:r})]})})});H.displayName="SelectItem";function T({children:s,className:r,...n}){return jsxRuntime.jsx(reactAriaComponents.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 jsxRuntime.jsx(reactAriaComponents.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=zod.z.object({className:zod.z.string().optional(),children:zod.z.any().optional(),id:zod.z.string().optional(),"aria-label":zod.z.string().optional(),"aria-labelledby":zod.z.string().optional(),"aria-describedby":zod.z.string().optional(),"aria-live":zod.z.enum(["off","polite","assertive"]).optional(),"aria-hidden":zod.z.boolean().optional(),"data-testid":zod.z.string().optional()});var he=zod.z.enum(["sm","default","lg"]),Pe=zod.z.enum(["single","multiple"]),Ve=zod.z.enum(["native","aria"]),Ne=B.extend({label:zod.z.string(),placeholder:zod.z.string().optional(),description:zod.z.string().optional(),value:zod.z.union([zod.z.string(),zod.z.array(zod.z.string())]).optional(),defaultValue:zod.z.union([zod.z.string(),zod.z.array(zod.z.string())]).optional(),selectionMode:Pe.optional().default("single"),isOpen:zod.z.boolean().optional(),isDisabled:zod.z.boolean().optional().default(false),isRequired:zod.z.boolean().optional().default(false),disabledKeys:zod.z.array(zod.z.string()).optional(),validate:zod.z.custom().optional(),validationBehavior:Ve.optional().default("aria"),errorMessage:zod.z.string().optional(),isLoading:zod.z.boolean().optional().default(false),emptyStateMessage:zod.z.string().optional(),name:zod.z.string().optional(),size:he.optional().default("default"),onChange:zod.z.custom().optional(),onOpenChange:zod.z.custom().optional(),children:zod.z.custom()}),ze=B.extend({value:zod.z.string(),textValue:zod.z.string().optional(),isDisabled:zod.z.boolean().optional().default(false),children:zod.z.custom(),className:zod.z.string().optional()}),Ie=B.extend({children:zod.z.custom(),className:zod.z.string().optional()}),we=B.extend({children:zod.z.custom(),className:zod.z.string().optional()});exports.MultiSelect=ye;exports.Select=ve;exports.SelectHeaderPropsSchema=we;exports.SelectItemPropsSchema=ze;exports.SelectPropsSchema=Ne;exports.SelectSectionPropsSchema=Ie;//# sourceMappingURL=index.js.map
33
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
1
+ {"version":3,"sources":["../../../src/elements/Select/Select.styles.ts","../../../src/elements/Select/Select.tsx","../../../src/schemas/BaseComponentProps.ts","../../../src/elements/Select/Select.types.ts"],"names":["selectTriggerVariants","cva","selectItemVariants","selectPopoverVariants","selectSectionVariants","selectErrorVariants","SelectBase","ariaSelectProps","triggerContent","triggerRef","label","description","isRequired","isDisabled","isLoading","errorMessage","size","emptyStateMessage","childCount","children","labelId","useId","descriptionId","errorId","isInvalid","jsxs","AriaSelect","Label","jsx","Text","Button","Loader2","ChevronDown","FieldError","validationErrors","displayError","Fragment","AlertCircle","Popover","ListBox","_","i","ListBoxItem","SelectRoot","forwardRef","placeholder","value","defaultValue","isOpen","disabledKeys","validate","validationBehavior","name","onChange","onOpenChange","className","props","ref","Children","key","SelectValue","MultiSelectRoot","_selectionMode","valueToLabelMap","useMemo","map","processChildren","nodes","child","isValidElement","element","SelectItem","itemValue","itemChildren","displayValue","v","keys","memo","textValue","message","isSelected","selectionMode","itemDisabled","CheckSquare","Check","SelectSection","ListBoxSection","SelectHeader","Header","Select","MultiSelect","BaseComponentPropsSchema","z","SelectSizeSchema","SelectionModeSchema","ValidationBehaviorSchema","SelectPropsSchema","SelectItemPropsSchema","SelectSectionPropsSchema","SelectHeaderPropsSchema"],"mappings":"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","file":"index.js","sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\n\n/**\n * CVA Variants for Select Trigger Button\n *\n * Styles the trigger button that opens the select popover.\n * All sizes enforce 44px minimum touch targets for WCAG 2.2 AAA compliance.\n */\nexport const selectTriggerVariants = cva(\n [\n // Base styles\n 'flex',\n 'w-full',\n 'items-center',\n 'justify-between',\n 'rounded-md',\n 'border',\n 'bg-[var(--content-background)]',\n 'text-[var(--content-foreground)]',\n 'transition-colors',\n 'duration-200',\n 'outline-none',\n // Focus ring (WCAG 2.2 AAA - 7:1 contrast)\n 'focus-visible:ring-2',\n 'focus-visible:ring-[var(--ring)]',\n 'focus-visible:ring-offset-2',\n // Hover state\n 'hover:bg-[var(--accent)]/10',\n // Disabled state\n 'disabled:cursor-not-allowed',\n 'disabled:opacity-50',\n // Loading state\n 'data-[loading=true]:cursor-wait',\n // Truncate text\n 'truncate',\n ],\n {\n variants: {\n size: {\n // All sizes use 44px minimum touch target for WCAG 2.2 AAA compliance\n // Visual height varies but touch area remains accessible\n sm: 'h-9 px-3 text-sm min-h-[44px]',\n default: 'h-11 px-4 text-base min-h-[44px]',\n lg: 'h-14 px-5 text-lg min-h-[44px]',\n },\n isInvalid: {\n true: 'border-[var(--destructive)]',\n false: 'border-[var(--input)] hover:border-[var(--input)]/80',\n },\n },\n defaultVariants: {\n size: 'default',\n isInvalid: false,\n },\n }\n);\n\n/**\n * CVA Variants for Select Items\n *\n * Styles individual selectable items within the listbox.\n * All sizes enforce 44px minimum touch targets for WCAG 2.2 AAA compliance.\n */\nexport const selectItemVariants = cva(\n [\n // Base styles\n 'relative',\n 'flex',\n 'w-full',\n 'cursor-pointer',\n 'select-none',\n 'items-center',\n 'rounded-sm',\n 'outline-none',\n 'transition-colors',\n // Padding for checkmark icon (left side)\n 'pl-8',\n 'pr-2',\n // Hover state\n 'hover:bg-[var(--accent)]',\n 'hover:text-[var(--accent-foreground)]',\n // Focus state\n 'focus:bg-[var(--accent)]',\n 'focus:text-[var(--accent-foreground)]',\n // Selected state\n 'data-[selected=true]:bg-[var(--accent)]',\n 'data-[selected=true]:text-[var(--accent-foreground)]',\n // Disabled state\n 'data-[disabled=true]:pointer-events-none',\n 'data-[disabled=true]:opacity-50',\n 'data-[disabled=true]:text-[var(--menu-muted)]',\n ],\n {\n variants: {\n size: {\n // All sizes use 44px minimum touch target for WCAG 2.2 AAA compliance\n sm: 'h-9 py-1.5 text-sm min-h-[44px]',\n default: 'h-11 py-2 text-base min-h-[44px]',\n lg: 'h-14 py-3 text-lg min-h-[44px]',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\n/**\n * CVA Variants for Select Popover\n *\n * Styles the popover container that holds the listbox.\n * Uses menu tokens to match Dropdown styling.\n */\nexport const selectPopoverVariants = cva(\n [\n // Base styles - use menu tokens to match Dropdown styling\n 'z-50',\n 'w-[--trigger-width]',\n 'rounded-md',\n 'border',\n 'border-[var(--menu-border)]',\n 'bg-[var(--menu-background)]',\n 'text-[var(--menu-foreground)]',\n 'shadow-md',\n 'outline-none',\n 'overflow-auto',\n // Animations\n 'data-[entering]:animate-in',\n 'data-[entering]:fade-in-0',\n 'data-[entering]:zoom-in-95',\n 'data-[exiting]:animate-out',\n 'data-[exiting]:fade-out-0',\n 'data-[exiting]:zoom-out-95',\n ],\n {\n variants: {\n size: {\n sm: 'max-h-[200px] p-1',\n default: 'max-h-[300px] p-1',\n lg: 'max-h-[400px] p-1',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\n/**\n * CVA Variants for Section Headers\n *\n * Styles the non-interactive section header labels within grouped selects.\n */\nexport const selectSectionVariants = cva(\n [\n 'px-2',\n 'py-1.5',\n 'text-xs',\n 'font-semibold',\n 'text-[var(--menu-muted)]',\n 'uppercase',\n 'tracking-wider',\n ],\n {\n variants: {\n size: {\n sm: 'px-2 py-1 text-[10px]',\n default: 'px-2 py-1.5 text-xs',\n lg: 'px-3 py-2 text-sm',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\n/**\n * CVA Variants for Error Messages\n *\n * Styles the error message displayed below the select trigger.\n */\nexport const selectErrorVariants = cva(\n [\n 'flex',\n 'items-center',\n 'gap-1.5',\n 'text-sm',\n 'font-medium',\n 'text-[var(--destructive)]',\n 'mt-1.5',\n ],\n {\n variants: {\n size: {\n sm: 'text-xs mt-1',\n default: 'text-sm mt-1.5',\n lg: 'text-base mt-2',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\n/**\n * Type exports for variant props.\n * Allows TypeScript inference of variant combinations.\n */\nexport type SelectTriggerVariantProps = VariantProps<typeof selectTriggerVariants>;\nexport type SelectItemVariantProps = VariantProps<typeof selectItemVariants>;\nexport type SelectPopoverVariantProps = VariantProps<typeof selectPopoverVariants>;\nexport type SelectSectionVariantProps = VariantProps<typeof selectSectionVariants>;\nexport type SelectErrorVariantProps = VariantProps<typeof selectErrorVariants>;\n","'use client';\n\n/**\n * Select Component - Implementation\n *\n * Accessible select/dropdown component combining React Aria primitives with ShadCN styling.\n * Follows Themis library patterns with compound component structure.\n *\n * Architecture:\n * - SelectBase: Internal component containing shared label, description, trigger, error, and listbox rendering.\n * - SelectRoot: Single selection wrapper (thin layer over SelectBase).\n * - MultiSelectRoot: Multiple selection wrapper with display value logic (thin layer over SelectBase).\n * - SelectItem, SelectSection, SelectHeader: Compound sub-components.\n *\n * @see select-prd.md (Full requirements)\n * @see Select.types.ts (Zod schemas)\n * @see Select.styles.ts (CVA variant definitions)\n * @see plan.md (Implementation plan)\n */\n\nimport {\n forwardRef,\n memo,\n Children,\n useId,\n useMemo,\n isValidElement,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from 'react';\nimport {\n Select as AriaSelect,\n Label,\n Button,\n SelectValue,\n Popover,\n ListBox,\n ListBoxItem,\n ListBoxSection,\n Header,\n Text,\n FieldError,\n} from 'react-aria-components';\nimport { Check, CheckSquare, ChevronDown, Loader2, AlertCircle } from 'lucide-react';\nimport type {\n SelectProps,\n SelectItemProps,\n SelectSectionProps,\n SelectHeaderProps,\n SelectSize,\n} from './Select.types';\nimport {\n selectTriggerVariants,\n selectItemVariants,\n selectPopoverVariants,\n selectSectionVariants,\n selectErrorVariants,\n} from './Select.styles';\n\n// Re-export CVA variants so existing imports from './Select' continue to work\nexport {\n selectTriggerVariants,\n selectItemVariants,\n selectPopoverVariants,\n selectSectionVariants,\n selectErrorVariants,\n} from './Select.styles';\n\n/**\n * Internal props for SelectBase.\n * Extends the shared props with selection-mode-specific configuration.\n */\ninterface SelectBaseProps {\n /** The AriaSelect props to spread onto the root element */\n ariaSelectProps: Record<string, unknown>;\n /** Content to render inside the trigger button (SelectValue for single, span for multi) */\n triggerContent: ReactNode;\n /** Ref to forward to the trigger button */\n triggerRef: Ref<HTMLButtonElement>;\n /** Label text */\n label: string;\n /** Optional description text */\n description?: string;\n /** Whether the field is required */\n isRequired: boolean;\n /** Whether the field is disabled */\n isDisabled: boolean;\n /** Whether the field is in a loading state */\n isLoading: boolean;\n /** Error message to display */\n errorMessage?: string;\n /** Size variant */\n size: SelectSize;\n /** Empty state message override */\n emptyStateMessage?: string;\n /** Child count (pre-computed by parent) */\n childCount: number;\n /** Children to render in the listbox */\n children: ReactNode;\n}\n\n/**\n * SelectBase - Internal shared rendering component\n *\n * Contains the shared rendering logic for label, description, trigger button,\n * error message, and popover/listbox that both SelectRoot and MultiSelectRoot use.\n * This is not exported as part of the public API.\n */\nfunction SelectBase({\n ariaSelectProps,\n triggerContent,\n triggerRef,\n label,\n description,\n isRequired,\n isDisabled,\n isLoading,\n errorMessage,\n size,\n emptyStateMessage,\n childCount,\n children,\n}: SelectBaseProps): ReactElement {\n // Generate unique IDs for accessibility\n const labelId = useId();\n const descriptionId = useId();\n const errorId = useId();\n\n // Determine if invalid based on errorMessage\n const isInvalid = Boolean(errorMessage);\n\n return (\n <AriaSelect\n {...ariaSelectProps}\n isInvalid={isInvalid}\n >\n {/* Label */}\n <Label id={labelId} className=\"text-sm font-medium text-[var(--content-foreground)]\">\n {label}\n {isRequired && <span className=\"text-[var(--destructive)] ml-1\">*</span>}\n </Label>\n\n {/* Description (if provided) */}\n {description && (\n <Text id={descriptionId} slot=\"description\" className=\"text-sm text-[var(--menu-muted)] mt-1\">\n {description}\n </Text>\n )}\n\n {/* Trigger Button */}\n <Button\n ref={triggerRef}\n className={selectTriggerVariants({ size, isInvalid })}\n aria-labelledby={labelId}\n aria-describedby={description ? descriptionId : errorMessage ? errorId : undefined}\n data-loading={isLoading}\n {...(isRequired && { 'aria-required': 'true' })}\n {...(isLoading && { 'aria-busy': 'true' })}\n {...((isDisabled || isLoading) && { 'aria-disabled': 'true' })}\n >\n {triggerContent}\n\n {/* Loading spinner or chevron icon */}\n {isLoading ? (\n <Loader2 className=\"h-4 w-4 animate-spin text-[var(--menu-muted)]\" aria-hidden=\"true\" />\n ) : (\n <ChevronDown className=\"h-4 w-4 text-[var(--menu-muted)]\" aria-hidden=\"true\" />\n )}\n </Button>\n\n {/* Error Message */}\n <FieldError id={errorId} className={selectErrorVariants({ size })}>\n {({ validationErrors }) => {\n // Display custom errorMessage if provided, otherwise show validation errors\n const displayError = errorMessage || validationErrors.join(' ');\n return displayError ? (\n <>\n <AlertCircle className=\"h-4 w-4\" aria-hidden=\"true\" />\n {displayError}\n </>\n ) : null;\n }}\n </FieldError>\n\n {/* Popover with ListBox */}\n <Popover className={selectPopoverVariants({ size })}>\n <ListBox className=\"outline-none\">\n {/* Loading skeleton (if loading and has children) */}\n {isLoading && childCount > 0 && (\n <>\n {Array.from({ length: 3 }).map((_, i) => (\n <div\n key={`skeleton-${i}`}\n className=\"h-11 px-4 py-2\"\n >\n <div className=\"h-4 bg-[var(--accent-background)] rounded animate-pulse\" />\n </div>\n ))}\n </>\n )}\n\n {/* Items or empty state */}\n {!isLoading && (\n <>\n {children}\n {/* Empty state - render as disabled item so popover can open */}\n {childCount === 0 && (\n <ListBoxItem\n id=\"__empty__\"\n textValue=\"empty\"\n isDisabled\n className=\"py-6 text-center text-sm text-[var(--menu-muted)] cursor-default pointer-events-none\"\n >\n <span role=\"status\">\n {emptyStateMessage || 'No options available'}\n </span>\n </ListBoxItem>\n )}\n </>\n )}\n </ListBox>\n </Popover>\n </AriaSelect>\n );\n}\n\n/**\n * Select Root Component (Single Selection Only)\n *\n * Main select component with controlled/uncontrolled modes for single selection.\n * For multiple selection, use MultiSelect component.\n * Delegates shared rendering to SelectBase.\n *\n * @see select-prd.md US-1 (Basic Single Selection)\n * @see plan.md Decision 28 (Ref forwarding to trigger button)\n */\nconst SelectRoot = forwardRef<HTMLButtonElement, Omit<SelectProps, 'selectionMode'>>(\n (\n {\n // Display props\n label,\n placeholder,\n description,\n\n // Selection props\n value,\n defaultValue,\n\n // State props\n isOpen,\n isDisabled = false,\n isRequired = false,\n disabledKeys,\n\n // Validation props\n validate,\n validationBehavior = 'aria',\n errorMessage,\n\n // Loading state\n isLoading = false,\n emptyStateMessage,\n\n // Form integration\n name,\n\n // Size variant\n size = 'default',\n\n // Event handlers\n onChange,\n onOpenChange,\n\n // Standard props\n className,\n children,\n ...props\n },\n ref\n ) => {\n // Warn if >1000 items (Decision 22: Large Item Count Handling)\n const childCount = Children.count(children);\n if (childCount > 1000) {\n console.warn(\n 'Select has >1000 items. Consider using Autocomplete component for better performance.'\n );\n }\n\n return (\n <SelectBase\n ariaSelectProps={{\n value: value as string,\n defaultValue: defaultValue as string,\n onChange: (key: unknown) => {\n if (onChange) {\n onChange(key as string);\n }\n },\n placeholder,\n disabledKeys,\n isOpen,\n onOpenChange,\n isDisabled: isDisabled || isLoading,\n isRequired,\n name,\n validate: validate as ((value: unknown) => true | string | null | undefined) | undefined,\n validationBehavior,\n className,\n ...props,\n }}\n triggerContent={<SelectValue className=\"flex-1 text-left truncate\" />}\n triggerRef={ref}\n label={label}\n description={description}\n isRequired={isRequired}\n isDisabled={isDisabled}\n isLoading={isLoading}\n errorMessage={errorMessage}\n size={size}\n emptyStateMessage={emptyStateMessage}\n childCount={childCount}\n >\n {children}\n </SelectBase>\n );\n }\n);\n\nSelectRoot.displayName = 'Select';\n\n/**\n * MultiSelect Root Component (Multiple Selection)\n *\n * Select component for multiple selection. Uses different API from single Select.\n * Delegates shared rendering to SelectBase, adding multi-select display value logic.\n *\n * @see select-prd.md US-6 (Multiple Selection)\n * @see plan.md Decision 28 (Ref forwarding to trigger button)\n */\nconst MultiSelectRoot = forwardRef<HTMLButtonElement, SelectProps>(\n (\n {\n // Display props\n label,\n placeholder,\n description,\n\n // Selection props\n value,\n defaultValue,\n selectionMode: _selectionMode = 'multiple',\n\n // State props\n isOpen,\n isDisabled = false,\n isRequired = false,\n disabledKeys,\n\n // Validation props\n validate,\n validationBehavior = 'aria',\n errorMessage,\n\n // Loading state\n isLoading = false,\n emptyStateMessage,\n\n // Form integration\n name,\n\n // Size variant\n size = 'default',\n\n // Event handlers\n onChange,\n onOpenChange,\n\n // Standard props\n className,\n children,\n ...props\n },\n ref\n ) => {\n // Warn if >1000 items\n const childCount = Children.count(children);\n if (childCount > 1000) {\n console.warn(\n 'Select has >1000 items. Consider using Autocomplete component for better performance.'\n );\n }\n\n // Build value-to-label map for display (memoized to prevent recreation on every render)\n const valueToLabelMap = useMemo(() => {\n const map = new Map<string, string>();\n const processChildren = (nodes: ReactNode): void => {\n Children.forEach(nodes, (child) => {\n if (isValidElement(child)) {\n const element = child as ReactElement<{ value?: string; children?: ReactNode }>;\n if (element.type === SelectItem || element.props?.value) {\n const itemValue = element.props.value;\n const itemChildren = element.props.children;\n if (itemValue && typeof itemChildren === 'string') {\n map.set(itemValue, itemChildren);\n }\n }\n if (element.props?.children) {\n processChildren(element.props.children);\n }\n }\n });\n };\n processChildren(children);\n return map;\n }, [children]);\n\n // Multi-select display logic (Decision 5: Multi-select threshold)\n // Memoized to prevent recalculation on every render\n const displayValue = useMemo(() => {\n if (!value || !Array.isArray(value) || value.length === 0) {\n return placeholder || '';\n }\n\n if (value.length <= 2) {\n // Show item labels for 1-2 items\n const labels = value.map(v => valueToLabelMap.get(v as string) || v);\n return labels.join(', ');\n }\n\n // Show count for 3+ items\n return `${value.length} items selected`;\n }, [value, valueToLabelMap, placeholder]);\n\n return (\n <SelectBase\n ariaSelectProps={{\n value: value as string[],\n defaultValue: defaultValue as string[],\n onChange: (keys: unknown) => {\n if (onChange) {\n onChange(keys as string[]);\n }\n },\n selectionMode: 'multiple',\n disabledKeys,\n isOpen,\n onOpenChange,\n isDisabled: isDisabled || isLoading,\n isRequired,\n name,\n validate: validate as ((value: unknown) => true | string | null | undefined) | undefined,\n validationBehavior,\n className,\n ...props,\n }}\n triggerContent={\n <span className=\"flex-1 text-left truncate\">\n {displayValue}\n </span>\n }\n triggerRef={ref}\n label={label}\n description={description}\n isRequired={isRequired}\n isDisabled={isDisabled}\n isLoading={isLoading}\n errorMessage={errorMessage}\n size={size}\n emptyStateMessage={emptyStateMessage}\n childCount={childCount}\n >\n {children}\n </SelectBase>\n );\n }\n);\n\nMultiSelectRoot.displayName = 'MultiSelect';\n\n/**\n * Select.Item Component\n *\n * Individual selectable item with checkmark icon.\n *\n * @see select-prd.md US-1 (Basic Single Selection)\n * @see plan.md Decision 6 (Left-side checkmark)\n * @see plan.md Decision 23 (textValue required for custom children)\n */\nconst SelectItem = memo(function SelectItem({ children, textValue, value, isDisabled = false, className, ...props }: SelectItemProps): ReactElement {\n // Validate textValue for custom children (Decision 23)\n if (!textValue && typeof children !== 'string') {\n const message = 'Select.Item with custom children requires textValue prop for accessibility';\n if (process.env.NODE_ENV === 'development') {\n throw new Error(message);\n } else {\n console.warn(message);\n }\n }\n\n return (\n <ListBoxItem\n id={value}\n textValue={textValue || (typeof children === 'string' ? children : undefined)}\n className={`${selectItemVariants({ size: 'default' })} ${className || ''}`}\n isDisabled={isDisabled}\n {...props}\n >\n {({ isSelected, selectionMode, isDisabled: itemDisabled }) => (\n <>\n {/* Checkmark icon (left side) - Decision 6 */}\n {selectionMode === 'multiple' ? (\n <CheckSquare\n className={`absolute left-2 h-4 w-4 ${isSelected ? 'visible' : 'invisible'}`}\n aria-hidden=\"true\"\n />\n ) : (\n isSelected && <Check className=\"absolute left-2 h-4 w-4\" aria-hidden=\"true\" />\n )}\n <span className={itemDisabled ? 'text-[var(--menu-muted)]' : ''}>\n {children}\n </span>\n </>\n )}\n </ListBoxItem>\n );\n});\n\nSelectItem.displayName = 'SelectItem';\n\n/**\n * Select.Section Component\n *\n * Groups related items with optional header.\n *\n * @see select-prd.md US-3 (Grouped Options with Sections)\n */\nfunction SelectSection({ children, className, ...props }: SelectSectionProps): ReactElement {\n return (\n <ListBoxSection className={`border-t border-[var(--border)] first:border-t-0 ${className || ''}`} {...props}>\n {children}\n </ListBoxSection>\n );\n}\n\nSelectSection.displayName = 'SelectSection';\n\n/**\n * Select.Header Component\n *\n * Section header with non-interactive label.\n *\n * @see select-prd.md US-3 (Grouped Options with Sections)\n */\nfunction SelectHeader({ children, className, ...props }: SelectHeaderProps): ReactElement {\n return (\n <Header className={`${selectSectionVariants({ size: 'default' })} ${className || ''}`} {...props}>\n {children}\n </Header>\n );\n}\n\nSelectHeader.displayName = 'SelectHeader';\n\n/**\n * Compound Component Exports\n *\n * Uses Object.assign() for compound components (e.g., Select.Item, Select.Section).\n * Named exports (SelectItem, SelectSection, SelectHeader) are also available below\n * for better tree-shaking. Prefer named exports in new code.\n *\n * @deprecated (v2) The Object.assign compound pattern will be removed in v2.\n * Migrate to named imports: `import { SelectItem, SelectSection, SelectHeader } from '...'`\n *\n * @see GUIDE.mdx (Compound component pattern)\n */\nexport const Select = Object.assign(SelectRoot, {\n Item: SelectItem,\n Section: SelectSection,\n Header: SelectHeader,\n});\n\nexport const MultiSelect = Object.assign(MultiSelectRoot, {\n Item: SelectItem,\n Section: SelectSection,\n Header: SelectHeader,\n});\n\n// Named exports for individual components (preferred for tree-shaking)\nexport { SelectRoot, MultiSelectRoot, SelectItem, SelectSection, SelectHeader };\n","import { z } from 'zod';\n\n/**\n * Base props schema for all Themis components\n * Ensures consistent accessibility and styling APIs across the library\n *\n * @see spec.md FR-009 to FR-014 (Accessibility Requirements)\n * @see constitution.md Principle IV (Accessibility First - WCAG 2.2 AA minimum)\n */\nexport const BaseComponentPropsSchema = z.object({\n // Styling\n className: z.string().optional(),\n\n // React\n children: z.any().optional(), // ReactNode not directly supported by Zod\n id: z.string().optional(),\n\n // Accessibility (WCAG 2.2 AA requirements)\n 'aria-label': z.string().optional(),\n 'aria-labelledby': z.string().optional(),\n 'aria-describedby': z.string().optional(),\n 'aria-live': z.enum(['off', 'polite', 'assertive']).optional(),\n 'aria-hidden': z.boolean().optional(),\n\n // Testing & Development\n 'data-testid': z.string().optional(),\n});\n\nexport type BaseComponentProps = z.infer<typeof BaseComponentPropsSchema>;\n","import { z } from 'zod';\nimport { BaseComponentPropsSchema } from '../../schemas/BaseComponentProps';\nimport type { ReactNode } from 'react';\nimport type {\n SelectProps as AriaSelectProps,\n ListBoxItemProps as AriaListBoxItemProps,\n} from 'react-aria-components';\n\n/**\n * Select size variants\n *\n * @see select-prd.md US-9 (Visual States - Size Variants)\n * @see plan.md Decision 4 (Include sm size with warning for desktop-only)\n */\nexport const SelectSizeSchema = z.enum(['sm', 'default', 'lg']);\nexport type SelectSize = z.infer<typeof SelectSizeSchema>;\n\n/**\n * Select selection mode\n *\n * @see select-prd.md US-6 (Multiple Selection)\n */\nexport const SelectionModeSchema = z.enum(['single', 'multiple']);\nexport type SelectionMode = z.infer<typeof SelectionModeSchema>;\n\n/**\n * Select validation behavior\n *\n * @see select-prd.md US-4 (Validation and Error Messages)\n */\nexport const ValidationBehaviorSchema = z.enum(['native', 'aria']);\nexport type ValidationBehavior = z.infer<typeof ValidationBehaviorSchema>;\n\n/**\n * Select root component props schema\n *\n * @see select-prd.md US-1 (Basic Single Selection)\n * @see select-prd.md US-4 (Validation and Error Messages)\n * @see select-prd.md US-5 (Disabled States)\n * @see select-prd.md US-6 (Multiple Selection)\n * @see select-prd.md US-7 (Async Data Loading)\n * @see select-prd.md US-10 (Form Integration)\n */\nexport const SelectPropsSchema = BaseComponentPropsSchema.extend({\n // Display props (US-1)\n label: z.string(), // Required for accessibility\n placeholder: z.string().optional(),\n description: z.string().optional(),\n\n // Selection props (US-1, US-6)\n value: z.union([z.string(), z.array(z.string())]).optional(),\n defaultValue: z.union([z.string(), z.array(z.string())]).optional(),\n selectionMode: SelectionModeSchema.optional().default('single'),\n\n // State props (US-1, US-5)\n isOpen: z.boolean().optional(),\n isDisabled: z.boolean().optional().default(false),\n isRequired: z.boolean().optional().default(false),\n disabledKeys: z.array(z.string()).optional(),\n\n // Validation props (US-4)\n validate: z\n .custom<(value: string | string[]) => string | undefined>()\n .optional(),\n validationBehavior: ValidationBehaviorSchema.optional().default('aria'),\n errorMessage: z.string().optional(),\n\n // Loading state (US-7)\n isLoading: z.boolean().optional().default(false),\n emptyStateMessage: z.string().optional(),\n\n // Form integration (US-10)\n name: z.string().optional(),\n\n // Size variant (US-9)\n size: SelectSizeSchema.optional().default('default'),\n\n // Event handlers (US-1)\n onChange: z\n .custom<(value: string | string[]) => void>()\n .optional(),\n onOpenChange: z.custom<(isOpen: boolean) => void>().optional(),\n\n // Children (Select.Item, Select.Section components)\n children: z.custom<ReactNode>(),\n});\n\nexport type SelectProps = z.infer<typeof SelectPropsSchema> &\n Omit<AriaSelectProps<object>, keyof z.infer<typeof SelectPropsSchema>>;\n\n/**\n * Select.Item props schema\n *\n * @see select-prd.md US-1 (Basic Single Selection)\n * @see select-prd.md US-5 (Disabled States)\n * @see select-prd.md US-8 (Custom Value Rendering)\n * @see plan.md Decision 23 (textValue required for custom children)\n */\nexport const SelectItemPropsSchema = BaseComponentPropsSchema.extend({\n // Item value (required)\n value: z.string(),\n\n // Text value for typeahead and accessibility (required for custom children)\n textValue: z.string().optional(),\n\n // Disabled state\n isDisabled: z.boolean().optional().default(false),\n\n // Item content\n children: z.custom<ReactNode>(),\n\n // Optional className for custom styling\n className: z.string().optional(),\n});\n\nexport type SelectItemProps = z.infer<typeof SelectItemPropsSchema> &\n Omit<AriaListBoxItemProps, keyof z.infer<typeof SelectItemPropsSchema>>;\n\n/**\n * Select.Section props schema\n *\n * @see select-prd.md US-3 (Grouped Options with Sections)\n */\nexport const SelectSectionPropsSchema = BaseComponentPropsSchema.extend({\n // Section content (typically Select.Header + Select.Item components)\n children: z.custom<ReactNode>(),\n\n // Optional className for custom styling\n className: z.string().optional(),\n});\n\nexport type SelectSectionProps = z.infer<typeof SelectSectionPropsSchema>;\n\n/**\n * Select.Header props schema (for section headers)\n *\n * @see select-prd.md US-3 (Grouped Options with Sections)\n */\nexport const SelectHeaderPropsSchema = BaseComponentPropsSchema.extend({\n // Header text\n children: z.custom<ReactNode>(),\n\n // Optional className for header styling\n className: z.string().optional(),\n});\n\nexport type SelectHeaderProps = z.infer<typeof SelectHeaderPropsSchema>;\n\n/**\n * CVA variant configuration types\n * Used for class-variance-authority integration\n */\nexport type SelectVariantSize = SelectSize;\nexport type SelectVariantSelectionMode = SelectionMode;\n"]}
@@ -1,4 +1,3 @@
1
- export { MultiSelect, Select, SelectHeaderPropsSchema, SelectItemPropsSchema, SelectPropsSchema, SelectSectionPropsSchema } from '../../chunk-6TYWWQHM.mjs';
2
- import '../../chunk-5SVLJN2C.mjs';
3
- //# sourceMappingURL=index.mjs.map
1
+ "use client";
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
4
3
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"index.mjs"}
1
+ {"version":3,"sources":["../../../src/elements/Select/Select.styles.ts","../../../src/elements/Select/Select.tsx","../../../src/schemas/BaseComponentProps.ts","../../../src/elements/Select/Select.types.ts"],"names":["selectTriggerVariants","cva","selectItemVariants","selectPopoverVariants","selectSectionVariants","selectErrorVariants","SelectBase","ariaSelectProps","triggerContent","triggerRef","label","description","isRequired","isDisabled","isLoading","errorMessage","size","emptyStateMessage","childCount","children","labelId","useId","descriptionId","errorId","isInvalid","jsxs","AriaSelect","Label","jsx","Text","Button","Loader2","ChevronDown","FieldError","validationErrors","displayError","Fragment","AlertCircle","Popover","ListBox","_","i","ListBoxItem","SelectRoot","forwardRef","placeholder","value","defaultValue","isOpen","disabledKeys","validate","validationBehavior","name","onChange","onOpenChange","className","props","ref","Children","key","SelectValue","MultiSelectRoot","_selectionMode","valueToLabelMap","useMemo","map","processChildren","nodes","child","isValidElement","element","SelectItem","itemValue","itemChildren","displayValue","v","keys","memo","textValue","message","isSelected","selectionMode","itemDisabled","CheckSquare","Check","SelectSection","ListBoxSection","SelectHeader","Header","Select","MultiSelect","BaseComponentPropsSchema","z","SelectSizeSchema","SelectionModeSchema","ValidationBehaviorSchema","SelectPropsSchema","SelectItemPropsSchema","SelectSectionPropsSchema","SelectHeaderPropsSchema"],"mappings":"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","file":"index.mjs","sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\n\n/**\n * CVA Variants for Select Trigger Button\n *\n * Styles the trigger button that opens the select popover.\n * All sizes enforce 44px minimum touch targets for WCAG 2.2 AAA compliance.\n */\nexport const selectTriggerVariants = cva(\n [\n // Base styles\n 'flex',\n 'w-full',\n 'items-center',\n 'justify-between',\n 'rounded-md',\n 'border',\n 'bg-[var(--content-background)]',\n 'text-[var(--content-foreground)]',\n 'transition-colors',\n 'duration-200',\n 'outline-none',\n // Focus ring (WCAG 2.2 AAA - 7:1 contrast)\n 'focus-visible:ring-2',\n 'focus-visible:ring-[var(--ring)]',\n 'focus-visible:ring-offset-2',\n // Hover state\n 'hover:bg-[var(--accent)]/10',\n // Disabled state\n 'disabled:cursor-not-allowed',\n 'disabled:opacity-50',\n // Loading state\n 'data-[loading=true]:cursor-wait',\n // Truncate text\n 'truncate',\n ],\n {\n variants: {\n size: {\n // All sizes use 44px minimum touch target for WCAG 2.2 AAA compliance\n // Visual height varies but touch area remains accessible\n sm: 'h-9 px-3 text-sm min-h-[44px]',\n default: 'h-11 px-4 text-base min-h-[44px]',\n lg: 'h-14 px-5 text-lg min-h-[44px]',\n },\n isInvalid: {\n true: 'border-[var(--destructive)]',\n false: 'border-[var(--input)] hover:border-[var(--input)]/80',\n },\n },\n defaultVariants: {\n size: 'default',\n isInvalid: false,\n },\n }\n);\n\n/**\n * CVA Variants for Select Items\n *\n * Styles individual selectable items within the listbox.\n * All sizes enforce 44px minimum touch targets for WCAG 2.2 AAA compliance.\n */\nexport const selectItemVariants = cva(\n [\n // Base styles\n 'relative',\n 'flex',\n 'w-full',\n 'cursor-pointer',\n 'select-none',\n 'items-center',\n 'rounded-sm',\n 'outline-none',\n 'transition-colors',\n // Padding for checkmark icon (left side)\n 'pl-8',\n 'pr-2',\n // Hover state\n 'hover:bg-[var(--accent)]',\n 'hover:text-[var(--accent-foreground)]',\n // Focus state\n 'focus:bg-[var(--accent)]',\n 'focus:text-[var(--accent-foreground)]',\n // Selected state\n 'data-[selected=true]:bg-[var(--accent)]',\n 'data-[selected=true]:text-[var(--accent-foreground)]',\n // Disabled state\n 'data-[disabled=true]:pointer-events-none',\n 'data-[disabled=true]:opacity-50',\n 'data-[disabled=true]:text-[var(--menu-muted)]',\n ],\n {\n variants: {\n size: {\n // All sizes use 44px minimum touch target for WCAG 2.2 AAA compliance\n sm: 'h-9 py-1.5 text-sm min-h-[44px]',\n default: 'h-11 py-2 text-base min-h-[44px]',\n lg: 'h-14 py-3 text-lg min-h-[44px]',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\n/**\n * CVA Variants for Select Popover\n *\n * Styles the popover container that holds the listbox.\n * Uses menu tokens to match Dropdown styling.\n */\nexport const selectPopoverVariants = cva(\n [\n // Base styles - use menu tokens to match Dropdown styling\n 'z-50',\n 'w-[--trigger-width]',\n 'rounded-md',\n 'border',\n 'border-[var(--menu-border)]',\n 'bg-[var(--menu-background)]',\n 'text-[var(--menu-foreground)]',\n 'shadow-md',\n 'outline-none',\n 'overflow-auto',\n // Animations\n 'data-[entering]:animate-in',\n 'data-[entering]:fade-in-0',\n 'data-[entering]:zoom-in-95',\n 'data-[exiting]:animate-out',\n 'data-[exiting]:fade-out-0',\n 'data-[exiting]:zoom-out-95',\n ],\n {\n variants: {\n size: {\n sm: 'max-h-[200px] p-1',\n default: 'max-h-[300px] p-1',\n lg: 'max-h-[400px] p-1',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\n/**\n * CVA Variants for Section Headers\n *\n * Styles the non-interactive section header labels within grouped selects.\n */\nexport const selectSectionVariants = cva(\n [\n 'px-2',\n 'py-1.5',\n 'text-xs',\n 'font-semibold',\n 'text-[var(--menu-muted)]',\n 'uppercase',\n 'tracking-wider',\n ],\n {\n variants: {\n size: {\n sm: 'px-2 py-1 text-[10px]',\n default: 'px-2 py-1.5 text-xs',\n lg: 'px-3 py-2 text-sm',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\n/**\n * CVA Variants for Error Messages\n *\n * Styles the error message displayed below the select trigger.\n */\nexport const selectErrorVariants = cva(\n [\n 'flex',\n 'items-center',\n 'gap-1.5',\n 'text-sm',\n 'font-medium',\n 'text-[var(--destructive)]',\n 'mt-1.5',\n ],\n {\n variants: {\n size: {\n sm: 'text-xs mt-1',\n default: 'text-sm mt-1.5',\n lg: 'text-base mt-2',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\n/**\n * Type exports for variant props.\n * Allows TypeScript inference of variant combinations.\n */\nexport type SelectTriggerVariantProps = VariantProps<typeof selectTriggerVariants>;\nexport type SelectItemVariantProps = VariantProps<typeof selectItemVariants>;\nexport type SelectPopoverVariantProps = VariantProps<typeof selectPopoverVariants>;\nexport type SelectSectionVariantProps = VariantProps<typeof selectSectionVariants>;\nexport type SelectErrorVariantProps = VariantProps<typeof selectErrorVariants>;\n","'use client';\n\n/**\n * Select Component - Implementation\n *\n * Accessible select/dropdown component combining React Aria primitives with ShadCN styling.\n * Follows Themis library patterns with compound component structure.\n *\n * Architecture:\n * - SelectBase: Internal component containing shared label, description, trigger, error, and listbox rendering.\n * - SelectRoot: Single selection wrapper (thin layer over SelectBase).\n * - MultiSelectRoot: Multiple selection wrapper with display value logic (thin layer over SelectBase).\n * - SelectItem, SelectSection, SelectHeader: Compound sub-components.\n *\n * @see select-prd.md (Full requirements)\n * @see Select.types.ts (Zod schemas)\n * @see Select.styles.ts (CVA variant definitions)\n * @see plan.md (Implementation plan)\n */\n\nimport {\n forwardRef,\n memo,\n Children,\n useId,\n useMemo,\n isValidElement,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from 'react';\nimport {\n Select as AriaSelect,\n Label,\n Button,\n SelectValue,\n Popover,\n ListBox,\n ListBoxItem,\n ListBoxSection,\n Header,\n Text,\n FieldError,\n} from 'react-aria-components';\nimport { Check, CheckSquare, ChevronDown, Loader2, AlertCircle } from 'lucide-react';\nimport type {\n SelectProps,\n SelectItemProps,\n SelectSectionProps,\n SelectHeaderProps,\n SelectSize,\n} from './Select.types';\nimport {\n selectTriggerVariants,\n selectItemVariants,\n selectPopoverVariants,\n selectSectionVariants,\n selectErrorVariants,\n} from './Select.styles';\n\n// Re-export CVA variants so existing imports from './Select' continue to work\nexport {\n selectTriggerVariants,\n selectItemVariants,\n selectPopoverVariants,\n selectSectionVariants,\n selectErrorVariants,\n} from './Select.styles';\n\n/**\n * Internal props for SelectBase.\n * Extends the shared props with selection-mode-specific configuration.\n */\ninterface SelectBaseProps {\n /** The AriaSelect props to spread onto the root element */\n ariaSelectProps: Record<string, unknown>;\n /** Content to render inside the trigger button (SelectValue for single, span for multi) */\n triggerContent: ReactNode;\n /** Ref to forward to the trigger button */\n triggerRef: Ref<HTMLButtonElement>;\n /** Label text */\n label: string;\n /** Optional description text */\n description?: string;\n /** Whether the field is required */\n isRequired: boolean;\n /** Whether the field is disabled */\n isDisabled: boolean;\n /** Whether the field is in a loading state */\n isLoading: boolean;\n /** Error message to display */\n errorMessage?: string;\n /** Size variant */\n size: SelectSize;\n /** Empty state message override */\n emptyStateMessage?: string;\n /** Child count (pre-computed by parent) */\n childCount: number;\n /** Children to render in the listbox */\n children: ReactNode;\n}\n\n/**\n * SelectBase - Internal shared rendering component\n *\n * Contains the shared rendering logic for label, description, trigger button,\n * error message, and popover/listbox that both SelectRoot and MultiSelectRoot use.\n * This is not exported as part of the public API.\n */\nfunction SelectBase({\n ariaSelectProps,\n triggerContent,\n triggerRef,\n label,\n description,\n isRequired,\n isDisabled,\n isLoading,\n errorMessage,\n size,\n emptyStateMessage,\n childCount,\n children,\n}: SelectBaseProps): ReactElement {\n // Generate unique IDs for accessibility\n const labelId = useId();\n const descriptionId = useId();\n const errorId = useId();\n\n // Determine if invalid based on errorMessage\n const isInvalid = Boolean(errorMessage);\n\n return (\n <AriaSelect\n {...ariaSelectProps}\n isInvalid={isInvalid}\n >\n {/* Label */}\n <Label id={labelId} className=\"text-sm font-medium text-[var(--content-foreground)]\">\n {label}\n {isRequired && <span className=\"text-[var(--destructive)] ml-1\">*</span>}\n </Label>\n\n {/* Description (if provided) */}\n {description && (\n <Text id={descriptionId} slot=\"description\" className=\"text-sm text-[var(--menu-muted)] mt-1\">\n {description}\n </Text>\n )}\n\n {/* Trigger Button */}\n <Button\n ref={triggerRef}\n className={selectTriggerVariants({ size, isInvalid })}\n aria-labelledby={labelId}\n aria-describedby={description ? descriptionId : errorMessage ? errorId : undefined}\n data-loading={isLoading}\n {...(isRequired && { 'aria-required': 'true' })}\n {...(isLoading && { 'aria-busy': 'true' })}\n {...((isDisabled || isLoading) && { 'aria-disabled': 'true' })}\n >\n {triggerContent}\n\n {/* Loading spinner or chevron icon */}\n {isLoading ? (\n <Loader2 className=\"h-4 w-4 animate-spin text-[var(--menu-muted)]\" aria-hidden=\"true\" />\n ) : (\n <ChevronDown className=\"h-4 w-4 text-[var(--menu-muted)]\" aria-hidden=\"true\" />\n )}\n </Button>\n\n {/* Error Message */}\n <FieldError id={errorId} className={selectErrorVariants({ size })}>\n {({ validationErrors }) => {\n // Display custom errorMessage if provided, otherwise show validation errors\n const displayError = errorMessage || validationErrors.join(' ');\n return displayError ? (\n <>\n <AlertCircle className=\"h-4 w-4\" aria-hidden=\"true\" />\n {displayError}\n </>\n ) : null;\n }}\n </FieldError>\n\n {/* Popover with ListBox */}\n <Popover className={selectPopoverVariants({ size })}>\n <ListBox className=\"outline-none\">\n {/* Loading skeleton (if loading and has children) */}\n {isLoading && childCount > 0 && (\n <>\n {Array.from({ length: 3 }).map((_, i) => (\n <div\n key={`skeleton-${i}`}\n className=\"h-11 px-4 py-2\"\n >\n <div className=\"h-4 bg-[var(--accent-background)] rounded animate-pulse\" />\n </div>\n ))}\n </>\n )}\n\n {/* Items or empty state */}\n {!isLoading && (\n <>\n {children}\n {/* Empty state - render as disabled item so popover can open */}\n {childCount === 0 && (\n <ListBoxItem\n id=\"__empty__\"\n textValue=\"empty\"\n isDisabled\n className=\"py-6 text-center text-sm text-[var(--menu-muted)] cursor-default pointer-events-none\"\n >\n <span role=\"status\">\n {emptyStateMessage || 'No options available'}\n </span>\n </ListBoxItem>\n )}\n </>\n )}\n </ListBox>\n </Popover>\n </AriaSelect>\n );\n}\n\n/**\n * Select Root Component (Single Selection Only)\n *\n * Main select component with controlled/uncontrolled modes for single selection.\n * For multiple selection, use MultiSelect component.\n * Delegates shared rendering to SelectBase.\n *\n * @see select-prd.md US-1 (Basic Single Selection)\n * @see plan.md Decision 28 (Ref forwarding to trigger button)\n */\nconst SelectRoot = forwardRef<HTMLButtonElement, Omit<SelectProps, 'selectionMode'>>(\n (\n {\n // Display props\n label,\n placeholder,\n description,\n\n // Selection props\n value,\n defaultValue,\n\n // State props\n isOpen,\n isDisabled = false,\n isRequired = false,\n disabledKeys,\n\n // Validation props\n validate,\n validationBehavior = 'aria',\n errorMessage,\n\n // Loading state\n isLoading = false,\n emptyStateMessage,\n\n // Form integration\n name,\n\n // Size variant\n size = 'default',\n\n // Event handlers\n onChange,\n onOpenChange,\n\n // Standard props\n className,\n children,\n ...props\n },\n ref\n ) => {\n // Warn if >1000 items (Decision 22: Large Item Count Handling)\n const childCount = Children.count(children);\n if (childCount > 1000) {\n console.warn(\n 'Select has >1000 items. Consider using Autocomplete component for better performance.'\n );\n }\n\n return (\n <SelectBase\n ariaSelectProps={{\n value: value as string,\n defaultValue: defaultValue as string,\n onChange: (key: unknown) => {\n if (onChange) {\n onChange(key as string);\n }\n },\n placeholder,\n disabledKeys,\n isOpen,\n onOpenChange,\n isDisabled: isDisabled || isLoading,\n isRequired,\n name,\n validate: validate as ((value: unknown) => true | string | null | undefined) | undefined,\n validationBehavior,\n className,\n ...props,\n }}\n triggerContent={<SelectValue className=\"flex-1 text-left truncate\" />}\n triggerRef={ref}\n label={label}\n description={description}\n isRequired={isRequired}\n isDisabled={isDisabled}\n isLoading={isLoading}\n errorMessage={errorMessage}\n size={size}\n emptyStateMessage={emptyStateMessage}\n childCount={childCount}\n >\n {children}\n </SelectBase>\n );\n }\n);\n\nSelectRoot.displayName = 'Select';\n\n/**\n * MultiSelect Root Component (Multiple Selection)\n *\n * Select component for multiple selection. Uses different API from single Select.\n * Delegates shared rendering to SelectBase, adding multi-select display value logic.\n *\n * @see select-prd.md US-6 (Multiple Selection)\n * @see plan.md Decision 28 (Ref forwarding to trigger button)\n */\nconst MultiSelectRoot = forwardRef<HTMLButtonElement, SelectProps>(\n (\n {\n // Display props\n label,\n placeholder,\n description,\n\n // Selection props\n value,\n defaultValue,\n selectionMode: _selectionMode = 'multiple',\n\n // State props\n isOpen,\n isDisabled = false,\n isRequired = false,\n disabledKeys,\n\n // Validation props\n validate,\n validationBehavior = 'aria',\n errorMessage,\n\n // Loading state\n isLoading = false,\n emptyStateMessage,\n\n // Form integration\n name,\n\n // Size variant\n size = 'default',\n\n // Event handlers\n onChange,\n onOpenChange,\n\n // Standard props\n className,\n children,\n ...props\n },\n ref\n ) => {\n // Warn if >1000 items\n const childCount = Children.count(children);\n if (childCount > 1000) {\n console.warn(\n 'Select has >1000 items. Consider using Autocomplete component for better performance.'\n );\n }\n\n // Build value-to-label map for display (memoized to prevent recreation on every render)\n const valueToLabelMap = useMemo(() => {\n const map = new Map<string, string>();\n const processChildren = (nodes: ReactNode): void => {\n Children.forEach(nodes, (child) => {\n if (isValidElement(child)) {\n const element = child as ReactElement<{ value?: string; children?: ReactNode }>;\n if (element.type === SelectItem || element.props?.value) {\n const itemValue = element.props.value;\n const itemChildren = element.props.children;\n if (itemValue && typeof itemChildren === 'string') {\n map.set(itemValue, itemChildren);\n }\n }\n if (element.props?.children) {\n processChildren(element.props.children);\n }\n }\n });\n };\n processChildren(children);\n return map;\n }, [children]);\n\n // Multi-select display logic (Decision 5: Multi-select threshold)\n // Memoized to prevent recalculation on every render\n const displayValue = useMemo(() => {\n if (!value || !Array.isArray(value) || value.length === 0) {\n return placeholder || '';\n }\n\n if (value.length <= 2) {\n // Show item labels for 1-2 items\n const labels = value.map(v => valueToLabelMap.get(v as string) || v);\n return labels.join(', ');\n }\n\n // Show count for 3+ items\n return `${value.length} items selected`;\n }, [value, valueToLabelMap, placeholder]);\n\n return (\n <SelectBase\n ariaSelectProps={{\n value: value as string[],\n defaultValue: defaultValue as string[],\n onChange: (keys: unknown) => {\n if (onChange) {\n onChange(keys as string[]);\n }\n },\n selectionMode: 'multiple',\n disabledKeys,\n isOpen,\n onOpenChange,\n isDisabled: isDisabled || isLoading,\n isRequired,\n name,\n validate: validate as ((value: unknown) => true | string | null | undefined) | undefined,\n validationBehavior,\n className,\n ...props,\n }}\n triggerContent={\n <span className=\"flex-1 text-left truncate\">\n {displayValue}\n </span>\n }\n triggerRef={ref}\n label={label}\n description={description}\n isRequired={isRequired}\n isDisabled={isDisabled}\n isLoading={isLoading}\n errorMessage={errorMessage}\n size={size}\n emptyStateMessage={emptyStateMessage}\n childCount={childCount}\n >\n {children}\n </SelectBase>\n );\n }\n);\n\nMultiSelectRoot.displayName = 'MultiSelect';\n\n/**\n * Select.Item Component\n *\n * Individual selectable item with checkmark icon.\n *\n * @see select-prd.md US-1 (Basic Single Selection)\n * @see plan.md Decision 6 (Left-side checkmark)\n * @see plan.md Decision 23 (textValue required for custom children)\n */\nconst SelectItem = memo(function SelectItem({ children, textValue, value, isDisabled = false, className, ...props }: SelectItemProps): ReactElement {\n // Validate textValue for custom children (Decision 23)\n if (!textValue && typeof children !== 'string') {\n const message = 'Select.Item with custom children requires textValue prop for accessibility';\n if (process.env.NODE_ENV === 'development') {\n throw new Error(message);\n } else {\n console.warn(message);\n }\n }\n\n return (\n <ListBoxItem\n id={value}\n textValue={textValue || (typeof children === 'string' ? children : undefined)}\n className={`${selectItemVariants({ size: 'default' })} ${className || ''}`}\n isDisabled={isDisabled}\n {...props}\n >\n {({ isSelected, selectionMode, isDisabled: itemDisabled }) => (\n <>\n {/* Checkmark icon (left side) - Decision 6 */}\n {selectionMode === 'multiple' ? (\n <CheckSquare\n className={`absolute left-2 h-4 w-4 ${isSelected ? 'visible' : 'invisible'}`}\n aria-hidden=\"true\"\n />\n ) : (\n isSelected && <Check className=\"absolute left-2 h-4 w-4\" aria-hidden=\"true\" />\n )}\n <span className={itemDisabled ? 'text-[var(--menu-muted)]' : ''}>\n {children}\n </span>\n </>\n )}\n </ListBoxItem>\n );\n});\n\nSelectItem.displayName = 'SelectItem';\n\n/**\n * Select.Section Component\n *\n * Groups related items with optional header.\n *\n * @see select-prd.md US-3 (Grouped Options with Sections)\n */\nfunction SelectSection({ children, className, ...props }: SelectSectionProps): ReactElement {\n return (\n <ListBoxSection className={`border-t border-[var(--border)] first:border-t-0 ${className || ''}`} {...props}>\n {children}\n </ListBoxSection>\n );\n}\n\nSelectSection.displayName = 'SelectSection';\n\n/**\n * Select.Header Component\n *\n * Section header with non-interactive label.\n *\n * @see select-prd.md US-3 (Grouped Options with Sections)\n */\nfunction SelectHeader({ children, className, ...props }: SelectHeaderProps): ReactElement {\n return (\n <Header className={`${selectSectionVariants({ size: 'default' })} ${className || ''}`} {...props}>\n {children}\n </Header>\n );\n}\n\nSelectHeader.displayName = 'SelectHeader';\n\n/**\n * Compound Component Exports\n *\n * Uses Object.assign() for compound components (e.g., Select.Item, Select.Section).\n * Named exports (SelectItem, SelectSection, SelectHeader) are also available below\n * for better tree-shaking. Prefer named exports in new code.\n *\n * @deprecated (v2) The Object.assign compound pattern will be removed in v2.\n * Migrate to named imports: `import { SelectItem, SelectSection, SelectHeader } from '...'`\n *\n * @see GUIDE.mdx (Compound component pattern)\n */\nexport const Select = Object.assign(SelectRoot, {\n Item: SelectItem,\n Section: SelectSection,\n Header: SelectHeader,\n});\n\nexport const MultiSelect = Object.assign(MultiSelectRoot, {\n Item: SelectItem,\n Section: SelectSection,\n Header: SelectHeader,\n});\n\n// Named exports for individual components (preferred for tree-shaking)\nexport { SelectRoot, MultiSelectRoot, SelectItem, SelectSection, SelectHeader };\n","import { z } from 'zod';\n\n/**\n * Base props schema for all Themis components\n * Ensures consistent accessibility and styling APIs across the library\n *\n * @see spec.md FR-009 to FR-014 (Accessibility Requirements)\n * @see constitution.md Principle IV (Accessibility First - WCAG 2.2 AA minimum)\n */\nexport const BaseComponentPropsSchema = z.object({\n // Styling\n className: z.string().optional(),\n\n // React\n children: z.any().optional(), // ReactNode not directly supported by Zod\n id: z.string().optional(),\n\n // Accessibility (WCAG 2.2 AA requirements)\n 'aria-label': z.string().optional(),\n 'aria-labelledby': z.string().optional(),\n 'aria-describedby': z.string().optional(),\n 'aria-live': z.enum(['off', 'polite', 'assertive']).optional(),\n 'aria-hidden': z.boolean().optional(),\n\n // Testing & Development\n 'data-testid': z.string().optional(),\n});\n\nexport type BaseComponentProps = z.infer<typeof BaseComponentPropsSchema>;\n","import { z } from 'zod';\nimport { BaseComponentPropsSchema } from '../../schemas/BaseComponentProps';\nimport type { ReactNode } from 'react';\nimport type {\n SelectProps as AriaSelectProps,\n ListBoxItemProps as AriaListBoxItemProps,\n} from 'react-aria-components';\n\n/**\n * Select size variants\n *\n * @see select-prd.md US-9 (Visual States - Size Variants)\n * @see plan.md Decision 4 (Include sm size with warning for desktop-only)\n */\nexport const SelectSizeSchema = z.enum(['sm', 'default', 'lg']);\nexport type SelectSize = z.infer<typeof SelectSizeSchema>;\n\n/**\n * Select selection mode\n *\n * @see select-prd.md US-6 (Multiple Selection)\n */\nexport const SelectionModeSchema = z.enum(['single', 'multiple']);\nexport type SelectionMode = z.infer<typeof SelectionModeSchema>;\n\n/**\n * Select validation behavior\n *\n * @see select-prd.md US-4 (Validation and Error Messages)\n */\nexport const ValidationBehaviorSchema = z.enum(['native', 'aria']);\nexport type ValidationBehavior = z.infer<typeof ValidationBehaviorSchema>;\n\n/**\n * Select root component props schema\n *\n * @see select-prd.md US-1 (Basic Single Selection)\n * @see select-prd.md US-4 (Validation and Error Messages)\n * @see select-prd.md US-5 (Disabled States)\n * @see select-prd.md US-6 (Multiple Selection)\n * @see select-prd.md US-7 (Async Data Loading)\n * @see select-prd.md US-10 (Form Integration)\n */\nexport const SelectPropsSchema = BaseComponentPropsSchema.extend({\n // Display props (US-1)\n label: z.string(), // Required for accessibility\n placeholder: z.string().optional(),\n description: z.string().optional(),\n\n // Selection props (US-1, US-6)\n value: z.union([z.string(), z.array(z.string())]).optional(),\n defaultValue: z.union([z.string(), z.array(z.string())]).optional(),\n selectionMode: SelectionModeSchema.optional().default('single'),\n\n // State props (US-1, US-5)\n isOpen: z.boolean().optional(),\n isDisabled: z.boolean().optional().default(false),\n isRequired: z.boolean().optional().default(false),\n disabledKeys: z.array(z.string()).optional(),\n\n // Validation props (US-4)\n validate: z\n .custom<(value: string | string[]) => string | undefined>()\n .optional(),\n validationBehavior: ValidationBehaviorSchema.optional().default('aria'),\n errorMessage: z.string().optional(),\n\n // Loading state (US-7)\n isLoading: z.boolean().optional().default(false),\n emptyStateMessage: z.string().optional(),\n\n // Form integration (US-10)\n name: z.string().optional(),\n\n // Size variant (US-9)\n size: SelectSizeSchema.optional().default('default'),\n\n // Event handlers (US-1)\n onChange: z\n .custom<(value: string | string[]) => void>()\n .optional(),\n onOpenChange: z.custom<(isOpen: boolean) => void>().optional(),\n\n // Children (Select.Item, Select.Section components)\n children: z.custom<ReactNode>(),\n});\n\nexport type SelectProps = z.infer<typeof SelectPropsSchema> &\n Omit<AriaSelectProps<object>, keyof z.infer<typeof SelectPropsSchema>>;\n\n/**\n * Select.Item props schema\n *\n * @see select-prd.md US-1 (Basic Single Selection)\n * @see select-prd.md US-5 (Disabled States)\n * @see select-prd.md US-8 (Custom Value Rendering)\n * @see plan.md Decision 23 (textValue required for custom children)\n */\nexport const SelectItemPropsSchema = BaseComponentPropsSchema.extend({\n // Item value (required)\n value: z.string(),\n\n // Text value for typeahead and accessibility (required for custom children)\n textValue: z.string().optional(),\n\n // Disabled state\n isDisabled: z.boolean().optional().default(false),\n\n // Item content\n children: z.custom<ReactNode>(),\n\n // Optional className for custom styling\n className: z.string().optional(),\n});\n\nexport type SelectItemProps = z.infer<typeof SelectItemPropsSchema> &\n Omit<AriaListBoxItemProps, keyof z.infer<typeof SelectItemPropsSchema>>;\n\n/**\n * Select.Section props schema\n *\n * @see select-prd.md US-3 (Grouped Options with Sections)\n */\nexport const SelectSectionPropsSchema = BaseComponentPropsSchema.extend({\n // Section content (typically Select.Header + Select.Item components)\n children: z.custom<ReactNode>(),\n\n // Optional className for custom styling\n className: z.string().optional(),\n});\n\nexport type SelectSectionProps = z.infer<typeof SelectSectionPropsSchema>;\n\n/**\n * Select.Header props schema (for section headers)\n *\n * @see select-prd.md US-3 (Grouped Options with Sections)\n */\nexport const SelectHeaderPropsSchema = BaseComponentPropsSchema.extend({\n // Header text\n children: z.custom<ReactNode>(),\n\n // Optional className for header styling\n className: z.string().optional(),\n});\n\nexport type SelectHeaderProps = z.infer<typeof SelectHeaderPropsSchema>;\n\n/**\n * CVA variant configuration types\n * Used for class-variance-authority integration\n */\nexport type SelectVariantSize = SelectSize;\nexport type SelectVariantSelectionMode = SelectionMode;\n"]}
@@ -1,22 +1,3 @@
1
- 'use strict';
2
-
3
- var chunkA6KEDVUR_js = require('../../chunk-A6KEDVUR.js');
4
- require('../../chunk-VIREG536.js');
5
- require('../../chunk-T4COXKQ3.js');
6
-
7
-
8
-
9
- Object.defineProperty(exports, "Skeleton", {
10
- enumerable: true,
11
- get: function () { return chunkA6KEDVUR_js.Skeleton; }
12
- });
13
- Object.defineProperty(exports, "SkeletonPropsSchema", {
14
- enumerable: true,
15
- get: function () { return chunkA6KEDVUR_js.SkeletonPropsSchema; }
16
- });
17
- Object.defineProperty(exports, "skeletonVariants", {
18
- enumerable: true,
19
- get: function () { return chunkA6KEDVUR_js.skeletonVariants; }
20
- });
21
- //# sourceMappingURL=index.js.map
1
+ "use client";
2
+ 'use strict';var react=require('react'),classVarianceAuthority=require('class-variance-authority'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime'),zod=require('zod');function o(...t){return tailwindMerge.twMerge(clsx.clsx(t))}var r=classVarianceAuthority.cva("animate-pulse bg-[var(--accent-background)] relative",{variants:{variant:{rectangle:"rounded-md",circle:"rounded-full",text:"rounded-sm h-4"}},defaultVariants:{variant:"rectangle"}}),n=react.memo(react.forwardRef(({className:t,variant:l,...p},m)=>jsxRuntime.jsx("div",{ref:m,role:"status","aria-live":"polite","aria-busy":"true",className:o(r({variant:l}),t),...p,children:jsxRuntime.jsx("span",{className:"sr-only",children:"Loading..."})})));n.displayName="Skeleton";var i=zod.z.object({className:zod.z.string().optional(),children:zod.z.any().optional(),id:zod.z.string().optional(),"aria-label":zod.z.string().optional(),"aria-labelledby":zod.z.string().optional(),"aria-describedby":zod.z.string().optional(),"aria-live":zod.z.enum(["off","polite","assertive"]).optional(),"aria-hidden":zod.z.boolean().optional(),"data-testid":zod.z.string().optional()});var g=i.extend({variant:zod.z.enum(["rectangle","circle","text"]).optional().default("rectangle"),className:zod.z.string().optional()});exports.Skeleton=n;exports.SkeletonPropsSchema=g;exports.skeletonVariants=r;//# sourceMappingURL=index.js.map
22
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
1
+ {"version":3,"sources":["../../../src/utils/cn.ts","../../../src/elements/Skeleton/Skeleton.tsx","../../../src/schemas/BaseComponentProps.ts","../../../src/elements/Skeleton/Skeleton.types.ts"],"names":["cn","inputs","twMerge","clsx","skeletonVariants","cva","Skeleton","memo","forwardRef","className","variant","props","ref","jsx","BaseComponentPropsSchema","z","SkeletonPropsSchema"],"mappings":"2NAcO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAA8B,CAClD,OAAOC,qBAAAA,CAAQC,UAAKF,CAAM,CAAC,CAC7B,CCIA,IAAMG,CAAAA,CAAmBC,0BAAAA,CAEvB,sDAAA,CACA,CACE,SAAU,CAER,OAAA,CAAS,CACP,SAAA,CAAW,YAAA,CACX,OAAQ,cAAA,CACR,IAAA,CAAM,gBACR,CACF,CAAA,CACA,eAAA,CAAiB,CACf,OAAA,CAAS,WACX,CACF,CACF,CAAA,CAeMC,EAAWC,UAAAA,CACfC,gBAAAA,CACE,CAAC,CAAE,SAAA,CAAAC,CAAAA,CAAW,QAAAC,CAAAA,CAAS,GAAGC,CAAM,CAAA,CAAGC,CAAAA,GAE/BC,eAAC,KAAA,CAAA,CACC,GAAA,CAAKD,CAAAA,CACL,IAAA,CAAK,QAAA,CACL,WAAA,CAAU,SACV,WAAA,CAAU,MAAA,CACV,UAAWZ,CAAAA,CAAGI,CAAAA,CAAiB,CAAE,OAAA,CAAAM,CAAQ,CAAC,CAAA,CAAGD,CAAS,CAAA,CACrD,GAAGE,CAAAA,CAGJ,QAAA,CAAAE,eAAC,MAAA,CAAA,CAAK,SAAA,CAAU,UAAU,QAAA,CAAA,YAAA,CAAU,CAAA,CACtC,CAGN,CACF,EAEAP,CAAAA,CAAS,YAAc,UAAA,CC9DhB,IAAMQ,CAAAA,CAA2BC,MAAE,MAAA,CAAO,CAE/C,UAAWA,KAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAG/B,QAAA,CAAUA,KAAAA,CAAE,GAAA,EAAI,CAAE,UAAS,CAC3B,EAAA,CAAIA,MAAE,MAAA,EAAO,CAAE,UAAS,CAGxB,YAAA,CAAcA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GACzB,iBAAA,CAAmBA,KAAAA,CAAE,QAAO,CAAE,QAAA,GAC9B,kBAAA,CAAoBA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS,CACxC,YAAaA,KAAAA,CAAE,IAAA,CAAK,CAAC,KAAA,CAAO,QAAA,CAAU,WAAW,CAAC,CAAA,CAAE,QAAA,EAAS,CAC7D,aAAA,CAAeA,KAAAA,CAAE,SAAQ,CAAE,QAAA,GAG3B,aAAA,CAAeA,KAAAA,CAAE,QAAO,CAAE,QAAA,EAC5B,CAAC,CAAA,CCfM,IAAMC,EAAsBF,CAAAA,CAAyB,MAAA,CAAO,CAEjE,OAAA,CAASC,KAAAA,CACN,KAAK,CAAC,WAAA,CAAa,QAAA,CAAU,MAAM,CAAC,CAAA,CACpC,UAAS,CACT,OAAA,CAAQ,WAAW,CAAA,CAItB,SAAA,CAAWA,MAAE,MAAA,EAAO,CAAE,QAAA,EACxB,CAAC","file":"index.js","sourcesContent":["/**\n * Class Name Utility\n * Merges Tailwind CSS classes with conflict resolution\n *\n * Combines clsx for conditional classes and tailwind-merge for deduplication\n *\n * @example\n * cn('px-2 py-1', 'px-4') // => 'py-1 px-4' (px-4 overrides px-2)\n * cn('text-red-500', condition && 'text-blue-500') // => conditional application\n */\n\nimport { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","\"use client\";\n\n/**\n * Skeleton Component\n * Loading placeholder with pulse animation and theme-aware styling\n *\n * @see ShadCN Skeleton: https://ui.shadcn.com/docs/components/skeleton\n * @see spec.md FR-009 (WCAG 2.2 AAA - 7:1 contrast ratio)\n * @see tasks.md Phase 2 (Green Phase - Implementation)\n * @see constitution.md Principle IV (Accessibility First)\n */\n\nimport { forwardRef, memo, type HTMLAttributes } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\n/**\n * Skeleton variant styles using CVA\n * @see tasks.md Phase 2.2 (CVA Variant Definitions)\n */\nconst skeletonVariants = cva(\n // Base styles - pulse animation and theme-aware background\n \"animate-pulse bg-[var(--accent-background)] relative\",\n {\n variants: {\n // Shape variants\n variant: {\n rectangle: \"rounded-md\", // Default: 0.375rem border radius\n circle: \"rounded-full\", // Circular shape (for avatars, icons)\n text: \"rounded-sm h-4\", // Text line placeholder (1rem height, 0.125rem radius)\n },\n },\n defaultVariants: {\n variant: \"rectangle\",\n },\n }\n);\n\nexport interface SkeletonProps\n extends HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof skeletonVariants> {\n variant?: 'rectangle' | 'circle' | 'text';\n className?: string;\n}\n\n/**\n * Skeleton Component\n * Non-interactive loading placeholder with pulse animation\n *\n * @see tasks.md Phase 2.4 (Component Implementation)\n */\nconst Skeleton = memo(\n forwardRef<HTMLDivElement, SkeletonProps>(\n ({ className, variant, ...props }, ref) => {\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-live=\"polite\"\n aria-busy=\"true\"\n className={cn(skeletonVariants({ variant }), className)}\n {...props}\n >\n {/* Screen reader text for accessibility */}\n <span className=\"sr-only\">Loading...</span>\n </div>\n );\n }\n )\n);\n\nSkeleton.displayName = \"Skeleton\";\n\nexport { Skeleton, skeletonVariants };\n","import { z } from 'zod';\n\n/**\n * Base props schema for all Themis components\n * Ensures consistent accessibility and styling APIs across the library\n *\n * @see spec.md FR-009 to FR-014 (Accessibility Requirements)\n * @see constitution.md Principle IV (Accessibility First - WCAG 2.2 AA minimum)\n */\nexport const BaseComponentPropsSchema = z.object({\n // Styling\n className: z.string().optional(),\n\n // React\n children: z.any().optional(), // ReactNode not directly supported by Zod\n id: z.string().optional(),\n\n // Accessibility (WCAG 2.2 AA requirements)\n 'aria-label': z.string().optional(),\n 'aria-labelledby': z.string().optional(),\n 'aria-describedby': z.string().optional(),\n 'aria-live': z.enum(['off', 'polite', 'assertive']).optional(),\n 'aria-hidden': z.boolean().optional(),\n\n // Testing & Development\n 'data-testid': z.string().optional(),\n});\n\nexport type BaseComponentProps = z.infer<typeof BaseComponentPropsSchema>;\n","import { z } from 'zod';\nimport { BaseComponentPropsSchema } from '../../schemas/BaseComponentProps';\n\n/**\n * Skeleton props schema extending BaseComponentProps\n *\n * @see ShadCN Skeleton: https://ui.shadcn.com/docs/components/skeleton\n * @see tasks.md Phase 1.1 (Type System)\n * @see spec.md FR-009 (WCAG 2.2 AAA - 7:1 contrast ratio)\n * @see constitution.md Principle IV (Accessibility First)\n */\nexport const SkeletonPropsSchema = BaseComponentPropsSchema.extend({\n // Variants - shape of the skeleton placeholder\n variant: z\n .enum(['rectangle', 'circle', 'text'])\n .optional()\n .default('rectangle'),\n\n // Custom className for width/height overrides\n // Users can pass className=\"w-20 h-20\" for custom sizing\n className: z.string().optional(),\n});\n\nexport type SkeletonProps = z.infer<typeof SkeletonPropsSchema>;\n\n/**\n * CVA variant configuration type\n * Used for class-variance-authority integration\n */\nexport type SkeletonVariant = z.infer<typeof SkeletonPropsSchema>['variant'];\n"]}
@@ -1,5 +1,3 @@
1
- export { Skeleton, SkeletonPropsSchema, skeletonVariants } from '../../chunk-NFSBGRDB.mjs';
2
- import '../../chunk-E2KQFV3O.mjs';
3
- import '../../chunk-5SVLJN2C.mjs';
4
- //# sourceMappingURL=index.mjs.map
1
+ "use client";
2
+ import {memo,forwardRef}from'react';import {cva}from'class-variance-authority';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx}from'react/jsx-runtime';import {z}from'zod';function o(...t){return twMerge(clsx(t))}var r=cva("animate-pulse bg-[var(--accent-background)] relative",{variants:{variant:{rectangle:"rounded-md",circle:"rounded-full",text:"rounded-sm h-4"}},defaultVariants:{variant:"rectangle"}}),n=memo(forwardRef(({className:t,variant:l,...p},m)=>jsx("div",{ref:m,role:"status","aria-live":"polite","aria-busy":"true",className:o(r({variant:l}),t),...p,children:jsx("span",{className:"sr-only",children:"Loading..."})})));n.displayName="Skeleton";var i=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 g=i.extend({variant:z.enum(["rectangle","circle","text"]).optional().default("rectangle"),className:z.string().optional()});export{n as Skeleton,g as SkeletonPropsSchema,r as skeletonVariants};//# sourceMappingURL=index.mjs.map
5
3
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"index.mjs"}
1
+ {"version":3,"sources":["../../../src/utils/cn.ts","../../../src/elements/Skeleton/Skeleton.tsx","../../../src/schemas/BaseComponentProps.ts","../../../src/elements/Skeleton/Skeleton.types.ts"],"names":["cn","inputs","twMerge","clsx","skeletonVariants","cva","Skeleton","memo","forwardRef","className","variant","props","ref","jsx","BaseComponentPropsSchema","z","SkeletonPropsSchema"],"mappings":"oMAcO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAA8B,CAClD,OAAOC,OAAAA,CAAQC,KAAKF,CAAM,CAAC,CAC7B,CCIA,IAAMG,CAAAA,CAAmBC,GAAAA,CAEvB,sDAAA,CACA,CACE,SAAU,CAER,OAAA,CAAS,CACP,SAAA,CAAW,YAAA,CACX,OAAQ,cAAA,CACR,IAAA,CAAM,gBACR,CACF,CAAA,CACA,eAAA,CAAiB,CACf,OAAA,CAAS,WACX,CACF,CACF,CAAA,CAeMC,EAAWC,IAAAA,CACfC,UAAAA,CACE,CAAC,CAAE,SAAA,CAAAC,CAAAA,CAAW,QAAAC,CAAAA,CAAS,GAAGC,CAAM,CAAA,CAAGC,CAAAA,GAE/BC,IAAC,KAAA,CAAA,CACC,GAAA,CAAKD,CAAAA,CACL,IAAA,CAAK,QAAA,CACL,WAAA,CAAU,SACV,WAAA,CAAU,MAAA,CACV,UAAWZ,CAAAA,CAAGI,CAAAA,CAAiB,CAAE,OAAA,CAAAM,CAAQ,CAAC,CAAA,CAAGD,CAAS,CAAA,CACrD,GAAGE,CAAAA,CAGJ,QAAA,CAAAE,IAAC,MAAA,CAAA,CAAK,SAAA,CAAU,UAAU,QAAA,CAAA,YAAA,CAAU,CAAA,CACtC,CAGN,CACF,EAEAP,CAAAA,CAAS,YAAc,UAAA,CC9DhB,IAAMQ,CAAAA,CAA2BC,EAAE,MAAA,CAAO,CAE/C,UAAWA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAG/B,QAAA,CAAUA,CAAAA,CAAE,GAAA,EAAI,CAAE,UAAS,CAC3B,EAAA,CAAIA,EAAE,MAAA,EAAO,CAAE,UAAS,CAGxB,YAAA,CAAcA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GACzB,iBAAA,CAAmBA,CAAAA,CAAE,QAAO,CAAE,QAAA,GAC9B,kBAAA,CAAoBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS,CACxC,YAAaA,CAAAA,CAAE,IAAA,CAAK,CAAC,KAAA,CAAO,QAAA,CAAU,WAAW,CAAC,CAAA,CAAE,QAAA,EAAS,CAC7D,aAAA,CAAeA,CAAAA,CAAE,SAAQ,CAAE,QAAA,GAG3B,aAAA,CAAeA,CAAAA,CAAE,QAAO,CAAE,QAAA,EAC5B,CAAC,CAAA,CCfM,IAAMC,EAAsBF,CAAAA,CAAyB,MAAA,CAAO,CAEjE,OAAA,CAASC,CAAAA,CACN,KAAK,CAAC,WAAA,CAAa,QAAA,CAAU,MAAM,CAAC,CAAA,CACpC,UAAS,CACT,OAAA,CAAQ,WAAW,CAAA,CAItB,SAAA,CAAWA,EAAE,MAAA,EAAO,CAAE,QAAA,EACxB,CAAC","file":"index.mjs","sourcesContent":["/**\n * Class Name Utility\n * Merges Tailwind CSS classes with conflict resolution\n *\n * Combines clsx for conditional classes and tailwind-merge for deduplication\n *\n * @example\n * cn('px-2 py-1', 'px-4') // => 'py-1 px-4' (px-4 overrides px-2)\n * cn('text-red-500', condition && 'text-blue-500') // => conditional application\n */\n\nimport { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","\"use client\";\n\n/**\n * Skeleton Component\n * Loading placeholder with pulse animation and theme-aware styling\n *\n * @see ShadCN Skeleton: https://ui.shadcn.com/docs/components/skeleton\n * @see spec.md FR-009 (WCAG 2.2 AAA - 7:1 contrast ratio)\n * @see tasks.md Phase 2 (Green Phase - Implementation)\n * @see constitution.md Principle IV (Accessibility First)\n */\n\nimport { forwardRef, memo, type HTMLAttributes } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\n/**\n * Skeleton variant styles using CVA\n * @see tasks.md Phase 2.2 (CVA Variant Definitions)\n */\nconst skeletonVariants = cva(\n // Base styles - pulse animation and theme-aware background\n \"animate-pulse bg-[var(--accent-background)] relative\",\n {\n variants: {\n // Shape variants\n variant: {\n rectangle: \"rounded-md\", // Default: 0.375rem border radius\n circle: \"rounded-full\", // Circular shape (for avatars, icons)\n text: \"rounded-sm h-4\", // Text line placeholder (1rem height, 0.125rem radius)\n },\n },\n defaultVariants: {\n variant: \"rectangle\",\n },\n }\n);\n\nexport interface SkeletonProps\n extends HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof skeletonVariants> {\n variant?: 'rectangle' | 'circle' | 'text';\n className?: string;\n}\n\n/**\n * Skeleton Component\n * Non-interactive loading placeholder with pulse animation\n *\n * @see tasks.md Phase 2.4 (Component Implementation)\n */\nconst Skeleton = memo(\n forwardRef<HTMLDivElement, SkeletonProps>(\n ({ className, variant, ...props }, ref) => {\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-live=\"polite\"\n aria-busy=\"true\"\n className={cn(skeletonVariants({ variant }), className)}\n {...props}\n >\n {/* Screen reader text for accessibility */}\n <span className=\"sr-only\">Loading...</span>\n </div>\n );\n }\n )\n);\n\nSkeleton.displayName = \"Skeleton\";\n\nexport { Skeleton, skeletonVariants };\n","import { z } from 'zod';\n\n/**\n * Base props schema for all Themis components\n * Ensures consistent accessibility and styling APIs across the library\n *\n * @see spec.md FR-009 to FR-014 (Accessibility Requirements)\n * @see constitution.md Principle IV (Accessibility First - WCAG 2.2 AA minimum)\n */\nexport const BaseComponentPropsSchema = z.object({\n // Styling\n className: z.string().optional(),\n\n // React\n children: z.any().optional(), // ReactNode not directly supported by Zod\n id: z.string().optional(),\n\n // Accessibility (WCAG 2.2 AA requirements)\n 'aria-label': z.string().optional(),\n 'aria-labelledby': z.string().optional(),\n 'aria-describedby': z.string().optional(),\n 'aria-live': z.enum(['off', 'polite', 'assertive']).optional(),\n 'aria-hidden': z.boolean().optional(),\n\n // Testing & Development\n 'data-testid': z.string().optional(),\n});\n\nexport type BaseComponentProps = z.infer<typeof BaseComponentPropsSchema>;\n","import { z } from 'zod';\nimport { BaseComponentPropsSchema } from '../../schemas/BaseComponentProps';\n\n/**\n * Skeleton props schema extending BaseComponentProps\n *\n * @see ShadCN Skeleton: https://ui.shadcn.com/docs/components/skeleton\n * @see tasks.md Phase 1.1 (Type System)\n * @see spec.md FR-009 (WCAG 2.2 AAA - 7:1 contrast ratio)\n * @see constitution.md Principle IV (Accessibility First)\n */\nexport const SkeletonPropsSchema = BaseComponentPropsSchema.extend({\n // Variants - shape of the skeleton placeholder\n variant: z\n .enum(['rectangle', 'circle', 'text'])\n .optional()\n .default('rectangle'),\n\n // Custom className for width/height overrides\n // Users can pass className=\"w-20 h-20\" for custom sizing\n className: z.string().optional(),\n});\n\nexport type SkeletonProps = z.infer<typeof SkeletonPropsSchema>;\n\n/**\n * CVA variant configuration type\n * Used for class-variance-authority integration\n */\nexport type SkeletonVariant = z.infer<typeof SkeletonPropsSchema>['variant'];\n"]}
@@ -1,49 +1,3 @@
1
- 'use strict';
2
-
3
- var chunkEMMLADSC_js = require('../../chunk-EMMLADSC.js');
4
- require('../../chunk-B5Q4UPL6.js');
5
- require('../../chunk-VIREG536.js');
6
- var chunkT4COXKQ3_js = require('../../chunk-T4COXKQ3.js');
7
- var zod = require('zod');
8
-
9
- var SwitchPropsSchema = chunkT4COXKQ3_js.BaseComponentPropsSchema.extend({
10
- // State management (controlled/uncontrolled)
11
- isSelected: zod.z.boolean().optional(),
12
- defaultSelected: zod.z.boolean().optional().default(false),
13
- onChange: zod.z.function().optional(),
14
- // Variants (matching Button pattern)
15
- variant: zod.z.enum(["default", "destructive"]).optional().default("default"),
16
- // Sizes (3 sizes for consistency)
17
- size: zod.z.enum(["sm", "default", "lg"]).optional().default("default"),
18
- // States
19
- isDisabled: zod.z.boolean().optional().default(false),
20
- isReadOnly: zod.z.boolean().optional().default(false),
21
- // Labels (optional built-in labeling)
22
- label: zod.z.string().optional(),
23
- description: zod.z.string().optional(),
24
- // React Aria SwitchProps integration
25
- onFocus: zod.z.function().optional(),
26
- onBlur: zod.z.function().optional(),
27
- onFocusChange: zod.z.function().optional(),
28
- autoFocus: zod.z.boolean().optional()
29
- });
30
-
31
- Object.defineProperty(exports, "Switch", {
32
- enumerable: true,
33
- get: function () { return chunkEMMLADSC_js.Switch; }
34
- });
35
- Object.defineProperty(exports, "switchOuterVariants", {
36
- enumerable: true,
37
- get: function () { return chunkEMMLADSC_js.switchOuterVariants; }
38
- });
39
- Object.defineProperty(exports, "switchThumbVariants", {
40
- enumerable: true,
41
- get: function () { return chunkEMMLADSC_js.switchThumbVariants; }
42
- });
43
- Object.defineProperty(exports, "switchTrackVariants", {
44
- enumerable: true,
45
- get: function () { return chunkEMMLADSC_js.switchTrackVariants; }
46
- });
47
- exports.SwitchPropsSchema = SwitchPropsSchema;
48
- //# sourceMappingURL=index.js.map
1
+ "use client";
2
+ 'use strict';var react=require('react'),reactAriaComponents=require('react-aria-components'),classVarianceAuthority=require('class-variance-authority'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime'),zod=require('zod');function o(...s){return tailwindMerge.twMerge(clsx.clsx(s))}var u="data-[focus-visible]:ring-2 data-[focus-visible]:ring-[var(--themis-ring)] data-[focus-visible]:ring-offset-2",A="data-[pressed]:scale-[0.97]";var V="data-[hovered]:shadow-md";var l="hc:data-[focus-visible]:outline hc:data-[focus-visible]:outline-4 hc:data-[focus-visible]:outline-offset-2 hc:data-[focus-visible]:outline-foreground",h="hc:data-[hovered]:outline hc:data-[hovered]:outline-2 hc:data-[hovered]:outline-foreground",m="hc:data-[pressed]:outline hc:data-[pressed]:outline-2 hc:data-[pressed]:outline-offset-1 hc:data-[pressed]:outline-foreground";var S=`${u} ${A} ${V} ${l} ${h} ${m}`;var w=classVarianceAuthority.cva("inline-flex shrink-0 cursor-pointer items-center justify-center min-h-[44px] min-w-[44px] disabled:cursor-not-allowed disabled:opacity-50 data-[readonly]:cursor-default",{variants:{},defaultVariants:{}}),g=classVarianceAuthority.cva("relative inline-flex shrink-0 items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)] focus-visible:ring-offset-2 focus-visible:ring-offset-background",{variants:{variant:{default:"bg-[var(--input)] data-[selected]:bg-[var(--primary)]",destructive:"bg-[var(--input)] data-[selected]:bg-[var(--destructive)]"},size:{sm:"h-5 w-9",default:"h-6 w-11",lg:"h-7 w-14"}},defaultVariants:{variant:"default",size:"default"}}),b=classVarianceAuthority.cva("pointer-events-none absolute left-0.5 rounded-full bg-[var(--content-background)] shadow-lg ring-0 transition-transform data-[selected]:translate-x-full",{variants:{size:{sm:"h-4 w-4",default:"h-5 w-5",lg:"h-6 w-6"}},defaultVariants:{size:"default"}}),x=react.memo(react.forwardRef(({className:s,variant:y,size:d,label:r,description:n,isDisabled:p,isReadOnly:f,...E},N)=>jsxRuntime.jsx(reactAriaComponents.Switch,{ref:N,isDisabled:p,isReadOnly:f,className:i=>o("group inline-flex items-center gap-2",p&&"cursor-not-allowed opacity-50",s),...E,children:i=>jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("div",{className:o(w()),"data-selected":i.isSelected||void 0,"data-readonly":f||void 0,children:jsxRuntime.jsx("div",{className:o(g({variant:y,size:d}),S),"data-selected":i.isSelected||void 0,children:jsxRuntime.jsx("div",{className:o(b({size:d})),"data-selected":i.isSelected||void 0})})}),(r||n)&&jsxRuntime.jsxs("div",{className:"flex flex-col",children:[r&&jsxRuntime.jsx("span",{className:"text-sm font-medium text-[var(--content-foreground)]",children:r}),n&&jsxRuntime.jsx("span",{className:"text-xs text-[var(--menu-muted)]",children:n})]})]})})));x.displayName="Switch";var T=zod.z.object({className:zod.z.string().optional(),children:zod.z.any().optional(),id:zod.z.string().optional(),"aria-label":zod.z.string().optional(),"aria-labelledby":zod.z.string().optional(),"aria-describedby":zod.z.string().optional(),"aria-live":zod.z.enum(["off","polite","assertive"]).optional(),"aria-hidden":zod.z.boolean().optional(),"data-testid":zod.z.string().optional()});var I=T.extend({isSelected:zod.z.boolean().optional(),defaultSelected:zod.z.boolean().optional().default(false),onChange:zod.z.function().optional(),variant:zod.z.enum(["default","destructive"]).optional().default("default"),size:zod.z.enum(["sm","default","lg"]).optional().default("default"),isDisabled:zod.z.boolean().optional().default(false),isReadOnly:zod.z.boolean().optional().default(false),label:zod.z.string().optional(),description:zod.z.string().optional(),onFocus:zod.z.function().optional(),onBlur:zod.z.function().optional(),onFocusChange:zod.z.function().optional(),autoFocus:zod.z.boolean().optional()});exports.Switch=x;exports.SwitchPropsSchema=I;exports.switchOuterVariants=w;exports.switchThumbVariants=b;exports.switchTrackVariants=g;//# sourceMappingURL=index.js.map
49
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/Switch/Switch.types.ts"],"names":["BaseComponentPropsSchema","z"],"mappings":";;;;;;;;AAYO,IAAM,iBAAA,GAAoBA,0CAAyB,MAAA,CAAO;AAAA;AAAA,EAE/D,UAAA,EAAYC,KAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EACjC,iBAAiBA,KAAA,CAAE,OAAA,GAAU,QAAA,EAAS,CAAE,QAAQ,KAAK,CAAA;AAAA,EACrD,QAAA,EAAUA,KAAA,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA;AAAA,EAGhC,OAAA,EAASA,KAAA,CACN,IAAA,CAAK,CAAC,SAAA,EAAW,aAAa,CAAC,CAAA,CAC/B,QAAA,EAAS,CACT,OAAA,CAAQ,SAAS,CAAA;AAAA;AAAA,EAGpB,IAAA,EAAMA,KAAA,CAAE,IAAA,CAAK,CAAC,IAAA,EAAM,SAAA,EAAW,IAAI,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,SAAS,CAAA;AAAA;AAAA,EAGlE,YAAYA,KAAA,CAAE,OAAA,GAAU,QAAA,EAAS,CAAE,QAAQ,KAAK,CAAA;AAAA,EAChD,YAAYA,KAAA,CAAE,OAAA,GAAU,QAAA,EAAS,CAAE,QAAQ,KAAK,CAAA;AAAA;AAAA,EAGhD,KAAA,EAAOA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,WAAA,EAAaA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAGjC,OAAA,EAASA,KAAA,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA,EAC/B,MAAA,EAAQA,KAAA,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA,EAC9B,aAAA,EAAeA,KAAA,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA,EACrC,SAAA,EAAWA,KAAA,CAAE,OAAA,EAAQ,CAAE,QAAA;AACzB,CAAC","file":"index.js","sourcesContent":["import { z } from 'zod';\nimport { BaseComponentPropsSchema } from '../../schemas/BaseComponentProps';\nimport type { SwitchProps as AriaSwitchProps } from 'react-aria-components';\n\n/**\n * Switch props schema extending BaseComponentProps\n *\n * @see React Aria Switch: https://react-spectrum.adobe.com/react-aria/Switch.html\n * @see ShadCN Switch: https://ui.shadcn.com/docs/components/switch\n * @see spec.md (WCAG 2.2 AAA - 7:1 contrast, 44x44px touch targets)\n * @see constitution.md Principle IV (Accessibility First)\n */\nexport const SwitchPropsSchema = BaseComponentPropsSchema.extend({\n // State management (controlled/uncontrolled)\n isSelected: z.boolean().optional(),\n defaultSelected: z.boolean().optional().default(false),\n onChange: z.function().optional(),\n\n // Variants (matching Button pattern)\n variant: z\n .enum(['default', 'destructive'])\n .optional()\n .default('default'),\n\n // Sizes (3 sizes for consistency)\n size: z.enum(['sm', 'default', 'lg']).optional().default('default'),\n\n // States\n isDisabled: z.boolean().optional().default(false),\n isReadOnly: z.boolean().optional().default(false),\n\n // Labels (optional built-in labeling)\n label: z.string().optional(),\n description: z.string().optional(),\n\n // React Aria SwitchProps integration\n onFocus: z.function().optional(),\n onBlur: z.function().optional(),\n onFocusChange: z.function().optional(),\n autoFocus: z.boolean().optional(),\n});\n\nexport type SwitchProps = z.infer<typeof SwitchPropsSchema> &\n Omit<AriaSwitchProps, keyof z.infer<typeof SwitchPropsSchema>>;\n\n/**\n * CVA variant configuration types\n * Used for class-variance-authority integration\n */\nexport type SwitchVariant = z.infer<typeof SwitchPropsSchema>['variant'];\nexport type SwitchSize = z.infer<typeof SwitchPropsSchema>['size'];\n"]}
1
+ {"version":3,"sources":["../../../src/utils/cn.ts","../../../src/styles/interaction-states.ts","../../../src/elements/Switch/Switch.tsx","../../../src/schemas/BaseComponentProps.ts","../../../src/elements/Switch/Switch.types.ts"],"names":["cn","inputs","twMerge","clsx","FOCUS_STYLES","PRESSED_STYLES","HOVER_STYLES","HIGH_CONTRAST_FOCUS","HIGH_CONTRAST_HOVER","HIGH_CONTRAST_PRESSED","DEFAULT_INTERACTIONS","switchOuterVariants","cva","switchTrackVariants","switchThumbVariants","Switch","memo","forwardRef","className","variant","size","label","description","isDisabled","isReadOnly","props","ref","jsx","AriaSwitch","_classNameProps","renderProps","jsxs","Fragment","BaseComponentPropsSchema","z","SwitchPropsSchema"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Class Name Utility\n * Merges Tailwind CSS classes with conflict resolution\n *\n * Combines clsx for conditional classes and tailwind-merge for deduplication\n *\n * @example\n * cn('px-2 py-1', 'px-4') // => 'py-1 px-4' (px-4 overrides px-2)\n * cn('text-red-500', condition && 'text-blue-500') // => conditional application\n */\n\nimport { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","/**\n * Global Interaction State Styles\n *\n * Consistent interaction patterns across all Themis components.\n * These styles ensure WCAG 2.2 AAA compliance and predictable UX.\n *\n * @see spec.md FR-010 (Visible focus ring for keyboard navigation)\n * @see spec.md FR-031 (Pressed state feedback)\n * @see spec.md FR-012 (High contrast mode support)\n * @see constitution.md Principle IV (Accessibility First)\n */\n\n/**\n * Focus state styles (FR-010)\n * Visible focus ring for keyboard navigation - WCAG 2.2 Level AAA\n *\n * Components can override by extending these styles:\n * @example\n * cn(FOCUS_STYLES, \"ring-4\") // Increases ring width to 4px\n */\nexport const FOCUS_STYLES = \"data-[focus-visible]:ring-2 data-[focus-visible]:ring-[var(--themis-ring)] data-[focus-visible]:ring-offset-2\";\n\n/**\n * Pressed/Active state styles (FR-031)\n * Visual feedback for press interactions\n *\n * Components can override the scale amount:\n * @example\n * cn(PRESSED_STYLES_BASE, \"data-[pressed]:scale-[0.95]\") // More pronounced scale\n */\nexport const PRESSED_STYLES = \"data-[pressed]:scale-[0.97]\";\n\n/**\n * Base pressed styles without scale (for components that need different feedback)\n */\nexport const PRESSED_STYLES_BASE = \"data-[pressed]:transition-transform data-[pressed]:duration-100\";\n\n/**\n * Hover state styles\n * Elevation change on hover for better affordance\n *\n * Components can override shadow depth:\n * @example\n * cn(HOVER_STYLES_BASE, \"data-[hovered]:shadow-lg\") // Larger shadow\n */\nexport const HOVER_STYLES = \"data-[hovered]:shadow-md\";\n\n/**\n * Base hover styles without shadow (for components that use different hover effects)\n */\nexport const HOVER_STYLES_BASE = \"data-[hovered]:transition-shadow data-[hovered]:duration-200\";\n\n/**\n * High contrast mode focus (FR-012)\n * Enhanced outlines for users requiring high contrast\n *\n * Uses 'hc:' prefix for prefers-contrast: more media query\n */\nexport const HIGH_CONTRAST_FOCUS = \"hc:data-[focus-visible]:outline hc:data-[focus-visible]:outline-4 hc:data-[focus-visible]:outline-offset-2 hc:data-[focus-visible]:outline-foreground\";\n\n/**\n * High contrast mode hover (FR-012)\n * Enhanced outlines for hover in high contrast mode\n */\nexport const HIGH_CONTRAST_HOVER = \"hc:data-[hovered]:outline hc:data-[hovered]:outline-2 hc:data-[hovered]:outline-foreground\";\n\n/**\n * High contrast mode pressed state\n * Enhanced outlines for pressed state in high contrast mode\n */\nexport const HIGH_CONTRAST_PRESSED = \"hc:data-[pressed]:outline hc:data-[pressed]:outline-2 hc:data-[pressed]:outline-offset-1 hc:data-[pressed]:outline-foreground\";\n\n/**\n * Combined high contrast styles\n * Use this for components that need all high contrast interaction states\n */\nexport const HIGH_CONTRAST_INTERACTIONS = `${HIGH_CONTRAST_FOCUS} ${HIGH_CONTRAST_HOVER} ${HIGH_CONTRAST_PRESSED}`;\n\n/**\n * Disabled state styles\n * Consistent disabled appearance across all components\n */\nexport const DISABLED_STYLES = \"disabled:pointer-events-none disabled:opacity-50\";\n\n/**\n * Default interaction bundle\n * Most common combination for interactive components\n *\n * Includes: focus ring, pressed scale, hover shadow, high contrast enhancements\n *\n * @example\n * <button className={cn(DEFAULT_INTERACTIONS, \"bg-primary\")}>Click</button>\n */\nexport const DEFAULT_INTERACTIONS = `${FOCUS_STYLES} ${PRESSED_STYLES} ${HOVER_STYLES} ${HIGH_CONTRAST_FOCUS} ${HIGH_CONTRAST_HOVER} ${HIGH_CONTRAST_PRESSED}`;\n\n/**\n * Subtle interaction bundle\n * For components that need less pronounced feedback\n *\n * Includes: focus ring and high contrast, but no hover shadow or pressed scale\n */\nexport const SUBTLE_INTERACTIONS = `${FOCUS_STYLES} ${HIGH_CONTRAST_FOCUS}`;\n\n/**\n * Non-interactive element styles\n * For elements that should indicate they are not interactive\n */\nexport const NON_INTERACTIVE = \"cursor-default select-none\";\n","\"use client\";\n\n/**\n * Switch Component\n * Accessible toggle switch with React Aria primitives and CVA styling\n *\n * @see React Aria Switch: https://react-spectrum.adobe.com/react-aria/Switch.html\n * @see ShadCN Switch: https://ui.shadcn.com/docs/components/switch\n * @see spec.md (WCAG 2.2 AAA - 7:1 contrast ratio, 44x44px touch targets)\n * @see constitution.md Principle IV (Accessibility First)\n */\n\nimport { forwardRef, memo } from 'react';\nimport {\n Switch as AriaSwitch,\n type SwitchProps as AriaSwitchProps,\n} from 'react-aria-components';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport { DEFAULT_INTERACTIONS } from '../../styles/interaction-states';\n\n/**\n * Layer 1: Transparent outer touch target (44x44px minimum)\n * This layer handles the WCAG 2.2 AAA touch target requirement\n * Always invisible, centers the visual switch inside\n */\nconst switchOuterVariants = cva(\n // Base styles - WCAG 2.2 AAA: 44x44px minimum touch target\n \"inline-flex shrink-0 cursor-pointer items-center justify-center min-h-[44px] min-w-[44px] disabled:cursor-not-allowed disabled:opacity-50 data-[readonly]:cursor-default\",\n {\n variants: {},\n defaultVariants: {},\n }\n);\n\n/**\n * Layer 2: Visual switch track/background (adjustable size)\n * This layer provides the visual appearance and size flexibility\n * Background color changes based on variant and selection state\n */\nconst switchTrackVariants = cva(\n // Base styles - visual track with transitions and focus states\n \"relative inline-flex shrink-0 items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)] focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n {\n variants: {\n variant: {\n // Default variant: Uses primary color when selected\n default:\n \"bg-[var(--input)] data-[selected]:bg-[var(--primary)]\",\n // Destructive variant: Uses destructive/error color when selected\n destructive:\n \"bg-[var(--input)] data-[selected]:bg-[var(--destructive)]\",\n },\n size: {\n // Small: h-5 w-9 (visual track size)\n sm: \"h-5 w-9\",\n // Default: h-6 w-11\n default: \"h-6 w-11\",\n // Large: h-7 w-14\n lg: \"h-7 w-14\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n);\n\n/**\n * Layer 3: Switch thumb (sliding circle)\n * Inner visual element that slides horizontally when switch is selected\n * Positioned absolutely within the track (Layer 2)\n */\nconst switchThumbVariants = cva(\n // Base styles: rounded circle with shadow, translates when selected\n \"pointer-events-none absolute left-0.5 rounded-full bg-[var(--content-background)] shadow-lg ring-0 transition-transform data-[selected]:translate-x-full\",\n {\n variants: {\n size: {\n // Thumb is slightly smaller than track height for proper padding\n sm: \"h-4 w-4\",\n default: \"h-5 w-5\",\n lg: \"h-6 w-6\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n);\n\nexport interface SwitchProps\n extends Omit<AriaSwitchProps, 'className' | 'children'>,\n VariantProps<typeof switchTrackVariants> {\n variant?: 'default' | 'destructive';\n size?: 'sm' | 'default' | 'lg';\n label?: string;\n description?: string;\n className?: string;\n}\n\n/**\n * Switch Component\n * Fully accessible toggle switch with React Aria and themed styling\n */\nconst Switch = memo(forwardRef<HTMLLabelElement, SwitchProps>(\n (\n {\n className,\n variant,\n size,\n label,\n description,\n isDisabled,\n isReadOnly,\n ...props\n },\n ref\n ) => {\n return (\n <AriaSwitch\n ref={ref}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n className={(_classNameProps) =>\n cn(\n \"group inline-flex items-center gap-2\",\n isDisabled && \"cursor-not-allowed opacity-50\",\n className\n )\n }\n {...props}\n >\n {(renderProps) => (\n <>\n {/* Layer 1: Transparent outer touch target (44x44px WCAG compliant) */}\n <div\n className={cn(switchOuterVariants())}\n data-selected={renderProps.isSelected || undefined}\n data-readonly={isReadOnly || undefined}\n >\n {/* Layer 2: Visual switch track (adjustable size with variants) */}\n <div\n className={cn(\n switchTrackVariants({ variant, size }),\n DEFAULT_INTERACTIONS\n )}\n data-selected={renderProps.isSelected || undefined}\n >\n {/* Layer 3: Thumb (sliding circle, absolutely positioned) */}\n <div\n className={cn(switchThumbVariants({ size }))}\n data-selected={renderProps.isSelected || undefined}\n />\n </div>\n </div>\n\n {/* Optional label and description */}\n {(label || description) && (\n <div className=\"flex flex-col\">\n {label && (\n <span className=\"text-sm font-medium text-[var(--content-foreground)]\">\n {label}\n </span>\n )}\n {description && (\n <span className=\"text-xs text-[var(--menu-muted)]\">\n {description}\n </span>\n )}\n </div>\n )}\n </>\n )}\n </AriaSwitch>\n );\n }\n));\n\nSwitch.displayName = \"Switch\";\n\nexport { Switch, switchOuterVariants, switchTrackVariants, switchThumbVariants };\n","import { z } from 'zod';\n\n/**\n * Base props schema for all Themis components\n * Ensures consistent accessibility and styling APIs across the library\n *\n * @see spec.md FR-009 to FR-014 (Accessibility Requirements)\n * @see constitution.md Principle IV (Accessibility First - WCAG 2.2 AA minimum)\n */\nexport const BaseComponentPropsSchema = z.object({\n // Styling\n className: z.string().optional(),\n\n // React\n children: z.any().optional(), // ReactNode not directly supported by Zod\n id: z.string().optional(),\n\n // Accessibility (WCAG 2.2 AA requirements)\n 'aria-label': z.string().optional(),\n 'aria-labelledby': z.string().optional(),\n 'aria-describedby': z.string().optional(),\n 'aria-live': z.enum(['off', 'polite', 'assertive']).optional(),\n 'aria-hidden': z.boolean().optional(),\n\n // Testing & Development\n 'data-testid': z.string().optional(),\n});\n\nexport type BaseComponentProps = z.infer<typeof BaseComponentPropsSchema>;\n","import { z } from 'zod';\nimport { BaseComponentPropsSchema } from '../../schemas/BaseComponentProps';\nimport type { SwitchProps as AriaSwitchProps } from 'react-aria-components';\n\n/**\n * Switch props schema extending BaseComponentProps\n *\n * @see React Aria Switch: https://react-spectrum.adobe.com/react-aria/Switch.html\n * @see ShadCN Switch: https://ui.shadcn.com/docs/components/switch\n * @see spec.md (WCAG 2.2 AAA - 7:1 contrast, 44x44px touch targets)\n * @see constitution.md Principle IV (Accessibility First)\n */\nexport const SwitchPropsSchema = BaseComponentPropsSchema.extend({\n // State management (controlled/uncontrolled)\n isSelected: z.boolean().optional(),\n defaultSelected: z.boolean().optional().default(false),\n onChange: z.function().optional(),\n\n // Variants (matching Button pattern)\n variant: z\n .enum(['default', 'destructive'])\n .optional()\n .default('default'),\n\n // Sizes (3 sizes for consistency)\n size: z.enum(['sm', 'default', 'lg']).optional().default('default'),\n\n // States\n isDisabled: z.boolean().optional().default(false),\n isReadOnly: z.boolean().optional().default(false),\n\n // Labels (optional built-in labeling)\n label: z.string().optional(),\n description: z.string().optional(),\n\n // React Aria SwitchProps integration\n onFocus: z.function().optional(),\n onBlur: z.function().optional(),\n onFocusChange: z.function().optional(),\n autoFocus: z.boolean().optional(),\n});\n\nexport type SwitchProps = z.infer<typeof SwitchPropsSchema> &\n Omit<AriaSwitchProps, keyof z.infer<typeof SwitchPropsSchema>>;\n\n/**\n * CVA variant configuration types\n * Used for class-variance-authority integration\n */\nexport type SwitchVariant = z.infer<typeof SwitchPropsSchema>['variant'];\nexport type SwitchSize = z.infer<typeof SwitchPropsSchema>['size'];\n"]}