@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
@@ -1,74 +1,3 @@
1
- 'use strict';
2
-
3
- var chunk3IEN7JOP_js = require('../../chunk-3IEN7JOP.js');
4
- require('../../chunk-VIREG536.js');
5
- require('../../chunk-T4COXKQ3.js');
6
-
7
-
8
-
9
- Object.defineProperty(exports, "KeySchema", {
10
- enumerable: true,
11
- get: function () { return chunk3IEN7JOP_js.KeySchema; }
12
- });
13
- Object.defineProperty(exports, "ScrollArrowDirectionSchema", {
14
- enumerable: true,
15
- get: function () { return chunk3IEN7JOP_js.ScrollArrowDirectionSchema; }
16
- });
17
- Object.defineProperty(exports, "ScrollArrowPropsSchema", {
18
- enumerable: true,
19
- get: function () { return chunk3IEN7JOP_js.ScrollArrowPropsSchema; }
20
- });
21
- Object.defineProperty(exports, "Tab", {
22
- enumerable: true,
23
- get: function () { return chunk3IEN7JOP_js.Tab; }
24
- });
25
- Object.defineProperty(exports, "TabList", {
26
- enumerable: true,
27
- get: function () { return chunk3IEN7JOP_js.TabList; }
28
- });
29
- Object.defineProperty(exports, "TabListPropsSchema", {
30
- enumerable: true,
31
- get: function () { return chunk3IEN7JOP_js.TabListPropsSchema; }
32
- });
33
- Object.defineProperty(exports, "TabPanel", {
34
- enumerable: true,
35
- get: function () { return chunk3IEN7JOP_js.TabPanel; }
36
- });
37
- Object.defineProperty(exports, "TabPanelPropsSchema", {
38
- enumerable: true,
39
- get: function () { return chunk3IEN7JOP_js.TabPanelPropsSchema; }
40
- });
41
- Object.defineProperty(exports, "TabPropsSchema", {
42
- enumerable: true,
43
- get: function () { return chunk3IEN7JOP_js.TabPropsSchema; }
44
- });
45
- Object.defineProperty(exports, "Tabs", {
46
- enumerable: true,
47
- get: function () { return chunk3IEN7JOP_js.Tabs; }
48
- });
49
- Object.defineProperty(exports, "TabsKeyboardActivationSchema", {
50
- enumerable: true,
51
- get: function () { return chunk3IEN7JOP_js.TabsKeyboardActivationSchema; }
52
- });
53
- Object.defineProperty(exports, "TabsOrientationSchema", {
54
- enumerable: true,
55
- get: function () { return chunk3IEN7JOP_js.TabsOrientationSchema; }
56
- });
57
- Object.defineProperty(exports, "TabsPropsSchema", {
58
- enumerable: true,
59
- get: function () { return chunk3IEN7JOP_js.TabsPropsSchema; }
60
- });
61
- Object.defineProperty(exports, "tabListVariants", {
62
- enumerable: true,
63
- get: function () { return chunk3IEN7JOP_js.tabListVariants; }
64
- });
65
- Object.defineProperty(exports, "tabPanelVariants", {
66
- enumerable: true,
67
- get: function () { return chunk3IEN7JOP_js.tabPanelVariants; }
68
- });
69
- Object.defineProperty(exports, "tabVariants", {
70
- enumerable: true,
71
- get: function () { return chunk3IEN7JOP_js.tabVariants; }
72
- });
73
- //# 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 m(...a){return tailwindMerge.twMerge(clsx.clsx(a))}var v=react.Activity??function({children:t,mode:i}){return jsxRuntime.jsx("div",{"data-activity-mode":i,children:t})},x=classVarianceAuthority.cva(["inline-flex items-center justify-center rounded-md p-1","bg-[var(--accent-background)] text-[var(--menu-muted)]"],{variants:{orientation:{horizontal:"h-10 flex-row gap-0",vertical:"h-auto flex-col w-full gap-1"}},defaultVariants:{orientation:"horizontal"}}),S=classVarianceAuthority.cva(["inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-sm","px-3 py-1.5 text-sm font-medium","ring-offset-[var(--content-background)] transition-all","focus-visible:outline-none focus-visible:ring-2","focus-visible:ring-[var(--ring)] focus-visible:ring-offset-2","data-[disabled]:pointer-events-none data-[disabled]:opacity-50","data-[selected]:bg-[var(--content-background)] data-[selected]:text-[var(--content-foreground)]","data-[selected]:shadow-sm","min-h-[44px]"],{variants:{orientation:{horizontal:"",vertical:"w-full justify-start"}},defaultVariants:{orientation:"horizontal"}}),T=classVarianceAuthority.cva(["mt-2 ring-offset-[var(--content-background)]","focus-visible:outline-none focus-visible:ring-2","focus-visible:ring-[var(--ring)] focus-visible:ring-offset-2"],{variants:{},defaultVariants:{}});function g({children:a,selectedKey:t,defaultSelectedKey:i,onSelectionChange:n,orientation:s="horizontal",keyboardActivation:p="automatic",isDisabled:b=false,disabledKeys:o,className:l,...d}){return jsxRuntime.jsx(reactAriaComponents.Tabs,{selectedKey:t,defaultSelectedKey:i,onSelectionChange:n,orientation:s,keyboardActivation:p,isDisabled:b,disabledKeys:o,className:m(l),...d,children:a})}g.displayName="Tabs";function A({children:a,className:t,...i}){return jsxRuntime.jsx(reactAriaComponents.TabList,{className:reactAriaComponents.composeRenderProps(t,(n,s)=>m(x({orientation:s.orientation}),n)),...i,children:a})}A.displayName="TabList";function w({children:a,id:t,isDisabled:i=false,href:n,target:s,rel:p,download:b,className:o,...l}){return process.env.NODE_ENV!=="production"&&!(typeof a=="string"||Array.isArray(a)&&a.some(C=>typeof C=="string"))&&!l["aria-label"]&&console.warn("Tabs: Icon-only tabs should have an aria-label for accessibility."),jsxRuntime.jsx(reactAriaComponents.Tab,{id:t,isDisabled:i,href:n,target:s,rel:p,download:b,className:reactAriaComponents.composeRenderProps(o,d=>m(S(),d)),...l,children:a})}w.displayName="Tab";function K({children:a,id:t,shouldForceMount:i=false,preserveState:n=false,className:s,...p}){let b=n||i;return typeof a=="function"?jsxRuntime.jsx(reactAriaComponents.TabPanel,{id:t,shouldForceMount:b,className:reactAriaComponents.composeRenderProps(s,o=>m(T(),o)),...p,children:o=>{let l=!o.isInert,d=a({isSelected:l});return n?jsxRuntime.jsx(v,{mode:l?"visible":"hidden",children:d}):d}}):n?jsxRuntime.jsx(reactAriaComponents.TabPanel,{id:t,shouldForceMount:b,className:reactAriaComponents.composeRenderProps(s,o=>m(T(),o)),...p,children:o=>{let l=!o.isInert;return jsxRuntime.jsx(v,{mode:l?"visible":"hidden",children:a})}}):jsxRuntime.jsx(reactAriaComponents.TabPanel,{id:t,shouldForceMount:b,className:reactAriaComponents.composeRenderProps(s,o=>m(T(),o)),...p,children:a})}K.displayName="TabPanel";var F=g,B=A,E=w,I=K;var f=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 N=zod.z.enum(["horizontal","vertical"]),z=zod.z.enum(["automatic","manual"]),u=zod.z.union([zod.z.string(),zod.z.number()]),j=f.extend({selectedKey:u.optional(),defaultSelectedKey:u.optional(),onSelectionChange:zod.z.custom().optional(),orientation:N.optional().default("horizontal"),keyboardActivation:z.optional().default("automatic"),isDisabled:zod.z.boolean().optional().default(false),disabledKeys:zod.z.array(u).optional(),children:zod.z.custom()}),_=f.extend({"aria-label":zod.z.string().optional(),"aria-labelledby":zod.z.string().optional(),children:zod.z.custom()}),q=f.extend({id:u,isDisabled:zod.z.boolean().optional().default(false),href:zod.z.string().optional(),target:zod.z.string().optional(),rel:zod.z.string().optional(),download:zod.z.union([zod.z.string(),zod.z.boolean()]).optional(),children:zod.z.custom()}),G=f.extend({id:u,shouldForceMount:zod.z.boolean().optional().default(false),preserveState:zod.z.boolean().optional().default(false),children:zod.z.custom()}),L=zod.z.enum(["left","right","up","down"]),H=f.extend({direction:L,isDisabled:zod.z.boolean().optional().default(false),onPress:zod.z.custom(),"aria-label":zod.z.string()});exports.KeySchema=u;exports.ScrollArrowDirectionSchema=L;exports.ScrollArrowPropsSchema=H;exports.Tab=E;exports.TabList=B;exports.TabListPropsSchema=_;exports.TabPanel=I;exports.TabPanelPropsSchema=G;exports.TabPropsSchema=q;exports.Tabs=F;exports.TabsKeyboardActivationSchema=z;exports.TabsOrientationSchema=N;exports.TabsPropsSchema=j;exports.tabListVariants=x;exports.tabPanelVariants=T;exports.tabVariants=S;//# sourceMappingURL=index.js.map
74
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/Tabs/Tabs.tsx","../../../src/schemas/BaseComponentProps.ts","../../../src/elements/Tabs/Tabs.types.ts"],"names":["cn","inputs","twMerge","clsx","Activity","ReactActivity","children","mode","jsx","tabListVariants","cva","tabVariants","tabPanelVariants","TabsRoot","selectedKey","defaultSelectedKey","onSelectionChange","orientation","keyboardActivation","isDisabled","disabledKeys","className","props","AriaTabs","TabListComponent","AriaTabList","composeRenderProps","renderProps","TabComponent","id","href","target","rel","download","child","AriaTab","TabPanelComponent","shouldForceMount","preserveState","forceMount","AriaTabPanel","isSelected","content","Tabs","TabList","Tab","TabPanel","BaseComponentPropsSchema","z","TabsOrientationSchema","TabsKeyboardActivationSchema","KeySchema","TabsPropsSchema","TabListPropsSchema","TabPropsSchema","TabPanelPropsSchema","ScrollArrowDirectionSchema","ScrollArrowPropsSchema"],"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","'use client';\n\n/**\n * Tabs Component - Implementation\n *\n * Accessible tabbed interface component combining React Aria primitives with ShadCN styling.\n * Follows Themis library patterns with compound component structure and direct named exports.\n *\n * Key Features:\n * - React Aria Tabs for full accessibility (WCAG 2.2 AAA)\n * - CVA variants for orientation styling\n * - React 19.2 Activity API for state preservation (preserveState prop)\n * - Dual keyboard activation modes (automatic/manual)\n * - Support for icons, badges, and link-based tabs\n *\n * @see tabs-prd.md (Full requirements)\n * @see Tabs.types.ts (Zod schemas)\n * @see plan.md (Implementation approach)\n */\n\n// React 19.2 Activity API - may not be available in all builds\n// Import conditionally to support environments where Activity is unavailable\nimport {\n Activity as ReactActivity,\n type ReactNode,\n type Key,\n type ReactElement,\n} from 'react';\n\n// Activity component with fallback for environments where it's not available\n// The fallback simply renders children directly - no state preservation when Activity unavailable\n// Note: ActivityFallback doesn't actually preserve state; it's just a pass-through\nconst Activity = ReactActivity ?? function ActivityFallback({\n children,\n mode,\n}: {\n children: ReactNode;\n mode: 'visible' | 'hidden';\n}): ReactElement {\n // When Activity is not available, just render children directly\n // mode is ignored in the fallback\n return <div data-activity-mode={mode}>{children}</div>;\n};\nimport {\n Tabs as AriaTabs,\n TabList as AriaTabList,\n Tab as AriaTab,\n TabPanel as AriaTabPanel,\n composeRenderProps,\n type Key as AriaKey,\n} from 'react-aria-components';\nimport { cva } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport type {\n TabsProps,\n TabListProps,\n TabProps,\n TabPanelProps,\n} from './Tabs.types';\n\n// ============================================================================\n// CVA Variants\n// ============================================================================\n\n/**\n * TabList CVA variants\n *\n * @see PRD.md FR-002 (TabList Requirements)\n * @see PRD.md DS-001 (Design System - Layout)\n */\nexport const tabListVariants = cva(\n // Base styles\n [\n 'inline-flex items-center justify-center rounded-md p-1',\n 'bg-[var(--accent-background)] text-[var(--menu-muted)]',\n ],\n {\n variants: {\n orientation: {\n horizontal: 'h-10 flex-row gap-0',\n vertical: 'h-auto flex-col w-full gap-1',\n },\n },\n defaultVariants: {\n orientation: 'horizontal',\n },\n }\n);\n\n/**\n * Tab CVA variants\n *\n * @see PRD.md FR-003 (Tab Requirements)\n * @see PRD.md DS-002 (Design System - Tab Styling)\n * @see PRD.md AR-001 (Accessibility - 44×44px touch targets)\n */\nexport const tabVariants = cva(\n // Base styles\n [\n 'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-sm',\n 'px-3 py-1.5 text-sm font-medium',\n 'ring-offset-[var(--content-background)] transition-all',\n 'focus-visible:outline-none focus-visible:ring-2',\n 'focus-visible:ring-[var(--ring)] focus-visible:ring-offset-2',\n // States via data attributes\n 'data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n 'data-[selected]:bg-[var(--content-background)] data-[selected]:text-[var(--content-foreground)]',\n 'data-[selected]:shadow-sm',\n // WCAG 2.2 AAA: 44×44px minimum touch target\n 'min-h-[44px]',\n ],\n {\n variants: {\n orientation: {\n horizontal: '',\n vertical: 'w-full justify-start',\n },\n },\n defaultVariants: {\n orientation: 'horizontal',\n },\n }\n);\n\n/**\n * TabPanel CVA variants\n *\n * @see PRD.md FR-004 (TabPanel Requirements)\n */\nexport const tabPanelVariants = cva(\n [\n 'mt-2 ring-offset-[var(--content-background)]',\n 'focus-visible:outline-none focus-visible:ring-2',\n 'focus-visible:ring-[var(--ring)] focus-visible:ring-offset-2',\n ],\n {\n variants: {},\n defaultVariants: {},\n }\n);\n\n// ============================================================================\n// Components\n// ============================================================================\n\n/**\n * Tabs Root Component\n *\n * Container for tabbed interface. Manages selection state and provides\n * context to child components.\n *\n * @see PRD.md FR-001 (Compound Component Pattern)\n * @see PRD.md FR-012 (Controlled Mode)\n * @see PRD.md FR-013 (Uncontrolled Mode)\n *\n * @example\n * // Uncontrolled\n * <Tabs defaultSelectedKey=\"tab1\">\n * <TabList aria-label=\"Navigation\">\n * <Tab id=\"tab1\">Tab 1</Tab>\n * <Tab id=\"tab2\">Tab 2</Tab>\n * </TabList>\n * <TabPanel id=\"tab1\">Content 1</TabPanel>\n * <TabPanel id=\"tab2\">Content 2</TabPanel>\n * </Tabs>\n *\n * @example\n * // Controlled\n * <Tabs selectedKey={selected} onSelectionChange={setSelected}>\n * ...\n * </Tabs>\n */\nfunction TabsRoot({\n children,\n selectedKey,\n defaultSelectedKey,\n onSelectionChange,\n orientation = 'horizontal',\n keyboardActivation = 'automatic',\n isDisabled = false,\n disabledKeys,\n className,\n ...props\n}: TabsProps) {\n return (\n <AriaTabs\n selectedKey={selectedKey}\n defaultSelectedKey={defaultSelectedKey}\n onSelectionChange={onSelectionChange as (key: Key) => void}\n orientation={orientation}\n keyboardActivation={keyboardActivation}\n isDisabled={isDisabled}\n disabledKeys={disabledKeys as Iterable<AriaKey> | undefined}\n className={cn(className)}\n {...props}\n >\n {children}\n </AriaTabs>\n );\n}\n\nTabsRoot.displayName = 'Tabs';\n\n/**\n * TabList Component\n *\n * Container for tab buttons. Uses roving tabindex for keyboard navigation.\n * Receives orientation from parent Tabs via React Aria context.\n *\n * @see PRD.md FR-002 (TabList Requirements)\n * @see PRD.md AR-001 (ARIA Requirements)\n */\nfunction TabListComponent({\n children,\n className,\n ...props\n}: TabListProps) {\n return (\n <AriaTabList\n className={composeRenderProps(className, (className, renderProps) =>\n cn(\n tabListVariants({ orientation: renderProps.orientation }),\n className\n )\n )}\n {...props}\n >\n {children}\n </AriaTabList>\n );\n}\n\nTabListComponent.displayName = 'TabList';\n\n/**\n * Tab Component\n *\n * Individual tab button. Can render as button or anchor (when href provided).\n * Supports icons and badges as children.\n *\n * @see PRD.md FR-003 (Tab Requirements)\n * @see PRD.md FR-007 (Disabled States)\n * @see PRD.md FR-013 (Icon Support)\n * @see PRD.md FR-014 (Link-based Tabs)\n */\nfunction TabComponent({\n children,\n id,\n isDisabled = false,\n href,\n target,\n rel,\n download,\n className,\n ...props\n}: TabProps) {\n // Warn if icon-only tab without aria-label\n if (process.env.NODE_ENV !== 'production') {\n const hasTextContent =\n typeof children === 'string' ||\n (Array.isArray(children) &&\n children.some((child) => typeof child === 'string'));\n\n if (!hasTextContent && !props['aria-label']) {\n console.warn(\n 'Tabs: Icon-only tabs should have an aria-label for accessibility.'\n );\n }\n }\n\n return (\n <AriaTab\n id={id}\n isDisabled={isDisabled}\n href={href}\n target={target}\n rel={rel}\n download={download}\n className={composeRenderProps(className, (className) =>\n cn(tabVariants(), className)\n )}\n {...props}\n >\n {children}\n </AriaTab>\n );\n}\n\nTabComponent.displayName = 'Tab';\n\n/**\n * TabPanel Component\n *\n * Content panel associated with a tab. Only the selected panel is visible.\n * Supports preserveState for React Activity state preservation.\n *\n * @see PRD.md FR-004 (TabPanel Requirements)\n * @see PRD.md FR-015 (Force Mount Panels)\n * @see PRD.md FR-016 (React Activity State Preservation)\n *\n * @example\n * // Default behavior - content unmounts when hidden\n * <TabPanel id=\"tab1\">Content</TabPanel>\n *\n * @example\n * // Legacy force mount - keeps content in DOM\n * <TabPanel id=\"tab1\" shouldForceMount>Form with state</TabPanel>\n *\n * @example\n * // React Activity - preserves state with proper effect cleanup\n * <TabPanel id=\"tab1\" preserveState>\n * <FormWithDraft />\n * </TabPanel>\n */\nfunction TabPanelComponent({\n children,\n id,\n shouldForceMount = false,\n preserveState = false,\n className,\n ...props\n}: TabPanelProps) {\n // preserveState takes precedence - both enable force mounting\n const forceMount = preserveState || shouldForceMount;\n\n // If children is a render function (for dynamic content based on selection state),\n // we need to use the render props pattern\n if (typeof children === 'function') {\n return (\n <AriaTabPanel\n id={id}\n shouldForceMount={forceMount}\n className={composeRenderProps(className, (className) =>\n cn(tabPanelVariants(), className)\n )}\n {...props}\n >\n {(renderProps) => {\n // React Aria TabPanelRenderProps includes: state, isInert\n // We derive isSelected from state - if state is undefined, panel is selected\n const isSelected = !renderProps.isInert;\n const content = (\n children as (renderProps: { isSelected: boolean }) => ReactNode\n )({ isSelected });\n\n if (preserveState) {\n return (\n <Activity mode={isSelected ? 'visible' : 'hidden'}>\n {content}\n </Activity>\n );\n }\n\n return content;\n }}\n </AriaTabPanel>\n );\n }\n\n // For static children (not a function), render directly\n // If preserveState is enabled, wrap in Activity\n if (preserveState) {\n return (\n <AriaTabPanel\n id={id}\n shouldForceMount={forceMount}\n className={composeRenderProps(className, (className) =>\n cn(tabPanelVariants(), className)\n )}\n {...props}\n >\n {(renderProps) => {\n const isSelected = !renderProps.isInert;\n return (\n <Activity mode={isSelected ? 'visible' : 'hidden'}>\n {children}\n </Activity>\n );\n }}\n </AriaTabPanel>\n );\n }\n\n // Default: render static children directly\n return (\n <AriaTabPanel\n id={id}\n shouldForceMount={forceMount}\n className={composeRenderProps(className, (className) =>\n cn(tabPanelVariants(), className)\n )}\n {...props}\n >\n {children}\n </AriaTabPanel>\n );\n}\n\nTabPanelComponent.displayName = 'TabPanel';\n\n// ============================================================================\n// Exports\n// ============================================================================\n\n/**\n * Direct named exports (not Object.assign compound pattern)\n *\n * Tabs follows React Aria's direct export pattern because:\n * - Simpler structure (only 4 components vs Dialog's 9)\n * - Better tree-shaking with named exports\n * - Clearer imports: import { Tabs, TabList, Tab, TabPanel } from '...'\n *\n * @see plan.md \"Why Direct Named Exports (Not Object.assign)?\"\n */\nexport const Tabs = TabsRoot;\nexport const TabList = TabListComponent;\nexport const Tab = TabComponent;\nexport const TabPanel = TabPanelComponent;\n\n// Re-export types for convenience\nexport type { TabsProps, TabListProps, TabProps, TabPanelProps };\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, Key } from 'react';\n\n/**\n * Tab orientation schema\n *\n * @see PRD.md FR-005 (Orientation Support)\n */\nexport const TabsOrientationSchema = z.enum(['horizontal', 'vertical']);\nexport type TabsOrientation = z.infer<typeof TabsOrientationSchema>;\n\n/**\n * Keyboard activation mode schema\n *\n * @see PRD.md FR-006 (Keyboard Activation Modes)\n */\nexport const TabsKeyboardActivationSchema = z.enum(['automatic', 'manual']);\nexport type TabsKeyboardActivation = z.infer<typeof TabsKeyboardActivationSchema>;\n\n/**\n * Key schema for tab identification\n * Supports both string and number keys per React Aria convention\n */\nexport const KeySchema = z.union([z.string(), z.number()]);\n\n/**\n * Tabs root component props schema\n *\n * @see PRD.md FR-001 (Compound Component Pattern)\n * @see PRD.md FR-012 (Controlled Mode)\n * @see PRD.md FR-013 (Uncontrolled Mode)\n */\nexport const TabsPropsSchema = BaseComponentPropsSchema.extend({\n // Controlled mode: selected tab key\n selectedKey: KeySchema.optional(),\n\n // Uncontrolled mode: default selected tab key\n defaultSelectedKey: KeySchema.optional(),\n\n // Selection change handler\n onSelectionChange: z.custom<(key: Key) => void>().optional(),\n\n // Orientation: horizontal or vertical layout\n orientation: TabsOrientationSchema.optional().default('horizontal'),\n\n // Keyboard activation: automatic (arrows select) or manual (arrows focus, Enter selects)\n keyboardActivation: TabsKeyboardActivationSchema.optional().default('automatic'),\n\n // Disable all tabs\n isDisabled: z.boolean().optional().default(false),\n\n // Keys of tabs to disable individually\n disabledKeys: z.array(KeySchema).optional(),\n\n // Children: TabList and TabPanel components\n children: z.custom<ReactNode>(),\n});\n\nexport type TabsProps = z.infer<typeof TabsPropsSchema>;\n\n/**\n * TabList component props schema\n *\n * @see PRD.md FR-002 (TabList Requirements)\n * @see PRD.md AR-001 (ARIA Requirements)\n */\nexport const TabListPropsSchema = BaseComponentPropsSchema.extend({\n // Accessible label (required for accessibility if no aria-labelledby)\n 'aria-label': z.string().optional(),\n\n // Reference to labelling element\n 'aria-labelledby': z.string().optional(),\n\n // Children: Tab components\n children: z.custom<ReactNode>(),\n});\n\nexport type TabListProps = z.infer<typeof TabListPropsSchema>;\n\n/**\n * Tab component props schema\n *\n * @see PRD.md FR-003 (Tab Requirements)\n * @see PRD.md FR-007 (Disabled States)\n * @see PRD.md FR-014 (Link-based Tabs)\n */\nexport const TabPropsSchema = BaseComponentPropsSchema.extend({\n // Unique identifier for the tab (required)\n id: KeySchema,\n\n // Disable this specific tab\n isDisabled: z.boolean().optional().default(false),\n\n // Link tab: URL for navigation-style tabs\n href: z.string().optional(),\n\n // Link tab: target attribute\n target: z.string().optional(),\n\n // Link tab: rel attribute\n rel: z.string().optional(),\n\n // Link tab: download attribute\n download: z.union([z.string(), z.boolean()]).optional(),\n\n // Tab content (text, icons, badges)\n children: z.custom<ReactNode>(),\n});\n\nexport type TabProps = z.infer<typeof TabPropsSchema>;\n\n/**\n * TabPanel component props schema\n *\n * @see PRD.md FR-004 (TabPanel Requirements)\n * @see PRD.md FR-015 (Force Mount Panels)\n * @see PRD.md FR-016 (React Activity State Preservation)\n */\nexport const TabPanelPropsSchema = BaseComponentPropsSchema.extend({\n // Unique identifier matching a Tab id (required)\n id: KeySchema,\n\n // Legacy: Force panel to stay in DOM when hidden\n // Use preserveState instead for proper effect cleanup\n shouldForceMount: z.boolean().optional().default(false),\n\n // React 19.2 Activity: Preserve state with proper effect cleanup\n // When true, wraps content in <Activity> component\n // Effects are cleaned up when hidden, restored when visible\n preserveState: z.boolean().optional().default(false),\n\n // Panel content\n children: z.custom<ReactNode>(),\n});\n\nexport type TabPanelProps = z.infer<typeof TabPanelPropsSchema>;\n\n/**\n * Scroll arrow direction for overflow handling\n *\n * @see PRD.md FR-010 (Overflow Handling)\n */\nexport const ScrollArrowDirectionSchema = z.enum(['left', 'right', 'up', 'down']);\nexport type ScrollArrowDirection = z.infer<typeof ScrollArrowDirectionSchema>;\n\n/**\n * Internal props for scroll arrow buttons\n * Used by overflow handling implementation\n */\nexport const ScrollArrowPropsSchema = BaseComponentPropsSchema.extend({\n // Scroll direction\n direction: ScrollArrowDirectionSchema,\n\n // Disable when can't scroll further\n isDisabled: z.boolean().optional().default(false),\n\n // Click handler for scrolling\n onPress: z.custom<() => void>(),\n\n // Accessible label\n 'aria-label': z.string(),\n});\n\nexport type ScrollArrowProps = z.infer<typeof ScrollArrowPropsSchema>;\n"]}
@@ -1,5 +1,3 @@
1
- export { KeySchema, ScrollArrowDirectionSchema, ScrollArrowPropsSchema, Tab, TabList, TabListPropsSchema, TabPanel, TabPanelPropsSchema, TabPropsSchema, Tabs, TabsKeyboardActivationSchema, TabsOrientationSchema, TabsPropsSchema, tabListVariants, tabPanelVariants, tabVariants } from '../../chunk-66WTU4EB.mjs';
2
- import '../../chunk-E2KQFV3O.mjs';
3
- import '../../chunk-5SVLJN2C.mjs';
4
- //# sourceMappingURL=index.mjs.map
1
+ "use client";
2
+ import {Activity}from'react';import {Tabs,TabList,composeRenderProps,Tab,TabPanel}from'react-aria-components';import {cva}from'class-variance-authority';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx}from'react/jsx-runtime';import {z as z$1}from'zod';function m(...a){return twMerge(clsx(a))}var v=Activity??function({children:t,mode:i}){return jsx("div",{"data-activity-mode":i,children:t})},x=cva(["inline-flex items-center justify-center rounded-md p-1","bg-[var(--accent-background)] text-[var(--menu-muted)]"],{variants:{orientation:{horizontal:"h-10 flex-row gap-0",vertical:"h-auto flex-col w-full gap-1"}},defaultVariants:{orientation:"horizontal"}}),S=cva(["inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-sm","px-3 py-1.5 text-sm font-medium","ring-offset-[var(--content-background)] transition-all","focus-visible:outline-none focus-visible:ring-2","focus-visible:ring-[var(--ring)] focus-visible:ring-offset-2","data-[disabled]:pointer-events-none data-[disabled]:opacity-50","data-[selected]:bg-[var(--content-background)] data-[selected]:text-[var(--content-foreground)]","data-[selected]:shadow-sm","min-h-[44px]"],{variants:{orientation:{horizontal:"",vertical:"w-full justify-start"}},defaultVariants:{orientation:"horizontal"}}),T=cva(["mt-2 ring-offset-[var(--content-background)]","focus-visible:outline-none focus-visible:ring-2","focus-visible:ring-[var(--ring)] focus-visible:ring-offset-2"],{variants:{},defaultVariants:{}});function g({children:a,selectedKey:t,defaultSelectedKey:i,onSelectionChange:n,orientation:s="horizontal",keyboardActivation:p="automatic",isDisabled:b=false,disabledKeys:o,className:l,...d}){return jsx(Tabs,{selectedKey:t,defaultSelectedKey:i,onSelectionChange:n,orientation:s,keyboardActivation:p,isDisabled:b,disabledKeys:o,className:m(l),...d,children:a})}g.displayName="Tabs";function A({children:a,className:t,...i}){return jsx(TabList,{className:composeRenderProps(t,(n,s)=>m(x({orientation:s.orientation}),n)),...i,children:a})}A.displayName="TabList";function w({children:a,id:t,isDisabled:i=false,href:n,target:s,rel:p,download:b,className:o,...l}){return process.env.NODE_ENV!=="production"&&!(typeof a=="string"||Array.isArray(a)&&a.some(C=>typeof C=="string"))&&!l["aria-label"]&&console.warn("Tabs: Icon-only tabs should have an aria-label for accessibility."),jsx(Tab,{id:t,isDisabled:i,href:n,target:s,rel:p,download:b,className:composeRenderProps(o,d=>m(S(),d)),...l,children:a})}w.displayName="Tab";function K({children:a,id:t,shouldForceMount:i=false,preserveState:n=false,className:s,...p}){let b=n||i;return typeof a=="function"?jsx(TabPanel,{id:t,shouldForceMount:b,className:composeRenderProps(s,o=>m(T(),o)),...p,children:o=>{let l=!o.isInert,d=a({isSelected:l});return n?jsx(v,{mode:l?"visible":"hidden",children:d}):d}}):n?jsx(TabPanel,{id:t,shouldForceMount:b,className:composeRenderProps(s,o=>m(T(),o)),...p,children:o=>{let l=!o.isInert;return jsx(v,{mode:l?"visible":"hidden",children:a})}}):jsx(TabPanel,{id:t,shouldForceMount:b,className:composeRenderProps(s,o=>m(T(),o)),...p,children:a})}K.displayName="TabPanel";var F=g,B=A,E=w,I=K;var f=z$1.object({className:z$1.string().optional(),children:z$1.any().optional(),id:z$1.string().optional(),"aria-label":z$1.string().optional(),"aria-labelledby":z$1.string().optional(),"aria-describedby":z$1.string().optional(),"aria-live":z$1.enum(["off","polite","assertive"]).optional(),"aria-hidden":z$1.boolean().optional(),"data-testid":z$1.string().optional()});var N=z$1.enum(["horizontal","vertical"]),z=z$1.enum(["automatic","manual"]),u=z$1.union([z$1.string(),z$1.number()]),j=f.extend({selectedKey:u.optional(),defaultSelectedKey:u.optional(),onSelectionChange:z$1.custom().optional(),orientation:N.optional().default("horizontal"),keyboardActivation:z.optional().default("automatic"),isDisabled:z$1.boolean().optional().default(false),disabledKeys:z$1.array(u).optional(),children:z$1.custom()}),_=f.extend({"aria-label":z$1.string().optional(),"aria-labelledby":z$1.string().optional(),children:z$1.custom()}),q=f.extend({id:u,isDisabled:z$1.boolean().optional().default(false),href:z$1.string().optional(),target:z$1.string().optional(),rel:z$1.string().optional(),download:z$1.union([z$1.string(),z$1.boolean()]).optional(),children:z$1.custom()}),G=f.extend({id:u,shouldForceMount:z$1.boolean().optional().default(false),preserveState:z$1.boolean().optional().default(false),children:z$1.custom()}),L=z$1.enum(["left","right","up","down"]),H=f.extend({direction:L,isDisabled:z$1.boolean().optional().default(false),onPress:z$1.custom(),"aria-label":z$1.string()});export{u as KeySchema,L as ScrollArrowDirectionSchema,H as ScrollArrowPropsSchema,E as Tab,B as TabList,_ as TabListPropsSchema,I as TabPanel,G as TabPanelPropsSchema,q as TabPropsSchema,F as Tabs,z as TabsKeyboardActivationSchema,N as TabsOrientationSchema,j as TabsPropsSchema,x as tabListVariants,T as tabPanelVariants,S as tabVariants};//# 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/Tabs/Tabs.tsx","../../../src/schemas/BaseComponentProps.ts","../../../src/elements/Tabs/Tabs.types.ts"],"names":["cn","inputs","twMerge","clsx","Activity","ReactActivity","children","mode","jsx","tabListVariants","cva","tabVariants","tabPanelVariants","TabsRoot","selectedKey","defaultSelectedKey","onSelectionChange","orientation","keyboardActivation","isDisabled","disabledKeys","className","props","AriaTabs","TabListComponent","AriaTabList","composeRenderProps","renderProps","TabComponent","id","href","target","rel","download","child","AriaTab","TabPanelComponent","shouldForceMount","preserveState","forceMount","AriaTabPanel","isSelected","content","Tabs","TabList","Tab","TabPanel","BaseComponentPropsSchema","z","TabsOrientationSchema","TabsKeyboardActivationSchema","KeySchema","TabsPropsSchema","TabListPropsSchema","TabPropsSchema","TabPanelPropsSchema","ScrollArrowDirectionSchema","ScrollArrowPropsSchema"],"mappings":"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","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 * Tabs Component - Implementation\n *\n * Accessible tabbed interface component combining React Aria primitives with ShadCN styling.\n * Follows Themis library patterns with compound component structure and direct named exports.\n *\n * Key Features:\n * - React Aria Tabs for full accessibility (WCAG 2.2 AAA)\n * - CVA variants for orientation styling\n * - React 19.2 Activity API for state preservation (preserveState prop)\n * - Dual keyboard activation modes (automatic/manual)\n * - Support for icons, badges, and link-based tabs\n *\n * @see tabs-prd.md (Full requirements)\n * @see Tabs.types.ts (Zod schemas)\n * @see plan.md (Implementation approach)\n */\n\n// React 19.2 Activity API - may not be available in all builds\n// Import conditionally to support environments where Activity is unavailable\nimport {\n Activity as ReactActivity,\n type ReactNode,\n type Key,\n type ReactElement,\n} from 'react';\n\n// Activity component with fallback for environments where it's not available\n// The fallback simply renders children directly - no state preservation when Activity unavailable\n// Note: ActivityFallback doesn't actually preserve state; it's just a pass-through\nconst Activity = ReactActivity ?? function ActivityFallback({\n children,\n mode,\n}: {\n children: ReactNode;\n mode: 'visible' | 'hidden';\n}): ReactElement {\n // When Activity is not available, just render children directly\n // mode is ignored in the fallback\n return <div data-activity-mode={mode}>{children}</div>;\n};\nimport {\n Tabs as AriaTabs,\n TabList as AriaTabList,\n Tab as AriaTab,\n TabPanel as AriaTabPanel,\n composeRenderProps,\n type Key as AriaKey,\n} from 'react-aria-components';\nimport { cva } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport type {\n TabsProps,\n TabListProps,\n TabProps,\n TabPanelProps,\n} from './Tabs.types';\n\n// ============================================================================\n// CVA Variants\n// ============================================================================\n\n/**\n * TabList CVA variants\n *\n * @see PRD.md FR-002 (TabList Requirements)\n * @see PRD.md DS-001 (Design System - Layout)\n */\nexport const tabListVariants = cva(\n // Base styles\n [\n 'inline-flex items-center justify-center rounded-md p-1',\n 'bg-[var(--accent-background)] text-[var(--menu-muted)]',\n ],\n {\n variants: {\n orientation: {\n horizontal: 'h-10 flex-row gap-0',\n vertical: 'h-auto flex-col w-full gap-1',\n },\n },\n defaultVariants: {\n orientation: 'horizontal',\n },\n }\n);\n\n/**\n * Tab CVA variants\n *\n * @see PRD.md FR-003 (Tab Requirements)\n * @see PRD.md DS-002 (Design System - Tab Styling)\n * @see PRD.md AR-001 (Accessibility - 44×44px touch targets)\n */\nexport const tabVariants = cva(\n // Base styles\n [\n 'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-sm',\n 'px-3 py-1.5 text-sm font-medium',\n 'ring-offset-[var(--content-background)] transition-all',\n 'focus-visible:outline-none focus-visible:ring-2',\n 'focus-visible:ring-[var(--ring)] focus-visible:ring-offset-2',\n // States via data attributes\n 'data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n 'data-[selected]:bg-[var(--content-background)] data-[selected]:text-[var(--content-foreground)]',\n 'data-[selected]:shadow-sm',\n // WCAG 2.2 AAA: 44×44px minimum touch target\n 'min-h-[44px]',\n ],\n {\n variants: {\n orientation: {\n horizontal: '',\n vertical: 'w-full justify-start',\n },\n },\n defaultVariants: {\n orientation: 'horizontal',\n },\n }\n);\n\n/**\n * TabPanel CVA variants\n *\n * @see PRD.md FR-004 (TabPanel Requirements)\n */\nexport const tabPanelVariants = cva(\n [\n 'mt-2 ring-offset-[var(--content-background)]',\n 'focus-visible:outline-none focus-visible:ring-2',\n 'focus-visible:ring-[var(--ring)] focus-visible:ring-offset-2',\n ],\n {\n variants: {},\n defaultVariants: {},\n }\n);\n\n// ============================================================================\n// Components\n// ============================================================================\n\n/**\n * Tabs Root Component\n *\n * Container for tabbed interface. Manages selection state and provides\n * context to child components.\n *\n * @see PRD.md FR-001 (Compound Component Pattern)\n * @see PRD.md FR-012 (Controlled Mode)\n * @see PRD.md FR-013 (Uncontrolled Mode)\n *\n * @example\n * // Uncontrolled\n * <Tabs defaultSelectedKey=\"tab1\">\n * <TabList aria-label=\"Navigation\">\n * <Tab id=\"tab1\">Tab 1</Tab>\n * <Tab id=\"tab2\">Tab 2</Tab>\n * </TabList>\n * <TabPanel id=\"tab1\">Content 1</TabPanel>\n * <TabPanel id=\"tab2\">Content 2</TabPanel>\n * </Tabs>\n *\n * @example\n * // Controlled\n * <Tabs selectedKey={selected} onSelectionChange={setSelected}>\n * ...\n * </Tabs>\n */\nfunction TabsRoot({\n children,\n selectedKey,\n defaultSelectedKey,\n onSelectionChange,\n orientation = 'horizontal',\n keyboardActivation = 'automatic',\n isDisabled = false,\n disabledKeys,\n className,\n ...props\n}: TabsProps) {\n return (\n <AriaTabs\n selectedKey={selectedKey}\n defaultSelectedKey={defaultSelectedKey}\n onSelectionChange={onSelectionChange as (key: Key) => void}\n orientation={orientation}\n keyboardActivation={keyboardActivation}\n isDisabled={isDisabled}\n disabledKeys={disabledKeys as Iterable<AriaKey> | undefined}\n className={cn(className)}\n {...props}\n >\n {children}\n </AriaTabs>\n );\n}\n\nTabsRoot.displayName = 'Tabs';\n\n/**\n * TabList Component\n *\n * Container for tab buttons. Uses roving tabindex for keyboard navigation.\n * Receives orientation from parent Tabs via React Aria context.\n *\n * @see PRD.md FR-002 (TabList Requirements)\n * @see PRD.md AR-001 (ARIA Requirements)\n */\nfunction TabListComponent({\n children,\n className,\n ...props\n}: TabListProps) {\n return (\n <AriaTabList\n className={composeRenderProps(className, (className, renderProps) =>\n cn(\n tabListVariants({ orientation: renderProps.orientation }),\n className\n )\n )}\n {...props}\n >\n {children}\n </AriaTabList>\n );\n}\n\nTabListComponent.displayName = 'TabList';\n\n/**\n * Tab Component\n *\n * Individual tab button. Can render as button or anchor (when href provided).\n * Supports icons and badges as children.\n *\n * @see PRD.md FR-003 (Tab Requirements)\n * @see PRD.md FR-007 (Disabled States)\n * @see PRD.md FR-013 (Icon Support)\n * @see PRD.md FR-014 (Link-based Tabs)\n */\nfunction TabComponent({\n children,\n id,\n isDisabled = false,\n href,\n target,\n rel,\n download,\n className,\n ...props\n}: TabProps) {\n // Warn if icon-only tab without aria-label\n if (process.env.NODE_ENV !== 'production') {\n const hasTextContent =\n typeof children === 'string' ||\n (Array.isArray(children) &&\n children.some((child) => typeof child === 'string'));\n\n if (!hasTextContent && !props['aria-label']) {\n console.warn(\n 'Tabs: Icon-only tabs should have an aria-label for accessibility.'\n );\n }\n }\n\n return (\n <AriaTab\n id={id}\n isDisabled={isDisabled}\n href={href}\n target={target}\n rel={rel}\n download={download}\n className={composeRenderProps(className, (className) =>\n cn(tabVariants(), className)\n )}\n {...props}\n >\n {children}\n </AriaTab>\n );\n}\n\nTabComponent.displayName = 'Tab';\n\n/**\n * TabPanel Component\n *\n * Content panel associated with a tab. Only the selected panel is visible.\n * Supports preserveState for React Activity state preservation.\n *\n * @see PRD.md FR-004 (TabPanel Requirements)\n * @see PRD.md FR-015 (Force Mount Panels)\n * @see PRD.md FR-016 (React Activity State Preservation)\n *\n * @example\n * // Default behavior - content unmounts when hidden\n * <TabPanel id=\"tab1\">Content</TabPanel>\n *\n * @example\n * // Legacy force mount - keeps content in DOM\n * <TabPanel id=\"tab1\" shouldForceMount>Form with state</TabPanel>\n *\n * @example\n * // React Activity - preserves state with proper effect cleanup\n * <TabPanel id=\"tab1\" preserveState>\n * <FormWithDraft />\n * </TabPanel>\n */\nfunction TabPanelComponent({\n children,\n id,\n shouldForceMount = false,\n preserveState = false,\n className,\n ...props\n}: TabPanelProps) {\n // preserveState takes precedence - both enable force mounting\n const forceMount = preserveState || shouldForceMount;\n\n // If children is a render function (for dynamic content based on selection state),\n // we need to use the render props pattern\n if (typeof children === 'function') {\n return (\n <AriaTabPanel\n id={id}\n shouldForceMount={forceMount}\n className={composeRenderProps(className, (className) =>\n cn(tabPanelVariants(), className)\n )}\n {...props}\n >\n {(renderProps) => {\n // React Aria TabPanelRenderProps includes: state, isInert\n // We derive isSelected from state - if state is undefined, panel is selected\n const isSelected = !renderProps.isInert;\n const content = (\n children as (renderProps: { isSelected: boolean }) => ReactNode\n )({ isSelected });\n\n if (preserveState) {\n return (\n <Activity mode={isSelected ? 'visible' : 'hidden'}>\n {content}\n </Activity>\n );\n }\n\n return content;\n }}\n </AriaTabPanel>\n );\n }\n\n // For static children (not a function), render directly\n // If preserveState is enabled, wrap in Activity\n if (preserveState) {\n return (\n <AriaTabPanel\n id={id}\n shouldForceMount={forceMount}\n className={composeRenderProps(className, (className) =>\n cn(tabPanelVariants(), className)\n )}\n {...props}\n >\n {(renderProps) => {\n const isSelected = !renderProps.isInert;\n return (\n <Activity mode={isSelected ? 'visible' : 'hidden'}>\n {children}\n </Activity>\n );\n }}\n </AriaTabPanel>\n );\n }\n\n // Default: render static children directly\n return (\n <AriaTabPanel\n id={id}\n shouldForceMount={forceMount}\n className={composeRenderProps(className, (className) =>\n cn(tabPanelVariants(), className)\n )}\n {...props}\n >\n {children}\n </AriaTabPanel>\n );\n}\n\nTabPanelComponent.displayName = 'TabPanel';\n\n// ============================================================================\n// Exports\n// ============================================================================\n\n/**\n * Direct named exports (not Object.assign compound pattern)\n *\n * Tabs follows React Aria's direct export pattern because:\n * - Simpler structure (only 4 components vs Dialog's 9)\n * - Better tree-shaking with named exports\n * - Clearer imports: import { Tabs, TabList, Tab, TabPanel } from '...'\n *\n * @see plan.md \"Why Direct Named Exports (Not Object.assign)?\"\n */\nexport const Tabs = TabsRoot;\nexport const TabList = TabListComponent;\nexport const Tab = TabComponent;\nexport const TabPanel = TabPanelComponent;\n\n// Re-export types for convenience\nexport type { TabsProps, TabListProps, TabProps, TabPanelProps };\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, Key } from 'react';\n\n/**\n * Tab orientation schema\n *\n * @see PRD.md FR-005 (Orientation Support)\n */\nexport const TabsOrientationSchema = z.enum(['horizontal', 'vertical']);\nexport type TabsOrientation = z.infer<typeof TabsOrientationSchema>;\n\n/**\n * Keyboard activation mode schema\n *\n * @see PRD.md FR-006 (Keyboard Activation Modes)\n */\nexport const TabsKeyboardActivationSchema = z.enum(['automatic', 'manual']);\nexport type TabsKeyboardActivation = z.infer<typeof TabsKeyboardActivationSchema>;\n\n/**\n * Key schema for tab identification\n * Supports both string and number keys per React Aria convention\n */\nexport const KeySchema = z.union([z.string(), z.number()]);\n\n/**\n * Tabs root component props schema\n *\n * @see PRD.md FR-001 (Compound Component Pattern)\n * @see PRD.md FR-012 (Controlled Mode)\n * @see PRD.md FR-013 (Uncontrolled Mode)\n */\nexport const TabsPropsSchema = BaseComponentPropsSchema.extend({\n // Controlled mode: selected tab key\n selectedKey: KeySchema.optional(),\n\n // Uncontrolled mode: default selected tab key\n defaultSelectedKey: KeySchema.optional(),\n\n // Selection change handler\n onSelectionChange: z.custom<(key: Key) => void>().optional(),\n\n // Orientation: horizontal or vertical layout\n orientation: TabsOrientationSchema.optional().default('horizontal'),\n\n // Keyboard activation: automatic (arrows select) or manual (arrows focus, Enter selects)\n keyboardActivation: TabsKeyboardActivationSchema.optional().default('automatic'),\n\n // Disable all tabs\n isDisabled: z.boolean().optional().default(false),\n\n // Keys of tabs to disable individually\n disabledKeys: z.array(KeySchema).optional(),\n\n // Children: TabList and TabPanel components\n children: z.custom<ReactNode>(),\n});\n\nexport type TabsProps = z.infer<typeof TabsPropsSchema>;\n\n/**\n * TabList component props schema\n *\n * @see PRD.md FR-002 (TabList Requirements)\n * @see PRD.md AR-001 (ARIA Requirements)\n */\nexport const TabListPropsSchema = BaseComponentPropsSchema.extend({\n // Accessible label (required for accessibility if no aria-labelledby)\n 'aria-label': z.string().optional(),\n\n // Reference to labelling element\n 'aria-labelledby': z.string().optional(),\n\n // Children: Tab components\n children: z.custom<ReactNode>(),\n});\n\nexport type TabListProps = z.infer<typeof TabListPropsSchema>;\n\n/**\n * Tab component props schema\n *\n * @see PRD.md FR-003 (Tab Requirements)\n * @see PRD.md FR-007 (Disabled States)\n * @see PRD.md FR-014 (Link-based Tabs)\n */\nexport const TabPropsSchema = BaseComponentPropsSchema.extend({\n // Unique identifier for the tab (required)\n id: KeySchema,\n\n // Disable this specific tab\n isDisabled: z.boolean().optional().default(false),\n\n // Link tab: URL for navigation-style tabs\n href: z.string().optional(),\n\n // Link tab: target attribute\n target: z.string().optional(),\n\n // Link tab: rel attribute\n rel: z.string().optional(),\n\n // Link tab: download attribute\n download: z.union([z.string(), z.boolean()]).optional(),\n\n // Tab content (text, icons, badges)\n children: z.custom<ReactNode>(),\n});\n\nexport type TabProps = z.infer<typeof TabPropsSchema>;\n\n/**\n * TabPanel component props schema\n *\n * @see PRD.md FR-004 (TabPanel Requirements)\n * @see PRD.md FR-015 (Force Mount Panels)\n * @see PRD.md FR-016 (React Activity State Preservation)\n */\nexport const TabPanelPropsSchema = BaseComponentPropsSchema.extend({\n // Unique identifier matching a Tab id (required)\n id: KeySchema,\n\n // Legacy: Force panel to stay in DOM when hidden\n // Use preserveState instead for proper effect cleanup\n shouldForceMount: z.boolean().optional().default(false),\n\n // React 19.2 Activity: Preserve state with proper effect cleanup\n // When true, wraps content in <Activity> component\n // Effects are cleaned up when hidden, restored when visible\n preserveState: z.boolean().optional().default(false),\n\n // Panel content\n children: z.custom<ReactNode>(),\n});\n\nexport type TabPanelProps = z.infer<typeof TabPanelPropsSchema>;\n\n/**\n * Scroll arrow direction for overflow handling\n *\n * @see PRD.md FR-010 (Overflow Handling)\n */\nexport const ScrollArrowDirectionSchema = z.enum(['left', 'right', 'up', 'down']);\nexport type ScrollArrowDirection = z.infer<typeof ScrollArrowDirectionSchema>;\n\n/**\n * Internal props for scroll arrow buttons\n * Used by overflow handling implementation\n */\nexport const ScrollArrowPropsSchema = BaseComponentPropsSchema.extend({\n // Scroll direction\n direction: ScrollArrowDirectionSchema,\n\n // Disable when can't scroll further\n isDisabled: z.boolean().optional().default(false),\n\n // Click handler for scrolling\n onPress: z.custom<() => void>(),\n\n // Accessible label\n 'aria-label': z.string(),\n});\n\nexport type ScrollArrowProps = z.infer<typeof ScrollArrowPropsSchema>;\n"]}
@@ -9,33 +9,8 @@
9
9
  * @see constitution.md Principle IV (Accessibility First)
10
10
  */
11
11
  import './TextField.css';
12
- /**
13
- * Input variant styles using CVA
14
- * Adapts ShadCN Input styling with Themis semantic tokens
15
- */
16
- export declare const inputVariants: (props?: ({
17
- size?: "default" | "sm" | "lg" | null | undefined;
18
- state?: "success" | "default" | "readonly" | "error" | "disabled" | null | undefined;
19
- } & import("class-variance-authority/types").ClassProp) | undefined) => string;
20
- /**
21
- * Label variant styles using CVA
22
- * Adapts ShadCN Label styling with Themis semantic tokens
23
- */
24
- export declare const labelVariants: (props?: ({
25
- state?: "default" | "error" | "disabled" | null | undefined;
26
- } & import("class-variance-authority/types").ClassProp) | undefined) => string;
27
- /**
28
- * Description text variant styles
29
- */
30
- export declare const descriptionVariants: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
31
- /**
32
- * Error message variant styles
33
- */
34
- export declare const errorMessageVariants: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
35
- /**
36
- * Success message variant styles
37
- */
38
- export declare const successMessageVariants: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
12
+ import { inputVariants, labelVariants, descriptionVariants, errorMessageVariants, successMessageVariants } from './TextField.styles';
13
+ export { inputVariants, labelVariants, descriptionVariants, errorMessageVariants, successMessageVariants, };
39
14
  /**
40
15
  * TextFieldLabel Sub-component
41
16
  * Styled label with optional required indicator
@@ -84,13 +59,6 @@ export declare const TextFieldSuccess: import("react").ForwardRefExoticComponent
84
59
  * TextField Component
85
60
  * Fully accessible text input with React Aria and themed styling
86
61
  *
87
- * Composition:
88
- * - TextField (container with React Aria context)
89
- * - Label (optional, linked to input)
90
- * - Input (text input element)
91
- * - Description (optional helper text)
92
- * - ErrorMessage (optional, shown when invalid)
93
- *
94
62
  * @example
95
63
  * <TextField
96
64
  * label="Email"
@@ -98,13 +66,6 @@ export declare const TextFieldSuccess: import("react").ForwardRefExoticComponent
98
66
  * isRequired
99
67
  * type="email"
100
68
  * />
101
- *
102
- * @example
103
- * <TextField
104
- * label="Username"
105
- * errorMessage="Username is required"
106
- * isInvalid
107
- * />
108
69
  */
109
70
  export declare const TextField: import("react").ForwardRefExoticComponent<Partial<{
110
71
  size: "default" | "sm" | "lg";
@@ -114,6 +75,7 @@ export declare const TextField: import("react").ForwardRefExoticComponent<Partia
114
75
  suffixSize: number;
115
76
  expandOnFocus: boolean;
116
77
  collapsedWidth: string;
78
+ isIconHidden: boolean;
117
79
  className?: string | undefined;
118
80
  children?: any;
119
81
  id?: string | undefined;
@@ -145,7 +107,9 @@ export declare const TextField: import("react").ForwardRefExoticComponent<Partia
145
107
  prefix?: any;
146
108
  suffix?: any;
147
109
  showPasswordToggle?: boolean | undefined;
148
- }> & Omit<import("react-aria-components").TextFieldProps, "className" | "children" | "id" | "aria-label" | "aria-labelledby" | "aria-describedby" | "aria-live" | "aria-hidden" | "data-testid" | "pattern" | "type" | "isDisabled" | "value" | "autoFocus" | "name" | "size" | "label" | "autoComplete" | "defaultValue" | "maxLength" | "minLength" | "prefix" | "isReadOnly" | "isInvalid" | "isRequired" | "description" | "errorMessage" | "successMessage" | "isValid" | "placeholder" | "patternDescription" | "disableCopyPaste" | "suffix" | "prefixSize" | "suffixSize" | "expandOnFocus" | "collapsedWidth" | "showPasswordToggle"> & {
110
+ onSubmit?: ((value: string) => void) | undefined;
111
+ onClear?: (() => void) | undefined;
112
+ }> & Omit<import("react-aria-components").TextFieldProps, "className" | "children" | "id" | "aria-label" | "aria-labelledby" | "aria-describedby" | "aria-live" | "aria-hidden" | "data-testid" | "pattern" | "type" | "isDisabled" | "value" | "autoFocus" | "name" | "onSubmit" | "size" | "label" | "autoComplete" | "defaultValue" | "maxLength" | "minLength" | "prefix" | "isReadOnly" | "isInvalid" | "isRequired" | "description" | "errorMessage" | "onClear" | "successMessage" | "isValid" | "placeholder" | "patternDescription" | "disableCopyPaste" | "suffix" | "prefixSize" | "suffixSize" | "expandOnFocus" | "collapsedWidth" | "showPasswordToggle" | "isIconHidden"> & {
149
113
  onChange?: (value: string) => void;
150
114
  validate?: (value: string) => string | undefined | null;
151
115
  prefix?: import("react").ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"TextField.d.ts","sourceRoot":"","sources":["../../../src/elements/TextField/TextField.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,OAAO,iBAAiB,CAAC;AAsBzB;;;GAGG;AACH,eAAO,MAAM,aAAa;;;8EAyBzB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,aAAa;;8EAezB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,oFAE/B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,oFAEhC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,oFAElC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc;;;;;uJAY1B,CAAC;AAIF;;;GAGG;AACH,eAAO,MAAM,cAAc;;;;uIAU1B,CAAC;AAIF;;;GAGG;AACH,eAAO,MAAM,oBAAoB;;;8HAahC,CAAC;AAIF;;;;GAIG;AACH,eAAO,MAAM,cAAc;;;8HAY1B,CAAC;AAIF;;;GAGG;AACH,eAAO,MAAM,gBAAgB;;;8HAa5B,CAAC;AAIF;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kDA2VrB,CAAC;AAIF,OAAO,EAAE,aAAa,IAAI,sBAAsB,EAAE,aAAa,IAAI,sBAAsB,EAAE,CAAC"}
1
+ {"version":3,"file":"TextField.d.ts","sourceRoot":"","sources":["../../../src/elements/TextField/TextField.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,OAAO,iBAAiB,CAAC;AAqBzB,OAAO,EACL,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACvB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EACL,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,GACvB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc;;;;;uJAY1B,CAAC;AAIF;;;GAGG;AACH,eAAO,MAAM,cAAc;;;;uIAU1B,CAAC;AAIF;;;GAGG;AACH,eAAO,MAAM,oBAAoB;;;8HAahC,CAAC;AAIF;;;;GAIG;AACH,eAAO,MAAM,cAAc;;;8HAY1B,CAAC;AAIF;;;GAGG;AACH,eAAO,MAAM,gBAAgB;;;8HAa5B,CAAC;AAIF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kDAmTrB,CAAC;AAIF,OAAO,EAAE,aAAa,IAAI,sBAAsB,EAAE,aAAa,IAAI,sBAAsB,EAAE,CAAC"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * TextField Custom Hooks
3
+ * Extracted from TextField.tsx for separation of concerns
4
+ *
5
+ * These hooks encapsulate the behavioral logic for:
6
+ * - Expand on focus
7
+ * - Copy/paste protection
8
+ * - Password visibility toggle
9
+ */
10
+ import type { FocusEvent, ClipboardEvent } from 'react';
11
+ /**
12
+ * Hook: useExpandOnFocus
13
+ * Manages the expand-on-focus behavior where an input starts narrow
14
+ * and expands to full width when focused or when it has a value.
15
+ *
16
+ * @param expandOnFocus - Whether expand-on-focus is enabled
17
+ * @param collapsedWidth - CSS width when collapsed (e.g., '200px')
18
+ * @param value - Controlled value (if any)
19
+ * @param defaultValue - Default value (if any)
20
+ * @param userOnFocus - User-provided onFocus handler to call through
21
+ * @param userOnBlur - User-provided onBlur handler to call through
22
+ */
23
+ export declare function useExpandOnFocus({ expandOnFocus, collapsedWidth, value, defaultValue, userOnFocus, userOnBlur, }: {
24
+ expandOnFocus: boolean;
25
+ collapsedWidth: string;
26
+ value: string | undefined;
27
+ defaultValue: string | undefined;
28
+ userOnFocus: ((e: FocusEvent<HTMLInputElement>) => void) | undefined;
29
+ userOnBlur: ((e: FocusEvent<HTMLInputElement>) => void) | undefined;
30
+ }): {
31
+ handleFocus: (e: FocusEvent<HTMLInputElement>) => void;
32
+ handleBlur: (e: FocusEvent<HTMLInputElement>) => void;
33
+ inputWidth: string | undefined;
34
+ };
35
+ /**
36
+ * Hook: useCopyPasteProtection
37
+ * Manages copy/paste prevention with shake animation and screen reader announcements.
38
+ *
39
+ * @param disableCopyPaste - Whether copy/paste should be disabled
40
+ */
41
+ export declare function useCopyPasteProtection({ disableCopyPaste, }: {
42
+ disableCopyPaste: boolean;
43
+ }): {
44
+ isShaking: boolean;
45
+ screenReaderMessage: string;
46
+ handlePaste: (e: ClipboardEvent<HTMLInputElement>) => void;
47
+ };
48
+ /**
49
+ * Hook: usePasswordToggle
50
+ * Manages password show/hide toggle state and determines the actual input type.
51
+ *
52
+ * @param type - The input type ('text', 'email', 'password', etc.)
53
+ * @param showPasswordToggle - Whether the toggle button should be shown
54
+ */
55
+ export declare function usePasswordToggle({ type, showPasswordToggle, }: {
56
+ type: string;
57
+ showPasswordToggle: boolean | undefined;
58
+ }): {
59
+ showPassword: boolean;
60
+ actualType: string;
61
+ handlePasswordToggle: () => void;
62
+ };
63
+ //# sourceMappingURL=TextField.hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextField.hooks.d.ts","sourceRoot":"","sources":["../../../src/elements/TextField/TextField.hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAExD;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,aAAa,EACb,cAAc,EACd,KAAK,EACL,YAAY,EACZ,WAAW,EACX,UAAU,GACX,EAAE;IACD,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACrE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CACrE;qBAGqC,UAAU,CAAC,gBAAgB,CAAC;oBAO7B,UAAU,CAAC,gBAAgB,CAAC;;EAuBhE;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,EACrC,gBAAgB,GACjB,EAAE;IACD,gBAAgB,EAAE,OAAO,CAAC;CAC3B;;;qBAcqC,cAAc,CAAC,gBAAgB,CAAC;EAmBrE;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,kBAAkB,GACnB,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB,EAAE,OAAO,GAAG,SAAS,CAAC;CACzC;;;;EAeA"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * TextField Icon Components
3
+ * SVG icons for password toggle functionality
4
+ *
5
+ * Extracted from TextField.tsx to keep the main component file focused.
6
+ * These are module-level components to avoid re-creating on every render.
7
+ */
8
+ import type { ReactElement } from 'react';
9
+ /**
10
+ * Eye icon for "show password" state
11
+ * Rendered when the password is currently hidden
12
+ */
13
+ export declare const EyeIcon: () => ReactElement;
14
+ /**
15
+ * Eye-off icon for "hide password" state
16
+ * Rendered when the password is currently visible
17
+ */
18
+ export declare const EyeOffIcon: () => ReactElement;
19
+ //# sourceMappingURL=TextField.icons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextField.icons.d.ts","sourceRoot":"","sources":["../../../src/elements/TextField/TextField.icons.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAE1C;;;GAGG;AACH,eAAO,MAAM,OAAO,QAAO,YAe1B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,UAAU,QAAO,YAiB7B,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * TextField CVA Variant Styles
3
+ * Extracted from TextField.tsx for separation of concerns
4
+ *
5
+ * @see spec.md FR-009 to FR-014 (Accessibility Requirements - WCAG 2.2 AAA)
6
+ * @see React Aria TextField: https://react-spectrum.adobe.com/react-aria/TextField.html
7
+ * @see ShadCN Input: https://ui.shadcn.com/docs/components/input
8
+ * @see ShadCN Label: https://ui.shadcn.com/docs/components/label
9
+ */
10
+ /**
11
+ * Input variant styles using CVA
12
+ * Adapts ShadCN Input styling with Themis semantic tokens
13
+ */
14
+ export declare const inputVariants: (props?: ({
15
+ size?: "default" | "sm" | "lg" | null | undefined;
16
+ state?: "success" | "default" | "readonly" | "error" | "disabled" | null | undefined;
17
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
18
+ /**
19
+ * Label variant styles using CVA
20
+ * Adapts ShadCN Label styling with Themis semantic tokens
21
+ */
22
+ export declare const labelVariants: (props?: ({
23
+ state?: "default" | "error" | "disabled" | null | undefined;
24
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
25
+ /**
26
+ * Description text variant styles
27
+ */
28
+ export declare const descriptionVariants: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
29
+ /**
30
+ * Error message variant styles
31
+ */
32
+ export declare const errorMessageVariants: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
33
+ /**
34
+ * Success message variant styles
35
+ */
36
+ export declare const successMessageVariants: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
37
+ //# sourceMappingURL=TextField.styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextField.styles.d.ts","sourceRoot":"","sources":["../../../src/elements/TextField/TextField.styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH;;;GAGG;AACH,eAAO,MAAM,aAAa;;;8EAyBzB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,aAAa;;8EAezB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,oFAE/B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,oFAEhC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,oFAElC,CAAC"}
@@ -184,6 +184,9 @@ export declare const TextFieldPropsSchema: z.ZodObject<{
184
184
  expandOnFocus: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
185
185
  collapsedWidth: z.ZodDefault<z.ZodOptional<z.ZodString>>;
186
186
  showPasswordToggle: z.ZodOptional<z.ZodBoolean>;
187
+ isIconHidden: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
188
+ onSubmit: z.ZodOptional<z.ZodCustom<(value: string) => void, (value: string) => void>>;
189
+ onClear: z.ZodOptional<z.ZodCustom<() => void, () => void>>;
187
190
  }, z.core.$strip>;
188
191
  export type TextFieldProps = Partial<z.infer<typeof TextFieldPropsSchema>> & Omit<AriaTextFieldProps, keyof z.infer<typeof TextFieldPropsSchema>> & {
189
192
  onChange?: (value: string) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"TextField.types.d.ts","sourceRoot":"","sources":["../../../src/elements/TextField/TextField.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TextField.types.d.ts","sourceRoot":"","sources":["../../../src/elements/TextField/TextField.types.ts"],"names":[],"mappings":"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"}
@@ -1,23 +1,2 @@
1
- /* src/elements/TextField/TextField.css */
2
- @keyframes shake {
3
- 0%, 100% {
4
- transform: translateX(0);
5
- }
6
- 10%, 30%, 50%, 70%, 90% {
7
- transform: translateX(-4px);
8
- }
9
- 20%, 40%, 60%, 80% {
10
- transform: translateX(4px);
11
- }
12
- }
13
- .shake {
14
- animation: shake 400ms ease-in-out;
15
- }
16
- @media (prefers-reduced-motion: reduce) {
17
- .shake {
18
- animation: none;
19
- border-color: var(--destructive);
20
- transition: border-color 100ms;
21
- }
22
- }
1
+ @keyframes shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-4px)}20%,40%,60%,80%{transform:translate(4px)}}.shake{animation:shake .4s ease-in-out}@media(prefers-reduced-motion:reduce){.shake{animation:none;border-color:var(--destructive);transition:border-color .1s}}
23
2
  /*# sourceMappingURL=index.css.map */
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/TextField/TextField.css"],"sourcesContent":["/**\n * TextField Component Styles\n * Additional CSS for animations and effects\n */\n\n/* Shake animation for paste prevention (Phase 3) */\n@keyframes shake {\n 0%, 100% { transform: translateX(0); }\n 10%, 30%, 50%, 70%, 90% { transform: translateX(-4px); }\n 20%, 40%, 60%, 80% { transform: translateX(4px); }\n}\n\n.shake {\n animation: shake 400ms ease-in-out;\n}\n\n/* Respect reduced motion preference (WCAG 2.2) */\n@media (prefers-reduced-motion: reduce) {\n .shake {\n animation: none;\n /* Alternative: brief border color flash */\n border-color: var(--destructive);\n transition: border-color 100ms;\n }\n}\n"],"mappings":";AAMA,WAAW;AACT;AAAW,eAAW,WAAW;AAAI;AACrC;AAA0B,eAAW,WAAW;AAAO;AACvD;AAAqB,eAAW,WAAW;AAAM;AACnD;AAEA,CANW;AAOT,aAAW,MAAM,MAAM;AACzB;AAGA,QAAO,wBAAyB;AAC9B,GAZS;AAaP,eAAW;AAEX,kBAAc,IAAI;AAClB,gBAAY,aAAa;AAC3B;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../src/elements/TextField/TextField.css"],"sourcesContent":["/**\n * TextField Component Styles\n * Additional CSS for animations and effects\n */\n\n/* Shake animation for paste prevention (Phase 3) */\n@keyframes shake {\n 0%, 100% { transform: translateX(0); }\n 10%, 30%, 50%, 70%, 90% { transform: translateX(-4px); }\n 20%, 40%, 60%, 80% { transform: translateX(4px); }\n}\n\n.shake {\n animation: shake 400ms ease-in-out;\n}\n\n/* Respect reduced motion preference (WCAG 2.2) */\n@media (prefers-reduced-motion: reduce) {\n .shake {\n animation: none;\n /* Alternative: brief border color flash */\n border-color: var(--destructive);\n transition: border-color 100ms;\n }\n}\n"],"mappings":"AAMA,WAAW,MACT,MAAW,UAAW,UAAW,EAAI,CACrC,oBAA0B,UAAW,UAAW,KAAO,CACvD,gBAAqB,UAAW,UAAW,IAAM,CACnD,CAEA,CANW,MAOT,UAAW,MAAM,IAAM,WACzB,CAGA,OAAO,uBAAyB,QAC9B,CAZS,MAaP,UAAW,KAEX,aAAc,IAAI,eAClB,WAAY,aAAa,GAC3B,CACF","names":[]}